LazyWeb: Escolhendo um framework

November 11th, 2009 § 7 comments § permalink

Um amigo de Belo Horizonte me consultou esses dias sobre uma questão fundamental para a aplicação que ele está planejando começar a escrever nos próximos dias: framework de programação usar (e por extensão, qual linguagem)?

Como minha experiência nos últimos tempos tem sido confessadamente restrita a Rails e alguns experimentos em outros, resolvi apelar para a caridade dos meus leitores. Qual framework você usaria para seu próximo projeto?

Esse meu amigo não tem problemas com linguagens de programação em si. De fato, a não ser que seja algo tão esotérico quando Haskell ou Erlang, ele é capaz de se familiarizar com uma linguagem ou framework em alguns dias.

Obviamente, não posso dar muitos detalhes sobre a aplicação, mas dá para dizer que o objetivo é escalar gradualmente. Ela não precisar começar escalando para o mundo inteiro, mas um caminho seria bom. Um outro detalhe nesse aspecto é que a aplicação é comparativamente particionada: um usuário terá acesso a alguns itens e compartilhará esse acesso com algumas dezenas ou centenas de pessoas. Esses itens possuem moldes variáveis e seriam bom ter flexibilidade na criação do mesmos.

Finalmente, hospedagem é uma questão também. Não necessariamente preço, mas facilidade. Linode é uma opção mas preferivelmente algo que possa ser colocado em alguma coisa pequena e ir escalando conforme a necessidade, no estilo do Heroku (o que limitaria a Rails, claro). Python parece uma boa opção, mas ele precisa de evidências.

E aí, alguém anima a ajudar um pobre compadre em armas? 😀

Eu não…

May 8th, 2008 § 22 comments § permalink

  • Eu não escolheria Rails para escrever uma aplicação Web que consistisse, em sua maior parte, em processamento fora da interface com o usuário, ou cujo maior ponto fosse uma API;

  • Eu não escolheria Django para uma aplicação cujo domínio fosse extremamente complexo, com modelos dinâmicos, tabelas construídas on-the-fly, e funcionalidades similares;

  • Eu não escolheria Seaside para uma aplicação que consistisse em recursos individualizados, independentes e cujo referenciamento fosse essencial;

  • Eu não escolheria ASP.NET para um site inerentemente visual, cuja interface externa com o usuário fosse a parte essencial da aplicação;

  • Eu não escolheria Castle Monorail para aplicações de pequeno ou médio porte em que manutenção fosse mais importante do que o desenvolvimento de nova funcionalidade;

  • Eu não escolheria Ruby para aplicações de rede onde o potencial de instabilidade fosse maior do que o normal;

  • Eu não escolheria Python para um ORM ultra-adaptável;

  • Eu não escolheria ASP clássico ou PHP puro para coisa nenhuma.

Conversa com Randal L. Schwartz

April 30th, 2008 § 7 comments § permalink

Durante o FISL, eu tive a oportunidade de assistir a palestra sobre Seaside dada por Randal L. Schwartz, nome famoso nas comunidades livres, principalmente de Perl, e que agora está evangelizando Seaside e Smalltalk.

Perguntei se podíamos conversar um pouco e ele aceitou graciosamente. O resultado está abaixo, em uma tradução livre:

Conte-nos um pouco sobre o seu background, como e quando você começou a programar e o que você está fazendo hoje

Eu aprendi a programar sozinho quando tinha nove anos. Quando cheguei aos quinze, já estava na frente de uma classe, ensinando meus colegas, e escrevendo código sob contrato durante os fins de semana e sendo pago de verdade.

Trabalhei para várias empresas ao longo de oito anos antes de criar a Stonehenge em 1985. A Stonehenge cresceu ao longo dos anos; nós hoje podemos contar 17 das empresas no Fortune 100 como nossos clientes.

Hoje eu gasto a maior parte do meu tempo dando palestras e escrevendo, mas ainda projeto, crio e revejo código também. Também respondo questões gratuitamente durante uma hora por dia nas dezenas de listas, blogs e comunidades Web das quais participo.

Você é extremamente famoso na comunidade Perl, mas agora está advogando Smalltalk e Seaside. O que mudou? Quando você realmente começou a usar Smalltalk?
Eu comecei a usar Smalltalk antes de Perl ser inventada, em 1982. Já escrevi sobre a história no meu blog.
Quais são as vantagens de Smalltalk sobre outras linguagens tradicionais como Perl, Ruby ou Python, por exemplo?

Smalltalk tem uma sintaxe muito simples: eu posso ensinar a sintaxe completa a alguém em cerca de 20 minutos, e, de fato, a incluo em minhas palestras introduzindo as pessoas ao Seaside. As principais implementações Smalltalk (com exceção de GNU Smalltalk) também possuem IDEs maduros permitindo a fácil exploração do código, de modo que aprender as bibliotecas é somente uma questão de olhar a implementação e uso das mesmas

