Xcode日記 (1)

長嶋 洋一

(一部 「openFrameworks日記」かも)

(一部 「Unity日記」かも)

(一部 「Max7日記」かも)

(一部 「続・Myo日記」かも)

(一部 「Kinect日記」かも)


→ Xcode日記(2)

→ Xcode日記(3)

2015年4月12日(日)

去年の mbed日記(1)mbed日記(2)mbed日記(3) を経て、以下のようにCQ出版「インターフェース」誌2015年4月号「生体情報の信号処理」特集記事を出した、という件は、その後の Myo日記 で補足して、2014年度の最後、2015年3月31日で一応、完結した。

そこからわずか10日あまりしか経過していないが、予想通りに密度ギッシリ、疾風怒濤の新学期冒頭が過ぎつつある。 1週目は準ゼミ・新4回生の藤石さんが研究室に来たぐらいだったが、春休みにバイトしていたデザイン系企業に行けそうな彼女は、本来の的場ゼミでのプロジェクトとは別に、Unityやマイコンのプログラミングにも興味があり、今年も仮ゼミの日に勉強のために来てくれることとなった(^_^)。 今年は4回生のゼミ生がいないので楽である一方でやや気抜けする(他ゼミ・他学科の学生の後方支援に回る)ので、これはいい励みとなる。 以下のように1106に2個、揃ったMyoのうち1個を彼女に貸し出して、「Myoゲーム」の実現を応援することにした。

4月の1週目はそれ以外に、8月に東京で開催される国際会議「 The 8th International Symposium on Visual Information Communication and Interaction (VINCI2015) 」に応募する論文を頑張って執筆して提出完了(ネタはMyoパターン認識)、そしてこれに隣接する日程でシンガポールで開催される国際会議「 2nd International Symposium on Sound and Interactivity(SI2015) 」に応募する論文を頑張って執筆しつつあるところで入学式の週に突入して、原稿執筆は途中である(^_^;)。 この両方が採択されれば、シンガポールを深夜に発って羽田に到着してそのまま都内の一橋ホールに直行、という学会連チャンになる。

そして、壊れた ニンテンドーDSを分解 したり、上のように 入学式 があったり、 新入生ガイダンスメディア造形2/3/4回生ガイダンスがあったりして、今年は3回生の学年担当ということで和田先生と3回生全員との面談をしたりして、あっという間に2週目が終ってしまった。 週末には、業者にいくら払って作ったのか不明(^_^;)だが、 SUAC公式映像 というのも公開された。 Myo日記 に書いていた、Max7についても、Cycling'74と連絡をとって、研究室のとりあえず4台についてUpgrade購入を依頼した。 そして、今週その合間に起こったことが、この日記の発端である。 その伏線は2つ。 いずれも Myo日記 の後半に書かれていたことだが、「ダブルMyoが出来なさそう」という懸案と、ロシアの友人、Denis Perevalov氏とのやりとり、という2点である。

Denisが2013年に出した上の本、 Mastering openFrameworks: Creative Coding Demystified は、著者であるDenis本人に依頼されて英国の出版社から僕に送られてきたので、1106研究室にある。 YAHOO.COMで「Denis Perevalov OpenFrameWorks」で検索すると、 これ とか これ とか これ とか これ とか、彼が参加したプロジェクトの動画がたくさん出て来る。 そしてなんと、この本の目次の前の「謝辞」のところには、以下のように、僕の名前があるのだ。(^o^)

この本をたまたまパラパラと眺めていたら、新しく買ったYosemiteのMacBookAirだと、openFrameworksも動かせるのだ、と判明した。 去年、この本が届いた時に調べた範囲では、openFrameworksを実験しようにも、対応したXcodeが入らないバージョンだったので断念バーグしていたのである。 また、藤石さんに1個、Myoを貸し出したのだが、やはりスペアは欲しいので、新たに1個(今度はWhite)を発注した。 来週には届く予定である。 そこで、「ダブルMyo」を実現するために避けていたSDKをまともに使おうとすれば、Mac上での開発環境、すなわちXcodeが必要になる。 こちらもOKだ、ということで、まったく別々だった2件の伏線が、「Xcode」というキーワードで浮上してきたのである。

実はXcodeについては、かつて赤松さんの上の本、 iPhone SDKの教科書-Cocoa Touchプログラミング、最初の一歩 を1106研究室に3冊、専用の3台のMac miniとともに完備して、ゼミ学生でiPhoneアプリの開発に興味ある学生との勉強会で使っていたのだった。 ところがXcodeの対応バージョンが10.7になった時点でストップとなり、数年にわたって放置されていたのである。 当時、SUACのUniversityアカウントで申請したものの、Appleから本当に教育機関の教員であることの確認電話が深夜2時とか3時にかかってくる(^_^;)、ということで、これも申し込みしつつも中途半端な状態で止まったままだった。

そして、新たにUniversityアカウントを停止させて、個人でApple Developerに登録して、XcodeのActivationキーを購入しようとすると、上のように意味不明なエラーが頻発して、3回生の面談をやりつつ合間合間におよそ1日がかりで、ようやくXcodeが走るようになった。 そこで一気にDenisの本からopenFrameworksのサイトに行き、Xcodeに対応したopenFrameworksの一式もゲットしてみると、以下のように見事にサンプルのopenFrameworksプログラムがXcodeでコンパイル出来て、走った(^_^)。

これが一昨日の夜の到達点であり、明日からの開始点なのである。 とりあえず、まだ何人か残っている3回生との面談と、明日にはメディア造形2回生「サウンドデザイン」、明後日には全学3回生「企画立案演習」、水曜日にはメディア造形3回生「音楽情報科学」と仮ゼミの初日があるので、その合間にまずはopenFrameworksのサンプルを走らせてみよう。 さらに新しいMyoが届いてまた「ダブルMyo」となったら、今度はきちんとXcodeでSDKからダブルMyo対応のOSCツールを作ってみたい。 書きかけの論文を完成させてシンガポールに送る必要もあり、まだまだギッシリと詰まった日々が続くのである。

2015年4月13日(月)

いよいよ新学期の初日である。 ややテンションが上がって、ちょっと遅めだった春休み体制から復帰して、朝7時には研究室に出てきた。 Appleからは、週末にあれこれトラブルを報告していたメイルに対しての返信が届いて、無事にDeveloperとしてのアカウント(1年間99ドル)が今日からスタートしたらしいが、別に出来たアプリケーションをAppStoreで売るつもりもないので、これはあまり関係ない。 まずは今日の4限の サウンドデザイン の講義ページを上げた。 たしか去年と一昨年の「サウンドデザイン」初日には、Maxの紹介を兼ねて学生にいきなり心理学実験の被験者をやってもらって、その内容で5月の音知学会の発表をした記憶があるが、今年は既に発表予稿を出してしまっているので、余裕である。 2月に発表したインスタの新作(錯覚体験)と、Myoでの筋電パターン認識でも見せてみよう。

上は、昨日の晩にチラッとやってみた、openFrameworksのサンブルで何か出て来たものの一部である。 コンパイルしても何も出て来ないものも多く、謎解きはこれからである。 openFrameworksのサンプルライブラリの中にも「OSC送信」「OSC受信」というのがあったので、これも実験してみよう。 ただし、どうもXcodeに入り込むと中断してしまいそうなので、ググッと堪えて、まずは シンガポールの国際会議 の応募論文を完成して投稿してしまうことに決めた。 まだ締め切りは先なのだが、中身は揃っていて英語の作文だけなので、ここは今週中に片付けてしまいたいのだ。

そして、午前から3限まで、あれこれ苦労しつつ英作文をしていたが、その裏で、ちょっと「初めての冒険」(^_^;)もしていた。 これまで、僕は基本方針として「MacのOSはバージョンを上げない」というポリシーで来ていたのだが、今回、10.6だったMacを全て10.7に上げたのを機に、なんとその「10.6で購入して10.7に上げたMac」 を無謀にも「10.10ヨセミテまで上げる」という事に挑戦したのである。 お仕事Mac miniは怖いのでさすがにパスして(^_^;)、2台あるMacBookAirのうち、ときどき仮死状態になる、学内で余った(使っていた先生が退職した)のを引き取った方のMacBookAir_2に、まずこれまで断り続けてきた「iTunes」と「AppStore」を最新にupdateしてから、遂に初めてAppStoreに繋いで、Yosemiteをダウンロードした。 ネットで調べていると「Time Machineでバックアップは必須」とあったので、慌ててバックアップも取り、とにかくやってみた。 駄目だったら元に戻せばいいからである。 そして、もう1台のMacBookAir_1も「iTunes」と「AppStore」を最新にupdateして、Time Machineでバックアップして、さらに後追いでYosemiteのダウンロードをしよう・・・とAppStoreに繋ぐと、上のように問題が起きた(^_^;)。 何度やっても、ログインでエラーが出るのである。

そこで仕方なく、Appleのサイトからサポートに連絡すると、上のように「電話サポートに電話して」の画面となった。 あまりにも貧弱で名高いAppleサポートセンターだが、駄目モトで電話してみると、あっさりスタッフに繋がり、そしてチラッと言われるままに操作すると、なんとなんと急転直下、解決してしまった(^_^)。 電話してからたった3分ほどである。 こんなところで運を使い果たしたくないが、たぶんこれは相当にラッキーだったのではなかろうか。
・・・そしてここからさらに2時間ほどして、ようやくMacBookAir_2がYosemiteになった。 ちょっと遅くなったのは気のせいかもしれないが・・・。(^_^;)

2015年4月14日(火)

昨日はその後、YosemiteになったMacBookAir_2が立ち上がらなくなり(^_^;)、そのまま大学を後にして帰宅した。 そして気になって朝6時半から研究室に出て来て、 ここ とか ここ とかを見て、初めての「コマンド+R」リセットというのでディスクツールを呼び出しての修復などを経て、ようやく正常になったのは昼過ぎであった。 その間に、いろいろな学生のアポを受けて面談したり、あれこれあれこれ雑務に追われた。

それでも、だいたい大丈夫だと判ったのでMacBookAir_1もYosemiteにして、さらに このように 新しい白いMyoが届いたり、さらに4ライセンスのMax7を正規に4台のMacにインストールしたり、余勢を駆ってMacBookAir_1とMacBookAir_2にMyo関係とleap motionを入れたりした。 そして「企画立案演習」が終わり、アカペラである。 充実の1日となった。

2015年4月15日(水)

昨日にも増してタイヘンな日である。 1限に「音楽情報科学」の初日、2限に仮ゼミの初日、昼休みにマブンちゃんの面談アポ、午後には某社との共同研究の初日ミーティング、さらに5限にも学生アポがあり、放課後はデザイン学部の新歓である。(^_^;)

そんな合間に、新しくMax7も加わったので、互いにパッチが互換であるというMax5とMax6とMax7を比較してみした。 上は、この2月に展示したインスタレーション作品「Dazed & Confused」のMax6パッチの一部である。

そのパッチ「Dazed & Confused」をMax5に食わせると、上のようになった。 もはや、この「細い直線」が懐かしい。(^_^;)

そして上が、このパッチ「Dazed & Confused」をMax7に食わせた画面である。 なんという変貌、これはちょっと、なかなか好きになるのに時間がかかるかもしれない。(^_^;)

ここまで、3台のMacBookAirがYosemiteとなったが、ちょっとお仕事Mac miniは10.7.5より上に上げる自信がない。 3台はMax7だけでなく、Myoとleap motionも入れたが、Xcodeは最新の3号機だけである。 ここ によれば、複数台のMacで同一ライセンスでXcodeを入れられるようであるが、ちょっと面倒らしいので、Myoツールを作ってバイナリだけ移行する、という方針である。

2015年4月16日(木)

昨日は放課後の デザイン学部・新歓 が盛り上がり、さらに勢いでメディア造形の4回生の3人(下の写真)とともに日付変更線までカラオケ2次会に行き、起床したら朝10時だった(^_^;)。 今日は4限に軽音の学生のアポ(顧問として書類にサインするだけ)、5限の学生委員会だけが予定になっていて、ちょっとだけ息抜きの日である。 ただし、明日から3日間の準備があれこれ必要なのだ。

実は昨日のこの日記の後で、改めてMacBookAir_2を立ち上げてみると、なんとも異常に遅い事実に遭遇した(^_^;)。 さっそく「yosemite 遅い」で検索して、 ここ に書かれている事をあれこれあれこれやってみると、ようやく快適になってきた。 やれやれ、と安心して新歓に行ったので、ワインも進んだのだった(^_^;)。

2015年4月17日(金)

この日は朝に研究室に出たものの、バスで浜松駅に行き、新幹線で関西に向かい、午後〜夕方は大阪・某所のホテルで缶詰になって、 2nd International Symposium on Sound and Interactivity(SI2015) に応募する論文を執筆していた。 この国際会議は、何故かMacに入っていない特殊な「チャラい」フォント(CambriaとかCallbriとか)で書くことが必須となっていて、研究室のお仕事Macにしか入れてなくてまたまた慌ててダウンロードしてゲットしたが、うっかりすると有料で入手するフォントが、しっかり探すとフリーでゲット出来るというのが面白い(^_^;)。 実は今日の有休、そして明日と明後日までの関西滞在には目的があるわけだが、これは後日、明らかになる。

なかなかXcodeに戻ってこないが、一つ、思いついてしまったこ事をここで備忘録として書いておこう。 新しいMacでは、Myoとleap motionが両方とも使えるので、今回、新たにMyo版として開発した「ジェスチャー認識」については、「leap motionで獲得した5本の指先と手首から先の画像認識情報」と「Myo+リサジュー解析のリアルタイム情報」を刻々と照合することで、延々と面倒くさい「ジェスチャー登録」のステップを簡略化できないか、というのがアイデアの第一である。
そしてもう一つのアイデアは、同じように延々と面倒くさい「ジェスチャー登録」のステップを簡略化するために、適当にうにうにやってもらっている様子をベイズ(事前学習ナシの機械学習)として取得できないか・・・という、こちらはちょっとチャレンジングな発想である。 これはダマシオのSMHとSethの理論からすると妥当なアプローチではあるが、たぶんまだ誰もやっていない未踏の秘境である。

2015年4月19日(日)

金曜日に有休を取って、昨日の土曜日は 熱き甲子園・2015 で燃えてきた(^_^)。 そして大阪から昼過ぎに浜松に帰ってきて、無事に 2nd International Symposium on Sound and Interactivity(SI2015) への応募論文をEasyChairからアップロードして、こちらも1件落着となった。 これが採択されれば、この夏はシンガポール行きであり、不採択ならまたリンツのアルスエレクトロニカに行く、という予定だ。
ただし、今朝、ANAから届いた以下のメイルには驚かされた。

いつもANAをご利用いただきありがとうございます。

ご予約のフライトが運休となりましたことをご案内いたします。

ご利用のお客様には大変ご迷惑をおかけいたしますことを深くお詫び申し上げます。

■ANA予約番号
 33***P

■ご搭乗者名
 NAGASHIMA YOICHIMR 

■フライト
≪変更前≫
[1]7月30日(木) NH7264
 ロサンゼルス - ツーソン
 20:45発22:11着
 座席番号:6C
 エコノミー:S / OK 
 SKYWEST DBA UNITED EXPRESS運航のコードシェア便です。

※現在、振替便のご用意ができていません。

便名変更や、乗り継ぎができない等の理由で振替便の手配が必要な場合は、弊社より順次ご連絡差し上げます。

時間変更のみで乗り継ぎ時間を満たしている場合は、このメールをもってお知らせといたします。
eチケットお客様控えの発着時刻表示は更新されませんが、引き続きご利用いただけます。
最新のスケジュールは予約確認画面からご確認ください。

これには慌てて、研究室に着いてさっそくANAマイレージクラブの会員窓口に電話したが、どうもANAは国際線の予約システムを全面改訂したらしく、問合せ電話が殺到していて30分ほど待ち続けて、ようやく繋がった。 結果として、既に購入済みのチケットから、「羽田→LA」というフライトの代わりに「成田→LA」に変更してもらって、座席指定まで完了した。 ただし、eチケットが更新されないのだが、ちょっとした時間変更ならともかく、空港まで違うのに「引き続きご利用いただけます」というのはちょっと嫌なので、さらにこの問合せをメイルした。 出発が半日ほど早くなり、乗り継ぎのLA空港で数時間、ラウンジで゛待機することになるが、ツーソン到着が1時間ほど早くなったので、まぁ、怪我の功名という感じでもある。

2015年4月20日(月)

甲子園の巨人戦3連戦で唯一の勝利を堪能して、ようやく新学期の2週目の幕開け、いよいよ4限の専門科目「サウンドデザイン」もMaxプログラミング三昧のスタートとなる。 来週には例年より早く「音楽室」の予定が取れたので、今年は例年よりもさらに広く深く、すっ飛ばして進められそうで、朝から気合いを入れて「講義ページ」の今日のところを整備した。
さて、なかなか始まらないXcodeの前に、いくつかのセンサ開発ネタの宿題をここで確認しておくと、 Myo日記 の「2015年2月27日(金)」のところに書いたように、leap motionに加えて以下の3つのセンサを仕入れて、まだ遊んでいなかった。

上は、Felicaのあれこれ(各種タグ、リーダ/ライタ等)である。 Arduinoを使ってfirmata化するか、Propellerにするか、はたまたmbedでNucleoF401REを使うか、まだ未定であり、実際にこれを使いそうな仮ゼミメンバーないし「音楽情報科学」のチームが出てくれば、一気に集中して片付けよう、と後回しになり続けている(^_^;)。

上は、「PAWセンサ」という「tactile sensor」である。 中身には2個のLEDと2個のフォトトランジスタがあり、全体がウレタン(スポンジ)で覆われている。 このウレタンをうにょうにょと押す触覚的ニュアンスを検出できるもので、「触らない楽器」シリーズの後に続く「触りまくる楽器」のために仕入れたものの、これも具体的ターゲットが決まらない状況で後回しになり続けている(^_^;)。

そして上は、Myoに入っているのとほぼ等価な「9軸センサ」[3次元加速度、3次元角加速度(ジャイロ)、3次元の地軸方向]である。 これはホストインターフェースが「I2C」であれ、逃げずにI2Cをやっておくと、これまで使っていなかったA/Dチップ(I2Cタイプ/Raspberry Pi用)も使えるようになるので、一挙両得であるが、いまだ後回しである(^_^;)。


そしてここに加わったのが、上のレーザードップラーセンサである。 これはここに詳しく書けないプロジェクトのために購入したが、チラッと取説を見たところでは、距離センサではなくて「近接・離散」検出、つまりクルマの衝突防止センサに使われるもののようである。 これは、プロジェクトのミーティングでもう少し掘り下げて検討してから着手する、ということで、今のところ後回しである(^_^;)。

このようにリマインダとして宿題をメモしておく事で、エアポケットのように時間が出来たときに取り組む体制を整えておくが、なかなか新学期はその時間が取れそうもなく、ヘタすると5月の連休のテーマとなるかもしれない。 午前には、新潟でのPRMU研究会の原稿執筆依頼のメイルが電子情報通信学会から届き、 プログラム も公開された。 次々に締め切りが迫ってくる日々、これぞ「日常」である(^_^;)。 このプログラムを検討して旅程を修正して、午後イチの「[招待講演]しあわせインタフェースデザインと障害者支援による社会活性化」に間に合うようにした。 その後、わずかな時間にXcodeでMyo-OSCを調べ始めたところで今日はおしまい、3限に静大生(単位互換制度でSUACに来るのでついでに聴講希望)の稲垣さんのアポと4限の「サウンドデザイン」があり、続きは明日である。

2015年4月21日(火)

この日は4-5限に企画立案演習、放課後にアカペラという日で、朝から3限までは「Xcode三昧」の時間ということで、朝7時前から気合いを入れて1106に出て来た。 SUACの事務関係とか学会イベント関係のメイルも届いておらず、順調にスタートである。

そして昨日の続きとして、 Myo-osc のサンプルをXcodeにつっこんであれこれ試行錯誤して、朝の9時過ぎには上のように、見事にXcodeでオリジナルの「Myo→OSC」プログラムが完成して走った(^_^)。 これは Myo日記 の「2015年3月28日(土)」のところにあった、「Myo-OSC は、1個のMyoで9軸センサ情報だけを取得する場合にのみProcessingナシでMaxから使える」という判定の発展系である。 バイナリをそのまま走らせるのでなくXcodeでソースを改訂したので、9軸センサの情報だけでなく筋電データもONにして取得していて、当然ながらProcessingを経由せずにOSCをMaxに送れるのだ。 これで、明日のゼミで藤石さんからペアのBlack-Myoが返ってくれば(代わりにWhiteを貸し出し)、懸案の「ダブルMyo」も、さらには「Deep Sleepモード」の設定も出来る可能性が大きく高まった。 このバージョンでソースの「myo-osc.cpp」を複製して「myo-osc_OK_02.cpp」とリネームしたのが以下である。

