2014年12月31日水曜日

齧って逃げた子、誰だ〜

だ〜れ〜だ〜。
最近あやち聴いてばっかり。

佐藤さんのFPGAのコミュニティーに顔を出しておきながら、めっきり論理設計してない私。論理設計屋さんからソフト屋さん転職して早4年。そろそろ何か書かないと勘を忘れそうなので、ちょっとリハビリしてみました。

まずは家のリポジトリ漁って、使いまわせそうなやつを集めてGitHubに共通モジュールとして突っ込んでみたのが一週間前。なんかもうISEインストールして、今更なSpartan 3 Starter Kit(しかも無印)で動作確認するだけでぐったりですよ。だって今時パラレルポートとかないですもん。しかもUSB変換器じゃ駄目っていうJTAGお馴染みの問題。さらにUbuntuが新しすぎてドライバがインストールできないとか、おーのー。ここに時間かけるくらいならZynq買ったほうが安上がりだった。玄人志向のPCIとか買ってる場合じゃない!

で、とりあえず最近おなじみ、かつお手軽そうな6502でも実装してみるか、と。とにかく昔のCPUなんで今時のCPUとは違う楽しみがあるかもな、とか思ったわけです。で、いきあたりばったりで一気に書き上げてみたんですが……そうとうなカオスコードになってしまったorz 今にも書き直したい気分だけど、面倒って気持ちの方が大きかった。

このくらいなら手書きでデコード論理組めるだろー、とか甘く見てたんだけど結構ぐちゃぐちゃ。これだったら素直にcase文でパラの線にバラして、論理圧縮は合成ツールに任せたほうがマシだった。
あとやっぱり面倒だったアドレッシングモード。本家のマニュアルにアドレスバスに出てくるパタンが説明されてるので、だいたい中でどう動かしてるのか想像つくんだけど。なんか計算途中のゴミアドレスをバスに流してて気持ち悪い。こんなんでメモリマップドI/Oとかホラー過ぎる。で、資料がある故に厳密に倣って作ってみたんだけど、いろいろとチグハグにならざるを得なかった。やっぱり当時は資源共有して最小限の論理数で作ることに命かけてるんで、そこはあえて同じこだわりで設計してみた。
モジュール間のインターフェースもエンコードするかバラして流すかってのは悩むんですけどね。FFに突っ込むにはエンコードしといた方が資源節約になるけど、CPUの場合せっかくデコードしたのになー、みたいな気持ちもあって。今回は中途半端にエンコードしたままにしたせいで、条件がいろいろ複雑になってしまった。
でもまぁ、マイクロコード以前のCISCがどんな感じで作られてるか体験する良い機会にはなった。

まぁ、来年はApple IIをグラフィック込みで動かすくらいはやるかもです。

あ、ちなみに合成するとXC3S200で論理21%、FF 3%くらいの使用率。もっとFF使っても良いですね。800ロジックセルだから、あてにならないゲート換算で1万ゲートくらい?綺麗に書き直せば500ロジックセルくらいまで減らせないかなぁ。

2014年12月13日土曜日

ARMの上で動くリンゴ印のOSで究極のLチカを楽しむ

ARMは仕事で初めてゲームを作ったコンシューマ機、ゲームボーイアドバンスのCPUという事で、とても思い入れのあるCPUです。ゆんゆんに「ちょっと手伝ってー」と言われて立ち寄ったのが今や泣く子も黙る神移植のM2さん。タイトルはデ・ジ・キャラット。楽曲は憧れの並木学さん。そしてサウンドプログラムを手がけていたのがX68k界でブイブイ言わせてた齊藤彰良さん。当時はお二方ともM2移籍前。僕もワクワクしながら仕事をしていました(最近は大きな仕事に慣れすぎてワクワク感が麻痺してしまってるかも……)。
そんな思い入れのあるARMですが、今やモバイルを中心とした組み込み世界の覇者。AndroidやiPhone向けの高性能プロセッサであると同時に、ホビー向けには個人でも100円程度で手に入るモデルが沢山あります。そこで、せっかくだから久々に何か遊べないかなー……という事で考えたのが……

120円ARMの上でリンゴ印のアイツを動かす!


そう、あれです、あれ。Apple II。
秋月で手に入るLPC1114の性能を見ていてピンと来ませんか?
  • ARM Cortex-M0
  • 50MHz(最大)
  • Flash: 32KB
  • RAM: 4KB
このギリギリ感!ちなみに以前からマイコンだけで古のマシンを再現する企画を続けており
  • CP/Mega88 ... CP/M Z-80 on ATMEGA88 (20MHz, Flash: 8KB, RAM: 1KB) + 外付けSRAM 64K
  • MegaZ-80K ... MZ-80K on ATMEGA644 (20MHz, Flash: 64KB, RAM: 4KB) + ATMEGA328 (20MHz, Flash: 32KB, RAM: 2KB) + TINY2313(20MHz, Flash: 2K, RAM: 128B)
に続く第三弾です。ソースはgithubに置いてありますが全てアセンブリで書かれています。毎回何かしら無駄な挑戦をしているわけですが、今回の見どころは
  1. I/O 4KB、ROM 12KB、RAM 48KBをFlash 32KB、RAM 4KBだけでごまかす
  2. ビデオ出力とキーボード入力をUARTのTX/RXに変換する
  3. 空いてるI/OにGPIOを割り当てて、Apple BASICからLチカ
の3点。

1は単純なローテクで実現。ROMはFlash側に埋め込み、VRAMについては一切記憶しない事でメモリ節約(次節でも説明)。ゼロページやスタック、Apple BASICが本気で使う空間にはRAMをまじめに割り当て、それ以外の領域に関しては全部同じ1-Byteを共有するようにしてあります。主記憶のないキャッシュみたいなもんで、書いて読んで比較……という単純なメモリチェックに対しては正しく動くけど、本当にワークとして触りだしたら動きません。まぁ、初期化コードを騙して、小さいプログラムを動かすには十分。

2は気合。UART入力をキーボードに変えるのは比較的簡単ですが、出力をUARTに変換するのはちょっと大変です。VRAMへの書き込みを見はりつつ、前に書いたアドレスからの差分でカーソル移動を行います。書き込み内容はTXに送るだけでVRAMの実体は実装しません。読まれたら固定値0xFFを返すだけ。スクロール時の画面書き換えは書き込みパタンから自動判別します。読んで1段上のラインに書き込んで……という処理を繰り返すのでアドレスパタンからも判別できるし、本来使われることのない"読み出し値0xFF由来の値"の書き込みを検知する事でも判断できます。スクロール処理中は再描画の書き込みを無視し、スクロール終了を検出したらしれっと改行を送って通常モードに戻ります。

3は特に難しいことはなく。拡張スロット用のI/O空間が開いているので、そこへのアクセスをGPIOにつなげてみました。Apple BASICからはPEEK/POKEで気軽に全メモリ空間へアクセスできるので、これだけでBASICからGPIO制御が可能になります。

という事で簡単なデモ。YouTubeの編集機能使って音とか説明つけてみた。携帯片手に左手でぽちぽち入力した映像なんですが、フラフラしてた画面も手ぶれ補正であっさり安定。



という事で、次はこのプロジェクトを始めた真の目的、佐藤一憲さんにもらったWIZnetを繋げて遊ぶ、というステップに進もうかと。宿題間に合いそうで良かった、良かった。

2014年12月5日金曜日

11月の読書

前回の読書から別のテーマでブログ書いてなかった……良くないですね。それはともかくとして、11月の読書は15冊。今月は読みたいと思った内容の本にうまく巡り会えてないんだけど、タイトルと内容が一致してなくて、予想とは違う観点で面白かった本もチラホラ。

エンターテイメント

「夢をかなえるゾウ」は確かホリエモンが「こんな本が書けちゃう水野さんが憎い」みたいに言ってたので図書館キューに入れた本。半年くらい待ってようやく順番が来た人気の本。いわゆる7つの習慣に集約されるような堅苦しい成長の秘訣を、ゆるーいガネーシャさんを通してじわじわっと脳に染み込ませてくれる。こんな本が書けるんだな、って驚いた。真面目ぶった頭の悪いビジネス書とは正反対のおふざけ優良図書。内容的にはガネーシャさんも言ってる通り、どこでも言われてる話です。

「アンドロイドは〜」の方はタイトルは有名だけど、ブレードランナーの原作だったり、Android Nexusシリーズの元ネタだったりするのは最近知った。そしてブレードランナーって事はスナッチャーだったりサイレントメビウスだったりが持つ世界観、憧れの退廃的近未来都市です。チューリングテストに合格するアンドロイドがボチボチ登場するようになった時代の、アンドロイドとそれを狩る賞金稼ぎの話。前半の世界観の説明は退屈だけど、最初のNexus 6との対峙あたりから止まらなくなってくる。自分がアンドロイドだと知らないアンドロイドとか、ぐっと来る。



視野を広げる

