タグ

ブックマーク / dayflower.hatenablog.com (32)

  • APR-util の DBD API を使ってみる - daily dayflower

    APR(の一部の APR-util)には,各種データベースを統一インタフェースで使うことのできる DBD API があります。のでちょっと使ってみました。 ちなみに普通に C でアプリケーションを書いている人にはあまりおすすめできないと思います。統一インタフェースというほど方言を吸収しているとはいえないので。もっとも portability layer としてすでに APR を使用していて,ちょっくら DB も(軽く)使用しようかというケースなら向いているかもしれません。どちらかというと,DB を使用する Apache のモジュールを開発している場合に,個別のデータベースクライアントライブラリにバインドするよりはこちらを使ったほうが,柔軟性(データベースの選択)が増すという用途です。さらに mod_dbd なんてのもあわせて使うとおもしろいかも。 どのデータベースエンジンがサポートされてい

    APR-util の DBD API を使ってみる - daily dayflower
  • UUID::Object と UUID::Generator::PurePerl を書いた - daily dayflower

    UUIDPerl について - daily dayflower でうだうだ書いてたのですが,Pure Perl 実装の UUID generator が欲しくなったので書いてみました(各種 UUID モジュールのインタフェースを共通化するモジュールはまだ書いていません)。 CodeRepos に置いてあります。 UUID::Object http://svn.coderepos.org/share/lang/perl/UUID-Object/trunk/ UUID::Generator::PurePerl http://svn.coderepos.org/share/lang/perl/UUID-Generator-PurePerl/trunk/ この記事で反応?をみて,異論がなければ今月中には CPAN にあげようかなと思っています。 SYNOPSIS としては以下のような感じ。

    UUID::Object と UUID::Generator::PurePerl を書いた - daily dayflower
    yappo
    yappo 2009/03/16
  • prove (Test::Harness) コマンドの --state オプション - daily dayflower

    テストが膨大になっていくと,あるテストでは時間がかかったりして「そのテストはもう成功することがわかっとるっちゅうねん;失敗するテストだけ再テストしたいっちゅうねん」ってことになったりします。そんなときに使えるのが prove コマンドの --state オプションです。 --state オプションに failed という引数をわたすと,「テストの対象は前回 fail したテストスクリプトのみ対象」という意味になります。ステートを保存する save と併用して指定してみます。 % prove --state failed,save No saved state, selection will be empty Files=0, Tests=0, 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) Result: NOTESTS「No save

    prove (Test::Harness) コマンドの --state オプション - daily dayflower
  • Perl XS メモ - typemap と MAGIC をからめて - daily dayflower

    id:tokuhirom さんが http://d.hatena.ne.jp/tokuhirom/20081209/1228829454 で下地をつくってくださったので(perl-users.jp むけまとめも期待してます),ちょっとアドバンスドな話題を。 例題 http://www.sra.co.jp/people/m-kasahr/eb/ http://www.sra.co.jp/people/m-kasahr/eb/ の Perl binding を開発するとしましょう。 http://www.sra.co.jp/people/m-kasahr/eb/ の使い方は,たとえば次のような感じです。 EB_Book *book_pointer; book_pointer = (EB_Book *) malloc(sizeof(EB_Book)); eb_initialize_book(bo

    Perl XS メモ - typemap と MAGIC をからめて - daily dayflower
    yappo
    yappo 2008/12/10
  • V8 (Google JavaScript Engine) を embed した感想とかあれこれ - daily dayflower

    なぜ CodeRepos に登録しないのか べつだん深意や確執があるわけじゃなくて,華々しく 500 人めのコミッタになろうと思ったら,現在 461 人だったからです。ということで 38 人の方々,コミッタ登録してください ;P 冗談はともかくおまえの書いた汚いコードを早く添削したいんじゃという方がいらっしゃったら,代理でいれといて構いません。 Acme::JavaScript::V8(Perl XS)を書くときに苦労したこと New ていうのが XS での define 値だったので困りました。V8 側だと,new / delete するんじゃなくて Class::New() する流儀なので。 ですから,#undef New してあります。他のマクロで使われていたらマズいなぁと思いますが,動いたからよしとします。 エンベッダーズガイド V8 JavaScript engine を読む s

    V8 (Google JavaScript Engine) を embed した感想とかあれこれ - daily dayflower
    yappo
    yappo 2008/09/10
    ご予約承りました
  • v8 (Google JavaScript Engine) を Perl XS モジュールにしてみた - daily dayflower

    やはりやっつけで。Joke module です。 いろいろ書きたいことがあるけど,そのうち(追記するかも)。 libv8 と XS の間をとりもつ bridge.cc。 /* bridge.cc */ #include <v8.h> #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" /* harmful macro!, but, but, ... */ #undef New #include "bridge.h" using namespace v8; class V8Context { public: V8Context() { HandleScope scope; Handle<ObjectTemplate> global = ObjectTemplate::New(); Handle

    v8 (Google JavaScript Engine) を Perl XS モジュールにしてみた - daily dayflower
    yappo
    yappo 2008/09/05
    coderepos!!!
  • v8 (Google JavaScript Engine) を Apache のモジュールにしてみた - daily dayflower

    ちまたでは Google Chrome より v8 がアツいらしいので,やっつけでつくりました。Joke module です。 ふつーに CGI モジュール的につくってもよかったんですが,なんとなくテンプレート的にしました。ほんとうは mod_perl みたいにサーバのあらゆるところに hook をかけれるようにしたほうがおもしろいんでしょうけど。 <html> <head> <title><?js print('Hello, world!'); ?></title> </head> <body> <ul> <?js for (var i = 0; i < 10; i ++) { ?> <li><?js print(i + 1); ?></li> <?js } ?> </ul> </body> </html> UA のリクエストとか全然処理してない(エンジンにわたしていない)です。だから

    v8 (Google JavaScript Engine) を Apache のモジュールにしてみた - daily dayflower
    yappo
    yappo 2008/09/04
    codereposとか!
  • PL_check とパトリオットミサイルのしくみ - daily dayflower

    前回の記事はおかげさまで id:yappo さんに HE-N-TA-I 認定されたので安心してたら,マッチョな人に牛刀フラグを立てられ(もちろん冗談です*1),Shibuya.pm 入会への道もなかなか険しいなぁと思い知りました。 そんな空気は読まずに理論編?を Perl 5.8.8 のソースをもとに書いていきます。マニア向け。 Perl がスクリプトを実行するまで perlguts の Compiled code セクションと Perl のソースコードをもとに,おおまかな実行機序を書いてみました。 字句解析器(レキサ; toke.c) 字句エラーの検出 構文解析器(パーサ; perly.y*2) 構文エラーの検出 OPCODE ツリーに変換; new*OP() in op.c check ルーチンの実行(pass 1) (文脈にもとづく)文法エラーの検出 by 各 PL_check[](

    PL_check とパトリオットミサイルのしくみ - daily dayflower
  • PL_check hack - daily dayflower

    (あとでかく) XS くらいいじれないと Shibuya.pm に加入できないらしいので,とりあえず書きましたー。今回は実践編なので,あまりわかりやすい内容&たいした内容ではないです。わっふるさせてごめんなさい。 ゴール #!/usr/bin/perl eval 'print "Hello ' . $ARGV[0] . '!\n"'; とか危険ですよねー*1。こんな機能があるなんてけしからん。ですので,eval の実行を抑制するモジュールを書いてみました。 というのは冗談で,eval の実行主体となる OPCODEが,システム内で「完結」してます(んーうまく表現できない)。なのでサンプルとしていじりやすく,この題材をとりあげました。 評価型 eval はどのような OPCODE に変換されるのか まずは単純なコードを書いて,OPCODE がどのようになるのかたしかめてみます。 use st

    PL_check hack - daily dayflower
    yappo
    yappo 2008/06/30
    へんたいですね^^
  • PL_check hack の旧スタブ - daily dayflower

    すいません。間違えて新しい記事にしちゃいました。ブクマしてくださった方々申し訳ないです。 新記事 → PL_check hack - daily dayflower

    PL_check hack の旧スタブ - daily dayflower
    yappo
    yappo 2008/06/27
    わっふる
  • perluniadvice - daily dayflower

    perluniadvice の前半部分を訳してみました。かなり意訳。 アドバイスと銘うってますが,中級者〜上級者向きです*1。 抄訳 perluniadvice Perl 付属のドキュメント perlunitut はもう読んだ?もしまだなら,そこから読み始めること :) perlunitut - perldoc.perl.org perlunifaq - perldoc.perl.org 以下にわたし(http://juerd.nl/)からのアドバイスの要約を挙げる。perlunitut には記述しなかった内容も含んでいる。 もしあなたが古い Perl を使っているのなら,最新版にアップグレードしよう もしあなたが古い CPAN モジュールを使っているのなら,最新版にアップグレードしよう 「外界」からやってくるデータはすべて decode() しよう 「外界」へ出力するデータはすべて en

    perluniadvice - daily dayflower
    yappo
    yappo 2008/06/25
    あとでみるよー
  • 図解: Perl と Unicode 文字列 - daily dayflower

    id:tomi-ru さんが [http://e8y.net/mag/015-encode/:title] というとてもプラクティカルな [http://search.cpan.org/perldoc?Encode:title=Encode] 入門をお書きになったので,わたしも違う切り口で書いてみたくなりました。 いちおうの基礎(読み飛ばし可) 文字セット, キャラクタセット, 文字集合, 文字集合 - Wikipedia エンコーディング, 符号化方式, 文字符号化方式 - Wikipedia この2つは異なります。とくに知らなくても下記の文書を読むことはできますが,理解しているとためになります。くわしく知りたい人は自習してください。 文字セットの例 Unicode JIS X 0208 ひらがなとかカタカナとか漢字とか ASCII 文字 エンコーディングの例 UTF-8 ISO-202

    図解: Perl と Unicode 文字列 - daily dayflower
  • ファイルハンドルをめぐる冒険(ただしマニア向け) - daily dayflower

    以下は Perl 5.8.8 のソースを元に記述しました。Perl 5.10 でもそう変わってはいないと思いますが,結構内部が変更されているので違うかもしれません。大まかには同じだと思います。 イントロダクション Perl でのファイルハンドルは内部的には [http://search.cpan.org/perldoc?IO::Handle:title=IO::Handle] オブジェクトとして保持されています。そのような記述は perl5004delta くらいでしか見つかりませんでした。ラクダにもなかったような。 Internal change: FileHandle class based on IO::* classes File handles are now stored internally as type IO::Handle. The FileHandle module

    ファイルハンドルをめぐる冒険(ただしマニア向け) - daily dayflower
    yappo
    yappo 2008/06/05
    すばらしい
  • ClearSilver を Apache のフィルタモジュールとしてインプリメントしてみた - daily dayflower

    これまでもちらほらと ClearSilver という名前を聞いたことがあったんですが,YAPC::Asia での ikebe さんの発表でさらに興味を持ちました。 mod_livedoor_page.so http://www.livedoor.com/ use ClearSilver Template engine. top-page is not changed so frequently. top-page has simple data structure only. so we use C for top-page. Inside Livedoor 2006-2007 - PDFへのリンクなので注意 興味を持ちましたというか,キーくやしい(←何が?)となったので,自分でも ClearSilver を使った Apache モジュールを書いてみました。ソースはこちら。 実はググったら

    ClearSilver を Apache のフィルタモジュールとしてインプリメントしてみた - daily dayflower
  • Perl (5.8) での文字列の内部表象について返信 - daily dayflower

    UTF8 フラグあれこれ - daily dayflower について nobuoka さんよりツッコミをいただきました。 nobuoka 2008/03/11 21:15 こんにちは。”[Perl] Perl の Unicode 対応について” のエントリでトラックバックさせて頂きました nobuoka です。 内部表象 (内部形式: internal format) について気になる点があったのでいろいろ調べていたのですが、「内部形式は UTF-8 ではなく Unicode コードポイントをバイナリ化したものである」という結論に達しました。たとえば「é」という文字は内部形式では ¥xE9 というバイナリデータとして保持されているという結論に達しました。それは utf8 フラグが付いていても付いていなくても同様です。 つまり、このエントリで述べられている (A) 文字列(内部表象: UT

    Perl (5.8) での文字列の内部表象について返信 - daily dayflower
    yappo
    yappo 2008/03/13
  • UTF8 フラグあれこれ - daily dayflower

    UTF8 フラグについてわかってるつもりだったんですが,utf8::is_utf8 considered harmful - Bulknews::Subtech - subtech を読んで混乱したので,自分なりにまとめてみました。間違いがありましたらご指摘よろしく。 まとめ スカラー変数の内部表象の状態を示すものとして UTF8 フラグというものがある スカラー変数は(リファレンス等は別として)下記のものを格納できる (A) 文字列(内部表象: UTF-8) (B) 文字列(内部表象: ISO-8859-1) (C) バイナリ列 純粋なバイナリストリーム(画像ファイル等)かもしれないし, UTF-8 octet stream かもしれないし, CP932 octet stream かもしれないし,etc, etc ... Perl は(後方互換性確保などの理由から)ISO-8859-1

    UTF8 フラグあれこれ - daily dayflower
  • 多段 ssh / rsync するために ProxyCommand を使ってみる - daily dayflower

    以前 2.(gatewaynetcat を ssh 経由で実行することによる転送)はよくわからないけど失敗 多段 rsync がめんどくさい - daily dayflower と書きましたが,なんとなく仕組みがわかってきたので書きます。 2年前くらいに流行ってたネタなので今更感満点。 まとめ 単純に到達できない場所に ssh でつなぐために ProxyCommand という [http://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config:title=ssh_config] の設定子が使える ProxyCommand とは ssh クライアントと標準入出力でやりとりする 多段 ssh をする際に ProxyCommand で指定すると有用なものとして下記のものがある nc (netcat) OpenBSD や RedHat 系には(お

    多段 ssh / rsync するために ProxyCommand を使ってみる - daily dayflower
    yappo
    yappo 2008/02/08
    こんらんしてきた
  • svk の shell が欲しい - daily dayflower

    と思って探したら,ありました。 svk使ってると「svk st」→「svk di」→「svk ci ファイル名 -m ほげほげ」とかよくやるんですが、「svk」の部分がDRYじゃないと思ったので超簡易SVKシェルを作ってみましたよ。 いちいち「svk なんちゃら」って打つのが面倒な人のためのSVKシェル - Greenbear Diary Ruby 使って readline と system を利用してます。のでびっくりするほどシンプル。 2008/01/25 追記: yhara さんがさらに発展させた Reposh というシェルをリリースなさってます。 んで,svk はせっかく Perl で書かれていますし,モジュールもあるので,Perl で書いてみました。まるでシンプルじゃなくなってしまった罠。 Term::ShellUI は神! でも,このスクリプトのままだとファイル名補完とか使えな

    svk の shell が欲しい - daily dayflower
    yappo
    yappo 2008/01/24
  • overload の rebless バグについて - daily dayflower

    きちんと追いきれなかったので結構ぐだぐだです。 そもそも bless の挙動とは #!/usr/bin/perl use strict; use warnings; package FooBar; package main; my $a = { }; my $b = $a; print $a, "\n"; # HASH(0xb8002a0) print $b, "\n"; # HASH(0xb8002a0) bless $a, 'FooBar'; print $a, "\n"; # FooBar=HASH(0xb8002a0) print $b, "\n"; # FooBar=HASH(0xb8002a0) 前半はまぁいいでしょう。同じ無名ハッシュリファレンスをさしているので同じ内容が出力されます。 おもしろいのは後半です。 $a を bless しただけなのに,$b も bless され

    overload の rebless バグについて - daily dayflower
  • CentOS 5.1 の perl をリビルドする - daily dayflower

    2008-12-26 追記 CentOS 5.2 の updates の perl-5.8.8-15.el5_2.1 で下記該当パッチ+αがあたった状態になっています。もう自分でパッチをあててリビルドする必要はありません(RHEL 5(.2) の perl-5.8.8-15.el5_2.1 で例のバグが治っていた - daily dayflower)。 overload の rebless バグとパフォーマンスペナルティ問題 については下記参照。 YappoLogs: FedoraCoreやCentOS系の遅いPerlのパッチの件 overloadと再blessの問題 - Unknown::Programming overload が無効? - Practice of Programming YappoLogs: overloadのreblessとRHLのoverloadが遅いパッチ ov

    CentOS 5.1 の perl をリビルドする - daily dayflower