#define MAC "00:00:00:00:00:00"
#define _USE_MATH_DEFINES
#include <cmath>
#include <array>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <stdexcept>
#include <string>
#include <myo/myo.hpp>
#include "osc/OscOutboundPacketStream.h"
#include "ip/UdpSocket.h"
#define OUTPUT_BUFFER_SIZE 1024

UdpTransmitSocket* transmitSocket;

class DataCollector : public myo::DeviceListener{
	public: DataCollector(): roll_w(0), pitch_w(0), yaw_w(0), emg() {}
	int roll_w, pitch_w, yaw_w;
	float w, x, y, z, roll, pitch, yaw, a_x, a_y, a_z, g_x, g_y, g_z;
	char buffer[OUTPUT_BUFFER_SIZE];
	std::array<int8_t, 8> emg;
	void onUnpair(myo::Myo* myo, uint64_t timestamp){
		emg.fill(0);
	}
	void onEmgData(myo::Myo* myo, uint64_t timestamp, const int8_t* emgData){
		for (int i = 0; i < 8; i++){ emg[i] = emgData[i]; }
		osc::OutboundPacketStream p(buffer, OUTPUT_BUFFER_SIZE);
		p << osc::BeginMessage("EMG") << MAC << emg[0] << emg[1] << emg[2] << emg[3] << emg[4] << emg[5] << emg[6] << emg[7] << osc::EndMessage;
		transmitSocket->Send(p.Data(), p.Size());
	}
	void onAccelerometerData(myo::Myo* myo, uint64_t timestamp, const myo::Vector3<float>& accel){
		a_x = accel.x();
		a_y = accel.y();
		a_z = accel.z();
		osc::OutboundPacketStream p(buffer, OUTPUT_BUFFER_SIZE);
		p << osc::BeginMessage("Accel") << MAC << a_x << a_y << a_z << osc::EndMessage;
		transmitSocket->Send(p.Data(), p.Size());
	}
	void onGyroscopeData(myo::Myo* myo, uint64_t timestamp, const myo::Vector3<float>& gyro){
		g_x = gyro.x();
		g_y = gyro.y();
		g_z = gyro.z();
		osc::OutboundPacketStream p(buffer, OUTPUT_BUFFER_SIZE);
		p << osc::BeginMessage("Gyro") << MAC << g_x << g_y << g_z << osc::EndMessage;
		transmitSocket->Send(p.Data(), p.Size());
	}
	void onOrientationData(myo::Myo* myo, uint64_t timestamp, const myo::Quaternion<float>& quat){
		using std::atan2;
		using std::asin;
		using std::sqrt;
		float roll = atan2(2.0f * (quat.w() * quat.x() + quat.y() * quat.z()), 1.0f - 2.0f * (quat.x() * quat.x() + quat.y() * quat.y()));
		float pitch = asin(2.0f * (quat.w() * quat.y() - quat.z() * quat.x()));
		float yaw = atan2(2.0f * (quat.w() * quat.z() + quat.x() * quat.y()), 1.0f - 2.0f * (quat.y() * quat.y() + quat.z() * quat.z()));
		osc::OutboundPacketStream p(buffer, OUTPUT_BUFFER_SIZE);
		p << osc::BeginMessage("Orient") << MAC << quat.x() << quat.y() << quat.z() << quat.w() << roll << pitch << yaw << osc::EndMessage;
		transmitSocket->Send(p.Data(), p.Size());
		roll_w = static_cast<int>((roll + (float)M_PI)/(M_PI * 2.0f) * 18);
		pitch_w = static_cast<int>((pitch + (float)M_PI/2.0f)/M_PI * 18);
		yaw_w = static_cast<int>((yaw + (float)M_PI)/(M_PI * 2.0f) * 18);
	}
};

int main(int argc, char** argv){
	try{
		int port = 7777;
		std::cout << "Sending Myo OSC to 127.0.0.1:7777\n";
		transmitSocket = new UdpTransmitSocket(IpEndpointName("127.0.0.1", port));
		myo::Hub hub("com.samy.myo-osc");
		std::cout << "Attempting to find a Myo..." << std::endl;
		myo::Myo* myo = hub.waitForMyo(10000);
		if (!myo){
			throw std::runtime_error("Unable to find a Myo!");
		}
		std::cout << "Connected to a Myo armband!" << std::endl << std::endl;
		myo->setStreamEmg(myo::Myo::streamEmgEnabled);
		DataCollector collector;
		hub.addListener(&collector);
		while (1){
			hub.run(1000/20);
		}
	} catch (const std::exception& e) {
		std::cerr << "Error: " << e.what() << std::endl;
		std::cerr << "Press enter to continue.";
		std::cin.ignore();
		return 1;
	}
}

ようやく「Xcode日記」らしくなってきたので、さらに進めよう。 まず上のソースを眺めていて、方向センサのデータがこれまでの3データでなく、「quat.x()」・「quat.y()」・「quat.z()」・「quat.w() 」・「roll」・「pitch」・「yaw」の7つであると気付いた。 まぁ使わないのであるが、ここは最後の3データが今までと互換なので、対応するMaxパッチの方を変更した。 そしてさらに色々と調べて、以下のような情報もゲットした。

そして午後1時半には、Xcodeで開発した「myo-osc」はそのまま変更せずに汎用Myoインターフェースとして起動した上で、Myoサウンドをデモするパッチと、ジェスチャー認識パッチ(下)をさらに改訂して完成させた。

これで、電子情報通信学会パターン認識研究会(新潟)での発表のためのデモツールが完成したことになる。 そこでいったんXcodeを中断して、なるべくサッサと、忘れないうちに、この発表予稿を作ることにした。
・・・ところがまたまた、過去に電子情報通信学会に出した予稿をテンプレートとして引っ張り出したところ、「MS明朝フォントがありません」と叱られた。 どうやらMacOSをアップデートすると、フォントがdefaultに戻されてしまうらしい。 仕方なく、研究室に3台しかない(うち1台は液晶画面が見えなくなったDELLのノートPCでCRT外付必須(^_^;))WindowsXPマシンを立ち上げて、フォントデータをUSBメモリで引っ越しさせたら、ようやく見えるようになった。

2015年4月22日(水)

水曜日、去年までは金曜日だった「ゼミの日」である。 1限の「音楽情報科学」では、朝から準備した、濃い Maxの復習教材 を提示した。これらのパッチは実戦的なMaxプログラミングに有効なエッセンスが凝縮されているのだが、どこまで学生に伝わるかはやや微妙である(^_^;)。 そして2限には、先週の初日では何人も来たものの予想通りに減って、病欠のブンちゃんを除くと準ゼミの藤石さんと、あと加奈子・前澤という馴染みの(昨晩もアカペラで一緒)少数精鋭メンバーがほぼ確定した。

まずは上のように、新しいMyoの 開封儀式 があり、藤石さんが東京のイベントで軽くVJデモッてきた、という「Myo+Unity」を皆んなで見た。 そして3回生2人の企画案などの議題の後で、なんと今年の長嶋ゼミのテーマの一つとして Unity勉強会 をやっていこう、という話になった。 ここに来て、ようやく重い腰を上げてXcodeそしてopenFrameworksという新しい体系を勉強しよう・・・と思っていたところに、さらにこれまで避けに避けてきたUnityである。 「毒喰らわば皿まで」というのは、こういう状況のためにある言葉なのだ。





そして学生が去った昼休みには、上のようにサクサクとUnityのダウンロードとインストール、オンラインでユーザ登録してのオンラインアクティベーション、そして最初のWelcome画面まで、そこそこ進んだ。 ところがこれをMacBookAirの1号機と2号機に入れようとしたところ、まずUSBイーサネットアダプタのドライバをまだ入れていない事が発覚し(^_^;)、そこからあたふたと作業しているうちに時間が経過した。 来週からは藤石さんを先生として、僕と仮ゼミの3人がUnityの勉強会というパートが始まり、当然、僕は「Unity←OSC→Max」などのインターコネクションの調査・実験の担当となる。 しかしこれで、ますますここは何の日記なのか判らない事になりそうである。(^_^;)

・・・その後、5限のメディア造形学科会議の後で、両腕にMyoを嵌めてしばらくXcodeと格闘したところで時間切れとなった。 続きは明日である。

2015年4月23日(木)

週も後半である。 金曜日のゼミ日が水曜日に移動した、開学以来の大変革の新しい時間割となって、今年の前期は月〜水で担当講義が終ってしまい、木・金はあれこれ「仕込み」の日となった。 今日は月に一度の教授会が4限にあるだけで、朝から前日の続きである。

・・・そしてそこから3時間ほど、息をつめて集中してあれこれエラーメッセージと戦いつつ試行錯誤して(なんせツールのXcodeを知らないでプログラミングしているので、トラブルの原因がMyo関係なのかXcodeなのか、交互に行き来するという難航(^_^;))、遂に昼前には、上のようになんとか「myo-osc」と「multiple-Myo」を合体させて、左右のMyoからの9軸センサ情報について分離してOSCから出してMaxで受けて表示する、というところまで進展した。 この時点のXcodeソースは これ である。 この中で1行だけコメントアウトしている「EMGストリームをONに」という、1個のMyoであればOKだったところがエラーになるので、まだ肝心の筋電情報はまったく受けとれないが、少なくとも9軸センサ情報については「ダブルMyo」が出来た、というのは「半歩前進」だろう。

・・・そして昼食から1時間、息をつめて集中してさらに攻略して、遂に昼休みの終る13時には、なんとダブルMyoが完成してしまった(^o^)。 Xcodeソースは これ である。 判ってしまえば何でもないが、シングルMyoのサンプルのようにmain()から「EMGストリームON」のコマンドを送るためには、初期設定でMyoごとに割り当てられているID番号を指定できなかったのだが、どうせ常に筋電ストリームONなので、Myo Armband Managerが最初にMyoを掴むところ(onPair)で指定すれば良かったのだった。

さらに、ここに最初の接続時に短時間のvibrateを入れて動作確認し、マニュアルから発掘した「lock」コマンドも発行した。 これは地味に重要な改良で、Myoはdefaultでは「静かに何もしない」でいると、一定時間で勝手にsleep、つまりdisconnectしてしまうのが、ライブComputer Musicの「楽器」としての致命的な特性だったのだが、これまで解決してしまった。 Armband ManagerからそれぞれのMyoを個別にconnect/disconnectしても、次にconnectした時にはまたonPair()が呼ばれて「EMGストリームON」と「lock」(sleepしない)が再発行されるのだ。

あと残ったのは、飛行機などの移動のための「deep sleepモード」への移行だけだが、これは別にOSCと関係なく、単独のツールとして開発すればいい。 ただしSDKのリファレンスには載っていないようなので、別なルートからの新たなアプローチが必要となりそうだが、それにしても今日は大きな進展となった。 Myo日記 の後半に、暗雲のように漂っていた「ダブルMyoが出来ない」という課題が、[Xcode + SDK + myo-osc] という環境で見事に晴れ渡ったのである。(^_^)

そしてここから、どこかで見ていた「deep sleep」を、まずはMyoのDeveloper Forumで検索してみると、なんと このように 驚きの結果を発見した。 今日の時点で5件のトピックがあるが、要するに「まだ出来ない」のだという(^_^;)。 おまじないのような、「Visual C++ Redistributable Packages for Visual Studio 2013を持っていて」・「64ビットのWindows」である場合にのみ動く、「バグがあり」・「他の問題もあるカモ」というexeだけ提供されているが、そんなヘンなものは使えない。 Developer Forumのトピックの中でも、僕と同じように「飛行機で持ち運べないじゃん」というクレームが出ていた。

ここで、再度 Myo日記 から「deep sleep」を検索してみると、これは BLE specification of the Myo armband に記述されていた。 つまり、Myo内部のCPUファームウェアとしては定義してあるが、これはBluetooth経由、つまりUSBドングルから送るコマンドであり、SDKから送る、つまりArmband Managerから(USBドングル経由で)送れるものではないのだ。 Armband Managerへのアクセスとして、この BLE specification of the Myo armband がUSBドングルを「素通し」で行ってくれるようにはなっていないのだった。 Developer Forumでの話題で「将来的には対応していきたい」と書かれたのがほんの2-3週間前、ということなので、これはまだまだ待たされるのかもしれない。

今日は珍しく、学部教授会・大学院教授会がサクサクと早く終ったので、その後に、昨日から発表受付が始まった FIT2015 に登録を済ませた。 過去には博多で開催されたFITに聴講参加して、そこで知った車酔いの研究発表からヒントを得て自分の「映像酔い」の研究に発展して、さらにこれが後日、「車酔いとサウンドによる抑止」の受託研究に結実した事例がある。 ただし例年、FITの開催時期は9月初旬であり、アルスエレクトロニカともろかぶりするので、毎年、参加したいのに諦めてきた。 ところが今年は9月中旬とずれていて、さらに行ったことのない松山(愛媛大学)での開催ということで、早くから発表参加を決めていたのだ。 またまた内受容感覚と筋電のネタながら、HIP領域の感性情報処理エンタテインメントの視点に重点を置いての発表とした。 道後温泉も路面電車も楽しみであり、とりあえず電車の旅程を立てて、前後泊の宿を予約した。

2015年4月24日(金)

ようやく「Xcode日記」らしくなってきたのを受けて、今日は午後に来客の予定があるので、午前中にちょっと「はじめてのXcode」をちゃんとやってみようかな(まだcocoaをやってないし)・・・と思い立ってMacBookAirを立ち上げ、AppleのDeveloperサイトに繋いでみた。 すると「Xcode6.3」から「Xcode6.3.1」にアップデートしてね、とAppStireに誘われて(^_^;)、いざ他の5本とともにupdateしてみると、なんとWiFiでなくLANで繋いでいるのに1時間以上かかる、と判明した。 そこで仕方なく、書き始めたばかりの「電子情報通信学会パターン認識研究会(新潟)」に向けた予稿の執筆に取りかかった。

いつもの作業であるが、僕は「ワード」を持たないので、MacのPagesで予稿を執筆している。 以下はお仕事Mac miniの2画面のスクリーンショットであるが、過去の電子情報通信学会・非線形問題研究会での発表予稿を作成したPages文書をコビーして、ここにあれこれの素材をコピペしていくが、ブラウザからそのままコピペするとフォント情報が持ち込まれて難儀するので、テキストエディタJeditXをバッファに置いて、ここにコピペした文字情報をさらにPagesにコピペしていく(^_^;)。 ちなみにもちろん、コピペ元の情報は全て僕が過去に学会発表とかWeb公開のために作った情報であり、ここでも「アンチSTAP」の思想は一貫している。

そして昼休みになり、ようやくXcodeのアップデートも終ったところで、とりあえず「最初のcocoa」を作ってみたのが以下である。 中身は空っぽであるが、ちゃんと別ウインドウのアプリとして独立していて、ファイルメニューの「test02について・・・」というのを開くと、何もしていないのに僕の著作物として(c)まで書かれている。 恐るべきdefaultであるが、この表示を(c)から(cc)にするにはどうしたらいいのか、不明である。(^_^;)

しかし上の画面を眺めてみて気付いたのは、ソースコードの冒頭にコメントで勝手に書かれていた情報が、この「test02について・・・」のウインドウ内に出ているのでは、という事である。 であれば、(c)を(cc)にして、さらに「Copyright」や「All rights reserved.」というのも消せるのかもしれない。 午後の準備で今日はここまでであるが、なんとかXcode日記っぽくなってきた。(^_^)

2015年4月30日(木)

上の日記からほぼ1週間が経過した。 前週末はいつものカラオフで32曲完走(^_^;)、そして月曜の「サウンドデザイン」では毎年恒例、年に一度の「音楽室でドラムを叩く」という講義、火曜は企画立案演習にアカペラ、水曜(祝日なのに講義日(;_;))は「音楽情報科学」と総合演習II企画審査学科会議とゼミ(石井さん合流)、と慌ただしくも充実しつつ過ぎ去った。 この間、電子情報通信学会パターン認識研究会(新潟)での発表予稿の執筆も少しずつ進めて、全6ページのうち5ページ目に入ってきた。 さらにこの期間に、あるトライを進めていたのだが、まだ結果が見えない(トラブルが解決していない)こともあり、この日記が進まなかったのである。

そして世間は昨日からのゴールデンウイークに突入して、今日と明日は講義日なものの自分の担当講義はなく、まずは PRMU研究会(新潟) での発表予稿を完成して出してしまおうか・・・というところである。 あと残った学会予定は、9月の札幌の EC2015 であり、Webでは4月末には申込受付開始、とあったのでチェックしてみるとなんとopenされていたので、さっそく申し込んでみると、上のように「受付番号=1」をゲットしてしまった(^_^)。 ちなみにEC2015では、予稿PDFだけでなく、プログラムに乗せるチラシ的原稿PDFと、ムービーも提出することになっている。 予稿とチラシの原稿はこれからとして、ムービーは ここ で撮って既にYouTubeに上げてある これ でいいので上げようか・・・と思ったら、サーバの条件は「100MB以下」とあった。 このMP4は183MBほどあったので、QuickTimePlayet7Proで「低画質」exportし直したものをアップロードしたが、それではYouTubeよりも悪い画質となってしまう。 まぁいいか。(^_^;)

そして午前中から頑張り、午後にはここには何も書けない某会議に参加し、その後も頑張った結果、遂にPRMU研究会に提出する予稿が完成した。 ただしこれをスグにPDF化して学会に送らず、まずはプリントした。 これを帰宅して眺めてみると、必ずちょっとした傷やバグがあるので、それを直して、明日にはサッサと出してしまえば、身軽に連休に突入できる。 ただし今年は、過去に何度かあったような「学生を浜松まつりに連れて行く」等の予定がまったく無くて、むしろ連休中ずっと製作と実験に没頭、というパターンになりそうな予感がある。 たまにはそういうストイックなのも、悪くない。

2015年5月1日(金)

午前中かかって、 PRMU研究会発表予稿 を完成させて、さらに必要書類とともに電子情報通信学会にアップロードした。 ところがこの予稿PDFは23.3MBほどあるが、学会サーバは「3MB以下」しか受け受けないという(^_^;)。 そこでMacのPreviewに読み込んでPDFにexportするオプションとして「Reduce File Size」としたところ、なんと1.2MBの ライト版 に変換された。 パッと見たところでは、ほとんど差がないのだが、どうやっているんだろう。 ・・・と思って拡大してみたところ、なるほど、拡大しても図がよく見えないのだった。(^_^;)

午後には、あれこれたくさん応募して混乱してきたので、まずは以下のようにおよそこれから半年ほどの学会発表などの状況をまとめてみた。 これにより、当面、必要なのは「リハ工学カンファレンスの発表」「音知学会2015の出張申請」「PRMU2015の出張申請」あたりである事も判明した。 旅好きの僕にとって、これらの旅程を立てたり、フライトやホテルを便利で安いように確保する作業から楽しいのである。 直前までグズグズしていると、フライトは高騰し、不便で高いホテルになってしまうのだ。

●基礎心理学フォーラム
	http://psychonomic.jp/forum/index.html
	5月9日(土) 日帰り
	慶應義塾大学三田キャンパス南校舎 5 階 455 教室
		・出張申請 - 完了(^_^)
		・参加費無料

●音知学会2015
	http://jsmpc.org/blog/2015/01/31/2015sprogram/
	6月6日(土) - 7日(日)
	北海道教育大学(札幌駅前サテライト hue pocket) sapporo 55 4階
	6/5(金)前泊 〜 後泊 6/8(月)帰着
		・発表申込 - 完了(^_^)
		・フライト - 完了(^_^)
		・ホテル予約 - 完了(^_^)
		・原稿提出 - 完了(^_^)
		・出張申請 - まだ★
		・参加費 - 当日

●PRMU2015 - 電子情報通信学会パターン認識・メディア理解研究会
	https://www.ieice.org/ken/
	6月18日(木) - 19日(金)
	新潟大学駅南キャンパス「ときめいと」
	6/18(木)朝出発 〜 後泊 6/20(土)帰着
		・発表申込 - 完了(^_^)
		・ホテル予約 - 完了(^_^)
		・切符購入 - まだ★
		・原稿提出 - 完了(^_^)
		・出張申請 - まだ★
		・参加費 - 当日

●Sketching2015
	7月31日(金) - 8月2日(日)
	Biosphere 2
	7/30(木)出発 〜 8/4(火)帰着
		・参加費 - 完了(^_^)
		・ホテル予約 - 完了 ★後泊はまだ
		・フライト - 完了(^_^)
		・原稿提出 - まだ★
		・ESTA申請 - まだ★ 6月になったら申請
		・出張申請 - まだ★

