Bom, acho que era isto, desculpem pelo tempo sem postar, é que a semana foi corrida com o Curso de Rails, mas agora vou voltar a postar com mais frequência!
Amanha ou segunda devo escrever alguma coisa sobre o Curso, que na minha opinião foi bem legal, acho que todos os alunos aproveitaram bastante! (Hoje não vou escrever mais por que é meu aniversário de casamento e tenho que dar mais atenção para a esposa se eu quiser chegar no segundo aniversário
)
Outra coisa, vocês acham úteis estas coletâneas de links que posto de vez em quando?
Tags: Dia a Dia, dia-dia, Java, Java EE, Mobile, produtividade, Ruby
Eu ja estava pensando em fazer um exemplo assim a algum tempo, mas sairam na minha frente ![]()
então segue o link para o excelente post sobre como passar trabalho usando JPA e não ActiveRecord em sua aplicação Rails:
http://weblogs.java.net/blog/bleonard/archive/2007/09/rails_and_jpa_i.html
Ou seja, quase tudo o que eu preciso em quase todos os lugares que eu estiver (nos outros ainda preciso do note mesmo
)
Se gostaram da dica, é só dar uma passada em PortableApps.com
Estes exemplos são baseados em exemplos que mostrei ontem durante o curso de Rails, e mostram bem o que não se deve fazer com Ruby (fora sobrescrever o método “+” de um Fixnum para que ele calcule “-”).
Um destes exemplos acho até que o Thiago ja postou no RubyOnBr ontem ![]()
Mas seguem eles com algumas explicações …
def ambiguo puts "teste" end => nil ambiguo teste => nil ambiguo = 5 => 5 ambiguo => 5 ambiguo() teste => nil
Primeiro definimos um método de nome “ambiguo”, e logo depois chamamos este método para ter certeza que esta tudo bem, depois definimos uma variável de mesmo nome, e toda vez que escrevemos apenas “ambiguo” o Ruby lê o valor da variável, pois é uma variável de escopo local e tem precedência na tabela de localização …
Mas logo depois, tentamos novamente chamar o método passando parâmetro nenhum “()”, e o Ruby sabe que uma variável não pode receber parâmetros (OK, exceto no caso de uma Proc, mas vamos deixar isto para mais adiante), então ele traduz o comando “ambiguo()” para algo parecido com:
if self.respond_to? "ambiguo"
self.send("ambiguo")
else
ambiguo.call
end
Neste caso ja podemos também ver o que aconteceria se o exemplo fosse feito com uma proc, ela só seria chamada caso não existisse o método, para chamar a proc, precisaríamos digitar algo como “ambiguo.call”
Este tipo de situação só é possível por que no Ruby é impossível chamar um método de um objeto como acontece na maior parte das linguagens, o que acontece é que o Ruby manda mensagens para os Objetos
Mas podemos também complicar um pouco mais a história …
Vejam o exemplo abaixo, que mostra mais ou menos a mesma coisa que antes mais complicando um pouco mais a leitura, pois passa a variável “ambiguo” como parâmetro para a mensagem de nome “ambiguo”
irb(main):008:0> def ambiguo(par)
irb(main):009:1> puts %Q|só imprime #{par}|
irb(main):010:1> end
=> nil
irb(main):011:0> ambiguo "teste"
só imprime teste
=> nil
irb(main):012:0> ambiguo = "mesmo nome"
=> "mesmo nome"
irb(main):013:0> ambiguo ambiguo
só imprime mesmo nome
=> nil
irb(main):014:0>
Agora vamos passar para a parte realmente maluca ![]()
Vejam este exemplo …
irb(main):008:0>class Teste
irb(main):008:0> def qualquer(param)
irb(main):008:0> %Q{param = #{param}}
irb(main):008:0> end
irb(main):008:0>end
=> nil
irb(main):008:0>t = Teste.new
=> #<Teste:0x2e675c4>
irb(main):008:0>t.qualquer "coisa"
=> "param = coisa"
irb(main):008:0>Teste = "coisa"
(irb):21: warning: already initialized constant Teste
=> "coisa"
irb(main):008:0>t.qualquer Teste
=> "param = coisa"
irb(main):008:0>t1 = Teste.new
NoMethodError: undefined method 'new' for "coisa":String
from (irb):23
irb(main):008:0>class Teste
irb(main):008:0>end
TypeError: Teste is not a class
from (irb):24
irb(main):008:0>Teste = t.class
(irb):26: warning: already initialized constant Teste
=> Teste
irb(main):008:0>t1 = Teste.new
=> #<Teste:0x2e59b04>
Agora deem uma olhada neste código …
Principalmente os erros depois de “t1 = Teste.new” e “class Teste end”
O que isto quer dizer? que os nomes de classes que tanto utilizamos no Ruby, são apenas constantes que apontam para o objeto que representa aquelas classes …
O que prova mais uma vez, que tudo no Ruby são objetos, até mesmo as classes são objetos
Bom, acho que era isto por enquanto, se alguem conseguir uma explicação mais clara destes exemplos seja bem vindo
Tags: Ruby
Depois de ler este post no Grupo e Usuárias de Programadores, e postar um comentário corrigindo alguns pontos do post, eu resolvi fazer o test de nerdice indicado no final do post, e como eu ja imaginava, o resultado não podia ser muito diferente disto ![]()

Bom, daqui a 15 minutos to indo para o local do curso,
se alguem ainda quiser se inscrever, tem 1h antes do inicio do curso ![]()
http://www.techoffice.com.br/ruby/flyer_ruby.htm
Só o manual do curso tem quase 80+ páginas (só pra terem uma idéia do conteúdo
)
Até daqui a pouco então!
Tags: Ruby
É isto mesmo que vocês leram no título …
Ontem a noite, ocorreu aqui em Porto Alegre, o primeiro encontro informal do Grupo Rails-RS (acho que vai ser este mesmo o nome), no meio de muito chop e papo furado, as esposas e namoradas começaram a conversar (Eu e mais 3 fomos acompanhados com as respectivas), e como elas não estavam entendendo muito bem do que conversávamos (Começamos com Ruby, Rails, caimos no Python, um pouco de Haskel, IO, Delphi, Bancos de dados, Sistemas Operacionais, enfim papos de Nerds), elas formaram um grupo próprio:
O Grupo de Usuárias de Programadores.
O blog tem tudo para ser no mínimo engraçado
Tags: Diversão


E claro que a qualquer momento isto pode ser alterado utilizando o gerenciador de plugins.
Não sei se é por que eu estou acostumado com o Mundo Java EE, mas uma IDE para Ruby com um code completion excelente, suporte a break points com inspeção de variáveis, praticamente todos os comandos integrados na IDE, …
Para mim parece excelente ![]()
(Tudo bem que tenho utilizado GEdit ou Komodo Edit par programar mesmo, mas quando o bixo pega corro pro NetBeans, e só não uso ele fulltime por que tenho pouca memória no meu notebook, espero que isto mude até o inicio do próximo ano
)
Até que o tal do Twitter é bem legal ![]()
O Marcus Sá, acabou de ganhar o livro Desenvolvendo Aplicações com UML por escrever este tutorial:
DLS é uma maneira simular no ruby outra linguagem. Ou seja, uma sintaxe diferente para um problema em mente…
Por exemplo, digamos que existe algo que você faz diversas vezes… Como uma espécie de mapa… Eu desenvolvi esse código para o curso que estou fazendo na e – Genial, que por sinal está ótimo… Ai vai uma breve descrição…
Farei um mapa para chegar até a minha casa…
Mapa Minha Casa
- “caminho “Virar a direita”,” no Posto “
- caminho “Seguir reto”,” ate o Campo do Barnabé “
- caminho “Virar a esquerda”,” na Madeireira “
- distancia “quatro Kilometros”
- tempo “30 minutos”
Achei bem legal o tutorial dele, eu apenas faria algumas modificações no exemplo, mais ou menos assim:
class Mapa
#Inicialização da classe, recebe o nome do mapa e um bloco com os dados dele
def initialize(nome, &bloco)
#Atribui o nome do mapa
@nome = nome
#Atribui os dados do mapa
@dados = {
#Note que poderemos ter mais de uma instrução, estão criaremos um Hash
:instrucao => {},
# Os demais campos do bloco dados serão campos normais
:distancia => nil,
:tempo => nil
}
#Invoca o bloco como se o mesmo fosse parte de um instancia de objeto
instance_eval(&bloco)
end
def virar(direcao,onde)
caminho("virar a #{direcao}"," n(o/a) #{onde}")
end
def seguir(opcoes = {})
if opcoes[:ate]
caminho "seguir", "até #{opcoes[:ate]}"
elsif opcoes[:por]
caminho "seguir", "por #{opcoes[:por]}"
end
end
# Atribui os dados
def caminho(acao, instrucao)
@dados[:instrucao][acao] = instrucao
end
def distancia(distanciakm)
@dados[:distancia] = distanciakm
end
def tempo(tempomin)
@dados[:tempo] = tempomin
end
# Exibição dos dados
def to_s
resultado = ""
resultado << "Mapa #{@nome}\nCaminho:\n"
@dados[:instrucao].each do |ordem|
resultado << "\t - #{ordem}\n"
end
resultado << "Distancia: #{@dados[:distancia]}\n"
resultado << "Tempo: #{@dados[:tempo]}\n"
resultado
end
end
# Instancia a classe Mapa
def mapa(nome, &bloco)
Mapa.new(nome, &bloco)
end
# Monta o mapa "Minha Casa"
m = mapa "Minha Casa" do
virar :direita, "no posto"
seguir :ate => "o campo grande"
virar :esquerda, "madeireira"
seguir :por => "aproximadamente 15 kilometros"
virar :direita, "frente do bar do zé"
distancia "20 Kilometros"
tempo "30 minutos"
# Mostra o conteúdo da string resultado que é retorno de to_s
puts to_s
end
Percebam os métodos especializados novos que foram adicionados …
A idéia de uma DLS é que seja possível explicar facilmente utilizando jargões do domínio ao qual aquela DSL se aplica, por exemplo, para melhorar mais ainda este exemplo a utilização dele teria que ser mais ou menos assim:
# Monta o mapa "Minha Casa" m = mapa "Minha Casa" do virar :direita, "posto", 500.metros seguir :ate => "o campo grande", :por => 200.metros virar :esquerda, "madeireira" seguir :por => 15.kilometros virar :direita, "frente do bar do zé" # Mostra o conteúdo da string resultado que é retorno de to_s puts to_s end
Neste caso fora as referencias a locais, todo o resto seriam comandos da linguagem especifica para montagem de mapas, mas fora esta pequena alteração no exemplo, o tutorial ficou muito bom, o livro vai ser entregue na sexta feira no encontro dos nerds de RoR aqui de porto alegre
PS.: Espero que o Shoes veja isto aqui e diga que eu to falando besteira, assim eu aprendo um pouco mais sobre DSL
PS2.: Este foi o primeiro vou deixar assim, mas se vocês prestarem atenção, os tutoriais escritos para ganhar o livro, são para serem postados aqui neste blog, e não no do autor
Tags: Ruby
O primeiro interessado em cada um dos livros que cumprir os itens acima leva o livro, o único custo vai ser o frete (se quiser pegar pessoalmente ai não paga nem isto
)
Sugestões de assunto para os tutoriais:
Estas são só idéias, praticamente qualquer coisa atual relacionada com desenvolvimento, ou melhor ainda com desenvolvimento ágil ta valendo
PS.: espero que alguem se interesse pelos livros
gem install -y rails gem install -y glassfish rails testapp cd testapp jruby script/server
O que você conseguiu com isto?
A forma mais demorada da face da terra de rodar a sua aplicação Rails no mundo!
Claro que isto pode ter outras vantagens, como rodar os testes exatamente no mesmo ambiente que vai ser colocada em produção, mas sinceramente, alguem tem este tipo de problema com o rails? algo do tipo funcionar no WEBrik e não funcionar no Mongrel por exemplo?
Eu ainda acho muito melhor a alternativa “tradicional” que escrever tudo normalmente usando o WEBrick ou Mongrel para testar, e depois de tudo pronto criar o war com o Goldspike:
script/plugin install http://jruby-extras.rubyforge.org/svn/trunk/rails-integration/plugins/goldspike rake war:standalone:create
ou então a versão “lite” com o Warble:
gem install warbler warble rake war
Bem melhor e não me obriga a ir tomar um café toda vez que eu for rodar a aplicação para testar …
Ajude este amigo que vos escreve na competição de programação “RailsRumble”, basta se registrar e depois votar na minha aplicação (Know Your Client), lembre-se que ela foi desenvolvida em 16h (não eu não fiquei as 48h do concurso na frente do computador)
Esta eu li no mural aqui da HP
TEAM = Together Everyone Achieves More
Gostei da frase
Estas frases foram copiadas de um e-mail que recebi hoje na lista visão ágil:
Manifesto for Agile Software Development – http://agilemanifesto.org/ :
Estamos descobrindo maneiras melhores de desenvolver software fazendo-o nós mesmos e ajudando outros a fazê-lo. Através desse trabalho, passamos a valorizar:
Indivíduos e interação entre eles mais que processos e ferramentas
Software em funcionamento mais que documentação abrangente
Colaboração com o cliente mais que negociação de contratos
Responder a mudanças mais que seguir um planoOu seja, mesmo havendo valor nos itens à direita, valorizamos mais os itens à esquerda.
A Nova Metodologia – Martin Fowler
Tudo isso traz à tona algumas perguntas. A primeira é a questão do quão difícil é conseguir um design estilo UML em um estado que possa ser entregue aos programadores. O problema com um design UML é que ele pode parecer muito bom no papel, e ainda ser seriamente problemático quando você tem que traduzi-lo em código-fonte. Os modelos utilizados por engenheiros civis são baseados em diversos anos de prática adquirida em códigos de engenharia. Além disso, questões-chave, tais como o modo que forças físicas atuam no projeto, são triviais à análise matemática. A única checagem que podemos fazer em diagramas UML são revisões cuidadosas. Enquanto estas são úteis, levam a erros que são freqüentemente descobertos apenas durante a codificação e testes. Até mesmo designers habilidosos, como eu me considero , são freqüentemente surpreendidos quando transformamos tais designs em software.
Programação Extrema (XP) Explicado – pg. 53, 5 paragrafo
Programação Extrema (XP) Explicado – Escolha as Mudanças Kent Beck É a diferença entre jogar para ganhar e jogar para não perder. A maior parte do desenvolvimento de software que eu vejo por ai é jogado para não perder. Muito papel escrito, muitas reuniões feitas. Todos estão tentando fazer o desenvolvimento “pelo manual”, não porque ele faça algum sentido, mas porque eles querem poder dizer no final que não foi culpa deles, eles estavam seguindo o procedimento
Otimização prematura é a raiz de todo o mal – Não sei quem é o autor
Hoje mais do que nunca, precisamos lembrar dos ensinamentos do Dr. Deming: Simplesmente coloque a qualidade em primeiro lugar e prossiga com a prática honesta de desenvolver produtos de qualidade.
Frades do Dr. Demin:
Seguindo a onda do primeiro curso de Ruby On Rails de Porto Alegre, mas desta vez sem ligação com empresa nenhuma, o pessoal da lista rails-rs esta organizando o primeiro Encontro Rails-RS.

Que vai acontecer no dia 21 de setembro na Choperia em porto alegre a partir das 19h;
Endereço:
Rua General Lima e Silva, 776
Cidade Baixa – 3221-0211
Quem mais quiser ir sinta-se convidado
E quem estiver interessado em aprender Ruby On Rails, não se esqueça do melhor curso de Ruby On Rails de porto alegre, que começa dia 24 de setembro, logo depois do encontro