Últimos Artigos:

Rss Feeds

Recentemente fiz a seguinte pergunta no Twitter:

Picture 1

@carlosbrando

As respostas que recebi apenas confirmaram o que eu já imaginava.

Picture 2

@tapajos

Picture 4

@flaviogranero

O motivo da pesquisa é que recentemente eu estava lendo um artigo onde o autor argumentava que o ideal seria criarmos classes somente com métodos públicos, evitando ao máximo métodos privados ou protegidos. E entre outros argumentos, um dos motivos para se fazer isto era simplificar a criação de testes.

Uma coisa que me preocupa no Ruby é que é muito comum encontrar programadores que não estão nem um pouco preocupados se os seus métodos são públicos, protegidos ou privados. Pior ainda, quando tomam decisões apoiando-se em argumentos como o acima.

Um clássico exemplo são os métodos de callback de validações do Active Record, que em praticamente 99% dos casos deveriam ser privados ou protegidos, mas é normal encontrá-los entre os métodos públicos de um modelo na maioria dos projetos Rails. Acredito que isto aconteça porque programadores iniciantes entusiasmados com as facilidades do Active Record apenas saem incluindo seus códigos sem pensar muito no que estão fazendo.

Eu também não tenho o hábito de testar métodos privados, pelas mesmas razões mencionadas pelos amigos do Twitter. Mas no Ruby, se você realmente desejar, é trivial realizar uma chamada em um método privado de um objeto. Uma das técnicas mais usadas por “testadores de métodos privados” é se valer das características dinâmicas da linguagem para transformar todos os métodos privados de uma classe em métodos públicos durante os testes. Diferente de outras linguagens, como C# por exemplo, onde você tem uma barreira formal para impedi-lo de acessar métodos privados, no Ruby é ridiculamente simples ultrapassar esta barreira.

Pensando desta maneira, definir um método como privado no Ruby pode não significar muita coisa, já que outro programador pode alterar esta característica com facilidade. Mas ainda assim, definir um método como privado é como dizer aos outros programadores que aquele método faz parte do funcionamento interno daquela classe e que o programador original quer se manter no direito de realizar qualquer tipo de alteração necessária sem se preocupar se alguém está usando ou não aquele método. Isto tem tudo a ver com encapsulamento, e pode fazer toda a diferença quando surgir a necessidade de alterar algum comportamento do objeto.

Toda vez que você constrói um novo objeto, você está construindo uma nova API. Cabe a você então decidir o que deve ser exposto e o que faz parte dos mecanismos internos deste objeto. Desta forma, quando surgir a necessidade de alterar alguma coisa, você não precisará se preocupar tanto com quantas classes serão afetadas pela mudança. Ao marcar um método como privado, você está se resguardando e garantindo que não causará danos ao restante do sistema, já que você está dentro da fronteira do encapsulamento, podendo assim refatorar seu código sem dor na consciência.

Por favor, não saia simplesmente injetando código em suas classes. Pense!

Quanto cobrar por seus produtos na internet?

Por Carlos Brando em 23 de Junho de 2009 | 8 comentários

Eu havia planejado um artigo mais técnico para esta semana, mas infelizmente não consegui terminá-lo a tempo. Então vai mais uma tradução de um artigo bem interessante do blog Signal vs. Noise:

2125697998_b053ac13e1

Quanto cobrar por seus produtos na internet?

Mattijs perguntou:

Estou desenvolvendo um produto para a internet e está chegando a hora em que será necessário criar uma tabela de preços para este produto. Problema: Não sei nem por onde começar! Fiz algumas pesquisas que mostraram uma ampla gama de produtos semelhantes com regimes de preços totalmente diferentes. Quando a 37signals estava desenvolvendo o Basecamp, como é que vocês definiram os seus preços?

Quando sentamos para decidir os preços do Basecamp pela primeira vez em fevereiro de 2004, decidimos usar os seguintes preços: $9, $19, $39 e $59. Não houve muita ciência por trás disso. Simplesmente perguntamos a nós mesmos:

1. Quanto eu pagaria?
2. Estes números soam bem?

Quanto eu pagaria?

Penso que esta é a pergunta mais importante. Se você está projetando um produto que você vai usar, então é justo perguntar quanto você aceitaria pagar se você fosse comprá-lo de alguém. Os números que surgiram pareciam justos e razoável. 9 dólares era um bom preço inicial enquanto 59 dólares parecia um ótimo preço para o plano mais caro. Já mudamos estes preços, mas esses números funcionaram bem para um produto que ainda era desconhecido no mercado.

Esta linha de pensamento acabou mudando um pouco nosso conceito quando estávamos decidindo os preços de nosso outro produto, o Campfire. Originalmente o preço seria de 5 dólares por chat no Campfire. A ideia era que as pessoas pudessem criar uma sala temporária no Campfire para coincidir com uma reunião ou conferência telefônica. Sentimos que cobrar $5/reunião/ligação seria um preço interessante.

Mas então pensamos um pouco mais sobre isso. Perguntamos a nós mesmos se realmente pegaríamos o cartão de crédito para pagar $5 por algo que usaríamos somente por alguns minutos? Nós decidimos que provavelmente não faríamos isso. Isso mudou todo o foco do produto. A ideia de chats temporários se foi e surgiu então a ideia de uma sala de chat persistente que nunca se fecharia. Então, nós adotamos uma tabela de preços similar a do Basecamp, com o sistema de mensalidades. Estamos confiantes de que tomamos a melhor decisão.

Estes números soam bem?

Há um grande lado psicológico e emocional quando falamos de preços. Um amigo que trabalhava no Wal-Mart, uma vez me disse que lá um preço nunca terminava com um 9. Eles sempre terminavam em 8 (ou 6 ou 4) ou qualquer outro diferente de 9. Eles querem que o cliente saiba que o Wal-Mart está sempre trabalhando duro para diminuir nem que seja um centavo do preço dos produtos – daí o incomum 8 no lugar do familiar 9.

Não adotamos nenhuma regra para decidir nossos preços. Talvez devêssemos adotar uma, mas não fizemos. Nossa linha de preços no Basecamp é de $12, $24, $49, $99 e $149. Estamos mantendo esses preços em vigor por alguns anos e gostamos da combinação. Eles soam bem. Cada nível é praticamente o dobro do nível anterior, mas nós entregamos mais do que o dobro em benefícios.

Por exemplo, no Basecamp Basic ($24/mês), o cliente pode criar até 15 projetos e tem 3GB para armazenamento de arquivos. No Basecamp Plus ($49/mês), o cliente pode criar até 35 projetos (mais do dobro do nível básico) e tem 10GB para armazenamento de arquivos (mais de três vezes o nível básico). Portanto, o preço é o dobro, mas os benefícios são mais do que o dobro. Este padrão persiste em todos os nossos planos de preços.

Você pode mudar os preços, se precisar

Lembre-se que se você decidiu por um preço errado, você pode fazer correções ocasionalmente. Nós fizemos uma grande alteração nos preços do Basecamp e uma alteração menor nos preços do Backpack. Os preços do Backpack mudaram quando lançamos a versão multi-usuário. Reduzimos principalmente os preços dos planos maiores e diminuímos a diferença entre o preço do primeiro nível para o segundo nível (que costumava ser de $5 -> $9, mas foi alterado para $5 -> $7).

A alteração do preço pode ser um pouco dolorosa no curto prazo, mas se você fizer a sua parte, aumentando os benefícios junto com o preço, alertando seus clientes com bastante antecedência sobre o aumento (uns 90 dias, vamos dizer), considerar a possibilidade de manter os preços anteriores para os clientes mais antigos e manter o seu preço justo, a alteração de acontecer sem maiores problemas.

