2015年12月26日土曜日

Think MIDI

Think MIDIがとにかく凄かった

って話を書こう、書こうと思って引っ張っていたので、忘れないうちにそろそろ書こうかと思います。イベントの詳細については藤本さんのDTMステーションに紹介があるので、そちらを見てください。今回、関係者のご厚意でイベントには招待して頂いたのですが、そういう事を抜きにしても「これ、国際フォーラムで2F最後列で1万って言われても絶対行く!」って内容でした。

出演陣が凄い!

メインステージだけでも、裏ボス級のアーティストが惜しげも無く大量投入。
Day 1:向谷実、西脇辰弥、増田隆宣、篠田元一、浅倉大介、松武秀樹、冨田勲、服部克久
Day 2:大島ミチル、伊藤賢治、伊藤圭一、白井良明、難波弘之、氏家克典、梯郁夫、松武秀樹、篠田元一、根岸孝旨・阿部薫
(抜けがあったらごめんなさい、裏ボス級じゃないって意味ではなく、単純に多すぎて書き忘れてるだけです)

展示が凄い!



YMOに関しては既に何回か機材展示があったので、そこまで貴重と言うわけではなかったかもしれないですが。
それにしても、このタンスに松武さんがスタンバって、メインステージとの共演をやったりしたのには大興奮。

また、これ以外にもヴィンテージシンセが年代順に展示されていました。この写真は展示のほんの一部だけ。


円卓に並べられた往年の名機たち。実は全機がMIDI接続されていて、Web MIDI使って使ったというパッチベイを使ってお客さんが手前のキーボードから演奏できるという仕掛けに。

左のは物理モデリングのVL1。実物は初めて見たけどめちゃくちゃオシャレ。眺めてたら知り合いの方が来て「これ僕が作ったんですよ」と、少しお話を聞かせてもらいました。VL-70mは持ってたんですよ。大学に来るときにヤマハ音楽教室の積み立て金が余ってて。好きな楽器選んでいいよ、って親に言われて(妹には内緒って言われてたけど、もう時効だよね)。高校でクラリネットやってたので、コントローラのWXとセットで手に入れて、今でも大切に持ってます。今回ステージで氏家さんが使ってたんですが、やっぱり生楽器のシミュレーションでは別次元の素晴らしさでした。

で、他にも企業展示とかあったんですが、撮影して良いのかわからなかったので写真はありません。

ライブ・ステージ

個人的に思い入れのあるアーティストも多かったので、文章だけですが、がっつりと。

Live I The Great MIDI's

YAMAHA DX-7、Roland D-50、KORG M1に関して、それぞれ縁のあるキーボードプレイヤーが語りつつ、篠田さんとセッションするという素敵コーナーです。ちなみに僕は篠田さんの実践コード・ワークで結構勉強してた人なんですが、篠田さん自身についてはほとんど知らなくて。今回、ステージ関係をまとめていらしたようなのですが、司会も素敵だったし、セッションで演奏された篠田さんの音楽も好み。帰り道にamazonで検索したらCDあまり出てこなくて教本ばかりだったのでがっかりしたくらいです。

で、トップバッターは向谷さん。DXのプリセットを作りこんだご本人の降臨。初期のカシオペアで使われてたような音色で時間差でデチューンしてくようなうっとりサウンド。感動しました。向谷さんのコピーはみんな二人でやってるみたいな話がありましたが。そりゃそうですよ。向谷さんって和音でフレーズ組んじゃうっていうか。メロディーにも複雑なハーモニーが積まれてて、採譜するのも演奏するのも凄く大変。加えて大量の音色だもんなぁ。

二番手の西脇さんは僕にとってはかなり特別な存在で。子供の頃、歌謡曲って一切聞かない子だったんですよ。なんか音がスカスカで聴いててもつまらないな、とか思って。ゲーム音楽とかは好きだった癖に(笑)。でも、ドリフとか見てるとなんとなく耳には入ってくる。で、ある時たまたま聴いたribbonの「太陽の行方」に衝撃受けて。それからアイドルの曲とかロックも聴くようになった。それ以来、西脇センサーみたいなのが体の中に出来上がってしまって、気になる曲を見つけて調べると西脇さん、みたいな時代が長いこと続きました。國府田マリ子にしたって西脇さんの存在がなければ聞いていたかわからない。その後の音楽の趣向に大きな影響を与えた人です。西脇さんは編曲はシンセがっつりだけど、演奏はオルガンにハーモニカってイメージなんですが、結構なシンセ好きのようで。篠田さんとのシンセ談義は永遠に聞いていても飽きなそう。Rolandのエンドーサーでもある西脇さんはD-50の紹介をしつつ、今に繋がるRolandの音作りについてのお話でした。

最後は増田さん。B'zのサポートメンバー。音は色々なCDで聞いてきてるけど、アーティスト本人については僕はあまり知りませんでした。ロックな音楽性とKORGの太い色がマッチしてますね。M1の紹介という性質上、一世を風靡したあのピアノ音を使ったデモではありましたが。

そう言えば関係ないけど昔作った【ニコニコ動画】【初音ミク】寂しがりやの舞踏会 - Cosplay i-Doll -【オリジナル】は、Legacy Collectionですけど、ほとんどM1でした。綺羅びやかな音色が多いので、こういう使い方も結構いける。

Live II History of Legend

MIDI登場以前のシンセを使ったスペシャルライブ。松武さんはタンスにスタンバイ、篠田さんと浅倉さんも、それぞれヴィンテージなアナログシンセ。実験的な音楽から始まって、最後はなんとBehind The Maskで〆。浅倉さんというとデジタル世代って感じですが、その浅倉さんを交えてのアナログ全開なBehind The Maskは聴いていて涙モノでした。

Live III MIDI SUPER BAND

難波さんを交えたSUPERライブ!難波さんは関西でのライブから駆けつけてリハもままならなかったようですが、演奏は熱かった。ここまではわりとフュージョン色が濃かったんですが、難波さん登場とあってキング・クリムゾンのコピーありーので一気にプログレ展開。氏家さんも色物シンセを駆使しての変態的な演奏を展開していたし、松武さんはタンスで追い打ちかけるしで、狂喜乱舞のステージでした。ここでも最後はなんとライディーン。「あ、やばっ。ちょっと音作るんで待ってください」ってアナログシンセ最高!ってイベントの趣旨に反した想いを抱きつつ「ちょっ、それまさか」のライディーン。難波さんがその場で作った音色でリードをとってのライディーンとか、どんだけレアなんだこれ。

その他のステージ・デモイベント

パネル:MIDI Legen - Think MIDI -

松武さんがセットしただけあって、超超超大御所が登場。服部克久先生に富田勲先生。服部先生MIDIとは縁遠い印象で、トーク的にも生演奏派って感じだたんだけど、富田先生が話し始めて合点が言ったというか。この二人組み合わせると面白いし、旧知の仲だったんですね。富田先生が当時、新しい音を作っては服部先生のところに夜中に電話してきた話とか。松武さんの用意した質問も面白くて、富田先生ちょっとヤバメの大暴露の連続。

松武「金星の冒頭のあの人の声のような音、どうやって作ったんですか?」
富田「あぁ、あれか……。……人の声……に聴こえますねぇ」
服部「ちょっと、あぶないよ、この人。大丈夫なの?!」

えー?!ちょっと、今、何て!!

松武「新しい録音ではティンパニの音を入れなおしてるらしいですが、前はどうやっていたんですか?」
服部「ちょっと、あれ言わないほうがいいんじゃないの?」
富田「……ティンパニの音ですね」

!!!

まぁ、盛り上がりました。で、このトークで新録の存在を知ったので、帰り道でさっそくGoogle Play MusicにてULTIMATE EDITION聴きました。いや、いい時代。しかし、結構作りなおしてますね。「イトカワとはやぶさ」とかいう断章が追加されてますし、生っぽい音も積極的に追加されていて、開き直ってハイブリッドにしました、な感じ。

MIDI's Exhibition

実はここあまり見てなかったんですが、イトケンさんがコメンテーターとして出演されてて。最後にオケもので、Logicで作った借版を流すところがあったんですが……そっかー、今時は適当に作った借版でもこんな音が出ちゃうんだー、と妙に感心しました。一昔前は寺嶋民哉さんとかがゲーム音楽の予算使って実験的に手間暇かけて電子オーケストラやってたわけですよね。それよりはるかにリアルな音が素人が手の出る予算でDAWをオンライン購入すれば実現できちゃう。もちろん能力も必要ですけど、機材的には可能なわけですよね。凄いなぁ……と驚きました。

大島ミチルと映像音楽

メインステージでのトークでしたが、素晴らしい内容でした。大島さんって映画やドラマの音楽を何万曲も書いてる方で。忙しい時には一晩で何十曲とかお話してました。その大島さんを技術面で支えていた伊藤圭一さんを交えてのトークだったんですが。オーケストラやピアノを使った作品が中心なのでMIDIは関係ないと思っていたら、まさかのMIDI大活躍っぷりに驚きました。

まず、スタジオなんですが大島さん用特性のピアノ。中に手作りのMIDI装置が取り付けてある。今でこそ自動演奏機能付きのピアノは当たり前のように売ってますが、それ以前に考えて作られたんでしょうね。映像を見ながら即興で曲を作るんですが、映像とのタイミングが微妙にずれてしまった時にMIDIデータでテンポを修正して再演奏したものを使っていたんだそうです。最初は自分の演奏を修正される事に大島さんも抵抗があったそうですが、慣れてからは一発撮りでもミスを恐れず、音楽的に妥協のない思い切った演奏ができるようになって良かった、といった話をされていました。

それとオーケストラ曲を作る際にも、今はオーケストラ音源を使ってMIDIで曲を組み上げるんですね。で、映像に合わせてテンポ取りをして。そのテンポ情報からクリックを作って、本物のオーケストラが録音する時はクリックに合わせて指揮棒を降る。こういう裏事情は全然知りませんでした。

ABILITY Proのデモ

デモステージだったんですが、西脇さんを交えて、という事でガチで見ておりました。しかし、ミュージシャンの方々ってトーク慣れしてますね。エンドーサーとしてのキャリアからなのかもしれませんが。ボーカロイドが操作できるショルキーを使ったデモとかもしてました。ひょっとしてあれ、中身はeVocaloidだったのかな?NSX-39と似たような仕組みで演奏してました。救済ボタンがついてて、歌詞がずれた時に小節頭に戻せたりするらしいです。あと、megpoid v4のデモ曲が西脇さんだったらしく、そのデモ演奏もありました。西脇さん、中島愛さんのライブのバンマスだったのか……知らなかったなぁ。

AMEIによるWeb MIDI / Web Audioを使ったデモ演奏

プロのミュージシャンがChrome上で動くWeb AudioベースのシンセをWeb MIDI経由で演奏する、というもの。嬉しい半面、やっぱり見ていてドキドキする。トラブルあったらごめんなさい、みたいな。で、実際トラブルあって「ブラウザが応答しません」ダイアログが出ちゃってドキドキ……。Rolandの渡邊さんが例によってブラウザベースのVJシステムで映像を出していました。

しかし、レイテンシの低めなOS Xを使っていても、プロの演奏陣から見ると、まだまだもっさりな印象が否めないようですね。まぁ、この辺はソフトシンセが出てきた頃も同じように言われていて今の地位を築いたわけで、おいおい解決されていくのかな、と思っています。

別のステージでも誰かが言われてたんですが、実は慣れの問題も大きいし、レイテンシ含めて楽器なんだよね、みたいな話。確かにアナログシンセとかは立ち上がりが良いのですが、ピアノとかだってメカニカルな遅延があるし、最近何気なく使ってるソフトシンセだって遅延はアナログ時代より大きい。そもそも普段の演奏からして音速350m/sの世界なんですよね。10m離れていれば30msecくらいは遅れてちゃう。だからオケでは指揮棒を見て合わせるんですが、そもそも人間自身の反応速度を考えると、脳が考えてから手が動くまでの遅延のほうが1桁大きい。なので頭の中では常にタイミング合わせるための先出しをしているわけで、楽器側の遅延はそこに若干オフセットを加える程度の差異なんですね。もちろん練習を重ねてきたタイミングがあるので、慣れないと違和感は感じるわけですが。

でもまぁ、そういう事はプレイヤー側が言うからカッコいいのであって、作る側は改善する努力は続けるべきだろうな、とは思います、もちろん。

