退職しました

f:id:puhitaku:20200331185235p:plain

2年と2ヶ月勤めたGROOVE X株式会社を退職しました(正確には4月13日まで社員で、4月1日からは有給消化)。

理由

会社の業務とは別にやりたいことが次第に大きくなってきて、それが現在の会社の方向性とは違ってきたというのが理由です。もちろん社内での会話とか考察をしばらくやって、数ヶ月考えた上で決断しました。

やりたいことというのはやはり低レイヤーです。入社するときに思っていた「消費者に直接届くハードを作りたい」は目的ではなく手段というのを自覚し、前職のときから好きだった低レイヤーを改めて目的として捉えなおしたというか、そんな感じです。

LOVOTも2018年に比べればありえないくらい安定してますし、そもそもローンチしたし、ということで「後ろ髪を引かれつつ」とかはなく次のステップに突き進めそうな感じです。おおむね前職を出た時と同じような前向きな気持ちで出ていくのでまあ良いんじゃないでしょうか。ここらへんはでなり id:denari01 の金言「逃げで転職をするな」が今回も活きてます。おかげでしっかり考察できました。

やったこと

入る前から宣言していた「低レイヤーをやりたい」をおおむね突き通せました。2018年に入社して最初のタスクだった

  • Xilinx UltraScale+ ZynqMPの評価基板でLinuxをブートさせる(Yoctoをビルドするだけに見えるがロジック合成も入れると意外と大変)

にはじまり、

  • 評価基板に載るOSを自力でDebianに載せ替える
  • チームでDebianを育てて必要なdaemonやらを載せる
  • カーネルを改造する・新しくドライバを書く
  • FPGAで物理層を生やしてはオシロとにらめっこ

をひたすら繰り返してました。

2018年の夏にZynqMPの載ったカスタムボード(LOVOTの頭の中に入ってるやつの初期版)が上がってきて、生産にGOをかけるため大急ぎで土日でロジックを合成しLinuxをポーティング、ブートしたシリアルを拝めた時の高揚感は忘れられないですね。

そこから2019年の夏ぐらいまではひたすらアナログとデジタルを行き来したり低レイヤーのバグ潰し係として動きつつ、やはりチームで必要な実装をやっていきました。

2019年の夏から冬までは周辺機器のLinuxポーティングとdaemon書きをひたすらやり、2019年末から現在まではもっぱら細かいバグ修正、問題切り分け、ドキュメント書き、引き継ぎをずっとやってました。

低レイヤー以外で特筆すべきは、C拡張を含むPython 2→3移行の話(2018)や、APTとの共存に特化したvenvラッパーを書いた話(2019)のように、Pythonについても随時知見を蓄積し外部発表できたのが良かったです。社長含め全社的に外部発表に寛容なのが助かりました。先日の日経RoboticsのGROOVE X特集にも名を連ね、しかもvenvラッパーの gxenv の名前も載ったのは超嬉しかったです。もともと厳格にクローズドな環境で開発してたプロダクトなんで、ここまでポートフォリオ的なものが築けるとは思ってなかったのでほんとよかったです。

あと関係ないけど社内バリスタ(笑)を2年間ずっとやってて、ここ1年は特に師の存在もありだいぶペーパードリップの腕も上がりました。

これからやること

これからは、平日の3〜4日程度働き、残りは低レイヤーの興味のあるトピックをちゃんと掘ってちゃんと成果として出す日々になります。

元々は、自分の時間を確保したいという動機から完全フリーになるつもりでした。ところが以前より手伝っていたヘマタイト株式会社でこの話をしていたら、うみさま id:umisama がご厚意で声をかけてくれて、幸いにも時短社員かつリードエンジニアとして雇ってもらえることになりました。やはり正規雇用というのはありがたいもので、国保とか入らなくて済むのが超ありがたいです。

低レイヤー方向のアウトプットとしては、既に電子辞書のSharp Brainのハックが形になりつつあります。これからBrainを通常利用可能なLinux UMPCとして仕上げていこうと思ってるので、他のトピックとともにご期待ください。

心に残ったバグ、心に残った開発

ここからはオマケです。とあるエスパー級のエンジニアが語っていた「心に残ったバグ」というのが面白かったので、自分も真似して挙げておきます。情報量が多いので、詳細を知りたい方は直接聞いてくださいw

