sábado, 11 de setembro de 2010

Migração de site estático para awful: tratando requisições por index.html

Até pouco tempo atrás a minha página pessoal era totalmente estática. Depois que comecei a desenvolver awful achei que seria meio vergonhoso se a minha própria página não usasse o software que produzo. Então resolvi refazê-la usando awful (eu poderia simplesmente jogar os arquivos estáticos para o servidor web disponibilizá-los, mas não teria graça).

Um problema que ocorreu na migração do site estático para o com use de awful foi a ausência de arquivos index.html. Várias páginas eram disponibilizadas e referenciadas através um arquivo index.html, e esses arquivos não existem mais na nova estrutura com awful. A solução que adotei foi redirecionar os acessos aos arquivos index.html para o nome do "diretório" que os contém (na verdade não são diretórios, mas URIs associadas a procedimentos em Scheme).

Por exemplo, antes havia http://parenteses.org/mario/index.html. Hoje há um procedimento associado a http://parenteses.org/mario.

Com a possibilidade de associar procedimentos a URIs que casa com uma expressão regular, fazer com que http://parenteses.org/mario responda por http://parenteses.org/mario/index.html se torna bem fácil:
(use awful)

(define-page (regexp "/mario/.*index.html")
(lambda (path)
(redirect-to (string-chomp path "index.html"))))

Assim, todas as requisições por recursos /index.html disponíveis no caminho /mario/ serão redirecionadas para /.

quinta-feira, 9 de setembro de 2010

Substituindo ferrugem por bolhas

Neste domingo recebi um inesperado telefonema do Douglas, guitarrista da Crossfire, convidando para reunirmos a banda e fazer um som. Não tocávamos juntos desde o final de 2008 e eu havia parado de tocar no ano passado.

Depois de um ano sem tocar baixo, decidi arriscar para ver no que daria. Surpreendentemente, tocamos durante duas horas como se estivéssemos tocando regularmente. Fiquei impressionado.

Impressionante também foram as seqüelas. Esta é a foto dos meus dedos logo após o término do ensaio:



Esse é o estado dos meus dedos hoje:



Fica a dica: se fores tocar depois de um ano parado(a), use palheta. :-)

Chicken Gazette


Há algumas semanas foi lançada a Chicken Gazette, uma publicação semanal de notícias sobre o sistema Chicken. Até agora já foram publicadas duas edições, as quais tratam de vários assuntos relacionados a Chicken, desde aspectos técnicos a questões sociais, de infraestrutura, últimos acontecimentos no desenvolvimento e curiosidades em geral.

A elaboração das edições é rotativa, ou seja, a cada semana há um editor diferente. A primeira edição ficou por conta de Christian Kellerman, a segunda por Moritz Heidkamp e a terceira está sendo elaborada por Alaric Snell-Pym.

As edições da Chicken Gazette podem ser acompanhadas através de feeds atom.

sábado, 28 de agosto de 2010

Awful 0.26

Há pouco lancei a versão 0.26 de awful. A principal novidade é a integração de um editor em javascript para o web REPL (o texto anterior é sobre isso).


Houve algumas modificações para tornar o web REPL mais útil para desenvolvimento interativo, como a possibilidade de redefinir e eliminar definições de páginas em tempo de execução.

Coloquei em http://wiki.call-cc.org/video/awful-guess.ogv um vídeo mostrando o desenvolvimento de um simples jogo de adivinhação de números, com o uso de ajax e do web REPL.

Em http://parenteses.org/jogos há versões mais elaboradas de jogos no mesmo estilo.

sexta-feira, 20 de agosto de 2010

Awful fancy web REPL

Estou pensando em adicionar um editor de código em Javascript ao web REPL de awful. A idéia é facilitar a prototipação rápida, execução de testes, depuração e correção de problemas de forma fácil e com o servidor em execução.

A versão de desenvolvimento de awful contém um código inicial para isso. Abaixo está um screencast do que está implementado até agora.



O arquivo do vídeo, com uma qualidade significativamente melhor do que o mostrado acima, pode ser obtido em http://parenteses.org/mario/misc/fancy-web-repl.ogv (~6.1MB).

O editor em Javascript que estou utilizando é o Codemirror.

Emacs rápido

Uma dica para usuários de Emacs que apelam para editores mais limitados como zile, nano e vi (risada sarcástica aqui) para edição rápida de arquivos (e.g., arquivos de configuração):
emacs -Q -nw

Um rápido e impreciso benchmark na máquina que estou usando agora mostra os seguintes resultados para abrir e fechar o Emacs 10 vezes:

$ time for i in `seq 10`; do \
> emacs -Q -nw --eval '(save-buffers-kill-emacs)'; \
> done
real 0m0.753s
user 0m0.596s
sys 0m0.140s

Menos de 1 segundo para abrir e fechar o Emacs 10 vezes.

Habilitar modos que tornam o uso do Emacs mais confortável, como transient-mark-mode, global-font-lock-mode e show-paren-mode não custa caro:

$ time for i in `seq 10`; do\
> emacs -Q -nw --eval \
> '(progn (global-font-lock-mode t)
> (transient-mark-mode t)
> (show-paren-mode t)
> (save-buffers-kill-emacs))'; \
> done
real 0m0.800s
user 0m0.616s
sys 0m0.168s

Novamente, menos de um segundo para abrir e fechar o Emacs 10 vezes, com coloração de sintaxe e tudo (inclusive um interpretador de Lisp). :-)

terça-feira, 17 de agosto de 2010

Awful 0.25

Há pouco foi lançada a versão 0.25 de awful. A seguir são descritas as novidades.

O servidor awful admite novos parâmetros de linha de comando: --development-mode, --ip-address e --port. Os parâmetros --development-mode e --port servem, respectivamente, para fazer com que o servidor escute nos dados endereço IP e porta.

O parâmetro --development-mode ativa o modo de desenvolvimento de awful. Neste modo, funcionalidades como o Web REPL e o Session inspector são automaticamente ativadas. O caminho /reload também é automaticamente criado para que as aplicações possam ser recarregadas sem que seja necessário reiniciar o servidor. No modo de desenvolvimento, mensagens de erro das aplicações são exibidas no cliente (e.g., navegador). Abaixo está um exemplo (erro.scm):
#!/usr/bin/awful

(use awful)

(define-page (main-page-path)
(lambda ()
(++ "Oops " 'erro)))


Para executar no modo de desenvolvimento:
$ awful --development-mode erro.scm

Ao acessar http://localhost:8080/ a mensagem de erro do screenshot abaixo é exibida no navegador, seguida de um link para o Web REPL.



Quando executado em modo de desenvolvimento, o parâmetro development-mode? tem como valor #t.

Outra novidade é o parâmetro awful-response-headers o qual permite ajustar os campos do cabeçalho de resposta para o cliente. Abaixo está um exemplo de um procedimento para associar URIs a respostas JSON:
#!/usr/bin/awful

(use awful)

(define (define-json path body)
(define-page path
(lambda ()
(awful-response-headers '((content-type "text/json")))
(body))
no-template: #t))

(define-json (main-page-path)
(lambda ()
"{a: 1}"))


A menos que explicitamente fornecido, awful calcula automaticamente o tamanho da resposta e o atribui ao campo Content-Length.

Hoje também disponibilizei um pequeno texto com instruções sobre como instalar awful em sistemas Unix[-like].