Luciano Sousa

Ruby Enthusiastic and Rails Developer

Migrando Do Paperclip Para O Carrierwave

Recentemente, tive um problema muito grande com o paperclip ao carregar/paginar somente 20 itens.

Descrição do problema: Antes de carregar as páginas, o paperclip fazia requets diretamente na S3 e só carregava a view depois de baixar/carregar/anything todas as imagens. Isso gerava um tempo de espera absurdo. Era praticamente impossível utilizar a app porque eu tinha uma lista de 20 itens, com 3 links cada item. uma imagem e dois outros arquivos, todos no S3. Ou seja, antes de carregar a página, minha app fazia 60 requests para a amazon, carregava todo os links e depois renderizava a mesma.

Durante a investigação do problema, o projeto não tinha newrelic e eu instalei para me ajudar a resolver ou me dar uma luz, visto que eu imagina que era isso mas não tinha certeza nenhuma, somente uma linha no meu terminal que dizia que minha view - uma única partial com esses 3 links- levava 20 segundos para carregar. Agradeço imensamente ao serviço free deles. Por mais que eu imaginasse que o problema era isso, eu não tinha como provar nada, então graças a alguns gráficos e informações relevantes, pude de fato confirmar que o problema era isso.

Segue um exemplo de como estava o load da minha página, com dados:

1
2
3
4
5
6
7
8
9
10
Breakdown table
Category     Segment                                  % Time   Avg calls(per txn)  Avg time(ms)
External     Excon[example.s3.amazonaws.com]: HEAD    96.2     25.0                23,300
View         examples/_example.html.erb Partial        1.4     25.0                339
View         examples/index.html.erb Template          1.0      1.0                247
Middleware   ActionDispatch::Routing::RouteSet#call    0.4      1.0                97.3
View         examples/_filters.html.erb Partial        0.2      1.0                44.8
Database     SQL - SELECT                              0.2     38.0                59.3
Rack App     Example::Application#call                 0.1      1.0                16.3
View         layouts/application Template              0.1      1.0                18.3

Depois de procurar por muitas soluções, até nas issues já fechadas do github encontrei um ma solução parcial. No meu caso, eu usava o paperclip com a gem fog. O fog era carregado por um arquivo initializer do paperclip. ex:

1
2
3
4
5
6
7
Paperclip::Attachment.default_options[:storage] = :fog
Paperclip::Attachment.default_options[:fog_credentials] = { 
  aws_access_key_id: Settings.aws_api_key,
  aws_secret_access_key: Settings.aws_secret_key,
  provider: Settings.file_provider
}
Paperclip::Attachment.default_options[:fog_directory] = Settings.aws_bucket

O problema do paperclip nesse caso, de acordo com infos da issue #909(https://github.com/thoughtbot/paperclip/issues/909) no github era que a cada load do paperclip em um item, ele fazia o load dos settings do paperclip com um parse das infos.m

Hoje em dia:

1
2
3
4
5
6
7
8
9
Breakdown table
Category     Segment                                   % Time     Avg calls(per txn)  Avg time (ms)
External     Net::HTTP[example.amazonaws.com]: HEAD    62.0       2.08                477
View         examples/_example.html.erb Partial        21.7       25.0                167
View         examples/index.html.erb Template          7.1        1.0                 54.6
Database     SQL - SELECT                              2.4        26.5                18.4
View         examples/_filters.html.erb Partial        1.7        1.0                 13.4
Middleware   ActionDispatch::Routing::RouteSet#call    1.1        1.0                 8.47
View         layouts/application Template              0.8        1.0                 6.43

Resumo: Com um loadtime de ~23 segundos antes, agora temos um loadtime de ~4, praticamente 6 vezes mais rápido.

Como E Por Que Trabalhar Remoto?

Quando eu decidi me mudar para Botafogo no Rio de Janeiro e percebi que seria o mesmo preço de um aluguel na América do Norte, logo pensei: Está na hora de eu sair do país. Sair não por sair, o real motivo é exatamente o que eu faço hoje, melhorar meu inglês. Basta olhar para 4 meses atrás e ver a diferença, sim, vale a pena, e ainda está valendo.

