タグ

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

  • 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
  • 図解: 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
  • 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
  • breakttc を Perl で書いてみた - daily dayflower

    TTC ファイルを分割するためには BREAKTTC.EXE という Microsoft 製のソフトウェアがあるのですが,今は公開されてないようですし,いちいち Windows を立ち上げるのも面倒です。TTC の構造については仕様が公開されているので Perl で書いてみました。 non seekable なストリームから読み込みできるようにするために汚いコードになってしまってます。 分割するだけなら楽なんですよね。結合するのは,各テーブルの内容を比較しないといけないので面倒。まして non seekable stream だと事実上無理じゃないかなぁ。 #!/usr/bin/perl use strict; use warnings; use Getopt::Long; use POSIX qw( ceil ); use File::Spec::Functions qw( :ALL )

    breakttc を Perl で書いてみた - daily dayflower
  • フィボナッチ数列を計算する Apache モジュール - daily dayflower

    フィボナッチ数列を計算するのが流行っていると聞いて飛んできま……あれ別に流行ってないんですか。そうですか。 せっかくなので,上位の引数の結果を計算するために*1,サブリクエストという機能を使ってみました。サブリクエストというのは SSI とかの #include virtual に代表されるような,ハンドラの中から同一サーバのリクエストをもう一度投げてその結果を取得する,という機能です。 あくまで同一サーバ内でリクエストをあれこれするだけなので PHP のリモートファイル機能と違って分散処理ができるわけではないのですが*2。 通常のハンドラとして実装したので楽に出来るだろうと思ったんですが結構大変でした。 サブリクエストはデフォルトでイニシャルリクエスト(メインリクエスト)と出力を共通とする(下記参考文献参照) なので output_filter を NULL でサブリクエストを投げるとそ

    フィボナッチ数列を計算する Apache モジュール - daily dayflower
  • URI.pm っぽいモジュール名用クラス - daily dayflower

    を考えてみました。 use Module::Class; Module::Class->module('CGI')->require or die $@; それ UNIVERSAL::require (ry というのは冗談ですが # with Module::Class::Plugin::Module::CoreList; print Module::Class->module('File::Spec')->first_release(); みたいにプラグインで拡張できるもの。 なぜ Module::Name という名前じゃないかというと Module::Class->modules(qw( CGI HTTP::Request ))->require() or die $@; Module::Class->module('HogeHoge')->findsubmod()->require(

    URI.pm っぽいモジュール名用クラス - daily dayflower
  • CPANPLUS 0.79 が Crypt::OpenPGP を要求する。 - daily dayflower

    んで,Crypt::OpenPGP のインストールが結構困りものなので自分用メモ。 まっさらな Perl-5.8.x な環境があったとして,まずは cpan で(気休めとして)Math::BigInt, Math::BigRat, bignum の最新版をいれておきます。 そして Math::BigInt::GMP をインストール*1。なぜこれをいれとくかというと,次でインストールする Crypt::DSA, Crypt::RSA とかで bigint を利用してるんですがそのテストに時間がかかるからです。 次に Crypt::RIPEMD160 をインストールします。なんでわざわざ独立してこいつをいれるかというと,x86_64 などの 64 bit アーキテクチャだと正しいハッシュを生成してくれないから(⇒【Bug #19138 for Crypt-RIPEMD160: unsigned

    CPANPLUS 0.79 が Crypt::OpenPGP を要求する。 - daily dayflower
  • 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
    seamlessbias
    seamlessbias 2006/11/17
    ぽえー。
  • PoCo::HTTP で Comet チャットサーバを作る - daily dayflower

    せっかくのイベントドリブンフレームワークな POE ですから Comet でチャットをやってみようかと。ありきたりですが。 POE::Component::* でウェブサーバを立ち上げられるのは現在のところ, POE::Component::Server::HTTPServer POE::Component::Server::SimpleHTTP POE::Component::Server::HTTP の3つがあります。1番目は最近 inactive なのでパス。2番目は「イベントフレームワーク」への馴染みはいいんですが「Simple」じゃなくなってます。3番目はコールバック関数を登録するというお気楽スタイルなんですがちょっと雑な感じ。 今回は楽をするために3番目の PoCo::HTTP を使ってみたいと思います。id:naoya 氏も最近紹介してましたし。 URI の設計指針は, チャ

    PoCo::HTTP で Comet チャットサーバを作る - daily dayflower
  • Unicode::Normalize で遊ぶ - daily dayflower

    Unicode の規格では,文字の合字(リガチャ等)等を統一的に扱えるように,「正規化」という処理が仕様として定まっています。この正規化処理のうち「互換性分解」という処理を行うと副作用として半角カナを全角カナに変換できます(逆に全角カナ→半角カナはできません)。 #!/usr/bin/perl use strict; use utf8; use Encode; use Unicode::Normalize; my $src = 'ポンジュース'; my $dst = Unicode::Normalize::NFKC($src); print Encode::encode('utf8', "${src} => ${dst}\n"); # OUTPUT is: ポンジュース => ポンジュースUnicode の正規化についてはperl5.8のUnicodeサポート および http:/

    Unicode::Normalize で遊ぶ - daily dayflower
  • 1