homebrewでインストールしたアプリケーションのソースコードの場所

~/Library/Caches/Homebrew/

にあります。

homebrewは/usr/local/にインストールしてくれるのが売り(のはず)なので、せっかくだからソースコードも/usr/local/src/に置いてくれればいいのに、と思ったり。

どうにも分かりづらいので、とりあえず

cd /usr/local/src
ln -s ~/Library/Caches/Homebrew ./

して対応してます。

psqlでTSVファイル(タブ区切り)を出力

PostgreSQLのターミナルフロントエンドpsqlで、結果をタブ区切りのTSVファイルで出力する方法。
何度も忘れて調べてしまうのでメモ。

psql -A -F "※1" -t -d dbname -c "SELECT * FROM tablename;"1 Ctrl-v -> TABと入力

これでExcelにも簡単に取り込めますね

LTの虎@LL Tigerにて喋ってきました!

SQLはLLである」という思想を世に啓蒙すべく、LTの虎@LL Tigerにてチームエレファントカシマシタの一員として、ライトニングトークをしてきました。

LL Tiger

スライドはこちら。

9割方ネタで構成されています。本当は単にPL/Parrotを紹介するだけのつもりだったのですが、スライドを作っている内にいつのまにかこうなっていました。どうしてこうなった。

そのせいかこんなTweetまで出る始末

PL/Parrot開発者の方々すいません。見ていた方々、PL/Parrto&PL/Perl6はほんとはできる子なのでよければ使ってみて下さい。

参考URL
http://pl.parrot.org/
GitHub - leto/plparrot: Embed Parrot+Rakudo into PostgreSQL
Google グループ

とりあえずやってみるのって大切

ちなみに人生で初めて技術系の集まりで喋ったのですが、そもそもLL〜自体今年が初参加で規模感やどんな人が集まるかも分からないまま無謀にも突っ込んで行きました。

僕は今までこんなネタで大丈夫なの?とかもう少し技術力を付けてからとか考えてしまって中々発表者として参加できないでいました。今回はチーム戦ということで誘われるままに参加してしまいました。

結果的には参加して大正解だったと思います。喋ったネタは他の参加者の方に比べて残念な感じですが、それでも喋ったことでフィードバックももらえたし、他の参加者とも交流できてとても楽しかったです。

ちなみにLTの虎は世にも珍しいトーナメント形式のLLだったのですが、毎試合ごとに商品が用意されていました。一回戦を勝った商品としてこんなものを貰いました。

この機会にLuaを始めたいと思います。

LTの虎はとても好評だったようです。「LTの虎の発表どれもすばらしい!」というTweetをちらほら見かけます。その中におそらく僕の発表は含まれていないと思われますが、他の方の発表はどれも本当に面白いものばかりでした。資料をまとめてくださっている方がいるので是非見てみて下さい。

lltiger 発表資料集 - てれもえ! -照れこそは萌えが戴くべき最高の至宝-

こんな素敵な経験をできたのも、法林さんを始め、多くの運営に携わって下さった方のおかげです。ありがとうございます。

来年もSQLを世に広めるべく、もっとネタを作り込んで攻め込みます!

PL/ParrotとPL/Perl6を試す - PL/ParrotかわいいよPL/Parrot

先日のLL TigerでPL/Parrot & PL/Perl6について喋ってきたのですが、紹介するつもりが逆にユーザーを減らしてしまった

ようなので、せめてもの罪滅ぼしにPL/Parrot & PL/Perl6のインストール手順を書いておきます。

PL/Parrot & PL/Perl6って何?という人は僕のLL Tigerの発表を見て下さい。
LTの虎@LL Tigerにて喋ってきました! - 分け入ってもコード

インストールに必要なもの

  • PostgresSQL 8.3.8以上
  • Parrot 最新版
  • Rakudo 最新版

PostgreSQLのインストール

PostgreSQLのインストールについてはそこら中に情報があるので割愛します。インストール方法はバイナリでもソースからビルドでもかまいません。

気をつける点として、バイナリでインストールする場合は必ずdev版を指定して下さい。aptitude search postgresqlとかyum search postgresqlとかしてやると、devの入ったパッケージがあると出てくるので、それを指定してやればOKです。

また、pg_configコマンドにパスが通っていることを確認して下さい。バイナリの場合は問題ないと思いますが、ソースからビルドする場合は/path/to/postgres/binにパスを通しておいてください。pg_configとはPostgreSQLのインストールオプションとかを表示するコマンドです。PL/Parrotインストール時に必要なファイルはpg_configを使って探しているようです。

Parrotのインストール

LL TigerDan Kogaiさんが紹介していたように、ParrotはRakudoのインストール時に

