いろいろな意見があるけれど

なんだかんだ言って数千万人が使う、しかも1日1回起動して処理をしないといけないようなアプリに対して、あのような重フレームワーク使って何も思わないというのは、個人的にはちょっとイマイチだなと感じている。

 

 

COCOAのアプリの機能を聞いた感じだとネイティブで作ったら10MB未満の大きさのアプリにできるはず。それがいま僕のiPhoneに出てくるCOCOAのアップデートは154.9MBもある。この無駄な150MBを2000万人のユーザが全員抱えてしまっている。コードサイズが大きいことは起動時の端末の電池消費量も大きくなるし、端末のメモリ残量が減ったときに殺される可能性も高まる。どんな技術にも一長一短がある、というのはわかるが、目標として日本人全員に使ってほしいアプリに、そのiPhoneネイティブやAndroidネイティブの開発をケチることの妥当性は、なんかそのへんの「良かったら使ってみてね」アプリとは根本的に違う基準で判断しないといけないと思う。そしてこっそり動くから「バグったのは見たらわかるから教えてね」とかでは全然だめで定期的にちゃんと動作しないといけないことが求められているようなサービスを本当に正しく実装できるのはフレームワークのドキュメントをちゃんと読んで中身を理解できる人で、そういう開発者は割とレアなんじゃないかなあ。

2000年代のオブジェクト指向はやはり洗脳だったのか

2000年から2010年にかけて僕はとある大きな会社でJava技術に関しての重鎮の一人だった。組み込み系なので「Javaの重鎮=Javaの処理系を作れたり速くて省メモリなプログラムを作れたりする」であり、オブジェクト指向べったりということにはならず、僕らは結局洗脳されていなかった。そもそもJavaの処理系は全てが全てオブジェクト指向で書かれているわけではなかった(でもクラスライブラリの実装はJavaの各クラスが何なのかを正しく理解するのにとても役立った)。

 

C++と比べて比較的遅いJavaで、当時の組込みプロセッサで十分な速度を出そうとすると、オブジェクト指向をピュアに推進するわけにはいかなかったというのも理由のひとつだった。

 

daiyamamoto.hatenablog.com

 

 

そんなわけで僕がいた世界ではJavaエンジニアはスーパースターではなかった。世界のJavaの潮流からは微妙にズレているし、オブジェクト指向設計も全然やってないと思われていた。その代わりC++エンジニアは正義を振りかざしていたと思う。

Androidが少し盛り上がり始めた2010年頃、社内でちょっとAndroidアプリを作る必要が出てきた。僕は重鎮扱いされていたのでそのようなアプリを作る仕事にはアサインされず、元C++のエンジニアがその任を担うこととなった。1カ月後にできてきた設計書を見て僕は頭を抱えた。簡単なアプリ、Activityが何個あって、Activityに属さないものをどう管理するか、SQLiteDatabaseとSharedPreferencesに何のデータをどう格納してそのライフサイクルはどうするのか、そういうことが書かれているべきはずのところには、巨大なクラス図しかなかった。個人的には10くらいのクラスがあれば十分なところに、20個を超えるクラスが存在していて、僕から見ると無駄に継承が使われていたし1箇所でしか使われないような。個人的にはそういうのは最初に動作可能なプロダクトが作れるまでが遅くなるし、なにかあったときの修正のオーバーヘッドがでかいから、もっと単純なクラス構成にしたほうがいいと注文を出したが、彼らは「これがオブジェクト指向的に正しいんですよ」という主張をしていた。僕は正しいオブジェクト指向を実践することが正義だとは全く思えなかったが空気が反論を許さなかった。

でも結果的に彼らが作りはじめたらプロダクトはバグだらけとなり社内的にも問題になって、全部のコードレビューを僕らがやることになった。そのときにクラス構成は悪いと思いつつ少し単純にした。

彼らはUMLのクラス図を書くことが設計だと考えていたから、設計した内容はクラス図で表せる必要があり、だからこそ個別のデータ構造や役割をすべて別個にクラスに分割していたのだと当時は思っていた。最初にクラス図を書くから、箱をお絵かきツールで一個追加するだけで、(設計書上は)クラスが作れてしまうし、それによって自分の考えを表現できたように思えてしまう。だから箱をいっぱい書いてしまう。当時はそう思っていたけど、単純にあれは洗脳だったのかもしれない。

 

 

