Wordpress e algumas coisas irritantes

14/10/06

O Wordpress é um dos melhores, se não o melhor, sistema de blogs da atualidade. Mas algumas coisas me irritam muito. Posso citar aqui de bate-e-pronto duas: a conversão de aspas e hífens. Se você posta códigos no seu blog, já deve ter enfrentado isso. Hoje fui postar um trecho de código que tinha aspas simples e dois hífens (parâmetro de um comando). O WP insistia em converte-los em entidades.

Fiquei de saco cheio e criei um plugin. Se você sofre dos problemas que eu falei, instale este plugin agora mesmo! Basta baixar o arquivo wp_coders.php e salvar na pasta "plugins". Depois, ative-o na seção "Plugins" do painel administrativo. Veja o código do plugin:

<?php
/*
Plugin Name: wp_coders
Plugin URI: http://simplesideias.com.br/wp-coders
Description: Removes WP annoyances (quotes and dashes)
Author: Nando Vieira
Version: 1.0
Author URI: http://simplesideias.com.br
*/
 
class wp_coders
{
    function wp_coders()
    {
        add_filter('comment_author', array(&$this, 'normalize'), 20);
        add_filter('comment_text', array(&$this, 'normalize'), 20);
        add_filter('bloginfo', array(&$this, 'normalize'), 20);
        add_filter('category_description', array(&$this, 'normalize'), 20);
        add_filter('list_cats', array(&$this, 'normalize'), 20);
        add_filter('the_content', array(&$this, 'normalize'), 20);
        add_filter('the_excerpt', array(&$this, 'normalize'), 20);
        add_filter('single_post_title', array(&$this, 'normalize'), 20);
        add_filter('the_title', array(&$this, 'normalize'), 20);
    }
 
    function normalize($text = '')
    {
        $text = str_replace(
            array('&#8212;', ' &#8212; ', '&#8211;'),
            array('---', ' -- ', '--'),
            $text
        );
        
        $text = str_replace(array("&#8216;", "&#8217;", "&#8242;"), "&#039;", $text);
        $text = str_replace(array("&#8220;", "&#8221;", "&#8243;"), "&#034;", $text);
        
        return $text;
    }
}
 
$wp_coders =& new wp_coders();
?>

Detectando o screensaver com D-BUS

14/10/06

Imagine que você precise detectar se o screensaver está ativo ou não. Utilizando o D-BUS, é muito simples!

Tudo o que você precisa fazer é acessar a interface "org.gnome.ScreenSaver", presente no Gnome.

bus = dbus.SessionBus()
obj = bus.get_object('org.gnome.ScreenSaver', '/org/gnome/ScreenSaver')
screensaver = dbus.Interface(obj, 'org.gnome.ScreenSaver')
screensaver.connect_to_signal('ActiveChanged', detect_screensaver)

Abaixo, você tem um exemplo completo.

#! /usr/bin/env python
 
import dbus
import dbus.glib
import commands
import gtk
 
def detect_screensaver(enabled):
    print "Screensaver enabled? %s" % enabled
 
def enable_screensaver(widget):
    commands.getoutput(' gnome-screensaver-command --activate')
 
bus = dbus.SessionBus()
obj = bus.get_object('org.gnome.ScreenSaver', '/org/gnome/ScreenSaver')
screensaver = dbus.Interface(obj, 'org.gnome.ScreenSaver')
screensaver.connect_to_signal('ActiveChanged', detect_screensaver)
 
win = gtk.Window()
button = gtk.Button('Activate screensaver')
 
win.connect('destroy', gtk.main_quit)
button.connect('pressed', enable_screensaver)
 
win.add(button)
win.show_all()
 
gtk.main()
 

Timesheet

11/10/06

Há 1 mês atrás vi no The Apple Blog um artigo sobre um aplicativo chamado On The Job. Apesar de achá-lo muito legal, ele é para OSX, além de não ver muita utilidade. Achava isso até o começo desta semana.

Tive que preencher um timesheet e procurar por e-mails de 3 meses atrás para saber o que precisei fazer não foi uma das experiências mais agradáveis. Então, comecei a procurar alternativas para o Linux. No Synaptic, encontrei Worklog e o GnoTime. O primeiro roda em linha de comando e, apesar de gostar de linha de comando, definitivamente não era para mim. O segundo parecia ser interessante, mas não entendi como funciona. Juro que tentei, mas depois de 5 minutos, desisti.

Então, resolvi fazer meu próprio software! Se você adivinhar qual nome eu dei, ganha uma bala! Yep! É Timesheet. A idéia é fazer com que ele sempre fique no tray, para me lembrar que tem uma tarefa em execução. Assim, posso alternar entre elas de maneira muito simples. Quando o Timesheet estiver no tray, você verá algo como:

Timesheet no tray

Se você clicar no tray, a janela do Timesheet aparecerá:

Janela do Timesheet

O context menu será parecido com isto:

Context Menu do Timesheet

Uma funcionalidade que é fundamental é detectar se o screensaver está ativo ou não. Dessa maneira, posso definir o que quero fazer com o tempo "ocioso". Entre aspas porque nesse meio tempo posso estar fazer uma outra tarefa relacionada ao projeto e que não necessariamente seja no micro (reuniões, etc). Fiz alguns testes usando o D-BUS e é bem simples de fazer isso usando o Gnome Screensaver, que vem com o Ubuntu Dapper.

Esse fim de semana vou tentar terminar uma versão usável deste aplicativo. Você que usa timesheet: tem alguma funcionalidade que você gostaria que tivesse?