2010/01/21


いままでブログからtwitterへの投稿はtwitterfeedを使ってたんだけど、なんか変にキューイングされたり投稿されなかったりとイヤンな感じだったので、和製のFeedTweetに乗り換えた。
ダッシュボードも見やすい。
feedtweet1
アクセス解析も付いてくる。
feedtweet2
現在の状態がよく分かるし、キューを先行させる事も出来る。
投稿時間の制限も出来るみたい。私は夜中でも今すぐ投稿して欲しかったので以下の様に設定した。
feedtweet3
しばらく使ってみようと思う。
Posted at by




Perl Hacker面白いよ。:)
変な人いるし、堅い人もいる。ネタに一生懸命になれる人達がいっぱいいるし、意味なく1行に拘る人もいる。


私はPerlでスーパークリエイター奥一穂(kazuho)さんと会えた。
kazuho-sign
kazuhoさんにお好み焼き屋で箸袋の裏に貰ったサイン!
今も大事に持ってるお!
はせがわさんにも会えた。あ、ちゃうちゃう。はせがわさんはwassrだ。

次はどのHackerに会えるかな。
Posted at by



2010/01/14


なんとなくテーブルにデータがINSERTされたらGrowlされる...なんて仕組み作って見ようと思った。それだけ。
sqliteでextensionを作る。growlはWindowsのGNTPにも対応したmattn謹製gntp-sendを使う。
mattn's gntp-send at master - GitHub

command line program that send to growl using GNTP protocol.

http://github.com/mattn/gntp-send
gntp-sendはコマンドラインプログラムだけど、外部からライブラリとしても使える様にしてあります。
#include <stdlib.h>
#include <sqlite3ext.h>
#include <growl.h>

SQLITE_EXTENSION_INIT1
static void growl_func(sqlite3_context *context, int argc, sqlite3_value **argv) {
    if (argc == 1) {
        const char *text  = (const char *)sqlite3_value_text(argv[0]);
        growl("localhost", "sqlite3", "sqlite3-trigger", "database-update", text, NULL, NULL, NULL);
    }
}
__declspec(dllexport) int sqlite3_extension_init(sqlite3 *db, char **errmsg, const sqlite3_api_routines *api) {
    SQLITE_EXTENSION_INIT2(api);
    return sqlite3_create_function(db, "growl", 1, SQLITE_UTF8, (void*)db, growl_func, NULL, NULL);
}
こんなコード書いて # gcc -shared -dll -I c:/sqlite3 -I headers growldb.c lib/libgrowl-static.a -lws2_32 -o growldb.dll
こんな風にコンパイル(Windowsの例)。
あとはテーブルにトリガー張って sqlite> create table foo(comment text);
sqlite> select load_extension('growldb.dll');
sqlite> create trigger tri_foo
   ...> before
   ...>   insert on foo
   ...> begin
   ...>   select growl(new.comment);
   ...> end;
試してみよう!



sqlite> insert into foo values('hasegawa! xss xss');


sqlite3-growl
xssキター!

ただしinsertする側は必ずload_extension('growldb.dll')しとかないといけないので、oracleの様には行かない。
真面目な話、この方法をうまく使えばsqliteでネットワークレプリケーションとか出来そう。
えっ?誰得?.......知りません!
Posted at by