Eu poderia citar outros 10 bons motivos, incluindo minha paixão de viajar, promoções de passagem que consegui, etc, mas, o grande resumo é o valor que você agrega a sua vida, língua que você aprende, etc. É sensacional.

Adendo: Se você está confortável onde está, sente-se bem, não tente fazer coisas tão radicais, você vai se frustar em descobrir que algumas coisas não são como você imaginava, especialmente em despesas gerais, fora aluguel. Você economiza de um lado e acaba gastando de outro. Se preocupe em estar bem com você; Eu não estava, queria viver ‘overseas’ por algum tempo.

Muita gente me pergunta por que e como eu faço isso. Os motivos estão acima, o como vem a seguir:

1) Internet - Não interessa onde você mora, tenha internet em casa, e se possível uma internet no seu smartphone para emergências, redundância nesses casos é muito importante porque imprevistos acontecem a todo o tempo, além do mais, é muito agradável trabalhar da rua algumas horas, como de cafés, e a internet desses lugares pode não ser lá das melhores ou pode ter algum bloqueio para determinadas coisas, como ssh.

2) Bonera Software - No Brasil nós temos, com certeza, centenas de bons desenvolvedores, mas, empresas para conseguir manter esse pessoal por muito tempo é muito difícil. Muitas das empresas ainda tem um pensamento onde desenvolvimento de software é como trabalhar em indústria, você faz coisas mecanicamente, mas no fundo todos nós sabemos que não é assim. O maior fator, com certeza, para eu conseguir trabalhar remotamente é ter uma boa empresa envolvida e me permitir isso.

3) GitHub - Dispensa comentários. Git + Github elevaram o nível de compartilhamento de código a um nível que é desnecessário comentar. Use e seja feliz.

4) HipChat - Iniciamos o uso do chat interno com o Campfire mas por experiências passadas sugeri o hipchat, com certeza é um dos meus grandes aliados hoje em dia, chat em tempo real super simples e super customízável. Diferentes ‘salas’ para diferentes tipos de ‘setores’ ou algo do tipo. Use da maneira que achar melhor.

5) Skype - Amigável quando precisamos fazer reuniões, que por nossa sorte tem sido curtas, o skype continua sendo um dos melhores programas para conversas voz/vídeo.

6) Macbook Air - Leve, robusto, nunca me deixou na mão, tudo que preciso fazer é resolvido com esse pequeno e leve notebook. Cabe em qualquer espaço da mochila, logo, sempre está comigo.

7) LeanKit Kanban - Apesar de ser uma ferramente que eu não gosto nem um pouco, tem correspondido muito bem as nossas necessidades de gerenciamento de tarefas. Tentamos o github issues mas é muito pobre de configuração; Basecamp tem muita configuração; PivotalTracker tem uma auto-configuração para sprints, o que nos atrapalha porque não estamos em um formato muito relacionado a Scrum, no fim, apesar do layout desagradável que eu não gosto, a ferramenta é boa.

8) DropBox - Sendo utilizado bem menos ao longo do tempo por mim, o dropbox é um bom local para guardar documentos que precisam ser compartilhados com outras pessoas. Para desenvolvedores o github com certeza é a única ferramente necessária nesse caso.

9) Foco - Facebook/ twitter e afins podem acabar com sua vida em relação a suas tarefas, se você tem sérios problemas de concentração como eu, recomendo uma pequena configuração no seu arquivo de hosts, sem mais:

No fundo, o maior problema que podemos ter trabalhando remotamente somos nós mesmos. Foco e boa comunicação com a equipe resolvem 99,9% dos problemas, os outros 0,1% são falta de internet.

É isso, se você utiliza alguma coisa que eu não citei aqui e acha que pode ajudar alguém, compartilhe conosco. Abs.

A Dívida Com a Comunidade

Nas últimas semanas, devido a um estado de catarse, resolvi começar a pensar como eu, filho de funcionários públicos – professores, aquela famosa classe média sofrida – consegui chegar no estágio atual: trabalhar remotamente do Canadá - por opção - para o Brasil.

