Oopsie!

Então, parece que o WeightWatch não estava a arrancar hoje de manhã. Deu mais ou menos para perceber logo que era um problema com alguma função que tivesse a ver com as datas, visto que nos encontramos no último dia do mês, e isto dos erros de programação em intervalos de números contínuos costumam ser mais comuns nos limites desses intervalos.

Basta mudar a data do telemóvel andando um dia para trás para confirmar essa teoria — o programa a seguir já corre normalmente.

Primeiro uma pequena explicação sobre como funciona a geração de gráficos. Quando o programa começa, vai buscar a data actual e cria um gráfico para o mês actual. A seguir, o programa subtrai um mês à data actual para criar o gráfico do mês anterior, e adiciona um mês para criar o gráfico do mês seguinte. Assim, quando é preciso mostrar o gráfico do mês ao lado, a imagem já está criada, e, durante os 250 milissegundos que dura a animação da mudança de mês, o programa aproveita para ir gerando o gráfico seguinte de maneira a ter sempre 3 gráficos em memória: o que aparece no ecrã, o anterior e o seguinte.

Ora, o problema que o programa tinha era de que quando é preciso subtrair ou aumentar um mês, estava simplesmente a dizer à biblioteca de datas do Java para me criar uma data nova em que se subtraía ou somava um mês ao mês actual:

calendar.set(Calendar.MONTH, month - 1);

O problema é que a biblioteca do Java não verifica se o dia é válido para o novo mês, como eu pensei que fizesse. Em vez disso, se o dia não for válido, a biblioteca não consegue gerar uma data válida e falha violentamente.

A solução foi simples. Como não precisamos do dia para nada quando estamos a mudar o mês (só interessa o mês), podemos mudar primeiro o dia para um valor inócuo:

calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.MONTH, month - 1);

Et voila! Já funciona de novo.

O novo executável já se encontra online no sítio do costume. A alternativa é mudar a data do telemóvel temporariamente e iniciar o programa para então fazer uma actualização online.

Como vantagem, a nova compilação já inclui as correcções que tenho estado a fazer ao programa durante os últimos dias, pelo que para além de já não ter este bug horrível, o programa deve funcionar melhor em geral.

WeightWatch 0.9

Após ter publicado a primeira versão do WeightWatch, continuei a trabalhar no programa para corrigir os vários problemas que tinha, e para acrescentar alguma funcionalidade que tinha planeado originalmente.

Muitos dos problemas que tive com a aplicação estavam directamente relacionados com a falta de agilidade proporcionada pela edição do Java para telemóveis. A primeira coisa que fiz depois da publicação do programa foi procurar uma nova biblioteca de interfaces que fosse mais capaz.

A primeira que encontrei, uma das mais populares, foi a J2ME Polish, que apesar de ter um nome foleiro e com um duplo significado ainda mais foleiro, é bastante poderosa e supostamente tem boa integração tanto com o Eclipse como com o NetBeans. Apesar de a instalação da biblioteca no meu ambiente não ter sido fácil, lá consegui pôr tudo a funcionar, e, enquanto foi possível acompanhar os tutoriais com facilidade, o desenvolvimento à base de macros não me agradou muito. Por outro lado, o escopo do Polish é extremamente abrangente, visto que eles praticamente querem substituir todas as bibliotecas de base do J2ME, o que para mim é demais — eu quero uma simples biblioteca que trate do desenho da interface, e que me permita estende-lo à minha vontade.

Foi aqui que encontrei finalmente a minha solução: o LWUIT (Light Weight User Interface Toolkit). Apesar do nome ainda mais foleiro, esta biblioteca é, de facto light weight, no sentido de que basta incluir a biblioteca com o projecto e aceder aos seus métodos para criar uma interface. Para além do mais, a interface pode ser toda personalizada através de ficheiros de temas, que podem ser criados e editados com um pequeno programa fornecido com a biblioteca e a sua funcionalidade pode ser facilmente alterada pegando nos componentes básicos e estendendo-os programaticamente.

