/var/log/hdk.log

2019 年 11 月下旬


20 (水)

%1

天気予報でわかっていたことだけど、寒い...

バイクグローブはもう冬用に切り替えているが、このコミネのグローブ、3XL の癖にきつい。 まぁ仕方ないとは思っているけど、世の中には電熱グローブなるものも存在するらしく、いいよいいよと評価されているのを見るとうらやましくはなる。 サイズ一覧に XXL までしかないのを見ただけで、こりゃサイズが合わないな、ってなるからな。 電熱インナーグローブなんてものが使えるほど大きなアウターグローブもないしな。

グリップヒーターを付けるのもなんだか面倒そうだし、ナックルカバーとかナックルガードとかハンドガードとか言われる風よけを付けるのはまぁ、簡単に付けられるものなら付けておきたい気はする。

2019/11/20 のコメントを読む・書く


21 (木)

%1 もくようび

今日はバイナリーをダンプしてデバッグしてとても疲れた... こりゃー gdb か何かで楽にできるようにしておくべきだ、と思った。 状況的にブレークポイント設定やステップ実行ができるわけではないんだけど、メモリーの状態を見るだけでも、gdb でシンボルが使えたら圧倒的に便利だろうな。 スタックトレースまでできれば効率よさそう。(ダンプ眺めてほとんど手動のスタックトレースをしていた。)

きのうは今季初めて加湿器を起動した。 寝室の湿度が 30% を切っていたので。 今日も乾燥気味のようだ。 今年コロラドに行った時でもここまでは乾燥していなかったんじゃないかな。 前に行ったときに相当乾燥していたけど (確か 10% を切っていて、山間部に fire ban という規制が出ていた)、今年は 40% くらいはあったと思う。

まぁ、布団ももう冬仕様である。 まだエアコンを使っていないくらいで。

2019/11/21 のコメントを読む・書く


22 (金)

%1 休暇

例によって、せっかくの平日休暇なのに天気が悪い。 午前中は持つかと淡い期待を抱いていたが、ガッツリ降り出した。 クッソ寒いので今季初エアコン始動!

こんな日はさすがにレンタルカートに行く気もしない。 そんなわけで車で出かけたら買い物が捗ってしまった...

リングフィットアドベンチャーは人気らしくて、在庫がないのかと思いきや、ヤマダ電機にとても普通に在庫があったので買ってきた。 インターネット通販サイトでは販売休止のところが多そうだ。 あれれ? ひょっとしてたまたま週末の売れ時に備えて入荷されたものだった?w

Rust プログラミング入門は、何か Rust というのがおもしろそうという話を聞いて、しかし手を付けるのが難しそうなので本を見てみようということで。C のようにガベージコレクションがないが、C と違ってバッファーオーバーフロー的なミスはチェックされる世界だと聞いている。

BBC micro:bit は教育用コンピューターの一種。 なんか安いし遊べるかなと思って。BBC はあの英国放送協会の BBC である。

夜は某鍋を食べに車で都心方面へ。 ただでもわかりにくい道が、雨がひどくてとにかく走りにくい。 帰りはまさかの都電の併用軌道区間を横断、初めてかも? 道路の線が見えない上に、タクシーを求める人が車道に出ていて極めて危なっかしいところがあって、人に注意していたらいつの間にか左折帯に吸い込まれてみたり、右側をやたらゆっくり走るタクシーがいるなぁと思ったらそいつがいきなり左合図を出して寄ってきたから ABS フルにきかせたりと、さんざんだった。 都内の雨の金曜の夜のタクシーマジやべぇ、鹿児島で言ったら天文館あたりにならいそうな危なっかしいタクシーがそこら中にいる。

2019/11/22 のコメントを読む・書く


23 (土)

%1 勤労感謝の日

雨。

外語祭、東京外国語大学管弦楽団のオーケストラだけ聞きに行った。 クラシック曲なんてほとんど縁がないはずなのに、ヨハン・シュトラウス 2 世の「春の声」はなぜかほとんど記憶にあった。 しかもコンピューターミュージックではなくて、NHK か何かで放送されたオーケストラじゃないかな。 もしかして、昔聞いたカセットテープに入っていたかな。 あるいは NHK-FM の名曲スケッチか。 なんで記憶にあるのかまったく記憶にない。 他にジュラシックパークとかアラジンとか、有名な映画のやつもあったのに、そっちよりも「春の声」のほうが覚えていたという...

そういえば今年大根掘りの案内が来ていない気がするな。 今年は無しかな?

%2 ニンテンドー

