タグ

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

  • Java 8 Date and Time API の実践的なチートシートできたよ~ - tokuhirom's blog

    Java8 を使いこなそうとすると、やはり Date and Time API も使いこなす必要がでてくる。 我々 Perl 畑出身の人間からすると、Perl の世界では DateTime/Time::Piece というモジュールが一般的に日付の計算に使われており、iandeth.さんのブログエントリがチートシートとしてよく知られている。このいつも見慣れたエントリの体裁で、一般的な日時の操作を実用的に教えてくれるエントリが欲しくて書いた。 junit のテストケースとして書いてあるので、適当にコピペして QuickJUnit で動作確認するとよい(assertはしてないけど)。 なにかあれば教えていただけるとありがたいです。

  • LL から Java に移行した人がはまりがちなこと - tokuhirom's blog

    こんにちは。Java 初心者です。 Java 初心者、得に LL から Java に来た人にありがちな問題について社内向けに書いたものをオープンアンドシェアさせていただきます。 前提として、我々は Java 8 でガンガン攻めているということをご承知おきください。 また、自分がこの数ヶ月で「うわー。こうしとくべきだったのかー」と気づいたやつをドヤ顔で語っているということにもご注意ください。 【追記】 対象は中規模 B2C の場合です(中規模というのは facebook より小さいという程度の意味です) 例外を握りつぶさないようにしよう Eclipse が生成する以下のようなコードをそのまま残しているケース。 これは言うまでもなく良くないですね。デバッグが困難になります。 try { } catch (IOException e) { e.printStackTrace(); } Perl

    abcb2
    abcb2 2014/11/21
  • Carton 1.0 にアップグレードするときに PERL_CARTON_PATH を設定している人は気をつけようという話 - tokuhirom's blog

    Carton 1.0 では carton exec が cpanfile.snapshot を読むようになっています。 なので、PERL_CARTON_PATH を設定して carton exec していて、current directory に cpanfile がないような場合には Can't locate cpanfile: (cpanfile) というエラーになって乙る場合があります。 このようなケースをさけるために、PERL_CARTON_PATH を設定している人が 1.0 にあげるときには PERL_CARTON_CPANFILE を設定しておいた方が無難です。 なお、PERL_CARTON_PATH は local/ の位置をあらわし、PERL_CARTON_CPANFILE は、cpanfile の位置をあらわす環境変数となっております。

    abcb2
    abcb2 2013/11/16
  • Carton 1.0 時代の Web アプリケーション開発フロー - tokuhirom's blog

    Carton 1.0 がでたところで、Web アプリケーション開発のフローを一度見直しておきたい、そんな人も多いでしょう。 そんな方のために僕のやりかたをまとめました。各社、議論の叩き台にしていただければよろしいかと存じます。 もっとも重要なことは、、 Carton を使うときに、僕が最重要だと思うことは、できるだけ番環境と開発環境の環境をそろえるということです。CPAN モジュールが番と開発でバージョンちがうから挙動がちがってた!! なんてのは時間の無駄ですし、よくないことですからね。 ですから、各開発環境と番環境をできるだけそろえることを意識していきたいとおもいます。 DarkPAN は使ってない そんなに DarkPAN 的なのを使うほど、DarkPAN 的なオレオレモジュールがないので、git submodule で管理しています。 【201308061241update】

  • Harriet ー テストのときつかうにデーモンの取扱を簡単にするためのフレームワーク - tokuhirom's blog

    https://github.com/tokuhirom/Harriet/https://metacpan.org/module/TOKUHIROM/Harriet-0.01/lib/Harriet.pmテストのときにつかう mysqld, memcached, stf, groonga あたりのデーモンを、.t 単位で起動していては遅くてかなわない。かといって、あらかじめ起動させておくというのも。。 というわけで prove のプラグインとしてよしなにする、みたいなのをがんばってかく、というような試みがおこなわれてきたわけですが、どうもめんどくさい。 なんか適当にやったらうまくうごく、っていうかんじのカジュアルなツールがほしいな、なんておもったりするわけですよ そこで、Harriet ってのをつくってみました。 なんかこう、t/harriet/mysqld.pl っていうファイル名でこん

  • ウェブサービスのクライアントライブラリやHTTPをつかったミドルウェアのクライアントを作成する際に気をつけるべきこと - tokuhirom's blog

    ウェブサービスのクライアントや、Net::Groonga::HTTP のようなミドルウェアのクライアント、いろいろありますが、HTTP サーバーへの簡単なアクセスを提供するライブラリをつくるときに僕が気をつけていることをここに記す。みんな気をつけたほうがいいです。 HTTP Client Library の引数を変更できるようにするか、HTTP Client Library のインスタンスをさしかえられるようにする変更できないライブラリとか利用価値がないです。。 タイムアウトの設定もかえられないライブラリとか、たまにありますが、ちょっとひどいですね。 生のレスポンス情報がとれるようにするHTTP::Response なり Furl::Response なりをそのままとれるようにすべき。 たとえば、$client->last_response のようなメソッドを用意し、最後のレスポンスオブジ

  • Why does Amon2 generates .psgi file, but Mojolicious does not generate it? - tokuhirom's blog

    素朴な疑問Amon2はpsgiファイルが雛形でつくられるけどMojoliciousではgenerate appで何故つくられないんだろ?。 — dokechin (@dokechin) February 28, 2013 Amon2 は Plack/PSGI のツールチェーンを利用した開発を推奨し、CPAN を使いこなした開発を行うことを目標においています。 一方、Mojolicious の場合は、すべてを内包し、サーバースクリプトなども用意する方針だからです。 (Plack の上で動かすことも勿論可能ですが、それはメインではなくサブだとおもう) 【in English】 Amon2 loves CPAN toolchain includes Plack, PSGI, etc. Then, there is no reason to support .psgi style. But Moj

    abcb2
    abcb2 2013/03/02
    mojoliciousのアプリをpsgiに直すのが手間だった。
  • 2013年 のPerl5 の OOP について考える - tokuhirom's blog

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

    abcb2
    abcb2 2013/01/15
    一周した感じなのかな。。
  • PhantomJS + Selenium::Remote::Driver でスクレイピングをこころみる - tokuhirom's blog

    PhantomJS といえば、WebKit を headless でうごかせて便利なやつですが、PhantomJS 1.8 から Ghost Driver がくみこまれるようになりました。 わかる人むけにかくと「JSONWire Protocol をサポートする httpd が phantomjs にくみこまれた」ということです。 GhostDriver は WebDriver Wire Protocol の1実装です。で、そのクライアントライブラリとして Selenium::Remote::Driver が CPAN にあがっていますから、これをつかって簡単に phantomjs とやりとりができます。 Selenium::Remote::Driver という名前のとおり、Selenium もつかえますんで、selenium をつかって、対応しているブラウザでのテストもできるのがいいかん

  • 【Important】Furl 0.42 was released, this change may breaks your code if your code is wrong. - tokuhirom's blog

    Today, I released Furl 0.42. It contains small but important change, suggested by gfx. Furl::HTTP no longer loads Furl.pm by default. If you load only Furl::HTTP and use Furl->new(), it makes exception. This change is not affects to your code, if you write correct code. But if your code is wrong, it breaks your code. Take carefully. Thanks.

  • 複数ホストに ssh しながら tail -F するときにはこうしたらどう? - tokuhirom's blog

    いろいろ方法があるとおもうのですが、以下のようなシェルスクリプトですませるのはどうでしょうか? #!/bin/bash function kill_children { # jobs -l | perl -ne 'print "kill $1\n" if /^\S+?\s+(\d+)/' | sh; pkill -P $$; wait; } trap "kill_children" EXIT HOSTS="192.168.1.1 192.168.1.2" for host in $HOSTS do ssh $host tail -F /service/foo/log/main/current & done wait ちょっと箇条書きで解説すると以下のようなことをおこなっています。 & でバックグラウンドジョブをはしらせるwait でそれらの終了を待つtrap 〜 EXIT は atexit

  • Testing Web Application 2011秋 - tokuhirom's blog

    とにかく楽に、お気軽に。お気軽にテストを追加できて、お気軽にテストを実行できる。というのがなによりも重要です。 追加しようとおもったときに「どう追加したらいいかわからない」という状況になりがちなので、あらかじめいろいろな構成要素ごとにテストをひととおりかいてみるというのも重要だとおもいます。O/R Mapper のクラスのテストとか、model のテストとか、コントローラのテストとか、JSON API のテストとか。。 ExtUtils::MakeMaker でテストをうごかさないExtUtils::MakeMaker を素でつかうと blib/ とかつかってきてうざいので、Makefile.PL に以下のような hack をほどこしてあります。ウェブアプリケーションで blib/ とかにコピーする必要ないですよね。実運用でも blib/ でうごかさないし、インストールもしませんし。 #

  • 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

  • Perl5 の今後の発展についてのアレ - tokuhirom's blog

    http://mtl.recruit.co.jp/blog/2011/08/ye2011-day3.html use v5.14; の意味が “Anything newer than 5.14.0 would be great!” だったのが use v5.16; からは “I want a Perl 5 that works like 5.16” にかわるという話で、これは非常におおきい変化だといえます。 要は、今後は incompatible change がレキシカルコンテキストにたいしておこなわれるということです。とはいえ、その変化というのは劇的におこなわれるものではなく、いままで互換性の Perl 5 の流れを踏襲します。ただ、今まで互換性のためにのこしてあった機能が v5.30 ではつかえなくなったりします。でも use v5.14; とかけば今の perl がつかえます。そん

  • tokuhirom blog

    Amon2::DBI からはじめるデータベースアプリケーション 〜 軽量フレームワークAmon2入門 (5) 〜 はい! というわけで3連休あけですね。 Ruby 会議にいったり、Android なんとかにいったり、リア充生活をおくったりと、各自たのしい3連休をすごされたことかとおもいます。 さて、連休あけの今日は、かるく Amon2::DBI について解説をしてきましょう。 Amon2::DBI は、DBI の薄いラッパーで「素の DBI だとちょっと不便だな」というところにピリリときいてくる山椒のような存在です(ちかくのチンマーハンは山椒がきいてなさすぎるので、もうちょいきいてるといいなとおもいます)。非常にうすいラッパーだし、コードベース自体も非常に簡潔なので、ひととおりよんでからつかうといいかとおもいます。 DBI には子クラスを設定できる機能があって、Amon2ではそれをつかって

    tokuhirom blog
  • tokuhirom blog

    インストール今回は Amon2 の最新版が必要なので、すでにインストールしている場合でもあらためてインストールしてください。 環境は OSX, linux を想定していますが、Windowsでもそれほどかわらないかと思います。Windows でやっていてわからなかったら mattn さんにきいてください。 さて、Amon2 のインストールは非常に容易です。Amon2はCPANにリリースされていますから、通常のCPANモジュールと同様にcpanmコマンドでインストールできます。 % curl -L http://cpanmin.us | perl - Amon2 Amon2::DBIで、インストールが完了します。テストに失敗する場合には、コメント欄などできいてください。 TinyURLを作るぐだぐだとかたっていても何もつたわらないと思うので、チュートリアルに入りましょう。 とりあえず、簡単で

    tokuhirom blog
  • tokuhirom blog

    PSGIとPlackと 〜 軽量フレームワークAmon2入門 (3) 〜 さて、今回は裏をかいて、いったん題のAmon2の話からはずれて、PSGI/Plackのはなしをしましょうかね。 PSGI/Plackは基的にはアプリを書く人は知る必要はあまりないのですが、概念ぐらいは知っておくにこしたことはない、というところです。 さて、数年前のYAPCでわたくしが口を酸っぱくして申し上げたことを皆さんはおぼえているでしょうか。そう、一番大事なのは「PSGIは仕様。Plackは実装」ということなのでした。ここだけ把握していれば十分なので、PSGI/Plack の詳細に興味がない人はブラウザの Back ボタンを連打してください。 PSGIってなんだ?PSGIとは「ウェブアプリケーションとアプリケーションサーバーの間のプロトコルのこと」です。Perlの基的なデータ型であるArrayRef, Ha

    tokuhirom blog
  • tokuhirom blog

    Amon2のアーキテクチャまずはこちらの図をごらんください。 Amon2 の構造は非常に単純であることをご理解いただけたかとおもいます。基的な構造はこれがすべてなのです。なにしろ、できるだけおぼえることがすくなくなるように意図して設計されておりますから、こういうシンプルな構造になるのもあたりまえといえましょう。 ここで特徴的なところが二点あります。Web Context Object が Context Object を継承しているところ、レスポンスオブジェクトが has-a 関係ではないところです。 Web Context Object が Context Object を継承しているのは、CLI でもなんとなくつかえるようにするためです。この工夫により CLI での開発が異常に楽になっています。このあたりについてはおって解説したいとおもっています。 レスポンスオブジェクトが has-

    tokuhirom blog
  • tokuhirom blog

    Amon2の利点 〜 軽量フレームワークAmon2入門 (1) 〜 というわけで、私が中心となり開発を進めているウェブアプリケーションフレームワークであるところのAmon2に関する連載企画です。続くかどうかはわかりませんけど! 対象読者はウェブアプリケーションの開発の基礎知識はあり、Perlプログラミングを一通り理解していることを前提としています。 Amon2とはAmon2は、ウェブアプリケーションフレームワークです。ウェブアプリケーションフレームワークというのは、ウェブアプリケーションを書くために楽をするためのライブラリと、それに関するツール一式のこととここでは定義しましょう。 そう、Amon2を使えば非常に楽に、高速に、ウェブアプリケーションを開発できてしまうのです。 なぜAmon2なのかしかしウェブアプリケーションフレームワークとひとくちにいっても、Perlだけでも、数え切れないほど

    tokuhirom blog
    abcb2
    abcb2 2011/07/13
    テストコード眺めて使ってみたいと思えた。Catalystはどうも敬遠しがちになってしまう。
  • Data::Recursive::Encode を書いた話 - tokuhirom's blog

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