Como a 37signals faturou um milhão com o seu blog

Por Carlos Brando em 15 de Junho de 2009 | 4 comentários
419050330_27d0a2c69d

Reembalagem é o segredo do sucesso

Ganhar dinheiro com a internet hoje em dia não é uma coisa muito difícil. Eu mesmo já andei ganhando uma graninha com a venda do meu último livro, que não passava de uma compilação dos textos deste blog traduzidos para o inglês. Não ganhei muita coisa, mas esta também nunca foi a intenção, mas tem muita gente ganhando dinheiro com seus blogs, principalmente fora do Brasil.

Se você cria um conteúdo de qualidade, não é difícil ganhar dinheiro com ele, desde que você não tenha vergonha de fazer dinheiro. Mas o mais impressionante é que algumas pessoas conseguem ganhar dinheiro mais de uma vez com o mesmo conteúdo.

Não é de hoje que expresso minha admiração pela 37signals, e os caras realmente a merecem. Você muito provavelmente já ouviu falar do livro Getting Real (Caia na Real), onde eles documentam alguns de seus insight sobre a forma como eles criam e vendem produtos na web. O mais interessante é que tudo começou com uma série de artigos publicados no seu blog Signal vs Noise. Veja a seguir como eles ganharam dinheiro 4 vezes com o mesmo conteúdo.

Ganhando dinheiro pela primeira vez

Durante muito tempo eles escreveram, baseados em suas experiências, artigos muito originais sobre o processo de construção de um produto para a internet em seu blog. Estes artigos obviamente geravam muito tráfego e desta forma eles conseguiram alguns milhares de dólares com anúncios na barra lateral do site.

Ganhando dinheiro pela segunda vez

Quando já estavam com um número bem vasto de artigos sobre a sua filosofia de desenvolvimento publicados no blog, eles decidiram compilar os melhores posts no formato de um ebook. Nasceu assim o Getting Real, e cada cópia em PDF era vendida por 19 dólares. Desta forma eles conseguiram angariar aproximadamente 100 mil dólares.

Ganhando dinheiro pela terceira vez

Depois de um tempo, ele pegaram o Getting Real em PDF e transformaram-no em um livro impresso através do site Lulu.com. Cada livro era vendido por 25 dólares e eles conseguiram mais alguns milhares de dólares apenas no primeiro mês. O livro ainda encontra-se a venda no site e até pouco tempo atrás estava classificado como o quarto livro mais vendido.

Ganhando dinheiro pela quarta vez

Por último, eles pegaram o conteúdo do livro e produziram uma série de conferencias sobre a filosofia que eles criaram. Eles ganham em média $50 mil por conferencia e já realizaram mais de 5 delas.

Somando os resultados

Bom, vamos calcular quanto eles conseguiram ganhar com o mesmo conteúdo. Com anúncios eles conseguiram por volta de 100 mil dólares (é importante considerar que eles utilizam o The Deck como seu principal sistema de anúncios, e eles são sócios fundadores da empresa, então provavelmente devem receber um pouco mais do que o normal por anúncio). Com o livro em formato PDF eles ganharam por volta de 350 mil dólares e com o livro impresso eles conseguiram mais ou menos 65 mil. E por último eles já conseguiram 250 mil com as conferencias.

Isto dá um ganho total de 765.000 dólares ao longo de alguns anos, explorando o mesmo conteúdo, insight e idéias sobre como eles executam o seus negócios. Artigos publicados no blog, PDF, livro impresso e conferencias.

É claro que provavelmente eles também devem ter ganho mais algum dinheiro com negócios indiretos conseguidos através do sucesso do livro, como novas oportunidades para a empresa. Mas somente com o conteúdo criado eles chegaram a quase 1 milhão de dólares. Muito bom para um conteúdo que foi originalmente publicada de graça em um blog, não?

Se você ainda não leu o Getting Real, caia na real e trate de lê-lo agora. Temos até mesmo uma versão em português, totalmente gratuita, traduzida pela comunidade Rails brasileira.

Como motivar um programador

Por Carlos Brando em 08 de Junho de 2009 | 29 comentários

O mercado de internet sempre foi super aquecido, e tem se tornado cada dia ainda mais competitivo. Lance um produto de sucesso e em poucos dias haverá dezenas de clones dele. Faça um exercício mental e tente lembrar dos últimos sites que fizerem barulho, agora tente enumerar a quantidade de projetos lançados com o mesmo conceito, mas tentando parecer um pouco diferente.

Lendo o excelente livro StartUp de Jessica Livingston, notei que mesmo o mais confiante empreendedor tem seus temores. Medo de que uma empresa com mais mais recursos produza um software igual ao seu e que consiga levar seus clientes. Mas o que se percebe é que na maioria dos casos, mesmo que o software da concorrência pareça melhor ou tenha sido construído por uma equipe com mais experiencia, normalmente vence a equipe mais apaixonada.

Está revelado o segredo. Para montar uma equipe vencedora, não procure o melhor profissional, procure o profissional mais motivado. Mas não basta somente contratar alguém apaixonado, é preciso manter acesso está paixão. Como?

Salário?

O salário parece ser sempre o principal motivo de descontentamento em uma empresa. É claro que quando estamos falamos de dinheiro, quanto mais melhor. Mas é um fato que bons programadores não levam o dinheiro tão a sério assim. Pessoalmente, eu conheço muitos bons profissionais que mesmo achando que poderiam estar ganhando mais dinheiro em outra empresa, se “sacrificam” para permanecer em um ambiente de trabalho que lhe agrade, onde ele talvez considere que está aprendendo coisas novas ou adicionando algo de valor ao universo.

Eu mesmo passei por uma experiencia parecida há um tempo atrás. Já estava há dois anos trabalhando em um mesmo projeto e havia perdido o interesse naquilo já fazia um bom tempo quando recebi uma proposta de emprego para receber pouco mais do que eu ganhava naquela empresa. Ao avisar que estava saindo, recebi a tentadora proposta de ficar e dobrar o meu salário. Não aceitei, porque não tinha mais a ver com dinheiro e sim com paixão e motivação.

Se quer resultados, desafie

Em meu trabalho com pessoas surdas, certa vez eu acompanhei um amigo em uma aula. Este meu amigo é uma pessoa de natureza séria, e como tal costuma tratar seus alunos com seriedade, embora seja um excelente professor e tenha um profundo conhecimento da língua de sinais (visivelmente maior do que o meu). Mas ele tinha um problema, seus alunos estavam com sérias dificuldades para entender algumas coisas muito simples. Diferente dele, eu costumo ser um pouco mais brincalhão em minhas aulas e me aproximo mais dos alunos. Neste dia, brincando com as crianças eu disse que quem errasse uma pergunta levaria um cascudo na cabeça, mas para cada pergunta certa eu daria um beliscão no professor deles. Adivinhem, tivemos um excelente aproveitamento da aula e não precisei dar cascudo em nenhuma criança. :)

O ser humano precisa ser desafiado. Pagar bem para um profissional fazer um trabalho desinteressante e sem valor não desperta paixão em ninguém. É por isto que uma startup, mesmo com uma equipe menor (e com salários menores também) muitas vezes conseguem competir com grandes corporações. É o desafio que motiva as pessoas a fazerem coisas grandiosas.

Programadores precisam ser desafiados