Finalmente, e esta é a maior vantagem de todas, a biblioteca está a ser desenvolvida pela SUN (a mesma empresa que inventou e comercializa do Java), pelo que há grandes hipóteses de que venha a fazer parte das próximas versões da linguagem.

As desvantagens de usar este toolkit resumem-se ao facto do ficheiro executável final ficar maior do que o do programa original (entenda-se que a comparação não é completamente justa visto que entretanto implementei muito mais funcionalidade), e ao facto de ainda ser uma biblioteca em desenvolvimento, pelo que por vezes podemos ficar sujeitos a bugs ou falta de funcionalidade numa determinada função.

O facto de estar em desenvolvimento tem, no entanto, coisas boas, visto que os programadores estão a trabalhar activamente na biblioteca. Nesta versão 0.9 do WeightWatch já inclui algumas funcionalidades que tiveram origem em pedidos feitos directamente à equipa de desenvolvimento, e respondidos em menos de um dia.

No entanto, a melhor das novas funcionalidades é o facto de se poder actualizar online, para quem tiver maneira de aceder à internet através do telemóvel. Através deste sistema já não vai ser preciso acompanhar este blog para saber quando há novas versões disponíveis, e fica até mais fácil corrigir pequenos bugs daqueles que não matam mas moem.

Portanto aqui está o novo WeightWatch 0.9. A um ponto decimal de se tornar uma versão final — para isso ainda lhe faltam correcções a dois ou três bugs, e possivelmente traduções para várias línguas.

O software é open source, e, para quem quiser participar no desenvolvimento, aqui está a página do projecto.

WeightWatch

Estou gordo. É lixado.

Ok, não estou muito gordo, mas tenho meia dúzia de quilos a mais, e agora que está a chegar o inverno, é a altura ideal para perder peso para poder exibir o meu físico invejável nas festas de natal.

Emagrecer é simples, mas aborrecido. Os preceitos apresentados no Hacker’s Diet, um livro de dieta para geeks, são óbvios, mas servem para abrir os olhos. Basicamente, um tipo tem de se habituar a comer menos e a mexer-se mais. Isso, para um tipo como eu que gosta tanto de cerveja, requer uma série de pequenos sacrifícios que só dá para manter a longo prazo dado um feedback potente de que o esforço está, de facto, a compensar.

Claro que basta olharmo-nos ao espelho para ver os resultados, mas isso demora muito tempo, e as alterações são tão graduais, que só vamos reparar que há uma diferença quando estivermos já perto do objectivo.

A outra solução tradicional é pesarmo-nos frequentemente. O problema é que o nosso peso varia imenso ao longo do dia, pelo que cada vez que se sobe para cima da balança, o valor que ela mede vem com cerca de 2Kg de erro. Imagine-se um dia em que um tipo só comeu saladinhas e foi correr durante uma hora, mas depois quando vai para se pesar, pesa mais 2Kg do que no dia anterior. Epa grande chatice, mais valia ter ido ao McDonalds!

O Paul Walker (o tipo que escreveu o tal Hacker’s Diet) explica o problema, e também sugere uma solução neste capítulo — em vez de desenhar um gráfico simples com as medidas diárias de peso, desenhar antes uma curva de tendência que é “puxada” para cima e para baixo pelos valores diários, absorvendo assim os erros das medições, resultando numa linha muito mais estável.

No site do Paul existem programas onde se podem ir colocando as leituras diárias, desenhando gráfico que é actualizado automaticamente com cada leitura. Eu comecei por usar um desses programas, mas rapidamente apercebi-me de que não queria depender do computador para inserir os dados diariamente, e que a plataforma ideal para o fazer seria o meu telemóvel.

Ora, como não existe software para telemóveis no site do Paul, e como eu preciso de justificar o nome deste site, decidi criar o meu próprio software — o WeightWatch:

