tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

perl

YAPC::Asia 2012 発表資料「Perl と SQL のいろいろ」

こちらをみている方も結構いるみたいなので、リンクをはっておきます。 YAPC::Asia 2012 発表資料「Perl と SQL のいろいろ」

YAPC::Asia にトークを応募しました

今年の YAPC::Asia のトークに応募してみました。Perl と SQL のいろいろ初心者も上級者も Perl 書いてる人は大抵 SQL も書いてると思いますが、初心者から中級者向けくらいの tips とかベストプラクティス的な話ができたらなー、と思ってます。昨年もお話さ…

ShipIt::Step::Copy というものを書いてみた

表記のとおりです。「既に誰かが作ってそうだなー」とか、「むしろコアの機能でできちゃったりしそうだな」とか思ったのですが、ざっと調べた限りはどちらもなさそうなので、試しに書いてみたら意外と簡単にできた。.shipit に Copy というステップが書ける…

SQL::Executor 0.11 をリリースしました

昨日放流したので、もうCPAN の各ミラーにアップされているでしょう。たいした変更はしてないのですが、(2つの変更のうちの1つは)互換性の無い変更なので書いときます。 1. 名前付きプレースホルダで、プログラム側が渡してなくて、SQL 側がパラメータ定義し…

SQL::Executor を cpan にアップしました

前にだいたい書きましたが、SQL::Executor というモジュールを書いてます。簡単な SQL は SQL::Maker を使って SQL を生成して投げて、面倒くさいやつは生のSQLと名前付きプレースホルダを使って SQL を投げれる物体です。 use DBI; use SQL::Executor; my $…

Class::Load を使う(try_load_class と load_optional_class)

Class::Load、動的にモジュールを読み込んでくれて、しかも require より柔軟で、便利です。で、Class::Load::try_load_class を使っていたのですが、ロード先がコンパイルエラーとかになっている場合に、0 が返ってきてしまうんですね。die してほしいなー…

Kappa という ORM を書いてみた話

このへんの続きみたいな話。Kappaという ORM を書いています。欲しい機能は大体できて、まあドキュメントがアレなのですが、とりあえず自分で使う分には困らないし、頑張れば使いたい人も使えるかなー、くらいまではきたのでここに書いた次第です。 インスト…

ORM とかテーブルデータゲートウェイとか、その周辺の話

このへんとかこのへんの続きみたいな話。。。だと思う。 ORM がほしい 簡単な SQL を簡単に Perl から投げれるといいな 難しい SQL(とくに JOIN いっぱいするような SELECT)は、クエリビルダーで頑張るのではなく、SQL を書いて実行したい その際に名前付き…

no strict 'refs'じゃないとできないと思ってた

今日、ちょっとだけビックリしたことメモ。 #!/usr/bin/perl use strict; use warnings; sub aa { print "aa\n"; } 'aa'->(); こんなの書いて、実行すると、ふつうに tsucchi@vogue[512]$ perl a.pl aaこんな感じで実行できる。表題のとおり、no strict 'ref…

最近のお仕事の話とか、ORM のはなしとか

たまに書いてますが、最近は、Teng使ったりしてます。ほかの ORM はあんま知らないです。つーか、ちゃんとした Web アプリとかあんまり書いたことないし、つまり、Web系の前線とかには全然居ない人です。地味に MES(製造実行システム)のバックエンドを作って…

SQL::Executor ってモジュールを書いてみた

僕は基本的には、SQL生派で、最近少しずつ Teng を試したりしています。なので、DBI でも機能的には問題ない、と思っているのですが、テストコードやちょっとしたスクリプトだと、prepare して、execute して fetchrow はちょっとダルいなぁ、と思うわけです…

DBのスキーマ変更をテストする

ずいぶん前から実施しているのだけど、書いてなかったので書きます。皆様は DB のスキーマ変更(ALTER TABLE)ってどうやって管理していますか?SQL 手打ちは論外として、事前に変更の SQL を作るとしても、テストしたいですよね?と、いうわけで、こんな感じ…

Teng の不具合をみつけて直してもらったのと、機能追加してもらった話

togetter にまとめました。 Teng の不具合を直してもらった話 + 機能追加してもらった話 set_column() をつかって update した場合に、deflate がかからない不具合があって、それを直してもらった テーブルのカラム名で CamelCase を使っている場合に Row オ…

Teng の Row オブジェクトをテストする

最近、わりと普通な感じの web アプリを書いてたりします。で、Teng 使ってたりします。Teng は Row オブジェクトにあれこれ機能を追加したりできて便利なのですが、ちょっと難しいロジックが入ったりするとテストを書きたくなってきます。そこで、こんなも…

ハッシュリファレンスのデリファレンス

ハッシュリファレンスのデリファレンスで初心者っぽいハマり方をしたので、メモ。 #!/usr/bin/perl use strict; use warnings; use feature qw(say); my $aa = { aaa => { bbb => 'ccc' }, xxx => 'yyy', }; say "aaa"; say $aa->{aaa}->{bbb};#ok say "xxx"…

