日曜日, 2月 22, 2009

[Perl] デーモンプログラムを書くには

今まで全く読んだ事がなかった"perlfaq8"より。

psコマンドなど、外部から見えるコマンドラインを実際に書き換えるには、$0変数を書き換える。

例えばsendmailのようなデーモンプログラムは以下ように状態を設定する:
$0 = "orcus [accepting connections]";

なるほどー。そんなことができるんだ。。

ちなみに、デーモンプログラムというかapache的なデーモンを書くためには、Parallel::Preforkがとても便利です(中で使われているProc::Wait3というのは初めて知りました)。

金曜日, 2月 20, 2009

[Life] XMLをコマンドラインで

GUIが使えるときは、折り畳めるエディタを使えばよいのだが、ターミナル操作のときにXMLで書かれたファイルの記述を確認するのは、とても難儀する。。。

と思っていたらxpathコマンドを発見。以下のように使う。
D:\apache-solr-trunk\example\solr\conf>xpath schema.xml "(//fieldtype|//fieldType)/@name"


これにより、この例ではsolrのスキーマに設定されいてるフィールドに与えられる型一覧を取得することが出来る。便利!

木曜日, 2月 19, 2009

[Java] Senのバグ

Javaで形態素解析をするときに、使われるSenだが本家からダウンロードできるオリジナルソースはバグ付き。これはgnarlさんのページに修正方法が詳しく記載されている様子。

土曜日, 2月 14, 2009

[Linux] googleクローラはJavascriptが読める

googleのクローラがJavascriptに対応していそう、という記事を発見。
http://searchengineland.com/an-update-on-javascript-menus-and-seo-16060

via kwout

常識でしょうか。私は知りませんでした。。当然の流れとは言え、すごいことだと思います。Flashが読まれるようになったことは知っていて、こちらは奏すべきだろうと思いましたが。。

金曜日, 2月 13, 2009

[Flash] PixelBlender

Flasherな人にしたらいまさらな話なのだと思うが、PixelBlenderがすごい。

画像にぷるん、とした動きをさせたいと思っていたのが、もろできるようです。
というかこういうのを思いのままに作れるというのであれば(センスは相当必要とされそうだけど)、かなり勉強する価値ありそう。

日曜日, 1月 25, 2009

[Linux] Kirin

相当今更感があるのですが、Kirinという画像のリサイズなどが行える、画像変換のWebAPIを使ってみました。アプリキーをもらってから使うものなのですが、、説明に書かれている"呼び出し元サーバ名"って、、変換したい元画像が置いてあるサイトのドメイン名を書くのですね。。。うーん。
http://kirin.tatamilab.jp/

via kwout

たまたまGIF画像のリサイズをしてみたので気がついたのですが、戻しはJPGなんですね(JPGのコメントにはしっかり"Kirin Library 1.11 2009/01/25 0"と入っていました)。

火曜日, 1月 20, 2009

[Scala] TwitterもScalaで