「歴史をつかむ技本」は今月読んだタイトルと内容がずれてる本の1つ。大人向け教科書の流れに乗ろうとして編集が煽ったと想像してるんだけど、ちょっと残念。実際の内容は歴史研究を仕事としている人たちは、どうやって歴史を紐解いているのか。教科書に淡々と書かれた史実は、何を起源にどうやって事実と認められてきたのか、という歴史研究の裏舞台に関する本。その題材として、魏志倭人伝を拠り所にした古代、正史を持つ平安時代、私的な記録も多い戦国時代などを扱っている感じ。一応、歴史の流れというか、普遍的な何かを知りたい、という想定読者の問には答えようとはしているんだけど、オマケっぽさはある。歴史研究について知るにはとても良い本だと思いました。年寄り向けじゃななくて、未来の学者に向けた本として、魅力的なタイトルで売りだして欲しい。

「フラクラル幾何学」はマンデルブロ自らが書いた本が出ているって事で、ちょろっと流し読み。難しいし。物体と観察者の距離によって実効的な次元が違ってくるでしょ?って説明は直感的だった。はじめからコンピュータ使ってCGやシミュレーションと絡めて研究が進んで来たってのも新鮮に思えた。学問って太古の昔からあって、創始者に対するリアルなイメージを持ちにくいんだけど、ここ数十年で誕生した分野の話を聞くとやっぱり不思議な気持ちになる。

「社会契約論」は先月の漫画で読破シリーズの補完としてピックアップ。なのだ調で書かれているけど、女性らしい靭やかでユーモアのある文体になっていて、硬い内容もわりと読みやすく感じる。ルソーが知りたくて読んでみたけど、ルソーの部分は少ないし難しかった。漠然と論説を追うことはできても意図まではなかなか。けど、有名な割には他の思想家に比べて無鉄砲で粗野な印象。一方でホッブズの物体論はちょっと面白い。自然科学の論法をいち早く政治の世界に持ち込んだってことらしいけど。個人を捉える際、精神は物体と同じように個別の反作用の積み重ねによるもので、個々の反応は恐怖などの根源的な感情に基づく反射と、経験・記憶との比較による判断とに分けられる、という解釈。言葉は少し違っても最新の認知心理学の理解するところと一致する。ちょっと哲学に興味が出てきた。

ってところで続けて読んでみたのが「あなたを変える七日間の哲学教室」。タイトルを間違ってしまったもう一冊の本。邦題が中途半端な自己啓発書みたいに変更されちゃってるせいで、正しい読者にリーチできていない印象。原題は「哲学者のように考える - 7日間のガイド」。第一級の現役哲学者による著書。読者と哲学者の対話の形で、哲学が対象とする問題をわかりやすく議論。〇〇学がどうのとか、誰それの考えといった事を体系的に説明する事はなく、哲学全体を説明する上で必要ならば軽く触れる程度。哲学の概念を知る上での取っ掛かりとなる本で、途中で理解につまずく事もないように書かれている。色々な分野で見かける囚人のジレンマ、哲学の視点で見ると、社会契約の話に繋がるってのは読んでいて「おぉ、そうか」と。他の章では神経科学、言語学などとの繋がりも見えてきて学問は色々なところで繋がっているんだな、感心しました。アリストテレス「厳密性を求めるなら、そのことがらにふさわしい程度の厳密性を求めるのがよい。教養のある人は、どのことがらにどの程度の厳密性を求めていいかを知っている」という言葉はこの本の中で気に入った言葉の1つ。普段、計算機を相手にしていると、つい全てが完全でなければいけないという勘違いをしがちなので。自分への戒めとして。さらには過度な品質管理をお家芸として衰退した日本の製造業に対する戒めとして。イヌイットの自立できなくなった両親を流氷と共に流す慣習の話は、本編とは直接関係ないけど、今の少子高齢化社会で行き詰まった日本に生きる者としては刺さる内容。あとがきの自殺についての話もそうだけど、日本はもう少し西洋哲学的な考え方を積極的に取り入れた方が良いのかもしれない。儒教的な道徳観、教育制度との対比として。もともと純粋に哲学的な話に興味があって読み始めたんだけど、最近受けてるグローバル・コミュニケーションの研修での問題と重ねて考える事が多かった。

どうする日本系

危機感持ちつつも自分は安全な場所に逃げこんじゃってて卑怯なんですが。自分なりの考えは持ちたいな、とは思っているのです。ってことで、どんな事を考えてる人がいるのかな、この10年日本は何を失敗したんだろうってテーマで選んでます。この手の本は図書館キューが長いので、思い出した頃になってポツポツと手元に届きます。後者について言えば、自分が「これはもう駄目だ、どうにもならない」って見限って来た物が、世間ではどう判断されてるか。それを確認したいというのも正直なところあります。

で、まずは「日本の論点」から覚えているテーマについて徒然に。
最初の論点はバブル後の日本経済について。ケインズのマクロ経済が一切通用しないグローバル資本主義について軽く触れている。じゃぁ、いったい何が起きてるの?って点については、藤沢数希の「日本人がグローバル資本主義を生き抜くための経済学入門」が詳しかったな、と今になって思えました。同著者の他書は今のところ微妙なんですが、この本だけは良い気がしています。
地方分権問題については橋下は俺が育てた、的な話なんですが。大阪都構想みたいなのは背景を全然知らなかったので中立的に読みました。結局はゼネコン絡みなのかもしれませんが。
憲法については知識の修正が必要になりました。「占領軍が間に合わせで作った英文を無理やり翻訳したから、文章がめちゃくちゃ」みたいな批判をしてるので、あれ?と。たぶん池上さんの本で読んだ気がするんだけど、実は日本国憲法って民間の憲法研究会が提出した案を元にしてるんだよ、って話があって。そっちに理解が振れてたので。調べてみると「参考にした可能性もある」くらいの論調が安全みたいですね。ただ、それは別としても、実質憲法改正が不可能になってる現状は深刻だな、と思いました。
震災を起点とした原発問題。1,000年に一度の大震災を想定してインフラ整備とか馬鹿げている、というのは全くその通りだと思う。公共事業で道路の補強やっても投資になってないし、下手したら投機ですらない。稀な有事にはある程度の被害を受け入れる覚悟が必要かな、と思う。僕ら人類、期待値を計算したら飛行機事故で死ぬ確率よりも巨大隕石落下で人類滅亡に巻き込まれる可能性の方がずっと高いという話もある。わかりやすい災害にコスト割き過ぎなんですね。ただ一方で、そういう事実はあるにしても原発にはまだまだ対費用効果の高い安全対策がたくさんあるはずで。そういう事を考えて実行できれば良いのですが。世間の風当たりは良くないですね。大衆は理屈ではなく感情で動くので。まだまだ人類は野蛮です。
新しいお家芸については、みんなわかっちゃいるけどノーアイデア。バイオ、ナノテク、ロボットみたいなシンギュラリティに繋がるような研究は戦略的に研究してきたはずなんだけど。蓋をあければSTAP細胞事件だったり、外資系企業に買収されたり。宇宙開発とかもっと盛り上がらないかなぁ。

「半導体衰退〜」は元半導体エンジニア、現在コンサルというバックグラウンドを持つ著者による執筆で、技術的にもかなり細かい事が書いてあった。基本的な論調は「日本は垂直統合が強みになったアナログ時代のノウハウは蓄積していたが、主戦場がデジタルに切り替わりその恩恵として分業が可能となって以降、開発体制の切り替えが遅れて競争についていけなくなった」というもの。垂直統合=アナログ、分業=デジタルって切り口は自分にはなかったですね。デジタルでも垂直統合できればそっちのほうが有利だとは思うんですが。そのためには半導体プロセスでも世界一を競えてないと駄目。土台が転んだから上に乗ってる全てがぽしゃったわけで、どちらかと言えば不採算部門をサクッと切れない日本の雇用体制の問題だと思うのです。社内政治的にもそれこそ増税したら解散必至な内閣と一緒で、刺される前に実行、運良く実行できてもいずれ消される、みたいな。
あと現場の雰囲気で言ったら、末端の現場が力を持ちすぎていた事が、寿命を縮めたかな。研究より開発、開発より品証。過去の成功体験に強く縛られた近視眼的な経営判断を続けた結果、技術への正しい投資ができなくなってしまった。現在抱え込んだ技術者を大切にするあまりに、時代の変化に合わせて体制を変えることに二の足を踏んでしまった事が大きい。いずれにしても雇用制度に本質的な問題がありますね。

2014年11月1日土曜日

10月の読書

10月に読んだ本は17冊。ちょっと減った。読書の代わりに電車でニュースとかメールチェックするのを止めてたんだけど、Inboxアプリ使うようになってから通勤時間潰しちゃう事が増えた。慣れれば20冊くらいに戻って安定に入るかな。ぐっと来る本が少なかったのも敗因か。

小説

