terça-feira, janeiro 31, 2006

Tirando agua de pedra

...ou como extrair informações de um cliente para fazer a especificação de um software.

Recebi esta tira do Dilbert hoje de manhã, e ela tem tudo a ver com alguns problemas de especificação de software que estou vivendo atualmente. Conseguir extrair informações sobre o negócio de um cliente é uma arte, que requer tempo, perícia e uma boa dose de calma. O grande problema é que pessoas normais (em oposição a desenvolvedores) não conseguem entender o mundo virtual que um software constrói, não entende implicações de decisões erradas de design, e sobretudo nem sempre consegue definir quais são as informações importantes para o design, e quais são totalmente superfluas. E são esses pequenos detalhes esquecidos que em geral irão causar redesign, refactoring, e portanto atraso.

Exemplo prático: ontem, por acaso, descobri que um atributo que eu acreditava estar ligado a uma entidade entidade na verdade era ligada a outra entidade. Detalhe: a questão das entidades foi discutida milhõs de vezes, e o cliente aprovou um documento que explicitava as entidades e seus atributos. Resultado: mudar o atributo de uma tabela de BD para outra é muito simples....o problema é modificar queries, objetos, e validar tudo de novo. No meu caso, 2 dias perdidos praticamente.

O fato é que não se pode esperar que o cliente vá falar sobre tudo sozinho, e de preferência, não se deve pedir pro cliente descrever o seu negócio com a ótica do software a ser produzido...inevitavelmente, ele irá colocar filtros nas informações que em geral não são desejáveis. Quem deve delimitar o escopo do software e as informações realmente relevantes é o desenvolvedor, obviamente com base nas informações do cliente.

domingo, janeiro 29, 2006

Sobre a atividade de programar

Antes de começar, gostaria de contar dois fatos que considero ilustrativos : Primeiro caso: Há alguns meses atrás, esta conversando com uma pessoa que se auto denominava programador. Lá pelas tantas, eu perguntei quais as linguagens que ele programava e como era o curso dele. A resposta foi mais ou menos assim: "bom, lá na faculdade, primeiro a gente aprendeu lógica de programação em C++...era aquela tela azul, sem nenhum recurso...só na lógica. Depois aprendi lógica de programação em Delphi...era mais simples, com botões para fazer interfaces..." Segundo caso: há alguns dias, encontrei na casa de um amigo um curso rápido de Delphi, bastante antigo. Na introdução, após descrever em um parágrafo de 3 linhas a história do delphi (algo do gênero "criaram uma linguagem chamada pascal, e o delphi é a evolução do pascal...". Curto, sucinto, e absolutamente inútil), tinha a seguinte frase: "Abra a pasta X, execute o Delphi, e você estará pronto para iniciar sua carreira de programador". Fato: boa parte dos programadores que existem por aí só veem a ferramenta, e desconhecem que existe um mundo bem maior, mais importante por trás. E sobretudo não conseguem conceber o fato que a linguagem de programação é um detalhe...importante, mas apenas um detalhe. Mexer numa IDE é facil, sobretudo se for uma IDE gráfica, estilo Delphi, Visual Basic ou Visual Studio. Entender os controles básicos de programação como if, for, while e outros também. Com um pouco de boa vontade, qualquer um pode fazer programinhas simples com interface gráfica e tudo mais. Mas isto é a ponta do iceberg. Mexer em IDE não é programar. Saber todas as bibliotecas de uma linguagem de programação não é saber programar. Assim como saber digitar em máquina de escrever não significa saber escrever. Programar é algo bem mais complexo: significa entender o funcionamento de processadores, memória, algoritmos, estruturas de dados, estrutura de arquivos, protocolos, patterns, paradigmas de programação. A linguagem de programação é a ferramenta para descrever um programa para a máquina, mas um bom desenvolvedor/programador tem que ser capaz de pensar num programa como um conjunto de instruções que executem uma tarefa definida sem se preocupar com a linguagem de programação.

sexta-feira, janeiro 27, 2006

