タグ

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

  • 郵便番号データは自分で加工しない - daily dayflower

    結論を先に。 細かい要件がない場合,zipcloud さんの提供している加工済データを使う (日郵便さんの提供している原ではなく) ライセンスが不明だけど Web API の利用規約とかみると商用利用等も OK と思われる わりきって Web API を使う (よそにまかせる) というのも手かも いろいろあるし。前述の zipcloud さん自身も検索 API を提供している。 以下各論。 いわゆる ken_all.csv を (必要フィールドだけ) そのままデータベースにつっこむなんてのは (わかってやってる場合はともかく) やってはいけない 複数行に分割されているレコードがあるため,マージする必要がある 明文化されていない仕様などがありマージやクリーニングを自力でおこなうのは大変 (バッドノウハウのかたまり) 参照: http://www.f3.dion.ne.jp/~elemen

    郵便番号データは自分で加工しない - daily dayflower
  • 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
  • rsync で pdumpfs みたいなことをする - daily dayflower

    いままで履歴つきのバックアップは pdumpfs*1 でとっていたのですが,rsync のオプション(--link-dest)を使うと同等のことをできるらしいと知りました。 バックアップにrsync --link-destを使うと良い場合もあるよ | rutoの日記 | スラド rsyncで差分バックアップを行うための「--link-dest」オプション - ITmedia エンタープライズ サンプル バックアップ元のファイル群をサンプルとして作成します。 $ mkdir -p work/src/foo $ echo "baz" > work/src/foo/barこれで, - work/ - work/src/ - work/src/foo/ - work/src/foo/barのような構造ができました。これのバックアップをとっていきます。 まずは普通に rsync 履歴つき(差分)バッ

    rsync で pdumpfs みたいなことをする - 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
  • 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
  • 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
  • こんなテンプレートエンジンほしい - daily dayflower

    なぜ、いちいちエスケープを手動で指定しなければいけないのか 文脈によって、自動的にエスケープ手法は決定できるはず と思ってます。 テンプレートエンジン作りたい - kazuhoのメモ置き場 ですよねー。 で,そのへんを自然に取り込んでいるのが,おもに Python 方面で人気のある XML ベースのテンプレートシステムだと思います。 実際,Genshi のドキュメントにも The main feature is a template language that is smart about markup: unlike conventional template languages that only deal with bytes and (if you're lucky) characters, Genshi knows the difference between tags, att

    こんなテンプレートエンジンほしい - daily dayflower
  • jQuery でページスクロール - daily dayflower

    jQuery 1.2 以降だと scrollTop(と scrollLeft)という疑似スタイルが利用できるようになったので,jQuery UI を使わずとも,jQuery Core 体だけでページ内スクロールができるようになりました。 たとえば, <html> <body> <p> blah, blah, blah, ... blah, blah, blah, ... </p> <p> <a href="#" id="link_to_top">ページの先頭へ</a> </p> </body> </html> このような HTML で「ページの先頭へ」というリンクをクリックしたときに,スムーズにスクロールしたいのなら, $(function () { if (! $.browser.safari) { $('#link_to_top').click(function () { $(thi

    jQuery でページスクロール - 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
  • mod_perl 2.0 での2種類のハンドラ modperl と perl-script - daily dayflower

    mod_perl 2.0 では,SetHandler で指定するハンドラタイプとして,modperlperl-script の2種類があります。この違いは何なんだろうと思い,mod_perl のドキュメント を読み込んでみました。 おおざっぱにまとめると,一般的に使うべきなのは perl-script タイプで,mod_perl のヘルパが便利なようにいろいろ設定してくれてます。たとえば, $ENV{QUERY_STRING} や $ENV{REMOTE_ADDR} 等の環境変数を設定してくれている STDOUT や STDIN を読み書きすることで,CGI としての入出力ができるようにしてくれている などですね。 ですから, $ENV{REMOTE_ADDR} 等は,$r->connection()->remote_host() 等使って自力で取得するし 出力も $r->print

    mod_perl 2.0 での2種類のハンドラ modperl と perl-script - daily dayflower
  • Google Apps 用 tinydns の設定 - daily dayflower

    2008-05-23 追記: example.jp に CNAME を設定していたため MX 参照が失敗していました。ごめんなさい。 個人で持っているドメインを Google Apps で使えるように tinydns を設定しました。ほんとは djb products あんまり好きじゃないんですが,知り合いのネームサーバを間借りしたのでやむなく。Google さまネームサーバのホスティングもやってくれないかなぁ。 自分用メモなので内容については一切無保証です。設定をのちのち変えるのが面倒&alias domain mail を使いたかったのでワイルドカード DNS を使用しています。ドメインのすべてを Google におまかせしてもいい&最悪メールのやりとりができなくなってもいいという方以外おすすめできません。 example.jp というドメインで Google Apps を使う ネーム

    Google Apps 用 tinydns の設定 - 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
  • 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
  • daily dayflower - Spreadsheet::WriteExcel でデフォルトフォントが Arial なのがイヤだ

    こんな悪いことするといかにも日Excel なファイルができました。 use utf8; use Spreadsheet::WriteExcel; use Spreadsheet::WriteExcel::Format; my $book = Spreadsheet::WriteExcel->new('foo.xls'); my $default_format = Spreadsheet::WriteExcel::Format->new( 15, # default font font => 'MS Pゴシック', size => 11, ); $book->{_formats}->[15] = $default_format; my $sheet = $book->add_worksheet(); $sheet->write(0, 0, 'ほげほげ'); $book->close()

    daily dayflower - Spreadsheet::WriteExcel でデフォルトフォントが Arial なのがイヤだ
  • mod_perl と Perl インタプリタプール - daily dayflower

    前々回も書きましたが,worker MPM で mod_perl を使うと,インタプリタプールなるものが作成されます。このインタプリタプールというのはまさに Apache におけるプロセスプール(prefork MPM の場合)やスレッドプール(worker MPM の場合)の Perl インタプリタ版のようなものです。 このインタプリタプールでの PerlInterpMax(総数の最大)はデフォルトで 5 になっています。ですから,「prefork MPM から worker MPM にしたらメモリ消費量がガツンと減ったぜ!httpd の thread 数 150 でぶんまわしてるのに!スレッドマンセー!」とぬか喜びしていると,実は Perl は並列に 5 つしか走っていなかった,ということがありえます。 2007/09/27 追記。adiary 作者さんからトラバいただきました(⇒Pe

    mod_perl と Perl インタプリタプール - daily dayflower
  • mod_perl 2.0 on worker MPM の特性 - daily dayflower

    だらだらと3日にわたって書いてきましたが,明日から遅めのお盆休みになるのでまとめをメモ書きしておきます。 worker MPM での mod_perlPerlithread を使っている httpd のスレッドプールとは独立して Perl インタプリタプールが存在する Perl インタプリタプールの最大インタプリタ数などは設定で変更可能 デフォルトで最大 5(少ない!) インタプリタプールはインタプリタのステート保持構造体のプールであり,インタプリタスレッドのプールではない(実行時アタッチ)←ちょっと推測 だから httpd のスレッドプールのスレッド数より多くも少なくも設定できる インタプリタ数が足りなくなったときは空きがでるまでブロックする Perl ithread では変数は TLS (スレッド間で独立したロケーション)に保持され,基的にスレッドセーフ 他インタプリタス

    mod_perl 2.0 on worker MPM の特性 - daily dayflower
  • daily dayflower - 複数ファイルの文字列置換

    あるディレクトリ内にあるファイルすべての文字列を置換したいことはよくあります。Windows だったら適したフリーウェアがいくつかみつかりますが*1,Unix だとパイプ文化だからかこれといった定番がありません。 find と sed とシェルスクリプトを組み合わせればなんとかいけるのですが(どこがパイプ文化やねん)これまで Perl で Path::Class 使ったりしたスクリプトをいちいち書いていました。 定番たる書き方ないかなぁと思ってネットを漁ってたらすばり情報がありました。 UNIXコマンドの質問です。 あるディレクトリ以下の、ある拡張子… - 人力検索はてな http://www.stackasterisk.jp/tech/program/perl04_04.jsp Perl のワンナイラーは敬遠してたんですがこれはさすがにいいなぁと思いました。オプション「-i」,覚えておこ

    daily dayflower - 複数ファイルの文字列置換
  • もう CPANPLUS は使わなくてもいいのかも - daily dayflower

    今まで CPANPLUS を使っていた理由は root 以外のユーザが使った場合,インストール時に sudo してくれる インストール済みのモジュールで cpan にさらにあたらしいものがあるかどうか調べることができる モジュールのアンインストールできる モジュールの古いバージョンを検索してインストールしたりできる だったんですが,最近の CPAN.pm って 1, 2 あたりはできるようになってるんですね(がんばれば 3 もできます⇒cpan で古いバージョンのモジュールをインストールする方法 - daily dayflower)。あと force だけじゃなくて fforce や notest とかコマンド指定できるようになってます。 なので, root で最新の CPAN(Bundle::CPAN じゃなくて)をインストール 一般ユーザでインストール時に sudo を使うように設定

    もう CPANPLUS は使わなくてもいいのかも - daily dayflower
  • 永続化Perlでモジュールの再読み込み ⇒ Module::Refresh - daily dayflower

    mod_perl や PersistentPerl (a.k.a. SpeedyCGI) など Perl インタプリタを永続化させる仕組みのものは*1,一度読み込まれたモジュールは,その後ファイルが変更されたとしても自動的に再読み込みしてくれたりはしません。mod_perl では Apache(2)::Reload というモジュールがあり,そのような場合でもうまくとりはからってくれます。 で,かつて PersistentPerl でも同じようなことができないかと思って苦闘したことがあるのですが(SpeedyCGI と module reload - daily dayflower),最近ふと CPAN を漁っていて Module::Refresh なるものがあることを発見しました。Jesse プロダクトです。 This module is a generalization of the f

    永続化Perlでモジュールの再読み込み ⇒ Module::Refresh - daily dayflower
  • cpan で古いバージョンのモジュールをインストールする方法 - daily dayflower

    m コマンドでモジュールの情報を調べます。 $ cpan ... snip ... cpan[1]> m DBIx::DBSchema Module id = DBIx::DBSchema DESCRIPTION Database-independent schema objects CPAN_USERID IVAN (Ivan Kohler <ivan-pause@420.am>) CPAN_VERSION 0.33 CPAN_FILE I/IV/IVAN/DBIx-DBSchema-0.33.tar.gz UPLOAD_DATE 2007-06-29 DSLIP_STATUS bmpOp (beta,mailing-list,perl,object-oriented,Standard-Perl) INST_FILE (not installed) 現在のメンテナの PAUSE ID が

    cpan で古いバージョンのモジュールをインストールする方法 - daily dayflower