Digitalians' Alchemy Top Page

 Digitalians' Alchemy は Mac の話題、プログラミングの話題、
音楽/DTM/MIDI の話題、けみかるな話題、その他を扱う個人的なページです。

[最新の日記] このページ。
[過去の日記] 昔の日記一覧(1ヶ月ごと), 今月分 (2008 年 07 月)
[自作/移植ソフト] おえかきちょう … 子ども向けお絵描きソフト
CocoaRsync … バックアップツール
Alchemusica … MIDIシーケンサ
iLame, STed2, 3DMixer, MidiPolish for Classic MacOS
[Mac OS X 小ネタ集] Mac OS X の使用感、UNIX 系ツールの備忘録など
[ソフト開発小ネタ集] Mac OS X ソフト開発の小ネタの備忘録。
[音楽関係] 譜面作成ソフト Lilypond Tips
LinuxSampler を OS X で使う

あるけみすとの居る風景

2008/07/25(金)

 7/1 に書いた組み込み Ruby とキースキャンの件のつづき。手元の PowerBook G4 (10.4) では一応動いているのに、MacBook (10.5) に持って行くと落ちまくって使い物にならない。いろいろ調べて気がついたこと(全部が今回のバグに関係あるとは限らない):

 解決案として、Thread.new で監視用スレッドを作るのと、実際にスクリプトを走らせるのを、同じ Objective-C 関数の中からやるようにしてみた。これなら、Ruby 側でコンテキストが切り替わっても、Objective-C に関係するスタックの中身は変わらないだろう、という読み。これでダメだったら rb_add_event_hook() を使うしかないかなあ。

2008/07/21(月)

 またワミーで遊んでみた。

星形ワミー・ボール1
これも正十二面体だが、頂点をとんがらせてみた。できあがってしまえばきれいに対称形になるのだが、途中段階ではパーツがこの形に曲がったままではいてくれないので、制作はかなり難しい。

正四面体
今度は正四面体。少し趣向を変えて、頂点に集まるパーツの色を揃えてある。この方がきれいかな。

正四面体×2 正四面体×2
一つ前の正四面体を2つ互いに貫通させて組み合わせると、立方体になる。左は3回軸の方向から見た図、右は面の法線方向から見た図。

Boy's surface 1
前回はクラインのびんを作ったので、今回は頑張って射影平面に挑戦。射影平面を3次元に埋め込むやり方はいくつもあるのだが、Boy's surface(Wikipedia 英語版Mathematisches Forschungsinstitut Oberwolfach)が一番気に入ったので、これを目標にしてみた。残念ながら全然そうは見えないところが悲しい。一応トポロジーは正しい(と思う)し、3回対称も実現できたのだが。

Boy's surface 2
横から見た図。射影平面は円盤とメビウスの帯を貼り合わせた閉曲面だが、図の下半分が円盤、上半分がメビウスの帯になっている。

Boy's surface 3
上半分は、3枚の帯を半回転ひねったものを貼り合わせて作ってある(それで3回対称になる)。そのうちの一枚について、ひねった部分を拡大した写真。

Boy's surface 4
射影平面の3次元埋め込みには欠かせない(?)、面の自己交差の部分。

 まあ、ワミーで Boy's surface を作るというのは世界初の試みでしょうな(ちなみに、レゴで制作した例はある)。今回作ったのは上半分がどうもチンチクリンで見栄えがよろしくないので、後日改良版を制作する予定。

2008/07/20(日)

 ヒメ、坊の幼稚園の学芸会。年長のヒメは、3つのクラスが合同で演し物をするのだが、今までヒメに聞いてもどんな内容なのかさっぱり要領を得なかった。要領を得ないのも道理で、総計40分にもわたって内容に乏しい踊りがひたすら脈絡無く並ぶというとんでもない演目だった。「地球をみんなで守ろう」的なタイトルがつけられていてメッセージ性を織り込もうとした形跡があるのだが、これだけ内容が支離滅裂では何も伝わりようがない。去年、一昨年の演し物はテレビアニメの歌に振り付けをした踊りで、いかにも幼稚園児らしくかわいく楽しげだったのに、いったいあなた方はどこに行こうとしているのでしょうか。もっとも、ヒメは(他の園児たちも)そんな中でもそれなりに楽しげに自分の役割を果たしてはいた。こんな幼少時からかくも意味不明の企画に強制的に参加させるとは、なんとも嘆かわしい「教育的配慮」である。一方、年少の坊は「ドラえもん」メドレーの踊りで、こちらはまあまあ普通だった。ステージの上で泣き出したり「ばぶ」して寝転がったりということもなかったので、ひとまず安心。