A primeira linguagem de programação a gente nunca esquece

O pergunta "Qual linguagem a linguagem mais apropriada para ensinar os fundamento de programação em um curso ce computação?" é um tópico de intensas discussões.Os quesitos técnicos se misturam a preferências pessoais, e a partir deste momento, a coisa pode ir longe (basta tomar como exemplo a famosa discussão de quem é melhor: Emacs ou VI...eu prefiro Emacs, simplesmente porque não posso conceber escrever em um editor de texto do qual eu nunca lembro o comando pra modo de edição e pra sair).

O artigo A Very Quick Comparison of Popular Langauges for Teaching Computer Programming faz uma pequena comparação entre Basic, C, Java e Python, mostrando pros e contras de cada linguagem para para aprendizagem de programação. No final, como era de se esperar, ele escolhe Python.

Os argumento do artigo são válidos, e de fato Python parece um bom exemplo. Minha única crítica é que ele esqueceu de citar uma linguagem que serviu de modelo de aprendizagem para muita gente, e que inclusive foi desenvolvida com esta finalidade: PASCAL (linguagem que foi utilizada na minha graduação para aprender programação). Mas provavelmente, ele diria que PASCAL já é uma linguagem antiga, sem alguns recursos que linguagens modernas oferecem.

terça-feira, janeiro 24, 2006

FireBug - Ferramenta profiça para debug em Firefox

O slogan da página diz tudo: Its not your grandma's Javascript Console. A extensão FireBug fornece ferramentas bem interessantes para análise de páginas, javascripts e afins. Usada em conjunto com as funções de análise de CSS do WebDevelopper, temos uma IDE completa.

Vale ressaltar a função que permite bisbilhotar as conexões assíncronas via HTTPXMLRequest, o coração do AJAX. Esta extensão registra quando uma chamada assíncrona foi feita, quem executou a chamada, e o melhor de tudo: imprime o XML de retorno !!!!! Eliminamos a necessidade de ficar imprimindo informações no servidor ou ter que gerar javascript extra para exibir o conteúdo de retorno.

segunda-feira, janeiro 23, 2006

Graficos em JSP com Cewolf

Num tópico anterior, eu falei sobre a biblioteca JFreeChart para criação de gráficos, e mencionei uma taglib chamada Cewolf para inserir gráficos gerados pela JFreeChart em páginas JSP. Na época não havia utilizado a taglib em questão..mas nos últimos dias usei bastante, portanto me sinto no dever de relatar a experiência.

A biblotece fornece tags que encapsulam o processo de criação de gráficos usando JFreechart. A idéia é boa, porque JFreeChart gera uma grande quantidade de gráficos muito bonitos, e a documentação não está disponível, tornando sua utilização um pouco mais trabalhosa, sobretudo quando os prazos de seu software estão estourando a muito tempo. Para funcionar, é necessário instalar bibliotecas para manipulação de SVG, e XML, além obviamente do próprio JFreechart.

No site, tem um passo a passo bem legal, que permite que em poucos minutos se tenha um demo com gráfico na sua aplicação. A geração de dados é bastante simples, e requer apenas algumas linhas de código para obter os dados e converte-los no formato adequado. A taglib permite também gerar tooltips para os pontos do gráfico, e criar um mapa de links, fazendo com que o gráfico tenha funções de hipertexto, o que pode ser muito útil em alguns casos.

Porém, nem tudo são flores.....

O primeiro problema (que não é realmente um problema, mas sim uma restrição) é que nem todos os tipos de gráficos do JFreeChart estão disponíveis no Cewolf. Até que me provem o contrário, isto é pura preguiça. Mas talvez existam motivos mais nobres. Mas tudo bem, os principais tipos estão contemplados.

O segundo problema, um pouco mais chato, é que a parte de geração dos dados, que deve ser implementada pelo usuário, requer algun conhecimento mínimo do JFreeChart. Portanto, algumas visitas à API da biblioteca são necessárias.

