Aug 05

A TeHospedo acaba de anunciar o lançamento do mod_rails em produção. É a primeira empresa de hospedagem brasileira a implementar o Passenger em seus servidores. Visite o Blog da TeHospedo para ler mais.

Se você tem dúvidas quanto a estabilidade do servidor, saiba que meu blog está rodando com Passenger há mais de um mês e não tive problemas na utilização. Recomendo!

Para assinar, clique aqui

Jul 10

Se você tem um pequeno projeto e não tem interesse em pagar um VPS para manter seu repositório git rodando com o redMine, configurá-los em sua hospedagem padrão é uma ótima e barata idéia. Eu recém fiz e achei muito simples fazer.

Antes de tudo é necessário que sua hospedagem tenha:

  • acesso disponível via SSH;
  • Ruby on Rails rodando com fcgi ou mod_rails
  • SVN instalado (opcional)
  • Git
  • Gerenciamento de chaves SSH pelo CPanel

Instalando o redMine

A instalação do redMine é muito simples. Basta seguir os passos do próprio site do redMine, clicando aqui e após configurar o redmine de acordo com as suas necessidades.

h3, Criando o repositório Git em sua máquina

Se você ainda não tem um repositório local, é necessário criá-lo, vamos aproveitar e criar uma aplicação Rails para já termos o que enviar ao servidor.

 $cd /home/usuario/workspace
 $rails my_git_project
 $cd my_git_project
 $git init
 $git add *
 $git commit -m "My first commit" 

Movendo o seu repositório para o seu shared host

Antes de mais nada é preciso ter em mente que só enviar o seu repositório Git por FTP pode não ter o funcionamento adequado. Para isso, prepare o seu repositório para ser movido.

 $cd ~/workspace
 $git clone - -bare my_git_project my_git_project.git
 $touch my_git_project.git/git-daemon-export-ok

Pronto, agora seu repositório está pronto para rodar em seu shared host. Agora é necessário enviá-lo para o seu host. Acesse por SSH ou FTP o seu shared host e crie um diretório (que eu vou chamar de src) na home de seu shared host, algo como /home/username/. Se você quiser enviar por SCP, faça o seguinte:

 $scp ~/workspace/src/my_git_project.git username@meudominio.com:/home/username/src

Pronto! Seu repositório Git já está no seu servidor e pronto para ser utilizado.

A partir de agora o endereço de seu repositório será algo como:

 $ssh://username@meudominio.com/~/src/my_git_project.git

Teste o seu repositório

 $git clone ssh://username@meudominio.com/~/src/my_git_project.git

Se você fizer isto, será solicitada a senha SSH do seu host. Digite a senha e terá o seu repositório em poucos segundos.

Liberando as suas chaves SSH

Assim como o Github você pode adicionar chaves SSH de sua máquina e de outros desenvolvedores que terão acesso irrestrito sem a necessidade de senha.

Atenção: Não são todos os shared hosts que têm está opção. Posso afirmar que a hospedagem que eu utilizo fornece esta opção.

MUITO IMPORTANTE: Quem tiver acesso irrestrito ao seu repositorio git também tera acesso irrestrito a todos os arquivos e bancos de dados do seu shared host.

Os passos a seguir são referência do meu CPanel.

Para inserir as chaves ssh de seu computador e de terceiros, faça o seguinte:

Para ter uma chave SSH é necessário criá-la, para isso, recomendo que leiam esta página do Github.

 $cd ~/.ssh
 $cat id_rsa.pub

Copie o resultado sem nenhum espaço em branco do início e faça o seguinte:

Procure o item SSH/Shell Access como mostra a imagem abaixo:

SSH/Shell Access

Após clique no botão Manage SSH Keys e clique em Import Key.

Cole a sua chave SSH como mostra a imagem abaixo (Não preencha os demais campos):

Import SSH Keys

Após clicar em import, vá à listagem de chaves públicas (Public Keys) e clique em Manage Authorization e após clique no botão authorize.

Pronto! Agora você não precisa mais digitar a senha de seu shared host toda vez que quiser fazer um clone ou enviar seus commits ao repositório.

Jul 05

