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

2010年を振り返る

今年を振り返ると、私生活では就活と卒論が忙しかった。開発関係ではMouseとXslateの開発に大きく力を注いだ。来年はいよいよ社会人となる。遅い社会人デビュー*1だが、まあこんなものだろう。今はただ、働き始めるのが楽しみである。 一方反省点としては、…

Don't use base.pm, use parent.pm instead!

「使っちゃいけない標準モジュール」*1の反響を見ていると、baseが非奨励ということに驚かれた方が少なくありませんでした。そこで、baseについて補足します。 まずbase.pmのドキュメントの最初の文は以下のようになっています。 Unless you are using the f…

Ruby 2.0 のModule#prependをPerl5で

IT Advent Calendarは気軽に他の言語の最新事情を知ることができるのでいいですね。さて、Ruby 2.0ではmixinまわりの機能が大幅に拡張されるようです。 RubyConf 2010 キーノート(2) - Matzにっき Module#prepend - alias_method_chainが滅ぶ日 - I am Cruby…

Testing Moose and Mouse for Any::Moose

Or Re: RT #58255If you use Module::Install, Module::Install::TestTarget will help you.In your Makefile.PL: use inc::Module::Install; ...; test_target test_moose => ( env => { ANY_MOOSE => 'Moose' }, alias_for_author => 'test', ); ...; The …

Perl embarking on new era (perl 5.13.7 features)

perl 5.13.7がリリースされた*1。このバージョンは革新的な新機能を搭載しており、新時代のPerlといっても過言ではないものとなっている。 それが以下の機能である。 Array and hash container functions accept references All built-in functions that ope…

Re: バリデーションはどの位置で必要か

バリデーションはどの位置で必要か - サンプルコードによるPerl入門 バリデーションはアクセサメソッドの内部で行うのではなく、バリデーションの専用のモジュールを使用して、データを受け取った入り口で行うのがよいでしょう。 私はこれには反対です。アプ…

Data::Validatorの凝った使い方

https://github.com/gfx/p5-Data-Validatorが大体できたのでリリースしました。 基本的には名前で引数を指定する関数向けですが、メソッド用に対応したりリストスタイルで引数を指定したりする拡張機能もあります。 まず、$validator->with('Method') でメソ…

Idea of Data::Validator

Smart::Argsは無駄がなくて使いやすいのですが、欠点はXSモジュール(PadWalker)への依存があることと、Perlの作法を完全に無視していることです。 そこで、試みにData::Validatorというモジュールを書いてみました。 https://github.com/gfx/p5-Data-Validat…

Mojolicious meets Xslate

Re: Mojolicious::Liteで、Text::XSlateを使えるようにする 遅レスですが、MojoX::Renderer::Xslateをデフォルトで__DATA__以下を見るようにしてもらいました。 これでMojoでも特別な工夫なくXslateが使えます。。 #!perl package HelloMojo; use strict; us…

perl Makefile.PL | cpanm # for devel requires

Makefile.PL自身のためのモジュールをどう管理するかが結構面倒なわけです。M::IのプラグインでいえばModule::Install::AuthorRequiresがあるのですが、これは単にインストールされていないモジュールを報告するだけで、結局インストールは手作業で行わなけ…

Text::Xslateで未設定の変数を検出する

hirose31さんの要望により、Text::Xslate 0.2013で未設定の変数を検出できるようにしました。といってもヘルパ関数を提供しただけで、実際にはtie hashを使った簡単なラッパークラスを用意しただけですが。 未設定の変数を使ったときに「FILL ME/$name」とい…

livedoor blogに引っ越しました

livedoor blogに引っ越しました。 Islands in the byte stream

Simple zcat(1) in Perl with Compress::Raw::Zlib

Perlのzlibインターフェイスは沢山あってよく分からないが、単純に圧縮/解凍をするだけならCompress::Raw::Zlibがシンプルで良さそうだ。 これでzcat(1)を実装すると以下のようになる。 #!perl -w use strict; use Compress::Raw::Zlib; my $z = Compress::R…

YAPC::Asia Tokyo 2010を終えて(shut the fuck up and write some code)

YAPC::Asiaお疲れさまでした! 今回でYAPC参加は2回目ですが、前回とはまた違った面白さがあったかと思います。芝生やらロビーやらでぐたぐだ飲みながら話すのもいいものですね! 個人的には、id:tokuhiromの緩急使い分けるしたたかさや、id:kazuhoさんの何…

YAPC::Asia 2010 Tokyoで発表しました

至らない点は多々ありましたが無事発表を終えることができました!ありがとうございました!How Xslate WorksView more presentations from gorof.ちょっと捕捉します。 まず会場の質疑応答から(スライドにも簡単に追記しました)。Q. テンプレートをPerlコ…

YAPC::Asia Tokyo 2010で発表します