A respota veio no ato: Foi graças ao dia em que o Henrique Bastos e o André Fonseca entraram no Rio Java Developers Day em Copacabana/RJ para falar sobre o HoraExtra e o DojoRio. Com certeza eles sabiam que todos esses movimentos agregavam muito, mas eles não sabiam que levariam pessoas a realizar sonhos e desejos, tal como eu hoje e alguns outros antes, como o Bernardo Fontes .

Se você ainda não está entendendo nada, vamos lá:

O DojoRio é um evento no Rio de Janeiro onde as pessoas se reunem para resolver problemas de uma forma completamente informal. A idéia não é resolver o problema, e sim aprender diferentes formas de codificação juntos. Exemplos clássicos de ‘problemas’ são: jokenpo e conversão de inteiros para romanos.


O HoraExtra é um grupo que se reúne todas as segundas-feiras no centro do Rio de Janeiro - ver endereço no site já que não é fixo, e você pode e deve ir - para conversar sobre tecnologia e afins, e não menos importante, beber uma cerveja bem gelada.

Através de inúmeros eventos como o PythonCampus, ForkinRio Rails, DevInRio I; e o próprio DojoRio fui capaz de aprender coisas que não aprenderia nunca dentro de uma faculdade ou um curso - eu e mais alguns muitos outros felizardos. Tudo isso era na maioria das vezes gratuito, quando pago dificilmente era algo ao ponto das pessoas não conseguirem pagar.

Ao que é o foco; eis algumas das dívidas que eu adquiri ao longo do tempo:

ForkinRio Rails: uma escola, uma pena ter durado pouco, mas foi o suficiente para fazer minha cabeça mudar um pouco; aprendi muita coisa com muitos companheiros de estudo, como o André Peixoto, Rafael Moulin e o Mário Mariani – que também cedia o lugar onde trabalhava para nos encontrarmos. Custo: R$ 0,00

Emprego novo: Oscar Marques, através da lista do horaextra me recomendou para o Fernando Kosh e alguns dias depois eu já estava em uma nova empresa, trabalhando com uma tecnologia de ponta e em um projeto super difícil. O que era para durar 3 meses, acabou levando 6 e ficou na bagagem uma experiência muito grande. A empresa que trabalhávamos terminou e o Kosh agora toca a KoshTech, onde atualmente ocorrem vários eventos como o ForkinRio Rails - edição 2 - e o StartOnrails.

DojoRio: Uma verdadeira escola de desenvolvimento de software; Quantas vezes você está na rua fazendo algo e chega em casa e ainda continua fazendo a mesma coisa? O DojoRio estimula você a praticamente levar trabalho para casa, de uma forma completamente agradável. Cada semana um novo desafio e pessoas novas/antigas dispostas a nos ajudar, como o Israel Teixeira, que deve ter ido a muitos lugares divulgar HoraExtra e DojoRio como o Henrique e o André fizeram, e como todos os outros, que se eu colocar o nome aqui…

Eu sinceramente não faço idéia de como retribuir tudo isso, sei que deve ser na mesma moeda, agregando mais para a comunidade e tentando sempre colocar novas pessoas nesse nosso ambiente; contribuição com projetos de código aberto, que é uma coisa que eu passei a fazer desde o começo dos meus estudos também é um outro altamente relevante que eu encaro como ‘dívida’. A estrada é longa, ainda tenho muito a fazer, e espero ter muito tempo para fazer o todo que acho válido.

Enfim, o recado é esse,


À todos que participam da comunidade de software do Rio de Janeiro - me desculpe por alguns nomes aqui, mas eu precisava fazer isso - acredito de verdade que as coisas só funcionam no nosso caso pelo fato de todos os membros dos eventos que temos aí serem tão dispostos a ajudar; de ir aos sábados para lugares tão longes de casa e não ser pago pra isso, fazer por vontade; não somente por causa de ABC, mas pelo todo que somos. Um brinde, vocês podem transformar a vida das pessoas, e eu tenho tentado fazer o mesmo, ainda que de longe, vou tentando pagar minha eterna dívida com todos vocês, e com todos os novos membros, que também nos agregam com visões totalmente diferentes das nossas. Pretendo continuar divulgando tudo que nós, juntos, podemos fazer pelas pessoas, mesmo que em baixa escala comparado ao tamanho da cidade/estado/país, nós fazemos a nossa parte… podemos ter orgulho disso.

