2009/08/01


普段はあまりブラウザを立ち上げてなくて、vimでコーディングしてる時なんかに調べたい事があればw3mを使っています。
ただ良いコンテンツを見つけて、「うむ。はてブしたい!」と思った時にイチイチFirefox起動するのも面倒臭かったので、w3mから直接ブックマーク出来る様にした。
まずは、perlからはてなブックマークする仕組み。これはAtom APIを使った単純な物。 #!/usr/bin/perl
use warnings;
use strict;

use Config::Pit;
use XML::Atom::Client;
use XML::Atom::Entry;
use XML::Atom::Link;

my $url = shift;
print "\n$url\n";
print "はてなブックマーク: ";
my $summary = <STDIN>;
my $config  = pit_get( "b.hatena.ne.jp", require => {
  "username" => "your username in b.hatena.ne.jp",
  "password" => "your password in b.hatena.ne.jp",
});

my $entry = XML::Atom::Entry->new;
my $link  = XML::Atom::Link->new;
$link->rel('related');
$link->type('text/html');
$link->href($url);
$entry->add_link($link);
$entry->summary($summary);

my $client = XML::Atom::Client->new;
$client->username( $config->{username} );
$client->password( $config->{password} );
my $edit_uri = $client->createEntry( "http://b.hatena.ne.jp/atom/post", $entry )
  or warn $client->errstr;
Config::Pitを使ってる所と、はてブコメントを入力している部分がちょっと違うだけ。
このスクリプト "hb.pl" を $HOME/.w3m/hb.pl として置き、$HOME/.w3m/keymap に以下の行を追加する。 keymap m EXTERN "/usr/bin/env perl ~/.w3m/hb.pl '%s'"
これでw3mから"m"をタイプすれば、コメント入力が表示され http://mattn.kaoriya.net/
はてなブックマーク: [これはすごい]よーわからんけどね!
確定させればブックマーク出来る。中止は CTRL-C ね。

快適快適。
Posted at by



2009/07/30


こまったねー。
例えば、divにclickとdblclickを両方割り当てた場合、「トンッ、トントン!」とクリックとダブルクリックを発生させた場合
  • Firefox/Google Chromeだと「トントン」で2クリックが発生
  • IEだと「トントン」では1クリックしか発生しない
なんて動きになってる。以下検証に使ったコード。
<html>
<head>
<script type="text/javascript">
(function() {
  var reg = function(e, t, f) {
    if (window.attachEvent)
      e.attachEvent('on'+t, f);
    else
      e.addEventListener(t, f, false);
  };

  reg(window, 'load', function(e) {
    var c1 = 0, c2 = 0;
    var panel = document.getElementById('click-panel');

    var updateStatus = function() {
      panel.innerHTML = "click:" + c1 + " dblclick:" + c2;
    };

    reg(panel, 'click', function() { c1++; updateStatus() });
    reg(panel, 'dblclick', function() { c2++; updateStatus() });
    reg(panel, 'mouseout', function() { c1 = c2 = 0; updateStatus() });
    updateStatus();
  });
})();
</script>
</head>
<body>
<div id="click-panel" style="background: blue; width: 600; height: 300"></div>
<body>
</html>
例えば、図を描きたい場合にクリックで多角形を描き、ダブルクリックで完了なんてユーザインタフェースは良くある話。
上の例で言えば
  • Firefox/Google Chromeは「click:3 dblclick:1」
  • IEだとは「click:2 dblclick:1」
なにそれ。前回クリックした時の(new Date).getTime()覚えておいて一定間隔以上でクリック発生...なんてコード、簡単だけど書きたくないよ。(ノД`)ウワーン
Posted at by




書いたといっても結構前からあったのですが、いらん所を削ぎ落として軽量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