Moved

http://skaji.hateblo.jp/

Reactive Programming in Perl6 その1

昨年のクリスマスにリリースされたPerl6であるが、一番の売りはなんなのかと言えば 並行、非同期処理がサポートされていることだと思う。 ということでPerl6でReactive Programmingができるのか見てみたい。 Reactive Programmingとは まずReactive Programm…

Execute an external program with timeout in Perl6

Proc::Async allows us to execute an external program asynchronously. my $proc = Proc::Async.new("curl", "-s", "-o", "index.html", "http://www.cpan.org"); my $res = await $proc.start; Can we use Proc::Async with a timeout? Proc::Async does …

Asynchronous http call by HTTP::Tinyish

Perl6 HTTP::Tinyish now can be called asynchronous way. github.com my $http = HTTP::Tinyish.new(:async); my @url = < http://perl6.org/ https://doc.perl6.org/ http://design.perl6.org/ >; my @promise = @url.map: -> $url { $http.get($url).the…

released CPAN-Mirror-Tiny

I've just released CPAN-Mirror-Tiny to cpan! metacpan.org What's this? This is a yet another DarkPAN manager. Why do we need a new DarkPAN manager? I used to use OrePAN2. I was satisfied with its functionality, but its dependencies on cpan…

plenv download

plenvでprecompiled perl binaryをさっと使えるようにするpluginを書いた。 github.com $ plenv download latest もしネットワーク環境がよければ上記コマンドを打って10秒ほどで最新のperlが使えるようになるだろう。 ぜひお試しください。

perl6のコード例