バグ: 5分〜1時間の幅でランダムにKernel Panicする

対応: SPIの物理層のバッファが小さすぎて異常な頻度の割り込みが起きてたのが問題→バッファを増やして解決

SoC周囲のマイコンと超高速な通信をしているが故の不具合でした。ちなみにXilinx社も未知の問題だったらしく、Forumで報告したら中の人に感謝されました。公式Q&AであるAnswer Recordに登録するとかなんとか。

バグ: USBメモリの読み書きは正常だがマイクやUSB DACをつなぐと音がぶっこわれる

対応: ZynqMPのXHCIホストコントローラをUSB 2.0のみの動作にした時、USB 3.0専用の高速PHYに入れるクロックが生きているとアイソクロナス転送のポーリングレートが正しく生成できなくなるのが問題だった→Device Tree から該当のクロックを消して解決

「えっどういうこと?」と言われそうなわけわからんバグでした。USBメモリのようなバルク転送は通信のペース作りとかないので普通に行けちゃうのですが、音声系デバイスのようなアイソクロナス転送だと厳格なインターバルでポーリングしています。その差が表出していた形になります。

開発: 目のLCDに流す絵をFPGAで力技で生成しGPUの絵と切替えるロジックを組んだ

この実装により、電源投入から目のLCDの描画開始まで10秒〜20秒ほどかかっていたのを、0.5秒ほどに短縮することに成功しました。以下で説明するように、紛れもなく「FPGAでしかできないこと」としてやりがいのある開発でした。

入社した時はまだブートシークエンスへの配慮がまったくなく、電源ボタンを押して十数秒待つと突然目が表示される状態でした。目が真っ暗な状態を0.1秒でも短くするために、FPGAのロジックが読み込まれた瞬間からLCDにLOVOTのロゴを出し、準備が整ったらGPUの絵に切り替える実装をしました。映像信号生成というFPGAの定番ネタに加え、垂直同期に連動したステートマシン付きマルチプレクサを組むという結構な重さ。最終的にLinuxへの結合もできましたし、めちゃくちゃ学びになったと思います。

もちろんロゴ画像を無圧縮でロジックに入れるとデカすぎて入りません。減色して8色3bitのパレットカラーかつRLE圧縮したものをロジックに入れ、描画時にリアルタイムで展開するロジックを書き解決しました。画像のパレットカラー化・圧縮・Verilogコード生成はPythonで全部書きました。

他にも色々ありますが、終わらないのでここまでw

次なるイヤホンが欲しいのでまとめる

f:id:puhitaku:20191207101838j:plain

Chord Hugo 2 + Etymotic Research ER4SRの音が大好きすぎる。

Chord Mojoからのアップグレードに念願のHugo 2を買って、音的にはこの組み合わせで相当満足してしまった。もうDACについては一生これでいいなと思っているが、しかしイヤホンについては音以外も含めてまだ探れそう。そういうわけで、先日eイヤホンにHugo 2を持参していろいろ試聴した。

「モニター向け」の機材

音を仕事にする人は、音を等しく扱う必要がある。音を等しく扱うには、あらゆる音源を脚色無く聴ける機材が必要になる。「脚色無く聴ける」とはなにか?端的に言うと、「人間の聴覚上フラットに聞こえるもの*1」ということになる。私は音の仕事はしていないが、どういうわけかその方面に音の面白さを見出したクチの人間だ。

そういう機材は一般的に「モニター向け」や「リファレンス向け」というジャンルに分類される。「フラット」であることがモニター向けの特徴ともされるが、フラットを謳いつつ高音シャリシャリ低音ドンドコとかよくある話なので、ちょっと毛色が違う。

私が今まで長いこと使っている Etymotic Research の製品は、モニター/リファレンス系ジャンルのメーカーでも際立つメーカーの一つ。ロングセラーの ER-4S と後継機の ER4SR は、「Studio Reference」を謳うプロユースの機材だ(SRはその略)。音響特性のターゲットとなるカーブを公開していることはもちろん、出荷する全個体で音響特性を計測し、測定結果を同梱するという徹底ぶりには驚かされる。

f:id:puhitaku:20200209152354j:plain
所有するER4SRに同梱された特性レポート

ER4SRの惜しいところ

