Páginas
Wednesday, August 13, 2008
Sobre Test-Driven Development
http://tech.groups.yahoo.com/group/extremeprogramming/message/144501
O que gostaria de deixar aqui são os links postados por Dave Nicolette, listando alguns estudos sobre o tema.
http://delicious.com/rhcarvalho/paper+tdd
Monday, August 11, 2008
Instalando Django
A instalação foi extremamente fácil. No ambiente do Ubuntu, tudo que precisei fazer foi:
1) Pegar uma cópia do repositório com a versão mais atual (eu salvei no meu /home por enquanto)
svn co http://code.djangoproject.com/svn/django/trunk/ django2) Criar alguns symlinks para que o Python acesse os arquivos do Django
sudo ln -s `pwd`/django/django /usr/lib/python2.5/site-packages/django
sudo ln -s `pwd`/django/django/bin/django-admin.py /usr/local/binDependendo do seu sistema, o site-packages pode estar em outro lugar.
Para descobrir onde, rode o seguinte comando no console:python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
Pronto! Agora basta seguir para o tutorial em:
http://www.djangoproject.com/documentation/tutorial01/
As instruções oficiais estão em http://www.djangoproject.com/documentation/install/.
Dada a absurda facilidade para instalar, a diversão fica aumentada!
Para ambiente Windows, basta usar algum programa como o RapidSVN ou TortoiseSVN para fazer o checkout do repositório, e colocar o diretório do Django diretamente em C:\Python25\Lib\site-packages\django e copiar o arquivo django-admin.py para C:\Python25\Scripts.
Sunday, August 10, 2008
Cibernética
Segue um resumo e alguns comentários pessoais:
O campo da cibernética foi criado na década de 1940, e implica no estudo de elementos comuns no funcionamento de máquinas e seres humanos, ou seres vivos em geral, assim como a comunicação entre os mesmos.
O conceito se baseia na comprovada superposição entre complexas atividades cerebrais e simples operações de uma máquina de calcular. As capacidades implementadas nas máquinas de calcular mais avançadas, como memória, associação e escolha, mostram que o cérebro humano se comporta de maneira muito similar à das máquinas.
O objetivo da cibernética é prover um mecanismo de auto-regulação (feedback) bem representado. O termo origina-se para palavra grega para ‘piloto’, e que no latim deu origem a ‘governador’. Um exemplo do funcionamento do corpo humano, e que se assemelha ao trabalho de uma máquina, é o ato de pegar um lápis. Para tal tarefa, o sistema nervoso central envia sinais para os músculos e, em seguida, percepções cinestéticas são captadas pelos órgãos dos sentidos, realimentando o sistema nervoso num processo circular.
Para desenvolver a teoria, foi preciso uma equipe de especialistas, com amplo domínio não só na sua área específica, mas também em todas as outras relacionadas ao estudo. Norbert Wiener, matemático, trabalhou com o Dr. Rosenblueth, fisiologista, ambos convictos de que as áreas mais produtivas para o crescimento das ciências eram desprezadas como terra de ninguém entre os vários campos definidos das ciências.
A colaboração da dupla começou com um projeto da época de guerra, um aparelho de controle de fogo para artilharia antiaérea, capaz de acompanhar o percurso de um avião e predizer sua posição futura, onde, claramente, atua o princípio da auto-regulação, dado que o funcionamento do aparelho depende de operadores humanos da arma e do avião.
Posteriormente, outros cientistas passaram a participar do grupo, como o matemático John von Neumann, e outras pessoas dos campos de psicologia, sociologia, engenharia, anatomia, neurofisiologia, física entre outras.
Ainda em 1948, acreditava-se que o momento evolutivo corrente era o da comunicação e do controle. Diferente da engenharia de força, a engenharia da comunicação está preocupada com a reprodução exata de um sinal. Até o século XIX, a engenharia do corpo era vista como um ramo natural da engenharia da força, entretanto, o que ocorre, na verdade, é que o corpo humano assemelha-se muito mais ao funcionamento de uma válvula que a um sistema mecânico baseado em energia. Ou seja, o estudo de autômatos, seja de metal ou de carne, é um ramo da engenharia de comunicações.
Da mesma forma que a redundância colabora para garantir o funcionamento correto de sistemas valvulados, a transmissão de sinais através de neurônios é confiada simultaneamente a mais de um deles. Patologias do cérebro não são unicamente causadas por lesões físicas, já que os problemas funcionais transcendem o físico e passam para o campo da comunicação, ou falha desta, entre neurônios.
A distinção entre perturbações orgânicas e perturbações funcionais não está expressa no cérebro, e sim no conjunto de instruções processadas e no conteúdo armazenado, assim como em uma máquina de calcular. O armazenamento se dá na forma de memória, desaparecendo quando o cérebro morre. Logo, as perturbações mentais tratam-se de doenças da memória, da informação de circulação conservada pelo cérebro em estado ativo, e sob a forma de permeabilidade de sinapses.
Para tratar máquinas que apresentam defeitos, existem vários métodos que tem em comum a tentativa de eliminar os dados já armazenados e reiniciar o funcionamento do sistema. Entretanto, a única forma conhecida de limpar o cérebro das impressões passadas é a morte. Entre os processos não-fatais, o que mais se aproxima da limpeza é o sono, que não é capaz de retirar lembranças profundas.
Aparentemente, não existe uma forma puramente farmacêutica ou cirúrgica para intervir seletivamente na memória permanente. É nesse caso que são empregadas a psicanálise e outras medidas psicoterapêuticas.
Minhas percepções:
Resolvi entender melhor quem era Wiener e descobri que ele foi um teórico e matemático americano, que contribuiu para os campos de engenharia e comunicação eletrônica, e sistemas de controle. De fato, Wiener é também fundador da cibernética. Interessante notar que aos 14 anos ele obteve bacharel em matemática e iniciou seus estudos na área de zoologia, sendo que um ano depois pediu transferência para estudar filosofia. Aos 18 anos Wiener já tinha seu título de PhD. Certamente sua formação o forneceu uma boa base para falar com propriedade sobre interações entre seres vivos e máquinas.
Por envolver várias áreas do conhecimento, o estudo me faz lembrar o trabalho atualmente desenvolvido pela profa. Carla Verônica, no campo da neuroinformática. Para realizar seu trabalho de pesquisa, ela conta com uma equipe multidisciplinar, envolvendo programadores e outros informatas, lingüistas, psicólogos, físicos, etc. Concordo que para desbravar áreas até então pouco desenvolvidas é necessário a colaboração de especialistas que possuam visão holística do tema.
O texto também me remete ao capítulo "Memory and Metamemory: Considerations in the Training of Human Beings", por Robert Bjork, do livro "Metacognition: Knowing about knowing" que li recentemente, e trata do funcionamento da memória humana, em algumas ocasiões fazendo comparações com máquinas.
O tema é bastante relevante ao curso de Engenharia de Computação e Informação no que tange à informação. Esta pouco significa dada de forma estática e isolada, sendo preciso comunicar para dar algum sentido a mesma. Não devemos nos limitar a armazenar dados de forma eficiente em um computador, precisamos entender como o conhecimento que está a nossa volta influencia o funcionamento de nossas mentes, para aperfeiçoar os mecanismos de interação homem-máquina e homem-homem.
Thursday, August 7, 2008
Primeiras impressões no Django
Tirei isso da minha cabeça. Afinal, um bom tempo se passou, tanto o TG quanto o Django mudaram. O TG, aliás, é algo absolutamente diferente com a versão 2.0. Fui no site do Django e tive boas surpresas. Fiquei empolgado com o que vi. Django começou na frente.
Minhas percepções superficiais:
- Gostei da ferramenta admin, que gera automaticamente uma inferface para classes do Model para seu projeto, e serve como scaffolding do Rails, ou quase isso. O TG não faz nada nesse nível out of the box. Existe o módulo tgcrud que supostamente faria o scaffolding, mas parece ser um projeto pouco ativo. No Turbogears temos uma interface de administração, mas ela não é tão facilmente imbutível no projeto em si. Nela, o CatWalk permite criar, ler, editar e remover itens do banco de dados via interface amigável, porém, para disponibilizar essa ferramenta na sua própria aplicação é preciso fazer algumas magias, e ainda assim não fica apresentável *.
- Ainda em relação ao admin site, facilidades como: filtro automático em tabelas por determinado valor em uma coluna, busca baseado em uma ou mais colunas, e ordenação automática (basta clicar no título da coluna), são muito interessantes para permitir ações comumente realizadas em planilhas eletrônicas.
- Enquanto o TG 2.0 não tem previsão de lançamento, o Django 1.0 vem no início de Setembro. É um ótimo momento de começar e já ir usando a versão que está no repositório SVN.
- A filosofia do Django também me pareceu interessante, embora seja estranho eles quererem se chamar MTV ao invés de MVC. O que é View no MVC é Template no Django, e o que é Controller no MVC é View no Django. Só mesmo o Model se salvou.
- Outro ponto que me causou desconforto desde o primeiro contato no início do ano passado foram os templates. Eu gosto do Kid Templating usado no TG pela cara de HTML e a limpeza visual do código. Todavia, não parece que o template do Django seja tão ruim assim, é mais questão de costume. O sistema de templating do Django suporta auto-escape, herança, e, hmm... *não* suporta código Python arbitrário! Isso parece ótimo, forçando o programador a não colocar lógica no Template (View do MVC...).
Depois que eu instalar o Django e ter percepções reais, posto o resultado!
* Se alguém se interessar em saber como colocar o CatWalk dentro de um projeto do Turbogears (sem usar o tg-admin toolbox), eu posso publicar a respeito.
Links:
http://www.djangoproject.com/
http://www.djangoproject.com/
http://www.djangoproject.com/
Python ou Ruby? Turbogears x Django x Rails
Faz um ano que venho desenvolvendo aplicações web usando o Turbogears, que considero muito legal, comparado a coisas como Java para web, PHP, e qualquer outra coisa mais "burocrática".
O TG me permite trabalhar de forma simples e that just works.
Lembro que antes de usar o TG, depois de algum tempo me divertindo com Python, eu queria experimentar ele ou o Django, que eram os frameworks para Python falados na época. Claro, foi também quando fui ver o que era o tal do Zope (nome que vi no dia que resolvi aprender Python...).
Ultimamente o Ruby on Rails tem cada vez mais "batido à porta", e não falta vontade de cair dentro e desenvolver com ele. Até agora eu só vi screencasts, li bastante, ouvi podcasts e mexi em aplicações prontas.
Mas afinal, porquê todo esse papo furado? Hoje temos mais um projeto de desenvolvimento web. Um projeto que deve durar em torno de dois anos no "rítmo universitário". Para ele, a equipe parou pra pensar no que usaríamos. Essa é uma boa hora para ver algo diferente do Turbogears, conhecer novos mundos... mas, o quão novos? Continuar no Python ou pular pro Ruby?
Eu adoro Python, sim, amo mesmo. Deixamos as outras opções de lado e vamos nos decidir entre TG, Django e RoR.
Nos próximos posts vou relatar minha percepção da relação entre Django x TG e RoR x TG.
Como não tenho experiência prática nos frameworks da esquerda, comentários são muito bem vindos! O que pode parecer bom num primeiro momento, pode esconder fraquezas a longo prazo.