「DTMステーション Plus!」出張版

あれ、藤本さんまでステージあったのかー、って感じで。なんかこっち方面の知り合いはみんな出し物やらステージやらでしたね。作曲家の多田さんとオーケストラ音源を使った打ち込みの実際みたいなステージでした。多田さんの音楽はあんまり知らないかなぁ、とか思ったけど、天地無用!GXPとか、砂沙美☆魔法少女クラブの人でした。めちゃくちゃ通ってきた道じゃん。最近はプリキュアって言ってたので子供達の耳にも浸透してるはず。ストリングス音源って奏法の切り替えとか普通のシンセにはない特殊なMIDIの使い方をしていて、とっつきにくい印象だったんだけど、デモをみると抵抗なくなりますね。たぶん「本当にこんな風にして使うのかなぁ」といった長年の不安が「あ、やっぱりこれで良いのか」と解決してすっきり。とは言っても、昔持ってたEW/QLとか、最近のOS Xだとインストールできなくて、使える状態にあるオーケストラ音源は今は持っていないのであった。安くなってきたとは言え、年1回くらいしか使わない現状だと、使うたびにアップデートとか、Windowsとか据え置きゲーム機みたいな状況に……。

閑話休題。最後は打ち込みオーケストラに生バイオリンの共演って形のデモで終わりました。

最後に

facebookのコミュニティにも貴重な写真が上がっているようですので、ぜひチェック!2015というタイトルから来年にも期待しちゃいますね。梯さんにも元気で活躍し続けて頂きたい。

しかし、MIDIも30才を越えました。これからどうなるんでしょうね。WWWの世界も最先端って言われ続けてもう25年も経つ技術です。そのWWWも基幹技術のHTTPについて抜本的なメスが入り、1.1から2.0への移行をまずまずの調子で進めています。その一方でもう1つの基幹技術HTMLは苦しみながらも段階的な改良の道を選びました。戦略の違いはプレイヤーの数の違いから来るところなんでしょうね。HTTPならApacheやnginxなどの主要なサーバ、IE/FF/Chromeといった主要ブラウザさえ対応してしまえば、ある程度強引に移行が勧められそうですし、実際にそういうシナリオで進んでいるように見えます。一方でHTMLは世界に無数に散らばるコンテンツプロバイダーに影響する話ですから、例えコストがかかっても泥沼を掻き分けて進むしかありません。

MIDIもここ数年でWeb MIDI、BLE MIDIと応用範囲を広げていますが、基本はエンドユーザ向けの段階的な変化ですね。昨今、音楽産業の中心がレコード会社からライブ運営会社に移ろうとしています。現状ではステージ全体の制御となるとMIDI、DMX、OSC、あとは0MQ使った独自システムの相互運用みたいな感じなんじゃないかな?予算とどこまで実験的な事をやるかによって、その場その場でシステムを組んでいく感じで。ツアーでも、それなりにベーシックな構成でも機材一式をトラックに乗せて回るしかない。お金がライブ主体で回るようになった時に、この辺がどう整理されていくのかは少し興味があります。アマチュアのライブでも自宅で作りこんだ照明データをライブハウスに持ち込んで〜みたいな事ができるようになると楽しいな、という話なんですが。

2015年12月5日土曜日

日本向けの技術的な話題はQiitaに移行

タイトルの通り、技術的な話題、特に日本語で書く記事なんかは、今度はQiitaに書いていこうかな、と思います。ブログの方にはQiitaへのWidgetを貼ることにしました。suinさんがQiitaで公開しているWidgetです。

今後こっちは読書くらいしかネタがなくなるかも?

2015年10月22日木曜日

Ubuntu 14.04系のsysctl.conf

なんか最近マシンが遅くなったと思っていたら、どうも/etc/sysctl.confが読まれなくなっていたらしい。とりあえず調べて適切な対処がわかったのでHP Stream 11のカスタマイズの記事を投稿してた手前、メモを共有。

