Notificações usando D-BUS

11/10/06

Se você quer exibir notificações no seu aplicativo da mesma maneira que Rhythmbox faz, você pode usar o D-BUS, que faz a interface para você de maneira muito simples.

#!/usr/bin/env python
 
import dbus
 
icon = '/usr/share/icons/Human/48x48/devices/gnome-dev-cdrom-audio.png'
title = 'Listening to Sugarcult'
text = 'Album: Lights Out\nSong: Dead Living\nTrack: 2'
 
bus = dbus.SessionBus()
obj = bus.get_object('org.freedesktop.Notifications', 
                    '/org/freedesktop/Notifications')
dbus_notify = dbus.Interface(obj, 'org.freedesktop.Notifications')
dbus_notify.Notify("notify", 0, icon, title, text, '', {}, 4000)

Veja como fica legal:

Notificação usando D-BUS

Update: Se você quiser posicionar sua notificação, você pode usar os atributos "x" e "y":

dbus_notify.Notify("notify", 0, icon, title, text, '', {'x': 500, 'y': 500}, 4000)

Atualizando registros no MySQL

11/09/06

Se você programa em PHP, muito provavelmente já fez algum projeto utilizando banco de dados MySQL. Nem todo mundo conhece algumas funcionalidades que as versões mais novas tem, como a diretriz ON DUPLICATE KEY UPDATE.

Funciona muito bem em aplicações CRUD. Veja um exemplo:

/* MySQL Dump */
CREATE DATABASE url_counter;
CREATE TABLE urls (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20),
    hits INT DEFAULT '0',
    last_visit DATETIME
);

Agora, no PHP, poderíamos ter algo assim:

function insert_url($name)
{
    $query = sprintf("
    INSERT INTO urls 
        (name) VALUES ('%s')
    ", mysql_real_escape_string($name));
    mysql_query($query);
}
 
function update_url($id) {
    $query = sprintf("UPDATE urls SET hits=hits+1 WHERE id=%d", $id);
    mysql_query($query);
}

Agora, se você utilizar a diretriz ON DUPLICATE KEY, é possível fazer tudo isso com apenas uma função:

function url($name, $id='')
{
    $query = sprintf("
    INSERT INTO urls
        (id, name, last_visit, hits)
    VALUES
        (%d, '%s', NOW(), 1)
    ON DUPLICATE KEY UPDATE
        hits=hits+1,
        last_visit=NOW()
    ", $id, $name);
    
    mysql_query($query);
}
 
url('http://google.com/');
url('http://google.com/', 1);
url('http://google.com/', 1);
 
url('http://yahoo.com/');
url('http://yahoo.com/', 2);

Caso o registro não exista, ele adiciona. Se existir, o MySQL atualiza automaticamente os campos indicados na diretriz ON DUPLICATE KEY. Interessante, huh?

Forma otimizada de For

05/09/06

Uma coisa que sempre senti falta no Javascript era algo semelhante ao foreach do PHP. Alguns dias atrás, aprendi uma maneira que substitui bem:

var fruits = ['apple', 'orange', 'lemon'];
 
for (var i = 0, fruit; fruit = fruits[i]; i++) {
    alert(fruit);
}

Se você não entendeu nada, aí vai: para cada iteração, definimos a variável fruit como sendo fruits[i]. Quando nosso array não tiver mais elementos, será definido como undefined e o loop é encerrado. Dica do Targa.