ソニーロリンズを観に行ってきた

3日前の金曜日のことだけれども、ソニーロリンズが大阪のフェスティバルホールにやってくるというので行ってきた。なんと母親と行ってきたのであった。

話は随分前にさかのぼる。2年前にソニーロリンズのコンサートを観に行ったら、『ええなー私もソニーさんみたかったわあ』とのこと。うむむむ、たまには親孝行もしてみようかということで行ってきました。

御年77歳になりますが、77歳とは思えないほど元気です。途中15分の休憩があったことをのぞけば。(2年前はなかった気がする、、、忘れているだけかもしれないけど)

彼の演奏は豪快だと言われますが、そのとおりです。付け加えるならば豪快さの中にも暖かみがあるように感じられます。

# Sonny Please
# They say It’s wonderful
# In the sentimental mood
-休憩-
# Someday I’ll find you
# Nice Lady
# Serenade
# St. Thomas
-アンコール-
# Why was I born

チャン島の写真・ビデオの整理…

タイにあるチャン島というところから帰ってきて1週間。今年はゴールデンウィーク直後から一連の海外旅行で本当に忙しかったです。

忙しくなる要因はずばり写真とビデオ。

今回は現地人が集う (日本人があまり来ない) 綺麗なビーチでのんびり過ごすということと、その綺麗な写真と映像をおさめるという目標でした。私の要領が良くないせいか、とても時間がかかります。写真はRAWと言われる形式で撮り、露出や色合いを追い込んでからJPEGファイルを生成します。ビデオについては映像の編集にとんでもなく時間がかかるんです。慣れないのにテロップを入れたりBGMを入れたりと変に加工してしまうから余計にかかります。

さてそれらもようやく一段落してきました。残りはビデオのエンコードのみ。ただしノートパソコンのせいか、とても時間がかかりそうです。1分の映像をエンコードするのに30分かかるみたいです【汗】今回映像は1時間あるので30時間、、、そして3種類作って1つはDVD用に更に変換しようと思っているので、これだけで1週間パソコンが動きっぱなしになります。ひぇ~。

ビデオカメラを持っている方々ってどういうふうに処理してるのかしら。。。高画質・フルHD画質をうたった商品がたくさん出てきていますがパソコンの性能が追いつかないユーザーが沢山でてきそうな気もします。

[img_assist|nid=66|title=|desc=|link=node|align=left|width=320|height=213]

[img_assist|nid=67|title=|desc=|link=node|align=left|width=320|height=213]

[img_assist|nid=68|title=|desc=|link=node|align=left|width=320|height=240]

[img_assist|nid=69|title=|desc=|link=node|align=left|width=320|height=240]

バンコク着!

待ちに待った海外脱出…実現しました!

GWに海外旅行をするなどという贅沢(!?)は今回がはじめてです。普段は最安値に近い時期に行くことが多いのです。時期が変われば客層も変わるようで、バンコク行きの飛行機はチェンマイへツアー参加する年輩の方々が多かったです。

ホテルには朝7時半頃についたので荷物を預けてスターバックスカフェで一息。キャラメルマキアートのグランデを注文。140THBなり。街ゆく人を観察しながら9時になるのを待ち、開店と同時にタイマッサージのお店に行きました。

痛気持ちいい2時間があっという間に過ぎました。あとは街中をぶらりと歩く。歩くのは好きなんだけど、とにかく暑い。汗だくになりながら、あれこれとビデオにおさめちゃいました。

いよいよチャン島。。。

楽しみです。

チャン島にちゃんと行けるかな、、、

今年のG.W.は、休日の分布の具合から連続休暇が分断されている方が多いようで、そのために航空券の状況が想像と少し違うみたいです。具体的にはG.W.といえばチケットの値段がもっとも安い時期と比べて2倍とかそれ以上の場合が多いのですが、今年はそれにぴたっとあてはまるわけでもなさそうです。カレンダーでは4/30, 5/2が平日になっていることから、4連休にしかならないところも多いのでしょうか。この平日出発のチケットは想像よりは割安なのです。

それを知ったのが先週。友人に指摘されたのがきっかけ。これにより、急遽G.W.に海外旅行に行こうかという計画案が浮上。調整中です。

