Faz quase 8 anos desde que resolvi iniciar minhas atividades como evangelista de Ruby e de assuntos relacionados à tecnologia. Já fiz algo em torno de 100 palestras contando eventos grandes como Encontro Locaweb, Campus Party, Rails Summit, além de diversas semanas da computação em faculdades pelo país e até oportunidade de palestrar nos EUA, Holanda, Japão e Israel.

Aproveitando que temos um "LONGO" feriado prolongado de amanhã até segunda, talvez seja uma boa oportunidade para colocar tudo que já foi gravado das minhas palestras até hoje num mesmo lugar para que vocês possam assistir tudo de uma só vez ;-) Está em ordem cronológica, de 2007 até 2013 e pretendo continuar atualizando este post quando novas gravações aparecerem. Se conhecerem alguma gravação que eu não listei aqui me avisem nos comentários.

Se gostaram não deixem de curtir e compartilhar para que mais possam assistir também. Boa diversão!

Como disse em redes sociais antes, estou bem em cima do muro quanto a este Marco Civil. Sendo um pouco cínico, claro, se vem do governo, de um governo petista e ainda com apoio da oposição, não pode cheirar bem. O timing e a urgência, claro, é para tirar vantagem dos recentes acontecimentos de escutas da governo norte-americano em território brasileiro e a controvérsia Snowden. O objetivo é aparecer como o salvador da pátria e ao mesmo tempo embutir salva-guardas que legalizem atividades governamentais que são, no mínimo, escusas.

Vou publicar o texto na íntegra e fazer alguns poucos comentários. Muita gente tem muita opinião sobre esse Marco Civil e meu palpite é que 99% sequer leram o texto antes de opinar. Então recomendo que leiam. A fonte de onde tirei o texto é este PDF. Se por acaso eu estiver com um texto defasado me avisem.

Não deixem de comentar.

Atualização (29/03/14): Publiquei um post em Outubro de 2013 que colocar argumentos muito mais detalhados sobre este tema. Leia "Matemática, Trolls, Haters e Discussões de Internet".

O ano foi 2001. Um grupo de programadores sêniores se reuniu numa estação de esqui em Snowbird, Utah. Estavam ali os principais nomes da programação dos Estados Unidos. Kent Beck, Alistair Cockburn, Ward Cunningham, Martin Fowler, Jim Highsmith, Ron Jeffries, Brian Marick, Bob Martin, Ken Schwaber, Jeff Sutherland, Andy Hunt, Dave Thomas, Mike Beedle, Arie van Bennekun, James Greening, Jon Kern, Steve Mellor. É uma lista de "quem é quem" da programação.

Desse encontro histórico surgiu um manifesto de 4 valores e 12 princípios. Ele ficou conhecido como o "Manifesto Ágil".

Treze anos depois, Dave Thomas, o senhor "Pragmatic Programmer" - que inclusive foi um dos mais diretamente envolvidos na redação propriamente dita do texto do manifesto -, publicou um artigo de desabafo chamado "Agile is Dead, Long Live Agility".

Karl Popper

O problema que este artigo vai tentar detalhar é "upload e processamento de imagens". Algo simples como subir uma foto no seu perfil. Assumindo que todos já leram meus artigos sobre o Heroku é hora de mais uma dica muito importante.

Arquitetura Mais Comum

Neste exemplo de ilustração vemos o que a maioria das pessoas iniciando implementa:

  1. Seu browser terá um form multipart e um campo file para escolher um arquivo de imagem e fazer o POST para seu controller do lado Rails

  2. O servidor web recebe o arquivo inteiro primeiro (ex. NGINX) e só então passa pra aplicação. Seu controller recebe esse arquivo, instancia o model adequado com um uploader de Carrierwave montado. O uploader inicia o processamento das imagens, digamos, 5 versões de tamanhos diferentes, usando ImageMagick.

  3. Opcionalmente, o uploader faz o upload das novas versões ao AWS S3. Finalmente, retorna ao controller que tudo deu certo e o controller, por sua vez, devolve uma página de sucesso ao browser.

