Hatena::ブログ(Diary)

Subvoice

2010-08-31

screenからtmuxへスイッチ

18:49

しばらくscreenの縦分割機能が便利だったので使っていたんですが、gccとかでコンパイルするときに画面が崩れまくって、お話にならなかったので、かねてから噂のtmuxにスイッチしてみた。

インストールは、ソースから入れました。最新版(1.3)だとlibeventに依存しているようで、yumなりapt-getなりでlibeventをいれてから、いつものようにconfigure、make、sudo make installでOK。

で、基本的にはscreenと変わらない。

256colorにしたいのとprefixをC-tにしたかったので、TERM=xterm-256colorにして、~/.tmux.confに以下を記述すればOK

set-option -g default-terminal xterm-256color
set-option -g prefix C-t
unbind-key C-b
bind-key C-t send-prefix

縦分割は、<prefix>-%でできます。

(この場合、<C-t>-%)

2010-06-30 Starmanベースで構築した新サービス「Saizen」リリース

久々のエントリが宣伝で申し訳ないのですが、「Saizen」というiPhoneアプリをリリースしました。

位置情報を使って、iPhone上で再生している曲情報をGoogle Maps上に表示します。

Map上でピンがたった場合の曲情報を収集して、地域別のランキングや曲ごとのユーザーランキング、ユーザーのお気に入り登録などができます。

まだ、リリースしたばかりで、ユーザーも少ないので、ぜひダウンロードしてみてください。

f:id:kaz_hiramatsu:20100629174351j:image

http://itunes.apple.com/jp/app/allotme/id376637760?mt=8

肝心のアーキテクチャですが、Appサーバーは、amazonEC2環境で、Server::Starter + Starman + daemontoolsで運用しています。

DBサーバーは、MySQL5.1、innodb pluginでBarracudaを使っています。

モジュール類は、全てcpanmを使ってアプリケーションユーザーのhomeディレクトリインストールしています。

Appサーバーは、PlackベースにRouter::Simple、DBIx::Skinnyを利用した簡易フレームワークもどきを作りました。

今後は、Twitter連携なども視野に入れています。

(類似のiPhoneアプリで言うと、now playing songみたいなもの)

このアプリをリリースするにあたり多くのPerlモジュールを使用しました。

改めてPerlコミュニティのみなさんに感謝したいと思います。

今後、amazonEC2環境でStarmanの運用方法やらのノウハウも少しずつ紹介していきたいと思います。

2009-02-22 Perl is unDead

Perlは終わってもいないし、Perl6に関しては、まさにこの瞬間も開発されてる。

ページが見つかりません - ザパソナテック

1. 言語仕様が汚い。

この点に関しては、スラッシュドットのラリーのインタビューを読めばPerl設計思想がよくわかる。

本家インタビュー:Perl開発者ラリー・ウォール | スラッシュドット・ジャパン

コンピュータ言語で僕が最も欲しいと思うのは、幅広いダイナミック・レンジだから。汚くって低級な要素とオシャレで高級な要素の両方を兼ね備えている言語を僕は求めている。赤ちゃん語でもオトナの喋りでも受け容れるような言語が欲しい。他の言語では、そういったレベルの違いがひとつに均されてしまう傾向にある。

ここで重要なのは、「赤ちゃん語でも」ってところ。他のプログラム言語では挫折したけど、Perlプログラミングの世界に入ったという人は多いのではないだろうか。

自分は、プログラミングはCから入ったけど、まともにCでプログラムをかけるようになるには、1年ぐらいかかった。最初にPerlを学んでいれば、こんなに苦労することもなかったなあと思う。

言語仕様が汚いと言ってる人は、たいがい他のプログラム言語をある程度マスターしている人が多い。自分がマスターしている言語仕様を基準に考えてしまうからそう感じるんだろうけど、Perlの持つこの赤ちゃんから大人まで受け入れられる性質のおかげで、ここまで幅広いユーザーに受け入れられたのだと思う。

変数はすべてグローバルで特に宣言した場合だけローカルになる...というあたりの仕様は、そりゃインタプリタの実装は楽チンだろうけども、美意識(とミスしにくさ)には欠けるよね。

これもラリーのインタビューを読むと実装が駱駝からだとかそんな理由でないことがわかる。

詳しく言うと、Perl 6に暗黙のレキシカル・スコープを採り入れないことにした主な理由は、Rubyの例があったからだと言っておかねばならない。僕たちは、明示的なmy宣言にこの先もこだわっていたい。


Rubyで僕が一番問題だと思うのは、暗黙のレキシカル・スコープがそうであるように、「驚き最小の原則」が人を迷わせるということだ。問題は、ひとは誰の驚きで悲観するのか、ということ。上級者は初心者とは違うことに驚くし、小さなプログラムを大きく育てようとする人は、最初から大きなプログラム設計する人とは違うことに驚くのだ。

Rubyの「驚き最小の原則」は今や死語になったけど、人によっては暗黙のレキシカル・スコープはわかりにくいとラリーは考えてる。だから、明示的にmyをつける。

