Tumblr は広告がけっこうひどくなってきて、日本語の扱いも相変わらずおかしいので、Ello に移行しました。

Ello でも Markdown が使えるので便利です。

初めて npm に自作のパッケージをパブリッシュしたみたけど、簡単過ぎて震える。遅延評価を使ったレイジーな XML 構築ライブラリです。

まあ、これ以外には CPAN しかこの手のパッケージレジストリは使ったこと無いけど、しかしまじでコマンド 1 行でパブリッシュできるし、ウェブサイトに反映される間で待たされることもない。

というわけで、みんなも使ってみてね! libxmljs-lazy-builder

Koa はいつの間にか generator を使うのをやめて async/await という非同期の新しい言語機能を使うようになっていた。これらは言語的にはライブラリを使ったシンタックスシュガーで、どちらかというと generator よりも面白みが少ない気がするけど、それで済むのなら generator 要らない子ということにもなる。

ただ、言語仕様が特定のライブラリの API と強く結びつくと、それは本質的にキーワードが増えることと同じ(たとえば、JavaScript では配列は Array というクラスのインスタンスなので、Array という名前自体はキーワードではなくても、アプリケーションで Array という名前を使うことはできない)なので、なんとなく納得いかない気もするけど、それが最近の言語の特徴とも言えるかも。

インターネットにつながらねええええええ。

ドイツで電車に乗っていると自転車とかデカいベビーカーとか犬とかよく乗ってくるけど、特に誰も嫌な顔をしないし、車椅子用のスペースがあるのでそこの近くにいた人は進んでその場所を明け渡したりする。でも日本だとベビーカーを電車に乗せるときには畳んで赤ちゃんは腕に抱えなければいけないらしい。そのほかにも、ベルリンだとなぜか電車に乗るたびに、バイオリンやらギターやらの演奏を突然始める人がいて、基本的に他の客はあまり反応しないけど、文句も言わないし、演奏後はチップを渡す人もわりとよく見かけた。静かにしていたい人には迷惑極まりない。

日本ではベビーカーは折りたたむのが「マナー」、携帯電話で話さないのが「マナー」、犬や自転車がそのまま乗ってくるのは、ちょっと想像するのさえ難しい。

でも別にドイツ人が特別心が広かったりするわけではない。短気な人、怒りっぽい人はたくさんいるし、お行儀の悪い人もたくさんいる。日本人みたいに愛想笑いをしないので、余計に怖く見えることもある。

なのでこの差はどこからくるのかなと考えていたんだけど、ぼくの今の仮説は、みんな既にいろんなことに我慢していて、他人の迷惑を受け入れる余裕がなくなっているのではないか、というものです。

日本人がみんなで守っているマナーは、マナーというよりもルールになってるけど、それはそれで素晴らしい。ただその分、みんなそれぞれ少しずつ心理的な負担をしているようだ。ひとつひとつは小さな負担でも、社会生活の中のあらゆる場面でいろいろな事を我慢していると、それだけでもう限界近くまできているのではないか。

ただ、ドイツ、というかたとえばフランクフルトの人に日本人と同じようなルールを守らせることはできるかと考えてみても、ちょっと想像できない。いろんな人種や宗教や言葉の人が混ざっている地域なので、そもそも不文律というのは成り立たなそうだし、仮に全てのルールを明文化して壁に貼っても、そんなの気にしないという人がたくさんいて成り立たなくなるだろうと思う。

そう考えてみると、日本人は、東京のような大都会でさえ、人がすごく均質的なんだと感じる。

均質なのは、いったんその中に入ってしまえばわりと快適だけど、そこにうまく入れない人には悪夢だ。社会に順応できないといじめられるし、順応しすぎると搾取の対象になる。日本で生きていくのはそういうバランスがすごく難しい。

均質というのと少し矛盾するようにも見えるけど、ぼくはこれは、日本人が競争を重視することの表れではないかと思う。同じルールで同じスタート地点で、みんなが一斉に走り出す。上位の数パーセントはエリートになり、下位の数パーセントは自殺したり社会から身を引くことで淘汰され、残りの多数のちょうどいい具合の人たちが社会のマジョリティとしてこの国を動かしている気がする。

ぼくはその競争に生き残れなかったので、昔はだれもやりたがらなかったソフトウェアエンジニアになり、いろいろな幸運が重なったおかげで、今ではなんとか自分の居場所を見つける事ができた。そういう立場なのでバイアスはかなりあるけど、それでも日本人の競争体質はちょっとまずいんじゃないかと思う。

競争というのは他人と同じ条件でレースに参加する事で、端的には他人が作ったものをパクって、同じ市場のシェアを少し奪う事だ。全く新しい事を始めるよりも、既存の技術と市場からほんの少しの分け前をもらう方が、賢いように見える。

資本主義は資本の蓄積を前提に成り立つのに、完全競争下ではすべての収益が消滅する。

