電子ピアノ選び(2019年1月)

YAMAHAのハイブリッド型の電子ピアノを試し弾きして物欲が芽生えたので、30~60万円くらいの価格帯のものを少し調べた。ちなみに鍵盤からハンマーまでが本物のピアノと同じメカニズムのものをハイブリッド型と呼んでいるらしい。 色々ブログなどを読んだ限り、高価格帯(40万以上)はYAMAHAとKAWAI、中価格帯(20万くらい)はRoland、低価格帯(5~10万くらい)はCASIOとKORGが強いという印象だった。

YAMAHA N1

鏡面仕上げだと70万円。グランドピアノと同じメカのハイブリッド。とても良いが、2011年発売なので機械としては古い。 鍵盤とハンマーにセンサーがついているとのこと。

YAMAHA NU1X

鏡面仕上げだと50万円。アップライトピアノと同じメカのハイブリッド。2017年発売でそこそこ新しい。 N1と違い鍵盤の速度センサーのみなので、弱音のトリルを弾いたときに大きな音が出る不具合があったらしい。解決したかどうかは不明。

KAWAI NV10

90万円。高いので購入候補からは外した。

KAWAI CA98

鏡面仕上げだと40万円。KAWAIはピアノ専業メーカーというイメージがあり、好感度が高い。ただ以前のモデルのCA65などでフィルムが劣化して鍵盤が重くなっていくという不具合が発生し、電子機器メーカーとしての信頼度が少し下がってしまっている。

CASIO GP-500

鏡面仕上げだと40万円。CASIOは低価格帯というイメージがあったが、突然ハイブリッド型を出してきた。KAWAIから来た人が設計したとの情報あり。 弾いた感じは良かった。ハイブリッド型としては格安なのだが、鍵盤の雰囲気はチープな感じ。右側の前面にロゴが貼ってあるのも気になってしまう。

Roland GP607

鏡面仕上げだと60万円。見た目はプチグランドピアノだがハイブリッド型ではない。 Rolandは去年まで、中価格帯以上が全てPHA-50鍵盤で、良心的といえば良心的だが、高価格帯でも特別なタッチの良さを感じなかった。音響は良い。

Roland LX708

鏡面仕上げだと50万円。ハイブリッド・グランド鍵盤を採用。名前は仰々しいが、素人目にはPHA-50を長くしただけのように見える。無から設計するよりもそういうアプローチのほうが手堅い感じはする。Rolandの上位機種はスピーカーの音響がすごく良い。

YAMAHAは毎年10月か11月にNシリーズの新製品を出してきていたので、N1の新しいのが出たら買おうかなと思っていたのだが2018年には何も出なかった。また、ハイブリッド型はメカが複雑なので、劣化したり故障したりする可能性は普通の電子ピアノよりも高いかもと思った。 というわけで出たばかりのLX708を買った。楽しみ。

20年くらいプログラマをやってみて

気がついたら就職してから20年以上たっていたので感想を書いてみる。

1997

  • 新卒入社、給与は年400万くらい。
  • Windowsアプリと組み込み(8086のアセンブラ)を3年くらいやった。
  • EEPROMを紫外線で消して焼き直したり、デバッグセッションを開始するまでに5分待ったりするなど、昭和のデバッグを満喫した。
  • 製造業の部署は、仕様はハードウェアチームが決めてソフトウェアはそれに合わせるという流れで、ソフトウェアはおまけみたいな感じ。
  • Windowsアプリチームはコードを書くのが好きな一方、組み込みの部署は職人的だけど死にそうになりながら作業していた。
  • 人を大切にしない会社だった。悪い例からたくさん学んだ。

2000

  • 転職して給与が100万くらい上がった。
  • 開発の仕事だと思って入社したら、開発支援部隊にアサインされてしまった。勉強にはなったが、文句を言っていたらYRPに飛ばされた。
  • 3Gの試作機の開発は最高に楽しかった。冷蔵庫みたいなサイズの試作機を相手に、朝から晩まで開発と検証を繰り返した。独自OS・独自CPUでコンパイラもバグっていたので、Visual C++でモックとテストを書いたりしていた。
  • 現場のボスがビジネスもわかって技術に長けているにも関わらず謙虚な人で、今思うとサーバントリーダーだった。
  • 技術的は面白かったが、仕事が嫌いな人がいたりして、大企業は自分には合わないと思った。

