「技術的負債を設計スキルで解消しよう」なんて思わなくなってる

ここ20年ずっと大規模ソフトウェアを開発してきて、特に最近はクソみたいなプロジェクトに3~4回連続で関わっているので技術的負債を解消どころかどんどん負債を作っていくだけの毎日となっている。

 

 

きっと若くてデザインセンスのあるような人が後から見たら僕が関わったコードはひどい設計で技術的負債がいっぱいでそして「俺なら全部作り直してクリーンな設計で保守性のあるコードにできて今後のメンテナンスも属人性なくできる」みたいに思ってしまったりするのだろう。

でも実際にはそう思った人たちが作っても、全然うまく動作するプロダクトを作れなくて、でもローンチが迫ってくるのでなんとかしてくれる奴を募集して、それで毎回プロダクトはなんとかできるんだけどだいたい汚い感じになっているので、次に、どうやら全部を作り直したくなるのでこれを繰り返してしまう、ということのようだ。

 

 

全部作り直したくなる理由はわりと簡単で、最後になんとかした人たちは外注で、「俺なら全部作り直してクリーンな設計で保守性のあるコードにできる」と思った人たちは完成させれなかったくせにそれを反省せず、最後になんとかした人たちの「技術力が低かった、あるいは旧態依然とした開発スタイルで開発したのが原因」みたいなことを大きな原因の一つとして掲げてしまうからなんだ。

じゃあ次は新しい開発スタイルで最初から最後までやろう! って結論になるだろ。

 

でも実際には違うんだ。新しい開発スタイルでいけると思ったくせに開発失敗したから旧態依然としたスタイルの組織にお願いせざるを得なくなってしまったんだ。なぜ失敗したんだ? これも簡単で素人ばっかり集めたからだ。素人って言うと言い過ぎか。でもちょっと知ってるくらい(僕らのプロダクトの20%くらいを知っている程度)のくせに「完璧に理解した」と思い込んでる人たちがだいたい偉そうにしてるんだ。

  • 開発期間が3~4年にわたる超巨大なプロジェクトの、全体のごく一部分だけを1年間担当しただけの人が経験者として厚遇されたりしている。ずっとかかわってきたと主張している人たちもやっぱりごく一部分だけしか見ていない。上流しかやってない人とかは最後にどのようにしてどれくらい膨大なリソースを費やして細かい仕様をFIXさせることができたのかがわかってない。
  • そしてそんな人たちが音頭を取って決めた開発プロセスはもう最初から破綻しているんで、そこに期待をもって集まってくる人たちも当然素人が多い。
  • 結果的に「誰でもいいから完成させることのできるやつ」を血眼になって探して、そいつらには「リソースが足りないならいっぱいアサインしてやるから(ただし技術レベルは問えない…緊急事態になっているので抱き合わせでいろんな奴が来てしまう)とにかく完成させろ」という指令が下るんで、全体のレベルが低くてもなんとかできちゃうプロセスを採用せざるを得なくなる

こんなのトップマネジメントの問題以外の何物でもない。だれか一人が設計力を磨いたところでどうしようもないだろ。だいたいこのレベルになってくると、もう採用する技術についても「どういうレベルの技術者なら集めることができるから、その人たちにも扱えるxxを採用しておくか」みたいな判断が必要になるはずだし、「末端は遅いPCを使わされているからこの重いツールの採用はしちゃダメだな」みたいなどうでもいいことにも気を配らないといけない。

だんだん話がそれてきた。とにかく巨大なプロダクトで全体がわかることなんてほぼないので、「完璧に理解しているエキスパートチームを集めて最初からクリーンに作る。しかも期限内に」というのは、人類には不可能なのではないだろうかという気がしている。僕らにできることは、メインストリームに向けては「一度血反吐を吐いて作られた完成品を、そのまま継続してメンテしていく中で部分的にきれいにしていく」ということだけだ。

そして本当にきれいなものが作りたければメインストリームじゃないスカンクワークみたいなところでちゃんと完成品に近いところまで機能を作り込んでいくべきだ。だいたいみんな、それをやっているつもりだったんだ。でもだいたいにおいてそういうプロジェクトって「2年でほぼ完ぺきに動作するプロトタイプを作って見せますよ」と宣言させられて、でも2年後には良くて全体の5%くらいしかできてなくて(だってプロダクトを作るリソースの1/20くらいしか投入されてないからね)、なのに「もう技術的にはほとんど完成してるんです」と宣言せざるを得なくなって、上層部が「なるほど技術的にできているんなら次のメインストリームはこいつをベースにしよう」って判断してしまい冒頭の流れになる。やっぱりトップマネジメントがクソだとしか言いようがない。

 

 

でもたぶん「旧態依然としたプロセスでデスマーチを繰り返している組織」vs「新しいプロセスと新技術でそれを一新しようとする組織」当然前者は疲れているし難しいことをいっぱい経験してきているし平均年齢も高いので保守的なことしか言えず、後者は難局にあたった経験が少ないために自分達の優位性を声高らかに主張してくる。日本の組織の経営陣がここで前者を選ぶのは難しいかもしれない。

ゴールデンウイーク前にキャンドゥで550円のBTイヤホンを買ったが良かった

基本的に有線を使いがちな僕はBTイヤホンをメインにはあまり使っていなかった。そして無線を使いたいときには5年くらい前に買った2000円くらいの安いBTイヤホンを使っていたのだけど、最近ちょっと事故があってそのイヤホンが行方不明になった。別に有線イヤホンはいっぱいあるのでBTイヤホンがなくても平気と言えば平気なんだが無線がいざというときに使えるとそれはそれで便利なので、BTイヤホンが無くなり少し不便を感じていた。

 

 

そしてゲオの完全ワイヤレスを買おうか2ヵ月くらい悩んでいたんだけど踏ん切りがついていなかった。あるとき別の用事でキャンドゥに行くと550円という超安価なBTワイヤレスイヤホンが売っていた。HIDISCのHDBT36BKという型番のやつ。

 

 

 

この値段だったらいくら地雷でも買うべきだよねと思い買った。

 

家に帰って使ってみると普通に使えそうな気がした。耳の部分がアルミで作られておりなんだか高級感があるしコンパクトで良い。スイッチとかマイクがついている部分はちょっと大きめでBulkyな感じでイマイチだけど、そのおかげかボタンが押しやすくLEDが見やすいのは良い。音質はSBCにしか対応してないがそれなりである。

 

HIDISCのWebページにはこの型番はなく、一つ前のHDBT35BKは存在していた。

HIDISC WIRELESS STREO Bluetoothイヤフォン HDBT35BK | HIDISC 株式会社磁気研究所

 

スペックを比べてみると、35BKはバッテリーが80mAhなのに対して36BKは60mAhである。そして35BKの音楽再生時間は「最大4時間」だが36BKは「約2.5時間」となっており電池がしょぼくなっているようだ。でも550円だしどうでもいいよね。

 

 

ちなみに、なくなっていたBTイヤホンは、これを買って家について、カバンから36BKを出す直前に発見されました。。

あまりわかってないくせにRGBでグラデーションするのは間違いでHSLが正解だと思うのはやめてほしい

2つの色の間のグラデーションにlinear-gradientを使ったときにグラデーションが汚ないのは、大抵の場合ガンマカーブを考えずにグラデーションをかけているからであって表色系の問題ではない。色相に沿ってグラデーションをかけたい場合はもちろんあるだろう。でもそうじゃない場合にも色相を回すのが正しいと思ってしまうのは良くない。

 

ガンマカーブとはなにか。それはEIZO株式会社の解説ページなどを見てほしい。

第7回 "曲線美"が色再現性の決め手になる?――液晶ディスプレイの「ガンマ」を知ろう | EIZO株式会社

 

CSSのlinear-gradientはRGB値をリニアに変化させる。ところが今のPCはRGBで指定された値とディスプレイに表示されるピクセルの明るさがリニアに対応しない。ディスプレイのガンマがWindows標準の2.2になっている場合、RGBに指定する0~255の値に対して実際に表示される明るさは下記のようになっている。

RGB値 明るさ(%)
0 0
64 5
128 22
192 54
255 100

 

単純にCSSにlinear-gradientを指定して赤100%→緑100%にグラデーションすると下記のようなかんじになるんだけど、もちろん中央がくすんで汚い。

linear-gradient(to right, #ff0000, #00ff00);

 

 

でもなこの中央がくすんでしまう理由は、この中央の色が「赤50%、緑50%の微妙な色」だからなのではなく、上の表を見てくれればわかるように「赤22%, 緑22%のめちゃ暗い色」だからなんだ。つまり左から右にいくにしたがって、一旦輝度が減少して、中央を超えたところから輝度が増加する、というヤバい表示になってしまっているからなんだ。

 

まともなグラデーションを表示したい場合には上のEIZOのページに書かれているように、ガンマ特性に合わせて色情報を調整したグラデーションをかけてやる必要がある。

f:id:naoya2k:20220411025516p:plain

EIZOのページの解説

 

じゃあどうすればいいのか。上にある表の逆バージョンの、明るさからRGB値を探せる対応表をつくって中間調を持ち上げたグラデーションをつくってやればいいんだ。

明るさ(%) RGB値 HEX値
0 0 0
25 135 87
50 186 BA
75 223 DF
100 255 FF

これによれば、中央は#808000ではダメで、#BABA00であるべきだということだから、これを指定してやる。

linear-gradient(to right, #ff0000, #e08800, #baba00, #88e000, #00ff00)

 

 

上のグラデーションと比べて断然良くなってるし、これでわりと自然なんじゃないか。

 


 

最近何度か話題になっていた下記のようなページではHSL色空間を使うのが正しいというようなことが書かれていた。

qiita.com

f:id:naoya2k:20220411031623p:plain

でも僕はこれは違うと思うんだよなあ。だって真ん中のところ明るすぎるじゃん。不自然じゃん。真ん中の色は#ffff00だろ? #ff0000→ #ffff00→ #00ff00にしてるじゃん。平坦な道を行きたいのに完全に峠を登って下るみたいなことになってんじゃん。

これが「いい感じ」と思えるような人、そしてこういう効果を狙ってやってるならこれはこれでいいんだけど、でもこれが「正しい」って思っちゃうのは、ダメだ。

 

 


 

途中が完全に灰色になってしまうので不評な青→黄色のグラデーションも試してみよう。素のlinear-gradientではこうなる。

linear-gradient(to right, #ffff00, #0000ff)

 

 

ガンマを考慮した場合はこうだ。

linear-gradient(to right, #ffff00, #e0e088, #bababa, #8888e0, #0000ff)

 

 

これは全然それなりに正しい感じになっていて*1、でも中央の色は完全に灰色の#bababaなんだ。だから、グラデーションが不自然なのは、灰色が出現するからじゃなくて、リニアにグラデーションできてないからなんだ。

 

もちろんこれよりも色相を回してグラデーションをさせた下記の記事のようなもののほうが自然だというのであれば、それでもいい。でも僕は個人的には「黄色→青のグラデーション」に下のような緑や水色が出てくるのは、美しいかどうかはともかく、正しくないし、違うと思うんだよなあ。

 

f:id:naoya2k:20220411032540p:plain

グラデーションの中央がグレーに濁ってしまう仕組みをくわしく解説、美しいグラデーションをCSSで実装する方法 | コリス

 

 

 

*1:ここで微妙に弱気なのは、ガンマ補正を代表点5つの折れ線で妥協してしまっていることと、本当はRGBから計算された輝度、つまり 0.299×R + 0.587×G + 0.114×B がリニアに変化していてほしいんだけど、それができている確証がないからだ

社員を再教育してソフトウェア開発をさせるという話に思う

もにょる。

 

[B! 教育] デンソー、学び直しで1000人を「転身」 ソフト技術者に

 

このようにコメントした。

デンソー、学び直しで1000人を「転身」 ソフト技術者に

「事務をやってた1000人を学び直しでイラストレーターに転身させます」というのはダメそうだと誰でもわかるのに、なぜこれはできると思ってしまうのだろう。

2022/04/08 07:33

b.hatena.ne.jp

 

あなたがどこかの会社にイラストを発注するとしよう。学生の頃から絵を描いてきた人ばかりを集めている会社にこれまでは発注していた。という状況だったのに、30歳を超えてから絵を描く勉強を始めたような人が1000人も居る会社に、安心して頼めるだろうか。僕はムリだ。まあしかしもちろん他のソフトウェア開発の会社も未経験OKでばんばん新卒や中途を雇っているので似たようなものだ。だからソフト技術者には転身できると思われているし実際できる。

 

とにかく今の日本ではソフトウェアは安心して発注することができない。

Raspberry Pi 400を購入して、このキーボードは使い物にならないと思ったけどそうでもなかった件

少し前に買ってた。キーボードはJP配列

Pi4を買ってなかったのでどうせならPi400を待とうかなと思ったのはJP向けが去年(2021年)春に発売されるという情報が流れた2020年末頃のことだった。しかし実際に入手可能になったのは今年に入ってからだったのでほぼ1年遅れ。Pi4が発売されてから2年以上経ってて微妙だなという気もしたがこの2年間特にPi4なしで問題があったわけでもなし。

 

ファーストインプレッション的なやつ

良いところ
  • 電源ボタンがある
  • キーボード一体型で持ち運び&取り回ししやすい
  • Pi4Bだとケースをどれにしようか、放熱をどうするかとか悩む必要があるがPi400はそのへん悩まなくていいので楽ちん
個人的にちょっと残念なところ
  • でかい。もっとピッチのちいさいキーボードだったらもっとよかった。
    12インチのレッツノートよりも横幅がでかい。僕がいま使っているキーボード付きデバイスでこれより横幅がでかいものはMacBook Airくらいであり、割と残念
  • キーボードが微妙。キーの中心以外を押しこんだとき、「クリック感があるのに入力されていない」という現象がわりと高確率で発生する。タイプのしかたによっては問題にならないかもしれないので、キータッチに問題があると感じるかどうかは人によるだろう。
  • 最上段のファンクションキーの配置。F11とF12だけFnを使わないと入力できない微妙な配置。キーをつめてF12まで並べるか、Fキーとそれ以外の間だけスペースを開けるとかしてほしかったなあ。
  • コネクタが微妙に不便
    内側にオフセットされていないからケーブルを繋ぐと後ろに飛び出る形になり取り回しに苦慮する
    L字形のコネクタを使えるか試してみたが隣り同士のコネクタが干渉してムリという感じだ。
  • HDMIがフルサイズではなくmicroHDMIなので、変換アダプタを使うとさらに後方に飛び出る形になってしまうつらみ。

 

最大の特徴だったキーボードが微妙だったのは本当に残念で、「これは一見パンタに見えるけども実際にはもっと安物がつかわれているんじゃないだろうか?」なんて疑いを持ってしまうくらいにキータッチがいまいち僕の好みではないもので、そして致命的なのが押したはずなのに入力がとりこぼされてしまうところだった。個体差かもしれないと思った。

Pi400を購入してしばらくして同僚から「私もPi400買おうと思ってるんですよね」と雑談したときに「あのキーボードには期待してはいかんぞ」と答えてしまったくらいだ。

 

キーボードについて

しかしあまりにキーボードがイケてないので、どんなキーボードを使ってやがるんだこいつと思い分解してキーを確認することにした。

Pi400の中を見るのはこの手のものを分解したことがある人にとっては簡単である。ネジがなく上下のプラスチックのパーツがツメでとめられているので、隙間をこじあけてとめられている部分を外していくだけで上下が分解できる。上側のキーボードと下側のメインボード部分に綺麗に別れる。

これがそのキーボード側だ。

Pi400のキーボード裏面

キーボード裏面

事前の予想を覆して、全くもって、コストダウン一辺倒な作りではなかった。

構造を見るとちゃんとパンタグラフ式のキーボードであり、大きめのキーには丁寧にスタビライザ(金属部品)が付けられている。たとえば安物のキーボードではCapsLockキーにスタビライザは付かないが、Pi400の日本語キーボードのCapsLockキーはちゃんとスタビライザが付いている。スペースキーには上下2本、Enterキーには縦と横の2本のスタビライザが使われている。これはなんだか贅沢な気がする。

左ShiftとCapsLock。

左ShiftとCapsLockとTab。Shiftには2つのパンタグラフが使われているがこれは欧州のキーと共通化するためかも。

つまりPi400のキーボードはそこまでコストをケチったわけでもないのに、キータッチがよくないし入力を取りこぼすのだ。なぜかはわからない。

 

でもひとつだけいくつか気づいたことがある。キーボード背面どまんなかに貼られている「Japan 日本」書かれたシール。僕の購入したPi400の個体は、このシールの中央にたわみがあった。それにこのシールはキーのパンタグラフ部品にも部分的にくっついてしまっている。これはよくないだろう。

このシールを丁寧にはがし、パンタグラフ部品にくっついている粘着物を拭き取って再度組みたてたところ、中央部のキーの入力取りこぼしは激減した。これまで「i」とか「u」とか「e」などがよく取りこぼされていて、「じぇい」と入れようとして「じ」になったりして苦しんでいたが、それがかなり減った。

 

中央部のキーが正しく反応するようになって大分マシになったもののやっぱりキータッチが良くないし矢印キーと左Shift、それからSpaceはまだ入力取りこぼしが発生しがちである。左Shiftは欧州配列との共通化のためにパンタグラフが2つ使われているがそのうちの左側に接点があるようで、それが良くない結果(左端周辺を押したときに角度によって入力されないという現象)を生み出しているような気がする(なぜ右側を使わなかったのかと思う)。いまは日本語入力にプレーンなSKKを使っているのでShift取りこぼしはキツい。SandSを導入すべきか悩んでしまうくらい。

Spaceも同様で2つのパンタグラフが並んでいてそのうち右側が使われている。このため左手親指でSpaceキーの左側を押しこんだときクリック感を感じてすぐに離すと、そのクリック感は左側のメンブレンのものであって、右側のメンブレンは押し込まれていなくて、結果として入力がされないという現象が発生するように思える。これも、左手親指Spaceキーを押している僕にはつらい。

(追記) と最初にこれを書いていたときには思っていたが再度分解して確認したらそうではなかった。Spaceも左Shiftも、パンタグラフは2つだがメンブレンはその2つのパンタグラフの中央にあった。このようなキーボードは初めて見た。パンタグラフの内側にメンブレンがないようなパンタグラフキーボードって成立するものなのだろうか??

矢印キーも最悪だが小さいし数が少ないので個別になにかのハックを施して改善できるかもしれない。

 

キーの数が多いほうがいいと思ってJPキーボード版を購入したが、もしUSキーボードで左ShiftやSpaceがまともなのだったらUSにしておいたほうがよかったかも? と思ってUSキーボード版の分解記事(例えば ラズパイ一体型キーボード「Raspberry Pi 400」を分解してみた:名刺サイズの超小型PC「ラズパイ」で遊ぶ(第34回) - ITmedia NEWS

  )を見てみたらキーボードの裏面がJPキーボードとは全く違っていた。これは初期型だからこうなのか、それともJPキーボードを作るときにコストダウンされて金属をケチったのかどっちなのだろうか。

 

あるいは、US配列のRaspberry Pi キーボードを買って、Pi400のキーボードと交換できたりしないかなあ。

サイゼリヤと同じ料理でも雰囲気に金を払うんだという理屈だとバルミューダフォンも肯定されるべきのではないか

いやもうわざわざブログエントリを一つ起こす必要なくて、もうこれタイトルだけで全部伝わるんじゃないか。

  

 

こういうTogetterのエントリがあり、これはその下のほうのコメントも含めて非常にややこしい話だなと思ったわけです。

togetter.com

「質など見てなくて」とか言うけど、でも僕は「iPhone13miniとそのへんのエントリAndroidって、どっちも同じようなコンパクトスマホだから後者でいいでしょ」みたいに言われたら「なんだよこいつ」と思ってしまう。それはそこにはやっぱり値段分の性能差があるのがわかっているからなのだけど、でもスマホをカジュアルに使う層にとってはそこの性能差なんて全然わかっていないけどもiPhoneを選んでいる人達がたくさん居るというのも知っている。

「自分にとっては違いがわからないから不要」というのは、「32インチのテレビにフルHDは不要。1366x768のパネルと見分けがつかない」とかかいうのともしかしたら同じことを言っている可能性がある。

だから、もうちょっと高級なイタリアンとサイゼリヤを比べてサイゼリヤを貶すひとたちが本当に「質など見ていない」という決めつけを完璧にできるためには、そいつらに割と圧倒的にマウントできるくらいのイタリアンの知識が必要なんじゃねと思っちゃう。

 

 

そしてそれとは別に「実体として料理自体はサイゼリヤと同じであっても、俺たちは雰囲気に金を払っているし、それがわりと重要」というコメントが複数あったのだ。そしてそれも個人的には理解できる。だとするとバルミューダフォンは「4万円のスマホと同じような中身や性能であっても、端末の佇まいがいいの雰囲気に6万円出して、合計10万円でもいいぞ」という人向けの端末なので何も叩かれる謂れはないし、それを買った人を馬鹿にしてはいけないのだ。バルミューダフォンを買った人を無条件に馬鹿にするような人間になると、客単価4000円のイタリアンに行けなくなってしまうのだ。

 

しかしバルミューダフォンがそういう端末だったとすると、今起きている「14万円だった端末が売れないので値下げして7万円にしました」というのはちょっとよくないかなとは思う。半年で価値が半額になるようなブランドを、今後、値下がるのを待たずに初値で買うことができる人がどれだけたくさん居るのかはよくわからない。

新年あけましておめでとうございます

もう2022年になってから随分たつけど、新年からいろいろあるね。

 

カザフスタンの話

電力が安いから中国からマイニング業者が流れてきて電力供給がピンチになり庶民が脅かされている話、政府が補助を出してLPGなどのエネルギーを生産コスト以下で販売していたために、LPG業者は国内に売るより輸出するほうが儲かるので国内向けの燃料が不足した話。

なんとなく2014年頃からベネズエラで食料不足になっていたのと類似を感じてしまう。とはいってもベネズエラはおそらく比べものにならないくらいに酷くて、国民が食料をちゃんと得られるように食料を国内生産原価以下にするようなセルフダンピングを行っていたために国内での食料生産が壊滅してしまい食料が不足したということなのだが。カザフスタンはLPGは自国で生産できているし、年末からのデモの原因になっている燃料高騰は上記のようなセルフダンピングをやめて正しい状況に戻そうとした結果なのでそこまで悪くないような気がする。

 

 

カバークロップの話

 

イリノイ州で農家を営むジャック・マコーミックさんは昨秋、農閑期の作物として大麦とラディッシュを350エーカー(約142ヘクタール)に植えた。だが収穫するつもりはない。春になれば除草剤で枯らした上で、同じ土壌に大豆を植える予定だ。

 

アングル:米農家、炭素を吸収する「カバークロップ」に着目 | ロイター

 

これはわりと意味不明な気がする。しかし実は10億年前に高度な文明があって、似たようなことがなされた結果がいま世界各地にある油田なのかもしれん。わからん。

 

CES 2022

今年は去年のUMPCとかJasper Lakeみたいな話が全くなかったので小さいPC好きにはイマイチなCESだったと思う(ニュースを見落としていたらすまん)。結局僕は今のCPUとメモリが載ったLibretto 50かVAIO Pが欲しいんだよな。でも誰も作ってくれん。僕がもし100億円を道楽に使えるなら宇宙旅行なんかせずにVAIO Pを作ることを考えるだろうと思った。27億円あればバルミューダフォンが作れるんだ。50億円くらいあればVAIO Pに似たようなものが作れるんじゃないだろうか。

それとは関係ないがソニーが車を作るという発表をしたのは、結局電子機器の製造では中国に勝てないということになったからなのか、撮像素子の未来を見極めるには自分で車を作らないといけないということになったのか、それとも何かやりたいことがあるのか、そのへんどれがどれくらいのウエイトを占めているのかはよくわからん。