音に関してはER4SRは申し分ないのだが、長いこと「左右の耳の穴の形が違う」ことによる装着感の左右差に苛まれている。やっかいなことに、ひどいときは聞こえ方まで変わってくる。

イヤーチップをスポンジの細めのやつ*2に変えるといい感じになるのだが、残念ながら音や遮音性も変わってしまうため、先端スポンジ+後ろキノコみたいな謎ピースをニッパーで自作したりしている。でもこういう頑張り方はできればしたくない。

この装着感の惜しさに加え、ER4SRの付属ケーブルは機械的な外力に弱い。いわゆる「Shure掛け」をしてずっと使っていると、1年に満たない速さでユニットの根本が断線してしまった。ケーブルを買ってなんとか対処したが、ER4SRに適応するケーブルはあまり数が多くない。

そういうわけで、ER4SRは音と遮音性は良いけど装着感がベストじゃないな〜と感じているのが、別なイヤホンも手を出したい主な動機になる。もちろんER4SRの音は唯一無二なので、手放したり使わなくするつもりはない。

どんな機材が欲しいか

自分で自分の音の好みがわからなければイヤホンの選びようがないので書き出してみる。

ほしい

  • 聴覚特性がフラット
  • もこもこせず抜けがよいが、ちゃんと存在する低音
  • 15~16kHz以降がストンと落ちる、気張らない高音
  • 近い音と遠い音を描き分けられる正確な描写

できればほしい

  • 遮音性
  • 中〜中高音域の量感(ここが目減りすると楽器の数が変わって聞こえるレベルの影響がある)

ほしくない

  • ユニット数での特性稼ぎ
  • 刺さる高音(「ハイレゾ対応」とかいう寒い謳い文句は今すぐやめろ)

見つけた

eイヤを聴き歩くことn時間、ようやく見つけた。

UE Reference Remastered

定価 (IEM): 約15万円

UE RRは、IEMで多分一番有名なベンダー Ultimate Ears のラインナップの1つ。正直これを知るまでUEのラインナップはいまひとつピンと来なかったが、Reference Remastered To-Go *4 はかなり「欲しい」音に近い。

  • 高音と低音共に相対的に強い(まとめ方は上手い)
  • 1k〜5kHzあたり?が相対的に弱く、無機質的
  • To-Goだと装着感も遮音性もフツーすぎてNG
    • IEMの公称ノイズ遮断性能は26dB
    • 音圧にして95%*5、ER4SRと比較すると減衰量に3%ほど差がある*6

実際のところER4SRに「勝っている」という言い方はできないものの、「IEMにできる」というUEならではの特徴がある。ぶっちゃけていうとTo-Goの装着感と遮音性はER4SRとは比較にならないので、本来の姿であるIEMにして初めて対等に比較できるだろう。おいそれとは買えない価格なのが難しいけど!

Focal Clear Professional

定価: 約18万円

イヤホンではなくヘッドホン。Focalのラインナップは正直全然知らなかった。高級ヘッドホンコーナーで「ER4SRみたいなフラットさが好きなんですが」と店員さんに相談して最初にリコメンドしてもらったのがこれ。

  • 低音が極めて素晴らしい
  • 中音域も素晴らしい
  • 高音の量感が少々強めで20kまで強めに残る印象、このシャリつく感じがあまり好きじゃない
  • オープンエアーに近いタイプなので外で使えない

価格相応の音がするものの、高音のファイナライズが少し惜しい。

Sennheiser HD 800 S

定価: 約19万円

こちらもイヤホンではなくヘッドホン。Sennheiserのもうちょっと下のラインナップは特に好みの音でもなかった思い出。しかし店員さんのレコメンド力をナメていた。これはすごい。

  • 低音〜中音域の音作りは素晴らしい
  • 「音場の描写に向いている」とのレコメンド通り、音場重視の音源を鳴らしたときの描写力が良い
    • eイヤの視聴環境はノイズが多くてお世辞にも良くないので本気の評価が難しいのが惜しい
  • 高音はER4SRに対して言えば伸びるため強く感じるが、慣れの問題かなという範疇
  • オープンエアーに近いタイプなので外で使えない

ER4SRの「音源の正確な描写からくる自然な音場感」というより「ドライバーと耳の距離があることによる音場感」の存在が否めないが、まあそれでもいいやと思えるくらい良いヘッドホンだった。