僕がJavaVMとかクラスライブラリ、つまり誰かに使われるプラットフォームを作ってきた側の人間だったからかもしれないけど、それがプラットフォームであってもなくても、何かの機能を実現するモノがあったとして、それの内部の設計がオブジェクト指向だろうがどうだろうが、そんなことはどうでもよく、外部から見て使いやすいインタフェースを備えているかが重要だっただった。それを差し置いて内部がきれいなオブジェクト指向設計になっているかどうかなんて割とどうでもよかったしこれからもそうだ。

 

 

いま、新しい宗教に洗脳されている人を見たとしても

それが悪だとか、自分が洗脳されていないとか言い切ることはできない。

これはそうかもしれない。でもやっぱりTDD 純粋主義者は悪だと思うし、逆にテストを全然しない連中も死ねばいいのにと思ってしまう。

TDD(テスト駆動開発)純粋主義者は最悪である。彼らの心の弱さは、様々なワークフローの存在を処理することはできな

ブログ: 業界6年目で考えが変わったソフトウェア開発のトピック

 

ダイソーの300円イヤホンAL004をもう一個買ったら不良品でした

左右逆位相でした。話にならん不良なのだけど、レシートも捨ててしまったしレジも混雑しててわざわざ返品するのもためらわれる。

前に買って気に入って使っていたAL004が断線してしまったので、新しいやつを調達しようとしたけど売っているダイソーがあんまりなくて、ようやく見つけた店で買ったものがこれだったので割と悲しい感じです。

 

 

前回の記事でMDR-EX255APが1600円くらいになっている、と書いたのだけど、その後ほどなくしてまた3000円くらいに値段が戻ってしまったので、あのときに255APを買っておけばよかったなー。でもこういうのって50万円のときにビットコイン買っておけばよかったなーってのと同じだよね。

 

 

Lot No.ってところには「15 10 CA」とありました。このロットには注意し他方がいいかもとは思うが、ロットによるものなのかどうかはわからないっすね。

f:id:naoya2k:20210124105758j:plain

 

2/3追記

  • その後AL-004とAL-002をそれぞれ1個買ったら、AL-002の方は左右逆相の不良品でした。12月に買ったものをあわせて全てLot Noは「15 10 CA」でした。この時点で不良率が1/2です。凄い。
  • さらにその後AL-004とAL-002をそれぞれ買ったら、両方とも良品でした。よかった。
    これでAL-004が2個、002が1個手元に残ったので、これ以上の購入はしなくていいかな、という気分になりました。
  • でも5ちゃんねるを見てたらAL-004は音が良くなくて、AL-002はおすすめ。ということのようでした。実際私も新しく買った12月に入手したものと比べていまの手持ちのAL-004は音が良くないように感じており、12月のものが奇跡的に良い個体だったという可能性が高まっています。

今年買ったものとか買わなかったものとか2020

今年は買ったけどダメだったものも多いぞ。

 

Mi Band 4

スマホのアプリとペアリングして楽しく使ってたんだけど、スマホのアプリが動かなくなったのでアンインストールしたら二度とスマホとペアリングできなくなり、Band側の画面には「Pair first」とだけ表示されて時計としても使えないという悲しい状態になってしまった。

これはたぶん、ペアリングしようとしたときにサーバに問い合わせが行って、もしサーバ側で登録されてたアカウントと違うやつとペアリングしようとしてたらハネるような仕様になっているんだと思う。(盗まれたときに普通に新規ペアリングされたらそのまま使われてしまうからね)

でもな、僕はこのMi Band4をJelly-Proとペアリングしてたんだ。そしてペアリング先のMi Fitアプリで、ちゃんとアカウントと紐づけようとするとCaptchaの画面が出てくるんだけど、そのCaptchaがJelly-Proだと全く読めなかったんだ。だからアカウントとちゃんと紐づけできてなくて、それがたぶん敗因。でも他にペアリングできる機械を今は持っていないので、もうゴミとして捨てちゃっていいかなという気分だししばらくはスマートウオッチの類はもういいですって感じ。

 

ASRock DeskMini A300

これまで22インチの液晶で使っていたデスクトップをこれで置き換えて10インチの液晶を使うことでコンパクトにし、開いたスペースに3Dプリンタを入れようと思ったのだけど、そうこうするうちにコロナが広まって自宅勤務できる環境を整える必要が出てきてしまいそのスペースはリモートワーク用のスペースとなってしまった。そういう意味ではこれはリモートワークができる環境を作るための準備だった。

 