リングフィットアドベンチャー、さっそく始めてみた。 なにやらストーリーがあって、スーパーマリオブラザーズじゃないけど、今は 1-1 から 1-4 までやってみてボス戦が一回あった的な感じだ。 なかなかよくできていて、汗が出たw 走るのはあんまり激しくやると首にきそうだから控えめに。 あと敵を攻撃する時のアクションは、スクワットはひざに来そうだから選ばなかった。 頭の上でリングを押し縮めるやつと、床の上で足の曲げ伸ばしをするやつばかり。

しかし任天堂は Switch の開発時点でこの用途まで想定していたのだろうか? 足につけるほうは単にコントローラーの各種センサーを使うっぽいのだが、リングのほうは、角度はコントローラーのセンサーで取っていると思うけど、押し縮めたり引っ張ったりする操作があって、どうなっているのか。 中に電気回路は入ってなさそうなくらいシンプルだけど、もしかして入っているのかな。 それでこの値段 (普通の Switch ゲームパッケージの +2000 円ほど) で売れるのか?

いまいちなところは、時折小さな字で何か出てきたり、走りながら何か説明が出たりして、読みづらいところだ。 大画面テレビ接続が想定されているのかも知れない。 ウチにはコイツにつながるテレビやディスプレイは存在しないので、内蔵画面でプレイする他なくて、やや厳しい。 けど、まぁ細かいことは気にしなくても遊べるようにはなっている。

%3 Rust

とりあえず、「Rust プログラミング入門」をざっと読んでみたのだけど、この本、プログラミングが初めてという人にもというふうに書かれてはいるのだが、それにしてはだいぶ肝心なところ、例えば対象となるコンピューターシステムは、並列に逐次実行をするシステムであるというような説明が抜けているように思った。 あと、脱線が多くて、例えばガベージコレクションの話をそこまで細かく書かなくてもいいんじゃないかな、みたいな。

で、他のプログラミング言語経験者から見ると、誤字が多いなとも思うし、for の説明などは言葉も例も足りないという印象を受けた。 例えば for i in 0..5 とすると 5 回ループする、という時に、0 から 5-1 までなのか、0 から 0+5-1 なのか、どちらかはっきりしない。 もしここに for i in 5..10 というのもあって、これも 5 回ループなんだと言われれば、終わりの数 -1 ということがすんなり理解できるんだよね。 ま、こんなふうに試してみればすぐにわかるけどね。

$ cat a.rs
fn main() {
  for i in 5..10 {
    println!("{}",i);
  }
}
$ rustc a.rs
$ ./a
5
6
7
8
9

他にも、return の説明が if-else で書かれていて、これって return なくても動きそうだよな、みたいな、return がそれ以降を実行しないという説明になっていない感じも。

で、この言語の一番のポイントは所有権という仕組みらしい。 オブジェクトを引きずり回した時に、誰が使っているんだか使っていないんだか、わからなくなることがない仕組み。 説明を読んでいるだけでは、本当にこれで事足りるのだろうかと不安になってくるが、まぁ、1.0 のリリースから何年か経つ言語だし、足りるのだろう。 その説明もなぁ、どうやら println! マクロに渡す引数は扱いが異なるらしい点についての説明はなかったなぁ。

あと、今時の言語、Go なんかもだけど、例外ってのはやっぱりないんだな。 実際、プログラムを書くとき、エラー処理はその場に書きたいというのがあって、案外あの try-catch は書きにくい感じがあった。Rust はエラーもそうでないのも返せる型が用意されているらしくて、そこから unwrap メソッドでほしいものを取り出す仕掛けなんだと。 エラーチェックせずに unwrap メソッドを使えば、エラーの時は unwrap メソッドが実行時に失敗して落ちる (panic)、みたいな。

Rust はオブジェクト指向ではないらしいのだけど、オブジェクト指向っぽい概念が入っている。 コンストラクターというのがないというか、new とか create とか名前は何でもよくて、クラス関数的な存在になっているのがおもしろい。 そういえば C++ でも、コンストラクターだとエラー処理が例外でしかできないので、例外なしでエラー処理ができるように、クラス関数でオブジェクトを作るようにしましょうというような流派があるらしい。 その場合コンストラクターは private に、オブジェクトを作るクラス関数が public に置かれる。 自由度の高い C++ らしい話である。

2019/11/23 のコメントを読む・書く


24 (日)

%1 にちようび

よく寝た日。

そういえば風邪はさすがに治ったっぽい感じがする。 といいつつたまに痰は出る。

雨は上がったが湿度が高い感じの日。 妙に暖かいし、車を走らせると窓が曇ってくる感じ。