2008/07/18(金)

 野茂投手引退ですか! うーむ、ついにこの日が来てしまったか。実は、野茂が一番活躍していた時期は僕がテレビも見ず外出もほとんどしていなかった時期と重なっているので、実際に投げているところは映像ですらほとんど見たことがないのだが、それでも僕にとっては最大のヒーローの一人だった。ちょうどアメリカに滞在した年が野茂のドジャースでの最初のシーズンで、周りのアメリカ人たちが驚きの目を見張って野茂を賞賛していたのが、それ以前からのファンとして無性に嬉しかったものだった。9月にロッキーズ戦でノーヒットノーランを達成した時、両親に「あの試合見に行ってなかったのか?」なんて言われたのだが、確かにコロラド州に住んでたわけだから野茂の登板予定に合わせてドジャース戦を見に行くぐらいのことはやるべきだったと今でも思ってるけど、なんかめんどくさくってねえ。まあファンとは言ってもこの程度のへたれファンだったわけだが。

 近鉄バファローズの新人として、最初に取ったアウトが清原からだったというのは、今回の関連報道を見て初めて知った(無死満塁で三振を奪った)。野茂対清原というのは「平成の名勝負」と言われているそうで、ふーんそうだったんだ。僕はライオンズ時代の清原は(も)あんまり記憶に残ってなくて、デストラーデの方がよほど印象に残っているんだけどな。ちなみに、メジャーリーグでの最初のアウトも三振なんですね。さすがはドクターKだな。

 大石大二郎(オリックスバファローズ監督代行)のコメントがすこぶる正直。「三振か四球という投手だったので、野手としては守りづらかった。」いやまあそりゃそうだろうけど、みんな今日だけはそれは言わないでおこうと思ってた(だろう)のに。さすがオールスターで江川の9連続三振をぼてぼての二塁ゴロで阻止しただけのことはある。野茂が独立独歩なら大石も独立独歩。なんかバファローズ応援したくなってきたよ。いや一応ファンなんですけど、何しろへたれファンなもんで。

2008/07/07(月)

 アイ・オー・データの HDP-U250S(K) を購入。仕事場の MacBook の TimeMachine バックアップ用。60 GB のハードディスクを使っていたのだが、1日分のバックアップしか保持できず、これでは TimeMachine の意味がない、ということで、奮発してみた。説明書が丁寧で(Win 用と Mac 用がそれぞれ別々に入っていて、Mac 用の方には Mac OS 9 での使い方まで書いてある)、使いもしない Windows 専用の余分なユーティリティもほとんどついてこないし、なかなかよろしい。アマゾンで購入したのだが、なぜかシルバーの方が値段が高く、しかも在庫切れだったため、白の MacBook に黒の DP-U250 ということになってしまった。まあ、特に気にするほどのことではない。

2008/07/06(日)

 ワミーでいろいろ遊んでおります。ヒメは小さなアクセサリみたいなのを熱心に作っている。僕はこういうやつ専門。

ワミー・ボール1
素直な正二十面体。色が5色あるので、全部の頂点を同じ配色にしようと思ったのだが、どうやら不可能みたい。白−赤−緑−青−黄と、白−黄−緑−赤−青の二種類を交互に置いてある。

ワミー・ボール2
ちょっとひねった正二十面体。頂点のところを編み合わせてある。

ワミー・ボール3
同じく正十二面体。

ワミー・クラインびん
クラインのびん(リンクは Wikipedia)。写真ではわかりにくいが、青・黄・緑の部分が本体で、赤・白でできた管が貫通している。