O terceiro (e principal problema) é, pra variar um pouco, documentação. Como todo softwarte livre, ela é problemática. Mas neste caso, tem um agravante: a pouca documentação que existe no site está ERRADA !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
O site contém a API das taglibs, com informações sobre as tags, parâmetros possíveis e valores aceitos para cada parâmetro. Com exceção de alguns parâmetros que se mantém, a impressão que tive é que a documentação está defasada em relação à biblioteca. No meu caso, só não se tornou um pesadelo porque os comentários dentro do descritor da taglib estão corretos, e estes comentários são lidos pelo eclipse e exibidos como documentação, e eu uso eclipse, e assim por diante....

Assim sendo:

Nota final: 10 pela idéia, 6 pela implementação, 0 pra documentação. Média 5 e alguma coisa.

No final das contas, vale a pena dar uma olhada, porque ainda acho que enfiar gráficos dinâmicos a seco deve ser mais trabalhoso.

quarta-feira, janeiro 18, 2006

Mandriva e HP na América Latina

Saiu no site de notícias francês VNUnet.fr: a Mandriva (Ex MandrakeSoft, que fusionou com a Conectiva), fechou um acordo com a HP para distribuir computadores Desktop'com a distribuição de Linux Mandriva pré instalados em 37 países da América do Sul à partir de 2006. O acordo prevê a validação dos produtos da Mandriva nas máquinas HP, e trabalho conjunto de marketing e suporte técnico. Um release em inglês no site da Mandrive (Mandriva HP launch new Linux pre-loaded computers in Latin America) fornece mais detalhes sobre a operação.

Depois da evolução das interfaces gráficas e do desenvolvimento de pacotes office compatíveis com windows, este é mais um passo vital para permitir que o Linux ganhe espaço nos desktops. Quem já instalou linux, sobretudo em laptops, sabe que deixar TUDO funcionando é em geral trabalhoso, apesar do grande avanço dos instaladores para Linux. Além do mais, pessoas comuns, normais, qua nunca instalaram um sistema operacional na vida, nunca irão optar por linux se as máquinas compradas nas lojas já vem com um Windows XP pré instalado e configurado.

terça-feira, janeiro 17, 2006

Go Firefox !


Firefox hits 20 percent mark in Europe
Dados medidos pela empresa XiTi mostram que em média 20% de europeus utilizam o navegador Firefox, com destaque para França, Slovenia e Alemanha, com mais de 30% de uso. A matéria do Ars ressalta o fato que a última medição foi efetuada num domingo, o que torna a pesquisa menos confiável. De fato, a maioria das empresas usa IE, e como no domingo ninguém (ou quase ) trabalha, esta massa de usuários ficou de fora. Doi scomentários devem ser feitos a respeito desta ressalva: 1) Na matéria original da XiTi (em francês), a mesma ressalva é feita. Mas um quadro comparativo mostra que a média de uso do Firefox durante a semana fica apenas levemente abaixo da média do final de semana. 2) O fato que no final de semana a média é maior mostra que usuários dométicos tendem a preferir o Firefox em relação ao IE... Outro ponto interessante é que a América do Sul e Central é, segundo a XiTi, o continente que menos usa Firefox (5.79% em média, contra 15.88% na América do Norte e 20.11% na Europa).
Depois do fracasso do péssimo Netscape 6 e 7, finalmente temos um browser que parece ameaçar o todo poderoso IE. E com muita qualidade.

Think Different