Não existe ninguém que goste mais de desafios que os programadores. Pegue um código escrito por alguém, e sem avisá-lo altere para deixá-lo mais rápido ou mais elegante, e você com certeza estará ganhando um inimigo mortal. Acho que os quadrinhos abaixo ilustram isto muito bem:

geek-hero-panel-1

geek-hero-panel-2

Alguns anos atrás eu trabalhei em um projeto onde havia um programador na equipe que já estava trabalhando para o mesmo cliente por algum tempo e já possuía um excelente domínio dos negócios daquele cliente. Sendo assim, ele assumiu a responsabilidade de escrever um código que envolvia uma regra de negócio um pouco mais complicada. Lembro que quando vi o código, pela primeira vez depois de pronto, levei um susto tremendo. O código era macarrônico e tinha quase 1.000 linhas. Era simplesmente incompreensível.

Por profundo respeito ao amigo, não comentei nada sobre o código na hora. Depois de algumas semanas houve uma mudança em uma regra que envolvia realizar uma alteração em algum ponto daquele emaranhado de código. Um outro programador da equipe assumiu o desafio. Horas depois ele desistiu. Como o pai da criança estava presente, ele acabou assumindo e resolvendo o problema.

Pressentindo que aquele código poderia se tornar um problema no futuro, o gerente do projeto solicitou ao programador que ele refatorasse o código afim de deixá-lo mais intuitivo e fácil manutenção. Embora ele tenha melhorado um pouco o código, não posso dizer que o resultado era o esperado.

Passaram-se mais alguns dias e mais uma vez tornou-se necessário alterar algo naquele maldito código. Desta vez, outro programador foi designado para fazer isto. Depois de um tempo tentando entender o que aquele código fazia ele também se cansou e após mostrar o código para o gerente do projeto e receber sua aprovação, ele começou a refazer o código de uma forma que todos pudessem entende-lo. Mas como o dia já estava chegando ao fim, ele deixou para terminar o trabalho no dia seguinte.

A surpresa foi que no dia seguinte ao chegar na empresa o programador original do código já havia refeito todo o código de uma forma muito mais inteligente. De alguma maneira ele soube que seu código seria refeito por outro programador, e ao invés de ir para casa ele passou a noite em claro refazendo todo o código. Somente após se sentir desafiado é que aquele profissional se motivou para fazer seu trabalho da maneira certa, e confesso que ele realmente conseguiu acertar.

Claro que existem formas mais elegantes de se desafiar um profissional, mas eu considero interessante analisar o efeito do desafio na vida de uma pessoa. No caso acima, o programador se privou do sono e do seu merecido descanso, afim de encarar um desafio.

Como motivar um programador? Eu acredito seriamente que o segredo está em dar um propósito a ele, incumbi-lo de um trabalho que tenha um verdadeiro valor, que acrescente algo de importante em nosso mundo. Eu quero deixar a minha marca no universo, quero ser desafiado, quero mostrar porque estou aqui. Me dê um desafio a altura e eu te mostrarei o que é paixão.

Dica Rápida: Como executar apenas um teste

Por Carlos Brando em 05 de Junho de 2009 | 8 comentários

Usando o Test:Unit, se você não quiser executar todos os seus testes unitários, você pode mandar executar apenas um único caso de teste fazendo assim:

ruby user_test.rb

Mas se sua intenção é executar apenas um teste especifico dentro do caso de teste, você também pode fazer assim:

ruby user_test.rb --name test_should_require_login

Onde encontrar os melhores vídeos sobre Ruby?

Por Carlos Brando em 01 de Junho de 2009 | 4 comentários

Com a popularização do Ruby no Brasil muitos programadores tem palestrado nos mais diversos eventos sobre nossa linguagem de programação preferida e alguns também tem produzido screencasts com dicas sobre Ruby e Rails. Eu mesmo tenho algumas palestras gravadas e iniciei uma nova série de screencasts que pretendo manter.

Para armazenar todo este conteúdo que não pode simplesmente ficar perdido pela internet, criei um novo site associado a este blog, o Nome do Jogo – Vídeos!

logo

http://videos.nomedojogo.com

Até o momento cadastrei somente os vídeos que já foram postados por aqui, mas estou abrindo o espaço para todo e qualquer material sobre Ruby, Rails ou qualquer outra tecnologia que vocês estiverem utilizando e que pode ser interessante para outros programadores. Se você conhece algum material legal que pode ser publicado no site envie o link com o vídeo e se possível alguma informação sobre quem o produziu/palestrou através da página de contato deste blog.

Vale qualquer tipo de material, mesmo sobre outras linguagens de programação. Espero que gostem desta novidade e que possam me ajudar a tornar este novo site uma excelente fonte de recursos para nós programadores.

E não esqueçam de divulgar o endereço do site em seus blogs e twitters: http://videos.nomedojogo.com.

Assuma seus erros

Por Carlos Brando em 26 de Maio de 2009 | 3 comentários

03082007
Em um processo natural de desenvolvimento, todo profissional começa sua carreira como um programador iniciante e com o tempo passa a assumir cada vez mais responsabilidades com respeito ao projeto, ou projetos, da empresa para qual está prestando serviços. Este aumento da carga de responsabilidades é um indicador de que o seu trabalho esta sendo valorizado e que sua carreira está avançando.

Assumir responsabilidades é um dos pilares da profissão de programador. Mas tão importante quanto assumir responsabilidades, é também assumir seus erros. Seja honesto consigo mesmo, todos somos suscetíveis a falhas.

Em um antigo emprego já tive a oportunidade de liderar uma equipe com excelentes programadores, 100% de cobertura de testes, uma boa documentação e mesmo assim as coisas deram errado. Somos seres humanos e cometemos erros. A forma como lidamos com estas situações é que mostra o quão profissionais somos.

Ser arrogante não significa esconder seus erros. Eu valorizo pessoas que assumem suas ignorâncias e seus erros, e mais ainda os que se esforçam para aprender com eles.

É uma pena que tantas pessoas em cargos de responsabilidade congelem suas carreiras no meio da subida. Porque na minha visão, ter a coragem e a honestidade de assumir seus erros é um passo importante antes de chegar ao topo.

Curiosidades do Ruby – O Screencast!

Por Carlos Brando em 25 de Maio de 2009 | 13 comentários

Já faz um tempo que eu tenho planejado voltar a gravar screencasts, e finalmente eu consegui um tempinho no fim de semana para gravar mais um. A ideia é gravar episódios pequenos, da forma mais rápida possível e com dicas interessantes e curiosidades sobre a linguagem Ruby e seus frameworks.

Inicialmente estipulei que os vídeos deveriam ter no máximo um minuto e meio de duração, mas foi bem difícil conseguir isto. Este vídeo tem 3 minutos, o que ainda é bem pouco. Então ao invés de definir um tempo especifico, vou fazer de tudo para gravar episódios com o máximo de conteúdo no menor tempo possível e pronto!

Neste primeiro episódio eu mostro apenas uma curiosidade sobre o nome das classes no Ruby, teremos uma continuação em breve sobre este mesmo tema. Para dar continuidade com esta série preciso da ajuda de vocês, deixem comentários com sugestões sobre o tema ou me enviem ideias para novos episódios usando a página de contato deste blog.

Espero que gostem!

P.S.: Todos os vídeos serão publicados em um canal do YouTube: http://videos.nomedojogo.com

Inicialmente o artigo que se segue seria uma tradução de “The benefits of a monthly recurring revenue model in tough economic times” [Signal vs. Noise], mas como tive de fazer muitas adaptações ao texto durante a tradução, não dá para dizer que é uma tradução literal.