#perl Configure.pl --gen-parrot

と指定してやれば自動でインストールされます。が、PL/Parrotを使う場合にはParrotを個別にインストールすることをオススメします。

理由は、作者のBlogに

You must first install a recent version of Parrot and Rakudo Perl 6. I develop with Parrot trunk and Rakudo master because I often need very recent changes/bugfixes

http://leto.net/dukeleto.pl/2010/06/rakudo-perl-6-in-your-postgresql-database.html

とあるように、PL/ParrotはParrot、Rakudoの最新版の変更、バグフィックスを利用している為です。

Parrtoの最新版は公式を参照するとsvnで手に入るようです。
Packages & Source Code | Parrot VM

$svn https://svn.parrot.org/parrot/trunk parrot
$cd parrot
$perl Configure.pl
$make
$sudo make install

Parrotのビルドでこけることはそうそうないと思いますが、もしこけたらREADMEを見て、それでもだめなら開発者に連絡して下さい。

Rakudoのインストール

こちらも上で述べたように最新版をビルド。Rakudo最新版といえば、噂のRakudo Star。

公式を見るとtar.gzで配布しています。
http://rakudo.org/how-to-get-rakudo

$wget http://github.com/downloads/rakudo/star/rakudo-star-2010.07.tar.gz
$tar zxvf rakudo-star -2010.07.tar.gz

ビルドする前にbuild-essential、libicu-dev、subversionが必要なのでインストールしておいて下さい。Ubuntuならこんな感じ

$aptitude install build-essential libicu-dev subversion

無事インストールできたら、Rakudoをビルド

$cd rakudo-star-2010.07
$perl Configure.pl --parrot-config=/path/to/bin/parrot_config
$make blizkost-install
$sudo make install
    • parrot-confinオプションはparrot-configコマンドにパスがとっていれば必要ありません。パスが通っていない場合のみ、parrotのインストール先を指定して下さい。

blizkost-installはPerl6でPerl5のモジュールを動かすblizkostをインストールするためのオプションです。これも必要な場合のみ指定して下さい。

Rakudoのビルドもそうそうこけませんが、こけたらREADMEかメールで。

Perl6動くよ!

Rakudoのインストールまで終えるとPerl6を動かすことができます。

$perl6

とやってやるとインタラクティブシェルが起動するので、say helloとかしてみて下さい。

Rakudoをインストールするといくつかモジュールが付いてきます。LWP::Simpleもあるのでネットから取得することもできます。他のライブラリは

$ls /usr/local/lib/parrot/2.6.0/language/perl6/lib

ってやると一覧を見れます。インストール先を変えた場合は各自パスを読みかえてください。

githubにもちょこちょこPerl6のモジュールが上がってきているので、興味がある人は見てみて下さい。

PL/Perl6のインストール

ようやく本題です。

これも最新版を利用しましょう。まだまだ開発途上なので。

git clone http://github.com/leto/plparrot.git plparrot

次にPerl6のPBCの場所を環境変数で指定してあげます。PBCとはParrot VMバイトコードファイルのことです。これを指定してあげないと、PL/ParrotをインストールすることはできてもPL/Perl6を動かそうとすると、インタープリターが見つからないというエラーが出て実行することができません。

$export PERL6PBC=/usr/local/lib/parrot/2.6.0/language/perl6/perl6.pbc

PERL6PBCを指定したら、PL/Parrotのビルド

$cd plparrot
$make
$make install

以上でインストールは終わりです。

PL/Parrot & PL/Perl6をPostgreSQL上で使えるようにする

PostgreSQLで各PL言語を使えるようにするには

$createlang {PL言語名} {DB名}

というコマンドを実行してあげる必要があります。その際に指定したDBのcreatelang権限を持っている必要があります。個別に指定することもできますが、ここではテスト用にスーバーユーザーとDBを新たに作成しましょう。

$createuser test
Shall the new role be a superuser? (y/n) y
$createdb -O test testdb

ユーザーとDBを作成したらcreatelangです。自分でやってもいいのですが、PL/Parrot、PL/Perl6他を一度にcreatelangしてくれるスクリプトが同梱されているのでそれを利用します。

$psql -d testdb -U test -f `pg_config --sharedir`/contrib/plparrot.sql
  • dでDBを、-Uでユーザーを、-fで実行するファイルを指定しています。-fの引数ではpg_configコマンドでPostgreSQLのshareディレクトリを取得しています。もちろん直接パスを記述しても大丈夫です。

お疲れ様です

ここまでやればPL/Parrot & PL/Perl6を使うことができます。

$psql -d testdb -U test  -C "CREATE FUNCTION hello() RETURNS text AS $$ return 'hello' $$ LANGUAGE plperl6; SELECT hello();"