●SI2015
	http://www.soundislands.com/si15/
	8月19日(水) - 23日(日)
	Singapore
	School of Art Design Media
			URL: http://www.adm.ntu.edu.sg/
			Map: https://www.google.com.sg/maps/@1.34831,103.683135,15z
	ArtScience Museum
			URL: www.marinabaysands.com/museum.html
			Map: https://www.google.com.sg/maps/@1.286274,103.859266,14z
	The Arts House
			URL: https://www.theartshouse.sg/
			Map: https://www.google.com.sg/maps/@1.288862,103.851025,16z
		・発表申込 - 完了(^_^)
		・採択通知 6/15(火) → acceptなら手配開始、駄目ならアルスへ
		・参加費 - まだ★
		・ホテル予約 - まだ★
		・切符購入 - まだ★
		・原稿提出 - まだ★ (8/15まで)
		・出張申請 - まだ★

●VINCI2015
	http://vinci-conf.org/index.html
	8月24日(月) - 26日(水)
	一橋ホール(竹橋/神保町から徒歩数分)
	Singapore→羽田到着から直行(^_^;)
		・発表申込 - 完了(^_^)
		・採択通知 6/10(水) → acceptなら手配開始、駄目ならアルスへ
		・参加費 - まだ★
		・ホテル予約 - まだ★
		・切符購入 - まだ★
		・原稿提出 - まだ★ (SI2015の結果まで作業しない、6/25まで)
		・出張申請 - まだ★

●FIT2015
	http://www.ipsj.or.jp/event/fit/fit2015/
	9月15日(火)-17日(木)
	愛媛大学 城北キャンパス
	9/14(月)前泊 〜 後泊 9/18(金)帰着
		・参加費 - まだ★ 8月下旬に振込用紙が届いたら手配
		・発表申込 - 完了(^_^)
		・ホテル予約 - 完了(^_^)
		・切符購入 - まだ★
		・原稿提出 - まだ★ 6/26まで
		・出張申請 - まだ★

●EC2015
	http://ec2015.entcomp.org/
	9月25日(金) - 27日(日)
	札幌市教育文化会館 / 北海道大学学術交流会館
	9/24(木)前泊 〜 後泊 9/28(月)帰着
		・参加費 - まだ★
		・発表申込 - 完了(^_^)
		・フライト - 完了(^_^)
		・ホテル予約 - 完了(^_^)
		・原稿提出 - まだ★ 7/20まで
		・出張申請 - まだ★

●日本音楽即興学会大会
	10月31日(土) - 11月1日(日)
	(神戸大)

●リハ工学カンファレンス
	http://www.resja.or.jp/conf-30/info.html
	11月13日(金) - 15日(日)
	沖縄県総合福祉センター
	11/13(木)前泊 〜 後泊 11/16(月)帰着
		・参加費 - まだ★
		・発表申込 - まだ★ 7/30まで
		・採択通知 8/20(木) → acceptなら手配開始
		・フライト - まだ★
		・ホテル予約 - まだ★
		・原稿提出 - まだ★
		・出張申請 - まだ★

●日本基礎心理学会第34回大会
	http://psychonomic.jp/meeting/index.html
	11月28日(土) - 29日(日)
	大阪樟蔭女子大学・小阪キャンパス

そして午後いっぱいをかけて、 リハ工学カンファレンス の発表募集、この学会で言うところの「演題募集」に取りかかった。 なんせ、この学会での発表は今回が初めてなのである。 過去に何度か聴講/視察参加した「リハ工学カンファレンス」は、「福祉工学」の視点からのユニバーサルデザインの題材の宝庫なのだが、なんと応募登録された演題を「事務局」が採択/不採択の判断をするのだという(^_^;)。 「学会」でなく「協会」だからなのか、つまり応募に際して、専門家とは限らないかもしれない「事務局」に判りやすく、というファクターが必要かも、というのはとても新鮮だ。

2015年5月3日(日)

世間は「浜松まつり」初日となり、SUAC周辺には人影が無い(^_^;)。 皆んな、まずは中田島砂丘に凧揚げに行っているのだろう。 何も予定のない連休はは昨日からぼちぼち始まり。昨日は以下のように、 How To Get Started for #thalmichackd! のページで、「Myoの生EMG情報を受けとるのはUnityでは困難なのかも」という情報を得た。 これは連休明けのゼミ(結局、準ゼミの藤石さん、仮ゼミの石井+前澤+加奈子+マブンの4人、勉強参加希望のM2杉浦さん、という6人で行きそう)に報告である。 杉浦さんも加わって、Unity勉強会もぼちぼちスタートだ。(^_^)

昨日はあれこれデータの整理とHDDへのバックアップなど進めていたら終ったが、今日は「【神経科学】身体の位置によって、脳からの運動指令が変換されるメカニズムが明らかに」というニュースが届いた。 これはちょっと、内受容感覚とSMHに関して研究している身としては看過できない。 そのニュースは ここ からだったが、その記事の末尾から、論文のタイトルが「Modulation of spinal motor output by initial arm postures in anesthetized monkeys」 であること、掲載された論文誌が 「The Journal of Neuroscience」 である事が判った。
となればとりあえずYAHOO.COMでこの論文タイトルを 詮索 すると、簡単に「The Journal of Neuroscience」のサイトに到達して、 アブストラクト全文の購入ページ に行けた。 ここによれば、「Purchase Short-Term Access」として、「Pay per Article - You may access this article (from the computer you are currently using) for 1 day for US$30.00. 」とあった。 PDFで入手するには30ドルが必要なのだった。
しかしスグに購入せず、さらにYAHOO.COMの検索結果をチェックしていくと、なんと 日本語のサイト で、英語の原論文よりも嬉しい 日本語解説PDF をゲット出来てしまった(^_^)。 さらにこのPDFに相当する 日本語のサイト もあった。 本当に、いい時代である(^_^)。 まずはこのPDFをプリントして持ち帰り、合間に読んでみる事にした。

そしてここから午後は、この日記の4月13日にDenisの本とともにチラッとだけやっていた、openFrameworks+Xcodeというのを、とりあえず「examples」という中にあるものを全てコンパイルしてみて、何か見えたら記録する、という作業に充てることにした。 いったんDenisの本から離れて、さらにコンパイルが成功しても何も出て来ないものはとりあえず無視する方針である。 まずはXcodeとopenFrameworksの入っているMacBookAir-3からスクリーンショットをお仕事Mac mini(このページを執筆中)に移動するのにに、これまでのように「USBメモリに入れて移動」・「圧縮して自分に添付メイル」・「フリーのアップローダに上げる」という方法よりストレートに、上のようにお仕事MacのFile Sharing Serverを走らせて、MacBookAir-3からログイン/マウントして、そのままドラッグで移動できるようにした。

しかし、いざ「examples」フォルダの中を見ると上のように、カテゴリが13個あり、その最初の「3d」ディレクトリだけで15個のサンプルが見える。 試しに「examples」フォルダのインスペクタを見ると、ファイルサイズが124,523,001バイト(HDD上で131MB)、ファイル総数が1847個だという。 だいたい10数個のファイルからなるようなので、軽く100種類以上のサンプル集ということのようで、これはもしかすると、これで連休は終ってしまうかもしれないが、それもいい 暇つぶし 勉強 になるかな(^_^;)。 そして、4月13日にチェックした「advanced3dExample」と4月12日に最初にやった「pointCloudExample」とを、フォルダごと複製して入れていた「test」フォルダの存在を思い出したので、大文字の「TEST」にリネームして、「何か見えたので記録」したものは複製して追加することにした。

上は「3d」カテゴリの中の「cameraLensOffsetExample」というブロジェクトサンプルである。 リアルタイムにWebカメラの画像から「顔」をトラッキングしてして、それをグラフィックウインドウの描画の焦点として移動させて、簡単なカラーグラフィックを追従生成描画している。 これだけで十分に、ビデオインスタレーション作品に発展させるための根幹が揃っている。(^_^)

上は「3d」カテゴリの中の「cameraParentingExample」というブロジェクトサンプルである。 cameraといってもWebカメラでなく、複数の3次元系の視点を移動させたり、親子関係を連結したりするもので、これはパッと見にはなんだか判りにくいが、3Dでクラクラくるリアルタイムレンダリングの勉強には役立ちそうで、「要・再チェック」である。 この他のサンブルは全て、コンパイルは「succeeded」と表示されるものの何も起きず、「3d」カテゴリから「TEST」フォルダに複製コピーしたサンプルは4個、という事になった。 この「3d」カテゴリに続いて「addons」というカテゴリに移ったが、ここはなんとも、コンパイルは「succeeded」と表示されるものの何も起きないものが続いて、ちょっと飽きてきた(^_^;)。 その中に「kinectExample」というのがあるのに気付いて、ここでKinectを環境に入れこむことにして、大きな回り道をしてみた。

Kinectを取り込むとすればたぶんOSCだろう、と Kinect to OSC Software のページから、freeだという simpleKinect というのに当たりをつけて、まずはGitHubの jpbellona/simpleKinect というページでzipをゲットしてみると、さらに このページ に書かれているようにしろ、という。 そこには、XcodeのDeveloperサイトに行って「Command line tools」をダウンロードしてインストールしろとか、 このページ から「XQuartz」をダウンロードしてインストールしろとか、 このページ から「MacPorts」をダウンロードしてインストールしろとか、 このページ から「CMak」をダウンロードしてインストールしろとか、あれこれうざったい。 仕方ないので上のようにそれらをやったが、結局、 このページ にある続きの「sudo port install libtool」とか「sudo port install libusb +universal」とかは断られた。 調べてみると、どうも MacPorts のインストールの際に、SUACのプロキシを越えてアクセス出来ないためらしい、と判明してきた。 これは Raspberry Pi日記 の時にハマッた、嫌〜な記憶が蘇る。 そこでとりあえず、ここをとばして、次の「OpenNi」を探したが、どうも書かれた「http://www.openni.org/openni-sdk/openni-sdk-history-2/」というのが、何故かAppleのサイトにリダイレクトされつつも不明、となった。 次の SensorKinect はとりあえず落としたが、インストールコマンドは一部にエラーが出た。 その次の「PrimeSenseNite」も、何故かAppleのサイトにリダイレクトされつつも不明、となった。 これではとうてい、その後の「Test the demos」が走るわけもなく、ここは無駄骨となった。(^_^;)

そして このページ の次にある「Processing」に行ってみた。 もうここまで来れば、毒食らわば皿まで、である。 このページ に行って これ を落としてみると、これはバージョン0.27、たった2.9MBである。 ところが、「Kinect Driver Installation」とあるので行っていた このページ の元となった このページ の一番下の「Processing」に書かれている「Download and install Processing libraries oscP5, controlP5, and simple-openni.」といううち、既にleap motionやMyoのOSCのために「oscP5」はさんざん活用しているので、同じ場所に controlP5simple-openni とをダウンロードして解凍してインストール(置くだけ)すればいい筈である。 controlP5 はまず、そのようにした。 そして simple-openni にあった これ を落としてみると、なんとこれはバージョン1.96で、116.7MBもある。 えらくサイズが違っているのば、上のように新しいバージョンではWindowsとかLinuxとかPSとか、プラットフォーム対応が充実したかららしい。

そこで、この両方について、「examples」Processingスケッチを走らせて試してみる事にした。 上のように、何故かサイズの小さい古いバージョンの方がサンプルが多いのが気になるが、それぞれのフォルダを「SimpleOpenNI027」と「SimpleOpenNI196」としておいて、フォルダごと複製したものからそれぞれバージョン番号を削って、試すことにした。 ・・・そしてあれこれ試してスグに判明したのは、古い方の「「SimpleOpenNIバージョン0.27(2.9MB)」は、ライブラリ等が不足していて、下のようにコンパイルエラーしか出ない、という事だった。 おそらく上記の作業でインストール出来ていない部分が関係しているのだろう。 これでさっぱりと諦めて「SimpleOpenNI027」フォルダを消去して、「SimpleOpenNI196」のバージョン番号を削った。

「example」の「eclipse」はJavaなのでここではパスして、次の「Extension」からProcessingで走らせてみると、ライブラリが無くてエラーが出たものを捨てつつ、以下のように「いかにもKinect」というのが出て来た。 こうなれば、とりあえずエラーが出ずにこの環境で使えそうなものだけ残す、という作業は今後に繋がることになる。

そして、「Extension」の2つに続いて、「OpenNI」フォルダにあったサンプルのうち、MultiCamというグルーブは全滅したが、あとは以下のようにそれぞれ、ちゃんとKinectが使える、という事が確認できた。 Processingスケッチであれば、Myoでもやったようにこの情報をOSCから出すのは余裕なので、これで、昨年度の「サウンドデザイン演習」でチーム「週末バイト戦士」がやった方法(Kinect→CV→Max/jitter)とはまた別のルートで、KinectとMaxを連携させるインターフェースが出来たことになる。

あまり進んでいないようで、けっこう進んだようでもある午後となった。 気付けばもう夕方で、浜松まつりは御殿屋台で交通規制の時間帯である。 すんなりクルマで帰宅できるか(裏路地を通り抜けるという技は極めてリスクが高い)、いっそのこと大学にクルマを置いて街に出て、一杯やってバスで帰るか、ちょっと悩んでみよう。(^_^;)

2015年5月4日(月)

曇り、さらに雨模様の浜松まつり2日目である。 明日は晴れそうなので最後は盛り上がるだろうし、小雨でもきっと中田島砂丘は泥だらけで凧揚げだろう。 昨日も大人しく帰宅して家飲み、どうやら本当に何も無い連休の模様である。(^_^;)

例によって夜中にフト思い出したのは、昨日の作業のどこかで、上のダビンチの有名な人体図のあちこち関節を表示するKinectサンプルがあった筈なのに、考えてみれば昨日の部分のスクリーンショットにそれが無かった、という事だった。 そこであれこれ発掘してみると、事の発端だった simpleKinect のGitHubの jpbellona/simpleKinect というページでゲットしたzipの中にあった。 ちょっと謎なのは、「simpleKinect」というフォルダの中に、以下のようにたくさんの名前の「.pde」、つまりProcessingスケッチが並んでいるが、Processingスケッチは自分の名前と同じフォルダ内に置かれていないといけない事であるが、これはまた後で調べてみる事にした。

これに合わせて、Max環境でのKinect関係についても整理しておくことにした。 以下は、昨年度の「サウンドデザイン演習」でチーム「週末バイト戦士」のためにゲットした、Jean-Marc Pelletier氏の freenect というMaxオブジェクトと、「cv.jit」を活用したeye-trackerである。

そして以下が、 Synapse for Kinect というもので、まず単体アプリとして「Synapse」を起動しておくと、Max/jitter側でこの情報を受けとる事が出来る、というものである。 関節の位置情報だけでなく、Kinectの深度マップ画像も受けとる事が出来る。

・・・ここまでなんだか快調に進んだものの、これでKinect関係の回り道も終ったところでXcodeのexample巡りを再開、となったところで、午後にピタッと歩みが止まってしまった(^_^;)。 発端は、昨日の実験で何も出て来なかったopenFrameworksの「OSCsendTest」あたりで、駄目モトでOSCを受けて表示するMaxパッチを作って何か出て来ないか・・・とやっていた時に、最初に一瞬、何かのウインドウが現れて実行してるっぽかったのに、再度コンパイルすると膨大なエラーが出て進まなくなったところからであった。 そしてここから2時間ほどあれこれ試行錯誤して、ビルド環境のクリーンアップなどの技も覚えつつ、膨大なerrorとWarningに閉口しつつも、まだビルド成功して表示されるものがあったことを見つけた。 main.cppから呼ばれる、個々のサンプルごとに異なる本体モジュールは「ofApp.cpp」にあるので、ここを眺めつつ作業した。

上は唯一、追加で動作を確認できた「3d」カテゴリの中の「easyCamExample」というブロジェクトサンプルである。 マウス操作によって、3次元空間でのカメラワークのパラメータを設定するために使えそうである。 これ以外の「3d」カテゴリのサンプル、さらに「addons」のサンプルは、多数のWarningが出て、実行できるバイナリが現れなかった。 同様に、「communication」カテゴリの2つのサンプル、そして「empty」の1つのサンプルも、実行できるバイナリが現れなかった。

上はこれに続く「events」カテゴリの中の「advancedEventsExample」というブロジェクトサンプルである。 マウスの状態を刻々とモニタしているようにスクリーン内の数値が変化するが、ソースを見るとイベントハンドラのように記述しているので、内部的にリアルタイム並列処理を実現しているものである。 結局、「events」カテゴリで走ったブロジェクトサンプルはこれだけで、他の4つは駄目だった。 続く「gl」カテゴリには18個のサンプルがあったが、まったく同様のWarningが14個出る、というのを繰り返して、全て駄目だった。 続く「graphics」カテゴリには19個のサンプルがあったが、同様にWarningが14個出る、というのを繰り返して、全て駄目だった。 続く「gui」カテゴリには6個のサンプルがあったが、同様にWarningが14個出る、というのを繰り返して、全て駄目だった。 続く「math」カテゴリには8個のサンプルがあったが、同様にWarningが14個出る、というのを繰り返して、全て駄目だった。 おそらくグラフィック表示のどこかに共通のバグが潜んでいるのだろうが、なかなかに歩留まりが良くない(^_^;)。 午後いっぱいかかってほぼ進展ナシ。 暗くなったので、シトシトと雨が降っている浜松の街のように沈んで、帰宅することにした。

2015年5月5日(火)

5連休も4日目、本当にストイック5連休となるか。 昨日はけっこうな雨で御殿屋台の引き回しも中止らしく、一転して今日はそこそこ天気が良いので、浜松まつりの衆は後の事を考えずに燃え尽きることだろう。 最終日、近所の「練り」が聞こえなくなるのは、毎年、午前2時過ぎである(^_^;)。 ほとんどクルマが走っていない(既に皆んな中田島砂丘の凧揚げに行っている)街中をスイスイと大学に来た。

昨夜、この「openFrameworks+Xcode」のバッとしない状況の打開について、2つの作戦を思い付いた。 その一つは、「ここまで多数の失敗例と少数の成功例があれば、それらを比べてみれば何か判るはず」というものである。 もう一つは、「スッ飛ばしていた、Denisの本に従ってやってみよう」というものである。 いずれも正論である。 しかし、昨日の実験は「math」カテゴリで終っていたが、あと3カテゴリ、「sound」と「utills」と「video」が残っている。 上のどちらの作戦をとるにしても、この中途半端な残し方は嫌なので、まだ時間がかかるものの、まずは引き続き、この3カテゴリのサンプルをコンバイルしてみる事にした。

「sound」カテゴリには4個のサンプルがあったが、3個は駄目だったのに対して、なんと上の「audioOutputExample」だけ、16個もWarningが出たまま、ちゃんと出て来てサウンドを鳴らした。 それも、マウスカーソルの上下の位置に対応したピッチのサイン波が、マウスカーソルの左右の位置に対応したパンポットの定位で鳴らされて、さらにマウスクリックでホワイトノイズに切り替わり、その波形グラフがライブに描画されている。 これは2001年の 欧州ツアー のコンサート2回のラストのために作曲した、尺八と箏と笙とセッションする作品 "Japanesque Germanium" ( Kassel / Hamburg )の僕のパート(ライブ電子音響)のためにSuperColliderで作ったプログラムにかなり近い。 その後、全て試してみたが、結局、全12カテゴリ、計(15+17+2+1+5+18+19+6+8+4+13+5=)113個のサンプルのうち、何故かWarningが出るのにちゃんとバイナリが出来て実行されたのは、以下の7個のサンプルだけだった。

そしてここから、Xcodeコンパイル後のバイナリの場所である「~/Library/Developer/Xcode/DerivedData/」 を見に行くと、トータルで3GBほどの膨大なデータが出来ていたのでこれを消した後で、再度、この7個のサンプルをコンパイルしてみたところ、何故か、「easyCamExample」だけが、以下のように37個のWarningに加えて39個のErrorが出てコンパイル出来ない、という状況となった。 前に出来たのに今は出来ない、というのは悩ましいが、これは決して嫌な事ではなく、むしろ歓迎なのだ。 プログラミングにおいて、新しいプログラムを作る時には、サンプル(出来る)と自分のプログラム(出来ない)を比較して、その「差」を検討していく。 今回のデバッグにおいても、106個の「出来ないもの」、6個の「出来るもの」、そして1個の「前は出来たのに今は出来ない」もの、という材料を比較する、そのための材料が、出揃ったということなのだ。 そこで再度、「easyCamExample」の環境をcleanして、Macをリブートして、コンバイル(ビルド)してみたが、結果は同じだった。 こうなると、どうして昨日、ちゃんとコンバイル出来たのか、その方が謎である。