3406350989_66f01364bb

Foto de TomCosta

Empresas como a 37signals vendem seus produtos utilizando um modelo de assinatura mensal. Também dão às pessoas 30 dias para fazerem uma avaliação gratuita dos produtos antes de cobrar a primeira mensalidade.

Acredito que este modelo funciona muito bem na maior parte do tempo, e que ele funciona especialmente bem em tempos difíceis. Nos momentos de crise, obviamente as pessoas procuram gastar menos. Compreender como as pessoas fazem para diminuir os seus gastos pode ajudar muito na hora de escolher o melhor modelo de negócio para os seus produtos.

Existem muitos modelos de negócio para softwares. Aqui estão alguns dos mais populares:

* Freeware
* Freeware, suportado por anúncio
* Um único pagamento adiantado, recebendo atualizações grátis
* Um único pagamento adiantado, com atualizações pagas
* Assinatura anual
* Assinatura mensal

Cortando gastos novos antes de cortar gastos velhos

Eliminar novos gastos é muito mais fácil do que eliminar gastos correntes. Nas horas difíceis a primeira coisas que as pessoas fazem, é simplesmente tentar não adquirir mais dividas, deixando de lado qualquer coisa que possa gerar novos gastos.

Por exemplo, se elas estivem avaliando a compra de um software novo, elas provavelmente irão colocar essa avaliação em espera. Se até agora elas sobreviveram sem este serviço, então poderão continuar sobrevivendo sem comprá-lo. Se uma grande atualização está para vir elas poderão ignorá-la ou simplesmente descarta-la nestas situações.

Mas se eles já estão pagando por um serviço que já utilizam, eles provavelmente irão continuar usando esse serviço. Podem até mudar para um plano mais barato ou tentar negociar o preço, mas se eles consideram este software como algo muito útil, existe uma chance muito alta deles continuarem pagando por isto.

O problema com o modelo de um único pagamento

O problema com o modelo de um pagamento único é que uma vez que o cliente paga por seu produto, acabou. Em tempos difíceis, quando as pessoas congelam novos gastos, você terá mais dificuldade para adquirir novos clientes, o que também significa menos dinheiro entrando. E em casos extremos, você pode simplesmente não adquirir nenhum novo cliente, o que significa nenhuma nova receita. Portanto, se você ficar três meses sem novos clientes, você não terá novas receitas por três meses. Se você não tiver uma boa reserva e esta seca durar realmente uns três meses, existe uma chance bem grande de você quebrar.

O benefício da assinatura anual

Assinaturas anuais são boas porque você ainda tem o potencial de gerar receitas em uma base regular, sem a necessidade de adquirir novos clientes. No entanto, como renovações anuais são inicialmente mais caras que renovações mensais, seus clientes podem pensar duas vezes na hora de renovar a assinatura. E mesmo se estiverem dispostos a renovar, provavelmente tentarão negociar o preço e ameaçarão deixar o serviço se você não oferecer um bom negócio para eles. Eles podem estar blefando, mas em tempos difíceis é especialmente arriscado perder um cliente.

O benefício das assinaturas mensais

Já que novas despesas são cortadas antes das despesas antigas, você poderá ficar um bom tempo sem obter novos clientes. Mas com um modelo de assinatura mensal você ainda estará ganhando à partir do seu rendimento mensal regular com seus clientes existentes.

Se você tem 5000 clientes pagando R$ 10,00 por mês, você estará recebendo R$ 50.000 de receita todo mês, mesmo sem adquirir nenhum novo cliente. E mesmo que alguns clientes cancelem o serviço afim de cortar seus custos, você ainda receberá algum dinheiro todo mês. Fluxos de caixa a partir de assinaturas mensais estão entre os fluxos mais previsíveis que você pode encontrar.

Outro benefício da assinatura mensal é que o custo inicial para novos clientes é menor. Uma assinatura anual pode vir a ser mais barato do que uma assinatura mensal, mas o valor inicial em uma assinatura anual pode assustar muita gente em tempos de crise econômica. As pessoas querem poupar seu dinheiro, e taxas anuais podem fazer isso, mas elas estão pensando a curto prazo e não a longo prazo. Gastos de curto prazo reinam em tempos difíceis, razão pela qual as assinaturas mensais são mais seguras para todos os envolvidos.

Que tal um combo?

Algumas empresas oferecem uma combinação de planos. Planos mensais, anuais ou mesmo assinaturas vitalícias. Mas independente do conjunto de opções, acho que nunca deve-se descartar a opção de uma assinatura mensal.

Apenas um lembrete

As ideias acima não são baseadas em um estudo minucioso do assunto, mas funcionam como um lembrete de que as formas de pagamento que você oferece para seus clientes pode ter um efeito significativo sobre a viabilidade do seu negócio, pelo menos enquanto a crise estiver por aí.

3262821545_b40259ca06

Foto de KS Girl

Antes de iniciar esta tradução eu quero deixar claro que não sei se concordo com tudo o que o artigo expressa, mas achei que é um ponto de vista interessante, então vale a tradução para quem sabe iniciar uma discussão. Segue a tradução:

Converse com alguém que dirige um negócio bem sucedido e pergunte-lhe: “Quando foi a última vez que você olhou para o seu plano de negócios?”. É muito provável que ele nem se lembre onde o deixou.

O artigo “Três Start-Ups, um ano depois” [NY Times] apresentou alguns exemplos de como o plano de negócios original pouco importa uma vez que você está realmente fazendo alguma coisa.

Tina Ericson recentemente encerrou a sua loja online de camisetas, Mamaisms Gear, em Wilmington, NC, sobrecarregada pela tensão que isto estava gerando no seu trabalho corporativo. “Parece que foi ontem que estávamos discutindo os nossos planos para conseguir $100.000 em receita no primeiro ano”, disse a Sra. Ericson. “Cometemos alguns erros bem caros.”…

Ela previu vendas em 2008 no valor de US $100.000 pela Mamaisms Gear, que pretendia oferecer uma ampla linha de camisetas e outros produtos “A minha mãe diz” com slogans como “Pare de chorar.” Ela também comentou sobre criar um site para mulheres e iniciar uma empresa de consultoria para a indústria de serviços financeiros…

Mas, até Junho, com o baixo crescimento econômico, todos os três empresários tiveram de moderar as suas ambições. A Sra. Ericson já tinha abandonado seus planos de criar uma comunidade para mulheres na Internet e de iniciar uma empresa de consultoria para se concentrar no marketing da sua boutique de camisetas.

As outras duas empresas mencionadas no artigo ainda estão na ativa, mas também tiveram de repensar completamente os seus planos originais. Elas tiveram de mudar o foco, serviços, salários, parcerias, etc..

Claro, você pode culpar a economia. Mas este tipo de coisa faz parte do curso, mesmo quando as coisas estão indo bem. Empresas, assim como exércitos, sempre precisam se ajustar aos campos de batalha. Se em um ano estas empresas já estavam tão longe da projeção inicial, imagine o quão inútil seria uma projeção para os próximos três (ou cinco) anos.

Isto suscita a seguinte questão: Por que fazer um plano de negócios se ele é obviamente uma fantasia que não tem nada a ver com a realidade? Se estas projeções são apenas alguns números pescados no ar, porquê perder tempo dando atenção a eles? Se iludir, de forma alguma vai beneficia-lo.

