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”)