その時僕がどんな話をしていたのか覚えていないけど、同僚から「まさに虐殺器官の世界観ですね」と言われてその場で僕の図書館予約キューに入った本。ナノテク、認知心理学、チョムスキー、ミーム、遺伝子。最近興味を持って読んでいる本とテーマがモロ被り。出てくるパイソンのスケッチもどういうわけか知った物ばかり。世の中ほかにネタはないのかと言いたくなるほどの同調っぷりで、同僚の直感は正しかった。作者と世代も近いし、僕もスナッチャー大好きだったからなぁ。読み始めの印象では、文章は冗長でリズムもイマイチ、多少の読みづらさを感じさせる文体なのだけど、独特の艶めかしい死体描写と近未来の世界観にすぐに引きこまれた。文体に関しては後半になると安定してくる。構成的には伏線が少ないわりには飽きずに読めたとは思う。贅沢を言えば、死者の国をもう少しうまく書き分けられたらもっと立体的な作品になったかな、とも思うけど。ウェットな描写を死者の国側に押し込めるとか。終盤はやや疑問の残る展開もあり、最後の大きなオチに向かって強引に進んでいる感じではあったので、やっぱり伏線がもう少しあっても良かったかな。
「俺が生きる意味」のほうはガガガっぽいな、と。ストーリーらしいストーリーもないまま、いきなり化物に惨殺されまくる。アクションシーンの描写力はなかなかだけど、構成力はちょっと。読んでいて話のテンポがブレまくるのと、伏線でもないのに脇道にそれるのとで、読みながら振り回されがち。ただ、構成しっかりしちゃうと、今度はストーリーの面で物足りなくなりそうだから、良くも悪くも微妙なバランスで成り立ってるのかも。これ以上ない意外な結末で2巻に続く……どうしたものか。


まんがで読破シリーズ

先月読んだ本の中で社会契約ってなんだっけ?と思って探したら謎のまんがシリーズを見つけたので気になっていくつか予約してみた。まんがで読破……とは言うものの、読破したところで実際には各著書の序盤の主題に触れただけ。興味を持った人はぜひ原著を〜的なもの。まぁ、でも僕の場合はその程度で良いかも。
選んだ本の性格もあるけど、いまのところ必要以上に感情に訴えかける系になってる気がするので、一度原著読んでみて、どのくらい歪んで描かれてるか確認しないと……。

業界モノ

CD売れないって騒いでるけど本当に音楽業界大変なの?と思って読んでみた業界本2冊。コンテンツ市場は10兆円規模、うち音楽は5000億弱。コンテンツとしては書籍と動画でそれぞれ4割超、音楽とゲームでそれぞれ1割弱、という感じ。思った以上に書籍が強いのと、音楽が弱いのとに驚いた。コンテンツとしての音楽はまだまだ成長の余地ありなんだな、と。世界市場の約半分が日本って事を考えると、海外ではもっともっと弱い。そもそも騒いでるのはレコード会社。レコード会社を中心としたプロデュース形態から、イベント会社による企画運営を中心とし、コンテンツ配信はあくまでも広告、というモデルに移行しようとしているだけですね。レコードが出始めた頃とは正反対の力学です。
再販制度とCD+DVD抱き合わせ問題、Amazonによる既得権益への攻撃などの話題も読んでいて面白かった。
「メディアの苦悩 - 28人の証言」は新旧メディア関係者の苦悩を語ってもらい、これからのメディアについて考える、という内容。なんだけど、第一章に関しては印象操作としか思えない酷いインタビュー記事。編集後の記事で会話のキャッチボールすらできてないってのは意図をもって編集したとしか思えない。
二章以降は僕みたいに社会の仕組みを知る前にインターネットにどっぷりはまった人には考える事の多い内容。視野が広がった。

学問系

今回、この分野の読書はイマイチだった。最初の2冊はサンタフェ系のお話。科学というよりはエッセイに聞こえるし、今の僕にはトンデモと区別がつかないのが実情。もう少し入門的な内容を地に足がついた形で説明してくれる本はないものか。
「利己的な遺伝子」は完全に読まなくて良かった本なんだけど、記録のために敢えてピックアップ。「柔らかな遺伝子」とセットで薦められる例も見るんだけど、個人的な感想としては「柔らかな遺伝子」を読めば十分。フォーカスは違うんだけど、自然淘汰については現代ではあまりにも知られすぎていて、改めて読む意義は小さい。前書きと後書きだけで一冊の本になる分量には圧倒。この辺はさすが古典。
そう言えば、この辺の本を読んでいてパレートの法則とか、たんなる経験則じゃなくて、自己組織化と関連してたりするのかな、とか思ったんだけど、調べてみたらやはりそういう考え方もあるらしい。そう言えば大学でサイバーカスケードの研究してる人の話を聞いたんだけど、カスケード規模はべき乗分布って話を聞いて、こっちの世界でやったほうが良いんじゃないの、と思った。
ファインマンの本は量子電磁力学の考え方について説明した本。全然直感的じゃないものを(慣れれば)直感的に理解できるように説明してて凄い。高校物理の最後、光子と電子で混乱した頃から大学の電磁気が出てくる前の間に読むのが良いのかな。この辺り、わかってたつもりでも、ちょっと考えだすと理解を超えてる現象が多いことに気づき悲しくなった。
前から読んでた生物本の第4巻は進化論。次の5巻でシリーズ終了。生物に関して非常にざっくりとした俯瞰が得られつつある。他の専門分野の人たちが何を問題にして、どういった道具を使って謎を究明しようとしているのか、知れば知るほど面白いです。

2014年10月22日水曜日

Web Music Platform 魔改造

YAMAHAさんのWeb Music Platform
bower使ってmodule化されつつあり、自分のモジュールを追加した魔改造もしやすくなってきてます。とりあえず自分の方でもtsstmalibなんかをPolymer化、bowerで突っ込めるようにして、2つばかりVisualizerとして追加、さらにHerokuにdeployできるようにした魔改造版を作ってみました。


実際にdeployしたデモはこちら

そう言えばHeroku、ここ2ヶ月くらいで変な最適化が入ったのか、謎な挙動をしますよね。例えばpostinstallのスクリプト中にgit cloneしたリポジトリから特定のrevisionをcheckoutしようとすると、そこはrepositoryじゃないよ、的な事を言われてcheckoutできない。Google Codeからだとbranch作ってbranch直指定でcloneする以外に解決方法見つからなかった。GitHubの場合はtagを切ってないモジュールをbowerでinstallしようとしても、同じように怒られる。さらにbowerが途中でエラーするとbuild directoryから最終的なdeploy先にbower_componentsの中身がコピーされない? こっち系はあまり詳しくないので、詳しい人がいたら対処法というか裏で何が起きてるのか教えてもらえると嬉しいです。というか、今日ささださんとお昼食べるから聞いてみれば良いのか。

それはそうとscript tag injectionとかXHR、そのままだと並列読み込みとか扱いが面倒なので、Promise化してPromise.allで一気に待つようにしてみたら結構お手軽に高速化できた。もうPromiseなしでは生きていけない。

2014年10月3日金曜日

9月の読書

ニコファーレ関連でペースが落ちた9月。最後にちょっと追い上げたけど読めたのは14冊でした。半分忙しかった事を考えると、こんなもんか。冊数は少なかったけど実りは多かった。

小説

今回の読書ブームの中でも最高の1冊になった「世界の終わりとハードボイルド・ワンダーランド」から。読み始めてすぐに感じた印象は「安部公房」版「灰羽連盟」。でも、正しくは灰羽連盟が「安倍吉俊」版「世界の終り」。ついでに言えば麻枝准も影響を受けたと言っているのでAngel Beatsが「麻枝准」版「世界の終り」らしい。村上春樹の本は短編も含めて3冊目。今までは感じなかったけど、この本からは安部公房の香りを随所から感じた。主人公の理屈っぽい思考・意識の在り方、登場人物の醸す不思議な存在感、そして不条理な世界と理系的ストーリー展開。自分が高校時代から惚れ込んだ安倍文学の世界そのものだった。加えて村上春樹特有の音楽のエッセンス。前回の読書ブームは安部公房のカンガルー・ノートで一段落しちゃった感じなんだけど、今回のブーム中にこの本に巡り会えたのは幸福。また本を読む楽しみが出来た。

もう1冊はラノベで有名すぎないあたりから適当に選んだ本。引っ込み思案で変な趣味をもつ娘は嫌いじゃない。最後の展開は独特のノリを活かしつつも魔法少女モノの王道をオマージュって感じで。新人作家の初々しさが作品の雰囲気にマッチしてるし、好きな物を書いてるって愛が感じられた。ロープライス¥1って表示されてる(投稿日10/2現在)と申し訳ない気分になるけど。

安部公房関連

そして安部公房に戻る、と。もう振り返る作家なんだなぁ……。という事で、1つ目は「安部公房とわたし」。安部公房の愛人だった女優の山口果林さんが大学入試での安部公房との出会いから別れの日までを記した本。実際の日記をかき集める形で編集したのか、日々の細々とした出来事についての短いメモ書きを集めたような構成になっている。安部氏のプライベートについて知る機会はなかったのでなかなか貴重。作品の取材や演劇の話も出てくるので、安部氏とともに歩んできた人なのだな、と妙に感心したりもする。ただ、浮気中の最初の妻とのやり取りなんかは生々しくて重い。