Parece que a maioria das pessoas escrevem planos de negócios, apenas porque eles pensam que supostamente devem ter um. Alguns dizem que um plano de negócios é o que uma empresa “real” precisa, assim pode-se seguir adiante e começar a fazer um monte de merda. É aí que a realidade acontece e toda a merda vai para o ventilador.

Claro, pensar sobre o futuro pode ajudar. Mas documentar, e manter isto como um tipo de plano é tolice. A verdade é que você não vai saber o que fazer até que você esteja realmente fazendo isso.


Este texto é uma tradução do artigo “When was the last time you looked at your business plan?” escrito por Matt Linderman.

Eu gosto da forma simples como os desenvolvedores do Ruby on Rails, principalmente David (dhh) resolvem as coisas que lhes incomodam. Desde a primeira versão do Rails se tornou algo comum incluir algumas linhas nas migrations para inserir alguns registros iniciais no banco de dados do projeto.

Alguns desenvolvedores até chegaram a criar projetos na tentativa de “melhorar” a forma de se fazer isso. Eu mesmo já andei usando alguns.

O que David fez, foi simplesmente adicionar um novo arquivo db/seeds.rb nos novos projetos Rails para que possamos incluir este tipo de código. Simples assim.

Depois, no momento de carregar estes registros no seu banco de dados, basta executar o seguinte comando no terminal:

rake db:seed

O comando já existente rake db:setup também foi alterado para incluir esta funcionalidade.

Bons programadores são feitos com um pouco por dia

Por Carlos Brando em 11 de Maio de 2009 | 8 comentários

Gosto de uma passagem do famoso livro “The Pragmatic Programmer: From Journeyman to Master” que diz o seguinte:

Um turista visitando o Eton College na Inglaterra perguntou ao jardineiro como ele conseguia deixar o gramado tão perfeito. “É fácil”, ele replicou. “Você só precisa remover o orvalho cada manhã, cortar a cada dois dias e enrola-lo uma vez por semana.”

“É só isso?”, perguntou o turista.

“Absolutamente”, replicou o jardineiro. “Faça isso por 500 anos e você terá um belo gramado.”

Bons gramados precisam de um pouco de cuidado todos os dias. Bons programadores também.

332590188_5b1baa142e

Foto de Math Paul

Eu adotei esta tecnica a algum tempo, todos os dias eu tento aprender algo novo ou me aprofundar um pouco mais em algo que já conheço. Ao contrário do que muita gente pode pensar, isto não tem nada a ver com manter-se informado. Estar em dia com o que está acontecendo no mundo é muito importante para qualquer tipo de profissional, mas o conhecimento adquirido pela leitura de feeds, por exemplo, não é necessariamente algo que aumente o seu valor como profissional. Estou falando de estudar de verdade, mesmo que seja por 5 minutos, todos os dias.

Durante todo o ano passado eu tentei manter neste blog uma série diária sobre o que viria de novo nas próximas versões do Rails, e isto me ajudou a me manter atualizado ao mesmo tempo que me forçava a analisar cada vez mais profundamente o seu código. Hoje ainda continuo analisando o código, mas não escrevo mais com tanta frequência, já que agora muita gente resolveu fazer o mesmo.

Analisar o código de outras pessoas é um excelente meio de aprendizado. Como todo bom programador, não gostamos de ler documentação, gostamos de ler código. Mesmo programadores iniciantes podem tirar muito proveito ao participar de projetos open source.

Diferente de gramados, nós programadores ao adotar um regime sério de estudo diário, podemos ver os resultados em pouquíssimo tempo. E com o passar dos anos você ficará surpreso ao ver o quanto amadureceu como profissional.

Como Ruby on Rails pode o tornar um programador pior

Por Carlos Brando em 06 de Maio de 2009 | 17 comentários

Esta palestra foi realizada no 14º EDTED em São Paulo no dia 25 de abril. Como o EDTED é um evento mais voltado para web designers a palestra é uma introdução ao Ruby.

Acredito que vocês, assim como eu, também já devem estar cansados de ver palestras deste tipo. Por isto eu decidi fazer algo um pouco diferente. Ao invés de simplesmente falar sobre as vantagens do Ruby e do Rails, decidi fazer com que o público mergulhasse no código, com muitos exemplos de códigos em Ruby e até mesmo uma explicação básica sobre metaprogramação.

É uma palestra para iniciantes, mas também pode ser muito útil para os que precisam explicar o que é Ruby on Rails para seus colegas de trabalho!

Primeiro os slides:

E também a excelente gravação da palestra, feita pelo meu amigo Hugo Borges (agaelebe):

Não codifique no piloto automático

Por Carlos Brando em 05 de Maio de 2009 | 12 comentários

Talvez você não concorde com tudo que eu escrevo por aqui, mas tem uma coisa que é praticamente unanime entre todos os programadores: reuniões são uma tremenda perda de tempo.

Reuniões nos fazem perder muito tempo que poderíamos estar programando, mas é um mal necessário. Uma reunião é um momento em que todos os envolvidos no projeto param para pensar no que estão fazendo. E é neste momento que são tomadas as decisões sobre como fazer o que quer que seja que você precise fazer.

Mas ainda mais importante que pensar no que precisa ser feito, é pensar no que você está fazendo enquanto você está fazendo. Não estou falando de parar por alguns instantes antes de começar a escrever código e pensar em como você vai escrever determinada funcionalidade. Estou falando de um processo contínuo de meditação – toda decisão que precisa ser tomada deve envolver um processo (mesmo que rápido) de meditação antes – que deve ocorrer a todo momento. Este processo é critico e deve envolver todos os aspectos da sua vida.

791385521_88ec165c29

Foto de regolare

A maioria dos programadores codifica no piloto automático. Isto é um problema grave, porque você deixa o seu inconsciente tomar as decisões por você, quando na verdade cada decisão tomada deveria ser analisada antes. Seu cérebro é uma ferramenta surpreendente, com um pouco de esforço você pode tomar o controle e focalizar seus pensamentos de verdade na execução da tarefa que você está realizando.

No inicio isto pode parecer uma tarefa difícil, talvez seja necessário realizar certas pausas a cada 10 ou 5 minutos somente para pensar no que você está fazendo, mas com o tempo você conseguirá fazer isto de forma consciente ao mesmo tempo em que continua escrevendo. Mas nunca deixe esta tarefa no piloto automático.

PENSE! Não considere pausas para pensar como tempo perdido. Com o passar do tempo você perceberá que está mais envolvido com o trabalho e que você entende melhor o negócio da empresa para qual está trabalhando. O tempo gasto será pago, já que você será mais eficiente. E principalmente, você gastará menos tempo em reuniões já que você provavelmente já terá pensado na maioria dos problemas antes.

Programar não é só codificar

Por Carlos Brando em 27 de Abril de 2009 | 12 comentários

Tecnologia é um bem de consumo. Ter um carro potente é excelente, mas não faz você dirigir melhor. Ter um computador de ultima geração é muito bom, mas não permite necessariamente que você faça mais coisas em menos tempo.

Prega-se por toda a parte que programadores Ruby são mais produtivos e mais pragmáticos. Mas Ruby, assim como qualquer outra tecnologia é somente um bem de consumo. Um bom motorista, continuará sendo um bom motorista independente do carro que esteja dirigindo. Assim como um bom programador, continuará sendo um bom programador independente da linguagem de programação que estiver utilizando.

Programar não é apenas codificar. Como desenvolvedores de software precisamos entender o que estamos criando, precisamos entrar de cabeça no negócio da empresa para qual estamos trabalhando. Conheço péssimos programadores que desempenham papeis importantes nas empresas em que trabalham, não pelo seu conhecimento técnico, mas pelo seu domínio do negócio da empresa.