・・・ここでしばし、まったく関係ないネットのふと見かけた情報から検索しているうちにどんどん奥底までハマる、といういつものアレで2時間ほど遊んだが(^_^;)、必要な情報が世界中からくまなく速攻・無料で引っ張れるこの時代、どちらが有効なのか無駄なのか(我々の生産性は向上しているのか堕落しているのか)、判らなくなってきていると心から思う。

さて、昼食後、気を取り直して再開である。 まずは「動く」サンプルを入れていたTESTディレクトリからとりあえず「easyCamExample」を削除して、「動く」ものは6個のサンプルである。 「動く」・「動かない」の差分を検証するためには、なるべくシンプルなもの同士で比較することになる。 例えば(1)、「3d」カテゴリの中で、動く「advanced3dExample」と、動かない(ビルド不成功)「3DPrimitiveExample」とを比較する、というのが一つの方法だろう。 あるいは(2)、OSCを受けて表示するMaxパッチは出来ているので、ただOSCを出すだけの「addons」カテゴリの「oscSenderExample」と、もっとも画面がシンプルな(あまりOpen-GLをごりごり使っていなさそうな)「advancedEventsExample」とを比較する、というのも面白そうだ。 そして(3)、同じイベント対応の「events」カテゴリの「eventsExample」と「advancedEventsExample」とを比較する、というのも良さそうである。

そこで上のように、上記3つのうちの方法(3)、「eventsExample」と「advancedEventsExample」を両方とも呼び出してみた。 Xcodeではどうやら、2つのプロジェクトを同時に開くと、後で開いた方に「既に開いているのでロード出来ない」というErrorが出るが、ここではまず最初にビルド失敗する「eventsExample」を開き、「advancedEventsExample」の方はバイナリを呼び出して走らせて。Xcodeのプロジェクト画面(Errorが赤く出る)は、ソースを比較するためだけに使用した(ビルドを実行しない)。 すると、なんとサンプルの名前とは裏腹に、「eventsExample」の方がずっと「advancedEventsExample」よりも冗長に長く、つまりタイトルの「advanced」というのは、もっと上手く実現するための方法、という事だと判明した。 これは突破口のための重要な情報である。 以下が、main.cppから呼び出される、それぞれの「ofApp.cpp」ソースである。

「advancedEventsExample」の「ofApp.cpp」

#include "ofApp.h"

void ofApp::setup(){
	ofBackground(50,50,50);
	enabled=false;
	ofAddListener(evObject.newFloatEvent,this,&ofApp::newFloat);
	ofAddListener(evObject.newIntEvent,this,&ofApp::newInt);
}

void ofApp::update(){}

void ofApp::draw(){
	ofDrawBitmapString(floatMsg,20,20);
	ofDrawBitmapString(intMsg,20,40);
	ofDrawBitmapString("click to enable/disable events",20,60);
}

void ofApp::newFloat(float & f){
	floatMsg = "newFloat event:  " + ofToString(f);
}

void ofApp::newInt(int & i){
	intMsg = "newInt   event:  " + ofToString(i);
}

void ofApp::keyPressed  (int key){}
void ofApp::keyReleased(int key){}
void ofApp::mouseMoved(int x, int y ){}
void ofApp::mouseDragged(int x, int y, int button){}

void ofApp::mousePressed(int x, int y, int button){
	if(enabled)
		evObject.disable();
	else
		evObject.enable();
	enabled=!enabled;
}

void ofApp::mouseReleased(int x, int y, int button){}
void ofApp::windowResized(int w, int h){}
void ofApp::gotMessage(ofMessage msg){}
void ofApp::dragEvent(ofDragInfo dragInfo){}

「eventsExample」の「ofApp.cpp」

#include "ofApp.h"

void ofApp::setup(){	 
	counter = 0;
	vagRounded.loadFont("vag.ttf", 32);
	ofBackground(50,50,50);	
}

void ofApp::update(){
	counter = counter + 0.033f;
}

void ofApp::draw(){
	
	sprintf (timeString, "time: %i:%i:%i \nelapsed time %lli", ofGetHours(), ofGetMinutes(), ofGetSeconds(), ofGetElapsedTimeMillis());
	float w = vagRounded.stringWidth(eventString);
	float h = vagRounded.stringHeight(eventString);
	ofSetHexColor(0xffffff);
	vagRounded.drawString(eventString, 98,198);
	ofSetColor(255,122,220);
	vagRounded.drawString(eventString, 100,200);
	ofSetHexColor(0xffffff);
	vagRounded.drawString(timeString, 98,98);
	ofSetColor(255,122,220);
	vagRounded.drawString(timeString, 100,100);
}

void ofApp::keyPressed  (int key){ 
	if(key & OF_KEY_MODIFIER){
		if(key >= OF_KEY_F1 && key <= OF_KEY_F12){
			sprintf(eventString, "keyPressed = (%i) %s", key, ("F" + ofToString(key+1-OF_KEY_F1)).c_str());
		}else{
			switch(key){
			case OF_KEY_LEFT:
				sprintf(eventString, "keyPressed = (%i) %s", key, "LEFT");
				break;
			case OF_KEY_UP:
				sprintf(eventString, "keyPressed = (%i) %s", key, "UP");
				break;
			case OF_KEY_RIGHT:
				sprintf(eventString, "keyPressed = (%i) %s", key, "RIGHT");
				break;
			case OF_KEY_DOWN:
				sprintf(eventString, "keyPressed = (%i) %s", key, "DOWN");
				break;
			case OF_KEY_PAGE_UP:
				sprintf(eventString, "keyPressed = (%i) %s", key, "PAGE UP");
				break;
			case OF_KEY_PAGE_DOWN:
				sprintf(eventString, "keyPressed = (%i) %s", key, "PAGE DOWN");
				break;
			case OF_KEY_HOME:
				sprintf(eventString, "keyPressed = (%i) %s", key, "HOME");
				break;
			case OF_KEY_END:
				sprintf(eventString, "keyPressed = (%i) %s", key, "END");
				break;
			case OF_KEY_INSERT:
				sprintf(eventString, "keyPressed = (%i) %s", key, "INSERT");
				break;
			case OF_KEY_LEFT_SHIFT:
				sprintf(eventString, "keyPressed = (%i) %s", key, "LEFT SHIFT");
				break;
			case OF_KEY_LEFT_CONTROL:
				sprintf(eventString, "keyPressed = (%i) %s", key, "LEFT CONTROL");
				break;
			case OF_KEY_LEFT_SUPER:
				sprintf(eventString, "keyPressed = (%i) %s", key, "LEFT SUPER");
				break;
			case OF_KEY_RIGHT_SHIFT:
				sprintf(eventString, "keyPressed = (%i) %s", key, "RIGHT SHIFT");
				break;
			case OF_KEY_RIGHT_CONTROL:
				sprintf(eventString, "keyPressed = (%i) %s", key, "RIGHT CONTROL");
				break;
			case OF_KEY_LEFT_ALT:
				sprintf(eventString, "keyPressed = (%i) %s", key, "LEFT ALT");
				break;
            case OF_KEY_RIGHT_ALT:
				sprintf(eventString, "keyPressed = (%i) %s", key, "RIGHT ALT");
				break;
			case OF_KEY_RIGHT_SUPER:
				sprintf(eventString, "keyPressed = (%i) %s", key, "RIGHT SUPER");
				break;
			}
		}
	}else{
		sprintf(eventString, "keyPressed = (%i) %c", key, (char)key);
	}
}

void ofApp::keyReleased(int key){ 
	if(key & OF_KEY_MODIFIER){
		if(key >= OF_KEY_F1 && key <= OF_KEY_F12){
			sprintf(eventString, "keyReleased = (%i) %s", key, ("F" + ofToString(key+1-OF_KEY_F1)).c_str());
		}else{
			switch(key){
			case OF_KEY_LEFT:
				sprintf(eventString, "keyReleased = (%i) %s", key, "LEFT");
				break;
			case OF_KEY_UP:
				sprintf(eventString, "keyReleased = (%i) %s", key, "UP");
				break;
			case OF_KEY_RIGHT:
				sprintf(eventString, "keyReleased = (%i) %s", key, "RIGHT");
				break;
			case OF_KEY_DOWN:
				sprintf(eventString, "keyReleased = (%i) %s", key, "DOWN");
				break;
			case OF_KEY_PAGE_UP:
				sprintf(eventString, "keyReleased = (%i) %s", key, "PAGE UP");
				break;
			case OF_KEY_PAGE_DOWN:
				sprintf(eventString, "keyReleased = (%i) %s", key, "PAGE DOWN");
				break;
			case OF_KEY_HOME:
				sprintf(eventString, "keyReleased = (%i) %s", key, "HOME");
				break;
			case OF_KEY_END:
				sprintf(eventString, "keyReleased = (%i) %s", key, "END");
				break;
			case OF_KEY_INSERT:
				sprintf(eventString, "keyReleased = (%i) %s", key, "INSERT");
				break;
			case OF_KEY_LEFT_SHIFT:
				sprintf(eventString, "keyReleased = (%i) %s", key, "LEFT SHIFT");
				break;
			case OF_KEY_LEFT_CONTROL:
				sprintf(eventString, "keyReleased = (%i) %s", key, "LEFT CONTROL");
				break;
			case OF_KEY_LEFT_SUPER:
				sprintf(eventString, "keyReleased = (%i) %s", key, "LEFT SUPER");
				break;
			case OF_KEY_RIGHT_SHIFT:
				sprintf(eventString, "keyReleased = (%i) %s", key, "RIGHT SHIFT");
				break;
			case OF_KEY_RIGHT_CONTROL:
				sprintf(eventString, "keyReleased = (%i) %s", key, "RIGHT CONTROL");
				break;
			case OF_KEY_LEFT_ALT:
				sprintf(eventString, "keyReleased = (%i) %s", key, "LEFT ALT");
				break;
			case OF_KEY_RIGHT_ALT:
				sprintf(eventString, "keyReleased = (%i) %s", key, "RIGHT ALT");
				break;
			case OF_KEY_RIGHT_SUPER:
				sprintf(eventString, "keyReleased = (%i) %s", key, "RIGHT SUPER");
				break;
			}
		}
	}else{
		sprintf(eventString, "keyReleased = (%i) %c", key, (char)key);
	}
}

void ofApp::mouseMoved(int x, int y ){
	sprintf(eventString, "mouseMoved = (%i,%i)", x, y);
}

void ofApp::mouseDragged(int x, int y, int button){
	sprintf(eventString, "mouseDragged = (%i,%i - button %i)", x, y, button);
}

void ofApp::mousePressed(int x, int y, int button){
	sprintf(eventString, "mousePressed = (%i,%i - button %i)", x, y, button);
}

void ofApp::mouseReleased(int x, int y, int button){
	sprintf(eventString, "mouseReleased = (%i,%i - button %i)", x, y, button);
}

void ofApp::windowResized(int w, int h){
	sprintf(eventString, "resized = (%i,%i)", w, h);
}

void ofApp::gotMessage(ofMessage msg){
	sprintf(eventString, "gotMessage %s ", msg.message.c_str());
}

void ofApp::dragEvent(ofDragInfo dragInfo){ 
	sprintf(eventString, "%i files dragged into the window at (%i, %i)", (int)dragInfo.files.size(), (int)dragInfo.position.x, (int)dragInfo.position.y);
}