もう1冊はチョムスキー。インタビュー中心なので、これで何かを理解できると思わないほうが良いかも。チョムスキーと生成文法について知ったのは安部公房「死に急ぐ鯨たち」を読んだ時だったと思うけど、あちらもインタビュー中心でこの本と雰囲気が似てた気がする。いつかチョムスキーについて知ろうと思って20年経ってようやく読んだ本がこれでした。文法の構造(最近の翻訳だと統辞構造論?)も読まないとですね。

短編

ロシアの音楽家はみんな大好きプーシキン。って事でチャイコフスキーのオペラで有名なスペードの女王。スイスに出張に行った際、たまたまホテルがオペラ座の近くで、本当にたまたま出張中にこの演目をやってたんですよ。これも高校の頃からの因縁の1つ。ついでに言えば、あとはオネーギンと未完7番が見れればチャイコフスキーは満足。で、原作が青空文庫経由でKindle化されてたので。オペラのストーリーはかなり原作に忠実ですね。大団円は流石にオペラ向けに大幅に書き換えられてるようですが。原作は昔ばなしみたいに各登場人物の後日談を淡々と語るような地味な終わり方でびっくりする。これが当時のロシアの作風なのかな。

最近のぷちお気に入り夢野久作さんで瓶詰地獄。妖精ではない。最後の瓶は……怖い。この心に刺さってくる感じは夢野作品の特徴ですね。

技術書ほか

GLES 2.0入門書。GLはいわゆる黄金本で勉強しただけだったので、もう少し現場視点で書かれた本を復讐がてら読んでおこうかな、と。ついでだからmobileフォーカスなら尚良し。応用編は今現在読んでいるところ。この辺りを読みつつ自分のAndroid用のJavaライブラリにAPIを足してジェネラティブ・アートのサンプルコード(for Processing)を動かしてみる、とかチマチマやってます。本の内容的にはAndroidとiOSそれぞれ固有の下準備についての解説が少し。その後はAttributeとUniformを使ったシェーダーの基礎とテクスチャの説明、あと行列を使った座標変換についても軽く触れてる。情報少なめではあるけど最近のモバイル端末(Nexus5/7/10、iPod Touch 4th/iPad 3rd)でのglGetIntegervが返す値の比較なども。対象言語はC(++)。AndroidはNDK前提。Javaでも基本は一緒なのでimport android.opengl.GLES20で書きたい人も読み替えながらなんとかなるかな?Bufferの扱いが特殊なのを除けば簡単になってる部分のほうが多かった。エラーメッセージの文字列の扱いとか。BufferもJavaに詳しい人にとっては常套手段なのかな?しばらくエラー・メッセージに悩んだのでメモ書きしておくと、

@Override public FloatBuffer createFloatBuffer(int length) {
return ByteBuffer.allocateDirect(length * 4).order( ByteOrder.nativeOrder()).asFloatBuffer();
}
@Override public FloatBuffer createFloatBufferFrom(float[] values) {

FloatBuffer buffer = createFloatBuffer(values.length);
buffer.put(values).position(0);
return buffer;
}
こんな感じで確保、格納してやればOK。

あとは技術書じゃないけどワインの本。チームにソムリエ試験受けてる人がいて、詳しい人がいるなら好都合!と興味を持って読んでみたんだけど、やっぱり難しい。チームでお祝いとかも多くて、ワイン飲む機会も増えてきてるんで、詳しくなればもっと楽しいかなって。褒めてるのか貶してるのか素人にはわからないような暗号めいた形容詞が面白いです。まぁ、気長に覚えます。

2014年9月14日日曜日

ニコファーレ完結編


イベント終了。突貫工事だったけど、なんとかそれなりに仕上げることができたかなぁ、と。イベント中はプロの映像制作屋さん・オペレータの2名と一緒にLED照明卓に張り付いていたので、プロの作業を仕込みの段階から長時間見ることができたのが何よりの収穫。

作った素材的にはこの辺にあるモノ+αの15種類くらい。3chのミキサーをMIDIコントローラから制御できるようにしたホストアプリをtmalib上に構築してました。今回のために書いたコードは175 commitsにわたり、コード量も倍増。
% git log -p --full-diff --since Aug | wc -l
23742
だそうです。

Tell Your Worldのステージ中に使った素材の一部

ライブラリ実験用に作った3D版Waypointsがパラメータを変えるだけで色々と使いまわせたのは助かったです。特に直前に追加で作ることになったエンドロールとかは数時間しか作業できなかったので……。フォントからテクスチャ作るライブラリ工事だけで時間切れになっちゃった感じ。

本番のエンドロールはMichael Jackson版Behind the Mask

で、色々と見つかった課題。

  • 自分の作ったライブラリで一番まずかった点はミキサーのフェーダ。うかつにも線形に作ってしまったけど、どう考えても対数で作るべきだった。コードばかり書いてて操作をあまりやってなかったので気付かなかった。
  • 機能として足りなかったのはプレビューと速度調整。プロの現場だと、次に使う絵をプレビューで先出ししてて、ステージ上の音楽に合うように映像のループ位置や速度を調整して、ここからって場所が来たら瞬時に切り替えて使う。DJアプリと一緒ですね。今のフレームワークでもタイムラインはきちんと管理してるので、UIさえつければすぐにでも動く。けど、性能的にプレビューまで出すのはちょっとキツイ。本番ではFull HDで生成・出力をしていたけど、エフェクトを重ねてると現状でも30fpsに落ちることがあった。そもそもコンソールと外部出力、複数のウィンドウに対して、同じタイミングで絵を送るのがちょっと難しそう。Web Music Hackathonの打ち上げでも話題に出てたけど、それこそOS XのSyphonみたいな仕組みが欲しくなってくる。
  • シェーダーのコンパイルに数百msec必要で、その間requestAnimationFrameが届かなくなるため、エフェクトのダイナミックなロードが難しい。フレーム落ちを避けようとすると、基本的に曲の頭で色々なリソースを先読みする事になってしまい、メモリ消費が激しくなりがち。ちなみにこのアプリは起動時に500MB以上食ってたし、デバッグ時には作業しているうちに2GB付近まで増えてタブ落ちする事も。
でもまぁ、ウェブアプリベースで本格的な照明制御を行う実験としてはまずまずかな。思いついた事を全てやるには圧倒的に時間が足りなかったけど、まずまずは満足。


Web MIDI API update at Chrome 39

これが最初で最後になるとは思うのですが、ECMAScript 6との親和性を高く保つため、既存のJavaScriptコードに修正が必要になる変更がChrome 39で導入されます。現在はCanaryとDevのみの変更ですが、年内には安定版も含めて新APIへ移行します。

Chrome 37, 38, 39で動作するコードを考えた場合に気をつける点としては、ES6のfor...of構文が導入されたのがChrome 38という点に注意する必要があります。この構文を含むコードは、例えこの構文が実行されないパスにある場合でも文法エラーになってしまいます。そのため、Chrome 37以降で動作させるためには、next()とdoneを使ってforループを回す必要があります。

具体的な例としてYAMAHAさんがGitHubに公開しているコードに対してパッチを作ってみたので参考にしてみて下さい。



To be more friendly with ECMAScript 6, we will introduce incompatible change to Web MIDI API that requires applications' JavaScript code being modified in Chrome 39. It's in Canary and Dev channel for now, but all channels including Stable will migrate to the new API by the end of this year.

If you want to support Chrome 37, 38, and 39, you should be careful about that the ES6 'for...of' syntax can be available in 38 and laters. It will raise a syntax error. To avoid this problem, you need to use next() and done to run a for loop correctly.

Here are two examples for YAMAHA's GitHub projects that may help you.


8月の読書

先月末からニコファーレ関連でテンパッてたので読書ペースが落ちてた&ブログにしてる暇がなかったんだけど、落ち着いたので。8月の読書も7月と同じ27冊。面白かった物をいくつかピックアップして紹介。

生物・バイオ関連