2008/07/01(火)

 引き続き(っていつの「続き」だ?)、Ruby の組み込みに奮闘中。いろいろわかってきた。

 これまでのところで一番厄介だったのは、スクリプトを command-ピリオドで止める処理。Cocoa アプリのキー入力はすべて run loop で処理されるが、スクリプト実行中は run loop が走っていないため、うっかり while 1; end みたいなスクリプトを実行してしまうと止める方法がなくなる。

 自前でキースキャンをやるには NSApplicationnextEventMatchingMask:untilDate:inMode:dequeue: メソッドを使えばよいのだが、これをどこから呼び出すかが問題。最初、Ruby の set_trace_func 機能を使ってみたのだが、スクリプトの速度低下があまりにも激しかった。1.8.6 なら C レベルで rb_set_event_hook() というのが使えるのだが、Mac OS 10.4 の Ruby は 1.8.2 なのでだめ。

 いろいろ試行錯誤した末、Ruby の Thread クラスを使うことにした。Cocoa アプリからスクリプトを実行する前に、Thread.new { while 1; sleep 1; Thread.main.raise Interrupt if check_interrupt > 0; end } という風にキー監視用のスレッドを走らせておく(check_interrupt はキー入力をチェックして、command-ピリオドなら 1 を返す関数)。Thread.main.raise がポイント。

 ここで注意すべきは、Cocoa はデフォルトではマルチスレッド対応になっていないこと。このため、Ruby の Thread を使う前に、NSThread を使って1回ダミーのスレッドを立てておく必要がある。NSThreaddetachNewThreadSelector:toTarget:withObject: を1回でも呼ぶと、以後はマルチスレッド対応になる。また、Ruby スクリプトを走らせていない時や、Ruby スクリプトからダイアログを出している時など、Cocoa 側で run loop が走っている時は、上の監視スレッドを止めておかないといけない。これにはグローバル変数と Mutex を使う。

 実はここに至るまでに、TCL と Python の組み込みを試してみたのだが、Ruby が一番楽な気がする。TCL は組み込み自体は簡単なのだが、言語の機能が高くないので、ちょっと込み入ったスクリプトを書こうとするとぐちゃぐちゃになってしまう。Python の組み込みは、ドキュメントが充実していてやるべきことは明快なのだが、コードの量が妙に多くなる。あと僕は「インデントの量がブロックレベルを表す」という Python の文法がどうにも辛い(組み込みには関係ないけど)。もちろんブロックレベルとインデントは対応させるべきだが、それを文法で強制されるのはしんどいんだな。

2008/06/28(土)

 午後、研究室関係者+友人たちでジンギスカンパーティ。うちのグループの北海道出身者がアレンジしてくれた。うちは家族で参加する予定だったが、妻がちょっと疲れ気味で体調もイマイチだったので、僕がヒメと坊を連れて参加。たくさん遊んでもらってすこぶるご機嫌だった。

 帰宅して間もなく、「ワミー」が到着。子どもたちが寝ている間に遊び始めたところ、起きてきて見るなり(予想通り)「なあにそれ?」となって、一緒に遊び始めた。坊には部品をはめるところがまだ難しく、思い通りにいかずにかんしゃくを起こしていたが、ヒメはアイデアブックを見ながらいろいろな形を作っていた。僕は例によって多面体ばかり作っていたのだが、パーツを「編みながら」組み立てて行くと、単につないだだけとはひと味違うものができあがるので、たいへん面白い。

2008/06/19(木)

 知育玩具「ワミー」(コクヨのプレスリリース)、「アイデア次第で多彩な造形が可能なブロック」だそうです。単純なパーツをひたすらつなぐおもちゃは当方もともと大好きなのでありますが、これは変形できるところが特によろしいですな。製品ページの写真を見ると、パーツはけっこう大きいようで、意外にダイナミックな造形ができそう。一応メモ(これは買う可能性かなり高い)。

2008/06/16(月)

 一日有休をとって、家族旅行で松本に行ってきました。妻と僕の両家の両親と一緒。ちょっと歩く距離が長くて、腰を痛めているうちの父には申し訳なかったが、食事や買い物などまあまあ楽しんでもらえたのではと思っている(思いたい)。僕自身は松本は3回目なのだが、落ち着いた雰囲気で何度行っても大好きな町です。


サイト内検索

検索キーワード(5つまで):




本サイト内のすべてのページに自由にリンクしていただいて構いません。
ただし、トップ以外のページの場所は予告なく変わることがあります。

Presented by Alchemist (Toshi Nagata)

mail address