MacBook Air (early 2020)

このMacBook Air開封して最初に思ったのが、「なんでこいつこんなにCPUしょぼいくせに、デスクトップのA300よりも机のスペース食うの?」ってことで、でかくて重くて性能低いってめちゃくちゃバカっぽくて、もう、買った瞬間から「これはいまいちな感じだ。微妙かもしれんぞ」って感じだったのに、みんなIntel最新チップは最高だぜみたいに絶賛してるし、こういうものなのかなって思ってたわけ。これがダメダメだと思うのは僕だけなのかなーって。それがM1 MacBook Airの性能ベンチマークが出てきたら一転してIntelMacBook Airなんてクソすぎて死ね、みたいになったんで、これはもうそういう体験ができたことが一番良かったってことで。

夏の終わりくらいまでは「i5でも性能全然高くねえし、安いi3買った方がよかったかも」なんて思ってたんだけど秋になってから数回Zoom飲み会に参加することがあり、そのときにi3だったら背景検出ができないということだったのでi5にした甲斐もあった。そういう意味ではまあ、悪くなかったのかもしれない。しかし決してよくはなかった。

 

買わなかったもの

  • デジカメ
    これはしょうがない。コンパクトデジカメ、出なかったし。もう軽くて画質がスマホよりいいコンパクトデジカメも、10インチとか11インチのノートPCも、僕が欲しいと思って新製品を待ってるようなものは今後もずっと出ないんだなとちゃんと認識できた。
  • Raspberry PI 4
    買おうと思ってたんだけどヒートシンクとか電源が重くなってしまって悩むよなあって思っているうちにPi 400が発表されてしまったのでそれ待ちでいいかなって気分になっている。
  • iPhone SE2/iPhone 12mini
    イヤホン端子があったら買ってたかもしれないやつ。iPhone SE2は3D touchがなくなったんだから軽い液晶に切り替えたマイナーチェンジをやってほしい…。
  • Pixel 4a
    これは買ってもよかったんだよな。実際何度か買おうとしたんだけどその度に薄いケースが見つからないので買えてないみたいなおかしな状況に陥っている。

素人にわかりやすくウケがいいんだけど実際にはわりとダメだったやつ

9割くらいは昔話。いっぱい挙げていきたい。またいろいろ思いついたら書く。

 

Windows ReadyBoost

HDDがランダムアクセスに弱いんで、Windowsの起動に必要なファイルをUSBメモリにキャッシュしておけば起動が速くなるんじゃね?みたいなアイデアWindows Vistaに標準実装されたのだけど、当時のそこそこ安価なUSBメモリはHDDよりもランダムアクセスが遅かったので全く効果がなかった。高価なUSBメモリでは少し効果があったが、そうこうするうちにSSDが出てきて、「そんなことするくらいならSSDをシステムドライブにすればいいんじゃね?」 ってことで終わってしまった。

 

Hybrid HDD

HDDは大容量だけど遅くて、SSDは高いので、HDDとSSDを組み合わせて一つのHDDに見せかければSSDの速度とHDDの容量の両方のメリットが得られるじゃん。普通に効果があったんだけど、そうこうするうちにSATASSDの速度のボトルネックになっていることが判明して、デスクトップもノートもSSDのインタフェースとしてSATAではなくPCIeを使うようになってしまった。Hybrid HDDはPCとの接続がHDDと同じSATAである時点で「PCIeのSSDに速度で全然勝てないやつ」になってしまったし、非常にコンパクトなm.2の普及により、HDDが載ってるやつに追加でSSDを載せるスペースも簡単に捻出できるようになってしまい存在価値が激減した。各社からHybrid HDD(SSHD)がいろいろ出てきたのは2013年頃だという話だが、2016年には128GBのSSDが5000円で売られるようになってHybrid HDDをわざわざ選ぶ理由はなくなってしまった。

 

スマホのバックグラウンドでbluetooth LEで屋内測位してショッピングモールで店の案内をするやつ