ブルーバックの「カラー図解アメリカ版大学生物学の教科書」シリーズ。僕の通っていた高校では物理・化学・生物の中から2つしか選択できなかったため、医者かバイオ系を目指してる人以外は生物を選択から外してた。そんなわけで僕も生物に関する高等教育は受けておらず、ちょっとした苦手意識のある領域でした。先月読んだ本の中で良さそうな本が紹介されていたので、8月いっきに読みました(正確には3巻を読み終わったのは9月頭)。いやはや、細胞の世界の緻密さに脱帽。コンピュータとかロボットなんか、まだまだ玩具だな、と思いました。しかもこういったシステムが緻密にコードされているわけではなく、相互作用の結果として自己組織化されていくようにできているあたりが、まさに神のハック。
読んでいるうちに面白くなって同分野の本を何冊か読み漁りました。その中で気に入ったのが「マンガでわかる神経伝達物質の働き」。マンガと言っても半分以上は文章で、まとめや箸休め的にイラストが入っている感じ。でも、イラストが本当に可愛くて、それに釣られてスラスラ読んじゃいました。最後の方は精神病やドラッグについての説明もそれなりに。
「やわらかな遺伝子」は「教科書シリーズ」の2巻を読んだあたりで気になって読みました。「遺伝子すげー」って世界観から、実は生まれた後の環境によって遺伝子発現のトリガが押されるので遺伝子が全てじゃないんだよ、という流れに。でもまぁ、一卵性双生児の話を聞く限り、普通の世界に生まれてくれば、かなり遺伝子には引きずられますね。個人的な結論としては「やる気のでるホルモンを生成できる遺伝子が最強」という事で。個人の意思決定を本当に支配しているのは身体の状態であって「やる気がでない、気分が乗らない」という、さも脳内の意識が決定したかのような理由付けは、行動の後に脳が辻褄合わせに作り出しているという事実を知り愕然としました。寝てる間にベッドから落ちたら、落下する夢を見るのと同じ。人間は常に水面下で言い訳をしながら生きているわけです。
この辺を一通り読んで、ミクロな生物学に関してはなんとなく理解できた気がします。万能細胞がなぜ嬉しいのか、動物では何が難しいのか、とかその程度。研究室に配属されて手が動かせるレベルかと言われれば、まだまだ全然ってところ。でも細胞のシミュレーションとかも面白い分野だし、機会があれば飛びつきたいな、という感じではあります。次はマクロな方面を読んでみたい……って事で4巻以降に続く。



未来予想

Kurzweilの最新のSingularity本。……とにかく分厚い。普通の本なら5冊くらい読めそう。
技術は指数的に進化の速度を上げていく、という収穫加速の仮説を詳細なデータの元に検証。人知を越えたコンピュータが登場するSingularityとその先の未来を詳細に予測する。
仮説を裏付けるために詳細な記述がなされているが、カーツェルの予測する未来を知るという目的には冗長すぎる。かと言って専門家として理解できる分野の話を見ると「ちょっとこれは」と思える部分もあり(やむを得ないとは言え)中途半端な印象は否めなかった。
予測内容そのものは刺激的で、生き方について少し見なおそうと考えるには十分すぎる内容。ただ、倫理的な問題を考えずに人体改造を認めることで、人が順応できる生活の変化が技術革新に追いつけなくなったという重要な事実を無視している。
一方でサイエンス・インポッシブルはSFに出てくるような未来の技術をネタに、物理学者の観点から実現の難しさを語った本。Kurzweilの文章は刺激と同時に、年寄りの与太話に付き合ってるような退屈さが付きまとう感じだったんだけど、この本は科学の歴史などにも触れ、読み物としても十分に楽しめる。
後半は最新の宇宙論について結構なページを割いているので、実はSFをネタにしてより多くの人に(著者の専門である)現代物理に興味を持ってもらうよう狙った本かも。前半は編集の要望で後半は著者の趣味、みたいなパタンは多いですね。
未来予想としてはKurzweilよりはずっと控えめで、倫理的問題や人間の適応力不足に起因する進化の鈍化を考えると、100年くらいはこっちのほうが妥当な予測かも。ちょっと寂しいけど。


小説

夢野久作の書簡体短編3作が収録された「少女地獄」。これまでに読んだ夢野作品は「きのこ会議」だけで「んんんっ??」って感じだったんだけど、本作を読んでその世界に一気に引き込まれた。ドグラ・マグラ前の助走って感じで。一連の作品は、女性の社会進出が一つのテーマですかね。
冲方さんの本はファフナーのファンとして。冲方さんが普段どうやって小説を生み出しているのかが具体的に読めて楽しい。書き方講座というタイトルではあるけど、教科書じゃないです。


その他

「5つ数えれば君の夢」は東京女子流をモデルにした漫画。たった一度きりの人生をアイドルという職業に捧げることの覚悟みたいなのを重くなり過ぎない感じでストーリー化してます。
「なぜ日本は若者に冷酷なのか: そして下降移動社会が到来する」の著者はパラサイト・シングル、婚活といった言葉の生みの親。日本の社会が抱える現実問題を目の当たりにした。投機でしかない高等教育、独身無職で親に寄生する若者たち、老人優遇の社会制度。数字で見るここ数十年の若者世代の収入の下がり方はちょっとシャレにならない。子供が減って当然。日本は世界で最初の「元先進国」になるのか。
最後の本はただただ残念だったので。短納期で引き受けた秒間1万アクセスのシステム。「もう先方と約束しちゃったんだから、死んでも作ってね」という日本的なノリで納品して、実際に運用したら秒間1アクセス以下で余裕でした、と。日本の品質重視が空回りする瞬間。企業ももう少し冒険した方が良いんだけど、それ以前に日本人が国民性としてリンチ好きだったりクレーマー体質なのがなんとも。日本もまだまだ民度は低いのです。

2014年9月1日月曜日

ニコファーレ続き

この週末はコントローラ周り、サウンドからのFFT入力、シーケンスをプログラムするためのライブラリとか用意してた。だいぶTODO潰したけど、まだスケジュールきつい。

昔2D向けに作ったWaypointsを3Dに拡張。ポイントスプライトとして頂点計算しつつ、フラグメントシェーダで火球っぽく描く方法を試してみた。点を打つだけなら10万パーティクルくらいいけそうだったんだけど、ポイントサイズが大きくなってくると1万くらいで厳しくなる。空間が広いので1万パーティクルくらいだと結構スパース。


こっちは前に作ったキューブが飛んでくる奴。ワイヤーフレームで表示するモード作って、エフェクトでぼかしてみたら結構かわいくなった。


あと、関係ないけどherokuにデモdeployする時、postinstallの中でライブラリをクローンして特定のリビジョンをチェックアウトという処理をしてたんだけど、チェックアウトの段階で.gitが空とかいうエラーに遭遇。前は動いてたんだけどなぁ。とりあえずbranch作ってgit clone -b で逃げてるけど、なんか不便だ。

2014年8月29日金曜日

Web MIDI API - the past, the present, and the future -

Web Music Meetup #1で発表したスライドを公開しました。Chromeでの実装についてのまとめです。今までHTML5についてはWebSocketとWeb MIDIについて関わってきましたが、どちらもメディアアート系の人たちに気に入ってもらえているのが嬉しいです。


2014年8月24日日曜日

3Dラインアート

引き続き、制作の敷居を下げるためのライブラリを開発中。今回は3次元座標を引数にした描画関数を用意してあげて、その関数からの描画がニコファーレ全面ディスプレイに自動展開されて描画される、というもの。と言っても本来は立ち位置によってディスプレイに表示される内容は変化しないといけないので、今回はホール中央から見れば歪がないというのを条件にしてる。まぁ、勢いあれば多少の歪みは気にならないという事で。

ニコファーレのシステムに送る画像はこんな感じの展開図

ホール中央から右前を見た視点をレミュレートした出力

シミュレーション上は、ディスプレイの外枠が見えなければスクリーンの境界がまったくわからないくらい綺麗に繋がって見えている。もしかしたら高さ方向の調整はまだ必要かも。視点の高さがスクリーン中央にあることを想定してるけど、実際には結構見上げる感じだった気がするんだよなぁ。

実際に表示できるでもページはこちら。流石にWeb GLを大量に埋め込むとトップページから開いた時に破綻しそうなので。キー操作は「x」「f」「h」「j」「k」「l」。

複数ディスプレイに自動分割表示

連投。1つのシェーダーから複数ディスプレイにまとめて投影できるような枠組みを入れてみた。ニコファーレでダライアスとか凄そうなのに。シェーダーによっては手軽に迫力ある映像が作れて便利。



例によって「x」キーで会場エミュレーションモードと展開画面出力(本番用出力)の切り替え、「f」で全画面。エミュレーションモードでは「h」「j」「k」「l」で視点移動。大画面版は下の画像をクリック。

2014年8月23日土曜日

例によってGLSL Sandbox用のシェーダーを流用

とりあえず流用できる状態にしておけばネタに困ることのないGLSL Sandbox。って事で、今回もさっそく互換フレームを用意してみた。ここからが先が創作っぽくなる部分で、得意ではない部分。……がんばる。



例によって「x」キーで会場エミュレーションモードと展開画面出力(本番用出力)の切り替え、エミュレーションモードでは「h」「j」「k」「l」で視点移動ができます。大画面版は下の画像をクリック。「f」で全画面になり、ディスプレイが1920x1080になっていれば、そのまま本番に入れるデータが出せます。Full HDでうねうねするには、それなりのGPUが必要かも。



※そう言えば、Chrome以外で全く動作確認してません。自分用のツールで時間的余裕もないので……。

2014年8月22日金曜日

ニコファーレ

