Mais Ruby: Símbolos (:coisas)

Uma das características mais confusas de Ruby são os símbolos, aquelas “variáveis” que aparecem com “:” antes dela, como no título do post. Em poucas palavras símbolos são, bem, símbolos (ou coisas…) que representam nomes e strings. Diferentemente de strings, cada símbolo é único no programa, não importando quantas vezes é usado. O código abaixo deve deixar mais clara essa diferença:

irb(main):003:0> a = "lauro"
=> "lauro"
irb(main):004:0> b = "lauro"
=> "lauro"
irb(main):005:0> a.object_id
=> -605889808
irb(main):006:0> b.object_id
=> -605900098
irb(main):007:0> a = :lauro
=> :lauro
irb(main):008:0> b = :lauro
=> :lauro
irb(main):009:0> a.object_id
=> 160658
irb(main):010:0> b.object_id
=> 160658
irb(main):011:0>

No código acima, as duas atribuições de strings criaram dois novos objetos, enquanto que no segundo caso, usando símbolos, apenas um objeto é criado.

Essa característica de um símbolo ser único em toda a execução é bastante útil em quando uma string será utilizada várias vezes. Usando símbolos, o consumo de memória pode ser drasticamente reduzido, uma vez que você estará usando o mesmo objeto, sem necessidade de crias várias cópias. Para converter entre strings e símbolos, podem ser usados os métodos to_sym e to_s.

Mais informações:  Understanding Ruby Symbols

Anúncios

Máquina Minsky em Ruby

Hoje pela manhã e agora à noite implementei uma versão bem simples de uma máquina de Minsky. Foram apenas alguns minutos e apenas um suporte bem simples (mas completo) está funcionando, incluindo um método step, que executa apenas uma instrução a cada chamada (O método run executa todos os comandos até atingir uma instrução de parada.).

Uma máquina de Minsky é um dispositivo teórico inventado pelo matemático Marvin Minsky,  e consiste num banco de registradores que podem ser operados a partir de 3 operações básicas: Soma, Subtração e Suspender (Halt). Mais informações no link acima, que também mostra (informalmente) como uma máquina de Minsky é equivalente a uma máquina de Turing.

Link para o código

Problemas ao acessar a porta paralela no Qemu

Marcelo idealizou e eu o estou ajudando no desenvolvimento de um programinha em Python para visualizar os dados enviados e recebidos pelas portas serial e paralela de uma imagem do FreeDOS rodando no QEmu.

O programa está quase usável. A parte da porta serial está pronta mas em relação à paralea estamos (estou) tendo problemas para conseguir acessar os dados de fora do QEmu. Tentei redirecionar para arquivo, console, tcp e nada. No caso do TCP (Que é o mesmo que estamos usando para a serial), o QEmu simplesmente some, apenas às vezes deixando a mensagem de falha de segmentação…

Alguma sugestão?

Bitlbee – Acesse MSN, Jabber via IRC

O Bitlbee é um programa que serve de gateway entre seu cliente IRC e outras redes de mensagens instantâneas. Ou seja, você pode usar o mIRC, XChat ou qualquer cliente IRC para acessar MSN, Jabber, ICQ. Ele funciona como um servidor rodando em segundo plano, no qual você conecta e configura as contas. Muito útil nesses tempos de emoticons animados…

Comandos básicos (Todos sem aspas):

  • register “password” – Cria uma senha de acesso ao programa
  • account list – Lista as contas cadastradas (MSN, Jabber, etc…)
  • account add “protocol” “login” “password” [“server”] – Cadastra uma conta (O item servidor é opcional)
  • account login “id” – Entra numa conta, onde “id” é o número correspondente à conta mostrado pelo comando “list”.

Mini-tutorial em PDF

Criando pacotes Ruby com o New Gem Generator

Usando o New Gem Generator, o trabalho de produzir novos pacotes “gem” praticamente desaparece. Há um pequeno tutorial nesse link, mas aqui vai o “básico do básico”:

A sintaxe básica é “newgem -b app1[,app2…] pkg_name“, onde appX é o nome dos executáveis e pkg_name é o nome do pacote. Após esse comando a estrutura de diretório e arquivos é criada (Rakefile, etc…). No diretório bin estarão os executáveis.

Quando estiver pronto para empacotar, basta o comando rake package e o .gem (e opcionalmente um .tgz) será criado no diretório pkg.

Pronto, agora seu programa já pode ser instalado usando o gem! 🙂

Google Docs lançado

Depois da compra do YouTube, o Google lança o Google Docs, uma versão unificada do Writely e do Google Spreadsheets. Ao tentar acessar o domínio de uma dessas duas aplicações, o usuário é levado à tela de controle do Google Docs, que mostra os documentos (textos e planilhas) ativos, de maneira semelhante à tela de controle do Writely, mas com uma skin semelhante à do Spreadsheets.

Aparenta ser um passo sensato, aproximando duas aplicações “gêmeas”.

Fonte: Read/Write Web e Tech Crunch