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].

quarta-feira, 11 de agosto de 2010

Operações em caminhos para arquivos em buffers do Emacs

Seguidamente sinto a falta de funções no Emacs para ver o caminho completo para o arquivo aberto no buffer que estou editando (poder copiar o caminho completo seria um plus). A seguir estão duas pequenas funções para fazer isso.

show-buffer-file-name exibe na echo area do Emacs o caminho completo para o arquivo. copy-buffer-file-name coloca o caminho completo do para o arquivo no topo do kill ring do Emacs (no X Window, também copia para a área de seleção primária, o que pode ser útil para quem, como eu, usa bastante a combinacao Emacs + emulador de terminal).

(defun show-buffer-file-name ()
(interactive)
(message buffer-file-name))


(defun copy-buffer-file-name ()
(interactive)
(if buffer-file-name
(kill-new buffer-file-name)))