いよいよ今夜の前夜祭からYAPC::Asiaが始まりますね! 私は自作のテンプレートエンジンXslateについて話します。 How Xslate works ( 2010-10-16 10:00-10:40 at Main Hall) 予定としては、前半15分で使い方を説明するので、Xslateをまったくご存じない方で…

Let's use the /x modifier!

『Perl ベストプラクティス』はクセの強い本ではあるが、私のプログラミングスタイルが受けた影響は少なくない。なかでも、PBPによってPerlの正規表現の/x修飾子のすばらしさを知ったことは大きい。これはPBP以前は使おうと思ったことがなかったが、今となっ…

Xslateが特定の条件で落ちる件(fixed in 0.2009)

Xslateが特定の条件で落ちるという現象がいくつか確認されていました。 Xslateでテンプレート大きいと困った件 ←修正されました - pepponの日記 http://twitter.com/kaz_hosib/status/26527707914:twitter id:pepponさんの記事を参考に巨大なファイルを生成…

Shibuya.pm #14 でライトニングトークをしてきました

先週Shibuya.pm Tech Talk #14が開催されました。最近セキュリティホールを作りにくいミドルウェアに関心があるので、とてもためになりました。なかでも「バグがあってもセキュリティホールがあるよりははるかにマシ」というid:kazuhoさんの言葉が印象的でし…

MouseX::Foreign (a port of MooseX::NonMoose) released!

ずっとやろうと思っていてやっていなかったMooseX::NonMoose の Mouse版をようやく書き上げました。なかなか完成しなかったのは、いい名前が思いつかなかったのと、Mouse本体に組み込めるかどうかの検討をしたかったからです。検討の結果、Mouse本体に組み込…

Data::MessagePackをXslateのキャッシュ保存用に使ってみる

Text::Xslateのコンパイル済みコードは今まで独自フォーマットで保存しており、これはこれでデバッグしやすくて便利だったが、CLIアプリケーションではこのコンパイル済みコードのロードにほとんどの時間を費やす羽目になっていたのだった。そこで、速度が売…

クロージャにバインドされた値を見たい時

Moose/Mouseのmethod modifiersのようにクロージャを多用するプログラミングをしていると、バインドしている変数の中身も含めてDeparseしたいことがよくあります。 そういうケースでは、Data::Dump::Streamerが使えます。 #!perl -w use strict; use feature…

Re: Perlスクリプトの一行目には何と書くべきなのか

Re: Perlスクリプトの一行目には何と書くべきなのか もしCPAN形式でスクリプトを配布するなら、それは#!/usr/bin/perlないし#!perlとするべきで、env(1)を使うべきではないと思います。 CPAN形式のディストリビューションでは、インストールするスクリプトの…

use_xshelper() # M::I::XSUtil 0.30 feature

STATIC_INLINE の話にあるオレオレXSヘルパヘッダをModule::Install::XSUtilから使えるようにしました。 中身はというと、perl.hなどのXSで必要なヘッダファイルをインクルードして、Devel::PPPortで未サポートのPerl APIを定義して、あとはちょっとだけ便利…

XSでCの文字列操作関数を使用するべきでない理由

またはRe: PerlとC言語の型に対応する値への相互変換 XSでCの文字列操作関数の使用はなるべく避けるべきです。Cの文字列操作関数は危険で使いにくいものです。その代わりに、Perlが提供する安全で使いやすいSV APIを使ったほうが余計なことを考えずに済みま…

App::ginitというコマンドを書いたッ!

gitリポジトリを公開していない、ないしリポジトリがgitでないソフトウェアのソースコードをちょっといじりたいことがあります。そんなときは、大体以下のようにしてgitリポジトリを初期化してからソースコードをいじり始めるのがよくある方法だと思います。…

テンプレートエンジンの自動エスケープ機能について

最近Xslateの自動エスケープ機能について考えていたのですが、これは「この機能によって安全性が高まる」というものではなく(結果的にそうでないものより安全ではありますが)、むしろテンプレートエンジンとしてはこれこそ正しい振る舞いなのではないかと…

Xslate 0.1058の新機能

HTMLのソースを返す関数で正しくHTMLソースを出力させるには、戻り値をmark_raw()する必要があります。さもないと、自動エスケープ機構が働いてしまうからです。 このために、0.1057以前のXslateはわざわざラッパー関数を書く必要がありました。しかし、繰り…

Xslateのベンチマークについて

id:tokuhiromたちがベンチマークをいろいろいじったのですが*1、ベンチマークにリアリティを持たせるのはなかなか難しいですね。というわけで、ごちゃごちゃになっていたベンチマークスクリプトを、想定する環境を変えて二つに分けました。一つは、"rich env…

How slow "HTML escape" is?

そういえばXslateのHTMLエスケープってどのくらい遅いのだろか、と思い、変数展開のベンチマークに「HTMLエスケープなし」を加えて測ってみたところ、驚くべき結果になった。 以下の"xslate"が<: $value :>で、"xslate/raw"が<: $value | raw :>の速度の比較である。benchmark/interolate.p</:></:>…