O programa é relativamente simples, limitando-se a aceitar entrada de valores diários, e depois desenhando-os num gráfico com a tal linha de tendência. Para além do gráfico do peso real, também é possível criar um plano de dieta em que podemos especificar quantas calorias queremos perder ou ganhar diariamente, e o software desenha esse plano sob forma de uma linha picotada no próprio gráfico. Assim é possível ver se estamos a acompanhar o plano, ou se serão precisos ajustes ao plano ou mesmo à dieta.

O software está disponível gratuitamente e com o código aberto, para quem me quiser ajudar a resolver alguns dos problemas que ainda tem, ou desenvolver novas funcionalidades.

Façam o download, experimentem no vosso telemóvel e digam qualquer coisa.

Primeira etapa: sucesso!

Já há muito tempo que nao escrevia sobre o estado do Rafael e dos seus amigos. Como o título deste post diz, a experiência tem sido um sucesso:

Ok, um dos cactos faleceu tragicamente, mas aqui no Geekalhada preferimos pensar positivo. Afinal, podemos ter perdido um cacto, mas ganhámos dois Joaquins — isto é ainda mais do que ser positivo, isto é ser matematicamente positivo!

Como se poder ver, os Joaquins cresceram bastante e encontram-se de boa saúde, apesar de terem troncos tão finos que não aguentam com o seu peso. Felizmente para eles, o Rafael e os cactos ofereceram-se para os ajudar a manterem-se de pé:

O Rafalel, por sua vez, também está de excelente saúde. Apesar de aparentemente o seu tronco não ter crescido, o rebento está a crescer a olhos vistos quando comparado com o tamanho inicial:

Finalmente, os cactos, apesar de à primeira vista parecerem não ter evoluído, também estão felizes com a sua situação. O narigudo, em particular, não só está mais narigudo como está a desenvolver uma nova narigueta em cima:

Narigueta essa que é difícil de capturar na fotografia. Se tudo correr bem, daqui a uns meses já vai ter algo digno de se mostrar.

Google Cromo

Desta não estava à espera: a Google decidiu lançar um browser, o Google Chrome, e fazer uma das melhores introduções a software que já vi, sob forma de banda desenhada.

Pensando bem, faz todo o sentido que a Google tenha decidido ir por este caminho. Afinal, eles estão-se a posicionar como um fornecedor de aplicações web, e o futuro deles mais ou menos que depende da funcionalidade e estabilidade dessas aplicações. Como eles próprios explicam no cartoon, os browsers actuais têm uma série de limitações tecnológicas que limitam a usabilidade e dificultam o desenvolvimento desse tipo de aplicações.

Deste ponto de vista, podemos ver o Chrome como uma forma da Google não só pegar nas rédeas do desenvolvimento da tecnologia que serve de alicerce aos seus produtos, mas também dar um empurrão na concorrência nessa mesma direcção.

Hoje fiz download do browser e tenho estado a testa-lo. Naturalmente, vou compara-lo com a minha instalação do Firefox:

  • Em primeiro lugar, não gosto do desenho da interface. Não é que seja feio, mas prefiro aplicações que seguem o aspecto do sistema operativo. Uma aplicação que é diferente não só não está a respeitar o look que o utilizador escolheu para o seu ambiente, mas também altera a usabilidade em relacao à de todas as outras aplicações.
  • Não dá para descer suavemente nas páginas (smooth scrolling). Ter a página a saltar uns pixéis para baixo sempre que rodo a roda do rato é mais cansativo e torna mais difícil acompanhar a posição no texto que estou a ler.
  • Não há correcção ortográfica nos campos de introdução de texto. Este texto foi escrito no Chrome, mas para introduzir os tils e cedilhas que não estão presentes no teclado alemão, tive de voltar cá com o Firefox.
  • Não há forma de iniciar uma busca textual assim que se começa a escrever no teclado — uma das minhas funcionalidades favoritas no Firefox.
  • Não há extensões, o que não seria assim tão mau se não fosse pela falta do adblock. Hoje descobri que não gosto tanto da web sem essa brilhante extensão para o Firefox.
  • Ainda não descobri, se é que existe, uma forma de editar as opções avançadas do browser. Algo como o about:config do Firefox.