昨年クリスマスにリリースされたと噂されているperl6はスコープを抜けた時に実行するコードをLEAVEでかける。例えばfile処理は given "file.txt".IO.open(:w) -> $fh { LEAVE $fh.close; $fh.say("hello world!"); }; と書くとよい。また { my %old = %*ENV;…

Acme::RandomEmoji

emojiで気分を変えたいのでrandomにemojiをpickしてくれるやつを書いた。 github.com CLIプログラムでテキトーに使っていきたい。

perl client for tldr

perlの http://tldr-pages.github.io/ clientを書いた。 github.com 書いている途中、いろんな言語のtldr clientを入れていたらtldrコマンドで溢れかえったw

WEB+DB PRESS Vol.89に「Perlによる内部DSLの作り方」という記事を書いた

10/24発売のWEB+DB PRESS Vol.89に「Perlによる内部DSLの作り方」という記事を書いた。 gihyo.jp タイトルの通り、Plack::Builderのコードを例に挙げながら、PerlによるDSLの作り方を紹介した記事である。僕自身、Plack::BuilderがPerl5のコードの中で一番カ…

perlでサイズが大きいファイルをhttp postする

perlでサイズが大きいファイルをhttp post or putするには下記のようにするとよさそう。 LWP, HTTP::Tinyともrequest contentとしてcallbackを指定できるのでそれを使う。 ただし、デフォルトだとTransfer-Encoding: chunkedになるので明示的にContent-Lengt…

perlでdownload speedに制限をかける

なぜかhttp getのときdownload speedに制限をかける必要が度々発生するので、そのやり方を考えてみた。 dataをgetして、data取りすぎのときテキトーにsleepを入れれば一応達成できた。 LWP::UserAgent, HTTP::Tiny でのやり方は以下。 use strict; use warni…

Let's start Perl6 with Crust!

Crust https://github.com/tokuhirom/p6-Crust is Plack for Perl6, developed by tokuhirom. Did you try it? If not, let's try it now! > panda install Crust The simplest example is below, which shows "Hello World!" when you access curl http://l…

slack perl6 evalbotを作った

Larry Wallが今年のクリスマスにリリースすると言って以来、 一部において異常な盛り上がりを見せるPerl6であるが、 この度Slack Perl6 Evalbotが完成した。 https://github.com/shoichikaji/slack-perl6-evalbot Perl6は現在、リリースに向けてdeprecatedな…

perl6 port of HTTP::Tinyish

HTTP::Tinyish (https://github.com/miyagawa/HTTP-Tinyish) is a perl5 http client wrappers, which is "embeddable" or "fatpackable", written by miyagawa san. I ported it to perl6 (only curl backend). github.com It passed a basic test, and I t…

perl6のminimal authoring toolを作った

shoichikaji/mi6github.com perl6を知るにはとにかくモジュールを書いてみることで、それには簡単なやつでいいのでauthoring toolがあったほうがいいので作った。1ヶ月後には全く違ったperl6が書けるようになっていることを祈る。 使い方 new, build, test …

perl6 replを使うときLinenoiseを入れとくべき

from http://rjbs.manxome.org/rubric/entry/2081 perl6は perl6 を実行すれば repl ができる。素晴らしい。 $ perl6 > my $foo = -> $name { say "Hey, $name!" } -> ($name) { #`(Block|140410221851264) ... } > $foo("you") Hey, you! しかし、ctrl key…

perl6で外部プログラムの出力を操作する

perl6でperl5のあれどうやるの1回目。 perlをshell++なものとして使うことはよくある。例えば、外部プログラムを実行しそのstdoutに時刻をつけていくには use strict; use warnings; use POSIX qw(strftime); my @cmd = ('perl', '-E', '$|++; for (1..10) …

vimでperl6のsyntax check

vimでperl5を書くときは、PERL HACKSに載っている 「:Wでファイルを保存する前にperl -wcを実行しコンパイルが通るかチェックする」 というのを利用している。これはとても便利で、もしvimでperl5を書いていて知らない人がいるなら是非入れとくべきだ。 http…

YAPC::Asia Tokyo 2015

YAPC::Asia Tokyo 2015に行ってきたのでその感想を書く。 もっともよかったトークはJonathan WorthingtonさんのParallelism, Concurrency, and Asynchrony in Perl 6。Perl5の最大の欠点はthreadが使えないことだと思っていて、Perl6でそれが解決されるのか…

最速で perl を install する

Just type: curl -sSkL https://git.io/perl-install | bash -s ~/perl cf: https://github.com/shoichikaji/relocatable-perl

cpan module を並列でインストールする

先日行われた Gotanda.pm #5 でも発表させていただいたが、まさしく experimental な cpan client cpm を作った。 shoichikaji/cpmgithub.com Why new? cpan module の install にはいつも cpanm を使っており そのシンプルさと安定性には感心するばかりであ…

Re: Cartonで不要になったモジュールをcpanfile.snapshotから削除したい

Re: http://techblog.karupas.org/entry/2015/06/11/163420 How about this? cf: https://github.com/shoichikaji/Perl-PrereqDist ...

Plack::App::File などで 304 Not Modified を返させる

plackup -MPlack::App::Directory -e 'enable "ConditionalGET"; Plack::App::Directory->new->to_app'

How FatPacker Works

https://metacpan.org/pod/App::FatPacker について知るしかない! What is FatPacker? perlを実行したら Can't locate Moo.pm in @INC... などとでてくることは日常茶飯事である。 これは文字通りMoo.pmがないからであり、おそらく cpanm Moo とすれば解決…

perl の require を知る

今、perlがあつい!よって require について知るしかない! "普通" のrequire require(もしくはuse)関数は Module をロードしたいときに使う。 例えば、 require Foo::Bar; # もしくは use Foo::Bar とすると、perlは@INCに入っているディレクトリ以下のFoo/…

perl プログラムが hang する

会社でperlでcrawler (prefork 型のプログラム) を書いたのだが、 数日動かしているといくつかのworkerプロセスが固まって動かなくなってしまうという事案が発生している。 とりあえず手許で再現はできたが原因・解決法はわかっていない。 もしわかる方いま…

Carmel を読む

5/20 に 吉祥寺.pmミニ Carton/Carmelのコードリーディング が行われるので事前にCarmelを読んどく。 結論 読むなら Carmel::Setup/Runtime あたり! Carmel の基本的な使い方 ほとんど Carton と同じにように使える。つまり cpanfile に依存を書いて、carmel…

perl で exec 後に file descriptor を渡す

通常は 0, 1, 2 しか渡されない。 open my $fh, ">", "file.txt"; exec "ls", "-al", "/proc/$$/fd"; > perl test.pl total 0 dr-x------ 2 skaji skaji 0 Mar 29 03:04 . dr-xr-xr-x 9 skaji skaji 0 Mar 29 03:04 .. lrwx------ 1 skaji skaji 64 Mar 29 0…

依存している distribution をかき集める

ある module を指定して、その module が依存している distribution をかき集めるやつを書いた。 github: https://github.com/shoichikaji/Perl-PrereqDistributionGatherer Carton::Snapshot などがこれをやっており、そこからその機能だけを抽出した格好で…

入力は可能な限り早く 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…