E isso também é um bônus: nós temos duas implementações comerciais (Cincom e GemStone/S) e duas abertas (Squeak e GNU Smalltalk), todas suportando Seaside. Isso permite que gerentes mais preocupados, que podem hesitar ao selecionar uma linguagem estritamente suportada por voluntários, escolherem entre dois provedores comerciais para suporte. Opções são sempre boas!

Você acha que Smalltalk finalmente vai alcançar status mainstream, isto é, ganhar aceitação do mercado em geral?

Bem, Smalltalk tinha status mainstream no meio dos anos 90, logo antes de Java entrar na história, pelo menos do que tange a firmas grandes de Wall Street e outras instituições que desejavam desenvolvimento rápido de GUIs para ficar à frente da competição.

Mas sim, eu acredito que Smalltalk está posicionada para entrar o mercado novamente como um grande player. Para mais detalhes, veja meu artigo sobre O Ano do Smalltalk.

Sua palestra tinha o título, “Seaside: Seu Próximo Framework Web”. O que há de tão interessante sobre o Seaside?

Eu gosto da forma como Seaside consegue abstrair tanto o fluxo de controle (ao longo de um eixo) e a representação (ao longo do outro eixo) com relativa facilidade. Seaside parece colocar as coisas certas relacionadas perto uma das outras. Eu também gosto do “depure uma página com erro dentro da própria página”: quando algum erro aconteceu, eu posso explorar a situação dentro do depurador normalmente, consertar o que está quebrado, limpar a bagunça, e continuar a execução da página como se nada houvesse acontecido.

Da mesm forma, a persistência tradicional em Rails é feita através do Active Record, que requer que objetos passem por um mapeador objeto-relacional para chegar em SQL. Seaside pode fazer a mesma coisa (via GLORP), mas possui soluções melhores pulando inteiramente o mapeamento, e usando coisas como Magma (OODBMS), que é aberto, ou algo como GemStone/S Virtual Machine, que é comercial. Quando você tira a camada ORM, voc&e ganha muita velocidade e um ambiente de programação bem mais confortável.

O que você vê no futuro do Seaside, e como esse futuro se compara ao dos outros frameworks?
A equipe do Seaside está agora no processo de refatorar e re-empacotar o Seaside para tornar a portabilidade ao longo de várias plataformas algo mais facilmente gerenciável e modular. Isso permitirá que cada desenvolvedor use somente as partes que desejar. Eu também estou vendo vários add-ons sendo criados, como o Pier CMS e várias APIs para coisas como Google Graphs e assim por diante.
Você acha que o mercado está pronto para o Seaside?
Sim. O Rails reabriu as discussões sobre o que fazer em um mundo após o Java, voltando para linguagens com late-binding como Perl, Python e Smalltalk. E Seaside é um framework maduro, ainda mais velho do que Rails. Somente não tão conhecido. Eu espero mudar isso.
Você já colocou algo em produção com o Seaside? Se sim, quais foram os desafios?
Eu estou trabalhando em alguns projetos agora, mas nada público. O desafio inicial foi a relativa falta de documentação, o que me forçou a gastar dois dias passando por todos os e-mails na lista de discussão. Fiquei mais informada, mas definitivamente com os olhos cansados. Eu espero devolver esse conhecimento escrevendo em meu blog e ajudando a responder questões no IRC e lista de discussão.
Você agora é parte do Squeak Foundation Board. Quais são seus planos para a Squeak Foundation?
Minha preocupação primária agora são questões de licenciamento, controle das releases e publicidade. Todas essas questões já estão sendo trabalhadas, é claro, mas todos somos voluntários e sempre estamos procurando mais voluntários para ajudar.
A Squeak Foundation tem algum plano para Seaside?
Nada formal, até onde eu sei. Entretanto, como Squeak é a plataforma primária para desenvolvimento do Seaside, eu tenho certeza de que Seaside será um componente principal nesse área.
Quais são os planos mais interessantes dentro do mundo Smalltalk/Seaside atualmente?
Bem, o que me envolve no momento é o GLASS (GemStone/Linux/Apache/Seaside/Squeak), uma solução da GemStone para que pessoas possam conseguir rodar Seaside rapidaemnte. Isso também envolve levar o pessoal da GemStone a criar uma solução comercial de custo zero, mas ainda funcional (mesmo que de forma mais limitada) do GemStone/S. Com essa versão gratuita, uma pessoa poderá construir um negócio, e quando o negócio exceder as capacidades da versão, migrar sem problemas para licenças maiores e ainda razoáveis. É um bela solução para uma VM Smalltalk sólida e comercialmente suportada com persistência e clustering já presentes.
E sobre o próximo ano do FISL? Como você conseguiu três dias inteiros para Smalltalk?
Bem, como eu disse, “tudo começou com algumas doses de caipirinhas…”
Quais são os seus planos para esses três dias? Você tem a intenção de trazer outros Smalltalkers?
Eu estou trabalhando com os organizadores do FISL e vários outros provedores de soluções e grupos dentro da comunidade Smalltalk para produzir uma mini-conferências. Espero ter treinamento inicial e avançado de Smalltalk, e vários tutoriais de Seaside. Expero que a conferência possa atrair um número significativo de desenvolvedores Smalltalk para o FISL pela primeira vez, e expor os demais participantes à linguagem, de modo que todos ganhem.

