Browsed by
Month: April 2013

Screencast #2 – Interessante plugin “vim-abolish”

Screencast #2 – Interessante plugin “vim-abolish”

Esse é o segundo screencast que eu faço para o blog e novamente é sobre Vim.
Esse ficou bem mais curto (tem apenas 5 minutos) e vai direto ao ponto. Espero que gostem!

Se quiserem ver o primeiro, o link é: http://blog.lucascaton.com.br/index.php/2011/12/13/screencast-1-17-dicas-para-o-vim/

Links relevantes:

Screencast:

(caso não consiga ver o vídeo, clique aqui)

Por favor, mandem feedback sobre o que acharam!

Projeto “MyPodcasts.info”

Projeto “MyPodcasts.info”

Eu sou um cara que gosta muito de escutar podcasts. Escuto vários, sobre variados temas, alguns em português, outros em inglês, alguns sobre áreas totalmente diferentes da que eu trabalho, alguns nostálgicos, alguns pra melhorar meu inglês, etc. E sempre que encontro com alguém e descubro que a pessoa também escuta podcasts, rola as perguntas sobre qual escuta, sobre o que se trata, quais amigos em comum escutam, qual o nível de qualidade, entre outras dúvidas. Foi aí que surgiu a idéia de criar o site MyPodcasts.info, um site onde você pode cadastrar tudo isso e no final ter uma URL publica para passar para os interessados nos podcasts que você escuta.

Há 2 meses atrás eu o coloquei no ar e logo em seguida o liberei como open-source: github.com/lucascaton/mypodcasts.info. Então, sintam-se a vontade para usar o site e contribuir com ele.

Seguem alguns screenshots:

Screen Shot 2013-04-21 at 6.38.43 PM

Screen Shot 2013-04-21 at 6.44.15 PM

Screen Shot 2013-04-21 at 6.44.50 PM

Ah sim! O site é (mais ou menos) responsivo:

Screen Shot 2013-04-21 at 6.48.11 PM

Interesting script written in Ruby: “The Globe”

Interesting script written in Ruby: “The Globe”

Minutes ago I received this link from some friends. It’s very interesting (and crazy).

Create an empty ruby file, paste this content and save as a.rb.

v=0000;eval$s=%q~d=%!^Lcf<LK8,                  _@7gj*LJ=c5nM)Tp1g0%Xv.,S[<>YoP
4ZojjV)O>qIH1/n[|2yE[>:ieC       "%.#%  :::##"       97N-A&Kj_K_><wS5rtWk@*a+Y5
yH?b[F^e7C/56j|pmRe+:)B     "##%      ::##########"     O98(Zh)'Iof*nm.,$C5Nyt=
PPu01Avw^<IiQ=5$'D-y?    "##:         ###############"    g6`YT+qLw9k^ch|K'),tc
6ygIL8xI#LNz3v}T=4W    "#            #.   .####:#######"    lL27FZ0ij)7TQCI)P7u
}RT5-iJbbG5P-DHB<.   "              ##### # :############"   R,YvZ_rnv6ky-G+4U'
$*are@b4U351Q-ug5   "              #######################"   00x8RR%`Om7VDp4M5
PFixrPvl&<p[]1IJ   "              ############:####  %#####"   EGgDt8Lm#;bc4zS^
y]0`_PstfUxOC(q   "              .#############:##%   .##  ."   /,}.YOIFj(k&q_V
zcaAi?]^lCVYp!;  " %%            .################.     #.   "  ;s="v=%04o;ev"%
(;v=(v-($*+[45,  ":####:          :##############%       :   "  ])[n=0].to_i;)%
360)+"al$s=%q#{  "%######.              #########            "  ;;"%c"%126+$s<<
126}";d.gsub!(/  "##########.           #######%             "  |\s|".*"/,"");;
require"zlib"||  "###########           :######.             "  ;d=d.unpack"C*"
d.map{|c|n=(n||  ":#########:           .######: .           "  )*90+(c-2)%91};
e=["%x"%n].pack   " :#######%           :###### #:          "   &&"H*";e=Zlib::
Inflate.inflate(   "  ######%           .####% ::          "   &&e).unpack("b*"
)[0];22.times{|y|   "  ####%             %###             "   ;w=(Math.sqrt(1-(
(y*2.0-21)/22)**(;   " .###:             .#%             "   ;2))*23).floor;(w*
2-1).times{|x|u=(e+    " %##                           "    )[y*z=360,z]*2;u=u[
90*x/w+v+90,90/w];s[(    " #.                        "    ;y*80)+120-w+x]=(""<<
32<<".:%#")[4*u.count((     " .                   "     ;"0"))/u.size]}};;puts\
s+";_ The Qlobe#{" "*18+ (       "#  :#######"       ;"Copyright(C).Yusuke End\
oh, 2010")}";exit~;_ The Qlobe                  Copyright(C).Yusuke Endoh, 2010