2001

  • 雑誌でCPUのベンチャーを発見してしまい、勢いで転職した。給与が100万くらい上がった。
  • アセンブラとかリンカとかデバッガを作った。記念にCPUの命令セットの一部の定義をさせてもらったりした。
  • STLをCにポーティングした酔狂な人とか、CPUが設計できる人、コンパイラが実装できる人など、優秀な人がたくさんいて刺激を受けた。
  • 自分が楽しく、チームがよりよく仕事をするためにどうするか、という意識の人がいて、ここでの経験が自分の糧になっているように思う。

2003

  • いろいろうまくいかなくて転職した。給与が200万くらい上がった。
  • 変なCPUのLinuxカーネルをさわったりしていた。まだgitが使われておらず、LKMLにはあらゆるパッチが飛び交っており、Linuxは人類には早すぎると感じた。
  • ギーク文化の会社で大変良かった。

2006

  • 諸般の事情で転職した。給与が200万くらい下がった。
  • 体を壊したり死んだりする人がいたりして、健康第一だと思うようになった。テニスを始めた。
  • Windowsデバイスドライバを書いたり、Flashアプリを書いたり。組み込みも細々とやっていて、ファームウェアアップデートを実装したりしたので、この頃はNAND flashからAdobe Flashまでをカバーしていた。
  • 製造ミスで電源が入らなかったり、要件がハードウェアの性能を超えたりする面白イベントが起きたりした。
  • リモートワークしつつ家族を介護したりしてみた。
  • 実直で真摯な人が多くて良い会社だった。

2010

  • iPhoneアプリやってみようかなと思って転職してみた。最終的には給料が2倍になった。
  • なりゆきからwebのバックエンドをやることになり、顧客と一緒にシステムを作っていった。よい勉強になった。
  • WindowsmacAndroidiPhoneのアプリを作りつつwebのバックエンドもメンテするというような無茶なことをしてみた。結果どれも中途半端ではあったが、やればできるかもという気持ちになった。
  • 競技プログラミングをはじめた。すごい人たちと知り合いになれてよかった。
  • 会社の文化はそんなに良いものではなかった。しかしお金を稼ぐことには貪欲で、そこは大事だと思った。

2015

  • 自社開発という言葉にあこがれて転職してみた。給料が半分になった。
  • Androidアプリをゼロから作ることができた。全く良い設計ではないものの、よい経験になった。
  • 自社開発は自分たちで決めて自分たちで作るので、受託と比べて会社全体の雰囲気はよい気がする。ただ自社開発だからといってもやはり仕事なので、業務のコードを書きたくない人もいるということを知った。

現在

  • iOSアプリ開発者として現在に至る。給料がちょっと増えた。そろそろ転職10回に届きそう。めでたい。
  • 新卒でいわゆる良い会社に入ることができず、自分の性格もあって転職を重ねることになったが、今の総合電機メーカーの凋落を見るに、結果的にはこれはこれでありだったかなとは思う。
  • 良い例、悪い例を色々見てきて、自分にとってのよい環境についての知見が得られた。
  • 最近ではプログラマという表記はあまりはやっていなくて、自分もソフトウェアエンジニアと言ったり書いたりする機会が増えた。
  • 新卒の頃は自分自身がソフトウェアエンジニアという職を理解していなかった。最近では、日本でも日々ソフトウェアエンジニアという職業が確立されていっているような実感がある。
  • 若かりし頃と比べて記憶力もないし体も不調になったりして、プログラマを続けていられるだけで相当恵まれている気がしている。
  • 特にまだ何も成し遂げていないので、とりあえず仕事ができるうちは仕事したい。

デバッグ

何となくだが、コーディングよりもデバッグが好きなような気がしてきた。
コードを読んだ限りは正しいが誤動作する、というのを直すのが特に好きだ。
たとえば、ハードウェアに欠陥があるとか、APIの内部実装が途中で変わったとか、ライブラリのユースケースとして考慮されていないものだったとか、そういうやつ。
そういう、未定義の動作まで含めて理解できると、カバー率が上がったような気がして楽しくなる。
きちんと理解しないとバグを直すことができないので、デバッグとは、理解の解像度を上げることにかなり近い行為なのではないかと思う。

なぜピアノを弾くのか

