Surface Go見てきた

小さくて軽くていいね。でもキーボードつけるとそこそこな重さになるし、寝ながらとかひざの上で使うのとかが普通のクラムシェルと比べて不便そうだし、SSD128GBは小さいし、ということを考えると絶賛というわけにもいかない。


同じくらいのマシンパワーでモバイルというところではGPD Pocket 2と、このSurface Go、そしてレッツノートRZのどれを選ぶかという話になってきてしまう。
Surface GoのRZと比べてのいいところは、安いことと、ペンが使えるところだ。でもそれだけだ。一方でRZはキーボード一体なのでぶらぶらしないとか、電池やSSDを交換できるとか、外部端子がいっぱいあるとか良いところがいっぱいある。


一方でGPD Pocket 2と比べた場合、Surface Goのほうがいいところは、下記だけである


GPD Pocket 2のいいところは下記であり、普通に考えると僕の用途ではこっちを買うべきな気がしてきた。でもキータッチとかが不安なので様子見でいいですかね…?

  • 軽くて小さい
  • 2-in-1ではないので使いやすい
  • 安い
  • CPUが速い
  • USB A端子がある

Ryzen 5 2400Gを強引にIN-WIN BQ656/120Nに入れている件のこと(追記しました

結論

アイネックスのCC-01(1500円くらいで売ってる)を買ってきてそのファンをWraith Stealthに載せるのが正解っぽく思える

経緯

今年のGWにRyzen 2400Gを買ってIN-WIN BQ656という小さいケースに入れようとしたら、付属リテールクーラーであるWraith Coolerが邪魔で蓋が閉まらないという残念な状況となり、工作用紙でファンの部分だけ切り抜いた用紙を仮の蓋として使っていたがどうにもシマらない感じでイヤだった。このケースに収まる薄型クーラーはないものか? しかしAM4クーラーはあまり存在しないようだった。すでに同型のケースで試している人が居たのだが(多分Mini-ITXで最小IN WIN IW-BQ656/150N-U3の小型PC)、5000円くらいする割と高めのやつでも、ちゃんと閉まらなかったりするというのではちょっと怖すぎて購入を躊躇してしまうのだった。前で示したブログの人はC7V2という6000円するCPUクーラーを導入しているが、それでも蓋が正しく閉まっていない。


ところがさらに調べていたところ、付属のクーラーは50mmの高さがあるが、AMDロゴのパーツを外すと45mmまで小型化するということだった。AMDロゴのパーツははまっているだけなので簡単に外れるということだ。そこでいろいろ試してみた。

  • 普通にマザーにファンがとりついた状態で、上からAMDロゴのパーツを外そうとしてみる → なんか外れそうだが全然外れん
  • ファンがヒートシンクにねじ止めされているのでそれを外してみると、ファンとAMDロゴのパーツが裏側からネジ止めされていることがわかった。つまりファンをヒートシンクから取り外し、ファンの裏側にあるネジを外さないとAMDロゴのパーツは取れないようになっていた。
  • ネジを外すとAMDロゴパーツが取れて、劇的に小さくなった。こんなにコンパクトなんだったら最初からこの大きさにしておいてくればもっと好感度上がったのにと思った。しかしAMDユーザは大きいの好きそうなのでしょうがないかもという気もした。
  • BQ656のケースの蓋をあてがってみると、高さ的にはBQ656のメッシュの部分の高さに収まる感じ。ただ僕のマザーは配置がいまいちでCPUが後方にありすぎて、ケースのメッシュの部分の端とCPUファンが干渉してしまい蓋が閉まらなかった。
  • 仕方がないのでファンをオフセットして配置し強引に蓋を閉めた。たぶん冷却能力は劇的に低下したと思う。でもまあよいのだ。当面これはこれで。
  • マザーによっては問題なくBQ656/120Nに収まる可能性があると思った。
  • この干渉は後継機Chopin(IW-BQ696)またはIW-BQ656/150Nのサイドパネルなら解消するかもしれない(多少メッシュ部分が広がっているようなので)。一瞬BQ656/150Nを追加で買ってしまおうかという気にもなったが、ちょっと確実じゃないので思いとどまった。しかしたぶん7000円とかのロープロクーラーを買ってもやっぱりうまくいくかどうかは不確実なのである。それよりはBQ656/150Nを買うほうが電源のパワーアップするしUSBのアウトレットも3.0になるしきっといいと思った。
  • 8cm角マウントの薄型ファンを買えば解決なのかな? それだと安く解決できてうれしいかも。
    アイネックスIntel向け薄型クーラーCC-01ってやつを買ってきて載せたらばっちりだった。しかもCC-01は1500円くらいで売ってる。AM4用の薄型クーラーを物色するよりはまずこれを試すべきと思った。

ピンハネとかいうけどさ

「ピンハネ」が、日本を貧しくしている。 とかいう記事があって雑な議論がされてるけど実態はだいぶ違うのではないかと思う。なお、僕は発注元から4次受けくらいまでのすべての階層を経験したことがある。
(しかし下の話も僕の少ない経験を元に書いているのでそれなりの雑さではある)


発注元はだいたい何をしていいかがよくわかっていないので完成品を作ってもらえるA社に業務委託するわけだ。
ところがシステム開発というのはブレ幅が大きい。見積通りの予算や規模で完成するかどうか、とてもあやしい。最初10人で1年間くらいでできそう、と言っていた案件が1.5年や2年かかることはザラにある。いっぽうでラッキーにも8か月で完成してしまうこともある。
さて一方で発注元としては予算がある程度限られているしきっちりした見積で安定して仕事をしてくれるところに頼みたい。たとえば10人を1年間張り付けてやりますよって見積もってたけどなんかちょっと基本的な設計をミスっていたことが途中で発覚しリカバリのために途中から15人に増員しました、と言われても困ってしまう。そうするとちょっと余分に払ってもいいからそういうトラブルが発生したときには自腹でリカバリしてくれるところに頼むことになりがちである。それが元受けのA社の役目だ。要するにA社が本当に何も仕事をしていなかったとしても、ピンハネしているというけどもそのピンハネ額は保険料の意味合いが大きく、運がよければ1億できるところを最大5000万円まで赤字でもやりきってくれる、みたいなことをウリにされちゃたら、高リスクな案件のとき、少し高くてもそこにお願いしちゃうよね、ということなんだ。


だからまあ、見積は1人月100万円x120人月ですよー 、と言いつつ、実際に使う額は80万円x120人月で、残りの20万円はプロジェクトが炎上したときに使う予算や、A社のなかでの他のプロジェクトの赤字の補填に使われているのだ。もちろんそのほかに下請けがやってくれなさそうな、全体の開発の段取りとか、顧客への進捗報告とか、不具合説明の資料作成とか、そういう「一見、下の人間には無駄なように思えるんだけど顧客は必要としている」作業をやったりしているのでその分にも充てられている。


たとえば富士ソフト(9749)という僕ら世代には悪名高いソフト屋があり、いかにもピンハネをものすごくやってそうな印象があるが、営業利益率は5%ちょっとしかなく、そんなに利益が出ているわけではないのはそういう要因が半分以上を占めるのではないかと思っている(残りの要因として考えられるのは富士ソフト社員がほかのことに使っちゃってるってことなのだが…)。



さてA社的には受注してしまったら何がなんでもやりきらないといけない。そして開発人材が足りない。いや、A社にも開発できる人は居ると思うんだよ。ただね、2次請けとか3次請けとかがやらないといけないような状態になっているプロジェクトってのは、A社で人手が足りないから回ってくるので、そりゃ2次請けからすれば「そういう、丸投げプロジェクトばっかり」に見えるかもしれないけど、そうじゃないプロジェクトは下からは見えないところに少数存在しているんだ。なぜ少数かというとそりゃ巨大プロジェクトほど人手が足りなくなるし、巨大プロジェクトじゃなければ普通に僕みたいなやつと共栄さん2人、くらいでチョコレートを食べながら開発して終わらせてしまうからなんだ。


さて下請けのB社やC社の立場になると、またその下が居るのか? という話だがそりゃまあ人が足りないときはしょうがないじゃん。でもしかしこのレイヤは本当に実装やインテグレーションの主体を担う技術者が必要なわけで、「Javaができます」「できるとは言ったがそれはHello, Worldが書けるということだ!」みたいな人が来ちゃうと困っちゃうわけです。でもたまにそういうヤツでもなんとかなっちゃう現場もあったりするから怖い。まあなんにせよB社が人が足りなくて、ヘルプでさらに下のD社に委託するときには、そういうヤツをチェンジできる権利が欲しい。あるいは急に家族の都合とか、病んでしまったりとかで出てこなくなったりしたときに代わりを用意してくれるサポートが必要。そういうことがD E F社には求められている。当然、B社からD社には、運よくそういうトラブルがなかったときと比べると高い単価が支払われているだろうけど、そういうトラブルが確率的に起こることを想定したリスクプレミアムが上乗せされているだけであり、単純にいまの案件をやっている技術者の価値がその単価分だけある、というわけではないのだ。もし僕が、月単価80万円で仕事を請けていて、諸経費等が月20万かかったとしても普通に60万残っているはずなのに、月20万しか手取りがなかったとしたら、それは僕が居る階層が、「素人でほとんど役に立たない奴とか、急に会社に来なくなったりする奴にあたる確率が40%以上」みたいな残念なところだからなんだ。


で、ピンハネ率を下げたい僕らがやらなければならないことなんだけど、「ピンハネやめろ」と大声で叫ぶことだけでは、たぶんダメだ。
ピンハネ分が保険料の意味合いを持っているのだとすれば、それを減らすためには事故率を減らすことだ。安定した見積ができる枯れたフレームワークや技術を採用していくようにすべきだし、チャレンジやイノベーションという言葉で新しいものを使いたがる奴らとは距離を置くべきだ。一方で報告資料作成とか進捗管理費用に費やされているのであれば、A社が作る報告資料よりも発注元にわかりやすいようなフォーマットの資料が自動的にできてしまうサービスを流行らせて、「なんだA社いらねーじゃん」と発注元に思わせることだ。そしてfizzbuzzが書けないようなヤツにプロを名乗らせないようにしないといけないような気がするのだが、これはいちばんむつかしいし賛否がわかれると思う。


(リンク先のエントリでは高プロと絡めてたけど、現時点では、あんまり関係ないんじゃないかなあ…?)

GPD Pocket 2についていろいろ

GPD Pocket 2の写真が公開されていた。まだFIXはしていないようだけどいろいろ気になる点はあった。コンセプトは下記のような感じに見えた
トラックポイントをなくしてキーボード最下段を筐体の下端まで持ってくる → 数字キーの縦幅を大きくして押しやすくする
・さらに上にタッチバー的なものを用意してそこに特殊キーを集め、物理キーの数を減らす


横方向に並ぶキーの数が1列減っているので、もしかするとPocket 2は初代より横幅が小さいかもしれない。そうだとするとそれはよいことだとは思う。しかしGPD Pocketを使っている自分としては物理キーが減ったこともポインティングデバイスの削除もどっちもあまりうれしくない方向で、どちらかというと
・キーピッチを縮めてもっとキーを多く配置してほしい
・あと2cm横幅を増やして、全部のキーの横ピッチをPocket初代の数字キー(14.2mmくらいだった)並みに小さくすることで横13個キーをおいてほしい
・そうするとESC/TAB/¥キーくらいを上に追いやるだけでそれ以外はあまり無理のないキー配置にできるのでは?
・縦ピッチも14.2mmにしてよいのでポインティングデバイス残してください
というような感じなのだけど。でもちょっと指の太い人にはこれは無理って感じになるだろうから無理かなとも思った。


そんなわけで写真からわかるキー配置あたりは理想から外れていってるような感じはあるのだけど、「実はPocket 2は380gでした」みたいなサプライズがあったら全然話は変わってくるので、結局大きさと重さが判明しないと良い悪いはわからないなとも思いました。

RX100 VIが発表されたという話

今回の売りは換算24-200mm F2.8-4.5のレンズだという。RX100初代が故障していていまいち使えないので新しいやつでよいのがあればほしい気がする。


RX100初代 28-100mm F1.8-4.9 101.6x58.1x35.9mm 240g(撮影時) 37000円くらい
RX100 IV 24-72mm F1.8-2.8 101.6x58.1x41.0mm 298g(撮影時) 80000円くらい
RX100 VI 24-200mm F2.8-4.5 102x58x43mm 301g(撮影時) 13万円くらい予想
DMC-TX1 25-250mm F2.8-5.9 110.5x64.5x44.3mm 310g(撮影時) 58000円くらい
DC-TX2 25-360mm F3.3-6.4 111.2x66.4x45.2mm 340g(撮影時) 90000円くらい


これは悩ましいね。dpreviewの記事のグラフを見るとTX1のレンズが割と良さそうに見えてしまう。

しかしRX100 VIには積層CMOSセンサによる4K HDR動画とか瞳AFとかのヒキの強そうなスペックが存在しており、そこは気になる。だがそれに2.5倍という値段が引き合うのかどうかということだ。28mm〜35mmくらいのレンジではRX100初代のほうが画質良かったりしそうだしなあ。


詳細レビューが楽しみな機種だ。個人的にはHEIFは導入されないのか? ってところと、ハイレゾショットやピクセルシフトマルチ撮影的なものがこのサイズでは原理的に有効でないのか、単に時期がまだなだけなのかが気になっている。

2.4GHz帯が混雑していてスプラトゥーン2がちゃんと遊べない問題

以前からNintendo Switchをやっていると左スティックが勝手に操作されたような状態になるような現象がときどき発生して困っていたのだが最近それが顕著に発生するようになっており、左の十字ボタンが効かないという現象も普通に発生するようになっていた。


今朝などはスプラトゥーン中に5秒間くらい左スティックでいくら操作しても自キャラが動かないような状況になり死んでしまったりととてもつらい。そこまでひどいことは起こらなくてもガチヤグラに乗り続けるのが困難。普通になにもしてないのにヤグラから落ちちゃう。エイムがどうこうというレベルじゃない、初心者でもそんなことはないようなミスがバンバン発生する。マジありえん。


最初はこの原因についてキャリブレーションの問題かと思っていて、その次に疑ったのはスティックが物理的に壊れている、というものだったのだが、最近ではもうこれは2.4GHzが混雑しすぎていてBluetoothの通信が妨げられているからだと確信している。


今住んでいる部屋は集合住宅なのだがWiFiでアクセスポイントを検索すると20個以上出てくる。いま測定したらそしてそこから5GHzのものと重複と思われる分(同じルータから複数のSSIDが出ていると思われる分)を削除してユニークなAPを選別しても15個もある。2.4GHz帯はWiFiも安定しないしBluetooth Audioも2m以上離れれば音切れしまくり状態になるような感じで非常によろしくなく、だからスプラトゥーン2でうまく操作できなくても仕方がないのだと思う。



明らかに技適通ってないだろ的なアクセスポイント(Xiaomiのルータとか中華端末のテザリングとか)が複数見つかるとか、100mは離れてるだろうと思う近所のコンビニのWiFiアクセスポイントが検出されたりするとかは、しょうがないかと思う反面こんなやつに邪魔されているのかと思うと微妙に納得がいかない。しかしこれが現在の人口密集地帯の状況なのだしコンシューマプロダクトを作ってる人は無視してはいけないと思う(以前田舎に住んでる家電メーカのおっさんたちが「WiFiの接続性が悪くて信頼できないなんて迷信だ」的なことを言っていたのを聞いたときには「それは田舎だからです」ってちゃんと反論しましたがどこまで信じてもらえたかはわからん)。


ちなみにWiFiルータに対してPCからpingを打ったときの結果は下記のような感じでした。11g残念すぎるだろ。

[11aで繋げたとき]
192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =1ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =2ms TTL=255
                       : 

[11gで繋げたとき]
192.168.0.1 からの応答: バイト数 =32 時間 =594ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =4ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =278ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =2972ms TTL=255
要求がタイムアウトしました。
要求がタイムアウトしました。
192.168.0.1 からの応答: バイト数 =32 時間 =2806ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =1308ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =1956ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =2407ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =2087ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =2003ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =1274ms TTL=255
192.168.0.1 からの応答: バイト数 =32 時間 =1646ms TTL=255
                       : 


Wii Uのときはマシだったような気がするのがちょっと不思議だが、Wii Uでは本体側もパッド側も重厚なつくりだったのでアンテナに余裕があったのかもしれない。そうだとするとSwitchもJoy-Conの改良でなんとかなる可能性がある。期待している。

何かをしたいときに使うべきAPIが何か、そしてそれの使い方を調べたいときどうするか

初心者をググれカスと突き放すのは割と酷なのではないかという話 というエントリがあった。

https://teratail.com/questions/127346 にある、

毎回同じ段階でつまづいてアプリを完成させることができません。
例えば、位置情報を使ったアプリの場合

 1. 「GPSで位置情報を取得して、目的地に近づいたら指定した音楽を鳴らしたい!」
 2. 現在地の位置情報を取得して変数に代入
 3. 目的の位置情報を取得して変数に代入
 4. 現在値の変数 - 目的地の変数が指定した値より小さくなった場合、音楽を再生
 5. ロジックが決まって、いざ作ろうとしても位置情報の取得方法がわからない! ⇐詰む
 6. このアプリ作るのムリ
 7. 他のアプリを作ろう

これの繰り返しです。

について5.の部分をどうするかという話だった。
ベストアンサーには、

とりあえず「swift 現在地の位置情報を取得して変数に代入」でググってみます。
ポイントは「ios」ではなく「swift」というキーワードを添えること。

とあったが、なんでそんな微妙なキーワードでググるのかわからなかった。



そんなわけで自分だったらどうするだろうか。おもむろに「corelocation ios」で検索してみると、「ユーザの位置の取得」というAppleのページ
https://developer.apple.com/jp/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW11
が出てきた。このページで、iOSの位置情報取得機能に、

  • 標準位置情報サービス
  • 領域観測
  • 大幅変更位置情報サービス

の3種類があることがわかった。
2分くらいでこのページを斜め読みして、下記の記述を見つけて完了であった。

標準位置情報サービスを使用するには、CLLocationManagerクラスのインスタンスを作成し、そのdesiredAccuracyプロパティおよびdistanceFilterプロパティを設定します。位置情報通知の受け取りを開始するには、そのオブジェクトにデリゲートを割り当て、startUpdatingLocationメソッドを呼び出します。位置データが利用可能になると、この位置情報マネージャは割り当てられているデリゲートオブジェクトに通知をします。位置情報の更新がすでに送信されていれば、次のイベントの送信を待たずに、最新の位置データをCLLocationManagerオブジェクトから直接取得することもできます。位置情報更新の送信を停止するには、位置情報マネージャオブジェクトのstopUpdatingLocationメソッドを呼び出します。

ただ、CLLocationManagerへのリンクはリンク切れになっていたが。


「CoreLocationってのを知ってたから検索できるんじゃん」という話であるが、普通にiPhoneに興味を持って生活していたら聞いたことくらいあるはずだ。なくても、iOSでアプリを作るなら、
iOSテクノロジーの概要 - Apple Developer
https://developer.apple.com/jp/documentation/iOSTechOverview.pdf
に目を通すくらいはしていてもおかしくないのではないか。


別にCoreLocationというキーワードを知らなくても「iOS 位置の取得 API」でググっても上記のページは3番目に出てくる。1番目と2番目のエントリはクラスメソッド株式会社のブログで、それはそれでいいのかもしれないけど、Appleの解説ページには下記のような解説もちゃんとあり、今回の作りたいアプリには有用な情報のはずだ。

iOSアプリケーションが、バックグラウンド状態であっても位置情報を監視し続けなければならないのであれば、標準位置情報サービスを使い、UIBackgroundModesキーにlocationという値を指定して、位置の更新情報を受け取れるようにしてください(この場合、電池の消耗を抑えるため、位置情報マネージャのpausesLocationUpdatesAutomaticallyプロパティをYESとすることも必要)。このような位置更新情報を要するものとして、フィットネスや道案内のアプリケーションが考えられます。


Androidの場合はさらに簡単で、https://developer.android.com/guide/ の左の目次に「ユーザーの現在地」というのが見つかるのでググる必要もないのだ。


僕はこのような質問をされたときに「ググれカス」とは言わずに「CoreLocationでググれば出てくるんじゃないか?」と言うようにしている。しかしそれを教えたとしても、イケてるやつはちゃんとAppleのページを読むが、イケてない奴はAppleのページを避けてよくわからんブログに行って、基本的なことを把握せずにコピペで動かそうとし、失敗する。なぜ一番信頼できるはずの一次情報をわざわざ避けていくのかは謎である。