Lendo alguns artigos sobre os novos Macs, caí num artigo falando sobre spots comerciais da Apple. Graças às maravilhas do Hipertexto (também conhecido como link em uma webpage), descobri um site com muito material sobre a Apple...posteres (ou será posters ?), objetos, fotos, e vídeos. (os vídeos podem ser encontratos em The Apple Collection Quicktime Movies @ The Apple Collection Entre os vídeo, dois me chamaram a atenção: um da campanha Think Different, e um lançado em 1984, sobre os novos Macs. Vale a pena dar uma olhada.

segunda-feira, janeiro 16, 2006

Portable Apps

A algum tempo atrás, o Ricardo me falou sobre este site. Recentemente, recebi um artigo do Dicas-L falando sobre o mesmo site, portanto acho que vale a pena comentar aqui. O site PortableApps.com disponibiliza vários pacotes de programas conhecidos do mundo OpenSource como Firefox 1.5, Gaim (ICQ, MSN, GoogleTalk, Jabber), Thunderbird e OpenOffice em versões portáteis, que cabem em um PenDrive USB. A idéia dos desenvolvedores é possibilitar que você carregue seus aplicativos favoritos consigo, permitindo roda-los a partir de qualquer computador (desde que o OS seja compatível) com porta USB. Uma grande vantagem dessa idéia é permitir ter um mini escritório virtual de bolso. Outra vantagem é minimizar problemas de compatibilidade. Por exemplo: se é preciso realizar alguma apresentação em formato OpenOffice Impress, posso garantir que onde quer que eu vá sempre será possível fazer a apresentação, já que além desta, no pen-drive, terei o aplicativo necessário para exibi-la. Um unico defeito do projeto é que por enquanto, os softwares só são para windows.

domingo, janeiro 15, 2006

Primeiros passos em Python

Recentemente comecei a ter um grande interesse por Python. Ainda não escrevi nenhuma linha de código...mas isso é questão de tempo. Por enquanto estou apenas lendo vário artigos sobre. No site python.org, existe uma boa documentação sobre a linguem, artigos, etc... Aconselho o artigo Why Python, e um conjunto de artigos comparando Python com outras linguagens. Segue o link.

Comentarios sobre AJAX com Struts

No inicio do ano passado, a empresa onde trabalho optou por usar o framework Struts para desenvolver aplicações Web. Precisávamos de um modelo MVC de desenvolvimento, e Struts se mostrou uma boa escolha para o tipo e tamanho de projeto que desenvolvemos (desaconselho o uso de struts para aplicações pequenas...). Struts apresenta alguns pontos interessantes, como mecanismos de verificação de validação de formulários, tratamento de exceções, internacionalização, mensagens, e mapeamento de casos de uso, além de disciplinar o fluxo de funcionamento do sistema. Recentemente, começamos a usar AJAX para aprimorar as interfaces gráficas, tornando as mais dinamicas e eficientes. Porém, quero ressaltar aqui alguns pontos e problemas que percebi ao integrar AJAX com struts. Se AJAX é usado apenas pontualmente, para carregar informações que tornem um formulário mais dinâmico, como auto-complete, suggests (mecanismo utilizado pelo Google Suggests), carregar informacoes para caixas de seleção e coisas do genero, então a integração e bem simples: os códigos em Javascript são bem simples, muito parecidos, e o fluxo de validação de formulários em Struts é mantido. Mas se queremos usar AJAX para funcionalidades mais complexas na página, como validação de formulários, e tratamento complexo de informações, aí começamos a perceber alguns problemas. AJAX funciona com o modelo de uma página única, com muito código javascript no cliente, e muitas conexões assíncronas..boa parte do processamento passa a ser incumbencia do cliente. A grande vantagem do struts é facilitar o fluxo de validação de dados e exibição de formulários com JSP. Se usamos AJAX para fazer este tipo de tarefa, então perdemos grande parte desses benefícios.

quinta-feira, janeiro 12, 2006

Organizando a vida digital

Já ouviu falar em Streamload ?

Se você tem toneladas de fotos, vídeo e áudio digitais e quer disponibilizar para outras pessoas ou simplesmente fazer backup de segurança, então talvez devesse dar uma olhada.

O Streamload é um serviço que oferece espaço na internet para armazenar e organizar arquivos e possibilita disponibilizar os arquivos para outras pessoas baixarem. Dito assim, à primeira vista o serviço é mais um disco virtual. Não exatamente....exstem alguns diferenciais.

Escolhendo o pacote gratuíto, o sistema disponibiliza 10GB de espaço para seus arquivos, e 100MB de download por mês (bastante restritivo...mas a idéia é que o modo gratuíto seja um demo). No modo pago, a taxa de download por mês vai de 1GB ($4) até 720GB ($400), e o espaço disponibilzado para armazenar arquivos é ilimitado.
Os arquivos podem ser enviados via um applet java do site que permite upload em batch de até 1GB, via FTP, ou via um aplicativo que pode ser obtido no site gratuitamente.

Para disponibilizar os arquivos, existem duas formas: via email ou via site. Via email, o sistema gera uma chave temporária que permite que as pessoas que receberam o email baixem os arquivos uma vez. Via site, é possível criar pastas públicas, ou com senha e/ou restrição por IP. É possível transferir arquivos entre contas do streamload também.

quarta-feira, janeiro 11, 2006

Mac com Intel

Revendo meus posts neste blog, percebi que não tem nada sobre Macs. Quem lê nem percebe que sou um macmaníaco de carteirinha, sempre tive macs em casa (um SE, um Performa, um iMac, um Powerbook 5300 e em breve um G4..ou intel...who knows !), e a idéia de ter um computador pessoal rodando algo que não seja Mac OS (sobretudo depois do X) me é totalmente desagradável.
Mas antes tarde do que nunca. Eis o primeiro post.... Depois da notícia da troca dos processadores IBM G5 por processadores Intel, a Apple acaba de lançar os primeiros iMacs com processadores Intel. Alguns sites relacionados: Apple - iMac Jobs: New Intel Macs are 'screamers' | Tech News on ZDNet Apple lança primeiro iMac com processador Intel - 10/01/2006 Além disso, os novos laptops mudaram de nome...se chamarão MacBooks. (Mac Rumors: Intel Transition, MacBook Name, and Windows on Mac?, Apple - MacBook Pro ) Nesse momento, acabo de decidir que irei esperar mais um tempo antes de comprar meu laptop.

terça-feira, janeiro 10, 2006

Pequena biblioteca AJAX

Nas últimas semanas tenho desenvolvido muitas coisas usando a técnica AJAX...digo técnica porque usar a palavra tecnologia neste caso não me parece apropriado. Mas isso é assunto pra outro tópico.

Os resultados finais são bem interessantes e satisfatórios: as interfaces geradas com Javascript+XML+requisição assíncrona são bem mais próximas de desktop, leves e dinâmicas, e a comunicaçao entre navegador e servidor é feita de forma muito eficiente e rápida.

Minha única ressalva é que, pra quem usa algum framework como struts como eu estou usando atualmente, o uso de AJAX força a ter que reescrever em javascript muitas das funcionalidades já existentes.

Meu sonho de consumo atualmente seria um bom conjunto de taglibs que gerasse código de requisisição e validação de formulários usando AJAX, deixando o código mais limpo e evitando algumas gambiarras necessárias. Existem algumas libs por aí, mas sinceramente nenhuma delas conseguiu chamar a atenção. Quem sabe um dia não me animo a escrever uma.

Mas enquanto não acho a solução ideal, estou usando uma solução caseira desenvolvida inicialmente por um colega e com algumas extensões minhas: o arquivo ajax.js possui um conjunto de funções que facilitam o uso de AJAX, tanto no acesso aos dados do arquivo XML quanto no acesso e modificação do DOM HTML. Está bem simples e sem nenhuma pretensão de ser uma biblioteca definitiva. Mas pode ser uma mão na roda para quem está começando. Comentários, sugestões e críticas são bem vindos.

Down them All !!!!!!!

O plugin downthemall para Firefox 1.5 é uma mão na roda para aquelas páginas com um monte de links para fotos ou arquivos. Ele simplesmente puxa todos os arquivos desejados de uma vez.

domingo, janeiro 08, 2006

Esta na hora de recomeçar do zero ?

quem mexe com desenvolvimnto pesado de software (e talvez nem tão pesado assim) provavelmente já passou pelo dilema de recomeçar ou não o desenvolvimento de um programa do zero, ou seja: reescrever completamente (ou quase) o código. E talvez o maior problema seja convencer seu superior que essa decisão em alguns casos é necessária, se não vital. Eu já passei por esse dilema, e acabei optando pelo redesign de uma interface gráfica, cujas versões iniciais não tinham sido feitas por mim, e que estava sob minha responsabilidade. O código estava bem mal comentado, bem complexo de entender, e adicionar qualquer funcionalidade era um processo complicado. Após um mês tinha reescrito tudo, com uma arquitetura bem simples, baseada em patterns, que me permitia ser muito mais eficiente nas atualizações. Leonardo me enviou este texto hoje, que dá um ponto de vista bem claro sobre situações nas quais o redesign é essencial. Curto e objetivo. http://www.jroller.com/page/bloritsch?entry=when_is_it_ok_to

quinta-feira, janeiro 05, 2006

Gmail Tips

Este post é dedicado a Leo, Daniel, Jéssica e Tereza, que apesar de geeks assumidos, não sabiam nenhuma das dicas a seguir: 1) Suponha que meu email no gmail seja blogger@gmail.com. Então qualquer email no formato blogger+@gmail.com chegará na minha caixa postal. Por exemplo: os comentários sobre meus posts neste blog são enviados para blogger+comments@gmail.com. Vantagem ? FILTRO. É possível usar o Subject para filtrar..algo do tipo [comments] etc.... Mas nem sempre é possível adicionar um título específico, é mais sujeito a erros. 2) Multiplos Senders: é possivel configurar o gmail para enviar email com endereços de sender diferentes de sua conta do gmail. Para isso, é preciso que as outras contas existam. Clique em Settings->Accounts->add another email address. Pronto: só seguir os passos e o novo email estará cadastrado. Na hora de compor uma nova mensagem, uma caixa de seleção permitirá selecionar o endereço desejado. 3) Personalizar Web Clips: a mais nova novidade do gmail é o web clips, a abinha de notícias que aparece em cima da lista de emails. Este novo serviço exibe headlines de feeds RSS de vários sites. Para torna-lo mais interessante, é possível personaliza-lo, removendo feeds não lidos e adicionando feeds de interesse. Para isso, vá em Setting->Web Clips. No campo de busca, indique o endereço completo do feed RSS desejado (por exemplo http://log4dev.blogspot.com/atom.xml). Pronto..basta habilita-lo e ele aparecerá no seu web-clips.

terça-feira, janeiro 03, 2006

Teste simples de qualidade de desenvolvimento

O artigo The Joel Test: 12 Steps to Better Code propõe um pequeno teste, transcrito abaixo, para verificar a qualidade do seu ambiente de desenvolvimento. Apesar de simples, aborda pontos importantes para qualquer ambiente de desenvolvimento, e parece um bom ponto de partida para uma avaliação básica. 1. Do you use source control? 2. Can you make a build in one step? 3. Do you make daily builds? 4. Do you have a bug database? 5. Do you fix bugs before writing new code? 6. Do you have an up-to-date schedule? 7. Do you have a spec? 8. Do programmers have quiet working conditions? 9. Do you use the best tools money can buy? 10. Do you have testers? 11. Do new candidates write code during their interview? 12. Do you do hallway usability testing?

Escrevendo APIs em Java

O Java API Design Guidelines resume algumas boas práticas para desenvolver APIs em Java.

Aprendendo a programar

The Perils of JavaSchools - Joel on Software

O artigo citado acima toca um ponto interessante: formação em computação deixando de lado conceitos importantes. Java é uma linguagem extremamente interessante (com a qual eu trabalho inclusive), mas que esconde muitos aspectos que na formação básica são importantes. Assim como aprender lógica pura e matemática e cálculo númerico são importantes, apesar de raramente termos que resolver sistemas e equações num software comercial. E de qualquer forma, existem biblotecas pra isso, não é mesmo ?

O resultado são programadores que sabem montar interfaces gráficas em IDEs visuais, conhecem if/while e for e não sabem o que é orientação a objeto.....

Aliás, acho também absurdo um curso de Ciência da Computação superior não ter um curso sobre compiladores....mas isso fica pra outra discussão.