20才のときからピアノをはじめて、途中中断ありつつ早23年。
この前ピアノが趣味の人に、なぜ続けているのかたまに考えてしまう、あなたはなぜ続けているのか、と聞かれて、いつもの答えをしてしまったんだけど、理由は始めた当初からは変わっているように思う。
はじめるきっかけは中二病的な理由(ピアノを弾けるのかっこいい、きちんとした趣味を持ちたい)だったと思うのだけど、25才くらいで上達しなくなり虚栄心を満たす手段としては失敗に終わった。
それでも続けた理由はたぶんこんな感じ。

  • 先生が良かった(進め方や難易度が自分に合っていた)
  • 単純に音が好き
  • 特にやめる理由がない
  • 他の趣味より好き(色々試した結果残った)
  • 劇的な上達はしないが、新しい曲を覚えたり、多少は進捗する
  • (主にプログラミングなど)できることだけをやることに危機感を覚えた
  • 仕事のストレス発散
  • 知っている曲がより理解できた

目的意識を強く持たないほうが長続きするのかな、という気がするが、その代わりスキルは頭打ちになる。もう人生の終わりが見えているので、意識的にやったほうがいいよなあとは思っている。
いつもの答えは「知っている曲がより理解できるようになるのが楽しい」なんだけど、これは最近そう思うようになった。できないことができるようになるのが楽しいという人もいるんだけど、自分の場合は、物事の理解の解像度が上がるのが好きな感じ。

プログラマ35才限界説について

現在42才。あと何年かはプログラマでいるつもりでいる。
自分や同僚がプログラマとしてこの先生きのこるには、を考えることが多くなった。

問1についての考察

年齢を重ねることでできなくなることの候補として
(1) 体力の衰え
(2) 吸収能力の衰え
(3) 好奇心の衰え
(1)について、健康の維持は若い頃には聞き流すトピックだが、最近はヘルシープログラマが出版されたりして認知度は上がっていると思う。
大前提としては徹夜が必要な現場では働かないこと。あとは筋トレとかスポーツがんばる。
私の場合は30才で周りに体を壊す人が出てきて、これはまずいと思って近所のテニススクールに通い始めた。有料だと行かないともったいない気持ちになるのと、時間が決まっているので生活リズムをそれに合わせざるを得ず、習慣化しやすい。
プログラマでよく聞くのはマラソン、自転車、ボルダリング。会社で部活化してもいい。
(2)については、素養があるものに関しては差分の知識だけでいいので、若者より有利な部分が多少ある。新しいパラダイムはなかなか身につかなくてつらい。
自分は(A)1年1プラットフォーム、(B)苦手なことに挑戦する、というのをゆるくやってみている。プラットフォームは最近だとnode.jsとRailsAndroidをさわっていて、こういうのはやってるのか、くらいには追いつけている。たぶん。苦手なものはSICPとか競技プログラミングとか数学とか英語とか。得意まで行かないが好きにはなった。
(3)についてはよくわからない。新しいものを純粋に楽しもうという気持ちが減衰しているのか、経験により既視感が増えているのか、どっちもな感じはする。ただ加山雄三さんのように還暦を過ぎてもゲームに熱中している人もいるので、私がApple Watchに興味がないのも年齢のせいではないと思いたい。

問2についての考察

そういう予想もあるが、よくわからない。
究極的な状態として真にプログラマが不要になったとしたら、ほとんどの単純労働は自動化されているはずで、そのような社会では労働に価値はなく、時間の潰し方が最大の関心事になるだろう。
実際のところ社会の変化はゆっくりなので、10年やそこらでみんながプログラミングできるようになるとは思えないし、現状の商慣行や給与水準などからみても、コードが書けることで特別な給料がもらえることもないだろう。
いずれにせよ、技術を取捨選択して人間が使いやすいシステムを試行錯誤して構築する、というような類いの仕事は、自動化しづらく当面はなくならないように思える。

問3についての考察

