Tutorial: nginx + Lua

Objetivo: configurar um servidor web que sirva conteúdo dinâmico utilizando a linguagem de programação Lua.
Pilha: Arch Linux, nginx, wsapi, fastcgi e Lua.

1º Passo: instalação dos pacotes

# pacman -Sy nginx fcgi
$ yaourt -S wsapi spawn-fcgi

2º Passo: configuração do nginx (web server)

Adicionar:

location ~ \.lua$ {
    root html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index  index.lua;
    fastcgi_param SCRIPT_FILENAME /srv/http/nginx$fastcgi_script_name;
    include fastcgi_params;
}

3º Passo: Hello World

Criar o arquivo /srv/http/nginx/index.lua com o seguinte conteúdo:

require('wsapi.response')
require('wsapi.request')

return function(env)
    local resp = wsapi.response.new()
    resp:write('Hello world!')
    return resp:finish()
end

A cada requisição, a função retornada pelo script é executada (o script só é carregado uma vez por instância).

4º Passo: ativar instâncias do FastCGI

$ sudo spawn-fcgi -F 4 -p 9000 -f /usr/bin/wsapi.fcgi

F (fork) é o número de filhos, p é a porta a ser utilizada e f o lançador.

5º Passo: teste:

$ sudo /etc/rc.d/nginx start
URL de acesso: localhost

Pronto.

gthread – exemplo

A biblioteca glib possui uma abstração de threads, com uma API simples  e que se mantém a mesma em todos os S.Os suportados.

Exemplo de utilização: Link

O exemplo mostra uma utilização bem básica, sem necessidade de compartilhar memória e etc. Aplicações reais nem sempre são tão simples! Documentação oficial: Link

Problema de Monty Hall

Programinha simples para simular o famoso problema de Monty Hall (Bertrand’s box paradox).

Link.

lgob 9.04!

No post anterior eu descrevi o projeto lgob. Agora anuncio a primeira versão ‘estável’, a 9.04 (optei por este tipo de versionamento, pois não faz sentido continuar com o 0.1, 0.2 e etc).

Mais informações em: http://oproj.tuxfamily.org .

lgob – Bindings para Lua

A um ano atŕas, eu publiquei bindings para Lua das bibliotecas GTK+, cairo, entre outras, no http://oproj.tuxfamily.org . Decidi automatizar a tarefa, escrevendo um gerador de código que lê informações dos arquivos “.gir” do projeto gobject-instrospection e gera código para exportar classes, funções e enumerações.

O projeto foi nomeado como lgob (lua gobject), e está disponível (via svn) em: http://svn.tuxfamily.org/viewvc.cgi/oproj_oprojsvn/lgob/ .

As vantagens da nova abordagem incluem: uma maior cobertura da API, maior facilidade para mudanças, e geração de código para versões específicas.

Intel GM965 vs performance 2D

Com o novo Xorg 1.6, meus antigos problemas com a performance 3D da minha Intel GM965 (aka X3100) acabaram, mas a performance 2D continuava horrível.

Testando outras configurações pro Xorg, cheguei nesta:

Section “Device”
Identifier  “Card0″
Driver      “intel”
VendorName  “All”
BoardName   “All”
Option “AccelMethod” “exa”
Option “MigrationHeuristic” “greedy”
Option “ExaNoComposite” “true”

EndSection

OK. Os métodos de aceleração suportados são: XAA (antigo, substituido pelo EXA), o EXA (perofrmance 3D melhorada, mas por padrão gera artefatos em algumas aplicações  que usam Qt 4) e o UXA (suporte ao dri2, mas ainda está um pouco instável).

Se não me engano o EXA é usado por padrção, então até ai nenhuma mudança. O que realmente melhorou a performance 2D (e corrigiu alguns bugs) foi o “Option “MigrationHeuristic” “greedy”.

Para testes, usei o programa gtkperf. Antes, uma rodada com 100 repetições demorava 16 segundos. Com a nova configuração, passou para 5 segundos. A performance 3D aparentemente não foi alterada, mas também não testei muito.

Novo site

O novo wiki, agora utilizando o http://www.dokuwiki.org/ (que de ruim só tem o nome) já esta estruturado e contendo um primeiro esforço para documentar os projetos.

A wiki pode ser acessada pelo endereço http://oproj.tuxfamily.org.

Poder do *scanf

A biblioteca padrão do C possui ótimas funções para leitura de dados, porém nem todo mundo sabe que a família *scanf (scanf, fscanf, etc) suporta até (uma versão simplificada) de expressões regulares.

Um exemplo:

Suponha que você tenha que ler uma entrada com a seguinte formatação:

Time1 vs Time2 : 3×2
Time2 vs Time3 : 10×5
Time1 vs Time2 : 1×8
Time3 vs Time1 : 0×0

A tarefa é retirar somente os nomes e os gols de cada time.

Com o bom e velho scanf, isso pode ser feito em uma só linha. Exemplo completo (escreva a entrada em um arquivo, e execute o programa redirecionando o arquivo para a entrada padrão (./programa < arquivo).

Código: Pastebin

Status dos projetos

Ontem o site onde hospedo meus projetos, http://oproj.tuxfanily.org, foi crackeado.
Removi tudo o que restou, e substitui o sistema de wiki. Agora estou escrevendo a documentação direto na wiki, mas ainda vai demorar algum tempo até que esteja tudo organizado.

Os releases dos projetos não foram prejudicados, pois estão em um repositório separado. E falando em releases, liberei hoje uma nova versão do lobj e do lgui. Salvo pequenas mudanças e correções de possíveis bugs, estas devem as últimas versões antes de uma versão estável.

lgui 0.13

Novidades:

- Troca do script de construção por um Makefile;
- Suporte ao GtkBuilder;
- Binding do GtkRecentManager e amigos;
- Novos exemplos;

Link.: http://oproj.tuxfamily.org

Screenshot de uma aplicação que utiliza lgui

Screenshot de uma aplicação que utiliza lgui

Próxima Página »