タグ

ブックマーク / gfx.hatenadiary.org (28)

  • potatotips #7 at DeNA で Power Assert について発表しました - Islands in the byte stream (legacy)

    potatotips #7 at DeNA を開催しました! 今回も面白い話が多く大変勉強になりました。 さて!私はここ二週間ほど開発していたAndroid Power Assertについて発表しました。 https://speakerdeck.com/gfx/jun-hapower-assertwozhi-tuteiruka-number-potatotips https://github.com/gfx/android-power-assert-plugin まだ出力がイマイチな部分はありますが、とりあえず仕事上の自分のプロジェクトで使い始めました。実際、assertが信頼できるというのはかなり安心感があります。これはもっと使えるように、これからも改善していきたいですね。

    potatotips #7 at DeNA で Power Assert について発表しました - Islands in the byte stream (legacy)
  • PerlでWebAppの開発に必要なN個のこと - Islands in the byte stream (legacy)

    あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずPerlについて知っていることを書いた。 パッケージマネージャ まずライブラリの管理。モジュールをインストールし、可能であればバージョンを固定し、適切にロードする機能が必要だ。Perlの場合は cpanm というCPANクライアントでライブラリをインストールする。バージョンの固定とライブラリパスの設定は carton で行う。 https://github.com/miyagawa/cpanminus https://github.com/miyagawa/carton アプリケーションサーバ Webサーバへのインターフェイスとしては、PSGIという仕様がある。PSGIに準拠したツールキットとしてPlack

    PerlでWebAppの開発に必要なN個のこと - Islands in the byte stream (legacy)
  • Xslate日本語ドキュメント計画 - Islands in the byte stream (legacy)

    いろいろなところから要望が挙がっているので、Xslateの日語ドキュメントの整備をしたいと思ってます。今のところまとまった日語のドキュメントはPerl Hackers Hubに寄稿したものくらいしかないので、リファレンスといえるものがないためです。 目標としては、今年中にひと通り揃えたいと考えています。 とりあえず予定地: http://xslate.org/ja/

    Xslate日本語ドキュメント計画 - Islands in the byte stream (legacy)
  • ISUCONのウェブアプリのテンプレートエンジンはXslateでした - Islands in the byte stream (legacy)

    livedoor Techブログ : ISUCONやりましたーっ! 最終結果発表 #isucon ISUCONに[twitter:@xaicron] & [twitter:@myfinder]両名と一緒にチーム「真夏のサイクロンウェーブ」を結成して参加しました。 結果は…memcachedをいじっていたらアプリを壊してしまい最終テストが通らず失格…。しかし限られた時間でウェブアプリのチューニングをするというとても楽しい7時間でした。 内容を振り返ると、id:sfujiwaraさんを始めとした参加者諸氏が指摘するようにアプリ自体はかなり高速で、いじる余地はあまりありませんでした。せめてテンプレートエンジンがTemplate::Toolkitだったら…という淡い期待も抱いていたのですがこれも始めからXslateでもういじる余地がありません。残念。 でも結果的にはXslateのいいプロモーション

    ISUCONのウェブアプリのテンプレートエンジンはXslateでした - Islands in the byte stream (legacy)
  • Data::MessagePack 0.35_1 renewal! - Islands in the byte stream (legacy)

    バイナリデータシリアライズフォーマットMessagePackのPerl実装であるData::MessagePackがインターフェイスを一新したり新機能を追加したりしてJSON.pmからの移行がしやすくなりました*1。 具体的には以下のように変わっています。 pack/unpackのエイリアスとしてencode/decodeをサポート インスタンスを作れるようになった プロパティのサポート(今のところprefer_integer/canonical/utf8のみ) 特にインスタンス化とプロパティのサポートにより、いままでグローバル変数$Data::MesagePack::PreferIntegerで制御していた整数優先packingが次のように書けます。 # 旧スタイル(今でも可能だが非奨励) { local $Data::MessagePack::PreferInteger = 1; my

    Data::MessagePack 0.35_1 renewal! - Islands in the byte stream (legacy)
  • 「優れたPerlプログラマを見分ける27の質問」の日本語訳 - Islands in the byte stream (legacy)

    (追記あり) How to Identify a Good Perl Programmer (by chromatic) が面白かった*1ので、27の質問を訳してみました。chromatic氏によれば、いずれも単純明快な質問でPerlの哲学や特徴をよく現しており、優れたPerlプログラマであれば少なくとも80%は答えられるべきだそうです*2。あなたは全ての質問に答えられますか? Perl5において変数のシジル*3が示すものは何か 配列のアクセスする際の $items[$index] と @items[$index] の違いは何か == と eq の違いは何か ハッシュをリストコンテキストで評価すると得られるものは何か Perlドキュメントからキーワードを検索するにはどのようにするのか Perl5における関数とメソッドの違いは何か Perl5が変数のメモリを再利用するのはいつか 変数のスコー

    「優れたPerlプログラマを見分ける27の質問」の日本語訳 - Islands in the byte stream (legacy)
  • Why Xslate is so Fast - Islands in the byte stream (legacy)

    (There is the Japanese version bellow) There are reasons why Xslate so fast, so this article explains them, which will be added to the Xslate document. Taking precompiling style Template engines which precompile templates are always faster than line-by-line interpreters. Almost all the engines implemented in scripting languages (e.g. Template-Toolkit or Text::MicroTemplate) takes precompiling styl

    Why Xslate is so Fast - Islands in the byte stream (legacy)
  • YAPC::Asia 2010 Tokyoで発表しました - Islands in the byte stream (legacy)

    至らない点は多々ありましたが無事発表を終えることができました!ありがとうございました! How Xslate WorksView more presentations from gorof.ちょっと捕捉します。 まず会場の質疑応答から(スライドにも簡単に追記しました)。 Q. テンプレートをPerlコードに落とし込んでperlに実行させるというモデルもあると思うが、敢えて独自VMを実装した理由は? A. たしかに、Perlコードに落とし込むテンプレートエンジンはあり、Template::ToolkitText::MicroTemplateなどはそうしています。しかしPerlは汎用のインタプリタであり、テンプレートのレンダリングに特化しているわけではりません。Xslateは汎用性を犠牲にし、高速化を図っています。特に、出力バッファに対する文字列の連結に大きな差があります。なので、独自VMの

    YAPC::Asia 2010 Tokyoで発表しました - Islands in the byte stream (legacy)
  • Template Toolkit sucks - Islands in the byte stream (legacy)

    Template Toolkitはどういうわけか*1Perlにおける標準のテンプレートエンジンの座にいるが、その仕様は美しいとは言い難い。特にまずいのは、 あるトークンの意味がコンテキストや実行状態によって異なることだ。 記号の意味がコンテキストによって異なる例: [% SET foo = bar # "="は代入 %] [% FOR foo = bar # "="は"IN"のエイリアス %]リテラルの意味がコンテキストによって異なる例: [% GET foo # foo という変数を参照 %] [% INCLUDE foo # "foo"というファイルを参照 %]フィールドの参照が実行状態によって異なる例*2: #!perl -w use strict; use Template; my $tt = Template->new(); # "keys"があるときはフィールドの参照 $tt-

    Template Toolkit sucks - Islands in the byte stream (legacy)
  • How and when Xslate escapes html special characters - Islands in the byte stream (legacy)

    Xslate のエスケープポリシーについて考えたので、ここでまとめておく*1。 Xslate のエスケープ処理について、覚えることは以下の三つである*2。 テンプテートタグ内で生成した値は自動的にエスケープされる エスケープ処理をさせたくないときはmark_raw フィルタを使う エスケープ処理を強制させたいときは unmark_rawフィルタを使う 以下、詳しく解説する。 まず、基的には Text::MicroTemplate のポリシーを踏襲している*3。すなわち、テンプレートタグ内で生成された文字列については、HTMLのメタ文字(< > & " &apos)が自動的にエスケープされる。エスケープ処理は、一般式に対する出力コマンドが担っている。 # Text::Xslate version 0.1032 $ xslate -e '<foo>' # 地の文字列はそのまま出力 <foo>

    How and when Xslate escapes html special characters - Islands in the byte stream (legacy)
  • Text::ClearSilver - New ClearSilver binding in Perl - Islands in the byte stream (legacy)

    id:Craftworks さんから仕事をもらいまして、ClearSilverのPerlバインディングを書きました。 http://search.cpan.org/dist/Text-ClearSilver/ git://github.com/Craftworks/Text-ClearSilver.git ClearSilver はCで実装されたテンプレートエンジンで、高速だという話はあるものの、Yapc::Asia 2007で紹介されたほかはそれほど話題にも上らず、私も今回の話が来るまでは知りませんでした。 もっとも、Perlの世界で流行らないのは当然です。ClearSilver のディストリビューションにはPerlモジュールが含まれているのですが、これの質が非常に低く*1、Perlデータ→HDFデータ*2の変換も用意されていないため、Data::ClearSilver::HDFを使う必

    Text::ClearSilver - New ClearSilver binding in Perl - Islands in the byte stream (legacy)
  • Moose metaclass compatibility is too complex! - Islands in the byte stream (legacy)

    Mooseのmetaclass compatibilityのルールがとんでもなく複雑だということがわかったのでメモしておく。 コード例: #!perl use strict; use warnings; use Test::More tests => 4; use Moose::Util qw(does_role); { package FooTrait; use Moose::Role; package BarTrait; use Moose::Role; package BaseClass; use Moose -traits => qw(FooTrait); package SubClass; use Moose -traits => qw(BarTrait); extends qw(BaseClass); } ok does_role(BaseClass->meta, 'FooTr

    Moose metaclass compatibility is too complex! - Islands in the byte stream (legacy)
  • YAPC::Asia 2009で発表してきました - Islands in the byte stream (legacy)

    YAPC::Asia 2009で発表してきました。 XS書きのためのPerl MAGIC 入門 Moose Hacking Guide (Lightning Talks) Introduction to Perl MAGICView more presentations from guest6b8f09. Moose Hacking GuideView more presentations from guest6b8f09. ひとつはXSを書く際のMAGICメカニズムにまつわる注意点についての解説で,これはあとでもう一度まとめます。もうひとつはMooseのソースコードの読み方です。なにかジョークを仕込めればよかったんですが,余裕がありませんでした。スライドはあとでWebからも見れるようにするつもりです。 slideshareで見られるようにしました。 今回のYAPCに参加するにあたり,id

    YAPC::Asia 2009で発表してきました - Islands in the byte stream (legacy)
  • What I got in YAPC::Asia 2009, notes, and todo - Islands in the byte stream (legacy)

    今回初めてYAPC::Asiaに参加した。記憶が鮮明なうちに,得たもの,考えたことをメモしておく。ハッカソンにも二日目のみ参加したが,時間があまりとれず,特に成果は出せなかった。 AnyEvent/Coro AnyEvent/Coroのイメージがつかめたのはとてもよかった。特にid:mala氏の高速になる理屈はとても分かりやすかった。具体的にどのくらい高速になるか試してみたい。 Moose高速化計画 nothingmuch, rafl, SartakとMooseについて話せたのは非常によかった。Moose高速化計画の報告がYAPC前にできなかったのは失敗だったが,将来に向けていろいろ話はできた。 New syntaxes 私はDevel::Declareが実用的だとはどうしても思えなかったのだが,この考えは改めることになった。たとえば,もし5.12で新規構文を導入したとしても,Devel:

    What I got in YAPC::Asia 2009, notes, and todo - Islands in the byte stream (legacy)
  • Mooseの速度が遅いという議論のまとめと感想 - Islands in the byte stream (legacy)

    Adam Kennedy (ADAMK)が「Array::CompareでMooseを使わないようにしてくれ」とRTでチケットを作成したことがきっかけとなり,Mooseの速度について議論が起きています。以下ラフなまとめ。 #49270: Remove the use of Moose - RT Array::CompareではMooseを使わないでほしい。Mooseを使いつづけるならばコマンドラインアプリケーションでは使うに堪えないし,PadreでもArray::Compare依存をなくすつもりだ。 Moose or No Moose - Perl Hacks (Array::Compareの作者ブログ) 最近いくつかのモジュールをMoose化しはじめたのだが,「Mooseを使うな」と言われてしまった。Mooseは楽なので使い続けたいが,どうしたものか。 Re: Moose Or No M

    Mooseの速度が遅いという議論のまとめと感想 - Islands in the byte stream (legacy)
  • The history of wantarray() - Islands in the byte stream (legacy)

    void context + BEGIN の horror 的ななにかで指名されたので答えるよ。 疑問点をまとめると以下の二点ということでいいですか。 なぜ特殊コードブロックの呼び出しコンテキストは不定とされているのか なぜ特殊コードブロックが実際にはスカラーコンテキストで呼ばれるのか 結論からいうと,第一の疑問の答えは,特殊コードブロックを呼び出すcall_list()内のcall_sv()においてコンテキストフラグを与えていないからです。第二の疑問の答えは,call_sv()のデフォルトコンテキストがG_SCALARだからです。 まずそもそもwantarray()の歴史を振り返ると,初期のPerlにはvoid contextは存在しなかったわけですよ。 Perl 5.003_07のperlfunc -f wantarray: Returns TRUE if the context of

    The history of wantarray() - Islands in the byte stream (legacy)
  • B::Foreach::Iteratorでforeachイテレータを進める - Islands in the byte stream (legacy)

    B::Foreach::Iteratorというモジュールを書いた*1。 use B::Foreach::Iterator 0.02; foreach my $key(foo => 10, bar => 20, baz => 30){ printf "%s => %s\n", $key => iter->next; } iter->next()*2はforeachループのイテレータをひとつ進め、その値を返す。 また、iter->peek()はイテレータを進めることなく、次のイテレータを返す。 このモジュールを実装するにあたってpp_hot.cのpp_iter()を読んだのだが、確かにforeach ($min .. $max)は内部で配列を生成していない。また、foreach (reverse ...)についても最適化が行われており、reverse()した一時配列を作るのではなく、イテレータ

    B::Foreach::Iteratorでforeachイテレータを進める - Islands in the byte stream (legacy)
  • strict無効化の誤謬 - Islands in the byte stream (legacy)

    シンボルテーブルを操作するときに"no strict 'refs'"で一時的にstrictを無効化することはよくあるが,デバッグしにくいバグが紛れ込む可能性がある。 たとえば,以下のようにアクセサを動的に生成するコードはCPANのそこかしこにある。 sub make_accessor{ my($class, $property) = @_; no strict 'refs'; # simple read-only accessor *{$class. '::' . $property} = sub{ my($self) = @_; return $self->{$property}; } } このようなコードによって生成されたメソッドを,正しくオブジェクトに対して使う分には問題ない。しかし,このメソッドをクラスメソッドとして呼び出すと,グローバル変数${$self}を参照し,その値をハッシ

    strict無効化の誤謬 - Islands in the byte stream (legacy)
  • 先の記事のList::Utils::firstの使い方は間違っている! - Islands in the byte stream (legacy)

    先の記事の「List::Util::firstは遅い」でのfirst{expr}の使い方が間違っていました orz first{expr}は+(grep{expr} ...)[0]に等しく,ブールコンテキストでのscalar(grep{expr}...)に等しいのはList::MoreUtils::any{expr}です。ただしパフォーマンスについての結論は同じで,要素数が少なければgrep > anyとなります。 TODO: grep/first/anyその他についてのまとめをあとで書く(perl-users.jp向き?)。

    先の記事のList::Utils::firstの使い方は間違っている! - Islands in the byte stream (legacy)
  • List::Util::firstは遅い - Islands in the byte stream (legacy)

    (追記:この用途ではList::Util::firstを使うのは誤りで,List::MoreUtils::anyが意図されたコードです。効率についての結論は変わりません) List::Util::first{expr}は組み込みのgrep{expr}に似ているが,exprが最初に真になった段階でその値を返すので,grep{expr}よりも効率がいいと説明されることが多い。しかし,実際にベンチマークを取ってみると,多くの場合grep{expr}より遅い。最初の要素が真になるというfirst{expr}にとって最適な条件でさえ,要素数が40を越えたあたりでようやくgrep{expr}とほぼ同程度の速度になる。したがって,List::Util::first{expr}が効果的なケースはそれほど多くないと思われる。 また,もし単なる文字列の検索でよく,その検索をプログラム中で繰り返すならば,gre

    List::Util::firstは遅い - Islands in the byte stream (legacy)