最近のスクリプト言語

といっても全然最近ではないのですが。 🙂

前のエントリでも書きましたが恥ずかしながら Ruby とかやったことがなく、実はいつだったか Ruby のソースをみたときに処理は分かれど、ライブラリの中身がどうやっているのか理解できず、ショックで引退を考えたことがありましたので最近ようやく勉強を始めました(笑)

ちょっと仕事に近いところというところで、Ruby じゃなくて Groovy でやってます。

DVC00169

Groovy In Action は絶版になっているのか Amazon ですごい値段がついていましたが、ジュンク堂で無事ゲット。 2008 年の本なのでぼくがみても現行バージョンと変わっているなと思う点もありますが(HashMap が LinkedHashMap になっている等)、それほど困ることはなさそうです。 この本は技術書としてもとても面白かったです。 🙂

Groovy はマップ・リスト操作、動的系の機能とクロージャなどのシンタックスを限りなく最小限に抑えている他、JDK にリフレクションで追加する形でクロージャを用いて処理を差し込むパターンのメソッドが多数用意してあるため、ソースから冗長な記述を削除できすっきりとしたソースをかくことができるようです。

というわけで Groovy In Action を読んで仕掛けが何となく分かったので、試しに RSS から画像を取得してファイル保存するプログラムをかいてみました。

// @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.1')
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.*
import static groovyx.net.http.ContentType.*
 
rssUrl = "http://feedblog.ameba.jp/rss/ameblo/nakagawa-shoko/rss20.xml"
pUrl  = /<img [^>]*src\s*=\s*[\"']?([^\"'> ]+.jpg)/
pFile = /([^\/]+?\.jpg)$/
 
new HTTPBuilder(rssUrl).request(GET, XML) {
   response.success = { res, rss ->
      rss.channel.item.each {
         it.description.text().eachMatch(pUrl) {
            filename = it[1].toURI().path =~ pFile
            new HTTPBuilder(it[1]).request(GET, BINARY) {
               response.success = { res2, image ->
                  new File("./file/${filename[0][0]}").bytes = image.bytes
               }
            }
         }
      }
   }
}

もうちょっと短く書く方法もあるとは思うですが、例えば PHP でかいた場合と違って、http アクセス失敗とか File のオープンクローズとかの処理がソース上に現れていないにもかかわらず、これでうまくいってしまうであろうところが良いですね。

XML パースにはダイナミックランゲージの機能が使われているのが分かります。 あとは String の eachMatch にクロージャ渡せるとか便利です。

  • メソッドの引数の括弧は省略できる。 また、一番外側の引数がクロージャだった場合は括弧にいれなくてOK。
  • インスタンスのフィールドは getter/setter が勝手に生成され、プロパティみたいにフィールド名かけばアクセスできる。

他にもコンストラクタにマップ渡すとフィールドを key/value で初期化できるとか、その際のマップの記述は [] つけなくていいとか、なんだか知らないとぱっと見分からないことでいっぱいだったりするのですが、慣れると便利そうです。

動的型付け、動的言語機能は IDE がほぼ無力になるのでドキュメントとにらめっこするのがちょっと大変ですし、ランタイムエラーをやっぱり出しがちですが、どこで苦労するかのバランスは悪くないように思いました。

というわけで実行。

groovy10 

[tegaki]わーい。 とれた。[/tegaki]

…引退します。。(笑)

2011 年スタート!

気が付けば 2010 年も終わりまして、2011 年がスタートしよりました。 あけましておめでとうございます!。

2010 年はお仕事先が何回か変わったり、WordCamp Yokohama、OSC 北海道以降いろいろな方にお会いすることができたり、刺激が多かった年だったように思います。 🙂

まぁまぁ長いお付き合いの方たちは薄々気が付いていると思いますが、変化はあれど相変わらず性格はひろまさです(いいんだか悪いんだか、、)、、今年もよろしくお願いいたします!。

せっかくブログっぽい書き出しなので、今年やってみたいことなど。

一応変化の速いコンピュータ業界にいますので、たまに勉強しとかないと置いてかれちゃうのですが、まずは今さらで恥ずかしながら、近代的な Lightweight Language を理解していこうかと思います。

C# とかもこの辺の言語の要素を取り入れて進化していますので、そろそろ本職にも登場してくるんじゃないかなというイメージを持っています。

DVC00143

あとは、、趣味のコンピュータとして、OpenGL とか SWT とか E4/XWT とかその辺を使って練習がてら LL からめて何かつくってみたいです。

さて、今年は WordPress が商用サイト向け CMS として躍進した印象を肌で感じました。 ぼくは Web 制作のほうは全然詳しくないので、既に役立つものをつくるのも役立つお話をするのもできなくなっている気もしているのですが、そこはマイワールドひろまさくん。 面白いこと見つけたらやってみる、相変わらずの感じで行こうと思います。 🙂

[tegaki]もてるプログラマーに![/tegaki]

というわけで、今年もこんな感じです(笑)

みなさんにとって良い年でありますように。 今年もよろしくお願いいたします。 😀

XBMC 10.0 リリース!

毎回バージョンアップを楽しみにしているオープンソースのひとつ、XBMC のバージョン 10.0 が先日ついにリリースされました!。 😀

XBMC はもともと初代 XBOX をハックして動作させるメディアプレイヤーでしたが、最近は多くのプラットフォーム向けにリリースがされており、また固定的なメディアプレイヤーアプリケーションとしてだけではなく、いわゆる 10フィートUI を構築する総合的なプラットフォームを目指して開発が進められているように感じます。 です。

XBMC 10.0 | XBMC

It’s been a LONG time coming. Too long. But here it is.

今回のバージョンアップでは、画面を構築するスキン、機能を拡張するアドオンをリポジトリから選択してダウンロード、実行する環境が整ったのが一番目をひくところです。 これらは、XBMC 内部にもつ Python エンジンで動作し、これが XBMC のキモの部分だと思います。

というわけで、さっそく手元の Ubuntu 10.10 で動作させてみました。 PPA にありますので、xbmc リポジトリ追加ですぐインストールできます!

xbox1001

 xbox1002

かっこよすなぁ。 かっこよすなぁ。 スキンはいろいろありますので、10.0 からの機能をつかっていろいろ試してみるとよいと思います。

ちなみに、テレビで動かすとこんな感じになります。 これは、うちの初代 XBOX 版、、なので 9 系です。 残念ながら XBOX 版は既にファイナルバージョンとなっていますが、完成されたアプリケーションだと思います。

xbox1003

16:9  系のモニタをもつネットブックに入れれば、ポータブルメディアプレイヤーに早変わり。 モニタが立ってますので、ごろ寝でアニメみるのにぴったり?(笑)

xbox1004

今回のバージョンから動画再生支援の対応が増えていますので、最近のネットブックだと GPU の力も借りられるかもしれません。

さて、XBMC に最初にさわったのは、、たしか 6年くらい前で当初からすごくパワーを感じるソフトウェアでしたが、まさかここまで化けるとはっ。

オープンソースのリリースといえば Firefox 1.0 のときもちょっと感動しちゃいましたが、XBMC も今後とも追いかけていきたいと思います。