バイクを動かした。 妙に暖かかったので、冬用手袋は少々暑かったw そして例のメインキーの接触不良は再現せず。 なんか、Twitter で見かけたんだけど、寒くなったら車の集中ドアロックが誤作動を起こすというおもしろ動画があって、リレーの接触不良では、みたいな返信がついていたんだったかな、まぁとにかく、寒い時だけ接点の接触不良が発生ということ自体はあるんだな、と思った。

%2 Rust

まえがき - The Rust Programming Language からたどれるドキュメントを眺めていた。 このドキュメント、すごくよくがんばって書かれているとは思うのだが、けっこう内容的には重たくて、なかなかスムーズに理解が進まない。 あの本を先に読んでいなかったら、投げ出しているところかも。 いやしかし、複数ファイルを扱う Cargo のところはけっこう大事な話なのに、あの本には抜けていたような。C/C++ がやっかいなのはプロトタイプ宣言に絡むところ、特に C++ のクラスの定義と実装を分けるのはなかなか書きにくさがあって、そのへん後発の Java などはうまくやっていると思うし、案の定 Rust もよくできていそう。 たぶん Go もだと思うけど、スクリプト言語の Perl や Ruby なんかみたいな気軽さで書けそうな感じがする。

Unsafe Rust - The Rust Programming Language を見ていて気づいたけど、C の関数も直接呼び出せるようになっているんだな。 逆もできるみたいだし、これは良いぞ。

2019/11/24 のコメントを読む・書く


25 (月)

%1 げつようび

きのうはリングフィットアドベンチャーはプレイしていない。 なのになぜか、今朝若干、普段とは違う筋肉痛の感じがした。 あれ?

夜、リングフィットアドベンチャーを少し進めてみたところ、汗だくにw リアル体力を削られるゲームだなw まぁ、ストレッチだけでもやる価値はありそう。 自己流ストレッチは時間の数え方がいい加減になるけど、こうして画面に表示されると間違いがない。 まぁそういう意味では 10 年ちょっと前に流行った「ビリーズブートキャンプ」みたいなビデオもおそらく役に立つ部類のものだが、このセンサー付きゲームは手を抜いているとゲームの進捗に影響するのが優れている。

今日は変な天気で、朝は湿度高め、昼は晴れていて、夜は急激に気温が下がって弱めの雨だった。 天気予報では、昼過ぎに雨が降って気温が下がる、というようなことを言っていたと思ったが、実際は夜になったというわけだ。 そして明日はクソ寒い予報である。

2019/11/25 のコメントを読む・書く


26 (火)

%1 かようび

朝はビミョーに雨が残る曇り空みたいな。 耳鼻科に行くのに原付で、雨具を着て行こうとしたらなんかクッソ寒かったので、冬物イージスに着替えた。(これはかなり強力な防寒と同時に雨具にもなる。)

仕事のミーティング、お客さんが同僚があなたのことを知っててみたいな話をするので何かと思ったら、大学の同期の勤め先だったw

Rust の例のドキュメント、本当にいろいろな説明が載っていて理解が大変だが、気になっていたところを読んだ。 スマートポインター、というのは C++ なんかでよくある存在だが、Rust にもあるようだ。 この前買った本では Box 型だけ出てきていたが、Box と Rc と RefCell があり、なんだっけな、Rc がリファレンスカウントというのは覚えられたが... アトミック版が Arc で... まぁ、それはいいとして、それでスレッドの話を少し読んでみたら、メッセージ受け渡しをする mpsc というのが、見た目わかりやすそうに見える。 見える、というのは、サンプルは実にシンプルで良いのだが、これ、型はどうなってんの? ってやつだ。 いろいろと推測が走ってくれるおかげで、悩まされてしまうところだ。 実際に試せばわかることだが、tx.send() を最初に使うところから型が決まるんだな。 それがクロージャーの中だからなんかカオスな感じがするけれども、そんなことができてしまうとはなんともすごい言語だ...

スレッド間のメッセージ受け渡しは Go のスローガンが例に挙げられていた。 まぁ、Go のことはほとんど何も知らないけど、C でスレッド間のメッセージやりとりをどうするかはたぶんあんまり一般的な方法としては確立されていないのかな。 自分で書いたらパイプとかソケットとか使いそうな気がするしな。

2019/11/26 のコメントを読む・書く


27 (水)

%1 ついに

冬物コートを引っ張り出した。 やっぱり最高気温が 10 度あたりになってくるととても寒い。

そうそう、今年の大根掘りは 12 月に入ってかららしい。 例年よりだいぶ遅い気がするけど天候の関係だろうか。

