タグ

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

  • Template Engine Nightで「Xslate振り返り」をしました - Islands in the byte stream (legacy)

    このあたりで一度まとめておこうと思ったのでいい機会でした。@moznionさん、ありがとうございました。 なお、スライド中の「arity」は、この直前のトークで「ASTのnodeの種類を表すのにarityという単語を使っているのは意味が違うのではないか」と質問されたので急遽いれたものです。これは、『ビューティフル・コード』でDouglas Crockfordが演算子優先順位構文解析法によってJavaScriptのparserを実装しており、その中でtokenの種類を表すのにarityという単語を使っていたからなのでした。Xslateはそのparserをもとにしているのでarityという言葉を使っています。 ビューティフルコード (THEORY/IN/PRACTICE) 作者: Brian Kernighan,Jon Bentley,まつもとゆきひろ,Andy Oram,Greg Wilso

    Template Engine Nightで「Xslate振り返り」をしました - Islands in the byte stream (legacy)
    kazeburo
    kazeburo 2014/10/20
  • Parallel module testing in Perl - Islands in the byte stream

    Twitterにて: たしかあったはず*1と思って探してみると*2、Test::Harness にHARNESS_OPTIONSというオプションがありました。以下のようにすると並列でテストで時間を大幅に短縮できます。 $ HARNESS_OPTIONS=j2 make test 実際、Xslateでこれを試してみるとテストの時間が2/3程度になりました*3。これはかなり効果があると考えていいでしょう。 ただし、モジュールが並列実行に対応してないケースがありえるので、すべてのケースで利用出来るわけではありません。すなわち、これはモジュールの作者が指定するのが望ましいオプションだと言えます。そして、Module::Install::TestTarget があればそれが簡単にできるのです。 # Makefile.PL # ... default_test_target env => { HARN

    Parallel module testing in Perl - Islands in the byte stream
  • 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)
    kazeburo
    kazeburo 2013/09/10
    シンプルで良いね
  • 『Perl徹底攻略』という本が出版されました - Islands in the byte stream (legacy)

    WEB+DB PRESSで連載しているPerl Hackers Hubの書籍版で、私も2節書きました。 Perl徹底攻略 (WEB+DB PRESS plus) 作者: 大沢和宏,cho45(さとう),小林篤,和田裕介,嶋田裕二(xaicron),牧大輔(lestrrat),奥一穂,広木大地,伊藤直也,長野雅広,藤原俊一郎,伊藤智章,まかまか般若波羅蜜,小飼弾,近藤嘉雪,中川勝樹,宮川達彦,tokuhirom,藤吾郎(gfx),村瀬大輔,WEB+DB PRESS編集部出版社/メーカー: 技術評論社発売日: 2013/07/23メディア: 大型この商品を含むブログ (9件) を見る 経緯とかは YappoLogs: Perl徹底攻略というを作った話 とか 「Perl徹底攻略」というができました : D-7 <altijd in beweging> とか。普段まとまった説明を書く機会や気

    『Perl徹底攻略』という本が出版されました - Islands in the byte stream (legacy)
  • CPAN Testersの紹介 - Islands in the byte stream (legacy)

    最近Perlのネガティブな話が話題ですが、ちょっとCPANまわりのサービスの自慢をさせてください。それは CPAN Testers です。 CPAN Testers *1 とは、CPANに公開したモジュールがどの環境で動きどの環境でどういうエラーがでるのかを集積するサービスです。 よく「Perl/CPANは枯れている」といいますが、それを支えているのはPerl歴史とかPerlerの性格といった形のないものではなく、この CPAN Testers なのです。これがすごくいいんですよ。 特徴をざっと並べるとこんな感じ: Social testing service for CPAN Testerたちがモジュールを手元の環境でテストしてそのレポートをサーバに送る CPAN.pm のプラグインとしてレポートモジュールが存在する 同じ環境でもビルドオプションが違うパターンもあるので、自分ひとりで様

    CPAN Testersの紹介 - Islands in the byte stream (legacy)
    kazeburo
    kazeburo 2013/03/09
    *BSD 環境のテストが出来るのが助かります
  • Data::Dumper が壊れているという惨事 - Islands in the byte stream (legacy)

    あるいは PERL_CPANM_OPT=-n は危険だという話。 それはこのtweetから始まった。 結局これは Data::Dumper 2.143 が壊れていたからなのだが、そこに至るまでがちょっと大変だったので記録しておく。 まず、再現スクリプトは以下のものだった。 # executed in perl 5.10.1 use strict; use warnings; use Data::Dumper; use Text::Xslate; my $tx = Text::Xslate->new({ syntax => 'TTerse' }); my $template = <<TMPL; [% value | dump %] TMPL my $value = +{ 'ab' => 'c', }; print Dumper($value); my $ret = $tx->render_s

    Data::Dumper が壊れているという惨事 - 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)
    kazeburo
    kazeburo 2011/08/29
    Xslateのインスタンスをアプリ側に持ってきた方がよかったかしら
  • Re: モダンPerl連載第43回 - Islands in the byte stream (legacy)

    モダンPerlの世界へようこそ#43がXslateの話だと思ったらノイズ呼ばわりされたでござる、の巻。 著者であるid:charsbarさんの捕捉によれば以下のとおり モダンPerl連載第43回 - Charsbar::Note 「TTの代用品としての」Template::AlloyとText::Xslateについて簡単にまとめてみました。 ということですが、Catalystをビジネスに使うチームこそがPerlのスタンダードであり「周辺」はスタンダードを重んじるべきという論調には違和感を覚えました。 独自プロジェクトではなく家の改善にリソースを貸すべきという批判はたしかにMouseについては当てはまるのかもしれませんが、XslateはTemplate-Toolkitを代表とする既存のプロジェクトとは全く関係ない文脈で開始したプロジェクトです。TTプロジェクトに関わるという選択肢は考えもし

    Re: モダンPerl連載第43回 - Islands in the byte stream (legacy)
    kazeburo
    kazeburo 2011/07/24
  • Re: Perlスクリプトの一行目には何と書くべきなのか - Islands in the byte stream (legacy)

    Re: Perlスクリプトの一行目には何と書くべきなのか もしCPAN形式でスクリプトを配布するなら、それは#!/usr/bin/perlないし#!perlとするべきで、env(1)を使うべきではないと思います。 CPAN形式のディストリビューションでは、インストールするスクリプトのshebang行をインストール直前に修正し、正しいパスに書き換えてくれます。ただし、このルーチン*1はいまのところenv(1)を認識してくれません。つまり、env(1)を使った場合、インストールに使用したperlと実際に実行されるperlが一致するとは限りません。perlを一つしかインストールしていないシステムなら、これでも問題なく動きます。しかし最近では、システムにインストールしてあるperlには触らず、アプリケーション用のperlを別途perlbrewなどでインストールしてそちらを使うということもよく行われ

    Re: Perlスクリプトの一行目には何と書くべきなのか - Islands in the byte stream (legacy)
  • Get the width and height from images - Islands in the byte stream (legacy)

    Smartyって画像サイズを自動的に<img />に埋め込んだりするんですね。 というわけで、Perlで画像サイズを得るのに何が速いかベンチマークしてみました。 結果: Image::Info/1.30 Image::Size/3.221 Imager/0.75 GD/2.45 Rate GD Imager Image::Info Image::Size GD 77.2/s -- -69% -79% -100% Imager 251/s 226% -- -32% -99% Image::Info 368/s 377% 47% -- -99% Image::Size 37959/s 49074% 15002% 10203% --Image::Sizeがその他のモジュールよりも100倍以上の差をつけています。サイズを取るだけならpure PerlであるImage::Size以外の選択肢を考える

    Get the width and height from images - Islands in the byte stream (legacy)
    kazeburo
    kazeburo 2010/07/14
    Image::Sizeってサイズがとれないと勝手にImage::Magick呼び出すのがきらい
  • Xslate now cooperates with Data::Section::Simple - Islands in the byte stream (legacy)

    [twitter:@typester]さんがText::MicroTemplate::DataSectionを書いて気になっていたところ、[twitter:@kazeburo]さんからもXslateの対応について要求があったので、version 0.1043でData::Section::Simpleと協調するようにしました。 ただし、依存モジュールを増やしたくない*1ので直接サポートではありません。 具体的には、以下のように使います*2: #!perl -w use strict; use Text::Xslate; use Data::Section::Simple; my $tx = Text::Xslate->new( path => [ Data::Section::Simple ->new()->get_data_section(), ], ); print $tx->rend

    Xslate now cooperates with Data::Section::Simple - Islands in the byte stream (legacy)
    kazeburo
    kazeburo 2010/07/11
    組み込もう
  • HTML form management on Xslate - Islands in the byte stream (legacy)

    <追記> @typesterさんの指摘を受けて再考中。確かに、気軽にrawを書くようになると、結局「うっかりraw」をする可能性が生じて安全性が下がります。テンプレートではrawを使うべきではない、ということを前提にドキュメントと記事を書き直しました。 参考: @fujiwara: うっかりraw付ける付けないのミスというより、化ける!→rawつけると化けない!→じゃあとりあえずrawつけとけばイイよね! みたいな流れがありがち。@tokuhirom:ていうか、T::MT の思想では、基的に model とか controller 側で raw 属性つける、なんだよね。Xslate上でフォーム処理をしようとしたらいろいろハマったのでCookbook書きました。 The Xslate cookbook http://search.cpan.org/dist/HTML-Shakan=HTML

    HTML form management on Xslate - Islands in the byte stream (legacy)
  • Crazy module end markers - Islands in the byte stream (legacy)

    先日Classic::Perlというモジュールで奇妙なモジュール終末値*1を見た。 # snip __THE__ => __END__ =head1 NAME この発想はなかった。=>演算子の左辺は裸のワードでよく、しかも演算子の右辺は省略できる*2ため、これは単にリテラルの"__THE__"の後、__END__で通常通りスクリプトの終わりを宣言しているのである。 面白いことを考える人がいるものだ。 *1:真ならなんでもよい *2:つまり、foo(bar =>)という構文が許される。,演算子から類推すると理解できると思う。

    Crazy module end markers - Islands in the byte stream (legacy)
  • 来年から株式会社ディー・エヌ・エーで働きます - Islands in the byte stream (legacy)

    文系・不況・経歴に傷ありと三重苦を負っての就職活動でどうなることかと心配でしたが、無事就職活動を終えることができました。DeNAに就職します。Perlができると就職できるというのは当でしたね。 今回の就職活動においては、竹迫さんと牧さんには具体的な相談に乗っていただくなどお世話になりました。改めて御礼申し上げます。またその他関わった方々にも感謝致します。 私が就職できたのは、Shibuya.pmがあればこそ。Shibuya.pmというコミュニティへの参加が、ソフトウェアエンジニアとして生きることに確信を与えてくれたのです。竹迫さんをはじめとして、tokuhiromや牧さん、宮川さん、Yappo、typesterさんなどから得たものは、それ以前の独学で得たものより遥かに多様でした。特にtokuhiromとの出会ったことで、人とプログラミングについて語る喜びを知ったのは大きな財産です。牧さん

    来年から株式会社ディー・エヌ・エーで働きます - Islands in the byte stream (legacy)
    kazeburo
    kazeburo 2010/05/25
    おめでとうございます!ベストな選択だと思います
  • Mouse 0.42 "Mouse::XS" released - Islands in the byte stream (legacy)

    I have released Mouse 0.42 "Mouse::XS". http://search.cpan.org/dist/Mouse/ From this version, Mouse generates constructors, destructors, and accessors in XS. These generated mehtods are much faster than pure Perl methods, especially in attributes with type constraints. How fast is it? Accoding to a benchmark for HTTP::Engine, Mouse::XS is about 100% faster than Mouse::PurePerl in command line appl

    Mouse 0.42 "Mouse::XS" released - Islands in the byte stream (legacy)
  • Perl Advent Calendars 2009 - Islands in the byte stream (legacy)

    今年のPerl Advent Calendarをまとめてみました。 Perl Advent Calendar 2009 JPerl Advent Calendar 2009 Hacker Track - JPerl Advent Calendar 2009 Casual Track - JPerl Advent Calendar 2009 DBIx::Skinny - JPerl Advent Calendar 2009 Data::Model Track - JPerl Advent Calendar 2009 http://opensource.kayac.com/ja/projects/ark/advent/2009/ Catalyst Advent Calendar RJBS Advent Calendar 2010 Perl 6 Advent Calendar | Somethi

    Perl Advent Calendars 2009 - Islands in the byte stream (legacy)
  • Mouse type constraints in XS - Islands in the byte stream (legacy)

    MouseのXS化*1が進みつつあります。 0.40_04ではtype constraintsを全面的にXSで実装しました。生成されるコードを徹底的にXS化したため,かなり高速になりました。 以下はTC付きアクセサに値をセットする場合のベンチマークの結果です。 Mouse/benchmarks/type_constraints.pl: Perl/5.10.1 in i686-linux Moose/0.92 (Class::MOP/0.94) Mouse/0.40_03 Class::XSAccessor/1.03 SETTING for simple attributes Rate Moose Mouse C::XSAccessor Moose 643109/s -- -62% -62% Mouse 1686587/s 162% -- -1% C::XSAccessor 1703286/

    Mouse type constraints in XS - Islands in the byte stream (legacy)
  • My document for YAPC::Asia 2009 - Islands in the byte stream (legacy)

    まもなくYAPC::Asia 2009が開催しますね。私の発表の資料は以下の場所に置き,順次更新する予定です。 git://github.com/gfx/YAPC-Asia-2009-gfx.git よろしくお願いします。 (12日 追記) 順次更新とはいきませんでしたが,発表に使ったスライドを二つ(PerlMaigicIntroとMooseHackingGuide),MS Power Point形式でアップロードしました。

    My document for YAPC::Asia 2009 - 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)
  • サブルーチンのアトリビュートの信頼性 - Islands in the byte stream (legacy)

    Perl 5.6.0以降にはアトリビュート(Attribute)というメカニズムがあり,変数やサブルーチンの宣言時に呼び出されるコールバックを設定できる*1。 このアトリビュートは実験的に取り入れられたのちに放置されるという不幸な運命をたどってしまい,現状では活用するのが難しい。特に,サブルーチンアトリビュートの扱いは非常に難しく,使用に際しては様々な問題がある*2。 一つの大きな問題は,アトリビュートハンドラが呼び出されるタイミングである。アトリビュートハンドラはサブルーチンオブジェクトの構築中*3に呼び出されるのだが,サブルーチンオブジェクトの構築が不完全なため,そのままではアトリビュートハンドラ内でできることはほとんどないのだ。以下のスクリプトはこのことを示す。 #!perl -w use strict; use Devel::Peek; sub MODIFY_CODE_ATTRIB

    サブルーチンのアトリビュートの信頼性 - Islands in the byte stream (legacy)
    kazeburo
    kazeburo 2009/05/13
    明日