これは、ピーター・ティール 『ゼロ・トゥ・ワン 君はゼロから何を生み出せるか』 という本からの引用だけど、これ自体は経済学で昔から信じられている事だ。何かをパクって競争に参入するとき、ぼくらはもっと強くこの事を意識する必要があるように思う。競争が低価格化へ走れば、より安く作るために労働が搾取されるし、高級化、高機能化へ進めばイノベーターのジレンマが口を開けて待っている。

起業家が一〇〇〇億ドル市場の一パーセントを狙うと言う場合は常に赤信号だと思った方がいい。

この本はとにかく競争を避け、漸進的な改善ではなくブレークスルーとなる技術を開発して、そこに全てを賭けろと言ってる。とくに、この著者の投資先であるテスラについては詳しく書いてあって面白い。その中でも、米国が再生可能エネルギーの支援をし、そこに多数のスタートアップがぶら下がった中での、次の部分は特に印象に残った。

だけど、じゃぶじゃぶの補助金が無限に流れ込んでくると誰もが思い込んでいた中で、テスラCEOのイーロン・マスクはこれが一度きりのチャンスであることを見抜いていた。

いろいろ過激な書き方はしているけど、概ね『イノベーションのジレンマ』と『キャズム』の内容に重なると思う。大きな市場を狙うならまず小さなところから始めなくてはいけないというのとかはキャズムに詳しく書いてあるし、真に優れたプロプラエタリな技術を確立せよという内容はイノベーションのジレンマにたくさんの実例とともに書いてある。

他方で、リーン開発はダメだと言っているけど、著者は少しだけ誤解があるような気がする。リーン開発はこれといって長期的な計画を持たずに、当てずっぽうな改善と計測結果を頼りに漸進的な成長をするものだと言っているけど、これはよくある勘違いだ。単に「かんばん」を使えばいいというものではない。リーン開発の考え方はそもそもトヨタのものであり、トヨタ生産方式はオイルショックを元気に生き抜いたかなり型破りのやり方なので、その根っこのところをよく見直す必要があると思う。

Xcode のコミット画面に出てくる差分、よく見たら行単位じゃなくて文字単位の差分が表示されている。(2 行を 1 行にまとめたのがちゃんと差分上でもわかる。)

抑圧と制約と創造性について

そういえば何年か前、しばらくプレステも Wii U もいまいち売れずに、Xbox 360 と PC がもっとも活発なゲームのプラットフォームだったとき、外国のゲーム制作会社の人が「今の日本のゲームはぜんぶクソだ」と言っていたのを思い出した。小さいころファミコンなどに親しんだ人も、大人になって日本のゲームがダメになってがっかりしていたところから出た言葉のようだった。それからしばらく経って今度は逆に PS4 がバカみたいに売れて、Switch も未だに生産が間に合わないくらいに売れてきた。数年前に日本のゲーム開発がダメだと言われたとき、日本人に特有の構造的な問題がいろいろ指摘されたけど、逆に今の PS4 や Switch の人気は日本人の独特の感覚からしか生まれなかったのではないかと思う。

なので個人的には、創造性というものはいつ何がどこから出てくるか、常に分からないと思っているし、いろいろと理由をつけてもっともらしく分析する人もあまりあてには出来ない。Switch が出る少し前にも、任天堂は今すぐ新ハードの開発なんか止めてモバイルにシフトすべきだともっともらしく書いていた金融アナリストみたいな人がいたと思うけど、あの人はいま何をしているんだろう。

ここしばらくはゲームに関連する業界で働いているけど、割と日本と海外の両方をみる機会がある中で、確かに日本は「ガラパゴス」だと改めて感じた。ガラパゴスのものはガラパゴスでしか生まれ得ない。ただ、本物のガラパゴスと違って、ごくまれにガラパゴスから他の国に飛んでいくやつがいる。それが日本のアニメだったりゲームだったりすると思うけど、それは単にグローバリゼーションという一言ではなかなか片付けられない複雑さがありそう。

少し前にサイバー大学でアニメ制作工程の講義を受けたけど、その時に感じたのは過密なスケジュールで限られた資源で作ったからこそ、高く評価される作品が生まれたのではないかなということだった。例えば、テレビは 1 秒間に 30 コマの画像を表示できるので、アメリカのアニメなどは 1 秒分の映像を作るのにちゃんと 30 枚の絵を描くけど、日本のアニメの場合はそこを 7、8 枚で済ませるらしい。また、できるだけ絵を描く作業量を節約するために同じ絵を何度も使いまわす。ただし同じ絵を使う場合でも違った見え方になるように、カメラワーク(映像の構図のことではなく文字通りフィルムに撮影する時の物理的なカメラの使い方)や背景の絵の使い方などで常に工夫し続けているらしい。またアメリカのアニメの場合は先に声優が声を録音して、その声に合わせて絵が動くようにするけど、日本の場合は先に動く絵を作って、それにあとから声をつける。なので、声優は映像にうまく合わせるための独特のスキルが求められたりする。

