<< Anterior | Entrada | Próximo >>

Beautiful Code

Livro sobre estratégias engenhosas para problemas da informática.

Desiludido! Foi assim que fiquei após ler os dois primeiros capítulos deste livro. Coloquei-o logo de lado porque não correspondeu às minhas expectativas geradas pelo que tinha lido nas críticas e comentários da net.

Passado duas semanas, acabei por me sentir culpado pelo dinheiro gasto nele. Decidi dar mais uma espreitadela ao livro só para justificar a compra. Como sabia que cada capitulo era independente de todos os outros, comecei pelo último na esperança de terminar depressa ... o livro todo ;)

Felizmente esta acabou por ser a melhor abordagem ao livro. Um dos melhores textos era precisamente o final e foi o catalisador para ter curiosidade em ler os restantes.

O livro aborda estratégias engenhosas seguidas na computação para resolver problemas concretos ou criados pela própria área desta engenharia. É um livro que atravessa praticamente todos ramos da informática. A sensação que fiquei após terminar o livro, é como se estivesse na faculdade outra vez, com aquela sensação de "Ah! Oh! Então é assim que se faz ...". Mas admito que alguns dos capítulos são matérias aborrecidas, provavelmente porque divergem demasiado das minhas áreas de interesse, ou porque são temas mais complicados.

Este é um livro que recomendo especialmente a quem já terminou os seus cursos de informática há uns bons anos. Não tem haver com os anos de experiencia para perceber o conteúdo do livro mas sim, provavelmente irão passar pela mesma sensação de "deja vu" que eu senti ao lê-lo.

Nos próximos tempos vou actualizando este artigo, com um resumo mínimo de cada capítulo e a minha opinião de cada. Chamo a atenção que a critica a cada capitulo pode não ser consensual. É uma opinião pessoal que pode ser influenciada pelos seguintes factores: forma como foi apresentado o problema ou escrito pelo autor, matéria fora do meu interesse ou mais provavelmente, fora da minha àrea de conhecimento, para dar o merecido valor a estratégia encontrada.

Capitulos:

1. A Regular Expression Matcher - Neste capitulo é implementado a funcionalidade básica de expressões regulares. O algoritmo final demonstrou ser extremamente simples, funcional e compacto. Isto foi fruto da utilização de Recursão e de manipulação de apontadores em C. (neutro)

2. Subversion Delta Editor - O Subversion é um sistema de controlo de versões. As suas funcionalidades internas são todas implementadas através de uma unica interface bem definida cujos métodos permitem qualquer operação nesse sistema. Este capitulo apresenta um exemplo com base nessa interface. (neutro)

3. The most beautiful code I never wrote - Partindo de um algoritmo de quicksort, estimar o tempo que demora a processar um conjunto de dados através da "instrumentação" de linhas de código com as operações essenciais. Nom fim, a formula de estimativa de tempo, aproximou-se de estudos previos obtidos por processos matematicos. Este capitulo é fácil de ler. Curioso são os inumeros aforismos usados para resumir cada passo do processo. (bom)

4. Finding Things - Processar MB de ficheiros de texto com os logs de acessos a páginas web e obter estatisticas. Exemplo com base em Ruby. Como o uso de expressões regulares ajuda a manter o algoritmo simples. Analise ao uso de memoria entre HashMaps e Binary Search. O principio da estrategias de pesquisa de texto em documentos como feito pelos motores de pesquisa. (bom)

5. Designing XML Verifiers - Como evoluiu a implementação de biblioteca XOM, para verificar a validade de documentos XML. Exemplo em Java. Após terem conseguido uma biblioteca plenamente correcta, como foram aplicadas estrategias sucessivas de optimização da velocidade de processamento. (muito bom).

6. Framework for integrated tests - Artigo sobre o processo de decisão com o qual uma framework de testes (FIT) foi definida.(neutro)

7. Beautiful Tests - Exemplo de uma API de pesquisa binária de uma colecção ordenada. Com o recurso do JUnit implementar os testes da API de pesquisa anterior, para os casos normais de utilização e também situações limite ou fronteira. Testes unitários já devem ser uma das ferramentas bem conhecidas de qualquer programador. A leitura deste capitulo pode ser feita na "diagonal".

Um botão ... mas incontáveis comandos!

Como é possivel usar e configurar um relógio Polar FS2c através do seu único botão .

Polar FS2C A minha vida de desportista de alta competição (em ginásio ;-) obriga-me a usar um relógio medidor de frequência cardíaca. A sua função é indicar-me quando entro em exageros de esforço para um determinado período de tempo. Com esse objectivo comprei um Polar FS2c. Era o modelo mais barato do fabricante de referência destes “brinquedos”.

Por contenção de custos ou por questões puramente estéticas, realça logo à vista o seu único grande botão, logo em baixo do mostrador digital.