2013年頃にコンセプトは流行ってたんけどバックグラウンドで独自仕様で電界強度を定期的に判定するようなスマホアプリはバッテリーの持ちが劇的に悪くなるので当時からちゃんとユースケースを見極めなければ「そんなのダメに決まってんだろ」という感じだった。モールに入った瞬間にアプリのその機能をユーザにユーザの意思でONさせることができて、それに見合ったユーザへのメリットを提示できるようなものでないとダメだった。当時から。なのに、そのへんを言わずに集客効果が見込めるだのなんだのをセールストークにする奴らがたくさん居て辟易してた。さすがにすぐにそんなのはなくなって、特定の場所でアプリを起動してチェックインするとポイントやアイテムが貰える、くらいのやつになってると思う。

 

コードを書かなくてもGUIをいじるだけでソフトウェア開発ができる系のいろんなやつ

ソフトウェアがメンテしている人や、レビューをしている人が何をやっているかお前らは理解できているのか? と聞きたくなる。ソフトウェア以前に、それ以外のコンフィグファイルも全部テキストファイルになってるだろ? それはなぜなのか考えてみてほしい。変更量がわかるし、変更点を簡単にレビューできるようになっているし、コンピュータによる自動的な処理にも向いているからじゃないか。

https://autoprove.net/supplier_news/dspace/30169/

このへんのモデルベース開発、みたいなやつもそうで、「C言語より抽象度の高い記述でデザインします、それを自動変換します」は、いいんだよ。それはあってる。でもそれはテキストでやってもGUIでやっても概念的には同じだろ? そしてそのテキストでやってる方はC言語以外のよりモダンなプログラミング言語と概念的に同じだってことが素人にもバレてしまうから、モデルベース開発ってのは「GUIでやってるから、これが仕様書としても使えるんです」っていう奇妙な主張をすることになってしまう。別にそれはそれでいい。たとえば僕も音源データやビットマップをテキストで管理したいとは思わん。だがどちらを適切な方法なのかというのは、テキストの差分で仕様書を管理するほうが得意か、図面の差分を目で見て仕様書を管理するほうが得意か、そういう観点で選ばれるべきで、後者のほうが先進的という話には全くならないはずだ。

 

僕らの会社でも偉い人の鶴の一声でモデルベース開発とかそういうのをやらされているやつが居るが可愛そうで仕方がない。

 

蓄積型放送

放送は動画をバリバリ送れるがネットはそうではないし速度が遅いのでハイブリッドにしたらいいんじゃね? みたいなやつ、ダメだったな。

 

バッテリ交換式EV

ないわ。。

 

Continuum

スマホを、なんかよくわからんキーボードとディスプレイにつなげるとPCのように使える! みたいなやつ。残念ながら僕が使っているPC、画面が6インチとか9インチとかなんだよね…でかいディスプレイ繋がってもいいけど、ディスプレイなしでもスマホ画面でPCのように使えるようにしてほしかったなあ。

 

画面切替に時間がかかるときに画面遷移アニメーションを行うことで遅さをユーザに感じさせない的なやつ

初代のiPhoneの画面を見て、誰かがこういった。そしてみんながそれを信じてこのアイデアがさも万能であるかのように広まってしまった。本当にちゃんと技術者が入って検討していれば、そしてCPUとGPUが分離していて、GPUパワーが余っていれば、たぶんこれはイケてるアイデアだ。でもそのときにアニメーションを実装させられた殆どの処理系は、その画面遷移のアニメーションがCPUパワーを消費することで余分にユーザを待たせるようになってしまった。そもそもアプリが起動中かどうかを見せるだけだったり、画面遷移を行う入力を正しくコンピュータが認識しましたよってのを伝えるだけなら、スプラッシュスクリーンの一枚絵でも十分なはずだった。でも企画やデザイナーは動きのある画面にこだわっていた。

 


 

えてして何かと何かを組み合わせて両方の欠点を補おう的なやつは、片側の技術の進化が速いときにはダメな気がする。一方でハイブリッド的なものがなんでもかんでもダメだったかというとそうではなくて、うまく行ってるやつはそれが当たり前になり過ぎてハイブリッド感が一般人には感じられないくらいにハイブリッドになっているのだ。たとえばSRAMDRAMの組み合わせだったり、DRAMと不揮発二次記憶の組み合わせだったり、CPUとGPUの組み合わせだったり、u-bootだけNORに入っててそのあとはNANDだったりというストレージ構成とかそういう感じで。

ダイソーの300円イヤホンAL-004が良かった件

