新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2011-05-31

[Perl]Hachioji.pm #5

5/28(土)に開催されたHachioji.pm #5に参加してきました。

いつものことですが、このレポートは他の方に比べ24時間ほど出遅れています。
ま、そんな事どうでもいいんですよ!そもそもレポートになってるか怪しいんだから!!

なお、公式の開催レポートはこちら

$stuff[0]->say( seat( expire => 7200 ) );

開始直後、お店の方から「2時間制限」といわれたので、uzullaさん、急遽二次会をセッティング。
まあ、こういうアクシデントもたまにはあるのでしょうけど、そこは八王子。すんなりと会場の確保ができた模様です。
そんなわけでA4-LTは二次会で行うこととなりました。ほどなく、参加者全員が完全に「呑むぞ食うぞモード」に突入したのは言うまでもありません。


「キャモーン!」「なにそのカメラww」

一つ言える事としては、とにかく肉がうまかった!
というのがあげられます!


「まだ撮ってんのwww」「酒も肉もうまいっすー♪」

いいじゃない、PICKみたいなトイデジカメだって!


「なになに、撮るの?」「肉うまかったー♪」

このころ僕はビール*3、まんこい(黒糖焼酎)ロック*3を飲み干しており、ただのヨッパライと化していました。


この装置(煙吸い込むやつ)があるせいか、WiMAXをはじめモバイルの電波が弱かったです

酩酊の靄の中で

二次会は「タイラーンナー」でした。
※Hachioji.pm #3でお世話になったお店です。


LT準備の光景。もはやApple信者の集まりにしか見えません。。。

各々のLTのレポートはこちらこちらこちらなどでご確認いただけます。
というのも酔っ払ってて、詳細を記憶できていないのです。。。

個人的には、nekoyaさんのcobbler使ったサーバ管理(というか構築)のお話がフックしました。
takeR14aさんのLTにあった「ALIX board」というPCも楽しそうでした。アプライアンス向けでしょうか。
あと、らくがきライブってアプリを使うとJKとおともだちになれるかもしれないそうですね!

ちなみに僕のLTですが、こちら(PDF)に資料をあげておきました。
まあ内容がほとんどないのですけど。。。

次回とか

6/25(土)開催の予定だそうです。
それから、mgikenさんは素敵なGANC教祖ですね!素敵すぎてツッコミがとまりませんでした><

2011-05-26

[Scala]Scala勉強会in秋葉原#35に行ってきた

HelloWorldとxhtmlのパーシングあたりで止まってるScalaについてもう少し掘り下げるべく、Scala勉強会にお邪魔してきました。

勉強会第35回 - Scala勉強会 in 渋谷

発表について

当日の発表はよしださんによる Scala2.9.0の新機能についての説明でした(資料)
まあ僕は初学者ということもあって、正直なところ発表内容を深く理解できていない部分があるのですが、それでも基礎的な部分についてはおおむね理解できたつもりではあります。
特にJavaプリミティブ型からScalaの各種型への自動的な変換(Auto-Unboxing for Java Boxed valuesのスライドのあたり)なんかは、「今までなかったのかよw」と心の中でツッコんでしまいました。

質問タイム

カリー化されたメソッドのオーバーライドについて、第2引数の型が異なるメソッドのオーバーライドを定義できるにも拘らず、メソッドのコール時に例外コンパイルエラーが発生してしまうのはなぜ?という質問があがりました。

実際に試してみました。
たとえば、こんな状態。
scala> object X {
     |   def a( x:String )( y:String ){}
     |   def a( x:String )( y:Int ){}
     | }
defined module X

この状態でメソッドX.aをコールすると、例外コンパイルエラーが発生するということですが・・・
scala> X.a( "hoge" )( 1 )
:9: error: ambiguous reference to overloaded definition,
both method a in object X of type (x: String)(y: Int)Unit
and  method a in object X of type (x: String)(y: String)Unit
match argument types (java.lang.String)
       X.a( "hoge" )( 1 )
         ^