Ontem ao publicar uma demo no ar, penei para descobrir porque eu não conseguia criar um novo produto durante o teste da aplicação. Utilizando o WEBRick eu conseguia criar normalmente. Seria um problema de banco de dados ou da utilização da versão de alguma gem? Além disso, todos os outros formulários de criação funcionavam.

O que será então?

Se trata de um bug no FCGI. Simplesmente quando o método multipart está definido como true, ao tentar cadastrar um dado novo no banco de dados, ele não consegue direcionar o POST para a action create do seu controller. A solução é simples e indolor. No seu form de new faça o seguinte:

<%= error_messages_for :product %>

<% form_for(:product, :url => "#{products_path}/", :html => { :multipart => true }) do %>

  <%= render :partial => 'form' %>

  <p>
    <%= submit_tag "Salvar" %>
  </p>
<% end %>

Note que no lugar de @products eu pus :product, :url => ”#{products_path}/”, isto porque o bug somente ocorre pela falta da barra após o nome do controller. Se a action do form estiver somente ”/products” ele irá entender que você quer acessar a action index e não o create. Com a barra no final da action tudo vai funcionar perfeitamente.

Qualquer dúvida, comente, talvez hajam soluções melhores.

O crédito para o descobrimento deste bug é para o Everton Carpes.

Jul 05

Ontem foi anunciado aos assinantes da TeHospedo.com.br que haverá oferecimento de hospedagem gratuita para quem quiser testar Rails utilizando o famoso mod_rails.

A hospedagem gratuita estará rodando durante os meses de julho e agosto para que a oferta do serviço seja da qualidade que a TeHospedo já oferece há tantos anos.

O que você terá para utilizar a hospedagem da TeHospedo:

  • Acesso SSH
  • Capistrano 2.4
  • Git e SVN
  • Rails 2.1
  • mod_rails
  • e muito mais…

Maiores detalhes sobre hospedagem Ruby on Rails com o mod_rails, clique aqui.

Se você não deseja utilizar os servidores da TeHospedo para testes e já quer rodar sua aplicação em produção, clique aqui e já tenha a sua conta ativada em menos de duas horas úteis.

A TeHospedo também está oferecendo hospedagem gratuíta para domínios .can.br, confira aqui.

SUPER PROMOÇÃO HOSPEDAGEM RAILS

Jun 24

Já é uma realidade que a comunidade brasileira de railers está crescendo de forma logarítmica, e para que haja mais espaço para esta comunidade no mercado brasileiro, nada melhor que começar mostrando o poder que ela tem. Depois do super lançamento do ano, por que não mostrar novamente para o mundo todo que nós podemos ir muito longe.

Why's (Poignant) Guide to Ruby

Colabore!

Para isso ocorrer, peço que vocês dediquem uma parte da sua semana lotada de trabalho para colaborar com o pessoal e finalizar a tradução do livro Why’s (Poignant) Guide to Ruby. Para saber mais, clique aqui.

Ps.: Em breve mais conteúdo relevante.

Jun 13

Promoção de Hospedagem Ruby on Rails com FCGI é aqui! Acesse o link do banner abaixo e tenha um descontão na hospedagem da TeHospedo.

SUPER PROMOÇÃO HOSPEDAGEM RAILS

Meu blog está hospedado lá e meus indicados têm desconto especial. Aproveitem.

Alguns recursos:

  • Hospedagem Ruby on Rails -v 2.0.2;
  • FastCGI;
  • Acesso SSH;
  • Suporte acessível (e de qualidade) durante o dia todo;
  • Baixa latência na conexão;
  • Atendimento disponível em muitas cidades do Brasil;
  • Garantia total de satisfação para um Railer tanto iniciante como veterano.
Jun 13

Ruby on Rails 2.1 Livro

Mal saiu a versão 2.1 do Rails e o Carlos Eduardo já entrou “rasgando” juntamente com o Marcos Tapajós, da ImproveIT, Ambos foram protagonistas de uma façanha digna de um marco na história da Comunidade Rails Brasileira após lançarem sem exagero nenhum o primeiro livro sobre Ruby On Rails 2.1 do mundo absolutamente de graça.

