Estatísticas com o plugin TrackMe Stats no Rails

10/02/07

Estou criando um plugin nos meus poucos minutos vagos para gerar as estatísticas de um site feito em Ruby on Rails. Inspirado no Shortstat e Mint, difere-se principalmente pelo fato de não ser em Javascript.

Após instalar o plugin, você só precisará migrar seu banco de dados (são 4 tabelas no total) e colocar o seguinte código no arquivo "application.rb":

class ApplicationController < ActionController::Base
  include TrackMe
  after_filter :analyze
end

O painel de visualização será semelhante ao Netvibes, com o conceito de widgets arrastáveis, divididos em:

  • Visitas
  • Browser
  • Technorati
  • Busca
  • Referrer
  • Páginas
  • Idiomas
  • Países

Se interessou? Então dá uma olhada como está ficando a interface:

TrackMe Stats: Tela de visualização das estatísticas

Lançamento da versão inicial em breve!

Update: Será que vai ter algum louco que vai usar todos esses painéis? Acesse a imagem abaixo para ver.

Lista dos Painéis disponíveis no TrackMe

gEdit e tabulação por arquivo

02/01/07

O gEdit está se tornando um excelente editor de textos e será, com certeza, o escolhido pela maioria quando sair a versão com o novo componente GTKSourceView, que permite múltiplos highlights em um único arquivo (pense em um arquivo HTML com Javascript e CSS embutidos). Porém, por seguir a mesma filosofia do GNOME, peca por algumas funcionalidades básicas que não são implementadas. Uma delas é a definição de tabulação por tipo de arquivo. Por exemplo, quando programo em PHP, gosto de tabulação com 4 espaços. Mesma coisa para o Python. Mas quando estou em Ruby, gosto de 2 espaços como tabulação. Traduzindo, gosto de seguir as convenções de codificação de cada linguagem.

Uma das coisas que me impedia de usar o gEdit era a impossibilidade de fazer isso facilmente. Para quem não sabe, é possível fazer este tipo de configuração com o plugin modelines, mas você precisa adicionar a definição no mesmo estilo do Vim.

O plugin

Resolvi, então, criar este plugin que faz justamente isso. Permite definir diferentes tipos de tabulação, baseadas na extensão do arquivo.

Para instalá-lo, baixe o arquivo tabulation.tar.gz e extraia os arquivos para o diretório ~/.gnome2/gedit/plugins. Depois, ative-o em Editar / Preferências / Plugins.

Para adicionar uma nova extensão, ou alterar as configurações pré-definidas, modifique o arquivo "~/.tabulation.yml".

Sugestões? Deixe um comentário.

Para ver como seu gEdit pode ficar, veja estes posts publicados pelo Yuri Malheiros.

NOTA MENTAL: permitir a configuração das tabulações através de uma interface gráfica.

Update: Forcei apenas a tabulação de arquivos PHP, Python e Ruby. Assim, o script fica sem nenhuma dependência. Baixe o arquivo em http://f.simplesideias.com.br/tabulation-strict.tar.gz.

Lidando com checkbox no JQuery

25/11/06

Se você precisa lidar com checkboxes e está usando JQuery, veja este plugin que criei.

/*
Author: Nando Vieira
License: Public Domain
*/
jQuery.fn.check = function(mode)
{
    mode = mode || 'on';
 
    return this.each(function(){
        if (this.type == 'checkbox') {
            jQuery.fn._setCheckboxState(this, mode);
        } else {
            $(this).field('checkbox').each(function(){
                jQuery.fn._setCheckboxState(this, mode);
            });
        }
    });
}
 
jQuery.fn._setCheckboxState = function(checkbox, mode)
{
    switch (mode) {
        case 'toggle':
            checkbox.checked = !checkbox.checked;
            break;
        
        case 'off':
            checkbox.checked = false;
            break;
        
        case 'on':
            checkbox.checked = true;
            break;
    }
}
 
jQuery.fn.field = function(type, filter)
{
    var rule;
    filter = filter || '';
    
    if(type == 'all' || !type) {
        rule = 'input|textarea|select';
    } else {
        if (type != 'select' && type != 'textarea') {
            rule = 'input[@type=' + type + ']';
        } else {
            rule = type;
        }
    }
    
    return jQuery(rule, this).not(filter);
}

Se preferir, pode passar o próprio elemento:

$('form fieldset#preferences input[@type=checkbox]').check();

De quebra, você leva uma função que retorna todos os elementos de formulário identificados pelo tipo. Por exemplo, para retornar todos os campos "password", você pode usar:

$('form').field('password').each(function(){
    alert($(this).name());
});

Você também pode filtrar quais campos quer exibir. O exemplo abaixo pega todos os campos do formulário, com exceção de "password":

$('form').field('all', '[@type=password]').each(function(){
    alert($(this).name() + ' = ' + $(this).val());
});

Campos do tipo "select" e "textarea" também entram na lista de "input".

Download: jquery-checkbox.js
Tamanho: 912 bytes

Bug Fix

  • A regra "all" retornava todos os "selects" e "textareas" da página e não apenas do elemento.