Páginas

Tuesday, August 26, 2008

Django Templates + Dreamweaver

Resolvi fazer uma rápida pesquisa para saber o que é possível fazer para editar Templates do Django num editor como o Dreamweaver, depois que uma amiga expressou a vontade de usar tal ferramenta para criar o layout de um site.

Para começar, por filosofia, a linguagem de templates do Django não tenta ser amigável a editores WYSIWYG, como o Dreamweaver:

http://www.djangoproject.com/documentation/design_philosophies/

Assume designer competence

The template system shouldn’t be designed so that templates necessarily are displayed nicely in WYSIWYG editors such as Dreamweaver. That is too severe of a limitation and wouldn’t allow the syntax to be as nice as it is. Django expects template authors are comfortable editing HTML directly.


No meu caso, eu assumo competência para usar um editor de textos normal, ou usar o Dreamweaver em modo Code View (pelas funcionalidades do editor, como code-completion, code-folding, referência à mão, busca e substituição, etc), porém, de fato, nem todos os desenvolvedores trabalham assim.

Li o post do Mark Ramm sobre "user-friendly templates", e confirmei que temos aí uma grande questão de opinião. Uns defendendo linguagens que utilizam atributos em tags, como estou acostumado a usar no TurboGears, e outros mostrando vantagens notadamente no sistema do Django, com marcação própria. Eu estou aprendendo a gostar da abordagem do Django, pela quantidade reduzida de código que preciso escrever. Tudo bem que os templates em Kid geralmente são feitos copiando um já existente para garantir o código repetitivo de doctypes, xml namespaces, e resto da estrutura básica, mas a simplicidade de escrever arquivos pequenos, só com aquilo que realmente interessa, é tentador!

A propósito, a breve discussão do Mark com o Simon Willison sobre como eles estão usando AJAX me trouxe várias idéias! Já faz algum tempo que não brinco com AJAX pra valer, entretanto recentemente dei uma opinada no código de uma amiga que está desenvolvendo uma aplicação de redes sociais, e agora tenho novidades para acrescentar.

Ainda não tenho experiência suficiente no Django para saber se na hora de manter o código essa simplificação trará alguma dificuldade. A princípio, creio que não, já que geralmente me encontro usando o Firebug contra páginas servidas localmente (nunca abri um arquivo .kid no Firefox para 'debugar' e não consigo imaginar alguém fazendo isso). Além do mais, o Kid também tem herança, e com isso os arquivos que manipulamos não são exatamente o que teremos de output na tela, pensando na visualização do layout com CSS, por exemplo.

Por fim, o Beshr Kayali desenvolveu uma extensão para o Dreamweaver, DjangoExt, que promete facilitar a vida. Eu não tive paciência de me cadastrar no site da Adobe só para baixar essa extensão. Se alguém tiver o arquivo, por favor entre em contato.

Sunday, August 24, 2008

Desfazendo mudanças em um repositório SVN


Uma das vantagens de usar um sistema de controle de versão, como o Subversion, é a possibilidade de voltar atrás quando uma alteração foi indesejada.
Costumo falar para meus amigos que devemos commitar o código freqüentemente, sempre, sempre, sempre. O trabalho deve ser feito de forma incremental, uma pequena tarefas/alteração por vez, em passos de bebê.

Para desfazer uma mudança já commitada no repositório, basta seguir os passos descritos aqui: http://svnbook.red-bean.com/en/1.1/ch04s04.html

Suponha que você está trabalhando numa cópia de trabalho de /calc/trunk, e então descobre que uma mudança feita na revisão 303, que alterou o arquivo integer.c, está completamente equivocada. A alteração nunca deveria ter sido commitada. Você pode utilizar o comando svn merge para "desfazer" a mudança na sua cópia de trabalho, e depois commitar a modificação local para o repositório. Tudo que você precisa fazer é especificar uma diferenciação reversa:

$ svn merge -r 303:302 http://svn.example.com/repos/calc/trunk
U integer.c

$ svn status
M integer.c

$ svn diff
…
# verifique se a alteração indesejada foi removida
…

$ svn commit -m "Desfazendo mudança commitada em r303."
Sending integer.c
Transmitting file data .
Committed revision 350.

Uma revisão no repositório funciona como um grupo específico de alterações (changesets). Usando a opção -r, você está pedindo que o svn merge aplique um changeset, ou um conjunto deles, a sua cópia de trabalho local. No caso acima, aplicamos o changeset #303 de forma reversa.

