入力は可能な限り早く decode すべき

最近、perl の文字の扱いではまることはなかったが久々にはまった。 単語リストが書かれた word.txt を読み込んで、もにょもにょやろうとしている下記プログラムのどこがダメか。 # test.pl use 5.14.0; use warnings; use Encode 'decode_utf8'; open my $f…

Yet Anthor Carton

OrePAN2 で carton の代わりとなるものが結構簡単に作れそうだと思ったので作ってみた。 https://github.com/shoichikaji/Carl 特徴 version 固定に02packages.details.txtを直接使う。 よって deploy 時には cpanm だけあればいい。 cpanfile の git / dist…

github にある module を require したい

github (or github enterprise) にある module を require したい。 かなり前の dev 版 carton には github にあるモジュールを require する機能があったが、消えてしまった。 モジュールは cpan にあげるべきだという意見はもっともだが、会社で書いている…

手軽に親子プロセスで hash を共有する

手軽に親子プロセスで hash みたいに使えるデータを共有するモジュール書いてみた。 github: https://github.com/shoichikaji/Shared-Hash ファイルにデータを書いて親子で共有している (よって実際は親子である必要もない)。 使い方 use Shared::Hash; my …

Distribution::Metadata というのを書いてみた

Distribution::Metadata というのを書いてみた。 github https://github.com/shoichikaji/Distribution-Metadata これは local にある Module::Name からそれの属する distribution を特定し、 main module .packlist ファイル .meta ディレクトリ install.j…

perl で複数のプロセスからログを吐くときは :unix layer で開いてもいい

File::RotateLogs が大変便利でよく使っているのだが、これはファイルへ書き込むときに print を呼んでいる。 一方 にひりずむ::しんぷる - perl で復数のプロセスからログを吐くときは syswrite または flock すべし によると長いログを吐くときは syswrite…

メモリ使用量をログに吐く