実はこれ、Perlの一番好きなところだったりする。異なるスコープで同じ変数名を使う場合とかに特に効力を発揮するし、変数がどこで最初に宣言されたのかってのが明示的だとプログラムがすごい読みやすい。(と自分は思う。)あと、同じ変数名でスカラー配列ハッシュと書き分けられるところも分かりやすいと思う。

2. 後付けのオブジェクト指向。何かヘンテコなやり方です...神の祝福が要る(bless)わけですが、「神の祝福」って何だろ?

この点に関しては、変だと言われれば認めざる終えない。

ただ、やはりやり方はいくらでもあって、最近だとMooseを使えば、少なくとも他の言語に勝るとも劣らないオブジェクト指向ができる。メソッド呼び出し前後のフックとかは他の言語ではなかなかできないんじゃないか。

3. 5.8(2002年) でマルチエンコーディングに(実質上Unicodeに)ようやく対応。これはタイミング的にはちょっと遅れを取った感が否定できなかったです....

Javaよりかは早いんじゃないでしょうか。JavaのStringクラスは、UTF-16で符号化されてるらしいので、JavaでまともにUnicodeを扱おうと思うとcodePointAtとか使わないといけないようだし。

Perl6 は登場(そりゃ現在でも Haskell で実装された Pugs はありますが...)しても全然普及せずに、Perl5 だけ「レガシー資産」扱いで細々とメンテされる

確かにPerl6が出てもすぐ普及するってことはないかもしれない。ただし、Parrotを使えば、Perl5もPerl6も同じバイトコードコンパイルされ、全てParrot上で動作するようになるので、どのPerlを使うのかは全く考えなくてもよくなる。Perl6からPerl5を使ったり、Perl5からPerl6を使えたりする。

ちなみにParrotは、来月にようやく1.0がリリースされる。

Parrot VM

Perlが盛り上がるきっかけになればいいな。

2008-05-19

YAPC::Asia 2008について

20:59

YAPC::Asia 2008にスピーカとして参加させていただきました。

スライドは、以下の場所に置いてあります。

http://www.slideshare.net/kaz_hiramatsu/parrot-compiler-tools

今回初めてYAPCに参加したのですが、改めてPerlコミュニティの凄さ、面白さを体感しました。

どのスピーチも面白かったのですが、2日目のMichael SchwernのPerl Is unDeadが特に良かったです。

Web1.0覇者は、Perlだったけど、Web2.0には付いていけなかった。

回りからまだ、Perl使っているのとよく言われるけど、Perlはまだ死んでいない。

CPANにアップされたモジュール数やカンファレンスの数がそれを証明している。

でも、Perlのコミィニティは内に閉じている。

もっと違うコミュニティに積極的に参加していろんなところから知識を学ぼうという内容。

あと、Folk Programming。

誰に教わることなく自分でソースを読み、書く。

素人のミュージシャンがFolk Songを作るかのようにプログラミングを楽しむことが大切。

でも、今のPerlは、Folk Programmingではない。

Perlとそのコミュニティの良い点、悪い点をユーモアを交えつつ楽しく聞くことができました。

こんなプレゼンできるようになりたいなぁ。

ちなみにunDeadだから、ゾンビネタだったのかと後になって気付いた・・・。

既に色んな人が言っていますが、PHPRuby全盛の中、Perlカンファレンスに500人もの人間が集まったというのは凄いことだと思います。

実行委員会の皆さん、本当にありがとうございました。

来年は、ぜひ京都(?)で参加したいと思います。!!

2008-04-03 Perl6バイナリを作る

先月リリースされたParrot 0.6.0を使って、Perl6のバイナリを作ってみました。

以下、その手順です。

まず、http://www.parrotcode.org/から最新のソースをダウンロードして、

Parrotをmakeします。

$ wget http://www.parrotcode.org/release/devel
$ tar zxvf parrot-0.6.0.tar.gz
$ cd parrot-0.6.0
$ perl Configure.pl
$ make

インストールした環境は、colinux上のdebianですが、

以下のパッケージを追加でインストールしました。

$ sudo apt-get install libc6-dev

次に、Perl6をmakeします。

$ cd languages/perl6
$ make

Perl6バイナリを作るには、以下のコマンドを実行します。

$ cd ../../
$ ./pbc_to_exe languages/perl6/perl6.pbc

以上の作業で、Perl6のバイナリがlanguages/perl6配下に作られます。

Perl6のテストは、languages/perl6/tにあるようですが、

動くのは、基本的なsyntaxのみでclassとかは、まだ動かないようです。

テストを実行するには、以下のようにします。

$ cd languages/perl6
$ ./perl6 t/01-sanity/01-tap.t

Perl6バイナリを使わずに、parrotを使って、

Perl6を実行するには、以下のようにします。

$ cd ../..
$ ./parrot languages/perl6/perl6.pbc languages/perl6/t/01-sanity/01-tap.t

.pbcという拡張子のファイルは、Parrot Bytecodeの略で、

Perl6をバイトコードコンパイルしたファイルのことです。

しかし、Parrotって、まだ0.6.0なんですね。

Perl6の正式リリースには、あとどれくらいかかるのだろうか・・・。