見たところでは、別に問題なく動きそうな、ごく簡単なプログラムである。 まず、「eventsExample」の「ofApp.cpp」の「vagRounded.loadFont("vag.ttf", 32);」というのを見て、「vag」というフォントは聞いたことがないのでSystemフォルダ内のfontフォルダを探すと無かったので、存在する「Caribri」フォントに指定を変更してみたが、ビルドに対するWarningは同じ14個で、結果は変わらなかった。 さらに、フォントの読み込みを消して、全ての「vagRounded.drawString(eventString, ##, ##);」を「drawString(eventString, ##, ##);」としても変わらなかった。 また、14個のWarningのほぼ全てで出ているエラーメッセージを調べると、「This method is deprecated in 10.9 and will be formally deprecated in the following release.」とあった、 Google翻訳によれば「この方法は、10.9で廃止され、正式に次のリリースで廃止される予定です」であり、まさにこのマシンは10.10だから「駄目」なのだった。

そしてここからあれこれ試してみて、ここまでの謎な現象に対する一つの結論を得ることが出来た。 上のように、とりあえず「ビルド出来る」と選り分けていたサンプルについても、14個のWarningが出ていたが、そのエラーリストの中に、「改訂することを推奨する」というのが出て来て、それに従って正直にUpdateしてやると、これまで「OK」だったサンプルも続々と死亡して(^_^;)、以降はcleanしてもビルド失敗するようになったのだ。 キープしていたサンプルが次々に「駄目」になってリカバー出来ない、というのはなかなか壮観である。

こうなれば、全てやり直しである。 手元にあるopenFrameworksディレクトリはあちこち、エラーメッセージに従ってこの「Updateしてみたら?」に乗ってdirtyになっているので、全てを最初からやり直した方が確実である。 再度、openFrameworksのサイトからdownloadしたzipを解凍して「openFrameworks」とリネームして元の位置に置いて、いちばん最初にある、「3d」カテゴリの中で「動かない(ビルド不成功)」とされていた「3DPrimitiveExample」をビルトしてみると、上のようにちゃんと出来た(^o^)。 つまりは、多数のWarningが出て、そのエラーウインドウにある「Updateしてみたら?」に乗ったのが、全ての敗因だったのだ。 マル1日以上かかったが、これが判った、というのは、大いなる進展だろう。

そうこうしているうちに、気付いてみればもう16時になっていた。 上のように、調べてみると「浜松まつり」のイベントで残っているのは、晩の御殿屋台引き回しの他には、もうアクトの屋台村だけになっていた(^_^;)。 天気は良さそうだが、これでは出かけても何も面白くないので、今日も大人しく帰宅することにした。 明日の方針はもう立っていて、「スッ飛ばしていた、Denisの本に従ってやってみよう」というものである。 回り回ってここに来たというべきか、素直にテキストに従わないからこうなるというべきか、まぁ、そんなものである。(^_^;)

2015年5月6日(水)

5連休も最終日、浜松まつりで燃え尽きたのか、街はシーンと静まり返って、鳥の声だけ聞こえる。 毎日、朝寝坊して8時とかに起床していたが、飲んで夜更かしして、遂に今日は11時起床である。 布団であれこれ考えてみたが、昨日発見した「This method is deprecated in 10.9 and will be formally deprecated in the following release.」というWarningについては、およそ以下の3つの対策を思い付いた。 しかし、いずれも本質的な解決にはならないのである。 まず、OSであるMac OSXが10.10.3に上がったばかりであり、これが日々刻々、変わっていく。 さらにXcodeも、入れた6.3から6.3.1に上がったばかりであり、これが日々刻々、変わっていく。 そしてopenFrameworks自体が、0.8.0から0.8.4に上がったばかりであり、これが日々刻々、変わっていく。 環境であるOSも、開発ツールであるXcodeも、そしてフレームワークのライブラリであるopenFrameworksも、それぞれがじわじわと変化し続けているのだから、相互にいろいろと問題が起きるのは本質的なことであり、さらに先端を行くためには、いつまでたっても「安定な状態」など存在しないのである。

そこで上のように、 openFrameworksのdownloadページ にあった Xcode Setup Guide に従ってみる事にした。 最初の「First Steps」はちゃんと出来ていて、サンプルの「3DPrimitivesExample」は昨日、出来たところである。 そこで続く「Generating a New Project」を見て、「projectGenerator.app」というアプリで新しいプロジェクトを作ってみると、以下のようにアッサリと出来てしまった。(^_^)

そして、昨日までトラブル続きで出来なかった、OSCを送るだけ、というシンプルな動作も、addonのoscSenderExampleのソースからコピペしてみると、なんとあっさりと以下のように出来てしまった。 openFrameworksは膨大なものだが、とりあえずMaxとかProcessingとかSuperColliderとかMyoとかleap motionとかと連携するためには、何はなくともOSCが出来ればいいので、この簡単なサンプルが走った(あいかわらずWarningは17個も出ているが)というのは、大いなる一歩なのである。

かけた時間は昨日までに比べてとても短いものの、連休の最後にこの手応えというのは十分な成果である。 土曜日には慶應義塾大学三田キャンパスに行き、 基礎心理学フォーラム に日帰りで聴講参加する予定だったが、ちょうど奥さんもこの日は研修で横浜に1泊2日で行くと判って、慌てて新宿・歌舞伎町に宿をとった。 まったく別行動であるが、久しぶりに、新宿2丁目の あのお店 に行くことにしたのだ。 連休をストイックに過ごしたので、そのご褒美である。

そしてその後、連休明けの来週月曜日「サウンドデザイン」のための Maxサンプルパッチ 、水曜日「音楽情報科学」のための Processing の教材などを確認・整備した。 Javaアプレットを走らせるには最新jreにアップデートする必要があるが、まずはProcessingを体験する、というのは大丈夫だろう。

2015年5月7日(木)

連休中はダラダラと寝坊していたが、なんと連休明けの今日は5時過ぎに起床して、いつものように朝6時半には研究室に出て来た。 昨日、以下のような画面を眺めていて、ちょっとここでキチンとやっつけよう、というネタを思い付いたのだ。

Xcodeが稼働してあっさりと「ダブルMyo」が実現できたが、これをちゃんとまとめていなかった、というのに気付いたのだ。 ちょうど13時には、M2の牛田さんが、大学院の新歓の会計報告で来る、というアポがあったので、彼女にビデオ撮影してもらって、またまた英語で「ダブルMyo」を記録しておこう、という作戦である。 せっかく両腕で、計16チャンネルとなったので、ステレオの定位を変えてこれまでの「sine→FM」というサウンド部分はちゃっちゃと出来たが、せっかくなら「音楽情報科学」の講義サンプルになるように・・・と、あらためてjitterのサンプルを全て眺めたので、午前中いっぱいかかって、昼休みに適当に筋電情報とjitterのOpen-GLパラメータをマッピングしたところで時間となった。 もう少しちゃんと整えたいが、とりあえずのMaxパッチは以下のようなものである。

そして、例によってぐだぐだな英語のアドリブながら、とりあえず紹介映像を記録して、 YouTube に上げた。 5分ちょっとの映像である。 すると、YouTubeにアップロードしている最中に、Googleからメイルが届いた。 どうも、なりすましのセキュリティ対策なのか、あるいはユーザの身元情報をさらに収集するためなのか、本人確認しろ、というものだった。 メイルのリンクに行くと、以下のようなお節介な画面が出て来た。

そして、このGoogle(YouTube)からのメイルから2-3分したところで、今度はUnityからのメイルが届いた。 せっかくDeveloper登録したのだから、以下のようなページに行って、もっとUnityと仲良くなってね、という勧誘である。 まさにこの世は、ProcessingでもArduinoでもUnityでもopenFrameworksでも、とにかくDeveloperをたくさん引き入れて、出来れば他の陣営から引き抜いて、「数による力」を獲得したいのだろう。 皆さん、タイヘンなのである。(^_^;)

そしてここから午後、2時間半ほどかけて、ダブルMyoに対応したデモMaxパッチを以下のように完成した。 来週のゼミでは、いよいよMyoとUnityを使った藤石さんの制作も始まるので、別にUnityでなくてもopenFrameworksでなくても、Max/jitterでもこのくらいは1日で出来るんだよ、というところを見せる程度にはなったかな。 これは来週月曜の「サウンドデザイン」でも、水曜の「音楽情報科学」でも、学生の前でサクッとデモるには好適である。(^_^)

・・・とここまでWebに上げて、MacBookAirのデータ類をバックアップしているところで、上のスクリーンショットに1ヶ所のバグを発見した。 これを直してから保存し直して帰宅するが、せっかくなのでこの画像はそのままにしておこう。 ヒントは Max日記 の最初のところにある。 このバグを見ただけで発見できるとしたら、なかなかのMax使いである。(^_^;)

2015年5月8日(金)

卒業生の立仙さんから「お誕生日おめでとう」のメイルが届いたので、「お誕生日おめでとう」と返信したこの日(^_^)。 フト思い付いて、朝から頑張って、 「葉から芽」日記 をスタートさせた。 久しぶりの 定点観測 である。 濡れティッシュの乾燥を気にしてはときどきブラインドの隙間から覗き、Maxの停止を心配してはときどきMacBookの画面を明るくして確認・・・という日々が始まった。 しかし、人間が動き回るのを定点観測するのでなく、葉から芽が出て来て伸びるのを撮影するというのは、とんでもなく長期プロジェクトである。 WebカメラやMacBookの連続運転試験という感じだが、どうなるかなぁ。(^_^;)

午前中にはちょっと外出して、午後には少しだけ「触り」ということで、以下のようにMax7の「ガイドツアー」というヘルプ(これ自体がMax7のパッチの生きたサンプル)を眺めてみた。 中身はほぼ、これまでのMax/MSP/jitterチュートリアルの「触り」であるが、より初心者がMaxの高度な機能を簡単に引き出せるようにしてある、というのがひしひしと伝わってきた。 これを新生デザイン学科の2回生が講義で使うのは2016年4月からになるが、合間に先行して試してみるのもいいかもしれない。

夕方はちょっと早く帰宅し、暑くなってきて懸案だった床屋に寄ることにした。 葉から芽クンは、明日の朝まで15時間ほど放置される事になるが、研究室の空気は乾燥しているので、濡れティッシュが乾いてしまわないか心配である。 そして明日は東京に出張なので、およそ27時間ほど放置されるのも心配だ。 とりあえず、びしゃびしゃになる位に水を足して、晩も定点観測撮影できるようにブラインドを上げて、お仕事デスクの上(窓際)だけ点灯したまま帰宅することにした。 どうなるのかは、まったく不明である。(^_^;)

2015年5月9日(土)

東京に学会出張する日である。 昨日から10数時間、放置された葉から芽クンが心配で早目に研究室に出て来たが、水分は十分に残っていた。 これなら明日まで出かけても大丈夫である。 そして新しくセンサを発注したりしているところに、突然のメイルが舞い込んできた。 CQの記事を見たという甲南女子大学の先生からのもので、 日本バイオフィードバック学会 と関係して、 バイオフィードバック療法セミナー の講師として、10月あたりに、「筋電計を作ってバイオフィードバック療法を身近に体験しようという企画」を依頼したい、というお話である。 これは素晴らしく大歓迎であり、やはりCQの記事を書いてヨカッタ、と痛感した。 Myo+Xcode+Maxで、とても安価に、望むような筋電バイオフィードバック療法システムをどんどん開発していくチャンスが来たというわけである。 熱いメイルを返信して、けっこう内心、燃えながら、東京に向かうことにした。(^_^)

2015年5月10日(日)

マル1日たって東京から帰ってきても、なんとか葉から芽クンの濡れティッシュは乾いていなかった。 その、昨日の基礎心理学会のフォーラムのメモは以下である。 いろいろと刺激・勉強になった。(^_^)

【基礎心理学会 平成27年度 第1回フォーラム】 「基礎心理学にとって個人差とは何か」

【日時】 2015年5月9日(土) 14:00〜17:00
【場所】 慶應義塾大学三田キャンパス南校舎 5 階 455 教室
【企画】 田谷修一郎(大正大学)・川畑秀明(慶應義塾大学)

これまでの基礎心理学・実験心理学では,個人差は多くの場合測定誤差として切り捨てられてきました。このことは個人に
依存しない,ある集団に共通の心の機能や特徴を明らかにしようとする心理学の目的上当然の姿勢といえるかもしれません。
しかし個体差の発生も自然法則から独立ではあり得ないでしょ うし,そうであれば個人差を生み出す一般メカニズム」という
ものもあってよいのかもしれません。そうしたメカニズムは個人差をノイズとして扱う限りは明らかにすることはできません。
もちろん,過去にも個人差に目が向けられたことが全く無かったわけではありません。たとえば文化の違いや年齢,性別,技術の
熟達度などを独立変数とした研究も,広義の個人差研究といえるでしょう。一方,近年の実験心理学や神経科学などの関連
領域では,より均質な(と考えられている)集団の中で生じる個人差に目を向け始めています。
今回のフォーラムではそのような個人差を興味の中心として扱った最近の研究について,3名の講演者が話題を提供します。
基礎系・実験系の心理学において個人差を扱うことの意味について議論する良い機会になりますと幸いです。

【企画趣旨】 (田谷修一郎)
・青黒/白金の話題 - 色の恒常性の錯視 - 個人差が二分した
	人によって違うことを説明されていない
・従来の基礎心理学は普遍性を追求、個人差を剰余変数として統制してしまう
・我々はこれまで「分布の中心」に興味をもってきた - 平均値を求める
	「平均的な人間はひとつの乳房とひとつの精巣を備える」
・ばらつきを生むメカニズムに注目することの意義
・個人差研究について考えてみよう

●田谷修一郎(大正大学) 「身体特徴の違いが生む空間知覚の個人差」

我々と外界との接点は多様な個体差を持つ我々自身の身体である。知覚系は外界の構造についてモデルを構築しこれを
行動のために利用するが,このモデルは身体と外界との相互作用によって絶え間なく更新されている。このため,モデルが
個々人の身体特徴に最適化されると,その結果として知覚に個人差があらわれる。本講演では身体の外見的特徴,とりわけ
両眼間距離(右目と左目の間の離れ具合)の違いが空間知覚の個人差を生むことについて検討した最近の研究について
紹介する。

・目と目の間の距離の個人差 → 視覚が変わる
・観察者の身体も制約条件になる - 個人差が効く
・空間知覚の問題
	網膜像(2次元)から外界の3次元構造を復元する - 逆光学
	数学的には不可能 (不良設定問題)
	奥行き手がかりから復元する
・制約条件 - 外界の構造と感覚刺激の間に強い相関のある条件
・制約条件とモデルの更新 ※SMHとも関係?
	モデルは行動と経験によって更新される
・行動は環境と身体との関係なので身体の個人差が効いてくる
・「蛙の手」錯視
	上から見た手の写真とその上下反転写真
	片方はよく見るがもう片方は滅多に見ることが出来ないので不自然に見える
・両目間の距離
	写真で目を離すと印象がえらく変わる
・両眼視差
	日本人は平均6.2cm
	網膜像のズレは外界の奥行きが大きいほど大きい
	網膜像のズレの方向は注視点より手前と奥で反転する
・網膜像差の幾何学
	d = δD^2 / (I + δD)
・実験してみた
	完全に幾何学的解釈に従うとすればステレオグラムの大きさは眼間距離に比例する
	ものすごく弱い相関が出た(^_^;)
	実物体では相関が出なかった
	腕の長さも関係する - 両眼距離と腕の長さも相関がある
・結論
	眼間距離の個人差は知覚奥行き量にかなり影響する
	3DTVなど立体視にも個人差が関係する
	これらの研究には個人差研究が必要である
	制約条件には個体差がある

●松吉大輔(東京大学) 「個人差 - 連続と異質が交錯するヒト認知の多様性」

ヒトの視覚認知には大きな多様性が存在する。しかしながら,認知の個人差は単なる誤差やノイズではなく,ヒト認知に
関する理論を制約し,ヒトという種全体の共通性・系統性を強力に証明するという科学的・社会的意義を併せ持つ分散
である。本講演では,我々や他の研究者が行った視覚認知(特に物体・顔認知)の認知神経科学的個人差研究の紹介を
通じて,個人差アプローチの有用性を示すとともに,それがもたらす新しい人間観(連続と異質の交錯)について議論する。

・新しい人間観(連続と異質の交錯)
	individual differences
・極端な例
	被験者に異なった2群がある → 平均したら完全に同じ
・individual differences in behavier
	common bias
	qualitative factors
・[task - group] × [within - between]
	というマトリクスを意識して心理学実験を行う
・個人差のいろいろ
	量的なもの - 分布グラフから推定
	二分されるもの - 性差 - 自閉症の80%は男性
・ちょっと眠くなる発表(^_^;)

●内藤智之(大阪大学) 「視覚芸術に対する感性の個人差を生み出す脳内ネットワーク」

絵画や写真などの視覚芸術作品に対する美醜や好き嫌いなどの印象はしばしば個人間で異なるが,感性の個人差が
何故生じるのかについては不明な点が多い。我々は風景画に対する印象評定と fMRI による脳活動計測によって個人の
芸術に対する感性を定量評価し,関連する脳内ネットワークを同定した。本講演では個人差の大きい感性と小さい感性に
関連する脳部位を示し,感性の個人差を生み出す脳内ネットワークについて議論する。また感性の個人差の持つ生態学
的な意義についても議論したい。

・外側視受容体の方向性(方位選択性)についての研究をやりました
	論文はかなり叩かれた(^_^;)
・ラボの方針が「神経美学」に変わったのでそれをゃっている
・ディシャンの便器が芸術であるか - ガンブラが芸術かどうか
	これが個人差だ
・ある絵を見て評価がほぼ似る場合とバラバラになる場合とがある
・ゴッホの2枚の絵で
	どちらが評価が分かれるか
	どちらが評価が似るか
	を定量化してみる研究
・美を判断する時に働く脳の部位をfMRIで探る
・評価軸がいろいろある - 多次元
	「美しい」 - 感性評価の軸を判定する
	因子分析
	評価紙の先頭に「しっている」を置く → 多くが知っている絵は捨てる
・因子分析が3次元となるために個人差が出てくる
	絵の違いを表す軸がある
	絵の違いを表さない軸での被験者の散らばりが大きい → 個人差が大きい
・平均ではつぶれて消える情報が因子分析により個人差として出てきた
	個人差が小さい軸は「みんなの評価」として寄与
・モデルのロバスト性の検証
	被験者を全て変えたらどうなるか
		形容詞を変えても個人差に影響されない
	絵を全て変えたらどうなるか
		絵が変わると大きく変わってモデルが成立しない
・結論1
	芸術の判断の因子は2〜3個で十分
	個人差の小さい軸(普遍的)
	個人差の大きい軸
・上記の研究をfMRIで追試
	「美」の判定ではない(既にやられている)
	因子に対する脳機能部位を計測
	島(とう)など深い部位が関係している
		情動・学習の部位
		「意思決定」と考えればこれはSMHからは当然(^_^)
	いま10人のデータでそこそこ言えるものだけを示した
・結論2
	因子に対応する特徴的な脳部位がありそう
・美的判断に対する時間的効果の研究
	半年後にも同じ判定ができるか(同じ条件)
・結論3
	「写真」は半年後でもほぼ変わらない
	「絵」は半年後にかなり変動している(大幅に変わる被験者もいる)
・仮説
	「写真」は個人差にロバストな部位では?
	「絵」は個人差に影響される因子の部位では?
・このチームの研究のコラボレータ
	京都造形芸術大学の専門家	
・被験者は阪大生、かなり狭い

●ディスカッション
	→ TOYOTAメモ20150510に記入

そして、昨日の甲南女子大学の先生からのメイル続報で、10月12日に講演することが決まり、 CES(頭蓋電気刺激療法)Neuromodulation もブックマークする事になった。 なかなかに面白い展開で、まさか筋電だけでなく、 ピリピリ まで関係してくるとは思わなかった(^_^;)。 やはり、頑張ってCQに原稿を書いて、良かった。

2015年5月11日(月)

今回の筋電ネタからバイオフィードバック療法への思わずの展開を知らせた照岡さんからのメイルで、脳に電気刺激を与えると数学が出来るようになる(^_^;)、という 怪しいNatureの論文 を教えてもらった。 リハビリならともかく、ここまでピリピリで行けるかどうか、面白い世界があったものだ。 また、来週の週末に予定されている、 音学シンポジウム2015 の情報がようやく見えてきたが、ポスターセッションには、あいかわらず(20年前のデジャヴ)のもの、興味のあるものなどが並んでいるが、ちょっと今年の招待講演はやや期待外れの品揃えであった。 他学会への参加と並べて、あまり情報が見えてこなくて参加をパスしていたが、ポスターセッションだけ覗く、というのはアリかもしれないので、ちょっと可能性を考えておくことにした。

今日は4限に「サウンドデザイン」があるので、「Maxでこんな事が出来る」のデモとして、連休中の成果である ダブルMyo を見せるとして、それまでの時間に、またまたDenisの本でopenFrameworksを進めてみることにした。 順になぞるとすれば、 Processing日記 のように、Tutorialのソースコードが必要である。 さすがにこの本に印刷されているコードを手打ちしたくない(^_^;)。 そこで上のように、出版社のサイトに行き、ユーザ登録して、本に書かれているソースコードをまとめたzipをゲットして、最初のサンプルを走らせようとしてみると、またまた出なかった。 これまでと同様のWarningが出るが、これはOSバージョンが10.9より上に行っているためで無視できるが、サンプルの「main.cpp」「testApp.cpp」「testApp.h」というのは、openFrameworksのprojectGeneratorからテンプレートで出来る「ofApp.cpp」「ofApp.h」と違っていて、これを単純にリネームしても駄目、中身をエディタで開いてコピペしても駄目なのだ。 要するに、ダブルMyoのところは出来たものの、まだまだXcodeも、そしてopenFrameworksについても、ちゃんと判っていない、という証明である。

その後、学生に見せる準備をしてMyoを着けてみると、MyoConnect(ArmBandManager)が新バージョンのインストールを聞いてきたのを受けて、3限の時間を使って、MyoのDeveloperのFORUMに上のような書き込みを、初めて行った。 やはりこの世界、聞くだけでなく自分の情報を出す、というGive & Takeが重要であるのと、これまでの5件を6件に積み増して「deep sleep」へのリクエストの世論を喚起する、という2つの目的からである。 結果がどう進展するかは不明だが、このような餌撒きも重要だろう。

2015年5月12日(火)

昨日の夕方にアカペラのメンバーに「明日のアカペラはお休みの確率が75%」とメイルしていつもの耳鼻科に行き、喉が腫れている、とまたまた上の「ジスロマック」( mbed日記 の「2014年10月26日(土)」以来 )を処方してもらって飲んで、今日は研究室に出て来るとまず、正式に「アカペラ本日お休み」をメイルした。 敗因は先週末の東京のホテルで、寝る時に冷房を切り忘れたからだった(^_^;)。

まぁ、ちょうど上のように、季節外れの台風6号が近付いて午後から雨が降る事もあり、アカペラは2週スキップして来週に再開である。 そして研究室に届いたメイルを調べていると、なんとMyoのDeveloperサイトから以下のように、「You can put the Myo armband into "deep sleep" with the "turn off" button in Myo Connect, on OSX and Windows.」というのが来ていた。

さっそく起動してみると、昨日はまったく気付かなかったが、以下のようにMyoConnectに新しいボタンが増えていて、これでdeep sleep、つまりリモートのturn offが出来るのだった(^_^)。 素晴らしい、さすがの連中である。

これを確認して、さっそく以下のようにMyo Developer Forumに感謝を書き込んだ。 地球が1周する間に解決してしまうなんて(実際には彼らはずっとこれをやってくれていたのだ)、いい時代だなぁ、とまた痛感した。 これで、6月の音知学会での発表のために札幌に飛ぶフライトでも、安心して機内に持ち込んで運ぶことができる。

そして、SketchingのコミュニティMLには、「Hey Guys, I just launched (and funded) a new tiny Makey Makey !」というメイルが届いた。 Makey Makeyを作った奴が 新しいバージョン をKickStarterに上げたのだ。 ただし、これは直接USBに差し込むので、どう考えても、USBコネクタ部分を壊してしまいそうで、あまりに危ない(^_^;)。 自分のパソコンではやりたくないが、とりあえず出資登録した。

そして午後になり、風邪ではプログラミングなど知的な作業は出来ないので、単純作業に没頭した。 知ったばかりの 日本バイオフィードバック学会 のページに行き、 バイオフィードバックとは? という解説に、コレだ! と膝を叩き、 第43回日本バイオフィードバック学会学術総会 というページに辿り着いてしまった。 日程は「2015年7月4日(土)-7月5日(日) 筑波大学筑波キャンパス」とあり、この週末はおそらく表象文化論学会の大会があるのでは・・・と空けてあった日である。 さらになんと、「発表申し込み受付期限を5月31日まで延長しました」とあるではないか。 調べてみると、予稿は抄録集ということで時間学会と同じように、A4の1ページでいいのだという。 こうなると、まだ日程も内容も告知されない表象文化論学会を見捨てて、ここに発表参加する、という可能性がある事になる。 ただしまったくアウェーであり、土地勘が無いどころか完全に暗中模索である。 学会紹介 のページによれば、1973年に研究会が出来て、1983年には学会になっているので、音楽情報科学研究会などよりもさらに歴史が深いのだ。

2014 第42回日本バイオフィードバック学会学術総会発表演題
【特別講演】
ストレスとバイオフィードバック    野村 忍(早稲田大学人間科学学術院)
【教育講演】
ストレスと森林浴    高山 範理(独立行政法人森林総合研究所森林管理研究領域)
【シンポジウム】バイオフィードバックの付加的な価値を探る
バイオフィードバック療法における生理-心理-精神(Frankl,V.E.)関係から考える付加価値    山口 浩(岩手大学人文社会科学部)
遊びを通して心身相関に親しむ    長野 祐一郎(文京学院大学人間学部心理学科)
バイオフィードバックと心身への気づき: Alexithymia and Interoceptive Awareness    神原 憲治(関西医科大学医学部心療内科学講座)
バイオフィードバックと自尊感情    臼井 幸治(東邦大学医療センター大森病院心療内科)
【講習会】
工学系:バイオフィードバックシステムの開発    安士 光男(パイオニア株式会社)
心理学系:能面テスト    簑下 成子(川村学園女子大学文学部心理学科)
医学系:NIRS(near-infrared spectroscopy)    藤田 欣也(東邦大学医療センター大森病院心療内科)
【一般演題発表 1】
1.就寝前HRV-BF訓練が睡眠中の心拍変動と起床時睡眠感に及ぼす影響
2.BrainAvatarを用いたニューロフィードバックによって両下肢の不快感が著明に減少した症例
3.漸進的筋弛緩法を応用した香りのリラクセーション法の効果
4.KinectTMセンサーを使った仮想環境が高齢者の運動機能に及ぼす影響について
5.吸気呼気の比率が心拍変動に与える影響に関する基礎検討
【一般演題発表 2】
1.認知行動療法的アプローチによる「ココロの元気が出るアプリ」開発をめぐる医・工・心の連携のあり方
2.横浜心理トレーニングセンターにおけるバイオフィードバック療法の実践
3.タイミング誤差のフィードバックトレーニングが時間認知に及ぼす影響
4.ボトックス治療とバイオフィードバックの併用で症状の安定をみた痙性斜頸の1例
5.心療内科の医療現場におけるバイオフィードバックの可能性
【一般演題発表 3】
1.フィジカルコンピューティングとデジタルファブリケーションを用いた低コスト皮膚温測定装置の開発とその運用(1)
2.フィジカルコンピューティングとデジタルファブリケーションを用いた低コスト皮膚温測定装置の開発とその運用(2)
3.体感振動刺激呈示による生体反応とパフォーマンス差異
4.脈波間変動に及ぼす呼吸操作とBFの影響
5.BF型知覚支援RTを用いた認知神経リハ 〜第5報:療法士・片麻痺者間で知覚を共有させる知覚共感ウェア〜
【一般演題発表 4】
1.汎化モデルを用いたパーキンソン振戦BF機序の研究
2.糖尿病患者のためのストレスマネジメント〜呼吸バイオフィードバックトレーニング〜
3.振動と温度による複合感覚刺激が血流と皮膚温度に及ぼす影響
4.快・不快情動誘発刺激が身体知覚に及ぼす影響
【一般演題発表 5】
1.リラクゼーション法を契機に治療関係を継続できた終末期重症心不全患者の一例
2.バイオフィードバック療法と自律訓練法の併用で改善を認めた書痙患者の一例
3.セルフトークの使用による心身への影響について〜脳波・POMSを用いて〜
4.P300から見る本質的な賞罰への興味について
5.競争ストレス時における脳波(3)

2013 第41回日本バイオフィードバック学会学術総会発表演題
【特別企画ワークショップ】心拍変動バイオフィードバック法ワークショップ
    講師: Paul Lehrer博士(ニュージャージー医科歯科大学精神科教授)
       榊原 雅人(愛知学院大学心身科学部)
       及川 欧 (旭川医科大学救急部)
【シンポジウム】心拍変動バイオフィードバックの新しい展開
    Paul Lehrer(ニュージャージー医科歯科大学精神科)
    榊原 雅人 (愛知学院大学心身科学部)澤田 幸展 (札幌医科大学 名誉教授)
【一般発表】
1-01 競争課題における連続した結果呈示の影響について
1-02 競争ストレス時における脳波(2)
1-03 トップアスリートの心理サポートにおけるバイオフィードバックの有効性
1-04 心拍変動バイオフィードバックを利用したリラクセーション法の効果検討
1-05 子どもがリラクセーションを学ぶための呼吸誘導バイオフィードバックぬいぐるみの開発と評価
1-06 音楽と振動を用いた呼吸誘導によるリラクセーション手法の開発と評価
1-07 安静体験イメージによる精神生理学的変化について(2)
1-08 USBマイコンを使った簡易BFシステム
1-09 マイクロ波レーダーを用いた非接触型バイオフィードバックシステムの開発
1-10 ウェブカメラを用いたまばたき訓練システムの開発
2-01 バイオフィードバック・心身相関・自己治癒力に対する一考察
2-02 主観的な感情変化に伴う身体変化の認知:感情誘発刺激とAPQ-Rによる検討
2-03 心拍の虚偽フィードバックが魅力度評定・自律神経系指標に及ぼす影響
2-04 異なる呼吸パターン由来の照度変化による呼吸統制の生理的・心理的効果
2-05 拘束性換気障害に対して心拍変動バイオフィードバックを用いた呼吸コントロールの試み
2-06 心拍コヒーレンス法が有効であった慢性腰痛症例に対して
2-07 高齢者に対するキネクトセンサーを用いたインタラクティブ・リハビリテーションの効果
2-08 骨盤内臓器脱術後の便失禁症状に骨盤底筋の筋電図バイオフィードバック療法が奏効した症例
2-09 胃電図のバイオフィードバックへの応用
2-10 バイオフィードバック療法を用いた改善をみた痙性斜頚の一例〜心療内科の現場から〜
2-11 医学生に対するバイオフィードバック療法実習の試み

2012 第40回日本バイオフィードバック学会学術総会発表演題
【企画セッション(1)】 バイオフィードバック過去・現在・未来
    CNメディカル・リサーチ 東邦大学医学部名誉教授 前日本バイオフィードバック学会会長
    西村千秋
【企画セッション(2)】 バイオフィードバック学会委員会の抱負を語る
【特別講演】 未来を拓くヘルスイノベーション
    立命館大学理工学部ロボティクス学科教授  牧川方昭
【一般発表】
OP 1-1 筋電図バイオフィードバック法を併用した漸進的弛緩法の主観的評価と心臓自律神経活動の特徴
OP 1-2 肩関節挙上困難症例に対して筋電図フィードバックと挙上開始前の上肢重量感への気づきが有効であった症例
OP 1-3 膝蓋大腿関節機能不全に対する筋電図バイオフィードバック法療法の一経験
OP 1-4 表面筋電位を用いた手指の伸展・屈曲動作の識別
OP 2-1 フィードバック方法の違いが皮膚コンダクタンスの自己制御成績に及ぼす影響の検討
OP 2-2 前頭部Fp1とFp2から導出されるα帯域脳波の位相差をフィードバック制御して自律訓練法の学習効率を向上させる方法について
OP 2-3 上肢の動作空間が観察者の注意にもたらす影響について
OP 3-1 情動誘発刺激に対する生理心理反応性からみたアレキシサイミア特性
OP 3-2 心身症患者におけるバイオフィードバック法の特徴
OP 3-3 安静体験イメージによる精神生理学的変化について
OP 3-4 呼吸統制の違いによる生理的変化の特徴抽出
OP 3-5 呼吸法とバイオフィードバックを融合した新しいストレス解消法の基礎研究
OP 3-6 子どもがリラクセーションを学ぶための呼吸誘導バイオフィードバックぬいぐるみの開発
OP 4-1 バイオフィードバックトレーニングが競技力に及ぼす影響に関する研究
OP 4-2 調子の良さに関する精神生理学的研究
OP 4-3 競争ストレス時における脳波
OP 4-4 健康維持のための習慣的運動を動機づけるBF体操システムの開発
OP 4-5 家庭内で「ながら運動」を促進するシステムの開発
OP 4-6 あやとり遊びに伴う脳活動変化-高齢者の事例から-

2011 
第39回日本バイオフィードバック学会学術総会発表演題
【会長講演】 生活習慣病とメンタルヘルス:疾病予防と適切な治療
    帝京大学公衆衛生大学院・医学部附属病院心療内科 中尾睦宏
【緊急企画ワークショップ】 東日本大震災「被災者と援助者のための、こころとからだのセルフケア」
精神性生理学的ストレス(トラウマ)ケアの実践〜自律神経バランスを自分自身で整える〜
    ナチュラル心療内科クリニック/アイ・プロジェクト統合医療研究所 竹林直紀
【企画シンポジウム】 バイオフィードバックとは:定義をめぐる諸問題
医学の立場からみたバイオフィードバック
    帝京大学公衆衛生大学院・医学部附属病院心療内科 中尾睦宏
工学の立場からみたバイオフィードバック
    大阪工業大学・ロボット工学科 大須賀美恵子
心理学の立場からみたバイオフィードバック
    鎌倉女子大学児童学部子ども心理学科 廣田昭久
【特別セッション】 ドラムサークルでリラックス!
    プロドラマー/イベントプロデューサー 酒井麿
【一般発表】
1.運動器慢性疼痛 その集学的アプローチ
2.主観的気分と動作速度および使用空間の関連性
3.片頭痛に対するバイオフィードバック療法の有効性の検討
4.バイオフィードバック療法がもたらす治療効果:対人緊張が強い頭痛患者の一例を通して
5.骨盤底筋協調運動障害を呈する便排出障害型便秘症に対する肛門筋電計を用いたバイオフィード バック療法の効果に関する検討
6.マインドフルネスのフィードバック効果とバイオフィードバックの可能性-バイオフィードバックの源流と展望を探る理論的考察 その1-
7.未来事象を想定したフィードフォワード制御とのハイブリッドな運用の意義-バイオフィードバックの源流を探り展望する理論的考察 その2-
8.耳鳴に対する統合医療の有用性に関する研究〜第2報:心的介入の奏功性と自己分析傾向との相関性〜
9.BF型知覚支援RTを用いた認知神経リハ〜第3報:対側BF刺激による麻痺足への注意力向上効果のfNIRS検証〜
10.BF型知覚支援RTを用いた認知神経リハ〜第4報:麻痺側足圧の対側バイパス呈示のための最適部位に関する検討〜
11.「問題解決パラダイム」を用いた公衆衛生学的アプローチ〜東日本大震災における外傷後ストレス障害を対象とした検討〜
12.心拍変動バイオフィードバック法による不安軽減効果の可能性-特性不安の高い学生の訓練経過 から-
13.子どもがリラクゼーションを学ぶための呼吸誘導バイオフィードバックぬいぐるみの開発に向けて
14.災害被災者を救うBF技術
15.工学・医学・心理学の三位一体 -レスキュー学の提案-
16.発達障害児の運動機能改善を目的とした遊びリテーションシステムの開発17.呼吸誘導システムによる急性ストレス緩和効果の検討
18.精神性が日本拳法の構えに及ぼす影響に関する一考察
19.他動揺動運動刺激の変化による脳内血行動態への影響
20.自然環境音聴取時の重心動揺
21.呼吸セルフコントロールの心理生理的リラクセーション効果-主観反応と生理反応の乖離について

2010 第38回日本バイオフィードバック学会学術総会発表演題
【特別講演】 顎口腔系のEMGバイオフィードバックを探る
    岩手医科大学歯学部歯科補綴学講座  石橋寛二
【教育講演】 唾液ストレス検査の展望
    岩手大学大学院工学研究科  山口昌樹
【企画セッション】 バイオフィードバックおよび応用心理生理学におけるHemoencephalography (HEG)またNear-infrared Spectroscopy (NIRS)の基礎と応用
SP-1&2 HEG: Concept, origin and technology for research and practice
    President of the Brazilian Association for Biofeedback Adrian Machado Van Deusen
SP-3 NIRSによる映像視聴時の前頭前野活動の評価
    独立行政法人産業技術総合研究所デジタルヒューマン研究センター 山田クリス孝介
     早稲田大学人間科学学術院 野村忍
【一般発表】
OP(1)-1 心身相関の気付きが乏しい頭痛患者にバイオフィードバック療法が有効であった思春期例
OP(1)-2 高血圧に対するバイオフィードバック療法終了後、予後からみた適応の検討
OP(1)-3 骨盤底筋協調運動障害を呈する排便困難型便秘症に対するバイオフィードバック療法の効果に関する検討
OP(2)-1 耳鳴に対する統合治療の有用性に関する研究〜第1報:認知行動療法とBF療法による心的介入〜
OP(2)-2 自律訓練法と自律フィードバック訓練法の心理・生理的特徴-自律訓練法初心者のアスリートを対象として-
OP(2)-3 呼吸セルフコントロールにおける快適リズムの評価とリラクセーション効果
OP(3)-1 BF型知覚支援RTを用いた認知神経リハ〜第1報:麻痺側足底圧の対側肢体へのバイパス呈示とその効能検証〜
OP(3)-2 BF型知覚支援RTを用いた認知神経リハ〜第2報:BFによる麻痺側加重時の不安解消   手法〜
OP(3)-3 適応刺激Biofeedbackを用いた認知症治療システムの基礎研究
OP(4)-1 振戦疾患病態評価のためのらせん描写図形と上肢加速度の解析
OP(4)-2 運動および睡眠状態の心拍変動の特徴を持つ音刺激の生理的影響
OP(5)-1 脳波から見たダウン症児の言語指導における音楽の効果
OP(5)-2 音楽傾聴に関連する脳神経活動の測定
OP(5)-3 競争ストレスがCNVの構成成分に与える影響について
OP(6)-1 他者の動作空間の違いが観察者の生理・心理的反応にもたらす影響について
OP(6)-2 感覚運動リズム(SMR)帯域のニューロフィードバック訓練が認知課題の成績に及ぼす効果(1):創造性検査
OP(6)-3 唾液アミラーゼを用いた看護・介護職従事者の長期的なストレスの計測基礎研究

2009 
第37回日本バイオフィードバック学会学術総会発表演題
【企画セッション1】 機械と人の学習
OS1-1  バイオフィードバックにおける人の学習    東洋英和女学院大学 人間科学部 人間科学科 小林 能成
OS1-2  BCI(brain-computer interface)におけるバイオフィードバック    東北大学大学院 工学研究科 電子工学専攻 加納 慎一郎
【特別講演】 計算神経科学とブレイン・マシン・インタフェース
    (株)国際電気通信基礎技術研究所 脳情報研究所所長/ATR フェロー  川人 光男
【企画セッション2】 バイオフィードバックの新しい展開 -工学技術の応用-
OS2-1  マルチモーダルな情報提示とバイオフィードバックへの応用可能性    大阪工業大学 情報科学部 情報メディア学科  橋本 渉
OS2-2  マイクロマシンのヘルスケア応用とバイオフィードバックへの応用可能性    大阪工業大学 工学部 生体医工学科  筒井 博司
【教育講演】 バイオフィードバック機器開発における法的責任と技術者倫理-特に製造物責任法と医学倫理の視点から
    長岡技術科学大学 生物系 医用生体工学教室  福本 一朗
【企画セッション3】  バイオフィードバックの新しい展開 -臨床の現場から
OS3-1  ニューロフィードバックの実際    さきお英子子ども心のクリニック  竹内 伸
OS3-2  次世代型統合医療とバイオフィードバック    京都府立医科大学 微生物学教室  今西 二郎
【一般発表】
PD-01  バイオフィードバックを利用した物理音響的耳鳴治療の試み
PD-02  才能の再生をBFにより確認したことで症状が軽快した1 症例
PD-03  生体信号の音響変換に基づくバイオフィードバックへの応用
PD-04  疲労の経時的な変化を捉えるシステムの検討-Wii ボードを用いた重心動揺の経時的測定-
PD-05  日常生活での生理反応のフィードバックについて
PD-06  Biofeedback によるBody Image のリハビリ訓練装置の開発
PD-07  相互通信可能なドラフタ型フォースディスプレイに関する研究
PD-08  呼気と歯音信号を用いたヘッドマウントディスプレイの制御
PD-09  旋回を想起させるような歩行感覚提示の試み)
PD-10  日常動作における重心の置き方のタイプを考慮したコーチングシステム-4スタンス理論に基づくセンシングフィードバック教示-
PD-11  身体的引き込み制御に基づく初対面仲介ロボット