ダイソーで高音質の300円イヤホンがあるという話を聞いて11月に買っていました。HQ-005というやつ。こいつは300円としてはいい音質で、しかもマイクもついているので最近の遠隔会議にも対応できるという感じで、とりあえず一個買っておくにはわるくないというモノだと思った。これについてくるイヤピースはハイブリッドっぽい塗装がされているがハイブリッドではなく耳に当たる部分も固いせいで低音の響きがいまいちだったため、ソニーのMDR-EX11Mを試してみたところばっちりEX11Mを装着することができ音質が良くなった気がした。しばらくこれで生活できるぞと思ってはいたもののそもそもMDR-EX255APを持っているので非常用として使うことにした。HQ-001も買ってみたがこっちはなぜかイヤピースをはめる部分のサイズがHQ-005と違って少し小さくてEX11Mにぴったりじゃなかったので残念なやつだった。

 

 

そうこうしているうちに12月になってまたダイソーに行ってみたら新しいのが並んでいた。AL-001から005までのシリーズだった。見た目でAL-004を選んだのだがこれがよかった。高音質かと言われると微妙で、なんだか音が塊となって聞こえてくる感じで分離感がない。たぶん高音の抜け感みたいなやつがいまいちよくないしボーカルも抑制されている感じがする(ボキャブラリーが正しいのかどうかはわからん)。でも低音がなんだか素直な気がする。低音が素直なせいでスネアとかティンパニとかタムの音が楽しくなってくれる。

 

でもそんなことよりなによりデザインが悪くない。HQ-005はHQのシリーズの中では一番マシだと思ったがそれでも割とダサい感じがしたし、マイク部分にスライダボリュームがあり「こんなところに安っぽいボリュームをつけるなんて高音質を謳うイヤホンとしてどうなの…?」って感じだったが、このAL-004はすっきりしたデザインで、アルミハウジングのひんやりする手触りもよいし、マイク部分は上記のソニーのMDR-EX255APとほとんど変わらない大きさまで小さくなっててケーブルをまとめやすくなっている。

 

 

そんなわけでこのAL-004と、ソニーのイヤーピースMDR-EX11Mの組み合わせはそれなりに日常使いに便利であり、こんなのが出てきてしまっているなら、3000円近いお金を払ってMDR-EX255APあたりを買う意味はなくなってしまうよなーって思ってたら、夏ごろには3000円を超える値段になっていたMDR-EX255APが、最近になって激しく値段を下げており1500円を切る値で売られるようになっていた。市場経済

ドコモの新料金プランが面白い件

ドコモが新料金プランahamoを出してきてそれを総務省が評価しているのはとても興味深い案件である。もともとこれまではドコモにとっては、MNOが本気を出して低廉なプランを作るとMVNO業者が死んでしまうので公平な競争ができる環境になるように注意して料金を設定しろという空気になっていたと思っていた。

 

 

まあ公平な競争というのは、要するにドコモにとってはドコモの優位性を使って究極に安いプランを出すんじゃなくて、MVNOと同じようなことをやってMVNOとちょっと高い価格くらいで出すんだよねということになっていた。当然本気を出せばもっと安いプランを出すことはドコモとしては原理的にはできる。でもそれはやっちゃいけないことだったはずだ。電波という公共の資源を使わせてもらっている日本の大企業としてのドコモにとってみれば、いまのサービスを維持するだけではなく、将来に向けての研究開発投資も当然やっていかないといけない社会的責任もあって、それを全うしなければいけないというような意識もあったはずだ。

 

 

それがもう最近の議論ではとにかくドコモと契約している消費者の月額料金をどんなことをやっても減らすんだ。やればできるだろ? みたいなめちゃくちゃな感じになってきていた。だから今回のahamoは、当のドコモからすれば「それやってもよかったんでしたっけ? ダメって言ってませんでした? じゃあやりますね。総務省さんの指示に従ってやるんですからね後で文句言わないでくださいよ? 」みたいな感じで出てきているように僕からは見えてしまうので、めっちゃ面白いなと思っている。

「分離プランをやれ」っていってその1年後に携帯メーカ各社が苦境に陥ったり、「MNPで活発にユーザがキャリアを移動できるのが望ましい」って言ってやらせた結果各キャリアのMNP優遇策で真面目なユーザが損する結果になったり、そういう「思い込みで短期的な結果だけを求めて何かをやらせた結果逆効果になった」みたいなことが今回もきっと高確率で発生すると思う。2年後が楽しみです。