%2 天気

最近天気が微妙なおかげで湿度が極端に下がらずに済んでいる。 数日前だいぶ天気が悪かったので除湿機を動かした日もあった。 湿度 60% 超えてくると除湿機 1 日くらいでガッツリ水が溜まった。 湿度 50% 前後だとちょっとしか溜まらなかった。 コンプレッサー式なので気温で性能も変わってしまうので、単純には言えないけど。

で、今日は久しぶりに職場に傘を忘れたw

2019/11/27 のコメントを読む・書く


28 (木)

%1 おもちゃ

映画『ターミネーター』シリーズ最新作が話題の今日この頃だが、中古の Atari Portfolio というコンピューターを手に入れた。 これはもちろん、言わずと知れた『ターミネーター 2』(Terminator 2: Judgment Day) に登場する、銀行 ATM や金庫の PIN を発見するコンピューターである。

ま、それはいいとして... コイツはなんと CPU に Intel 80C88 を搭載している。80C88 というのはどうやら 8088 の CMOS 版、低消費電力版のようだ。 つまりほとんど 8088 と同一のはず。 これは、8088 搭載機のエミュレーターを作るのに大変参考になりそうだ、というのが、手に入れた動機である。

説明書によれば本当は標準でいくつかのアプリケーションが入ったメモリーカードが付属しているらしいが、それは欠品のようだった。 まぁいい。DOS 互換のオペレーティングシステムは ROM に入っている。AC アダプターは 117V 60Hz のアメリカ合衆国仕様だ。 まぁそれもいい。 単三乾電池 3 本で動くのだから。

さて、メモリーカードも通信カードも持っていないので、DOS にどんなコマンドが入っているのかが気になっていたのである。DEBUG コマンドが入っていたら試すのには最高だったが、実際見てみたらさすがにそういうわけにはいかなかった。 どんなコマンドがあるかは help コマンドが入っていて確認することができた。

こんな感じ。 いくつかなぞめいたコマンドはあるものの、普通に DOS だ。 リダイレクトも通ったし、おなじみ COPY CON でテキストファイルの作成もできた。 謎の app コマンドというのは、標準のアドレス帳や電卓などの機能が入ったコマンドだ。off コマンドは電源をオフにするコマンド、Fn+O でも良い。 ただし、実態はスリープである。 電源を入れるとオフにする前の画面に戻る。 まぁ、何しろ、フラッシュメモリーが身近でなかった 1989 年の製品なので、保存先のドライブは RAM 上にあるのだ。 つまり RAM への通電がとぎれればドライブの中身もおさらばだ。

さて、ここにバイナリーファイルをぶち込みたいが、メモリーカードも通信カードもない。 手段はキーボードのみ。 試しに簡単な Hello world を作り com2txt でテキストファイルに変換して COPY CON で入力し、実行したところ実行できたので、まぁ、いろいろ試すことはできそう。

なお、関係ないけど com2txt で作ったバイナリーを dosemu で動かしたらちゃんと動かなかったw debug コマンドでシングルステップ実行したら動いたので、どうやら dosemu が使用している CPU エミュレーターに問題がありそうだ。 以前なら仮想 8086 モードで動かせばよかったのだが、残念ながら Debian GNU/Linux の今の最新カーネルでは仮想 8086 モードの組み込みが外されてしまったので、できなくなっている。

%2 8086/8088 搭載機

8086/8088 搭載機がほしかったのは事実だが、JX/PC/PCjr あるいは PC-9801 の初期のモデルなど、デスクトップのレトロ機はディスプレイの壁があり、悩ましかった。 コンポジットに出せればそれもありだけど、それができないとなると、古いブラウン管ディスプレイというのはいかにも故障しそうだし、故障した時に自分では手も足も出なさそうな感じがある。 液晶ディスプレイのノートパソコンのほうが、ディスプレイの故障はしにくそうである。

で、ワープロ専用機の文豪シリーズのことを考えたこともある。 文豪ミニ 7 シリーズは DOS マシン、5 シリーズは CP/M マシンという話なので、ハードオフでワープロ専用機を眺めることもあったが、これらのシリーズは見かけなかった。 まぁ、あったとしても CPU は V30 で、8086/8088 よりやや拡張されているため、未定義命令の挙動などは確認できなかったかも知れないし、何より起動にフロッピーディスクが必要というのがまた問題となるところだ。 古いフロッピーディスクはカビが生えたり磁気が弱くなったりして読めないこともあるし、ドライブの耐久性にも不安がある。 さらに、ハードオフみたいなところでその時代のフロッピーディスク付きで手に入る確率も低い。

