タグ

ブックマーク / blog.64p.org (55)

  • Perl5 での Plack に当たる Crust をみんなで作った話 - tokuhirom's blog

    この記事は Perl 6 Advent Calendar 2015 の1日目です。 Perl 6 は、2015年のクリスマスにリリースされることになっており、我々としてはそれを待ち受ける必要があると考えました。 Perl6 がリリースされた暁には、いろいろ遊ぼうかなという気持ちをみなさんお持ちだと思います。 Perl6 には夢が詰まっており、様々な機能が含まれている夢の言語です。 そういった、夢の機能については今後、クリスマスまでの間に、語られていきますが、稿では、現実的な話をします。 今年のクリスマスに Perl6 がリリースされるぞ、という宣言がでたわけですが、そうなってくると、Perl6 をクリスマスから早速遊びたいなと思うわけですよね。 そして、私は web engineer なので、 Perl6 が出たら早速 web application を書きたいと思うわけです。 しかし、

    antipop
    antipop 2015/12/02
    高まるなあ〜
  • Perl6 のフィボナッチ数列生成についての解説 - tokuhirom's blog

    mattn ブログで紹介されている Perl6 のフィボナッチ数列が奇妙に見える人が多いようなので、まともな解説。 ref. http://mattn.kaoriya.net/software/lang/perl6/20151026144119.htm フィボナッチ数列とは以下のような数列です。 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 最初の2つの数字が 1, 1 でして、その後のものは直前2つの数字を足したものです。 よって、Perl5 で記述した場合、先頭10個のフィボナッチ数列を求めるには以下のようになります。 use v5.16.0; sub fib { state %memo; # 一応 memoize ぐらいはしておく my $n = shift; $memo{$n} //= do { if ($n == 0 || $n == 1) { 1 } els

    antipop
    antipop 2015/10/27
    Perl6すごい
  • JJUG CCC 2014 Fall で「Java で1から10まで書いた話」を発表してきました - tokuhirom's blog

    Blog Search JJUG CCC 2014 Fall で「Java で1から10まで書いた話」を発表してきました Javaで1から10まで書いた話(sanitized) from Tokuhiro Matsuno コード書いた話が少ない中でわりと異色な感じでしたが、思ったより反応もあってよかったです。 Created: 2014-11-28T08:09:37 Updated: 2014-11-28T08:09:37

    antipop
    antipop 2014/11/24
  • LL から Java に移行した人がはまりがちなこと - tokuhirom's blog

    こんにちは。Java 初心者です。 Java 初心者、得に LL から Java に来た人にありがちな問題について社内向けに書いたものをオープンアンドシェアさせていただきます。 前提として、我々は Java 8 でガンガン攻めているということをご承知おきください。 また、自分がこの数ヶ月で「うわー。こうしとくべきだったのかー」と気づいたやつをドヤ顔で語っているということにもご注意ください。 【追記】 対象は中規模 B2C の場合です(中規模というのは facebook より小さいという程度の意味です) 例外を握りつぶさないようにしよう Eclipse が生成する以下のようなコードをそのまま残しているケース。 これは言うまでもなく良くないですね。デバッグが困難になります。 try { } catch (IOException e) { e.printStackTrace(); } Perl

    antipop
    antipop 2014/10/01
  • Perl5 における B optree の操作方法入門 - tokuhirom's blog

    いよいよ今週から YAPC だ。YAPC にあわせて、Perl5 の内部構造を復習できるエントリーを書いたのでご一読いただきたい。 Perl5 hack においては、XS をつかった B optree の操作が楽しい。B optree というのはいわゆる AST(抽象構文木) である。Perl5 は byte code interpreter などではなく昔ながらの AST をそのままなめるインタプリタである。であるから、この B optree を操作すれば、簡単にインタプリタの挙動を変えられるというワケ。 一方で、B optree の操作については、あまり知られていないし情報がすくない。日語でも情報がすくないし、英語でもまた情報がすくなく、それっぽいモジュールのコードをよみながら会得するしかないのが現状だ。 すこしでも B 初心者が、ステップアップできるように、私のもっている情報をここ

    antipop
    antipop 2013/09/18
  • [perl] !!1 と 1 ではパフォーマンスに差がでるのか - tokuhirom's blog

    一般的なインタプリタでは定数の畳み込み最適化が行われるため、プリミティブにたいする演算は最適化されます。 % perl -MO=Terse -e 'print !!1' LISTOP (0x23860d8) leave [1] OP (0x2386070) enter COP (0x2386120) nextstate LISTOP (0x2386180) print OP (0x23861c8) pushmark SVOP (0x2386208) const SPECIAL (0x2) sv_yes -e syntax OK % perl -MO=Terse -e 'print 1' LISTOP (0x12a70e0) leave [1] OP (0x12a70a8) enter COP (0x12a7128) nextstate LISTOP (0x12a71c0) print OP

    antipop
    antipop 2013/08/22
    "!!1" is just for common and desirable coding style.
  • ☆plenv☆ 〜 brand new perl5 installation management tool♪ 〜 - tokuhirom's blog

    Hi, I implemented brand new perl5 installation management tool named plenv. from rbenvplenv is inspired from rbenv, from ruby world. rbenv provides a missing feature in perlbrew, it can use .ruby-version file to manage project local perl module. Use .perl-version!!With plenv, when you put a .perl-version file to ~/dev/MyProj/.perl-version, you can use your required perl version under the ~/dev/MyP

    antipop
    antipop 2013/01/21
  • MacRuby でメニューバーのステータスメニューに常駐するアプリを作るための雛形をつくりました! - tokuhirom's blog.

    MacRuby でささっとメニューバーのステータスメニューに常駐するアプリケーションをつくれたら便利だと思いませんか? メニューバーのステータスメニューとは↓のような領域のことです。 これができると daemontools で常駐とかさせなくても app を start up にいれるだけでいいし、管理が楽です。 この分野では mynu というライブラリが有名なのだが、これはコードが複雑でとりあつかいづらい上に、ドキュメントをよんでも macruby コマンドで走らせようという話しかでてこなくて不安になる。僕がほしいのは .app だ! という気持になるのだ。 というわけで、通常のアプリ開発フローでステータスバーに常駐するアプリをつくるための雛形を作成した。以下のコードを Xcode で生成した雛形の AppDelegate.rb におきかえ、適当な画像(たとえば このへん など)を ic

    antipop
    antipop 2013/01/08
  • かわいい分類 - tokuhirom's blog

    http://d.hatena.ne.jp/echizen_tm/20110721/1311253494 自分で手をうごかしてみないとよくわからないタイプな僕は、簡単分類ツール futaba の動作がなんかむずかしかったので、ソースを1ファイルにまとめてみて、実際の挙動を理解することにつとめたのであった。 この手のツールは、なんかこうデータの入出力の部分がやたらおおくて煩雑なので、オンメモリで適当にやる版をかくことで理解の助けになる気がした。 #!/usr/bin/env perl use strict; use warnings; use utf8; use 5.010000; use autodie; use Data::Dumper; my %data = ( # feature_key { class_key => score, ... } 'warm:red' => { R =>

    antipop
    antipop 2012/08/22
  • 電子書籍における内外格差について - tokuhirom's blog

    最近は電子書籍について語る前に、とりあえず Kindle を買うべし(Fire 以外)ということを最近つよくおもう。 iPad や、その他のタブレットと Kindle ではだいぶえられる体験がちがう。 K3G 回線に対応してないとはいえ、家で wi-fi につなげば、かなり良好な体験がえられる。電子書籍amazon.com で購入したら、wi-fi 経由でダウンロードされて超便利である。 Kindle は e-ink なので電池の持ちもいいし、非常にかるいので、旅行にいく際などに「荷物にいれるかどうか」を悩む必要がそもそもない。僕は常時鞄に Kindle をいれている。ごくたまに充電すればいいので非常に便利である。 Kindle をつかってると PDF とか糞! ってなるという体験もえられる。書籍のサイズでつくられた PDF は、たいがい Kindle だとよみづらい。読者のデバイスの

    antipop
    antipop 2012/01/05
    なんでもいいから、まずkindle買いなよ、とほんと思う。一万円しないんだから。
  • Perl Advent Calendar 2011 やりましょう - tokuhirom's blog

    English TrackHacker TrackCasual TrackTest::* TrackDBIx::* Track今年もやってきました。アドベントカレンダーの季節が! もうみんな技術的アドベントカレンダーのことについては説明する必要はないよね! もしわからない人がいたら2008年に僕がかいたエントリー をよんでおくれよ! どうやら現状、今年は5トラックあるようです! おおいな! 他にもやりたい人いたらめいめいやるといいですね! とりあえず JPerl Advent Calendar の方、だいぶ人がたりなくて、このままだとやばい! ってかんじなので、どんどん登録しちゃってね! 複数のトラックに登録してもよいよ! 最悪 Perl 関係なくてもいい! よろしくね! はらへった!

    antipop
    antipop 2011/11/28
    今年もPerl Advent Calendarの季節がやってきました。
  • XS::Object::Magic をつかって Magic なオブジェクトをあつかうの法 - tokuhirom's blog

    マルチスレッドで云々とかかんがえないでよいケースでは、XS::Object::Magic をつかうと楽にできる。 xs/typemap というファイルに以下の内容をコピペする。 TYPEMAP MyStruct * T_PTROBJ_MG INPUT T_PTROBJ_MG $var = ($type)xs_object_magic_get_struct_rv_pretty(aTHX_ $arg, \"$var\");xs_object_magic.h を http://frepan.64p.org/src/NUFFIN/XS-Object-Magic-0.02/xs_object_magic.h このへんとかからとってきて、おく。 あとは、普通に XS をかけばいい。magic まわりの諸々は隠蔽されているので、気にする必要がない。 #include "xshelper.h" #incl

    antipop
    antipop 2011/01/07
  • それ Proc::Guard 0.04 でできるよっていう話 - tokuhirom's blog

    http://d.hatena.ne.jp/antipop/20101130/1291112500 Proc::Guard をつかってこういう風にするのはどうか。$worker_guard ってのが Scope::Guard あるいは AnyEvent の guard みたいなかんじになってます。スコープをぬけるときに、自動的にプロセスを kill した上で wait して、ゾンビプロセスをのこさない設計になっています。 proc_guard(sub { }) の中は、子プロセスの中でうごくっていうのがキモですね。 use strict; use warnings; use Test::TCP; use Test::More; use Proc::Guard 0.04 qw/proc_guard/; use Gearman::Worker; use Gearman::Client; tes

    antipop
    antipop 2010/11/30
    まさにやりたかったことそのままです!!1 ありがとうごじましたー。
  • gearman の worker process にスコアボードをつけてみる - tokuhirom's blog

    http://d.hatena.ne.jp/tokuhirom/20100201/1264989237 ↑でつくったスクリプトに score board 機能をつけてみた。 で、これかいてからきづいたんだけど、Parallel::Prefork には Parallel::Prefork::SpareWorkers ってのがあるんですね。で、これつかうと score board とかもつかえる。じゃあ、なにがちがうのかなーと。 で、いろいろきいてみたところ 「Parallel::Scoreboard のメリット」は 任意の長さのデータを書ける監視プロセスとワーカープロセスに親子関係がなくても使える任意のマネージャーと組み合わせることができる毎秒1回ポリングとかにはむかない(モニタリングの方は遅いため) ステータスの書き込みは seek & write だから速い「Parallel::Pref

    antipop
    antipop 2010/11/25
  • File::Stampedかいた - tokuhirom's blog

    https://github.com/tokuhirom/File-Stamped Log::Dispatch::File::Stamped みたいよしなにタイムスタンプがついてるファイル名でファイルをつくるの人です。 use File::Stamped; my $fh = File::Stamped->new(pattern => '/var/log/applog.%Y%m%d.txt'); $fh->print("OK\n"); # with Log::Minimal use Log::Minimal; my $fh = File::Stamped->new(pattern => '/var/log/applog.%Y%m%d.txt'); local $Log::Minimal::PRINT = sub { my ( $time, $type, $message, $trace) =

    antipop
    antipop 2010/11/19
  • モダンな Perl の開発環境の構築方法 - tokuhirom's blog

    一般的な OSX 環境および Linux 環境における、モダンな Perl 開発環境の構築方法についてまとめてみたよ。 perlbrew のインストールperlbrew をつかうことにより、簡単に最新版の Perl5 を利用することができるようになる。 perlbrew をいれる。% curl -L http://xrl.us/perlbrew | perl - install % ~/perl5/perlbrew/bin/perlbrew init ~/.bashrc (または ~/.zshrc)に source ~/perl5/perlbrew/etc/bashrc を追記。あたらしいシェルをたちあげる。最新版の perl をインストールする。% perlbrew install perl-5.12.1 % perlbrew switch perl-5.12.1 ここまできたら、she

    antipop
    antipop 2010/07/16
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

    antipop
    antipop 2009/10/09
  • Module::Install::ForC で C のプログラムを簡単に構築する - tokuhirom's blog

    http://github.com/tokuhirom/p5-module-install-forc Module::Install のアーキテクチャを利用した configure/SCons 等のサブセットをつくりました。 記法は SCons を参考にしており、Rake のような黒魔術的でとっつきにくい記法ではなく、シンプルでわかりやすい記法になっています(もちろん主観ですが、Rake の記法は Rake を知らない人にとって非常にとっつきにくく、見通しがわるいというのが個人的見解です。慣れても見通しがいいとはおもいませんが。。。)。 Perl Monger がちょっとした C のコードを書くときに便利なのではないかとおもいます。Module::Install をつかってるので inc/ もいっしょに配布すれば、perl5.8.0 以上さえあればうごくということになります。便利です。 最

    antipop
    antipop 2009/10/02
  • 自分のサーバの性能を知っておく - tokuhirom's blog

    http://github.com/kazuho/manymanythreads ↑kazuhoさんがCで書いたエコーサーバーと、そのベンチマークツールによって、自分のサーバでどんぐらいのQPSがでるのかがわかる。 たとえば自分のマシン(SC440)だと ./testechoclient -c 1 -n 1000000 -f -p 5050で、 77906.624081 reqs./sec. (1000000 in 12.835879 seconds)ぐらいでる。 一番単純なエコーサーバーをうごかしたときの性能を把握しておくことによって、どのぐらいの速度がでてしかるべきなのかが把握できるようになるという。 【追記】 ここで知った echo server の限界性能をもとに、その後、自分がなにかサーバ等を書いた場合に最適化したらどのぐらいの速度がでるかを予測できる(経験が必要だとおもうけど)

    antipop
    antipop 2009/10/01
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at