第一候補はタイはチャン島というところです。『チャン』とはゾウという意味。『チャーンビール』というのがあるのですが、このマークがゾウになっているのはそのためだと思います。もともとは7月に行くつもりでいたのですがこの時期は雨期。いっぽうG.W.に行けば暑季ということで、雨の確率は低くなる。ホテルはローシーズン設定になって、雨が降らないのに良い環境でより安くすませられるのかも。 (宿泊料の設定は波の高さとかが関係してるのかもしれませんが)

狙っているホテルはコテージになっていて、ベランダ(!?)に出るとプールがついているところ。それでも15000円/1泊、、、安い。プールなしだと7000円です。あと、1人あたりではなく1部屋あたりの料金です。シングルルームはないのでダブルをこの料金で泊まっちゃいます【汗】

ほんとに行けるかどうかは、予約で埋まってるかどうかによって決まってしまいます。安い時期はおそらく需要が少ないため、大丈夫とは思いますが。

ともあれ、今からわくわくしてきました。どんなアクティビティが楽しめるところなのか、調べなければ。

Quiet Storm Amagasakiに行ってきた

[img_assist|nid=72|title=Quiet Storm Amagasaki|desc=|link=node|align=left|width=320|height=213]

本日(厳密には昨日か)ライブ)をやるというので聞きつけて行ってきました。場所は表題のとおり『Quiet Storm Amagasaki』というところ。家からは近からず、遠からず、、、微妙な距離であります。

構成はキーボードソロとキーボード+ボーカルという2種類のパターン。『ピアノっこ』な私はやはりキーボードに耳がいく。でまあ、これがなかなかうまかった。いずれもスローテンポな曲なんだけど、意外とそういう曲は難しい。シンプルだからこそ難しく、MC含めてどう場を和ませたりテンポを揺らせてみたり。

スティービーワンダーの曲やら(何曲も演奏していたのにかなり失念)やっていたけどもいずれもアレンジ。でもキーがおかしかったりというのも全くなかった。なんでも音楽を専攻していたらしいから納得のいく話です。

ボーカルのほうもキーボードとうまく調和していていい感じ。どちらも出しゃばらずいい感じだったので、お酒が進んで…バーボンを何杯かいただいちゃいました。

更に重要なのは、好きなことを活き活きとやるということ。これ重要。最近つくづく思うのは何事にも『まつりごとのように』です。勤め先はいつつぶれてもおかしくない状況がかれこれ3,4年続いていたこともあり、職場はこれとは正反対。これではいけない。思わずそんな対比もしてしまったのでした。

あとは音響設備。意外と良かった。キーボードはもう少しいいやつが良かったかな…今日みたいな感じだと、ローランドかヤマハのちょっと硬めの音がしっくりきそうだ。 (←人それぞれ意見はあるだろうけど)

ライブ情報表示一部対応

とりあえず、表紙ページをリニューアル。

見栄えと使い勝手については検討の余地ありですね。特に週間ライブ情報は表示する領域が狭くてイライラしそうです。フォントを小さくするか、別のページへリンクさせるか考えたほうが良さそう。スタイルシートを変更したほうがいいのかもしれない。根本的に改善するにはPHPでXOOPS用のモジュールを作る必要がある。今はIFRAMEというタグを使ってHTMLを埋め込んでいるのでずか、これだとどれだけの文字を含んでいるかに関わらず表示領域が変わらない。(よって、ライブスケジュールを更にスクロールさせなければならない)

あと、まだ表示させてはいないですが、ジャズに関するニュースもページに貼り付けたら終わりという状態だけれども、ちょっと様子見です。さすがに全自動というわけにはいかず、どれを掲載するか取捨選択が必要となっているためです。ジャズミュージシャンの名前で絞り込むとか、情報の重要度をつけて楽するようにしなければ、ちょっとメンテナンスが大変かなと思っています。

結構苦労した割には感動が少ないなあ。

ジャズ情報サイトリリース直前

[img_assist|nid=71|title=Rails検索結果画面|desc=|link=node|align=left|width=320|height=224]

ようやくα版として利利蒸すしてもいいかなと思えるレベルに近づいてきました。ジャズライブ、チケット発売、関連ニュースなどを自動収集するところで随分と時間がかかりましたが、なんとか一段落。