2008 第36回日本バイオフィードバック学会学術総会発表演題
【シンポジウム】臨床バイオフィードバックの実践 〜新しい医療パラダイムに向けて〜
S-1.認知行動的アプローチにおけるセルフモニタリングの有効利用 〜バイオフィードバックへの応用の可能性〜
S-2.リラクセーションナースの実際
S-3.脳科学の臨床応用からバイオフィードバックを再考する
S-4.心療内科におけるバイオフィードバックの実際    -アレキシサイミア(失感情症)・アレキシソミア(失体感症)とバイオフィードバック-
【一般演題】
1.耳鳴音響物理BF 療法の試み
2.ストレス‐クリーナー(SC-SX)によるリラクセーション効果
3.バイオマーカーによるバイオフィードバック研究への一アプローチ
4.ケータイによる授業ノート作成時のストレスについて
5.LifeShirt を用いた呼吸セルフコントロールの主観的方略の評価
6.不安・恐怖喚起場面における身体接触の効果の検討‐親和欲求・依存性の個人差を考慮して‐
7.心拍数パワースペクトル・フィードバックによる制御の可能性
8.他者に対する情動・認知についての生理心理的検討‐異なる身体表情を示す子どもに対して‐
9.9番染色体短腕欠損症児Yさんの発声・発語機能開発 -ピアノの音と身体動作を伴う発声の試み-
10.手指の運動を伴うあそびにおける生理心理的変化について(3)
11.ボディワークにおけるタッチの質と心拍の変化についての予備的検討
12.競争結果の呈示と事象関連電位について(3)
13.SCL指標を用いた臨床面接の実証研究 その1‐臨床心理面接における相互作用とクライエントの生理学的変化の繋がり‐
14.SCL指標を用いた臨床面接の実証研究 その2 システムズアプローチにおける面接内容と治療者のphysical reactionの関連
15.バイオフィードバックにより身体感覚の気づきが促され、認知と行動の変化がみられた機能性嘔吐の一症例
16.心身症患者における精神生理学的ストレスプロファイル(PSP)と心理アセスメントによる多角的評価の試み
17.身体感覚への気づきの回復過程にて前兆を認めるようになった難治性片頭痛の一症例
18.高血圧に対するバイオフィードバック療法後3年間の追跡調査〜心理的背景の分析〜
19.心身症患者における精神生理学的ストレスプロファイル( PsychophysiologicalStress Profile : PSP)によるストレス反応のパターン分類についての一考察
20.脊髄損傷に対するHeart Rate Variability Biofeedbackの効果

2007 第35回日本バイオフィードバック学会学術総会発表演題
【シンポジウム】からだからこころへのアプローチ -バイオフィードバックで何ができるか-
S-1.加速度を用いた振戦の評価とバイオフィードバック
S-2.医学・医療の立場から〜総合的に診ることの重要性〜
S-3.バイオフィードバックを介した心理面接
【一般演題】
1.動作者と観察者における呼吸の個人間同調について
2.太極拳における心身運動療法としての提案モデル
3.呼吸セルフコントロールに関する経験的知識の分析(3)
4.高血圧に対するバイオフィードバック療法後一年間の追跡調査〜非導入群との比較〜
5.バイオフィードバックセッションにおけるセラピストの関わり方の影響についての考察   -当科行動医学外来の症例を通して
6.身体感覚の気づきへのプロセスとバイオフィードバック
7.筋弛緩法とバイオフィードバック療法が奏効した片頭痛の一例
8.EMDR(眼球運動による脱感作と再処理法)法の主観的安心感に及ぼす効果と脳波変化
9.競争結果の呈示と事象関連電位について(2)
10.脳波からみた課題の違いによる集中時の様相について
11.ケータイ電話とストレスについて(ブログへのアクセスを中心に)
12.筆跡フィードバックの有無によるアルキメデス螺旋描写への影響
13.多汗症温度バイオフィードバック療法における手掌温度変化姿態の研究

2006 第34回日本バイオフィードバック学会学術総会発表演題
【シンポジウム】こころへのはたらきかけとしてのバイオフィードバック  -個人に合ったバイオフィードバックとは-
S-1.高齢者・難病患者とバイオフィードバック
S-2.バイオフィードバックと育児
S-3.チーム医療とバイオフィードバック -臨床バイオフィードバックセラピストの提言-
S-4.イメージとバイオフィードバック
S-5.バーチャルリアリティとバイオフィードバック
【一般演題】
1.呼吸セルフコントロールに関する経験的知識の分析(第2報)
2.太極拳式呼吸の遂行に伴う脳波と自律神経機能指標の変化
3.運動負荷心電図の波形解析と自律神経活動の評価
4.等尺性肘屈曲力の漸増的フィードバック学習における上腕筋群間の活動制御特性
5.α波バイオフィードバック信号に関する研究 -視覚信号提示装置について-
6.共鳴磁場分析器(MRA)はBF機器として認められるか否かの提案
7.健常大学生に対するマルチフィードバックの効果
8.モバイル端末操作時の心身の状態について
9.競争結果の呈示と事象関連電位について
10.洞性頻脈の心拍バイオフィードバック訓練時にみられた一過性徐脈
11.日常生活の姿勢変化に伴う心拍・呼吸の変化
12.純音による振戦フィードバック訓練システムの基礎研究
13.心療内科受診のFMS患者における心身の非対称性について
14.高血圧に対するバイオフィードバック療法(リラクセーション併用)の直接法と間接法との比較について
15.バイフィードバック療法によって治療的展開が得られた痙性斜頸の一例
16.要介護高齢者の廃用症候群に対する腹臥位(うつ伏せ)療法の一症例
17.認知症リハビリバイオフィードバックのおけるフィードバック情報の検討
18.多汗症バイオフィードバック療法の基礎研究

2005 第33回日本バイオフィードバック学会学術総会発表演題
【シンポジウム(1)】「先端科学と医療」
S1-1.Ecological Momentary Assessmentを超えて-リアルタイムバイオフィードバックの可能性-
S1-2.Webを利用した心身行動変容の可能性について
S1-3.生体情報特性を応用した高臨場感システム
S1-4.『居心地のいい生活』をするための五感刺激ロボットの開発
【シンポジウム(2)】「バイオフィードバックの新たな可能性」
S2-1.EBMの立場からみたバイオフィードバック療法の現状と課題
S2-2.臨床精神生理学の可能性  〜研究から実践への架け橋〜
S2-3.BFの素晴らしさ」を伝えるために
S2-4.学校教育におけるバイオフィードバックの利用可能性を探る
【一般演題】
1.尿量モニタ「ゆりりん」の製品化とその普及への展開
2.リラクゼーションを目的とした呼吸誘導システム
3.呼吸セルフコントロールに関する経験的知識の分析 : 呼吸療法,東洋的呼吸法との比較
4.自伝的記憶のイメージ想起に付随する脳活動の計測
5.「抗酸化作用があって健康に良い」と宣伝されている「水」製品の飲用が被験者の血中酸化ストレス指標物質の動態に及ぼす影響の検討
6.社会的不安が心臓血管反応に与える影響に関する基礎的研究
7.競争ストレス時におけるCNV(3)
8.ネットワーク時代におけるパソコン作業について : 生理心理的検討
9.高血圧に対するバイオフィードバック療法(直接法)とリラクセーション療法併用との比較について
10.動揺性高血圧の患者にリラックス呼吸法バイオフィードバック(BRBF)を行い,
11. 書痙に対する4チャンネル筋電図バイオフィードバック : 書痙患者と健常大学生との比較
12.外肛門括約筋筋電図を使用したバイオフィードバック訓練における評価法の検討
13.Stretching and Active Biofeedbackの役割 : 痙性斜頸を通しての検討
14.バイオフィードバック療法を介した心理的アプローチ : 疼痛性障害の一例を通して
15.Stroop課題返答時間フィードバック認知症リハビリシステムの基礎研究
16.心身症患者における身体感覚の逸脱とバイオフィードバック

