タグ

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

  • Perl 初心者がウェブアプリケーションを書く時に気をつけるべきこと - tokuhirom's blog

    $c->req->param('id') みたいなメソッドは使ってはいけない。これは歴史的経緯から残っているものなので、基的に使わない方がいい。 $c->req->parameters->{id} をかわりに使ってください。 Perl の世界には List コンテキストというものがあって、これがウェブアプリケーションを開発するときには鬼門となります。 +{ id => $c->req->param('id') } のようなコードは、param メソッドはリストコンテキストではすべての id を返すので、 ?id=3&id=hasegawa&id=yosuke というようなクエリが来ている場合、 +{ id => 3, hasegawa => 'yosuke' } のようなデータ構造が作成される。これは明らかに意図していない挙動である。 以下の様にかくのがおすすめです。 my $id =

    shiban8y
    shiban8y 2014/09/11
  • Minilla を用いた Perl モジュールの作り方 - tokuhirom's blog

    http://shanon-tech.blogspot.jp/2013/05/perl.html Perl モジュールの作り方、2013年においては Authoring tool をつかって作るのがよいです。具体的には Minilla でつくるのがオススメであります。 perlbrew なり plenv なりで perl をいれたあとは、 % cpanm Minilla として Minilla をインストールします。 % minil new Foo とすると、Foo.pm のスケルトンができあがります。作者の名前などは ~/.gitconfig などから自動的にさがしてきますので、設定不要です。 できあがったディレクトリは以下のような形になっています。 Foo ├── Build.PL ├── Changes ├── cpanfile ├── lib │   └── Foo.pm ├──

    shiban8y
    shiban8y 2013/06/04
  • Emacs で一人 Twitter - tokuhirom's blog

    Emacs で一人 Twitter Day One で一人 Twitter しよう、みたいなエントリをたまにみるんだけど、正直 Day One の iPhone アプリはつかいづらいし、なんか day one の mac アプリもなんかいちいちひらくのが面倒でつかってなかった。 そこで、われわれのような Emacs 厨は常時 Emacs を開き、その中で一生の大部分をすごしているので、emacs でひとり twitter っぽくしようと考えた。 change-log-mode をちょっと改造して、ささっと設定。いいかんじである。 見た目は ↓ のようなかんじ。 --- /tmp/zshdRLJOW 2012-07-24 11:50:43.060566000 +0900 +++ .emacs.d/elisp/hacked-add-log.el 2012-07-24 11:43:53.7125

  • ふと思いたって、emacs の設定を1からやりなおしたの記 - tokuhirom's blog

    久々に Emacs の設定をした。普段は vim をつかっているのだが、日語の長 文を vim で書くのはつらいので Emacs 環境を整備したかったのだ。 (Emacs ですべてを書くと左手の小指が死ぬので、日語のときだけにつかう ことにしている) Emacs の設定は最近は MELPA だか package.el だか el-get だかでやるのが ナウいらしいのだが、どうちがうのかよくわからない。いろいろと日語の情 報があるのだが、「そもそもどれがなんなのか」というところをあんま説明し てくれてなくて辛い。 いろいろと調べた結果、僕は以下のような結論にたっした。 package.el インストーラ。tar ball とか file を指定すると、それをインストールして くれる。便利。 MELPA レポジトリから定期的にフェッチしてきて、いいかんじに package.el 対応の

  • 【適当訳】Any::Moose は Deprecated です。 - tokuhirom's blog

    【適当訳】Any::Moose は Deprecated です。 http://search.cpan.org/~sartak/Any-Moose-0.20/lib/Any/Moose.pm 新しいコードでは Moo を Any::Moose のかわりに使ってください。 Moo のクラス/ロールは、透過的に、そして正しく Moose にアップグレードすることができます。これは、Any::Moose より根的にいいデザインです。Mouse のメタクラスはMoose のメタクラスといいかんじには動作せんのです。 Any::Moose はよくがんばりました。まあなんかそれなりにはうごいていたけど、もうこれ以上つかわないでね :) MooX::late ってモジュールをつかうと Any::Moose から Moo への移植が楽になりますのでお試しあれ〜。 【解説】 後半にいくにつれて適当度がまし

    shiban8y
    shiban8y 2013/02/13
  • plow というプロジェクトをはじめた - tokuhirom's blog

    plow というプロジェクトをはじめた plow というのは、なんか perl5 をより簡単につかえるようにするというか、お気楽につかいたい気分のときのためのツールです。 https://github.com/tokuhirom/plow/ インストールすると plow コマンドがつかえるようになります。 いくつかの機能がありますので、気がむいた順で紹介します。 まず、一個おおきいのは、repl です。まあ、こんなかんじでつかえます。 % plow plow> 3+2 5 plow> undef plow> undef plow> 3+2 5 plow> undef plow> say "YO!" YO! 1 普通に便利ですね。 Published: 2013-01-25(Fri) 03:16

    shiban8y
    shiban8y 2013/01/29
  • 2013年 のPerl5 の OOP について考える - tokuhirom's blog

    Moo 今年の命? 新しくつくるならこれが無難な気がします。速度的にも Mouse とあまりかわらない。 若干依存がおおい気もするけど、インストールベースがふえれば気にならなくなるかな、ともおもいます。 Class::XSAccessor とかつかってるんで、速度的にもホットスポットは速いのがよい。 なお発音はムーだとおもう。 (http://www.forvo.com/word/moo/) Mouse 完成している感じがする。得にわるい点もないが、あえていうと xs 部分がおおいので、gfx 以外がメンテできないかんじがするのが欠点か。 Xslate をつかっている場合は自動的に xslate が mouse つかってるので、自然と Mouse がロードされるので、そういった意味では Mouse つかってもいいかなとおもっている。 Moose いかんせん、やはり今にいたっても起動速度の

    shiban8y
    shiban8y 2013/01/16
  • Email::Sender will switch to Moo? - tokuhirom's blog

    Email::Sender の TRIAL version が cpan にあがっていますが、なんと Moo に移行しています。Moose をつかっているからという理由で Email::Send にこだわったり、Mail::Krohn とかいう alternative をつくったりする時代の終焉がちかそうです。 Mail::Krohn はつくったはいいけどもう will be deprecated になる気がします。 @rjbs++

    shiban8y
    shiban8y 2013/01/09
  • Testing Web Application 2011秋 - tokuhirom's blog

    Testing Web Application 2011秋 最近の僕のテスティングな日々についてまとめておきますよ。 【前提】 Perl でかかれたウェブアプリケーション 自社開発のウェブアプリケーション 一日に何度も deploy されるレベル フルテストを全員がうごかしているとはかぎらない テストの目的 俺がつくった部分を他の誰かがぶっこわさないかどうかを監視する テストかいてなくてエッジケースで他の誰かがちょっと変更してぶっこわれたりするとダルいですよね。ここでいう他の誰かというのは未来の自分も含みます。 なんども手でうごかすのがダルい部分の処理を自動でテストしたい たとえば API まわりとかそういうのです。ちょっといじってはブラウザでポチポチやるとか、だるい! ってなります。 とにかく楽に、お気軽に。 お気軽にテストを追加できて、お気軽にテストを実行できる。というのがなによりも重

  • Ukigumo - Yet another continuous testing tool - tokuhirom's blog

    Ukigumo - Yet another continuous testing tool http://github.com/ukigumo/ なんか、お気軽につかえて、カスタマイズが容易で、お気楽な continuous testing を support する tool がほしかったので、ちょろっとかいた。 ターゲットは自社サービスの web アプリケーションです。 ベーシックなクラサバ構成となっています。サーバー側は簡単な Web UI と、RPC を提供しているだけで、ごくシンプルです。サーバー側とクライアント側には依存関係はありません。クライアント側はプラガブルな構成となっていて、誰でも簡単にいじれます。 クライアント側は Plagger 風にしようとおもったんですけど、Plagger 風にするといかんせんおおげさになりすぎるので、ライブラリとしての提供にとどめました。べろっと

  • LL脳な人でもこれぐらいは覚えておくとうれしいgdbのつかいかた。または猫でもわかるgdb講座 - tokuhirom's blog

    LL脳な人でもこれぐらいは覚えておくとうれしいgdbのつかいかた。またはでもわかるgdb講座 LLつかってても「ばすえらーになるー」っていう状況ってたまにあるわけですが、LL しか普段つかわないゆとりは、ここでお手あげになってしまったりすることがままあります。 で、「ばすえらーになるんですが」ってときの最低限これだけはやってみたらどうか、という話。「えー、わたし gdb とかわかんないしー」とかいってる人でもこれぐらいならできるんじゃないかなーっと。 perl t/00_load.tというコマンドで segv するという場合、gdb をつかって % gdb --args perl t/00_load.tとうつ。 すると、以下のようにプロンプトがでるので、"run" とうつ。これでスクリプトがはしりはじめる。 % gdb --args perl t/00_load.t GNU gdb (G

  • 最近は local::lib を直接つかわないでもいきていけるという話 - tokuhirom's blog

    最近は local::lib を直接つかわないでもいきていけるという話 wget --no-check-certificate http://cpanmin.us/ perl cpanm -l extlib My::Favorite::Module ってやれば、extlib/ にモジュールをインストールしてくれる。cpanmin.us からとれる script は、コア以外にまったく依存してないので、すぐつかえる。 あとは以下のようにしたらライブラリパスがとおります。 perl -Mlib=extlib/lib/perl5 myscript.pl これで基的には大丈夫だとおもいます。 コード内で表現する場合は以下のように FindBin を使いましょう。 use FindBin; use lib $FindBin::Bin.'/extlib/lib/perl5'; Published:

  • Perl5 によるメール送信 - 実践的な Email::Sender の利用方法 - tokuhirom's blog

    Perl5 によるメール送信 - 実践的な Email::Sender の利用方法 Perl5 では、E-mail の送信をするためのモジュールが多数 CPAN にアップロードされているが、現在もっともまじめにメンテされていて質がよいのは Email::Sender らしい。 Email::Sender は登場当初はドキュメントもなさすぎるしつかいものにならなかったが、現在ではだいぶマシになっている。Moose 依存が気にならないケースでは、実用としてつかっても問題ないとおもう。 iso-2022-jp の日語のメールを送るには、以下のようにすればよい。 use 5.12.1; use utf8; use Email::Sender::Simple qw(sendmail); use Email::Simple; use Email::Simple::Creator; use Data:

  • gearman の worker process にスコアボードをつけてみる - tokuhirom's blog

    gearman の worker process にスコアボードをつけてみる http://d.hatena.ne.jp/tokuhirom/20100201/1264989237 ↑でつくったスクリプトに score board 機能をつけてみた。 で、これかいてからきづいたんだけど、Parallel::Prefork には Parallel::Prefork::SpareWorkers ってのがあるんですね。で、これつかうと score board とかもつかえる。じゃあ、なにがちがうのかなーと。 で、いろいろきいてみたところ 「Parallel::Scoreboard のメリット」は 任意の長さのデータを書ける 監視プロセスとワーカープロセスに親子関係がなくても使える 任意のマネージャーと組み合わせることができる 毎秒1回ポリングとかにはむかない(モニタリングの方は遅いため) ステー

  • How to authenticate with basic auth + htpasswd - tokuhirom's blog

    How to authenticate with basic auth + htpasswd use strict; use warnings; use Authen::Htpasswd; use Plack::Builder; my $app = sub { [200, [], ['OK']] }; builder { my $authen = Authen::Htpasswd->new('user.txt', {encrypt_hash => 'md5'}); enable 'Auth::Basic', authenticator => sub { my ($username, $password) = @_; my $user = $authen->lookup_user($username); return $user && $user->check_password($passw

  • 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

  • Perl で utf8 化けしたときにどうしたらいいか - TokuLog 改メ tokuhirom’s 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

  • 1