タグ

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

  • Perl XS を書くようになったきっかけ - Islands in the byte stream (legacy)

    THE INTERVIEWS がサービス終了ということで、一つだけ消えるには惜しいというか懐かしい記事があったので少し加筆修正して転載します。JHackers でも似たようなことを話してますね。 Perl XS を書くようになったきっかけ、また、どのようにして今のような XS マジシャンになったのか。そのあたりの事をお聞かせください 2000年頃の話です。ぼくはCGIスクリプトでちょっとしたゲームデータの集計サイトをやりたくてプログラミングを覚えたのでした。これがそこそこ重い処理で、次第にもっと高速にしたいと考えるようになりました。一方、当時ぼくはお金もなくVPSも一般的でなかったので、CGIスクリプトしか選択肢はありません。そこで初心者ながらいろいろ調べることにしました。 とりかかったのは行指向のテキストで保存していたデータをSQLiteにすることでした。しかし当時はWindows上で開

    Perl XS を書くようになったきっかけ - 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)
  • 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)
  • node-tick-processorでnodejsのプロファイルを整形する - Islands in the byte stream (legacy)

    もともとV8にはプロファイル機能が組み込まれていて、V8のリポジトリにはプロファイルデータを整形して表示するための *-tick-processor というスクリプトが入っている。 https://github.com/v8/v8/tree/master/tools linux-tick-processor mac-tick-processor freebsd-tick-processor windows-tick-processor.bat そして nodejs は --prof オプションでV8のプロファイルを有効にして、プロファイルデータを出力できる。ただ、整形にはV8の *-tick-processor が必要で、この *-tick-processor を使うにはV8をビルドしなければならない。 *-tick-processor はV8をビルドしたときにできるd8というJSのインタ

    node-tick-processorでnodejsのプロファイルを整形する - Islands in the byte stream (legacy)
  • Re: Re: perl 5.16.0 でメモリリーク? - Islands in the byte stream (legacy)

    perl 5.16.0 でメモリリーク - たごもりすメモ Re: perl 5.16.0 でメモリリーク? - tokuhirom's blog 修正してpull-requestを送りました。 https://github.com/mirrors/perl/pull/9 https://rt.perl.org/rt3/Ticket/Display.html?id=114340 ※ githubのpull-req/issuesではなくperlbugでレポートしてほしいとのこと。今回は tokuhiromの報告があったのでそれで。パッチ自体は問題ないようなので、Perl 5.16.1 では修正されるでしょう。 以下蛇足。 せっかくなので、何を考えながらデバッグしたかを記録しておく。 今回のバグはSVのリークではなくmalloc()したメモリの開放忘れだったので、Test::LeakTrace

    Re: Re: perl 5.16.0 でメモリリーク? - Islands in the byte stream (legacy)
    toritori0318
    toritori0318 2012/08/01
    すごすぎる
  • Perlのメモリリークを見つける方法 - Islands in the byte stream (legacy)

    Perlではメモリリーク検出ツールがいくつか開発されているので、top(1)の結果を眺めるよりそういうツールを使うほうが楽である。 さて、メモリリークが発生しているとき、その可能性としてはだいたい以下の4つが挙げられる。 Perlレベルでの循環参照 グローバル変数に値をどんどん足しているとき*1 XSレベルでリファレンスカウントの管理ミス XSレベルでmalloc()したメモリの管理ミス この1-3についてはすべてPerlインタプリタ内の出来事であり、Test::LeakTraceを使って検出できる。4を検出するのは難しいが、Test::Valgrindが役に立つ。 Test::LeakTraceのSYNOPSISは歴史的経緯によりごちゃごちゃしているが、テストで使うべき関数はno_leaks_ok()とleaks_cmp_ok()だけである。 たとえば、以下のようにして使う*2。 #!p

    Perlのメモリリークを見つける方法 - Islands in the byte stream (legacy)
  • each()は遅い上に微妙な問題も起きやすい - Islands in the byte stream (legacy)

    特別な条件がないかぎり、each()は使うべきではありません。代わりにkeys()/values()を使うべきです。その理由は2つあります。 each()は遅い each()でハッシュ全体をループするのは遅いです。これは、keys()/values()がその内部の値をそのまま参照する*1のに対し、each()は代入しないとその値を使えないからです。 ベンチマーク: #!perl use strict; use warnings; use Benchmark qw(cmpthese); my %hash = map { $_ => $_ } ( 1 .. 10000 ); cmpthese -1, { each_k => sub { while(my $key = each %hash) { } }, each_kv => sub { while(my($key, $value) = eac

    each()は遅い上に微妙な問題も起きやすい - Islands in the byte stream (legacy)
  • 常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)

    TwitterのTLで知ったのだが、少し前に海外掲示板で"sleep sort"というソートアルゴリズムが発明され、公開されたようだ。このアルゴリズムが面白かったので紹介してみる。 Genius sorting algorithm: Sleep sort 1 Name: Anonymous : 2011-01-20 12:22 諸君!オレは天才かもしれない。このソートアルゴリズムをみてくれ。こいつをどう思う? #!/bin/bash function f() { sleep "$1" echo "$1" } while [ -n "$1" ] do f "$1" & shift done wait example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7 2 Name: Anonymous : 2011-01-20 12:27 >>1 なん…だと

    常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)
  • The three significant features in Perl 5.14 - Islands in the byte stream (legacy)

    perl 5.14.0がリリースされた。Ubuntuなどでは、perlbrew経由でインストールするといくつかテストが失敗するようなので--forceオプションを使わないとインストールできない。 # 念のため-DDEUGGINGもつける。threadは好みで。 $ perlbrew --force install perl-5.14.0 -DDEBUGGING -Duseithreads Task::Plackなどの主要モジュール群ではCoro以外はいまのところ問題なくインストールできている。 さて、このバージョンは数多くの機能がが追加されているが、特に重要な機能が三つある。このエントリではその機能を紹介する。 The package block syntax package宣言が他の言語のクラス宣言に近い形で書けるよう拡張された。特に、以下のような小さなクラスが分かりやすくに書けるように

    The three significant features in Perl 5.14 - Islands in the byte stream (legacy)
  • プログラミング初心者にオススメのPerl本 - Islands in the byte stream (legacy)

    この時期、Perlを学び始める方も多いと思います。そこでプログラミング初心者がPerlを学ぶのに適したを、私が実際に読んだことのあるものの中から選んでみました。 1冊目 1冊目はなんでもいいと思うのでとりあえず定番としてリャマを挙げておきます。 初めてのPerl 第5版 作者: Randal L. Schwartz,Tom Phoenix,brian d foy,近藤嘉雪出版社/メーカー: オライリージャパン発売日: 2009/10/26メディア: 大型購入: 22人 クリック: 293回この商品を含むブログ (41件) を見るこれで基的なPerlの文法が学べるはずです。この手の入門書は「課題」がつきものですが、すべて解く必要はないと思います。幾つか気になるもの・面白そうなものだけ試してみればいいでしょう。 1冊目読了の辞典では、以下のプログラムの簡易バージョン*1を実装できるよう

    プログラミング初心者にオススメのPerl本 - Islands in the byte stream (legacy)
    toritori0318
    toritori0318 2011/05/08
    いい加減ラクダ読まないと
  • Xslateの関数でクロージャを使う - Islands in the byte stream (legacy)

    [twitter:@shmorimo]さんとのやりとりのなかで考えた、Xslateの関数にクロージャを渡したいケースのまとめです。 まず前提条件: リクエスト毎にクロージャをXslateに渡したい Xslateの登録関数を定義できるのはnew()のときのみ 動的に関数を加えることはできない リクエスト毎にXslateをnewすると遅いので避けたい このような条件下で、リクエスト毎にクロージャを登録する方法は幾つかあります。 render()のパラメータとして渡す KolonにせよTTerseにせよ、値に()演算子を適用すると関数を呼び出せます。したがって、単にrender()のパラメータにクロージャを渡すことで関数呼び出しができます。 #!perl -w use strict; use Text::Xslate; my $tx = Text::Xslate->new(); print $t

    Xslateの関数でクロージャを使う - Islands in the byte stream (legacy)
  • DeNAに入社しました - Islands in the byte stream (legacy)

    既に2週間ほど経過していますが、4/1付けでDeNAに入社しました。なかなか刺激的な毎日を送っています。 さて、これからは忙しさが増す一方でしょうから、今のうちに初心を振り返っておきます。 私はこの数年間、コードを書きながら、自分の人生の中でやりたいことはなんだろうかを考えてきました。私は主にソフトウェアのパフォーマンスに興味があります。プログラミング言語やツールに興味があります。また、テストや開発手法にも興味があります。エンジニアのコミュニティのあり方や、ハッカー文化にも興味があります。これらの興味を導きだすもの、それは以下のような考えだと思い至りました。 ソフトウェアエンジニアがもっと幸せになれるような技術を提供する この考えは、以下のid:TAKESAKOさんのインタビューを読んでから鮮明になりました。 Webエンジニア武勇伝 第29回 竹迫良範氏 (2008) 竹迫 日ITエン

    DeNAに入社しました - Islands in the byte stream (legacy)
  • 『CPANモジュールガイド』の感想 - Islands in the byte stream (legacy)

    [twitter:@tomita]さんの『CPANモジュールガイド』を献いただきました。ありがとうございます。 Perl CPANモジュールガイド 作者: 冨田尚樹,タナカユカリ出版社/メーカー: ワークスコーポレーション発売日: 2011/04/08メディア: 単行(ソフトカバー)購入: 20人 クリック: 2,028回この商品を含むブログ (21件) を見るText::XslateやData::Cloneなど、私が書いたりメンテナンスしているモジュールもいくつか取り上げていただきました。 Perlの文法等の説明は基的にしていないため、入門書を一冊終えたあたりが想定読者なのかなという印象です。このを読めば、DB接続からテキスト処理、画像処理、HTML関係のアレコレやデスクトップ通知など、Perlで作るアプリケーションで必要なことはほぼ網羅できるのではないでしょうか。 目次はひたす

    『CPANモジュールガイド』の感想 - Islands in the byte stream (legacy)
  • 自己紹介と過去の話 - Islands in the byte stream (legacy)

    新卒準備カレンダー 2011春に何か書くにあたって、まずは軽く自己紹介的な挨拶を書こう…と思ったら予想外に長い自分語りになってしまったので別途書き出しておきます。エンジニアとしてのスキルや活動については編に書くので、ここではそれ以外のことを書きます。 現在の私 この3月で大学を卒業し、4月からはDeNAにエンジニアとして入社します。 プログラミングが大好きで、3年ほど前からShibuya.pmによく顔を出しています。最近の成果物としては、Perl用のテンプレートエンジンXslateです。これについてはWeb+DB Presss誌で解説の機会をいただき、「Xslate 次世代テンプレートエンジン」としてWebでも公開済みです。 ところで、私は今年29歳になります。しかし、大学院にいったわけでも二度目の大学というわけでもありません。これは大学入学が24歳のときと遅かったためです。私が大学を目

    自己紹介と過去の話 - Islands in the byte stream (legacy)
  • lib::xi - installs missing libraries on demand - Islands in the byte stream (legacy)

    gistなどで公開されているPerlスクリプトを実行する際、モジュールが足りないことがよくあります。そういう場合はCan't locate Foo.pm ...というエラーメッセージを見ながらモジュールをインストールするわけですが、決まりきった作業にうんざりしたので自動的にそれをするモジュールを書きました*1。 https://github.com/gfx/p5-lib-xi `perl -Mlib::xi script.pl`とするだけで、足りないモジュールをcpanmで適当にインストールしてくれます。 -Mlib::xi=extlibとすれば既存の環境を壊すことなくlocal::lib的にextlib/にインストールして実行できますし、-Mlib::xi=-L,extlib,-qなどとしてcpanmにオプションを渡すこともできます。 これで退屈なインストール作業をしなくてすむはずです。

    lib::xi - installs missing libraries on demand - Islands in the byte stream (legacy)
  • Re: Chromeのスタートページで自分のはてブをインクリメンタル検索する拡張(ただしPerlで書いた) - Islands in the byte stream (legacy)

    http://d.hatena.ne.jp/Cside/20110214/p1 こんなに簡単にChrome拡張が作れるとは!と感動する一方で、Xslateの使い方がいまいちだったので直してみました。pull-reqだけでいいかとも思ったのですが、これらの修正はすべて何度か見たことのあるFAQ的なものなので、エントリにすることにしました。 具体的には、 Xslateインスタンスをリクエスト毎に作るのは非効率なので、最初に作って使いまわす render_string()は非常に遅いのでテストやデバッグ以外の用途で使うべきではない 今回のケースでは普通にファイル名を渡すだけでよい スクリプト中にテンプレートを書きたい場合は、pathオプションにハッシュリファレンスを渡すとよい Xslateは基的にテキスト文字列(decodeされたもの)を扱うので、functionはテキスト文字列を受け取って文

    Re: Chromeのスタートページで自分のはてブをインクリメンタル検索する拡張(ただしPerlで書いた) - Islands in the byte stream (legacy)
  • 2010年を振り返る - Islands in the byte stream (legacy)

    今年を振り返ると、私生活では就活と卒論が忙しかった。開発関係ではMouseとXslateの開発に大きく力を注いだ。来年はいよいよ社会人となる。遅い社会人デビュー*1だが、まあこんなものだろう。今はただ、働き始めるのが楽しみである。 一方反省点としては、まず英語でのコミュニケーションがやや疎かであった。2009年の反省でも同様であったので、来年こそもっと積極的になりたい。次に、あまりネタに走れなかったことが悔やまれる。Acme::Don't 2.0のように、思わずニヤリとするようなネタはそうそう思いつくものではないが、ハッカーが遊び心を失ってはならない。今年はあまり余裕がなかったのも確かなので、来年はもっと余裕を持ちたいものである。 以下、2010年の主な記事を取り上げてみた。振り返ってみると、そこそこブログは書いていたようだ。 File::Spec::MemoizedはPath::Clas

    2010年を振り返る - Islands in the byte stream (legacy)
  • 1