たぶん価値を生み出すプログラマが良いプログラマだと思う。例えば、
(1) 必要な機能を追加し、不要な機能を削って価値を上げる
(2) 設定した目標を効率的・効果的に達成してコストを下げる
プログラミングというよりはエンジニアリングかも。いずれにせよ、より良いものを、より早く完成させること。ユーザーに使ってもらわないと価値はゼロなので、完成力とリリース力が大事。
ベテランはマネジメントせよとなるわけだけど、個人的には、人よりも開発対象にフォーカスしたい。仕事を均等に配分することよりも、重要な箇所を見つけて集中することに力を注ぎたい。
違う側面として、
(A) 仕事でコードを書くことを楽しめる
(B) チームで開発するのを楽しめる
(C) 新しいものごとに適応するのを楽しめる
と職業としての寿命が長くなると思う。楽しくないことも多々あるので、時には真面目に考えすぎないのもあり。
できる、と、楽しい、には相関があり、できるようになると楽しくなるし、それには学習の習慣化が必要、というのが定説になっていると思う。自分に向いた学習方法を見つけられると幸せ。

その他・健康について

そもそもなぜこれを書いたかというと、ちょっと前に親を介護して看取ったのだけど、そのときに大事なのはQuality of Lifeだと思った。あと、人生は短いので、やろうと思ったことは思い立ったときにやればいいし、「これをしたほうがいい」はおおむねうざいわけだけど、言った方がいいと思ったことは躊躇しても無駄だと思い、最近はちょっとだけ周りに言うようにしている。
QoLはおおむね健康で、健康には心の健康と体の健康があるけれども、体を壊すと心の健康も維持できなかったり、技術的なスキルのミスマッチなどでもやはり健康を損なったりする。
健康のためには、適度な刺激(ストレス)があったほうがいいという気がしている。例えばお金をもらっているので仕事に行かないととか、お金を払ったのでレッスンに行かないととか、プログラマは英語ができないと、みたいな義務感とか焦燥感とか使命感のようなもの。過度だと体を壊すし、全くないと、「できる→楽しい」のループに入れない。この辺は個人ごとのバランスになる。居心地のいい場所を見つけたい。
果たして私はこの先生きのこれるのでしょうか?
Happy Hacking!

x86/x64最適化勉強会7

非正規化数のFZ(FTZ)とDAZの違い

こういうモードがあるのは知らなかった。
極小同士の乗算でも普通にやるとゼロになってしまうものが、非ゼロ判定ができたりする。

いまどきのmatmul

行列の乗算の高速化。すごい。ロードと演算とストアがフル稼働。
TLBのキャッシュミスはトレースレジスタみたいなので調べたのかと思ったけど、そうではなくて少しずつ作り変えて色々試したらわかったらしい。強い。

CSS JIT: Just-in-Time Compiled CSS Selectors in WebKit (リンクはブラウザエンジン先端観測会のもの)

CSSのスタイルのマッチング処理がめちゃくちゃ重たいので、WebKitではJITで処理しているという話。CSSがそんなにCPUパワー食うと思ってなかった。
広告をあれするやつとかが重いらしい。スライドには出てこなかったがhasは恐ろしく重いらしい。

改ざん検知暗号Minalpherの設計とIvy Bridge/Haswellでの最適化

暗号化と改ざん検出はセットでやらないといけないらしく、Authenticated Encryptionというジャンルが確立している。規格案のコンペCAESAR competitionにMinalpherを提案したとのこと。
実行スロットにフルで詰め込む実装。スケジューリングが職人芸というかCPUの気持ちになってる。
デファクトスタンダードのAES-GCMはCTRモードをベースにして、カウンタに多項式を使ったもののようだ。かなり高速で1clock per byteくらい出るらしい。

準同型暗号の実装とMontgomery, Karatsuba, FFT の性能

Somewhat準同形暗号の話。普通の準同形暗号は加算(XOR)か乗算(AND)のどちらかしかできないが、両方できると相関を取るようなこともできるので、生体認証もいけるぽい。
後者(多倍長整数)の説明で、こちらは整数演算と説明されていて、多項式演算のほうは整数演算じゃないのかな、と思ったら、(浮動小数点ではなく)整数を使った計算ではあるものの、多項式演算で通じるのでそういうものらしい。数の範囲とか性質とかで区別されているのだろうか。
ものすごい計算をするけど1単位にストアできる情報が60bitとかそのくらい。すごい。

LLVM最適化のこつ

キャリーフラグっぽく書いたらだめで、なしで書いたらちゃんとキャリーを使ってくれたみたいな話。
LLVMアセンブリ出力が手で書いたのと同じになるまでがんばるというのがなんか順番が間違っていて面白い。

感想

毎度のごとく難しかったが、素晴らしい会でした。堪能しました。