DBD::mysqlPP の話

YAPC::Asia 2011 の1日目の LT のちょい前くらいに、軽く twitter の TL みてたら、こんなのがありました。JVN#51216285 DBD::mysqlPP における SQL インジェクションの脆弱性で、そこにこんな風に書いてありました。 対策方法DBD::mysqlPP を使用しない 開…

YAPC::Asia 2011「あんなテスト、こんなテスト(this and that about testing)発表資料

あんなテスト、こんなテスト(this and that about testing)View more presentations from Takuya Tsuchida.

YAPC::Asia Tokyo 2011 が始まってます

表題のとおりです。昨日10/13 は前夜祭でした。まあ僕はトークを聞いてただけで、まったく交流せず、終わったらすぐ帰っちゃいましたが。。。だってスライド完成してなかったし。。。*1昨日のレポートはもうあがっていて、技評さん相変わらず仕事速いなー、…

スクリプトのテスト

ふつうは、Test::Scriptをつかうのだけど、このモジュールは CPAN レイアウトじゃないとうまく動いてくれない。(blib とかみてるので、CPAN レイアウトにして、make test じゃないと動かないみたいです)ただ、どうしても「コンパイルエラーくらいはしらべた…

YAPC::Asia でお話します & チケット絶賛発売中です!

YAPC::Asia でお話することになりました!本編ではありませんが、スイーツ♡エリアというところで、埼玉銘菓をつまみながら(?)、Perl のテスト周り、特に「テストしにくい部分をどうやって何とかするか」みたいなお話をしたいと思います。そして、チケット絶…

prove の並列実行の話

perl でテストスクリプトを実行する prove コマンドには -j という並列実行するオプションがあります。たとえば prove -j2 とすると、2プロセス作って並列実行されます。ただ、ウチのところのテストコードは基本的にストアドプロシージャのテストなので、DB …

Perl の shebang 解析の謎

(2011/08/19 追記あり)たとえば、こんなシェルスクリプトを作ってみて、 tsucchi@independent[102]% cat a.sh #!/bin/sh echo "aaa"; で、sh ではなく、Perl で実行してみます。 tsucchi@independent[103]% perl a.sh aaa すると、ふつうにシェルスクリプト…

Variable::Expand::AnyLevel というモジュールを書いてみた

誰得?俺得!な感じなのですが、readpipe(バッククォート演算子)のオーバーロードで書いたように、readpipe をオーバーロードすると、引数の文字列を変数展開してくれない問題があるので、任意の変数をいい感じに展開するヘンな物体を作ってみました。tsucch…

「ふつうの Haskell プログラミング」一人読書会(2日目)

「ふつうのHaskellプログラミング」という本を読んでいます。ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門さて、今日は2章の残りと演習問題をやってみました。まずは head です。ここで実装するのは、標準入力をうけて、先頭10…

「ふつうの Haskell プログラミング」一人読書会(1日目)

「ふつうのHaskellプログラミング」という本を読んでいます。前から Haskell 勉強したいなー、と思っていて、「Real World Haskell」とか、「プログラミングHaskell」とか買ってみて、勉強したのだけど、「なんか説明を端折ってないか?」みたいなところが多…

readpipe(バッククォート演算子)のオーバーロード

バッククォート演算子をオーバーロードしたくて、readpipe を上書いてみたのですが、なんか妙な動きをしてくれます。 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; BEGIN { *CORE::GLOBAL::readpipe = sub { warn Dumper(\@_); }; } `ls -l…

subtest と Hook::LexWrap を使って xUnit みたいな setUp, tearDown をする

発見したのは結構前なのですが、twitter でつぶやいても(これとかこれ)、あんまり(っていうか全く)反響なかったのでこっちにも書いておきます。Perl でテストを書いているときに、xUnit の setUp/tearDown*1を使いたい場合、Test::Classを使ってテストを書い…

DBD::Mock の execute() 時のエラーを偽装する

DBD::Mock は $dbh->{mock_add_resultset} = { sql => 'BEGIN SOME_PROC(); END;', results => DBD::Mock->NULL_RESULTSET, failure => [ 12345, 'なんかエラー' ], }; こんな感じで、エラーコードを返すような仕込みができるらしいのだけど、RaiseError => …

MYMETA.yml ってどうすればいいの?

ちょっと前に、新しい CPAN モジュールを ship した関係で気づいたのですが、Perl 5.14 でモジュール作成すると、MYMETA.yml というファイルが生成されます。と、いうか、5.14 というよりはどうやら ExtUtils::MakeMaker の 6.57 以降を使うと生成されるみた…

Test::Mock::Net::FTP というモジュールを書いた

表題の通りです。 というか、2009年ごろからチマチマと書いてたやつがある程度まともになったので、そろそろ CPAN にあげてもいいかなー、と思ってます。一応月曜に会社でコレ使ってるテストコード流して確認してから ship しようと思ってるので、リリースは…