2011-01-01から1年間の記事一覧

なぜ bytes::length($str) はよくないのか

bytes.pm will be deprecated in Perl 5.12の話の続きです。 なぜ bytes::length()*1を使うべきでないか。それは、一般論としてコードの意味がおかしく、また実際にバグの温床になるからです。 まず、入力されたバイト列をデコードして内部表現にし、出力の…

Re: モダンPerl連載第43回

モダンPerlの世界へようこそ#43がXslateの話だと思ったらノイズ呼ばわりされたでござる、の巻。 著者であるid:charsbarさんの捕捉によれば以下のとおり モダンPerl連載第43回 - Charsbar::Note 「TTの代用品としての」Template::AlloyとText::Xslateについて…

Xslate mailing list

I have created the Xslate mailing list to support Xslate usage ;)

Dist::Maker覚書

h2xsからModule::Starter、Module::Setupといろいろなディストリ生成ツールを使ってきましたが、ここ半年ほどはDist::Makerという自作ツールを使っています。特にCPANにリリースするつもりはなかったのですが、Dist::Makerが良い。で紹介してもらったのでち…

Shibuya.pm #16 で発表してきました

Shibuya.pm Technical Talk #16 夏の正規表現祭りにスピーカーとして参加してきました。mixiさん会場提供ありがとうございました! 私は「Hello, re::engine!」と題してPerlのプラガブル正規表現エンジンについて発表しました。「正規表現」のイントネーショ…

『心理学の「現在がわかる」ブックガイド』がいい感じ

『心理学の「現在がわかる」ブックガイド』は5人の心理学者による120冊以上の書籍のレビューである。この本は私の大学時代の恩師二人が監修&共著ということで買ってみたが、かなり面白い。扱っている本はメジャーなものが多く、私が読んだことのある本も十…

Released FurlX::Coro!

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…

Web+DB Press vol.63の見所

同期に向けたエントリです。今月のWeb+DB PressはDeNAのエンジニアである[twitter:@xaicron]さんが寄稿しているのでオススメです。 Web+DB PRESS vol.63 の Perl Hackers Hub に寄稿しました - Technology of DeNA WEB+DB PRESS Vol.63作者: 竹迫良範,和田卓…

Perlのメモリリークを見つける方法

Perlではメモリリーク検出ツールがいくつか開発されているので、top(1)の結果を眺めるよりそういうツールを使うほうが楽である。 さて、メモリリークが発生しているとき、その可能性としてはだいたい以下の4つが挙げられる。 Perlレベルでの循環参照 グロー…

CapsLockキーをControlキーにしたら予想以上に楽になった件

いままでキー配列のカスタマイズにあまり興味がなく基本的にデフォルトのままのキー配列に慣れるようにしてきた。キー配列のカスタマイズをすると何かの折にカスタマイズされていないPCを使うときに非常に不便だからである。しかし最近は左手の小指周辺が慢…

Xslate 1.3000 リリースメモ

Xslate 1.3000でhtml_builder()に非互換な変更を行いました。 html_builder()で作成したフィルタは、いままではunmark_raw()で型情報を落とした引数を受け取っていました。しかし1.3000からは引数をそのまま受け取るようになります。これによりフィルタが全…

[PSGI]psgi.errorsって本当に必要なの?という話

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

each()は遅い上に微妙な問題も起きやすい

特別な条件がないかぎり、each()は使うべきではありません。代わりにkeys()/values()を使うべきです。その理由は2つあります。 each()は遅い each()でハッシュ全体をループするのは遅いです。これは、keys()/values()がその内部の値をそのまま参照する*1のに…

perlbrewとPERL5LIBの相性は悪い

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

Smart::Commentsでモジュールにサンプルコードを仕込む

ソースコードを読んでいると、関数の引数や戻り値の具体的な例がほしいと思うことがよくある。。そこで、実行可能なコメントを仕込むモジュールであるSmart::Commentsを使って、モジュール内にテストを兼ねたサンプルコードを仕込めばいいのではないかと考え…

常識を覆すソートアルゴリズム!その名も"sleep sort"!

TwitterのTLで知ったのだが、少し前に海外の掲示板で"sleep sort"というソートアルゴリズムが発明され、公開されたようだ。このアルゴリズムが面白かったので紹介してみる。 Genius sorting algorithm: Sleep sort 1 Name: Anonymous : 2011-01-20 12:22 諸…

Perlのバージョン表記について

