-
These tips are probably most useful for programmers that come to Ruby from another language or haven’t experienced the joy of Ruby Metaprogramming yet.
-
Holding onto anger is like grasping a hot coal with the intent of throwing it at someone else; you are the one who gets burned. – Buddha
Arquivo mensal: setembro 2006
links for 2006-09-19
-
Cheat sheets
Planet CInLUG!
VIm 7 – Guia visual
Ótimo guia com screenshots para os novos features do VIm 7. Entre eles:
- Abas (Achei melhor que os “buffers” antigos)
- Correção ortográfica
- Auto-completar (incluindo Ruby)
- Undo incremental (:earlier 5m)
links for 2006-09-18
-
I wrote The Laws of Simplicity in late 2005 to early 2006 to get my thoughts down about simplicity. In the course of 100-pages, I outline the Ten Laws as used on this website.
links for 2006-09-17
Lendo um arquivo OPML recursivamente em Ruby (REXML)
Brincando um pouco com Ruby e RSS, achei esse link em que o cara mostra como ler um arquivo OPML recursivamente, armazenando os feeds em um hash em que a url é a chave e os valores são um array com as categorias. Nos comentários eles discutem um problema quando um mesmo feed é armazenado em várias categorias. Segundo o código do post, o feed era apresentado apenas com a última categoria atribuída.
O problema era na “volta” da recursão, quando os resultados eram adicionados aos resultado final. Segundo o método Hash#merge!, as chaves já existentes são sobrescritas com os novos valores. Mas há uma opção (não muito bem documentada) de passar um bloco para a chamada de merge! que recebe como parâmetros a chave e os valores antigos e novos no caso de registros já existentes. Dessa forma, é possível “adicionar” os valores e não apenas sobrescrever.
Código da função:
# parse_opml (opml_node, parent_names=[]) # # takes an REXML::Element that has OPML outline nodes as children, # parses its subtree recursively and returns a hash: # { feed_url => [parent_name_1, parent_name_2, ...] } # def parse_opml(opml_node, parent_names=[]) feeds = {} opml_node.elements.each('outline') do |el| if (el.elements.size != 0) tmp_feed = parse_opml(el,parent_names + [el.attributes['text']]) feeds.merge!(tmp_feed) do | key, oldval, newval | feeds[key] = oldval + newval end end if (el.attributes['xmlUrl']) feeds[el.attributes['xmlUrl']] = parent_names end end return feeds end
Ajax, tags, rails…
Sexta passada (15) foi um dos mais produtivos dos últimos dias. Consegui colocar tags (trivial como acts_as_taggable) e um uso simples de ajax usando Ajax.InPlaceEditor do script.aculo.us num projeto nosso. A infra-estrutura básica está quase pronta (falta RSS e a API) e até o fim da semana que vem ele tem que estar rodando. O ponto crítico agora é criar uma visão “decente”, uma vez que ainda estamos usando o layout do scaffold… =P
Nada como um chicote para fazer as coisas funcionarem… =P
links for 2006-09-15
-
Congratulations, you are now qualified to program a MIPS processor.
-
From Raphael Langerhorst
links for 2006-09-14
-
How do you avoid copying the wrong things? Copy only what you genuinely like. That was one of the most valuable things I learned from painting: you have to figure out for yourself what’s good. You can’t trust authorities. They’ll lie to you on this one.
-
so we encourage them to focus on just two goals: (a) explain what you’re doing, and (b) explain why users will want it.
-
So please don’t let bottlenecks (real or imaginary, usually the latter) dictate your choice of software development environment.