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 などがこれをやっており、そこからその機能だけを抽出した格好で…