タグ

ブックマーク / blog.64p.org (73)

  • Clang.pm で C/C++/Objective-C をパースする!! - tokuhirom's blog

    https://github.com/AlexBio/p5-Clang https://metacpan.org/release/Clang Clang.pmという謎のライブラリをALEXBIO氏が CPAN にだしていたので、つかってみた。 まずは、ライブラリを sudo aptitude install libclang-dev cpanm Clang -nvとしてインストールします。 int main() { puts("Hello, world!"); return 0; } というソースを hello.c という名前で用意。 use v5.16; use Clang; my $index = Clang::Index->new(1); my $tunit = $index->parse('hello.c'); my $nodes = $tunit->cursor->childre

  • MySQL binlog API は row based mode でこそ、その真価を発揮する!! - tokuhirom's blog

    空前の MySQL binlog API ブームですが、みなさん libreplication の examples/basic-[12] を実行するだけで満足してしまっているようです。しかし、libreplication のおもしろいのは examples/mysql2lucene の方なんです。 3つのロギングモード普段はあまり意識しないかもしれないですが mysql の binlog には statement based, row based, mixed の3種類があります。 statement based は、実際に実行された SQL が記録されます。一部の関数でちょっと危険です。 row based では、実際に変更された行のデータが記録されます。 mixed では、危険な関数をつかった場合などには row based で記録し、そうでなければ statement based

  • Data::MessagePack::Unpacker と AnyEvent::MessagePack に関する注意喚起 - tokuhirom's blog

    typester, gfx, tokuhirom の3人で話しあった結果、以下のように決まりましたので、つつしんでご報告いたします。 Data::MessagePack::Unpacker には Bug があるので Deprecate しました。 今後は typester さんによる Data::MessagePack::Stream をご利用ください。 AnyEvent::MessagePack も Data::MessagePack::Stream を利用するように変更してリリース済みとなっています。 なにか不具合・疑問などありましたら [email protected] までお気軽におといあわせください。 以上です。よろしくおねがいします。

  • IRC Protocol Parser を書いた - tokuhirom's blog

    http://tokuhirom.github.com/nanoircparser/ C++ で 1ファイルでうごく IRC の protocol parser を書いたので github にアップしておきました。 IRC のクライアントライブラリは、イベントのハンドリングが主で、ライブラリになっていなくても手でくみたてればわりと十分だったりするので、面倒な protocol parser の部分だけさくっとかいてみました。 ベンチマークはとっていませんが、速度はそれなりにでてるんじゃないかとおもいます。client side で気軽にうごかすボット、みたいなシーンを想定しているので、わりと富豪的な実装になっていますけれど。 今回、工夫した点としては re2c を利用してパーズしてます。このおかげで非常に見通しがいいコードになってます。RFC にのっている BNF のほとんどそのままなので

  • はやりもの一個飛ばしの法則 - tokuhirom's blog

    なんかこう、世間をみておりますと、いろいろなものがはやったりすたれたりしておりますね。 prototype.js のあとに MooTools とかなんかいろいろあったけど、それを静観して jQuery にいったらだいぶ楽でした。 mod_perl1.3 のときに、mod_perl1.9 とか mod_perl2 を導入してる某はてな社や FCGI を導入している某モジャモジャ社の人から DIS られたりもしましたが、それを静観していたら、plack の季節がやってきて、一個とばしで楽でした。 apache1.3 をつかってるときに lighty やばいよっていってる人いましたが、今はメンテされてないようで、僕は nginx をつかっています。 まあそんな風に、流行っているものは、だいたい攻めすぎてたりなんだりであんまり定着しなかったりするので、現状のものにたいしてそこまでのメリットがないの

  • Devel::Peek の出力の読み方 - tokuhirom's blog

    Devel::Peek::Dump の出力はこういう風になっているわけですが SV = IV(0xedb740) at 0xedb748 REFCNT = 2 FLAGS = (PADMY,IOK,pIOK) IV = 1さて、"IV(0xedb740) at 0xedb748" ってなんだ? ってなるわけです。 "IV(0xedb740)" のアドレスは、sv_any のアドレスで、0xedb748 の方は SV そのもののアドレスです。 なお、struct sv は疑似コードでいうと以下のような構造になっています。 template <class T> struct SV { T sv_any; // 値体へのポインタ uint32_t sv_refcnt; // リファレンスカウント uint32_t sv_flags; // フラッグ union { char *svu_pv;

    karupanerura
    karupanerura 2012/03/26
    [Devel::Peek]
  • Perl Advent Calendar 2011 やりましょう - tokuhirom's blog

    English TrackHacker TrackCasual TrackTest::* TrackDBIx::* Track今年もやってきました。アドベントカレンダーの季節が! もうみんな技術的アドベントカレンダーのことについては説明する必要はないよね! もしわからない人がいたら2008年に僕がかいたエントリー をよんでおくれよ! どうやら現状、今年は5トラックあるようです! おおいな! 他にもやりたい人いたらめいめいやるといいですね! とりあえず JPerl Advent Calendar の方、だいぶ人がたりなくて、このままだとやばい! ってかんじなので、どんどん登録しちゃってね! 複数のトラックに登録してもよいよ! 最悪 Perl 関係なくてもいい! よろしくね! はらへった!

  • Amon2とJSONとセキュリティ - tokuhirom's blog

    [1]http://d.hatena.ne.jp/ockeghem/20110907/p1[2]http://www.atmarkit.co.jp/fcoding/articles/webapp/05/webapp05a.html[3] http://msdn.microsoft.com/ja-jp/asp.net/ff713315[4] http://labs.cybozu.co.jp/blog/kazuho/archives/2007/01/cross-site_including.phpあたりをよんで、JSON とセキュリティについてかんがえてみた。 ここで、有効とされている対策のうち while(1); を先頭に付与するPOST ですべて処理するといったあたりは、RESTful でないし、BK 感がひどいというか質的ではないのでできるだけやりたくない。 また、Amon2 では互換

    karupanerura
    karupanerura 2011/11/25
    殆ど知らなかったのでめもめも。
  • 「なぜそのモジュールをつくったのか、他のものでは駄目なのか」ということをドキュメントに書くといいよ、という話 - tokuhirom's blog

    なにしろ、「これこれこういう実装なんですよ!!」「こういうインターフェースなんですよ!!」っていうところだけあっても肝心の「なぜこのモジュールが必要なのか」っていうところが記述されていないモジュールが多い。 なにより肝要なのは「なぜ現状だとこのモジュールが必要なのか」「このモジュールをつかうとどういう場合に便利になるのか」「既存のモジュールにたいする優位性はなにか」といったところを記述するとよい。 とくに「既存のモジュールにたいする優位性」というのは重要で、これを記述していないと海外Perl Mongers から「それ Nantoka::Kantoka でできるよ」みたいなのがいっぱいコメントがついたりする。国内からもつく。 なんてことを思った。

  • 簡易的に Test::Class っぽくかくライフハック - tokuhirom's blog

  • Exporter::Auto ってのつくってみたよ - tokuhirom's blog

    https://github.com/tokuhirom/Exporter-Auto なんか @EXPORT にいれるのだるくね! このプロジェクトでしかつかわないから全部 export しちゃってくれていいですよ! みたいなやつ。ありませんか? ありませんか。そうですか。そうなら、ブラウザの「戻る」ボタンを押してください。ってところまでかいてから気付きましたが、最近のブラウザって「戻る」ってかいてありませんね。はい。 で、概要ですが、Sub::Identify + B::Hooks::EndOfScope という荒技で、パブリックっぽいメソッドの一覧をみつけて @EXPORT にぶっこむというイカした技です。 Exporeter::Auto->import がよばれる時点、つまり use Exporter::Auto の時点ではまだメソッドが実際に定義されていないので、B::Hooks:

    karupanerura
    karupanerura 2011/10/31
    Exporter::Allってのは結構前に書いたけど https://gist.github.com/1061108 なるほどB::Hooks::EndOfScopeなんてあるのか。これ使った方が良いですね。
  • Testing Web Application 2011秋 - tokuhirom's blog

    とにかく楽に、お気軽に。お気軽にテストを追加できて、お気軽にテストを実行できる。というのがなによりも重要です。 追加しようとおもったときに「どう追加したらいいかわからない」という状況になりがちなので、あらかじめいろいろな構成要素ごとにテストをひととおりかいてみるというのも重要だとおもいます。O/R Mapper のクラスのテストとか、model のテストとか、コントローラのテストとか、JSON API のテストとか。。 ExtUtils::MakeMaker でテストをうごかさないExtUtils::MakeMaker を素でつかうと blib/ とかつかってきてうざいので、Makefile.PL に以下のような hack をほどこしてあります。ウェブアプリケーションで blib/ とかにコピーする必要ないですよね。実運用でも blib/ でうごかさないし、インストールもしませんし。 #

  • tokuhirom blog

    PSGIとPlackと 〜 軽量フレームワークAmon2入門 (3) 〜 さて、今回は裏をかいて、いったん題のAmon2の話からはずれて、PSGI/Plackのはなしをしましょうかね。 PSGI/Plackは基的にはアプリを書く人は知る必要はあまりないのですが、概念ぐらいは知っておくにこしたことはない、というところです。 さて、数年前のYAPCでわたくしが口を酸っぱくして申し上げたことを皆さんはおぼえているでしょうか。そう、一番大事なのは「PSGIは仕様。Plackは実装」ということなのでした。ここだけ把握していれば十分なので、PSGI/Plack の詳細に興味がない人はブラウザの Back ボタンを連打してください。 PSGIってなんだ?PSGIとは「ウェブアプリケーションとアプリケーションサーバーの間のプロトコルのこと」です。Perlの基的なデータ型であるArrayRef, Ha

    tokuhirom blog
    karupanerura
    karupanerura 2011/07/14
    分かりやすい。