以前某宝の山から初代 dynabook J-3100SS001 を見つけたこともあって、あれを拾っておくのもおもしろかったかも知れないが、それもまたフロッピーディスク問題がありそうではある。 が、調べると ROM に MS-DOS と ATOK7 を搭載していたのか。 おもしろそうなパソコンだったんだな。

2019/11/28 のコメントを読む・書く


29 (金)

%1 きんようび

テレビでやってた映像作品『ルパン三世 プリズン・オブ・ザ・パスト』。 小林清志の声がちょっとしゃがれ声になっていたような気がしたな。 まぁ無難にルパン三世らしい内容だった。

%2 Portfolio

さすがに com2txt の変換は人間が入力することは想定していないっぽい感じなので、標準入力からテキストを読んで標準出力にバイナリを出す簡単な変換プログラムを書いてみたのだが... 動かなかった。com2txt で変換後の内容を手入力なので、打ち間違いかも知れないが、間違いの場所は見つけられず。 ウーン。 システムコールがまずいのか? でも DOS 2 相当なら動くはずなんだが...

本当は debug コマンドをぶち込みたいところだけど、DOS 2.0 の DEBUG.COM で 12KB もあるので、com2txt で変換して手入力するのは無理がある。

2019/11/29 のコメントを読む・書く


30 (土)

%1 レンタルカート

藤野。3 回乗ってベストタイムは 39.6 秒ぐらいだったっけ。 インリフト、少しはできたかな...

%2

バイクで行って、崖崩れのところ通れるようになったんだ、と思って、橋のほうに行ったらなんか、ラブホテル近くの交差点で車が止まっている。 よく見ると警察官がいて、事故の見分っぽい。 こんなところで事故ねぇ、なんかやや車が斜めってるし... それをよけるため、前の車が対向車を待って止まっていて、それから進み出したら、原因がわかった。 路面が白かった。 やべぇ、相模湖の橋の上で日陰だから、凍結するには絶好のポイントなんだった!

靴を路面にこすらせてみても滑っている感じがする。 こわっ。 ハンドルもブレーキも動かさずにそろりと進み、何とかそこは無事に通過し (もし事故っている車がいなかったらかえって危なかったかも知れない... 一時停止については自粛)、その先の崖崩れ部分は片側交互通行になっていた。 行きは人が立っていて、帰りは無人で信号機になっていた。(←帰りも通ったのかよw)

久しぶりに東京工科大学前を通って帰った。

%3 Portfolio

きのうのプログラムは EOF のハンドリングができていなかったので、修正した。 で、Portfolio での問題は以下だ:

そんなわけで、ファイルに書いてリダイレクトで食わせれば、動いた。

さてと、最初の実験としてプリフェッチキューの長さを計測してみよう。

        .code16
        xor     %cx, %cx
        mov     $1f, %di
lp:     cmp     $2f, %di
        je      ed
        mov     $0x0141, %ax
        cld
        cli
        mul     %ah
        stosb
1:      .rept   10
        nop
        .endr
2:      sti
        movb    $0x90, -1(%di)
        jcxz    lp
        lea     '0'-1b-1(%di), %dx
        mov     $2, %ah
        int     $0x21
ed:     int     $0x20

これは .COM 形式のプログラムである。 実行してみると、4 と出た。 フーン。 拙作のエミュレーターでは 3 と出る。 アチャー (ノ∀`) なお、今時のプロセッサでは 0 が出るはずだが、仮想 8086 モードを使わない dosemu では何も出なかった。 おいおい。 だいぶ手抜き実装なのか?

さて、8088 のプリフェッチキューは 4 バイトなのでそれっぽいのだが、ポイントは、stosb 命令の書き込みが行われる前に、プリフェッチキューが埋められている点だ。 拙作のエミュレーターはそれができていなくて、3 と出るわけだ。 このプログラムはあえて mul 命令を入れてプリフェッチキューが確実に埋まるようにしたんだけど、そうするとアレだな、stosb 命令だけでもフェッチが走るっていうんだから、逆に mul のところを jmp .+2 命令にしたらどうか? 試したところ、1 になった。 フーン。 じゃあ nop 命令 2 つなら? これも 1 になった。 へぇ。 拙作のエミュレーターではいずれも 3 と出る。 ウーン。 これはおもしろいが、プリフェッチの挙動だけで難しいぞ... 試したいこと山盛りだ。

2019/11/30 のコメントを読む・書く


Powered by Tomsoft Diary System 1.7.4

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

トップ / 日記索引 / 日記 (2019 年 11 月下旬)

Hideki EIRAKU