E não pára por aí não, em poucos dias já saiu a “versão em inglês do livro”: http://www.nomedojogo.com/2008/06/09/new-free-book-ruby-on-rails-21-whats-new/ para que todos o railers do mundo tenham acesso a esta bela publicação.

Ruby on Rails 2.1 Free Book English

Eu não podia deixar passar esta notícia que sem dúvida nenhuma mostra o grande potencial dos profissionais de TI brasileiros.

Eu só dei aquela típica “passada de olhos por cima” para ver a qualidade do produto. Está sensacional. Contudo, ainda não parei para ler pois me encontro em uma fase complicada, deadline da monografia, menos de um mês para a entrega revisada e encadernada e aproximadamente um mês para a defesa. Após este período, prometo que junto com a comunidade brasileira estudarei muito para colaborar um pouco.

Jun 13

Eu sei que estou atrasado, mas eu me explico… voltei a trabalhar como freela e estou com dedicação total a isso, bem como estou no mês final de conclusão da minha graduação em Economia, pela UFPel. Tenho dezenas de coisas que queria falar. Cheguei até a cogitar em fazer um post especial comentando TODO o Rails Podcast Brasil – Episódio 17 mas não dá pessoal, seriam coisas demais a comentar, SÉRIO!

Javascript auto include rails plugin?

O principal assunto que me motivou a escrever este post é o Javascript auto include rails plugin, que segundo o Carlos Brando ele facilita a utilização de Javascript sem precisar carregar todos os javascripts em seu layout base. Simplesmente você cria uma estrutura de diretórios dentro da public/javascripts igual a da pasta views e cada arquivo javascript deverá ter o nome da view em que ele deverá ser chamado.

Na minha Humilde opinião, esse plugin não é tão essencial e não tem uma utilidade tão generalizada, a não ser que você utilize um arquivo javascript para cada view, o que deve ser algo extremamente incomum. Utilizar este método é muito mais simples e permite reaproveitar quantas vezes necessário o arquivo javascript, e pasme, não só javascript! Você pode utilizar estes blocos para fazer o que quiser, seja para incluir os feeds de um modelo específico, folhas de estilo (CSS) de uma (ou umas) página específica. Você pode ver como fazer isto neste screencast também.

Pensei em criar uns helper’s para facilitar a utilização… mas não sei o quão necessário isto é, visto que é um método simples de usar.

Shoulda

O Shoulda realmente é uma mão na roda. E vou revelar um segredo, meu antigo colega de trabalho, Everton Carpes tinha feito algo semelhante, que testava inicialmente, muito menos coisas, mas a idéia no fundo era a mesma. Mas infelizmente alguém chegou antes. Para quem não tá entendo, estou me referindo a este link que está nas notas do Rails Podcast Brasil #17, Shoulda – Making tests easy on the fingers and eyes.

Eu utilizei o Shoulda e posso dizer que ele é muito eficiente e simples de usar. Só não apliquei os testes mais a fundo para ver como ele vai se comportar, vou esperar para meu próximo projeto.

Locaweb oferece mod_rails

Eu realmente fiquei muito feliz com esta notícia, principalmente ao saber que junto dela vem outra mais importante, que é o Fábio Akita participando da jogada. Sempre recomendei a Locaweb para os meus clientes em que desenvolvi projetos em PHP, contudo, ao saber que a Locaweb não oferecia tecnologia adequada para rodar uma aplicação Rails, fiquei muito chateado, pois com todas as experiências com hospedagem que tive, a Locaweb com certeza foi a melhor. O Fábio mencionou as reclamações com atendimento e preço, que realmente existem.

Quanto ao atendimento, os funcionários que atendem no chat não são bem preparados e muitas vezes não sabem responder as questões que eu faço para eles. Quando tento utilizar o Helpdesk para atendimento, o resultado é melhor, com certeza é alguém mais preparado respondendo as dúvidas.

Sobre o valor, como economista, tenho que dizer que dentro dos padrões da locaweb é até um preço justo, porém sinto falta daquele plano básico sem atendimento, sem o painel super completo da locaweb de preço mais acessível para que eu possa instalar o meu blog com o meu domínio de 15 reais comprado lá mesmo.