Quando o coloquei pela primeira vez no pulso, comecei logo explorar as suas funcionalidades mas desisti ao fim de um minuto! Perdi-me por completo com os “cliques” sucessivos e não conseguia interpretar o que interface mostrava ou pedia. Dei parte de fraco e fui ler o manual.

O que parecia ser uma interface com o utilizador confusa, revelou-se ser um sistema muito engenhoso.

Um botão! Teoricamente o sistema só pode receber do utilizador dois comandos com um botão: está pressionado ou não está. Por exemplo, ao pressionar mostra um calendário no seu display, não pressionar volta a mostrar as horas.

Mas então como é possível implementar umas 20 funções no relógio quando teoricamente só devia haver dois?

A resposta é a dimensão Tempo! A duração com que o botão está pressionado ou não pressionado num determinado estado, confere infinitas possibilidades de controlo.

Para o exemplo deste relógio, o seguinte diagrama do tipo máquina de estados, ilustra bem o que se consegue fazer:

Polar FS2C User Interface State Machine

Inicialmente o relógio está no modo das horas. Ao clique no botão (pressionar e largar em menos de 1 seg), é trocado sucessivamente de modos até chegar ao inicial com as horas. Tirando este último estado, em todos os outros se ficar mais de três segundos sem pressionar o botão é assumido que se pretende ficar nesse modo. Após selecção de um determinado modo, clicar no botão vai trocando de informação relacionado com esse modo. No fim volta ao modo das horas.

Definir os números das horas e datas, também é um desafio interessante. Quando se selecciona o modo “Set hours”, aparece um número a representar as horas, ao clicar sucessivamente os números são incrementados. Quando finalmente é visualizado a hora pretendida, aguarda-se 3 segundos até que aparece o modo “OK”. Ao clicar no botão esta nova hora é guardada e regressa ao modo de inicial.

Existe um modo de controlo não representado nesta figura. Até agora vimos cliques no botão com duração menor de 1 seg e modos de espera em que não se pressiona o botão mais de 3 seg. Mas se deixar-mos o botão pressionado mais de 1 seg, podia haver novos estados. Por exemplo, em qualquer modo, a iluminação do display digital liga-se.

Este tipo de interacção tem uma grande desvantagem. É lento chegar a qualquer um dos  modos descritos. O único que está imediatamente acessível via simples clique do botão é para passar do modo visualização de horas para o modo visualização dos batimentos cardíacos.

Este tipo de interfaces não são imediatamente intuitivos e nada pratico nesta era de milhares de funcionalidades por aparelho. Mas podem ser a única alternativa face a constrangimentos externos.

Por exemplo, um telemóvel poucas teclas tem. Para escrever mensagens de texto, todo o alfabeto foi dividido pelas teclas numéricas de 0 a 9. A forma de seleccionar a letra pretendida é através de cliques sucessivos e períodos de espera para a aceitar e passar para a seguinte. Outro exemplo é o software Equalizer usado pelo famoso físico Stephen Hawking na sua cadeira de rodas. Devido à sua paralisia, só consegue dar comandos com um único dedo. A forma de escrever textos, dar comandos de manipulação de ficheiros, consultar emails, e outras tantas funcionalidades, é conseguido com igual padrão usado pelo relógio.

 

Event_Logger

Tracker para o TomTom

O meu GPS TomTom tem cumprido bem a sua função em guiar-me para um destino, a poucas horas no "futuro". Mas sentia falta de uma funcionalidade básica, original destes aparelhos. Era a possibilidade de o usar para rever o passado.

Prentendia saber por onde tinha passado e através dessas coordenadas guardadas, desenhar os percursos no Google Maps/Earth. Com isto, conseguia facilmente reencontrar no mapa os locais interessantes por onde tinha passado, caminhos não cartografados (fora de estrada ou pedestres) e percursos e localizações de "spots" de mergulho em alto-mar. Também poderia obter estatisticas de distancia percorrida, velocidade máxima e altitude e declives máximos.

Após algum tempo a pesquisar na web, encontrei só uma aplicação, o Event_Logger, que satisfazia todos os meus requisitos. Já o experimentei e o recomendo!

Visualize este ficheiro com o Internet Explorer, para ver um exemplo capturado por uma viagem minha.

Esta aplicação adicionou uma série de opções ao menu inicial, para gestão e controlo das funcionalidades descritas anteriormente. Entre todos eles, a opção "TOP" apanhou-me por surpresa. Ao executar, vi a imagem em baixo, que é a lista de processos a correr no GPS. Ao ver as últimas linhas com os processos iniciados por 'k' o sistema operativo Linux revelou-se. Tal como o meu router da Linksys sobre o qual já escrevi anteriormente.

Top command on TomTom
<< Anterior | Entrada | Próximo >>