まとめ

どうやら、欲しい音を欲しいままにするためには結構なお金がかかるらしいことは分かった。逆にそれだけER4SRが、こういうリファレンス系の方向では、価格対性能比に優れる数少ないイヤホンだというのがわかった。しかし、装着性・遮音性・音響特性・そもそもの好み、それらすべてを手に入れるのはまだ先になりそうだ。

ところで一つ気付いたのが、「モニター向け」ではなく「リファレンス (reference)」を銘打った機材を探すと割と方向性が合っていたということ。「単に音の誇張が少ないのではなく、人間の聴覚特性に対応したカーブを狙っている」製品群に近づくのかもしれない。まだこの感想に自信がないが、なんとなくそんな感じがする。

*1:人間の聴覚特性は周波数の軸に対してフラットではないので、機材の出力するパワーの分布がフラットだとそれの影響をもろに受けてしまう。これを打ち消す周波数特性が機材には求められる。

*2:よくある灰色スポンジの太いやつではなく、もっと細いうすだいだい色のSKUがある

*3:-35[dB] = 0.0178 なので、 (1 - 0.0178) * 100 = 98.2[%]

*4:耳型を取って作る特注品ではなく汎用品なのでTo-Goの名がある

*5:-26[dB] = 0.0501 なので、 (1 - 0.0501) * 100 = 95.0[%]

*6:人間の音の大きさの感じ方は対数的なので、3%の差は非常に大きい

岐阜でPython教えてきました + 飛騨高山聖地巡礼記

岐阜県は高山市にて「Python Boot Camp in 岐阜」に参加してきました。

pyconjp.connpass.com

今回は柏の葉・茨城に次ぐ3回目のTAということで、2回以上 Python Boot Camp を手伝った証である Python Boot Camp Tシャツをひっさげての現地入りとなりました。

岐阜のPython Boot Campに突然参加した最大の理由…それはなんといっても聖地王国だからです。今回は君の名は。(高山市・飛騨市)と聲の形(大垣市)の聖地を狙って観光半分TA半分で向かいました。結局ミスって君の名は。だけになっちゃいましたけど。

移動など

品川駅からのぞみに乗り、名古屋にて特急ひだへ乗り換えて移動しました。所要時間はトータルでだいたい4〜5時間ぐらい?岡山県の実家に帰るのとだいたい同じ感覚でしたね。

いつものぞみは岡山駅まで乗るのが普通だったので名古屋はあっという間。この移動の時点で既に聖地巡礼は始まっていてずっとハイでした。

特急ひだは台風の影響か人も少ないし、途中の景色がめっちゃ良いので全然飽きませんでした。

ついた

現地に着いて講師の寺田さん、同じTAであるnikkieさん(nikkieさんの参加報告記事はこちら)、現地スタッフの皆さん(スタッフの山ぴ〜さんの報告記事はこちら)と合流しました。そして早速飛騨牛。死ぬほどうまかった。

最高の肉
最高の肉

会場の立地とかとにかく良くて、観光地の中にある良さを強く感じました。マジでこういう場所で仕事したいな〜。

本番

事前の動作環境確認などを済ませ、レクチャーが始まります。

講師の寺田さん。
講師の寺田さん。

進み具合とかは概ねいつもどおりでした。今回はコードを書いたことがないぐらいの初心者が多めだったように感じます。そこはすかさず我々TAがサポートしていきます。

f:id:puhitaku:20190727140103j:plain

途中で実際に手を動かしてもらうことでPythonに慣れてもらいます。その途中で私もPythonの文法や言語機能で遊んだりしてました。今回は with 句に興味を示す人が多かったので、以下のように with でコンテキストを区切る例を作ったりしました。この「精神と時の部屋」は、普段は1秒経つと1秒時間が経過するのですが、 with で精神と時の部屋に入ると経過スピードが1/100になります。減速率は適当です。

gist.github.com

終了後はみんなで片付けて記念写真を撮り、懇親会へ。とある参加者の方から「嫁の友達が君の名は。の方言指導をやってて〜」というびっくりするような話も飛び出して、最高の夜でしたw

f:id:puhitaku:20190727174239j:plain

高山観光