Boa sorte ao Fábio Akita e que o plano trial demonstre melhorias, estou muito frustrado ao tentar rodar uma aplicação Rails lá desde que descobri que a versão do Rails é a 1.2.3 em plena época do lançamento da 2.1.

A propósito, este blog está rodando em Rails 2.0.2, logo vou testar no Rails 2.1!

Apr 17
Estava agora olhando meu Twitter e vendo o que as pessoas que eu sigo têm postado de dicas interessantes. Eu vi uma indicação do Nando Vieira para um post que ele deve ter escrito hoje, sobre relacionamento Has And Belongs To Many, o famoso HABTM. Fui ler, numa boa, uma dica excelente por sinal. No entanto, enquanto eu lia acendeu uma luzinha na minha cabeça: por que diabos todo exemplo de Rails tem modelos do tipo post, comments, users no meio? Eu me imaginei na seguinte situação: nunca ouvi falar do bendito Ruby on Rails, vou me informar sobre. Aí eu googlar sobre o assunto e vou me deparar com os cabeções de rails no Brasil e até mesmo o famoso screencast "Creating a weblog in 15 minutes" do site oficial do Rails. Simplesmente todo exemplo referente ao Rails tem algo de um blog, o que leva a pessoa - no caso eu - que está apenas dando uma olhada nesse framework a pensar que ela serve basicamente para desenvolver blogs. Claro que esta hipótese é tão idiota quanto o imbecil que escreveu ela, mas fiquem atentos, não estou descartando a hipótese. Tampouco estou criticando a postura do Nando ao utilizar esta analogia. Ele tem todo o meu respeito e admiração. O ponto é que tudo relacionado ao Rails acaba caindo no velho exemplo do Blog. E a dúvida que fica, é tão mais fácil explicar as coisas baseadas em um blog que bloqueiam as pessoas a criar dicas utilizando outros modelos?
Apr 03
Em um outro post que escrevi, Onde estão os desenvolvedores Rails, o Eduardo Scoz, desenvolvedor do site Mapia respondeu em um comentário o motivo de seu site não ser validado. Veja abaixo a resposta dele:
Ola pessoal! Sou o único desenvolvedor do site mapia.com.br ,listado aí acima! Primeiramente, deixe-me agradecer por incluir meu site na lista! Ver o nome do site ali ao lado de gente grande realmente me deixa muito feliz! :) Quanto a validacao xhtml no site, até pouco tempo atrás o mapia passava em todas as validacoes. Só que o html foi ficando muito complicado, e ao inves de me preocupar em validar tudo, resolvi que em breve vou dar uma grande limpada no código fonte, e por isso deixei passar. Ultimamente também, tenho me preocupado bastante também com a qualidade dos dados no site, e isso tem me gastado o pouco tempo que tenho para trabalhar no site. Manter dados atualizados (ou tentar manter) para todas as cidades, além das que vão aparecer logo), é algo que consume muito tempo, coisa que está escassa para mim hoje em dia. Fazer o site renderizar corretamente em todos ( ou maioria de ) browsers por aí também toma bastante tempo. De qualquer forma, valeu pelo comentário! Grande abraço, Eduardo Scoz
Apr 03
Acabei de ler na lista de e-mails Rails-br um e-mail do Fábio Akita anunciando que o repositório do Rails irá migrar do Subversion para o Git. Isto tem um significado muito importante, pode significar o fim de uma era onde o subversion era dominante. Posso estar exagerando afirmando isto tão cedo, pois não sou vidente, mas hoje é o Rails, amanhã quem sabe o que será? Aproveitando o post vou indicar também aos leitores e colegas que estão começando no Git este Micro tutorial de Git que o Fábio Akita, de novo ele, escreveu. Recentemente fizemos a migração do Trac para o Redmine, justamente porque tem suporte a Git. No post anterior eu fiz uma pergunta a qual não respondi, pois precisaria testar a aplicação em produção. A pergunta de que o Redmine seria um trac perfeito no post anterior já pode ser respondida. Não é perfeito, é QUASE PERFEITO! Já pusemos ele em produção em um novo projeto e migramos um projeto que estava no Restrospectiva pra ele. O relato do Everton J. Carpes é algo que sintetiza bem o que o Redmine significou para nós:
Perfeito soh o tempo dirá, porém excelente, certamente. O Sistema realmente me surpreendeu. Entre as muitíssimas features interessantes, uma me chamou MUITO a atenção: “controle de workflow”. O Redmine tem um mecanismo que permite ao administrador dele controlar o que eles chamam (comercialmente) de workflow, mas eu (geek) prefiro chamar de “máquina de estados”. Através deste controle você consegue estabelecer como o tracker permitirá as alterações de estados de um ticket, e o mais maravilhoso, POR ROLE!!! Isso simplesmente abre horizontes em termos de gerência, pois permite a você estabelecer padrões onde gerentes possam realizar tarefas X, desenvolvedores tarefas Y e por aí vai… Isso é uma forma clara de estabelecer os padrões de gerência de seu time de desenvolvimento sem complicar para ninguém. Alem disso, claro as centenas de vantagens em features muito interessantes (como o suporte ao GIT como SCM!!! :D). Uma outra coisa maravilhosa sobre o Redmine eh que ele REALMENTE é uma aplicação Rails e segue suas convenções e práticas. Eu que estava já "de cara" com o Retrospectiva por ele não me dar suporte a outro mecanismo de e-mail que o smtp padrão, fiquei extremamente feliz de poder voltar a usar o msmtp. Buenas, puxações de saco a parte, vamos agora aproveitar a ferramenta, contribuir se possível e procurar sempre por melhorias.
Mesmo assim, estamos muito atarefados, pois o Brasil começou a funcionar em abril, e de quebra eu estou na fase de redação da minha monografia.

 