Twitterでユーザ間のメッセージ送受信を実装するために使っている(のであろう)、キューイングシステムが、Rubyから(!)いつのまにかScalaにて書き直された、とのこと。その上これはソースも公開されているので、ぜひ勉強がてら読んでみたい(最近githubが増えてきましたね9。

[Perl] 携帯サイトのアクセス分析!

MovableTypeを携帯対応する一番簡単な方法は、mt4iなわけですが、このアクセス解析をapacheログでやるのも面倒に思いました。
なので、最近出たGA4Kという、GoogleAnalyticsに携帯アクセスを流すPHPライブラリ(まぁ原理的にはココでも紹介されているとおり、たいしたことはないのですが)を、Perlモジュールに作り変えてみました(以下ソース。ウェブプロパティID(utmac)とウェブサイトURL(utmhn)は書き換えてください!)。
#
# This code is test module for k-tai web site (ex mt4i)
#
package Onamon;

sub accessGoogleAnalystics{

use Sys::Syslog;
require HTTP::Request;
require LWP::UserAgent;

my $utmac = 'UA-179xxxx-2';
my $utmhn = 'http://onamon.com';
my $utmn = 1000000000 + rand(9999999999 - 1000000000);
my $cookie = '';
my $uservar = '';
my $random = 1000000000 + rand(2147483647 - 1000000000);
my $today = time();
my $referer = $ENV{'HTTP_REFERER'};
my $utmp = $ENV{'REQUEST_URI'};

if($ENV{'HTTP_X_UP_SUBNO'}){
$uservar = $ENV{'HTTP_X_UP_SUBNO'};
}elsif($ENV{'HTTP_X_DCMGUID'}){
$uservar = $ENV{'HTTP_X_DCMGUID'};
}elsif($ENV{'HTTP_X_JPHONE_UID'}){
$uservar = $ENV{'HTTP_X_JPHONE_UID'};
}
$cookie = $uservar;

my $urchinUrl = 'http://www.google-analytics.com/__utm.gif?utmwv=1&utmn='.$utmn.'&utmsr=-&utmsc=-&utmul=-&utmje=0&utmfl=-&utmdt=-&utmhn='.$utmhn.'&utmr='.$referer.'&utmp='.$utmp.'&utmac='.$utmac.'&utmcc=__utma%3D'.$cookie.'.'.$random.'.'.$today.'.'.$today.'.'.$today.'.2%3B%2B__utmb%3D'.$cookie.'%3B%2B__utmc%3D'.$cookie.'%3B%2B__utmz%3D'.$cookie.'.'.$today.'.2.2.utmccn%3D(direct)%7Cutmcsr%3D(direct)%7Cutmcmd%3D(none)%3B%2B__utmv%3D'.$cookie.'.'.$uservar.'%3B';

my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => $urchinUrl);
if ($ENV{'HTTP_ACCEPT_LANGUAGE'}) {
$request->header('Accept-language' => $ENV{'HTTP_ACCEPT_LANGUAGE'});
}
if ($ENV{'HTTP_USER_AGENT'}) {
$request->header('User-Agent' => $ENV{'HTTP_USER_AGENT'});
}
my $response = $ua->request($request);

openlog(__FILE__, 'cons,pid', 'local4');
if ($response->is_success) {
syslog('debug', 'OK('
.$ENV{'REQUEST_URI'}
.'^'.$ENV{'HTTP_USER_AGENT'}
.'^'.$ENV{'HTTP_X_DCMGUID'}
.')'
);
} else {
syslog('debug', 'NG');
}
closelog();
}
1;
汚い、というか何も考えていないソースで恥ずかしいですが、一応。mt4iに適用するなら、mt4i.cgiと同じディレクトリに上記ソースをOnamon.pmとして保存し、mt4i.cgiの最初のほうに、
~略~
use FindBin qw($Bin);
use List::Util qw(first);
use HTTP::Date;
use CGI::Carp qw(fatalsToBrowser);

# ★ここから
use Onamon;
if($ENV{'REQUEST_URI'} !~ /(png|jpg)$/){
Onamon::accessGoogleAnalystics();
}
# ★ここまで

my $bin;
my $log_pl;
our %cfg;