cron で 5分毎に動かしているプログラムでメモリ使用量が気になるものがあったため、 下記のようにしてメモリ使用量をログに吐いたところ、いろいろ捗った。 use Log::Minimal; sub rss { my $rss = `ps -p $$ -o rss=` || 0; $rss =~ s/\s+//gsm; $rss; # K…

perl を build するとき man page を作らない

http://www.dagolden.com/index.php/2134/how-i-manage-new-perls-with-perlbrew/ -Dman1dir=none -Dman3dir=none をつければいいらしい。 $ ./Configure -Dprefix=$HOME/hoge -des -Dman1dir=none -Dman3dir=none $ make -j`nproc` install plenv の場合も …

remote サーバで pbcopy for iTerm2

pbcopy は MacOSX 用の標準入力をクリップボードにコピーしてくれる便利ツールだが、 local でしか利用できない。 しかしながら実際のところ、OSC52 エスケープシーケンスを使えば remote サーバからも クリップボードにアクセスできる。下記 url に詳しく書…

cpan module を symlink で管理できるか

昨日 吉祥寺 pm に参加し、songmu さん、charsbar さんと miyagawa さんの開発している carmel についてお話しすることができた。(主催していただいたmagnoliaさん、ありがとうございました!) その中で、PERL5LIB にたくさんの path を突っ込むのではなく…

Carmel 使ってみる

https://github.com/miyagawa/Carmel を使ってみる! 注:miyagawa さんに教えていただき cpanm インストール方法、例ともに修正しました https://gist.github.com/shoichikaji/5a951ab796ed0e596c47/revisions まず copy-build-artifacts ブランチの cpanm …

App::FatPacker::Simple

App::FatPacker::Simple というのを書いた。 github: https://github.com/shoichikaji/App-FatPacker-Simple これはモジュールの依存関係は 使う人が理解しているという前提 で fatpack するところだけいい感じでやってくるやつである。 INSTALL > cpanm git…

App::RemoteCommand リリース

App::RemoteCommand というのを cpan にあげた。 cpan: https://metacpan.org/release/App-RemoteCommand github: https://github.com/shoichikaji/App-RemoteCommand インストール方法 > cpanm App::RemoteCommand > rcommand -v App::RemoteCommand 0.01 …

perl で 日付処理

map {; ... } LIST

https://github.com/rjbs/App-Uni/blob/master/bin/uni#L12 @ARGV = map {; decode('UTF-8', $_) } @ARGV; 上記 map {; のセミコロンの意味がわからずもやもやしていた。 そんな中、まさにそれの説明が perlfunc.pod に追加された。 http://perl5.git.perl.o…

heroku で 最新の perl を使う

ダウンロードすれば使えるリロケータブル perl はまさに heroku などの paas にぴったりである。 試しに heroku-buildpack-perl を relocatable perl 5.20.1 を使うようにかえてみた。 https://github.com/shoichikaji/heroku-buildpack-perl/tree/relocatab…

YAPC::Asia Tokyo 2014 の感想

8/29,30 に行われた YAPC::Asia Tokyo 2014 に参加してきた。 感想を書こうと思う。 1日目 tokuhirom さんの 「お待たせしました。Perl で BDD を簡単に実践する最高にクールなフレームワークができました」 Perl のテストモジュールの概要、歴史を話してく…

コードレビュー

デキるプログラマだけが知っているコードレビュー7つの秘訣 の3番目として「何故悪いコードなのかを論理的に説明すること」があげられている。 全くその通りである。 だが、大抵の場合、論理的に悪いから悪いコードと思ったのではなく、 直感的に悪いと感じ…

Plack::Middleware::AccessLog::Color

access log に色をつける middleware を書いた。nodejs のアプリはだいたいこうなってたので、それをまねた。開発時の目の保養に。 https://github.com/shoichikaji/Plack-Middleware-AccessLog-Color インストール > cpanm https://github.com/shoichikaji/…

コマンドの出力を調整する

あるコマンド、例えば my-script arg1 arg2 を実行すると > my-script arg1 arg2 start step1 cp lib -> hoge ‘lib’ -> ‘hoge’ ‘lib/File’ -> ‘hoge/File’ ‘lib/File/Upload’ -> ‘hoge/File/Upload’ ‘lib/File/Upload/AtomicChange.pm’ -> ‘hoge/File/Upload…

リロケータブル Perl

tl;dr github の release ページ からすきな場所に置けば使える perl がダウンロード可能 リロケータブル perl って? 通常 perl は build 時に モジュールの読み込み path (@INC) を決定するため、インストール後 perl のディレクトリを移動するとモジュール…

MDBM_File!

https://github.com/yahoo/mdbm MDBM is a super-fast memory-mapped key/value store. の official perl binding MDBM_File を cpanm で簡単にインストールできるようにした。 https://github.com/shoichikaji/perl-mdbm-install > cpanm git://github.com/…

yet another perl module authoring tool

Daiku is yet another build system for Perl5. を使う、authoring tool を作ってみた。 https://github.com/shoichikaji/Dist-Template > cpanm https://github.com/shoichikaji/Dist-Template.git > distt Hello::World とすると このような Hello::World …

GrowthForecast!

前のエントリーで リロケータブル=どこに置いても使える Perl が欲しいと書いた。 その有用性を示すため、GrowthForecast をインストール済の relocatable でビルドした Perl を用意してみた。 https://github.com/shoichikaji/relocatable-perl-growthfore…

リロケータブル perl の実現性

少し前に node に触ってみようと 公式サイトから バイナリをダウンロードし $HOME/node に入れたところ、すぐに使えて感動した。 perl もこのようになっていてほしい。つまり 最新バージョンの pre compile 済みのバイナリが手軽にダウンロードでき、 好きな…

perl 5.8 / 5.10 で closure の挙動が違った

#!/usr/bin/env perl use strict; use warnings; { my $x = 1; sub func { sub { $x }->(); } } print func(), "\n"; このスクリプトを実行すると perl 5.10.0+ なら想定通り 1 が返るが、5.8.9 以下で実行すると > perl ex.pl Use of uninitialized value i…

go をクロスコンパイル対応でインストール

http://unknownplace.org/archives/golang-cross-compiling.html https://github.com/davecheney/golang-crosscompile http://dave.cheney.net/2013/07/09/an-introduction-to-cross-compilation-with-go-1-1 https://github.com/laher/goxc 例えば golang …

Mac の system perl には はじめからいろんなモジュールが入っていた

今日気づいたのだが Mac OS X 10.9 の /usr/bin/perl には、はじめからいろんなモジュールが入っていた。 > curl https://raw.github.com/syohex/emacs-helm-perldoc/master/helm-perldoc-collect-modules.pl | /usr/bin/perl - 例えば、DBD::SQLite, DBI, D…

1つの docker コンテナで gitlab を動かす

gitlab のインストーラとして id:akagisho 作 https://github.com/akagisho/gitlab-installer があるが、これを docker のコンテナで実行すると mysql, redis の起動ができず失敗する。 そこで上記スクリプトの前にmysql, redis を起動しておくDockerfile を…

yokohama pm に行ってきた

昨日行われた yokoyama pm にいってきた。 発表はもちろんすばらしかったが、それよりも ytnobody さんからとても有益な話が聞けたので、 メモっておきたい。 僕は社内でひとりさみしくPerlを書いていて、 GHE に置いているモジュールをどう使うかで悩んでい…