Este é um artigo bem curto para uma dica que é útil tanto para quem está começando como para quem cria muitos projetos o tempo todo. Todos conhecemos o bom e velho comando rails new novo_projeto que vai criar uma estrutura padrão de projetos. Porém, poucos de nós realmente usamos a estrutura padrão, sempre precisamos de muito mais hoje em dia. Em virtude desse requerimento, o Rails suporta um arquivo de templates onde você pode modificar o comportamento do rails new logo em seguida. Mas esse arquivo é um script chato de manter, chato de configurar.

Em vez disso podemos usar uma outra ferramenta que existe há algum tempo chamado Rails Composer. Assumindo que você já tenha RVM ou Rbenv instalado e configurado:

1
2
gem install rails
gem install rails_apps_composer

Ano passado, quando um projeto de cliente entrou em produção, ter esquecido disso me custou várias horas de muita tensão. Graças à ajuda rápida e precisa da equipe de suporte e desenvolvimento do Heroku (thanks @ped) conseguimos contornar a situação.

O Heroku continua sendo minha recomendação a todos os meus clientes. A menos que você tenha uma situação presente muito particular (e lhes garanto, são casos raros), 99% dos casos cabem como uma luva no Heroku. Portanto, na dúvida, vá de Heroku.

Porém, o Heroku tem algumas peculiaridades que você precisa conhecer. Caso ainda não tenha visto, reveja meu artigo Enciclopédia do Heroku que publiquei em Abril de 2012.

Análise estática de qualidade de código executado automaticamente é uma daquelas coisas que quando você se acostuma a usar passa a pensar "como diabos eu sobrevivia antes sem isso?"

Se ainda não conhece, trate de experimentar o excelente Code Climate criado por Bryan Helmkamp, um rubista muito conhecido na comunidade por contribuições em diversos projetos open source, incluindo o próprio Rails e bibliotecas que já foram muito usadas algum tempo atrás como webrat.

O que o Code Climate faz é muito simples: você cadastra seu projeto público ou privado do Github e ele vai começar a processá-lo até surgir com uma nota que vai de zero a quatro. Eu ainda não vi como é um projeto nota Zero mas considerando que já trabalhamos em alguns projetos de resgate que começou em notas como 2 - e já era lamentável - zero significa "mude de profissão, você não serve para isso."

Veja um dos meus projetos de cliente (e todo projeto de cliente tem o mesmo nível):

Nota de todo projeto de cliente no Code Climate

Recentemente num de nossos projetos tivemos que lidar com uma integração de dados vindo de um sistema feito em C#. Até aqui nenhum problema. O código que tivemos que usar como referência, vindo de um parceiro de nosso cliente, foi basicamente este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Security.Cryptography;
using System.Text;

class Program
{
        public static void Main(String[] args) {
                Console.WriteLine(EncryptData("hello world"));
        }

        public static string EncryptData(string Message)
        {
            byte[] Results;
            System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes("abc123"));

            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
            TDESAlgorithm.Key = TDESKey;
            TDESAlgorithm.Mode = CipherMode.ECB;
            TDESAlgorithm.Padding = PaddingMode.PKCS7;
            byte[] DataToEncrypt = UTF8.GetBytes(Message);
            try
            {
                ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
                Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
            }
            finally
            {                
                TDESAlgorithm.Clear();
                HashProvider.Clear();
            }
            return Convert.ToBase64String(Results);
        }
}

Feliz Ano Novo. Vamos ao primeiro post de 2014 :-)

Conforme prometido, o Ruby Core Team nos entregou seu presente de Natal no dia 25/12/2013. A versão 2.1 do Ruby foi lançado oficialmente.

Se usa RVM basta instalar com rvm install ruby-2.1.0.

Se usa rbenv com ruby-build basta instalar com rbenv install 2.1.0.

