/var/log/hdk.log

2022 年 8 月

prev, this, next


01 (月)

%1 げつようび

あっつい日。 22 時過ぎても 30 度ってそんなむちゃくちゃな... 関東は昼暑くても夜涼しいのが南国よりいいところのはずだろ! (?)

きのうの .xsessionrc ではだめだったので改良 (?) した。

$ cat ~/.xsessionrc
LANG=ja_JP.UTF-8
until systemctl start pulseaudio.service --user
do sleep 1
done

本当は何か /usr/share/pam-configs/fscrypt の priority を正しく設定するやり方があるらしい...

%2 自宅サーバー PC

そういえば、自宅サーバー PC の SSD (Intel SSD 320 Series) って今どんだけの期間使っているんだ?

  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       95528
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       40
192 Unsafe_Shutdown_Count   0x0032   100   100   000    Old_age   Always       -       25

95528 時間!

$ date -d -95528hours;date
Thu Sep  8 12:40:22 JST 2011
Mon Aug  1 20:40:22 JST 2022

一時的に電源をオフにしていた時間はあるので使い始めはもうちょっと前になるが、どうやら実際に使い始めた日ではなく、ファームウェアアップデートを実行した日に一度リセットされている疑惑だw まぁ何がすごいって SSD 自体もすごいけど、パソコン本体の Fit-PC2 もすごいよな。 ディジタルサイネージなんかの商用利用も売りにされていた製品だけのことはある。

まぁ、11 年も経てばソフトウェア面はつらいものである。 Linux ディストリビューションとして Debian を選んだため幸い i386 (32bit) が継続して提供されているが、Ubuntu やら Fedora やらはこの 11 年の間に 32bit 版の提供を終了してしまった。 最初入れていた Skype for Linux (P2P) も、Microsoft に買われてプロトコルも変更され、32bit 版はなくなった。 Web ブラウザーもどんどん資源消費量が増え今や 1GiB RAM ではまともに使えるとは言い難い。 GNU Emacs はそこまで肥大化していなくて変わらず使えているが、ATOK for Linux (atokx2) を GUI なしで IIIMECF で無理やり使っているのは辞書が更新されないのでつらいものがある。 例えば、星野源も新垣結衣も一発変換できないのである。 これが矢口真里とか藤原竜也とかだったら一発変換できるので、辞書って大事だなって思える。

11 年経った今、こいつの強みは近年たくさん見つかっている CPU の脆弱性の影響をほぼ受けないことだな。 Intel も AMD も Arm も、投機的実行に伴う攻撃手法がいろいろ見つかっていている今日この頃だが、Atom Z530 は投機的実行を一切しないので、完全に対象外であり、その対策に伴う性能低下の影響も基本的には受けずに済むはず。

%3 F1

きのうの F1, ライブ中継を見ている時にはあまり気にしていなかった違和感をいろいろ思い出した。

"ハンガロリンクは追い抜きが難しい" と言われているし実際 F2 ではオーバーテイクは少なかったと思う。 F1 もスタートで少しごちゃっとした後はあまりオーバーテイクはない感じのスタートだったような気がする。 トップ 3 チームとそれ以外は性能差があるのでともかく、それでもハミルトンはノリスの後ろに結構長くとどまっていたし、フェルスタッペンもハミルトンをオーバーテイクするには至らなかった。 それがレースが進むに連れてオーバーテイクシーンがいろいろと映し出されていて、今思えば不思議な感じだな。 今年のマシンの特性もあるんだろうし、向かい風で DRS がききやすかったという話もあるらしい。

ルクレールの第 2 スティントが短かったのは中継を見ている時には深く考えていなかったが、冷静に振り返れば第 1 スティントをチームメイトのサインツよりだいぶ長くとっていたルクレールが、あのタイミングでピットインしたのは不思議である。 まぁ、フェルスタッペンのピットインに合わせたんだろうとは思ったが、これも "追い抜きが難しい" にだまされていて、前にいればいいんだろうと考えたようにも思える。 チームもだし中継を見ていた自分もそう思ったような気もする。 結果はハードタイヤが全く役立たずでどうしようもなかった。

ルイスハミルトンの第 1 スティント、ノリスの後ろで詰まっていてその間にチームメイトを含むトップ集団は離れていったから、あまりペースは良くないかと思ったが、そういえばノリスを抜いた後は速かった。 フェルスタッペンも一緒にノリスを抜いてついてきてしまったので、これでハミルトンは抜かれるかと思って見ていたが、そこからまさかの引き離しにかかっていた。 まぁ、フェルスタッペンはソフトタイヤでハミルトンはミディアムタイヤだったので、摩耗を考えれば不思議ではないといえばそうだが...

フェルスタッペンのアウトラップ、速いと言われてはいるがきのうの結末を思うと本当に速いんだなと。 不思議なのはタイヤを最初に一気に酷使すると長持ちしないという話。 どの人の解説でも必ずそういう話があるし、実際それで長持ちしなかったということも過去のレースではあったような気がするんだけど、フェルスタッペンには通用しない。 というか、ハミルトンの第 2 スティントの引き延ばしっぷりや終盤のソフトタイヤでの異様な速さ (ルクレールはハミルトンより後でソフトタイヤに交換したがハミルトンのファステストラップは更新できなかった) もあるし、タイヤの使いこなしっぷりはフェルスタッペンとハミルトンが異次元な気がする。

2022/08/01 のコメントを読む・書く


02 (火)

%1 かようび

むっっちゃ暑い日。 熱帯夜だけなら九州南部では夏あるあるなんだが、熱帯夜の最低気温から 12 度もあがるなんてあんまりだぞ! 体温を超えるこの気温でふらふら外に出るのはどう考えても命の危険が危ないので、在宅勤務かつ昼も夜も自炊にした。

iMac に前から Ubuntu は入れてはいたけど、本格的に GNU/Linux で端末運用にするのは今回が初めてだ。 Raspberry Pi 4 からホームディレクトリを引っ越すというなかなか珍しいパターンだと思うけど、それでデスクトップ環境も入れてログインしたら最初 Sensors Applet が画面に収まりきらない量のセンサー情報を出してきて笑ってしまった。 sensors コマンドで見ると applesmc-isa-0300 というところの温度情報が大量にあって、数えるとなんと 61 個もある。 -127.0 度というのもいくつもあるし、氷点下の数字が他にもたくさんあるので、意味がない数字が出ているのも多いんだけど、それっぽい数字が出ているのも 20 個以上あって、こんなに温度センサーがあるパーソナルコンピューターも珍しい。 あと、冷却ファンの回転数らしきものがひとつ出るが、おおよそ 1400rpm 前後をずっと指している。 これ、Mac mini なんかも同じぐらいなのかな、ファンレスではないんだけど、音がしないんだよな。 HDD の音もすごく静かだし、そのへん Apple 社のこだわりなのかも知れないけど、良くできている。 HDD なので遅いというのはあるが、macOS に比べたら許容範囲という感じ。

『異世界おじさん』っていうテレビアニメがあるらしいことを知っていたが、たまたま iMac の web ブラウザーの動作確認に ABEMA を開いたら、ちょうど 1〜4 話まで無料配信されていることがわかったので見てみた。 セガにどっぷりのギャグアニメ... 主人公が 2000 年 17 歳から 17 年間眠っていて目覚めたみたいな設定で、あれこれ同い年では? (キラーン) 17 年間も眠っていて筋肉が動くわけないだろ、なんて野暮な突っ込みはせずに楽しめる。 セガサターンが出てくるがこんなセガファンがドリームキャストに言及しないのはやや違和感がある。 おじさんって言うのは年齢でなく親戚関係の意味でありそういう意味では主人公は甥のほうなのかも知れない。 このおじさんの声に何となく聞き覚えがあるなと思ったら思い出した。 テレビアニメ『頭文字 D』の高橋涼介の声だ。 節々に高橋涼介っぽさを感じて、まるで頭がいいおじさんのように思えてきてしまって良くない (?)。 女性の好意にとても鈍いあたりに血のつながりを感じる描写もおもしろい。 いや、鈍い男性に好意を持つヒロインがいるあたりがフィクションなんだけどな! いやまぁ異世界なんて言っている時点でフィクションなんだけれども!

2022/08/02 のコメントを読む・書く


03 (水)

%1 すいようび

今日も暑い。 気象庁アメダスで東京都府中市のデータを見ると、最高気温はきのうより低かったが気温の下がり方が緩やかで、なんと 23 時を過ぎても 31 度台が記録されている。 どんだけ... 日が沈んでも熱中症要注意なわけだ...

最近 FM ラジオの入りが悪くて、特に InterFM がとぎれとぎれで、エアコンをつけているとはいえラジオ聞きづらくなったなー、なんて思っていたんだが... アンテナのまわりをチェックすると、そういえば、先月のエアコン修理の時に、エアコンの下に置いてあった小さな CD ラックをどけたんだった。 塗装された金属製のフレームに、塗装された針金を曲げて作られた棚が付いている CD ラック、それが壁に貼り付けた FM アンテナの目の前においてあった。 もしやと思ってそれを FM アンテナの前から離したらまたラジオが入るようになったw 犯人はこれかw まぁ、エアコンをつけているとザーザーノイズがのりやすいのは相変わらずだけど。 TOKYO FM (多摩地区向け 86.6MHz でなく、東京タワーの 80.0MHz のほう) はノイズが非常に少ない。 送信局のある建物が徒歩圏内のコミュニティ FM が最強ではあるが。

iMac を GNU/Linux 運用にしてから数日。 スリープ (suspend-to-RAM) させた後、ふとした時に復帰してしまったことが一回だけあったんだけど、なんか見ているとマウスが少々動いたぐらいでは復帰してこないように見える。 なんだろ、ダイソーの 100 円マウスで動くと光るから、動いたって信号は飛んでいるんだと思うんだけど、ちょっとぐらいでは復帰しないように iMac のハードウェアだかファームウェアだかが構成されているのか。 macOS をずっとスリープさせたままにしていた時は、その勝手に復帰するのが嫌で、Sun Microsystems の 3 ボタンボールマウスをつないでいたんだけどw iMac のほうが Raspberry Pi 4 より消費電力高いだろうなぁとは思いつつ、調べようと思った時にはエアコンをつけているので太陽光の電力モニターで観察できなくて、結局調べていない。

職場のデスクトップパソコンを 1 台新しいのにしてもらおうと思って探したが、あれだな、Ryzen はつよいが、Intel も第 12 世代になっていて少し TDP が高いものの価格的にはそこそこのところで買えるんだな。 でも Intel のほうが消費電力高いのか、と思うと 10 年前の AMD FX シリーズの頃とはすっかり変わったな。 BTO で探して、出てきたマザーボードの型番なんかで調べてみても、価格はそう高くはないように見える。 まぁ、安くしないと競争力が保てないのかも知れないけど。

えっ、13 年ものの会社のノートパソコン? まだ使っていますが何か?

2022/08/03 のコメントを読む・書く


04 (木)

%1 もくようび

曇り時々土砂降り。 涼しい。

職場のパソコンきのう発注してもらったのがもう届いたらしい... はやっ... さすが即納モデル。 今日は雨だから在宅勤務にしたのに...w

GNU/Linux を動かしている自宅の iMac14,4 (Mid 2014) を見ていると不思議な感じがする。 Core i5-4260U つまり第 4 世代の Core i シリーズでしかもモバイル向け (TDP 15W) なんだが (今の最新は第 12 世代)、想像以上にスムーズに動いている。 特に Mozilla Firefox で ABEMA を開いたときに、まったく引っかかり無く動いたのに感心してしまった。 HP ノート PC では明らかに遅くて ABEMA は挙動が変で、広告の音だけ聞こえたまま本編の動画の絵が動き出してしまい、再読み込みしたらなおるなんてこともあった。 /proc/cpuinfo の bugs のところを自宅の他のパソコンと比べると以下のようになる:

Core i5-4260U (iMac):
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit srbds
Core i5-560M (ThinkPad X201):
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
Atom Z530 (自宅サーバー PC、カーネル古い):
bugs            :

A4-9125 (HP ノート PC):
bugs            : fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
Ryzen 7 2700 (Ryzen PC):
bugs            : sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
C-60 (バックアップ PC):
bugs            : fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass

Intel の新しい順と AMD の新しい順に並べてみた。 Atom のところはネタとして... Core i の第 1 世代と第 4 世代でほとんど差がないのはおもしろい。 まぁ、対策方法が違うんだけど、これは対策方法は示していないもんな。 cpu_meltdown がやっかいで、システムコールや割り込みのたびにアドレス空間切り替えが必要になり、第 1 世代では毎回 TLB フラッシュになって非常に厳しいが、第 4 世代は PCID 対応なので TLB を残すことができ、断然効率がいい。 とはいえ他の Spectre 系もある状態で、これだけスムーズに動いてくれるのはうれしいな。 最近の macOS の動きを見る限りはだいぶ遅いなって感じがしていたが、あれは単に macOS が HDD をゴリゴリシークさせまくっていただけか。 システムアップデートもとても遅かったし、古いハードウェアのことは Windows 同様あんまり考慮されていないと思う。 というか、日常的に触るのは Mozilla Firefox と端末エミュレーターだけ、みたいなユーザーのことは、Apple も Microsoft も利益にならないから無視なんだろうなw

Suspend-to-RAM にする操作、ThinkPad キーボードだったら Fn+F4 でいけるんだけど、残念ながら REALFORCE にスリープキーなど存在しない。 今は Ctrl+Alt+Delete を押して表示されるウインドウで Alt+U (サスペンド) を選ぶという方法にしている。

2022/08/04 のコメントを読む・書く


05 (金)

%1 きんようび

朝から出社してパソコンの移行作業を... 午前中ですますつもりがちょっと時間が掛かって、15 時過ぎてから終わったので続きは在宅勤務にした。

あたらしいパソコンには当然 SSD, それも NVMe があるわけだが、そこに HDD からファイル単位でコピーをしようという時のコツ! HDD が小さい場合に有効なんだが、パーティション丸ごと raw image にしたものを NVMe に置いて、それを loop mount してそこからコピーするとめっちゃ速い。 HDD はシーケンシャルアクセスに比べてランダムアクセスがめちゃくちゃ遅い。 NVMe はランダムアクセスになってもそこまで遅くならない。 (コマンドが増えるのでシーケンシャルよりは遅い。) 書き込みについてはファイル単位ならシークを抑えるアルゴリズムが有効だが、読み込みはファイル単位で見ていくと実際はランダムアクセスになってしまうケースが多いわけだな。

んでだいたい OK だなと思った頃に file capabilities をコピーし忘れていて一部コマンドが動かない問題に気づいたが、まぁそれもそれっぽいところを手作業でなおして完了。

今日は夜はだいぶ涼しくなったので、バイクを走らせてきた。 ちょっとランド坂を往復、というところだったが気が変わって、よみうりランドの向こう側に降りて、小田急線沿線の道を町田方面へ。 途中鶴川街道、鎌倉街道といったところを通って稲城方面に戻った。 この道、空いていたんだと思うけどそれでも流れが悪いな。 昼間は結構込むんだろうな。 柿生駅の近く、消防署の目の前をちょうど通過しようという瞬間に左側に見えていた救急車がサイレンを鳴らして出発するところ、ちょっとびっくりしつつ通過したが、左折と言っているからこっちに来るぞと思い、目の前の交差点は信号が右折矢印に変わるタイミング、左側の直進車線は車がなく、右車線に車が並んでいて、自分は直進車線に向かうところだったので、右車線の車の最後尾より後ろで左端に寄せて救急車を通すことができた。

テレビでやってた映画『モンスターズ・インク』(原題: Monsters, Inc.)。 2001 年のアメリカ映画。 ピクサーアニメーション。

2022/08/05 のコメントを読む・書く


06 (土)

%1 どようび

涼しい日。

やろうと思っていたけど暑いからって先送りにしていた話を思い出した。 スクーターの補助制動灯がついているリアスポイラー部分のビビリ音対策。 30km/h から 40km/h あたりのスピードで走行中によくカタカタ鳴っている。 エンジンの振動に共振するみたい。 とりあえず見てみると補助制動灯の下のカバーに隙間があってここかな? と思って適当にいらない紙を挟んで試運転してみたものの関係なさそう。 リアスポイラーを手でたたくとガタガタ言うので別か。 どうしようもないのか?

ねじのところに振動対策の何かを挟むことも考え、ねじを外してみようとした。 見た感じ 4 本のねじでとまっている。 3 本は見るからに錆びている。 2 本は完全に雨ざらしな位置だしなぁ。 プラスドライバーを持ってきて回そうとしたが、ぴくりとも動かず。 ねじに KURE CRC 5-56 を吹きかけ、再チャレンジするも動かず。 これはソケットレンチのほうを使うしかないか、と、8mm だったかな、それがはまったのでラチェットハンドルを付けてそーっとトルクを掛けたら、ゆるんだ! ねじは短く、間に何かを挟むのはよくなさそうだ。 せっかくなので、一本ずつねじを外しては 5-56 を掛けて歯ブラシでこすってサビ落としを試み、また締め直すというのを 4 本ともやった。 これが旧車の保守というやつか...

さらに、補助制動灯の下のカバーにもねじ 2 本あることに気づいたので、それも軽くゆるめてから締め直しておいた。 ゆるめる時にパキッと小さく音がしたので、これも固着していたんだろう。 で、試運転してみると、ビビリ音がちょっと改善していた。 ねじが固着するとビビリ音につながるとはあまり思えないんだけど、締め直したことで振動の伝わり具合が少し変わったんだろうな、ということにしておく。

試運転がてらスポーツ用品店に行って、小さい背もたれがないタイプの折りたたみいすはないかな、と探してみたが、なかった... ホームセンターにはあったが、耐荷重 70kg はちょっと足りないよな... 60kg のもあったが... それで、最寄りのモンベルを探したら南大沢にあるらしい。 南大沢、7 年前に行ったことがあって、バイク駐車場がどっかこっちのほうだったなー、みたいな感じでふらーっと行ってみると、その記憶は合っていた。 モンベルにはめっちゃ軽い癖に耐荷重 80kg の折りたたみいすがあったので、それを買ってきた。 3300 円もするが、この軽さと頑丈さではそうなるんだろう。

もうひとつ、涼しいのでエアコンを使わずに済んでいる今のうちに、iMac の消費電力をナビフィッツで観察! 家全体の消費電力が、照明いくつか付けて扇風機や冷蔵庫も動いていて 0.21kW, そこで iMac を suspend-to-RAM から復帰させると 0.23kW〜0.24kW, たまに 0.25kW といったところ。 当然 Raspberry Pi 4 にはかなわないけど、結構低いかな。 公式には待機中 33W, CPU 最大稼働時 68W とされている。 ディスプレイを兼ねていることを思えば、それなりに省エネモデルっぽい。 なお歴代 iMac の中で Late 2015 の 21.5 型フル HD モデルが一番低くて最大 58W になっている。 Retina という高解像度モデルは全体的に消費電力高めなようだが、最新の Arm 版はそれでも低めになっているらしい。

2022/08/06 のコメントを読む・書く


07 (日)

%1 にちようび

涼しい日。 のんびり。

iMac に入れた Debian GNU/Linux, Raspberry Pi 4 の Ubuntu MATE と違ってソフトウェアアップデートの GUI が出てこないな、と思っていたんだが、探したら software-properties-gtk というパッケージで提供されているらしい。 それを入れて、ついでに mate-desktop-environment-extras というのもインストールしておいた。

コストコ、夜行ったら空いていたな。 夏休みの影響なのかも知れないが、Google Maps の混雑情報でも朝より夜のほうが空いているっぽい表示になっている。

今日見かけたガソリンスタンド、ほとんどがレギュラーガソリンが 159 円/l の表示だった。 コストコの近くのが 156 円/l だったかな。 きのう見かけた野猿街道沿いのが 152 円/l で、今日は値上げしたのかなと思って行ってみたら今日も 152 円/l のままだった。 スクーターだったので 4.72L しか給油できず、安さの恩恵はたいして受けられていないのだけどw バイクで行けばよかったかなw

スクーターの気楽さというのは不思議なものだ。 原付二種スクーターは必要十分な程度にパワフルで、荷物もシートの下にたくさん積めて、足つきもよく、車体は軽い。 発進加速は比較的速いが、50km/h ぐらいから先の加速はそうでもないので安心してアクセル全開にできる。 大型二輪は加速はいいけど本当に一瞬にして制限速度に達してしまえるので、かえって神経を使う。

%2 WebAssembly

暇だったので WebAssembly の資料を眺めていた。 WebAssembly では、アセンブリ言語に相当する wat と、機械語に相当する wasm というのがある。 wat を手で直接書いてやろうという人もいるようで、web 検索するとそういう情報も出てくる。 それを眺めていたらなんか、Lisp のような括弧を使うスタイルに、if then else が出てくるので、意外と高級なのでは? なんて思えてくる。 で、Mozilla の資料に日本語で詳しい話がいろいろ載っている。

WebAssembly テキスト形式の理解 - WebAssembly | MDN