Off-topic nem tão off assim

O trânsito é realmente um ambiente muito fértil para pensar na vida. Durante o tempo em que estava dirigindo pela cidade e recordando os problemas que estamos passando, pensei em várias dicas que poderia dar em relação à nossa experiência como Startup.
  1. Nunca conte com um cliente antes dele efetuar o primeiro depósito;
  2. Utilize sempre o mesmo software e a mesma identação, identações distintas acabam com os diff's;
  3. Nunca se comprometa produzir a quantidade que não pode cumprir, a sua improdutividade afeta a produtividade dos membros da outra equipe;
  4. Sempre ponha um prazo de validade nos contratos, contratos antigos, com orçamentos antigos podem afetar o andamento das atividades atuais;
  5. E finalmente, por último, aprenda com os erros alheios para não repeti-los.
E como diria Leonardo Monasterio, meu orientador: "Dado bom é o dado que a gente tem." Eis meus dados (Eu não queria perder a piada):

Dados

Mar 12
Como já disse algumas vezes, em nossa equipe estamos modificando a nossa estrutura, em busca de maior produtividade e integração de ferramentas como o Git. Já estamos experimentando o Retrospectiva, mas este não resolveu nossos problemas e ainda criou alguns outros. Por exemplo, ele não tem ferramenta de estimativa de tempo, o que em nossa equipe é muito importante. Foi então que o Everton deu a idéia de utilizarmos o Redmine, é um trac em Rails que tem todos os recursos que utilizamos no Trac atual e além disso, tem muitos recursos que no Trac só funcionam como plugins. Uma breve olhada no demo do Redmine nos deixou muito felizes, pois ele tem tudo que utilizávamos no Trac e mais um pouco! E o melhor de tudo, é em Ruby on Rails. Ok, é em Rails, mas o que isso tem a ver? Isso permite que além de termos a possibilidade de colaborar com a comunidade de desenvolvimento, possamos criar outros recursos que acharmos necessários ou integrar com uma futura ferramenta, como nosso site ou blog. Entre os recursos que achamos diferenciais no Redmine, o principal é o fato de ele ser multi-projetos e permitir que o administrador determine a qual projeto cada usuário pertence. E o melhor de tudo, tem suporte a Git, o que atualmente tem se tornado muito importante para nós.

Algumas telas do Redmine:

Análise de estimativas de tempo por ticket Lista de tickets Estimativa de tempo total