資金や資源上の制限が多いからこそ創造性が発揮できるというのは、むかしからいろんなところで言われてきたことだとは思うけど、日本の場合はさらにそれが当てはまるように思う。ある程度資金があると作るのは楽になるかもしれないけど、中間管理職レベルの人が多数入ることで全体的に品質よりも問題を表面化させないことが重視され、何かあっても自分に責任が及ばないようにするという強いインセンティブが働いてしまう。その点、金も人も十分にない場合は、藁にもすがる思いで新しい方法を試してみるだろうし、トラブルの時こそ人の人間性が現れるので、一緒に困難を乗り越えた仲間とは信頼関係を持ちやすい。なのでぼく個人としても燃えている現場で働くのは割と好きだったりするけど、ただ燃えている原因が人間関係だったりすると大変辛いので、もうそういう仕事はしたくないという気持ちもある。

チェコはドイツの東隣の国の一つで、昔はヨーロッパの文化の中心であり、ルネッサンスから今に至るまでの様々な美しい建築様式の建物が残っていたりする。でもこの国はしばらくソビエト連邦に支配されていて、その間はチェコ語による演劇などの芸能活動が禁止されていたらしい。しかし一つだけ例外があって、人形劇だけはチェコ語で上演する事を許されていて、チェコ語なのでかなり言いたい放題の事が言えたらしい。そういう事があったので、チェコでは今でも人形劇が盛んでプラハには人形劇用の国立劇場まである。ヤン・シュヴァンクマイエルはそんな時に生まれた影像作家だった。

シュヴァンクマイエルの影像はものすごく独特だ。粘土やマリオネットや人やその他いろんなものを使って、主にストップモーションアニメーションで変態的な影像が続く。よくこれだけおかしな事が思いつくなと思うくらいで、観ている間中、普段使わない部分の脳を刺激され続けるような感覚になる。

で、ソ連が崩壊してチェコとスロヴァキアもそれぞれ独立して、民主主義の平和な時代がチェコにも来た。シュヴァンクマイエルはこれまで以上に自由にのびのび表現が出きるはずだと思ったけど、楽しみにして渋谷の小さな映画館で観た最新作は、なんというか、いまいちだった。普通のサイコ映画みたいになってた。これを観たとき、制作者には悪いけど、芸術にはそれなりの抑圧が必要なのではないかと思ってしまった。

日本は戦後はずっと民主主義の資本主義社会だけど、十分な収入や家族のある人でさえたまに過労で死ぬくらい、生命の危機が常に身近にある社会でもある。日本にはまだ強い抑圧があり、その意味ではまだまだ創造的な作品が生まれる基盤があると言えるかもしれない。ただできれば、貧しくもない人が死ぬのはそろそろなくした方がいいし、生命の危機まで追い詰めなくても創造性を発揮できる方法を模索していく必要はあると思う。

arm64 アーキテクチャの iPhone で関数呼び出しをしているところのディスアセンブリ。1 枚目の画像は普通の関数呼び出し。2 枚目は同じ関数をデリゲートのメソッドとして呼び出すところ。
1 枚目は普通にスタックに引数をプッシュして BL(関数呼び出し)命令を実行している。(ブレークポイントの直前のところ。)
2 枚目の方は引数をスタックに積むのではなく、レジスタに格納して関数を呼び出して(BLR... arm64 アーキテクチャの iPhone で関数呼び出しをしているところのディスアセンブリ。1 枚目の画像は普通の関数呼び出し。2 枚目は同じ関数をデリゲートのメソッドとして呼び出すところ。
1 枚目は普通にスタックに引数をプッシュして BL(関数呼び出し)命令を実行している。(ブレークポイントの直前のところ。)
2 枚目の方は引数をスタックに積むのではなく、レジスタに格納して関数を呼び出して(BLR...

arm64 アーキテクチャの iPhone で関数呼び出しをしているところのディスアセンブリ。1 枚目の画像は普通の関数呼び出し。2 枚目は同じ関数をデリゲートのメソッドとして呼び出すところ。

1 枚目は普通にスタックに引数をプッシュして BL(関数呼び出し)命令を実行している。(ブレークポイントの直前のところ。)

2 枚目の方は引数をスタックに積むのではなく、レジスタに格納して関数を呼び出して(BLR 命令)いるように見える。

呼び出し先の関数は可変引数を使いたいけど、これだとデリゲートのメソッド定義内で va_arg が明後日の方向を指してしまうのでクラッシュするか謎の挙動をする。可変引数を使っていなくても同じ関数を通常の関数とデリゲートの実装の 2 種類に使いまわすと壊れるような気がするけど、そんなことはないよなきっと。

iOS 11 のアプリ作るために arm64 の関数呼び出しの ABI を調べてるけど、まだよくわからない。