After that, just run this script using:

while true; do clear; ruby a.rb | tee b.rb; sleep 0.2; mv -f b.rb a.rb; done
Tenha orgulho ou f…-se

Tenha orgulho ou f…-se

(Esse post é uma tradução (autorizada) do artigo “Take pride or f— it” do Rob Heaton)


O arquivo vazio “sem_titulo.txt” brilhando no seu editor de código só pode significar uma coisa. É hora de criar uma nova funcionalidade.

A última funcionalidade que você desenvolveu começou muito bem, com uma arquitetura esculpida tão elegante e requintada que te fez chorar um pouco quando ninguém estava olhando. Mas as coisas mudaram e no final ficou um lixo. Você não estava particularmente orgulhoso de nada e agora está feliz apenas porque isso vai sair do seu caminho. “Mas tudo vai ser perfeito dessa vez!” você diz a si mesmo e mais uma vez ansiosamente começa a trabalhar. Um pouco mais tarde você olha ao redor e sua funcionalidade que já está meio pronta já está caindo aos pedaços, está em chamas. “Droga!” – você diz.

Eu passei por isso em muitas funcionalidades e projetos. Estou cansado disso e eu sei por que isso acontece. Eu escrevo codigo bom e crio um bom produto quando eu me sindo orgulhoso do que eu estou fazendo. Esse sentimento pode vir por vários motivos – uma equipe que valoriza bom código, clientes os quais estão desesperados para testar uma nova funcionalidade ou uma sensação de habilidade e crença que estou me divertindo fazendo algo bom. Idependente de de qual seja o motivo, se ele não existir, o que eu estou fazendo ficará bem ruim.

Quando eu perco o orgulho de alguma coisa, eu paro de me preocupar se isso ficará bom ou não. O único valor que isso terá para mim é não ter mais que mexer nisso um dia. Isso sempre começa quando estragamos um pequeno trecho do código, mas apenas isso já é o suficiente. A caixa de Pandora foi aberta e a sua nova funcionalidade está infectada. Eu estrago o próximo trecho de código com apenas um pouco de remorso e a partir desse ponto, eu não vou mais vou me importar com isso.

Porque eu sei que você tem que ENTREGAR, que os usuários não se importam como está o seu código, que essa funcionalidade é REALMENTE CHATA e eu só quero começar outra. Então não importa se meus models conhecem a lógica das minhas views, porque levaria 20 minutos que NÓS NÃO TEMOS para resolver isso. Estou fugindo das regras, mas é somente em um ou dois métodos.

Mas isso nunca acaba aí. Essa funcionalidade, ou talvez o produto inteiro, estejam contaminados. Não existe mais nada para se ter orgulho. Não existe nenhuma demonstração de habilidade. Não existe uma forma de fazer que os dados parseados pelo módulo que eu acabei de escrever fiquem legíveis, porque quem vai ler com certeza não entenderá de onde os dados vem. Eu já liberei os cães do inferno e cobri todo o meu código com bacon.

Perder o orgulho do que você faz te transforma em um zumbi, cujo objetivo é, além de ingerir cérebros, é terminar logo a nova funcionalidade. Isso vai acontecer, de qualquer forma. E exceto se você conseguir ter orgulho novamente, esse código não vai ficar bonito. Você tem que lembrar como isso era antes, no começo, há muito tempo atrás. Quando seus controllers eram pequenos e seus models não foram cobertos por ácidos e cacos de vidros. Pense bastante. Pense novamente.

Para minha redenção mortos-vivos, eu tenho que fazer as pazes com o que eu fiz ou então levantar e fazer uma pausa. Então, com a cabeça limpa e reabastecido com bom senso, eu tenho que decidir se quero fazer as coisas direito. Se eu não puder ou não fizer, então essa nova funcionalidade estará condenada e eu devo levar uma estaca até o seu coração e começar uma próxima coisa. Deixar o monstro a crescer e sofrer mutações não é uma opção.

Frequentemente eu sinto que estou gastando meu tempo fazendo coisas direito ou pelo menos de uma forma justificavelmente errada e isso é perdoável. Termine! Entregue! Mas um código ruim reduz a velocidade das coisas muito mais do que um bom código o faria. É muito fácil escrever alguma porcaria, ser forçado a escrever várias camadas de lixo em cima disso, gritar “espirito de LEAN STARTUP” para qualquer um que o questionar sobre o que você está fazendo. Você precisa de uma razão muito boa e imediata para escrever código ruim, ou seja, uma vaga sensação de pressão ou apatia não são suficientes.

Porque isso nunca acaba aí. E tão cedo quanto o T-virus seja produzido, você terá um apocalipse de código-zumbi em suas mãos.