Windows on Rails?
Desenvolvimento, Dicas, Uncategorized, Util February 15th, 2009Esta semana participei de um curso de Ruby On Rails na Caelum (RR11), ministrado pelo Fabio Kung.
Dada a minha conhecida história nada feliz com cursos, aulas, palestras e afins, minha expectativa era de perder meu tempo, mais uma vez. Porém, foi uma experiência supreendentemente agradável e informativa. Recomendo pra todo mundo que quiser aprender algo novo =) (ao contrário de um curso de java EE que fiz há alguns meses [em outro lugar] que me deixou sem palavras baixas o bastante para descrevê-lo).
Já havia dado uma boa mexida com esse tão falado Ruby on Rails, queria entender se é verdade mesmo, e de onde sai a “magia” por detrás da tão falada eficiência N vezes maior. De magia já havia percebido que não tem nada, é apenas um conjunto de ótimas idéias, em cima de uma linguagem super flexível e poderosa.
Porém, o curso me mostrou um lado ainda mais interessante do que há por trás do rails, a beleza e as infinitas possibilidades que o ruby oferece. Confesso que os famosos pequenos detalhes, a Syntax Sugar, o poder que a linguagem te dá (afinal, felicidade é “a sensação de que o poder aumenta” [Nietzsche]), o caráter totalmente OO (de verdade, nada de static, nada de interfaces fora de classes), aquele dinamismo lembrando os bons tempos de php e smarty, o caráter meio funcional lembrando as melhores coisas do bom e velho LISP, tudo isso me deixou maravilhado. Os helpers para AJAX então, nem se fala, nunca tinha visto tamanha facilidade para realizar as hoje indispensáveis chamadas assíncronas da web 2.0.
Bom, chegando em casa, era a hora de botar um pouco do que fôra aprendido em prática. Ruby/Rails é famoso hoje por algumas coisas, a principal delas talvez seja que todo cara que lida com isso tem um bendito MacBook. Pois é, o TextMate é um editor fantástico mesmo e tudo mais. Mas, bem, eu sou um cara Microsoft, todo mundo que me conhece sabe que meu negócio é Windows e ponto final. Porque eu gosto de jogar (o que já é justificativa mais do que suficiente), porque eu odeio muitas idéias por detrás do linux (que não vem ao caso entrar em detalhes agora), e porque eu não tenho $$$ pra comprar um MacBook.
Instalar o ruby, rails, rspec, etc etc etc não foi problema, já tem muita coisa boa sobre isso na internet, e um trabalho bem legal com o “one click installer” pro ruby – que resolve todos os seus problemas. Bom… QUASE todos… ainda falta encontrar um bom editor.
Ruby é uma linguagem dinâmica, com isso é praticamente impossível criar uma IDE como é o Eclipse pra Java(argh!) ou o Visual Studio pra C#. O que governa o desenvolvimento na linguagem é mesmo o uso de bons editores de texto, como era/é com o PHP.
No Mac é praticamente unanimidade: TextMate na cabeça.
No Linux há alguma discórdia entre as wannabe-IDE’s NetBeans e Aptana RadRails e os lendários Vi/Vim e Emacs. Vi/Vim e Emacs são poderosos o bastante nas mãos certas pra programar eficientemente em qualquer linguagem, então é relativamente bem tranquilo usá-los pra quem sabe. Não vou entrar no mérito de qual é melhor que qual porque sei muito pouco dos dois, mas sei reconhecer a infinidade de possibilidades que eles oferecem pra quem manja do negócio.
No Windows, bom, no Windows é um problema. Vamos às opções:
Temos as wannabe-IDE’s NetBeans e Aptana RadRails também.
NetBeans
O NetBeans é o NetBeans, não precisa falar muito mais do que isso pra se convencer a não chegar nem perto – eu sei, eu sei, ele melhorou bastante e bla bla bla, eu cheguei a usar quando estava começando a mexer com ruby (ainda sem rails) resolvendo uns probleminhas do projecteuler e ele foi útil pela facilidade para executar e tal – mas o veredito é: muito peso, muito consumo de recurso, pra pouca vantagem.
Aptana – RadRails
O Aptana não é nada além de um Eclipse customizado, o que já é um ótimo começo – afinal, ainda está por surgir algo que supere a “mágica” de um CTRL SHIFT R ou CTRL SHIFT G (ou CTRL ALT H – Java(argh!) only). Se você desativar o moooonte de coisa desncessária que vem junto com ele, limpar a perspectiva do rails e tiver paciencia de ajeitar algumas configurações, ele fica leve (consumo médio de 25 mb de memória aqui), abre rápido, e tem um editor de código simplesmente sensacional (afinal, é o Eclipse). Não compensa fazer as rake tasks e os script/generates de dentro dele, pra isso acaba sendo melhor no CMD mesmo. Nessa configuração seria o ideal, ele ainda mostra o RDoc dos métodos da API que você chama. Porém, pelo menos comigo, trava numa frequência muito maior que o aceitável, o que me fez perder a paciência.
O que restou? Bom, temos alguns bons editores no Windows – como o edit, o notepad, o wordpad . . . ok, ok, brincadeiras à parte, minhas opções iniciais eram, respectivamente: E-Text e UltraEdit.
E-Text
Baixei um trial do E-text do site do fabricante para ver como é aquele que promete o “poder do TextMate no Windows” e quão grande não foi minha surpresa ao perceber que o link que ele oferece para os “bundles” (vulgo plugins) é um svn, cheio de arquivos cujo nome o Windows não aceita! Procurei, procurei, e procurei na grande rede uma alternativa para os bundles mas não encontrei, tudo aponta para aquele bendito SVN com arquivos contendo : * > < e todos aqueles caracteres que o Windows adora. Como que isso funciona no Windows então? Bom, eu sinceramente não consegui descobrir.
UltraEdit
Ahhh o UltraEdit, a sensação de “voltar pra casa”. Tenho uma licensa do ultra edit há algum tempo. Ele sempre foi meu all-purpose editor, e parece que novamente é nele que a coisa vai acontecer. Porém, como ser eficiente sem os code snippets, sem os atalhinhos mágicos do TextMate, os comandos mirabolantes do Vi e Emacs, ou o editor de código super confortável do Eclipse? O UltraEdit é sim bom o bastante para escrever código, e consegui arquivos de syntax highlight tanto para .rb quanto para .erb. Porém, para gerar código (ou ao menos ajudar), teria que ter muito trabalho com macros pra conseguir algo decente.
Foi aí que veio a idéia: AutoHotkey. Era isso que precisava, com um pouco de criatividade, tudo se resolve. Usando as teclas de atalho e o conceito de “hotstrings”, consegui mapear os atalhos de snippets mais conhecidos do todo poderoso TextMate para serem usados não só no ultraedit, mas até mesmo no Notepad (!!!), ou até mesmo no Edit (é, aquele mesmo dos tempos do DOS, que roda no CMD do Windows). Basta digitar um ase[TAB] e lá está “assert_equals expected, actual”.
Vou disponibilizar o script aqui para quem quiser experimentar. Os atalhos são baseados nessa “cola” (TAB é, naturalmente, a tecla TAB):
| Trigger | Snippet |
| WINDOWS + L | => |
| WINDOWS + P | params[:id] |
| WINDOWS + J | session[:user] |
| WINDOWS + X | <% %> |
| WINDOWS + Z | <%= %> |
| habtmTAB | has_and_belongs_to_many :things |
| hmaTAB | has_many :things, :as => :polymorphic |
| hmTAB | has_many :things |
| btTAB | belongs_to :something |
| btpTAB | belongs_to :something, :polymorphic => true |
| defTAB | def method_name end |
| vpTAB / vpoTAB / presenceTAB | validates_presence_of :something |
| numberTAB / numerTAB / vnTAB / vnoTAB | validates_numericality_of :something |
| formatTAB / vfTAB / vfoTAB | validates_format_of :something, :with => /regex/ |
| eachTAB | each do |element| end |
| each{TAB | each { |element| … } |
| mapTAB | map do |element| end |
| map{TAB | map { |element| … } |
| forinTAB | for element in collection |
| ifTAB | if condition |
| ifelseTAB | if condition else end |
| unlessTAB | unless condition |
| kvTAB | :key => “” |
| flashTAB | flash[:notice] = “” |
| aeTAB | assert_equal expected, actual |
| raTAB | render :action => “” |
| rpTAB | render :partial => “” |
| mctTAB | create_table “” |
| mccTAB | table.column :name, :type |
| recTAB | redirect_to options … |
| licTAB | <%= link_to options … %> |
| eforinTAB | <% for item in @items … %> |
| ftTAB | <%= form_tag options … %> |
Para fazer funcionar, basta instalar o AutoHotkey clicar 2x neste arquivo (no Windows, é claro), deve aparecer um ícone verde lá perto do relógio indicando que ele está rodando, por ali dá pra finalizá-lo ou editá-lo.
Com isso, creio que fechei meu ambiente de desenvolvimento para rails no Windows:
- Editor: UltraEdit (pago =/)
- Shell: MINGW/MSYS (free, logs com os caracteres coloridos) e beeem mais leve que o CygWin
Imprimir esse artigo!
Leia também:

February 15th, 2009 at 2:38 am
AHK rocks!
Eu o uso no trabalho também para certas coisinhas, aliás, acho que em breve posso complementar o meu artigo do e-mail utilizando uns snippets do ahk!
Eu nao mexo com Rails, mas ótima ideia!
February 22nd, 2009 at 4:20 pm
Tentou PSPad (www.pspad.com)? Editor Ultraedit-like porém Free…