あと実際に wabt とか binaryen とか適当にパッケージを入れてみて、適当に触ってみるのも良い。 どうやら、if then else が出てくるのは、スタックマシンの構造上の都合かも知れない。 普通の CPU みたいに条件ジャンプという形になっていなくて、if 命令はスタックに積まれた値が 0 でなければブロックが実行される、0 だったらブロックを飛ばす、みたいな仕様に見える。 昔高校生の頃に自分が Visual Basic で作ったうさんくさいインタープリター言語が、文字列をスタックに積む仕様で、命令を後ろに書かなければならないためとても読みにくい言語だった (笑) んだが、それと違ってちゃんと (if (i32.lt_u ... みたいに書けるのに、アセンブルすると条件部分が先に来て if 命令が後に来る、みたいになっていて結構スマートである。

まーそれはいいとして、実行環境もいろいろあるようだが、embedded 向けの小さなものは、インタープリターがあるようだ。 JIT コンパイルをするとどうしてもサイズが大きくなってしまうのかな? 他にも何かわかりやすいまとめがないかと探したら以下があった:

WebAssembly - OSDev Wiki

こっちのほうが、大学院でシステムソフトウェア研究にいそしんだ我々向きな視点からの文章となっている。 Lua もバイトコードはあるけど標準化はされていないらしいとか、Python のバイトコードもバージョン依存らしいとか、そういう他者との比較もある。 そういえば Emacs Lisp もバイトコードあるよね。 自分で追加した Emacs Lisp は面倒くさいからバイトコードにはしないけど。

どうしても一般的には web サービス絡みで使われることが多いが、仕様としてはどう使ってもいい。 夢があると思うのは、wasm バイナリが動かせるオペレーティングシステム、なんて作ったらおもしろいなと思うが、まぁ、何の意味があるのと言われると特にないw 8086 みたいな古い古いプロセッサでも、適切な資源隔離がされるオペレーティングシステムが作れると思うとおもしろそうじゃない? まぁ性能と RAM 容量的にきついだろうけどな。

あまり話題にのぼらないけど UEFI の EBC っていうバイトコードも、特定のアーキテクチャーに依存せず実行可能な共通バイナリフォーマットである。 これは、ネットワークインターフェイスみたいなデバイスのファームウェアとして EBC でデバイスドライバーを入れておけば、そのデバイスを x86 でも Arm でもファームウェアから同じように使える、みたいな目的による。 本質的には似ているんだが、残念ながら EBC 用のコンパイラーや実行環境が広く開発されている状況にはない。 自分は EBC は手動アセンブルで試したことはあるが、それも x86 用に作ったバイナリに埋め込んでおいて、ヘッダーを書き換えて EBC にする、みたいな強引なやり方だった。

2022/08/07 のコメントを読む・書く


08 (月)

%1 げつようび

暑い日。

会社で買ってもらったパソコン、深く考えずに Intel CPU のにしてもらったけど、よく考えたら nested virtualization で VT-x が使えたほうがハイパーバイザー開発的に都合がいいのでこれでよかったんだった。 それに i7→i5 でスペックダウンかなと思ったら速かったが、よく考えたら 4 コアから 6 コアに増えているから思いっきりスペック上がっているんだ。 いつの間にか AMD Ryzen に慣れてしまって、i7 は当然 8 コアと思い込んでいた。

その会社のパソコンは先週移行のついでに一部のボリュームを ext3 から ext4 に変更したのだけど、その甲斐あってかなんかストレージアクセスで躓きやすかった場面も速くなっている気がする。 まぁそのせいなのかどうかは別に確認していない。 書き直したことでフラグメントが解消したおかげかも知れないし、空きが増えたことで何か都合がよくなった可能性もある。 けど入社時から HDD を入れ替えても中身をそのまま移して使い続けてきたとは我ながらどうなのかという感じも... と思って何気なく調べたら、今も ext3 のまま使い続けているもうひとつのボリュームの作成日は、自分が入社するより前だったw そういえば前の人が作った md RAID を面倒だからとそのまま引き継いで使ったんだっけ...w

なお ext4 の登場は 2008 年、Debian GNU/Linux での採用は 2011 年のバージョン 6 からだったらしい。 なるほどなー。 自宅サーバー PC の / が ext3 なのも、インストール時ギリギリ 5... いやそんなことはないな、いくらなんでも 2 月に出ていたなら 6 を入れたはずだぞ? あれ? デフォルトになっていなかったんだろうか? それとも手動で ext3 を選択したか?

ちなみに ext3 の登場は 2001 年であり... そう、大学に入学した 2001 年当時あるいはその前に実家でインストールした GNU/Linux 環境のファイルシステムは ext2 になっていた。 正常にシャットダウンしていないと簡単にぶっ壊れる。 んで 2002 年に大学の計算機室に導入された Linux ファイルサーバーのファイルシステムは、XFS だったのである... あまりにもトラブルが多かったため、夏休み期間中に ext3 に変更された。 そういえば、あの時のクライアントは Red Hat Linux 7.1 で、カーネルバージョンは 2.4.9 だったかな? クライアントは ext2 だったはず。 んでサーバーは 2.4.18 だったから ext3 が使えたってことかな。 登場から 1 年経っていないファイルシステムを採用ってのも今思うと結構思い切ったことをやったのかもな。 まぁ XFS も相当思い切っていたけど... 当時はファイルサーバーだけは FreeBSD で FFS (UFS) のほうが安定していただろうなと。

2022/08/08 のコメントを読む・書く


09 (火)

%1 かようび

暑い日!

街の人出は減っているのだろうか。 すでにお盆休み・夏休みに入っている人達もいるだろうから、帰省などで都内から人が減っていても不思議はないが、正直なところ在宅勤務だと近所に弁当買いにいくぐらいしかないので、街の様子は 1 ミリもわからない。 土曜日の南大沢のアウトレットモールはそれなりに人出が多そうに見えたけど、あそこは行ったのが 2 回目だったから普段の様子はわからんのだよな。

上野のアメ横 (アメヤ横丁) は人出が例年の半分以下だみたいな話が出ているらしくて、なるほど市民は賢い。 都心は家賃高いから、あのへんのお店もばんばん消えてしまうのだろう。

感染者数は東京は何とかやや減りつつあるようだが、死者数がめっちゃ増えてきた。 第 7 波ともなればいつものパターンだな。 ワクチンなどで入院確率が 1/10 になったとしても、感染者数が 10 倍になれば一緒。 実際は今回ワクチン未接種の子供の急激な感染拡大から大人に広がるパターンで 10 倍どころではない数字になったので、前より悪い。 入院待ち行列が伸びている状況で、十分な医療は受けられないからそりゃ死者数も増えるよね。 関係ない病気も巻き添えで十分な医療は受けられない可能性が高い。 医療関係者やその家族が感染して自宅待機もかなりあるみたいで、病床使用率は分母に使えない病床も含まれているからあてにならないしな。

373ゲーム| 南日本新聞 | 373news.com

南日本新聞の web サイトにゲームコーナーができていた。 以前 Wordle が New York Times に買われたって話があって、New York Times ってそんなことやっているのかと思ったが、まさか南日本新聞がね... まぁどこかの会社がまとめて提供しているんだろうけれども。 試しに大富豪をやってみたら、コンピューターが弱くていまいち... ローカルルールが大量に入っているのはいいが、コンピューターのアルゴリズムは DOS 時代のフリーソフトにも負ける出来か...

2022/08/09 のコメントを読む・書く


10 (水)

%1 休暇

暑い日。

レンタルカート。 あきる野。 3 回乗った。 ベストタイムは 25.839 秒。 帰り際にスタッフさんが乗っているのを見ていたら、一番スピードが乗るヘアピン前のところでアウトに寄せるために、その手前の右コーナーをアウトから入っているんだな。 自分はその右コーナーがいい加減だから、アウトに寄せきれずにヘアピンに突っ込む形になって、タイムがあまり伸びないのかも知れない。 まぁ、Sodi で重いのにかなりスピードが乗るのでガッツリとブレーキングをする必要があって、藤野のコース改修後の 1 コーナーを思い出すような直線フルブレーキングは飯能や御殿場ではやらないから、ブレーキングが安定していないところもある。

さて午前中にあきる野に行ったんだけど、なぜかというと、Google Maps で U-KART CIRCUIT を調べたら、水曜日の混雑状況は朝イチ (11 時) が空いていると出たからである。 平日なので夜は仕事が終わった人達が集まるのかも知れない。 おかげでめっっっちゃ暑かったが... ルートは Google Maps はかなり素直なルートを提示するが、かなり混雑しているとも出ていた。 そこでいろいろ別ルートを検索し、川沿いで行って四谷のほうから日野バイパスにあがり、ムラウチのハードオフなんかがあるところの裏の道へホンダ店の前から曲がって入り、小学校を過ぎて右折してトンネルなんかを抜けていくと、八王子の道の駅のところに出るという、いい感じな混雑回避ルートを使ったところ、最後に東京サマーランド方面に左折で入るところが一番渋滞していたw 帰りも途中までそのルートを反対向きに使用。 トンネルのひとつは国道 16 号の下を通してあるようだ。

あとで調べたら府中のほうがやや気温は低かったみたいで、あきる野あたりはおそらく昼過ぎには 35 度超えていたと思われる。 ひぇぇ。 まぁ新ルートを開拓 (?) して満足したため午後はゴロゴロしていた。 夜行くなら素直に国道 20 号線と新奥多摩街道だっけな、あっちにずばばばーっと行くのが速いと思う。

U-KART のすぐそばに圏央道があって、帰り際に上から何か声がすると思って見てみたら、トラックが 2 台左側に止まっているのが見えて (高尾山方面)、右側を抜ける車は渋滞、そうしているうちに後ろに黄色い NEXCO の車もやってきて、何かあったんだろうけど、よくわからなかった。 止まっているトラック 2 台は結構間隔があいていた。 今日は他にもけっこう渋滞しているところがあったらしい。 帰省ラッシュがすでに始まっているのか?

大学の同期もついに SARS-CoV-2 に感染してしまったそうで、今回の波もなかなかに強烈である。 自分が今のところ逃げ切れているのが不思議なようでもあり、いやもしかしたらあの何とか抗体 (抗 N 抗体? IgG 抗体?) を調べると実は感染していたことが判明なんてこともあるのかも知れないけど。 まぁウイルスの感染症というのはウイルスがある程度の量まで増えないと感染したとは言わないみたいなので、マスク + ワクチン + 密回避の対策がうまく機能して、わずかな量のウイルスにしか暴露されなかったのであれば、体内でウイルスが爆発的な増殖を始めるまでに、免疫ががんばってはり倒してくれていたというのもあり得るのだろうとは思う。

風邪すら引かない今の状況を思うと、新型インフルエンザの騒ぎの時の対策はまったく不十分だったと思うが、それでも 10 年以上前のあの時に職場に設置された消毒用アルコール、あの時から出社時にしている手指消毒の効果は無ではなかったんだろう。 でも、ぎゅうぎゅう詰めの列車やバスにマスク無しで乗っていたなんて、なんて楽観的だったのか、信じられないね。 不織布マスクをつけていると、花や排気ガスなどいろんなにおいも薄くなってしまうが、見方を変えると、においがするってことはウイルスも入ってくるよということか。 田舎の祖父母も認知症が出始める頃になるともうあまり風邪を引くことはなかったんだろうな、出かけることが減って、高齢化で近所の知り合いも減って、接触機会がどんどん減っていくもんな... 逆に言うとあの田舎でも風邪を引くのは、仕事やら買い物やらパチンコやらの出先でうつされてさらに家族間で広がっていたというのも結構あったんだろうな。

2022/08/10 のコメントを読む・書く


11 (木)

%1 山の日

きのうよりは暑くなかったのかな。 一日ゴロゴロ。

久しぶりにシューティングゲームの Kobo Deluxe を入れて遊んでいる。 大学院生の頃に研究の息抜きでめっちゃ遊んでいたやつだ。 古いゲームなので iMac でも余裕で動く。 試さなかったけどたぶん Raspberry Pi 4 でも余裕だっただろうと思う。 いくつか難しいステージがあったよなとは思ったが、50 がやたら難しい、ってこと以外はよく覚えていなくて、ところどころ難しいステージにぶつかって、そういえばそういうのあったような、なかったような、とあやふやな記憶をたどっている。

Kobo Deluxe の前身の XKobo って何で知ったんだっけな? 何となく高校生の頃に実家で FreeBSD(98) に入れていたんじゃないかという気がするが... と思って古いファイルシステムの中身を探してみたけど入っていなかった。 大学入学後か。

古い古い ports の xkobo の Makefile には ftp の ftp.uoknor.edu というドメイン名の URL が書かれていた。 今は名前解決すらできない。 外部からダウンロードしてくるスタイルの場合ソースコードのありかにたどり着けないのはありそうだな。 大学 1 年ぐらいの頃に使っていた Debian GNU/Linux 3.0 (woody) のファイルシステムには /usr/games/xkobo (パス名も懐かしい) やらスコアやらが残っており、Debian パッケージ名が xkobo だったらしいことも確認できた。 Debian はアーカイブからソースコードも手に入るかもな。

%2 F1

F1 は夏休み期間だが、ドライバーの引退・チーム移籍・F1 昇格の話が盛り上がっている。 先月の、アストンマーチンのベッテルが今年いっぱいで引退、の話がトリガーで、今月に入ってアロンソがアルピーヌからアストンマーチンに移籍の話が発表され、続けて F2 のピアストリが来年アルピーヌから F1 デビューと発表があったが、直後に本人からそれはないと発表があって俄然おもしろくなってきた。 ピアストリがアルピーヌ育成にいたからで、それにしてはアルピーヌの言い方が微妙、というのが、なにやら実はアルピーヌの契約が先月末で切れているという話が出てきて (切れていなければアルピーヌ側に契約延長オプションがあったという説)、んでもしかしてピアストリはマクラーレンとの契約が決まっているのでは? なんて話も出てきて、そうするとリカルドがマクラーレンから放出されるのか? じゃあアルピーヌに出戻りか? みたいな、そのへん何も確定していないので推測記事がたくさんw

ピアストリの否定発表をネタに、アルボンはウィリアムズとの契約延長の発表を肯定した。 ウィリアムズのラティフィはあまりに成績不振なため今年いっぱいじゃないかとささやかれているがこれも発表はなし。 ガスリーはフランスつながりでアルピーヌに行きたいんじゃないか説もあるがレットブルは否定しているらしい。 ストロールはチームがチームなので来年以降も走るんだろうけど、アロンソやってきてガッツリ実力差が見えたらそのまま引退なんてこともあるんだろうか?w

昨年と今年のルーキー勢は、角田はふわふわしているが残留方向かなぁ。 ミックシューマッハもいろいろ言われてはいるが今の調子が続けられるなら残留のような気がする。 周は明らかに皆の予想を上回る結果を出しているから残留だろう。

2022/08/11 のコメントを読む・書く


12 (金)

%1 きんようび

在宅勤務。 今日は休みの人だらけなので会社行ってもよかったんだけど、朝雨が降っていたのでやめた。 昼は雨には降られなかったが、急に風向きが変わる妙な風が吹いていた。 台風が来るんだもんな。

iMac に DOSBox-X を入れてみた。 コンパイルの仕方を忘れていたが build というスクリプトを使う。 PC-98 エミュレーション、いい感じに動くみたいだ。 Ryzen PC で今まで動かしていたが、キーボードもオーディオもネットワーク越しになるためちょっぴりいまいちなところがあった。 特にオーディオの glitch があったのはやっぱり PulseAudio でリモートになっていたせいなのか。 キーボードもたぶんネットワーク越しだとわずかに遅延があって、iMac でちょっと NyaHaX '93 をプレイしたらいきなりノーミスでクリアできるぐらいには違うようだ、って、これ画面がでかいのが一番影響あるかも知れないけどw

テレビでやってた映画『天空の城ラピュタ』。 1986 年の邦画。 主人公のパズー、本当なら手滑らせたりバランス崩したりして 10 回ぐらい落っこちているよなw

2022/08/12 のコメントを読む・書く


13 (土)

%1 どようび

台風が来る、ということで、しかも最近いつも週末の朝に食べているヨーグルトを買い忘れていたので、朝のうちにさっさとスクーターで買い物に行ってきた。 微妙にパラッと雨に降られたがセーフ。

台風はというと雨が降ったりやんだり、18 時あたりにザーザーと結構な量の雨が降っていたんだけど、20 時頃にはそれも落ち着いてきて静かになった。 被害があるとすれば雨のほうだろうな、という感じの台風。 風はきのうのほうが強かった気が。

昔 BASIC で作ったプログラム群がバイナリ保存だったのをテキストに変換したい、と思っていたんだけど、やっと重い腰をあげて実施した。 このうさんくさい BASIC プログラムを作って使った。 DOS で DIR コマンドの出力をファイルにリダイレクトして保存しておいてそれを使う。 ファイル名を - で始まる連番に変更し、それを順に LOAD SAVE でテキストにし、最後にファイル名を元に戻す、のだけど、LOAD SAVE のところはプログラム上では実施できないため、画面にコマンドを表示しておいてひたすら Enter キーを押して行う仕掛け。 もうちょっと改良できそうな気もするけど、Enter キー 4 回押せば 1 個分が完了するようにした。

ファイル名変更が NAME っていうのだけは思い出せなくて検索してしまったが、他はマニュアルを見ないで書けた。 原始的なラインエディターとも簡易的なスクリーンエディターとも言えるような昔の BASIC のインターフェイスだが、行番号をかえるだけで行ごと複製ができるとか、PRINT 文で出力したものを入力・実行させることもできるとか、単純な割には非常におもしろい特徴を持つ。 今更触って気になるのは、行内のコピーアンドペーストができないのは不便だなというところと、SAVE を実行するのが面倒くさいところだ。 当時の EDLIN を含む一般的なテキストエディターや、後の QuickBASIC のような開発環境では、非常に簡単な操作で「上書き保存」ができるようになっていることを思うと、いちいち SAVE をファイル名付きで実行しなきゃいけないのはなかなか不便に感じる。 まぁそれでよく、プログラムの先頭に SAVE に使えるコメントを突っ込んでいたんだけどね。

あとはこうして触ると、現役で触っていた 30 年前当時とは問題解決の仕方が違っているというのを何となく感じる。 Unix 的な考え方で問題を単純なものに分解しそれぞれを単純な方法で解決していく、というのが自然になっていて、だからこそ、わざわざディレクトリエントリをシステムコールで読むような面倒なプログラムは書いていないし、一度連番に名前を変えておくことで短いプログラムで全部を処理してやろうというのも、BASIC の仕様上避けられない部分を乗り切る単純化のためだ。 ...というとかっこいいんだが、実際エミュレーターで触っていてもとにかく当時のコンピューターは 遅い し、当時は実物ディスケットなのでさらに遅かったんだよね。 わずか 200 個のディレクトリエントリを表示させるだけでもとても時間が掛かる。 そういうハードドライブのない環境で Unix 的な考え方を身につけるのは難しかったかも。

というわけでファイル名変更をしまくったわけだが、見ているとファイル名変更なのに FAT のディレクトリエントリの順番が変わっている気配があって不思議だった。 ルートディレクトリエントリのファイル数限界に達したディスク (たぶん?) で DOS の RENAME コマンドは通るけど BASIC の NAME はエラーになる、みたいな不思議な事象もあり、どういう実装になっていたんだろうな。 BASIC は BASIC でディレクトリのサポートが後から追加された気配はあって、FILES ".." とやってもディレクトリエントリ ".." だけが表示されるみたいなおもしろ挙動をする。 さらに、エミュレーターの都合で円マークが入力できないもんで、ディレクトリ区切りを面倒だから / ですませていたんだが、/ 区切りではファイル名が 8 文字になるとエラーになるというおもしろ現象も起きた。 BASIC がどんなシステムコールを使っていたのか、観察してみるとおもしろいのかも知れない。

2022/08/13 のコメントを読む・書く


14 (日)

%1 にちようび

のんびり。 夜にちょっと座骨神経痛が悪化してきた...

iMac に入れた DOSBox-X だがローカルのオーディオデバイスを使っているとオーディオの遅延も結構小さいみたいだ。 シューティングゲームをプレイしたり、Ray の演奏なんかを見たりしても気にならないレベルだ。 PulseAudio のリモート (tunnel) はやっぱり固定遅延を入れてあるのかな。 リモートでも動画再生時のリップシンクはちゃんとしているんだけど、たぶんオーディオ遅延に合わせてビデオを遅らせているんだろう。 DOSBox-X みたいなインタラクティブなものはそうはいかないので、そのまま遅延するわけだ。

きのうテキスト変換した昔書いた BASIC プログラム、自分がパソコンを触り始めた小学 1 年の頃のディスケットは、おそらく壊れてしまって読めなかったために失われているのだが、その頃に兄が使っていたらしいディスケットのデータはあって、見ているとボーリングとかモグラたたきとか、なんか何となく見たことがあるような気がするものが出てきた。 これは本か何かのプログラムを入力したものだったのかな? 確実に本じゃなくてうちで作ったであろう車のセレクトレバーとメーターを模した画面が出てくるプログラムもあって、今見ると意外ときれいに作れているような気がする。 そのへんのプログラム、BLOAD っていう危うい命令を結構多用している。 VARPTR っていう関数で変数のアドレスを得て、DEF SEG で BASIC のセグメントを選択して、BLOAD でメモリーに直接ファイルの中身を読み込んでやろうというものだ。 自分は確か何となくこわくて使っていなかったけど、C のポインターの感覚で見ればまぁそういうことね、って代物だな。

自分が書いたプログラムでは小学 4 年生あたりの頃に半加算器やらモールス符号やらのプログラムが出てきて、たぶん前者は『道具と機械の本』、後者は図書館か何かの本を参考に作ったんだろう。 あと筆算で 10 進数の整数の足し算をするプログラム、ようは多倍長演算ができるってわけなんだが、これは自分なりに考えて作ってみたんだったと思う。 1 文字の変数だらけなのに急に KURIAGARI って変数が出てくるあたりからしても自分だろうな。 実行して驚いたのだが、PRINT って行に収まらない長さの値を指定したら次の行に出す仕掛けがついていたのね! 良くできてんな!

小学 5 年生になると、プリンターのステータスを表示してみるとか、電話のダイヤル音 (回転ダイヤル回線) を鳴らすとか、カレンダーを表示するとか、2 進数に変換するとか、目的が理解できるし実装もそれなりにまともそうなプログラムが出てくる。 たぶん大学 1 年生のプログラミング入門みたいな授業の履修者の平均より賢いかも知れない。 カレンダーは何か自分で考えて作ってみた記憶があるんだけど、今の自分がレビューすればまだ怪しいところがあるな、ってのも事実だw というかまぁ、カレンダーは大学でさらに洗練されたアルゴリズムを習ってしまったからな... なお兄が作ったっぽいカレンダープログラムもあって、そっちは閏年が 1 日ズレて出てしまう実装になっていたw そう、単純に作ると現在までの閏年の数を数えてしまうから、曜日を求める時に閏年だったら 1 を引くって計算が必要で、自分の実装はそうなっていた。 洗練されたアルゴリズムでは、1 月・2 月を前年の 13 月・14 月扱いにして、3 月開始で求めるので、閏年だったら 1 を引くがいらなくなり、1 日の曜日計算についても 2 月の日数の違いを考慮せずに良くなって実にスマートである。 なんて考えていたら久しぶりにカレンダーのプログラムを書きたくなってきたので gwbasic.exe で書いてみた。

カレンダーのプログラム

指定の年月のカレンダーを表示するプログラムって、プログラミングの練習課題としては手頃でいいよね。 ちょっぴり実用性もあるし。

2022/08/14 のコメントを読む・書く


15 (月)

%1 げつようび

まぁ暑くなかったといえば嘘になるけど... 明日はやばいらしい。

NHK ラジオニュースは今週はお盆休みモードみたいだな。

最近の夜の自炊は割といい加減モードで、ご飯の他は、コストコの冷蔵の調理済み肉 (ハンバーグや酢豚や豚肉みそ煮) やら、ツナ缶などの缶詰やら、海苔やふりかけやら、ドラッグストアで買える冷凍の餃子やら、あるいはレトルトカレーをなんか適当に選んで作る、みたいな感じが多いんだが、最近冷凍のミックスベジタブルっていうのも時々使うようになった。 名前は野菜っぽいけど、にんじんとグリーンピースだけで、スイートコーンは炭水化物だと思うが、電子レンジで短時間で調理可能だし保存がきいて便利だ。

で、先月、夜中 3 時間で目覚めるパターンな日が何日か続いて、それが枕の調整をしてもらった後だったこともあり、枕のせいかななんて思ったが、いや待てよもしかしてと思って少し夜の食事を調整したらよくなった。 何かというと、コストコで買ったナチュラルチーズを電子レンジで温めて溶かして食ったら美味いので、適当にそれも夜の自炊に入れていたんだが、それをやめてチーズは朝に食べることにした。 ちょっと油分が多いんだろうな。

でまぁ、食事と直接関係ないけど、きのうの夜からの座骨神経痛、今朝目覚めた時に、おならをしようとすると痛みが走るっていう残念な感じになっていたんだが、つまり、皮下脂肪や内臓脂肪だけじゃなくて、大腸の動きも座骨神経痛に関係があるわけか。 直接的には腹筋のせいかも知れないけど、大腸にガスが溜まっているとその分神経への圧迫度合いが変わるみたいなのがあるのかなと。 お昼を買いに行く時、どこをげんこつで押さえながら歩くと良さそうかみたいなのを試行錯誤していたが、これもやっぱり不思議と効果があるように感じるんだよな。

こないだのラピュタ、どこかで見かけた感想の中に、今見ても新しいとか古くならないとか、そんなようなのがあって、えっ、って思った。 そもそも描かれている世界がすごく独特なのでアレなんだが、「オートモービル」なんて言葉が出てくるあたり、時代的には自動車が出てきてそう経たないぐらいの、20 世紀初頭ぐらいのもの。 ただ飛行船がやたら立派で武器まで備えているのと、謎の「フラップター」というエンジン式の超小型飛行機 (未だに実用化は難しそう)、あと地下から出てきたところに襲われたのは飛行機でやってきていたよな、などいろいろ考えると時代設定はごちゃごちゃ。 まぁその設定の話じゃなくてアニメーションとしての古さの話なんだろうけど、それもさすがに古いよね... ヨーロッパ的な、日本ではあまりなじみがない感じの景色が使われているので一見新しそうにも思えるけど、あの顔の描かれ方って 1980 年代らしさ全開じゃないか? 後のポニョなんかと比べてもやっぱり古いのは否めない。

とはいえジブリ作品の中では一番かもというのはわかる。 トトロとラピュタはやっぱりジブリの中でもダントツじゃないかな。 反戦的でもなく、男女の愛情がーみたいなところも強くは出てこず、地球を大切にーみたいな説教でもなく、飢餓に苦しむでもなく、自然と山に住む巨大生物や天空に浮かぶ滅びた文明の世界に引き込まれるのが、とてもいい。 トトロは初めてみた時はどうだったかな、行方不明になるところがショックなシーンだけど、ハッピーエンドでヨシという感じ。 ラピュタは、初めて見た時は最後にあの高度な文明のシステムが一瞬にして機能停止して失われるのが悲しかったけど、何度も見ているとこれもハッピーエンドなんだよな。 まぁ、冷静に見ると被害は大きいけど...

ワクチン 4 回目の話、ちらほら 4 回目接種後に感染しちゃった人の話なんかも出てきていて、やはりデータ通り、きいているみたいだよね。 今回の波、ワクチン 3 回までで感染しちゃった人はだいたい、熱だけでなく、のどが強烈に痛くなり、水を飲むのも難しいほどになるパターンが多いようで、4 回まであるとやはり感染予防効果も多少はある上に、発症しても軽い、と。 なおワクチン未接種の人は 2 年前の最初の波と同様に肺炎など結構よくない経過をたどる場合があるみたいだ。 2 年前はなかった薬の投与が間に合えばマシだが、今の医療体制ではそれも難しいのだろう。

2022/08/15 のコメントを読む・書く


16 (火)

%1 かようび

暑い日。

お昼は噂に聞いたセブンイレブンのカレーフェアの商品、カシミールカレーを買いに行った。 セブンイレブン、どこも近くないのでどこに行こうかと考え、あっちは霊園が近いから、お盆の今は人が多いかも知れない、そっちは旧甲州街道沿いな上に駐車場が広いから人が多いかも知れない、別のところのは駅から近いから人が多いかも知れない、もうひとつは旧甲州街道沿いだけど、スーパーの目の前だし駐車場広くないから空いているのでは? みたいな安直な考えによりスクーターでふらっと行ったら空いていた。 よかった。

カレーはおいしかった。 LEE とは違ってさらさらしたカレー。 かなりの辛さで、レトルトカレーの LEE でいったら 10 倍ぐらいかと期待していたが、20 倍に近いぐらいの辛さがあった。 それでいてご飯が少ないのがなかなか強烈。 カレーライスを食べるとき、基本的にご飯を余らせて最後にご飯だけ食べる派なのに、ご飯が余らなかった。 それで辛さがごまかしきれず、少し休み休み食べることになったので、ご飯は足したほうがいいかも。

で、あとで Google Maps でセブンイレブンの混雑状況を見たら、確かに行った店舗は昼間空いている店舗だったが、駅から近いほうの店舗も空いているらしいことがわかった。 へぇぇ。 確かに、昼間に列車使う人もそうはいないか。

%2 PC 正常性チェック

Windows の「PC 正常性チェック」というアプリケーションで、パソコンが何年経過しているか、が表示されるらしいと聞いて、さっそく自宅のパソコンで試した。 8 年経過、と出た。 これはどこから得ているのか、まさか BIOS のバージョン情報?

という話になり、探したら AM1I-A の BIOS アップデートは 2016 年のものがあって、入っていたのは 2014 年のものだったので、更新してみた。 NTFS パーティションに普通に置いておいてセットアップ画面で選択すればいい。 簡単。 と思ったら設定が飛んでしまって、Num Lock の設定やら Wake-on-LAN の設定やらをやり直す羽目になった。 クロック周波数を落とす設定もしてあったのが飛んで、これは、まぁいいか... もしかしたら電源容量不足で不安定になるかも知れないけど... どうせ今はほとんど使っていないからな...

んでアップデートすると 7 年経過になった。 2 年縮むかと思ったけど 1 年だけだったか。 "07/11/2014" が "03/10/2016" (並びはたぶんアメリカ合衆国方式) になったんだから 6 年でも良くない?

それはともかく、「PC 正常性チェック」、500 GB SSD って出るんだけど、HDD だよ! なんでそうなるの!w

2022/08/16 のコメントを読む・書く


17 (水)

%1 すいようび

昼は晴れていたがちょっと雨も降った。 ちょっと涼しい日。

%2 No Shark

No Shark (2022) - FREE FEATURE FILM - YouTube

インターネットで見つけた映画、No Shark. 鮫が出てこない鮫映画だ。 軽い気持ちで再生し始めたら、1 時間 50 分近くある... ビーチの映像を見ながら、ひたすら英語トークを聞く映画だった。 一時間以上も同じ人がひたすら英語でしゃべり続けるのを果たして聞いたことがあっただろうか。 朗読か、ってくらいずーっとしゃべり続けるのは、大学の授業でもない気がする。

鮫に食べられて死にたいっていう主人公の設定もおもしろいのだが、それでいろんなビーチの景色が出てきて、いろんな人 (舞台がアメリカ合衆国なので、おそらくほとんどがアメリカ人だろう) の水着姿が出てくるわけなので、聞かされるトークだけでなく見せられる映像的にも珍しさがある。 男性、女性、太っている人、やせている人、お年寄り、若者、アジア人っぽい感じの人もいて様々だ。

最後のところボケッと聞いていたらなんか今へんなこと言わなかった? みたいな感じでエンディングが始まったので少し巻き戻して字幕をオンにした。 なるほどなー、そういう結末なのか。

2022/08/17 のコメントを読む・書く


18 (木)

%1 もくようび

雨のち晴れ。 涼しい日。

今日のお昼は買い物ついででドラッグストアで牛丼を買った。 昼休みのドラッグストア、もしかして空いている?

体重計の電池が切れた。 Lo って出るんだった。 久しぶりに見た。 んで電池を取り出したらダイソーのマンガン乾電池。 交換した日付をメモしてあって、2016 年 10 月! 5 年半も持ったの! そもそも購入が 11 年前ってぇことは、その前も 5 年半ぐらい持っていたのかも知れない。 やっぱり、直列の電池はバランスがとれていると長持ちするんだな。

っていうか前の体重計がダイエー閉店セールで買ったやつで 9 年ぐらいしか持たなかったのに、今のは 11 年持っているのか。 持っているっていうか、そろそろ寿命でも不思議はないな。

この前のカレンダーのプログラムのもっと短い版:

カレンダーのプログラムその 2

月初めの曜日を計算できるなら、翌月の月初めの曜日も計算できて、月の日数は 28 日以上なんだから、29 日以降は翌月の月初めの曜日の手前まで進めればいいよね! っていうことで、計算量的にはちょっと多くなるかもだけど、関数に押し込んでコードの長さ的には短くなった。 内部で 3〜14 月ベースで計算するのを利用すると、12 月の次を 13 月にしていいので翌月の計算をさせるのも簡単。

まぁでもこれ 1 年後の自分が見たら何だこれってなりそうだな。 MM*26+5 のあたりは習った通りだったかどうかは記憶にない。 3 月からの月の日数が 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31 で (2 月は最終月扱いなので除外)、これを曜日が何日分進むかになおすと 3, 2, 3, 2, 3, 3, 2, 3, 2, 3, 3 になる。 で、これを積分、とは言わないか、離散では何て言うんだっけ、忘れたけどシグマで先頭から全部足した値にすると、3, 5, 8, 10, 13, 16, 18, 21, 23, 26, 29 になる。 これで例えば 5 月 1 日の曜日は 3 月 1 日から 5 日進んだところ、とわかる。 これの 10 倍した値を、1 の位を切り捨てることで求められる計算式が MM*26+5 だ。 こんなのよく思いつくなっていう話で授業で習った時にすごく感心したことを覚えている。

2022/08/18 のコメントを読む・書く


19 (金)

%1 休暇

晴れたまに曇り。

レンタルカート。 あきる野。 4 回ぐらい乗った。 ベストタイムは 25.588 秒。 やっぱりね、この前のヘアピン前ラインの違いが気になって、もういっぺんチャレンジしてみようと。 空いていたもので、見ていたスタッフさんが少しアドバイスしてくださり、最終コーナーの手前のヘアピンは逆バンクなのでちゃんとアウトに寄せて入ったほうがいい、奥のヘアピンのほうはマンホールのふたの上を通るとでこぼこするのでなでるぐらいでいい、的な。 前者はあやふやで毎回違うラインを通っていたので、それを聞いて毎回同じところを通るようにした。 後者はなんだかよくわからず、前回来た時のミドルインアウトよりやや左側から入ったかな程度。 最終的に 0.3 秒ぐらいタイムがあがったのは、奥のヘアピンでアウトに寄せるとともに、出口をアウトいっぱいまで使うようにしたのがきいた。 最後の走行の間に、あれ、ここのアウト側ちゃんと使えていないな? って自分で気づいて、ちょっと調整した。 アウトに寄せたことでコーナリングスピードを上げられるかと思ったが、結構跳ねてしまって厳しい。 かといってスピードを落として小回りしたら前回のミドルインアウトと変わらない。 なるべく跳ねないスピードを狙いつつ、ハンドルを早めに戻してアウト側に向かって早めに加速する、みたいな、そんな感じかな。 ラインを変えたのはスタッフさんにもきちんとバレていたw

あきる野へはバイクで行った。 帰りにちょろっと eco town ハードオフに寄ってから帰った。 甲州街道は混雑気味だったので途中で離脱し帰っていて、もしかして平日のこの時間ってあの道通れないのでは、って途中で気づいてルート変更した。 正解!

『異世界おじさん』5 話。 異世界思い出話。

テレビでやってた映画『となりのトトロ』。 1988 年の邦画。 スタジオジブリ制作。

%2 カレンダーのプログラム

いやなんか、ふと思い立ってアセンブリ言語で MS-DOS 用のカレンダーのプログラムを書いてみたのであるよ... (アホ)

20220819-cal.asm

MASM でアセンブル、LINK でリンクして実行できる。 引数に 2022,8 のように指定して実行したら動くように作った。 MASM は Microsoft が GitHub で公開している MS-DOS に含まれるバージョン 1.10 のもので OK だ。

いくらアルゴリズムがわかったといっても、アセンブリ言語で書くのは大変だ。 何しろ、まず引数の文字列をどうやって数字に変換するかというところから話は始まるのだ。 しかもかけ算や割り算をやっていくので桁数あふれ対策なども考え、どうしたものかとなった結果、packed BCD を使った (アホ)。 400 で割った余りを求めるのと、100 で割るのは BCD ベースでやったほうが都合が良い。

高級言語のように自在にかけ算割り算を操るにはレジスターのやりくりがごちゃごちゃする。 2 のべき乗の割り算にはビットシフトという飛び道具が使えるけど。 さらには出力のところも不自由で、数字をまた文字列に変換する仕事もある。 そんなこんなで作るのに 3 時間ぐらいかかってしまったのである。

子供の頃はというと、このレベルのプログラムでも完成できたかどうかわからない程度の遊びレベルだった。 中学生の頃に書いたテトリス風のゲームが、C とアセンブリ言語の組み合わせだったが、割り込みハンドリングやグラフィックスの BIOS 呼び出しやビット演算 (特にローテート) まわりがアセンブリ言語のほうが書きやすいからそうしただけで、計算絡みのアルゴリズムは基本 C で書いた。 しかし DOS の頃は全部アセンブリ言語で書かれた驚異のアプリケーションが世の中にあった。 VZ Editor はそうだし、FD みたいなフリーソフトにもそういうのがあったんじゃなかったかな。 それに、プロセッサは違うが、ファミリーコンピューター時代のゲームソフトも基本アセンブリ言語で書かれていたはずである。 信じられないね...

なお... 初の量産型コンピューター IBM 704 では、高級言語の FORTRAN や LISP が使われていたのである... 1950 年代、ソースコードをパンチカードで読み込ませる時代に... 別の意味で信じられないね...

2022/08/19 のコメントを読む・書く


20 (土)

%1 どようび

晴れていたと思ったが夜は雨が降ったっぽいな?

"背筋が GUUUN 美姿勢座椅子プレミアム" っていううさんくさい座椅子が届いたので、入れ替えてみた。 背もたれを抱きかかえるようにしても使えるという売りだが、やってみるとそれはあんまり快適な感じはしない。 とりあえず普通に使うことにしよう。

スーパーフォーミュラ、もてぎ。 今日 1 戦、明日 1 戦の連戦になっている。 YouTube の配信で見た。 山本が見事なポールトゥウィンだったが、去年チーム移籍してから表彰台すらなかったらしく、久しぶりの勝利に中嶋悟監督もうれしそうだった。 予選 Q1 はギリギリだったのが Q2 で見事ポールポジション、決勝は雨になったが、さすが 3 度のチャンピオン、完璧な走りだった。 終盤にセーフティカーが入って、どうなるかと思ったが、まったく危ないところがなくて、10 年前のライコネンの I know what to do を思い出したよw まぁ後のコメントを聞くと本人そこまで余裕はなかったみたいだが。

先月入れた emms が aac を再生してくれないことに気づいたので、(require 'emms-player-mplayer) の手前に以下を書き足した。

(require 'emms)
(setq emms-player-base-format-list (append '("aac") emms-player-base-format-list))

%2 DOS

たまに気になる MS-DOS のソースコード。 ここに含まれるバイナリ版 DEBUG.COM は P コマンドがないのだが、ソースコードをチラッと見たら ZTRACE という名称で実装は入っているみたいで、オプションをアセンブル時に有効にしておかないといけないのだろう。 気が向いたらビルドしてみようか。

で、中を見ていると KANJIIBMJAPVER なる定義名が出てくる。 どうやら KANJI というのは、MS_Kanji (Shift_JIS) 対応をしたものらしくて、2 バイト目に \ があるケースの対応などあるっぽい。 IBMVER だったかな、ってのもあってそれは IBMBIO.COM と IO.SYS の区別などあるみたいだから、これは IBM DOS かどうかだな。 日本では PC-98 版が有名だったので、IO.SYS も見慣れたものである。 じゃあ IBMJAPVER ってのは? デバッガーのコードを見ると、なんと NMI でパリティエラー判定みたいな実装があり、そこに IBMJAPVER があってポート A0H を読み取って何かやっている。 (どう見てもバグがあってちゃんと動かないけど。) これって IBM JX 用では!???

不思議なのは、確か IBM PCjr も NMI をキーボード用に使っているのは同じじゃなかったっけな。 DMA なんかも取っ払って CPU はミニマムモードで使うけちけち仕様だからな。 なので PCjr 版でも同じはずだが... んで実際の JX 用の DEBUG.COM のバイナリを見たら、パリティエラーのメッセージとそれを出力するっぽいコードはあったが、それを出力するフラグをセットする部分はなかった。 まぁ、そうだな。

あと、JX は発売が遅かったみたいだから、日本語 MS-DOS って PC-98 版が先に出たんじゃないかな。 それも同じ MS_Kanji 仕様なわけで、まず日本語対応をして、それから IBMJAPVER が入る流れだろうか? JX は漢字 ROM のアドレス配置が MS_Kanji だから文字コードができてからなのは間違いないわけだが...

2022/08/20 のコメントを読む・書く


21 (日)

%1 にちようび

涼しい日。

SUPER FORMULA もてぎ 2 連戦 2 戦目。 予選は山本はずいぶん下になっちゃったが、そのチームメイトの大湯がポールポジションを取った。 そうなるときのうに続いてポールトゥウィンが見られるか? と期待が高まってくるが、決勝は IMPUL の一台、関口が早めのピットインでアンダーカットに成功しピットイン組トップを走行。 しかしタイヤが持つか? と注目の中、関口のチームメイトである平川が反対の戦略、好ペースを維持したまま引っ張りに引っ張って、残り 10 周前後のところでピットイン! アウトラップは無理しなかったが、次の周にはタイヤが温まり、ポイントランキングトップの野尻をサクッとしとめて表彰台圏内、さらには次の牧野も攻略し、残り 2 周ほどで関口とのチームメイトバトル! 関口が何とかブロックに成功して勝ったが、どっちにしてもホンダ系コースでトヨタエンジンの IMPUL の 1-2 とはね。 とてもおもしろかった。 大湯は残念ながら最初のスティントのペースが良くなかったためだいぶ順位を落とした。 そのあたり、チーム力が足りないのか、ドライバー力が山本ほどないのか、わからないけど。

%2 DEBUG

MS-DOS のソースコードの DEBUG コマンドのビルドは、同梱されている MASM と LINK と EXE2BIN でいけるんだが、なぜか DEBCOM2.ASM だけ改行コードが LF になっていて、そのせいで MASM が失敗するので、事前に CRLF に変えておく必要がある。 それだけ。

で、やってみたらわかったんだけど、P コマンドは ZIBO の定義がどっちになっていてもエラーにはならない。 ZIBO は TRUE に設定されていて、普通にビルドしたらなじみのある P コマンドが使えるバージョンの DEBUG.COM になった。 FALSE にすると P コマンドはぱっと見は T コマンドと同じような挙動をしているように見えた。 (CALL の先に入っていった。) 同梱されている DEBUG.COM は P コマンドが Error になるが、そんなバージョンの DEBUG コマンドのソースコードはなさそうだ。

%3 カレンダーのプログラム

20220821-cal2.s

DOS 用の COM プログラムで小さい版を作ってみた。 MASM は面倒だったので gcc のアセンブラーで... かけ算・割り算命令も CALL や PUSH さえも一切使っていないので 8080/Z80 系への移植にも使えるかも知れない (?)。 この前のバージョンでやったような、26 をかけて 5 を足して 10 で割るなんていう演算は容量を食いすぎる。 月は 12 しかないんだ。 単にテーブル参照にしたほうが小さく済みそうだってことでそうしてみた。

今回の実装の謎仕様は、年を 400 で割った余りにするところまでは前のと同じだが、それを 20 で割った商と余りで、0 から 19 の整数値ふたつに分けるところ。 テーブルは 20 バイト長だが、ビットで分けて 3 種類のデータを入れてある。 20 で割った商のほうで 20 年単位の曜日の計算と 100 年単位の閏年除外判定をしている。 んで 20 で割った余りのほうは普通に足し算と閏年判定に使う。 で同じテーブルに月の曜日計算データも入れた。 前のと違って 1 月 2 月を前年 13 月 14 月の扱いにしていない代わりに、閏年の場合の 1 月 2 月は 20 バイトあるテーブルの余った部分に入れてある。 んでさらに翌月分までテーブルに入れても 20 バイトあるので足りる。 月の長さを曜日ベースで判定するのは前と同じ。 数字の出力はバッファー上で ASCII を直接インクリメントするスタイルにしてみた。

書いてみてわかったのは、前の仕様と違い動作確認が大変だ。 計算で行うのと違い、テーブルベースではテーブルの各要素が間違っていると変なことが起きてしまうから、テーブルの要素をすべて使うパターンを試さないといけない。 あと、どう見てもこのコードは数か月後に見たら自分でも理解できないと思うw

2022/08/21 のコメントを読む・書く


22 (月)

%1 げつようび

涼しい日。

座骨神経痛。 整形外科には 3 週間ぐらい行っていないな。 座骨神経痛のほうはちょくちょく出てはいるんだが、腰のあたりをもむといいような感じがする。 わからんけど。 背骨と脇腹の間らへんというか。 まだ試行錯誤中。

%2 CD

この前シングル CD の中古を何枚か買った。 一度ミニコンポで再生確認したが、実に面倒なので抽出してファイルで保存。

そんな感じでこの中ではどうやら売り上げ枚数的にはハッピーマンが一番レアキャラなようだ。 曲的にはめざましテレビにぴったりな明るい曲だけど。

シングルなんて基本買ってこなかったし、実家にあったのもあまりまじまじと見なかったので知らなかったけど、奥居 香と鈴木雅之のシングル CD には、ファンクラブの入会方法の案内が書いてあるようだ。 80 円切手 を同封して送れとか、80 円切手 を貼った返信用封筒を送れとか、それに送り先の 郵便番号が 3 桁 で、時代を感じすぎる... でも、わざわざシングルを買うのって結構ファンになってくれそうな人が多いのでは、という気もするので、狙いは正しかったのかも知れない。

まぁ、アルバムにも何かしらファンクラブへのアクセス方法の情報はついていたもんだけどね。 自分が最初に買ったルパン三世... じゃなくてその次に買ったのが T.M.Revolution だったが、CD EXTRA もあったし、インターネットの特設サイトもあった。 (Wikipedia によるとサイトは閉鎖されているらしい。)

2022/08/22 のコメントを読む・書く


23 (火)

%1 かようび

暑い日!

お昼を買いに行く時も、暑いので、スクーターを出して、弁当を注文してからできあがるまでの間に買い物を済ませた。 やっぱりお昼のドラッグストアは空いている感じだ。 お昼のスーパーマーケットはだいたいどこも混雑している気がするので、不思議な感じがする。 特に、弁当も少し取り扱いがあるこのドラッグストアが空いているとはね... まぁ弁当買いに来るなら隣にあるコンビニエンスストアのほうか、普通は。

そのドラッグストアは以前から SARS-CoV-2 のうさんくさい検査キット販売などに手を出しておりやる気満々なので、今は抗原検査やら PCR やらそれっぽいキーワードが印刷された紙が処方箋受付側の入口扉に貼られている。 正直誰が買うんだろう? と思っているが最近は事情が違うのかも知れない。

去年発熱して検査を受けた時は普通に発熱外来を受診して唾液 PCR 検査だった。 その時のクリニックが今も発熱外来を続けているかはわからないが、その時にはまだいつもの耳鼻咽喉科では検査をしていなかったのが、その後は新規でない人には検査をするようになったっぽい感じだったので、今度検査が必要になったらまた耳鼻咽喉科に連絡してみることになりそう。

まぁ、基礎疾患がある人や高齢者向けには専用の薬を出すこともあるけどそうでなければただの対症療法みたいなので、医療機関側としては自分で何とかしてくれってところもあるだろうな。 ただの診断書のためだけに検査受けに来ないでほしいってのはあるみたい。 自分なんかは診断書をもらっても特に役に立つ用途もないわけで、もし何か症状が出てもそのまま様子見パターンかもという気もする。 医師によっては SARS-CoV-2 専用の薬の処方が難しいのは失敗だったねとする人もいるみたい。 高齢者の重症化を 8 割抑えられる薬だというから確かにそれをもっと使えていればと思うところがあるんだろう。 しかし素人考えでは、発熱外来に待ち行列ができる状況においてはそもそも、たどり着いた時には手遅れ、って高齢者も結構多いんじゃないのって気もする。 Fork 爆弾で増えたプロセスひとつひとつにちまちまとデバッガーをアタッチして対処してもね。

2022/08/23 のコメントを読む・書く


24 (水)

%1 すいようび

昼間は晴れていた。 夕方頃から時々雨が降っていた。

つばを飲み込むときに微妙にのどに違和感がある。 例のアレでなければいいが。 単に仕事で英語の文章を読むのについつい音読しているせいなら別に...

%2 蟹味噌

PC-98 のフリーソフトのゲームで蟹味噌というのがあって、DOSBox-X みたいな PC-98 エミュレーターで遊べるんだけど、スコアファイルが壊れてしまうという残念な 2000 年問題がある。 年が 2 桁で入るべきところに 3 桁入ってズレてしまう上に、終端文字も壊してしまうため時刻が 2 回繰り返しでスコアファイルに記録されてしまい、読み込みの際には壊れているとしてそれ以下のスコアが消えてしまう。 これを何とか対策できないかと思って、前に見た時にはどうもバイナリが圧縮されていて面倒だなってなったんだけど、蟹味噌の配布物 (定番フリーソフトとして本で販売されていたもののコピー) が出てきて、それを見たら圧縮されていなかったので、もしかしたら DIET か何かを使って後から圧縮していたのかな、ディスクの空き容量不足で。

ってなわけで圧縮されていないのが出てきたならさっそく調べるしかない。 ドキュメントにある通り C で書かれていて、崩れ方から sprintf%02d/%02d/%02d みたいなことをしているのは C のプログラミング経験があれば容易に想像できる。 最初、年を 1900 引いているのかな、と思って immediate operand の 1900 を探したら何かが見つかったが、これは直接関係のない標準 C ライブラリの一部な気がしてきた。 %02d/%02d/%02d のほうのオフセットアドレスを特定し、そのアドレスを探したらいかにも sprintf っぽい push と call の流れだ。 その前にも call がふたつぐらいあり、おそらく time(NULL)localtime か何かの関数呼び出しだろう。 1970 年からの秒数にした上で日付に変換だから、やはり 1900 は関係ないわけだ。 localtime の仕様で月は 0 から 11 になっていて、実際 1 を加えているコードがある。 年は 1900 を引いた値というのが返されるのを、そのまま使っているっぽい。 となればこれを 100 で割った余りにすればいいんだ。 (別に 2000 年より前の日付で動かすことないから 100 を引いてもいいんだけどねw)

Win32 バイナリだと結構関数と関数の間に隙間があってこういう命令の追加に使えたもんだが、さすがに DOS のバイナリにそんな隙間はない。 じゃあ何ができるかというと、呼び出し規約の都合で関数の引数があるとどうしても push push call add がある。 80386 以降の 32 ビットモードはスタックポインターベースのアドレッシングが可能になったので、今時の C コンパイラーは全部 mov ですませていることが多いが、8086 の時はベースポインターを使うしかなかったのと、もしかしたら命令長の問題やスタック容量の問題もあったのかな、それで基本的には素直に push して call して add でスタックポインターを戻す、となる。 その add が 3 バイトあるし、別にすぐに戻さなくても問題はないので活用できる。

そんなわけで localtime か何かの call の後ろの add を取っ払って詰めて 3 バイトを手に入れ、さらにその近くの mov 2 バイトが xchg と置き換えても大丈夫だったのでもう 1 バイト手に入った。 後は年の push 命令 3 バイトを、mov aam cbtw push 命令の 7 バイトに置き換えて、100 で割った余りにする処理完成! スタックポインターが 2 ズレたままなので、sprintf の後の add に 2 足しておいた。 足さなくてもベースポインターから戻されるだろうから大丈夫な気もするけど、無関係なところを追うのは面倒なのでわかる範囲ですませる。

aam なので 8 ビット符号無し整数で 2155 年まで対応! いや、その前に DOS がたぶん 2079 年までな気がするし、そのさらに前に 2038 年問題がある。 あっ、そっか、もう 16 年もしたらこれもだめなんだな... Bio_100% 系は super.lib や MASTER.LIB の関係で C で書かれているゲームが多いから、2038 年でそのへん全滅しそうだな。 とりあえず localtime 等に入力する time_t を符号無しにすれば延命できる可能性はあるが、バイナリパッチですませるのは大変そうだ...

2022/08/24 のコメントを読む・書く


25 (木)

%1 もくようび

涼しい日。 エアコンを使わない在宅勤務。

きのうののどが変だったのはよくなっているし発熱もないのでまぁいいだろう。

『異世界おじさん』6 話。 まわりから見ると過酷な異世界思い出話。 現世は基本アパートの一室で話が進むのがおもしろい。 今回はラーメン屋がでてきたけど。

昼の弁当屋までの歩きに加え、夜ラーメン屋まで歩いて行ってきたら 1 万歩超えた。 例によって真っ暗な霊園を突っ切った。 霊園では滅多に人とすれ違わないのでマスクを外していても問題ない。

2022/08/25 のコメントを読む・書く


26 (金)

%1 きんようび

雨降ったのかな? 涼しいかと思いきやそこまで涼しくはなかったものの在宅勤務の間は扇風機のみで過ごせた。 が夜には室温 30 度になっていた。

テレビでやってた映画『耳をすませば』。 1995 年の邦画。

%2 ぽろりす

おとといの蟹味噌と同様、ぽろりす (Porolith) も 2000 年問題がある。 壊れ方はそっくり、壊れた後は自分で壊れていると言って起動しなくなる残念パターンだったはず。 中を見ると Microsoft の C ランタイムの文字列が含まれているようなので、そっくり同じパターンだろう、と思って例のフォーマット文字列のアドレスからコードを特定したはいいが、メモリーモデルが違った! データも関数もすべて far ポインターになっている。 ああー。

蟹味噌では add をつぶしたのと mov を xchg にかえて追加の 4 バイトを手に入れた。 今回も add をつぶして 3 バイトは簡単に手に入るが、localtime か何かが返すのも far ポインターであるためその後のコードが違い、面倒な感じになっている。 しかも、その C ライブラリの呼び出しも far call ということは、これセグメントは再配置対象だよな? となると call を移動するのはさらに困難を伴うだろう...

ウーン、と考えたあげく、%es と %ds を逆にして使うことにした。 その手前で movs のために %ds を待避して pop で戻している部分があり、そこから問題の箇所まで %ds を使っている気配がなかったので、それを勝手に %es に戻すようにして、後で %es を %ds に反映という形にした。 これはトリッキーで、呼び出した先のルーチンが %es を破壊していたらアウトだ。 まぁ、そこまでちゃんと調べずにやったので破壊されているかも知れないけど...w でもフォーマット文字列がちゃんと出ていたので結果的には大丈夫なんだろうな。

もしかしたら、あれだなぁ、time の返り値をローカル変数に入れてそのポインターを localtime か何かに渡すつくりだけど、それも far ポインターになって長くなっているから、これを mov でやらずに、わざと push push でやってしまうのが縮めるという意味では得策だったかな? いやでも、それをすると localtime の前に隙間ができるだけなので、ジャンプをして... あぁ、それでもいけるな、うん。

付属のドキュメントを読んでいると、GNU Indent でソースコードを整えた、みたいな話が書いてあってちょっと感動である。 30 年以上前のゲームだからね。 DJGPP やらの DOS エクステンダー系統も一応 1990 年だと登場し始めていた頃かも知れないが、まだ 32 ビット機が普及しているとは言い難い時期だもんな。 おそらくその頃は GNU indent みたいなユーティリティーは 16 ビット環境でコンパイルすることがまだ十分に想定されていたんだろうな。

2022/08/26 のコメントを読む・書く


27 (土)

%1 どようび

のんびり。

夕方ちょっとバイクに乗って、聖蹟桜ヶ丘のいろは坂を登ってロータリーをまわり、適当にぐねぐねと住宅地を通り抜けて帰った。 いろは坂 (多摩市)、耳をすませばのファンかなと思われるような歩行者がちらほら。

きのうのぽろりすのは time の返り値のところを push push に差し替える作戦でやってみるとセグメントレジスターを逆に使う必要がなくなり、ちょっと安心感が増した仕上がりとなった。 DOS 当時の C 呼び出し規約の細かいところなんて覚えていないんだけど、見た感じ %es は保存せずに書き換えているようだし、localtime か何かの引数も far ポインターで返されるのも far ポインターなので、%es が保持されると期待できるかは怪しい。

a2ps で作った PostScript を、画像にできないかと思っていろいろやったが、切り出すなら GIMP で開くのが手っ取り早いことがわかった。 ps2pdf で PDF に変換するとか、PostScript なり PDF なりを GhostScript に処理させるとか、いろいろあるんだけど、向きがおかしくなることがあるし、オプションもよくわからん。

binutils の objdump コマンドで逆アセンブルというのをよくやっているが、Win32 バイナリは普通に ELF 用でもいける感じなのに、残念ながら DOS バイナリは検出してくれない。 binutils のソースコードには msdos というキーワードがありそうなので、--target=msdos を指定して configure してみたらいけた。 make も一発、これで DOS バイナリを見るのが楽になるぞと思ったんだが、なんと .text セクションしか出てこないw 意味ねぇw さすがにちょっと適当過ぎやしないかw 一応、ヘッダーをスキップしたところから逆アセンブルしてくれるのと、アーキテクチャーがデフォルトで i8086 になるのは良いが、そうじゃないんだよー、セグメントや再配置情報を見たかったのにw

先月末に x0tigervncserver の HAVE_XDAMAGE を外す対策をしたつもりだったが、パッケージの一部だけを /usr/local/bin に置いたために結局 /usr/bin のバイナリが使われていてうまく動いていなかったことが発覚した。 Debian パッチなしで普通にビルドして /usr/local に入れたら、-localhost no--I-KNOW-THIS-IS-INSECURE もエラーになってしまい、こいつら Debian の拡張だったんか... っていう。

ニトリで携帯扇風機 HF3103 を買ってきた。 前に買ったうさんくさいのはファンが時々振動するしずっと放置していたら電池がなくなって動かなくなっていた。 いやまぁ、しばらく充電していたら突然ぴかっと光って復活したけど。 この HF3103 はモバイルバッテリー部と扇風機部が完全に分離するタイプだ。 どういうことかと言うと、手持ちの eneloop モバイルバッテリー KBC-L2A でも回せる。 消費電流的にはまずいかも知れないが、とりあえず回る。 なのでいざ使いたい時に電池が切れていても他が使えるというメリットがある。 それと... バッテリーでなくても、単なる USB 充電器につないでも回る。 いろんな用途に使えて便利かなと思った。

楽天トラベルのパック旅行 (飛行機 + 宿泊)、相変わらず時期を外せば安いみたい。 昨今の物価上昇はどこにいったのかというような値段だ。 ただ最近は空港の人混みがすごそうなので、狙うなら朝イチかなと。 朝イチは明らかに不人気なため、安いし、人も少ないし、空港駐車場も余裕とメリットがたくさん、だと思うが乗ってみないとわからないな。 欠点はレンタカーの営業時間の関係でレンタカーをセットで予約できないw

2022/08/27 のコメントを読む・書く


28 (日)

%1 にちようび

昼頃まで雨。 のんびり。

トイレにおいてある時計の電池が切れかけていたので交換しようとしたら液漏れしていた。 前回の交換が 2014 年だったようで、容量の少ない単四アルカリ乾電池を 8 年も使えばそりゃ液漏れもするか。 大学院修了時にもらった大学ロゴ入りの時計なので、その前は 2007 年だろう。 汚れた電池ボックスをペーパータオルで拭き取り、さらに歯ブラシで電極部分をゴシゴシこすって、それから未使用の電池 (期限切れだったけど) を入れたら、なんと電池を外す前の時刻から再開した。 電池残量警告マークも残っていて、数秒後に消えた。 10 分ぐらい電池を外していたはずだけど、よく残っていたな...

%2 デバイスドライバー

MS-DOS/DEVDRIV.DOC at 04a3d20ff411409ab98474892b2bb1713bde0f7f - microsoft/MS-DOS - GitHub

MS-DOS のソースコードの中に "MS-DOS 2.0 Device Drivers" というドキュメントを見つけた。 昔デバイスドライバーを書いてみたことはあるにはあるんだが、あの時は NEC 用 MS-DOS のマニュアルを参照していた気がする。 そのマニュアルがどんなだったか忘れたが、この英語のドキュメントは MSDOS 2.0 が出た当時の話ベースで書いてあっておもしろい。

RAMDISK.SYS というのが昔あったんだが、中を見るとやはりブロックデバイスとして実装されていて、指定容量の空っぽの FAT を構築するルーチンが中に入っているんだろうと思う。 あれ、そういえばデバイスドライバーの引数はどこに渡されるんだっけか?

デバイスドライバーがデバイスをドライブするものだという単純な事実を意識させられたのは大学生の頃だ。 オペレーティングシステムがデバイスへのアクセスを抽象化したインターフェイスを提供しており、アプリケーションは直接デバイスをドライブせず、オペレーティングシステムを介してデバイスドライバーがドライブする。 英語圏の人々にとってはごくごく自然なことだろうけど、自分らの感覚ではデバイスドライバーはデバイスドライバーという固有名詞のような存在であり、かつては CONFIG.SYS に設定を書いて組み込むものであった。 そこには日本語入力フロントエンドプロセッサとか、RAM ディスクとか、高速再起動プログラムとか、特にデバイスを必要としない (デバイスをドライブしていない) ものも多く存在していたけど、何も気にしていなかった。

DOS も一応そういうオペレーティングシステムとして作られたんだと思うけど、こうして公開されているソースコードを見ると中途半端でもある。 例えば FORMAT コマンドのソースコードには非公開の機種依存部分があり、そこは各メーカーが作る部分となっている。 ディスクのフォーマットが IOCTL あるいは何らかのインターフェイス経由にはなっていなかったんだよね。 まぁ Unix 由来と思われる ioctl も決して理想的なものではなくて、ある意味抽象化を諦めてしまったインターフェイスであり、後の Plan 9 ではそれを撤廃してデバイスドライバーもすべてをファイルベースで見せるようにしているし、その考え方の一部が Linux にも取り込まれて、sysfs 経由で機種依存でない形でデバイスの様々な追加情報にアクセスできるようになっている。

今振り返って DOS にほしかったデバイスドライバーは、キー入力と画面出力まわりだな。 あとタイマーか? キー入力はオペレーティングシステムの機能でもある程度はよかったが、カーソルキーのコードなどに機種依存部分があったし、押しっぱなしを検出したいゲーム用途的にはハードウェア直接制御が避けられなかった。 画面出力も ANSI エスケープシーケンスはかなり自由度を高めてくれはしたものの、遅かったのは否めないし、グラフィックスの描画については抽象化はほぼ何も無し。 IBM の BIOS でもドットが打てるのみ。 PC-98 に至っては BIOS は古くさい 8 色時代の機能しかなく、16 色については一応 PC-98 には GRAPH.SYS というのはあったが、これデバイスドライバーのていをしているものの、実態は専用の割り込みを使う代物だ。 特に DOS/V が出てきた時にそういう抽象化レイヤーができればよかったが、あれも IBM BIOS レベルでごちゃごちゃやっていたのが中心。 一太郎など市販の DOS アプリケーションは最後まで機種依存だった。 性能面を考えると描画のたびに IOCTL みたいなのを通すのは需要がなかったかなとは思うが、例えば far プロシージャーのアドレスをもらっていろいろやれるようにでもなっていたら、もう少し DOS 汎用プログラムが多かっただろうと思う。

2022/08/28 のコメントを読む・書く


29 (月)

%1 げつようび

涼しい日。

%2 IBM DOS

IBM DOS といっても MS-DOS の IBM 版なだけだが... きのう DEVDRIV.DOC を読んでいて気になったことがあった。 ブロックデバイスの MEDIA CHECK という呼び出しは、media が changed かどうか、あるいは不明かを返すものだという。 PC-98 ではフロッピーディスクの出し入れをハードウェア的に検知する機構があって、それに合わせて正確に値が返されていたものと思う。 しかし JX はそのようなハードウェアはなく、ディスケットを入れ忘れてアクセスした場合も、タイムアウトしてからエラーになっていた。 なので MEDIA CHECK の存在そのものは確か NEC のマニュアルで見て知っていたんだけど、DOS 2.x にはないものと思っていたような気がする。

で、そうするとその MEDIA CHECK はすべて不明と返していたのではないか? そのせいでやたら同じトラックを何度もアクセスしてディスケットがよく壊れていたのではないか? という疑問が浮かんできた。 DOS のデバイスドライバーはヘッダーの pointer をたどる一方向リスト形式になっているらしいので、RAM ディスクを組み込んで起動した上で、RAM ディスクのデバイスドライバーが読み込まれているアドレスを突き止め、そこからその一方向リストをたどって、ディスケットのブロックデバイスにたどり着けた。 そういうのはセグメント 200H にもろもろ読み込まれているらしい。 IBMBIO.COM の一部だな。

んでちょろっと見たところでは、単純に不明と返しているのではなく何か処理があるようで、もしかしたらハードドライブ絡みの処理なのかも知れないが理解できていない。 しかし改造はできる。 条件ジャンプを一か所無条件ジャンプに書き換えることで、 常に not been changed にしてしまおう。 ということで、改造版とそうでないのを、アクセス開始 LBA を表示するように改造した拙作エミュレーターで実行して比較! 案の定差が現れた。

ゲームを入れてあったディスケットで試したら差が少なかったが、CONFIG.SYS に BUFFERS=10 を書き加えたところ大きな差が出た。 それでも何度も FAT とルートディレクトリエントリを読み込んでいるんだけど、回数としては顕著に減る。 これだ... わざわざディスクキャッシュのプログラムなど実装して使っていたが (最初使っていたのは、手動でキャッシュクリアを指示する必要があったのとバグもあったために何度かディスケットを壊してしまい、次は自分で最低限の機能でランプが消えるまでキャッシュを保持するものを作って使っていた)、 本当に必要なもの はこれだったのかも知れない。 そのランプが消えるまでのアイディアを、DOS のブロックデバイスに適用すればよかったんだ。 まじめに作るならブロックデバイスのデバイスドライバーとして作成して、組み込み時にドライブ文字の範囲をシステムに組み込まれているディスケットのものと同一にしてフックする形になっていただろう。 同時に強引にキャラクターデバイスも追加して、一時的に長時間保持モードに設定できてもよかったかも知れない。 その場合はランプが消えるまでの時間を延長するか何かで見た目にもわかりやすいようにしておくと良かっただろう。

それ以外にも当時も実現できた可能性がある方法はあって、RAM ディスクの空き領域をディスクキャッシュとして使うという RAM ディスクデバイスドライバーも、作ることはできただろうなと。 RAM ディスクを自分で実装してみたいという気持ちがあの頃にあったなら、作れていたかも知れないけど、特になかったな。

ついでにおそろしいことを書くと、当時 BASIC で RAM に機械語を書き込んで実行するというテクニックは世界の常識だったわけだが、その時に何かのマニュアルか何かで見た DEF SEG=&H1A00 というのを何も考えずにいろんなところで使っていたのは、やっぱりよくなかったようだ。 普通に 64KiB の RAM ディスクを組み込んで立ち上げたらセグメントは 2435H あたりになっている。 つまり 1A00H は RAM ディスクの領域の一部とか、運が悪ければ DOS のバッファーとか、自作のディスクキャッシュの領域とかだった可能性もある。 素直に DEF SEG にして、VARPTR なんかを使うのが正解だったんだけど、全く知識が足りていなかったわけでね... オフセットアドレスがずれると面倒というのはあるが、後の機械語の知識があったらそんなのなんとでもなったよな。 16 バイト単位に合わせておけばセグメントで調整することもできたし。

2022/08/29 のコメントを読む・書く


30 (火)

%1 かようび

涼しい日。 在宅勤務。 今月 1 回しか出社してなくない??? ま、いいか。

Qrio Lock 時々アプリでアクセスして確認しているのだが、ピッと確認したら片側電池切れになっていた。 そういえば前に確認した時に残量低下の表示があったっけ... 忘れていた。 3V のリチウム電池 2 本だが、開放電圧を測ると 5.8V ぐらいはあった。 けっこうあるじゃんと思ったが、だめらしい。 予備に買ってあったのを開封して測ると 6.4V ぐらいあった。 なるほどね。

Qrio Lock の電池をかえなきゃなーと思いながら、ミーティング後にミニコンポの電源を入れようとリモコンを押しても電源が入らなかった。 最初はこのリモコンも電池切れかよと思っていたんだが、本体のボタンを押してもうんともすんとも言わない。 あれれ? こういう時は... IT 業界ではおなじみの、電源ケーブルを外して、しばらく待ってからつなぎ直す! という方法で復活した。 何だったんだ。

%2 F1

おとといの F1 ベルギー GP。 1 周目からルイスハミルトンがとても珍しいアクシデントを起こしてオイルをまき散らしてリタイヤしてしまい、その後ラティフィがとてもそれらしいスピンをやらかしてボッタスが被害に遭い、セーフティカー、それからフェルスタッペンがあまりにも無双するので若干見る気を無くしたw 2004 年のミハエルシューマッハかと思うほど、圧勝だ。 チームメイトも完全に置き去りにしていて、余分にピットインしても余裕で優勝だっただろうというほどペースに差があった。 フェラーリはルクレールは不運に遭い、サインツががんばっていた。 が本当に差がでかいんだよな。 ハミルトンのアクシデントがなかったとしても 1-2 に違いはなかっただろうと思えるほど。

ここに来てアルピーヌは確実に力をつけてきているし、ウィリアムズもアルボンは直線番長を最大限活かして入賞していた。 アルファタウリは今回ガスリーが入賞はしたんだけど、なんかマシン的にはいまいちな感じがする。 直線番長のアルボンが後ろにいたから何とかなっただけで、ストロールやらノリスやらには前に行かれていても不思議はない感じ。 まぁでもハースが今回悪かったのや、メルセデスも予選いまいちだったのを見ても、コース特性もあるんだろうな。

2022/08/30 のコメントを読む・書く


31 (水)

%1 休暇

耳鼻科。 いつもの。

耳鼻科に行くってことは職場の近くに行くってことであるw 久しぶりにとんかつ屋のカツカレーを食べた。 それから、米がそろそろ切れそうだと思って職場の近くのスーパーに寄ってみたところ、宮崎県産の米があるのがおもしろいなと思った。 一足先に新米だから入れているのか、それとも通年で仕入れているのかはわからない。 ただ 5kg の無洗米はなく、別のスーパーに行ったら 2kg の宮崎産無洗米があったので買ってみた。 新米のくせに値引きされていて、どういうこっちゃ?

耳鼻科の駐車場にはいすが何個も置かれていて、発熱の人は今日は見かけなかったけど、発熱外来もやっているようだった。 先月頃は結構すごいことになっていたのかも知れないな。

%2 MS-DOS

MS-DOS のソースコードに出てくる XENIX というキーワード、Microsoft が開発していた UNIX なんだな。 8086 用の UNIX。 へぇ。 Microsoft としてはそれと互換性がある機能を MS-DOS に取り込んだというつもりだったのか。 確かに NUL 文字終端のファイル名指定やディレクトリの区切りに / を受け付けるあたりには Unix の影響は見えている。 /DEV/CON とか \DEV\CON とかって文字列が見えるのも XENIX 由来だな...

MS-DOS のメモリー管理はあまりよく覚えていない。 アセンブリ言語でいつも作っていたのは .COM 形式で、これは連続空きメモリーが全部確保された状態で開始される、だったはず。 なので別のプロセスを作成するにはメモリーを縮小する必要があって、realloc じゃないけどなんかそんなようなシステムコールがあったはず、とぼんやりと記憶していたが、SetBlock (4AH) というシステムコールがあるようだ。 Realloc とは違ってアドレスの変更は行わずサイズだけ変更するんだったと思う。

DEBUG.COM がどうやって EXE ファイルを読み込んでいるかは知らなかった。 ソースコードを見ると Exec システムコールを使っている。 全部準備するけど実行は開始しないというファンクションがあったようだ。

DOS にはプロセスの切り替えの概念があり、普通に Exec システムコール (spawn) を使えば実行中のプロセスは新しいものに切り替わる。 んで終了とか常駐 (メモリーに残したまま終了) とかすれば前のプロセスに戻る。 今のプロセスに関する情報は PDB ってのに保持されているみたい。 (これは何の略だ?) この PDB ってのはプロセス起動時のデータセグメントの先頭のようだ。 先頭に CD 20 (プロセス終了) があり、オフセット 80H にコマンドライン引数の長さ 1 バイト、81H からコマンドライン引数が入る。

んで、PDB を切り替える SET_CURRENT_PDB (50H) システムコールがある。 普通のプロセスにはまったく不必要なシステムコールだが、デバッガーなんかでは必要なわけだ。 実際 DEBUG.COM のコードには使っているところがあるが、実際に DEBUG.COM を立ち上げて PDB を調べたら DEBUG.COM のものになっていた。 あれ? と思ったら、引数に実行可能プログラムを指定して起動した時にはちゃんと起動したプロセスのものに切り替わっていた。

COMMAND.COM のソースコードを見ると、コメントにいろいろ書いてあった。 いくつかのパートにわかれていて、一部は上位メモリーに置いて、チェックサムを見て壊れていた時だけ読み直す、みたいなのがあるんだと。 常に使われていたかはわからない。 割り込み 22H (終了!?), 23H (Cntrl-C), 24H (fatal error), 27H (常駐) のハンドラーがあるんだって!? マジか、それシェルの仕事なのかw と思って検索してみたものの、27H まで COMMAND.COM だったのは 1.25 のほうじゃないかな... 2.0 の 27H の設定が見つからないんだが... あぁ、MSINIT.ASM にあった! 27H はシステムコールの一種として実装されているな。 極めて単純に新しいシステムコールに変換するだけみたいだけど。

こうしてソースコードを見ながら振り返ると、MS-DOS も恐ろしいほどブラックボックスとして扱っていた/扱われていたんだなと思う。 どうして COMSPEC に COMMAND.COM の代わりに設定するプログラムは現れず、シェルのヒストリ機能追加は KSH (KI-Shell) なり VZ Editor なり、常駐プログラムの形だったかというと、内蔵コマンドが多いし、結構いろんな裏仕事みたいなのがあって第三者は作りづらかったんだろうし。 デバイスドライバーを後から組み込むのは EO System が実現していたが、あれも何をやっていたかは知らない。 メモリー確保するか Exec システムコールで読み込んだ上で、どっからかデバイスドライバーの一方向線形リストの先頭を取り出してきて強引に追加していたのかなと思うと、よくそんなんで動いていたなぁという感じもする。 メモリー使用状況 (マップ) を出力するプログラムもあったな。 あれもどうやっていたんだか...

「常駐プログラム」の文化もすごかったな。 常駐後に制御したい・解放したい需要があり、それをみんな思い思いの方法で実装していた。 解放は最後に常駐したものから順に行わなければならず、順番を間違えると割り込みベクターを壊して動かなくなるという罠もあった。 壊すのは割り込みをフックして機能追加するというのが多かったためであり、あんなのも割り込みフックと常駐プログラムを管理するデバイスドライバーでも作ってみんなでそれを使っていたらもっと簡単になっていたかも知れないね。

2022/08/31 のコメントを読む・書く


prev, this, next

/var/log/hdk.log コメント一覧

トップ / 日記索引 / 日記 (2022 年 8 月)

Hideki EIRAKU