ニコファーレには結構面白い照明設備があるんだけど、利用価格がお安くない……って事で遊ぶには敷居が高めです。で、今回ちょっと訳あってこの設備向けの作品を作ってるんだけど、フォーマットが特殊。かつ資料だけだと不明な点もあったので会場見学に行ってきました。で、とりあえず現地でのキャリブレーションと本番までの出力確認用に作ったのが下のプログラム。



「x」キーで会場エミュレーションモードと展開画面出力(本番用出力)を切り替えられて、エミュレーションモードでは「h」「j」「k」「l」で視点移動ができます。大画面版はこちら。このシミュレーションモードで出力確認しておけば、本番になって「あれ?違うじゃん」みたいな間違いがなくなるってわけです。

E/Fのスクリーン位置が資料では不明だった点。これらは奥から200pxの位置にあることを確認し、シミュレーションにも反映させました。担当さんの話によれば、これらのスクリーンは移動可能で、取り外すこともできるそうです。ただしステージの袖が見えちゃうので外すのはお薦めではない模様。当日に想定外の位置に設置されていた場合、言えば移動してもらえるそうだけど、基本はこの位置のはずだと言っていました。あと、豆知識としてこの2枚のスクリーンだけは他より2フレームだけ遅延が少ない(早く表示される)そうです。こだわる場合には注意が必要。

天井はスパースなんですよね。同じサイズのLEDが広い間隔で並べられているだけなので、本来あるべき画素サイズと比較すれば、密度(明るさ)は大雑把にはわかります。ただ、LEDのメーカーが違うために天井だけ発色がちょっと青みがかっている。この辺も適当ですがパラメータとしては反映させてます。

って事で、しばらくは久しぶりにGPUをいじり倒す感じ。最近のマシンって新しいからってそんなに体感に影響はないんだけど、GPU触りだすと流石に全然違いますねー。

2014年8月3日日曜日

7月の読書

6月くらいから本を読む習慣が復活して、いまのところ月に20冊ちょっとのペース。せっかくなので読書記録つけて習慣付けようかと。気に入ったやつをいくつかピックアップ。

小説

陰陽師は「好きだったなー、平安時代」って。宇宙皇子で散々読んだ貴族の生活。思えば、その辺の知識層への憧れが後々まで強く影響して今の自分の人生が成り立ってる気がする。田舎の人間が都会に憧れるような、そんな気持ちで知識層を見てた。まぁ、どっちも自分の中にはある。高校の頃はニューヨークの夜景の写真とか部屋に飾ってたから。でも、本当この雰囲気には惹かれるなぁ……と初恋のような気持ちで読んでおりました。定期的に続編読むかも。
あとの二冊は村上春樹。小澤征爾や坂本龍一と絡んでる本は読んだことあるんだけど、小説を読むのは初めて。東京奇譚集は短篇集で日常からふっと不思議な世界に繋がる瞬間。そんな話が何編か。スプートニクの恋人は長編だけど、やっぱりエッセンスは同じ。他の本は読んだことないけど、これが村上さんの特徴なのかな?構成が凝り過ぎてて、というかたぶん考えずに書いてるんだろうけど前半はちょっと話を追うのに神経を使う。けど、後半で話が回りだすと本当に面白い。なるほど、これが売れてる作家かぁ、と思った。過去の読書ブームでは、子供の頃は今で言うラノベばっかりだし、大学の頃はドストエフスキーとか柔らかくても安部公房、あとはSFって感じだったので。いわゆるベストセラー小説的なのは読んだことなくて、偉く感心しました。(実は6月に新宿鮫を読んでるけど。こっちも同様に感心しました)



経済関係の入門書

元々は「手元の株の処遇についてそろそろ考えないとなー」と思って読み始めた。
経済上の色々な問題って、結局のところ既得権益者によるロビー活動と、その影響で若年層への投資が不足するのが問題なのね……と思いながら読んでた。たまたま別件で読んでた記事も同じように結論付けてますね。農家にはじまり、旧メディアに多いJASRACみたいな業界団体、あと潰れかけの大企業なんかが国を貧しくする根源。あと過剰に労働者を守る法律が逆に労働者を苦しめる結果に、とか。そんな内容です。
個別に書くと、この世で一番〜の2冊は経済の入門漫画。どっちも1時間かからずに読めちゃう。それでも、このくらい知ってれば選挙で騙されないくらいの知識はつくはず。訳本なので日本の話は書かれてない。最近の日本の話は3冊目で補える。実際には僕は藤沢数希から読んだ。なんかランチの会話でたまに聞く名前だったので。失われた20年について初心者でも分かる程度の経済学の言葉で説明した本。ちょっと攻撃なところもあるので、どこまで真に受けるべきか素人の僕にはわからなかったんだけど。前の2冊に戻って読んでみた限り、同じことを言ってますね。



人のリバースエンジニアリング

最近はバイオの世界でもソフトウェアで言うところのオープンソース活動だったり、ハードウェアで言うところもDIY的な動きがあるよー、という話。細かい例がグダグダ書かれてて文章自体はさっぱり面白くない。ただ、みんなで寄ってたかってDNAを弄くり倒すってのはちょっと面白い未来かもなぁ、と。どっかのタイミングで乗り遅れないようにしないと。
で、バイオパンクがバイナリアン的な人達だとしたら、認知心理学の方はゲームの目移植、Photoshop買いたくないからGimp作ったぜ、みたいな人たちがやるようなハック。人間に入力を与えて出力を観察、結果から内部のアルゴリズムを推測して人間の仕組みを解明する人たち。学問的な名前はちょっと曖昧。96年ごろ認知神経科学って名前で大学の講義受けて感銘受けたんだけど、この本的にはその名前が出てくるのって21世紀って事になってる。いずれにせよ、この分野の発展は目覚ましくて、アミューズメントセンターに行けばふんだんにその成果が堪能できる。この本は主に視覚の説明が多いけど、視覚とか嗅覚とかハック可能なレベルまで仕組みが解明されているのに驚く。DNA側から攻めるよりは、当面はこっちのほうが筋が良いかも。DARPAが記憶を操作する技術を確立しつつある、みたいな話をチラホラ見るようになったし。



その他

日本的想像力〜は猪子くんのインタビューがメイン。非言語の話は物事の捉え方に新しい視点を与えてくれて刺激的。時代や文化の影響を受けないデザインが重要になってきているし、何かが変わりつつある感じはあるかなぁ。
2冊目はKyle McDonaldさんがワークショップで紹介されてた茶の本。日本語版が無料だったので読んでみた。岡倉天心の本だったのかー、と今更気づいた。この時代に西洋に対して強気な文面、しかも英語で世界に向けて発信していたという事実はとてつもなく衝撃的。内容にそこまで興味あったわけではないので、前半だけまじめに読んで後半は読み飛ばし。
最後のはオウム事件の本。オウム事件を通して報道の在り方や死刑制度への疑問、警察や司法の暗黒面についてたっぷり書いた本。以外なところで経済の話だったり、ホリエモン事件、最近ではSTAP細胞にまつわるリンチっぷりとかが線で繋がる。特にインターネットを通じての日本人のドロッとした国民性とか……最近辛いなぁ、と思う。森さんの話はそれなりにフィルターかかってる気がして、すべてを鵜呑みにはできなかった。オウム親派ってわけじゃなくて、単純に事件に関わった事で人生が狂い、平和に暮らしてれば見なくて済む世界を見てしまった人の持つ恨みつらみ。時々文体や構成の乱れとして見え隠れしますね。
A3の参考文献として知ったんだけど、村上春樹さんもオウム事件に関する本を出してるんですね。あの事件の前と後で日本人は変わってしまった、みたいな視点が最近の作品には見え隠れする、みたいな事をアマゾンのレビューか何かで読んだ気がするんだけど、この本で背景が見えてきた。そっちの本もそのうち読んでみたい。



って事で、アマゾン先生をのらりくらし探索しながらランダムに選んだつもりだったんだけど、思いもがけないような本が思想的に繋がってたりしますね。なんで経済と村上春樹とA3が線で繋がるのか……。やっぱりアマゾン先生のクラスタリング力は強力すぎる。

2014年6月14日土曜日

続・ChromeにおけるWeb MIDI APIの実装状況

昨年末にWeb MIDIの実装状況について書かせて頂きました。その後の更新状況についてまとめたいと思います。

Chrome 34
  • Linuxサポート(ALSAをサポートするシステムのみ)
  • Androidは出力のみ対応(ただし、初期化手順の問題で最初の呼び出しは失敗する)
  • リアルタイムメッセージのサポート
  • システムメッセージ(sysexではない)はパーミッションなしで送信できるように修正
  • 送信メッセージにエラーがある場合、詳細情報がエラーメッセージとして書き出されるようになった
  • パーミッション許可を求めるinfobarが file://... に対しても表示されるようになった。ただし、セキュリティの都合上、許可・不許可は記憶されない。
  • Windowsでtimestampが間違っていたのが修正された