Muito obrigado, Randal, pela entrevista.

Seaside e Smalltalk avançando no Brasil

April 20th, 2008 § 6 comments § permalink

Smalltalk e Seaside dominando no FISL: notícia boa vinda do Randal Schwartz em seu blog:

But the biggest news is that based on the preliminary interest in Seaside because of my talk, the FISL conference organizers offered an **entire room for next years conference*** (the full three days with 12 hours per day), as well as four or five main-track hour talks, if I could help organize the subconference details! This is quite a gift, because it will mean that we can expose the 7000 conference attendees to a variety of Smalltalk programs, without paying for rooms or badging or promotion. The conference asked if I could get some corporate sponsors on board, and I immediately fired off email to James at Cincom and Monty at GemStone, and thank goodness they read email on Saturday, because they offered their support quickly. Of course, we have many details to work out, but everyone agrees that we will move forward!

Smalltalk é uma linguagem que está retornando com força total depois de mais de 20 anos vivendo às margens de outras linguagens tecnicamente não tão interessantes e isso é muito bom. Seaside é possivelmente o framework Web mais avançado em existência atualmente e muitas das idéias que vão influenciar o mercado nos próximos anos estão sendo testadas na prática no projeto–sem contar também os inúmeros projetos associados que estão avançando outras áreas. A comunidade Smalltalk é uma das poucas que está produzindo conteúdo real que implicará em mudanças de paradigmas e avanço na parte essencial da computação (dentro da divisão feita por Fred Brooks).

A palestra do Randal Schwartz já tinha um título provocativo de Seaside: Your Next Web Framework. No meio da palestra, ele ainda solta que Seaside é o framework que tornará obsoletos a maioria dos outros (não por si só mas pelas idéias geradas) e que Smalltalk é o próximo Ruby. Eu não tenho dúvidas que ele está, em grande parte, correto. A inovação atual não está ocorrendo em frameworks semi-orientados a objetos, mas em projetos que estão jogando fora a sabedoria convencional.

Eu, que nunca escondi minha admiração tanto pelo Smalltalk e Seaside, confesso que estou sorrindo até as orelhas. Se metade das idéias de Seaside pegarem em outros frameworks Web, os próximos anos serão muito mais produtivos.

Seaside em ação

February 28th, 2008 § 0 comments § permalink

Estou sem muito tempo para postar, mas para quem tem interesse o Michael Lucas-Smith–o homem do Seaside na Cincom Smalltalk–postou um vídeo demonstração da versão alpha do WebVelocity.

O WebVelocity é a combinação de Seaside mais ORM que a Cincom Smalltalk está desenvolvendo e, pelo vídeo, dá para ver que o produto é muito promissor. A transposição de um ambiente dinâmico como o Smalltalk para a Web parece que está se dando sem maiores problemas. Agora é só esperar.

The Seaside Bookshelf, Twitter edition

February 21st, 2008 § 0 comments § permalink

Tudo bem, eu tinha prometido não falar mais do assunto tão cedo mas não resisti. Eu prometo que dessa vez eu paro pelo menos por um tempo suficiente para o blog respirar.

Essa atualização foi uma reestruturação completa da aplicação para corrigir um erro fundamental no modo como eu tinha organizado os componentes. Agora que eu aprendi mais algumas coisinhas, acho que a estrutura ficou mais lógica e mais fácil de manter.

Além disso, adicionei suporte opcional ao Twitter: quando um livro foi adicionado, marcado como sendo lido, ou terminado, uma mensagem é enviada automaticamente se uma conta estiver configurada. Esse suporte exige o Announcements para funcionar.

O código está abaixo:

Se ainda tem alguém baixando isso, divirta-se.

The Seaside Bookshelf, RSS edition

February 19th, 2008 § 2 comments § permalink

Para os que ainda não fugiram do meu blog depois de tanto ouvir falar Seaside nos últimos dias, eu implementei um feed na aplicação desenvolvida.