Alguns recursos do Redmine:

  • Multiple projects support
  • Flexible role based access control.
  • Flexible issue tracking system
  • Gantt chart and calendar
  • News, documents & files management
  • Feeds & email notifications.
  • Per project wiki
  • Per project forums
  • Simple time tracking functionality
  • Custom fields for issues, projects and users
  • SCM integration (SVN, CVS, Mercurial, Bazaar and Darcs)
  • Multiple LDAP authentication support
  • User self-registration support
  • Multilanguage support
  • Multiple databases support
Com todos estes recursos, não tem porque não utilizar o Redmine. Veja mais alguns recursos do Redmine.
Mar 11
Primeiramente vou falar sobre o fato que me levou a escrever este post. Há um tempo atrás escrevi um post rápido falando da dificuldade de validar a marcação dos formulários em rails com o W3C validator. A minha reclamação foi ouvida, ou pelo menos o problema foi solucionado. Hoje já é possível que inputs com o name do tipo name="post[title]" passem na validação da W3C.Para verificar isto comecei a acessar alguns sites em rails, e fiquei pasmo com o fato de muitos deles não passarem na validação, por erros bestas como a falta de elementos básicos como a barra no final de tags como <br /> ou ainda o não fechamento de tags. Então fui na página do Rails e dei uma verificada nos sites indicados. O resultado foi: Dos projetos brasileiros em rails: Da amostra acima, temos 83% de reprovação no W3C Validator, o que atualmente acho demais! Na verdade acredito que com todos os recursos que o Rails oferece, a reprovação deveria ser muito menor, algo em torno do inverso do resultado atual, ou seja, 15%. Com este artigo não tenho como objetivo participar da promoção do Rails Podcast Brasil, mas sim alertar a todos os desenvolvedores da necessidade de ter um código limpo e semanticamente correto. Muitos podem achar que é exagero e paranóia ficar se preocupando com a validação da sua marcação, mas a verdade é que devemos pensar sempre no usuário, e não na conveniência de fazer uma marcação rápida para entregar o trabalho logo e receber. É muito importante discutir acima de tudo sobre a semântica da coisa, e dedicar um tempo especial para isso. Já perdi tardes batendo boca com os colegas de equipe - em especial com o Everton, que tem uma noção muito boa de padrões web e semântica - de como otimizar a marcação para deixá-la limpa e fácil de entender. Posso afirmar que não foi tempo em vão.
Feb 21
Escrevi o post anterior sobre uma dica boa que eu tinha, relacionado ao uso de PNG transparente no Internet Explorer sem soluções mirabolantes. Hoje ao acessar o Episódio número #6 do Rails Podcast Brasil no site do Carlos Brando, tive a felicidade de ver meu post relacionado aos assuntos do Podcast. É uma felicidade saber que estou participando da comunidade Rails, mesmo que com esta humilde contribuição. A propósito, o Carlos disse o meu nome corretamente, ou seja, Êbersol e não Ébersol, como muitos dizem por aí. Outra citação legal é a do conterrâneo André Camargo, que desenvolveu o Pelotas Center e o CanguRu Center (Canguçu Center), ambos em Ruby on Rails.
Feb 14
Estou ouvindo neste exato momento o episódio #5 do Rails Podcast Brasil, com o Carlos Brando e com o Fábio Akita. Eles estão tratando de um assunto muito importante que são os bugs do Internet Explorer e a falta de padrão do mesmo, e disseram sobre o ie7-js, que é uma biblioteca em javascript que tenta amenizar os problemas do IE7 (e das versões anteriores). O Carlos Brando comentou que resolve inclusive o problema de renderização da camada alfa do PNG (o famoso fundo transparente) nas versões anteriores ao IE7, o problema desses plugins em JS que eles tornam a aplicação muito pesada, o que muitas vezes pode ser desnecessário, dependendo do tamanho do projeto. Então me lembrei de um plugin do Rails interessantíssimo, que de forma simples resolve este problema, é o PainlessPNG. Ele cria um helper que mostra as imagens PNG de forma normal se o seu browser for qualquer um, exceto no IE5 e no IE6, onde ele utiliza o filtro AlphaImageLoader, método recomendado pela Microsoft. Para utilizar seu plugin, basta instalá-lo e reiniciar o server. Pronto, a solução já está funcionando para todas as imagens de sua aplicação.
ruby script/plugin install http://svn.wheremydogs.at/painless_png/tags/painless_png