Chrome 35
  • PromiseがWeb MIDI向けの機能限定版から、フル機能版に差し替えられた
  • Chrome OSサポート
  • Androidの入力サポート(初期化手順の問題は未修正)
  • OS Xにおいて送信されるMIDIメッセージにCore MIDIのtimestampが正しく付加されておらず、Chromeから送信されるデータをDAWで受信すると、正しいタイミングで録音できない問題が修正された
  • MIDIAccess.sysexEnabledアトリビュートが追加された
Chrome 36
  • Androidの初期化手順の問題が修正された
Chrome 37(予定)
  • LinuxとChrome OS向けの実装が改善された(ALSA sequencer APIに対応)
  • Android向けのUI実装完了(infobarと設定画面)
追記:Chromeで実装しているAPIは最新版と若干異なります。最新の使用に合わせて近々更新する見通しですが、それまではこちらの旧APIを参照願います。またMIDIConnectionEventの実装も新APIになるまで見合わせています。

For English readers;
I'd summarize Web MIDI implementation status on Chrome. I also did it at the end of the last year, but in Japanese. So, I'd mention also previous status together.

Chrome 30
  • chrome://flags#enablr-web-midi appeared on OS X
  • Input ports were available on OS X, but there was a bug on sysex until Chrome 32
Chrome 31
  • Output ports were also available on OS X
  • Infobar and settings UI were implemented as a part of content settings
Chrome 32
  • IAC driver was available
Chrome 33
  • Web MIDI worked on Windows, but had wrong timestamp values
Chrome 34
  • Web MIDI worked on Linux (but only ALSA supporting systems)
  • Also, worked on Android, but only output ports are available
  • There was a problem on initialization process, so the first API call didn't work on Android
  • Real-time messages were available from this version
  • System messages were available without a sysex permission from this version (previous versions required a sysex permission even for system messages)
  • Error provided detailed messages on invalid send messages
  • Infobar appeared even on local files, but browser could not remember the permission because of security reason
  • Wrong timestamp was fixed on Windows
Chrome 35
  • Now, Promise is not limited version Promise, MIDIAccessPromise, but fully featured proper Promise
  • Now the API is available on Chrome OS
  • Input ports are available on Android, but the initialization issue is not fixed yet
  • Fix a bug that sending messages had wrong CoreMIDI timestamp and caused a problem that DAW could not record Chrome sending messages with correct timestamp
  • MIDIAccess.sysexEnabled attribute is added
Chrome 36
  • Android initialization issue will be fixed
Chrome 37 (planned)
  • Linux and Chrome OS supports will be improved so to support ALSA sequencer API
  • Infobar and settings UI for Android will be implemented
Note: The implemented API is slightly different from the latest W3C spec. You can see the old specification here. Also, MIDIConnectionEvent is not implemented yet. It will be available once new API is ready.

2014年2月20日木曜日

SDCC for PIC Tips

PIC18F14K50でUSBデバイスを作るのにSDCCを使ってみた。PIC18F2550系とは互換性がないという事前情報だったけど、レジスタ並びやUSB用RAMのアドレスが違うくらいで、基本的にUSB周りのコードはほぼそのまま動きそう。

むしろハマったのはSDCC周辺。このあたり、やっぱり非公式ツールチェインは辛い。大きくハマったのは次の2点。

  1. bootloaderを使おうとすると色々細工が必要で、信頼できるコードが書けない
  2. USB用RAMのポインタをアドレスから普通に作ると動かない
bootloaderについて、まずtext領域を後ろ(0x800以降)にずらすために専用のリンカスクリプトを用意する必要がある。コンパイラオプションにもそれっぽい--code-locというのがあるが、指定しても動かなかった。また、割り込みベクタはbootloader側がトラップして後ろのアドレスにフォワードしてくれるので、後ろのずれた位置に割り込みベクタを配置する必要がある。こっちはコンパイラオプション--ivt-loc=0x800が正しく動く。また、crtが通常の配置を想定したコード(割り込み周りかな?)を持っているようで、ふとしたタイミングで暴走する。stdio/stdlib使ってなくても、例えばcharをやめてintでforループを回すと暴走、とか悩ましい問題が普通に起きる。海外サイトでcrtを同じフラグでコンパイルし直せば安定する、という話も見かけたけど、どこまで信じていいかわからない状態で実験を続けたくなかったので、bootloaderは諦めた。回路側でバランスをとったら、なんとかICSP指しっぱなしで書き込みしつつ、USBバスも安定ドライブできた。

USB用RAMについてはコンパイラの問題とは思わずに長時間悩んだ。いわゆるBuffer Descriptor Tableを構成するコード。コンパイラの仕様が変わったのか、バグなのか、2550の時のコードからアドレス変えただけでは動かなかった。具体的にはstruct bd* bdt = (struct bd*)0x0200;的な事をやってアドレスを作ってたんだけど、今回はこのポインタで読み書きしても値が変わっていなかった。起動すれば一応USBはしゃべるんだけど。アドレスリセットとパワーセーブ関連の割り込みだけ届いて、その後はだんまり。トランザクションが届かないってことはエンドポイントが正しく初期化できてないのかなぁ・・・というあたりから問題の目星をつけた。結局コンパイル結果を眺めながらの間違い探し。原因が判明してからは、正しい出力を出せそうな表記を勘を頼りに探すお仕事。通らないと承知で間違ったキャストをコンパイラにかけると、内部的な秘密の型がエラーメッセージを通して推測できるのでオススメ。
__at(0x0200) struct bd BD0;static struct bd __near* const bdt = &BD0;
あと、やっぱり配列でアクセスしたくなるUEP0, UEP1, ...なんかもchar *uep = (char*)&UEP0; uep[0] = ...とか書くと正しくアクセスできない。
static __sfr* uep = &UEP0;static __UEP0bits_t* uepbits = &UEP0bits;uep[0] = 0;uepbits[0].EPHSHK = 1;
って感じの__sfr*という特殊な指定が必要。特定用途レジスタの略だと思う。こっちはシステムヘッダを眺めて予想。

2014年2月3日月曜日

HIDじゃないSPX

とりあえず手元のAKI-PICで焼けるPIC18F2550で作ったpic18spx(オリジナルそのまま版)と、それを使ってPIC18F14K50に焼いて作った非HID化改造版pic18spx。
非HID化によりOS Xでも動くようになりました。あと、次にbuildしようとした時にbuildできる環境が作れる気がしないのでhexをウェブ上に置きました。必要になったらここからダウンロードして焼くべし>未来の自分。

あと、昔tcl/tkで書いたhidspx用のGUIが昔の記事にあります。開発中はもっぱらmakeを叩くんだけど、デバイスを確認する時とか、FUSEの値を確認する時、今でも使ってます。

しかし、環境乗り換えの時間的コストは高いな、やっぱり。

2014年2月2日日曜日

pic18spx/mac

HIDクラスを使ってるとOS Xで標準ドライバから制御が奪えない問題。HIDをやめれば解決するかな、と思って試したら解決した。具体的にはUSBデスクリプタのインタフェースクラスをHIDからベンダ固有値0xffに変えるだけ。picmonとか特に修正しなくても、そのまま利用できる。

むしろpic18spxのファームのbuild環境を整えるのに苦戦した。mcc18向けに書かれてるんだけど、現在はmcc18は配布されておらずMPLABXとXC8が標準。いっそXC8かSDCCに移植しようかと思ったけど、そこまで時間かけても仕方ないかな、と思って大昔のディスクを漁ってmcc18をインストール。持ってたのはMPLAB-C18-Academic-v3_30.exeとかいう古めのバージョンだったので、そのままではリンクできない。とりあえず$(TARGET).cofのビルドルールを以下のように変えて凌いだ。

$(LD) /l$(MCC18)/lib /k$(MCC18)/lkr rm$(DEVICE).lkr $(OBJS) \
/u_CRUNTIME /z__MPLAB_BUILD=1 /m$(TARGET).map /o$(TARGET).cof

とりあえず、自分のファーム作るときは最初からSDCC考えた方が良さそうだなぁ・・・。

2014年1月29日水曜日

18F2550 -> 18F14K50

本日14K50が届いたので準備の続き。先日ブレッドボードで組んだpic18spxはリセットボタンを付けて基板に載せました。部品点数少なすぎて基板がスカスカ。配線ガシャガシャしててもUSB側は安定してるんでリセットボタンいらなかったかも。書き込み用のピンは手元の機材ですぐに実験できるAVR用の2×3タイプのみ。

右が2550。TINY2313の読み出しを確認した後、左の14K50を使った2台目の書き込みに。書き込みにはpic18spx-2010-0416に付属のpicwriter.exeを利用。hidspxでいけるもんだと思い込んでて-rが成功せずにしばらく悩んだ。

新たにブレッドボードで動作確認。リセットをプルアップしてる以外はクロックと配線のみの超手抜き状態。ですが、安定動作してます。水晶は秋月で28.6円のSG531PAP。水晶のOUTをCLKINに繋げてCLKOUTは開放。設定変更くらい必要かと思ったけど、そのままで動いてる。こっちは基板では2×3と1×6両方付けるつもり。
と、ここまででようやく開発の準備が完了です。
そう言えば、フルスピードになると我が家のオシロでは対応できないので、ハード側でハマると死にそうです。

