Charsbar::Note charsbar Hatena::Blog hatenablog://blog/17680117127084472958 JSON::XS 4.0の変更点と、それにともなうJSON、JSON::PPの変更について hatenablog://entry/17680117127084472990 2018-12-07T22:38:40+09:00 2019-04-28T01:00:07+09:00 これはPerl Advent Calendar 2018 7日目の記事です。tl;dr 先日リリースされたJSON::XS 4.0が2013年に行われたJSONの仕様変更に追随したので、decode_json($json) の結果はかならずしもリファレンスではなくなりました。encode_json($value) にもリファレンス以外の値を受け入れるようになっています。結果、JSONモジュールの挙動がバックエンドによって異なる状態になり、各地でテストがこけるなどの影響が出ました。これを受けてJSON、JSON::PP側も変更に追随しましたが、みなさまの方でも適宜ご対応をお願いします。 2018… <p>これは<a href="https://qiita.com/advent-calendar/2018/perl">Perl Advent Calendar 2018</a> 7日目の記事です。</p><p>tl;dr</p> <blockquote> <p>先日リリースされた<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS 4.0が2013年に行われた<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>の仕様変更に追随したので、decode_<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>($<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>) の結果はかならずし<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%E2%A5%EA%A5%D5">もリフ</a>ァレンスではなくなりました。encode_<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>($<a class="keyword" href="http://d.hatena.ne.jp/keyword/value">value</a>) に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%E2%A5%EA%A5%D5">もリフ</a>ァレンス以外の値を受け入れるようになっています。結果、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>モジュールの挙動がバックエンドによって異なる状態になり、各地でテストがこけるなどの影響が出ました。これを受けて<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP側も変更に追随しましたが、みなさまの方でも適宜ご対応をお願いします。</p> </blockquote> <p>2018年11月16日付けで<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSのバージョン4.0が出ました。3.0が出たのが2013年10月29日のことですから、5年振りの大型アップデートということになります。今回の目玉は二点。いずれもこの数年界隈で何度となく話題に上がっていたものです。</p> <div class="section"> <h4>allow_nonrefがデフォルトで有効に</h4> <p>配列やハッシュにくるまれていない素の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AB%A5%E9%A1%BC">スカラー</a>を受け付けるallow_nonrefというオプションは2007年に<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSがリリースされた当初から存在していたのですが、これはあくまでもRFC4627 (2006年)に対する拡張の扱いで、デフォルトでは無効になっていました。</p><p>その後、2013年にRFC7158が出て<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>の仕様が変わり、素の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AB%A5%E9%A1%BC">スカラー</a>も<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>の値として有効なものとなりますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSは(そして<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PPも)セキュリティ上の懸念があるとしてこの仕様変更には追随しませんでした。<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP側にも仕様変更に追随するよう<a href="https://rt.cpan.org/Ticket/Display.html?id=98500">&#x554F;&#x984C;</a><a href="https://rt.cpan.org/Ticket/Display.html?id=98507">&#x63D0;&#x8D77;</a>されていましたが、もちろん<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS側にも同じような要請はあったのでしょう。2016年にリリースされた<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS 3.02では新旧の仕様に関してわざわざドキュメントに一節を設け、</p> <blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS will not allow scalar data in <a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a> texts by default</p> </blockquote> <p>と態度表明をしていました。だから、私自身この変更を見たときにはかなり驚いたのですが、よく見てみると、その節の最後にはこのような留保も書いてありました。</p> <blockquote> <p>future versions might/will likely upgrade to the newer <a class="keyword" href="http://d.hatena.ne.jp/keyword/RFC">RFC</a> as default format, so you are advised to check your implementation and/or override the default with ->allow_nonref (0) to ensure that future versions are safe.</p> </blockquote> <p>そして今回、この助言に従っていなかったモジュール、アプリケーションが仕様変更の影響を受けている、ということになります。</p><p>もっとも、問題になっているといっても、今回の変更はこれまでエラーとなっていた<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>やデータを受け付けるようになった、というもの。互換性のためにあえてそのようなデータ/<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>がエラーになることを確認するテストを書いていた場合、あるいはソケットなどを経由して垂れ流した<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>データをインクリメンタルパーサーでデコードしていたという場合はともかくとして、一般的な用法の範囲内では、既存のデータ、既存の<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>が受け付けられなくなる、ということはありませんので、まずはご安心をば。</p><p>ただ、デコード時のエラーチェックが不足していたり、デコードしたデータがかならずリファレンスであると仮定しているようなコードでは、想定外の入力が入ってきて予期せぬエラーが発生することがありえるのでご注意ください。</p><p>既存の挙動を変えたくない場合は、encode_<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>/decode_<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>のようなラッパーをそのまま使うのはやめて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS->new->utf8->allow_nonref(0)->encode/decodeのようにするか(もちろん可能なら<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS->new->utf8->allow_nonref(0)の部分は何かの変数にキャッシュしておくべきでしょう)、いっそのこと<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS/<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP 4.0に明示的に依存するようにして、テストもallow_nonrefが有効になっていることを前提にするのもありかと思います(4.0より前の<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSはすでに<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>から削除されているため、明示的に指定しない限り、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSに依存しているモジュールがあれば現状では<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS 4.0がインストールされます)。</p><p>この変更によって、かれこれ三週間ほど<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a> 2.97001のテストがこけ続け、CI環境や各種スモーカーを運用しているみなさまにはご迷惑をおかけしていたのですが、これを機に<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>および<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PPも同様にallow_nonrefを有効にした4.0をリリースしました。一部の界隈からは<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PPまで上げる必要はなかったのではないかという声も聞こえてきますが、そもそも<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP側が待っていたのは<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSが仕様変更に追随していなかったからですし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSと<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PPのメンテナ間ではなるべくお互いの互換性を維持しようという合意もできているので、この後に及んで<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PPだけあえて十年以上昔の古い仕様にこだわり続ける理由もないと思っています(この年末の忙しいときにこんなことはしたくなかったという思いはありますが、このタイミングを逃すと今度は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.30のコードフリーズが来るんですよね…)。</p><p>なお、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a> 4.0は、テストに使う<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::backendPPモジュールが<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP 4.0相当になっているだけで、実際には<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS 2〜4、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP 2.90〜4のいずれがバックエンドになっても動作します(Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSも一部の非互換部分を除いては動作しますが、推奨しません。Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSを使うのであれば、ラッパを使わず直接使うことをおすすめします)。</p><p>また、本項執筆時点ではCpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSは今回の変更に追随していません。そのため、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::MaybeXSを利用して互換性のテストを行っているモジュールの中にはこの影響を受けてテストがこけているものが出ているかもしれません(メンテナ陣には問題が伝わっているので、この週末には必要に応じてなんらかの対策が取られるかもしれませんが、現時点でははっきりしたことはお伝えできません)。また、Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSは後述するまったく別の理由で独自にバージョン4にしてしまったため、現状Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSと<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>を共用している方は、この変更の有無をバージョンからは簡単に判別できない状態になっています(<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSと<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PPはメジャーバージョンと主要な機能の対応が取れているので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>->backend->VERSION >= 4で判別できるのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>のバックエンドがCpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSになるとこの条件では正しく判定できません)。Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSをご利用の方はご注意ください。</p> </div> <div class="section"> <h4>boolean_values</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS 4.0では新たにboolean_valuesというメソッドが導入されました。これは<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>をデコードしたときにtrue/falseの値を任意のオブジェクトに変更できる、というものです。</p><p>これは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>単体で使っている分には特に意味のない機能ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>でデコードしたデータをたとえば何か別のシ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%A2%A5%E9">リアラ</a>イザに引き渡したいとき、このboolean_valuesであらかじめbooleanやData::MessagePack::Booleanのオブジェクトを渡しておくと、データ構造の中にtrue/falseがあったら<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP::Booleanのオブジェクトではなく、該当のオブジェクトに置き換わるので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAML">YAML</a>やMessagePackでそのまま<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%EA%A5%A2%A5%E9%A5%A4%A5%BA">シリアライズ</a>しやすくなる、と。</p><p>もっとも、この機能が有効なのはデコードのときのみなので、booleanのように<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP::Booleanとの互換性がないモジュールの場合、該当のデータ構造を<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>に戻す場合はconvert_blessedなどのお世話になることになります。<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP::Booleanと互換性のあるTypes::Serialiser(::BooleanBase)やData::Boolのオブジェクトの場合はデコードで取り出したデータをそのまま<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9">エンコード</a>に回せます。</p><p>共通の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A1%BC%A5%EA%A5%A2%A5%F3">ブーリアン</a>オブジェクトは欲しいけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>じゃないものにまで<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP::Booleanを使うのはなあ、という方はぜひ一度お試しください。</p> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/PERL">PERL</a>_<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>_PP_USE_B<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a></h4> <p>以前、<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Hokkaidoの前夜祭で<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PPの数値判定処理を変更する実験的なパッチを受け入れたという話をしました。このパッチは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.27.1で一時的に(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>側の変更のせいで)動作しなくなるなど、いささか微妙な性質のものなのですが、この変更によって<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>の出力が完全に一致するか確認するテストが壊れてしまうという苦情が届いていました。だいぶ今更ではあるのですが、状況を改善するため、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP 4.0では<a class="keyword" href="http://d.hatena.ne.jp/keyword/PERL">PERL</a>_<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>_PP_USE_B<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>が真の場合は旧来のBモジュールを使った数値判定を行うようにしてあります。</p> </div> <div class="section"> <h4>Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS由来の警告を無効に</h4> <p>Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSが読み込まれた状態で<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP(::Boolean)を読み込むと長らく警告が出るようになっていた(Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS側はその警告を殺して<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP::Booleanの挙動を差し替えていた)のですが、いい加減うっとおしくなっていたので<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP側でも警告を殺すようにしました。ロード順で<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::PP::Booleanの挙動が変わるのはあまりうれしいことではないのですが、ふつうに真偽値としてのみ使ってくださる分には影響ないはずです。</p> </div> <div class="section"> <h4>番外</h4> <p>同じバージョン4.0つながりということでもうひとつ。今回<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>のテストを修正していてハマったことのひとつに、Cpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS 3.99_01で導入されたCpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XS::TypeによってCpanel::<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>::XSのencode_<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>のプロトタイプが変わり、以下のようなテストが死ぬようになったことがあげられます。</p> <pre class="code" data-lang="" data-unlink>ok (&#39;[5]&#39; eq encode_json $j1, &#34;cjson1&#34;);</pre><p>encode_<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>($j1)のように明示的にかっこでくくればよいだけの話ではあるのですが、ふだんからプロトタイプを利用してencode_<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>のかっこを省略している方は頭の片隅に入れておいていただければ。</p><br /> <p>というわけで、いろいろ大変な<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>まわりですが、今回4.0がらみで変わったところをまとめておきました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>サーバなどでいずれかのモジュールをご利用の方も多いと思いますので、みなさまの方でも必要に応じて適宜ご対応いただければさいわいです。</p><br /> <br /> <p>明日は <a href="https://qiita.com/yukikimoto">yukikimoto</a> さんです。</p> </div> charsbar London Perl Workshop 2017に行ってきた hatenablog://entry/17680117127084473063 2017-12-04T23:17:27+09:00 2019-04-28T01:00:08+09:00 tl;dr: It was really awesome (again)! A big thank you to the organisers and the speakers and everyone. 遅ればせながら、2017年11月25日にロンドンで開催されたLondon Perl Workshopに行ってきました。他の方の資料やビデオもそのうち公開されていくとおもいますが、とりあえず以下にLTの発表資料を置いておきます。2016年のヤパチーで話したPerl::PrereqScanner::NotQuiteLiteが大分いい感じになったので、そのうちCPANTSのチート対策します、という… <blockquote> <p>tl;dr: It was really <a class="keyword" href="http://d.hatena.ne.jp/keyword/awesome">awesome</a> (again)! A big thank you to the organisers and the speakers and everyone.</p> </blockquote> <p>遅ればせながら、2017年11月25日にロンドンで開催されたLondon <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Workshopに行ってきました。他の方の資料やビデオもそのうち公開されていくとおもいますが、とりあえず以下にLTの発表資料を置いておきます。<a href="http://d.hatena.ne.jp/charsbar/20160803/1470234800">2016&#x5E74;&#x306E;&#x30E4;&#x30D1;&#x30C1;&#x30FC;&#x3067;&#x8A71;&#x3057;&#x305F;</a><a href="https://metacpan.org/pod/Perl::PrereqScanner::NotQuiteLite">Perl::PrereqScanner::NotQuiteLite</a>が大分いい感じになったので、そのうちCPANTSのチート対策します、という話(なぜかNotQuiteLiteという名前が想定外にウケたらしく、話している途中で何かやらかしたかとずいぶん戸惑ったものでした)。</p><p>NQLについては、発表駆動開発で当時できていなかったことの大半はできるようにしましたが、まだだいぶ遅いですし(一部の例外的なモジュールの解析には<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>::PrereqScannerの倍以上かかったりする)、もう少し自由度を上げられるようにしないと自分自身が困るので、ドキュメントの更新ともども、時間ができたらなんとかしたいとおもっています。</p><p>おまけとして<a href="https://metacpan.org/pod/Test::CPANfile">Test::CPANfile</a>というのもでっち上げました。テストするより都度更新した方が便利な場合も多いとはおもいますが、いろいろな理由でMinillaなどに移行できていない方には役に立つかもしれません。</p><p><iframe src="//www.slideshare.net/slideshow/embed_code/key/N5fwGduRo22Gs9" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/charsbar/better-detection-of-what-modules-are-used-by-some-perl-5-code" title="Better detection of what modules are used by some Perl 5 code" target="_blank">Better detection of what modules are used by some Perl 5 code</a> </strong> from <strong><a href="//www.slideshare.net/charsbar" target="_blank">charsbar</a></strong> </div></p> charsbar WEB+DB PRESS Vol.100 hatenablog://entry/17680117127084473094 2017-08-23T22:19:26+09:00 2019-04-28T01:00:09+09:00 8月24日発売のWEB+DB PRESS Vol.100に、Perl Hackers Hub連載の第46回として「Perl 5.26で変わること」という記事を書きました。タイトルからもおわかりの通り私のはこれまでYAPC::Hokkaido、YAPC::Kansai、YAPC::Fukuokaで話してきたことの焼き直しですが、100号記念ということで力の入った記事が多いのでぜひお手にとってみてください。WEB+DB PRESS Vol.100作者: 河原一哉,白土慧,菊田洸,西鳥羽二郎,柄沢聡太郎,大谷勇毅,新井啓太,HANADA Yoshihito,増田謙一,池上達也,木下祐実,藤原大,長野… <p>8月24日発売の<a href="http://gihyo.jp/magazine/wdpress/archive/2017/vol100">WEB+DB PRESS Vol.100</a>に、<a href="http://gihyo.jp/dev/serial/01/perl-hackers-hub">Perl Hackers Hub&#x9023;&#x8F09;</a>の第46回として「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.26で変わること」という記事を書きました。タイトルからもおわかりの通り私のはこれまで<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Hokkaido、<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Kansai、<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Fukuokaで話してきたことの焼き直しですが、100号記念ということで力の入った記事が多いのでぜひお手にとってみてください。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774191299/charsbarj-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/61EEU3dmOUL._SL160_.jpg" class="hatena-asin-detail-image" alt="WEB+DB PRESS Vol.100" title="WEB+DB PRESS Vol.100"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774191299/charsbarj-22/">WEB+DB PRESS Vol.100</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 河原一哉,白土慧,菊田洸,西鳥羽二郎,柄沢聡太郎,大谷勇毅,新井啓太,HANADA Yoshihito,増田謙一,池上達也,木下祐実,藤原大,長野雅広,樫田光,縣俊貴,大<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%EE%C6%C1">川徳</a>之,栗<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CE%D3%B7%F2%C2%C0%CF%BA">林健太郎</a>,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BE%AE%BB%F4%C3%C6">小飼弾</a>,庄司嘉織,鈴木勇介,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%E2%B6%B6%C0%AC%B5%C1">高橋征義</a>,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%C4%C3%E6%C5%AF">田中哲</a>,徳永拓之,中嶋謙互,中島拓,西尾泰和,西田圭介,羽生章洋,藤本真樹,外村和仁,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%DE%A4%C4%A4%E2%A4%C8%A4%E6%A4%AD%A4%D2%A4%ED">まつもとゆきひろ</a>,松本亮介,ミック,三宅陽一郎,森田創,山本陽平,吉羽龍太郎,牧大輔,石垣憲一,平原正裕,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%D2%A4%B2%A4%DD%A4%F3">ひげぽん</a>,<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%2BDB%20PRESS">WEB+DB PRESS</a>編集部</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2">技術評論社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2017/08/24</li><li><span class="hatena-asin-detail-label">メディア:</span> 大型本</li><li><a href="http://d.hatena.ne.jp/asin/4774191299/charsbarj-22" target="_blank">この商品を含むブログ (1件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> charsbar YAPC::Fukuokaに行ってきた hatenablog://entry/17680117127084473146 2017-07-08T13:08:19+09:00 2019-04-28T01:00:10+09:00 遅ればせながら、YAPC::Fukuokaに参加してきました。発表資料は以下の通りです。今回はPerl 5.26がリリースされたこともあって、前回、前々回の分から5.24の内容を削り、その分5.26のやや細かい話や、開発が始まったばかりの5.27系の話を追加しました。調べ物の過程でふたつほど5.26.0のバグを踏んだりもしましたが、いずれも次のリリース時には直る見込みです。準備の時間が足りず掘り下げきれなかった部分もありますが、その辺はまたいずれ何かの機会に。 2017年夏のPerl from charsbar JPAはじめスタッフ、スポンサーのみなさま、ありがとうございました。Okinawa… <p>遅ればせながら、<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Fukuokaに参加してきました。発表資料は以下の通りです。今回は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.26がリリースされたこともあって、前回、前々回の分から5.24の内容を削り、その分5.26のやや細かい話や、開発が始まったばかりの5.27系の話を追加しました。調べ物の過程でふたつほど5.26.0のバグを踏んだりもしましたが、いずれも次のリリース時には直る見込みです。準備の時間が足りず掘り下げきれなかった部分もありますが、その辺はまたいずれ何かの機会に。</p><p><iframe src="//www.slideshare.net/slideshow/embed_code/key/hi6lBNOUCnupF4" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/charsbar/perl-2017-summer" title="2017年夏のPerl" target="_blank">2017年夏のPerl</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/charsbar">charsbar</a></strong> </div></p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/JPA">JPA</a>はじめスタッフ、スポンサーのみなさま、ありがとうございました。Okinawaも楽しみにしています。</p> charsbar '.' in @INC問題とその対処法について(2017年3月版) hatenablog://entry/17680117127084473207 2017-03-18T18:09:27+09:00 2019-04-28T01:00:10+09:00 YAPC::HokkaidoやYAPC::Kansaiで話した通り、Perl 5.26ではセキュリティ上の問題で@INCにカレントディレクトリが含まれなくなります。p5pやツールチェーン側ではその影響を軽減すべくCPANクライアントやTest::Harnessに従来の挙動を残すような仕組みを用意中ですが、現時点ではまだすべての対策が出そろっているわけではありません。最終的にどうすべきかは5月に開催される予定のPerl Toolchain Summit (旧Perl QA Hackathon)後にあらためてまとめるつもりですが、直接的な影響を受けるCPAN Authorのところには順次バグレポー… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Hokkaidoや<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Kansaiで話した通り、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.26ではセキュリティ上の問題で@INCにカレント<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リが含まれなくなります。p5pやツールチェーン側ではその影響を軽減すべく<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>クライアントやTest::Harnessに従来の挙動を残すような仕組みを用意中ですが、現時点ではまだすべての対策が出そろっているわけではありません。最終的にどうすべきかは5月に開催される予定の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Toolchain Summit (旧<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> QA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>)後にあらためてまとめるつもりですが、直接的な影響を受ける<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Authorのところには順次バグレポートが届いているかと思いますので、可能であれば以下の対応をご検討ください。</p> <div class="section"> <h4>inc<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リなどに<a class="keyword" href="http://d.hatena.ne.jp/keyword/Makefile">Makefile</a>.PL/Build.PL用の特殊なモジュールなどを同梱している場合</h4> <p>カレント<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リが@INCから消えることで、開発時および手動インストール時にはinc::Module::Install、inc::MyBuilderなどの同梱モジュールが正しく読み込めなくなる可能性があります。この辺は別途パッチがあたる可能性もありますが、基本的には<a class="keyword" href="http://d.hatena.ne.jp/keyword/Makefile">Makefile</a>.PL/Build.PLなどの先頭付近に適宜以下のような行を追加しておいていただけると面倒がなくてよいかと思います(通常のインストール時には<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>クライアント側で対策が取られるので問題にはならないはずです。また、どうせ開発するのは自分だけだから、<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a> -I. <a class="keyword" href="http://d.hatena.ne.jp/keyword/Makefile">Makefile</a>.PL/Build.PLするよ、という方もひとまず気にしなくてかまわないかと思います。ただ、CIがこけたり<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Testersなどから指摘を受ける可能性はあります)。なお、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Makefile">Makefile</a>.PL/Build.PL については use lib "."; でもよいはずですが、今回の「対策」と呼ばれるものは "." を狙い撃ちにしているので、場合によってはおかしな副作用に巻き込まれる可能性があります。</p> <pre class="code" data-lang="" data-unlink>use FindBin; use lib $FindBin::Bin;</pre><p>また、Module::Installについては、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>本体あるいはツールチェーン側で何らかの特別対応が行われる可能性もあるのですが、<a href="https://metacpan.org/pod/distribution/Module-Install/lib/Module/Install.pod#WARNING">&#x6700;&#x65B0;&#x306E;Module::Install&#x306B;&#x3082;&#x8B66;&#x544A;&#x304C;&#x51FA;&#x3066;&#x3044;&#x308B;&#x901A;&#x308A;</a>、これまでにもいろいろと問題が出ていますので、特に最新版をお使いでない方は、可能であればこの機会にMinilla、Dist::Zilla等のオー<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A5%EA%A5%F3">サリン</a>グツールに移行しておいていただけると助かります。</p> </div> <div class="section"> <h4>テストファイル中で t::Foo のようなモジュールを呼んでいる場合</h4> <p>これも、面倒でなければ、上と同じく各テストファイル中でFindBinを呼んで、実際の階層に応じたlib設定をしておいてください。</p><p>また、修正すべきファイルが多すぎて大変な場合は、依存モジュールにTest::Harnessの3.38以降を加えておけば、とりあえずmake test時には@INCにカレント<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リが戻るようになります。</p><p>これも同じくどうせ自分だけだから…という考え方もありですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Makefile">Makefile</a>.PL/Build.PLの場合と同様におそらくCIでこけたり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Testersから指摘を受けることになるかと思います。</p> </div> <div class="section"> <h4>do "localfile.pl" のような呼び出しをしている場合</h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>モジュールには少ないと思いますが、お手元のアプリや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>で環境設定などのために do を使ったファイル読み込みをしている場合は do "./localfile.pl"; のように明示的に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを追加しておいてください(もちろんFindBinを利用してもかまいません)。</p><p>また、require "jcode.pl"; のような行も、あれば同様の修正をお願いします(もっとも、jcode.plについてはそのままだとそもそも5.26では読み込み時にエラーになりますが)。</p> </div> <div class="section"> <h4><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>をインストールする<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>の場合</h4> <p>インストール時に bin/foo(.pl) のような<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>をインストールする<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>については、追加の対策をしておいた方がよいかもしれません。コアに入っているものについてはいまのところ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>の先頭付近に以下のような行が追加されていますが、これについてはno lib "."; の方がよいという異論もあります(no lib "." なら明示的な <a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a> -I. も封じることができますが、-I オプションを使える状況ならどちらにしても迂回できるので現状ではそれほど違いを気にする必要はないかと思います)。</p> <pre class="code" data-lang="" data-unlink>BEGIN { pop @INC if $INC[-1] eq &#39;.&#39; }</pre><p>なお、この行は基本的には<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>やアプリの先頭付近に一度追加すれば十分です。</p> </div> <div class="section"> <h4>やってはいけないこと</h4> <p>use lib "."; は探索パスの「先頭」にカレント<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リおよび関連<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを追加してしまうので、うかつに使うとかえって発端となった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%C8%BC%E5%C0%AD">脆弱性</a>の影響を受けやすくなってしまいます。私的な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>などの応急処置には便利ですが、一般に公開するモジュール、アプリなどでは使用を避けてください。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%A7%A5%EB%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">シェルスクリプト</a>/バッチファイルなどから呼び出す<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>オプションに「-I.」を追加するのも同様の理由で危険です。</p><p>なお、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>モジュールを使うだけの方は、5月の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Toolchain Summit以降に<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>クライアント(とTest::Harnessあたり)を最新にしておいていただければ、ほぼ問題なく5.26に移行できる(ようになる)見込みです。</p> </div> charsbar YAPC::Kansai 2017に行ってきた hatenablog://entry/17680117127084473302 2017-03-18T18:05:57+09:00 2019-04-28T01:00:12+09:00 だいぶ遅ればせながらYAPC::Hokkaidoに引き続きYAPC::Kansaiも前夜祭から参加してきました。前夜祭についてはあいにく資料はありません。msysもcygwinも(ものによってはgnuwinのツール群も)入っていることとか、変換キーが「\」(カナ入力時には「ー」)、無変換キーがカナのオンオフ、半角/全角キーがエスケープになっていることとか、VMだけでなくWindows環境にもいちおうrakudoもgolangもnodejsもrubyもpythonも(もちろん複数バージョンのVisual Studioも)入っていることとか、話すつもりでいたことをもろもろ話し忘れたような気がします… <p>だいぶ遅ればせながら<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Hokkaidoに引き続き<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Kansaiも前夜祭から参加してきました。前夜祭についてはあいにく資料はありません。msysも<a class="keyword" href="http://d.hatena.ne.jp/keyword/cygwin">cygwin</a>も(ものによってはgnuwinのツール群も)入っていることとか、変換キーが「\」(カナ入力時には「ー」)、無変換キーがカナのオンオフ、半角/全角キーが<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ケープになっていることとか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/VM">VM</a>だけでなく<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>環境にもいちおうrakudoも<a class="keyword" href="http://d.hatena.ne.jp/keyword/golang">golang</a>もnodejsも<a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a>も<a class="keyword" href="http://d.hatena.ne.jp/keyword/python">python</a>も(もちろん複数バージョンの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Visual%20Studio">Visual Studio</a>も)入っていることとか、話すつもりでいたことをもろもろ話し忘れたような気がしますが、誰得情報ということでご勘弁ください。ダイヤモンドカーソル依存や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BF%A5%C3%A5%C1%A5%D1%A5%C3%A5%C9">タッチパッド</a>を無効にしている件も含めて、まっさらなノートPCを渡されると場合によってはものすごく困る<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%B9%A5%BF">クラスタ</a>に属しています。</p><p>本編の資料は以下の通りです。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 6ともに新しい安定版のリリースがあったわけではないのでHokkaidoからの引き写しも多いのですが、連続参加の方にも多少なりと新しい情報をお届けできるよう、Hokkaido以降に目にしたコメントなどへのレスを追加したり、2月に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%EA%A5%E5%A5%C3%A5%BB%A5%EB">ブリュッセル</a>で開催されたFOSDEM 2017で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BB%C5%C6%FE">仕入</a>れてきた情報を追加したりしておきました。@INC問題についてはいよいよみなさんのところにも行動を求めるバグレポートが届き始めたようなので、別途記事を書いておきます。</p><p><iframe src="//www.slideshare.net/slideshow/embed_code/key/eJZlQf8NYGSrn" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/charsbar/perl-2017spring" title="2017年春のPerl" target="_blank">2017年春のPerl</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/charsbar">charsbar</a></strong> </div></p><p>何はともあれ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPA">JPA</a>はじめスタッフ、スポンサーのみなさま、ありがとうございました。Fukuokaも楽しみにしています。</p> charsbar YAPC::Hokkaido 2016に行ってきた hatenablog://entry/17680117127084473376 2016-12-17T15:09:39+09:00 2019-04-28T01:00:13+09:00 London Perl Workshop 2016に続いてYAPC::Hokkaidoにも前夜祭から参加してきました。資料は以下の通りです。前夜祭では今年の夏にまかまかさんからメンテを引き継いだJSON(::PP)の現状、土曜日の本編では昨年までならPerl5やPerl6の重鎮が発表していたであろうPerl5/6の現状をウォッチャー目線でざっくりまとめておきました。夏のLigthweight Language of Thingsでは日本語でスライドを書きましたが、今回は海外からのスピーカーがいらしたということでスライドはいつも通り英語になっています。 JSON, JSON::PP, and m… <p>London <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Workshop 2016に続いて<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Hokkaidoにも前夜祭から参加してきました。資料は以下の通りです。前夜祭では今年の夏にまかまかさんからメンテを引き継いだ<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>(::PP)の現状、土曜日の本編では昨年までならPerl5やPerl6の重鎮が発表していたであろうPerl5/6の現状をウォッチャー目線でざっくりまとめておきました。夏の<a href="http://ll.jus.or.jp/2016/">Ligthweight Language of Things</a>では日本語で<a href="http://www.slideshare.net/charsbar/perl-language-update">&#x30B9;&#x30E9;&#x30A4;&#x30C9;</a>を書きましたが、今回は海外からのスピーカーがいらしたということでスライドはいつも通り英語になっています。</p><p><iframe src="//www.slideshare.net/slideshow/embed_code/key/9r6r6HJBblRtXJ" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/charsbar/json-jsonpp-and-more" title="JSON, JSON::PP, and more" target="_blank">JSON, JSON::PP, and more</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/charsbar">charsbar</a></strong> </div></p><p><iframe src="//www.slideshare.net/slideshow/embed_code/key/j4jwQXHHqQpLjr" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/charsbar/2016perl-long-version" title="2016年のPerl (Long version)" target="_blank">2016年のPerl (Long version)</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/charsbar">charsbar</a></strong> </div></p><p>あと、<a href="https://speakerdeck.com/syohex/yapc-hokkaido-2016">syohex&#x3055;&#x3093;&#x306E;&#x767A;&#x8868;</a>にあったメンテをやめたくなったときの話ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>/PAUSEでは<a href="https://github.com/perldoc-jp/module-pod-jp/blob/master/docs/articles/github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md#%E6%94%BE%E6%A3%84%E3%81%95%E3%82%8C%E3%81%9F%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%84%E5%8D%94%E5%8A%9B%E3%82%92%E6%B1%82%E3%82%81%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AB%E5%8D%B0%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B">Lancaster Consensus</a>で合意されたADOPTME、HANDOFF、NEEDHELPといったアカウントに<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>を与えておくと、作者/プライマリメンテナの意志を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%C5%AA">機械的</a>に判別可能な形で明示できます。現状ではRTくらいでしか一覧できないのですが、<a href="http://neilb.org/adoption/">Neil Bowers&#x6C0F;&#x306E;&#x30B5;&#x30A4;&#x30C8;</a>では最終更新日やバグの多さなどの観点も含めて誰かが引き継ぎを行った方がよさそうなモジュールも一覧になっています。余力がある方は自分が利用しているモジュールや興味のあるモジュールが挙がっていないかご確認いただければありがたく(DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>がリストに挙がっている件はこちらで把握しています)。</p> <ul> <li><a href="https://rt.cpan.org/Dist/ByMaintainer.html?Name=ADOPTME">https://rt.cpan.org/Dist/ByMaintainer.html?Name=ADOPTME</a></li> <li><a href="https://rt.cpan.org/Dist/ByMaintainer.html?Name=HANDOFF">https://rt.cpan.org/Dist/ByMaintainer.html?Name=HANDOFF</a></li> <li><a href="https://rt.cpan.org/Dist/ByMaintainer.html?Name=NEEDHELP">https://rt.cpan.org/Dist/ByMaintainer.html?Name=NEEDHELP</a></li> </ul><p>なにはともあれ、29年ぶりという大雪のみならず、いろいろな点で感慨深い<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>でした。<a class="keyword" href="http://d.hatena.ne.jp/keyword/JPA">JPA</a>はじめスタッフ、スポンサーのみなさまありがとうございました。</p> charsbar London Perl Workshop 2016に行ってきた hatenablog://entry/17680117127084473458 2016-12-17T15:05:22+09:00 2019-04-28T01:00:18+09:00 tl;dr: It was really awesome (again)! A big thank you to the organisers and the speakers and everyone. YAPC::Hokkaidoの前週ということで悩ましくはあったのですが、もろもろありまして、2016年12月3日にロンドンで開催されたLondon Perl Workshopに行ってきました。資料はそのうち公開されていくと思いますが、ひとまず参加できたセッションの情報をごく簡単にまとめておきます。 Custom Keyword Plugins Paul Evans氏によるKeyword Pl… <blockquote> <p>tl;dr: It was really <a class="keyword" href="http://d.hatena.ne.jp/keyword/awesome">awesome</a> (again)! A big thank you to the organisers and the speakers and everyone.</p> </blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Hokkaidoの前週ということで悩ましくはあったのですが、もろもろありまして、2016年12月3日にロンドンで開催された<a href="http://act.yapc.eu/lpw2016/index.html">London Perl Workshop</a>に行ってきました。資料はそのうち公開されていくと思いますが、ひとまず参加できたセッションの情報をごく簡単にまとめておきます。</p> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6984">Custom Keyword Plugins</a></h4> <p>Paul Evans氏によるKeyword Plugin (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.12で導入)、Custom Op (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.14で導入)まわりの話。仕組みについて解説した後、<a href="https://metacpan.org/pod/Keyword::Boolean">Keyword::Boolean</a>、<a href="https://metacpan.org/pod/Switch::Plain">Switch::Plain</a>、<a href="https://metacpan.org/pod/Function::Parameters">Function::Parameters</a>、<a href="https://metacpan.org/pod/Kavorka">Kavorka</a>、<a href="https://metacpan.org/pod/Syntax::Keyword::Try">Syntax::Keyword::Try</a>など、この機構を使ったモジュール群を紹介し、Keyword PluginやCustom Opを使えば5年前の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>にも機能を追加できて胸熱だからもっとみんな使ってみるべきだ、という話に。氏には<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF">トーク</a>後にもいろいろ話をうかがったのですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>を読むと内部の詳細に引きずられやすいので、参考になるモジュールのソースを読んだ方がいいとか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>をもっとよくしていくには、公開されている機能をギリギリまで使い倒して、できる人たちに「そんな無茶なやり方よりもっといい方法がある」と言わせるといい、という話にえらく納得感があったことでした。</p><p>ちなみに彼が最後に書こうとしていると話していたFuture::AsyncAwaitについてはp5pの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A1%BC%A5%EA%A5%F3%A5%B0%A5%EA%A5%B9%A5%C8">メーリングリスト</a>に概要がポストされています。</p> <ul> <li><a href="http://www.nntp.perl.org/group/perl.perl5.porters/2016/07/msg237518.html">http://www.nntp.perl.org/group/perl.perl5.porters/2016/07/msg237518.html</a></li> <li><a href="http://www.nntp.perl.org/group/perl.perl5.porters/2016/07/msg237517.html">http://www.nntp.perl.org/group/perl.perl5.porters/2016/07/msg237517.html</a></li> <li><a href="http://www.nntp.perl.org/group/perl.perl5.porters/2016/07/msg237516.html">http://www.nntp.perl.org/group/perl.perl5.porters/2016/07/msg237516.html</a></li> </ul> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6875">Making the &#39;First Hard Thing&#39; easy ? HTTP Caching done right</a></h4> <p>来年の<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::<a class="keyword" href="http://d.hatena.ne.jp/keyword/EU">EU</a>のオーガナイザであるTheo van Hoesel氏によるHTTPキャッシュ関連モジュールの話。キャッシュを正しく扱うのはなかなか難しいということで既存のさまざまなモジュールの問題点を指摘した後、氏の書いた<a href="https://metacpan.org/pod/HTTP::Caching">HTTP::Caching</a>や<a href="https://metacpan.org/pod/Dancer2::Plugin::HTTP::ConditionalRequest">Dancer2::Plugin::HTTP::ConditionalRequest</a>の話に。</p> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6968">Making your website seem faster with HTTP/1.1 and HTTP/2</a></h4> <p>Leon Brocard氏によるHTTP 2.0まわりの解説。最後に『<a href="https://www.oreilly.co.jp/books/9784873116761/">&#x30CF;&#x30A4;&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9; &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x30CD;&#x30C3;&#x30C8;&#x30EF;&#x30FC;&#x30AD;&#x30F3;&#x30B0;</a>』をおすすめしていました。</p> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6965">Web development and Perl 6</a></h4> <p>Stefan Seifert氏によるPerl6でウェブ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%D7%A5%EA%B3%AB%C8%AF">アプリ開発</a>を、というネタ。Perl6の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>などの現状説明(クリスマス以後にも更新されているものは少ない等々)から、氏の書いたInline::Perl5を使えば(<a href="http://d.hatena.ne.jp/charsbar/20141111/1415665173">2&#x5E74;&#x524D;</a>にもネタにしていた)<a class="keyword" href="http://d.hatena.ne.jp/keyword/Catalyst">Catalyst</a>に限らず、DancerやMojoliciousもちょっと工夫すれば使えるので(=>や{ }はp5とp6で意味が異なるので直す、等々)、適材適所でやっていこう、と。</p> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6977">GDPR for Developers</a></h4> <p>春にQA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>でお世話になったJJ Allen氏による<a class="keyword" href="http://d.hatena.ne.jp/keyword/EU">EU</a>の一般データ保護規則(<a class="keyword" href="http://d.hatena.ne.jp/keyword/GDPR">GDPR</a>)とそれが開発者にもたらす影響についての話。個人情報は「もらったもの」ではなく「借りているもの」として扱うべし、という大原則から、預かる前には許諾を求めるとか、請求があったら返却する、返却したものを手元に残さない、なくしたら報告する、等々の制約を実現するにはどのようにアプリを設計していかなければならないか(たとえば、許可を得たかどうかという真偽値をDBに保存するだけだと情報開示の要件を満たせなくなるので、もっと複雑な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%BF%A5%C7%A1%BC%A5%BF">メタデータ</a>として保存するとか、単に情報を削除するだけだとデータの整合性に問題が起こるだろうから、データは消すのではなく復号<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C9%D4%C7%BD">不能</a>な形で匿名化するようにした方がよいとか)、という話に。バックアップやログの扱いなど、まだまだ考慮すべき点は多そうでしたが、この件は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%D0%B4%DF%A4%CE%B2%D0%BB%F6">対岸の火事</a>とはいえないので、もう少し深掘りしておこうと思ったことでした。</p> <ul> <li><a href="http://miltonkeynes.pm.org/talks/2016/09/GDPR_for_Developers.pdf">http://miltonkeynes.pm.org/talks/2016/09/GDPR_for_Developers.pdf</a></li> </ul> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6987">Optimizing your Dancer2 and Plack apps</a></h4> <p>Sawyer X氏によるDancer2アプリの高速化の話。XSモジュールを入れようとか、速いサーバを使おうとか、静的ファイルは前段階でサーブしようとか、モジュールは事前ロードしようとか…たまに首をかしげたくなるものもありましたが、まあ、おなじみの話ですね。<a href="http://advent.perldancer.org/2016">Dancer Advent Calendar</a>の<a href="http://advent.perldancer.org/2016/12">12&#x65E5;&#x76EE;</a>、<a href="http://advent.perldancer.org/2016/13">13&#x65E5;&#x76EE;</a>、<a href="http://advent.perldancer.org/2016/14">14&#x65E5;&#x76EE;</a>、<a href="http://advent.perldancer.org/2016/15">15&#x65E5;&#x76EE;</a>に関連する記事が公開されています。</p> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6970">How does CPAN work?</a></h4> <p>QA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>などで何かとお世話になっているNeil Bowers氏による<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>および<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>を取り巻く各種システムに関する初心者向けの解説。</p> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6988">The raptor and the butterfly</a></h4> <p>mst氏が<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::<a class="keyword" href="http://d.hatena.ne.jp/keyword/EU">EU</a>で話したネタの再演+後日談。Perl5環境にPerl6を入れるため<a class="keyword" href="http://d.hatena.ne.jp/keyword/Alien">Alien</a>::Rakudo、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Alien">Alien</a>::MoarVM、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Alien">Alien</a>::NQPなどを作ろうとしていろいろ苦労したので、同じことを何度も繰り返さなくて済むように<a href="https://metacpan.org/pod/Object::Remote">Object::Remote</a>を使ってインストール済みのPerl6を外部から利用できるようにしたという話。試してみたい方は<a href="http://www.trout.me.uk/6dists/">&#x6C0F;&#x306E;&#x30B5;&#x30A4;&#x30C8;</a>から6servまわりを一式落としてみるとよろしいかと。管理には<a href="https://metacpan.org/pod/App::opan">App::opan</a>という同氏作のツールが使われています。さらっと流されていましたが、簡易サーバがついていたりと便利そうなツールでした。</p> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6962">Teaching programming: let&#39;s do it right</a></h4> <p>Juan Julian Merelo-Guervos氏が21世紀にふさわしいプログラミング<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B6%B5%C2%A7%CB%DC">教則本</a>を書きたいということで目次などを示しながらいろいろ提案されていたのですが…この辺は前提となるターゲットや学習曲線の設定次第でいかようにもなるよなあという感じ。</p> <ul> <li><a href="https://github.com/JJ/prog21/blob/master/book.org">https://github.com/JJ/prog21/blob/master/book.org</a></li> </ul> </div> <div class="section"> <h4><a href="http://act.yapc.eu/lpw2016/talk/6876">Error(s) Free Programming</a></h4> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/David%20Cross">David Cross</a>氏が<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::<a class="keyword" href="http://d.hatena.ne.jp/keyword/EU">EU</a>で話したネタの再演。英語として適切なエラーメッセージを出すにはDamian先生作の<a href="https://metacpan.org/pod/Lingua::EN::Inflexion">Lingua::EN::Inflexion</a>を使うといろいろはかどるよ、という話。最後にはDamian先生グッズを買うとThe <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Foundationにチリンチリンとお金が入るのでよろしく、と。</p> <ul> <li><a href="http://perlhacks.com/2016/08/damianware/">http://perlhacks.com/2016/08/damianware/</a></li> </ul> </div> <div class="section"> <h4>自分の発表資料</h4> <p>私自身は開催一月前になってもまだ行くかどうか決めかねていたため<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF">トーク</a>の応募などはしていなかったのですが、前夜祭で煽られたこともあって、当日飛び入りで<a class="keyword" href="http://d.hatena.ne.jp/keyword/PERL">PERL</a>_JSONB_BACKENDの仕様変更をアナウンスするLTをさせてもらいました。</p><p><iframe src="//www.slideshare.net/slideshow/embed_code/key/DK2PnQlXQW0Le8" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/charsbar/jsonpp-is-achanging" title="Json(::PP) is a-changing" target="_blank">Json(::PP) is a-changing</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/charsbar">charsbar</a></strong> </div></p><p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>::Hokkaido向けに、今春Perl5のPumpkingになったSawyer X氏や、Elizabeth Mattijsen、Stefan Seifertの各氏からPerl5、Perl6の情報をうかがったりもしました。入れなくてもいいかなあと思っていたPerl6の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Unicode">Unicode</a>ネタを入れたのはElizabeth Mattijsenさんの助言によるものです。Veel dank!</p> </div> charsbar ヤパチーでPerl::PrereqScanner::NotQuiteLiteの話をしてきました hatenablog://entry/17680117127084473595 2016-08-03T23:33:20+09:00 2019-04-28T01:00:19+09:00 気がつけばもう一ヶ月も前のことになってしまいましたが、uzullaさんが多くのスタッフの方々を巻き込んで手弁当で開催してくださったYAP(achimon)C::Asia Hachioji 2016 mid in Shinagawaで、今年の春からちまちま作り直しているPerl::PrereqScanner::NotQuiteLiteの経過報告的な話をしてきました。スライドの方は翌日には公開してあったのですが、ここに書くのはコードの方をもう少し(というか、当初目論んでいたあたりまで)直してから、などと思っていたらこのていたらくで、uzullaさんにも聴きに来てくださった方にも大変申し訳ないことを… <p>気がつけばもう一ヶ月も前のことになってしまいましたが、uzullaさんが多くのスタッフの方々を巻き込んで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%EA%CA%DB%C5%F6">手弁当</a>で開催してくださった<a href="http://yapcasia8oji-2016mid.hachiojipm.org">YAP(achimon)C::Asia Hachioji 2016 mid in Shinagawa</a>で、今年の春からちまちま作り直している<a href="https://github.com/hachiojipm/yapcasia-8oji-2016mid-timetable/issues/81">Perl::PrereqScanner::NotQuiteLite&#x306E;&#x7D4C;&#x904E;&#x5831;&#x544A;&#x7684;&#x306A;&#x8A71;</a>をしてきました。スライドの方は翌日には公開してあったのですが、ここに書くのはコードの方をもう少し(というか、当初目論んでいたあたりまで)直してから、などと思っていたらこのていたらくで、uzullaさんにも聴きに来てくださった方にも大変申し訳ないことをしました。ようやく旧版のテストが全部通るところまではたどり着いたので、コードを<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>にあげておきました。話題に出したplan skip_allなどへの対応はまだなので、本丸であるCPANTSへの組み込みにはもう少し時間がかかりそうですが、その辺はまた追々。</p><p><iframe src="http://www.slideshare.net/slideshow/embed_code/63708689" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/charsbar/cpan-63708689" title="CPANの依存モジュールをもう少し正しく検出したい" target="_blank">CPANの依存モジュールをもう少し正しく検出したい</a> </strong> from <strong><a href="http://www.slideshare.net/charsbar" target="_blank">charsbar</a></strong> </div></p><p>そんなこんなでいろいろなことが遅れていたので、当日もあまり多くの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF">トーク</a>は見ていないのですが、あらためて<a href="https://www.youtube.com/channel/UCn75j0ahFLBxz5u94gv1iuQ">&#x52D5;&#x753B;&#x4E00;&#x89A7;&#x306E;&#x30DA;&#x30FC;&#x30B8;</a>を見るだにおもしろそうなネタが集まっているので、秋口になったら少しずつ見ていきたいとおもいます。遅ればせながらuzullaさん、myfinderさんをはじめ、みなさまお疲れさまでした&ありがとうございました。</p> charsbar Perl6でデータベースを扱いたいとき hatenablog://entry/17680117127084473672 2015-02-14T11:39:43+09:00 2019-04-28T01:00:20+09:00 ロンドンで話を聞いたInline::Perl5の印象が強すぎてうっかり存在を忘れていたのですが、特に複雑なことをするのでなければ、最新のRakudo Starに同梱されているDBIishというモジュールを使うと、Perl5のDBIと同じような書き方ができるようになっています。たとえばSQLiteのデータベースを扱うのであれば、Rakudo StarとSQLiteのライブラリ(libsqlite3的なもの)をインストールしたあと、こんなコードを書けばOK。 use v6; use DBIish; my $dbh = DBIish.connect("SQLite", :database, :Rai… <p>ロンドンで話を聞いたInline::Perl5の印象が強すぎてうっかり存在を忘れていたのですが、特に複雑なことをするのでなければ、最新のRakudo Starに同梱されているDBIishというモジュールを使うと、Perl5の<a class="keyword" href="http://d.hatena.ne.jp/keyword/DBI">DBI</a>と同じような書き方ができるようになっています。たとえば<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>のデータベースを扱うのであれば、Rakudo Starと<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>のライブラリ(libsqlite3的なもの)をインストールしたあと、こんなコードを書けばOK。</p> <blockquote> <p>use v6;<br /> use DBIish;<br /> my $dbh = DBIish.connect("<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>", :database<test.db>, :RaiseError);</p><p>$dbh.do("CREATE TABLE IF NOT EXISTS foo (id, text)");</p><p>my $sth = $dbh.prepare("INSERT INTO foo VALUES(?, ?)");<br /> $sth.execute(1, "test");<br /> $sth.finish;</p><p>$sth = $dbh.prepare("SELECT * FROM foo");<br /> $sth.execute;<br /> my $rows = $sth.fetchall_arrayref();<br /> say $rows.<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>;</p> </blockquote> <p>2015年1月の時点では、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>のほか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a>(<a class="keyword" href="http://d.hatena.ne.jp/keyword/mysql">mysql</a>)と<a class="keyword" href="http://d.hatena.ne.jp/keyword/PostgreSQL">PostgreSQL</a>(Pg)用のDBDishなモジュールも同梱されています。裏ではNativeCallというモジュールが使われていて、Perl5のXSでごりごり書いてあるものに比べるとはるかに読みやすい(うらやましい)のですが、NativeCallは用意するライブラリがどう<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>されたかなどをあわせないと正しく動作してくれないので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>環境では一手間必要。ドキュメントについては p6doc DBIish とか p6doc DBDish をご覧ください。</p> charsbar London Perl Workshop 2014に行ってきた hatenablog://entry/17680117127084473765 2014-11-11T09:19:33+09:00 2019-04-28T01:00:21+09:00 tl;dr: It was really awesome! A big thanks to the organisers and the speakers and everyone. もろもろありまして、2014年11月8日にロンドンで開催されたLondon Perl Workshopに行ってきました。会期こそ一日こっきりでしたが、予約制のワークショップを含めて都合六トラックも走るという非常に盛りだくさんなイベントで、当日は本当に身体が二つ三つ欲しいと思ったことでした。資料は少しずつ公開されているようですが、ひとまず参加できたセッションの情報をごく簡単にまとめておきます。 An introdu… <blockquote> <p>tl;dr: It was really <a class="keyword" href="http://d.hatena.ne.jp/keyword/awesome">awesome</a>! A big thanks to the organisers and the speakers and everyone.</p> </blockquote> <p>もろもろありまして、2014年11月8日にロンドンで開催された<a href="http://act.yapc.eu/lpw2014/index.html">London Perl Workshop</a>に行ってきました。会期こそ一日こっきりでしたが、予約制のワークショップを含めて都合六トラックも走るという非常に盛りだくさんなイベントで、当日は本当に身体が二つ三つ欲しいと思ったことでした。資料は少しずつ公開されているようですが、ひとまず参加できたセッションの情報をごく簡単にまとめておきます。</p> <ul> <li><a href="http://act.yapc.eu/lpw2014/talk/5856">An introduction to Sereal, a better Storable (Yves Orton)</a></li> </ul><p>Booking.comで開発されている<a href="https://metacpan.org/release/Sereal">Sereal</a>というモジュールの紹介。この分野で伝統的に使われてきたコアモジュールのStorableは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%EA%A5%A2%A5%E9%A5%A4%A5%BA">シリアライズ</a>したデータの互換性に問題があったり(これが長らくBooking.comで使う<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>のバージョンを上げられない大きな要因のひとつになっていたそうな)、早すぎるオブジェクト化によるセキュリティ上の問題があったり、類似のモジュールの中ではかなり遅いという問題があったりするのですが、Serealではその辺の問題をうまく解決しているとのこと(仕様の明確化。圧縮しないヘッダ部と圧縮可能なボディの分離。漸次アップグレードのためにエンコーダ・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%B3%A1%BC%A5%C0">デコーダ</a>の分離。オブジェクト化は最後にまとめて実行。循環構造を持つデータの対応。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>の内部構造を上手に利用した効率化、などなど)。各言語の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%F3%A5%C7%A5%A3%A5%F3%A5%B0">バインディング</a>はすでにあるものの、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>とGo以外の実装の完全性はまだ十分に検証できていないそうですが、特に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%F3%A5%C7%A5%A3%A5%F3%A5%B0">バインディング</a>については同社で多用している<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hadoop">Hadoop</a>などに安心してデータを投げられるように完成度を高めたいという話もされていました。</p> <ul> <li><a href="http://act.yapc.eu/lpw2014/talk/5734">Feature toggles and graphs for better deployments (Tim Retout)</a></li> </ul><p>同名の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> gemを移植したという<a href="https://metacpan.org/release/Toggle">Toggle</a>モジュールの話と、グラフを使った監視の話の二本立て。前者は新機能の導入時など、いきなり新しいコードを全体に投入するのではなく、条件によって機能を切り替えられるようにしておいた上で、外部のデータソースからその条件を取得するようにしておくと、一部の人にだけ新機能を提供するとか、新旧機能の入れ替え(差し戻し)とか、高負荷時にだけ一部の機能を制限するとか、A/Bテストによる各種の問題の切り分けとか、コードの修正をすることなく簡単にできてよいですよ、と。後者は各種メトリックスを<a href="https://metacpan.org/release/Net-Statsd">Net::Statsd</a>を使ってstatsdに投げ、それを<a href="http://graphite.readthedocs.org/">Graphite</a>でグラフ化するということをしていました。</p> <ul> <li><a href="http://act.yapc.eu/lpw2014/talk/5855">Cracking Perl&#39;s Old Hash Function (Yves Orton)</a></li> </ul><p>Yvesさんの二本目の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF">トーク</a>。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.18でHash randomizationが導入された経緯と対策の詳細について。また、何がどう問題だったのかの実演。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>のセキュリティML以外では今回が初公開とのことで大変興味深く拝見しました。やり方さえ知っていればほんの数回の試行でハッシュの秘孔をついて<a class="keyword" href="http://d.hatena.ne.jp/keyword/DoS">DoS</a>を仕掛けられる可能性があるということで、いまさらな話ではありますが古い<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A6%A5%A7%A5%D6%A5%A2%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3">ウェブアプリケーション</a>などを提供している方は対策がされている5.18以降にアップグレードするか、各メンテナンスブランチにあたっている対策を忘れずに取り込むようにしましょう、ということですね。</p> <ul> <li><a href="http://act.yapc.eu/lpw2014/talk/5842">CPAN Testers - How YOU Can Help (Barbie)</a></li> </ul><p>長年にわたって<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> TestersのメンテナンスをされているBarbieさんによる、さまざまな課題の紹介と協力の要請。氏がいろいろあげていたものの多くは自分のところ(CPANTS)の課題でもあるので身につまされながら聞いていました。とりあえず何かしたいという向きには<a href="https://metacpan.org/release/App-cpanminus-reporter">App::cpanminus::reporter</a>を試してみるという課題があります。また、これまで氏らが主宰のBirmingham <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Mongersが出していた(年額数十万円になる)サーバ代が資金難のため今後捻出できなくなるとの<a href="http://blog.cpantesters.org/diary/191">&#x8A18;&#x4E8B;</a>も出ています。<a href="http://iheart.cpantesters.org/page/fund">CPAN Testers Fund</a>経由で寄付やスポンサー企業を募集中とのことでした。</p> <ul> <li><a href="http://act.yapc.eu/lpw2014/user/305">Inline::Perl5 (Stefan Seifert)</a></li> </ul><p>London <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Workshopでも来年1月31日(〜2月1日)に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D6%A5%EA%A5%E5%A5%C3%A5%BB%A5%EB">ブリュッセル</a>で開催される<a href="https://fosdem.org/2015/schedule/event/get_ready_to_party/">FOSDEM 2015</a>でラリーが「2015 will be the year that <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 6 officially launches for production use.」という話をする、というニュースで持ちきりでしたが、この手の話が出るたびに「(Perl5の)<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>の資産はどうするんだ」という話が出てきます。現状でもv5というPerl6モジュールを利用することである程度再利用できるようにはなっているのですが、<a href="https://github.com/niner/Inline-Perl5">Inline::Perl5</a>というPerl6モジュールを利用すると、XSを含むPerl5モジュールでさえもPerl6から問題なく実行できますよ、というわけで、Perl6から<a class="keyword" href="http://d.hatena.ne.jp/keyword/Catalyst">Catalyst</a>アプリケーションを動かすデモと、どうやってPerl5とPerl6のギャップを埋めているかというコード例がいくつか紹介されていました(Perl6ではなくなっている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%C8">アトリビュート</a>や、Perl6ではClass::MOPを使うまでもなく用意されているMOPの扱いなど)。</p> <ul> <li><a href="http://act.yapc.eu/lpw2014/user/2747">Perl and the green Mill House (Mike Whitaker)</a></li> </ul><p>今回のLondon <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> WorkshopのテーマはInternet of Thingsということで、さまざまな小物と<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>をつなぐネタが紹介されていたのですが、これもそのひとつ。<a href="https://metacpan.org/release/Device-SerialPort">Device::SeralPort</a>や<a href="https://metacpan.org/release/Net-Bluetooth">Net::Bruetooth</a>などを駆使して家庭の計器類から情報を抜いてグラフ化し、節電などに役立てている?とのことでした。</p> <ul> <li><a href="http://act.yapc.eu/lpw2014/talk/5854">Plack::Debugger - A new debugger for Plack Applications(Stevan Little)</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Moose">Moose</a>の作者として知られる氏による新しい<a class="keyword" href="http://d.hatena.ne.jp/keyword/PSGI">PSGI</a>アプリ用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>ツールの話。Middlewareでごりごり加工したHTMLを埋め込むのは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>アプリなどに優しくないなどの問題があるので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D0%A5%C3%A5%B0">デバッグ</a>用の情報は一度外に出し、別途マウントした専用<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>とやりとりすることで必要な場合のみ表示するような仕組みにしたとのこと。だいぶごつい印象でしたが、HTMLを表示したあとページ内で呼ばれるJSのやりとりなどもうまくまとめられるようになっているのは便利そうでした。</p> <ul> <li><a href="http://act.yapc.eu/lpw2014/talk/5860">The Internet of Personification (Matt S Trout)</a></li> </ul><p>アプリも執事のように出しゃばらず、かといって無機的でもなく、人間らしく親しみやすいものがいいんじゃないか、という話から、現状のcpanmとかCartonはアメフトの選手みたいにごついので、もうちょっとスマートな<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>クライアントを書いている、という話に。手元にビルドファイルを保存したり、インストール済みの情報をうまく整理したりしながら、とりあえずMooはインストールできるようになったとのこと。先日開催されたKichijoji.pmでも効率のよいクライアントが欲しいという話が出ていたので絶妙のタイミングだなあと思いつつ、廊下でもいろいろ話を聞いてきました。これについてはあとでまた深掘りできればと思っています。</p><p>その他、エモ系のキーノートやLTもありましたが、長くなってきたので割愛。「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Acme">Acme</a>大全」がついに<a class="keyword" href="http://d.hatena.ne.jp/keyword/acme">acme</a>ことLeon Brocardさんの手に!とか、Mark Keatingさんへのサプライズプレゼント!とか、本当にこの場に立ち会えてよかったと思ったことでした。</p> charsbar DBD::SQLite 1.44/1.45_01 hatenablog://entry/17680117127084473899 2014-10-23T01:32:45+09:00 2019-04-28T01:00:23+09:00 ここでアナウンスするのはかなり久しぶりになってしまいましたが、DBD::SQLiteのメンテナンスはちまちまと続いています。先ほどリリースした1.44では、SQLiteのVMをPerlで書けるようにするという機能をLaurent Damiさんが書いてくださったのを取り込んだほか(1.43_04〜。ちなみにSwiss Perl Workshopでご本人が発表された資料が公開されています)、Windows環境で長いファイル名を使って複数コネクションを張ったときに正しく同期できていなかった問題や(1.43_09)、FTS4使用時のdisconnectでクラッシュする問題を修正したりしています(1.4… <p>ここでアナウンスするのはかなり久しぶりになってしまいましたが、DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>のメンテナンスはちまちまと続いています。</p><p>先ほどリリースした1.44では、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/VM">VM</a>を<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>で書けるようにするという機能をLaurent Damiさんが書いてくださったのを取り込んだほか(1.43_04〜。ちなみにSwiss <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Workshopでご本人が発表された<a href="http://www.slideshare.net/ldami/sq-lite-virtualtables">&#x8CC7;&#x6599;</a>が公開されています)、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>環境で長いファイル名を使って複数コネクションを張ったときに正しく同期できていなかった問題や(1.43_09)、FTS4使用時のdisconnectでクラッシュする問題を修正したりしています(1.43_07)。また、1.43_04では<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>中に生のアクサン付きアルファベットなどが混じっていたときと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%EC%A1%BC%A5%B9%A5%DB%A5%EB%A5%C0">プレースホルダ</a>経由で値を埋め込んだときの挙動のズレを修正するため、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQL">SQL</a>文をutf8にアップグレードするようになりました。</p><p>その他、細々とした修正はChangesファイルをご覧くださいませ。</p><p>1.45_01では32ビット環境での大きな整数値の扱いを改善しました(全部の問題を解決できているかどうかは今後のテスト待ちです)。また、1.44のテスト待ち期間中にリリースされた<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a> 3.8.7を取り込みました。本家の方で地道なパフォーマンスの改善が行われた結果、最後にここでアナウンスしたDBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a> 1.41_01にバンドルされているバージョン(3.8.0)に比べると都合61%も速くなっているとのことで、次の安定版はなるべく早く(他の問題が出なければクリスマス頃をめどに)出せればいいなと思っています。</p> charsbar Pod::PerldocJp 0.18 hatenablog://entry/17680117127084473971 2014-04-24T09:13:28+09:00 2019-04-28T01:00:24+09:00 リリースしたのは一週間ほど前なので見ている方はすでに見ているかとおもいますが、WEB+DB PRESS Vol.80あわせの作業として、Pod::PerldocJpに手を入れて、Pod::Perldoc 3.23に追随するようにしました。WEB+DB PRESSの原稿を書き始める前と比べると、大きな変更点が2つあります。 -Jオプションをつけなくても日本語が表示されるようにしました。 perldocjpコマンドの中で-Jオプションを強制するようにしたので、perldocjp だけで(あれば)日本語ドキュメントを表示できます。 perlvarやperlfuncのように、-a オプションでperl… <p>リリースしたのは一週間ほど前なので見ている方はすでに見ているかとおもいますが、<a href="http://d.hatena.ne.jp/asin/4774163988/charsbarj-22">WEB+DB PRESS Vol.80</a>あわせの作業として、<a href="https://metacpan.org/release/Pod-PerldocJp">Pod::PerldocJp</a>に手を入れて、<a href="https://metacpan.org/release/Pod-Perldoc/">Pod::Perldoc</a> 3.23に追随するようにしました。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%2BDB%20PRESS">WEB+DB PRESS</a>の原稿を書き始める前と比べると、大きな変更点が2つあります。</p> <div class="section"> <h4>-Jオプションをつけなくても日本語が表示されるようにしました。</h4> <p>perldocjpコマンドの中で-Jオプションを強制するようにしたので、perldocjp <ドキュメント名>だけで(あれば)日本語ドキュメントを表示できます。</p> </div> <div class="section"> <h4>perlvarやperlfuncのように、-a オプションでperlapiの各項目を切り出せるようになっています。</h4> <p>最近本家に追加された機能なのですが、XSを触る人には地味に便利だとおもいます。そしてこんなマイナーなドキュメントまで翻訳があったことにただただ感謝。</p> </div> charsbar WEB+DB PRESS Vol.80 hatenablog://entry/17680117127084474044 2014-04-21T08:38:00+09:00 2019-04-28T01:00:25+09:00 4月24日発売のWEB+DB PRESS Vol.80に、Perl Hackers Hub連載の第26回として「Perlで困ったときの調べ方」という記事を書きました。WEB+DB PRESS Vol.80作者: 鶴長鎮一,宮下剛輔,縣俊貴,中村知成,西尾泰和,新井俊一,南川毅文,伊藤直也,石垣憲一,浅木朗,渡邊恵太,中島聡,はまちや2,竹原,川添貴生,河合宜文,WEB+DB PRESS編集部出版社/メーカー: 技術評論社発売日: 2014/04/24メディア: 大型本この商品を含むブログ (6件) を見る最初に「新入社員の人に見てもらいたいもの」というお題をいただいたときは何を書こうかと迷った… <p>4月24日発売の<a href="http://gihyo.jp/magazine/wdpress/archive/2014/vol80">WEB+DB PRESS Vol.80</a>に、<a href="http://gihyo.jp/dev/serial/01/perl-hackers-hub">Perl Hackers Hub&#x9023;&#x8F09;</a>の第26回として「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>で困ったときの調べ方」という記事を書きました。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774163988/charsbarj-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/610akTm%2B0SL._SL160_.jpg" class="hatena-asin-detail-image" alt="WEB+DB PRESS Vol.80" title="WEB+DB PRESS Vol.80"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774163988/charsbarj-22/">WEB+DB PRESS Vol.80</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> 鶴長鎮一,宮下剛輔,縣俊貴,中村知成,西尾泰和,新井俊一,南川毅文,<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B0%CB%C6%A3%C4%BE%CC%E9">伊藤直也</a>,石垣憲一,浅木朗,渡邊恵太,中島聡,はまちや2,竹原,川添貴生,河合宜文,<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%2BDB%20PRESS">WEB+DB PRESS</a>編集部</li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2">技術評論社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2014/04/24</li><li><span class="hatena-asin-detail-label">メディア:</span> 大型本</li><li><a href="http://d.hatena.ne.jp/asin/4774163988/charsbarj-22" target="_blank">この商品を含むブログ (6件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p><p>最初に「新入社員の人に見てもらいたいもの」というお題をいただいたときは何を書こうかと迷ったのですが、やはり一番は</p><p><script> 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.parentNode.insertBefore(js, fjs); t._e = []; t.ready = function(f) { t._e.push(f); }; return t; }(document, "script", "twitter-wjs"));</script><script> twttr.ready(function (twttr) { var el = document.getElementsByClassName('twitter-syntax-tweet-id-430910021392560130'); for (var i=0;i<el.length;i++) { if (!!el[i].getAttribute('data-is-tweet-loaded')){ continue; } el[i].setAttribute('data-is-tweet-loaded', '1'); twttr.widgets.createTweet('430910021392560130',el[i],{}); } });</script><div class="twitter-syntax-tweet-id-430910021392560130"></div></p><p>ということだよなあというわけで、perldocの使い方を中心に、自分が日頃困ったときの情報源としてよく利用しているもろもろについて、ざっくりまとめてあります。</p><p>perldocについては過去にcho45さんも<a href="http://gihyo.jp/dev/serial/01/perl-hackers-hub/001401">Perl Hackers Hub&#x9023;&#x8F09;&#x7B2C;14&#x56DE;</a>で記事を書かれていますし、私自身、<a href="http://gihyo.jp/dev/serial/01/modern-perl/0005">&#x30E2;&#x30C0;&#x30F3;Perl&#x9023;&#x8F09;&#x306E;&#x7B2C;5&#x56DE;</a>でまとめたことがあるのですが、これらの単なる焼き直しに終わらないよう工夫してみました(過去記事の落ち穂拾いをしたともいう)。</p><p>他の方の記事では、Vol.80の特集3「はじめての<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>開発環境」の第2章、第3章(Fukuoka.pmなどでお世話になっている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CC%A1%BC%A5%E9%A5%DC">ヌーラボ</a>の中村知成氏の記事)にも今回の記事と関係の深い内容が書かれています。</p><p>すでに先行販売されているところもあるようですが、店頭などで見かけた際にはお手にとっていただければ幸いです。</p> charsbar Test::PAUSE::Permissions hatenablog://entry/17680117127084474173 2014-04-07T21:18:25+09:00 2019-04-28T01:00:26+09:00 たまに、そう、CPANディストリビューションの割合からすると1%ほどのことではあるのですが、他の人からモジュールを引き継いだときに必要なパーミッションを全部もらえていなかったとか、名前がかぶっているのに気づかなかったとかで、PAUSEの索引に登録してもらえないディストリビューションが生まれてしまうことがあります。そういう問題を防ぐにはリリース前にPAUSEのパーミッションの確認しておくに限る、というわけで、Test::PAUSE::Permissionsというモジュールをリリースしました。基本的な使い方は、SYNOPSISに書いてある通り、xt/perms.tのようなテストファイルにこう書いて… <p>たまに、そう、<a href="http://cpants.cpanauthors.org/kwalitee/no_unauthorized_packages">CPAN&#x30C7;&#x30A3;&#x30B9;&#x30C8;&#x30EA;&#x30D3;&#x30E5;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x5272;&#x5408;&#x304B;&#x3089;&#x3059;&#x308B;&#x3068;1&#xFF05;&#x307B;&#x3069;</a>のことではあるのですが、他の人からモジュールを引き継いだときに必要な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>を全部もらえていなかったとか、名前がかぶっているのに気づかなかったとかで、PAUSEの索引に登録してもらえない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>が生まれてしまうことがあります。</p><p>そういう問題を防ぐにはリリース前にPAUSEの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>の確認しておくに限る、というわけで、Test::PAUSE::Permissionsというモジュールをリリースしました。</p><p>基本的な使い方は、SYNOPSISに書いてある通り、xt/perms.tのようなテストファイルにこう書いておくだけ。</p> <pre class="code" data-lang="" data-unlink>use strict; use warnings; use Test::PAUSE::Permissions; all_permissions_ok();</pre><p>リリース時に(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>RELEASE_TESTINGを有効にして)このテストを実行すると、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>内のpackageを抽出し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>から<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>の索引をダウンロードしてきて、それぞれのpackageについて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>の状況を確認します。持ち主が登録されていない(誰もそのpackageを登録したことがない)か、持ち主に自分が含まれていればテストが通りますし、自分が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>を持っていないpackageが含まれていたらテストが失敗するので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>の持ち主に連絡して必要な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>をもらうか、package名がかぶっている場合はお手元のpackageを修正する、あるいはMETAファイルの設定にno_indexを追加して索引に登録されないようにする、等の手段を講じてください。</p><p>Test::PAUSE::Permissionsは、<s>METAファイル内のx_authorityというフィールドの値があればそこからリリースする作者のPAUSE IDを取得します。また、各.pmファイルに $AUTHORITYという変数が指定されていればそこからIDを取得します。どちらもない場合、</s>モジュールのリリースに<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>::Uploaderなどを使っている方ならホーム<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リに.pauseという設定ファイルがあると思いますが、そこからIDを取得します。それすらもない場合は、テストをスキップします。また、このテストをツールなどで自動生成する場合は、all_permissions_ok()の引数としてPAUSE IDを渡してやれば、.pauseにそのIDが登録されているかのように振る舞います<s>(ただし、ここで渡したIDよりも、x_authorityおよび$AUTHORITYの指定の方が優先されます)</s>。</p><p>修正: miyagawaさんにご指摘いただいて、0.04からはx_authority等をテストの対象に含めるのをやめました。情報自体は取得しますが、テストは.pause (およびall_permissions_ok()の引数)で指定されたPAUSE IDに対してのみ行います。</p> <ul> <li><a href="https://metacpan.org/release/Test-PAUSE-Permissions">https://metacpan.org/release/Test-PAUSE-Permissions</a></li> <li><a href="https://github.com/charsbar/Test-PAUSE-Permissions">https://github.com/charsbar/Test-PAUSE-Permissions</a></li> </ul> charsbar Perl QA Hackathon 2014に参加してきました hatenablog://entry/17680117127084474268 2014-03-24T14:09:52+09:00 2019-04-28T01:00:27+09:00 今回は特に予告を書きませんでしたが、昨年、一昨年に続き、今年も3月13日から16日までフランスのリヨンで開催されたQA Hackathonに参加してきました。すでに多くの方がまとめ記事を書かれているので詳細はそちらをご覧いただくとして、今年は、昨年ランカスターで議論したことを肉付けしてPAUSEなどの実装に落とし込むという位置づけの年だったこともあり、細かい点で突っ込んだ議論は多々あったものの、昨年のように「ここがこう変わるから注意してください」とみなさんに報告しておかなければならないことはなかったかと思います(古いディストリビューションなど最近のベタープラクティスにしたがっていないディストリ… <p>今回は特に予告を書きませんでしたが、昨年、一昨年に続き、今年も3月13日から16日までフランスのリヨンで開催された<a href="http://act.yapc.eu/qa2014/">QA Hackathon</a>に参加してきました。すでに多くの方が<a href="http://act.yapc.eu/qa2014/wiki?node=Blogs">&#x307E;&#x3068;&#x3081;&#x8A18;&#x4E8B;</a>を書かれているので詳細はそちらをご覧いただくとして、今年は、昨年ランカスターで議論したことを肉付けしてPAUSEなどの実装に落とし込むという位置づけの年だったこともあり、細かい点で突っ込んだ議論は多々あったものの、昨年のように「ここがこう変わるから注意してください」とみなさんに報告しておかなければならないことはなかったかと思います(古い<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>など最近のベタープ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%AF">ラク</a>ティスにしたがっていない<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>をアップロードする際に多少の注意が必要になったことや、package NAME BLOCKの形式が正しくPAUSEに認識されるようになったことなど、細々とした挙動の変化はありますが、これは重箱の隅をつつくような話でしょう)。</p><p>私もおおむねその流れにしたがって、CPANTSにPAUSEの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>まわりの情報を組み込んでみたり(まだ不完全ですが、no_unauthorized_packagesというメトリクスを追加しています)、PAUSEの問題点を修正したりしていました。また、Neil Bowers氏の<a href="http://neilb.org/2014/03/10/cpan-dashboard.html">CPAN Dashboard</a>をはじめとする一連の統計情報についての情報交換をしたり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A1%BC%A5%B1%A5%C6%A5%A3%A5%F3%A5%B0">マーケティング</a>の一環?としての<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>を256倍楽しめるようにする方法みたいな話を横で聞いたり、DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>についてのやりとりもありました。もっと話をしてくればよかったなあと思うことは多々ありますし、ネットワークにつながらなくて往生したとか、活動時間があわなくて苦労したとかもありましたが、プライベートも含めて、充実した<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>であったことです。あらためて主催・運営にあたった方々と<a href="http://act.qa-hackathon.org/qa2014/sponsors.html">&#x30B9;&#x30DD;&#x30F3;&#x30B5;&#x30FC;&#x5404;&#x793E;</a>に感謝します。</p><p>以下、公開私信。</p> <ul> <li>夕食時に<a href="http://news.perlfoundation.org/2014/03/grant-proposal-perllint---yet.html">moznion&#x6C0F;&#x306E;Grant&#x306E;&#x4EF6;</a>が話題になっていました。コメント欄にもある通り、好意的な意見が多くてほっとしたことです(半分くらいは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>の参加者からのコメントです)。</li> <li>具体的な話まではしてきませんでしたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Testersのミラーの件、日本に置きたいなら手伝うし、いい考えだと思う、とは言ってもらっています。</li> <li>口頭では紹介したことがあるような気もしますが、<a href="http://cpan.cpanauthors.org/">http://cpan.cpanauthors.org/</a> はいわゆるリアルタイムミラーです。スペックはともかく国内の専用サーバでホストしていますので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Testersのサイトなどでは遠くて遅い、という方はお試しくださいませ。</li> <li>来年はベルリンだそうですよ。</li> </ul> charsbar MojoliciousとWebSocketとiTunesと hatenablog://entry/17680117127084474363 2013-12-24T03:16:50+09:00 2019-04-28T01:00:28+09:00 これはMojolicious Advent Calendar 24日目の記事です。iTunesに英語教材などを放り込んでエンドレス再生していると、「ここにテキストが表示されていればいいのになあ」と思うことがあります。あるいは、洋楽を流しっぱなしにしているときに、ふと聞き取れなかった歌詞を確認したくなるとか。もちろんその都度メモなりなんなりを開いてもいいのですが、いちいち該当のトラックに関係のあるファイルを探すのも面倒ですから、トラックが変わるたびに自動でテキストが表示されるようにしたいものです。GUIをごりごり書くのは面倒ですし、ターミナルに流し続けるのも見づらいですから、ここはテキストはブラ… <p>これは<a href="http://qiita.com/advent-calendar/2013/mojolicious">Mojolicious Advent Calendar</a> <a href="http://qiita.com/advent-calendar/2013/mojolicious#day-24">24&#x65E5;&#x76EE;</a>の記事です。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iTunes">iTunes</a>に英語教材などを放り込んでエンドレス再生していると、「ここにテキストが表示されていればいいのになあ」と思うことがあります。あるいは、洋楽を流しっぱなしにしているときに、ふと聞き取れなかった歌詞を確認したくなるとか。</p><p>もちろんその都度メモなりなんなりを開いてもいいのですが、いちいち該当のトラックに関係のあるファイルを探すのも面倒ですから、トラックが変わるたびに自動でテキストが表示されるようにしたいものです。<a class="keyword" href="http://d.hatena.ne.jp/keyword/GUI">GUI</a>をごりごり書くのは面倒ですし、ターミナルに流し続けるのも見づらいですから、ここはテキストはブラウザに表示することにし、WebSocket経由で更新し続けるようにしてみましょう。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>環境では以下のようにWin32::OLEを利用することで<a class="keyword" href="http://d.hatena.ne.jp/keyword/iTunes">iTunes</a>からトラック情報を取得できます(<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>環境の場合は<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>::<a class="keyword" href="http://d.hatena.ne.jp/keyword/iTunes">iTunes</a>というモジュールがあるようですので、適宜読み替えてください)。</p> <pre class="code" data-lang="" data-unlink>use Win32::OLE; my $itunes = Win32::OLE-&gt;new(&#39;iTunes.Application&#39;); my $track = $itunes-&gt;CurrentTrack; my $name = $track-&gt;Name; my $album = $track-&gt;Album; my $path = $track-&gt;Location;</pre><p>Mojoliciousには特定の処理を繰り返す仕組みが用意されていますので、ここではそれを利用して、毎秒<a class="keyword" href="http://d.hatena.ne.jp/keyword/iTunes">iTunes</a>のカレントトラックを確認し、変更があったら関連するテキストファイルを読み込むことにしましょう。</p> <pre class="code" data-lang="" data-unlink>use Mojolicious::Lite; use Mojo::Asset::File; use Mojo::IOLoop; use File::Basename; my $current; Mojo::IOLoop-&gt;recurring(1 =&gt; sub { my $track = $itunes-&gt;CurrentTrack or return; if (!$current or $current ne $track-&gt;Name) { $current = $track-&gt;Name; my $album = $track-&gt;Album; my $basename = basename($track-&gt;Location); $basename =~ s/\.m4a$/.txt/; my $textfile = app-&gt;home-&gt;rel_file(&#34;text/$album/$basename&#34;); my $text = Mojo::Asset::File-&gt;new(path =&gt; $textfile)-&gt;slurp; } });</pre><p>続いて、WebSocketまわりの処理を実装します。ここではWebSocketの接続を%clientsという変数に保存して、あとでループの中から利用できるようにしています。</p> <pre class="code" data-lang="" data-unlink>use Mojolicious::Lite; get &#39;/&#39; =&gt; &#39;index&#39;; my %clients; websocket &#39;/connect&#39; =&gt; sub { my $self = shift; my $id = &#34;&#34;.$self-&gt;tx; $clients{$id} = $self-&gt;tx; $self-&gt;on(finish =&gt; sub { delete $clients{$id}; }); }; app-&gt;start;</pre><p>あとはループの中で、更新された情報を<a class="keyword" href="http://d.hatena.ne.jp/keyword/JSON">JSON</a>にくるんで送り出してやり(cp932でdecodeしているのはもちろん<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>環境だからです)、</p> <pre class="code" data-lang="" data-unlink>use Mojo::ByteStream &#39;b&#39;; use Mojo::JSON &#39;j&#39;; Mojo::IOLoop-&gt;recurring(1 =&gt; sub { if (!$current or $current ne $track-&gt;Name) { ... my $text = Mojo::Asset::File-&gt;new(path =&gt; $textfile)-&gt;slurp; my $json = b(j({ title =&gt; b($current)-&gt;decode(&#39;cp932&#39;), text =&gt; b($text)-&gt;decode(&#39;cp932&#39;), }))-&gt;decode; $clients{$_}-&gt;send($json) for keys %clients; } });</pre><p>その情報を<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>で画面に書き出してあげれば完成です。</p> <pre class="code" data-lang="" data-unlink>@@ index.html.ep &lt;html&gt; &lt;head&gt; %= javascript &#39;/mojo/jquery/jquery.js&#39;; %= javascript begin $(function(){ var ws = new WebSocket(&#39;&lt;%= url_for(&#39;connect&#39;)-&gt;to_abs %&gt;&#39;); ws.onmessage = function(msg) { var res = JSON.parse(msg.data); $(&#39;.title&#39;).text(res.title); $(&#39;.text&#39;).text(res.text); }; }); % end &lt;/head&gt; &lt;body&gt; &lt;h1 class=&#34;title&#34;&gt;&lt;/h1&gt; &lt;pre class=&#34;text&#34;&gt;&lt;/pre&gt; &lt;/body&gt; &lt;/html&gt;</pre><p>このようなWebSocketを使ったMojolicious::Liteアプリは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a>などWebSocket対応のブラウザでないと正しく動作しませんし、現状ではplackupも、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>環境の場合はhypnotoadはもちろん、morboさえも使えない(<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a> myapp.pl <a class="keyword" href="http://d.hatena.ne.jp/keyword/daemon">daemon</a>ならOK)という、なかなか厳しい制約はありますが、WebSocketを使うと、手元のブラウザだけでなく、ネットワーク上の他のブラウザでも同じ内容を表示させられますので、表示する内容を工夫すればなかなかおもしろいこともできそうです。</p><p>全体像は <a href="https://github.com/charsbar/lyrics_viewer_win32">https://github.com/charsbar/lyrics_viewer_win32</a> からどうぞ。</p> charsbar 世界の名酒事典2014年版 hatenablog://entry/17680117127084474453 2013-11-19T14:40:43+09:00 2019-04-28T01:00:30+09:00 Perlとは何の関係もありませんが、今年からかれこれ20年近く読者の立場で愛読してきた『世界の名酒事典』の執筆作業にたずさわるようになりました(ブランデー、スピリッツ、リキュール担当)。もっとも、執筆といっても、偉大な前任の福西先生がすでに膨大な原稿を残してくださっていますし、私以外はもう何年、何十年と名酒事典の執筆にたずさわっておられるベテランの方ばかりですので、私がしたのは、年月とともに古くなっていた数字等の事実関係の更新や、扉を含む各項目の字数調整くらいのものですが。先ほど見本も届きましたので、宣伝もかねて、ご報告しておきます。世界の名酒事典 2014年版作者: 講談社出版社/メーカー:… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>とは何の関係もありませんが、今年からかれこれ20年近く読者の立場で愛読してきた『世界の名酒事典』の執筆作業にたずさわるようになりました(ブランデー、スピリッツ、リキュール担当)。もっとも、執筆といっても、偉大な前任の福西先生がすでに膨大な原稿を残してくださっていますし、私以外はもう何年、何十年と名酒事典の執筆にたずさわっておられるベテランの方ばかりですので、私がしたのは、年月とともに古くなっていた数字等の事実関係の更新や、扉を含む各項目の字数調整くらいのものですが。先ほど見本も届きましたので、宣伝もかねて、ご報告しておきます。</p><p><div class="hatena-asin-detail"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4062186853/charsbarj-22/"><img src="https://images-fe.ssl-images-amazon.com/images/I/51-B43kejFL._SL160_.jpg" class="hatena-asin-detail-image" alt="世界の名酒事典 2014年版" title="世界の名酒事典 2014年版"></a><div class="hatena-asin-detail-info"><p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4062186853/charsbarj-22/">世界の名酒事典 2014年版</a></p><ul><li><span class="hatena-asin-detail-label">作者:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%D6%C3%CC%BC%D2">講談社</a></li><li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B9%D6%C3%CC%BC%D2">講談社</a></li><li><span class="hatena-asin-detail-label">発売日:</span> 2013/11/22</li><li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li><li><a href="http://d.hatena.ne.jp/asin/4062186853/charsbarj-22" target="_blank">この商品を含むブログ (2件) を見る</a></li></ul></div><div class="hatena-asin-detail-foot"></div></div></p> charsbar Fukuoka Perl Workshop #24 hatenablog://entry/17680117127084474578 2013-10-28T23:47:06+09:00 2019-04-28T01:00:31+09:00 YAPCの楽しみのひとつに、ふだんなかなかお会いする機会のない方々との旧交をあたためるというものがありますが、今年は残念ながら福岡の方々があまりいらしていなかったようだったので、これはもうこちらから会いに行くしかないっしょ、というわけで、昨年に引き続き、今年もFukuoka Perl Workshopに参加してきました。台風騒ぎで一時はどうなるかと思いましたが、ふたをあけてみれば、素晴らしいネタを披露してくださったdebility@Fusicさんをはじめとする地元福岡の方々に加えて、首都圏からは講師としてyusukebeさん、関西(?)からは2週間前にも天神Perlに来ていたはずのpapixさ… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>の楽しみのひとつに、ふだんなかなかお会いする機会のない方々との旧交をあたためるというものがありますが、今年は残念ながら福岡の方々があまりいらしていなかったようだったので、これはもうこちらから会いに行くしかないっしょ、というわけで、<a href="http://d.hatena.ne.jp/charsbar/20121022/1350833837">&#x6628;&#x5E74;</a>に引き続き、今年もFukuoka <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Workshopに参加してきました。台風騒ぎで一時はどうなるかと思いましたが、ふたをあけてみれば、<a href="http://blog.fusic.co.jp/archives/3524">&#x7D20;&#x6674;&#x3089;&#x3057;&#x3044;&#x30CD;&#x30BF;</a>を披露してくださったdebility@<a href="http://fusic.co.jp/">Fusic</a>さんをはじめとする地元福岡の方々に加えて、首都圏からは講師としてyusukebeさん、関西(?)からは2週間前にも<a href="http://atnd.org/events/43408">&#x5929;&#x795E;Perl</a>に来ていたはずのpapixさんも集まり、懇親会では前回お会いできなかったdragon3さんにも再会できて、楽しい時間を過ごせたことです。主宰の津留さん、会場を提供してくださった<a href="http://www.nulab.co.jp/">&#x30CC;&#x30FC;&#x30E9;&#x30DC;</a>さん、参加されたみなさん、お世話になりました&ありがとうございました。</p><p>今回も昨年同様<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>レポートの回ということで、何を話すかいささか迷ったのですが、昨年CPANTSの話をさせていただいたご縁もあったので、今回も<a class="keyword" href="http://d.hatena.ne.jp/keyword/YAPC">YAPC</a>で話したCPANTSネタの続きとして、今年あきらかにCPANTSで100点満点をたたき出す日本人作者が増えた一因と考えられるMinillaの利用状況や、Minillaの基本的な使い方を、自分がいつもの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>環境で使ってみてハマったところ、ソースを見ないとわからなかったところなども注記しながらざっくりまとめてみました。</p><p><iframe src="http://www.slideshare.net/slideshow/embed_code/27610688" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/charsbar/fukuokapm24-27610688" title="2013年のCPANモジュール作成事情" target="_blank">2013年のCPANモジュール作成事情</a> </strong> from <strong><a href="http://www.slideshare.net/charsbar" target="_blank">charsbar</a></strong> </div></p><p>今回のMETA generatorの統計については、一部の非常に多産な方々の影響をいっさい考慮していないので、あくまでもネタとして楽しんでいただければと思いますが(時間ができたらそのうちもう少し細かく分析してみたいとは思っています)、興味をお持ちの方のために、追加情報として、今年10月15日時点ですでに100件以上のリリースをした日本人作者のPAUSE IDとリリース件数を下記に残しておきます。なお、50件以上リリースになると下記の方々含めて11人、30件以上で17人、20件以上で26人、10件以上だと52人となります。</p> <ul> <li>TOKUHIROM (471件)</li> <li>MIYAGAWA (277件)</li> <li>INA (239件)</li> <li>KAZEBURO (126件)</li> <li>BAYASHI (105件)</li> <li>YTURTLE (105件)</li> </ul><p>また、当日いくつかの点についてtokuhiromさんにpull requestを送ったことを話しましたが、今日の段階ですべて取り込んでいただいて、v0.8.1としてリリースされています。ありがとうございます。> tokuhiromさん</p> charsbar CPAN(TS)とランキングの件、他 hatenablog://entry/17680117127084474658 2013-09-30T14:35:12+09:00 2019-04-28T01:00:32+09:00 朝も早うから雑多な話を駆け足で詰め込んだので、消化不良になった方も多かったろうと申し訳なくも思っていますが、ポイントは、CPAN本家のFAQからたどれる「CPANにアップロードする方の責務」についてのこの一節(「私たちはみなさんも空気を読んでくれるものと信じています」)と、 Your duties, the basics, trapsWe trust that you have read the perlmodinstall, perlmodlib, perlmodstyle, and perlnewmod manpages and that you regularly check out u… <p>朝も早うから雑多な話を駆け足で詰め込んだので、消化不良になった方も多かったろうと申し訳なくも思っていますが、ポイントは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>本家のFAQからたどれる「<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>にアップロードする方の責務」についてのこの一節(「私たちはみなさんも空気を読んでくれるものと信じています」)と、</p> <blockquote> <p>Your duties, the basics, traps</p><p>We trust that you have read the perlmodinstall, perlmodlib, perlmodstyle, and perlnewmod manpages and that you regularly check out uploads to <a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> and that you have been watching <a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> activities for a while to have an impression of how things fit together. It usually boils down to (slogan shamelessly stolen and adapted from sudo(1)): </p><p>1. Think, better even <a class="keyword" href="http://d.hatena.ne.jp/keyword/talk">talk</a> before you upload<br /> 2. Respect the namespace of others</p> </blockquote> <ul> <li><a href="http://www.cpan.org/modules/04pause.html">http://www.cpan.org/modules/04pause.html</a></li> </ul><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>の作成やインストールを助けるツールについては、miyagawaさん(Milla)やtokuhiromさん(Minilla)、Ricardo Signesさん(Dist::Zilla)のように、<a href="https://github.com/Perl-Toolchain-Gang?tab=members">Perl-Toolchain-Gang</a>に属していたり、QA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>に来ていたりする人たちがいまも積極的にメンテしているツールを使ってくださいませ、という二点だけです。</p><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>は、インストール前に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Makefile">Makefile</a>.PL/Build.PLといった<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>(要するに、任意のコード)の実行を許しているということも含めて、かなりの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%AD%C1%B1%C0%E2">性善説</a>と、ツールチェーンまわりを整備している方々の不断の努力に依存しています。かれこれ20年近く続いているサービスであるだけに、過去にはいろいろ問題のある<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>もありましたし、それを受けてさまざまな対策がとられてはいるのですが、なるべくならアップロードする側のみなさんにも、最低限、最近の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>らしい体裁とか、モジュールの階層、メタ情報もろもろを整備していただけると、QAチームの一員としては大変ありがたいですし、よくわからなかったら、過去の事情にも明るい(同じ問題を繰り返さないであろう)人たちがメンテしているツールを使う方が安心ですよ、と。</p><p>ちなみに、miyagawaさんが<a href="http://weblog.bulknews.net/post/33907905561">&#x8B66;&#x9418;</a>を鳴らしてなおModule::Install 1.04が残ったままになっている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>は以下の通りです。</p> <ul> <li>DMAKI <a href="https://metacpan.org/source/DMAKI/CatalystX-AppBuilder-0.00009/inc/Module/Install.pm">CatalystX-AppBuilder-0.00009</a></li> <li>DMAKI <a href="https://metacpan.org/source/DMAKI/Pickles-0.10/inc/Module/Install.pm">Pickles-0.10</a></li> <li>DMAKI <a href="https://metacpan.org/source/DMAKI/AnyEvent-HTTP-MXHR-0.00007/inc/Module/Install.pm">AnyEvent-HTTP-MXHR-0.00007</a></li> <li>FUKATA <a href="https://metacpan.org/source/FUKATA/WWW-Asg-0.05/inc/Module/Install.pm">WWW-Asg-0.05</a></li> <li>HDAICHI <a href="https://metacpan.org/source/HDAICHI/Data-Enumerator-0.03/inc/Module/Install.pm">Data-Enumerator-0.03</a></li> <li>HDAICHI <a href="https://metacpan.org/source/HDAICHI/Data-Visitor-Lite-0.03/inc/Module/Install.pm">Data-Visitor-Lite-0.03</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/WWW-Giraffi-API-0.2_04/inc/Module/Install.pm">WWW-Giraffi-API-0.2_04</a></li> <li>KARUPA <a href="https://metacpan.org/source/KARUPA/Plack-App-Directory-Xslate-0.06/inc/Module/Install.pm">Plack-App-Directory-Xslate-0.06</a></li> <li>KARUPA <a href="https://metacpan.org/source/KARUPA/Sledge-Template-Xslate-0.07/inc/Module/Install.pm">Sledge-Template-Xslate-0.07</a></li> <li>KARUPA <a href="https://metacpan.org/source/KARUPA/Filesys-Notify-KQueue-0.08/inc/Module/Install.pm">Filesys-Notify-KQueue-0.08</a></li> <li>KAZUHO <a href="https://metacpan.org/source/KAZUHO/cppref-0.09/inc/Module/Install.pm">cppref-0.09</a></li> <li>KURIHARA <a href="https://metacpan.org/source/KURIHARA/HTTP-MobileAgent-0.36/inc/Module/Install.pm">HTTP-MobileAgent-0.36</a></li> <li>NEKOKAK <a href="https://metacpan.org/source/NEKOKAK/DBIx-TransactionManager-1.12/inc/Module/Install.pm">DBIx-TransactionManager-1.12</a></li> <li>NEKOKAK <a href="https://metacpan.org/source/NEKOKAK/Test-Attribute-AutoLevel-0.06/inc/Module/Install.pm">Test-Attribute-AutoLevel-0.06</a></li> <li>SATOH <a href="https://metacpan.org/source/SATOH/Text-Xatena-0.18/inc/Module/Install.pm">Text-Xatena-0.18</a></li> <li>SATOH <a href="https://metacpan.org/source/SATOH/HTML-Trim-0.02/inc/Module/Install.pm">HTML-Trim-0.02</a></li> <li>SATOH <a href="https://metacpan.org/source/SATOH/FormValidator-Simple-Plugin-V8-0.01/inc/Module/Install.pm">FormValidator-Simple-Plugin-V8-0.01</a></li> <li>SATOH <a href="https://metacpan.org/source/SATOH/Test-Time-0.04/inc/Module/Install.pm">Test-Time-0.04</a></li> <li>SATOH <a href="https://metacpan.org/source/SATOH/Text-Overflow-0.02/inc/Module/Install.pm">Text-Overflow-0.02</a></li> <li>SATOH <a href="https://metacpan.org/source/SATOH/Config-ENV-0.12/inc/Module/Install.pm">Config-ENV-0.12</a></li> <li>SATOH <a href="https://metacpan.org/source/SATOH/DBIx-RewriteDSN-0.05/inc/Module/Install.pm">DBIx-RewriteDSN-0.05</a></li> <li>SATOH <a href="https://metacpan.org/source/SATOH/Plack-Middleware-StaticShared-0.05/inc/Module/Install.pm">Plack-Middleware-StaticShared-0.05</a></li> <li>SHIBAZAKI <a href="https://metacpan.org/source/SHIBAZAKI/DBIx-DataFactory-0.0.5/inc/Module/Install.pm">DBIx-DataFactory-0.0.5</a></li> <li>TAGOMORIS <a href="https://metacpan.org/source/TAGOMORIS/Net-Hadoop-WebHDFS-0.3/inc/Module/Install.pm">Net-Hadoop-WebHDFS-0.3</a></li> <li>TAGOMORIS <a href="https://metacpan.org/source/TAGOMORIS/Net-Hadoop-HuahinManager-0.02/inc/Module/Install.pm">Net-Hadoop-HuahinManager-0.02</a></li> <li>TAGOMORIS <a href="https://metacpan.org/source/TAGOMORIS/Net-Hadoop-DFSAdmin-ReportParser-0.2/inc/Module/Install.pm">Net-Hadoop-DFSAdmin-ReportParser-0.2</a></li> <li>TARO <a href="https://metacpan.org/source/TARO/Config-Multi-0.12/inc/Module/Install.pm">Config-Multi-0.12</a></li> <li>TARO <a href="https://metacpan.org/source/TARO/FormValidator-LazyWay-0.20/inc/Module/Install.pm">FormValidator-LazyWay-0.20</a></li> <li>TOMITA <a href="https://metacpan.org/source/TOMITA/Acme-Ikamusume-0.07/inc/Module/Install.pm">Acme-Ikamusume-0.07</a></li> <li>ZIGOROU <a href="https://metacpan.org/source/ZIGOROU/Loop-Sustainable-0.02/inc/Module/Install.pm">Loop-Sustainable-0.02</a></li> </ul><p>同じく、<a href="http://weblog.bulknews.net/post/44251476706">MYMETA.*</a>が残っているのはこちら(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>にMANIFEST.SKIPがあるならそれを修正。ない場合はリリース前にExtUtils::Manifestを最新版に更新してください)。</p> <ul> <li>ASKADNA <a href="https://metacpan.org/source/ASKADNA/Plack-Session-State-URI-0.03">Plack-Session-State-URI-0.03</a></li> <li>ASKADNA <a href="https://metacpan.org/source/ASKADNA/WebService-Dropbox-1.18">WebService-Dropbox-1.18</a></li> <li>AYANOKOUZ <a href="https://metacpan.org/source/AYANOKOUZ/WebService-Simple-Yahoo-JP-API-0.11">WebService-Simple-Yahoo-JP-API-0.11</a></li> <li>DELPHINUS <a href="https://metacpan.org/source/DELPHINUS/WebService-Pastefire-0.02">WebService-Pastefire-0.02</a></li> <li>DELPHINUS <a href="https://metacpan.org/source/DELPHINUS/Amon2-Plugin-Web-FormValidator-Simple-0.04">Amon2-Plugin-Web-FormValidator-Simple-0.04</a></li> <li>DMAKI <a href="https://metacpan.org/source/DMAKI/ZeroMQ-0.23">ZeroMQ-0.23</a></li> <li>DMAKI <a href="https://metacpan.org/source/DMAKI/Cache-Memcached-AnyEvent-0.00021">Cache-Memcached-AnyEvent-0.00021</a></li> <li>DMAKI <a href="https://metacpan.org/source/DMAKI/Pickles-0.10">Pickles-0.10</a></li> <li>DSYRTM <a href="https://metacpan.org/source/DSYRTM/File-BetweenTree-1.02">File-BetweenTree-1.02</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/FUJIWARA">FUJIWARA</a> <a href="https://metacpan.org/source/FUJIWARA/Parallel-Benchmark-0.07">Parallel-Benchmark-0.07</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/FUJIWARA">FUJIWARA</a> <a href="https://metacpan.org/source/FUJIWARA/Fluent-Logger-0.10">Fluent-Logger-0.10</a></li> <li>HDAICHI <a href="https://metacpan.org/source/HDAICHI/Data-Enumerator-0.03">Data-Enumerator-0.03</a></li> <li>HDAICHI <a href="https://metacpan.org/source/HDAICHI/Data-Visitor-Lite-0.03">Data-Visitor-Lite-0.03</a></li> <li>HIRAFOO <a href="https://metacpan.org/source/HIRAFOO/Config-Divide-0.036">Config-Divide-0.036</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/App-CLI-Extension-1.421">App-CLI-Extension-1.421</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/App-CLI-Plugin-Parallel-ForkManager-1.1">App-CLI-Plugin-Parallel-ForkManager-1.1</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/App-CLI-Plugin-DBI-1.1">App-CLI-Plugin-DBI-1.1</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/App-digestarchive-0.044">App-digestarchive-0.044</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/App-CLI-Plugin-Proc-PID-File-1.3">App-CLI-Plugin-Proc-PID-File-1.3</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/App-CLI-Plugin-Net-SMTP-1.3">App-CLI-Plugin-Net-SMTP-1.3</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/WWW-Giraffi-API-0.2_04">WWW-Giraffi-API-0.2_04</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/App-CLI-Plugin-Log-Dispatch-Configurator-YAML-1.1">App-CLI-Plugin-Log-Dispatch-Configurator-YAML-1.1</a></li> <li>HOLLY <a href="https://metacpan.org/source/HOLLY/Test-Fixture-KyotoTycoon-0.13">Test-Fixture-KyotoTycoon-0.13</a></li> <li>HWAT <a href="https://metacpan.org/source/HWAT/PerlIO-via-Limit-0.03">PerlIO-via-Limit-0.03</a></li> <li>HWAT <a href="https://metacpan.org/source/HWAT/SWF-ForcibleConverter-0.01">SWF-ForcibleConverter-0.01</a></li> <li>KARUPA <a href="https://metacpan.org/source/KARUPA/Sledge-Template-Xslate-0.07">Sledge-Template-Xslate-0.07</a></li> <li>KARUPA <a href="https://metacpan.org/source/KARUPA/Filesys-Notify-KQueue-0.08">Filesys-Notify-KQueue-0.08</a></li> <li>KAZUHO <a href="https://metacpan.org/source/KAZUHO/Parallel-Scoreboard-0.04">Parallel-Scoreboard-0.04</a></li> <li>KAZUHO <a href="https://metacpan.org/source/KAZUHO/Server-Starter-0.15">Server-Starter-0.15</a></li> <li>KAZUHO <a href="https://metacpan.org/source/KAZUHO/Starlet-0.20">Starlet-0.20</a></li> <li>KAZUHO <a href="https://metacpan.org/source/KAZUHO/cppref-0.09">cppref-0.09</a></li> <li>KIMOTO <a href="https://metacpan.org/source/KIMOTO/Mojolicious-Plugin-DBViewer-0.26">Mojolicious-Plugin-DBViewer-0.26</a></li> <li>KIMOTO <a href="https://metacpan.org/source/KIMOTO/DBIx-Custom-0.28">DBIx-Custom-0.28</a></li> <li>KIMOTO <a href="https://metacpan.org/source/KIMOTO/Mojolicious-Plugin-MySQLViewerLite-0.15">Mojolicious-Plugin-MySQLViewerLite-0.15</a></li> <li>KIMOTO <a href="https://metacpan.org/source/KIMOTO/App-cpanurl-0.04">App-cpanurl-0.04</a></li> <li>KIMOTO <a href="https://metacpan.org/source/KIMOTO/Mojolicious-Plugin-SQLiteViewerLite-0.11">Mojolicious-Plugin-SQLiteViewerLite-0.11</a></li> <li>KIMOTO <a href="https://metacpan.org/source/KIMOTO/Mojolicious-Plugin-AutoRoute-0.14">Mojolicious-Plugin-AutoRoute-0.14</a></li> <li>KIMOTO <a href="https://metacpan.org/source/KIMOTO/Mojolicious-Plugin-INIConfig-0.03">Mojolicious-Plugin-INIConfig-0.03</a></li> <li>KIMOTO <a href="https://metacpan.org/source/KIMOTO/Validator-Custom-0.20">Validator-Custom-0.20</a></li> <li>KUNIYOSHI <a href="https://metacpan.org/source/KUNIYOSHI/Net-TinyIp-0.08">Net-TinyIp-0.08</a></li> <li>NEKOKAK <a href="https://metacpan.org/source/NEKOKAK/SQL-Object-0.01">SQL-Object-0.01</a></li> <li>OKLAHOMER <a href="https://metacpan.org/source/OKLAHOMER/Facebook-OpenGraph-1.11">Facebook-OpenGraph-1.11</a></li> <li>TOKUBASS <a href="https://metacpan.org/source/TOKUBASS/EPUB-Parser-0.05">EPUB-Parser-0.05</a></li> <li>TURUGINA <a href="https://metacpan.org/source/TURUGINA/Mojolicious-Plugin-HTTPStatusRenderer-0.01">Mojolicious-Plugin-HTTPStatusRenderer-0.01</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/Sub-Rate-0.05">Sub-Rate-0.05</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/AnyEvent-APNS-0.10">AnyEvent-APNS-0.10</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/Test-RedisServer-0.12">Test-RedisServer-0.12</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/Text-MicroTemplate-Extended-0.17">Text-MicroTemplate-Extended-0.17</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/Cocoa-BatteryInfo-0.02">Cocoa-BatteryInfo-0.02</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/Sub-Exception-0.01">Sub-Exception-0.01</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/GitDDL-0.02">GitDDL-0.02</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/Data-Apple-PriceTier-0.05">Data-Apple-PriceTier-0.05</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/Data-MessagePack-Stream-0.07">Data-MessagePack-Stream-0.07</a></li> <li>TYPESTER <a href="https://metacpan.org/source/TYPESTER/JSON-Types-0.05">JSON-Types-0.05</a></li> <li>UNLEARNED <a href="https://metacpan.org/source/UNLEARNED/Term-SimpleColor-v0.0.3">Term-SimpleColor-v0.0.3</a></li> <li>UNLEARNED <a href="https://metacpan.org/source/UNLEARNED/Game-TextPacMonster-0.03">Game-TextPacMonster-0.03</a></li> <li>YOSHIMI <a href="https://metacpan.org/source/YOSHIMI/HTTP-MobileAgent-Flash-0.20">HTTP-MobileAgent-Flash-0.20</a></li> <li>ZENTOOO <a href="https://metacpan.org/source/ZENTOOO/Term-ANSIColor-Simple-0.10">Term-ANSIColor-Simple-0.10</a></li> <li>ZIGOROU <a href="https://metacpan.org/source/ZIGOROU/DBIx-DBHResolver-0.17">DBIx-DBHResolver-0.17</a></li> </ul><p>CPANTSについては、春のQA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>の成果もあわせると、以前に比べてチェック項目が6増12減し、以前は非常に雑な実装になっていたいくつかの項目についても改善が進みました。それでもまだ十分とはいえない項目も残っていますが、最初から新しいツールを使ってモジュールをリリースしている若い世代が増えたおかげもあって、数年来続けているランキングについては、9/20時点では11人(その後さらに手入れをした方がいて、9/30時点では13人)の日本人<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Authors (5<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>以上)が満点で並ぶようになっています。最新の様子は<a href="http://acme.cpanauthors.org/for/japanese">acme.cpanauthors.org</a>からご確認いただければと思いますが、記録として、ここにもIDとお名前を残しておきます。</p><p>全日本最強<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Author決定選手権 2013年版 結果</p><p>1. BAYASHI (Dai Okabayashi) (↑)<br /> 2. SONGMU (Masayuki Matsuki) (new)<br /> 3. YAKEX (Yasutaka ATARASHI) (new)<br /> 4. MOZNION (Taiki Kawakami) (new)<br /> 5. AKIYM (Takumi Akiyama) (newb)<br /> 6. SYOHEX (Syohei Yoshida) (new)<br /> 6. SYAGI (Satoshi Yagi) (new)<br /> 6. ZIGUZAGU (Hiroshi Sakai) (new)<br /> 6. CHIBA (Masahiro Chiba) (↑)<br /> 10. ANAZAWA (Ryo Anazawa) (new)<br /> 10. PAWAPAWA (Kohei Yoshioka) (↓)<br /> 10. MORIYA (MORIYA Masaki) (↓ ただし1年以上更新なし)<br /> 10. RINTARO (Rintaro Ishizaki) (new ただし1年以上更新なし)</p><p>(※スコアは全員100点。順位は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>数によるもの)</p> <blockquote> <p>訂正: 日本人<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Authorの抽出に問題があり、上記のリストからはHIDEAKIO (Hideaki Ohno)さんが漏れていました。掲載後、順位に変更が出ているためリストの修正はしませんが、MOZNIONさんと同スコアの4位相当です。大変失礼しました。</p> </blockquote> <p>その他、ごく個人的なこととして、昨年ちょっと話を振ってみたら今年スライドの翻訳を一手に引き受けてくださったktatさん(と、ご同僚の方。お名前を伺いそびれてしまいました)に感謝します。なんだかんだで2006年から毎年なにがしかのスライドを訳してきたわけですが、今年はじめて手離れしました。あと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>をまとめてくださったmyfinderさんとFreakOutのみなさまにも。おかげさまで(半年遅れですが)ようやくQA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>のTokyo Sateliteにリアル参加できました。その成果についてはまた別項で。</p> charsbar DBD::SQLite 1.41_01 hatenablog://entry/17680117127084474791 2013-08-27T16:14:07+09:00 2019-04-28T01:00:34+09:00 SQLite 3.8.0 が出たので、DBD::SQLiteにバンドルされているライブラリも更新して、1.41_01としてリリースしました。SQLite 3.8.0ではクエリプランナーが一新されているほか、where節で限定する部分インデックスも利用できるようになっています。新しいクエリプランナーの詳細については下記をどうぞ。http://www.sqlite.org/queryplanner-ng.html私自身はまだ使い込んでいませんが、SQLiteの作者氏によれば、sqlite.orgで2ヶ月以上使ってみたけれども問題は出ていないとのこと。DBD::SQLiteのテストから判断する限り、… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a> 3.8.0 が出たので、DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>にバンドルされているライブラリも更新して、1.41_01としてリリースしました。<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a> 3.8.0ではクエリプランナーが一新されているほか、where節で限定する部分インデックスも利用できるようになっています。</p><p>新しいクエリプランナーの詳細については下記をどうぞ。</p><p><a href="http://www.sqlite.org/queryplanner-ng.html">http://www.sqlite.org/queryplanner-ng.html</a></p><p>私自身はまだ使い込んでいませんが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>の作者氏によれば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/sqlite">sqlite</a>.orgで2ヶ月以上使ってみたけれども問題は出ていないとのこと。DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>のテストから判断する限り、今回の変更によって余分なsortがひとつ減ったりしていますので、通常は新しいクエリプランナーの方が多かれ少なかれよい結果が期待できるはずですが、前回のクエリ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%D7%A5%C6%A5%A3%A5%DE">オプティマ</a>イザ最適化のときにもあったように、既存のコードのなかにはドキュメントにない、未定義の動作を前提にして書かれているものがあるかもしれませんので、安定版をリリースするまでに、アプリが壊れたり、性能劣化が起こっていないか、確認をおねがいします。</p><p>部分インデックスについては下記をどうぞ。</p><p><a href="http://www.sqlite.org/partialindex.html">http://www.sqlite.org/partialindex.html</a></p><p>これも、上手に使えば非常に便利そうですが、3.7.0で導入されたWALモード同様、使うとバージョン3.8.0より前の<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>ではアクセスできなくなりますのでご注意ください。<a class="keyword" href="http://d.hatena.ne.jp/keyword/DROP">DROP</a> INDEXで部分インデックスを消せば古い(DBD::)<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>でもアクセスできるようになります。</p><p>また、今回のリリースでは<a class="keyword" href="http://d.hatena.ne.jp/keyword/URI">URI</a>形式のデータベース名も渡せるようになっています。といっても、リモートのデータベースにアクセスできるようになったわけではなく、クエリパラメータを追加することで<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>の挙動を変更するためのものです。</p><p>利用可能なパラメータについては下記をどうぞ。</p><p><a href="http://www.sqlite.org/uri.html">http://www.sqlite.org/uri.html</a></p><p>PODにも書いておきましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/URI">URI</a>形式のデータベース名を使う場合は、</p> <pre class="code" data-lang="" data-unlink> my $dbh = DBI-&gt;connect(&#34;dbi:SQLite:uri=file:$path_to_dbfile?mode=rwc&#34;);</pre><p>のように、従来の「 dbname= 」ではなく、「 <a class="keyword" href="http://d.hatena.ne.jp/keyword/uri">uri</a>= 」を使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/URI">URI</a>を渡してください。今回新設した<a class="keyword" href="http://d.hatena.ne.jp/keyword/sqlite">sqlite</a>_open_flags<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%C8">アトリビュート</a>にDBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>::OPEN_<a class="keyword" href="http://d.hatena.ne.jp/keyword/URI">URI</a>を渡すこともできます。</p><p>なお、こちらで報告しそびれていましたが、1.40ではstatistics_infoが使えるようになっているのと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/NetBSD">NetBSD</a>も_XOPEN_SOURCEのハックが不要と判明したので修正してあります。</p> charsbar DBD::SQLite 1.39 hatenablog://entry/17680117127084474865 2013-06-10T22:57:48+09:00 2019-04-28T01:00:35+09:00 気がつけば前回の安定版を出してから丸一年が過ぎてしまいましたが、ようやくDBD::SQLiteの1.39をリリースしました。それぞれ以前にも書いたことですが、今回の1.39ではimmediate transactionをデフォルトにしたのと、クエリオプティマイザ最適化によってORDER BYのないSELECT文の返り値の並び順がこれまでと異なったものになる可能性があるのが大きな変更点です。また、やや地味な変更ですが、カラム名などにutf8文字列が含まれている場合の処理が改善されたほか(jamadam++)、bind_paramに渡す変数を再利用しようとしたときに起こる問題も修正されました。最近… <p>気がつけば前回の安定版を出してから丸一年が過ぎてしまいましたが、ようやくDBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>の1.39をリリースしました。</p><p>それぞれ以前にも書いたことですが、今回の1.39ではimmediate transactionをデフォルトにしたのと、クエリ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%D7%A5%C6%A5%A3%A5%DE">オプティマ</a>イザ最適化によってORDER BYのないSELECT文の返り値の並び順がこれまでと異なったものになる可能性があるのが大きな変更点です。</p><p>また、やや地味な変更ですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%E9%A5%E0%CC%BE">カラム名</a>などにutf8文字列が含まれている場合の処理が改善されたほか(jamadam++)、bind_paramに渡す変数を再利用しようとしたときに起こる問題も修正されました。</p><p>最近のDBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>が<a class="keyword" href="http://d.hatena.ne.jp/keyword/OpenBSD">OpenBSD</a>を除く<a class="keyword" href="http://d.hatena.ne.jp/keyword/BSD">BSD</a>系のシステムでスレッド対応版の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>を使っているときにうまく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%F3%A5%D1%A5%A4%A5%EB">コンパイル</a>できていなかった件も暫定的に対応してあります。</p><p>その他、細かい変更点についてはChangesファイルをご覧ください。</p><p>なお、従来DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>のメンテナンスはAdam Kennedy氏がメール対応やブログエントリの執筆を含めたリリース管理を行い、コードまわりの修正やチケットの対応はおおむね私が行うという分業体制になっていましたが、このところ氏が多忙でなかなか時間がとれなくなっていたため、先日からリリース作業の方も私が行っています。<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>も氏の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Subversion">Subversion</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>から<a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a>の方へ移しましたので、バグやらタイポやら見つけましたら下記へpull requestを送っていただけると助かります。</p><p><a href="https://github.com/DBD-SQLite/DBD-SQLite">https://github.com/DBD-SQLite/DBD-SQLite</a></p> charsbar ExtUtils::MakeMakerでPUREPERL_ONLYに対応する方法 hatenablog://entry/17680117127084474946 2013-05-23T13:26:06+09:00 2019-04-28T01:00:36+09:00 先日のランカスター・コンセンサスで、pure perlなモジュールのみインストールするよう強制したい場合はPUREPERL_ONLY=1という値をPERL_MM_OPTに追加するか、コマンドラインオプションとして渡すべし、という話になったわけですが、ふつうのモジュールを書いている人がいちいち環境変数とコマンドラインオプションをチェックするのはいかにも面倒ですよね。いささか行儀の悪い方法ですが、以下のようにEUMMを(最小限の設定で)newしたあと、内部的に利用されているARGSというハッシュキーを利用すると、(いまのところ未知のオプションということで警告は出るものの) PERL_MM_OPTや… <p>先日の<a href="http://perldoc.jp/docs/articles/github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md">&#x30E9;&#x30F3;&#x30AB;&#x30B9;&#x30BF;&#x30FC;&#x30FB;&#x30B3;&#x30F3;&#x30BB;&#x30F3;&#x30B5;&#x30B9;</a>で、pure <a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>なモジュールのみインストールするよう強制したい場合はPUREPERL_ONLY=1という値を<a class="keyword" href="http://d.hatena.ne.jp/keyword/PERL">PERL</a>_MM_OPTに追加するか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>オプションとして渡すべし、という話になったわけですが、ふつうのモジュールを書いている人がいちいち<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>オプションをチェックするのはいかにも面倒ですよね。</p><p>いささか行儀の悪い方法ですが、以下のようにEUMMを(最小限の設定で)newしたあと、内部的に利用されているARGSというハッシュキーを利用すると、(いまのところ未知のオプションということで警告は出るものの) <a class="keyword" href="http://d.hatena.ne.jp/keyword/PERL">PERL</a>_MM_OPTや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>オプションの処理が終わった状態のPUREPERL_ONLYの情報がとれるようになります。</p> <pre class="code" data-lang="" data-unlink>use strict; use warnings; use ExtUtils::MakeMaker; my %mm_args = ( NAME =&gt; &#39;Foo::Bar&#39;, ... ); my $eumm = ExtUtils::MakeMaker-&gt;new(\%mm_args); my $pureperl_only = $eumm-&gt;{ARGS}{PUREPERL_ONLY}; if ($pureperl_only) { # 消したり変更するオプションの内容は適宜変えてください delete $mm_args{$_} for (qw/XS XSOPT LIBS INC/); } WriteMakefile(%mm_args);</pre> charsbar WorePAN 0.02 hatenablog://entry/17680117127084475100 2013-05-09T14:04:29+09:00 2019-04-28T01:00:38+09:00 Parse::PMFileのテストに多用したWorePANの方も、内部の索引生成をCPAN::ParseDistributionからParse::PMFile(+PAUSE由来のもろもろのコード)に切り替えて0.02としてリリースしました。また、0.02ではCPANミラーの中身の調査を楽にできるよう、walkというメソッドを追加しました。使い方は以下の通りです。 use strict; use warnings; use WorePAN; use Parse::PMFile; use YAML::Tiny qw/LoadFile/; my $worepan = WorePAN->new(roo… <p>Parse::PMFileのテストに多用したWorePANの方も、内部の索引生成を<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>::ParseDistributionからParse::PMFile(+PAUSE由来のもろもろのコード)に切り替えて0.02としてリリースしました。</p><p>また、0.02では<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>ミラーの中身の調査を楽にできるよう、walkというメソッドを追加しました。使い方は以下の通りです。</p> <pre class="code" data-lang="" data-unlink>use strict; use warnings; use WorePAN; use Parse::PMFile; use YAML::Tiny qw/LoadFile/; my $worepan = WorePAN-&gt;new(root =&gt; &#39;/path/to/minicpan&#39;); $worepan-&gt;walk(callback =&gt; sub { my ($dir, $path, $dist) = @_; my $mtime = $dist-&gt;mtime; my $metadata = LoadFile($dir-&gt;file(&#39;META.yml&#39;)); my $parser = Parse::PMFile-&gt;new($metadata); $dir-&gt;recurse(callback =&gt; sub { my $file = shift; return unless $file =~ /\.pm$/; my $packages_info = $parser-&gt;parse($file); ... }); });</pre><p>walkメソッドのコールバックには、WorePANミラー内の各<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>を展開した一時<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ(を格納しているPath::Extended::Dirオブジェクト)、識別用のパス(F/FO/FOO/Foo-Bar-1.24.tar.gzなど)、展開前の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>を格納しているPath::Extended::Fileオブジェクトが渡ります。</p><p>この例ではさらにその一時<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リの中身をなめて個々の.pmファイルに対して処理を行っていますが、もちろん特定のファイルのテストさえ行えればよいのであれば、META.ymlの情報をロードしている箇所のように、$dirから直接ファイルを指定すればよいでしょう。以下の例は指定した各<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>がModule::Installを使っているか確認するテストです。</p> <pre class="code" data-lang="" data-unlink>use strict; use warnings; use WorePAN; use Test::More; my @files = qw( F/FO/FOO/Foo-Bar-1.23.tar.gz ); my $worepan = WorePAN-&gt;new( files =&gt; \@files, local_mirror =&gt; &#39;/path/to/darkpan&#39; no_network =&gt; 0, use_backpan =&gt; 1, cleanup =&gt; 1, ); $worepan-&gt;walk(callback =&gt; sub { my ($dir, $path) = @_; ok -f $dir-&gt;file(&#39;inc/Module/Install.pm&#39;), &#34;$path: Module::Install exists&#34;; }); done_testing;</pre><p>以上、author test用のツールとしてお役に立てばさいわいです。</p> charsbar Parse::PMFile 0.01 hatenablog://entry/17680117127084475027 2013-05-09T14:04:05+09:00 2019-04-28T01:00:37+09:00 遅ればせながらQA Hackathonの成果のひとつとして、Parse::PMFileというモジュールをCPANにアップしました。これは2013年4月時点のPAUSEの中に埋もれているパッケージ/バージョン情報を抽出するコードをほとんどそのまま独立したモジュールとして抜き出したものです。主目的はCPANTSのバージョン情報抽出精度の向上なので、現状ではPAUSEがやっているようなパッケージの解凍や索引の作成、またパーミッション情報の確認(PAUSEでは不適切なパーミッションを持つディストリビューションは索引に含めないようになっています)などはできないようになっています(パーミッションについては… <p>遅ればせながらQA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>の成果のひとつとして、<a href="http://metacpan.org/module/Parse::PMFile">Parse::PMFile</a>というモジュールを<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>にアップしました。これは2013年4月時点の<a href="https://github.com/andk/pause">PAUSE</a>の中に埋もれているパッケージ/バージョン情報を抽出するコードをほとんどそのまま独立したモジュールとして抜き出したものです。</p><p>主目的は<a href="http://cpants.cpanauthors.org">CPANTS</a>のバージョン情報抽出精度の向上なので、現状ではPAUSEがやっているようなパッケージの解凍や索引の作成、また<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>情報の確認(PAUSEでは不適切な<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>を持つ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>は索引に含めないようになっています)などはできないようになっています(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%DF%A5%C3%A5%B7%A5%E7%A5%F3">パーミッション</a>についてはTODOとして今後なんらかの方法で対応できないか検討する予定です)。また、そもそもが<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>の索引づくりを行うためのものなので、索引に載せないように工夫されたパッケージの情報も取得できません。</p><p>使い方は以下の通りです。単に.pmファイルのパッケージ/バージョン情報を取りたいだけならMETA.ymlの情報は渡さなくてもかまいませんが、META.ymlにprovidesフィールドが存在している場合(より厳密にはそのMETA.ymlが過去の壊れていたModule::Buildが生成したものではない、という条件もつきます)、その実際に.pmファイルの中身を精査せず、providesフィールドの情報を返すようになっています。</p> <pre class="code" data-lang="" data-unlink>use strict; use warnings; use Parse::PMFile; use Data::Dumper qw/Dumper/; use YAML::Tiny qw/LoadFile/; # サンプルなので横着していますが、本当はCPAN::Meta::YAMLを使うところです my $metadata = LoadFile(&#39;META.yml&#39;); my $parser = Parse::PMFile-&gt;new($metadata); my $packages_info = $parser-&gt;parse(&#39;lib/Foo.pm&#39;); print Dumper $packages_info; # $VAR1 = { # &#39;Foo&#39; =&gt; { # &#39;parsed&#39; =&gt; 1, # &#39;filemtime&#39; =&gt; 1234567890, # &#39;version&#39; =&gt; &#39;0.01&#39;, # &#39;infile&#39; =&gt; &#39;lib/Foo.pm&#39;, # &#39;simile&#39; =&gt; &#39;lib/Foo.pm&#39;, # } # };</pre> charsbar (DBD::)SQLiteにおけるORDER BYの最適化と検索結果の並び順について hatenablog://entry/17680117127084475158 2013-04-30T23:12:25+09:00 2019-04-28T01:00:39+09:00 最初に結論を書いておきますが、これは正しい使い方をできている方ならまったく気にする必要がない記事です。要するに「ORDER BYを指定していないのにSELECT文の返値に一定の並び順を期待する方が間違い」というだけの話なんですが、先日のQA Hackathonで潜在的な問題が存在していることが浮き彫りになったので、念のため共有しておきます。さて、SQLiteは2012年12月12日にリリースされたバージョン3.7.15でクエリオプティマイザを強化し、その結果、ORDER BYがより積極的に最適化されるようになりました。ただ、DBD::SQLiteはしばらくリリースから遠ざかっていたため、この変… <p>最初に結論を書いておきますが、これは正しい使い方をできている方ならまったく気にする必要がない記事です。要するに「ORDER BYを指定していないのにSELECT文の返値に一定の並び順を期待する方が間違い」というだけの話なんですが、先日のQA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%F8%BA%DF%C5%AA">潜在的</a>な問題が存在していることが浮き彫りになったので、念のため共有しておきます。</p><p>さて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>は2012年12月12日にリリースされたバージョン3.7.15でクエリ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%D7%A5%C6%A5%A3%A5%DE">オプティマ</a>イザを強化し、その結果、ORDER BYがより積極的に最適化されるようになりました。</p><p>ただ、DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>はしばらくリリースから遠ざかっていたため、この変更が<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>界隈の開発者の目に触れるようになったのはつい最近、2013年4月4日に1.38_02がリリースされたときのことでした。</p><p>このときどのモジュールのどのテストがこけるようになったのかはまだ把握していません。私のところに届いたのは最小限の検証<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>だけなのですが、たしかに以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>をDBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a> 1.38_02と、最適化以前のバージョンである1.38_01で実行すると、最後の行の出力がかわります(1.38_01ではSELECT * FROM cdの場合と同じくFoo, Barの順に出てくるのですが、1.38_02ではSELECT title FROM cdの方だけBar, Fooの順に出てくるようになります)。そのため、「不適切な方法でテストをしていると」、1.38_02からは並び順がそろわないことになり、テストがこけるようになります。</p> <pre class="code" data-lang="" data-unlink>use 5.010; use strict; use warnings; use DBI; use Data::Dumper; my $dbh = DBI-&gt;connect(&#39;dbi:SQLite::memory:&#39;, undef, undef, { AutoCommit =&gt; 1, sqlite_allow_multiple_statements =&gt; 1, }); $dbh-&gt;do(&lt;&lt;&#39;SQL&#39;); CREATE TABLE cd (id integer primary key, title unique, year); INSERT INTO cd (title, year) VALUES (&#39;foo&#39;, 2000); INSERT INTO cd (title, year) VALUES (&#39;bar&#39;, 2001); SQL say $DBD::SQLite::VERSION; say $DBD::SQLite::sqlite_version; say Dumper $dbh-&gt;selectall_arrayref(&#39;SELECT * FROM cd&#39;); say Dumper $dbh-&gt;selectall_arrayref(&#39;SELECT title FROM cd&#39;);</pre><p>この件については問題の大きさを検証するため、QA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>の最中に特別にスモーカーを回してもらっていたようで、その後何も言ってこないところをみると結果的にそれほど大きな問題にはならなかったものと思われますが、気になる方は、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>には<a href="http://sqlite.org/pragma.html#pragma_reverse_unordered_selects">reverse_unordered_selects&#x3068;&#x3044;&#x3046;&#x30D7;&#x30E9;&#x30B0;&#x30DE;</a>が用意されているので、それぞれのテストの先頭でこのプラグマを発行するか、ソースに手を加えることをいとわないなら、dbdimp.cの<a class="keyword" href="http://d.hatena.ne.jp/keyword/sqlite">sqlite</a>_db_login6に以下の一行を追加して様子を見てみるとよいでしょう。</p> <pre class="code" data-lang="" data-unlink> sqlite_exec(dbh, &#34;PRAGMA reverse_unordered_selects = ON&#34;);</pre><p>これでテストがこけるようなら、暗黙のうちにSELECT文の結果が一定の順序で返ってくることを期待していた可能性が高い、ということになります。</p><p>実際、DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>自身にもこの問題に引っかかっているテストが2つありました(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>の方では直しておきました)。DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>をアップグレードしたときに急にテストがこけるようになった場合は、このような問題が関係している可能性があることも覚えておいていただけるとさいわいです。</p> charsbar OSDC.TW 2013にも参加してきました hatenablog://entry/17680117127084475225 2013-04-26T16:19:47+09:00 2019-04-28T01:00:40+09:00 Perl QA Hackathon 2013に続いて、4月19日、20日に台北で開催されたOSDC.TW 2013にも参加してきました。自分の発表はさておくとして、個人的には前から気になっていた零時政府プロジェクトの話を聞けただけでも十分に行った甲斐があったと思えたことです。以下、gugod、audreyt両氏がそれぞれ同プロジェクトで作成している台湾の国語辞典サイト/アプリで利用している技術について発表した資料と、実際に利用できる「萌典」へのリンク、それとg0vハッカソンについて発表されていたtkirby氏の資料へのリンクを貼っておきます(*)。 https://speakerdeck.co… <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> QA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a> 2013に続いて、4月19日、<a class="keyword" href="http://d.hatena.ne.jp/keyword/20%C6%FC">20日</a>に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C2%E6%CB%CC">台北</a>で開催されたOSDC.TW 2013にも参加してきました。自分の発表はさておくとして、個人的には前から気になっていた<a href="http://g0v.tw/">&#x96F6;&#x6642;&#x653F;&#x5E9C;</a>プロジェクトの話を聞けただけでも十分に行った甲斐があったと思えたことです。以下、gugod、audreyt両氏がそれぞれ同プロジェクトで作成している台湾の国語辞典サイト/アプリで利用している技術について発表した資料と、実際に利用できる「<a href="https://www.moedict.tw/">&#x840C;&#x5178;</a>」へのリンク、それとg0v<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>について発表されていたtkirby氏の資料へのリンクを貼っておきます(*)。</p> <ul> <li><a href="https://speakerdeck.com/audreyt/pgrest-node-dot-js-in-the-database">https://speakerdeck.com/audreyt/pgrest-node-dot-js-in-the-database</a></li> <li><a href="https://speakerdeck.com/gugod/elasticsearch-intro">https://speakerdeck.com/gugod/elasticsearch-intro</a></li> <li><a href="https://www.moedict.tw/">https://www.moedict.tw/</a></li> <li><a href="https://speakerdeck.com/tkirby/g0v-hei-ke-song-xie-cheng-shi-gai-zao-she-hui">https://speakerdeck.com/tkirby/g0v-hei-ke-song-xie-cheng-shi-gai-zao-she-hui</a></li> </ul><p>(*)「萌典」といってもいわゆる「萌え〜」についての辞典ではなく、日本の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%B2%CA%BE%CA">文科省</a>に相当する台湾の教育部 (Ministry of Education)でつくられている辞典、の意味ですね。</p><p>また、滞在中はhcchien氏をはじめとするおなじみの方々に加えて、今年はLiveScriptの話をされていたMindos氏にも大変お世話になりました。多謝!</p><p>で、問題の発表資料ですが、今年もまた土壇場で方針変更してしまったため、当初の予定とはかなり違ったものになってしまいました。これについてはまた何かの機会に整理し直したいとおもっています。</p> <ul> <li><a href="http://www.slideshare.net/charsbar/osdctw2013">http://www.slideshare.net/charsbar/osdctw2013</a></li> </ul> charsbar Perl QA Hackathon 2013に参加してきました hatenablog://entry/17680117127084475288 2013-04-26T16:18:26+09:00 2019-04-28T01:00:41+09:00 以前こちらでも予告しておいた通り、4月12日から14日までイギリスのランカスターで開催されたPerl QA Hackathonに参加してきました。今回のイベントも多くのスポンサーさまに支えていただきました。運営チームのみなさまおよび企業団体スポンサー(cPanel, Dijkmat, Dyn, Eligo, Evozon, $foo, Shadowcat Systems Limited, Enlightened Perl Organisation, Mongueurs de Perl)のみなさま、そして昨年に引き続き個人スポンサーとして寄付をいただいたSyohei Yoshida (@syoh… <p>以前こちらでも<a href="http://d.hatena.ne.jp/charsbar/20130311/1362973682">&#x4E88;&#x544A;</a>しておいた通り、4月12日から14日までイギリスのランカスターで開催された<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> QA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>に参加してきました。今回のイベントも<a href="http://2013.qa-hackathon.org/qa2013/sponsors.html">&#x591A;&#x304F;&#x306E;&#x30B9;&#x30DD;&#x30F3;&#x30B5;&#x30FC;&#x3055;&#x307E;</a>に支えていただきました。運営チームのみなさまおよび企業団体スポンサー(<a href="http://www.cpanel.net/">cPanel</a>, <a href="http://www.dijkmat.nl/">Dijkmat</a>, <a href="http://www.dyn.com/">Dyn</a>, <a href="http://www.eligo.co.uk/">Eligo</a>, <a href="http://www.evozon.com/">Evozon</a>, <a href="http://www.perl-magazin.de/">$foo</a>, <a href="http://www.shadow.cat/">Shadowcat Systems Limited</a>, <a href="http://www.enlightenedperl.org/">Enlightened Perl Organisation</a>, <a href="http://www.mongueurs.net/">Mongueurs de Perl</a>)のみなさま、そして昨年に引き続き個人スポンサーとして寄付をいただいたSyohei Yoshida (@syohex)さま、ありがとうございました。おかげさまで大変有意義な時間を過ごすことができました。</p><p>また、今回のQA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>では、ランカスターでの<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>にあわせて東京でも一日<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>が行われたので、こちらにもリモートで参加しました。会場をご提供くださった<a href="http://fout.jp/">FreakOut Inc.</a>さまにもあわせて感謝いたします。</p><p>さて、今回の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>ではいろいろと興味深い出来事がありました。私が何をしたかはあとから書くとして、まずは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>全体としてどのようなことが行われたかを簡単に紹介しておきます。</p> <div class="section"> <h4>Lancaster Consensus</h4> <p>まず、今回の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>のひとつのハイライトとして、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>モジュールのインストールに必要な各種モジュール、サービス (toolchain) にかかわっている人たちが今後開発やサービスを継続していくにあたって確認しておきたいさまざまな項目を1日約2時間ずつ議論しました。その成果はランカスター・コンセンサス (<a href="https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md">Lancaster Consensus</a>)という形でまとめられています。詳細については議論をリードした<a href="http://www.dagolden.com/index.php/2098/the-annotated-lancaster-consensus/">David Golden&#x6C0F;&#x306E;&#x8A18;&#x4E8B;</a>に注釈付きで詳しく説明されていますが、いささか長いので、ここでは多くの方に影響がありそうなところだけ要約しておきます (特殊なことをしているモジュール作者やtoolchain開発者向けには別途全訳を用意するのでしばしお待ちください)。</p> <blockquote> <p>追記: ランカスター・コンセンサスおよび<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%B9%A5%ED">オスロ</a>・コンセンサスの翻訳をperldoc.jpにアップしておきました。</p> <ul> <li><a href="http://perldoc.jp/docs/articles/github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md">&#x30E9;&#x30F3;&#x30AB;&#x30B9;&#x30BF;&#x30FC;&#x30FB;&#x30B3;&#x30F3;&#x30BB;&#x30F3;&#x30B5;&#x30B9;</a></li> <li><a href="http://perldoc.jp/docs/articles/github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/oslo-consensus.md">&#x30AA;&#x30B9;&#x30ED;&#x30FB;&#x30B3;&#x30F3;&#x30BB;&#x30F3;&#x30B5;&#x30B9;</a></li> </ul> </blockquote> <ul> <li>今回の合意で、今後toolchainモジュールがサポートする<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>のバージョンは2003年9月にリリースされた5.8.1以上とすることが決まりました (念のため、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5 Portersがサポートする<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>のバージョンは直近の安定版2つのみです。2013年4月時点では<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.16.xと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.14.xの2つですが、近々リリース予定の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.18が出た時点で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.14.x系列のサポートは終了します)。お仕事の関係でどうしても5.6.x系列を使い続ける必要がある方は <a href="http://cpxxxan.barnyard.co.uk/">CPXXXAN</a> (読み方については<a href="http://www.dagolden.com/index.php/2088/cpxxxan-is-sexpan/">&#x3053;&#x3061;&#x3089;&#x306E;&#x8A18;&#x4E8B;</a>をどうぞ) と呼ばれる過去のバージョン専用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>を使うことで対応するモジュールをインストールすることはできますが、ExtUtils::MakeMakerやTest::Moreをはじめとするtoolchainの根幹をなす各種ツールが、今後メンテナンスの手間を軽減するため、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.8で導入された機能や、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5.8でコア入りしたモジュールを積極的に利用していくようになることも予想されますので、可能であればこの機会により新しい<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>への移行をご検討ください。</li> </ul> <ul> <li>「特定の状況以外では実行してほしくないテスト」を指定する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>がより細かく定義されました。特に現在AUTOMATED_TESTINGという<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>を利用している<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>モジュール作者の方は、(1) <a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Testers以外には実行してほしくないテストなのか、(2) ユーザからの入力を求める(実行中に処理が止まりうる)コードが含まれるテストなのか、(3) 長い時間がかかったり、不確実な外部リソースを利用する必要があるのでインストール時にはスキップしてもいいテストなのか、(4) リリース時のみ実行すればいいテストなのか、(5) 開発時のみ実行すればいいテストなのか、を判断したうえで、それぞれ AUTOMATED_TESTING、NONINTERACTIVE_TESTING、EXTENDED_TESTING、RELEASE_TESTING、AUTHOR_TESTING という<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B4%C4%B6%AD%CA%D1%BF%F4">環境変数</a>を適切に設定ないし処理することが求められます。</li> </ul> <ul> <li>今後<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>にアップロードするモジュールは、メインのモジュールと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a> (tarball)の名前を適切に対応させることが求められるようになります。また、大文字小文字の区別がない環境で問題を起こさないよう、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>登録時のチェックも大文字小文字の区別なしに行われます。</li> </ul> <ul> <li>PAUSE IDの登録は現在手作業で行われていますが、今後しかるべき対策をとったのちに自動化される予定です。また、モジュールのアップロードやRTへのバグ報告などを含めて、まったく利用実績のないIDについては、しかるべき手続きをとったのちに削除されるようになる見込みです(なお、過去にモジュールをアップロードしたことのあるIDについてはこの自動化で削除の対象になることはありませんのでご安心ください)。</li> </ul> <ul> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>にアップロードされている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>のうち、一定の条件を満たす古いバージョン (それより新しい安定版が3つ以上ある、等)については、しかるべき手続きをとったのち自動的に削除されるようになる予定です。何らかの事情で旧版が必要な方は前述のCPXXXANやBackPANからダウンロードしてもらうようになる見込みです。</li> </ul> <ul> <li>昔は<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>モジュールの登録時にはあらかじめ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%BE%C1%B0%B6%F5%B4%D6">名前空間</a>やモジュールの種類を登録しておくことが推奨されていました (この登録も手動で行われていたため、不適切な名前で登録しようとすると管理者側からより適切な名前が提案されるなどの教育効果がありました)。今後この<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CC%BE%C1%B0%B6%F5%B4%D6">名前空間</a>などの登録(およびそれにともなう人的作業)は廃止される見込みです。新しく<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>モジュールを登録する前に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>コミュニティからの意見を聞いてみたい方は、<a href="http://prepan.org/">PrePAN</a>などをご利用ください。</li> </ul> </div> <div class="section"> <h4>その他の成果</h4> <p>その他、各参加者の成果については下記のページにまとめられています。まだすべての成果が網羅されているわけではありませんが (ごめんなさい、私もまだ書いていません)、Devel::Coverチーム、Test::Builderチーム、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DBI">DBI</a>/DBDチームなど、それぞれが数人のグループに分かれて、いかにも<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>らしい議論と実装に取り組んでいました。</p><p><a href="http://2013.qa-hackathon.org/qa2013/wiki?node=Achievements">http://2013.qa-hackathon.org/qa2013/wiki?node=Achievements</a></p><p>また、個人的なプロジェクトとしては、<a href="http://grep.cpan.me/">CPAN-&gt;grep</a>の作者でもあるDavid Leadbeater (dg)氏の<a href="http://dg.cx/jsperl/">perl in JavaScript</a>が興味深い成果をあげています。</p> </div> <div class="section"> <h4>私の作業報告</h4> <p>私は予告通りもっぱらCPANTSの整備をしていました。これについてはまだ作業中の部分が多く、本番サーバには変更を反映できていませんが、期間中30件強のコミットを行い、メトリクスを2増8減して、都合14件のチケットを閉じられる状態にしておきました。また、CPANTSの改善の一環として、PAUSE作者のAndreas Koenig氏に(PAUSE内で行っている).pmファイルのpackage名やバージョン情報を取得するコードを独立させられないかを相談したり(氏には<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>のインスタントミラーの最新事情についても教えていただきました)、Module::ExtractUseの作者であるThomas Klausner氏に連絡をとって<a href="https://github.com/yak1ex">Yasutaka ATARASHI</a>氏のパッチを取り込んでくださるようお願いしたり、Test::KwaliteeやModule::CPANTS::Analyseのメンテナ氏と相談してModule::CPANTS::Kwalitee以下のメトリックスのうち、ローカルにインストールする必要のないものや、インストールに問題があるものなどを別<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3">ディストリビューション</a>にわける相談などをしていました。これらの作業は現在も継続中で、それぞれ以下の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>で開発やテストを行っています。</p> <ul> <li><a href="https://github.com/cpants/Module-CPANTS-Analyse">https://github.com/cpants/Module-CPANTS-Analyse</a></li> <li><a href="https://github.com/charsbar/Parse-PMFile">https://github.com/charsbar/Parse-PMFile</a></li> <li><a href="https://github.com/charsbar/worepan">https://github.com/charsbar/worepan</a></li> <li><a href="https://github.com/domm/Module-ExtractUse">https://github.com/domm/Module-ExtractUse</a></li> </ul><p>また、サテライト会場での<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>では、h2xsの置き換えを念頭において開発を進めていたモジュールの整備をして<a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a>に公開しました。</p> <ul> <li><a href="https://github.com/charsbar/convert_h_xs">https://github.com/charsbar/convert_h_xs</a></li> </ul><p>これらのモジュールについては、もう少し開発を進めて<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a>にリリースするなりなんなりした時点であらためて記事を用意しようとおもいます。</p><p>そのほか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DBIC">DBIC</a>のメンテナである ribasushi 氏から <a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a> 3.7.15 以降 ORDER BY の機能強化が行われたことによる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%F8%BA%DF%C5%AA">潜在的</a>な問題点の指摘を受けたので調査と対応を行いました。これについては項をあらためて説明します。</p> </div> <div class="section"> <h4>その他</h4> <p>例によって日中のハック以外にもさまざまな出来事がありました。特にお世話になった方を中心に紹介しておきます。</p> <ul> <li>昨年もいろいろ気を遣ってくださったWendyさんとLizさんから、昨年話題になったドイツにある<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>村のワインをおみやげとしていただきました。リュックひとつの旅だったため中身は帰りの飛行機に乗る前の日に飲んできてしまったのですが (コルク抜きを探してさんざん歩き回ったのですが、いざ開けようとしたらスクリューキャップだったことに気がついたという)、ラベルははがして持ち帰り、次のOSDC.TWのスライドにネタとして埋め込みました。</li> <li>最終日の夜にはmst氏も現れ、9月に来日するという話や、Shadowcat Systemsをつくった理由などをうかがいました。OSDC.TWのスライドには同じくQA <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>のおみやげとしていただいた氏のコースター?(名刺?)の写真も載せてあります。</li> <li>2日目の夕食後にはCPANTS仲間でもあるdolmen氏がランカスターに持ち込んでいた<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chartreuse">Chartreuse</a> VerteをOslo.pmのSJN氏、Joakim氏といっしょにいただきました。</li> <li>Git::*モジュール仲間ということで、Git::Repositoryの作者であるBooK氏に誘われて、同じくGit::Subというモジュールを書いているdolmen氏といっしょに記念撮影。どこかで見かけることがあったら苦笑してください。</li> </ul><p>ほかにも、NY.pmのJames Keenan氏や、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DuckDuckGo">DuckDuckGo</a>のGetty氏など、いろいろな方にいろいろなお話をうかがいました。もちろん全員とお話できたわけではありませんでしたが、今回は毎朝各自持ち時間1分以内で進捗報告をする時間が用意されていたおかげもあって、前回よりもかなり多くの方の顔と名前を一致させられたようにおもいます。</p><p>来年はフランスのLyonが会場とのこと。今回の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a>の反省をもとに、今回よかったこと、足りなかったことの整理がもう始まっています。参加申し込みが始まるのはずっと先の話ではありますが、興味を持たれた方はぜひ<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>-qaの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A1%BC%A5%EA%A5%F3%A5%B0%A5%EA%A5%B9%A5%C8">メーリングリスト</a>や、<a class="keyword" href="http://d.hatena.ne.jp/keyword/irc">irc</a>.<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>.orgの#<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>-qaに参加してみてください。</p> </div> charsbar DBD::SQLite 1.38_02 hatenablog://entry/17680117127084475408 2013-04-10T11:02:34+09:00 2019-04-28T01:00:43+09:00 いろいろあって半年ほど放置状態になっていましたが、DBD::SQLite 1.38_02を出し(てもらい)ました。今回特に大きな変更はありませんが、みなさんからの異論がなければこれがDBD::SQLite 1.39になる見込みですので、DBD::SQLiteを使ったアプリやDBD::SQLiteをテストに使っているモジュールの作者の方はあらかじめこのバージョンで問題なく動作するか、また特に大量の読み込みを行うアプリでパフォーマンスの劣化が起こっていないか、ご確認をお願いします。 <p>いろいろあって半年ほど放置状態になっていましたが、DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a> 1.38_02を出し(てもらい)ました。今回特に大きな変更はありませんが、みなさんからの異論がなければこれがDBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a> 1.39になる見込みですので、DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>を使ったアプリやDBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>をテストに使っているモジュールの作者の方はあらかじめこのバージョンで問題なく動作するか、また特に大量の読み込みを行うアプリでパフォーマンスの劣化が起こっていないか、ご確認をお願いします。</p> charsbar Perl QA Hackathon 2013について hatenablog://entry/17680117127084475482 2013-03-11T12:48:02+09:00 2019-04-28T01:00:43+09:00 先日半年ぶりくらいで参加したHachioji.pm #26や、3/9に開催されたHokkaido.pm #9でも少しだけ話をしましたが、昨年に引き続き、今年も4月12日から14日にかけて、イギリスのランカスター大学で開催されるPerl品質管理チームのハッカソンに参加してきます。http://2013.qa-hackathon.org/qa2013/参加申し込みはすでに締め切られていますが、今年も各国から40名近い参加者が集まり、Module::Buildまわりの作業や、.packlistの置き換え、CPAN Testers向けのツールの整備、Test::Harness/Test::Builde… <p>先日半年ぶりくらいで参加したHachioji.pm #26や、3/9に開催されたHokkaido.pm #9でも少しだけ話をしましたが、昨年に引き続き、今年も4月12日から14日にかけて、イギリスのランカスター大学で開催される<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>品質管理チームの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>に参加してきます。</p><p><a href="http://2013.qa-hackathon.org/qa2013/">http://2013.qa-hackathon.org/qa2013/</a></p><p>参加申し込みはすでに締め切られていますが、今年も各国から40名近い参加者が集まり、Module::Buildまわりの作業や、.packlistの置き換え、<a class="keyword" href="http://d.hatena.ne.jp/keyword/CPAN">CPAN</a> Testers向けのツールの整備、Test::Harness/Test::Builderの対応などが行われる予定です。また、目新しいところでは「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> 5の仕様」を定めるテストスイートの構築というテーマがあげられています。将来的には<a href="https://github.com/perl6/roast">Perl 6&#x306E;&#x516C;&#x5F0F;&#x30C6;&#x30B9;&#x30C8;&#x30B9;&#x30A4;&#x30FC;&#x30C8;</a>や、<a href="http://perl6.org/compilers/features">Perl 6&#x306E;&#x4ED5;&#x69D8;&#x3068;&#x5404;&#x5B9F;&#x88C5;&#x306E;&#x5BFE;&#x5FDC;&#x72B6;&#x6CC1;</a>のようなものを提供したいとのことで、もちろん今回の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>だけで完結するような話ではありませんが、先般話題になったPumpking <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a>の議論ともども、今後さまざまなイベントや<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A1%BC%A5%EA%A5%F3%A5%B0%A5%EA%A5%B9%A5%C8">メーリングリスト</a>、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IRC">IRC</a>などで議論を深めていくためのたたき台になることが期待されます。私自身はもっぱら<a href="http://cpants.cpanauthors.org/">CPANTS</a>で使っている各種ツールのメンテナンスをすることになりそうですが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/DBI">DBI</a>やDBD::*の共通テストを整備するというお題もあがっているので、DBD::<a class="keyword" href="http://d.hatena.ne.jp/keyword/SQLite">SQLite</a>のメンテナとしてはそのお手伝いもしたいと思っています。</p><p>例によってイギリス以外に住んでいる<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A1%BC">ハッカー</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%CF%B9%D2">渡航</a>費や<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>公式ホテルの宿泊費についてはいま主催者側の方でさまざまな伝手をつかってスポンサーを募集してくださっていますが、下記予算にある通り、まだ全額カバーできるほどにはなっていないようです。もしスポンサーになってもいいという企業・団体の方がいらっしゃいましたらお知らせください。</p><p><a href="http://2013.qa-hackathon.org/qa2013/budget.html">http://2013.qa-hackathon.org/qa2013/budget.html</a></p><p>また、今年はEnglightened <a class="keyword" href="http://d.hatena.ne.jp/keyword/Perl">Perl</a> Organization経由で寄付を送ることもできるようになっています。個人スポンサーになってくださる方がいらっしゃいましたら、下記リンクより<a class="keyword" href="http://d.hatena.ne.jp/keyword/EPO">EPO</a>のサイトに移動して、適当な額を英ポンド換算でお送りいただければさいわいです。</p><p><a href="http://2013.qa-hackathon.org/qa2013/donate.html">http://2013.qa-hackathon.org/qa2013/donate.html</a></p> charsbar