2700243366_6fe67d8d1d

Não invista somente em tecnologia

Quem é mais produtivo, o cara que conhece todas as minucias da linguagem ou o cara que conhece todos os processos da empresa? Saber conversar com o seu cliente na “língua dele” é essencial. Imagine a expressão de satisfação no rosto do seu cliente se ao lhe perguntar: “Você sabe o que é um HPA456?”, você respondesse: “Sim, mas você não acha que utilizar um PDT8954 seria mais interessante para o seu negócio?”.

Para sermos produtivos precisamos ser pró-ativos. Mas para sermos pró-ativos temos de saber o que precisa ser feito.

Não leia apenas artigos técnicos, mantenha-se em dia com o negócio do seu cliente. Leia revistas especializadas. Provavelmente você não entenderá tudo que ler, mas seja persistente. Converse com seu cliente sobre a área de atuação dele, tire suas duvidas. Conhecimento nunca é desperdiçado.

Não invista tanto em ferramentas e tecnologia, invista em conhecimento.

Edge Rails: ActiveRecord::Base#touch

Por Carlos Brando em 23 de Abril de 2009 | deixe um comentário

A próxima versão do Rails contará com um novo método chamado touch em todos os objetos do ActiveRecord, o método basicamente serve para atualizar os campos updated_at e updated_on do registro atual com a data e hora corrente. Veja abaixo a implementação do método:

def touch(attribute = nil)
  current_time = current_time_from_proper_timezone

  if attribute
    write_attribute(attribute, current_time)
  else
    write_attribute('updated_at', current_time) if respond_to?(:updated_at)
    write_attribute('updated_on', current_time) if respond_to?(:updated_on)
  end

  save!
end

Como você pode ver na implementação acima ele aceita um parâmetro attribute. Utilizaremos este parâmetro para informar um campo diferente dos mencionados acima quando for necessário.

product.touch # atualiza o campo updated_at
product.touch(:designed_at) # atualiza o campo designed_at

Esta atualização vale tanto para o Rails 3 como para uma futura provável versão do Rails 2.3.

Graças a este novo método também ganhamos um novo atributo para associações belongs_to, fazendo com que ao criar, atualizar ou apagar um registro filho o método touch do registro pai seja executado. Por exemplo, veja o código abaixo:

class Pet < ActiveRecord::Base
  belongs_to :owner, :touch => true
end

A partir do exemplo, quando cadastrarmos ou atualizarmos um animalzinho de estimação (pet), os campos updated_at/on do dono (owner) correspondente serão automaticamente atualizado com a data atual.

Coçando a sua própria coceira

Por Carlos Brando em 22 de Abril de 2009 | 6 comentários

tiny-town-funny-girl-scratching-head

O termo “coçar a sua própria coceira” já é usado a muito tempo pela comunidade de desenvolvedores de projetos open source. Isto significa que eles estão constantemente resolvendo seus próprios problemas.

Conforme eu já mencionei em um artigo anterior, programar é difícil. Sim, programar envolve assumir um série de responsabilidades e atividades que podem tornar o ato de codificar muito estressante. Durante o desenvolvimento de um software é comum aparecerem situações que exijam uma tomada rápida de decisão. Quantas linhas o usuário deverá visualizar por vez? Azul ou vermelho? Apagar o registro ou apenas marca-lo como apagado?

Afim de agilizar o desenvolvimento muitas vezes o programador decide por tomar estas decisões, e só delega esta responsabilidade ao cliente quando a questão é realmente séria. Cada decisão tomada pelo desenvolvedor se torna um novo débito no software, como uma bomba-relógio que pode explodir a qualquer momento. Ter conhecimento destas pequenas armadilhas dentro do projeto torna o desenvolvimento estressante e pode tirar o prazer do programador em escrever códigos.

Programadores open source não passam por isto, porque eles estão “coçando a sua própria coceira”, eles estão resolvendo os problemas que eles mesmo tem. Ao tomar uma pequena decisão, eles não estão chutando, porque eles são os cliente e sabem exatamente o que é melhor para eles.

Programar envolve tomar decisões o tempo todo. Quando temos um profundo conhecimento sobre a necessidade que o software está suprindo, e principalmente quando somos o nosso próprio cliente não precisamos nos preocupar com estes chutes, tomamos decisões de uma forma suave e isto torna o desenvolvimento mais ágil e prazeroso. É por isto que tanta gente passa o dia inteiro escrevendo código no trabalho e ao chegar em casa ainda senta na frente do computador para trabalhar em algum projeto open source, é um exercício de relaxamento.

É possível levar esta experiencia para o trabalho, mas para que isto aconteça é necessário que você domine completamente o negócio da sua empresa. Entenda porque está escrevendo cada uma da funcionalidades do software em que está trabalhando. Entre de cabeça no trabalho que está realizando, torne-se o seu próprio cliente e comece a coçar a sua própria coceira.

Não importa se você está programando em Ruby, C# ou Java. Se está usando Rails ou Django. O que importa é se você realmente entende o trabalho que está realizando e se está contente com o que está fazendo.

Adicione algo de valor ao universo

Por Carlos Brando em 20 de Abril de 2009 | 10 comentários
522695099_026b8d7ffe

Foto de Joi

Para ser verdadeiramente inspirado por um grande trabalho, é preciso saber que você está fazendo a diferença. Que você está adicionando algo de valor ao universo. Que você é parte de algo que fará a diferença e que você tem um papel significativo nisso.

Para fazer a diferença você não precisa estar fazendo algo necessariamente grande. Você não tem de estar à procura da cura para o câncer. Mesmo uma garçonete de uma lanchonete do bairro pode estar fazendo a diferença. O fundamento é que seus esforços seriam perdidos e seus clientes teriam uma sensação de perda se você parasse de fazer o que você está fazendo.

Se o que você estiver fazendo não tiver um propósito, o prazer no seu trabalho acabará e você sentirá um vazio. Eu vivi essa sensação mais de uma vez. Eu trabalhava com ferramentas, técnicas e até mesmo com pessoas que eu gostava, mas o fim não justifica a viagem.

Você só pode se esconder nas sombras dessas circunstancias até o momento em que sua paixão começa a sumir. Você só pode desculpar sua falta de impacto sobre o mundo com “mas é muito dinheiro” ou “pelo menos estamos fazendo de forma ágil” ou mesmo “desta forma eu posso continuar usando Rails” até que a lista de histórias se repita e tudo comece a soar igual.

Lembre-se que seu tempo é limitado. Quando você descobrir que só está comendo alimentos sem calorias, olhará seu rosto pálido no espelho e verá que pode ser difícil de se reconhecer.

Lembro-me de acordar com esta cara um dia, há muito tempo atrás, e pensar que “o mundo estaria exatamente igual se eu não estivesse por aqui nos últimos seis meses”. É um sentimento terrível de arrependimento.

Mas a boa notícia é que nunca é tarde demais para fazer alguma coisa. Eu abriria mão de uma atmosfera aconchegante no trabalho e da oportunidade de utilizar uma ferramenta que gosto de usar se o preço for ter de fazer um trabalho que simplesmente não importa. Você também deveria fazer isso.


Este texto é uma tradução de um artigo do blog Signal vs. Noise.

Faz tempo que não escrevo sobre as novidades para a próxima versão do Rails, mas esta em particular me chamou a atenção. No Rails 3.0 não teremos mais a validação de tokens em requisições AJAX.