2014年1月26日日曜日

pic18spx

手持ちのPICライター、AKI-PICではPIC18F14K50に書き込めないっぽいので対策。嬉しい事にさくっと見つけたpic18spxが需要を満たしてくれそう。個人的に嬉しいポイントは

  • Linux / OS Xからも使える
  • PIC18F2550とPIC18F14K50に対応してる
  • ライターもツールもhidspxの上位互換として動く(AVRにも書き込める)
  • PIC18F2550と20MHz水晶だけで作れるので、手持ち在庫とAKI-PICで作れる
ってところ。

回路

ざっくりオフィシャル通りでこんな感じ。
追記:RC2をpull upしてるけど標準hexではBoot Loaderは殺されてるので不要

Linux / OS Xでの利用(ややハマりポイントあり)

picmon/picbootは関してはオフィシャルページのpic18spx-2010-0416.zipを展開すればWindows用のバイナリと一緒にソースが入ってる。picspxは別途配布されているpic18spx-linux.zipを使うこと。
Linuxでは中で呼んでるusb_claim_interface()にroot権限が必要なため、sudoしないと駄目。オフィシャルページ読めば書いてあるけど見落としてた。hidspxではroot権限不要だったと思うんだけど・・・まじめに調べてないけど、単純にhidspxはcontrol転送しか使ってないんで標準HIDドライバが不審に思って掴まなかっただけな気がする。
同じ理由でOS Xでもusb_claim_interface()が失敗。こっちはrootでも駄目。usb_detach_kernel_driver_np()を試しても失敗するのでusb_strerror()を読んでみたら「function not implemented」を返してきた。もう少し検索してみるとこんなスレッド発見。要は標準ドライバ避けに専用kernel driver作ってOSを再起動するしか方法はないらしい。まぁHIDはセキュリティ的にも際どいし、わからなくもない。
よくよく考えるとWindows使わない身としてはHIDのフリをさせるメリットもないので、独自クラスにデスクリプタ書き換えたfirmwareを作ることで解決するつもり。そうしとけば、その気になればUSB API使ってChromeからも書き込めるし。

そのほかハマった点

前エントリの通り、最新版のAKI-PICを試そうとして危うくVM上のWin XPを再起不能にしかけた。しかも試し損。加えてVMのUSBブリッジが不安定。結局、唯一稼働してる実機Windows、Win7/LOOX U50WNを引っ張りだしてPIC18F2550を焼いた。ライターにhidspxを使ってPICに書けるPICspxなんてのあったけど、うちの環境で読み込んでみたら不定値が返ってくる。ライター側のバージョンでAPIが微妙に変わってそうなので、深入りせずに過去に実績のあるAKI-PICに逃げた。これがAKI-PIC最後の出番かも。
追記:USBブリッジの問題はホスト側で/etc/udev/rules.d/40-vmware.rulesみたいなのを以下の内容で作ってやったら解決した。USBデバイスのパーミッションが常に全開放になる点だけは注意。vmware server 2.0/Ubuntu 10.04.4 LTSの組み合わせ(この組み合わせもいい加減古い)。
SUBSYSTEM=="usb", ENV=="usb_device", MODE="0666"
SUBSYSTEM=="usb_device", MODE="0666"

関係ないけど驚いたこと

vimでhexファイル(PICのa.out的なもの)を開いたらレコードごとに色分けして表示してくれた。超便利。これ見ながらpicmonで期待してるデータが読めるか確認。ピンクが長さ、青がアドレス、赤がタイプ、無印がデータ、最後の黄色バックがチェックサムです。

2014年1月25日土曜日

AKIPIC PICPGM6β6.76でハマった

最新版のデバイス対応状況を確認しようとしてカジュアルにアップデートかけたらOSが起動しなくなった。一番悪いのは僕。なにせ使ってたのはXP、アハハ。

問題は単純で、システムのOLEAUT32.DLLを上書きされちゃう。Vista以降でしか動かないバージョンで。エラーメッセージ的にはMSVCRT.DLLにstrcat_sのエントリが見つからない、といってexplorerも何も動かなくなっちゃうんだけど、実際にはエントリがないのがXP版としては正しくて。Vista以降のMSVCRT.DLLに依存を持ったOLEAUT32.DLLがインストールされたのが本質的な原因。

ってことで、対処としては、OSのインストールディスクをドライブXに用意して、コマンドプロンプトを使って以下の処理を行う。explorerは起動しないけど、Ctl+Alt+Delからタスクマネージャは呼べるので、ファイル>新しいタスクの実行(N)…からcmd.exeを実行です。
C:¥WINDOWS¥system32>ren oleaut32.dll oleaut32.bak
C:¥WINDOWS¥system32>x:
X:¥>cd i386
X:¥I386>expand oleaut32.dl_ c:¥windows¥system32
X:¥I386>c:
C:¥WINDOWS¥system32>ren oleaut32.dl_ oleaut32.dll
更新履歴にはVista以降はまだ準対応とか書きながら、実際はVista以降でしか動かないという…かなり攻撃力高いです。っていうか、僕悪く無いじゃん、やっぱり。

2014年1月24日金曜日

昔のサイトをHerokuに詰め込んだ

仲間内の共有サーバに詰め込んでた昔のサイト。マシン乗り換えの話が出たので「えいやっ」とクラウドに載せ替えた。古いサイトなので、基本はほとんど静的なページばかり。リンク先やら取り込んでるコンテンツやらが死亡しまくりなので、動的コンテンツも真面目にサルベージするほどでもない。

ってことで、とりあえずSinatra/Ruby/Herokuの組み合わせで対応してみた。ドメイン的には10サイトほどあるけど、まぁ1Dynoでさばけるでしょう、と。(むしろ、まとめてた方がインスタンスが寝なくて好都合?)

とりあえず静的なコンテンツはSinatraに丸投げしたかったんだけど、VirtualHost対応はApacheやnginxで行い、その下でSinatraが動かすのが一般的だったのかな? Sinatra単体でスマートな方法はなさそうだったんだけど、ここはSinatra単体で行きたかったので小細工で対応しました。動作はRuby 2.0.0 + Sinatra 1.4.4で確認。

require 'sinatra' 
set :add_charset, [] 
before '*/' do
  request.path_info = request.path_info + 'index.html'
end
 
before do
  request.path_info = '/' + request.host + request.path_info
  static! if (request.get? || request.head?)
end

本当はbeforeフィルタでpath_infoを書き換えれば後はよしなに・・・というのを期待したんですが、ファイル存在判定はbeforeフィルタより手前でやってるんですね。なので、path_infoを書き換えた後に、もう一度static!を呼んでファイル再判定させてます。ちょっとしかコード追ってないんですが、ファイルチェックを一番最初にやってbeforeフィルタは常に回して、afterフィルタはファイルの時には回さない、という挙動っぽいけど、何か意味あるのかな?Sinatra詳しいってわけではまったくないので、詳しい人、あるいはもっと良い方法あるよ、という場合は教えて頂けると幸いです。

あと、add_charsetは明示的に空にしてます。これやらないとtext系のContent-Typeにcharset=utf-8を自動的に付けちゃって古いShift_JISのコンテンツに悪影響与えるので。HTTPヘッダのContent-TypeについてるcharsetとHTML側のcharsetのメタ情報が一致しない、Content-Languageとhtmlのlang情報が一致しない・・・ってのはChromeでも良くハマる問題で。文字化けや、間違った翻訳サジェストの原因になってます。頑張って間違い推定するようにしたんだけど、完全にはできないのでサーバ側で気をつけたいところです。

あと、http://toyoshima-house.net/ にあったコンテンツは有用な物だけ当ブログにマージして、元ドメインには転送をしかけました。Google+には更新情報として古いコンテンツも飛んでたみたいですが、コンテンツ自体は古い日付でエントリされてます。加えて、このブログにも独自ドメインを振りました。

2014年1月22日水曜日

照明機材を身近に

バンドやってる人はわかると思うんだけど、ライブハウスでイベントやる時、音はどうにか自分たちで仕込めるんだけど、照明は完全に会場スタッフに任せっきり。しかも、当日紙一枚見て適当にフィーリングでやられちゃうので残念極まりない。という事で、照明機材をもっと身近にできないかなぁ・・・という事で作ってみました、USB-MIDIタイプのDMX変換器です。



これがあるとChrome上で楽器から照明、VJスクリーンまで好き勝手に制御できるので幸せ。まぁ、夢には遠いけど第一歩という事で。

PIC18F14K50についてはスライド作りながらF2550っていくらだっけ?と調べて存在を知った。170円でUSB2.0インタフェース内蔵、内蔵オシレータで16MHzまで出て、PLLを通せば32MHzまで安定したクロックが供給できる。SRAMも768Bと、このクラスにしては十分なサイズ。重い腰上げてPICに戻っても良いかも。