Cheers.

PS: Henrique, André, obrigado… já se foram 3 anos e eu nunca esqueci daquele dia… Small Acts

PS2: Todas as referências externas nesse post devem e merecem ser assistidas.

Empresas Brasileiras, Ou Por Que Você Mora Em Uma Merda De País?

Quem me conhece sabe o quanto odeio ver as pessoas falando mal do Brasil, especialmente da minha cidade, Rio de Janeiro. Pois bem, em certos casos nós até que merecemos tomar umas boas porradas na cara para começar a cair na real do quanto isso precisa melhorar.

Eis aqui um relato do que se passou com minha pessoa nas últimas semanas:

Fato 1: Comprei uma barraca de camping de uma empresa muito famosa no Brasil, quiçá a mais famosa e teoricamente a melhor. Barraca grande, boa, com varanda, me atendeu perfeitamente no reveillon - tirando o fato de um dos barbantes da armação ter arrebentado enquanto montava a mesma pela primeira vez - e, em minha segunda viagem com ela, tive duas desagradáveis surpresas:

Dia 1) Fui a rua, voltei e me deparei com um dos gravetos da armação quebrado, quase furando a barraca. Arrumei tudo bonitinho com a ajuda do Senhor dono do Camping, e ok. Let’s go to party.

Dia 2) Saí cedo, voltei cedo, e eis que me deparo com outro graveto quebrado, da mesma armação (a da varanda). Desisti de tentar consertar por causa do horário e começei a desmontá-la. Notei que a armação da barraca estava com alguns gravetos tortos, bem prováveis de quebrar na próxima montagem dela… até então tinha problema somente com a armação da varanda.

Volto de viagem, e no dia seguinte a minha chegada a cidade maravilhosa ligo para a empresa e conto o ocorrido; Eles pedem para eu enviar a armação com um relato do que aconteceu, etc… Paguei o envio, chegou para eles, não falaram nada se receberam ou não e ok. Passados dois dias, ligo para saber o andamento do meu pedido: Recebo a notícia de que minha armação está com eles mas ainda não avaliaram, nem tem um prazo para enviar um novo jogo, talvez na semana que vem já esteja com você é a resposta.

Resumo da história, hoje, 18 de janeiro de 2012, com um feriado na minha cidade na sexta, no dia 20 de janeiro de 2012, estou sem uma barraca para acampar, e, provavelmente, sem ter como viajar.

Fato 2: Vou a uma cafeteria bem famosa, com cultura completamente estrangeira, escolho meu café; pago; recebo um café diferente; recebo o ‘errado’ - ainda assim bom - como cortesia e o meu pedido certo. Tá certo que é um mísero café de menos de 10 reais, muito mais barato que uma barraca de camping.

Daí você pensa, mas, quer comparar um café de 10 reais com uma barraca de 300 reais?

Então o que dizer quando a Amazon envia a você um kindle novo, cobrindo a garantia deles, e ainda paga o frete do seu envio? Ah, eu estou maluco? Leia isso então: Como funciona o atendimento da Amazon

Resumo da história: Falta muito para podermos bater no peito e falar que moramos em um país de bons serviços e/ou de boas empresas.

Contribua Com O Git Na Prática

Pra quem não sabe, tem um pessoal aqui no Brasil tocando um projeto chamado git na prática, que tem por finalidade criar uma documentação rica e em português desse sistema de versionamento.

De uns dias para cá, a galera começou a andar em um ritmo muito bom, estando prestes a terminar uma primeira parte da documentação, já pensando nos tópicos futuros.

Se você conhece algo de git e tem vontade de contribuir com o projeto, faça seu fork e prepare seu material para submeter!

A comunidade agradece.