その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

perl

JSON::XSでデシリアライズする時にtrueとfalseの扱いを変更する

Perl5の話題です. JSON::XSを用いて,JSON StringをPerlのHashRefにデシリアライズする時にtrueとfalseの扱いを変えたいという話です.デフォルト状態でJSON::XSを用いてデシリアライズすると, true は Types::Serialiser::true すなわち JSON::PP::Boolea…

List::Haystack - A immutable list utility to find and count element

Perl5の話題です.List::Haystackというものを書きました.CPANにもアップロードしています. 経緯としては以下.Perl,immutableな感じで,List (Array) 中から要素をfindしたり,出現回数を取るモジュールって存在しているんでしたっけ— パブリックイメー…

Perl5のサブルーチン呼び出し時に二項演算子を期待していたら単項演算子の引数として認識されてしまう

sub func { return 100; } みたいなサブルーチンがあった時に, say(func - 99); みたいな感じで呼び出すと,パッと見 1 が出力されそうに見えるが,実際は 100 が出力される. これは - 99 が func の引数として解釈されて食われるためである. B::Deparse …

Test::Fluent::Logger書いた

表題の通りです.Perl5の話です.CPANにもあげてあります.https://metacpan.org/pod/Test::Fluent::Logger何をするモジュールかというと,useするだけでFluent::Loggerのpost及びpost_with_timeの内容をインターセプトして,本来送るべき宛先には送らずに内…

YAPC::Asia Tokyo 2015 で Yet Another Perl Cooking というタイトルで話してきました

話してきました.以下がスライドとなります.登録時にスライド字幕を誤って「英語」にしてしまったばかりに英語スライドとなっております. 「画像がヤベえ!!」とか言われたんですが,まあこれで発表したんだし公開するスライドの画像を修正するのも違うよ…

plenv で stableperl を利用するの術 & stableperl の話

[追記] (旧タイトル) Perl::Build (plenv) で stableperl が利用できるようになりました & stableperl の話色々あって方法が変わったので内容を修正します Perl::Build (plenv) で stableperl が利用できるようになりました & stableperl の話Perl::Build 及…

文字列内のバックスラッシュを区別したい的な

タイトルが適当すぎて何を言っているのかわからないと思いますが,まあそういう事がごくごく稀にあります.結論から言うとヒアドキュメント使えば良いです.以下の様な文字列を考えた時, my $string = '\n\\'; これを1文字ずつ処理しようとすると, say $_ …

Regexp::Lexerってやつを書いた

https://metacpan.org/pod/Regexp::Lexer https://github.com/moznion/Regexp-Lexer Perlの正規表現を解析したいなー,と思った時にまず目につくのはRegexp::Parserだと思うのですが,このモジュールは解釈できないメタ文字や構文が多い為,実用にあたっては…

Excel::Writer::XLSXのset_optimization()について

基本的にExcel::Writer::XLSX使うときは my $workbook = Excel::Writer::XLSX->new('yabai.xlsx'); my $worksheet = $workbook->add_worksheet(); ... みたいな感じで使うと思うんですが,素朴にこれでやっていこうとするとExcelの行数が増えた時にメモリを…

YAPC::Asia Tokyo 2014に参加致しました

YAPC::Asia Tokyo 2014に参加致しました.例年はgihyo.jpのリポータという事で参加していたのですが,今年は僕の怠慢でリポータではなく,初の一般参加でした.とはいえ, YAPC::Asia Tokyo 2014でPerl::Lintについて喋りました - その手の平は尻もつかめる…

YAPC::Asia Tokyo 2014でPerl::Lintについて喋りました

タイトルのとおりです. スライドは以下です. もうちょい詳しく話す予定だったんですが,冒頭のライブリリースに失敗するなどして出鼻をくじかれテンパってしまいました…… ちょっと詳しい話をすると, ポリシー周り 各ポリシーがトークンを受け取って,それ…

YAPC::Asia Tokyo 2014でPerl::Lintについて喋ったりします

おわび Perl::Lint出来てません 本題 明日8月28日(木)から3日間に渡ってアジア最大のPerlのカンファレンスであるところのYAPC::Asia Tokyo 2014が開催されますね! 楽しみですね! 夜も眠れないですね! さて,そのYAPC::AsiaでわたくしPerl::Lintという開発…

XSのABRTをキャッチしたい