O mais interessante dessa modificação é que eu tive que reorganizar a estrutura de classes da aplicação, mover alguns métodos e acrescentar variáveis de instância em algumas classes. Quando fiz a carga do pacote de mudanças no sistema, a aplicação continuou rodando normalmente e todas as classes em memória foram modificadas transparentemente. Se o sistema estivesse sendo acessado por milhares de usuários, nenhum deles teria sentido qualquer mudança e nenhuma sessão teria caído. Isso é, pelo menos para mim, o maior exemplo do poder de Smalltalk e similares.

Isso fecha o meu desenvolvimento básico e eu prometo não voltar a falar disso tão cedo.

O código está abaixo:

O próximo passo é migrar o sistema para Couch DB e ver o que acontece.

The Seaside Bookshelf, Redux

February 18th, 2008 § 0 comments § permalink

Para quem se interessou pela aplicação Seaside que eu estou desenvolvendo, eu completei uma pequena atualização para otimizar o sistema. Com as pequenas atualizações efetuadas, o sistema agora roda em uma velocidade aceitável mesmo no servidor pequeno onde está e não está mais usando nada em memória.

Por causa das otimizações, o código agora está mudando algumas classes básicas do Magritte e por isso os dois pacotes são necessários para rodar o sistema corretamente.

O código está abaixo:

O próximo passo é migrar o sistema para Couch DB e ver o que acontece.

The Seaside Bookshelf

February 13th, 2008 § 4 comments § permalink

Para quem tem curiosidade de saber como é uma aplicação Seaside depois de ler tanto sobre o assunto aqui, estou disponibilizando o código inicial de um experimento meu: um pequeno sistema para guardar informações sobre os livros que estou lendo, quero ler ou já li.

A propósito, antes que alguém pergunte, já passo minhas desculpas ao Caffo pela cópia explícita do formato que ele usa. É claro que a dele é bem mais bonita–e bem mais rápida no momento.

Alguns pontos sobre o código que está rodando no servidor como demonstração:

  • Essa é uma versão alpha. Não espere sutilezas no código;
  • O aplicativo depende de uma instância do OODBMS GOODS. Os dados dessa instância podem ser configurados na própria aplicação;
  • O login é uma gambiarra terrível. Eu comecei a fazer um sistema de usuário, fiquei com preguiça e fixei em um único usuário embora o modelo esteja lá para suporte futuro;
  • A versão no servidor é lenta, muito lenta. Eu não estou usando nenhuma das técnicas usuais de deployment e o servidor onde a aplicação está é muito pequeno;
  • A aplicação está armazenando quase tudo em memória no momento e gerando os thumbnails on-the-fly, o que piora as coisas;
  • O código é específico do Squeak.

Dito isso, o sistema ilustra o fluxo básico de uma aplicação Seaside e o uso de Magritte para a modelagem de objetos. Com isso dá para ter uma idéia de como o Seaside diferente dos demais frameworks Web.

O código pode ser obtido nos endereços abaixo:

Para quem quer aprender como configurar uma VM Squeak para rodar os exemplos, em fiz um screencast sobre o assunto há um tempo atrás. Para uma imagem base, eu recomendo a Squeak-Web do Damien Cassou. Com ela, basta carregar o GOODS.

Dúvidas, sugestões, críticas e indicações veladas (ou explícitas) de como o código é péssimo podem ser feitos na área de comentários.

Atualização: Para configurar o GOODS sob o Linux, o processo é simples:

  1. Baixe e descompacte o código da última versão.
  2. Rode ./config no diretório para gerar o Makefile do sistema.
  3. Rode make para compilar
  4. Se necessário, ajuste Makefile.usr para indicar os caminhos de instalação que você deseja.
  5. Rode sudo make install para instalar

O arquivo de configuração que eu estou usando é o seguinte (bookshelf.cfg):

1
0:127.0.0.1:9081

O arquivo de opções do banco é o seguinte (bookshelf.srv):

server.admin_telnet_port="127.0.0.1:8081"

Para rodar, algo como o seguinte, onde bookshelf é o arquivo bookshelf.cfg:

sudo /opt/local/bin/goodsrv bookshelf &

Seaside One-Click Experience

November 14th, 2007 § 0 comments § permalink

Acabei esquecendo de noticiar aqui, mas se você quer experimentar o Seaside sem ter que procurar pelos componentes necessários, tente o Seaside One-Click Experience. O pacote vem com os executáveis para cada plataforma e, como o nome diz, basta clicar no executável para ter o Seaside rodando. Depois disso, abra no navegador o endereço indicado nas notas de instalação e comece a experimentar.

Where Am I?

You are currently browsing the Seaside category at Superfície Reflexiva.