Category Archives: Software

WeightWatch 0.9.9

Acho que escrevi algures que a próxima versão do WeightWatch que publicasse ia ser a versão 1.0 final. Se não o escrevi, pelo menos sei que o pensei.

Ora, há uns dias descobri um bug tramado — aparentemente não dava para apagar números no campo de entrada do peso. Eu nunca tinha dado por isto porque na minha utilização diária do programa resumia-se a seleccionar o campo e carregar para cima ou (de preferência) para baixo para aumentar ou (de preferência) diminuir o valor.

Como o bug era tramado em termos de usabilidade, decidi publicar o software o mais rapidamente o possível, apesar de ainda andar desconfiado que o único utilizador deste programa sou eu.

Infelizmente, uma versão 1.0 é um obstáculo psicológico tramado. Uma versão com um número inteiro significa que o software está, para já, terminado, pelo menos no sentido em que toda a funcionalidade originalmente planeada está implementada e não tem problemas de maior. Ora, apesar de ter a funcionalidade planeada quase toda lá, e o software parecer estar bastante estável (pelo menos até encontrar o próximo bug tramado), estou com aquela sensação de que falta qualquer coisa.

Esse je ne sais quois impede-me de somar aquela centésima de versão ao programa que o tornaria um membro completo da sociedade. Lamento, WW, mas vais ter de esperar mais um pouco.

Finalmente convém dizer que esta versão, para além de corrigir o tal bug, também acrescenta algumas outras coisas que estavam em desenvolvimento desde a versão 0.9.5, nomeadamente, é possível carregar para baixo no gráfico para ver um gráfico de peso anual; a interface está ligeiramente mais atraente; e foram corrigidos vários pequenos problemas.

Como sempre, aqui está o link do costume.

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.