ざっくり見た感じ、/etc/init.d/procpsがsysctl --systemを呼ぶことで設定を食わせている。man的には--systemは/etc/init.d/*だけじゃなく/etc/sysctl.confも読む仕様だけど、実際にstraceしてみるとstatするだけという怪しい挙動。sysctlのバグっぽいので少し追いかけてみた。

% sysctl --version
sysctl from procps-ng 3.3.9

という事なので、procps-ngの更新履歴を調べてみると、それっぽい修正が2回。

sysctl --system loads default config file

この修正前が問題の3.3.9、修正後が3.3.10。ポカミスで常に/etc/sysctl.confが読まれなかったのを読むように修正。ただし、この状態でも/etc/sysctl.confが存在しないとsysctlが異常終了する。

sysctl: Correct stat on /etc/sysctl.conf

こっちが入るのが3.3.11でわりと最近の修正。ファイルがあれば読むし、なければスルーという期待どおりの動作。

という事なので、これを機に/etc/sysctl.d/60-users.confに移動する、という事も考えたのですが、今後のアップデートで一時的に3.3.10の状態になる可能性を考えると、

% ln -s /etc/sysctl.conf /etc/sysctl.d/60-users.conf

としておくのが良さそう。

2015年10月15日木曜日

TAKADA BANDと旧姓たかださん

セカンドライブのお知らせ

3×3 EYESやBLUE SEEDの楽曲を中心としたTAKADA BANDの曲をガッツリ演奏しちゃうバンド、旧姓:たかだのばんど。なんとセカンドライブでは本家ボーカルの三松さんから直々にリクエストされた楽曲を演奏しちゃうらしいぞ?

ライブ情報ページはこちら。2015年11月15日(日) 17:00、大塚Hearts+にて。ダメ系という言葉が生まれたその瞬間から活動していた人たちが集結したライブ。言葉を作った本人が言うんだから間違いない。というか、ダメ系バンドアンテナは当時彼らのライブ情報を漏らさず収集しようと思って作った自分用の情報収集ページだったわけで。ここに来て彼らと対バンしたり、同じバンドで演奏したりなんて、ちょっと熱すぎる。

10から20年前にターゲットを絞ったちょっとお年寄り向けのイベントですが、好きな人なら老若男女問わず知ってるような名曲ばかりですので、ぜひ遊びに来てくださいませ。

前回のライブ映像

ファーストライブの映像が公開されています。カッとなったバンマスが全編アップロード。どうでしょ、このmotif rack esの奏でる90年代の響き。

青い月の下でのイントロとか、Silent Surrenderのオルガンや中華なベル音とか。音色には相変わらずこだわってみたつもりです。ドラム・パーカスなんかもですが、結構手数というか音数も半端ないですね。極端な例だと、ギターの手がどうしても足りなくて、事前に録音した演奏をドラム経由でパットから鳴らしたりとか。

そういう仕込みとか試行錯誤もあって迎えたファーストライブでしたが、ライブを通してメンバーの呼吸もあってきて。セカンドに向けた練習では、さらに一歩踏み込んだ練習ができてるんじゃないかと思います。そんなわけでセカンドライブ、よろしくお願いします。



2015年10月1日木曜日

2015年8月/9月の読書

8月に5冊、9月に11冊。9月は育休だったんだけど、料理にハマったりしていて思ったよりは読書に時間を使わなかった。でも、今期は読んで心に残る本の比率が高かったねー。レビュー件数がやたら多いもの。

教養

「国家の品格」を読んで、学生の頃に憧れていた教養人のイメージを思い出した。
きちんとした文化人としても人格を形成せずに、論理だけを振りかざすことがいかに無粋か。自己弁護のための論理、成果主義という名の差別。
日々直面して頭を悩ます矛盾の数々について、頭を冷やして考え直す良い機会になった。成功しているからって正しいとは限らないし、真似して同じ結果が出るわけでもなし。誠実に生きるのが一番かな。

「現代語訳 武士道」は国家の品格の中で触れられていて気になって手にとった一冊。恥ずかしながら、お札にまでなった新渡戸稲造がいったい何をした人なのか、今まで知らなかったのです。
日本人の道徳観を世界に向けて発信した本書は、武士道をキリスト教や西洋の文学、哲学などと比較しながら、決して野蛮なものではなく、欧米の道徳観と比べて勝るとも劣らないものである事を説く。
海外の人と付き合っていると、想像以上に日本への関心が高い事に驚く。経済的な力が衰えてもなお、文化的な側面への興味は尽きない。日本文化に対する尊敬の背景にあるのは過去の偉人の努力の賜物である、と改めて感じた。
開国の時代を生きた人の生の声、切腹を見た外国人による記録など、今を生きる日本人にとっても刺激的な内容が多い。

「図解・標準 哲学史」はしばらく前に哲学が気になった時に図書館キューに突っ込んでいた本の1つ。古代ギリシャはさらったので、もう少し長期に見渡してみようかな、と。著名な哲学者、学派あるいは運動について見開きでざっと説明する感じなので、まったく知らなかった時代に関して記憶に止めるのは困難だった。事前に各論を知っている時代については体系的理解に役立つ。もう一度この手の本を読めば感覚がつかめてくるかな?
しかし、以前は哲学というと物理学が産まれるより前の学問っていう印象が強かったんだけど。これを読むと最先端の宇宙論ですら近世~近代哲学の想像力の域を脱していないというか。わりと最先端科学のルーツになってたりするんだな、と感心した。



科学

「意識をめぐる冒険」は「意識」に関する最新の研究について紹介した本。
ディープラーニングの盛り上がりから機械に人格が生まれるのも時間の問題か、みたいな雰囲気になりつつあるけど。知能と意識の間には、まだまだ大きな隔たりがあるのだと気付かされる。

「動的平衡」は以前読んだ福岡さんの対談本が面白かったので、そのうち読んでみようかな、と思っていた本。「意識をめぐる冒険」と続けて読んだのはタイミング良かったかも。「意識をめぐる冒険」では「人の腸には脳細胞と同じくらい複雑な神経網があるが、果たしてそこには独立した意識が存在し得るのか」みたいな話が出てくるんだけど、「動的平衡」では「ミミズに脳はなく、消化器系の神経網が学習で身につけた反応に従い活動している」という話が出てきて衝撃を受ける。脳と腸の神経網の差異なんて些細なものなのかもしれない。消化器系が進化して意識の所在になってるような知的生命体も在り得るのかも。それこそニコちゃん大王とか。鳥山先生、偉大過ぎるでしょ。

「死ぬまでに学びたい5つの物理学」はちょっとタイトルに偽りあり。この本で学ばせたいのは物理学じゃなくて、偉大な物理学者たちの人生ですね。特殊相対論に関してだけは例外的に前書きに書かれた目的に近く、簡単な数学を用いつつも、きちんと数式で物理を理解しよう、みたいな内容なんですが。それ以外に関しては物理学についての解説書ではなく、パラダイムを変えるような5つの物理学を樹立した物理学者たちの人生・人物像について書いた本でした。端的に言えば、アインシュタインを除き、みんな屈折した人生の中で不幸な最期を迎えている感じなのでアレですが。

「サイコパス・インサイド」はあまりにも日本語訳が酷くて、点数的にはかなり低く付けた本。英語の文法むき出しだったり、直訳だと分かり難い二重否定・三重否定の文が出てきたり、そもそも訳文があからさまにおかしかったり。ちゃんと編集ついてるのかすら疑うレベルでした。加えて原文も時系列で行ったり来たりな感じで。相当に読みづらいです。
ただ、それ以上に内容が興味深いというかズルい。脳のPETスキャンからサイコパスを見分ける特徴を発見した学者(著者)が、別の研究で自分の脳を調べたところサイコパスの特徴を備えていることを知り……という前振りだけで読まずにはいられない。
内容を読むと、本人は自分の正常さを語るつもりで武勇伝エピソードをアレコレ書いてるんだけど、やっぱり本質的に感覚が壊れてて怖いなぁ、と思いました。「車とか何回も盗んだけど、ちゃんとすぐに返したよ、別に悪い事してないでしょ?」みたいなノリ。あと、しれっと書いてあるけどサイコパスの軍事応用研究みたいな話が出てきて、やっぱアメリカ怖いな、と。兵士の脳を操作して社会モードと殺戮モードを切り替えられるようにするとか。確かにちょっと前にペンタゴンで脳神経の軍事応用に関する予算がついた話とかニュースで見た気がする。記憶の操作とか。
最後の節では共感できないなりにも普通の人の感覚を学びながら周囲の人とうまく暮らしていこうとする著者の努力が書かれていて、不活性になっている脳の部位を他の部位で補える可能性も感じたりも。サイコパスって色盲とかと同じくらいの比率で存在するわけで、社会としても何かしらのケアが必要なんだろうな、と思うし。以前読んだ「プライドが高くて迷惑な人」とかに出てくる例もサイコパスっぽいなぁ、ってのが多々ありましたね。世の自殺やイジメにもわりと影響しているんじゃないかなぁ。
そうそう、脳の補完の話では今期読んだ「生まれながらのサイボーグ」って本も面白かったです。レビューからは落としちゃったけど。カメラの映像をCPUの足みたいな電極にマップして舌に載せてると、わりと短時間で味覚で空間認識して物を避けたりできるようになるとか。人間の脳ってわりとセンサーに関しては融通が効くっぽい。




お金の話

有名な「イノベーションのジレンマ」。良書だけど冗長だったので、ざっと読んで構造を理解した。高度成長期の日本が知らず知らずのうちに実行してきた事なんだねぇ。以前読んだ韓国企業の成長に関する本の内容を思い出す限り、最近の韓国企業もこれにならって急成長した気がする。
「図解 山崎元のお金に強くなる!」は資産運用について今まであまりにも無頓着だったので少し勉強。外資でストック貰ってると、 株はそのまま放置してても税金だけは現金からがっつり払っていくので。気づくと資産のかなりの比率を自社株が占めるようになっちゃって。怖い怖い……。



娯楽

「天冥の標」は引き続き読んでます。最近「意識」の本とか読んでるのも、わりとこの影響が大きいかも。

「これが最後のワイン入門」は知識をただ体系的に並べただけ入門書とかと比べると、文化的・歴史的背景を順序立てて説明してくれているので頭に残る情報が多かった。
テイスティングシートとか、今後どうやって楽しみを増やしていくかの良い指標になりました。
あと、美味しい飲み方とかは即戦力の情報。結局、読んですぐにワインセラー買ってしまった。

2015年9月8日火曜日

Boot to CP/M

今更なんですけどね、UEFIを触ってみましたよ。
昔AVR用に作ったCP/MエミュレータをUEFI for x86_64向けに改造して、OS無しで直接CP/Mがbootできるようにしてみました。

Ubuntuだったら以下の手順でbuildできます。

% git clone https://github.com/toyoshim/cp-mega88.git
% cd cp-mega88
% sudo apt-get install gnu-efi
% make -f Makefile.uefi

でcpmega88.efiってファイルが出来るので、EFIのパーティションにEFI/Boot/bootx64.efiって名前でコピーするか、EFI Shellから起動するかでCP/Mが起動します。CP/M用のディスクイメージはEFI/cpmega88/sdcard.imgって名前で用意してください。githubのページで詳しく書いてますが、z80pack用のイメージがそのまま使えます。

QEMUが入ってれば以下の手順でも動作確認できます。

% make -f Makefile.uefi install
% qemu-system-x86_64 -bios OVMF.fd -hda fat:.


OVMF.fdはこの辺から入手できます。

USBメモリとかに入れておけば、UEFI対応のPCに挿して起動するだけでCP/Mが動作します。わー、嬉しい!

2015年8月26日水曜日

Take an Android Chrome tracing from laptops with small storage

./tools/profile_chrome.py is our friend to take a great tracing data from Android Chrome and Chromium. But usually it requires to check out the huge chromium repository that is too large, about 8-GB, to have it in some sorts of laptop devices. This is a note to copy small set of files from an existing checkout to run the tool on another laptop device.

desktop % tar zcvf chromium_tools.tgz \
> ./build \
> ./third_party/android_testrunner \
> ./third_party/catapult \
> ./tools


laptop % scp desktop:chromium_tools.tgz /dev/stdout | tar zxv

The expanded files still need 512-MB of your storage, but would be much better than 8-GB.

2015年8月16日日曜日

2015年6月/7月の読書

また溜めちゃったかなぁ、と思ったけど今月はまだ終わってないので2ヶ月だけだった。6月に6冊、7月に3冊の計9冊から……少ないけど、まぁいっか。

SF

天冥の標は読み続けてます。5巻でいよいよ太陽系外生命体について詳しく書かれる事になり、全ての背景設定が出揃った感じ。6巻がいよいよ三部構成で太陽系を舞台にした一大惨事の始まり。これ書いてる時点(8月)ではPART2まで読み終わってますが、今後も目が話せない感じ。

それとは別に伊藤さんのハーモニーも読みました。こっちも完璧だった。虐殺器官の頃のような文体な未熟さもなく素直に面白かった。国家の品格で言うところの近代的合理精神の限界に対する近未来で起きる1つの皮肉な解、あるいはシンギュラリタリアン的発想の人類補完計画。情報インフラってこういう怖さはあるよなぁ、と思う。まぁ、合理的な判断ってモノ自体が幻想だし。生物の進化の根源も非合理やカオスにあるのでその辺は物語として読む感じ。判断ってのは世界をどの切り口で覗きこむかで決まるもので、絶対的な真実があるわけでもないし。ニューロンだって非線形じゃないと学習できない。しかし、著者の若い死が悔やまれる。

政治・経済

こっちもシリーズで固定化しちゃったけど池上さんの4と5。追いかけるように読んでるわけだけど、近い将来として書かれた話題が、まさに今の問題になっていて、世界が大きく動いているのがわかる。読んでいて面白くないはずがない。最近、常々思うんだけど、人の一生の50-100年って言うのは人の歴史と比べてもずいぶんと長いんですね。日本の歴史で考えても、ある程度しられているのは1500年程度。その1/15程度をリアルタイムで体験するわけで、その間に歴史が動かないはずがない。

Ubuntuチューニング、良かった・悪かった

HP Stream 11向けにやったチューニング、少し時間経ったので振り返り。

swapfs

zramは状況によりけり。2GBでVMに1GB使う時なんかは、zramは切るか128MB×2くらいの構成にしておかないと使い物にならなかった。まぁ、2GB環境でVM使う事自体がアレな気もするので、普通に使う分にはzramを256MB×2くらいが良いのかなぁ、と思いました。
あと、SD Card上にswap作るのは無しかな。zramとセカンダリの内蔵ディスクが良いバランスな気がしました。Chromeからブログ書いてる今この瞬間の状況はこんな感じ。
% cat /proc/swaps
Filename       Type      Size    Used   Priority
/dev/mmcblk0p6 partition 1048572 0      -1
/dev/zram0     partition 242280  133884 5
/dev/zram1     partition 242280  133900 5
% vmstat -s
 1938276 K total memory
 1455064 K used memory
  797620 K active memory
  386564 K inactive memory
  483212 K free memory
   47152 K buffer memory
  445900 K swap cache
 1533132 K total swap
  267812 K used swap
 1265320 K free swap
(snip)

仮想記憶の設定

vm.dirty_background, vm.dirty_ratio, vm.swappinessは前回の設定(5, 10, 20)がわりと良好みたい。まぁ、この辺が原因で書き込み頻度が上がってSD Cardが書き込み寿命に達した可能性もあるんだけど。でも、どちらかというとswapに使ってたこと自体が問題だった気はする。tmpfsも使うのを止めてしまったのは以前書いた通り。メモリに余裕がない中で適切なサイズを見積もるのが難しいのと、ディスク溢れを気にするのが精神衛生上良くなさそうなのと。その一方で苦労のわりに体感的に得をしてる気がしなかった。

ドライバ周り

カーネルアップデートかかる度にWifiが不安定になって面倒。実は先のディスク復旧時に15.04も試したんだけど、そっちは安定してる。輝度調整や音量調整ボタンなんかも完璧。14.04系だとrtlwifi_newを常時置いといてアップデートかかった度にインストールが必要な感じ。Bluetoothは下手に動かすとWifiが動かなくなったりするので最近は試してない。これはBTとWifiがカニのワンチップだからですね。品番別に読ませるファームのROMが必要っぽくて、古いチップ向けには対応されてるんだけど、rtlwifi_new見てもまだ該当チップ向けのファームが含まれてない。

preload / prelink

これも効果は抜群だったんだけど、Chomeのアップデートがかかる度にコマンド打つのが面倒になってやめてしまった。これなしだとApp Launcherの起動に2秒くらいかかるので、本当は使いたいんだけど。パッケージ作り詳しい人なら、パッケージ更新時に自動的に走るように細工したりできるのかな? あと、App Launcherは手動でアレコレしなくてもChrome 44まではchrome://flags#enable-app-listで有効にできるみたい。45からさらに色々なexperimentalが追加されててフラグ良くわからない状態に……。44までで有効にしとくのが楽です、たぶん。

SD Cardが壊れた話

HP Stream 11ネタ。話題が増えてきたのでラベルHP Stream 11を追加してみた。

SD Card故障

以前セットアップしてSD Card上で動かしていたUbuntu 14.04.3なんだけど、VirtualBoxの中でWindows 7にアップデートをガシガシあててたら、なんかディスク不調に。しばらくするとrootfsがread onlyで再マウントされてしまう。当然VM内のWindows 7はディスクに書けずにアップデート異常終了。しばらく原因を調べていると、どうもSD Cardの書き込みができなくなった模様。うっかりLockの爪が……みたいな話なら良かったんだけど、その場合には書き込みはエラーするはずで、今回は成功するものの書けてない。以下、この状況で発生したオモシロ現象。当たり前なんだけど、妙に感心した。

  • SD Card上のswapにデータが入ると、予想不能の発狂モードに突入。色々なものが次々にSEGV。
  • 書き込み量が増えてくると、どこかのタイミングでジャーナリングと実データの矛盾に気づいてEXT4が悲鳴を上げる。こうなるとrootfsはerrors=remount-roでマウントされてるのでread onlyモードに落ちてしまう。
  • read onlyモードではfsckが走るので、簡単な論理故障ならfsckかけてrebootで生き返る。けど、今回は修復が走った後にジャーナリングに異常が残ってcleanにできなかった的なエラーが出ました。
  • ファイルシステム故障かと思い色々手当するも、再起動後には必ず同じ場所まで巻き戻って、同じように自動でfsckがかかり、同じinodeが修復され、同じような故障状態でbootする。
で、本当にSD Cardの故障か調べるためにやった事、いくつか。

まずは該当ディスクに対してbadblocksを-n付きで走らせてみた。見事、全ブロックが書き込み失敗。128GBのディスクだったので完走するには一晩かかりました。まぁ、走らせて寝て起きて確認しただけ。

次にやったのはファイルシステムの確認。読み出しは問題ないので別のLinux上でdd使ってSD Cardのイメージを丸ごとファイルに書き出し。これも時間かかるので注意。dd if=/dev/sda of=sda.imgみたいな感じで。細かいオプションはお気に召すままに。で、ディスクイメージはそのままマウントできないので、以前のストレージ復旧でお世話になったkpartxを使ってパーティションを/dev/mapperに配置。
% kpartx -a sda.img
ってやれば/dev/loopNにsda.imgをマウントして、中のパーティションが/dev/mappers/loopNpMって形で見えるようになる。使い終わったら-d付きでイメージファイルを渡せば開放される。今回は/dev/mappers/loop0p1がswap、/dev/mappers/loop0p2がext4のrootfs。続けてファイルシステム修復。
% fsck.ext4 -f /dev/mappers/loop0p2
で確認したところ、実デバイスで走っていた時と同じような修復が走った。けど、最終的にcleanになった点が故障デバイス上とは違った。実際、二度目を走らせたらエラーは検出されず。

復旧

この時点で一番簡単な復旧は同じメディアを用意してddでコピーする事。新しいメディアに差し替えて起動すれば今までどおりEFI経由で起動するはず。ただ128GBのメディアも安くはないので手元にあった32GBに移植する事にした。128GBでも中身はパンパンだったんだけど、KVM用のイメージだったりChromiumとHaikuのソースコードだったりが大半。こいつらを退避したら32GB以下に収まった。いつも思うけどChromeでかすぎ。で、サイズの違うメディアへのイメージ移植は多少の手間が必要なので忘れないように簡単なメモ。

  1. 小さくしたいファイルシステム内で、目標のサイズに収まるようにファイルを削除していく。パツンパツンでも運用できなくなるので、余裕をもって減らす。
  2. resize2fsを使ってファイルシステムのサイズを小さくする。
  3. パーティションテーブルを書き換えて、該当ファイルシステムのパーティションサイズをファイルシステムに一致させる(か、多少大きくても良い)。
  4. 別メディアを用意して適切なコピー先パーティションを用意する。
  5. ddで縮小した旧パーティションを別メディアの新パーティションにコピー。
  6. 新パーティション上でresize2fsを使って、確保したパーティションサイズ目一杯までファイルシステムを拡張(縮小時にピッタリ同じサイズに収めていれば、この手順は不要)。
各手順を少し補足していく。まずファイルの削減。ディスクのサイズってみんながみんなバラバラな数え方するので、とりあえずざっくり28GBを目標に削減してみた。ファイル削除自体は/dev/mappers/loop0p2をどこかにマウントして作業すれば簡単。適宜dfでサイズを確認。
% fsck.ext4 -f /dev/mappers/loop0p2
% resize2fs /dev/mappers/loop0p2 28GB
メッセージはメモとってないけど、ここで実際に何ブロックまで小さくなったか、とブロックサイズ(4KB)が表示されるはず。ブロック数×4096が実パーティションサイズになるので、次のパーティションサイズ変更の参考に。
% sudo parted /dev/loop0
(parted) unit b           # 計算のためバイト単位の表示に切り替え
(parted) p                # パーティション情報の表示
(parted) resizepart 2 XXX # 2はパーティション、XXXは下で説明
(parted) q                # 終了
pコマンドでパーティション一覧が表示される。今回は2つ目のパーティションが対象。Start、End、Sizeがバイト単位で表示されるので、このSizeがresize2fs時のブロック数×4096になるように調整すれば良い。具体的にはresizepartのXXXをStart+ブロック数×4096とする。第一引数はパーティション番号なので、適宜正しい値を使うのを忘れずに。

新しいディスクもEFIで運用するためにGPTで用意する必要がある。
% sudo parted -a optimal /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary ext4 0 100%
(parted) q
optimal付けとくと、ブロックのアライメントをメディアの物理単位に合わせてくれる。性能に影響するし、手動で揃えるのは面倒なので指定しておくのが無難。これで手順4までが完了。ddはif=/dev/mappers/loop0p2 of=/dev/sdb1以下お好み。最後にresize2fs /dev/sdb1を走らせれば確保した新パーティションのサイズ目一杯までファイルシステムを拡張してくれる。あと、古いメディアではswap領域がloop0p1相当の場所にあってfstabにも相当のエントリが存在していたので、複製した/dev/sdb1をマウントしてfstabから不要になったswapエントリを削除した。

EFIで運用していれば、ddでパーティションを複製した際にUUIDもそのまま複製されるので、ブートストラップ周りのディスク名の修正対応に追われないので楽ちん。blkidコマンドはどこかにキャッシュがあるのか、ddによる複製後も古いUUIDを返し続けるが、実際には正しく書き換わっているので混乱しない事。自分はこれに気づかずgrub.confのrootfs指定のUUIDを書き換えてしまい起動時にrootfsが見つからずにinitramfsの中で起動停止。initramfs上でgrub.confを書き換える苦行をするはめに。この中ってviどころかedすら使えないのね。適当な場所にrootfsを手動マウントして/mnt/bin/ed使うくらいしか思いつかなかった。/mnt/usr/bin/vim.basicとかは共有ライブラリ周りをうまく手当してやる必要があるので少し面倒なはず。自分はed使ったほうが早いのでviはさっさと諦めた。

おまけ:吸いだしたイメージをKVMで起動

復旧には直接必要なかったんだけど、吸いだしたディスクイメージが起動するかKVM上で試してみたのでメモ。こちらはEFI対応とかブートストラップの手当とか、わりと面倒だった。記憶で書いてるので不正確な部分もあるかも。

まずはEFI対応の方法。参考にしたのはtire.retireさんのKVMでUEFI環境のゲストを作る。CentOS向けの説明なのでOVMF.fdの置き場所が違うんだけど、他はそのまま。UbuntuではOVMF.fdの置き場所は確か/usr/share/qemuで通ったはず。

次に起動向けのEFI環境の準備。HP Stream 11ではSD CardはEFIから見えないため、例のSD Card環境ではEFIシステムパーティション、/bootは内蔵ディスクにありました。この辺を内蔵ディスクに頼らないように手当してやる必要がある。まずEFIシステムパーティションは新規ディスクイメージを作成してマウントさせる事で対処。
% head -c `expr 8 \* 1024 \* 1024` /dev/zero > efi.img
% parted efi.img
(parted) mklabel gpt
(parted) mkpart primary fat32
(parted) q
% sudo kpart -a efi.img
% sudo mkfs.vfat /dev/mappers/loop1p1
% sudo mount /dev/mappers/loop1p1 target
% sudo mount /dev/mmcblk0p1 original
% sudo mkdir target/EFI
% sudo cp -rfp original/EFI/ubuntu target/EFI
まず、grubの設定を正しく読み込むために、target/EFI/ubuntu/grub.cfgの最初の行、search.fs_uuidに書かれているUUIDを書き換える必要がある。これはblkid /dev/mappers/loop0p2(吸いだしたイメージのrootfsパーティション)の値を使えば良い。

で、次は/bootの対処。/dev/mappers/loop0p2の/bootは空になっているので、内蔵ディスクの該当パーティションからコピー。
% sudo mount /dev/mmcblk0p5 boot
% sudo cp -rfp boot/* target/boot/
target/boot/grub.cfgには最低限の修正を適用。Ubuntuの起動エントリでlinuxとinitrdの項目が/vmlinuz-...と/initrd.imd-...というルート直下のパスになっており、linuxにはroot=UUID=でmmcblk0p5を指定している箇所があるはず。このroot=UUID=を初段で指定したUUIDと同じ/dev/mappers/loop0p2のIDに書き換え、/vmlinuz-...、/initrd-...を/boot/vmlinuz-...等に書き換えれば準備完了。

KVMから起動するとEFI Shellに落ちる。作成したEFIのディスクがFS0として見えたので、
Shell> fs0:
fs0:\> cd EFI\ubuntu
fs0:\EFI\ubuntu\> shimx64.efi
でgrubのメニューが出るはず。まぁ、何か間違っててメニュー読み込み失敗したらgrubの対話モードからconfig file (hd0,gpt2)/boot/grub/grub.cnf とかで読めるはずなので、tabキーと友達になりながらgrub.cnfを探して読んでみてください。僕はこの段階でbootが空になってる事に気づいて、bootディレクトリのコピーとかUUIDの書き換えが必要なのを思い出しました。一度起動しちゃえばupdate-grub、grub-installを走らせれば、この辺の修正は綺麗になるので。まぁ、適当に。

2015年6月15日月曜日

2015年2月〜5月の読書

プライベートで忙しくなった関係でぐっと読書数が落ちてしまいました。2月から5月にかけて、3冊、9冊、3冊、8冊の計23冊。

政治・経済

1月に続けて池上さんの知らないと恥をかく世界の大問題シリーズ2、3。やっぱり面白い。一部では分かりやすく説明するために、無理やり身近な出来事に比喩してる部分もあって、そこまでは必要無いんじゃないかなぁ、とも思える部分はあった。重要なトピックはシリーズ中にも繰り返し出てくるのでわりと記憶に残ります。しかし、世界ってのは全然平和なんかじゃないんだな、と実感します。あと、ギリシャ問題とか見るとゴールドマンサックスがいかに酷い会社なのかわかる。
続けて藤沢数希さんの2冊。この著者、経済の本は読んでいて手応えがあったので、試しに別の分野も読んでみた。まずは反原発の不都合な真実。やはり文章が面白く、理系ということもありデータがしっかりしていて読んでいて安心。例の震災であれだけの事故を起こしたとは言え、冷静に分析すれば他のエネルギーよりも何桁も安全ですよ、という主張。池上さんの本の内容とも被ってくるんだけど、石油の購入ってのは思っている以上に血生臭い話で。採掘に関して人が死にまくってるのもそうなんですが、普通に米軍の第五艦隊の牽制あっての取り引きなんですね。そもそも原発にしたって、それを持つ事自体が軍事的な牽制の意味合いもあったりする。エネルギーって政治なしには語れないのですね。現実的な解になりうる選択としてはメタンハイドレートあたりに期待できるのかもしれませんけど、環境には優しくないですからね。それに近隣諸国との火種にもなりかねない。クリーンなエネルギーとしては地熱とか日本に持ってこいだとは思うんですが。まぁ、原子力村からの圧力はあるのかも。外資系金融の終わりはまぁ、読み物として。どういう仕組みで自分の給料が決まるのか、改めて冷静な視点から考えられるかも。決して実力に比例するものじゃないんですね。
最後は会社が消えた日。これはもう日本のメーカーに残っている人は絶対に読んでおくべき本。ゴールドマンサックスによって会社が食い荒らされていく様子がまざまざと。この本読んだ後だとRolandのMBO問題なんかもちょっと見方かわってくるなぁ。まぁ、家族経営でダメな経営してたという事実は否定しようがないみたいだけど。あと井植会長の話で、日本は仕組み的に創業者が資本家になる事が難しい。だから会社に同族経営としてしがみつくしかないんだ、という話は当事者の話としては説得力があった。あとは会社内の見苦しい潰し合いとか。サラリーマン上がりで経営に参加させてくと、どこも似たり寄ったりだなぁ、と思いました。残念。
という事で、なんかバラバラに読んでた本が、なんとなく線で繋がるようになってきた気がする。



SF

ここのところ小説は1巻だけ流し読みってパタンが多かったんだけど、珍しくシリーズを追って読み進めてます。巻によってまったく違う内容・文体だったりして著者の多彩な才能に驚きました。特に1巻上下読んでから2巻に移った時は、本を間違えたかと思ったくらい。ファンタジーな舞台からいきなり現代の東京に舞台が変わり、軽い男の話から突然パンデミックについての生々しい話に。共通となるのは主人公が医師という点だけ。と言っても、そこがシリーズの歴史を紐解く上でキーワードになるわけで。最後の方になってようやく2巻が物語の始まりを描いたものだとわかります。3巻はまた1巻のノリに戻って。女装の美少年を中心としたアンチオックスの話。で4巻はまるっきりの官能小説(笑)。ハニカム創世記です。電車で読むのはちょっと気が引けた。


読み物

ホリエモンの刑務所なう。A3とこれを読めば刑務所の面会の様子は双方の視点からなんとなくわかるようになる(笑)。しかし、刑務所の経営改善とか、医療の経営改善以上に起こりそうにない事だよなぁ。
せいめいのはなしは分子生物学の専門家である福岡伸一先生が、各方面の知識人と対談し、それをまとめた本。忙しい人は最後の章にまとめがあります。養老先生との昆虫談話が一番記憶に残っているかな。動的平衡とか擬態とか、進化論とかいう単純な言葉では割り切れない味わい深さが生命にはあって面白いな、と思いました。福岡先生のほうは、またどこかで読もうと思います。たぶん動的平衡の本あたり。
喪失と再起の物語は東北の震災を機に書かれた日本人に関する論説。読んで改めて僕らは第二次大戦とその後の戦後復興について何も知らされていないんだな、と思いました。なんとなく現代史は大学受験の中でもうやむやにされちゃうんですよね。もしかしたら意図的なカリキュラムなのかな。戦後復興とか日本人が頑張ったというよりは当時のトップがひねり出した奇策がGHQの裏をかいて功をそうしたみたいな感じに思える。一方で経産省はこの時の成功体験を根拠に自分たちのコントロールで高度経済成長をもう一度、とか思ってるのかな。黒船対策とかは一消費者としても本当にやめてほしいと思う。もはや日本の製造業は農業と同じ感じで。本当に守るべきなの?というところまで来てしまった感はある。

2015年6月12日金曜日

ライブの告知

久々のライブです。Cri☆siSさんの後ろで演奏させてもらったのが2008年で、この年を最後にライブハウスでの演奏はしてない気がします、僕の記憶が確かなら。会社内のイベントではパーティー会場とかニコファーレでボチボチ演奏してはいたんですけどね。で、活動再開だーっと思った矢先に3人目の子供が出来たので……たぶん一時的な復活に終わる気がしていますよ。まぁ、ともかく告知です。

Magical Girls Fes!!3!! @ 2015年7月5日(日)高田馬場CLUB PHASE

女の子イベントですが、バックバンドとして参加します。300人のキャパがある箱で開催される結構大きめなイベントですね。東京女子流のコピーでキーボード担当。Rolandの音源を限界まで駆使して仕込んでます。でも、生演奏を重視したかったのでシーケンスは未使用。オーガニックな味をお楽しみください。

闇の大感謝祭 @ 2015年8月8日(土)浅草KURAWOOD

こっちも300人弱のキャパがある箱。ライブハウス内でおでん、たこ焼きを売ってたりとか、お祭り騒ぎのイベント。今から演奏後に呑んだくれるのが楽しみで仕方がない。
演奏曲ですが、クラウドと言えば雲、雲と言えば八雲。そんなわけでTAKADA BANDでございます。昔から大好きだったんですが、いざ演奏してみるとドフュージョンなキメばかりで変な汗がダラダラと……。こちらはYAMAHAの音源で90年代サウンドを余すところなく再現。再現度という意味ではあらゆる点で海老反り級を目指しております。

とまぁ、そんなところでしょうか。せっかく久々のステージなのでニコファーレで培ったVJ技術を使いまわそうかと思っています。きっとシンセの演奏に合わせて派手に動く映像が僕の横でチカチカしていることでしょう。Powered by Web GL + Web MIDI on Chrome。

(追記)ニコニコに上がってるこの辺の動画がわりと最後の演奏かも。

2015年5月6日水曜日

HP Stream 11 d012TU その後

しばらくSD Card上のLinuxをメインに使ってますが、ディスク周りで少し設定をいじりました。やっぱりスワップが始まると耐え難い重さになるので。

まずは何はともあれzram。
$ apt-get install zram-config
でインストールしてますが、そのままだとメモリの半分をCPUの数で分割したzramが作られるので、/etc/init/zram-config.conf を直接編集してメモリの1/4だけ使うように変更してます。普通に使ってる分にはデフォルトの設定が良いような気がしますが、kvmで1GBとか持ってく時には標準設定はイマイチかな、と思って。結果256MBのzramが2つ。加えて内蔵ディスクから1GB工面して低優先度の2次スワップに当ててます。けど、やっぱりディスクまでいくと重いので、潔くOOM Killerのお世話になるのが良いのかもしれません。

あと、preloadとprelinkも。
$ apt-get install preload prelink
でインストール。prelinkはChromeに使ってます。あまり知られてない気がしますが、$HOME/.local/share/applications/chrome-app-list.desktop を使うとUbuntuのUnityでもChromeのLauncherが使えます。が、そのままだとメニュー開くのに時間かかっちゃう。
$ prelink /opt/google/chrome/chrome
みたいな感じでprelinkしとくと起動がかなり早くなる。他にも頻繁につかう共有ライブラリ使いまくりな大きめのアプリならprelinkしておくと結構幸せ。

カーネル周りの設定は/etc/sysctl.confにて。
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
vm.swappiness = 20
あたりの設定を入れてます。ともかくディスク(SD Card)が遅いので、なるべくdirtyなページはこまめに吐き出すように、と。でないとメモリ足りなくてディスクキャッシュを追い出すときに固まりがち。あとswapinessは低め。zram入れてからはzramが緩衝材になってくれてるんで不要かもしれませんが、zramない状態だとディスクが常にスワップ関連のI/Oでフルフル。たぶん閾値付近で同じページが出たり入ったりな状態。

ファイルシステム周りはtmpfsを適宜導入してvm.dirty_*設定の副作用をキャンセル。
tmpfs           /var/log        tmpfs   defaults,noatime,size=16m 0      0
tmpfs           /var/tmp        tmpfs   defaults,noatime,size=16m 0      0
tmpfs           /tmp            tmpfs   defaults,noatime,size=64m 0      0
あと/なんかにもnoatimeのマウントフラグを指定しちゃってます。ファイル読むときに、あしあと付けないモードですね。ディスク不可軽減の足しに、ということで。

ベストな設定ってほどにはチューニングしてないんだけど、標準設定よりは顕著に快適になりました。

(補足)/tmpはアップデート時に大きなファイル持ってくる子が多いので、やっぱりtmpfsはやめました。あとbluetoothが動いてないことに気づいて、こいつを試してみたけどNG。最新のkernel branchでも該当チップのsubverが未対応っぽい?無理やり別ファーム読ませたりするとデバイススキャンが動くくらいにはなったけど、同時にWifiが不安定になるので無理せず諦めました。

2015年4月20日月曜日

Chrome 43 beta with Web MIDI

こちらでもアナウンスしたのですが、大切なことなので日本語でも言っておきますよ。しかも、もっと詳しく。

最新のChrome BetaでWeb MIDI APIが標準でサポートされるようになりました。このAPIはAndroid版と全てのデスクトップ版Chromeで利用可能になります。

MIDIはご存知の通り30年以上の歴史を持つ古い規格。よくSMFと混同されがちなのですが、音楽ファイルというわけではなく楽器同士の通信プロトコルです。その通信内容を時間情報とともにダンプしたファイルがSMF。演奏情報を記録する事でカラオケや着メロの楽曲データとして利用されてきた経緯もあり、その印象から(チープな音で演奏される)音楽ファイルとして誤解されがちですが、あくまでもそれは一応用、という事で。

なんでそんな古いものをまた……と思ったそこのあなた。Webも25年近い歴史を持つ古い技術です。垣根を超えてつながることで発展してきた、という意味ではどちらも似た志を持っており、絶妙な割り切りが的を得て発展・成功した仲間です。ここでこの2つが分野を超えて繋がることで新しい応用が広がるかと思うと、なんかワクワクしませんか?

Web MIDI APIはJava ScriptからMIDIの入出力を可能にするAPIです。具体的には電子ピアノやシンセサイザーなどのキーボード類、電子ドラム、あるいはDJ機器からの入力を受け取ることが出来るようになります。一方で、各種電子楽器に対して演奏情報や設定情報などを送信することが可能になります。これにより

  • 電子楽器の音色管理ソフトウェアをWeb上で構築
  • サイトを通じて自動演奏ピアノに曲を提供
  • Web Audioなどで作られたソフトウェア音源をキーボードから演奏
  • 演奏情報をWebからリアルタイム配信
  • Web GLなどを使って作成したVJソフトを演奏情報に同期させる
などがWeb標準技術を用いて実現可能となります。すでに多くの開発者がソフトウェア音源を作ったり、DAWソフトを作ったりしていますが、これからも多くの応用が生み出されていくと期待しています。

今現在ではWeb Audioの実装で先行していたChromeのみがWeb MIDI APIをサポートするブラウザとなっています。が、仕様はW3Cで標準化されており、同じくWeb Audioの実装を持ったFirefoxも開発を進めているところです。IEは今まさにWeb Audioの対応を進めているところであり、今後に期待と言ったところです。

HP Stream 11 d012TU

3万円以下で買えるカジュアルなラップトップ。HPのラップトップはChromebook 11も気に入って使い続けてるんだけど、こういうカジュアル路線が個人的な趣味にドンピシャ。って事で、最近タブレット以外に実機を持ってなかったWindowsの動作確認用に1台入手したのでした。

でまぁWindowsとか言いながらも、おもむろにUbuntuのインストールを始めるわけですが。内蔵ストレージ32GB、メモリの4GBとなるとWindows上に仮想環境作ってもあまり現実的ではない。という事でSD Cardにインストールしてdual boot環境を作ることにしました。実は購入前にこの辺のページを見ていてLinuxフレンドリーなハード構成であることは確認済みなのでありました。

で、いざ作業を始めてみるとUEFIがSD Cardには対応していない様子。USBからUbuntuをインストールしてみたものの、GPTでパーティション切ってSD Card内のEFI Systemパーティションにインストールを指定しても、インストーラの判断かWindows Boot Managerがいる内蔵ストレージのEFIにインストールされちゃう。この時点で一応BIOSからUEFIのBoot設定でUbuntuが選べるようになるのだけど、Grubの起動はするもののLinuxの起動で停止。Grubのコマンドに降りて確認してみると、この時点でSD Cardのストレージは見えていなかった。USBからはインストーラが動いたくらいなので当然Bootは可能。という事でUEFI Shell環境をUSBから起動してみると、やはりUEFIレベルでSD Cardが見えていなかった。

という事で、SD CardからのBootは諦めて別案2つ。

  1. USB 3.0にストレージ挿してインストール:USB 3.0なら高速なストレージが使えるので、USBに逃げるのは悪い手ではない。けど、モバイルで出っ張ったデバイスにrootファイルシステムを置くのは少々不安。ちょっとぶつけただけでpanicしそう、というか昔LOOX Uを埼京線の通勤で使ってた時によく遭遇した。
  2. /bootだけ内蔵ストレージ:/bootなら512MBもあれば十分なサイズなので内蔵ストレージを圧迫する事もない。KernelとinitrdさえUEFIから見えればkernelは起動するし、initrd内に必要なドライバが揃っていればLinux全体のbootにも支障ないはず。
で、案2を採用して作業。Windows 8.1側からdiskmgmt.mscを使ってCドライブのサイズを縮小。512MB分の空き領域を作った。続けて128GBのSD Cardを突っ込んで外付けDVDドライブから14.04.2のインストーラ起動。パーティション設定になったら、さきほど開放した内蔵ストレージ(/dev/mmcblk0)から真ん中にぽっかり空いた先ほどのスペースを使ってext4を/boot用に確保(/dev/mmcblk0p5)。あとは/dev/sdaとして見えてるSD Cardに4GBのswapを作って、残りは全部/用にext4で確保。boot loaderのインストール先は指定方法として/dev/mmcblk0(MMC MBG4GC)を指定すべきなのか、/dev/mmcblk0p1(Windows Boot Manager)を指定すべきなのか迷ったけど、どうせ指定を無視してWindows Boot Managerの横にインストールされることを事前の試行で知っていたのでSD Cardである/dev/sdaを指定。
再起動後は電源入った直後にESC連打でメニュー。F9からUEFIのメニューにいけばUbuntuがGrub経由で起動できる。F10でBIOSからUbuntuをデフォルトにしておけば、Grub経由でWindowsもchainloadできるので便利。

その他、デバイス周りの注意点。
  • 内蔵無線LANは初期の14.04ではサポートされていない模様(from まさおのブログ)。14.04.2では問題なく使えてたけど、数時間に1度くらいの頻度で接続が切れて、無線アクセスポイントの認証に失敗するようになる。上記ブログで紹介してるGithubのリポジトリから最新版(2015/4/19現在)をとってきてインストールしたところ安定して動作している模様。
  • 初期状態&インストーラではタッチパッドに問題があった。カーソル移動くらいなら大丈夫なんだけど、一度クリックするとそれ以降クリックが効かなくなる。マウスの設定でタッチを一度無効にしないと外付けマウスも効かなくなるので注意。インストール中は外付けマウス使いました。この情報によればKernel 3.19で修正されているらしいが、こっちの情報によると3.16。手元ではインストール後の3.16.0-34-genericへのカーネルアップデートで治ったので、バックポートされたのかも。
  • インストール後にバッドノウハウページ発見。なかなか良い情報源。輝度調整ボタンとか音量調整、飛行機ボタンなんかは、14.04.2では標準で使えてます。
  • Caps Lockはこっちの方法で。swapcapsにするとShiftとの同時押しで誤動作するので潔くnocapsにしました。
  • BIOSからVT有効にできるのでKVMとかVirtualBoxとか入れて遊ぶのも一興。とりあえずHaiku OSのx86安定版とtrunkのx86とx86_64を入れてる。
という事で、なかなか良いマシンなのではないでしょうか、と。

2015年3月10日火曜日

c9save

僕はCloud9のヘビーユーザーだったりするわけなんですが、半年ほど前に某プロジェクトのリポジトリを某所のhgから某所のgitに移行した際、未commitなテスト用データを手違いで削除してしまいました。で、なんとなくディレクトリを眺めていると

workplace/.c9revisions

ってディレクトリがあって、ここにworkplace以下に置かれているファイルに関して.c9saveという拡張子のついた編集履歴ファイルがあったりします。内容としては、1編集履歴がjson形式で改行なしの1行に詰め込まれてて、それが編集履歴の数だけ行で並んでいるだけ。

各編集履歴は
ts: 更新時刻(JSならnew Date(ts)すれば戻せるUNIX時間)
length: 編集後のファイルサイズ
patch: 編集情報のArray(だけど、必ずサイズは1。バグでうっかり余分にネスト?)

編集情報はさらにパッチ情報のArrayになってて、パッチ情報は
start1: 編集開始位置
start2: 編集終了位置だと思うけど、基本的にstart1と同値
length1: 編集によって削除される文字数
length2: 編集によって追加される文字数
diffs: 差分情報のArray

差分情報はサイズ2のArray(いわゆるpair)になってて、最初の要素が差分モード、2つ目の要素が差分データ。差分モードは-1が削除で1が追加。0がイマイチわからないのだけど、たぶんスキップか置換。length1とlength2がモード0のサイズを両方に加味しないと辻褄が合わなくなるので、たぶん置換?

まぁ、そんなわけで、ざっくりコードを書くとそこそこデータの復元はできるんだけど。どうにも途中で落ちてるトランザクションとかあるような気がする。存在しないデータを削除しようとする編集データとかが出てきて、フォーマットの解釈が間違ってるとしてもこうはならないだろ、みたいな。まぁ、復元したかったデータはおおよそ復元できたので良いけど。

ちなみにこの辺の履歴システムは最近になって実装が変わったみたいで、最近のファイルは.c9revisions使ってません。ちょろっと試した限り、うっかりファイルを消しても同じファイル名で作り直すと、昔のデータも含めて履歴(File > Show File Revision History)から辿れるみたい。ただ履歴データはわかりやすいところには置いてなくて、どっかのdbにバイナリで突っ込まれてるような雰囲気。

と言うことで、どうでも良いメモでした。誰かのお役に立てばラッキー、くらいな。

2015年2月4日水曜日

2015年1月の読書

1月はbooklog的には30冊とかなってるけど、大掃除の際に未登録だった本を何冊かまとめて突っ込んでるので、読んでるペースは実質同じくらいのはず。今年もモチベーション維持のために当面は面白かった物をピックアップしていこうかと。

教養

まずは先月の続きでファスト&スロー。著者のノーベル賞に繋がったプロスペクト理論についても登場する下巻。下巻は特に意思決定におけるバイアスの除去について重要な知見を与えてくれます。経営者、実業家、会社の幹部の人たちは当然知っておくべき知識だと思いますが、あまり浸透していないのかな。
逆に広告代理店や弁護士、代議士なんかは、この辺りの知識を巧みに使って商売してるのだから、世の中ちょっと怖いな、と思いました。バイアスを避けるためではなく、意図的にバイアスの罠にハメるような応用しかされていない。ちょっと表現を変えるだけで、一般人の判断を麻痺させる事ができるわけだから、ちょっとした殺戮器官ですよね。
それこそ義務教育で主要科目として教えておかないと、まともな民主主義は機能しないな、と思いました。

二つ目は標準模型の宇宙。これも良書だった。理系大学生レベルなら安心して読める程度に書かれてます。図解知識本よりちょっと本格的に素粒子物理について理解するには良い本。ゲージ理論の概要理解に向けて各章で必要な知識を身につけ、最後に現状での実験物理の限界について書かれて終わる感じ。次の世代の加速器がエネルギー10桁上げないと意味あるデータが取れない、とか言われると、ちょっと今後の劇的な進展は望めないのかなぁ。本の中で2010年までには発見できるはずと言われてたヒッグス粒子も正式な発見は2013年にずれ込んだし。素粒子物理の研究がサチってくるとなるとSFな未来を夢見る者としては寂しいですね。

次は政治経済って事で池上さんの知らないと恥をかく世界の大問題。シリーズになってて、これは1冊目。政権交代直後に書かれた本なので、その辺に対する期待に関しては残念でした、という感じですが。
アメリカ中心の経済の終焉、という前提で今後の世界の動きを読んでいく。宗教の違い、資源の流れ、教育のあり方などに焦点を当てています。
気軽に読めて、わりと面白かったので、続きもボチボチ読んでいこうかと。

で、教養系の最後はプラトンのソクラテスの弁明クリトン。ソクラテスの弁明だけ読むと、ソクラテスって本当に実在したのかなぁ?という印象がありました。ツァラトゥストラのイメージに近い……まぁ、奇人ですね。
内容としては、無神論により若者をたぶらかしているという理由で死刑の裁判にかけられた時の弁明演説の記録、という体裁ですが。実際はプラトンによる創作要素も多分にあるのでしょう。
デルポイの信託で世界一の賢者と言われ、反例を示すために賢者、エンジニア、アーティストを戸別訪問。賢者に対しては、「自分の知らないことがある」事を知っている自分の方が賢いとし、エンジニアに対してはなるほど専門知識では負けるが、それによって全てにおいて賢いと勘違いしている点で愚かだと批判、アーティストは自分の作品について、まわりの批評家の方がよほど作品を理解しているため、信託を伝えるための巫女同然で本人自身には価値がないと見下す。結果、国中の知識人に嫌われ、告発されてこの裁判。見事なとんでもっぷりです。基本、死刑には狼狽えず、裁判でも媚びず、と毅然とした態度で望むわけですが、判決後の「お前らは呪われる」的発言はちょっとした綻びですね。
クリトンはその後の話。死刑執行前夜に脱走を進めるクリトンと、それを断固として受け入れないソクラテス。国家と法についてあれこれ議論して、死刑を受け入れる、と。しかし、当時ソクラテスは70歳と聴くと、そこまでの迫力は感じないかな。そういう意味でも史実なのかもしれないけど。
どちらかというと対話篇としての芸術的な価値というか。力強く迫力のある文体が魅力でした。

娯楽

最初の一冊はこんなにも優しい、世界の終わりかた。たぶんbooklogで作業してたら目について図書館キューに入った本。娯楽小説としては久しぶりのお気に入り。実に見事なタイトルで。現代に生きる人の心を文字通り洗い流すような、素晴らしい話でした。本の主題は冒頭ですぐに出てきますが「限りある生命を強く意識した時、人間は優しくなれる。誰もが平等に死んでいくのに、どうしてみんな虚栄心に蝕まれながら、他人を傷つけて生きていくんだろう」そんな素朴な思いを最後まで貫いて書かれた話。つまらない文章でまとめてしまえば綺麗事のように見えてしまうかもしれませんが、そんな事実をたんたんと、それでいて心に迫るように訴えてくる。悲しい話なのに、読んでいてとても暖かくて優しい気持ちになり、何度も涙を流してしまいました。
(海外出張中に読んだので寂しくなってしまった……)
話の雰囲気としてはファンタシーというかお伽話のような不思議な空気に包まれているのですが、ときおり心理学や進化論にも思いを寄せてしまう、そんな描写が妙に心を現実に引き止めて、単なる物語以上の物として心に焼き付きました。
技術的な面では、構成にも凄く感心してしまって。とくに1章から2章に移る展開は見事だな、と思わず読んでいて震えてしまいました。葉鍵好きにはお勧め。

次の1冊は飛ぶ男……むしろがっかりの1冊なわけですが、敢えて取り上げたいな、と。まだ安部公房が存命していた頃、インタビューなどで執筆中として語られる事も多かった、いわゆる「スプーン曲げの少年」と呼ばれていた作品の遺稿。カンガルーノートより前から書かれてたにも関わらず、結局完成しなかったんですよね。残念。もっともカンガルーノートの完成度の高さを考えれば、あちらが世に出た事の方が結果としては良かったのかも。ともあれ、未完の遺作が出版されている事を知りドキドキしながら手に取りました。
冒頭から文字通り飛ばしてるな!って期待以上の出だしだったんですが、途中から文体も視点も乱れ出して、中盤ではメモ書きの寄せ集めレベルの体裁。これから話が始まるか……ってところで前半終了。
後半は同じアイデアを元にした別テイクにも見えるけど、どうにも文章が稚拙だし、何よりも話の構成が素人くさすぎるので、後から弄られた部分かなぁ。まぁ、ちょっとこれはないな、と。
出版を楽しみに待っていた作品ではあるけど、この状態だったら公開しないほうが良かったのでは、と思ってしまった。あるいは未完なら未完らしく走り書きを集めた資料集くらいの方が価値はあったと思う。まぁ、ファンとしては冒頭だけ読んでも物凄いインスピレーションは受けたわけですが。それでも寸止めどころか、ドタキャンくらいのガッカリ度なので、一言言わずにはいられない……といった所です。

娯楽最後の1冊は天冥の標。日本製のシリーズ物のSF。アンドロイドは電気羊の〜の話を書いた後に同僚から勧められてキューに入りました。ノリとしては日本falcomのRPG(特に英雄伝説系)が好きなら気に入るかも、って感じですね。なので僕も気に入ってます。無理に遠い未来を書かず、宇宙に移民してはいるけれど、諸般の事情で科学技術が停滞して宇宙大航海時代のロストテクノロジーに頼ってる……みたいな設定はアリかな、と思いました。主人公が医者というのも日常と非日常をスムースに繋げて話を展開するのに一役買っていると思いました。同僚から感想聞かれて真面目に答えたら「萌え」回答を期待されてたみたいで……ちょっとキャラの読みがずれたか。個人的には研修のセールスのお姉さんがめちゃくちゃ好みでした。関係無いですが。

芸術

Computer Historyは良くある類のレトロなコンピュータの写真集。安藤さんが紹介してたのを見て、表紙が気に入ったので勢いでジャケ買い的な。

交響曲入門は交響曲の形式についての説明を期待してたんだけど、どちらかと言えば成り立ちについての簡単な歴史的背景。あとは時系列にそって作曲家とエポックメイキングだった交響曲について、個別に評論。楽典はある程度納めてる人向けの本ですね。
とは言え、わりと知らなかった事も多くて。例えば、もともと交響曲はクラシックの本流じゃなかった、というのは意識した事なかった。声楽→協奏曲というのが境界を中心とした本流の流れで。舞曲→オペラ→シンフォニア→交響曲という傍流がベートーヴェンの深刻な取り組みで器楽の集大成という地位を確立。でも、ほとんど同時に完成形になってしまったので、その後も時間で見るとそれほど長い間クラシックの中心にいたわけでもない。
協奏曲の方は、ピアノ協奏曲みたいな単一ソロのイメージが強いけど、声楽からの流れで言う協奏曲は交互にソロを取るリトルネロ形式。Jazzとかわりと協奏曲に近いよなぁ。
ブラームスとブルックナーがほぼ同時期の人ってのも音しか聴いてないと想像もできない事実ですね。期待とは違ったけど面白く読めました。

2015年1月16日金曜日

Apple IIのハイレゾグラフィック

Woz様の回路、電車でぼけーっと考えてたら理解できたので忘れないうちにメモ。

よくある説明がこれ。柴田さんのApple II本(ブログエントリの末尾参照)より引用。VRAMから1バイトデータを取り出した時、最上位ビットが色セット切り替え、残りの7ビットで7ピクセル分の色を表現。ビットが0なら黒だけど、1だった時にはピクセルの位置によって決まった2色のうちの1色が表示される。連続して表示すると混ざって白く見えます、的な。
実はこの説明は厳密じゃなくて色は0/1のデータで表現しているわけじゃなくて、隣り合うピクセルの0→1、1→0というビットの立ち上がりと立ち下がりに反応して発色される。0か1かというのは本質的ではない。連続するビットに関しても、紫緑の場合と緑紫の場合だと色の滲み方が変わるはず。

で、原理の説明。まず色副搬送波の周波数が3.58MHz、それに対してドット・クロックが2倍の7.16MHzになっているのがミソ。適当な場所で1ピクセルだけビットが立ってる場合を考えるとドット・クロック2倍という事で色副搬送波と半周期だけ同期するパタン①と、同じく半周期だけど位相が180度ずれて同期する(値が反転している)パタン②の2種類が起きうる。ドット・クロックは2倍だけど、フリップした時に出てくる周波数成分はきっかり3.58MHz。これがそのまま色副搬送波の位相のずれとしてデコーダに検出される。
2ピクセル連続でビットが立った場合はどうかというと③と④で微妙に違う現象が起きる。③の場合は最初のビットの立ち上がりで色副搬送波と位相が一致、立ち下がりで反転。という事で連続するピクセルの左端が0度に相当する色に滲み、右端は180度に相当する色で滲む。で中間部分については色が打ち消し合ってるわけではなく、単に3.58MHzの周波数成分がほぼ0になってるため、彩度が0と判定されて白が発色される(位相差が色相、振幅が彩度に相当)。④の場合は逆で左端に180度、右端に0度の滲みがでるはず。

で、さらにApple IIでは最上位ビットを使って2つの色パレットを切り替えられる。これは14.32MHzの入ったFFを通して90度遅らせた信号を作り、遅延なしの2つの信号と合わせてセレクタに入力、最上位ビットでどちらか一方を選ぶことで実現できる。遅延付きが選ばれた場合は90度と270度、遅延無しが選ばれた場合は0度と180度の色相が取り出せるという仕組み。実際にはここで説明した位相差に加えて45度程度のずれがあり、それによって橙(45度)、紫(135度)、青(225度)、緑(315度)の4色が発色されるようです。周辺回路の遅延差がそのまま見えちゃってる感じなのかな?

という事で、本来は4割くらいの出力でカラーバースト出した上で、なだらかな輝度変化に3.58MHzに変調した色情報を載せるというのが正しいわけですが、手抜き回路では全力でカラーバースト出してやって、白黒デジタルなパタパタ出力のタイミングをちょっと前後に振ってあげるだけで独特のデジタルカラーが再現できるっぽい。これって実はマイコンでApple IIのビデオ回路を再現するのも夢じゃないって事ですね。14.32MHz-14bitのSPIが使えれば簡単に実現できる。VRAM1画面4KBって事を考えるとLPC1114あたりが適任。ビデオ専任のサブブロセッサとして任せてVRAM読み書きはメインプロセッサからI2C経由で。もしかしたらMegaZ-80Kで文字表示してたのよりタイミング的に楽かも。


2015年1月9日金曜日

Getting ARM OABI environment after such a long time :-/

Background

Unfortunately, I need to use very very old ARM OABI Linux environment to salvage data from XFS used by broken NAS. XFS is designed to be compatible between platforms, but for some reasons, it was incompatible only with ARM OABI environment. As you may know, OABI used a curious middle endian and struct layout. It's a very old story around Linux kernel 2.6.1x, or so. But, it affects my HDL-GT1.0 actually. Linux box can not show any file entries even if the disk can be mounted, and xfs_repair has no power to solve the problem.
FYI, the first KURO BOX that was sold in Japan also used ARM OABI, but later versions used ARM EABI, AFAIK.

Basic Strategy

Install debian 4.0 (etch) onto QEMU. Etch was already out of maintenance, but this is the best choice since HDL-GT1.0 looks using the Linux that was based on it. Also there is enough information to install it onto QEMU, e.g. this site (*1). Debian 5.0 (lenny) provided two versions, OABI and EABI for ARM, but the next 6.0 (squeeze) had only EABI. Anyway these all were out of maintenance. There were no benefit to choose others.

How to Install

I used Ubuntu 14.04.1 with QEMU that is installed by "apt-get install qemu". Basically, I just followed the way described at (*1). But some tricks were needed since the information was already out of date, and meanwhile, etch was removed from the official place.

Boot files

Two mandatory files distributed at (*1) were also removed. I found them from web.archive.org. I can download them, but it seems that the server sometimes return 404 against them. Anyway, if you were lucky enough, you will be able to get them.
 Also, etch's initrd.gz was fetched from archive.debian.org/. The first initrd.img-2.6.18-6-versatile was used after installation, and the second initrd.gz was used on installation.

Use a manually chosen mirror site

Since etch was removed from the original place, I should specify an archive site manually. Mirror site name was archive.debian.org, and the path was default, /debian/. Here are some screen shots.
If you chosen one of default mirror sites, the installer will ask you to pick up a version of debian distributions from recent two or three choices that must use EABI.

Other Notices

In the page (*1),  that picture for the question "Continue without installing a kernel?" looks like the answer should be "<No>". But "<Yes>" is the right answer here.
Also, there is a critical issue to me. The provided kernel did not enable xfs support. So, even I install xfsprogs package and so on, xfs can not be mounted. According to the article, I can build kernel by myself. So, I'll try it next.
FYI, xfs_repair seems not working fine, but anyway it does not crash. Here, QEMU is launched with additional flags "-hdb HDL-GT-md13.img" here.
# apt-get install xfsdump  # it will install dependent xfs related packages including xfsprogs
# xfs_repair /dev/sdb  # it works somehow?

Kernel build

Let's build a kernel to support XFS. The system contains minimum set of packages. So, we need following packages to build the kernel at least. There are two choices, 2.6.18 and 2.6.24, but choose 2.6.18 that the original installation bases on.
# apt-get install make gcc linux-source-2.6.18 kernel-package build-essential libncurses5-dev initrd-tools
Then, prepare source files.
# cd /usr/src
# tar jxf linux-source-2.6.18.tar.bz2
# cd linux-source-2.6.18
Kernel 2.6.18 has a config template file for versatile. Here, we use it as a baseline, then enable XFS support in addition.
# make versatile_defconfig
# make menuconfig
In the menu, enable a following items. I'm not sure if this is the exactly necessary and sufficient condition. But at least, it is sufficient:)
  • Bus support ---> PCI support [built-in]
  • Device drivers ---> SCSI device support ---> SCSI device support [module]
  • Device drivers ---> SCSI device support ---> SCSI disk support [module]
  • Device drivers ---> SCSI device support ---> SCSI tape support [module]
  • Device drivers ---> SCSI device support ---> SCSI generic support [module]
  • Device drivers ---> SCSI device support ---> SCSI low-level drivers ---> SYM53C8XX Version 2 SCSI support [module]
  • File systems ---> Ext3 journalling file system support [module]
  • File systems ---> XFS filesystem support [module]
  • File systems ---> XFS Quota support [built-in]
  • File systems ---> XFS Security Level support [built-in]
  • File systems ---> XFS POSIX ACL support [built-in]
  • File systems ---> XFS Realtime subvolume support [built-in]
  • File systems ---> Filesystems in Userspace support [module]
  • File systems ---> Pseudo filesystems ---> Virtual memory file system support (former shm fs) [built-in]
  • File systems ---> Pseudo filesystems ---> Tmpfs POSIX Access Control Lists [built-in]
  • File systems ---> Pseudo filesystems ---> Userspace-driven configuration filesystem (EXPERIMENTAL) [module]
  • File systems ---> Native language support --> Japanese charsets (Shift-JIS, EUC-JP) [module]
  • File systems ---> Native language support ---> NLS UTF-8 [module]
then save and exit the menuconfig. Let's build the kernel.
# make dep
# make modules && make zImage && make modules_install && make install
# mkinitrd -o /boot/initrd-2.6.18.img 2.6.18
Now dependent modules should be installed into the internal file system, and kernel and initrd images that can be specified on launching QEMU are created. The kernel image should be placed at arch/arm/boot/zImage, and initrd image is /boot/initrd-2.6.18.img as you specified at the last command. I copied them to the host machine via scp. After shutting down the emulated ARM system, launch the system again with these new images, as
# qemu-system-arm -M versatilepb -kernel zImage -initrd initrd-2.6.18.img -hda hda.img -hdb want-to-read-fs-in-xfs.img -append "root=/dev/sda1"
The resolution of the boot console is finer than the original, and linux logo is not used. But anyway, it boots. Once you login the system, it will support XFS correctly, and it is exactly the XFS that is not compatible with current XFS. In my case, I launched QEMU with "-hdb HDL-GT-md13.img", then it can mount the image correctly.
# mount /dev/sdb /mnt
# ls -l /mnt
drwxr-xr-x 6 root  root  88 May 16  2012 share
drwxr-xr-x 6 root  root  88 May 16  2012 spool
Yep!

Lennyは新しすぎた

Etchでkernelの設定を変えて色々試してる間にLennyのイメージを見つけたので試してみた。XFSがデフォルトでオンになってたので期待したんだけど、互換性問題が修正された後のバージョンのようだ=Etch/OABI XFSは読めなかった、という残念な日記。

https://web.archive.org/web/20130605075901/http://people.debian.org/~aurel32/qemu/arm/

web.archive.orgにLennyのARM OABIイメージが残ってた。README.txt通りに起動すればXFSが有効になったカーネルで起動できるので、-hdbでイメージを渡せば普通にマウント可能。ただ、xfs_repairとかインストールされてないので、ちょっと作業が必要。

ちなみに運が良ければ、
# mount /dev/sdb /mnt
# ls -l /mnt
でメタ情報含めて正しく見えれば勝利。駄目だったらツール使ってfile systemの修復。まずは、このままだとaptが使えないので、/etc/apt/sources.listを編集。
deb http://archive.debian.org/debian/ lenny main
を追加すればOK。
# apt-get update
# apt-get install xfsprogs
あとは程度次第だとは思うんだけど、
# xfs_repair /dev/sdb
これで駄目なら
# xfs_repair -L /dev/sdb
あたりをマウント解除した状態で実施。で、僕の場合は最初から最後まで治らず。例のページにあったように shareというディレクトリ名は出てくるけど、メタデータが壊れて見えてる状況。xfs_repairはエラーなしで綺麗に終わったんだけど。

HDL-GTはEtchらしいのでバージョン揃えて試す作業を継続してみる。こっちは配布されてたイメージでXFSがONになってないので、kernelとinitrd.imgを作り直して見てるんだけど、boot中にpanicが出て、少しずつ修正しながらもうちょいでinitが走り出しそうなとこまで来たとこ。QEMU内でのkernel buildに時間かかってTATが……。

追記:HDL-GTのkernelは2.6.12.6ベースで予想通りOABIを使用、XFSまわりのkernel configは以下の通り。
CONFIG_XFS_FS=y
CONFIG_XFS_RT=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_SECURITY is not set
CONFIG_XFS_POSIX_ACL=y

2015年1月8日木曜日

12月の読書

12月は14冊。読み終わらなかったもの、全巻読み終えてないものとかあるけど、わりと面白い本が見つかった。ちなみに年間通算では141冊。

娯楽

Apple II本は参考になるかな、と思って読んでみたんだけど、思いの外面白かった。同僚がAppleの歴史の中で語られたりしていて、やっぱすげーなー、とか思った。
しかしWozはやっぱり凄いけど、バランス感覚はないんだろうなぁ。気持ちは凄くわかるんだけど。技術的な資料としても価値のある良い本でした。

続いて成毛さんの歌舞伎本。教養としての歌舞伎を丁寧に説明しているし、何よりも読んでいてワクワクしてくる。読み終わると同時に歌舞伎手帳とオペラグラス、そしてチケットを購入。年末に見てきましたけど面白かった。これは確かに趣味として良いかも。しかし客層に驚いた。もちろん年配の方がメインではあるんだけど、20代くらいの若者も沢山いた。クラシックコンサートなんかよりずっと活気ありますね。

教養

ファスト&スローは認知心理学の権威による著書。
人の判断にまつわる研究の成果を詳しく記した本。ファスト&スローと言われると脊髄反射と脳かと早とちりするけど、実際には脳を構成する2つの思考システムのこと。ファストは直感的な判断を司る自動運転プログラム群、システム1。スローはいわゆる人間的な知的決断を下すシステム2。それぞれのシステムの持つ長所と短所。問題の解決に関してそれぞれのシステムがどう関与するかが詳しく調べられている。
上巻で見られる大きな結論としては、人の脳は統計的に正しい判断を行う事が大変難しいシステムだ、という事。本質的には偏見を避けることはできず、余程の注意と教養を持ってしても是正は困難。
また、言ってみれば脳の脆弱性とも言える問題点が数多く紹介されているが、これらの弱点を突くことで印象操作や洗脳といった事がいともたやすく実践されうるし、実際マーケティングなどの分野では既に広く使われている。政治や宗教に転用されれば、戦争や虐殺にも繋がる。ある意味、核より恐ろしい研究かもしれない。
有名な平均回帰の話や、投資のプロの実力は猿以下という話も書かれていた。
しかし脳の仕組みというのは思っている以上に組織や計算機の構成法に似ている。それがこの世界の物理法則の上でやっていく最適な方法だからなのか、人の持つ先入観が計算機の設計や脳の理解に影響した結果なのかは興味深いところ。下巻は入手済みで1月に読む予定。

ギリシャ哲学の方は、哲学っていうより、ギリシア逸話集くらいの気持ちかな。結果として哲学者の話が多く出てくるってくらいで。しっかし、ソクラテスがこんなアホっぽい理由で処刑されてるとは知らなかった。巫女のお告げで一番頭の良い人間って言われて、それを信じなくて神への不遜を裁かれたのね。カッコよすぎ。あと、ドラクエIIIの巫女の元ネタってこういうとこにあったのね、とか。気軽に楽しめた一冊。

経済

資本論はGoogle Booksの安売りか何かで入手した電子書籍。マルクスの私生活の様子も含めて書かれてました。マルクスがこんなダメ人間だったとは思わなかった。働いたら負けだと思ってる、でもメイドさんは必須。そして奥さん大好きだけど、メイドさんも孕ませる。贅沢癖があって、でも同時に貧困に喘いで子供を栄養失調で亡くす。そして生涯に渡りエンゲルスにパラサイト。字が汚すぎて資本論2巻移行は本人の死後何年もかけて清書されて出版される、などなど。共産主義のイメージ変わるわー。

最後の本は半導体業界本。ところどころ筆者の私怨が見え隠れするのがマイナスポイント。素直といえば素直なんだけど。
イノベーションをただの技術革新だと勘違いしている日本の問題は同感。基本的には強い技術(シーズ)は強いマーケティングとセットにならないと機能しない。常にメリット・デメリットを併せ持つ新技術が、マーケティングの力を借りてキャズム越えを実現するのが破壊的イノベーション。
ピーターの法則については著者も独自に気づいたって点を強調してて、内容に関しては甘いな、という印象。いまや誰でも知ってることだし、その対策については色々と企業の中で実践されつつある。
成長率の話になると、少子化、高齢化問題は避けて通れない。高齢化問題に対して人道的な解を見つけるのは難しいな、とつくづく思う。特に社会の縮図として高齢化問題が濃縮された大手企業、今そこに若者が飛び込むのは自殺行為以外何者でもないな、と思わざるを得ない。大手は一度潰すのが正解なんだろうな。
あと、著者の経験談から、組織再編って局面では有能な経営者は本当に有能なんだな、と思った。けど、事業の未来を読む、という局面では、やはり誰がやってもサイコロなのかな、とも。それこそ猿より無能な一流トレーダーじゃないけど。

2015年1月6日火曜日

HDL GT(つかの間の)復旧

今後必要になる情報とも思えないけど、一応記録を。

我が家で使ってる安全なストレージは主に3種類あって

  • HDL-GT(250GBx4でRAID5):妻のデジタル原稿、家族の写真とか過去のライブ動画、あと大量の音源など。昔はこれがストレージのメインだったけど、数年前にRAID崩壊して業者に復旧してもらってからは新しいデータはほぼ置いていない。
  • サーバマシン(2TBx2でRAID1):キューブマシンにHDD詰め込みたくないしで復旧も楽なRAID1のミラー構成。サーバ上で動いてる複数のVMのイメージもこの上に置かれてる。HDL-GT復旧時のコピーもここにあるにはある。HDL-GT側をnfs serverとしてハックしてあって、autofs使ってrsyncできるようにしてあったんだけど、syncはマニュアルでごくたまに。今思えばautofsが悪さしてた可能性も。
  • Google Drive:最近は写真とか勝手にクラウドにいってくれるし、データとかもドライブにぽいぽい突っ込んでる。VMイメージ置くには辛いけど、それ以外の用途ではこいつが本命。
で、HDL-GTが再びRAID崩壊を(半年ほど前に)起こして、このまま引退してもらおうと思ったら年賀状のための住所録がそこに、という話。すみなせん、今年の年賀状は例年以上に遅かった。

崩壊としてはそれほど酷い状況じゃないはずで……というのも、HDL-GTをほとんど使ってないのと、そもそも一番上のスロット1の受け側が壊れかけててディスクに異常がなくても頻繁にRAID再構成が起きてたような状況でした。今回はOSハングから強制リブートした際に、スロット1が再構成中、さらにスロット3のタイムスタンプがズレていて同期できない、というもので、おそらく物理的には破損してないはず。この辺(検討の際に色々と参考にさせてもらったページ)にディスク構成について詳しい説明がありますが、システム周りのパーティションは4台全てでミラーした4重化RAID1で、4台中3台以上が一致してないとブートしてくれなくなっちゃうという。せっかく4重化してるなら多数決で良きに計らってくれれば嬉しかったんだけど……。OSハングは具体的にはtelnetするとloginプロンプトまではいくけど、ログイン時にToo many open filesが出てbashがあがらないという状況でした。

で、目論見としてはmadamでスロット2〜4を強制的に同期させればブート可能かつデータのRAID5も再構成可能な状況になるよね、という期待。あとはバックアップしてから作業するか、適当にトライして失敗したらデータは諦めるか、なんだけど。ちょっと住所録失うのは怖かったのでバックアップする事に。3TBのディスクを1万ちょっとで購入して、作業後はサーバの定期的なバックアップに流用する事にしました(ミラーだけだと心もとないので)。

作業に使ったマシンはWindows 7と共にほぼ忘れ去られていたHP ProLiant ML115。こんなこともあろうかと、というやつですね。なぜかこういう事する人はみんな持ってる不思議なマシン。

まずはバックアップの手順。Windows 7からダウンロードしてきたUbuntu 14.04.1のイメージを焼いてパワーオフ。違いがあるかわからないけど、イメージはサーバ版を使いました。念のため。SATA1のディスクを新しい3TBのものに差し替えてDVD起動&インストール、パワーオフ。
続けて、SATA2/3にHDL-GTのスロット1/2を追加した状態でSATA1にインストールしたUbuntuから起動。
# dd if=/dev/sdb of=/opt/backup/HDL-GT-slot1-sdd ibs=512 obs=512 conv=noerror,sync 
# dd if=/dev/sdc of=/opt/backup/HDL-GT-slot2-sda ibs=512 obs=512 conv=noerror,sync
で、終わったらSATA2/3のディスクを抜いてをスロット3/4のディスクに差し替えて

# dd if=/dev/sdd of=/opt/backup/HDL-GT-slot3-sdb ibs=512 obs=512 conv=noerror,sync 
# dd if=/dev/sde of=/opt/backup/HDL-GT-slot4-sdc ibs=512 obs=512 conv=noerror,sync
これで、うっかりしてもやり直しはきく。ちなみに各コマンドは250GBのデータをコピーしてだいたい1時間ですね。コピー元はどちらもSATA2/3を使ってるんだけど、hotplugで差し替えたらきちんと別の名前が付いてくれました。SATA1(sda)は起動に使ってるシステムのディスク。なので1回目がsdb/sdcで2回目はsdd/sdeをifで指定。ofにはHDL-GT-に続けてスロット番号-本来のデバイス名sdd/sda/sdb/sdcを指定してます。なぜかスロット2/3/4/1の順に名前が付いてたみたい。さらに、前回の崩壊からの復旧時にスロット1/2は500GBのカートリッジになってた模倣。そう言えば、在庫なかったんで500GB使いました、とか言われた気がする。当時はラッキーとか思ってたけど、今回2時間余計に時間かかっただけでメリットは何もなかった(コピー後にサイズ見て思い出した)。

で、次はRAIDの救済。ちなみにHDL-GTで検索して「RAIDの復旧」として説明しているページがいくつかあるんですが、復旧と言ってもHDL-GTを初期状態に戻してまたRAIDサーバとして使えるようにする作業の説明であって、データのサルベージではなかったりするようなので要注意です。とりあえずはHDD全部外してUbuntuのDVDから起動してお試しモードでスタート。mdadmが入ってないので
# apt-get install mdadm
でインストール。今度はSATA1-4にスロット1-4を挿します。mdadm --examineでディスク名が一致するよう、2/3/4/1の順で挿します。で、念のためにmdstatを確認……して驚く。
$ cat /proc/mdstat
Personalities : [raid1]
md5 : inactive sdd5[1](S) sdc5[3](S) sdb5[2](S)
      1590144 blocks
md10 : inactive sdd6[4](S) sdc6[3](S) sdb6[2](S)
      725768256 blocks
md1 : inactive sdd1[1](S) sdc1[3](S) sdb1[2](S)
      626304 blocks
md2 : active sdd2[1] sdc2[3] sdb2[2]
      409536 blocks
おぉ、さっそく出来上がっちゃってる!追加する順番を気にしたかったので、一度全部解除。
# mdadm --misc --stop /dev/md1
# mdadm --misc --stop /dev/md2
# mdadm --misc --stop /dev/md5
# mdadm --misc --stop /dev/md10
で、ここから比較的安定してたはずの3本を使ってRAIDを構成。
# mdadm -A --run --force /dev/md1 /dev/sda1 /dev/sdb1 /dev/sdc1
$ cat /proc/mdstat
Personalities : [raid1]
md1 : active sda1[0] sdc1[3] sdb1[2]
      208768 blocks [6/3] [U_UU__]
unused devices:
うまくいってるようなので、残りの一本も追加。
# mdadm --add /dev/md1 /dev/sdd1
$ cat /proc/mdstat
Personalities : [raid1]
md1 : active sdd1[1] sda1[0] sdc1[3] sdb1[2]
      208768 blocks [6/4] [UUUU__]
unused devices:
他のデバイスも同様に復旧。
# mdadm -A --run --force /dev/md2 /dev/sda2 /dev/sdb2 /dev/sdc2
$ cat /proc/mdstat
Personalities : [raid1]
md2 : active sda2[0] sdc2[3] sdb2[2]
      409536 blocks [6/3] [U_UU__]
md1 : active sdd1[1] sda1[0] sdc1[3] sdb1[2]
      208768 blocks [6/4] [UUUU__]
unused devices:
# mdadm --add /dev/md2 /dev/sdd2
$ cat /proc/mdstat
Personalities : [raid1]
md2 : active sdd2[6] sda2[0] sdc2[3] sdb2[2]
      409536 blocks [6/3] [U_UU__]
      [========>............] recovery = 41.5% (169984/409536) finish=0.0min speed=84992K/sec
今度は最後の一本で同期が始まったけど、この程度なら一瞬で終了。md5、md10も同様にsda5,6/sdb5,6/sdc5,6から構成して別途sdd5,6を追加、しばらく同期待ちをする事で問題なくactiveになりました。で、次が緊張の一瞬。
# mdadm -A --run /dev/md13 /dev/md10
こいつもエラーなくあっさりactiveにできました。で、ここからが問題。参考にしたサイトではこいつをxfsでマウント
# mount -t xfs /dev/md13 /somewhere
してあげれば、少なくともshareが存在することがわかる、と。あるんですが、我が家の場合はマウントするも中身は空。XFSはジャーナリングがアーキテクチャ依存なので、xfs_repair使って云々、みたいなことがあちこちで書かれてるんですが、そもそもxfs_repairかけるとxfs_repairがcrash。なんか、他の人とは根本的に違うようです。

で、結論から言うと、この段階でHDL-GTにディスクを戻せば完璧に復活しました。なのでxfsが読めなかった件は忘れるつもりでいたのですが……ここで問題発生。住所録を読み出してバックアップのrsyncをかけたら……また死亡。今度は電源が飛んで本気の死亡状態のようです。風前の灯火だったのか。

という事で、どうやらxfs問題と向き合うしかないようです。で、以下は調査と推測の入り混じった結論になるのですが、
  • XFSは基本的にはプラットフォーム非依存なのだが、昔懐かしのARM OABIの環境において意図しない互換性の問題が存在していた。32-bitのmiddle endianだったり、structがpackされてたり、と癖のあるABIだったのが敗因か。
  • ARM OABIからEABIの移行でXFSが飛ぶ問題があちこちで報告されている。
  • HDL-GTを買ったのは2006年。まだOABIが主流だった時期。玄箱はOABI、玄箱ProはEABI。
  • 推測:微妙に読めたり、xfs_repairで復旧できてる人たちはEABIに移行後の後期のHDL-GTシリーズを使っていたのではないか。
  • 推測:OABI環境ならmountできるに違いない。
そんなわけで、玄箱に繋げて読もうとしたんですが、そもそもSATAポート空いてない&玄蔵使ってUSB経由で接続すると認識されない。間に入ってるSCSI仮想レイヤあたりで3TBがうまく扱えてないのか。という事で、次は何を試そうかな、というのが昨晩くらいの状況。運のいい人にとってはここまでの情報でも役に立つかもしれないので、ひとまずpublish。