という、LL Tigerで紹介したワンライナーを実行してみて下さい。

LANGUAGE plparrot

としてやればParrotのコードを動かすこともできます。

PL/Parrot & PL/Perlについては以下のURLを参考にして下さい。
http://pl.parrot.org/
GitHub - leto/plparrot: Embed Parrot+Rakudo into PostgreSQL
Google グループ
とはいえ、まだまだ情報は少ないです。PL/Parrotを使ったら是非情報を発信して下さい!

PL言語そのものについてはPostgreSQLの公式ドキュメントが充実しています。ドキュメントが充実しているのもPostgreSQLのいいところです。
第42章 手続き言語

Enjoy PL/Parrot & PL/Perl6!

LTの虎@Lightweight Language Tigerに出るよ!

技術系カンファレンスで初めてしゃぺるよ!
トーナメント形式なのに他の出場者が強い人ばっかりでガクブルだね。
みんな見に来てね。よろしく!
http://ll.jus.or.jp/2010/program/lt

Yokohama.pm#6 x PerlCasual#3に行ってきました

2010/7/23 Yokohama.pm#6 x PerlCasual#3@ネイバージャパン株式会社 カフェに参加してきました。

カフェという言葉に少し嫌な予感を感じつつ、着いてみると案の上尋常じゃなくシャレた空間。こういった勉強会にはいつも一人で参加しているので、オシャレな空間にぼっちという修行で心を鍛えつつ、去年参加したYAPC2009以来のPerlな集まりに胸を膨らませていました。

そうこうしている内に始まったので以下プログラム。敬称略です。ブログにまとめるつもりで聴いておらず適当なメモしか残してなかったので、抜けが多いと思いますが、ご了承を。

kazeburo - リソース監視ツール・フレームワークCloudForecastの紹介

Perlで書かれたリソース監視ツールCloudForecastの紹介です。そのまんまですが。
GitHub - kazeburo/cloudforecast: the server metrics gathering

  • サーバー監視は主に2つ
    • 死活監視
      • pingによる到達チェックと、特定のポートにアクセスしてApacheとか個々のサービスが活きているかのチェック。ある瞬間の状態を調べる。
    • リソース監視 <-CloudForecastはこっち
      • サーバーの諸々のリソースやネットワークの状況を監視。サーバーの累積の状態を調べる。
  • CloudForecastの売りは?
    • 設定が簡単
      • YAMLでちょこちょこっとかくだけ簡単監視。
    • スケーラビリティ
      • 家庭内のような小規模から、企業の大規模ネットワークまで対応。実際にライブドアで700台規模の監視に使っているそうです。
    • サーバー内蔵
      • グラフも自動生成。これだけ揃ってれば明日からでも監視できちゃいますね。
    • オープンソース
      • 運用周りのノウハウがたまっていくとすばらしいです

いい感じですね。PerlWebサービスは作れても、ネットワークやハードウェアの話はさっぱりという僕のような人はきっとたくさんいるはずなので、そういう人にはぴったりのツールだと思います。

会社で使うとなると要件がどうとかの話がついて回るので、まずは家サーバーに使ってみようかなと思います。具合がよければ会社にもプッシュしみよう。

他、詳しくはkazeburoさんのブログで紹介されていますのでそちらを。
CloudForecastっていうリソース監視のツール/フレームワーク作った - blog.nomadscafe.jp

typester - WebアプリケーションエンジニアのためのiPhoneアプリ開発入門

Perlのセッションなのに、Perlのコードはほぼ出てきませんでした。

という話でした。完璧な理論です。

作る時のこつ
HTTP通信
  • ASIHTTPRequestかlibcurlを使う。オススメはlibcurl。cのライブラリだけど問題なく使える。
    • NSURLRequestは標準だけど。これを使うともれなく挫折
JSON
  • JSON Framework
    • NULLが使えないので注意。NSNullというクラスになるけど評価すると真になるとかなんとか。メモし忘れたので詳細はGoogleにて。
XML
  • 基本的にJSONが使えるならそっちで。どうしてもXMLしたいならlibxmlをどうぞ
Blocks構文+Grand Central Dispatcher
  • Blocks構文とはcでいう無名関数。コールバックみたいのが簡単に書ける。
  • これにGCDを組み合わせると、スレッドっぽく通信中に処理をブロックしないようなコードを簡単に書ける。
プッシュ
  • AnyEvent::APNS
    • APPLEのサーバーと常時繋がっているAnyEventのデーモンが立ち上がる
    • Webアプリ側からはJSONRPCを投げることで、iPhoneにプッシュ通知を出せる
    • 本セッションで唯一のPerlコード