データベースに情報を取り込んだら、次はそれをコンテンツとしてブラウザで読めるようにするのでまごつきました。Ruby on Rails自体はとても生産性が高そうだけど、いくら生産性が高くても使い方が理解できていなければそれなりに時間がかかるわけで…こちらも時間がかかりました。

今回の対応でのキモになるのが、データベース上の情報を絞り込んで表示する部分。リッチなコンテンツを実現するためにはもう少し調べごとが必要だけども、しょぼいので我慢すれば、今週末こ公開できそうだ。

下の画面はニュース情報がタイに関する情報を絞り込んだもの。ジャズ情報以外にタイの情報も(個人的には)見たいので (^^;;

リリースするものもこれが基本。タイに関する情報がジャズに置き換わると思えばよろしい。自動収集した情報からジャズに関するものに絞り込んでトップページに表示させます。一応、チェックして重要そうな情報だけ手動で絞り込む仕組みも入れておいたけど、それを活用するかどうかはまだ分からない。運用の感触次第。

直近の調べ毎がサーバの設定関連。Ruby on Railsはテスト時にサーバが立ち上がる仕組みがあってこれを活用しており、MacBookをそれにあてていました。サーバは玄箱なので、こちらの設定が必要。メモリリソース、CPUともに貧弱なので、ただでさえ重たいRailsで作成したコンテンツをどのように使うかが難しそう。Rubyで動作するHTTPサーバを組み込むわけにはいかないから、今のWEBサーバで動かすことになります。

そんなこんなで、今度の週末こそ、

* ジャズライブの週間スケジュールが表示できて
* それをiCalに取り込めるようにして
* ジャズに関するニュース情報の一覧を表示して
* チケット発売情報を掲載して

というとこまで全自動でこなすものをリリースするぞ!
はてさて、どうなることやら。。。

ジャズの情報を扱うDBが充実してきた

[img_assist|nid=70|title=ジャズ情報DB|desc=|link=node|align=left|width=318|height=320]

ようやくDBへジャズに関する情報を格納する処理ができあがってきた。ようやく稼働までこぎつけられそうな感触が感じられるようになってきた。あとは、DBにためた情報を整理して表示させることができればこのホームページの表紙をアレンジできそう。

実装したのは以下のとおり。

* ニュースをDBに詰める。
* ジャズに関する情報を検索してDBに詰める。
* 関西の発売前のチケット情報をDBに詰める。
* ジャズミュージシャンのブログ更新情報をDBに詰める。
* ジャズライブの情報をDBに詰める。
* ジャズライブの情報をicalendar形式で出力。

DBへのアクセスはRuby On Railsで使われているActiveRecord形式に変更。これによりRuby On Railsでの運用が簡単に行えるはず。あともう少しです。

あちこちの情報を自動的に収集・集約してくれるのは本当にありがたいです。『ものぐさ太郎』なので尚更そう感じます。あまりに便利なので、仕事に関連する情報を同様に収集してます。これをちょっとした空き時間にさっと確認する仕組みを構築中。少し前まではZaurus + Emacs + Wanderlust + w3m + Shimbunという感じで使っていたのですが、WindowsMobileでは動作せず・・・

今回の取り組みにより、Gmailに一旦送信してWanderlustやOutlookで受信したり、数日間の情報をHTMLに出力してさっと確認したりという使い方ができそうです。もちろん同様の取り組みを今回のサイト構築で応用することにより、漏れなくイベントを網羅できそうです。

それにしても、Rubyを使うと私みたいな凡人でも結構簡単にスクレープできることがわかり、虜になりそうです。コンピュータにもっと仕事を押しつけることができそう。

調子に乗ってRSSもスクレープしてDBへ

勢いづいて、RSSもDBに格納するスクリプトを書いた。以下は解析した内容を表示する部分。RSSを解析するライブラリがあるのでとっても簡単です。ActiveRecordの使い方も (必要に迫られている処理については) 分かってきたのでより短時間で実現できるようになった。いい感じです。

ちなみに確認したのはYAHOO!ブログが出力しているRSS。他のところだとdescriptionあたりが入っていなくてうまく動かないかもしれない。これはゆくゆくあちこちのコンテンツに対応していく上で検証することにします。


#!/usr/bin/ruby
require ‘open-uri’
require ‘rss’
require ‘kconv’
PARSE_URL = “test.rss”
TAG_REGEXP = /<(?:[^”‘>]*|”[^”]*”|’[^’]*’)+>/
rss = nil
begin
rss = RSS::Parser.parse(PARSE_URL)
rescue RSS::InvalidRSSError
rss = RSS::Parser.parse(PARSE_URL, false)
end

rss.items.each do |i|
description = i.description.gsub(//, “¥n”).gsub(TAG_REGEXP, ‘’)
link = i.link.gsub(/^.*?¥*/,’’)
puts “title = #{i.title}”
puts “date = #{i.pubDate}”
puts “link = #{link}”
puts “description = #{description}”
end

 

YAHOO!ニュースをスクレープしてみた

主要なホームページからJazzに関する情報を取り出すため、手始めにYAHOO!ニュースから表題とニュース本文を取り出すスクリプトを書いてみた。この手のツールやスクリプトは沢山あるんだけど、ゆくゆくは主要なサイトにも対応させていくため、ノウハウの蓄積のためにも自分自身で書いてみたという次第。コンテンツの読み込みに際しては1秒待つようにしています。サーバへの負荷軽減とそもそもYAHOO!自体が連続して読み込みを行うとすると404(コンテンツがない)という応答を返してくる対策を行っているようで、この回避のためです。

ちなみにこれを利用すれば、WindowsMobileマシンでニュース等の情報を持ち歩くことができます。このままでもEmacsの『アウトラインモード』でそれなりに便利に読めますし、rubyのRSSクラスを使用して本文もRSSに出力することで専用ビューワで読めるようになります。定額プランに入っていない場合は重宝するかもしれません。

ソースは以下のような感じ。40行くらいで動いたので結構生産性がいいんじゃないかな。実際作ってみたのは『Ruby on Rails』で使われている『ActiveRecord』というクラスを使ってDBへの保存まで対応しました。ちなみに3日分の海外のニュースをDBに保存したところ、3日間で400Kバイト程度になりました。年間計算で55Mバイト程度…ずっとDBを保持しておくのも後々楽しめるのかもしれない。例えば海外ニュースではニュースによっては『【インドシナ】~』や『<タイ>~』といった文字列が入っているので、これら文字列をキーにして『select』すれば、タイやインドシナのニュースが取り出せます。もちろん、もともとの目的であるジャズの情報を抜き出すのも同じ要領です。

MacOSでは1つの記事をDBに格納するまでに1秒くらいでした。つまりこの時間のほとんどが連続読みだし防止の1秒待ちの時間です。ところがサーバとして使用している『玄箱』では4~5秒かかりました。玄箱は搭載しているメモリが少ないため、CPU性能の影響というよりは、スワップなどによる影響が大きいのではないか、と推察しております。

うまく動いたし、ActiveRecordの使い方も少し分かったので、ジャズの情報を抜き出しDBに格納するスクリプトをどんどん書いていくぞ~。


#### YAHOO!ニュースの海外ニュースを標準出力に出力するサンプル
require ‘rubygems’
require ‘hpricot’
require ‘kconv’
require ‘jcode’
require ‘open-uri’
class YahooNews
def parse_news(uri)
sleep(1)
doc = Hpricot(open(uri))
self.parse_index(doc)
end
def parse_index(doc)
# ニュースの項目を取り出す
(doc/”div.list_ya/ul/li/a”).each do |a|
if a.attributes[’class’] != “yjS3″
sleep(1)
page_doc = Hpricot(open(a.attributes[’href’]))
parse_page(page_doc)
end
end
# 次のページを取得し、ニュースを処理する
(doc/”table/tr.yjS/td/a”).each do |a|
if a.inneer_text.toutf8 == “次のページ”
sleep(1)
next_doc = Hpricot(open(a.attributes[’href’]))
self.parse_index(next_doc)
end
end
end
def parse_page(doc)
title = doc.at(“div.yntop/h1.yjXL”).inner_text.toutf8
datestr = doc.at(“div.yntop/p.yjSt”).inner_text.toutf8.strip.gsub(/配信.*$/,’’)
contents = doc.at(“table/tr/td/div.yjMt”).inner_text.toutf8
puts “¥* #{title}(#{datestr})”
puts “#{contents}¥n”
end
end
news = YahooNews.new
news.parse_news(“http://headlines.yahoo.co.jp/hl?c=int&t=l”)