Nossa, o blog está agitado nos últimos dias.
O texto anterior feito pela Mog gerou uma avalanche de comentários! E legal que são vários assuntos acontecendo ao mesmo tempo, graças à novidade de poder responder a um comentário específico (basta clicar em “Responder”, ao lado da data). Como a resposta aparece logo após o comentário e não lá no final, fica fácil de acompanhar o bate-papo. Quer participar também? Vai lá agora e também assine o feed de comentários!
O que mais gostei foi da sinceridade e conteúdo de muitos dos comentários. Tomei um puxão de orelha (aliás, vários) que estava precisando, afinal, o blog acabou ficando meio de lado nos últimos meses.
Mas em vez de desculpas e lamentações, prefiro acatar a vontade popular e… escrever. Você pediu, agora aguenta! :)
Então, vamos falar de nerdices. Hoje lancei uma versão nova do programinha AdiumBook, que serve para organizar seus contatos no Mac. Mas esqueça o programa, ele não é importante agora. O que quero é falar sobre desenvolvimento de software. Olha só:
Dica: Faz o seguinte, abra essa imagem em uma nova janela e deixe à vista, pois todo o texto falará sobre ela. Assim vai ficar mais fácil de entender.
Agora vem uns quatro parágrafos bem chatos, mas aguente firme que é necessário para acompanhar o resto do texto. Eu prometo que depois melhora, tá?
Esta é uma foto do programa Billable, que uso para contabilizar as horas que gasto em cada tarefa durante o trabalho. Ele tem um relojinho que eu disparo quando começo e depois paro no final. No lado esquerdo estão os projetos e na tabelinha estão as tarefas. As linhas em azul estão selecionadas. Então o que estamos vendo são as tarefas do projeto AdiumBook.
Dentro da tabela, selecionei apenas as tarefas mais recentes deste projeto, que mostram todo o trabalho feito nesta versão nova lançada hoje.
Aquele total em reais no canto direito da tabela indica o valor de cada tarefa. Mas eu coloquei o valor/hora como R$ 1,00 para ficar fácil ver a quantidade de horas de cada tarefa. Então um valor de R$ 2,50 na verdade indica que a tarefa demorou duas horas e meia para ficar pronta.
Eu também sempre arredondo o tempo de cada tarefa, usando intervalos de no mínimo 15 minutos. Assim fica melhor de ter uma visão geral das coisas, valores muito picadinhos apenas confundem.
Bem, mas então tá. Agora você já sabe achar as informações ali :)
Eu gosto de sempre analisar os dados sobre as coisas que faço, para avaliar se tudo correu bem e para poder tomar decisões para o futuro. Dessa vez quero fazer a análise junto com vocês, para mostrar um pouco como é essa rotina de ser programador e lançar programas.
Primeiro vamos às datas. A versão anterior do AdiumBook (1.4) foi lançada em 29 de julho de 2008. Tá lá, na primeira linha da tabela, que não está selecionada. Esse lançamento tomou quase oito horas para ficar pronto! Vejamos quais tarefas foram feitas neste dia:
- Testes no iBook (Tiger)
- Atualização SVN
- DMG feito
- site atualizado
- anúncio nos sites (Xtras, Apple, ScriptBuilders)
- anúncio no blog do aurélio
- anúncio no blog aureliosoft
Nada de substancial, certo? Eu nunca diria que essas tarefinhas iriam levar oito horas… Mas cada uma tem vários passos a seguir e os famosos “5 minutinhos” acabam virando horas.
A Mog, depois de um tempo comigo, instituiu a regra do “vezes dois” para os meus prazos. Cada vez que eu digo algo como “só vou levar mais meia hora para terminar esse texto do blog”, ela responde: “vezes dois”. E não dá outra: acabo levando pelo menos mais uma hora para terminar. Sabe o que é? Ou eu sou otimista demais nos meus prazos, ou o universo conspira para sempre dar alguma coisa errada no meio do caminho ;)
O lançamento de hoje foi mais rápido, demorou apenas quatro horas. Já estou mais familiarizado com o SVN, por preguiça não fiz os testes no Tiger (sistema anterior, já antiquado) e o anúncio no blog é este texto que estou escrevendo agora, mas dessa vez contabilizando no projeto “Blog”. Vejamos, já deu uma hora e oito minutos até aqui. Será que conseguirei terminar em menos de três horas? Duvido :)
Primeira lição que os dados nos ensinam: leva tempo!
O lançamento de uma versão nova de um programa não é feito em 15 minutos, nem em uma hora. É um processo trabalhoso e desgastante, onde você deve ter atenção máxima para não errar. Concentração é tudo.
E cansa mesmo, mental e fisicamente. Hoje, logo que terminei o lançamento do AdiumBook fui tomar um banho para relaxar, pois estava acabado. O bom é que no banho tive a ideia de um livro sobre desenvolvimento de software, mas isso eu deixo para falar outro dia… :)
Voltando à fotinho e à tabela, a segunda linha mostra que no dia seguinte ao lançamento da versão anterior, gastei somente uma hora e pouco fazendo faxina (todos = “to do”s, do inglês, a fazer) e cadastrando o programa no site Freshmeat. Nada glorioso, trabalho de peão.
Só fui mexer no programa novamente um mês depois, em agosto, que levei uma hora para arrumar alguns probleminhas que apareceram ao instalar a versão nova do Adium (1.3).
Em setembro mexi mais uma única vez para resolver outro problema que os usuários relataram, que deu muito trabalho levando mais de cinco horas para resolver. E depois mais nada, esqueci do programa por vários meses.
Eu gosto assim. Passar um bom tempo sem mexer no programa, que quando eu volto, a disposição é grande. Se mexer todo dia um pouquinho enche o saco rapidinho.
Segunda lição:
Relaxe! Só mexa no programa quando tiver tempo e disposição.
Vieram as festas de fim de ano, a praia, o Carnaval, e nada de vontade de mexer no programa. Porém, os e-mails de usuários começaram a acumular e comecei a ficar incomodado. Geralmente é neste momento que decido que é “hora de fazer alguma coisa”.
Ei, txt2tags, estou olhando pra você.
Depois que terminei as tarefas mais importantes do UmPortugues, me programei para “dar um jeito” no AdiumBook. Eu sabia que essa pegada iria resultar em uma versão nova, pois haviam muitas pendências a serem resolvidas. Então era preciso de bastante tempo reservado para poder mergulhar no código.
Aí começou o trabalho de verdade, no dia sete deste mês, sábado passado, num final de semana que excepcionalmente eu não iria ver a Mog. Veja na foto as cinco últimas linhas selecionadas na tabela, que mostram cinco dias seguidos de trabalho no programa, de sábado até hoje.
Eu preciso dessa imersão quando tenho algo maior a fazer. Trabalhar meia hora por dia em uma coisa não dá certo. Eu levo esse tempo somente para me concentrar 100% e “mergulhar” no código. Sabe aquele estado de atenção em que você não sente fome nem vontade de ir ao banheiro? É isso :)
Terceira lição:
Prepare-se para trabalhar pesado quando for finalizar um programa para lançamento de versão nova.
Mas tive alguns problemas não planejados.
Dias atrás instalei o Safari 4 Beta e gostei que ele está mais rápido e consome menos memória (nem preciso mais encerrá-lo diariamente!). Porém, ele quebrou o Xcode, que é o programa que uso para mexer no AdiumBook. Tive que atualizá-lo. Foram horas até os seus malditos 900 e poucos megas serem baixados pela minha conexão barata. Uma baita água fria em quem achava que já ia colocar a mão no código naquele momento.
Com o Xcode atualizado, o próximo que me deu dores de cabeça foi o Sparkle. Ele é um carinha muito bacana que você enfia no teu programa e ele faz a mágica da atualização automática. Funciona assim: a próxima vez que eu lançar uma versão nova do AdiumBook, vai aparecer automaticamente uma janelinha para o usuário, dizendo: “tem uma versão nova desse programa, quer baixar e instalar?” e então ele faz tudo sozinho. É lindo de ver. Mas… Levei horas para fazer ele funcionar. E nem posso xingar o carinha, pois o erro foi meu. A maneira que eu informava a versão do AdiumBook no Xcode estava errada. Arrumei isso e o Sparkle começou a funcionar. Coisas da vida…
Estou há duas horas escrevendo esse texto já. Isso que nem revisei nada ainda. É, vai demorar…
Já que fui forçado (para o bem) a mudar meu esquema de versões, resolvi por o número de revisão do SVN ali também, para ficar igual software de gente grande. A versão de lançamento ficou “1.5 (50)”, ou seja, versão 1.5, revisão 50 do SVN. Mas como eu não ia ficar mudando a revisão do SVN “na mão” a cada alteração, procurei uma maneira de fazer isso automaticamente. Achei um script em Python que deu erro aqui mas consegui arrumar. No fim, todo esse problema acabou deixando o programa mais profissional e ainda pude automatizar a geração do ZIP para lançamento.
Ah é, o ZIP. Antes eu usava o formato DMG (Disk Image) para “empacotar” e distribuir o AdiumBook. Esse tal DMG é um treco que só tem no Mac. É bacana, imagine um arquivo ZIP que quando você abre aparece uma janelinha bonitinha, com desenhos, cores, tudo bem personalizado para o seu programa. Só que o Sparkle tem algumas pegadinhas para usar com o DMG. Então para simplificar as coisas para mim, mudei para o ZIP, que é mais padrão.
Percebeu o tamanho das encrencas não-planejadas que aparecem quando você só quer mexer sossegado no seu programa e nada mais? Recapitulando: baixar e instalar o Xcode, Sparkle com problemas, mudar o esquema de versionamento, script para versão automática, mudar de DMG para ZIP. Por isso ocorre o “vezes dois”, que nesse caso foi um “vezes quatro” pelo menos :)
Quarta lição:
Prepare-se para enfrentar problemas inesperados. O ato de “programar” envolve muito mais do que sentar numa cadeira e digitar códigos. Ah, se não fosse o Google…
Bem, resolvidos estes contratempos, pude finalmente fazer aquilo que gosto: criar códigos. E assim foram corrigidos os bugs e implementadas as funcionalidades novas.
Se você quiser acompanhar “ao vivo” a evolução de um software, assine meu feed no Google Code. Assim você fica sabendo na hora sobre as mudanças mais recentes no AdiumBook, no txt2tags e nas Funções ZZ.
Com tudo pronto, hoje atualizei o texto de ajuda (Help), rodei o programa e testei todos os botões e itens de menu, fiz o ZIP final e mandei para o servidor (Google Code). Contemplei por alguns segundos o arquivo na tela, mostrando zero downloads. É o nascimento.
Dá uma emoção ao enviar o arquivo, sabia? Uma vez no servidor, seu “filho” vai para o mundo. Ali é o ponto sem retorno, onde você declarou publicamente que fez o seu melhor. Encontrar uma falha logo após enviar o arquivo é motivo de vergonha para três gerações futuras de sua família.
Depois foi aquela novela de atualizar o site do programa, atualizar o arquivo PAD e anunciar a versão nova para os principais sites de download. Vou colar aqui um pedaço do meu arquivo release-checklist.txt, que lista todas as tarefas obrigatórias de cada lançamento (em ordem de execução):
———————-8<——————————
upload ZIP pro Google Code
baixar ZIP e testar
deprecate release anterior no Google Code
atualizar Changelog no Google Code (wiki)
atualizar issues (“closes issue #12” no Changelog)
fazer Changelog mini (<300) para PAD e sites
screenshot novidades
atualizar site
atualizar appcast.xml (e changelog: 1.5.html)
atualizar PAD file (editar, upload, validate, enviar repositório)
atualizar no Adium Xtras http://www.adiumxtras.com/?a=xtras&xtra_id=2069
atualizar no ScriptBuilders (Upload your Scripts! > Update Existing)
atualizar no VersionTracker (MacUpdate segue, acho)
atualizar no Freshmeat http://freshmeat.net/projects/adiumbook/
atualizar no site da Apple https://adcweb.apple.com/downloads/
atualizar no i use this (textile: listas com * e **)
post blog aureliosoft
post blog aurelio
———————–>8—————————–
Ufa! Pensou que era fácil lançar um programa? :)
Quinta lição:
Codificar é divertido, lançar é estressante. Por isso não compensa fazer muitos lançamentos em um curto período.
De volta à foto, veja que logo abaixo das linhas azuis da tabela, há uma linha mostrando os números totais. Ali no meio é possível ver no item “Time-based” qual foi o tempo total que eu levei para fazer todas as tarefas dessa versão nova do programa: mais de 30 horas.
Pena que faz pouco tempo que eu comecei a contabilizar as horas do AdiumBook, mas como eu apanhei muito lá no início (em 2005) por não saber AppleScript direito, acredito que o total já investido nesse programa passa das 200 horas de trabalho.
Lembrando: o AdiumBook é um programa gratuito.
Se você me perguntar “por quê?“,
eu respondo “porque vale a pena!“.