このPerlコード実行するとSIGABRT発生するんだけど,これなんとかtrapできないのかな https://t.co/HeB6uvrl5z— Lint it (@moznion) 2014, 8月 17 supervisord使ってても,アプリで使ってるXSライブラリがABRTを吐いたらアプリごと死んでついには生き返らな…

Published “Perl::Lint Playground”

(またしても日本語は下にあります / Japanese follows English) I published “Perl::Lint Playground”. http://perl-lint.moznion.net/ You can try feature of Perl::Lint easier on this playground. However this and Perl::Lint have not been completed…

Released Perl::Lint as underdevelopment

(日本語は下にあります / Japanese follows English) I've just released Perl::Lint as underdevelopment. https://metacpan.org/release/MOZNION/Perl-Lint-0.01_01 Development of Perl::Lint is in progress, but I need feedback about this module. Th…

先読みとautovivificationの話,あるいはマイクロオプティマイゼーションの話

Perlの話です.が,先読みの辺りはどの言語でも共通なのでは,という感じです. 追記 なんか先読み関係ない感じになってるのでコメント見ると良いです.この記事の情報は誤っているので後で書き直す. ここから先は読まなくても良い さて,配列を走査するよ…

Time::SecondsのONE_MONTHとONE_YEARについて

Time::SecondsのONE_MONTHとONE_YEARを使う場合,本当にその方法で良いのかよく考えたほうが良いと思います.バグが出る可能性が高い気がします.例えば以下の様な場合 use Time::Piece; use Time::Seconds; my $tp = localtime->strptime("2014-04", "%Y-%m…

Released Log::Minimal::Object

皆さん,Perlのアプリケーションのログを出力したい時はLog::Minimalをご利用のことと存じます.非常に便利でグレートなモジュールなので僕も毎度使っております. さて,そのLog::Minimalですが,ログの出力をカスタムしたい時には$Log::Minimal::COLORや$L…

Released Parse::KeyValue::Shellish

https://metacpan.org/pod/Parse::KeyValue::Shellish https://github.com/moznion/Parse-KeyValue-Shellishfoo=barだとかhoge=(fuga piyo)みたいな,いわゆるshell的なkey-valueを解釈する必要があったので書きました.shell的key-valueの文字列を解釈してh…

Released Perl::PrereqScanner::Lite

(日本語は英語の後にあります) I released Perl::PrereqScanner::Lite.https://github.com/moznion/Perl-PrereqScanner-Lite https://metacpan.org/release/Perl-PrereqScanner-Lite This module is the fast edition of Perl::PrereqScanner. Perl::PrereqS…

App::GitHubWebhooks2Ikachanが出た

長い名前だ!!! そしてマニアック. https://metacpan.org/release/App-GitHubWebhooks2Ikachan https://github.com/moznion/App-GitHubWebhooks2Ikachan これは何 GitHubのWebhooksを受け取って,いい感じにしてIkachanに投げる君です. 現状,issues,pu…

B::perlstringを使って文字列中のダブルクォートを適切にエスケープする

文字列中にエスケープされていないダブルクォートがあった時に,例えば文字列evalしようとするとずっこける事があります.以下の様な感じ. なぜ失敗するかというと,eval "$str"がeval "hel"lo"という風に評価されてしまうからなんですね.これではlo"がinv…

Yokohama.pm #10に参加してきました

Yokohama.pm #10に参加して参りました. Yokohama.pmヤバくて,無限にビールは飲めるわ有限に食事はできるわ,加えて学びを得られるわで最高のイベントと言っても過言ではない感じでした.KAYAC社はすごい. さて,詳細なレポートなどは他の参加者の方が素晴…

Localizerが出た

http://blog.64p.org/entry/2014/02/17/192612Localizerと言うのはYet Another Framework for Localizationのことで,国際化対応のための新しいフレームワークです.インタフェースが従来のものよりイカしていて良いと思います. Gettextのコンパイラの実装…

Digest::MD5のもろもろに関して

第一部 まず,id:amagitakayosiさんのブログ記事に関しまして. http://amagitakayosi.hatenablog.com/entry/2014/01/31/174915これの結果がおかしいのは,普通に関数で呼び出すべき所をクラスメソッドみたいな感じで呼んでいる為です.これではclassがdiges…

正規表現で,他の条件にマッチしない文字列を取得したい

メモ書き程度です. 例えば,aaafoobbbbarcccfoodddみたいな文字列があった時に,fooとbarにマッチしない文字列が欲しい時には以下のように書くと良い. $str =~ m/(.*?)(?:foo|bar)/g; 実行すると以下のような値が得られる. $VAR1 = 'aaa'; $VAR2 = 'bbb';…

im.kayacでカジュアルにメッセージ送るPerlのライブラリ作った

im.kayacを使ってカジュアルにメッセージを送るPerlのライブラリ,WebService::ImKayac::Simpleを作成・公開しました.https://github.com/moznion/WebService-ImKayac-Simple https://metacpan.org/release/WebService-ImKayac-Simple im.kayacでメッセージ…

NHK番組表APIを触る為のPerlクライアント作った

去る2014年1月27日にNHK番組表APIが公開され,これが中々良い感じだったので,PerlからそのAPIを触れるクライアントであるWWW::NHKProgram::APIを書きました.https://metacpan.org/release/WWW-NHKProgram-API https://github.com/moznion/WWW-NHKProgram-A…

ファイルハンドルに対するbinmodeの変更が及ぼす影響を小さくしたい

ファイルハンドルをbinmodeで変更して,そのファイルハンドルを用いて何らかの処理を行いたい,という欲求がしばしばあると思います. 単純に書くと以下のようになるでしょう. このコードではファイルハンドルを普通にopenして,それをawesome_function()に…

Text::LTSVの新しいバージョンではメソッドにファイルハンドルを渡せるようになって便利

Text::LTSVのparse_fileとparse_file_utf8には元々ファイルパスしか引数として与えられなかったのですが,Version 0.08以降はここにOpenしてあるファイルハンドルを渡せるようになって便利です.処理がスマートに書けるようになって大変満足!

Text::XslateにテンプレートのSyntaxをチェックするメソッドが追加されて便利

Text::Xslateのバージョン3.1.0から,テンプレートのSyntaxが正しいかそうでないかをチェックするメソッドが追加されていて便利です. 以下のように,テストしたい対象のテンプレートファイルをvalidate()メソッドの引数として食べさせてあげると,そのテン…

Hokkaido.pm #11に参加した報告とTestとDocumentの甘い関係に関して

Hokkaido.pm #11に参加してまいりました. 以下が僕の発表スライドです. Hokkaido.pm #11 from moznion 言いたいことは大体スライドに書いてある通りで, TestとDocumentは同じ方向 (どちらも正しいソフトウェアの動作について論じている) を向いている 従…

Test::Synopsis::Expectationというモジュールをリリースしました

このたび,Test::Synopsis::Expectationというモジュールをリリースしました. https://metacpan.org/pod/Test::Synopsis::Expectation https://github.com/moznion/Test-Synopsis-Expectation 使い方や仕組み等をid:mackee_wさんの記事で紹介していただいた…

開発中のPerlのモジュールでブランチ間をまたいでベンチマークを取る

ほぼ100%藤原さんの記事の受け売りですが…… [perl] Perlで同じコードを違うバージョンのモジュールでベンチマークする - 酒日記 はてな支店 モジュールを開発している時に,フィーチャブランチの変更が性能に対してどれくらい影響を及ぼしているかを調べたく…

cpanfileのシンタックスチェック

cpanfileのシンタックスが壊れていた影響で悲劇が起きていていたので, そういうのは機械にチェックさせましょうや,という事で書いたのが以下です. Syntax test for cpanfile. 仕組みは至って簡単で,Module::CPANfile->load()にcpanfileのパスを食わせて…

Test::JsonAPI::Autodocをリリースしました

Test::JsonAPI::Autodocをリリースしました. https://metacpan.org/pod/Test::JsonAPI::Autodoc https://github.com/moznion/Test-JsonAPI-Autodoc これは何 Ruby (RSpec) にはautodocという,@r7kamuraさんが書かれたクールなモジュールがあって, これが…

Pod::Text::Color::Delight というモジュールをリリースしました

[追記] 色々と問題を修正しましたので、最新版 (v0.0.5) をご利用なさる事をおすすめ致します。 (問題を報告して下さった@__gfx__さん、@uzullaさんありがとうございます) [追記ここまで] この度、Pod::Text::Color::Delight というモジュールをリリース致し…

Plack::Request::WithEncoding というモジュールをリリースしました

Plack::Request::WithEncoding というモジュールをリリースしました. https://metacpan.org/module/Plack::Request::WithEncoding https://github.com/moznion/Plack-Request-WithEncoding これは何 このモジュールは Plack::Request のサブクラスで, Requ…

今日はYAPC前夜祭ですね & 明日のYAPC1日目でしゃべります

今日は YAPC の前夜祭ですね! 今年の YAPC の前夜祭は、去年の YAPC で好評を博した LTThon が Tiny となって開催されます! 僕は LTThon にはお手伝いとして参加していて、楽しい催しになるように努力しますので是非是非ご参加下さいませ! LTソン::Tiny -…

バージョン 6.04 よりも古い LWP::UserAgent

バージョン 6.04 よりも古い LWP::UserAgent に delete メソッドが生えていない。少し驚いた。 古い LWP::UA 使ってると、それを継承している WWW::Mechanize とか、さらにそれを継承している Test::WWW::Mechanize とかでも delete メソッドが使えない。大…

Text::MeCab を CentOS にインストールする際の注意

Text::MeCab 入れたいけどコケるのよ!!! という方に向けた記事のはずでしたが、 もはや Text::MeCab とか関係ない感じの記事になったことを報告します。Mecab 自体のインストールについては言及しません。 以下に記すサイトが詳しいのでご参照下さい。 ht…

Perl の Package 書くときにめちゃめちゃ便利な Vim スクリプト書いた

世の中の Perl の Package の末尾には大体 `1;` って書いてあって、これが何か言うと「このモジュールは真値を返していますよー」という表明で、まああけすけに言うとこれが記述されていなければ、そのモジュールは use とかされた時に不正なモジュールとし…

common::sense 3.71 が正常にインストールされない問題に関しまして

(2013/08/01 3:44 + 0900 追記) https://metacpan.org/release/MLEHMANN/common-sense-3.72 common::sense は3.72 にバージョンが上がって、 以下に書かれている様な問題は消え失せました。戦いは終わったのです!!!*1普通に $cpanm common::senseみたいな…

“インストールされているモジュールをインストールされていないが如く扱う方法”の続き

インストールされているモジュールをインストールされていないが如く扱う方法 - その手の平は尻もつかめるさ の続きというか訂正です。 すっげーーーーーーーーーー前に miyagawa さんから指摘を受けていたんですけど、書きそびれていたので書いておきます。…

CPAN モジュールの依存モジュールをお手軽に表示するスクリプトを書いた

App-pmdeps https://github.com/moznion/App-pmdeps モジュールを書いている皆さんはモジュールの依存関係に細心の注意を払っていることと思いますが、 いちいち CPAN の Web ページにアクセスしたり、curl で API を叩いたりするのがだるいですよね!!! …

cpanfile はモジュールをインストールする順番を担保するのか問題

cpanfile にrequires 'Acme::Buffy'; requires 'Acme::Anything'; requires 'Acme::Damn'; requires 'Acme::Coro::Suke'; などと記述されていた時に、先に書かれた (つまり上に書かれた) モジュールから先にインストールされるのか? という疑問が割と散見さ…

インストールされているモジュールをインストールされていないが如く扱う方法

(2013.7.16 追記) “インストールされているモジュールをインストールされていないが如く扱う方法”の続き - その手の平は尻もつかめるさ の方法の方が良いと思いますので、そちらをご覧下さい!! (追記ここまで) 何を言っているか分からないと思いますが…

Test::LocalFunctions がパワーアップしました

ここで紹介した Test::LocalFunctions ですが、パワーアップ致しました。 @__papix__ さんが書かれた Test::LocalFunctions::Fast 取り込んだのが主な変更点です。 元々のTest::LocalFunctions は PPI を利用していましたが、 Test::LocalFunctions::Fast で…

cpanfile に“recommends” とか“suggests” とか書かれてるモジュールをcpanm でインストールする方法

まだ cpanm のドキュメントに書かれていないようだったので。 以下のようにすれば入ります。 recommends $ cpanm Foo::Bar --with-recommends suggests $ cpanm Foo::Bar --with-suggests ロンモチで --installdeps とかの場合でも使えます。

WWW とWebService どっちの名前空間が良いんだぜ? という疑問

CPAN のモジュールは、モジュールの名前がしっかりしているというか厳格な感じがしていて、 他の言語に多くありがちな幻覚な名前 *1 と比較すると、そのモジュールが何の仕事をするモジュールなのかが一目でわかって良いですし、 気分的に安心して使える感じ…