Este tipo de validação por tokens é essencial para evitar ataques do tipo CSRF. Ao montar um formulário HTML, automaticamente o Rails adiciona um token (um código com letras e números baseado no id da sessão atual) ao formulário, quando o mesmo é enviado de volta ao servidor é possível então verificar se aquele formulário está vindo de uma sessão valida ou se está vindo de algum outro site malicioso.

Até então, este token por padrão também era adicionado automaticamente às chamadas AJAX através dos helpers do Rails. Mas ao criar os seus próprios códigos AJAX Javascript, era necessário que você manualmente incluísse este token para que sua requisição não fosse recusada pelo servidor.

Mas requisições AJAX maliciosas não podem produzir ataques do tipo CSRF, então todo este trabalho manual era desnecessário, e por isto será retirado do Rails na próxima versão. Particularmente eu gostei disso.

A melhor linguagem de programação é o programador

Por Carlos Brando em 16 de Abril de 2009 | 15 comentários
252307864_054f2aa280

Foto de Jesper Rønn-Jensen

Quem acha que o mercado de software se resume à programadores e ao simples ato de escrever código não poderia estar mais enganado. Desenvolvimento de software tem tudo a ver com paixão.

Escolher uma linguagem de programação é quase como uma religião para muitos. Longas discussões são travadas sobre qual é a melhor linguagem ou sobre qual é a melhor metodologia a ser utilizada. Como se adotar uma determinada linguagem, ou uma ferramenta especifica fosse a resposta para o sucesso de um projeto ou a solução para o crescimento de sua empresa.

Pessoas apaixonadas estão dispostas a fazer tudo para demonstrar o seu amor por aquilo que acreditam. Aproveitando-se deste mercado centenas de empresas sobrevivem vendendo cursos, livros, certificações e principalmente ferramentas e novas linguagens de programação.

Se tornar um bom programador é um processo demorado e na maioria das vezes caro. Calcule quanto você já gastou apenas no processo de aprendizagem, desde um curso básico de programação até a compra do livro mais avançado sobre a sua linguagem preferida. Se você correu atrás de uma certificação, provavelmente você gastou muito mais. Mesmos autoditadas como eu, gastamos centenas de reais todo ano comprando novos livros.

O aprendizado nunca para nesta profissão, um bom programador sempre estará de olho em um novo livro, o tempo todo, mesmo que ainda não tenha terminado de ler os que tem em mãos. Agora some também a isto os gastos que você ou sua empresa tem com a compra de licenças de ferramentas, sistemas operacionais, computadores mais velozes e coisas do tipo.

Mas me deixa te contar um segredo, não existe uma “melhor ferramenta” e muito menos a “melhor linguagem de programação”. Mas existem pessoas, seres humanos com suas experiências e teorias. Desde o principio o homem tem se virado da melhor maneira possível com as ferramentas que tem em suas mãos. Limitações sempre nos fizeram bem, elas incentivam a inovação e nos forçam a manter o foco.

O melhor programador é aquele que sabe improvisar, se virar com o que tem em mãos. Ele tem prazer em resolver problemas que parecem impossíveis para os programadores ruins, aqueles que acreditam que somente uma linguagem de programação ou uma ferramenta única podem resolver todos os problemas.

Não invista muito em ferramentas, não compre um novo livro antes de terminar o que você está lendo e principalmente não compre tantos livros sobre a mesma linguagem de programação. Antes você programava em Java, C# ou PHP, agora você programa em Ruby, Erlang ou Scala, e amanhã você programará em alguma outra linguagem. Invista mais em você, e menos em uma linguagem de programação ou ferramenta porque estas coisas passam.

O melhor programador não costuma ser o que sabe mais, mas sim o mais criativo.

Programar é difícil

Por Carlos Brando em 15 de Abril de 2009 | 14 comentários

maeve_after_hard_days_programming
Programar é uma arte. Resume-se a ensinar um computador a fazer o que tem de ser feito. Não basta apenas sentar em uma cadeira e começar a escrever código, você não é apenas um mero codificador. Esta arte exige que você seja um bom ouvinte, aprenda com facilidade e acima de tudo seja um excelente interpretador.

Você deve ouvir os devaneios e desejos mais insanos de seus clientes e traze-los para o mundo real de uma forma que uma máquina possa entender. Seu trabalho deve ser feito de uma maneira que outras pessoas também possam trabalhar nele e é muito importante documenta-lo de uma forma que outros possam entende-lo. E tudo isto é feito com um cronometro ligado, você está lutando contra o tempo.

Sim, você realiza pequenos milagres todos os dias. Programar é difícil!

Wow, a major release? Yes, a major release and we have plenty reasons for that. Since me and José Valim were working on it for a couple months, we have quite a list :) . So follow up:

1. Remarkable Core

Remarkable is now a framework for rspec matchers. Since Rails matchers are not simple, as Remarkable grew, we saw our matchers full of logic to show messages (description and failure messages) and that some methods could be automatically generated, reducing repetitive work.

Compare the allow_mass_assignment_of matcher in Remarkable 2.x and in Remarkable 3.0. Which one do you prefer? :)

So we built a DSL and called it Remarkable, which with Remarkable ActiveRecord and Remarkable Rails, provides you nice matchers/macros to speed up your tests. To install them, just do:

sudo gem install remarkable_rails

You can also install just remarkable or just remarkable_activerecord. But remarkable_rails brings you the whole packet.

2. I18n

On Rails Summit Latin America, Obie Fernandez talked about the Hash Rocket way and one of the items were that they actually print out the specs and give it to the client. Both me and José work with Rails projects and we couldn’t deliver the same to technical clients, because the output was in english. Well, we scratched our own itch!

This is how an English output would be like:

Example disabled: require age to be set

User
- should require name and email to be set
- should ensure length of name is within 3..40 characters
- should require unique values for email
- should ensure numericality of age allowing only integer values and allowing blank values

In Remarkable, we can have the same results in Portuguese:

Exemplo desativado: exigir presença de idade

Usuário
- deve exigir presença de nome e email
- deve garantir tamanho de nome seja entre 3..40 caracteres
- deve garantir valores únicos para email
- deve aceitar apenas números em idade permitindo somente valores inteiros e permitindo valores nulos

As you have noticed everything gets translated including the class and attributes names. This happens by setting up Remarkable and Rails yml files.

3. Macros

In Remarkable earlier versions, we coded the matcher (validate_presence_of) but most of the time we had to do some tweaks in other to a matcher becomes a macro (should_validate_presence_of). In Remarkable 3.0 it happens transparently.

In other words, if you are using Remarkable 3.0 to build your matchers you have cleaner matchers, I18n support and transparent macros creation.

4. Pending and disabled macros

In Remarkable 2.2, we added the ability to mark macros as disabled:

xshould_validate_uniqueness_of :name

And it would print on your specs output:

Example disabled: require unique values for name

As some people pointed out, Remarkable was still lacking support for pending macros. Pending examples in Rspec would be:

it "should have one manager" do
  pending("create managers resource")
end

it "should validate associated manager" do
  pending("create managers resource")
end

And now in Remarkable, you have the pending group:

pending "create managers resource" do
  should_have_one :manager
  should_validate_associated :manager
end

In both cases a message “PENDING: create managers resources” is appended to matcher description.

5. More options to matchers

In Remarkable 2.2, we started to support ALL Active Record validations with ALL options. And now we extended support for association matchers!

From only :dependent and :through as supported options, now it accepts:

:through, :class_name, :foreign_key, :dependent, :join_table, :uniq, :readonly, :validate, :autosave, :counter_cache, :polymorphic