A versão TL;DR é o seguinte: se o que você está programando funciona com Ruby 1.9.3 ou com Ruby 2.0.0, muito provavelmente vai funcionar com Ruby 2.1.0. Cada uma delas tem novas funcionalidades em relação à anterior, mas elas não quebram a compatibilidade a ponto de quebrar.

Se sua aplicação utiliza Bundler modifique sua Gemfile para ter a seguinte linha:

1
ruby '2.1.0'

Eu utilizo RVM e quando entro num projeto com uma Gemfile já associada a um Ruby ele automaticamente escolhe a versão certa. Ou mude manualmente como rvm 2.1.0 ou rbenv local 2.1.0. A partir disso rode o bom e velho comando bundle para instalar as gems novamente nesta nova versão de Ruby. O resto é a mesma coisa. Se tudo der certo, você não deve notar nada de diferente.

Finalmente, chegamos ao fim de mais um ano. Para mim, fim de ano, começo de ano, é apenas uma continuação ininterrupta e Ano Novo é uma formalidade. Isso dito, é sempre bom um momento para olhar para trás e ver o que fazer para melhorar pra frente (embora isso deva ser um processo constante e não apenas para uma vez por ano).

Ruby FIles

Se você é minimamente informado sobre os últimos desenvolvimentos no mundo de linguagens e frameworks web, vai lembrar que algumas das coisas mais discutidas são sobre o fator "concorrência", "paralelismo", "I/O assíncrono". Todos os termos são associados com ser ou não ser "escalável".

Nesse cenário, vamos lembrar que nem Ruby, nem o framework Rails se encaixam nesses termos. Por isso muitos chegam à conclusão que é hora de ir para Node.js, Go, Elixir, Scala, Clojure.

Como eu repito essa mesma resposta faz algum tempo, vou descrever aqui em linhas gerais. Para 90% de nós, programadores de aplicações web, isso não é necessário e sequer é prático.

Durante este ano participei de diversos eventos, incluindo semanas de computação em diversas faculdades pelo Brasil.

Dentre workshops, palestras de introdução ao mundo Ruby, dois temas em particular foram destaque para mim.

O primeiro é o tema que chamei de "Startups & Software". Ela não deixa de ser uma evolução de outras palestras que fiz anos atrás como o Entenda Software da Forma Correta de 2010. A intenção é demonstrar que o raciocínio entre desenvolvimento de software, criar startups de sucesso, gerar open source de sucesso, seguem os mesmos princípios. Os dois princípios básicos sendo: "lei dos grandes números" e meu conceito pessoal que verdadeira inovação nasce de restriçoes. Assista a versão mais recente dessa palestra que apresentei online pela Eventials:

Ontem o @Fgrehm mandou no nosso Campfire sobre o projeto rails-assets.org. Ele acabou de ser lançado, portanto não pode ser considerado mais que um "beta". Ela pode ser tanto a salvação da lavoura para front-ends em projetos Rails ou não, na prática ainda não sabemos.

O @jcemer publicou hoje um ótimo post explicando isso do ponto de vista de um front-end full-time, colocando em perspectiva.

Em resumo, o Rails trás um mecanismo fantástico chamado Asset Pipeline. Ele tem diversas funções, em particular otimizar os assets dos projetos Rails, compilando fontes de Sass ou Less para CSS. Depois concatenando todos os CSS, JS em um único arquivo. Depois minificando (com Uglify) para diminuir seu tamanho. Em particular com Sass ele ainda pode concatenar sprites em uma única imagem também. Enfim, o pacote completo para otimizar assets ao máximo.

Se você ainda não conhece sobre esse recurso, não deixe de ler meu tutorial.

Estou um pouco atrasado, mas para quem não sabia recentemente aconteceu o Rubyconf 2013 em Miami. Todas as palestras estão gravadas e disponíveis pela excelente Confreaks.

Estava assistindo as Lightning Talks que foi bem longa (mais de 2 horas!) e selecionei as que foram realmente práticas. Veja minhas favoritas na lista a seguir. Clique no link do tema para ir direto na posição certa no vídeo do YouTube˜ para não perder tempo.