寝て起きて次の日はまず飛騨高山の観光。せっかくの観光地、もちろん食や歴史も楽しんでいきます。飛騨高山まちの博物館は情報量が多く、建物もかつての塩蔵などを改装したもので趣があり良かったです。館内はほぼ撮影禁止でした。まあ仕方ないですね。

博物館によると、高山市はかつて織田信長や豊臣秀吉に仕えた金森長近(かなもりながちか)が飛騨を治めた際に築かれた城下町であり、古城の跡に高山城が築城されたんだそうです。織田信長といえば楽市楽座により商業を発展させたことが(私みたいな歴史オンチでも知ってるぐらい)有名ですね。それを思わせるように長近も商業を重んじ、高山城下では商人の専有面積を通例より大きく取りました。そのことが現在の活発な観光資源へとつながっているのではないかなと思いました。あと博物館で面白かったのは、備前の刀工が作ったという「長船」の字を銘に持つ刀一振りです。長船の名は現在も長船町として岡山県に残ります。高山にある経緯は忘れましたが、長船派は有名であることから当時の刀好きが所有していたのでしょう。

聖地巡礼

そして聖地巡礼。今回は宮水神社のモチーフになったという日枝神社と、瀧くんが飛騨にやって来た時に登場する飛騨古川駅へ行きました。それ以外の場所も車とかでガンガン行きたかったんですが、今回はお酒の試飲もしたかったため断念。さらに図書館も時間切れで閉まってました。また今度行きましょう。

通算200枚ほど撮り、ここでカメラのバッテリーが切れました。「あと2つストックがあるから余裕だぜ…」と思いつつ残りを入れると、どちらも残量ほぼゼロ!やっちまったー!

せっかくここまで来たのに!悲しみのラッシュ!でももう仕方ありません、公式のカメラの充電器はスゲー高いし、どこで手に入るかも不確実です。大垣入りしてアパホテルあたりに泊まる予定を全部諦め、東京に帰ることにしました。写真に収めたかったのに、見るだけでは不十分ですからね。

悲しみに暮れつつも、でもそれはそれで…君の名は。のシーンを思い出していました。

f:id:puhitaku:20190810142959j:plain
三葉捜しも諦めかけ、高山ラーメンを3人で食すシーン。

瀧「今日中に、東京に戻れるかな?」

司「あー…ギリギリかもな。調べるか」

瀧「サンキュ」

アアア〜〜〜〜それはそれで悪くない^〜〜〜〜!

さて。諦めもついたところで、飛騨古川へ行きましょう。また特急で行くにあたり高山駅へ戻りました。その道中も景色の良いこと良いこと。

キモオタ全開ですいません。でも無理!現地は流石に興奮を隠しきれません。あの渡辺酒造店にて聖地の酒をGETしました。…えぇ、もちろん 2つ ですよ。2つ並べたその 右側 を飲むことに意味がありますからね!!!

飛騨古川駅に戻り、帰りの電車を確認して特急券を買い、新幹線も予約しました。1時間半ほど特急まで時間があるので……と危ない危ない。「あの連絡橋」をまだ撮ってなかったですね。

ここまで来たワシは瀧くんなんじゃ……でもみt… 四葉 を見つけることもできずに今日の夜には東京へ……グアアアア!!!戻りたくない!この田舎でゆうゆうとコードを書いてたい!!そこに自分が捜している「誰か」がいる気がしてならない!!

ここらへんは、いい感じの景色もあって極度のエモにやられてしまいました。田舎出身の私には居心地が良すぎましたね。

まとめ

残念ながらいまだ都心に対して情報格差の大きい地方でも、コードを学びたいと思っている人口がいるというのは新鮮でした。私の出身である岡山県でもつい最近PBCがあってすごくいい流れだと思うものの、私が知る限りではそういう人口はほぼ顕在化していないですからね。実際、「こういうのを火種にして地方コミュニティが育っていったら良いな」という話も事後ミーティングでさせていただきました。

久しぶりの Python Boot Camp は、今までで一番旅らしい感じになりました。「ボランティアでいらっしゃったんですか!?」「移動費も自費!?」と現地のいろんな方に驚かれましたが、やはり観光を絡めるとフットワークが軽くなるというものです。ただの旅行よりもある意味濃密な体験や交流ができますから、我々からするとむしろありがたいぐらいです。