タグ

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

  • 安定的な Perl アプリケーション運用のための perlbrew 運用テクニック - tokuhirom's blog

    前提知識Perl5 は minor version 間ではバイナリ互換性が保証されているPerl5 の minor update では、bug fix しか基的に行われないPerl5 Porters の保守的さ度合いは信用できるperlbrew でセットアップするときに気をつけることインストール名をデフォルトの perl-5.16.3 などとせず、perl-5.16 と minor version を含めないようにする。 例: perlbrew install perl-5.16.2 --as perl-5.16セキュリティフィックスがでた場合の処理chromaticの記事で知ったのだが、perlbrew には upgrade-perl というコマンドがあり、最新のバージョン(マイナーアップデートのみ)にアップグレードすることが簡単にできる。 perlbrew upgrade-perl

    nipotan
    nipotan 2013/03/13
  • life - tokuhirom's blog

    I was laid off by last employer at June 2011. I got a new Job from July, 1st, 2011. I'm still writing perl5 code.

  • 都道府県別環境放射能水準調査結果をscrapingするの法 または PDF をスクレイピングするの法 - tokuhirom's blog

    http://www.mext.go.jp/a_menu/saigaijohou/syousai/1303723.htm このあたりからデータを取得できるわけだが、なぜか PDF なので、うんざりする。 こんなもんどうみても excel かなにかでつくってるんだから生データを提供しろといいたい。 まあ文句をいっていてもしょうがないので、こういう PDFスクレイピングする方法について解説する。 pdftotext などのコマンドをつかうのがオススメ。今だと、poppler というライブラリが日語もあつかえてすばらしすぎるので、これをつかうとよい。これは Perl/Python/Ruby のバインディングがあるので、それをつかってもよいがこういう場合、ライブラリなどでがんばって PDF を解析するのはわりと時間の無駄となる場合がおおい。 poppler は homebrew で一発インス

    nipotan
    nipotan 2011/03/18
  • Perl でつくった web サイトを L10N する方法 - tokuhirom's blog

    Perl でつくった web サイトを L10N する方法について簡単に説明します。今回は、日語のサイトを英語でも表示できるようにするケースをあつかいますよ。今回は L10N の対象は Amon2 をつかったサイトとします。 基的な翻訳機能は Locale::Maketext::Lexicon を利用します。これはなんだかんだで出来がいいのでいいとおもいます。他にもいろいろあるけど、これが一番実績もあるし安定しているようにおもいます。また、一時期はメンテが放棄されてましたが、最近またメンテされるようになったようです。 メッセージのマークアップでは、まず、Perl コード中の日語のリソースを $c->loc(); でくくりましょう。 printf("ほげ\n"); みたいになってるところを printf($c->loc("ほげ\n")); みたいにするってことです。 つぎにテンプレート

    nipotan
    nipotan 2011/02/24
  • YAPC::Asia 2010 おつかれさまでした! - tokuhirom's blog

    larry wall さん, obra さん, miyagawa さんという3人の豪華なメインスピーカー、東工大の綺麗で広い会場、そしてよい天気にめぐまれ、今年の YAPC も無事におわりましたね! あの会場の魅力の一つは、あの広い芝生にねっころがってみんなで話すことなので、天気がよかったのは当によかったです。今年は王将で餃子をかってきてみんなで芝生でビールをのみながらいろいろはなせておもしろかったです。 YAPC って、トークをきくのももちろんたのしいし勉強になるんだけど、いろんな人と気軽にはなしたりするっていう、そういうのも重要だよね、とおもうので、毎年芝生でだべってます。どうしてもトークだと 1対多になってしまいますので。 さて、今回は yusukebe 主催の前夜祭にはじまりましたが、ここでは僕は Amon2 のお話をさせていただきました。大枠では、WAF をつくるための道具をこ

  • リアルタイムWebのためのPubSubHubbub の Subscriber を構築する方法 - tokuhirom's blog

    PubSubHubbub(以下PuSH)は、フィードの更新をリアルタイムに通知するためのプロトコルである。 ウェブ上にころがっている"PuSH"の情報は、"Pub" の部分を実装する方法か、「PubSubHubbub の家GAE実装を手元でうごかしてみたよ」という記事しかなくて、"Sub"を実装する方法について解説しているブログなどはみあたらなかったので、ここに記す(英語だといくつかあった)。 基的に、ほとんどの人が興味あるのは "Pub" の部分である。自分のブログの更新情報等をリアルタイムにおくりつけたいと考えるからである。実際、ほとんどのブログソフトウェアではすでに PuSH 対応がすんでいる。see MT-PuSH, etc. しかし、私は今まさに Subscriber をつくりたいとおもったのである。なぜならば、"friendfeed.com/cpan" の更新情報を PuS

  • multiperl は素人がつかう必要がない件について - tokuhirom's blog

    的に Perl5 は下位互換性が非常によく保持されていますから、use 5.10; などによる縛りをかけないかぎり、「過去バージョンでうごくのに最新のバージョンだとうごかないよう」ということはまずありません。 もしあれば、それは perl5 のバグです。(perl5.10.0 はかなり大幅に書きかえられているので、エッジケースでごくまれにこういうバグを踏みぬく可能性があります) 「最新バージョンでうごくのに、過去のバージョンでうごかないよう」というケースもまずありません。use 5.008001; としているモジュールでは、ほぼほぼ互換性が問題になることはありません。 5.8.5 以前で sub import { } の中で @_ を変更してから goto すると SEGV する*バグ*とか、そういう既知バグを踏む可能性があるぐらいです。 そのへんは perl\d+delta にのって

    nipotan
    nipotan 2010/03/05
  • それでも私が Perl5 を使いつづける理由または、Why I still use Perl5? 的な。 - tokuhirom's blog

    Fast Enoughもっとはやいといいな、とおもうときはあるけど、他の LL とくらべても速い部類。 Reference Counter であるXS かくときとかにはめんどくさいけど、RAII っぽく書けるとか、開放のタイミングがわかりやすいとか、利点もおおい。 スコープぬけたときに開放されることが保証されてるので、メモリ使用量とかが読みやすいのもいいなーと。

    nipotan
    nipotan 2010/01/20
  • Perl Monger は Test::More の subtest が便利すぎるので頭にいれておくべきだと主張したい俺がいる件 - tokuhirom's blog

    Test::More の 0.94以後(2009-09-02)では subtest という機能が導入されており、これが非常に便利なのだが意外と利用されていないようなので、ちょっと宣伝させてもらいますね。 以下は Data::Recursive::Encode のテストケースなのだが、似たようなケースが頻出するわりに、抽象化するのが面倒だし、わけわからなくなること必至であり、かつまた、こんなものを複数のファイルにわけていてはメンテナンスが面倒なことは考えるまでもない。 チミチミと似たような数行のテストをかいたファイルを複数つくるぐらいならば、このように subtest の利用を考えるべきだとおもう。 ただし、これも他のツール同様、なんにでも適用すればいいというものではなく、使い方をまちがえれば、関係ないものがゴッチャリはいった .t ができあがるので注意するべきだろう。 use strict

  • Data::Recursive::Encode を書いた話 - tokuhirom's blog

    Data::Visitor::Encode というモジュールがあって、複雑なデータ構造の中にはいっているデータを操作するには大変便利です。 私は mobirc という IRC2HTTP gateway を開発しているのですが、こちらはユーザの環境にインストールしてつかっていただくソフトウェアであるという関係上、XS に依存したくありません。 しかし、やたらと依存モジュールが多く、得に XS が必須であり、かつまたメモリを大く消費してしまうのが難点です。また、ソースコードが複雑で、なにかあったときに読む気がしないというのも難点です。これらの欠点は、質的には Data::Visitor の問題点であって、Data::Visitor::Encode の問題ではないのですが、依存している以上、どうしようもないことです。また、Data::Visitor は内部実装がコロコロかわることでも有名であり

    nipotan
    nipotan 2010/01/20
    そういえば、U::RD いじってて気付いたんだけど、最近リファレンスのリファレンス \\$data みたいなのは UNIVERSAL::isa() で REF ってなるね。
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    nipotan
    nipotan 2009/08/25
    この方法知りたかった
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    nipotan
    nipotan 2009/06/01
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    nipotan
    nipotan 2009/04/02
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at