つまり
  • libcurl + JSON Frameworkが最強に楽
  • 通信中に処理を止めたくないならBlocks構文 + GCD
  • プッシュ通知したいならAnyEvent::APNS

gfx - Any::Mooseではじめるオブジェクト指向プログラミング

Mooseとは
  • いわずとしれたPerlOOPフレームワーク
  • Mouseという計量版がある
    • Mooseは重いらしい
  • Any::MooseMooseもしくはMouseのラッパー
Mooseの機能
  • コンストラクタやアクセサを作ってくれる
  • イニシャライザBUILDやデストラクタDEMOLISHがある
  • ロールを使って多重継承
Mooseってどうよ?
  • 触ったがなければ一度使ってみる価値はあり
  • ここしばらくは安定しているよ
まとめ
  • MooseとはMouseのこと

ちょっと触って食わず嫌いしていたMooseですが、いい機会なので使ってみます。Mouseを。

PerlCasual 初心者向け勉強会 テーマ: Web APITwitter ボット等

の二部構成でした。

yusukebe - PerlAPI
  • use URIでクエリーを作って
  • use LWP::UserAgentでAPIに投げて
  • use JSONでパースする

というごく基本的な内容でした。

一つ一つのステップを漏らさず説明しようとしていたyusukebeさんから、Perlをカジュアルに使ってもらおうという目的に対する本気度がひしひしと伝わってきました。

残念ながらというか、会場にはあまり初心者の方をいなかったようです。

なので、次は自分の参加は見合わせて、代わりに周りのPerlやってみたいけど何つくろう?という人や、Webサービス作ってみたいどうやればいいの?という人に行ってもらうように、どんどんプッシュしていこうと思います。そういう人は参加して絶対に損はない!と思わせるだけの内容でした。

WEB+DB PRESS Vol.58とメディアミックスするという技術系初?の試みをしているそうなので、詳しい内容はそちらを参照してください

sugyan - ライブコーディング

yusukebeさんの話を受けて、今度は実際に作って見ましたというセッション。しかも、かの全裸botの作者が実際にPerlで全裸botを全裸で作るというありがたいセッション。ちゃんと全裸になっていました(Tweetが)。

Yappo - 位置情報の使い方

位置情報の取得
  • Geolocation APIでできるよ!
    • ただし常識的なブラウザに限る
測地系の罠
Perl測地系変換
  • するならGeo::Coordinates::Converterが楽

会場でも位置情報を使ったプログラミングをしたことがある人があまりいなかったのが、印象的でした。これからどんどん面白くなっていく分野の一つだと思うので、今から始めておくと少し先んじれるかも。

xaicron - みんな大好き Encode

  • 入り口でdecodeして
  • ほげほげして
  • 出口でencode

基本ですね。dankogaiに感謝。

polocky - それいけアパッチログレスポンス時間解析

始まったと思ったら終わっていた。何をいっている(ry
マシントラブルで聞けませんでした。実は一番聞きたかったりしたので、残念です。

piarra - Use::Strict::Fast

帰ってから知ったのですが、比較.com - あらゆる商品・サービス・価格の総合比較サイトのCTOの方でした。。そうと知らずどんな会社なんですか?とか質問してしまった、、、

use strict::fastすると早くなるよ!
  • なんと6%もの高速化が!
  • 本当のおすすめはcommon::sence
    • strict, warnings, utf8とかをまとめてやってくれる
おまけ

プレゼンに一ひねり加えたくて当日に作っちゃったらしいです。一秒切れない、、、あの場で0.5秒台をたたき出すとかすごすぎ。さらにmalaさんがXSSでハックしていたとか。

まかまか - 夏コミ新刊Perl同人誌の宣伝

Acme大全の方の、今年の新作の紹介でした。去年は買いそびれてしまったので、今年はチャンスがあればすかさず購入したいです。

  • Acme 以下の全モジュールを紹介
  • さらにPerl初心者にやさしい用語解説付

以上です。要所要所にネタをしこんでいたり、当日に用意した発表じゃ物足りないといってWebサービス作っちゃたり、エンターテイナー精神あふれるプレゼンが多くて、楽しく聞けました。ただ、やはりPerlcasualとして想定していた層とは少しずれていた感が。Perlの裾野を広げるのがPerlcasualがこういう勉強会を開く目的だと思うので、そういう意味では上に書いたように周りのちょっと興味あるレベルにどんどんPerlcasualを推していくのが、自分にできる貢献の一つなのかなと思います。




最後に素敵なイベントを企画していただいたyusukebeさん、会場を貸していただいたNAVERさん、他運営に携わった方、スピーカーの方、ありがとうございました!