タグ

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

  • UUID と Perl について - daily dayflower

    UUID がどういうものであるか,とか UUID の表現形については省略します。 UUID - Wikipedia が参考になるかと。 UUID の仕様として RFC 4122 を参照しました*1。なのでより細かいことについては原文を参照してください。策定されるまでにいろいろ経緯があるのですが,そのへんは http://www.rfcnews.jp/archives/2005/07/rfc_4122uuidurn.html に譲ります。 UUID の構造 UUID の内部構造をおおまかに表すと以下のようになります。 variant 2 bit (3 bit) version 4 bit time 60 bit clock_seq 14 bit (13 bit) node 48 bit 実際には variant フィールドは clock_seq フィールドのオクテットの中に埋め込まれています

    UUID と Perl について - 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
  • シェル機能をインプリメントしたいなら Term::ShellUI を使うと便利 - daily dayflower

    Web::Scraperのshellをhistoryから補完できるようにしてみました。 shell系は使わないと忘れてしまうので、historyがあったほうがいいかなと思って作ってみました。 ~/.scraperhistoryを作っておくと、historyが使えるようになります。 Web::Scraperのshellでhistory補完 - dann's blog - # おお,たしかに history があると便利。Term::ReadLine ってちょろっと設定するだけでヒストリ保存とかしてくれなかったっけ?と思ったら,別のモジュールでした。 以前*1も使いましたが,Term::ShellUI という CPAN モジュールを使うと高度なシェル機能を簡単にインプリメントすることができます。 特色は, 各コマンドへのサブルーチンリファレンスを指定するだけ エイリアスも指定できる desc

    シェル機能をインプリメントしたいなら Term::ShellUI を使うと便利 - 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
  • Mercurial 勉強中 (1) - daily dayflower

    Mercurial の特徴 Mercurialでバージョン管理,http://python.matrix.jp/modules/mercurial.html#id3 も参照のこと。 分散型 SCM として設計されている 各レポジトリのチェックアウトはおのおの(基的に)独立している;独立して生きていける Subversion のように中央集権的レポジトリを作れない,というわけではない 各作業者が「マスターレポジトリ」の共通認識をもてばよい(そこから clone してきて pull / push するのだ,と) レポジトリのセットアップ等がかんたん レポジトリのセットアップは管理したいフォルダに移動して hg initうつだけ(その後 hg addremove したり) 分散管理ではなく自分だけで管理するなら RCS 並,いやそれ以上に簡単 ⇒http://d.hatena.ne.jp/

    Mercurial 勉強中 (1) - daily dayflower
    typester
    typester 2008/02/28
  • 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
  • Perl で Unicode Character について触る - daily dayflower

    Python の unicodedata モジュール - bkブログ を読んで,それ Perl だとどうよと思ったんで対応をまとめてみました。utf8 flag や Encode モジュールについては特に解説しませんので。 文字の名前を取得する charnames モジュール(Perl 5.6 より付属)の viacode 関数を使うと文字の名前を取得することができます。引数として文字列ではなく文字コードを渡すところが要注意です。 use utf8; use charnames qw( :full ); print charnames::viacode(ord 'A')), "\n"; # 'LATIN CAPITAL LETTER A' print charnames::viacode(ord 'あ')), "\n"; # 'HIRAGANA LETTER A' 文字列リテラルとして標準

    Perl で Unicode Character について触る - daily dayflower
  • mod_rpaf のかわりに mod_extract_forwarded なるものがあるらしい - daily dayflower

    今作っているウェブアプリでは -+(A) Apache 2.2 + mod_proxy (画像等のスタティックコンテンツ向け) +(B) Apache 2.2 + mod_perl (アプリサイド)という環境を同一ホストで動かしています。 ただ,このようにリバースプロキシを導入すると,(B) のログファイルではアクセスもとがすべて 127.0.0.1 になってしまいますし,アクセスされる IP によってアプリ上で制限を掛けたい場合,X-Forwarded-For ヘッダを自分でみて判断しなくてはいけなくなってしまい,面倒です。 このようなときに楽に対処できるのが mod_rpaf です(参考: リバースプロキシを導入する際はmod_rpaf - drk7jp)。このモジュールを使うと,Apache の Connection レコードの内容を改変してくれるので,ログには大元のアドレスが記録さ

    mod_rpaf のかわりに mod_extract_forwarded なるものがあるらしい - daily dayflower
  • TT の Multi Provider - daily dayflower

    CLON - 2006/11/27 - 複数のアプリで共通のテンプレートファイルを使う これ、 [% INCLUDE 'common:foo.tt' %] とかしたとき、さらに foo.tt の中で [% INCLUDE 'bar.tt' %] とすると common:bar.tt がインクルードされてほしいのだけどそうはならないのがびみょい。 typester さんは カスタム TT::Provider を書いて解決なさってますけど,ちょっとだけださくないバージョンを考えてみました。 package Template::Context::TrackingProvider; use strict; use base qw( Template::Context ); sub template { my $self = shift; my $name = $_[0]; if (! ref $n

    TT の Multi Provider - daily dayflower
    typester
    typester 2006/11/29
    おお、あとでちぇきる
  • POE おぼえがき - daily dayflower

    TIMTOWTDI なことがいっぱいで POE のことがよくわからなかったのですが,Cookbook とリファレンスを読んでなんとなくわかってきました。 POE::Kernel が POE システムのコアで唯一神 POE::Kernel->run()*1 を実行するとイベントループが回り出す イベントループでやることがなくなると POE::Kernel->run() から戻る(戻ることを期待してはいけない) POE::Session が POE システムにおける,タスク/ステートマシン/プロセス/スレッド的なものの単位 複数生成してよい セッションの最初に _start イベントが発生する セッションの最後に _end イベントが発生する イベントハンドラとして,サブルーチンリファレンス(inline_states),パッケージ関数(package_states),オブジェクトメソッド(o

    POE おぼえがき - daily dayflower
  • Perl で継続 - Continuity - daily dayflower

    ウェブアプリを作っていると,セッションデータを覗きつつ管理しつつ処理フローのどこにいるのか自覚しながら全体を作り上げるのがめんどくさくなってきます。 セッションデータサーバ(memcached 的な),があればいいんじゃね? セッション管理サーバ(認証等も含めて),があればもっといいんじゃね? セッションごとにウェブアプリデーモンを立ち上げて,その後は同一セッションのクライアントはそいつと通信すればいいんじゃね(fastcgi 的) なんて考えたりして つーかそもそもウェブアプリのコードがリクエストドリブンなのが問題じゃん ASP.NET みたくイベントドリブンなアプローチもあるよね でも,昔懐かしのコンソールプログラムみたく直線的なコード書いたりしたいなぁ 暇になったらそういうコードを書いてみるのも面白いかなぁ… と,思っていたら,とっくの昔にありました。 Continuity*1 実の

    Perl で継続 - Continuity - daily dayflower
  • File::BOM via PerlIO::via - daily dayflower

    いまいじっているウェブアプリの設定は YAML 形式にしています。デザイナさんに設定ファイルをいじってもらったら「コンテンツがそっくり消えてしまいした〜(泣)」と言われてしまいました。ぱっとみ確認したところ形式が壊れたわけじゃなさそうだし…とよくよくみてみたら先頭に BOM がついてました*1。調べてみたところ,Plagger の謎 と同じ現象じゃないですか。 ということで,File::BOM なるモジュールと PerlIO::via インタフェースがあることを知りました。 (毎度毎度周回遅れな状況でため息がでてしまいます) File::BOM はファイルの BOM からエンコーディングを判別して自動変換してくれるもので,PerlIO::via による ':via' インタフェースを使うとエンコーディングにかかわらず透過的に読み書きできます。といっても BOM があるのは UTF-8/16

    File::BOM via PerlIO::via - daily dayflower
    typester
    typester 2006/09/23
    最近のperlの挙動
  • DBICで本当に困ったら SCALAR REFERNCE を使え - daily dayflower

    追記 2006/12/06 下記で IS NOT NULL を実現するのにスカラーリファレンスを使用していますが,IS NULL / IS NOT NULL を出すためには必ずしもスカラーリファレンスを利用する必要はありません。ということで訂正を入れようと思ったんですがちょっと長いので「フォローアップ記事」を書きました。 題 typester さんに以前教えて頂いたんですが,似たようなことに今日遭遇したのでメモ。 WHERE field1 IS NOT NULL な検索をしようと思って, $resultset->search({ field1 => 'IS NOT NULL' });と書くと,内部的には SELECT ... WHERE field1 = ?と展開されて,プレースホルダに「IS NOT NULL」が渡されるので,バツ。 $resultset->search({ field

    DBICで本当に困ったら SCALAR REFERNCE を使え - daily dayflower
    typester
    typester 2006/07/15
    おまけ
  • DBIC での SQL 覗き見と Log::Dispatch - daily dayflower

    今まで $schema->storage->debug(1) として標準出力に出力される SQL 文を監視していたのですが,なぜか早く終わるリクエストでとらえきれなくなってしまいました。 やむなくロガーを導入することにしました。Log::Log4perl は仕様が重そうなので(log4j のときも設定とかめんどくさかったなぁ)パス。Log::Agent とかなかなか魅力的と思ったのですが,Log::Dispatch の設計思想にやや惹かれてこちらを使うことに…あ,Log::Log4perl ってこれをバックエンドにしてたんですか。作者の Dave Rolsky さんは DateTime のメンテナでもあるんですね。ふむふむ。 インストール自体はさっくり終了(というかテストスクリプトが簡潔すぎ)しました。DBIx::Class::Storage::DBI には debugcb というデバッグ

    DBIC での SQL 覗き見と Log::Dispatch - daily dayflower
    typester
    typester 2006/07/12
    Log::Dispatch
  • NEXT.pm は EVERY が魅力的 - daily dayflower

    今更ながら NEXT で遊んでます。イニシャライザやデストラクタでいちいち $self->NEXT::method() と書くのも苦痛ですしミスも発生しそうだなぁと思って POD を読んでいたら,EVERY や EVERY::LAST という修飾子もあると。これらは Perl 5 で標準の「depth-first, left-to-right」な探索じゃなくて「breadth-first-dependency-wise」な探索をします。正直なんのことやらよくわからないんですが,依存関係からわりと最適な順序を導出するみたいで,呼び出され方を見ると意外に直感的でした(EVERY のほうだと大元の親クラスが最後に呼び出され,EVERY::LAST だと親クラスが最初に呼び出される感じ)。 ともかく EVERY の何がいいって,呼び出すメソッド自体でいちいち $self->NEXT::method

    NEXT.pm は EVERY が魅力的 - daily dayflower
    typester
    typester 2006/07/03
    むーん。
  • DBIx::Class 次の一歩(←いまココ) - daily dayflower

    DBIx::Class にはいくつか興味深いモジュールがあります。 DBIx::Class::PK::Auto 標準で添付されているモジュールです。これについては以前書きました。 DBIx::Class::InflateColumn 標準で添付されているモジュールです。カラムデータとオブジェクト(たとえば DateTime クラスとか)を相互変換できるモジュールです。これを使うと CDBI の has_a で外部クラスを指定した時のようなことができるのかな? DBIx::Class::WebForm Data::FormValidator 等の結果をもとに,レコードを作成したり更新したり(CRUD)することができるモジュールみたいです。でも,実際にはフォームとテーブルが一対一対応してることなんて少ないと思います。ドキュメントも全然書いてないし。なので自分では使わないと思います。 DBIx:

    DBIx::Class 次の一歩(←いまココ) - daily dayflower
    typester
    typester 2006/06/21
    > 非 latin の値をセットすると,同じ値だったとしても dirty になってしまいます
  • 1