このたびperl 5.14.0がリリースされたわけですが、Perlのバージョン表記x.y.zのyは偶数が正規版、奇数が開発版となっています。したがって、5.13系は開発版で今回リリースされた5.14は正規版というわけですね。

The three significant features in Perl 5.14

perl 5.14.0がリリースされた。Ubuntuなどでは、perlbrew経由でインストールするといくつかテストが失敗するようなので--forceオプションを使わないとインストールできない。 # 念のため-DDEUGGINGもつける。threadは好みで。 $ perlbrew --force install pe…

最小限のls -laを書いてみた

プログラミング初心者にオススメのPerl本にて、リャマ本(『初めてのPerl』)を読了した段階でls(1)やgrep(1)の簡易版を作れるようになっていればよい、と書きました。そこで実装例として、最小限のls(1)を実装してみました。また、リャマ本読了程度の知識を前…

コマンドラインからPSGIアプリを一度だけ実行する

ときどきPSGIアプリをコマンドラインから呼び出したくなる*1ので、ハンドラを書きました。それなり*2に$psgi_envを整えてくれるので便利です。 https://github.com/gfx/p5-Plack-Handler-CLI http://search.cpan.org/dist/Plack-Handler-CLI/ `plackup -s CL…

プログラミング初心者にオススメのPerl本

この時期、Perlを学び始める方も多いと思います。そこでプログラミング初心者がPerlを学ぶのに適した本を、私が実際に読んだことのあるものの中から選んでみました。 1冊目 1冊目はなんでもいいと思うのでとりあえず定番としてリャマ本を挙げておきます。初…

DotCloudでHello, world!してみた(Ubuntu編)

id:miyagawaさんにPerl on DotCloudのbeta codeをもらったのでさっそく試してみた。 参考: dotCloud でPSGI Hello World (lestrrat) 結果、簡単にHello, world!ができた。 http://hello.goro.dotcloud.com/ lestrratさんの記事ではMacOSXだったみたいだが、…

Xslateの関数でクロージャを使う

[twitter:@shmorimo]さんとのやりとりのなかで考えた、Xslateの関数にクロージャを渡したいケースのまとめです。 まず前提条件: リクエスト毎にクロージャをXslateに渡したい Xslateの登録関数を定義できるのはnew()のときのみ 動的に関数を加えることはで…

入社祝い御礼

このたび多くの方から入社祝いをいただいたので、ここで改めて御礼申し上げます。ありがとうございます。 『実践ハイパフォーマンスMySQL』([twitter:@kazeburo]さんより) 『安全なWeアプリケーションの作り方』([twitter:@trinityCRZ]さんより) 『並列コ…

/gcと\Gを使って複数の正規表現式でトークンを少しずつ削りとる

複数の正規表現式で文字列からトークンを切り出したいことがある。しかし、以下のコードは動かない。無限ループになってしまう。 #!perl -w # THIS DOES NOT WORK!!! use 5.10.0; use strict; use utf8; my $s = 'foo bar baz FOO BAR BAZ'; while( 1 ) { if…

DeNAに入社しました

既に2週間ほど経過していますが、4/1付けでDeNAに入社しました。なかなか刺激的な毎日を送っています。 さて、これからは忙しさが増す一方でしょうから、今のうちに初心を振り返っておきます。 私はこの数年間、コードを書きながら、自分の人生の中でやりた…

『CPANモジュールガイド』の感想

[twitter:@tomita]さんの『CPANモジュールガイド』を献本いただきました。ありがとうございます。Perl CPANモジュールガイド作者: 冨田尚樹,タナカユカリ出版社/メーカー: ワークスコーポレーション発売日: 2011/04/08メディア: 単行本(ソフトカバー)購入:…

OSDC.TW 2011でLTしました

OSDC.TW で Xslate の布教をしてきました。 Let's use Xslate - Osdc.tw 2011 View more presentations from Goro Fuji 三行で纏めると Xslate最強 インストールは簡単 コマンドラインで試すのも簡単 です!

WindowsでL5を使ってみる

Web+DB PressでClojureベースのプレゼンテーションツールであるL5: Yet Another Presentation Tool for Lispersを知ったのでちょっと使ってみた。コードとデータが同一フォーマットであるLispはプレゼンテーションツールに適しているかもしれないと思ったか…

OSDC.TW 2011 に行ってきます

去年も行きましたが、今年もShibuya.pmのPerl hacker達といっしょにOSDC.TWに行って発表してきます*1。ネタは去年と同じXslateなので代わり映えしません。しかしながら、当時は本当に書き始めたばかり*2でまだ海のものとも山のものともつかなかったものが、…