2004 第32回日本バイオフィードバック学会学術総会発表演題
【シンポジウム】我が国のバイオフィードバックの今後
S-1.我が国バイオフィードバックの初期段階
S-2.排便機能障害におけるバイオフィードバック療法について
S-3.心理学系学生を対象にしたバイオフィードバックに関する意識調査
S-4.工学からみたバイオフィードバック
【一般演題】
1.当科におけるStretching and Active Biofeedbackの効果
2.神経疾患患者に対する音楽運動療法の試み
3.バイオフィードバック療法と同時に心理社会的アプローチを行った精神発達遅滞を伴う痙性斜頸の一例
4.書痙に対する4チャンネル筋電図バイオフィードバック療法 : 2チャンネル筋電図フィードバックとの比較
5.いわゆる「腰曲がり」に対する筋電図バイオフィードバック訓練の一症例
6.複数行同時提示文による速読の可能性
7.CAD作業時の姿勢フィードバックについて
8.メロディーに対する馴化過程のfMRIによる検討
9.超音波尿量モニターのフィールドテストについて
10.光フィードバックリラクゼーション装置を用いた本態性振戦抑制の基礎研究
11. Webによる心身行動フィードバックシステムの開発
12.リラックス法はストレス緩和法たり得るか? : 高純度セドロールを用いた検討
13.呼吸療法の研究(2)
14.自然音によるイメージがもつリラクセーション効果の検討
15.競争ストレス時におけるCNV(2)
16.心室性期外収縮に対する心拍バイオフィードバックの試み
17.高血圧に対するバイオフィードバック療法とリラクセーション療法の併用効果について
18.便失禁治療における内圧・筋電図バイオフィードバック療法と電気刺激療法を併用した治療効果の比較検討
19.心身症患者におけるPsychophysiological Stress Profile
20.当院における脳波バイオフィードバック療法の現状

2003 第31回日本バイオフィードバック学会学術総会発表演題
【一般演題】
1.床場面におけるバイオフィードバック療法の位置づけの検討 -痙性斜頸の一例から-
2.身体感覚の気付きとバイオフィードバック
3.筋緊張型頭痛への「ストレッチ・バイオフィードバック併用アプローチ」の有効性  自覚,自信,そして安心ヘ
4.便失禁治療に対する筋電図バイオフィードバック療法の試み
5.便失禁重度症例を内圧法・筋電図バイオフィードバック療法の併用治療で改善した症例
6.DVによるPTSD患者に対するBF法とEMDR
7.振戦BF訓練評価のための3軸型振戦加速度計測・評価システムの構築
8.リハ施設における超音波尿意センサ臨床測定について
9.バイオフィードバックにおける偽フィードバックと確信の程度
10.運動イメージに伴う脳活動のfMRI測定
11.心拍の知覚が情動喚起刺激の評価に及ぼす影響
12.脳波からみたStretching効果について
13.競争ストレス時におけるCNV
14.パソコン作業時の姿勢とストレスの関係について
15.呼吸療法の研究(1)
16.高血圧に対する新しいバイオフィードバック療法の試み
17.耳鳴に伴う心気障害に対して,受動的音楽療法・バイオフィードバック療法が有効であった一症例
18.生演奏による音楽鑑賞が生理反応および気分に与える影響
19.心拍バイオフィードバック訓練に見られる血管攣縮性欠脈とその自己コントロール

2002 第30回日本バイオフィードバック学会学術総会発表演題
【シンポジウム】バイオフィードバックの臨床応用 -再活性化を目指して-
S-1.シンポジウムの目的とアンケート結果について
S-2.九大心療内科におけるバイオフィードバックの臨床応用
S-3.神経内科から提案する臨床でのバイオフィードバック療法(BFT)の再活性化
S-4.リハビリテーション医の立場から
S-5.総合病院精神科領域におけるバイオフィードバックの臨床応用
【一般演題】
1.皮膚温バイオフィードバックトレーニングの訓練課程の分析と温度フィードバック・モデルの検討
2.リラクセーションを目的とした皮膚温バイオフィードバックが日常的なセルフコントロールの
3.皮膚温フィードバック訓練のパーソナリティ次元に及ぼす効果についての研究
4.遅い速度遂行の習熟に伴う認知機能の変化について
5.S-R整合性の違いが与える心理的影響についてのCNVからの検討
6.種々の機能的便秘に対するバイオフィードバック療法(BF)の取り組み
7.肛門疾患術後の排便機能障害に対してバイオフィードバック療法(BF)の短期治療を行い改善を見た1例
8.排便困難症(恥骨直腸筋奇異性収縮を中心にして)に対するバイオフィードバック療法の意義
9.4素子型新規超音波尿意センサの開発について
10.バイオフィードバックの訓練評価の検討
11.3軸加速度計を用いた振戦抑制BFシステムの構築と振戦評価パラメータについて
12.網膜光刺激による痴呆リハビリBFシステムの基礎研究
13.帰納的考察に基づくバイオフィードバック系のモデル
14.眼輪筋の筋弛緩(筋電図BFTやストローク)と視力の向上の一考察
15.バネ指のEMG-BFT,ストロークなどの筋弛緩について
16.パソコンのマウス作業と姿勢の関係について
17.皮膚温バイオフィードバックトレーニングによる健常女性の月経痛の緩和についての一研究
18.絶食期間中にストレス・プロファイルを施行した1症例 : 慢性疼痛(分類不能型頭痛)に対して
19.心療内科におけるPsychophysiological Stress Profileとバイオフィードバック療法
20.白衣高血圧に対する脳波バイオフィードバック療法の効果
21.バイオフィードバック療法中に薬物療法を併用した抑うつ症状を随伴する痙性斜頚の一例
22.fMRIによる自律神経活動測定の試み
23.情動に伴う生理反応性の個人差とアレキシサイミア人格特性
24.認知特性と心臓活動知覚との関連について
25.ハンドベル合奏における呼吸及び心拍の変化

そこで、 過去のバイオフィードバック学会学術総会 のページで最新の2014年から順に遡って、全ての発表のタイトルだけ(著者情報を手作業で削除した)とい上のようなリストを作った。 こういう作業であれば、頻繁にティッシュで鼻をかみながらでも出来る(^_^;)。 この作業を2014年から2002年まで戻ってくると、なんとそれより前、つまり2001年よりも昔については、全てPDFにされていた。 これである → 2001 2000 1999 1998 1997 1996 1995 1994 1993 1992 1991 1990 1989 1988 1987 1986 1985 1984 1983 1982 1981 1980 1979 1978 1977 1976 1975 1974 1973
そしてとりあえず、 2014〜2002年のリスト をプリントして眺めて、雰囲気を掴むことにした。

4〜5限の「企画立案演習」については、ちょうど各グループがテーマを確定させて提出する日であるが、なんせ台風が確実に近付いていて、遅くなればなる程、風雨が強くなるという状況なので、いつものように時間を決めて再集合でなく、「決まったグループは代表が1106に結果報告を提出したら、それで帰宅自由(^_^)」とした。 要するに、帰りにスーパーでコロッケを買いつつ、僕も早く帰りたいのである。(^_^;)

各グループからの提出を待つ間に、 日本バイオフィードバック学会 に続いて、10月に講師を担当する バイオフィードバック療法セミナー のページのリンクから、今回の発端となった甲南女子大の辻下先生が理事長だという 次世代リハビリテーション研究所 に行ってみると、これは凄い世界だった。 このページに埋め込んであるムービーでよく判るが、なんとインタラクティブ・マルチメディア・インスタレーションそのものではないか(^_^)。 事業内容の「国内外にある既製の機器導入促進と新規な機器の研究開発」のうち、後半に関われたら、いろいろ面白くなりそうである。

バイオフィードバック部門筋電バイオフィードバック よりも、 インタラクティブ・リハビリテーション研究部門IREX とか The Cube の方が面白いと思った。 床面投射だとスクリーンが不要であり、コンテンツもネットから変更できる、というのは、なかなかに優れものである。 ただし、相当に高いような気がする(^_^;)。

そして、 在宅リハビリ用ゲームの開発 のところで、何故かKinectでなく「距離画像センサとしてパナソニックのD-IMagerを採用する」というあたりで、なんとなく「見えた」気がした。 要するにここでは、新たなシステムを開発するのでなく、海外で既に売っている製品を国内の医療施設などに紹介する、という事なのだろう。 関西を拠点とするので、どうしてもパナソニックを使う必要がある(外注先のシステムハウスが松下系、あるいは元松下の社員とか(^_^;))、というような、ヘンな紐が付いているのでは、と勘ぐった。 実際に検索してみると、なんと上のように、この4月で販売終了、つまりKinectと競り合った敗者、終わコンだった。

そしてさらに、 次世代リハビリテーション研究所 のページに必ず置いてあるバナーをクリックすると(この手のバナーをクリックしたのは、おそらく初めてのこと)、 インタラクティブ・メトロノーム・ジャパン という、ちょっと怪しげなところ(^_^;)に行ったが、要するにこれも米国製の製品の輸入商社みたいなところで、ただし「研究者の声」として、辻下先生が『IMの基礎理論となっている時間情報処理(頭の中で60秒を正確にカウントすることや音楽のリズムに合わせて正確にタイミングを合わせるなど)は最近になってようやく文部科学省の科学研究費新学術研究領域「こころの時間学」が認められ、脳科学の最先端研究が始まっています。 この研究成果として、リズムにタイミングを合わせて身体を動かす際に、小脳と大脳が連携して活動することが確認されています。』と語っていた。 これはまさにビートの同期、なんとここに来て「時間学」である。 設立したての時間学会に入会して数年だが、時間学会まで関係してくるとは思わなかった。(^_^)

5月10日の日記の最後に書いていた、辻下先生から続報として届いた CES(頭蓋電気刺激療法)研究部門 というのは、何故か「事業内容」ページのメニューに無いのだが、このページの下の方に行くと、たくさんの事例PDFが置かれていた。 そして、とりあえず いま、なぜ電気療法なのか というのをプリントして持ち帰ることにしたが、これはもう、照岡さんも大好きな世界だろう(^_^;)。 さっそくメイルでお知らせすることにした。

2015年5月13日(水)

台風一過の晴天である。 風邪も抗生物質の2日目の後半戦となって、この天気のように順調に体調が回復基調にあるのをひしひしと実感できる。 研究室に出てみると、照岡さんからのメイルで、過去に 日本バイオフィードバック学会 の学術総会に出た事がある、とのこと。 「バイオフィードバック学会は、ある意味音情研と似てますね。反権威というか、どこ大の出?とかだれの弟子?とか尋ねられることもなく(社交学会ではなく)、皆の興味は、あなたは何をやってて(どんな技術をもってて)、どんな結果が出てるのか、それだけです」 というのは、まさに僕もうすうす感じていた雰囲気そのものである(^_^)。 こうなれば、もう発表参加に向けて邁進である。

そして1限の「音楽情報科学」では、 Processing の紹介とともに、各グループのテーマの検討を行った。 今年は何故か4回生が5人も受講していて、そのうち「グループ 4th」(花畑沙織+藤田彩菜+安森由紀子)には、前回、 見崎センサ として作った、上のようなものを貸し出した。 一方、さらに問題児(^_^;)と思える「グループ 4thその2」(宮本麻央+山崎源大)は、「いやらしく触るといやらしく声を出すインスタ」という企画案で、何か使えるモノを借りたい・・・と言ってきた。 これはもう、懸案で棚上げされていた、以下の「 うにうにタッチセンサ 」しかない。

そこで2限のゼミではこれを話題として、企画の「いやらしく触るといやらしく声を出すインスタ」はもうOK、システムにこのセンサを8個使いするとすれば「ディジタル出力16ポート」+「アナログ入力16ポート」(時分割)であり、これはまさにmbedそのもの、ということで、問題は「センサを面白く配置した造型部分」のアイデア、という事になった。 これはゼミメンバーの宿題としたが、とりあえずそこで出た「オタク系のお尻マウスパッドやおっぱいマウスパッド」を自分でも調べてみることにした。 また、ゼミメンバーには、7月上旬の 日本バイオフィードバック学会 に絡んで、筑波大学(内山先生に特別講義を開催できますが、と打診)に行く可能性があるので希望者は連れていく、という話もしたが、ちょっと3回生は無理らしい(^_^;)。

そして、ちょっとネットで「マウスパッド+尻」で検索してみると、出るわ出るわ、上のようなのがどんどん出て来た。 もう、おっぱいパッドなど調べる必要もない、こんなのとても買えないし、ここにセンサを仕込んで持ち歩くのも無理である(^_^;)。 そこであれこれ検索して、とりあえず以下の3点を、造型の材料として業者に発注してみた。

そしてここから 日本バイオフィードバック学会 のページに戻り、 こんな感じ に、一気に抄録を書いて、発表申し込みとして、送ってしまった。 まぁ、気合いであり、体調もだいぶ回復してきた、という証しである。 しかし、発表申し込みをするというのに、所属だけで住所とかの記載もなく、だいたいこの学会の会員でないと発表できないとかの記述もなく、かなーり大らかな学会、という印象で、今から行ってみるのが楽しみだ。(^_^;)

2015年5月14日(木)

この前期に、木・金の2日間がまったく予定ナシで空いているのは3ヶ所しかない、という貴重な2日間の1つ目であり、体調もほぼ回復、今日は制作日和である。 朝イチの7時に 葉から目 クンを見てみると、まだ微妙に芽は出ていないが、下に敷いた濡れティッシュのあちこちにカビが発生してきたので、ほとんど位置が移動しないように注意しつつ、容器を洗って濡れティッシュ全て交換した。 ネットではカナダの美大生のホラー風味の 短編アニメ が話題になっていたが、この程度ならSUACメディアの学生も出来る・・・と言ってみたい(^_^;)。

さて、昨日からの懸案のシステム設計から初めていこう。 きっかけは「音楽情報科学」の「グループ 4thその2」(宮本麻央+山崎源大)のテーマ「いやらしく触るといやらしく声を出すインスタ」に触発されて、上の「 うにうにタッチセンサ 」を使う、ということである。 ただし、これまで「触らない楽器」というコンセプトで、 Untouchable Instrument “Peller-Min” とか Untouchable Instruments and Performances とか Untouchable Performance and Technology などの発表を行ってきた中で、次には「触りまくる楽器」に行く、というのは自分の中の確信として、あったのだ。 これはNIME的に言えば tactile sensors ということになる。 そこで、YAHOO.COMの画像検索で「tactile sensors」とやってみると、以下のように、それぞれ実にソソラレル画像がばんばん出て来た。 やはり21世紀になって、センサの主流はWii RemoteやKinectやWebカメラのようなスマートな非接触画像センサでなく、生体センサやtatileに向かうのだ、と確信できた。 この画像から、何か新しいデザインが発想できる「宝庫」なのだが、勿体ないことに、学生にはピンと来ないのかなぁ。(^_^;)

そして、前年度にまだ予算が余っていた時に購入した うにうにタッチセンサ が手元に10個ある(1個3500円ほど)。 実験に1〜2個使うとして、両手でうにうにするには、薬指と小指は一緒に動いてしまうので共用として、計10個でなく計8個もあればいいだろう。 システムにこのセンサを8個使いするとすれば「ディジタル出力16ポート」+「アナログ入力16ポート」(時分割)であり、とりあえずはNucleoF401REでいける、という見立てだが、もう少しちゃんと確認しておこう。 もう忘却の彼方なので(^_^;)、まずは mbed日記(1) のいちぱん下にあった、以下のNucleoF401REの「Morpho Heatders」からである。

この多数の入出力ポートのうち、アナログ入力として使用できる端子を探してみたが、 ハードウェアマニュアル では、何も書かれていなかった。 そして mbed日記(2) の前半で、LittltBitsSynth用のmbedシステムを開発したところを再読して発見したのは、各ピンはいずれにしても時分割するので、NucleoF401REでは任意の入出力ピンを「A/D入力」に指定できる、という事だった。 mbed日記(2) の例では、最終的に以下のような回路図で、「アナログ電圧入力10チャンネル」・「アナログ電圧出力6チャンネル」・「トリガ電圧出力4チャンネル」・「MIDI入力」・「MIDI出力」を実現していた。

これを参考に考えると、NucleoF401REで今回の「触りまくるセンサ」(※ ←ネーミングの必要あり !) に うにうにタッチセンサ を8個使うとすると、入出力ポートを時分割多重化しない場合には、「アナログ電圧入力16チャンネル」・「アナログ電圧出力16チャンネル」・「MIDI入力」・「MIDI出力」が必要となる。 合計34ピンは確保できるか、ここで指折りして数えてみると、以下のように49ポートもあった。 これなら、まったく余裕である。 (^_^)

今日は余裕があるので、ここでさらに、今回の「触りまくるセンサ」(※ ←ネーミングの必要あり !)を Propeller で作る場合の検討も行っておくことにした。 今後、そういう局面が起きた時に検索して参照できるように、「Propellerで多チャンネルA/D」とも書いておこう。 Propellerは全32ポートのうちホストPCと外部EEPROMのために4ピンがreserveされていて、時分割多重化しない場合には最大28ピンが入出力に使えて、その内部CPUとして8個が並列動作する。 続・Propeller日記(3) から 続々・Propeller日記(3) までの話として試作した以下のSUAC boardでは、外部24チャンネルのA/D入力のために8チャンネルA/Dコンバータを複数個、外付けしていて、さらにそのバスは時分割多重化した8ビット・パラレルだった。

その一方で、 Raspberry Pi日記 を進める中で、Raspberry PiのGPIOからA/D入力を拡張するために、シリアル(I2C)接続タイプのA/Dコンバータを購入して、まだ実験していなかった事を思い出した(^_^;)。 そして部品箱を捜索すると、5個購入してまったく開けていなかった、 16Bit 4チャンネル A/Dコンバータ基板 というのを発見した。 ただしスイッチサイエンスにはこの製品の在庫が無くて、ちょっと安い 12Bit 4チャンネル A/Dコンバータ基板 があった。 さっそくこれを実験のために注文しよう、と見ていると、さらにスイッチサイエンスには 10bit 8チャンネル A/Dコンバータ基板 というのがあり、こちらはチャンネル数が倍の8チャンネルで、シリアルはI2CでなくSPIというもので、さらに安かった。 これは、と注文しかけてみると、さらに安い 10bit 8チャンネル A/DコンバータIC があり、つまりはDIPのICが最小スペースでハンダ付けにはbest、ということで、 メーカのサイト から データシート をゲットしつつ、このICを業者に発注した。 これで、納品されればPropellerの実験も始められる。


そしてここから一転してハンダ一式を出してきて、すごい久しぶりにNucleoF401REを出して、ここにPropeller用のUSB変換アダプタのPropClipを上のように繋いだ。 これは、まったく今日まで考えたことが無かったアイデアを思い付いたからで、「MaxとMIDIで繋ぐのでなくて、だいぶ使い慣れてきたMaxのserialオブジェクトを使って、しかし中身はMIDIプロトコルで通信する」というのを実現できるかどうか、と試したくなったのである。 MIDIのボーレートは32150という、ちょっとシリアル業界では異端児のスピードだが、これはMIDIの生まれた時代、まだマイコンのクロックは2MHz程度だったので、それを「2のn乗」で割ると出て来たものだったのだ。 しかしMaxでは、serialのヘルプでは38400までであるが、実はインスペクタではBluetoothと同じ115200までサポートしているので、内部的にMIDIメッセージをパック出来るのでは・・・と気付いたのだ。

そして、すごい久しぶりにmbedのサイトに繋いで、過去の実験から関係しそうなNucleoF401REプログラムを使って、「メインルーチンを100万回回るごとに変数をインクリメントして、その下位7ビット値をMIDIプログラムチェンジの1チャンネルとして送る」というプログラムを、ボーレート31250でなく38400でやってみるとちゃんと通信が成立して(上の上)、これを一気に115200にしても出来た(上の下)。 Maxには、「midiparse」という、「midiin」を受けて中身をMIDIプロトコルと解釈するオブジェクトがあり、この動作にはボーレートは関係しない、との確信が正しかったのだ(^_^)。 そこでもちろん、このserialの出力を「pgmin 1」とかに入れてもまったく音沙汰なかった。 これは今後、NucleoF401REとかPropellerとかでシステムを作る場合に、いちいちMIDIインターフェースのハードウェアを作ることなく、物理的にはUSBで接続すればいいので、かなり重要な発見である。 当たり前と言えば当たり前だが、これまでMaxを四半世紀ほど使ってきて、これに気付かなかったというのも面白い。


さて、ではこの うにうにタッチセンサ をいよいよNucleoF401REに繋いで実験してみようかな・・・とデータシートと実物を見てみると、なんと上のように、6ピンのコネクタはDIPスケールよりはるかに微細で、さらに基板に電極が出ているのは6極のうち3極だけ、GNDはコネクタ固定用のシールドだとしても、肝心のLED点灯制御用の2極はまったく出ていない、と判明した(^_^;)。 これではちょっと困るので、あらためてネットで検索して千石ネットである事を発見して、1セット500円以上というこの専用コネクタ(リード線付き)を大量発注手配した。 ちょうど担当者からの即答メイルがあり、来週あたりにはおいおい入手できるだろう(^_^)。

そして、普通であればここで万事休す、来週あたりにコネクタが入荷するまでは何も手出しできなくなるが、そこはそれ、色々な大学に依頼されてハンダ付け伝授に出かける身としては、もう少し何か出来るだろう・・・とやってみた。 約1時間ほどで、上のように、コネクタを壊して信号線を引き出してみたが、良い子は真似しては駄目である(^_^;)。