BEGIN {
~以下略~
と足します。お名紋贈り物ブログに適用してみたのですが、、果たして動くことやら。

日曜日, 1月 18, 2009

[Perl] CTPP2テンプレートエンジン

CPANのPerlモジュールがひたすらupdateされていて、頑張っている感のあるテンプレートエンジン(C++で書かれていて各種言語でバインディング可能なもの)。
http://freshmeat.net/projects/ctpp2/

via kwout

気になるのでメモ(Perlのモジュールはコチラ)。

土曜日, 1月 10, 2009

[Flash] JPEG格納フォーマット

以下ページに良くまとまっている。
http://pwiki.awm.jp/~yoya/?Flash/JPEG

via kwout

こられとやまさんページのFlashをswfmillで解析中(珍しくFlashLite1.1で出来たスライドショー)。

月曜日, 1月 05, 2009

[Life] XMLファイルをきちんと扱う

最近ミドルウェアの設定ファイルをXMLで書かなくてはならないことが多くなってきた。
可読性が意外と低いので、きちんとXMLを解釈して折りたたみなどができるエディタを探していたのだが、とりあえずjEditでできることまでわかった。

Pluginが1つ必要(その名もXMLというやつ)なのだが、PluginマネージャというGUIでさくっとインストールできる。

希望していた動きをするので、今しばらくはこれで行こうと思う。

月曜日, 12月 29, 2008

[Solr] 日本語解析には

cmecab-java、本当はMeCabをJavaから使うためのバインディング(本家のmecab-javaをSWIG使わず実装したもの)なのだけど、中にSolr用のファクトリクラスが含まれていることに注目すべし。
http://code.google.com/p/cmecab-java/

via kwout

Java記述がv1.6系向けで、まだv1.5系の場合は少し書き換えが必要になる(MecabExceptionで2つメソッドを消した/string型のisEmptyをnull比較に変更)のですが、なんとか無事Solr(v1.3)から使えるようになりました。

あ、あとMacでコンパイルする場合、Makefileが合わないのでシアノさんのページを見ながら書き換えること、また、標準Javaのエンコード指定が何故かSJISなので、"-D file.encoding=UTF-8"とする必要があります。

参考:ハタさんのブログ

日曜日, 12月 21, 2008

[life] ソースをハイライト

ブログにソースを張るときに。
http://uwanosora.xrea.jp/2008/06/web.html

via kwout

金曜日, 12月 19, 2008

[Solr] SpellCheckComponent

Solrには「もしかして検索」を実装するのに使えそうなSpellCheckComponentというコンポーネントがあるが、日本語は何故か使えない様子(出所はIBMの開発者向けページ/いつも質が高く関心する)。
Lukeで見るところ、SpellCheck用フィールドのトークナイザをMeCabにしているから、当然キチンとword及びstart3なんかにも、想定した切り方で入っているようだが。。
問題はクエリ側か?

参考:LingPipe, Wiki

日曜日, 12月 14, 2008

[Life] userchrome.jsの練習で

すばらしい先達。これから(も)勉強できそう。
clipped from www.code-404.net
Copy URL Lite+
 blog it

水曜日, 12月 03, 2008

[Life] XULの情報元!

Firefoxの拡張(userChromeのだけど)を改訂したくて、XULのチュートリアルを探していた。しかしそもそもマニアックなので書籍など期待できないな、と思っていたら、、、なんとウェブ上にとてもしっかりとした情報が公開されていました。
http://piro.sakura.ne.jp/xul/doc/tutorial/

via kwout

本当に、こういう活動には頭が下がります(しかし、本家のチュートリアルも日本語で充実してました。もう実は至れり尽くせり!?)。
あれ?でもFirefox2と3で少しは違うのかな。

火曜日, 12月 02, 2008

[S3] junglediskの次

CUIのツールを探していて、s3cmdが便利そう。pythonで書かれている。
http://s3tools.logix.cz/s3cmd

via kwout

"--configure"で設定ファイルを書くウイザードになる親切設計。

月曜日, 12月 01, 2008

[Linux] apacheの内部構造

1999年当時のものと古いですが、apacheの内部構造が説明された論文(?)を見つけました。
https://styx.uwaterloo.ca/~oadragoi/cw/CS746G/a2/acc.html

via kwout

日曜日, 11月 30, 2008

[PgSQL] セッションの切断方法

PostgreSQLは、DBサーバとしてクライアントのセッションについてタイムアウトをかけない。このため、さすがにちょっとセッションが多すぎるな、とDBAが思ったとして、今度はセッションを切断する方法がよくわからない。。
と思ったら、管理者向け関数の中にあるpg_cancel_backend(pid int)というやつが役に立つようだ。これをpsqlからざくっと発行すれば、セッションは殺せるらしい(PostgisのMLより)。

SELECT pg_cancel_backend(5220);


なるほどね。

水曜日, 11月 26, 2008

[Solr] jQueryのSolrプラグイン

すばらしい!