タグ

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

  • 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)
    koba04
    koba04 2013/12/03
    素晴らしい
  • 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)
    koba04
    koba04 2013/09/10
  • overloadプラグマの使い方 - Islands in the byte stream (legacy)

    404 Blog Not Found:紹介 - Software Design 2013年06月号 呼ばれてないけど勝手に添削。 use overload '""' => 'toString', '_' => 'add', ; はないわー。そこは use overload '""' => \&toString, '_' => \&add, ; でしょうが。 いいえ、overloadプラグマの引数は文字列でいいんです。でないとサブクラスでオーバーライドできませんから。 つまり、overloadプラグマへ与えるメソッドの実体$methodは、$obj->$method()として与えられたかのように振舞うのです。コードリファレンスを与えると、メソッドのレシーバが何であろうとそのコードリファレンスが呼び出されてしまいます。文字列であれば、サブクラスでたとえばtoString()メソッドをオーバーラ

    overloadプラグマの使い方 - Islands in the byte stream (legacy)
    koba04
    koba04 2013/05/24
  • RAII in Objective-C with ARC - Islands in the byte stream (legacy)

    最近のObjective-CはARCというオブジェクトポインタをスマートポインタにする機能があり、これのおかげでiPhoneアプリの開発ではRAIIができる。つまり、不要になったオブジェクトはその瞬間にデストラクタ(-dealloc)が呼ばれるため、デストラクタ内でリソースの開放を行なえる。 // デバイスのネットワークインジケータをRAIIで制御する @interface NetworkActivityGuard : NSObject @end @implementation NetworkActivityGuard - (id)init // コンストラクタ { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; return [super init]; } - (void)deallo

    RAII in Objective-C with ARC - Islands in the byte stream (legacy)
  • Released FurlX::Coro! - Islands in the byte stream (legacy)

    Coroを使うと簡単にFurlで並列HTTP通信が出来ます。 #!perl # usage: http-ping.pl [urls...] use strict; use warnings; use Coro; use Coro::Select; # Furlよりも先にロードすること! use Furl; my @coros; foreach my $url(@ARGV) { push @coros, async { print "fetching $url\n"; my $ua = Furl->new(); my $res = $ua->head($url); print "$url: ", $res->status_line, "\n"; }; } $_->join for @coros; __END__ わざわざモジュール化する必要はあまりないのですが、上記スクリプトが時々参照される

    Released FurlX::Coro! - Islands in the byte stream (legacy)
  • Xslate 1.5008 released - Islands in the byte stream (legacy)

    異常系の振る舞いを少し変えました。 https://metacpan.org/release/Text-Xslate Xslateでは、render()へ渡すテンプレートパラメータや登録関数からの戻り値は必ずEncodeモジュールでデコードしたテキスト文字列であるべきです。しかし、デコードしてないバイト列を渡したときの挙動は未定義で、XS/PPあるいはcacheの有無によって挙動が異なっていました。特にcacheの有無で挙動が変わることがあるのが厄介で、特定の条件が重なるとリロードすると文字化けするという挙動を示すことがありました。 Xslateに限らず、Perlではスクリプト内のテキストの操作はデコードされたテキスト文字列で行うべきで、これを守らなければ文字化けを引き起こします。よって、Xslateでも、上記のようにデコードされていないバイト列を与えると文字化けが起きるのが、Perl的に

    Xslate 1.5008 released - Islands in the byte stream (legacy)
  • ある値を非同期で取ってくる→その値を使ってさらに非同期処理というのをJSDeferredでする - Islands in the byte stream (legacy)

    ユースケースとしては、テストの最初にあるシステムにログインしてユーザIDなりセッションIDなりを得て、それでもって残りのテストを実行するみたいな処理です。 これ、素直にJSDeferredでDeferred.next(...).next(...)と続けても、このnextのコールバックは最初にいきなり呼ばれたあと「待ち」に入るので、非同期で取ってきた値に依存した処理は書けないんですよね。 これは、Deferredオブジェクトを自分で作って制御すればいけるみたいです。 以下サンプルコードです。最初の100msかかる非同期処理で42という値を得て、それを次の処理に渡せることを確認します: #!/usr/bin/env node "use strict"; var Deferred = require('./jsdeferred.js').Deferred; Deferred. next(func

    ある値を非同期で取ってくる→その値を使ってさらに非同期処理というのをJSDeferredでする - Islands in the byte stream (legacy)
  • Smart::Commentsでモジュールにサンプルコードを仕込む - Islands in the byte stream (legacy)

    ソースコードを読んでいると、関数の引数や戻り値の具体的な例がほしいと思うことがよくある。。そこで、実行可能なコメントを仕込むモジュールであるSmart::Commentsを使って、モジュール内にテストを兼ねたサンプルコードを仕込めばいいのではないかと考えた。これにより、開発者にとっては簡単なテストコードとして動き、読者にとっては具体例となるコードを簡単にソースコード内に埋め込むことができる。 package MyUtil; use strict; use warnings; use parent qw(Exporter); our @EXPORT = qw(add); use if __FILE__ eq $0, 'Smart::Comments'; ### assert: add(10, 20) == 30 sub add { my($a, $b) = @_; ### add(a, b)

    Smart::Commentsでモジュールにサンプルコードを仕込む - Islands in the byte stream (legacy)
  • コマンドラインからPSGIアプリを一度だけ実行する - Islands in the byte stream (legacy)

    ときどきPSGIアプリをコマンドラインから呼び出したくなる*1ので、ハンドラを書きました。それなり*2に$psgi_envを整えてくれるので便利です。 https://github.com/gfx/p5-Plack-Handler-CLI http://search.cpan.org/dist/Plack-Handler-CLI/ `plackup -s CLI app.psgi`で実行できます。また、以下のようにしてREQUEST_URIやQUERY_STRINGを渡せます。 $ plackup -s CLI app.psgi # Request: / $ plackup -s CLI app.psgi --foo bar # Request: /?foo=bar $ plackup -s CLI app.psgi hoge fuga # Request: /hoge/fuga これを使

    コマンドラインからPSGIアプリを一度だけ実行する - 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)
    koba04
    koba04 2011/05/05
    読んでない本が結構ある。。自分は「初めて〜」、「続・初めて〜」、「PBP」へと。(途中モダンPerlでちょい挫折。。)
  • 忙しい人のための「新卒準備カレンダー 2011春」 - Islands in the byte stream (legacy)

    新卒準備カレンダー 2011春のまとめです。 メッセージや哲学、熱い想いなどのまとめにくいものはのぞき、具体的な行動に絞ってまとめてみました*1。これは、未来を変えるための具体的な行動をとれるようにするためです。 いまのところ16日目(@kuenishiさん)までです。エントリを読み返して追加することもあるかもしれません。 失敗を恐れずやってみる "遊びは「失敗しても怒られない」活動です。また、遊びといっても、子供は時間を忘れるほど、真剣に遊びます。結果として多くのことをトライ&エラーして身につけます" (@shibukawa) "「あとで」「そのうち」「何かネタが出来たら」といって後回しにしていては何もできない。動けない。見当違いなブログ記事書いてDISられたり、LTでスベったりしてもいいから とにかく何かやってみる" (@sugyan) "会社の会議で発言しろ - とにかく発言をしない

    忙しい人のための「新卒準備カレンダー 2011春」 - Islands in the byte stream (legacy)
    koba04
    koba04 2011/03/22
    金言の数々。
  • JavaScriptにおけるオブジェクトの定義 - Islands in the byte stream (legacy)

    JavaScriptで一番簡単にオブジェクト指向プログラミングを行う方法 (id:perlcodesample) 私は特にJavaScriptに詳しいわけではなく、オライリーの『JavaScript』、通称サイを読んだ程度なのですが、私の知るかぎりJavaScriptでオブジェクト*1を定義する方法には二つの軸があります。一つ目はオブジェクトの生成方法で、二つ目はメソッドの与え方です。すなわち: new演算子で生成する / オブジェクトリテラルで生成する prototypeによってメソッドを生やす*2 / プロパティを直接代入してメソッドを生やす これについて具体的に説明してほしいとのことでしたので、以下にこの二つの軸の組み合わせ、計4つの方法を示します。 (実行可能なコードはjsdo.itにて: http://jsdo.it/gfx/9LR3) var pointToString =

    JavaScriptにおけるオブジェクトの定義 - Islands in the byte stream (legacy)
    koba04
    koba04 2011/03/19
    わかりやすい比較
  • IT業界を目指す大学生へ - Islands in the byte stream (legacy)

    新卒準備カレンダー 2011春という企画のエントリです。来であれば3/11日の投稿でしたが、東日大震災があったため日の投稿となりました。 東日大震災を目の当たりにして衝撃を受けつつも、身の回りでは困難があるわけでもないので何もしないのがもどかしく、しかし実のところ何もできることはなく、Twitterを眺める、NHKを眺める、コーディングするなどして過ごしています。しかし、電力不足等の懸念はあるものの、春からは社会人になることは依然として明らかです。であれば、今は粛々と日常生活を送るしかありません。そういう訳で、平常モードでポストします。 お前誰よ? [twitter:@__gfx__]と申します。この春からDeNAで働くPerlプログラマです。Perl好きが高じてPerlの仮想マシンをpure Perlで実装したりしたことがあります*1。Shibuya.pmやYAPC::Asiaで

    IT業界を目指す大学生へ - 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)
    koba04
    koba04 2011/03/11
    本当にすごいと思う。
  • 「優れた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)
  • Tips on IEC (implicit encoding conversion) - Islands in the byte stream

    Perlにおいて日語のテキスト文字列とバイナリ文字列*1を結合すると激しく文字化けするのは誰もがつまづくトラップですが、これはPerlのデフォルトのIECが Latin-1 に基づいて行われるからです。UTF-8ではなくLatin-1なのは後方互換のために必要な決定なのですが、我々日人にとってはこのせいで文字化けに苦しまれることになってしまいました。 そこで、IECが発生したときに致命的エラーを発生させるプラグマを書いてみました。 https://github.com/gfx/p5-encoding-implicit `no encoding::implicit` によって、そのスクリプト全体でIECを禁止します。これはencoding::warningsプラグマとほとんど同じですが、デフォルトで警告ではなく致命的エラーであること、スクリプト全体に効果があることが異なります。これにより

    Tips on IEC (implicit encoding conversion) - Islands in the byte stream
    koba04
    koba04 2011/02/24
    知らなかった。
  • Logic-less templateに関する覚書 - Islands in the byte stream (legacy)

    (This entry is a summary of the conversation to @confound and @miyagawa and the paper of ESMVSTE) @confound氏に「Xslateでpush-style template syntaxをサポートしてはどうか」といわれたので、彼やmiyagawaさんからアドバイスをもらいつつ考えたことのまとめ。ESMVSTE(Enforcing Strict ModelView Separation in Template Engines)の内容もまじってます。 HTML::Templateやmustacheのようなlogic-less templateをpush-style template*1という。これは、必要な計算(logic)をすべて終えたあとにテンプレートにデータを「押しこむ」ことによる。 逆に

    Logic-less templateに関する覚書 - Islands in the byte stream (legacy)
  • Mojolicious meets Xslate - Islands in the byte stream (legacy)

    Re: Mojolicious::Liteで、Text::XSlateを使えるようにする 遅レスですが、MojoX::Renderer::Xslateをデフォルトで__DATA__以下を見るようにしてもらいました。 これでMojoでも特別な工夫なくXslateが使えます。。 #!perl package HelloMojo; use strict; use warnings; use Mojolicious::Lite; # バージョン確認のためuseしているが、 # 通常はplubin()で自動的にロードされる。 use MojoX::Renderer::Xslate 0.02; plugin 'xslate_renderer'; get '/' => 'index'; app->start; __DATA__ @@ index.html.tx <html> <body> Hello,

    Mojolicious meets Xslate - Islands in the byte stream (legacy)
  • YAPC::Asia Tokyo 2010を終えて(shut the fuck up and write some code) - Islands in the byte stream (legacy)

    YAPC::Asiaお疲れさまでした! 今回でYAPC参加は2回目ですが、前回とはまた違った面白さがあったかと思います。芝生やらロビーやらでぐたぐだ飲みながら話すのもいいものですね! 個人的には、id:tokuhiromの緩急使い分けるしたたかさや、id:kazuhoさんの何事にも妥協しない気概、大勢のPerlerの仕事に対する姿勢を改めて感じ、自分ももっとコードを書きたい!という思いを強めて会場をあとにしたのでした。 id:miyagawaさんのkeynoteについては二つ印象に残ったことがあります。一つは「遅く始めたのがよかった」というもの。PSGI/Plackは遅く始めたからノウハウが十分に蓄積しており、だから初めから実装の完成度が高くその結果普及も速やかだったと。早ければいいというものじゃないんですね。もう一つは「キュートな名前をつける」ということ。HTTP::Server::PS

    YAPC::Asia Tokyo 2010を終えて(shut the fuck up and write some code) - 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)