そして約1時間ほどで、上のように、NucleoF401REに繋いだ うにうにタッチセンサ の4領域の「うにうに具合」をシリアルからMaxに送る、というシステムが完成してしまった(^o^)。 同時に、メインルーチンでのボード上のLEDと同期した定期的MIDI送出、さらにMaxからの1秒間隔のMIDI情報のエコーバックも行っている。 Max側のパッチとNucleoF401REのプログラム「main.cpp」「MIDI_sub4.h」は これ である。

そしてここからネットでサンプルを探したりして約1時間ほどで、上のように、無事に「うにうにで声みたいなのを出す」という Maxパッチ を作り、さらに紹介映像を記録して、 YouTube に上げた。 3分ちょっとの映像である。 これを宮本麻央+山崎源大とゼミの皆んなに知らせて、本日は終了である。 なんとも、そこそこサクサクと進展した、充実の1日となった。(^_^)

2015年5月15日(金)

昨日のNucleoF401REのプログラム「main.cpp」にバグがあると気付いたのは昨夜のことだった。 ただし、Maxに届く情報に無駄なトラフィックがあるだけで、実際の情報には「前回と同じなのに届く」という重複はあるものの、センサの動作としては YouTube にあるように、まったく問題ない。 さらに以下のこのバグは、どうせ多センサ化した場合にはちゃんと解決されると判っているので、当面は放置することにした。(^_^;)

いつものように朝7時過ぎに研究室に出て、 葉から芽 クンの濡れティッシュに水やりして写真を撮っていると、なんか下のように、葉っぱの窪んだところから、チラッと何かが突起してきたようにも見える。 もしかすると、これが「芽の元」ではないか・・・と嬉しくなった。 これまでは毎朝、研究室に出て来てパソコンを立ち上げてダラダラと1日が始まっていたが、 葉から芽 クンを記録するようになってからというもの、ブラインドを上げて窓際の天井等が灯いたままの明るい研究室に入るのがとても新鮮だ。(^_^)

さて、マルマル2日間の余裕後半戦であるが、何をするか。 一つの対象としては、「2015年4月20日(月)」に書いていた、下の9軸センサ」[3次元加速度、3次元角加速度(ジャイロ)、3次元の地軸方向]である。 これは、 Raspberry Pi日記 のあたりでも実験する手前までで着手していなかったものだが、まぁ原理的にはそこそこ時間をかければ本質的な困難は無さそうなターゲットである。 「i2c通信」で検索すると、 これ とか これ とか これ とかが出て来て、なんとなく道筋が見えた。

しかしせっかくマル一日あるので、もっと難題にトライしたいのである。 ずっとひっかかっていた懸案といえば、「2015年4月30日(木)」に書いていた、「この期間に、あるトライを進めていたのだが、まだ結果が見えない(トラブルが解決していない)こともあり、この日記が進まなかった」という件は、実は、下のFelicaである。 これは前年度の研究費でスイッチサイエンスから購入した際に、 ハードウェアマニュアル も、 ソフトウェアマニュアル も、 Arduino用サンプル も入手していて、ハードウェアの接続不良でもなく、何か反応さえあればそこを手掛かりに何とか行ける筈・・・と思いつつも、何故か突破できないでいたのである。

先月の中旬あたりには、Propeller用のUSBアダプタPropClipを使って、以下のように解析・実験システムは完成していたのだ。 ところが、いざMaxでFelicaリーダ/ライタとの通信を実験してみたものの、ウンともスンとも、まったく反応が無くて、ちょっと途方に暮れて、しばし冷却期間と称して放置していたのだ。(^_^;)


そこで、何も予定がなく時間に余裕のある今日こそ、と ソフトウェアマニュアル をプリント・製本(60ページ以上)して、以下のように Arduino用サンプル を解凍したソースプログラムや関連ライブラリやreadme.txtなどを画面に並べて、あらためてMaxのserialから試験的に叩いて何か返ってこないか、という実験を繰り返した。 「LSB first」と書かれていれば8ビットのデータの順番を入れ替えたり、もしかして・・・と全ビット反転したデータを送ったり、と、おそらく後で見れば馬鹿馬鹿しいほどの試行錯誤シリーズである。


・・・そして隅々まで ソフトウェアマニュアルArduino用サンプル を眺めつつ実験すること約4時間半、遂に以下のように突破口が見えた。 判ってしまえば当たり前、という事ではあるが、リセットコマンドを手作業でエンコード(計算)して正しいプロトコル(計10バイト)で送ってみたところ、それまで沈黙していたFelicaリーダ/ライタから、ズラズラと15バイトの「何か」が、115200のスピードで返ってきた。 昨日の「うにうにセンサ」に続いて、もう僕のMaxパッチのserialオブジェクトはMIDIの31250でもmbed実験でのXBee最大速度の38400でもなく、ぱりぱりに115200である。(^_^)

ハードウェアのトラブルの可能性も消えて、こうなれば、あとはもう、見えている道を地道に潰して行く、ただしマニュアルやサンプルにもバグがあるので油断せず、という楽しい時間である。 簡単には終らないとしても、少しずつ進めていける確信が得られたこの瞬間、というのが、何よりも醍醐味なのだ(^_^)。 そしてここから2時間ほど、SONYの超不親切マニュアルとともに、あれこれ試行錯誤が続いた。 コマンドに対するデータも返ってくるものの、どうにも謎が多いシステムである。 以下のように、突然にドカッとデータが返ってくることもあるが、とりあえず「何もFelicaを乗せない状態でループ」→「何かFelicaを乗せたことを検出」というような事は、少しだけ確認できた。

これはどうも、以前から活用しているRFIDよりも厄介であるが、まぁ全国津々浦々で使われている「現金カード」そのものなので、簡単に解読できないようにしてある、というのも理解できる。 ぼちぼち進めるしかないが、Feica攻略の道のりは長そうだ。 とりあえず、今回の2日間は、昨日の「うにうにセンサ」開通と、今日の懸案Fericaの突破口、ということで、まずまず充実した。 来週月曜日の2回生「サウンドデザイン」は、いよいよMaxからリアルタイム・サウンド処理のMSPに入るが、その準備も出来ている。 これで明日からの週末は、一転して怠惰に過ごすことになるが、このメリハリを大切にしよう。

2015年5月18日(月)

休息の週末を経て、満タン充電で朝6時過ぎから研究室に出て来て、上のように 葉から芽 クンの順調な成長を確認した。 昨日、日曜日には1時間半ほどで 扇風機を修理 したりしたが、Felicaは進展ナシであった。 SONYのマニュアルを読んでいて、フト、「チャージされているSuicaの内容を読み出して、その内容を空っぽのFelicaに書き込めたら」という、ありえない妄想に囚われたが(^_^;)、当然、そんなことは出来ない。 ということは、いま手元にあるマニュアルでは、インスタに使うために、単純に番号だけ書き込んで、後でそれを読み出すところまで出来るかどうか、ちょっと不安になった。

いよいよ今週末は 音学シンポジウム2015 である。 一昨年は学生も参加して繰り出したのだが、去年はなんと音知学会の研究会に日程がぶつかって参加できなかった。 今年も他学会の予定が多いので、学会サーバから全74件の予稿PDFをダウンロードして自宅に持ち帰りザッと眺めて、上のように まず第1陣として57件は「不要」と分類した。 次に残り17件をさらに眺めて11件を「捨て」と分類した。 そして残った6件を研究室で印刷してみると、期待したほどのものが無くなり(合間に読めば十分)、これで今年もパスして、東京行きはナシとなった(^_^;)。

・・・そしてFericaの本格的な実験に着手して、ちょうど1限が終る頃には、上のように「Resetコマンド」・「ファームウェア取得」・「パラメータ初期化」の処理に加えて、リーダ/ライタ上にFericaタグが置かれているかをループで監視して、置かれた場合にはそのFerilcaの「捕捉したカードの IDm」・「捕捉したカードの PMm」(まだ詳細は不明(^_^;))をそれぞれ8バイトずつゲットして表示する、というところまで来たので、この段階でのMaxパッチを felica_03.maxpat として固定した。 これで、「RCS620S.cpp」のうち、主立ったものとしては「int RCS620S::initDevice(void)」と「int RCS620S::polling(uint16_t systemCode)」と「int RCS620S::rwCommand(...)」をMaxで実装したことになる。 あと細かいものとしては「int RCS620S::rfOff(void)」があるが、残った大きなものは「int RCS620S::cardCommand(...)」と「int RCS620S::push(...)」ぐらいであり、Felicaの読み書きはいよいよ佳境の筈だ。

YouTube

そしてここから調べてみると、まず「int RCS620S::push(...)」は不要だと判明、そして「int RCS620S::cardCommand(...)」のマニュアルを読んでいる時に、ふと気付いた。 既にFrlicaを検出して固有の「IDm」・「PMm」が得られているという事は、これ以上の書き込みは不要なのだった。 もともとFelica(RFID)は、インスタレーション作品で、造型物に小型のタグを仕込んでリーダにかざして「○○番」という識別情報が得られればいいのだが、既に獲得している「IDm」・「PMm」は、タグごとのシリアル情報のようなもので、重複していないのだ。 試しに購入した全てのFelicaタグの全種類、さらに手持ちのそれっぽいカードを試したのが上の動画である。 これで、タグごとの情報は固有に得られるので、インスタ作品のMaxパッチを作る時に、仕込んだタグの番号と照合してイベントを発生させればいいのだ。 これで春休みからの懸案だった「FeliCa」ネタについても、遂に完了。なかなか充実の月曜日となった(^o^)

2015年5月19日(火)

この日記の初日、4月12日のところに書いていた、ロシアの友人のDenis Perevalov氏から久しぶりにメイルが届いた。 Myo日記 の後半、3月27日あたりに書いていたように、彼は2013年に 以下の本 を出版していて、このXcode日記の一つの起爆剤は、この本のopenFrameworksをXcode環境で勉強する、というのが大きなモチベーションだった。

その彼からのメイルは大きく3つの内容があった。 一つ目は、来年2016年に僕がロシアツアーに行く、という計画についての話で、ぼちぼち進めつつ、まだこれからであるというもので、これは今後に期待することになる。 そして順序を変えて三つ目は、彼の最近の仕事の情報で、このところ「水」をテーマにしているとのこと。 2つのYouTube動画のリンクがあったが、当然、いずれもopenFrameworksを使ってライプにグラフィクスとサウンドを生成している。 こちらの動画 は実際にライブパフォーマンスをしている様子で、水面の様子からサウンドを生成しているという。 こちらの動画 は6月にパフォーマンスを計画していて、そのための実験の様子だという。

そして二つ目の話題がなんと、上のようにopenFrameworksの2冊目を出したよ、というものだった。 さすがである(^_^)。 このCM動画 を見たら、誰でもちょっと気になってくるだろう。 これを、またAmazonの書評に書いたり日本の学会などに案内してくれるのであれば、出版社から発送するように依頼したい、とのことだったので、ちょうど虫が知らせたように彼の本でopenFrameworksの勉強を始めた僕としては、二つ返事でOKした。 しかし、2冊目が届くまでには1冊目をザッと読破しておきたいので、ちょっと遠ざかっていたこのXcode日記も、再びopenFrameworksに没頭せよ、という天からのお告げかもしれない。

そしてネットの情報を整理していると、またまたKickStarterから、今度は上の 9ドルPC というのが出た、というのにハマッてしまい、思わずまたまた出資してしまった。 Raspberry Pi よりもさらに安いが、やはりLinuxである。 全部届くのは来年の6月だが、先行して1枚の基板が今年の12月に届く、というのにしたので、まぁ忘れた頃に届いたら、遊んでみる事にしよう。

注文していた部品が届いたり、立て替え購入した伝票の処理などでほぼ午前中が消えたが、火曜日は4-5限の「企画立案演習」も各グループ作業に突入しているので、冒頭と最後だけで後は研究室に戻ってこれる。 そこでこの日記を読み返してみると、5月11日にオンラインでDenisの本のサンプルプログラム集をダウンロードしたものの、これが上のようなソースファイルとヘッダファイルの3点セットで、そのままXcodeでコンパイル出来るようになっていない、というところで引っかかったままだった、と判明した。 以下のように、これまでのサンプルと同様に「容れ物」を作って、そこに3点セットの中身をコピペしてビルドしてみると、以前と同様に「気にしない」Warningが出つつも、buildはsucceededとなる。 ただし、何も起きないのだ(^_^;)。 「続き」はここから、という事になる。

・・・そしてここから昼休み中かけて、既に稼働しているtest01といちいち全てを見比べながら、第1章「01-Basics」のただ一つのサンプル「01-Pendulum」の3点セットだけでなく、「config.make」とか「Makefile」とか「openFrameworks-info.plist」とか「Project.xconfig」といった環境設定ファイルまで、全ていちいちTextEditorで開いて比較して検討した。 「myApp」の下にある「emptyExample」を上の階層に移動するとエラーが出るとか、Xcodeの「Product」メニューの「clean」コマンドでcleanupして再ビルドとか、あらゆる「おまじない」を試していると、なんと下のように、突然に、「出来て」しまった。 なんじゃこりゃ。(^_^;)

出来てしまえば、プログラムの中身については何も目新しいことはなく、ProcessingでもJavaでもやってきた事なので、ここに新しいことは何も無い。 肝心なのは、どうして出来なかったり、どうして出来てしまったのか、というところだが、そこがまだ不明なのだ。 そこで3限をかけて、さらに別のサンプルで試してみることにした。 とりあえずはtest01とtest02と横並びにフォルダごと複製してtest03として、ここに第2章「02-2D」の最初の「01-PulsatingBackground」のサンプルの中身を移植する、というリトライである。 そしてここでようやく見えてきたのが、「フォルダごと複製では駄目」という事である。 以下のように、フォルダごと複製したtest03をXcodeで開いても、「!!」のところにあるように、ターゲットがtest02のままになっていて、「!!!」のところにあるように、ビルドのボタンが灰色で押せないのだ。 いまだにopenFrameworksの中身でなく、ツールとしてのXcodeのところで引っかかっているわけである。

そこで、再び原点に帰って、openFrameworksを入れた時に新しく登場した「projectGenerator」を使って、test01とtest02と横並びの場所に、とりたててaddonが使われていないのを確認して以下のようにプロジェクトを作った。 この中身のソースファイル/ヘッダーファイルの3点セットに、サンプルコード集の中身をコピペして、名前の矛盾を修正してどうなるか、という作業であり、これは行き詰まった5月11日にもやった作業の再現であるが、だいぶ状況が冷静に見えてきた、という進展が生かされるかどうかが勝負である。

そして、projectGeneratorで新設したフォルダtest03の中身を改訂してみたが、やはりビルドは成功するものの何も起きなかった(;_;)。そして以下のように、気付いてみるとAppStoreに新しいupdateが2件あり、Yosemiteのコマンドラインツール等のアップデートと、Xcodeも6.3.1から6.3.2に新しくなっているとのことで、ここでコーヒータイムとして、両方をアップデートする事にした。 これで解決してくれたらMyoのdeep sleepの対応みたいでかっこいいのだが、そういう淡い期待は禁物である。

・・・そして30分ほどしてアップデートが完了したところで再度ビルドすると、当然ながら何も起きずのままだった。 そこで、test03フォルダを横並びの「myApps」フォルダの下に移動して、ここでtest03.xcodeprojを叩くと、ばらばらと多数のコンバイルエラーが出て来た。 これはまぁ当然で、置かれた場所にクリチカルなものらしい。 そしてこのtest03フォルダを元の場所に戻して再びビルドすると、なんと以下のように「出来て」しまった。 これが謎なのだが、少なくとも一つの経験則である。 「Product」メニューの「clean」コマンドよりも効くおまじないだろうか。

そして4限のスタートも間近なところで、再度、リプレイのように実験してみた。 まずprojectGeneratorでフォルダtest04を新設して、ここに第2章「02-2D」の次の「02-FlowerSimplest」のサンプルの中身を移植して、まずビルドすると何も起きない。 このtest04フォルダを横並びの「myApps」フォルダの下に移動して、test04.xcodeprojを叩くと、コンバイルエラーが出て成功しない。 そしてこのtest04フォルダを元の場所に戻して再びビルドすると、なんとまたまた、以下のように「出来て」しまった。 理由は不明だが、形式的に一度、エラーの起きる場所に移してエラーとしてから戻せばコンパイル出来る、という経験則が、なんとなく見えてきた。(^_^)

ここでいったん、「企画立案演習」の4階のDクラス部屋に行って、各グループがそれぞれの場所でプロジェクトを進める(再集合は17時)、と確認して研究室に戻ってきて、実験の再開である。 同じことを繰り返しても仕方ないので、今度はちょっと手順を変えてみよう。 まずprojectGeneratorでフォルダtest05を新設したが、ここではまだXcodeを開かない。 そしてtest05の下のsrcフォルダに第2章「02-2D」のその次の「03-FlowerControlPoints」のサンプルソース3点セットを複製コピーして、ファイル名を「testApp」から「ofApp」に変更して、中身の参照も「testApp」から「ofApp」にした。 その後にXcodeを起動してまずビルドすると、やはり何も起きない。 そこでこのtest05フォルダを横並びの「myApps」フォルダの下に移動して、test05.xcodeprojを叩いてコンバイルエラーを出してから再びtest05フォルダを元の場所に戻して再びビルドすると、予想通りに、以下のようにアプリケーションが出来た。

そして。次の実験ではちょっと驚くべき進展があった。 まず、projectGeneratorでフォルダtest06を新設して、まだXcodeを開かない。 そして、さきに完成しているtest05の下のsrcフォルダの中身をそのままtest06の下のsrcフォルダに上書きコピーした。 つまりこのプログラムはtest05と同じものだが、その後にXcodeを起動してまずビルドすると、やはり何も起きない。 そこでこのtest06フォルダを横並びの「myApps」フォルダの下に移動して、test06.xcodeprojを叩いてコンバイルエラーを出してから再びtest06フォルダを元の場所に戻して再びビルドすると、test05と同じアプリケーションが出来た。 そして、このtest06下のsrcフォルダにあるサンプルソース3点セットの中身を、第2章「02-2D」のその次の「04-FlowerWithPetals」のサンプルソース3点セットからコピペして、さらに内部の「testApp」は「ofApp」に変更しないままにした。 この状態で、初めてソースの中身がtest06に固有のものになった状態でXcodeを起動してビルドすると、以下のように一発でアプリケーションが動いた(^_^)。 つまり、正しくない場所に置いてダミーのビルドでエラーを出す、という「儀式」はソースプログラムに必須なのではなくて、projectGeneratorで作ったフォルダ内の環境のどこかを、正しくない場所でエラーとしてから元の場所でビルド成功させて修復?しておけば、その中身のソースを初めてコンパイルしても成功する、という仮説である。

この仮説の検証のための実験である。 まず、projectGeneratorでフォルダtest07を新設した。 この状態で、ダミーのウインドウを開くサンプルとなっているが、setup()もupdate()もdraw()も空っぽなので、何もしない。 ここでいったんXcodeを起動してビルドしてみたが、何も起きない。 そこで、このtest07を横並びの「myApps」フォルダの下に移動してコンパイルするとエラーが出る。 その後に再びtest07を元の場所に戻してビルドすると、何もないウインドウが出て、成功した。 ここで、このtest07下のsrcフォルダにあるサンプルソース3点セットの中身を、第2章「02-2D」のその次の「05-Colors」のサンプルソース3点セットからコピペしてビルドすると、やはり以下のように一発でアプリケーションが動いた。 環境のどこかを修正するために「移動してダミーのビルドでエラーを出して、戻して正しくビルド」するまで、実際のターゲットプログラム自体は存在しなくてもいいのである。

そこで今度は、projectGeneratorでフォルダtest08を新設して、そのままこれを横並びの「myApps」フォルダの下に移動してコンパイルしてエラーを出してから、再び元の場所に戻してビルドすると、何もないウインドウが出てた。 その後、このtest08下のsrcフォルダにあるサンプルソース3点セットの中身を、第2章「02-2D」の最後の「06-Spirals」のサンプルソース3点セットからコピペして対応に注意して修正してビルドすると、以下のようにちゃんと出来た。(^_^)

これで、気付いてみればDenisの本の第2章まで、実際になぞった事になる。 openFrameworksの2次元グラフィクスの書式は、ほとんどProcessingやJavaと同じなので、ここまでは終了と言えるだろう。 ようやく、なかなかに「Xcode日記」らしくなった。 だいぶHTMLが大きくなってきたので、ここらを区切りとして、「Xcode日記(1)」はここまでとして、次は Xcode日記(2) としていこう。

→ Xcode日記(2)

「日記」シリーズ の記録