Ok, reparei agora que só escrevi acerca dos pontos maus. Aqui estão os bons:

  • O browser é rápido. Rápido a arrancar, e, aparentemente, rápido a abrir páginas. Ok, a falta de extensões e de certas funcionalidades ajudam a manter o sistema leve, mas pelo menos por enquanto sabe bem um pouco de velocidade.
  • Certas escolhas para a interface são bem pensadas: a página com os sites mais visitados quando se abre uma aba nova (acho que o Opera também faz isso); o minimalismo da interface; a gestão das abas, podendo-se inclusivamente arrastar uma aba para fora, criando a sua própria janela.
  • A importação dos marcadores do Firefox foi impecável, tendo inclusivamente importando as buscas rápidas (como “y” para o Youtube, ou “w” para a Wikipédia).
  • Não sei onde é que ele foi encontrar o plugin para o flash, mas não foi preciso instala-lo. Por um lado foi pena porque gostava de ver como é que este browser ia lidar com a instalação de um plugin.
  • Aparentemente, é mais seguro contra crashes, apesar de ainda não ter tido oportunidade de o experimentar — quando uma página falha por alguma razão, apenas essa aba fica inacessível, deixando o resto do browser a funcionar normalmente.

Finalmente, existe um “incognito mode” para quando queremos navegar a web sem deixar marcas no historial, cookies, etc. Incognito mode? A sério, porque é que não lhe chamaram o que aquilo é: um “Porn Mode“?

Eles dizem que é para “todas aquelas vezes que queremos fazer algo inocente e secreto, como comprar um presente à patroa, sem correr o risco de que ela venha a descobrir”. Tá, é uma desculpa, mas nem sequer é original. Pelo menos a extensão equivalente para o Firefox tem a decência de não se tentar justificar.

Ok, suponho que para certas coisas é capaz de até ser útil.

E finalmente, a pior das notícias: ainda não existe versão para Linux. Felizmente a Google disponibilizou o código completo do browser, que, com a participação da comunidade, deve despachar o desenvolvimento. Entretanto, podemos registrar-nos para receber um aviso assim que houver uma compilação para o pinguim.

Mosaico

A Mariana tem um meme novo para a malta.

Desta vez a ideia é construir um mosaico de imagens tiradas do Flickr com base em pesquisas usando as respostas às seguintes perguntas:

  1. O seu primeiro nome?
  2. Comida preferida?
  3. Em que escola estudou?
  4. Cor favorita?
  5. A sua «celebrity crush»?
  6. Bebida preferida?
  7. Férias de sonho?
  8. Sobremesa preferida?
  9. Carreira de sonho?
  10. O que mais ama na vida?
  11. Uma palavra para se descrever?
  12. Nome de utilizador do Flickr (se não aparecer nenhum resultado, usem um de outro site qualquer)?

A única limitação é de que só se pode usar a primeira página de resultados. Quando as imagens estiverem seleccionadas, basta atirar com tudo para dentro do Mosaic Maker e postar o resultado, que é este:

1. El lobo de Daniel, 2. Bacalhau com Natas, 3. Caminho de Casa 1, 4. Foggy day in Ouro Preto, 5. Milla Jovovich como Leelo Dallas en El Quinto Elemento, 6. The Piña Colada, 7. Laguna, 8. tortas da Azeitão, 9. World Traveler vs. Time Traveler, 10. Three Amigos, 11. Fixer l’horizon, 12. Cachapa con queso de mano.

Escolher a foto para a segunda pergunta foi lixado, especialmente quando já não toco num bom bacalhau há demasiado tempo. Também tenho a dizer que a pergunta 5 foi desenhada para lixar um gajo, mas que homem que se preze é que pode dizer que não teve uma valente paixão pela Milla no 5° Elemento?

Já na última foi difícil de resistir a vigarizar as regras para não incluir esta foto — não me lembro de ter conhecido estas senhoras, mas fico contente em saber que ficaram satisfeitas.

Já agora aproveito para extender o desafio ao Caxaria.