2009/07/30


書いたといっても結構前からあったのですが、いらん所を削ぎ落として軽量Webサーバとして仕立て上げました。
軽量とは言えど、CGIを使って結構色々動きます。
例えば、ソースアーカイブを解凍したらCGIがあって、apacheから見える場所にコピーして...とか面倒くさかったりしますよね。

おれは今すぐWebサーバを起動したいんだ!そして今いるディレクトリのファイルをWebサーバからサーブしたいんだー!

って事ないですか?blogソフトウェアをダウンロードして今すぐ試したいけど、apacheインストールされてなかった...とか悲しすぎます。
今回紹介する"tinytinyhttpd"(tthttpd)はそんな、小さい様で大きな問題を解決出来るかもしれないソフトウェアです。
mattn's tinytinyhttpd at master - GitHub

tiny tiny httpd

http://github.com/mattn/tinytinyhttpd/tree/master
リンク先に、動いてる様子のキャプチャがあります。
ソースはC++で書いてます。WindowsとUNIX(Linuxでだけ動作確認)で動作します。

機能としては、マルチスレッドサーバ、カスタマイズ、ディレクトリスティング、CGI起動が可能です。
小ささをウリにしているのでインストールとか、レジストリとか、面倒くさいものは要りません。exeファイルだけあれば起動します。
一応、設定ファイルの記述も可能で [global]
port=8080
root=c:/temp/mtos
indexpages=index.html,index.php
charset=cp932

[mime/types]
cgi=@c:/strawberry/perl/bin/perl.exe
php=@c:/progra~1/php/php-cgi.exe
という設定ファイルを"-c"オプションで指定する事も出来ます。デフォルトではポート8080番でカレントディレクトリをドキュメントルートとし、phpとperlが適当なパスでCGI起動される様になっています(パスが違う場合は設定ファイルから変更出来ますし、拡張子rbに対してrubyを追加する事も出来ます)。
私が試した限りですが、以下のソフトウェアの動作が確認出来ています。
  • MTOS(Movable Type Open Source) (perl)
  • WordPress (php)
  • blogn Plus (php)
  • tDiary (ruby)
  • PukiWiki (php)
  • NucreusCMS (php)
  • blosxom (perl)
などなど。CGIで動くならば大体動きます。

ライセンスはBSDライセンスとします。使ってみて下さい。
コードはgithubにあるので、patchウェルカムです。
今後は、コードのブラッシュアップと、拡張なんかを考えて行きたいなーと思ってます。
Posted at by



2009/07/23


miyagawaさんのAnyEvent::Twitter::Streamを使って「NullPointerException」をtrackして「Ga!!」を返信するスクリプトを書いてみた。trackにマルチバイトが使えないのが残念。「がっ!!」にしても良いけど、出来れば欧米の方達にも反応したい。
#!/usr/bin/perl
use strict;
use warnings;
use Config::Pit;
use AnyEvent::Twitter::Stream;
use Net::Twitter::Lite;

binmode STDOUT, ":utf8";

my $config = pit_get("nullpo-ga", require => {
        "username" => "your username on twitter.com",
        "password" => "your password on twitter.com"
    });

my $nt = Net::Twitter::Lite->new(
    username => $config->{username},
    password => $config->{password},
);

my $done = AnyEvent->condvar;
my $streamer = AnyEvent::Twitter::Stream->new(
    username => $config->{username},
    password => $config->{password},
    method   => "track",
    ( track => 'NullPointerException' ),
    on_tweet => sub {
        my $tweet = shift;
        print "$tweet->{user}{screen_name}: $tweet->{text}\n";
        eval { $nt->update("\@$tweet->{user}{screen_name} Ga!!") };
    },
    on_error => sub {
        my $error = shift;
        warn "ERROR: $error";
        $done->send;
    },
    on_eof   => sub {
        $done->send;
    },
);

$done->recv;


追記
miyagawaさんから返信のupdateでブロックしちゃうのでAnyEvent::Twitter使えば良いと教えて貰いました。
#!/usr/bin/perl
use strict;
use warnings;
use Config::Pit;
use AnyEvent::Twitter;
use AnyEvent::Twitter::Stream;

binmode STDOUT, ":utf8";

my $config = pit_get("nullpo-ga", require => {
        "username" => "your username on twitter.com",
        "password" => "your password on twitter.com"
    }
);

my $done = AnyEvent->condvar;

my $twitty = AnyEvent::Twitter->new(
    username => $config->{username},
    password => $config->{password},
);

my $streamer = AnyEvent::Twitter::Stream->new(
    username => $config->{username},
    password => $config->{password},
    method   => "track",
    ( track => 'NullPointerException' ),
    on_tweet => sub {
        my $tweet = shift;
        print "$tweet->{user}{screen_name}: $tweet->{text}\n";
        $twitty->update_status("\@$tweet->{user}{screen_name} Ga!!", sub {
                my ($twitty, $status, $js_status, $error) = @_;
                if (defined $error) {
                    warn "ERROR: $error";
                }
            }
        );
    },
    on_error => sub {
        my $error = shift;
        warn "ERROR: $error";
        $done->send;
    },
    on_eof   => sub {
        $done->send;
    },
);

$done->recv;
Posted at by




MOONGIFTでKeepNoteってのを知った。
MOONGIFT: » Evernoteのような個人用スクラップブック「KeepNote」:オープンソースを毎日紹介

今回紹介するオープンソース・ソフトウェアはKeepNote、マルチプラットフォームで動作するメモアプリケーションだ。

http://www.moongift.jp/2009/07/keepnote/
試してみた。WYSIWYGエディタでなかなか良い。
keepnote
MOONGIFTでは

GTKとあって、Windows上での動作がちょっと不安定な気もする。マルチプラットフォームで動作するメモ環境に興味のある方は試してみよう。

と書かれていたけど、少し手を加えるだけで結構使い勝手が良くなった。
以下、WindowsでKeepNoteを使う場合のフリカケ。

日付表示でロケールを使わない

そのままだと、一覧に表示される作成日付が「%p」というAM/PMをロケールに直した物が使われるが、utf-8なGTKにも関わらずWindowsなのでシフトJISが使われてしまう。設定画面で、AM/PM付き12時間表記「%I:%M %p」から24時間表記「%H:%M」に直す。
ちなみに、もしソースからコンパイルされたのであれば g_locale_to_utf8 という関数で utf-8 に直すようなpatchを書くといい。

入力モジュールを追加する

KeepNoteのWindows版にはimmoduleというGTK上での入力機構モジュールが同根されていない。入力出来ない訳ではないが OverTheSpot な入力は出来ない。そこでここからGTKのランタイムを持ってきて中にある lib/gtk-2.0/2.10.0/immodules/ をKeepNoteにコピーする。これで完了。

この2つだけでもグンと使いやすくなった。

このKeepNote、ページ自身はHTMLで出力されるのでノート出力先フォルダをDropboxにしておけば、もうEvernoteですね。
Linux版もあるので、試してみよう。
Posted at by