Home > Programming Archive

Programming Archive

S98Player for iPhone 1.0 リリースされました

s98icon.png

S98Player for iPhone 1.0がAppStoreからダウンロード出来るようになりました。 ご興味のある方は、こちらのリンクよりAppStoreへどうぞ。

詳細はAppStoreのほうに記載してあります。 また、前回のエントリにもMac版と比べての改善点などが記載されておりますので、よろしければご覧ください。

当初のAppStoreでのレビュー期間を知る、という目標は達成です(笑 結果としては、

  • 8/25未明にバイナリをアップロード
  • 8/28未明にステータスがIn Reviewに
  • 9/1未明にステータスがProcessing for App Store、Ready for Saleに

といった感じでした。

レビューにはS98ファイルが必要と思い、いくつかサーバに上げておいたのですが、レビュアーさんからとおぼしきファイルアクセスがあってから3分後にはステータスがProcessing for App Storeに変わっていました(笑

Continue reading

S98Player Ver. 0.2を作った

4年ほど前にFM音源のサウンドログを再生するアプリを作ったのですが,最近FM音源づいていてちょっとだけコードを修正したので公開します.機能は全く変わっておらず,使い勝手も悪いままですが.

...そして誰も使わないとは思いますが.

アプリはこちらからどうぞ→S98Player0.2.zip

修正点は以下の通り.

  • サンプリング周波数を44100Hzから55466Hzに変更.原音に近くなりました.
  • S98v3のヘッダをもう少しきちんと読むように.UTF8,SJIS両方読めます.
  • しかし基本的にOPNAのみの対応....
  • 10.5SDK上でコンパイルしたので10.5以降でしか動かないかも.

OPNへの対応は,サウンドログファイルをもってないのでチェックできないんですよね.ま,基本的に自分用アプリなので問題ないんですけどね(無駄にiPhone向けに移植して一人楽しんでます).

続・FM音源の仕組みを視覚的に理解する

MacFM_Parallel2.png 前回のエントリで簡単なFM音源もどきを作ったわけですが、どうも物足りなく感じたため(というか、なんとなく達成感がないというか...)、並列接続も可能な4オペレータ版を作成しました。

そして、オペレータ接続アルゴリズムも8種類から選べるようにしました。

単音しかなりませんが、機能的には、往年のYM-2203音源などと同じ程度のパラメータをいじれます(多少少ないんですが)。

Continue reading

FM音源の仕組みを視覚的に理解する

MacFM

FM音源って知ってますか? 今じゃ表立って耳にする機会も少ないですが、つい最近まで携帯電話の着メロなんかはこのFM音源を使ってました。

「機械っぽい音」なんていわれるとまぁその通りではあるんですが、往年のNEC製PCなどで使われていたこともあり、独特な音にファンも少なからずいたりします。

このFM音源、「FM (Frequency Modulation)」と名のつく通り「周波数変調」を利用して音を作っているのですが、これがイマイチよく分かりません。いや、Wikipediaの当該ページを見ると波形を導き出す式も載っていますし、それはそれで分かるんですが、その式をいくら見たところで「どんな音がするか」がよく分からない...。

様々なサイトで「周波数変調は、扇風機の前で声を出すとあ"あ"あ"あ"あ"〜〜〜と音が変わるのと同じ原理です」なんて説明されていたりするのですが、この説明は周波数変調がわかっている人にしか理解できないものだと思うのです。

...というわけで、式を見ても分からないなら手を動かせ、ということで、単純なFM音源を鳴らすプログラムを組んでみました。 各オペレータの波形をリアルタイムに表示させて、パラメータをいじるとどのように波形が変わるのかが分かるようにしてみました。

Continue reading

On-vehicle movie overlaying vehicle information using CANUSB

I overlaid various vehicle information (i.e. speed, rpm, and so on) extracted by CANUSB on my on-vehicle movie.

Continue reading

CAN + Quartz Composer + 車載動画 = PS4動画?

CANデータを使った動画、もう少し派手めに...ということで、作ってみました。 といっても、CANのデータからいちいち速度などの情報を手で入力していては日がくれてしまうので、それらを自動でレンダリングする術を考えなければなりません。

今回は、Quartz Composerのカスタムパッチを作ることでCANログをQuartz Composerに取り込むことにしました。

Continue reading

CANデータを見るプログラムを動画にしてみた

先般のエントリにてRX-8のCANデータをグラフにしてみましたが、リアルタイム情報を車載動画にピクチャインピクチャとして重ね合わせた動画をつくり、ニコニコ動画にアップロードしました。

今までは見る専門だったので、どの程度の方に見て頂けるかはまったく未知数でしたが、一日経たない間に300人以上の方に見て頂けたようで。 人気動画とは比べものになりませんが、場末のブログにひっそり置いておくよりはよっぽど見て頂けるので嬉しいです。

次はもう少し派手目に作ります。

iPhoneのSafariを使って走行中の道路名をtweetしてみた

roadName_tweet.png

というわけで、サーバに展開した国交省のデータを使って、実際にTwitterでつぶやくようなアプリを作ってみました。

といっても、専用アプリを書くのは面倒なので、ひとまずはiPhoneのSafariからGPS情報をサーバに送りつぶやくようにしてみました。

Continue reading

せっかくなので道路をGoogleMaps上にプロットする

road_plot.png

前回のエントリで記したとおり、自分が道路上にいるかどうかを調べるためには、そもそも道路のデータを保持していなければなりません。

このデータを使って地図上に高速道路や国道のラインをプロットすることが出来ます。

最初、前回のエントリで作ったデモに組み込もうと思って試しにやってみたんですが、位置データが多すぎるため、blazedsを使って単純にサーバからクライアントにプッシュするとTomcatが落ちてしまいました...(たぶんシリアル化する時に落ちてる)。

GoogleMaps APIを調べてみると位置データをエンコード化して読み込ませるというオプションがあったので、サーバ側でデータをエンコードした上でクライアントにプッシュすることで、そちらを実装してみたらうまくいったので公開します。

あ、そうそう、前回のデモでは関東圏だけしか動きませんでしたが、DBをアップデートしたので、今は日本全国調べられます。

Continue reading

緯度経度から、その場所を走っている道路名を調べる

roadName.png

うわー、これまたタイトルからしてニッチ(笑

最近、「流行っている」と形容するのも恥ずかしいtwitterですが、「○○なう」などとつぶやいている人が結構見受けられます。「○○」にはその時訪れた場所だったり、その際やっている行動だったりが入るわけなんですが。

これ、車の運転中にはできないですよね、危なくて。なので、つぶやきをそれっぽく自動化できないか考えてみた訳なんですが...。

前回のエントリでは車の中を流れる各種データを取り出すことが出来たので、たとえば、エンジンを切らずに速度0が一定時間続いた回数をして「(ほぼ)信号待ちの回数」としてカウントし、「信号待ち100回目なう」などとつぶやくことは出来そうです。あるいは、制限速度を超えたら「現在XXkm/hで巡航中。○○県警かかってこいや」とつぶやくことも可能でしょう(よい子はまねしちゃいけません)。

...ただまぁ、大がかりなわりにはあまり面白そうなつぶやきのネタにはならなそうですし、第一この設備が一般的ではないので、他の人にとっては「ふーん」程度であまり参考にならないです(自分で運転を解析するにはとても面白い情報なんですけどね)。

そんなわけで、もう少し一般的なGPSから得られる位置情報を利用してなんかできないか考えてみました。それが、このタイトルにあるような技術を利用して「国道○○号線なう」みたいなことをつぶやくというものです。

Continue reading

CANUSBを使ってRX-8の各種データを取り出してみる

rx-8_gear_snip-2.jpg

前回のエントリまで使っていたELM327チップですが、どうも全てのデータのログを取ろうとするとバッファが溢れてしまうようで...。ただせっかく乗りかかった船なので、CANUSBという代物を購入してRX-8のデータをリアルタイムに取り出してみることにしました。

上記の画像においてグラフの意味は以下の通りです。

  • 赤 線:車速
  • 青 線:エンジン回転数
  • 紫 線:ラジエータ水温
  • 水色線:エアインテーク温度
  • 黄色線:アクセル開度
  • 赤領域:フットブレーキを踏んでいる
  • 青領域:クラッチが切れている
  • 緑領域:(高さに合わせて)ギアポジション

CANはまぁここでは車内LANのようなものだと考えておけばいいと思います。自動車内のコンピュータとその他センサや計器類との間で情報をやり取りするときのプロトコルなのですが、特徴の一つはブロードキャストだということです。 なので、OBD-IIのようにポーリングしてデータを取り出すのと違い、ネットワーク内を流れているデータであれば「盗み聞き」することができるため、車内コンピュータへの負荷が(おそらく)ありません。 コンピュータに負荷がかかった場合にもおそらくフェイルセーフが働くとは思いますが、心理的な負担がこちらのほうが少ないですね。

Continue reading

RX-8とOBD-IIでお話をする - シリアル接続プログラミング

前回のエントリでELM327デバイスが動作することを確認したので、今回は簡単なプログラミングをしてみようと思います。

Bluetooth版のデバイスを自分は選んだので、BluetoothのRFCOMMを利用することになります。今回はJavaでプログラミングをすることにし、BluetoothライブラリはBluecoveを利用します。

Continue reading

RX-8とOBD-IIでお話をする - 動作確認

ELM327の載ったデバイスを手に入れたので、今エントリでは実際に自動車に取り付けて動作確認をしたいと思います。

前回のエントリで自分はBluetooth版デバイスを買いましたが、基本的にデバイスとお話しする方法はシリアル通信となります。RS-232C接続(つまりシリアル接続)の場合には該当するデバイスとお話をすればいいですし、USBやBluetoothの場合、各OSで仮想的なシリアルデバイスを作成できます(WindowsだったらCOM1とか、Macだったら/dev/tty.*とか)。

MacだとBluetoothで仮想デバイスを使って常にお話しするのはどうも安定性に欠けるようなのですが(Snow Leopardは長く試してないので改善しているかもしれません)、いずれにせよ動作確認のためだけであれば問題ないでしょう。

普通だったらここで実際に配布されているソフトウェアを使って動作確認をするのでしょうが、自分の場合は(それだとつまらないので)実際にターミナル経由でデバイスと直接お話をしてみることにします。

Continue reading

RX-8とOBD-IIでお話をする - 準備

久々の投稿です。

OBD-IIという自動車のコネクタを通した各社共通の診断プロトコルがあるのですが、そいつを日曜プログラマでも簡単に扱えるようにするELM327というチップが存在することを知りました。 そして、そのチップを使ってシリアルやらUSB、Bluetoothなどでパソコンからお話をするデバイスもいくつか売り出されているようです。これを使うと、エンジン回転数や速度などの基本情報、それにエンジン温度や瞬間燃費等の普通は知ることのない情報をリアルタイムに取得することができるようになります。

え、そういうのだったら既に売ってるって? ええ、BLITZ R-VITとかそうですよね。仕組みはまさに同じなのですが、自分でのプログラミングだと簡単にログをとったりいろいろ遊ぶことができます。逆にそういった加工をしないのであればこちらの製品のほうが手っ取り早いと思います。 自分の場合は、パソコンと連携していろいろやってみたかったってことと、どうせすぐに飽きるのに4万とか5万とか出せないので自作することにしました。OBD-IIから情報を取り出すだけなら5000円くらいのパーツだけで済んでしまいますので。

というわけで、この投稿から数回にわたってELM327を使って車とお話しするアプリ製作の備忘録を書いていこうと思います。

今回は、ELM327を搭載したデバイスを手に入れるフェーズに関して記載します。

Continue reading

Xデー前日

deathmarch.JPGぼく、がんばる。
 
 
 
 
実は、こういった「ドーピング」は生まれて初めてだったりします。怖いよう。

実装週間

実装週間です。
来週の月曜日にデモをする予定があるのですが、ついつい大風呂敷を広げてしまったので(つまり、実装は全然終わってない)相当テンパった状況です。
何日家で寝られるか分からないぜ、はっはっは。はぁ…。

ちなみに実装時に利用予定のライブラリやソフトウェアを列挙してみると
Quartz Composer
QuickTime
CyberLink
Julius/Julian
Cocoa Framework
GTK+
などなど…。

このリストから実装内容を想像できたらなかなか凄いですが(笑
しかしこうやって見ると、やっぱり自分は相当上位のレイヤーで生きているなぁと再認識いたします。

ExifにGPS情報を付加する

またプログラミングネタです、一般人の方ごめんなさい。


SONYからGPS-CS1Kという製品が出ています。「GPSユニットキット」という分かるんだか分からないんだかな名前がついていますが、要はGPS衛星から拾ってきた時間・緯度・経度の三点セットを15秒おきに記録するという単純な代物です。


ただ、これを使って実現するアプリはなかなか。
デジカメで撮影した写真データの撮影日時と上記GPSログを照らし合わせて、撮影時間の画像ファイルに緯度経度を付加します。
PC上で照らし合わせるので、デジカメ自体をGPS対応にする必要がないってのがミソでしょうかね。当然ですがPCを撮影時に持って行く必要もない。

ここまで割り切っているので、液晶画面や設定ボタンなどもまるでないシンプルな作りです。どのくらい売れてるのか分からないですが(そもそも、対応機種にSONYのデジカメしか載せてないのは売る気ないんじゃないかと思ってしまう)、なかなか面白いです。
こんなの大まじめに製品化する大企業ってSONYくらいしかない気もしますが(笑


難点は、機能を絞った割には値段が安くないってことと、Macでは(当然ながら)動かないってことでしょうか。
iPhotoとGarminを連携するアプリとか作れればそこそこ人気でそうだよなぁ、なぁんて想像してしまいます。

暇が出来たら作ってみますか。
(「暇が出来たら」ってのが免罪符化しているなぁ…)

携帯を複数持つ人

先日、結局物欲に耐えきれずにおもちゃとしてW-ZERO3[es]を買ってしまった自分ですが、さすがに今まで使っていたauを解約するほど勇気はなく、微妙にどっちつかずな生活が続いております。

胸ポケットにau、鞄の中にW-ZERO3[es]といった案配ですが、やはりWillcomユーザからはできればW-ZERO3のほうに電話がかかってきてほしいわけです。向こうとしても定額で話せるわけですしね。

そこで、鞄の中で気づかずに電話着信があった際に(つまり不在着信になる)、不在着信があったことと誰から着信があったかを自動でau携帯にメールするアプリを作ろうと思います(超ニッチ)。少なくとも不在着信のステータスを拾ってくるAPIは見つけたので、あとはメールするだけです。メールもおそらく自動でできるでしょう。

しかし、.NET Compact Frameworkの実行環境および開発環境をインストールするのがだるいわー。


(ここんとこプログラミングの話題で、一般の人をどんびきさせてますな…。すみません)

WebObjects楽しい

現在、仕事でWebObjectsを触っております。

「WebObjectsの案件なんてあるんかいな?」と疑問に思われた方、もっともです(笑
実際のリリース時の実装はどうなるか分からないのですが、仕様をきっちり決める・欲しい機能をあぶり出すという点から、フットワークの軽いWebObjectsでプロトタイプを作っております。


個人的にWebObjectsですばらしいと思うのは、O/Rマッピングおよびカスタムクエリ作成のあまりの容易さ(どうやらEnterprise Object Frameworkは特許を取ってるとかでまわりが真似しないらしい)、意識せずともMVCにきっちり分かれる開発環境の的確なサポートあたりです。

スクリプト言語と比べるとコンパイルするのが煩わしいとかあるかもしれませんが、実行前に型チェックをしてくれる分自分としては安心だったりします(まぁ、WebObjectsはリフレクションをばりばり使ってるので変に作ると実行時エラーが出ますが^^;)。

どうやらWebServiceの作成も一瞬で出来る模様なので、ちょっとしたWeb2.0系システムを組む際にはかなり便利な予感。


まぁ、実際にサービスに載っけるときは、メンテできる人が少ないってのが問題になるわけですが^^;

Continue reading

迷子

今日は研究室まで自転車。

終電がなくなる頃に研究室を出て帰宅したわけですが、途中で道に迷いました(汗
いつもの道を通って帰れば良いものの、「あ、この道使えば近いかも」とひらめいてコースを外れたのが運の尽き。

昼間ならたいてい大きな建物が見えるのでなんとかなるのですが、夜中となるとそうもいきません。まっすぐと思っていた道も実はカーブしていたりして方向感覚を失ってしまいます。

今日はずいぶんひどくて、知ってる道に出たにもかかわらず、一瞬研究室に戻る方向に走り出してしまいました(汗
まぁ、光が丘のマンション群の真っ直中だったため、景色で判断が付きにくかったってのはありますが、それにしたってここまで酷い迷い方は生まれて初めてです(そもそもあまりり道に迷わない)。


自転車乗りの間では、GARMINという会社のGPSが有名です。いわゆるカーナビの自転車版で、「どれだけの距離を走ったか」「どんなコースを走ったか」「今どこにいるか」などという情報が分かります。

ただ、寄り道するのが楽しかったりする自分としては、的確なコースを指定されてしまうというのは逆にあまり面白くないのです。カーナビがあまり好きじゃないのも同じ理由かもしれません。


自分が欲しい情報は、「目的地の方向にある程度向かっているかどうか」です。
自転車の進行方向ベクトルと、現在地から目的地へのベクトルとの内積が負だったら明らかに遠回りしてる(というか、真後ろに進んだ方がまだ近づく)ということが分かります。そうなれば、次の交差点でどちらに曲がって見ようか、といった指針として役立ちます。

これって、GPSのデータだけ使えばなんとかソフトを組めちゃいます。今度機会があったら携帯(といっても、WillcomのW-ZERO3ね)で動くソフトウェアを書いてみることにします。W-ZERO3にシリアルケーブルが繋がるかどうかが問題かぁ…。

Quartz Composerのカスタムパッチ

これまで作りためてきたQCのカスタムパッチを公開していこうということで、使わずに錆び付いていたwikiに新たなページを作成しました。

http://hiroaki.jp/index.php?Quartz%20Composer%2FCustom%20Patches

ソース自体あまり人に見せられるモノではないのですが、とりあえずちょっとでも盛り上がってくれればいいなぁと思っております。

Movable Type 3.3でXML-RPC APIの仕様が変わってた…

以前XML RPCを使ってMovable Typeのエントリをポストという題で記事を書いたのですが、そいつを辿ってきてくださる方もそこそこいるようなのです。
しかし、最近MT3.3にバージョンアップしたら該当コードが動かないことが発覚。

なんでよ? と思ってMovable Type 3.3 マニュアル - XML-RPC APIを見たところ…。
関数の一部はなくなってるし、ぐっちゃぐちゃでした…。
ドキュメントは多少整ってきたと言えるかもだけど、ここいらはもうちょっとちゃんとしてほしいなぁ。metaWeblog.newPostとかなくなってるし。んもう。

以前のコードは動かなくなってますが、基本的な動かし方は以前のコードと同様です。とりあえず自分は、metaWeblog.newPostで一発で処理していたところを

blogger.newPostで適当な内容の記事を作成してpostidをget。そしてきちんとした内容をmetaWeblog.editPostで行う

といった感じで二段組みで処理させました。metaWeblog.editPostはmetaWeblog.newPostと違って返り値がpostidではないので、その後のカテゴリ設定時には注意してくださいませ。

Mac OS X で Bluetoothをいじる

研究室でいじってる某センサデバイスはBluetooth経由でシリアル通信が出来るんですが、どーもMacで使ってると怪しい挙動を示します。/dev以下にBluetoothのシリアルデバイスファイルを作ってopenすると、結構高い確率でへんなダイアログが出てきて使えません。catするとResource busyと言われたりします。


結果から先にいうと、どうも/dev以下に出来るBluetoothのデバイスファイルを使うとうまくいかないときがある、ということのようです。そもそもこのセンサデバイス自体特注なので他のデバイスも同じ不具合が出るとは限りませんが、もしかしたらAppleの実装の問題かもしれません。

というのも、/devを叩くとかいう横着をしないで、AppleのBluetoothのライブラリ(C or Objective C)からデバイスを触るときちんとアクセス出来るからです。JavaのBluetoothライブラリでもきちんとアクセス出来ます。
この不具合で数時間凹んでましたが、まぁ回避する方法が分かったのでよしとします。センサデータを取り込むQuartz Composerのパッチを作ってるのでどうせObjective Cで書きますし、AppleのBluetoothライブラリを俯瞰出来て良い経験になりました。

蛇足ですが、Appleのファイル入出力系のフレームワークは、ノーティフィケーションやデリゲートをふんだんに使っていて、とてもスマートなプログラミングスタイルを提供しています。(少なくともプログラマの視点からは)スレッドとか使わなくても非同期でがしがしできるんだから、大したもんです。可読性も良いですし、美しいです。

HTMLと格闘す

先月モントリオールへ行って以来、やっぱり英語版の自分のサイト作らなきゃだなぁと思っていました。
昨日は、どうも体がだるくてやる気が出なかったため、こういう時こそと思ってサイト構築開始。


まぁ、サイトと言ってもとりあえずは自己紹介の1ページだけでいいやと高を括っていたのですが、結局丸一日潰してしまいました。

最初はDreamWeaver(評価版)でさくっと作ってしまおうと思っていたのですが、起動するとメニューが文字化けしてしまい使い物になりませんでした。ファイルフォーマットをHFS+ CaseSensitiveにしているからかしら…。
んじゃぁ、と思ってNvuでも使ってみるかと思うも、こいつも立ち上げたらOSごと頓死。

…。
仕方ないので、タグとCSSを手打ちでぽちぽちやり始めました。まったく、なんで21世紀も6年目なのにこんな原始的な事を…と一人ごちながら。

丸一日つぶしてようやっとこんなもんかというところで、それまでMacのSafariとFirefoxでしかチェックしていなかったものを、最終確認という事でWinのIEで見てみました。

…なんじゃこりゃー!

ひどいもんです。レイアウトはがたがた、typography系の設定もひどいもんです。聞きしに勝るIEのCSS解釈互換性の低さ…。やけになってIE7 beta2をインストールしてみたら、こちらでは普通に見えました。もう、IEなんてこの世からいなくなってしまえ(泣

しかたなく、それっぽいところをぽちぽち直してIEでもそこそこ見られるように修正しました。うーむ、屈辱だ。


まぁ、そんなこんなでできました。いっちょまえにHTML4.01とCSS2のvalidatorもパスしております。まぁ、中身は単純なんで…。
しかしほんと、HTMLなんてものはエディタで書くもんじゃありません。単なる苦行です。

しかしHTMLと比較すると、いわゆるソフトウェアプログラミングのライティングスタイルというのは、昔からあんまり変わってない気がするなぁ。まぁ、いろいろ工夫はされてきてるんですがねぇ。

まだUbiquitous Communicatorなんてやってたのね

MYCOMジャーナルの記事「新ユビキタス・コミュニケータ(UC)で切り開く未来」より。


…。こんなんでほんとにいいんでしょうか。技術面からの考察もほとんどないですし…。提灯記事かいな。

記事中の電子白杖の例はたしかに有効かもしれませんが、これ、おそらく電子白杖にしか使えません。
というのも、地中に埋め込まれたRFIDタグのデータを読み取るためには、RFIDタグリーダを数cm以内に近づけなければいけないからです。電子白杖で使えればそれで十分ではないかと反論があればその通りというほかないのですが、このパッシブタグの技術的制約についてどの程度周知されているのかは記事から推察できません。

それ以外のサービスに関しては、携帯もしくは既存PDAで出来そうなものばかり(RFIDリーダもPDA向けのありますし)。
わざわざ専用デバイス作って、専用の(というとまぁ言い過ぎだけれど)OS載っけてチューンして、そのOS向けのアプリをがりがり書いて…。さすがですねぇ、坂村先生。
これ、WinCE端末とかにしたらいったいどれくらい安上がりになったのでしょうか…。

こういった都市基盤に埋め込む、いわゆる「ユビキタスなサービス(さすがに英語表記にする勇気はない)」って端末などのハードウェアのスペックよりも、どのようなソフトウェアインフラを構築するかといった課題のほうが先に解決すべき問題だと思います。
それにも関わらず相変わらず独自OS・独自デバイスにこだわってるあたり底が知れると思うのですが、どうなんでしょうかね。こんなんじゃあ、実験するために新たにソフトウェア一個書くんだって大変でしょうに。
そういった意味では、「最大のネックは、特殊な専用端末を必要とする点にある(以下略)」と語る神戸空港ターミナルの方の意見が最も的を射ている気がします。

しかしほんと、なぜあんなにTRONにこだわるのでしょう…。
Windowsを使うのでもなく、分散環境向けの新しいOSを書くのでもなく、TRON...。うーん。
TRONなんかじゃやってられないくらい複雑なユビキタスサービスを脳内で無意識的に枝刈りしちゃう危険性だってあるでしょうに。先にソフトウェア基盤が決まっちゃってて良いことなどないと思います。

AudioCodecを作ろうと

S98Playerを作ったは良いものの,プレイヤのUIが貧弱ってことと,ファイル管理がしょっぱいってことで,これはS98のAudio Codec for QuickTimeを作ってiTunesで聞くしかー,となったわけですが.

なんか,全然資料ないですねぇ.
そもそもQuickTimeはOS7くらいからあるので(どうでもいいですが,初期のQuickTimeデモムービーって誰かまだ持ってます? 例のロゴのやつとか,傘さしてるやつとか,魚のやつとか),API内にかなり魑魅魍魎がいそうな雰囲気.

最近やっとCore Audioに対応したらしく,そのサンプルソースコードが一つだけあるのですが,いまいち要領がつかめません.
要領の掴めぬままコードを書き始めたものの,

あれれ?,あれれれ??
んー.えーっと….
あー,もう,やめやめ.

となってしまいました.
coreaudio-api MLのログを読んでいたら,それらしい記述もあったのですがそこそこ面倒そうなので,もすこし暇になったらやることにします.

S98Player バグ取り

ヘッダ処理関連でバグを見つけたので,そいつを修正したバージョンを置いておきます.
ファイルはこちら:S98Player0.1a.zip

OS X 10.3.xをお使いの方は,こちらをどうぞ

S98Player for MacのGUI版を作ってみる

S98Player.png論文を書き終わってから...ということだったのですが,進みが遅い時の気分転換に作ってしまいました....
ファイルはこちらです:S98Player 0.1.
バグを修正したバージョンをこちらからどうぞ

S98ファイルフォーマットのうちVer.1を再生できます.Ver.2は仕様がよくわからないので,分かりません(汗
Ver. 3は正しく再生できませんが,読み込めてしまいます(汗
gz圧縮されたファイルもS98のフォーマットで規定されているのですが,そのファイルがないのでうまく読み込めるか確認できておりません.

CUI版だとBGMとして複数ファイルを再生するのが大変そうだったので,えいやと帰宅中の電車内で.
ランダム再生も出来なければ,プレイリストの並べ替えも出来ませんが,超評価版ってことで.

ボリューム調整もできませんのであしからず....次のバージョンでは何とかします.中のコード自体は対応してるんですけどね.

S98Player for Macを作ってみる

懐かしのOPNAでも書きましたが,微妙に懐古趣味に走り出した今日この頃.ネットを徘徊していたら,どうやらPC98本体からOPNAボードに流すサウンドデータをダンプしたファイルフォーマットがあることを知りました.拡張子はS98.

ひとまずネットでダウンロード可能なS98ダンプデータを,既存のMac用S98プレイヤにぶちこんで聞いてみました.
ざっと探して見つかったプレイヤは以下の2つ.

前者は日本の方の作品です.YM2608に限らず,様々なチップでのサウンドログファイルを再生させるためのソフトウェアらしく,プラグインで拡張できるように設計されています.
つい最近S98ファイル用のプラグインを公開されたようですが,残念ながら手持ちのファイルはどうもうまく再生されませんでした.どうもバッファ処理まわりでうまくいってない雰囲気.あと,再生周波数も半分くらいになってる感じで,音程が低かったです.

プラグインの方はソースが公開されていたので覗いてみたのですが(プレイヤのほうのソースが見当たらなかったのでいまいち全貌は掴めませんが),OPNAのエミュレーションはciscさんによって公開されているfmgenを利用している様子.
こちらはリズム音源をWAVで用意する必要があるのですが,このプラグインではいまのところ設定できないようです.リズムなし.

後者は海外のソフトウェアですが,S98に対応しているとの事でこちらもトライ.
...音程やらは良いのですが,こんどは音が抜けている....かなりお間抜けな感じに.
MAMEのコードを利用しているのかは分かりませんが,リズム音は入っています.なかなかそれっぽい.しかし,3音くらいしか同時になってないような....エミュレーションしてるのがOPNAではないのかも.


5分ほど迷った結果.
とりあえず,自分で作ってみました(笑
コマンドラインで動く即席バイナリはこちら.Autoreleaseなのにpoolループ作ってねぇぞ,とか怒られますが,そこはほら即席なので.
GUIかぶせる際にでも直します.
使い方ですが,ダウンロードしたS98Player.tgzを解凍したら,そのカレントディレクトリに移動し,以下のコマンドを打つだけです.エラー処理とかしてないので,存在しないファイルとか指定するとすぐに終了してしまいます^^;

./S98Player   Rhythmデータのあるディレクトリ   S98ファイルのパス

と打ってリターンです.ループのあるデータは2周して終了します.

Rhythmデータを持ってない方もいるかと思いますが,僕はこちらのサイトで公開されているデータ(リズムライブラリと書かれているファイル.とりあえずどちらでも大丈夫)をダウンロードさせていただきました.


このソフトを作る際にお世話になったソースや情報源たちを備忘録代わりにのせておきます.

  • chipplay with s98plugのプラグインのソースではfmgenが既にMacでコンパイルできるようになっていましたので利用させていただきました.
  • S98プレイヤを作ってみるのページでは,S98のファイル構造とfmgenの利用法について知る事が出来ました.
  • /Developer/Examples/CoreAudio/SimpleSDK/DefaultOutputUnitには,直接オーディオデータをいじくる方法についてのサンプルがあります.
  • ADC Developer Transition Resource Centerには,エンディアンの違いによるビットのフリップなどを効果的に行う方法が載っています(そう,このソフトウェアはUniversal Binaryであり,Intel Macでもおそらくきちんと動きます).

面倒だったのは,S98ファイルやWAVファイルがLittleEndianでデータが格納されているので,ビットフリップのコードを書き足した事くらいでしょうか.
それ以外は至って簡単です.それにしたって,fmgenはインタフェースといい,良く出来ています.凄い.

しかしこういう趣味的な(そして,対象がかなり狭い)ソフトウェアを書くのは楽しいですね(笑 いい気分転換になります.
GUI化は,来週までの論文執筆が終わってから.
FMやPSG,Rhythmのサウンドのバランスに関しても,今は僕好みになってますが(デフォルトからだいぶ変わってます),暇になったらそれも調整できるようにしますかね.

懐かしのOPNA

昨日一通論文を書き上げて,今週末はぼーっとしております.
ってか,一昨日から昨日にかけては徹夜だったのですが,昼過ぎにふらふらで帰宅した後に爆睡し,今日も起きたのが午後という廃人生活を送ってしまったため,なんだか曜日の感覚がおかしいです.

論文はなんつーか,書くと毎回「もっと早くから書こう」「英語もっと頑張ろう」って思うのですが,毎回思ってるあたりが進歩がないというかなんと言うか.
特に今回はスタートを切ったのが非常に遅かったため,関係者の皆さんに多大なご迷惑をおかけしました.あとは結果がついてくれば良いのですが.


さて,このエントリのタイトルに含まれる「OPNA」,もしくは「YM2608」に反応する人は比較的古くからパソコンを触っている人じゃないかと思います.それも,かなりコアな人.

Continue reading

三角関数

二日続けて研究室に泊まっているわけですが….

おかしいおかしいと思っていたプログラムの挙動,理由が分かりました.
これまでそこそこ単純に考えていたことが,実際には結構複雑な幾何計算をしないと解けなかったのです.

うーん,今の状態のアタマできちんとしたアルゴリズムを組めるだろうか.
がんばれ,自分.


そもそも,単純に考えていたのは,完全にスレッドの事が頭から抜け落ちていたため.
ひとつひとつメソッドごとにステップを踏んで計算をしているという概念はスレッド上では成り立ちませんが,それでもうっかりやってしまうことがあります.
はぁ,困った.

キーボード問題

keyboard-us.jpg   keyboard-ja.jpg研究室には,PowerMac G5 2.7GHz Dual + 23インチディスプレイという,かなり豪華なマシンがあります.ビデオ編集やポスター作成のためにあるのですが,誰も使っていないときには特に制限なく使えます.

最近のプログラミングはかなり画面領域を使う仕事ですし,重たいプログラムを作る事もあるので,何かプログラムを組むときには使いたいなぁと常々思っているわけです.

がしかし,僕には使えません.キーボードの配列が異なるのです.英語配列のキーボードと日本語配列のキーボードは,「かな」が刻印されているかいないかだけではなく,「*()@[]:"」などの記号の位置も違います.僕は英語配列を好んで使っておりまして….
僕がMacを使い始めた頃(94年頃)は,まだ日本語配列のキーボードがありませんでした(正確には,英語配列のキーボードにかなを刻印してあった).それ以降,たまに日本語配列に浮気したりしましたが,英語配列の方が歴史は長いのです.

個人的にはプログラミングには英語配列のキーボードの方が効率が良いと思いますが,いかんせん慣れの問題もあるので研究室内でも少数派です.
今書いているのはObjective Cという言語ですが,これは[]やコロンをがしがし使う言語なので配列の違うキーボードだと効率ががらりと変わってしまいます.マシン自体は空いているのに勿体ない(T_T)

中国では英語配列だったので違和感なかったんですけどね.
一応日本語配列の方が規格(たしかISO)に沿っているんだったと思いましたが(うろおぼえだけど,少なくともアスキーコードのテーブルに沿っているのは日本語配列のほう),他に日本と同じ配列になっているところはどこがあるのでしょうか? ヨーロッパとかはアルファベットの位置自体が違ったりしますしねぇ.

写真は同じPowerBookでキーボードの違いを比較.左側が日本語配列,右側が英語配列です.

地図をかく

picture.pngなんの因果か,国交省で配っている地図データの作図をおこなうプログラムを書いていたりする.

昨日の午後からはじめ,忘年会を挟んで酔いながら書いたので,効率とかはあまり考えておりません.
しかしデータフォーマットを見て「うーん…」なんて言ってソースを書いたのは何ヶ月ぶりでしょうか(笑


しかし,こんなのに時間をかけている暇はありません.めどが立ったらつぎの作業をせねば.
ああいそがし.

質問をするという事

26日から28日まで,大学院の集中講義がありました.朝9時半から17時過ぎまで行われる,結構体力的にきびしい講義です.
講義名は「オペレーティングシステム実装論」というものでしたが,実際の中身はどちらかというとセキュアなコードを書くにはどうしたらいいか,といったようなものでした.

講師は,Writing Secure Code〈上〉Writing Secure Code〈下〉を書かれたDavid LeBlanc博士.

内容は非常にためになりましたし,興味もわきました.いままであんまり意識してきませんでしたし….
講義前にWriting Secure Codeを読破しておけと言われていましたが(講義出席者には無料配布された),これも良い本です.特に上巻はMicrosoft製品のみよりも一般的な事例にスポットを当てて語られているので対象者を選びません.結構プログラマにとっては必須の本かもしれません.


んで,三日間の講義で感じたのは,受講者のテンションの低さ.
講義の最初に,いつでも質問してねー.Don't be shy!といっていたのですが,結果は全く質問なし.
たしかに,授業中に分からない点をとっさに頭の中でまとめあげて,進行をブレークして質問するというのは,あまり日本ではなじみのない事です.実際,僕もそれはできませんでしたし.
ただ,講義中の受講者の反応も凄く薄いし(ジョークを言っても反応しないし,同意を求められても反応なし),授業後の質問すらないというのはいかがなもんでしょうか.
そんな思いもあって,一昨日,昨日と授業後にはあたりさわりのない質問をひねり出してちょっとしゃべったりしました.
結果は,あたりさわりのない質問なのにも関わらず,凄く熱心に返答してもらっちゃって,個人的にはとても満足だったりします.

最終日の今日も,「誰か質問ある?」と進行の人が聞いても最初は誰も反応がありませんでした.
せっかく日本まで来ていただいて,これはあまりにも失礼だろうということで,例によって適当に質問をひねり出してたずねました.これまた短い質問に対して十分な回答をしていただきました.そしてやっぱり興味深い.
結局本日の質問は,これ以外に同じ研究室の同輩がした質問のみ.まったく,勿体ないったらないし,Dr. LeBlancとしても肩すかしも良いところ.「僕の夢は人にものを教える事.今回はじめてそれが出来て嬉しい」なぁんて言われたときにはほんと申し訳なくなってしまいました.


日本では,どうも「質問をする」ということが,とても高尚な事と考えられている節があります.
「みんなが知ってる事を質問しちゃったら恥ずかしい」 「的外れなことかも…」 「とにかく,興味深い質問をせねば」 「あとで本を調べれば分かるだろうし…」 などなど….
しかし,実際に生の人間に対して質問をすると,ほんと予想外のことも話してくれる事が多いです.回答する方もそのへんは当然分かっているわけですし,

「英語で通じるか分からないし…」というのもごもっとも.しかし,それなら休み時間にでも質問文を組み立ててしまえばよろしい.5分もあれば簡単な質問を英語に翻訳できるはず.


とにかく,自分を含め,もっと積極的にいったほうが良いよなぁと今回はつくづく感じました.

WebObjects 個人的FAQ

前のエントリで"Discovering WebObjects for HTML"をチュートリアルとして作業をしていったと書いたのですが,いくつかつまづいた点があったので,まとめてみます.

Continue reading

WebObjectsファーストインプレッション

今年のWWDC開催後に配布されたXcode 2.1ですが,目玉はUniversal Binaryだけではありませんでした.
今バージョンからWebObjectsの開発環境が同梱されるようになったのです!

Mac OS X Serverには運用パッケージがついているだけで開発環境は入っておらず,どちらにせよWebObjectsのパッケージを買わないと恩恵を享受することは出来ませんでした.
#まぁ,ADCでは以前より30日間だけ開発環境が使えるキーコードを配っていたんですけれどもね


ではMac OS X ServerがないひとはWebObjectsで遊べないかというと,そうでもありません.
上記開発環境中で"Build & Go"すると自前でサーバをたてて,Safariからアクセスして動作を確認できます.
ってなわけで,ちょろっといじってみました.この記事はその簡単な感想です.

Continue reading

続・PhotoBlogユーザビリティ改善計画

さて,前のエントリでXML RPCを使ってMovable TypeにポストするコードをPHPで書きました.これでだいぶ投稿が楽になったのですが,もうひとつ,やりたいことが.

それは,Moblog.せっかくのPhotoBlogなので,携帯からメールで写真イメージを添付して投稿したいっていう欲求が生まれてきます.既存のMoblogサービスも結構あるのですが,今回のようにQuixotic Pixelsのテンプレなんていうニッチな分野に対応しているサービスはないでしょうから,こいつも自作してみる事にします.

Continue reading

XML RPCを使ってMovable Typeのエントリをポスト

Quixotic PixelsのPhotoBlogテンプレがいまいち投稿が面倒というのは一つ前のエントリで述べました

というわけで,今回は以下の作業をおこなうスクリプトをXML RPCを利用したPHPで書く事にしました.


  • GDを利用してイメージを縮小し,サムネイルも作る.ファイル名は日付ベースにしてユニークなものにする
  • タイトルと本文はフォームから入力してもらい,Extendedで入力すべきファイルURIのプリフィクスは自動入力にする
  • 当然,カテゴリなども選べるようにする

一つ目のGDに関してはこれまでもソースを書いた事があったので,見当はついてました.問題はXML RPCを使ってポストする部分ですが,これも至って簡単でした.なお,今回はsunouchiさんのサイトであるdrifting blog by snotchの記事を参考にさせていただきました.ありがとうございます.

Continue reading

Cocoaと分散オブジェクト

自分の所属する研究室では分散オブジェクトミドルウェアとしてIce (Internet Communications Engine)を使っております。

分散オブジェクトミドルウェアは、すごく端折って言えば「ネットワーク越しの別マシンのインスタンスのメソッドを簡単に呼べる技術」とでももうしましょうか。CORBAとかが有名です。
一つの言語に依存したものであればJava RMIなどで良いのですが、IceやCORBAは違う言語間でのメソッドインボケーションのできるところが特徴です。Iceに関して言えば、C++, Java, C#, Python, VBなどに対応しています。残念ながらObjective Cには対応していません…。

んで、現在MacでIceを意識したデモアプリケーションを作っているのですが、ちょいと環境がマニアックで、Cocoa-Java + Iceというものなのです。
そもそもなぜMacでプログラムを組むかと言うと、QuickTimeを操作するアプリケーションを作っているということと、見栄えを良くしたいという事があるからです。QuickTimeだけだったら、QuickTime Playerを操作するAppleScriptをJavaから叩くアプリケーションを作り、それをIceを使って呼んでやる…みたいな解決策も考えられるのですが、新規アプリケーションだとそう簡単にはいきません。

もともとは全てObjective Cで作ってアプリケーションを"Scriptable"にし、上記のような方針でJavaからコントロールしてやろうと考えていたのですが、ちょいと調べた感じではすぐにはできなそうで(というか、そういう資料があまり無い)方針転換です。

IceのIDLコンパイラってjavaでassert文とか吐き出すから嫌いです…。Project BuilderとかVMの設定し直さなくちゃいかんし。

本来Iceのサーバ側アプリケーションは、Iceが用意したスレッドでクライアントからのイベントを待つ(他の処理はブロックされる)というシンプルな形で実装するのですが、Cocoa-Javaアプリだとそもそもjavaのmain()は見えないので、仕方なくawakeFromNib()の中で別スレッドを生成してIceのスレッドを動かす形に…。
うーん、スマートでないけれど仕方が無い。


しかし、もともとObjective Cを使ってるものにとっては型の動的結合の無いCocoa Javaはまだるっこしい(actionメソッドの仮引数がid型ではなくNSObject型なので、仮引数のメソッドを呼ぶ時は明示的にキャストしなくちゃいけない)です。
また、Eclipseに慣れたJava屋にとっては、Project BuilderのJavaエディタの機能の貧弱さに参ります。

動的結合はまぁ別に良いとしても、Project BuilderでのCocoa-Java開発はもっと楽になっても良いものと思います。せっかくの技術なんだからなぁ。

ウィンドウマネージャって大変ね

卒論卒論とわめいておりますが、現在はちょっと変わったウィンドウマネージャを書いてたりします。まぁ、見た目は「古き良きWM」って感じで常用しようとは思いませんが^^;

snap1.png


X Window Systemってプログラミングをするほど凄いなぁと感心してしまいます。
ここまで徹底的に(といっても、結構小回りの利かないことも多いので、卒論ではそこらへんに手を加えていたりします)分散ネットワークに対応しているとは、と舌を巻くばかりでして。

Xの未来がどうなるかは別としても、脳みそを(分散環境対応に)柔らかくするには良い教材かもしれません。

最近はProject Looking Glassに関連して、XプロトコルをJavaでラップしたescherというプロジェクトも進行中です。XlibをCでがしがし触るよりも、こちらのほうがちょいとかじるにはいいかもしれません。

やっと

卒論の実装のペースが掴めてきました(遅)。
こうなってからはさくさく進むぜ。るんるん。

…って、もう二時だ。寝よう。

「日々是健康生活」

LinuxでRendezvous

現在、卒論でRendezvousをいじってるんですが、プラットフォームはLinuxだったりします。

mDNSResponderのPOSIX版などがソースで落とせるんですが、Makefileを見るとJNIを使ったJavaライブラリも作れるようだったので、作ってみました。ついでにJavaDocも。


んで、JavaDocを見て個人的に感じたことは、あんまJavaっぽくないなぁってこと。
もともとのCの使い方を見れば納得はできるんですが、プログラムの構造がどうにもこうにも。

ま、すぐに慣れるでしょうけれど^^;

LinuxでのIDE探し

最近、卒論の作業でLinux上でC++のコードを書き始めたのですが、迷っているのが統合開発環境。
いまさらemacsってのもなぁっていう人なので、とりあえずEclipse CDTとKDevelopを試してみました。

Eclipse CDT
Makefileを勝手に作ってくれるらしい。なので、一からコードを書くようなプロジェクトにはいいかも。
ただ、automakeやらautoconfを理解しているかはよく分からない。
あと、既存のconfigure Makefile付きソースをプロジェクトとしてぶち込んだら、メモリがないとか抜かして落ちました。心証悪し。
あと、なぜかローカルのプロジェクトをsubclipseでインポート出来ない。謎。
まぁ、これはEclipseの問題なのか分かりませんが。

KDevelop
ちょいと触った限り、なかなか高機能っぽい。
Doxygenとかにも対応しているっぽい。
sudo make installとかもやってくれるし、configureも実行出来る。
あと、個人的に嬉しいのは、Konsoleが一つの小窓で叩けること。なんかちょっと作業をしたいときとかいいです、はい。
例によってこちらでもsubversionがおかしいのですが、まぁ、小窓でコマンド叩けばとりあえずは。


…というのが、30分ほど触っての感想。
IDEはJavaはEclipse、それ以外はXcodeという人なので、LinuxでのメジャーIDEってのが分かりません。
どなたかおすすめとかあれば教えてくださいませ。

とりあえずは、既存のソースツリーと相性の良さそうなKDevelopを使ってみます。

Eclipseを初心者に使わせたらまずいの?

mixiのJavaコミュニティで話題になっていたので。
#あ、mixi招待してほしい人がいたら言ってくださいませ。

なんか、Javaの勉強で初心者からEclipse使ったら何か欠けるものがあるんじゃないかってのが話題になってるんですよ。
こんな話題以外で盛り上がってないあたりにこのコミュニティの悲哀があるような気がしますが…、まぁ、盛り上げたいのであれば自分でネタを提供せにゃあかんでしょうし、あまり贅沢は言うまいってところですか。


僕自身は最初からEclipse使ったって全然構わないっていう立場なんですが、案外駄目って人も多いらしい。
二回ほどEclipse推進派として書き込んだのですが、まぁ、これ以上書き込むのもうざがられそうなので、自分の意見をこちらに残しとこうかと思います。
ツッコミ歓迎。

Continue reading

Rendezvousテクノロジーブリーフィングに行ってきた

ADCメンバー向けにRendezvousの技術概要を説明するイベントに行ってきました。場所は渋谷のセルリアンタワー東急ホテル

内容は秘密保持の義務を負わされるようで書けないのですが(まぁ、特別なことはあまり話してないですけど)ちょいと気になった点があったので書いてみます。


プレゼンをやった人は米Appleのアーキテクトなので、当然英語な訳です。同時通訳がつくというので、レシーバが机の上にあります。
んで、どのくらいの割合の人がレシーバを使っているかを周りを見回して確かめてみたんです。
結果はと言うと、目算ですが7割強の人がレシーバを耳につけて同時通訳を聞いていました。

個人的にはかなり多いのではないかと思います。
別に英語が聞き取れなくても読めれば技術文書は何とかなるって言う意見もあるでしょうけど、ここまで多いとは。
日本人だけでプログラム書いて、日本国内でだけ売るってわけでもないと思うんですけどね。


それに、やはり同時通訳って微妙なんです。
内容に触れることは出来ませんけれど、発表者が「A, B, C, D and so on...」っていってるところを訳では「AやBやCなど」って言ってたんです。
個人的には一番"D"が重要でして。最初の方はレシーバをつけてたのですが、これを聞いて英語のまま聞くことにした次第です。

まぁ、たしかに、あの固有名詞は相当技術に詳しくないと知らないとは思いますけれど…。

Mac OS X 10.4 "Tiger"の新機能

Mac OS X 10.4の新機能が明らかになってきています

この中でこれまで触れられてこなかったのがCore Data。
mkinoさんのとこでも日本語で解説されていますが、こりゃまたプログラミングに革命を起こしそうな…。

モデルへのアクセスを監視してundoとかの機能を実装しちゃおうってのは実は研究室でも考えていたのですが、そいつがSQLiteベースで実装される模様。トランザクション管理万歳。

いやはや…。やってくれますね、Apple。データベースもより身近になりますねぇ。

FireFoxの開発リーダー

FireFoxの開発リーダーであるBen Goodgerって弱冠24歳なんですね。<CNET Japanの記事

なんつーか、凹む…。
自分も頑張らねば。

libjpg, libz

携帯端末のカメラ画像をホストマシンに送って加工するようなプログラムを書く。
生データだとでかいのでjpgかなんかに圧縮しようと思ったわけですが…。いまいちlibjpgに関するいい感じのサイトがないため、仕方なくzlibを使ってgzip圧縮をすることに。

…超簡単。
compress()で引数にデータ配列をぶちこむだけなんですね。uncompress()もやたら単純。
しかし、なんだかんだで圧縮する時間があるために生データを送るより遅くなる模様(汗)

考えてみれば、「色」という要素を考えない辞書式圧縮だからこんなに単純なわけで。
jpgだと色の近さとかも関係してくる気がするので、パックされたデータのどの部分がR, G, Bに対応するのかとか指定してやらなくてはならないのではないかと思います(全然調べてないので分かりませんが)。
もしそうだとすると早々にzlibに逃げた判断は正しかったかもなぁ(笑


…それにしても、リンカでのオプション、やっぱり"-lz"なんすね。

Mac OS Xでarm-linux用のクロスコンパイル環境を

研究室で使ってる某arm-linux端末があるのですが、そいつのクロスコンパイル環境をOS Xに構築したいなぁと思いまして。
binutilsやgccはなんとかコンパイルできるものの、某端末のカーネルソースが微妙にヘッダ足りなくて(!)うまくいかなかったり、__threadってナンデスカ?とか言われて途方に暮れておりましたところ、りなざうのクロスコンパイル環境をMac OS Xでーみたいなサイトを発見。

見ると、tgzファイルを放り込んだディレクトリと展開ディレクトリを指定すれば勝手に全部やってくれるスクリプト付き。なんか、あんまりにも親切すぎて疑心暗鬼になりますが、とりあえずこいつを利用してみようと思います。
りなざう用のバイナリはさくっとmakeできたです、はい。りなざうにMacから転送するのも一苦労ですが^^;

センサを利用したプログラム

現在、外部センサを利用したプログラミングをしてたり。
いろんなセンサがありますが、デバドラが優秀なためすべて/dev/以下をオープンすると普通に使えて便利。

しかし、それにしたって値の解析が面倒だなぁと実感。
もう少し修行せねばなりませぬ。

Xcodeでgnu makeとsubversionを使う

Macだけで動かすプログラムを作っている場合はいいんですが、クロスプラットフォームなプログラムを作る場合は、なんだかんだいってMakefileを利用することが多いです。

Xcodeは以前からMakefileの記述に従ってコンパイルするってのが出来たのですが、新しいPowerBookで新たな環境を構築するってことで、利用してみました。
#今までは普通にemacsで書いて、makeしてました…。

さらに、せっかく利用しているsubversionもXcode 1.5から利用できるようになったので、そいつも試してみることに。

Continue reading

Java3D

長らくMacはJava 3Dから放っておかれたのですが(基本的にJavaのMacへのポートは遅め)、昨年末だったか、Java 3DがMacで利用できるようになりました。
さすがにデフォルトでインストールはされず、Appleのダウンロードサイトからdmgファイルを落としてインストールする必要があります。


んで、適当にプログラムを動かしてみたんですが…。
ちょっとしたプログラムでCPU利用率が80%とかいっちゃって萎えます。
とりあえず来週の頭にある研究室紹介用デモプログラムはOpenInventor on SDLで作りますかね…。

subversion

みなさん、バージョン管理システムは何使ってますか?
研究室で僕が所属しているグループではこれまでのCVSからsubversionへシフトしています。

CVSより機能的にどこらへんがすぐれているかはあまり分かってない(CVSもあまり使い込んでいないので)のですが、ディレクトリ移動とかもきちんとサポートしているらしく、悪くないです。
subversionはApache上で動くのですが(基本的にレポジトリの位置はhttp://やらhttps://やらで始まるわけです)、CVSと違って.htaccessによるアクセス制御をします。LDAPなんかと連携することも出来ますし、普通に.htpasswdとか使うのもOKで、多人数で扱うときは結構柔軟かもしれません。
当然httpsで通信路を暗号化することも出来ます。
それに、最新バージョンだけではあるものの、ブラウザからアクセスできるってのも面白いです。

まぁ、難点があるとすればApache 2上でしか動かないってことでしょうか…。


今日は、いままでうまく動いてなかったsubclipse(subversionのeclipseプラグイン)が動いたので備忘録代わりにのせときます。

Continue reading

今日のfink

パッケージに不具合があるというFinkのアナウンスがいつになっても消えないので、仕方ないので現行のFinkを導入しました。

で、今日いれてみたのはsedやらlsやら。
両方とももともとOS Xに入っているのですが、理由があってFink版を使うことに。

sedは、もともと入っている/usr/bin/sedのほうで/usr/bin/sed --version(もしくは-v)をやると入力待ち状態になってバージョン表記が出ないというバグ(?)があります。
configureの中でsedのバージョンを調べている最中に止まってしまって、こりゃだめだと思ったわけです。
最初はconfigureの中で
sed -v < /dev/null
とか書き換えてお茶を濁していたのですが(少なくとも入力待ちにはならない)、どっちにしろバージョンは分からないので心臓に悪いってことでFink版を使うことに。

lsのほうは、ディレクトリとかのカラー表示を有効にしたいなと最近になって思い始めたので。
もともとのlsは /bin/ls --colorとやっても色が変わりませんが、Fink版は色が変わります。
適当に.bash_profileでalias ls='ls --color'とかやって終了です。
ただ、Fedoraのようにtarやzipファイルを赤くするようにはなっていないようなので、そこらへんは設定ファイルをがしがしいじる必要があるっぽいです。まぁ、そこまでやらんでもいいか。

プログラムを書くということ

情報系の学科にいることもあって、ソースコード自体にはほとんど毎日さわっているわけなんですが(んー、さすがに大げさかな)、なんつーか、趣味のプログラムを書く段になると、それ相応の「やる気」みたいなのが必要な気がします。

研究室で書くプログラムに気合いが入ってないって訳じゃないんですが、趣味で書くプログラムと違って

・期限が決まっている
・仕様もたいてい決まっている
・Macでしか動かないプログラムはめったに書かない

ってなのがあるせいか、どうもプログラムへの取り組み方が違うような気がします。


こうやって書くと、趣味のプログラムの方が気楽でいいじゃんとも思うんですが、なんでかそちらのほうが「さぁ、気合い入れて書くぞ」みたいなのが必要です。
フリーウェアで公開してるってのも一因なんでしょうかね(公開してるっていっても半ば放置プレイでアレですが…)。

ほかのフリーウェア作家さんはどうなんでしょうか。知りたいところです。

分散オブジェクト

現在、研究室でCORBAならぬIceを触っています。

今日は自分で書いたC++コードを先輩にIceオブジェクト化してもらい、それを取り込むって感じだったんですが…。
なかなかうまくいきません(汗

なんてったって分散オブジェクトってばメモリ空間が自分のマシンじゃないもんで、デバッグとか訳分かりません。エラーログも意味不明だし…。
#そもそもC++のコンパイルエラーだって、STL使うと意味不明ですが…
ボスが帰り際に言っていた「分散環境の良いデバッグ環境があったら苦労しないよー」とのセリフが頭の中でこだましたりしなかったり。

僕自身はCORBAを触った事はないのですが、先輩&ボス曰く、IceはCORBAより速いらしいです。
そして、分散オブジェクト化するのも比較的楽なようで。これから僕も触っていくと思います。
というか、分散オブジェクトへのメソッドの引数に構造体しか渡せないっていう現状を打破しなければ^^;


こいつは余談ですが、国内でIce使ってる人ってほんと少ないらしく、googleでIce CORBAで検索かけるとうちのサイトが上位でひっかかっちゃうくらいマイナーだったりします。
なんとかならないもんですかねぇ…。

伝道

WindowsからMacへSwitchしようみたいなキャンペーンを昔Appleがやってました。
結構Winに対してネガティブなCMとかも放映されました。

あれがどのくらい効果があったのかは分かりませんが、GUIプログラムを書いた事のある人にはもっと魅力的に感じるような薦め方があります。

それは、Interface Builderを使ってソフトを作る事です。

Objective-Cのダイレクトバインディングを利用したインスタンス間のAction - Outlet接続は、知らない人にはとても不思議(奇妙)に映るでしょうし、NSTextViewをWindowにDnDするだけでエディタが作れる、なぁんてデモはとても感激してもらえます。
すくなくとも、これまでデモしてきて感激しなかった人はいません(笑

商用アプリを作るとなるとOSのシェアなどが問題になると思いますが、自分でちょろっとプログラムを組んで使おうって場合はObjective C + Cocoaが非常に楽で便利なんじゃないかと思います。
とりあえず、気軽で楽しいです^^

デザインパターン本

買ったまま放置していた(というか、途中で挫折した)デザインパターン本ですが、読み直そうと思って本棚から取り出してぱらぱらとページをめくってみました。

そしたら、ふむふむって感じで結構すんなり理解出来そうな感じです。
2年前はちんぷんかんぷんでしたが…^^;

というわけで、読み進めようと思います。さくさくいくといいなあ。

ICEを使おう

Internet Communications Engine : ICEをMacに入れました。
これも一筋縄ではいかず、BerkeleyDBやらexpatを先にいれ、さらにそれらのパスは自分でファイルに指定せにゃいけません。aptやconfigureしか基本的に使ったことのないわたくしにとっては荷が重かった^^;

ICEはCORBAみたいなもの…っぽいです(比較対象のCORBAも使った事がない…)。

次のゼミまでにOpenInventorの簡単なデモプログラムを作る必要があるのですが、余力があったらICEも一緒に使ってみたいなぁ。

OpenInventor導入

PowerBookにOpenInventor互換のCoinを導入しました。
初めはObjective-Cで触れるSC21を入れてみたのですが、あまりに資料がなく動きも微妙だったので(InterfaceBuilderのパレットがあったのは良かったんですが)、Qt上で動くSoQtを入れました。

Qtのmakeで悶絶してたのはそのためでした。結局makeに5時間くらいかかりましたが…。


とりあえずデモも動いたしいろいろいじってみますかねー。

Qtをmake中にOS頓死(汗

Qt/Macをconfigure, makeしていたんですが、2時間くらい経ったところでMessengerの名前のところを変更しようとしたらいきなりOSが止まりました…。
編集中のデータもすっとんだっぽい。

うざすぎる…。

なんていうか、めげずに生きていこうと思います。

WWDC 2004 Registration Now Open

というメールがADCから来ました。

一度は行ってみたいWWDCですが、チケット代+飛行機代+宿泊費を合わせるととんでもない額になってしまうので毎年涙をのんでいます^^;
去年は確か、有楽町でJobsの基調講演の衛星中継を見たような…。
#PowerMac G5が発表された時ですね

WWDC 2004 E-ticket for US$1,295.
だそうで…。ちょっと趣味で行ける金額じゃないですよねー。
というか、昔作ったパスポート(赤いの)だって切れてるので、全然海外に行ける状態じゃなかったり^^;

Remote Method Invocation

現在、Javaで稚拙な画像解析プログラムを組んでるのですが、凝ったアルゴリズムを実装すると待ち時間が結構長くなっちゃいます。
もうちょっと実装方法を吟味してもいいんですが面倒なんで(ダメ)、サーバをぶん回して一部の処理をRMIを使って肩代わりさせてみようと思います。
マーシャリングとかにどれくらいのコストがかかるかがキモですな…。

つーか、RMIって楽そう…。

Eclipse初体験

どうもルックアンドフィールが嫌で今まで敬遠していたEclipseですが、本日初めて腰を据えて使ってみました。

すばらしい!(笑)

いやはや、こんなに強力なものとは思いませなんだ。
パッケージ間の移動も何のその、メソッド補完や型チェック、名前チェックは当たり前ときております…。
今後活用したいと思います。今までの苦労が馬鹿みたいだ…。

CVSも楽だしなぁ。いい感じでございます。
CVSをEclipseで使う資料を探してたら、野村総研作成のPDFがありました。こんなのもやってるのねぇ。


しかしねー。あのルックアンドフィールはMacユーザからは敬遠されても仕方ないと思うわけですよ。
なんなんだ、あのタブとメニュー、ダイアログボックスは(泣

あと問題なのは、うちのMacじゃ重たいってことでしょうか…。
新しいマシンが欲しくなります。

コンピュータ史

僕が通っている学科は情報系なのですが、「コンピュータ史」関係の講義がありません。
Googleでざっと検索したところ、他の大学では専修大学などで開講しているようですが、あまり他大学でも一つの独立した講座として開講しているところはあまりないようです。
#専修大学の講義の参考ページとしてこちらがあげられてますが、なんかうわっつらの情報しか載ってなくて残念…。

Continue reading

続:なんてこったい

下のCoreAudio.pdfを斜め読みしたんですがね。

なーんか、AudioToolboxあたりが強力になっている予感。
MusicSequenceでイベントに対してCallback関数が使えますか?
…まじ?

暇を見つけて試してみよう…。

なんてこったい

Developer Toolsをインストールしている人は
file:///Developer/Documentation/MusicAudio/Reference/CoreAudio/CoreAudio.pdf
ここにあるCoreAudio.pdfですが。
以前配布されているものよりも版が新しくなっていました。
SimpleMIDIPlayerこれ読まずにリリースしちゃいましたが^^;

読み直さないと…。
しっかし、英語で100ページ以上あると萎え気味ですなぁ。
未だにPreliminaryって書いてあるしなぁ。CoreMIDIはOS Xのバージョンがあがるごとに変わるし。現在はCoreMIDI 1.4かしら。
#1.4はHeaderにしか情報が載ってないような。
#まぁ、1.3とかもそうだったのだけど、このCoreAudio.pdfに載ってる事を期待。

シェアウェアの金額

僕はまだフリーウェアしか書いたことがないですが、世の中にはそれはもう数多のシェアウェアが溢れかえっている訳です。
値段が決まっているものもありますが、「あなたが価値があると思った額だけ」てのもあります。

Continue reading

CVS

いい加減自宅のマシンにCVSあたりを入れとかないとソースがぐっちゃぐちゃになるってことで導入を検討開始。
あ、もしかして研究室のサーバに入ってたりして。っつーか、それを勝手に使えるかは分かりませんが。
…っていうか、CVS自体いまいち分かってないですが(汗

あ、でもPantherが25日に出るからなぁ。それからのほうがいいか…。うーむ。
とりあえず、「さっき動いてたのに〜〜。時間よ戻ってくれ〜〜(泣)」みたいな悲劇は二度と起こしたくない感じ。

アプリ作成

こう、なんていうか、じり貧生活に突入しはじめると、突如として
シェアウェアでも作って、大儲けだ!
とか思い付いたりする自分が駄目だ^^;

身の程を知れ>自分

あと、OS 9時代の偉大なシェアウェアMIDIシーケンサ、MIDIGraphyが2000円だったことを考えると(その上登録しなくてもフル機能使える)、生半可なものをシェアウェアにするべからず、と思い知らされます。
いやほんと、MIDIGraphyは凄い…。あれはOS Xに移植されないのかなぁ。

ピアノロール部分とか、どうやってプログラミングすると効率がいいんだろうな…。うーん。情報希望。

リファクタリング

/.Jでリファクタリングが話題に上っています。

ウォーターフォールモデル云々をソフトウェア工学で習い、最近はXPだと盛り上がっていたりするわけですが、実際授業で教えるのと現場の声とではだいぶ違うような気がします。

リファクタリングするにも前提条件が色々あるってのは、考えてみれば当然だけど、リンク先の記事を読むまで気付かなかったなぁ。反省。

Mission C

とりあえず、これを見て下さい。

誰か買って下さい。そして、僕にください。
買いたくないけど、一度は見てみたいっていうか…。

Mission Cっていう名前がとりあえずステキ。

Index of all entries

Home > Programming Archive

Search
Feeds

Return to page top