Armagedom na Internet
Postado por Osvaldo Santana
Não sei se as pessoas notaram, mas está acontecendo uma coisa engraçada na “Internet Brasileira” neste exato instante: o Orkut está fora do ar há mais de 18 horas.
Boatos estão se alastrando por todos os lugares e uma grande depressão está atingindo os brasileiros, afinal de contas, se o Orkut sair do a Internet vai perder 50% de sua utilidade para o brasileiro (os outros 50% ficam para o MSN).
Blogueiros estão colocando as palavras chaves “Orkut, Fora do ar” em seus sites para ganhar acessos e um dinheirinho extra1, brincalhões de plantão já estão criando os seus falsos-emails-oficiais-do-google dizendo que é o fim do Orkut, os conspiracionistas estão alertando os amigos que o Orkut está instalando um sistema que permite à Polícia Federal recolher os dados dos usuários deste serviço, etc, etc.
O mais engraçado disso tudo é que meu pai se inscreveu no Orkut essa semana. Vou até fazer uma brincadeira com ele: “Pô pai, o senhor é tão ‘mal elemento’ que bastou criar uma conta no Orkut pros caras fecharem o site!”
Duck Typing
Postado por Osvaldo Santana
Lendo os comentários de uma notícia que foi postada recentemente no BR-Linux eu pude observar que algumas pessoas não entendem muito bem o que é duck typing.
Ao contrário do que muitas pessoas pensam duck typing não é um mecanismo disponível em linguagens de programação que usam tipagem dinâmica mas sim uma técnica (ou prática) de desenvolvimento. Essa técnica é explicada da seguinte forma:
Se um objeto anda como um pato e faz quack como um pato então ele é um pato.1
O problema dessa explicação é que ela não fornece muitos elementos úteis para que as pessoas possam entender exatamente como isso funciona então irei recorrer à outra citação extraída do livro Design Patterns:
Program to an interface, not an implementation. (Programe para uma interface, não para uma implementação).
Duck Typing é uma técnica que funciona com qualquer linguagem de programação com suporte ao paradigma OO e diz basicamente que se o seu objeto responde à uma determinada mensagem (chamada de método) característica de um determinado tipo de objeto então esse objeto também pode ser considerado do mesmo tipo.
Trocando em miúdos: Se eu tenho um objeto do tipo “Conta” e um objeto do tipo “Lançamento” e ambos os objetos respondem ao método “.cancela()” pouco me importa se eles são derivados de uma classe em comum ou se ao definir a classe deles eu especifiquei algo como “implements Cancelable” :), o que me importa é que quando eu fizer “objeto_cancelavel.cancela()” esse objeto será cancelado.
Alguns defensores da tipagem estática podem dizer: “mas e se o objeto não implementar o método “.cancela()” e eu chamá-lo o meu programa vai quebrar!”. Sim, vai, e é exatamente isso que teria que acontecer, afinal de contas se você está tentando “cancelar” um objeto que não pode ser cancelado (não implementa “.cancela()”) é muito provável que o seu programa esteja com algum bug que precisa ser corrigido, implementando o método “cancela()” no objeto ou não chamando esse método onde ele está sendo chamado, já que essa chamada estaria violando o polimorfismo.
Então, para terminar, é necessário lembrar que duck typing não é um tipo de tipagem (tocradilho não intencional) dessa ou daquela linguagem de programação. É apenas a forma com que você faz uso das interfaces de seus objetos.
1O nome duck typing surgiu a partir dessa explicação.
Projetos inacabados
Postado por Osvaldo Santana
Eu geralmente não consigo terminar os projetos que começo. Isso é um problema tão grande pra mim que até ajuda especializada eu busquei. Infelizmente pouca coisa melhorou depois disso de modo que hoje eu diminui drasticamente a quantidade de “novos projetos” que eu costumava abraçar.
Também já li um livro pra tentar melhorar um pouco essa situação mas o máximo que consegui foi adicionar mais um projeto à lista de projetos inacabados: adotar a metodologia sugerida pelo livro.
Com esse post aqui eu vou tentar dar início à mais uma tentativa de por ordem nessa situação e partir para a solução desse meu problema. Para isso vou fazer uma lista dos projetos que estão pendentes, uma data para a finalização deles e uma ação a ser tomada com o projeto caso a meta não tenha sido cumprida.
- Terminar de escrever o meu livro (Desenvolvimento Python) - 30/08/2007 - Se o livro não ficar pronto até esta data eu irei liberar os capítulos que já estão prontos na Internet sob uma licença Creative Commons.
- Finalizar a versão 1.0 do titletrack e escolher um nome melhor para ele - 15/02/2007 - publicar o que está pronto, oferecer para algum mantenedor que tiver interesse e “lavar as mãos”.
- Terminar a biblioteca de leitura de código de barras - 15/04/2007 - abortar o projeto de software para pesquisa de preço em supermercados feito em Python for S60.
- Terminar de escanear as revistas Micro Sistemas para doá-las para um colecionador interesado (já escolhi o beneficiário) - 15/06/2007 - enviar as revistas sem escaneá-las mesmo.
- Migrar o PythonBrasil para uma nova versão de moin e implantar novo leiaute - 1/2/2007 - lançar o “desafio” na lista e ver se alguém se oferece para realizar essa tarefa.
Existem alguns outros projetos pessoais além desses mas eles tem prioridade muito baixa ou são pessoais demais para constar aqui no blog. De qualquer maneira estou com uma lista parecida com essa em mãos onde ficarão anotados esses projetos.
Codare-mos
Postado por Osvaldo Santana
Nasceu o Codare!
Boa parte da qualidade de um programador é formada por sua experiência de “vida” adquirida nessa função. Quanto mais tempo um programador está na estrada mais “bagagem” ele acumula.
Uma parte considerável dessa bagagem é formada por dicas, macetes e práticas que foram descobertas por acaso ou depois de muito sofrimento. Leva-se muito tempo para acumular uma boa quantidade dessas dicas.
E se algum dia um grupo de programadores com muita experiência passassem a escrever essas dicas em um site? E se essas dicas fossem curtas e rápidas para facilitar a assimilação?
Pois bem, foi exatamente isso que aconteceu: um grupo de programadores brasileiros se juntou para escrever todas essas dicas para os programadores brasileiros. Esses programadores todos são regidos pela batuta competente do Aurélio Jargas (conhecido como verde por alguns).
Isso mesmo! Dicas valiosas, escritas de maneira acessível, em língua portuguesa e totalmente “di grátis”! Só não lê quem não quiser.
E pra quem programa em Python!
Computador para Todos
Postado por Osvaldo Santana
Tenho acompanhado algumas notícias sobre o projeto Computador para Todos do governo federal e os comentários que aparecem nos blogs onde essas notícias circulam me fazem perguntar uma coisa: o que a comunidade de SL esperava desse programa?
Uma análise científica isenta (perdoem a redundância) precisa analisar o fenômeno de migração Linux->”Windows Pirata” que está acontecendo com as máquinas do programa Computador para Todos, mas eu desconfio que no final dessa análise chegaremos à uma conclusão óbvia: as empresas e o público consumidor brasileiro não estava preparado para o Linux.
Sim, as empresas não estavam preparadas porque elas não sabem como dar suporte ao Linux, como tornar os seus vendedores aptos a venderem um produto ligeiramente diferente do que eles estavam acostumados a vender, e porque os empresários brasileiros são muito bons para reclamar de imposto e juro alto (são altos mesmos) mas péssimos para criar e levar adiante modelos de negócio diferentes daqueles que eles usam desde a época de Getúlio Vargas.
O público também não estava preparado para o Linux. Os professores nas escolas pedem os trabalhos escolares em formato “.doc” para seus alunos. Os órgão públicos (principalmente o judiciário) publicam os documentos sobre licitações públicas, editais e coisas do tipo em formatos proprietários (.doc também) e os sites das instituições públicas não funcionam com navegadores que não sejam o Internet Explorer.
Como que a comunidade de software livre quer que as pessoas “normais”, aquelas que não são entusiastas de tecnologia, usem um computador com Linux? Essas pessoas vão ficar com Linux em seus computadores só porque ele é “politicamente correto”? Isso é bobagem.
E como as coisas não aconteceram da forma que a “comunidade” esperava eles trataram logo de eleger os culpados (Microsoft, Abes e Governo Federal) para que ela possa se eximir de qualquer responsabilidade pelo que aconteceu.
A comunidade erra quando ataca a Microsoft, a Abes e até mesmo o Governo Federal (podem atacar, mas usem os motivos certos). A Microsoft não tem culpa de nada. Ela está simplesmente jogando o jogo. Se a comunidade SL não fez o seu trabalho corretamente a culpa não é dela e à ela cabe apenas tentar fazer a sua parte com correção e honestidade. Se ela não for honesta a nossa função é apontar com provas a desonestidade dela.
A Abes também não é vilã. Ela é uma associação de empresas que produzem e vendem software proprietário. Ela detectou que o programa Computador para Todos estava servindo para aumentar os índices de pirataria e fez uma pesquisa para provar isso (eu tenho uma forte sensação de que eles falam a verdade nesse trabalho). Culpá-la por fazer isso é o mesmo que culpar a OAB por defender os interesses dos advogados.
Querer culpar o Governo Federal pelo programa Computador para Todos é correto? Nunca. O projeto está permitindo que pessoas comprem computadores e isso é bacana. O projeto também sugere que esses computadores venham com Linux e isso também é bacana. Mas num país democrático é o máximo que um projeto governamental pode e deve fazer. A partir deste ponto a tarefa de popularizar o Linux cabe às empresas que montam e vendem esses computadores e à comunidade de SL que dará suporte à esses usuários* e pressionará as empresas, escolas, órgãos públicos para que utilizem os padrões abertos que permitem que Linux e Windows convivam harmoniosamente.
Um “causo” real: Um sobrinho meu pediu um computador para seus pais e graças ao Computador para Todos ele iria ganhar o tal computador. Na loja (Ponto Frio em Curitiba) o vendedor explicou pra ele que o computador com Linux era mais barato mas ele recomendava a versão com Windows Starter Edition porque o Linux queimava os computadores. Graças à isso o meu sobrinho optou por não seguir os meus conselhos e adquiriu a máquina com o tal Windows. O Windows então começou a pedir códigos e mais códigos de ativação, ligações para 0800 da Microsoft, nota-fiscal pra cá, nota-fiscal pra lá e, finalmente, um WindowsXP pirata foi instalado em cima do tal Windows Starter Edition.
Isso também daria uma pesquisa interessante: Quantas pessoas tiraram o Windows Starter Edition da máquina pra instalar um WindowsXP pirata? Estaria a Microsoft colaborando com a pirataria?
* esse suporte não precisa necessariamente ser feito no formato de SAC (Serviço de Atendimento ao Cliente). Esse suporte pode ser feito com desenvolvimento de novos softwares, melhoria de alguns já existentes, tradução de documentação, tutoriais, treinamentos gratuitos para grupos de usuários, etc.
Python in a Nutshell
Postado por Osvaldo Santana
Seguindo adiante com o review de mais um dos livros que a editora O’Reilly me enviou para avaliar irei comentar as minhas impressões sobre o livro Python in a Nutshell.
A edição que recebi em mãos e já “li” (é um livro de referência, então poucas coisas são para serem “lidas”) já está superatualizada e já cobre certos aspectos até mesmo do Python 2.5 que foi lançado somente depois do livro já ter sido publicado.
Tenho pouca coisa pra comentar sobre ele porque trata-se de um livro de consulta e não uma obra que ensina algo a alguém. Mas como referência é um excelente trabalho e até já me socorreu algumas vezes no meu trabalho.
Se fosse pra eu comprar esse livro eu não o faria. Mas não pela qualidade do livro em si mas sim pelo fato de que eu não gosto mais de livros de referência em papel. Desde que surgiram os modernos sistemas de busca na Internet consultar algo em material impresso se tornou uma tarefa muito chata. A documentação oficial da linguagem Python (disponível no site) também é muito rica para justificar a aquisição de um livro extra somente para referência.
O livro trás algumas informações extras que não estão disponíveis na documentação oficial de Python e é prático para quem gosta de consultar um assunto à maneira ‘antiga’ (no papel). Vale tê-lo em mãos, também, pelo fato dele estar atualizado para a versão atual da linguagem Python (2.5).
É verdade também que, agora que tenho o meu Python in a Nutshell, ele ficará sempre ao alcance de minhas mãos em minha mesa de trabalho.
Por último, vale lembrar que esse livro ainda não tem tradução para o português.
Para comprar: Python in a Nutshell.
Planos para 2007
Postado por Osvaldo Santana
Correndo o risco de transformar esse blog em um “blog bobinho” vou colocar aqui os meus planos para 2007. Algo como uma lista de metas a serem atingidas até o final de 2007.
Vou colocar essas coisas aqui para que eu me cobre pelos resultados e os leitores interessados em alguma das coisas listadas aqui me cobrem durante o ano.
- Publicarei o meu livro sobre Python.
- O sistema de import do CPython vai ser limpo, organizado e eficiente.
- O titletrack será um software do GNOME.
- O gomarket (sistema para pesquisa de preços em supermercados que rodará em celulares S60) vai me fazer economizar muito dinheiro no supermercado.
- As pessoas falarão tanto de Django e Turbogears quanto falam de Ruby on Rails.
- A Fundação Python Brasil sairá do papel.
- O site da Python Brasil terá cara nova mesmo rodando o MoinMoin.
- Minha proposal para a PyCon será aceita e eu poderei apresentá-la em ‘bom inglês’ em 2008.
- A tal “Web 2.0″ vai inchar igual à velha bolha mas não explodirá antes de me deixar rico.
- As patentes (de software e hardware) serão consideradas imorais em todo o planeta.
- Mais blogs com assuntos interessantes irão nascer e muitos ‘diários de adolescentes deprimidos’ irão sumir.
- Conseguir pagar o imposto sobre aparelhos importados quando eles forem para melhorar o meu trabalho.
- Que o meu filhinho entenda que eu preciso de algumas horas por dia para usar o computador ou para ler um livro.
- Que a minha esposa também entenda isso.
- Que eu consiga desenvolver algum projeto de eletrônica.







