Blog do Urubatan
msgbartop
Desenvolvedor, Palestrante, Escritor, Nerd Assumido e Pai do Marcus :D
msgbarbottom

29 Sep 07 Coletânea de Links

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 :D )

Outra coisa, vocês acham úteis estas coletâneas de links que posto de vez em quando?

Você gostou deste post? Compartilhe:

Tags: , , , , , ,

26 Sep 07 JRuby On Rails + JPA

Eu ja estava pensando em fazer um exemplo assim a algum tempo, mas sairam na minha frente :D
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

Você gostou deste post? Compartilhe:

Tags: ,

25 Sep 07 Notebook para que? PortableApps.com!

portableapps1.PNG

Tudo bem, isto não é realmente uma substituição para um Notebook, mas é bem útil, e pode ate´ser divertido :D
A imagem que vocês podem ver aqui, é do Menu do PortableApps do meu Pendrive, em qualquer maquina que eu coloco o pendrive o menu aparece, e eu ja tenho disponíveis as aplicações que eu escolhi …
No meu caso, as seguintes:

  • OpenOffice 2.0 – bastante útil em palestras e cursos (no caso estou utilizando agora para mostrar os slides do curso de Ruby On Rails)
  • 7-Zip
  • GVim – Bastante útil para correções rápidas em algum código fonte, ou até para programar em Ruby mesmo, pena que não compilaram com suporte a code completion (omnifunc)
  • Firefox – Simplesmente por que eu não suporto utilizar o IE
  • Putty
  • WinSCP
  • VNC Viewer
  • Sumatra PDF (um leitor de PDF bem leve e útil)
  • VLC
  • MPlayer

Ou seja, quase tudo o que eu preciso em quase todos os lugares que eu estiver (nos outros ainda preciso do note mesmo :D )

Se gostaram da dica, é só dar uma passada em PortableApps.com

English Version Here

Você gostou deste post? Compartilhe:

Tags: , , , , ,

25 Sep 07 Ruby Quebra Cuca – Olha só como da para complicar …

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 :D
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 :D

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 :D
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 :D

Bom, acho que era isto por enquanto, se alguem conseguir uma explicação mais clara destes exemplos seja bem vindo :D

Você gostou deste post? Compartilhe:

Tags:

25 Sep 07 Supreme Nerd God!

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 :D

I am nerdier than 95% of all people. Are you a nerd? Click here to find out!

Você gostou deste post? Compartilhe:

Tags: , ,

22 Sep 07 Grupo de Usuárias de Programadores!

É 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 :D

Você gostou deste post? Compartilhe:

Tags:

19 Sep 07 NetBeans 6.0 Beta 1 disponível (noticia quase 3 dias atrasada :D )

netbeans6.jpg

A versão Beta 1 do Netbeans 6.0 ja esta disponível para download para quem quiser testar.
O Netbeans esta ficando cada vez melhor, o editor de código esta muito bom, e o que estou gostando mais ainda são os “sabores” diferentes da IDE para baixar, deem uma olhada na tabela abaixo:
netbeans_comps.png

Tem disponívels configurações diferentes para uma IDE para:

  • Java EE
  • Java ME
  • Java SE
  • Ruby
  • C/C++
  • Todas as Anteriores

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 :D
(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 :D )

Você gostou deste post? Compartilhe:

Tags: ,

18 Sep 07 Twitter

Até que o tal do Twitter é bem legal :D



Resolvi experimentar semana passada e gostei, não é algo realmente útil, mas é divertido …
As vezes funciona até como uma reunião via IM, só que publica :D
Se alguem quiser em algum momento acompanhar as inutilidades que escrevo la de vez em quando é só clicar aqui.

Você gostou deste post? Compartilhe:

Tags: ,

17 Sep 07 Estendendo o Ruby com DSL (Domain Specific Languages – Linguagens Especificas de Domínio)

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 :D

PS.: Espero que o Shoes veja isto aqui e diga que eu to falando besteira, assim eu aprendo um pouco mais sobre DSL :D

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 :D

Você gostou deste post? Compartilhe:

Tags:

17 Sep 07 Queima de Estoque! (Livros de grátis, ou quase :D )

Sun Certified Enterprise Arqhitect for J2EE

16092007053.jpg
SCWCD Study Kit

16092007054.jpg
Segurança de Dados Criptografia em Redes de computador

16092007055.jpg
Desenvolvendo Aplicações com UML

16092007056.jpg
Segurança Máxima Para Linux

16092007057.jpg


Estes livros ai de cima estão parados na minha casa, e acredito que não exista probabilidade nenhuma de eu lê-los novamente …
Então achei que seria interessante dar eles para quem va fazer bom uso, só que não acho que valha a pena fazer algum tipo de sorteio, então as regras para quem se interessar pelos livros são as seguintes:

  1. Deixar um comentário aqui dizendo por qual dos livros se interessou
  2. Limite de 1 (um) livro por pessoa
  3. Postar um link em seu próprio blog se o tiver para este post ou para a home do meu blog (prefiro para a home :D )
  4. Esrever 1 tutorial sobre algum assunto atual e me enviar para que seja postado aqui no blog

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 :D )

Sugestões de assunto para os tutoriais:

  • Ruby
  • Rails
  • Groovy
  • Grails
  • Recursos de integração com a JVM do JRuby
  • Flex + Java
  • Flex + Ruby
  • Wicket
  • Tapestry
  • JSF + JPA + EJB3
  • Escrevendo testes unitários, de integração e de aceitação (em Java ou Ruby)

Estas são só idéias, praticamente qualquer coisa atual relacionada com desenvolvimento, ou melhor ainda com desenvolvimento ágil ta valendo :D

PS.: espero que alguem se interesse pelos livros :D

Você gostou deste post? Compartilhe:

Tags: , , , ,