Lembre-se que ao desfazer uma mudança, é recomendável usar o svn status e svn diff para confirmar que seu trabalho está no estado correto, e depois usar o svn commit para enviar a versão final ao repositório.

Se você está pensando: "eu não desfiz um commit de verdade, certo? A mudança ainda está lá na revisão 303. Se alguém fizer checkout de uma versão entre 303 e 349, verão a mudança indesejada!"
Isso mesmo, o svn merge apenas "remove" a mudança indesejada do HEAD (última revisão) do repositório.

Dica extra:

Para saber qual a versão atual do repositório, use o comando svn info.
Exemplos:
  • Informações úteis sobre um arquivo:
$ svn info foo.c
Path: foo.c
Name: foo.c
URL: http://svn.red-bean.com/repos/test/foo.c
Revision: 4417
Node Kind: file
Schedule: normal
Last Changed Author: sally
Last Changed Rev: 20
Last Changed Date: 2003-01-13 16:43:13 -0600 (Mon, 13 Jan 2003)
Text Last Updated: 2003-01-16 21:18:16 -0600 (Thu, 16 Jan 2003)
Properties Last Updated: 2003-01-13 21:50:19 -0600 (Mon, 13 Jan 2003)
Checksum: /3L38YwzhT93BWvgpdF6Zw==


Informação sobre diretórios:
$ svn info vendors
Path: trunk
URL: http://svn.red-bean.com/repos/test/vendors
Revision: 19
Node Kind: directory
Schedule: normal
Last Changed Author: harry
Last Changed Rev: 19
Last Changed Date: 2003-01-16 23:21:19 -0600 (Thu, 16 Jan 2003)

Saturday, August 23, 2008

Mais Django!

Definitivamente vou começar a usar Django.
Tudo que vi recentemente tem me empolgado bastante, e acabei reunindo algumas informações úteis:

Django, documentação 100% em sincronia com o código no repositório svn!
http://www.djangoproject.com/documentation/

Um livro, escrito pelos autores do framework, gratuito:
http://www.djangobook.com

Django roda no Jython!
http://code.djangoproject.com/wiki/DjangoAndJython

Várias aplicações prontas (código que se integra ao seu projeto para desempenhar funções corriqueiras)!
http://pinax.hotcluboffrance.com/apps/

Novidades no meu delicious.com:
http://delicious.com/rhcarvalho/django

E tem mais:

Django é muito mais popular que o Turbogears!
turbogears

0.07
django

1.00


http://google.com/trends?q=turbogears%2C+django%2C+&ctab=0&geo=all&date=all&sort=1


Django é tão *hot* quanto J2EE, e em ritmo crescente, enquanto o Java está decadente!
j2ee

7.00
django

1.00


http://google.com/trends?q=j2ee%2C+django%2C+&ctab=0&geo=all&date=all&sort=1


Acredito que dá para juntar templates e aplicações prontas para acelerar o desenvolvimento.
O projeto Pinax é muito interessante nesse sentido.

Até a próxima!

Tuesday, August 19, 2008

Palestra sobre Scrum com a Teamware

Hoje fui com o Ronald, da minha equipe no Labase e o Gustavo, companheiro de empresa júnior Fluxo Consultoria a uma palestra da Teamware sobre Scrum. Muito bom conhecer pessoalmente o Juan Bernabó, depois de ouvi-lo em alguns podcasts. A introdução ministrada pelo Eduardo Coppo também foi excepcional. Gostei de ver o pessoal ter o seu queijo mexido, as abordagens ágeis realmente fazem as pessoas pararem para refletir.

Eu não tenho dúvida que para o tipo de coisa que gosto de fazer não tem processo cascata que dê conta. Lá no Labase estamos gradualmente colocando a equipe nos eixos, e está sendo muito engrandecedor seguir as boas práticas, aprender coisas que ninguém ouve falar durante a graduação (infelizmente).

O engraçado é que ontem eu proferi uma mini-palestra sobre abordagens ágeis para um pessoal da Fluxo, e alguns dos slides que o Bernabó apresentou também estavam na mini palestra! Claro que nada melhor que ouvir de alguém mais experiente a complementação ao meu discurso. Note que na minha apresentação procurei não entrar em tantos detalhes de software, e sim apenas cutucar em poucos minutos os ouvintes falando mais sobre "princípios gerais".

Sunday, August 17, 2008

A invenção do computador

Esse foi o tema do texto escrito por Pierre Lévy que li nesse fim de semana.
A história é razoavelmente longa, mas certamente poderia ser uma coletânea de livros se assim desejado.

O computador nasceu no período de guerra, e, como as bombas nucleares, serviu para o mal, para aterrorizar e destruir. Todavia, o conhecimento neste momento adquirido é o que garante o bem-estar, o retardo indefinido do próximo conflito mundial, e que multiplica nossos poderes e inteligência.

O desenvolvimento de máquinas que automatizam e aceleram cálculos precede a Segunda Guerra Mundial, logo esta não pode ser dada como tese única para o surgimento dos computadores. Estes não prosperaram nem no Japão nem na Alemanha, pois foram destruídos pela guerra. Foi ela que financiou projetos nos EUA, e por isso, antes de construir equipamentos de seus interesses, cientistas tiveram que produzir encomendas do governo orientadas a aplicações militares.

Apesar de a pesquisa militar ter contribuído para o desenvolvimento das primeiras calculadoras eletrônicas, a bomba atômica de urânio foi construída sem o auxílio de qualquer computador. Essa época favorável a invenções permitiu que teorias e objetos técnicos fossem repensados e então ganhassem novos fins não-militares.

A criação dos computadores não é creditada a ninguém em especial, mas sim a alguns homens que contribuíram para tal. Destaca-se Charles Babbage, Alan Turing e John von Neumann, todos eles matemáticos. Babbage construiu máquinas de calcular, inclusive introduzindo funções de memória, objetivando construir tabelas náuticas, astronômicas e matemáticas exatas, pois as que existiam na época eram tomadas de erros.

Turing foi mais um teórico, e não deu contribuições diretas para os computadores digitais, nem para a construção de autômatos concretos. Já von Neumann redigiu o primeiro documento onde se descrevem a disposição interna e os princípios de funcionamento dos computadores modernos.

A história dos computadores também pode ser descrita pela natureza dos materiais empregados em cada época. Primeiro as máquinas mecânicas, depois eletromecânicas, eletrônicas e, por fim, os computadores. A evolução na eletrônica se deu com o tubo de vácuo, originando o transistor e os circuitos impressos. Isso sem contar o desenvolvimento das áreas de linguagem de programação, software, dispositivos de comunicação e implicações sociais.

A invenção técnica do que é a informática deveu-se a uma sucessão de fatos desordenados e reutilizações, contrastando com as idéias de algoritmo ou de mecanismo predeterminado a que está associada.

A história da informática é uma espécie de meta-rede irregular na qual cada nó define e interpreta à sua maneira, em função dos seus fins, a topologia da mesma. Cada um reinterpreta o passado e projeta um futuro segundo suas vontades. Assim, nenhum precursor ou fundador tem pertinência relevante.

Comentários pessoais:

Pierre Lévy é um Tunisiano de 52 anos, residente no Canadá. Ele é conhecido por seus estudos sobre inteligência coletiva e sociedades baseadas no conhecimento. Lévy é um nome importante na “cibercultura”.

Notei que a invenção do computador não pode ser analisada a partir de uma visão simplista. Ela se deve a uma complexa mistura de fatos, estudos e invenções, englobando o aspecto social, técnico, científico e militar.

Lévy mostra como a guerra influenciou a tecnologia, e vice-versa, e isso me deixa num estado de dúvida. Será que para construirmos, evoluirmos, precisamos de tanto terror, tanta morte, tanta destruição? Não poderiam razões mais benéficas provocar inovações em grande escala? Parece que o homem precisa sofrer para, então, usar sua inteligência para o bem.

Há uma tabela comparativa que mostra o quanto a velocidade de processamento evoluiu com o surgimentos de novas máquinas. Enquanto um homem levaria mais de dois dias para calcular a trajetória de uma bala, um computador mecânico levaria apenas duas horas. Não obstante, o ENIAC levaria apenas três segundos, um valor impensável com a tecnologia do início do século XX.

Quanto um nome para destacar como o criador do computador, concordo com o autor no argumento de que não é possível identificar alguém que tenha idealizado e construído a máquina que usamos hoje, com propósitos bem definidos e sem utilizar-se de outros equipamentos eletrônicos previamente construídos. O computador claramente não é uma máquina que foi construída “from scratch”.