Besides matchers became much smarter. Whenever :join_table or :through is given as option, it also checks if the given table exists. Whenever :foreign_key or :counter_cache is given, it also checks if the given column exists.

6. Controllers matchers extended

To provide I18n, we ported redirect_to and render_template matchers from rspec-rails. We also added some extra options to respond_with and render template, so you can now do:

render_template 'edit', :layout => 'users'

respond_with 422, :content_type => Mime::XML,
                  :body => /Unprocessable Entitity/

And the route matcher is willing to make your life twice easier. Since it tests params recognitation and routes generation at once, you can cut your routing_specs at least in a half! So the following lines:

route_for(:controller => "companies",
          :action => "show",
          :id => "1").should == "/companies/1"

params_from(:get, "/companies/1").should == { :controller => "companies",
                                              :action => "show",
                                              :id => "1" }

Will become:

route(:get, "/companies/1", :controller => "companies",
                            :action     => "show",
                            :id         => "1")

7. Macro stubs

There is a presentation from José Valim that explains this feature with more details, but it basically makes your controllers specs from this:

describe TasksController do
  def mock_task(stubs={})
    @task ||= mock_model(Task, stubs)
  end

  describe "responding to #POST create" do
    it "exposes a newly created task as @task" do
      Task.should_receive(:new).with({'these' => 'params'}).
      and_return(mock_task(:save => true))‏
      post :create, :task => {:these => 'params'}
      assigns[:task].should equal(mock_task)end

    it "redirects to the created task" do
      Task.stub!(:new).and_return(mock_task(:save => true))‏
      post :create, :task => {}
      response.should redirect_to(task_url(mock_task))end
  end
end

Become this:

describe TasksController do
  mock_models :task

  describe :post => :create, :task => {:these => 'params'} do
    expects :new,  :on => Task, :with => { :these => 'params' }, :returns => mock_task
    expects :save, :on => mock_task, :returns => true

    should_assign_to :task, :with => mock_task
    should_redirect_to { task_url(mock_task) }
  end
end

It aims to improve readability and be more DRY, since you declare your expectations/stubs just once. You can see the whole controller specs in rspec and remarkable way compared here.

It works by eval’ing the expectation/stubs chain and performing the action before each macro is executed. On should_assign_to it evals using expectations (:should_receive), on should_redirect_to it uses stubs (:stub!).

We also want to thank David Chelimsky that gave the nice hint to allow :post => :create inside the describe method and suggested to use mocha syntax. :)

8. Documentation, documentation and documentation

Yes, three times, because each project is very well documented. Browse them:

Remarkable:
http://remarkable.rubyforge.org/core/

Remarkable ActiveRecord:
http://remarkable.rubyforge.org/activerecord/
http://remarkable.rubyforge.org/activerecord/classes/Remarkable/ActiveRecord/Matchers.html (just matchers)

Remarkable Rails:
http://remarkable.rubyforge.org/rails/
http://remarkable.rubyforge.org/rails/classes/Remarkable/ActionController/Matchers.html (just matchers)

9. Volunteers?

Last but definitely not least: we need you!

http://travelpod.files.wordpress.com/2009/02/446px-uncle_sam_pointing_finger.jpg

We created a solid basis for matchers/macros creation. And we want to take it further by hosting even more matchers. So anyone who wants to work on Remarkable Datamapper, Remarkable Sequel, Remarkable Sinatra, please step in! We are waiting for you. :)

And all the others can equally help us by joining the group and posting bugs, matchers, enhancements in bug tracking system.

O Twitter está abandonando o Ruby. Eu faria o mesmo.

Por Carlos Brando em 10 de Abril de 2009 | 24 comentários

twitter

Com certeza você já ouviu muita coisa a respeito do Twitter estar trocando seu código de backend de Ruby para Scala. Mas o Twitter ainda continuará com Ruby on Rails no seu frontend.

Mesmo isso não afetando a vida de ninguém, uma certa polemica foi criada quanto a qualidade dos desenvolvedores do Twitter e principalmente sobre as capacidades do Ruby/Rails. Muitos membros importantes da nossa comunidade internacional escreveram em seus blogs a respeito deste assunto e a grande maioria demonstrou sua insatisfação com a decisão, muitos deles até levantaram quais decisões poderiam ser tomadas afim de melhorar o serviço e continuar com Ruby.

Sendo empático com a equipe do Twitter, eu posso dizer que tomaria a mesma decisão. É evidente que Ruby não é a melhor escolha para o Twitter.

O primeiro ponto que precisamos considerar é que o Twitter cresceu demais. Quando ele foi concebido não se tinha ideia de que faria tanto sucesso. E como é óbvio para qualquer usuário do serviço, dado aos constantes problemas de escalabilidade, ele foi criado com pouco ou nenhum planejamento nesta área, o que é totalmente aceitável para um projeto deste tipo.

Com o sucesso também vieram os problemas. E para ajudar a resolver estes problemas eles precisavam de uma linguagem que tivesse um sistema mais eficiente de threading, uma performance melhor e um baixo consumo de memória, coisas que não são consideradas como pontos fortes do Ruby.

Seguindo este raciocínio, talvez alguns questionem que ainda assim uma boa equipe de Ruby poderia resolver este problema de outra forma, talvez usando algum projeto como o excelente RabbitMQ, mantendo o código em Ruby e sanando grande parte do problema. Sim, tendo Ruby como minha linguagem de programação preferida também gostaria de ver isto acontecendo, mas temos de considerar que aparentemente, e devido a certos comentários feitos por Alex Payne, o twitter parece não ter uma equipe excepcional de Ruby. Mas por outro lado tem Alex, que por ter acabado de escrever um livro sobre Scala deve ser um profundo conhecedor desta linguagem.

Analisando por este angulo, concordo com a escolha e faria o mesmo se estivesse no lugar deles. Só espero que Alex treine muito bem sua equipe para que depois ninguém diga que Scala não escala, pois isto soaria ridículo.

O (comovente) guia de Ruby do Why

Por Carlos Brando em 09 de Abril de 2009 | 34 comentários

drcham-4

Depois de quase um ano de muito trabalho, finalizamos a versão 1.0 do comovente Guia de Ruby do Why.

Após um colossal trabalho de tradução realizado por muitos membros da comunidade Ruby brasileira e uma mega revisão feita por Hugo Borges temos o prazer de anúnciar a versão final do livro totalmente em português!

Uma lista com o nome dos tradutores pode ser encontrada aqui.

Este com certeza é um grande presente para aqueles que desejam aprender a linguagem Ruby do jeito certo. Why é um grande desenvolvedor e consegue ensinar como ninguém. De uma forma simples e com muita doideira ele consegue ensinar Ruby até mesmo para crianças.

Para ler o livro acesse: http://why.nomedojogo.com

Espero que todos tirem muito proveito deste livro e por favor espalhem a noticia.

Só imaturos não testam – o vídeo

Por Carlos Brando em 08 de Abril de 2009 | 10 comentários

Meu amigo Hugo Borges (ou agaelebe) acabou de liberar o vídeo da minha palestra no Ruby + Rails no Mundo Real. A gravação ficou de altíssima qualidade.

E falando em palestra, estarei presente também no 14º Encontro de Design e Tecnologia Digital em São Paulo no dia 25 de abril. O tema desta vez será “The Rails Way – Como Ruby on Rails pode o tornar um programador pior”. Fiquem de olho no Ruby Inside Brasil que vai rolar uma promoção relacionada a este evento em breve…

Categorias:

Propaganda: