2025年5月21日水曜日

小ネタ


 Why We're Building the HX50 the Way We Are - YouTube

 単発航空機は、1978年にはアメリカのメーカーだけで1年に1万8千機弱を製造していた。セスナ172は現在の価値で8万ドル。当時はアメリカ人の平均年収の1.3倍の価格だった。現代は当時よりも比較的裕福な社会にもかかわらず、平均年収の6倍の値段になっている。既存の航空会社は古い機体を以前よりも高い値段で販売し、市場が縮小していっている。

 可能な限り既存の技術を使用して低価格化する。ただし市販の部品(ジェットエンジンとか)を購入すると非常にコストがかかるから、可能な限り内製化する。複雑な製品は作らず、なるべくシンプルに。

 現在販売されている航空機が設計された1960年代から1980年代にはコンピューターを全面的に使用した作業はしていない。現在では容易に有限要素法解析や流体シミュレーションができるから、効率的に開発ができる。

 なんかロケットベンチャーに近い雰囲気を感じるな。大昔に開発されて特許が切れたような技術を再利用して、ソフトウェアで制御できるところはハードウェアを廃して、最適化しながらシンプルに安く作る。

 すでに1400機の販売が契約されているらしい。そんなに売れてるのか。今契約して受け取れるのは何年先になるんだか。1週間に1機作ったとして28年、休み無く1日に1機作ったとしても4年近くかかる(現在開発中だからさらに先になる)。セスナ172が70年近くで4.4万機以上、R44が35年で7000機弱の販売だから、魅力があればそれくらいの数は売れるんだろうけど、しかしすごいな。



 15年間の小型ソーラー電力セイル実証機「IKAROS」運用の終了 | 宇宙科学研究所

 むしろ10年も探してたんだな。どんな運用やってたんだろう? 地上局のスキマ時間にコマンド打ってスペクトル積分して、みたいな処理を走らせてたんだろうか。最近はP-CやHay2のダウンリンクに使ったりで深宇宙局も忙しそうだが。ここ5年位は運用の報告書みたいなやつも出てこないし、ちゃんとした(対外的に報告を行う必要があるような規模の、あるいは報告を行うだけの余裕のある)運用は行っていないんだろうけど。



 北海道上富良野町公式(行政)ホームページ|上富良野駐屯地創立70周年記念行事のお知らせ

「(前略)航空自衛隊のブルーインパルによる飛行展示が予定されています」

 地元に来るー!と喜んでいたら。。。



 Fr24のカバレッジマップみたいなものってないのかな。あるエリアに予想できるフィード数と、実際に報告されたフィード数の比みたいな図。それがあれば受信機を追加すべき理想的な場所とか、次善の策として指向性アンテナで受信する方向とかの判断に使いやすそうだが。



https://www.data.jma.go.jp/mscweb/technotes/msctechrep40-4.pdf

 気象庁の時刻・周波数標準の設備。2002年に、短波JJYの廃止に合わせて更新した際のもの。Csを基準に複数の周波数や時刻を出力して、各種機器の時刻同期や気象衛星の通信設備のアップ/ダウンコンバータへ供給する。

 IRIGのフォーマットや原子時計の原理、精度や確度の考え方とか、色々説明している。

 1,5,10MHzや、コンバータ用の中途半端な周波数が6種類とか。オシロで監視したり、ペンレコーダで記録したり。いろいろと複雑。



https://www.data.jma.go.jp/mscweb/technotes/msctechrep57-1.pdf

 2012年。気象庁の周波数標準設備の話。2010年に更新したシステムの紹介。

 クロックをRbへ変更し、GPSを追加。時刻や周波数の出力もだいぶ整理したらしい。とはいえ、周波数系と時刻系が独立していて、まだだいぶ複雑な感じ。

 クロックはRbから1MHzと10MHzを作って、周波数基準用としてはそれを出力。アップ/ダウンコンバータ用の中途半端な周波数は10MHzから合成。Rbの基準はGPSから得る。

 時刻はIRIGタイムコードとNTPの2系統があって、IRIG系はJJYから、NTPはGPSから得ている(時刻のGPSと周波数のGPSは独立)。

 周波数とIRIGはホットスタンバイの2重系なのにNTPは1系統しかないのが謎い。局内のPCの同期に使う程度であって、NTPサーバーが故障した場合は外部(例えばNICTとか)に取りに行く、みたいな考え方なのかな?


***


 L1 C/Aのビット列をログっていた時に体感できる地震があった。ので、PRN189(QZS-3)のDC Reportをデコードしてみたんだけど、HypocenterとSeismic Intensityだけで、Earthquake Early Warningは見当たらない。地震の規模とかによるのかな?



 SBAS Ionospheric Grid Point Masks

 バンド0-8は左下から上に向かって、1列ずつ東にずれていく。バンド9,10は赤道側左端から右に向かって、1行ずつ極にずれていく。おそらくこういう配置だと思うけど、正しいのかはわからん。ググって出てくる画像とは様相が違うのが怖い。

 アルゴリズム的にテーブルを作ろうとすると、バンド0-7で緯度85度に1箇所ずつ追加しなきゃいけないのが面倒。とはいえ、全部で2192点(バンド9,10は一部が他のバンドへ重複)あるから手動でテーブルを作ったりするのは大変そう。


 いくつかの衛星から受信したIGPのリスト。ただし3分間に受信したリストだから、他にも出ている可能性もある。

 ↑PRN128 GAGAN

 ↑PRN130 BDSBAS

 ↑PRN137 MSAS

 ↑PRN142 Unallocated (KASS?)

 概ね妥当な結果な気がする。とはいえ、かなり範囲が広いのがちょっと謎い。どうやって補正値を得ているんだろう? 



 IS-QZZ-PNT-006p53の、AlmanacのSV healthの、1st to 3rd bit (MSB)がL1C/A or L1C/Bになっているの、どういうエンコードなんだろう? 3bitの中で1bitでも立っていたらL1C/AとL1C/Bのどちらか(排他的に使用)が正しくない、とか?

 QZSのHealthは色々謎いな。



 Explanation for the GPS “special message” field - Geographic Information Systems Stack Exchange

 GPSのSpecial Message(ページ17、SV55)の用途に関して。まあ、何もわからないということがわかりました、という感じではあるけど。暗号化鍵(Wコード)の更新に使うのでは、みたいなウワサも。

 確かに定期的にデポに持ち込んで鍵を受け取るよりはOTAで配送するほうが楽だろうけど、とはいえ平文で飛ばすかな? Wコードの生成鍵をP(Y)で飛ばすと長期間電源OFFの受信機を再使用するときに困るというのはそうだけど、とはいえ。Wコードの生成鍵の短周期成分はC/AコードのOTAで飛ばして、長周期成分は受信機のRAMに入れておいて、セキュア情報を削除しなきゃいけないときはRAMをクリアすれば短周期成分をOTAで受信しても意味がない、みたいな感じの運用になっているのかな?


 QZSSの場合、Special Messageは各衛星のブロック番号の放送に使うことがあるらしい(GPSはSv63、A-S Flagsのビット列でGPSの世代をおおよそ推定できるらしい)。



 セキュアなPNTを想定したシステムで、L5について「国際的に保護された帯域(ARNS)だから信頼性が高い」みたいな説明があるけど、それってどうなんだろう? L1もARNS帯域では? 悪意を持って妨害するやつはそもそも非合法とか違法とか気にしないんだから、いくら法的に保護したところで無意味だと思うが。法的に保護しているから悪意のない電波を取り締まることが容易、みたいな話なら、L1もそうしろよということになるし。L5は拡散符号が高レートだとかの違いはあるにしても。


***


 JavaScriptベースでGPS L1 C/Aメッセージ(LNAV, SBAS, L1S)のデコーダを作ってる。デバッグ用にあると便利かな、と思って(あっても良さそうだけど、ググっても見当たらなかった)。

 とりあえず、テキストボックスにHEXを突っ込んだら全部デコードして、オプションでPRNを追加すればQZSSの変更部分もある程度処理してくれる。


 フィルタはPRNやメッセージ種類を選択できる

 とりあえず手元にデータ&仕様書がある範囲だけ実装。


 DCXは結構高い頻度で放送されているけど、全部テストメッセージ(ゼロ埋め)で、中身は何も無い。まあ、少なくとも「生命または財産に対する脅威の可能性」以上の警報を放送するシステムだから、中身が無いのは良い知らせってことなんだろうけど。


 SBASは1秒に1個のメッセージが送られてくるから、一つの衛星(例えば条件によって常時可視を期待できるPRN189とか)に絞っても、1日あたり9万個近いメッセージが送られてくる。全部を記録して、特定のメッセージ(MT43だけとか)を表示しようにも、読み込むだけでも大変そう。やはりWebブラウザはWebブラウザということなんだろう。

 WebブラウザでないJSエンジンを使えば高速に処理できるんだろうけど、それならC#で書いたほうが(個人的に)楽だろうし。Webブラウザは<sup>とか<sub>で数学的な表記がやりやすいのが便利ではあるのだが。



 しかし、JS使うの久しぶりだな。8年ぶりとか? うわーぉ。そんなに前か。

 JavaScriptで書いてるから、ブログのHTMLエディタに貼り付ければそのまま走ると思うけど、とはいえ5千行くらいあるからなぁ。UI周りは流石にデカくて、これだけで2千行くらいある。SLASデコーダも2千行くらいあるけど、これは市町村のテーブル(1800地域程度)がデカいだけで、デコーダ自体はそれほどのものではない。ちなみにこの市町村テーブルは火山/降灰に使うだけで、地震とか気象には使われない。

 まだ色々気になるバグもあるし、そのうち安定したら公開するかも。あるいはその前に飽きるか。



 ローカルファイルのページを再読込せずにURLパラメータを書き換える方法を探しているんだけど、見当たらない。ローカルファイルを読んだ場合、historyはセキュリティポリシーで使用禁止。location系に書き込むと再読込する。なんかいい方法ないものか。ググってもhistory系の操作しか出てこない。

 URLを再読込せずに表示だけ変えるのは別のWebサイトに偽装できるからセキュリティ的に危険、というのはわかるけど、せめてURLパラメータくらい好き勝手に書き換えさせろや、という気がするんだけど、URLパラメータを書き換えることで発生する危険性って何があるんだろう?


 配列の初期化で[1:"a",3:"b"]みたいに書いたら長さ4で0と2はundefinedが入ってる感じに初期化するような仕様があっても良さそうなのに、そういう挙動にはなっていないらしい。


 オブジェクトのキーがobj.abcとobj["abc"]を区別しないの、面白いな。同じような値が連番で入っているときに、obj.value1, obj.value2, obj.value3みたいにアクセスもできるし、for(let i=1;i<=3;i++){obj[`value${i}'];}みたいにforで舐めることもできる。C#でいうDictionary<string,object>みたいな感じだから当たり前といえば当たり前とはいえ。


 return\n123みたいなテキスト、要するにreturnの直後で改行してその後に戻り値を指定した場合、戻り値が返らないのが謎い。return文の中で三項演算子とかちょっと長めの文を書きたいときに、returnの直後で改行すると、バグる。JavaScriptは1文をセミコロンで終端する必要がないし、戻り値の形(少なくとも有無)も宣言する必要がないから、戻り値の有無の解析は面倒そうだけど、とはいえ。

 Webブラウザにデバッガがない時代に、コードの途中にreturnを挟んでそこまで正常に走るかどうかを見たい、みたいなときに、returnの次の文の結果が返るのが不便だった、みたいなことなんだろうか? それくらいセミコロンで終端しろよ、とも思うけど。それとも単に構文解析の都合の問題なんだろうか。


 C#でちょっとした情報出力がほしい場合、Debug.WriteLine((hoge.a,fuga.b));みたいにタプルにすればいくつかの変数をまとめて出力できるけど、JavaScriptでconsole.Log({hoge.a, fuga.b})みたいな文法は許可されていないはずで、console.log({a:hoge.a,b:fuga.b})みたいに書かなきゃいけないのがちょっと冗長な感じ。

 


 チェックボックスの indeterminate 状態は将来多分なくなる - feb19

 うーん…… マーケティング的にダークパターンで使いやすいから廃止すべき、みたいな理由っぽい。

 とはいえ、3ステートのチェックボックスはいろいろ使いやすいし、無かったら必要な人は画像で作るだろうし、悪用したいやつだって画像で作るだろうし。どうせ車輪の再発明を全員でやるくらいなら残したほうが便利だと思うんだけど。

 むしろ「すべて選択」ボタンを表示するほうがダークパターンっぽい気がする。ネスト/3ステートCheckboxならチェックボックスを押して全選択/全解除ができるけど、「すべて選択」ボタンは一旦全選択すると全解除ができない。そうするとCheckboxを全部ポチポチして解除する必要があるから、手間がかかる。興味の対象を選ぶUIで全選択ボタンを誤タップさせて全部選択した状態で、解除するのが面倒でそのまま申請したら大量の広告が届く、みたいなシステムが作れる。


0 件のコメント:

コメントを投稿