scala> X.a( "hoge" )( "fuga" )
:9: error: ambiguous reference to overloaded definition,
both method a in object X of type (x: String)(y: Int)Unit
and  method a in object X of type (x: String)(y: String)Unit
match argument types (java.lang.String)
       X.a( "hoge" )( "fuga" )
         ^
たしかに例外コンパイルエラーが発生しました。しかも第2引数にInt、Stringの何れを与えてもこの現象が発生します。

質疑応答の中での回答では、「Odersky曰く『仕様です』」とのことでした。


xhtml関連の質問をしました

じつは開会前に「xhtmlのパース/置き換えをするにはどうしたらよいか」という質問をしました。
皆さんのご意見を聞く限りでは、どうやらjerichoというライブラリを使用するのがベターとのことでした。

感想とか

scala初学者でも十分に参考となる内容でした。ぼくの他にも数名初学者の方がいらしたのですが、むしろ初学者の方ほどこの勉強会に参加するメリットがあると思います。
また、近々yuroyoroさん共著のscala本が出版されるそうです。こういった情報に関するアンテナを広げるという意味でも、今回の参加は意義深いものでした。

2011/05/27 追記

例外と表記されている箇所ですが、よしださんより「例外発生というより、あれはコンパイルエラーですね」とツッコミをいただき、「コンパイルエラー」と表記を改めました。

2011-05-19

[Linux]CentOS5.5にText::MeCabを入れるときのコツ

原因

mecabとmecab-ipadicを入れてるのに、
/root/.cpanm/work/1294395897.25225/Text-MeCab-0.20011/assertlibeiKR8srG: error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory
/root/.cpanm/work/1294395897.25225/Text-MeCab-0.20011/assertlibEejMJieF: error while loading shared libraries: libmecab.so.1: cannot open shared object file: No such file or directory
wrong result: 'mecab', 'mecab'
とか言われてしまうことがあります。

これについてはこちらの記事にわかりやすく書いてありますが、CentOSは初期設定だと/usr/local/libをライブラリの置き場所として認識していないためです。

対処

以下のコマンドを実行後、cpanmでText::MeCabを入れるといいです。
 # echo '/usr/local/lib' >> /etc/ld.so.conf
 # ldconfig

2011-05-17

[Linux]JS/Linuxでcronを動かす

巷で話題のJS/Linuxですが、そのままではcrondが動いてないから、cronエントリを書いてもまともに動きません。

だから、
# crond -b
などとしてcrondを動かしてやり、
# crontab -e 
でcronエントリを追加すると、正常に動作します。

2011-05-10

[Perl]Data::Model::Driver::MongoDBというものをかいた

MongoDBをData::ModelのDriverとして使うためのモジュールをかいたので、githubにあげました。
http://github.com/ytnobody/Data-Model-Driver-MongoDB

使い方

githubにも書いてる通りですけど、こんな感じで使います。
use Data::Model::Driver::MongoDB;
my $mongo_db = Data::Model::Driver::MongoDB->new(
  host => 'localhost',
  db => 'my_database',
);
my $schema = Oreore::Schema->new;
$schema->set_base_driver( $mongo_db );
これでData::Modelのインターフェースに則ってデータの差し込みや更新、読み込み等が出来るようになります。

普通のドライバと異なる箇所

ほとんどMongoDBの仕様(?)に由来するものばかりです。
まず、setするときに自分で主キー値(idとかそういうの)を設定する必要がなくかつ、主キー値の変更ができません。
また、D::Mではデータを取得するget()において、絞り込み条件設定に"where"をつかうのですが、D::M::D::MongoDBでは、
my @rows = $schema->get( book => {
  where => [
    price => { '<' => 1000 },
  ],
);
などのような、不等号などを用いた範囲検索ができません。