Articles
インタネット・ラジオ(7)
バロック音楽
もっと一杯あると思いましたが、全部で7つ。そんなものなのかな。まあ、中世ルネサンス専門局のなかで Early Music は名前と違って、中味はバロックだから、実質8局となり、バランスはとれているのかもしれません。
- Otto’s Baroque Musick
- URLはこちら。ただし、このURLのページ、詐欺まがいの広告がでますので、あまり近寄らない方がいいかもしれません。その場合、ディスプレイに曲名表示はありませんので、知らない曲は何をやっているのかわからないことになります。USAサイトのようです。まあウェブラジオできいている分には問題はありません。アナウンスなしで、24H曲を流しっぱなしというスタイル。選曲には特に特徴はありません。音は普通(60Kbps)。
- AVRO Baroque around the Clock
- オランダ放送のバロック音楽専門インタネットラジオ局です。音は256Kbpsだけあってなかなかいいです。アナウンスはなし、流しっぱなしというスタイル。曲名は表示されますが、読み取れない。URLはこちらなのですが、ここでも何をやっているかわからない。winampで直接再生させて、表示される内容で曲名を知るという方法しかありません。番組表などもなしです。
- Baroque
- ひとつ前の「現代音楽」の記事で紹介した Modern Classical と同じく AOLのやっているラジオ局のようで、URLはこちら。URLとラジオではやっている曲が違う、アナウンスなし、流しっぱなしというスタイル、ラジオの曲名はディスプレイに丁寧に表示される、音はなかなかいいです(128Kbps)、などの点も Modern Classical と同じ。
- CBC Galaxie Baroque
- カナダ放送のバロック音楽専門インタネットラジオ局です。音はいいです(96Kbps)。URLはこちら。ここも上3局と同じで曲名がわかりません。アナウンスなし、流しっぱなしというスタイル。曲名はラジオのディスプレイに表示されません。世界各国の放送局はバロック音楽はイージーリスニング、曲名などわからなくてもいいという信念なのですかね。
- Radio Classique Baroque
- フランス放送のバロック音楽専門インタネットラジオ局。音はいいです(96Kbps)。URLはこちら。アナウンスなし、流しっぱなしは上の4局といっしょですが、曲名のディスプレイはあり、サイトで演奏中の曲名を知ることもできます。選曲もなかなかいいのでここがバロック音楽のラジオ局としてはおすすめですかね。
- Global Bach Community, 24/7 Bach
- Dennis Schmidt 演奏のバッハオルガン全曲に特化したインタネットラジオ局。運営はアメリカのバッハ協会。URLはこちら。アナウンスなし、流しっぱなしですが、曲名はディスプレイに表示されます。音はいいです(96Kbps)。
(internet) 2009/07/22
「プリンセス・マサコ」
出版が2007年9月。数年前の情報をベースにした本になりますが、いまでもこの本に書かれている状況があまり変わっていないという点がプリンセス・マサコの悲劇ですかね。
この本が和訳されて、評判になっていることは池田信夫さんのブログの情報知っていたのですが、「まあ金を出して読むほどの本じゃないだろう」と考え、ほっておいた。
最近、なだいなださんのブログでまたこの本の記事を読み、藤沢の図書館でインタネット検索したら、この本を蔵書していることを発見。早速、読んでみました。
この本が出版時の宮内庁、外務省の抵抗については上記サイトに詳しいのでそちらを読んで頂くとして、抵抗の真の理由は、当時、宮内庁が隠したがっていた以下の三点を明快に述べたことでしょうね。
- 雅子さんは皇太子との結婚に乗り気ではなかったが、周囲の圧力に負け、いやいやながら決断した
- 二人の子供の愛子さんは人工授精によるもの
- 雅子さんは鬱病
まあ、筆者が日本と皇室にあまり好意的ではなくて、偏見による変な記述があるから、宮内庁がこの本の出版を歓迎することはないでしょうね。しかし、上記三点の論証は正確、事実に基づいていると思われるので、変な抗議をして出版妨害したのは、どうだったのですかね。かえって、論点を確認することになったのじゃないかしら。当時は日本のマスコミでこの三点をはっきりいう人は少なかったと思いますが、今では常識だから。
まあ、こういう本が妨害を受けても、なんとか出版され、図書館で借りて読めるとは、日本は自由な国ですね。
(review) 2009/07/10
インタネット・ラジオ(6)
現代音楽
なんで、中ルネの次が現代なのだというのはもっともだと思いますが、まったく個人的好みの並びです。全部で7局。まあ、こんなものでしょう。
- Arnold Schoenberg Center Webradio
- ウィーンにあるシェーンベルクセンタが運営するシェーンベルク作品専門のラジオ局。シェーンベルクの全作品を流しつづけたとすると、1週間ももたないと思います。だから、トーク番組が半分以上。ドイツ語。残念だなぁ、さっばりわからない。URLはこちら。番組表がありますので、曲名と演奏者はわかります。音は48Kbpsですので、AMラジオレベル。番組表をみて面白そうな演奏やっていたら聴いてみるというスタイルですかね。
- Concertzender Contemporary Music
- Concertzender の現代音楽専門のラジオ局。URLはこちら。音はいいです(128Kbps)。選曲は他の Concertzender と同じでバランスのとれたものだと思います。長期間の番組表がないので、面白そうな曲を選んで聴くということができないのが痛い。
- CBC Radio 2 Canadian Composers
- カナダ放送のカナダの作曲家の作品を特集したラジオ曲。いろいろな曲が聴けるのはいいのだけど、残念ながら番組表がないので、何をやるのかさっぱりわからないのが問題点。URLはこちら。
- Concertzender Dutch Music Media
- こちらは Concertzender のオンラダの特集したラジオ曲。上のカナダ放送の局と同じで番組表がないので、何をやるのかわからない。聴いていると、結構面白そうな曲をやっているのですが。URLは上の Concertzender とおなじです。
- Electro-acoustic Sweden
- スウェーデンの電子音楽専門のインタネットラジオ、いつ聴いても、人の声を使った電子音楽作品をやっている不思議な放送局です。URLはこちら。英語です。プレイリストがありどんな曲をやっているかわかりますが、あまりにも曲の内容が特化しているので、近づきがたいです。
- Modern Classical
- AOLのやっているラジオ局のようで、URLはこちら。ただ、このURLとラジオではやっている曲が違うのが不思議です。アナウンスなし、流しっぱなしというスタイル。ラジオの方は曲名はディスプレイに表示されるので、なんとかなりますが。音はなかなかいいです(128Kbps)。という訳でここも番組表がないのが痛い。
- Contemporary Classical
- URLはこちら。個人レベルで運営されているラジオ局のようですが、ラジオにはプリセットされていなかったので、Reciva のサイトに依頼して、登録してもらいました。アナウンスなし、流しっぱなしというスタイル。URL先のウェブはよて出来ています。
まあ、現代曲の場合、流しっぱなしという聞き方はしないので、番組表のしっかりしている普通(?)のインタネットラジオの番組を中継番組を狙うということになりそうですね。従って、プリセット登録はなし。
(internet) 2009/07/06
インタネット・ラジオ(5)
中世、ルネサンス音楽
これも4局、見つかりました。古典民族音楽と同じ数ということはどう解釈すればいいのかな。同じようにマイナーということですかね。
- Ancient FM
- URLはこちら(聴けるだけで、ほとんど情報はありません)。中世とルネサンス専門のUSAのラジオ局です。アナウンスなしで、手持ちの音源を次々放送するというスタイル。演奏中の曲名はディスプレイに出ます。音は素晴らしくいいです(128KBPS)。局名のとおり中世の世俗音楽がメイン。ちょっと音楽の選曲幅が狭いのが難点。
- Renaissance
- URLはこちら。サンフランシスコの中ルネ音楽専門のサイトが運営するラジオ局らしいです。こちらも手持ちの音源を次々放送するというスタイル。Ancient FM と同じく、アナウスはなしで、演奏中の曲名がディスプレイに出て、音はいいです(128KBPS)。時々、コマーシャルが入ります。局名通り、こっちはどちらかといえば、ルネサンス音楽中心ですね。
- Early Music
- URLはこちら。アメリカのインタネット古楽協会が提供するラジオ局です。Early Music という局名ですが、バロックがメインで一部ルネサンスにかかるかかからないかという曲があるという構成です。音は 64KBPS MP3 ですが、悪くはないです。アナウスなし、曲名表示もなしなので、知らない曲はリンク先に行かないとわかりません。コマーシャルが入ります。
- Concertzender Early Music
- URLはこちら。これはオランダ語でしょうね。Orient Expressと同じサイトです。選曲は中世からバロックまでバランスよくされています。曲のアナウンスと曲名表示の両方があります。音は素晴らしくいいです(128Kbps)。お勧めです。
Ancient をどうするか悩んだけど、とりあえず Concertzender と Early Music をプリセットしました。
(internet) 2009/06/30
Rubyでマンデルブロ図形を描く(7)
ところで、このスクリプトをコーディングしたのは、当然、下心がありです。C コードがスパゲッティ状態のGUI版マンデルブロ音楽作成プログラムをrubyでリメークしようと思っています。MIDI部分のコードをゼロから書くのは大変なので、適当なライブラリを物色中です。
スクリプリト言語を使う理由は、変更が容易なこと。音楽生成のアルゴリズムをいろいろ試してみるのによかろうと考えました。
今回の図形表示スクリプトでも色の変更は簡単です。 プログラム冒頭部分の
$xpm = ["400 400 37 2", \ "00 c #000000", "01 c #100000", "02 c #200000", "03 c #300000", "04 c #400000", "05 c #480000", \ "06 c #500000", "07 c #580000", "08 c #600000", "09 c #680000", "10 c #700000", "11 c #780000", \ "12 c #800000", "13 c #860000", "14 c #8c0000", "15 c #920000", "16 c #980000", "17 c #9e0000", \ "18 c #a40000", "19 c #aa0000", "20 c #b00000", "21 c #b60000", "22 c #bb0000", "23 c #be0000", \ "24 c #c30000", "25 c #c80000", "26 c #cd0000", "27 c #d20000", "28 c #d70000", "29 c #dc0000", \ "30 c #e10000", "31 c #e60000", "32 c #eb0000", "33 c #f00000", "34 c #f50000", "35 c #fa0000", \ "36 c #ff0000"]
は一行目が基本情報(横サイズ、縦サイズ、色数、一ドットを表現する文字数)、2行目からカラーコード表。カラーコード表のフォーマットは“対応する文字 c #xxxxxx”となっていてxxxxxの部分は16進表示、赤、緑、青を表す。例えば最初の“00 c #000000”は00だったら真っ黒けということです。
36個も16進数をセットするのは大変といわれそうだけど、これもrubyのスクリプトでつくれます。
$xpm = ["400 400 37 2", "00 c #000000"] for i in 1..4 $xpm << "#{sprintf("%02d", i)} c ##{sprintf("%02x", 16*i)}0000" end for i in 5..12 $xpm << "#{sprintf("%02d", i)} c ##{sprintf("%02x", 64+8*(i-4))}0000" end for i in 13..20 $xpm << "#{sprintf("%02d", i)} c ##{sprintf("%02x", 128+6*(i-12))}0000" end for i in 21..36 $xpm << "#{sprintf("%02d", i)} c ##{sprintf("%02x", 182+5*(i-22))}0000" end p $xpm
というコードを実行してコンソールに出力された内容をそのまま貼り付ける(一部修正しています)という方法で作りました。
ちなみに色を変えたければ #{sprintf(“%02x”, 16*i)}0000 の部分を、 00#{sprintf(“%02x”, 16*i)}00 とすれば緑に、 0000#{sprintf(“%02x”, 16*i)} とすれば青にできます。
簡単でしょ。
色の数を増やすときは
$xpm = ["400 400 37 2", "00 c #000000"] for i in 1..6 $xpm << "#{sprintf("%02d", (i-1)*6+1)} c #00#{sprintf("%02x", (255-32*(i/6)).to_i)}#{sprintf("%02x", (84*(i/2)).to_i)}" $xpm << "#{sprintf("%02d", (i-1)*6+2)} c #00#{sprintf("%02x", (84*(i/2)).to_i)}#{sprintf("%02x", (255-32*(i/6)).to_i)}" $xpm << "#{sprintf("%02d", (i-1)*6+3)} c ##{sprintf("%02x", (84*(i/2)).to_i)}#{sprintf("%02x", (255-32*(i/6)).to_i)}00" $xpm << "#{sprintf("%02d", (i-1)*6+4)} c ##{sprintf("%02x", (255-32*(i/6)).to_i)}#{sprintf("%02x", (84*(i/2)).to_i)}00" $xpm << "#{sprintf("%02d", (i-1)*6+5)} c ##{sprintf("%02x", (84*(i/2)).to_i)}00#{sprintf("%02x", (255-32*(i/6)).to_i)}" $xpm << "#{sprintf("%02d", (i-1)*6+6)} c ##{sprintf("%02x", (255-32*(i/6)).to_i)}00#{sprintf("%02x", (84*(i/2)).to_i)}" end
とか
for i in 1..6 $xpm << "#{sprintf("%02d", i)} c ##{sprintf("%02x", (255*i/6))}0000" end for i in 7..12 $xpm << "#{sprintf("%02d", i)} c ##{sprintf("%02x", (255*(i-6)/6))}d000" end for i in 13..18 $xpm << "#{sprintf("%02d", i)} c ##{sprintf("%02x", (255*(i-12)/6))}#{sprintf("%02x", (256*(i-12)/6))}00" end for i in 19..24 $xpm << "#{sprintf("%02d", i)} c #00#{sprintf("%02x", (255*(i-18)/6))}00" end for i in 25..30 $xpm << "#{sprintf("%02d", i)} c #7070#{sprintf("%02x", (255*(i-24)/6))}" end for i in 31..36 $xpm << "#{sprintf("%02d", i)} c #0070#{sprintf("%02x", (255*(i-30)/6))}" end
というスクリプトで対応できます。
(computer) 2009/06/25
インタネット・ラジオ(4)
ラジオ局の情報
ちゃんと繋がるようになれば、これが一番重要です。2009年6月時点でクラシック音楽、日本語ではこのサイトの情報が一番コンカレントでよくできていると思います。まっとうなクラシックファンならこのサイトの情報で必要十分じゃないかしら。リンク先も厳選されたものばかりで、ここをベースにしてほとんどの用はたります。随分助かりました。ありがとうございました。
それでは、以下、まっとうじゃないクラシックファン向けのインタネットラジオ局情報。
民族音楽
4局、見つけました。一部だけ民族音楽をやっているという局はもう少しあるのかもしれていけど、民族音楽専門の局はこの位ですかね。なんで民族音楽がクラシックなのだという方がいらっしゃるかもしれないけど、僕の基準では日本の雅楽とか、インドネシアのガムランとか、インドのラーガとか、アラブのマカームとか世界各国の古典音楽ですから、れっきとしたクラシック音楽ですね。
- Anuraag
- カナダのインド古典音楽専門のインタネットラジオ局です。インド古典音楽のエヴァンジェリストが主催する個人レベルで運営されているみたいです。従って、独自のウェブサイトもなさそうで、URLはラジオ局を置いているこちらを参照して下さい。北インドの音楽が中心ですが、南インドとかパキスタンの音楽なども対象にしています。32Kbpsですが音はそんなに悪くない。アナウンスはなし。曲名はサイトで調べるということになります。ラジオの目覚まし時計で鳴らす音楽に設定しておいて、インドのラーガを聴きながら、目覚めるという使い方に絶好です。
- Darvish
- ダルビッシュといっても日本のピッチャーじゃありません。イラクの古典音楽専門の局です。URLはこちら。英語です。Reciva の説明ではイラクのラジオ局とありますが、サーバはイギリスあたりにあるのではないかな。アナウンスはなし。番組表がサイトにあります。こっちは、心落ち着く音楽なので、イスラム教徒の方から石を投げられそうだけど、目覚ましじゃなくて、夜、一杯やりながら聴くのに最適。音はとてもいいです(128Kbps)。
- Chinese Music World
- 中国の古典音楽の専門サイト。URLはこちら。ただし、中国語なのでチンプンカンプンなのは残念。中国の古典音楽ってあまり聴いたことはなかったのですが、このサイトの音楽はなかなかいいですね。日本の音楽にも通じる響きがあって、結構、繊細微妙。楽しんでいます。64Kbpsで音は普通です。サイトに曲名の表示はあるみたいですが中国語なので、よく分からないのは残念。
- Concertzender Orient Express
- Orient Express という名前がついていますが、終着駅のイスタンブールから日本までのアラブ、インド、日本などの音楽を取り扱うサイトです。Concertzender はオランダの放送局が運営しているインタネットラジオ局だと思います。URLはこちら。英語の表示です。民族音楽の他にクラシック、現代音楽、Early Music、ジャズなどジャンル別に専門の局があります。 この Concertzender のインタネットラジオは特殊なジャンルを網羅していて素晴らしいですね。Orient Express はとてもバランスのいい選曲で楽しめます。曲名のアナウスはありますが、オランダ語。放送されている局はサイトに行けばどんな曲なのかわかります。音も素晴らしい(128Kbps)。とりあえず民族音楽をかけっぱなしにしておくにはお勧めです。
ガムラン音楽の専門の局を発見できなかったのは残念だなぁ。とりあえず、Orient Express、Anuraag、Darvish をプリセットしました。
(internet) 2009/06/18
Rubyでマンデルブロ図形を描く(6)
次は図形の表示と移動、拡大、縮小の方法。
直前のメッセージで引用した部分に続く
keymap = Gdk::Keymap.default window.set_events(Gdk::Event::KEY_PRESS_MASK) window.add_events(Gdk::Event::BUTTON_PRESS_MASK)
移動、拡大、縮小のためにマウスクリックとキーボードのキーインを拾うための設定です。
その後、シグナルイベントのハンドラの記述が続き
window.signal_connect("expose_event") do
で画面表示
window.signal_connect("key_press_event") do |w, e|
で u d キーインによる画面の拡大、縮小
window.signal_connect("button_press_event") do |w, e|
でマウスクリックによる移動
処理しています。
残りのコードは ruby の通常のコードか、これまで紹介したサイトに説明はあるので省略します。
一つ、問題なのは、移動、拡大、縮小でスクリプリトを終わらせ、再起動する方法をとっているのですが、これは無理矢理、再描画させると、
[BUG] object allocation during garbage collection phase というエラーになってしまうためです。原因不明ですが、何かご存じの方、教えて下さい。
あと、今回のスクリプトでは使っていませんが、RubyでのGlade(GtkのGUIビルダ)の使い方については
Glade, Ruby/Libglade2チュートリアル
に詳しい解説があります。
(computer) 2009/06/12
インタネット・ラジオ(3)
このラジオの便利なのは、Recivaというウェブサイトがあってそこでラジオに登録できる局をいくらでも拡張できるという仕様になっていることですね。インタネットラジオは栄枯盛衰の激しい世界ですから、最新の情報をウェブでというのは当たり前だけど、うまい仕組みですね。
ラジオのメーカは tangent というデンマークのオーディオメーカなのですが、Reciva サイトはイギリスなので、どういう関係なのか不思議に思って、調べてみました。なかなか面白い。
Reciva はイギリスの会社でインタネットラジオの基盤とウェブサイトを運営している会社です。tangent は Reciva の基盤を使ってラジオを作っているという関係なのですね。Reciva の基盤を使ってラジオを作っている会社は他にもいろいろあるようで、2000ポンド以上するイギリスの高級機なんてのもあるらしいです。Reciva は海外の放送局(インタネットラジオ)との提携ビジネスもやっていて、ipodみたいなことも出来るらしいです。
基盤とウェブを組み合わせるとは面白いビジネスモデルですね。
Reciva サイトには、ラジオ基盤の解説があります。OSはLINUXです。基盤の写真がありますが、極めてシンプルですね。これだけで、LINUXが動いて、LAN、オーディオの処理が出来るのかとビックリという感想です。
Reciva サイトへの新規のラジオ局の登録依頼は簡単です。ADD STATIONというメニューがありますので選択し、画面から登録する局の情報を入力するだけ。ORFとポーランド放送のクラシック局を登録してもらいましたが、1日で処理されました。
インタネット検索をかけていて見つけたのですが、tangent quattro mk2 と Reciva についてはここのサイトの情報でとてもよく説明されていますね。最初の記事で、このサイトを知っていれば、よけいな説明は不要でした。
(internet) 2009/06/02
Rubyでマンデルブロ図形を描く(5)
次にGTK2を使って、乖離値テーブルをドット表示する方法。
ドット画像の表示方法についてはここ「ウインドウへの直接描画 - Gdk::Drawable」にあります。
マンデルブロ計算した直後のコード
window = Gtk::Window.new window.set_size_request(Width, Height) window.set_app_paintable(true) window.realize drawable = window.window pix, mask = Gdk::Pixmap.create_from_xpm_d(drawable, nil, $xpm) gc = Gdk::GC.new(drawable)
が点描するウインドウの定義方法です。内容については上記のリンク先に詳しい説明があるので、そちらを見て下さい。で、リンク先に説明のない部分(下から2行目)の解説。
点の描き方は上記サイトでは drawable.draw_point を使う方法が紹介されていて、最初はdraw_pointでやっていましたが、かなり遅い。400×400の画面だと16万回、色指定のset_foregroundとdraw_pointの呼び出しが繰り返されることになり、3秒位かかります。マンデルブロ計算に時間がかかっていた時はそちらの方がはるかに処理時間が大きいので、「毒食らえば皿まで」、あまり気にならなかったのですが、NArrayに変えたら計算はすぐ終わるのに、表示するまでに大きく待たされるという状況になった。
draw_points という座標をテーブルで与える方法も試しましたが、どうもうまくいかない。
最終的にxpm画像をつくっておいて一画面分まとめて表示させるという方法に変えたら、ほとんど瞬時に処理できる。変わるものですね。
xpmとはUNIXのXなどで標準の画像フォーマットで、このサイトに詳しい情報があります。
文字情報で表示内容をもつというのがUNIXカルチャですね。表示色がRGBそれぞれ256までという制限はありますが、マンデルブロ集合の表示なら十分ですね。
引用したコードの下から2行目の Gdk::Pixmap.create_from_xpm_d がxpm画像を呼び出すメソッドです。
Ruby-GTKでのxpm画像の処理方法については、このサイトに詳しい情報があります。 データは、マンデルブロ演算を行った直後で編集しています(引用の直前のループ処理)。
(computer) 2009/05/26
Rubyでマンデルブロ図形を描く(4)
NArrayは数値配列の計算処理するためのRubyのクラスです。8/16/32bit整数、単精度/倍精度の実数/複素数などの、大規模な多次元の数値配列を高速に処理できるのが特徴です。
画面サイズ400×400のマンデルブロ図形を表示しようとすると数値配列の要素数は16万、計算回数は数百万回以上になりますから、威力を発揮します。
マンデルブロ計算を行っているメソッドのコードは以下の通り。2行目の図形の拡大縮小移動のための座標を取得している行のみ追加し、その他は前掲のサンプルコードそのままです。以下、解読したコードの解説です。
00 def mandel() 01 z = (NArray.scomplex(Width,1).indgen!/Width + $x)*$zoom + (NArray.scomplex(1,Height).indgen!/Height + $y)*($zoom*1.im) 02 $x_start, $y_start, $x_stop, $y_stop, $c_real, $c_image = z[0, 0].real, z[0, 0].imag, z[Width-1, Height-1].real, z[Width-1, Height-1].imag, z[Width/2, Height/2].real, z[Width/2, Height/2].imag 03 c = z.dup 04 a = NArray.sint(Height,Width) 05 idx = NArray.int(Height,Width).indgen! 06 for i in 1..$iter 07 z = z**2+c 08 idx_t,idx_f = (z.abs>2).where2 09 a[idx[idx_t]] = i 10 break if idx_f.size==0 11 idx = idx[idx_f] 12 z = z[idx_f] 13 c = c[idx_f] 14 end 15 a 16 end
1行目と3行目は7行目のマンデルブロ演算式(z = z**2+c)のための複素数配列の定義(dupはduplicateの意味だと思います)。「+」によって、前半(Width)の実数部分と後半(Hight)の虚数部の二次元の配列になる(こういう具合に配列全体に対してまとめて演算させることで高速化しているということだと思います)。indgen!/Width + $x、$yで初期値を設定*$zoom、*($zoom*1.im)で倍率を指定しているようです。
4行目と5行目は処理を高速化させるために、乖離値テーブルとそのインデックス部分を配列で定義しているようです。
6行目のforから14行目のendまでが乖離値計算のループ。
8行目の .where2 は要素が真と偽のインデックス配列を含む(Ruby)配列を返すメソッド。したがって、idx_t,idx_fにそのインデックス要素の配列が乖離したかどうかの情報が入ることになります。以降、9行目から13行目はこのインデックスを使ってループ処理を行っているようです。凄いのは、例えば、9行目の a[idx[idx_t]] = i とするだけで乖離値のテーブルにその乖離値の内容がセットされてしまうらしいということですね。11行目から13行目も同じで、これで残っている配列が次の処理に回されることになる。面白いなぁ。
最後の15行目で乖離値テーブルを返値にして終わります。
a が乖離値のテーブルということがわかれば、問題なく使えます。
(computer) 2009/05/21
インタネット・ラジオ(2)
tangent quattro mk2 の接続方法。
無線LANは使っていないので、イーサネット接続の場合です。
まあ、こういう機械をまったくインタネットを知らない人が使うということは考えられないので、インタネット接続経験有りとすると、簡単です。でも、僕の場合、いくつか躓きました。
- その一
- 買って帰って、さっそくルータの空いている口に接続。当然、すぐにLAN接続出来ると思ったら、ネットワークに接続できないというエラーになる。確かにLANの接続口のランプはついていないし、イーサネットネット接続を認識している雰囲気がない。変だなぁと思って、マニュアルをひっくりかえす。「configure」というメニューがあってその中の「Network Config」で「Wired」を選択しないとダメなのですね。マニュアルはよく読まないといけません。
- その二
- 一応、ラジオは聴けるようになりましたが、局の選択が大変です。クラッシックだけで476局あって、これを station → genre → classic → チューニングノブ で600局位ある中から一局選択となる。
Recivaサイトに繋いで、my stuff に登録すれば簡単とわかり、挑戦。ユーザ登録は簡単にできたのですが、my stuff がメニューが出てこない。マニュアルの記述が曖昧なのですね。RecivaサイトでMy Stationで会員登録をすると同時に、My Radio Linkでラジオの登録をしないといけない。マニュアルに、「My Radio Linkで登録しないと、my stuff 機能は使えない」とちゃんと書いてほしいなぁ。 - その三
- 使いはしないのだけど、共有コンテンツの再生、メディアプレーヤ連携を試してみました。これも簡単には繋がらない。気が付けば、当たり前ですが、パソコン側でパーソナルファイアウォールのラジオのIPアドレスをアクセス可能にしてやる必要があります。はて、ラジオのIPアドレスはどうやって調べるのかいなと、いろいろやったらみました。configのメニューの中にあるのですね。まあ、家庭内「乱」をやっていれば、すぐわかることだけど、ちょっと大変かな。
(internet) 2009/05/16
インタネット・ラジオ(tangent quattro mk2)
地元のオーディオ店で展示品セールしていたので、ふらふらと買っちゃいました。スイッチ押すだけで、好みの音楽が流れるという環境構築を狙っていたのですよね。衛星ラジオのクラシックという手はあるかなと思っていたけど、好みのジャンルにピンポイントにチューニングできないというのが問題点。で、インタネット・ラジオ。
PCで試していて、インタネットラジオだと、現代音楽とか中世ルネサンス音楽専門のチァネルがあって、「よさそうだなぁ」と分かっていたのですが、パソコンでソフトをいちいち立ち上げるのが面倒です。ボタン一つで操作できる機械を捜しいて、見つけたのがこれ。デンマーク tangent社の quattro mk2 という製品です。
製品の紹介はここにあります。
インタネットラジオとしての機能の他に、FMラジオ、共有フォルダーのコンテンツの再生、メディアプレーヤ連携などの機能がありますが、FMラジオは海外向けにチューニングされているので、日本では使えないし、共有コンテンツの再生、メディアプレーヤ連携はわざわざラジオのボタンとダイアルで操作することはないので、結局インタネットラジオとして使うことになります。あと、Recivaサイトを使った my stuff という機能がありますが、とても便利です。favouriteとして活用できます。
このラジオ、登録されているラジオ局は15000位あり、凄い数です。更に、希望の局を上記の Reciva サイトで追加できますので、インタネットに繋がっているラジオ局なら何でも聴けます。
大変なのは好みの局の捜し方。何しろ膨大な数があるで、ラジオのボタンだけでというのは無理だと思います。お勧めは上記の専用サイトに行って、普通にブラウザを使って、お好みの局を捜す方法。気に入ったやつを my station というサイトの機能があるで、これで登録する。あとは my stuff が選択されていれば、ラジオ側でボタン(back)一つとチューニングダイアルで選局できます。
頻繁に選ぶ局はプリセットボタンに登録することができます。選局して、ボタンの長押しだけで登録できるので、便利なのですが、プリセットボタンの数は6つ。ちょっと足らないなぁ。まあ my stuff 機能と組み合わせれば、なんとかなりますが。
音質は落ち着いたクラシック向きのものでとてもいいです。ただしモノラル。写真の天板のネットの部分がスピーカです。口径 7.5cm、80-20000Hzだそうです。AuxIn と AuxOut があるので、パソコンの出力をこっちにつないで、AuxOut をオーディオ装置に繋いだらどうかなと思っています。
(internet) 2009/05/12
「三善晃の音楽」
発売は昨年ですが、2003年と2004年の3回の演奏会をCD3枚に収録したライブ録音です。去年購入したCDで最も感心したもの。
2004年の演奏会が2008年にCD化された経緯については井阪紘氏のプロデューサノートに詳述されています。井阪氏は2000年のサントリー音楽賞受賞の記念演奏会(秋山和慶指揮)をCD化しようと録音していたが、デジタル録音嫌いの作曲家のOKが出ないので中断。2007年になって、「こちらの2003年-2004年沼尻指揮の演奏会を使って」という作曲家の希望で、ようやくCD化のOKが出たということのようです。
このエピソード、興味深かったですね。謎がとけた。
三善さんの作品、もっとCD化されて不思議はないと思っていたのですが、理由は作曲家のデジタル音嫌いが理由であったのですか。確かに、LP時代には全集もでていて、結構いろいろな曲がLPで聴けたのに、1980年位からメイジャーな作品がさっぱりCD録音で聴けなくなってしまった。
という次第で久しぶりに三善さんの作品をまとめて聴くことができました。もっとも、とてもこういう集中力の強い音楽作品を一度に聴けるような体力はないので、何日かにわけて聴きました。
収録曲はCD1(2003/3/20の演奏会) 祝典序曲(1970)、ヴァイオリン協奏曲(1965)、ピアノ協奏曲(1962)、チェロ協奏曲第2番「谺つり星」(1996)。
CD2(2004/3/25の演奏会) 夏の散乱(1995)、レオス(1976)、魁響の譜(1991)、響紋(1996)。
CD3(2004/10/14の演奏会) 焉歌・波摘み(1998)、ソプラノと管弦楽のための「決闘」(1964)、レクイエム(1971)。
演奏はすべて沼尻竜典, 東京フィルハーモニー交響楽団。
演奏は作曲家が指定してOKを出しただけあって、何れも三善晃の音楽を特徴付ける緊張感と怖さにあふれるもので、素晴らしい。上記作品の中で一番能天気な「祝典序曲」でも十分な迫力ですね。「響紋」などは、作者のいう「後ろの正面の鬼=こんど死ぬのは誰」という感じがよく出ています。「夏の散乱」、「焉歌・波摘み」なんかもこんなに恨みと怒りだらけの怖い音楽だったとは。
CD1は初期の古典的作品が中心なので、比較的落ち着いて聴けますが、それでも三善さんの特徴は十分出てて、ところどころに激しい表現の世界があります。
初期の祝典序曲(1970)、ヴァイオリン協奏曲(1965)、ピアノ協奏曲(1962)、ソプラノと管弦楽のための「決闘」(1964)は1970年頃のLPの選集と重複して録音されています。このころの他のオーケストラ作品もあるのだけど、今回もこの4曲を選んだということは作者としての自信作ということなのですかね。
この中で、ソプラノと管弦楽のための「決闘」はその後のレクイエム、響紋を通って、90年代の一連の情念の作品を先取りするものだと改めて思いました。久しぶりに聞き直しましたが、表出力の強い凄い作品ですね。
CD2の「魁響の譜」につけられた三善さんのコメントは面白い。
「ポストモダンという言い方で起こっているある種の回帰現象、つまり、ドミソとかペタントニックとか、そういう小さなアイデンティティに戻ることに反対したい。1960年代に拡大されたあらゆる技法や理論は拡散してしまったけど、やはり今、歴史の延長としてそれを踏まえなければならない、そこから先に行くために個々の語法や理論が問われています。今回の作品において、私の語法の論理を使い切ったと思います。」
「その通りだなぁ」と思いました。
合唱三部作の「詩篇」とオーケストラ四部作の「霧の果実」が取り上げられなかったのは作曲者の判断なのですかね。確かに他のニ作なり三作と比較すれば、ちょっと弱いのかもしれないけど、残念。
(review) 2009/05/05
Rubyでマンデルブロ図形を描く(3)
主に参考にしたサイトは以下の通りです。
- Rubyで図形表示させるためのライブラリの選択
- Ruby de GUI
2004年9月とちょっと古い記事ですが、Rubyで図形表示させるためのいろいろなライブラリについての比較評価記事です。どれがいいか思案しましたが、最終的に、サポート情報の量、メンテナンス状況、GUI ビルダの有無、使いやすさ などを考慮しGtk2にしました。
GTK2については下記のチュートリアルがあります。
Ruby/GTK2 チュートリアル
このサイトの説明はとてもよく出来ていますね。わかりやすい。
GTK2のシグナルとコールバックの仕組みについては、その他のGUIライブラリなどと同じ考え方なので、経験があれば違和感なく使えると思います。 - マンデルブロ計算
- まつもと直伝 プログラミングのオキテ 第18回 プログラムを高速化する(その2)
Rubyの制作者まつもとさんがコンソールにマンデルブロ図形を表示させるプログラムを例題にして、Ruby高速化の実例付きで丁寧に解説しています。大変参考になりました。結局、ここの情報をもとにNArrayを使うことにしました。
プログラムの頭の def mandel() から $mandel_i = mandel() までは、最初、上記リンク先のコードを借用してRubyで直接計算させていました。
def mandel(cr, ci, limit) iterations=0 zr = zi = 0.0 while iterations<limit and Math.sqrt(zr**2+zi**2)<10 zr, zi = zr*zr-zi*zi+cr, zr*zi+zi*zr+ci iterations+=1 end return iterations end def mandel_set(c1, c2, i0) cur_r = c1 - (Width/2)*i0 Width.times { cur_i = c2 + (Height/2)*i0 Height.times { $mandel_i << mandel(cur_r, cur_i, 36) cur_i -= i0 } cur_r += i0 } end $c1, $c2, $i0 = PointX, PointY, Interval $c1, $c2, $i0 = ARGV[0].to_f, ARGV[1].to_f, ARGV[2].to_f if ARGV[2] != nil mandel_set($c1, $c2, $i0)
これだと90000個のiterations処理時間がが約10秒位かかります。
あっちこっち移動して拡大を繰り返すという使い方には「ちょっと厳しいなぁ」という感想。まつもとさんの情報を参考にして、NArrayを使うことにしました。
NArrayのサイトは
Numerical Ruby NArray
マンデルブロ演算のデモ用のサンプルもあります。
コードはチンプンカンプン。意味はよくわからないのですが、とりあえず、そのまま頂戴して、呼び出してみる。驚きましたね。計算に1秒かからない。
ちなみに、まつもとさんのチューニング前の複素数をそのまま使ったコードだと、90000個の処理時間約20秒です。10数年前、CakewalkのCALでマンデルブロ音楽の試行をしていたころ、数千個の計算に1時間位かかっていたことを思い出しました。パソコンの性能比(数100倍以上あるはず)を考えるといい勝負かもしれませんね。
(computer) 2009/05/03
Rubyでマンデルブロ図形を描く(2)
require 'narray' require 'gtk2'
このスクリプトは、上記の冒頭の2行でお分かりのように、NArrayとGTK2を利用しています。NArrayは数値配列の高速演算用ライブラリでマンデルブロ集合の計算用に、GTK2はグラフィック用ライブラリでマンデルブロ図形の表示用に使っています。
本題に入る前に二つのライブラリのWindows環境(mswin32)でのインストール方法。
- GTK2
- 詳しい説明がインストールガイド Windows編(Ruby-1.8.0/MinGW32)にあります。 僕の環境は ActiveScriptRuby 1.8.7 を導入済なので、「その二」だけ実行(GTK2 Runtime = ON、Register Environment Variables = OFF、Choose the install directory = c:\ruby)。問題なくインストールできました。簡単でした。
- NArray
- NArrayのトップページにLinux用のソースとWindows(mswin32)用のバイナリがあります。Linux環境では narray-0.5.9p6.tar.gz を解凍してreadmeの通りインストールすればよいようですが、高速化のためバイナリをconfigureしないといけないので、そのままではwindowsでは使えません。
代わりに、Windows(mswin32)用のバイナリ(narray-0.5.9-i386-mswin32-1.8.zip)があり、mswin32用にオブジェクトをコンパイル済ですので、これをダウンロードし、解凍されたフォルダー通り(c:\ruby\lib\ruby\site_ruby\1.8とc:\ruby\lib\ruby\site_ruby\1.8\i386-msvcrt)にコピーするだけです。このあたり、マニュアルにはいっさい記述がないので(readmeはlinux用のものが入っているだけ)、要注意です(まあ解凍すればわかりますが)。
(computer) 2009/04/26
Rubyでマンデルブロ図形を描く(1)
タイトルの通りですが、シンプルにコーディングできますね。拡大、縮小、中心の移動はキーとマウスクリック一発でできるようにして、100行ちょっとです。問題は処理時間。こちらは悪戦苦闘しました。以下、備忘録用に何回かにわけて解説します。とりあえず、ソースコードを提示。
# 操作方法は画面上でクリックするとそこに移動。uキーで拡大。dキーで縮小、escで終了です。 # 引数を使って起動させることができますが、上記の移動拡大縮小用なので使うことはないでしょう。 require 'narray' require 'gtk2' Width = 400; Height = 400; PointX = -0.65; PointY = -0.5; Zoom = 3.5 ZeroX = -0.4792246; ZeroY = -0.515 $x, $y, $x_start, $x_stop, $y_start, $y_stop, $zoom = 0.0 $iter=37 $xpm = ["400 400 37 2", \ "00 c #000000", "01 c #100000", "02 c #200000", "03 c #300000", "04 c #400000", "05 c #480000", \ "06 c #500000", "07 c #580000", "08 c #600000", "09 c #680000", "10 c #700000", "11 c #780000", \ "12 c #800000", "13 c #860000", "14 c #8c0000", "15 c #920000", "16 c #980000", "17 c #9e0000", \ "18 c #a40000", "19 c #aa0000", "20 c #b00000", "21 c #b60000", "22 c #bb0000", "23 c #be0000", \ "24 c #c30000", "25 c #c80000", "26 c #cd0000", "27 c #d20000", "28 c #d70000", "29 c #dc0000", \ "30 c #e10000", "31 c #e60000", "32 c #eb0000", "33 c #f00000", "34 c #f50000", "35 c #fa0000", \ "36 c #ff0000"] def mandel() z = (NArray.scomplex(Width,1).indgen!/Width + $x)*$zoom + (NArray.scomplex(1,Height).indgen!/Height + $y)*($zoom*1.im) $x_start, $y_start, $x_stop, $y_stop, $c_real, $c_image = z[0, 0].real, z[0, 0].imag, z[Width-1, Height-1].real, z[Width-1, Height-1].imag, z[Width/2, Height/2].real, z[Width/2, Height/2].imag c = z.dup a = NArray.sint(Height,Width) idx = NArray.int(Height,Width).indgen! for i in 1..$iter z = z**2+c idx_t,idx_f = (z.abs>2).where2 a[idx[idx_t]] = i break if idx_f.size==0 idx = idx[idx_f] z = z[idx_f] c = c[idx_f] end a end $x, $y, $zoom = PointX, PointY, Zoom $x, $y, $zoom = ARGV[0].to_f, ARGV[1].to_f, ARGV[2].to_f if ARGV[2] != nil $mandel_i = mandel() print "center real=#{$c_real} image=#{$c_image} length=#{$x_stop-$x_start} zoom=#{$zoom.to_s}\n" Height.times {|i| c = "" Width.times{|j| c += sprintf("%02d", $mandel_i[j, i]) } $xpm << c } window = Gtk::Window.new window.set_size_request(Width, Height) window.set_app_paintable(true) window.realize drawable = window.window pix, mask = Gdk::Pixmap.create_from_xpm_d(drawable, nil, $xpm) gc = Gdk::GC.new(drawable) keymap = Gdk::Keymap.default window.set_events(Gdk::Event::KEY_PRESS_MASK) window.add_events(Gdk::Event::BUTTON_PRESS_MASK) window.signal_connect("expose_event") do drawable.draw_drawable(gc, pix, 0, 0, 0, 0, -1, -1) end window.signal_connect("key_press_event") do |w, e| if e.keyval == Gdk::Keyval::GDK_u $zoom = $zoom*0.5 $x = ZeroX + ($x - ZeroX)*2 $y = ZeroY + ($y - ZeroY)*2 end if e.keyval == Gdk::Keyval::GDK_d $zoom = $zoom*2 $x = ZeroX + ($x - ZeroX)*0.5 $y = ZeroY + ($y - ZeroY)*0.5 end $loop = 1 Gtk.main_quit end window.signal_connect("button_press_event") do |w, e| $x = $x + ((($x_start - $x_stop).abs / Width) * (e.x - Width/2)) / $zoom $y = $y + ((($y_start - $y_stop).abs / Height) * (e.y - Height/2)) / $zoom $loop = 1 Gtk.main_quit end window.signal_connect('delete_event') do false end window.signal_connect("destroy") do puts "destroy event occurred" Gtk.main_quit end $loop = 0 window.show_all Gtk.main if $loop==1 window.hide system("ruby np_mandel.rb #{$x.to_s} #{$y.to_s} #{$zoom.to_s}") end
(computer) 2009/04/22
maruku(8)
直前の記事、タグの処理に悪戦苦闘しました。
問題点(?)は二つあって maruku側とhtml側の解釈の仕様。
まず maruku側ですけど
<pre>タグの中のコードは maruku に解釈させないよう直前の記事の通り pre_bufに退避したのだけど、本文の中にある<pre>タグはだめですね。\<でエスケープできると思ったのですが、どうもダメみたい。しょうがないので、本文中の < を < に変えて、回避しました。
次にhtml側ですが
<pre>タグ内にある<pre>とか<p>をを解釈しちゃうのですね。
これも全部、 < を < に変えて、回避しています。
うーむ疲れるなぁ(^^;;;。
(computer) 2009/04/16
maruku(7)
<pre>タグも、引用文に「_」、「*」、「[」、「]」などがあるとエラーになりますね。
これらの文字はCやrubyのコーディングで日常的に使うので、厳しいなぁ。
しょうがないので、変換用のスクリプリトで対応することにしました。
mdファイルを doc 読み出した直後に
doc = doc.gsub(/(<pre>\n.+?<\/pre>\n)/m) {|m| # preタグは自前で処理 pre_buf << $1 "\n\n(pre)\n\n" }
として、<pre>..</pre>部分を退避。docをdataにmaruku変換後に
data = data.gsub(/<p>\(pre\)<\/p>/m) {pre_buf.shift} # preタグの戻し
としてもとに戻すという方法で簡単に回避できました。この記事もそのスクリプトを使って変換しています。
こうなるとBlueStoleの<HTML>….</HTML>機能も実装させた方がいいかしら。
(computer) 2009/04/15
「オープンソースでメシが食えるか」
刺激的なダイトルですが、内容はオープンソースソフトウェア(以下、OSS)を使ったシステムの計画、開発、運用、保守などに関する真面目な記述の本です。著者(恒川裕康)は1990年代はじめから、オープン系のシステム構築に係わってきたエンジニア。
この手の本、オープン開発のエヴァンジェリストか、半可通のITジャーナリストが著者のものが大部分で、前者は「艱難辛苦、なにがなんでもオープンソース、耐えがたきを耐え、忍びがたきを忍んで、オープン開発」という調子だし、後者は「ただただキーワードがならんで、上っ面の解説だけ。いったい何がいいたいの」という感じ。最後まで読み通せる本は少ないのですが、この本は例外です。著者の経験がものをいって、オープン開発の現場で使える内容にだと思います。
著者の意見をまとめると
- OSSは善意、需要適合、陳腐化、早期公開、OSS優先、協調、部品といった原則(パラダイム)で 開発されていて、このパラダイムを理解して計画、開発、運用、保守を行う必要がある。
- そして、これらのパラダイムの根底にある思想はOSSが自由(free)なものであること。 英語のfreeには無料という意味があって、日本ではしばしばタダのソフトという点のみが強調されるが、 自由なソフトという点を理解しないとOSSの強みを活かせない。
- しばしばOSSは品質が低いとか、機能が不十分とか、保守が出来ないとか、セキュリテティが甘いとか いわれることがあるが、それはこの自由なソフトという思想とそれに伴うパラダイムを理解しないで 表面的な見方をした誤解である。
- 正しい情報を入手し、OSSの特質を理解した選択をすれば、品質、性能、保守、セキュリティなどの問題は 解決できるし、OSSの方が一般のソフトウェアより利点は多い。
- 技術力をもつこと、英語がぎること、自分でやること、標準を押さえること、しっかり計画すること、 どう組み合わせる(インテグレーションする)かよく考えること、記録を残すこと、基本的なもので試してから 現場に応用すること、人に頼む時は相手を正しく選ぶこと、などか実際にシステム構築する時重要になる。
というところですかね。共感しました。記述は以上の内容を具体的、実践的に展開しているので、わかりやすいです。
ところで、この本に「設定の記録を忘れない」という章があり、インストールの設定記録を書き物で残すことの重要性を強調しています。直前のソフトの移行の記事でアプリケーションのヴァージョンとかパッチレベルをしつこく書いたのですが、これって、結果的に設定記録を残したことになるなぁと安心しました。
(review) 2009/04/12
maruku(6)
どうせだから、記事関連以外のページもmarukuに移行しようとして気が付きましたが、クリプティカルマップのHTMLがあるとエラーになりますね。「マンデルブロ組曲 第1」と「マンデルブロ組曲 第2」のページで使っています。
いろいろやってみましたが回避方法はなさそうなので、この二つのページについてはBlueStole
機能を使うことにしました。二種類のスクリプトが混在することに抵抗感はあるけど BlueCloth + BlueStole 側はこれ以上更新することはないだろうから、よしとしました。
(computer) 2009/04/08
ハゲコウ
って、禿コウノトリの略称なのでしょうね、多分。しかし、あんまりな名前のつけ方だなぁ。ハゲタカとかハゲワシはまあ仕方がないとして、「ハゲコウ」とはね。コウノトリに失礼でないか。きっと、千葉動物公園の「ハゲコウ」もそれに怒って、話題にしようと、逃げ出したのでしょうね。なのに、名前にふれた記事がないのはなんでだろうか。
# しかし写真をみると「ハゲコウ」という名前に相応しい面構えですね(^^;;;。
(others) 2009/04/05
「時の終わりへ」メシアンカルテットの物語
メシアンの「世の終わりの四重奏曲」の作曲、初演の経緯を調査、記録したドキュメンタタリー(というのかな)作品。著者のレベッカ・リシンはアメリカのクラリネット奏者で研究家。
昨年読んだ音楽書の中で、ベストスリーの一つ(残り二つは片山杜秀の「音盤考現学」と「音盤博物誌」)。
この曲が第二次世界大戦中にベルギーの捕虜収容所で初演されたことは有名ですが、その経緯について書かれた記録はメシアン自身による作品の紹介位しかなかった。こういう変わった編成の現代曲が捕虜収容所で作曲、初演されたとは不思議だなと思っていました。謎は以下の通り。
- 捕虜収容所で何故この曲が誕生したの ?
- 何で曲の編成はピアノ、ヴァイオリン、クラリネット、チェロなの ?
- 捕虜収容所で楽器をどう調達したの ?
- どこで練習したの ?
- 演奏の難しそうな曲だけど、どうやって練習したの ?
- 演奏会の案内はどうやったの ?
- 演奏した場所、観客はどこに集まったの ?
- 初演したメンバーのその後は ?
この本はこれらの謎をきれいに解いてくれます。
さらに、何故こういう逸話がいままで封印されていたのか。メシアンの捕虜収容所時代の思い出したくない思い出に関する興味深い示唆があります。
へたな探偵小説よりよほどよく出来ている音楽版ノンフィクションドキュメタリー作品でした。
P.S. 「時の終わり」という訳は訳者の意図的な選択です。この曲の「世の終わりのための」という題名は適切でないと(表層的な意味に誤解される)いうのが訳者の主張で、「メシアンがいう「la fin du Temps」とは哲学的な時間も、音楽的な時間も存在しない、あらゆる拘束から放たれた無限の時・空間を意味する」から「時」という言葉をつかうべきだ。また、「pour」はこの結果、「のために」というより「へ」が適切ということです。
これも「なるほどなぁ」でした。
(review) 2009/03/29
maruku(5)
マークダウン文書のエラーチェックは結構厳密です。 「\」、「_」、「*」、「#」、「[」、「]」、「:」、「.」(これが一番よく忘れてトラブル^^;;;)など、マークダウン文書で意味を持つ文字は「\」でエスケープしないと、膨大なエラーメッセージが表示されることになります。 あと、よく理由はわからないのですが、^:\t@の組み合わせもエラーになりますね。
(computer) 2009/03/25
maruku(4)
maruku(2)に書いたように、PHP拡張の部分は maruku と BlueStole で非互換です。せっかくだからmarukuのテーブル作成機能を使って、表にしてみます。
機能 | maruku | BlueStole |
---|---|---|
テーブル | |と-と+で指定。この表 *1 | |と,で指定 マークダウンの書き方[BlueStoleの機能](3) |
脚注 | [^foot] | (*foot) |
HTML表記 | そのまま記述 *2 | <HTML>..</HTML> |
HeaderID | 指定可能 | 指定不可能(自動のみ) |
定義リスト | 定義:\nタブ + 定義文 | 定義\n:タブ + 定義文 |
略語表記 | あり | なし |
*1: テーブルの線は自作スクリプリトで border を無理やり指定して、表示させています。
*2: HTMLブロック内のマークダウン表記も可能
なぜか脚注がきかない。変だなぁ。
(computer) 2009/03/22
maruku(3)
「なんだ、最初からこちらにすればよかったなぁ」という感想です。
「このサイトの作り方(1)」の追加機能の半分位は実装しているし、追加もこのページの記述によれば、簡単にできそうです。
新規にやるのだったら、marukuがお勧めです。
(computer) 2009/03/21
maruku(2)
以前「maruku」で紹介したように、marukuはrubyのmarkdownライブラリです。BlueClothと比較すると、更新が頻繁(BlueClothは2005年以降更新されていない)とか、バグが少ないなどの理由で、今ではこっちの方がお勧めのようなので、BlueCloth + BlueStoleから maruku に移行しました。maruku について日本語で書かれているサイトはこことかここにあります。以下、左記サイトと多少重複しますが、ReadeMeに基づき、自分のメモ用に簡単に紹介します(抄訳です)。
開発について
Marukuは今のところ Andrea Censi によって開発されている。
Marukuという名前はMarkDownのMarkの部分のローマ字の当て字(transliteration)。この名前を選んだ理由はRubyが日本発で、Maruku の ru は ruby の ru と重なっているから。
Marukuはまあまあ安定していると思いますが、まだベータヴァージョンなので、まめに最新版をチェックすること。注文とかバグレポートは Markdown-discuss mailing list にどうぞ。
開発サイトはhttp://rubyforge.org/projects/maruku/。
インストールの仕方
gem install maruku
基本的な使い方
require ‘rubygems’
require ‘maruku’
doc = Maruku.new(markdown_string) puts\ doc.to_html
to_htmlメソッドは HTML の出力のみ行う。to_html_documentメソッドは XHTML 1.0 の出力を行う。 to_html_document_tree で REXML document tree の出力を行う。
コマンドライン起動
コマンドラインからの使い方については僕は使わないので、省略。上記サイトを参照して下さい。
BlueCloth との比較
Maruku は設計思想で Bluecloth と大きく違う。最も大きな違いは構文解釈とHTMLへの展開を分離していること。Maruku はマークダウン文書をメモリに仮想化した命令として処理しているけど、Bluecloth は文字列のまま文書を処理するので、処理速度に違いが出る。Bluecloth は小さな文書では速いけど、大きな文書では maruku の方が速い(Rubyの正規表現の解釈の仕方のせいだともいえるけど)。
以下はマークダウン仕様の標準的な文書でのベンチマーク(Ruby 1.8.5 Powerbook 1.5GhZで実行)
BlueCloth (to_html): parsing 0.01 sec + rendering 1.87 sec = 1.88 sec (1.00x)
Maruku (to_html): parsing 0.66 sec + rendering 0.43 sec = 1.09 sec (1.73x)
Maruku (to_latex): parsing 0.67 sec + rendering 0.23 sec = 0.90 sec (2.10x)
Maruku の方が機能は豊富なので、チェックするパターンが多くなるのに、上記の結果になる。
独自の拡張
以下のフォーマットでTitleとCSSを指定できる。 大文字と小文字を区別するので注意すること。
Title: A simple document containing meta-headers
CSS: style.css
(自作のスクリプトで対応しているので、使っていませんが、これ便利かもしれませんね)
この他にいろいろあって、例えば
などあります。
PHP Markdown Extra の構文例
このページ(maruku)かこのページ(php)を参照して下さい。BlueStoleによる拡張とだいたい同じことができます(非互換ですが)。
(computer) 2009/03/18
サーバー
といっても、ネットワークじゃなくて、焼酎の。 娘からの誕生祝いです。
まあ、この年になると誕生日もあまりメデタクないですが、これはいいですね。
とりあえず、机の上においてどう使うか考えることとしました。
この状態で焼酎を入れると、机の前、飲んだくれて、パソコンで遊ぶということになりそうだなぁ。
(others) 2009/03/14
iframeの外側にマージンを入れる
直前の記事「地球はマルイぜ」でamazonのアフィリエートを挿入したのですが、悪戦苦闘しました。
何に苦労したかというとiframeの外側にマージンを入れる方法。
iframeタグそのものはamazonで自動生成してくれるので、そのままマークダウン文書に貼り付ければいいので、簡単でした。説明文を iframe の左右にに置くのも align=“right/left” を指定すればいいだけだから、問題なし。
悪戦苦闘したのは、iframeの外側にマージンを入れる方法。ググっても、CSSを使う方法の説明はあるのだけどbody内に直接書く方法の例がないのすよね。amazonの吐き出したタグの「style=」の中に「margin:10px 10px 10px 10px;」と追記すればいい(ピクセルの指定は上右下左の順)ということを発見するのに2時間ほどかかりました(^^;;;。
(internet) 2009/03/10
「地球はマルイぜ」
林美智子が歌った武満徹の歌曲集(ソングといった方がいいのかな)。
小さな空(1962)、恋のかくれんぼ(1961)、昨日のしみ(1995)、小さな部屋で(1955)、うたうだけ(1958)、見えないこども(1963)、ぽつねん(1995)、雲に向かって起つ(1963)、ワルツ(1966)、三月のうた(1965)、○と△の歌(1961)、明日ハ晴レカナ、曇リカナ(1985)、雪(1963)、島へ(1983)、翼(1982)、燃える秋(1978)、素晴らしい悪女(1963)、さようなら(1954)、死んだ男の残したものは(1965)、めぐり逢い(1968)、MI・YO・TA(1996 ? ) の全21曲。
小学館の全集(第5巻)で調べたら、このCDに収録された21曲で武満の全歌曲(ソング)ということになるみたいですね。
伴奏部分は、「うたうだけ」と「燃える秋」を除き(この二曲は武満自身のピアノ伴奏譜を使っています)、新規の編曲で担当しているのが、野平一郎と野平多美。
( ) 内は作曲年ですが、年代別にならべてみるとなかなか面白い。1950年代 3曲、60年代 11曲、70年代 1曲、80年代 3曲、90年代 2曲となります(「MI・YO・TA」は没後に復元されたものなので、のぞく)。映画やテレビ用に書いた曲が中心だから、60年代のものが過半数ということになるわけですかね。しかし、この時代、オーケストラや室内楽作品では武満の作風がもっとも前衛的だった時代だから、こういう曲を作って憂さ晴らししていた。70年代以降は軟弱な作風に変化してくるから、甘いポップソングで憂さ晴らしする必要がなくなり曲数は激減、 という仮説は成り立ちませんかね(^^;;;。
演奏はいわゆるクラシック風の歌唱ですが、とても素晴らしい。特に「うたうだけ」、「○と△の歌」、「ワルツ」、「燃える秋」、「素晴らしい悪女」などのポューラ系の歌がクラシック風に徹底して歌われているのは痛快でした。編曲はピアノ、ギター、弦楽伴奏など曲に合わせてさまざま。野平一郎が担当している「死んだ男の残したものは」の伴奏は相当アグレッシブだったので、ちょっとビックリ。まあ、よく知られている曲だから、思いっきりやれることをやってみようということなのでしょうね。
武満の歌曲集の楽譜です。
上記全曲中、「MI・YO・TA」以外の20曲が入っています。
装丁がとても凝っていて眺めているだけで楽しい本です。
この楽譜眺めて、これを楽譜通りクラシック風に歌ったらどうなるの思っていたのですよね。