熱は36.9℃ のまま。ぶり返す様子もありません。喉も大分調子が良くなりました。このままあっさり治ってくれそうです。肺炎とか入院とかにならなくて良かった。これもワクチンのおかげなんでしょうかね?良くわかんないけども。
とはいえ、外に出てはならん(隔離期間は10日間)のですよね。割とヒマでして、洗濯物を畳んだりこの日記を書いたりしています。
ああ、そうだ。COVID-19感染で中断していたゲーミングサブPC組み立てを完成させるのも良さそうですね。まあでもホコリがたくさん舞いそうなので明日にした方が良いか……。
私は経過は順調でほぼタイトルの通りです。しかし今度は奥さんが発熱しCOVID-19陽性になってしまいました。同じ家の中に居て感染しないはずがないですよね。COVID-19との戦いはもうしばらく続きそうです。
Transcend TS128GESD400Kをサーバの起動ディスクにしていましたが、5年ほど経ったので買い換えました。購入したのはKIOXIA SSD-PKP500U3-Bです。20GBもあれば十分なところ、容量は無駄に500GBもあります。大容量のSSDは昔は高かったですが、今はだいぶお安くなっていてありがたいです。
本当は半年くらい前に買ってたんですが、交換するのが面倒でこんな時期になってしまいました……。
この3日間、解熱剤なしでも熱が出なくなりました。厚労省の定義する「症状軽快」に該当したようです。良きかな良きかな。
詳細は退院基準・宿泊療養解除基準の改定概要 - 厚生労働省を見て欲しいですが、厚労省はなぜか発症日を「0日目」とカウントするため、普通のカウントで言うと11日間の経過+症状軽快後3日間の両方が必要みたいですね。
つまり私の場合、有症状(8日に発症)なので、外を出歩いて良くなるのは18日ってことですね。
ゲーム用PCにWindows 10をインストールしました。最初はTPMを無効にしていたのでPC正常性チェックツールに「Windows 11にできないPCですよ」と怒られていましたが、TPMを有効にすると要件を満たしたようです。ゲーム用なので動けばよくてWindows 11にアップデートする予定は当分ないですけども……。
ところでこのPC正常性チェックツール、左側に「N年経過」の表示がありますが、何に基づいているんでしょうか。
CPU-ZなどでBIOSのRelease Dateを見ると3年前くらいですが、これを基にしているのですかね?
BIOS Release Dateは2018/09/27(アップデート前)
BIOSアップデートしたらRelease Dateも当然新しくなるわけですが、表示はどう変化するかやってみましょう。
BIOS Release Dateは2022/07/25(アップデート後)
アップデートして今年のファームウェアになりました。表示はどうなるでしょう?
経過時間が短くなりました。やはりBIOS Release Dateを見ているだけのようですね。
本日で10日間(厚労省方式だと発症日が0日目とカウントするので、実際には11日目)の自宅療養が終わりました。やったー。数日前から既に熱も喉の痛みもなく、自宅療養期間が明けるのを待つのみでしたけどね。
近所のスーパーに買い物に行ったところ、10分程度歩いたところで足がガクガクしてきました。10日も引きこもっていると足がおかしくなってしまうようです。お盆休みの残りはわずかですが、少しずつ歩いて復活を目指します。
熱は大したことはなかったです。ほぼ38℃前半くらいで収まり、カロナールも効果抜群でした。何が一番辛かったって、病院に行ったとき真夏の炎天下に1時間半放置されたことです。あの後だけかなり熱が上がりました。あんなことしたらCOVIDじゃなくても熱が上がりますが……。
喉の痛さはなかなかで、5日目くらいまでは水を飲むのがしんどいレベルでした。幸いにも喉の痛さを気合で乗り越えるくらい食欲&元気があったので、特に問題にはならなかったです。もし高熱とダブルパンチで来ていたら、衰弱していたかもしれません。
第七波の勢いは凄まじいです。Twitterを眺めていると、ワクチン打ちたくない系の人たちがCOVID-19になっていて(※)軽症ではあるものの40℃台の高熱が出ているようです。
私もA型インフルエンザに罹ると40℃〜41℃近い高熱が出ますが、かなり辛いです。常にボーっとなって何もできないし、体や関節も痛いです。とまあ、本来はそれくらい熱が出る病気なのに、たぶんワクチンのおかげで38℃台で済んだのは本当にありがたいです。
(※)なぜか彼or彼女らはCOVID-19で高熱が出たと認めるのが嫌?なのか「ワクチンを打った人から謎の高熱をうつされた」的なツイートをするのも特徴の1つです。この世は理解し難い人たちがたくさんいますね。
DDRメモリモジュールにはSPD (Serial Presence Detect) と呼ばれるEEPROMが搭載されており、メモリモジュールを動作させるためのタイミング設定情報が書き込まれています。PCのBIOSやUEFIは起動時にこの情報を読み出して、メモリモジュールが正常に動作する範囲内にタイミング設定します。
この情報はBIOSやUEFI専用のものではないですから、OS起動後WindowsやLinuxからも読み出すことができます。WindowsだとCPU-Zが有名どころだと思います。
Linuxの場合はdecode-dimmsツールが見やすいと思います。ツールの使い方は非常に簡単なのですが、起動するまでに躓く点があったので、メモがてら簡単に紹介します。
各PCの設定にもよりますが、decode-dimmsを起動したときにこんなメッセージが出る場合があります。
# decode-dimms No EEPROM found, the kernel probably does not support your hardware.
SPDがアプリから見えていないことが原因です。本当に未対応のハードウェアを使っている可能性もありますが、大抵はカーネルモジュールを追加でロードすれば使えるようになるはずです。例えば私のマシンはこんなHWとOSです。
下記のモジュールをロードする必要がありました。ee1004がない場合はeepromでも動作します(警告が出ますが)。
modprobe i2c-piix4 modprobe i2c-dev modprobe ee1004
おそらくi2c-piix4とi2c-devをロードした時点で、i2cdetectを実行するとI2Cデバイスが見えます。
# i2cdetect -l i2c-0 smbus SMBus PIIX4 adapter port 0 at 0b00 SMBus adapter i2c-1 smbus SMBus PIIX4 adapter port 2 at 0b00 SMBus adapter i2c-2 smbus SMBus PIIX4 adapter port 1 at 0b20 SMBus adapter
もし何も表示されない場合はi2c-piix4ドライバが対応していないチップセットを使っている可能性が高いです。Linuxがマザーボードのチップセットに対応しているかを確認する必要があります。
以上のモジュールを全てロードした後に改めてdecode-dimmsを実行すると下記のような出力になると思います。
# decode-dimms version 4.3 Memory Serial Presence Detect Decoder By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner, Jean Delvare, Trent Piepho and others Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0052 Guessing DIMM is in bank 3 Kernel driver used eeprom ---=== SPD EEPROM Information ===--- EEPROM CRC of bytes 0-125 OK (0x9BBF) # of bytes written to SDRAM EEPROM 384 Total number of bytes in EEPROM 512 Fundamental Memory type DDR4 SDRAM SPD Revision 1.1 Module Type UDIMM EEPROM CRC of bytes 128-253 OK (0xC6AB) ---=== Memory Characteristics ===--- Maximum module speed 3200 MT/s (PC4-25600) Size 32768 MB Banks x Rows x Columns x Bits 16 x 17 x 10 x 64 SDRAM Device Width 8 bits Ranks 2 Rank Mix Symmetrical Primary Bus Width 64 bits AA-RCD-RP-RAS (cycles) 22-22-22-52 Supported CAS Latencies 28T, 26T, 25T, 24T, 23T, 22T, 21T, 20T, 19T, 18T, 17T, 16T, 15T, 14T, 13T, 12T, 11T, 10T, 9T ---=== Timings at Standard Speeds ===--- AA-RCD-RP-RAS (cycles) as DDR4-3200 22-22-22-52 AA-RCD-RP-RAS (cycles) as DDR4-2933 21-21-21-47 AA-RCD-RP-RAS (cycles) as DDR4-2666 19-19-19-43 AA-RCD-RP-RAS (cycles) as DDR4-2400 17-17-17-39 AA-RCD-RP-RAS (cycles) as DDR4-2133 15-15-15-35 AA-RCD-RP-RAS (cycles) as DDR4-1866 13-13-13-30 AA-RCD-RP-RAS (cycles) as DDR4-1600 11-11-11-26 ...
例えばAA-RCD-RP-RASを見ると22-22-22-52となっています。JEDEC規格(DDR3ならJESD79-3F, DDR4ならJESD79-4Dですが有料)のtAA, tRCD, tRP, tRASのことでしょう。
このうちtAAがREADコマンドによる列アドレス指定からRead Dataが出力されるまでの時間のことで、いわゆるCAS Latencyです。私のPCの場合はDDR4-3200で動作させているので22クロックとのこと。普通ですね。
わざわざPCのケースを開けなくてもメモリモジュールの情報が取得できるのでなかなか便利です。
目次: マンガ紹介
久しぶりにお気に入りのマンガ紹介シリーズ。短めの完結作品を2つ。
目次: Linux
簡単なドキュメントやメモはMarkDownで書くことが多いですが、気合を入れた文章にはやや不向きで、図表を入れ始めた辺りから表現力不足が辛くなってきます。
MarkDownで強行突破しても良いですが、より表現力がある主にドキュメント向けのマークアップテキスト……となると、太古から続くTeX、最近だとAsciiDoc、reST(reStructured Text)、Sphinx などが覇権を争っているようです。
私は良し悪しを語るほどマークアップテキストに詳しくないですし、特にAsciidocでなければダメってこともなくて、好きなものを使えば良いと思いますが、今回は訳あってAsciidocを使います。
マークアップテキストの読み書きは普段お使いのテキストエディタを使えば良いです。しかしプレビューはテキストエディタではできないことが多く、ちょっと困ります。Asciidocのプレビュー環境として、
私はこの2つを使うことが多いです。下記に設定方法のメモを残しておきます。
ChromeウェブストアからAsciidoctorと検索するだけです。
Chrome AsciiDoctor.js Live Preview
あとはオプションの「オン」と「ファイルのURLへのアクセスを許可する」を有効にすると、
Chromeに *.adocのファイルをドラッグ&ドロップなどして開けば、プレビュー画面が出るはずです。内容を更新すると自動的にプレビューも更新されます。
これでテキストエディタで編集しつつ、Chromeからローカルディスク上のAsciidocがプレビューできます。簡単で良いですね。
VSCodeのExtensionsからasciidocと検索するだけです。
フォルダ内の *.adocファイルを開いて、Ctrl+Shift+Vを押すとプレビュー画面が出るはずです。2分割して右側に出せるので便利ですね。
これでVSCodeからローカルディスク上のAsciidocを編集しながらプレビューできます。これも簡単ですね。
目次: Linux
前回(2022年9月3日の日記参照)、Asciidocのプレビュー環境の設定方法を紹介(Chrome or VSCode)しました。今回はさらにAsciidocの便利機能とそのプレビューを使えるようにします。
ちなみにこのプレビュー機能はVSCode限定となります。Chromeでも使えると便利なんですけどね……。
Asciidocにはasciidoctor-diagram extensionがあり、他のツール向けテキストを *.adoc内に記述すると、ツールと連携して自動的に画像を生成し、自動的に文書内に埋め込む機能があります。
例えばUMLをテキストで記述するPlatUMLと連携する場合は、
= Hello
== World
This is hello world.
[plantuml]
----
@startuml
A -> B : ccc
@enduml
----
このように [plantuml] の後にPlantUML向けのテキストを書きます。プレビューや他形式に変換した場合、PlantUMLのテキストの代わりにPlantUMLが出力した画像が表示されていることがわかると思います。
各ツールを起動して画像に変換&リネームしてAsciidocに画像表示の記述を書く方法と比べれば、利便性は天と地の差でしょう。
AsciidoctorやextensionはRubyで実装されているため、Rubyをインストールする必要があります。
Rubyの公式サイト(サイトへのリンク)を見る限り、Windows向けインストールにはRubyInstallerツール(サイトへのリンク)がおススメのようです。
c:\app>ruby --version ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x64-mingw-ucrt]
RubyInstallerはPATHの設定も自動的に行います。インストール後、コマンドプロンプトを起動してrubyを起動できればインストール成功です。
Rubyをインストールしたら、asciidoctor-diagramをインストールします。同時にasciidoctorもインストールされます。
C:\app>gem install asciidoctor-diagram Fetching asciidoctor-diagram-plantuml-1.2022.5.gem Fetching asciidoctor-diagram-ditaamini-1.0.3.gem Fetching asciidoctor-diagram-2.2.3.gem Fetching asciidoctor-2.0.17.gem Successfully installed asciidoctor-diagram-plantuml-1.2022.5 Successfully installed asciidoctor-diagram-ditaamini-1.0.3 Successfully installed asciidoctor-2.0.17 Successfully installed asciidoctor-diagram-2.2.3 Parsing documentation for asciidoctor-diagram-plantuml-1.2022.5 Installing ri documentation for asciidoctor-diagram-plantuml-1.2022.5 Parsing documentation for asciidoctor-diagram-ditaamini-1.0.3 Installing ri documentation for asciidoctor-diagram-ditaamini-1.0.3 Parsing documentation for asciidoctor-2.0.17 Installing ri documentation for asciidoctor-2.0.17 Parsing documentation for asciidoctor-diagram-2.2.3 Installing ri documentation for asciidoctor-diagram-2.2.3 Done installing documentation for asciidoctor-diagram-plantuml, asciidoctor-diagram-ditaamini, asciidoctor, asciidoctor-diagram after 4 seconds 4 gems installed
コマンドプロンプトからGemで一発インストール可能で便利です。asciidoctorはRubyのbinディレクトリの配下にスクリプトが配置されるようです。
c:\app>asciidoctor --version Asciidoctor 2.0.17 [https://asciidoctor.org] Runtime Environment (ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x64-mingw-ucrt]) (lc:Windows-31J fs:UTF-8 in:UTF-8 ex:UTF-8)
インストール後、コマンドプロンプトからasciidoctorを起動できればインストール成功です。
今回はPlantUMLとの連携を試しますので、PlantUMLの環境も整えます。PlantUMLの実行にはJavaが必要です。
PlantUMLを実行するだけならJRE(Java Runtime Environment)で十分ですが、もし今後Java言語での開発を行う予定があれば、OpenJDKをインストールした方が良いです。私はJavaも使うので Oracle OpenJDKのダウンロードサイト からOpenJDKをダウンロードしました。現状の最新版は18.0.2.1でアーカイブのファイル名はopenjdk-18.0.2.1_windows-x64_bin.zipです。
ダウンロードしたzipファイルを展開すると、jdk-18.0.2.1のような名前のディレクトリがあるので適当な場所に移動(= インストールに相当)します。この際にディレクトリ名をリネームしても良いです。
JDKを適当な場所に配置したらPATHを設定します。例えばJDKをc:\app\jdkにインストールしたとすると、
こんな感じでPATHに追加します。
c:\app>java -version openjdk version "18.0.2.1" 2022-08-18 OpenJDK Runtime Environment (build 18.0.2.1+1-1) OpenJDK 64-Bit Server VM (build 18.0.2.1+1-1, mixed mode, sharing)
PATH追加後、コマンドプロンプトからjavaを起動できればインストール成功です。
VSCode側のプレビュー設定も変更する必要があります。
まずはAsciiDocの設定ページを開いてasciidoctor_jsによるプレビュー生成を無効化します。asciidoctor_jsはasciidoctor-diagramに対応していないからです。プレビュー画面がエラー表示になるかもしれませんが、気にしないでください。
次にasciidoctorがasciidoctor-diagramを使うように設定します。具体的には起動時のオプションに -r asciidoctor-diagramを追加します。
今までの設定がうまくいっているなら、プレビュー画面が更新されてPlantUMLのテキストの代わりにUMLの画像が表示されるはずです。
手順として書いてみると思ったより長いですが、asciidoctor-diagramはなかなか便利です。描画ツールでUMLを書いて、画像にしてAsciidocに埋め込んで……みたいなウザい作業とはお別れです。
画像を使わずテキストで記述するので、差分取得も容易です。画像ファイルで往々にして発生する、原稿がどっか行って更新できなくなった、などのトラブルも防いでくれることでしょう。
目次: C言語とlibc
コンピュータで負の値を表現するときは「2の補数を使います」と習った方は多いと思います。C言語もそうでしょうか?
答えは「いいえ。そして、はい。」です。
「いいえ。」の方は、整数型intやlongです。これらの型は2の補数とは限りません。sign and magnitudeや、1の補数表現が許されます。符号と値だけでなく、意味のないビット(パディングビット)の存在も許されています。C11 committee draftの6.2.6.2の定義を見ましょう。
6.2.6.2 Integer types 1 (unsigned系の話なので省略) 2 For signed integer types, the bits of the object representation shall be divided into three groups: value bits, padding bits, and the sign bit. There need not be any padding bits; signed char shall not have any padding bits. There shall be exactly one sign bit. Each bit that is a value bit shall have the same value as the same bit in the object representation of the corresponding unsigned type (if there are M value bits in the signed type and N in the unsigned type, then M <= N). If the sign bit is zero, it shall not affect the resulting value. If the sign bit is one, the value shall be modified in one of the following ways: - the corresponding value with sign bit 0 is negated (sign and magnitude); - the sign bit has the value -(2^M ) (two’s complement); - the sign bit has the value -(2^M - 1) (ones’ complement). Which of these applies is implementation-defined, as is whether the value with sign bit 1 and all value bits zero (for the first two), or with sign bit and all value bits 1 (for one's complement), is a trap representation or a normal value. In the case of sign and magnitude and ones’ complement, if this representation is a normal value it is called a negative zero.
この節は何を言っているのかすこぶるわかりにくいので、ざっくり和訳と具体例を載せます。わかりやすくなっていると嬉しいです。間違いがあったら教えていただけると嬉しいです。
6.2.6.2 Integer types 1省略 2符号付き整数型の場合、オブジェクト表現のビットは、値ビット、パディングビット、符号ビットの3つのグループに分けなければならない。 パディングビットは持っても持たなくても構わないが、符号付きchar型はパディングビットをもってはならない。符号ビットは1ビットで なければならない。値ビットの各ビットは、対応する符号なし型のオブジェクト表現と同じビットでなければならない。 (もし符号付き型にMビットの値ビットがあって、符号なし型にNビットの値ビットがあるなら、M <= Nである) 符号ビットが0なら結果の値には影響しない。符号ビットが1なら、値は次のいずれかの方法で修正されなければならない。 - 符号ビットが0の時の値がそのまま負の値(sign and magnitude) (例) 10000000 -> -0 ←負のゼロ、もしくはトラップ 10000001 -> -1 10000010 -> -2 ... 11111101 -> -125 11111110 -> -126 11111111 -> -127 - 符号ビットが -(2^M) の値(2の補数) (例) 10000000 -> -128 10000001 -> -127 10000010 -> -126 ... 11111101 -> -3 11111110 -> -2 11111111 -> -1 - 符号ビットが -(2^M - 1) の値(1の補数) (例) 10000000 -> -127 10000001 -> -126 10000010 -> -125 ... 11111101 -> -2 11111110 -> -1 11111111 -> -0 ←負のゼロ、もしくはトラップ このうちどれを適用するかは実装依存である。符号ビットが1で値ビットが全て0(sign and magnitudeと2の補数のとき)、 もしくは符号ビットと値ビットが全て1(1の補数のとき)を持つ値が、トラップ表現か正常な表現かについても同様に実装依存である。 sign and magnitudeと1の補数の場合は、この表現を正常な値とするなら、その値は「負のゼロ(negative zero)」と 呼ばれる。
負の値を表現する方法はいくつかあって、今はほぼ全てのアーキテクチャで2の補数が一般的です。しかし古いアーキテクチャではsign and magnitudeや1の補数を採用していたものがあったのかもしれませんね。
「はい。」の方は、C99で登場した新しい整数型(intN_tのような型)です。こちらは2の補数、パディングビットなしの割り切った仕様です。しかし一般的に良く使われているint8_t, int16_t, int32_tが必ず使えるとは限らないことに注意が必要です。
7.20.1.1 Exact-width integer types 1 The typedef name intN_t designates a signed integer type with width N, no padding bits, and a two's complement representation. Thus, int8_t denotes such a signed integer type with a width of exactly 8 bits. 2 The typedef name uintN_t designates an unsigned integer type with width N and no padding bits. Thus, uint24_t denotes such an unsigned integer type with a width of exactly 24 bits. 3 These types are optional. However, if an implementation provides integer types with widths of 8, 16, 32, or 64 bits, no padding bits, and (for the signed types) that have a two's complement representation, it shall define the corresponding typedef names. (ざっくり和訳) 1型名intN_tは、幅N、パディングビットなし、2の補数表現の符号付き整数型であることを示す。 したがってint8_tは、幅が正確に8ビットの符号付き整数型を示す。 2型名uintN_tは、幅N、パディングビットなし、2の補数表現の符号なし整数型であることを示す。 したがってuint24_tは、幅が正確に24ビットの符号付き整数型を示す。 3これらの型はオプションである。しかし実装が8, 16, 32, 64ビット、パディングビットなし、 2の補数表現(符号付きの場合)を持つ整数型を提供する場合は、対応するtypedef名を定義しなければならない。
現代のアーキテクチャに合わせてsign and magnitudeと1の補数をバッサリ切った雰囲気を感じます。仕様で気になるのは3ですね。optionalで実装依存とおっしゃっています。これは困ります……。
確実を期すならint_least32_t(規格上requiredなので)を使えば良いですが、最低でも32bitだと仕様として不便です。本当は何bitですか?を求める処理を書かねばならないでしょう。名前も長くて使いにくいですし。
目次: Windows
ノートPC用のCPUの動作周波数は多数設定できましたが、デスクトップ用のCPUはどんなもんでしょうか?電源オプション - プロセッサの電源管理 - 最大のプロセッサの状態、もしくはプロセッサパフォーマンスの向上モードを変更し、何段階の動作周波数が設定できるか試します。家のデスクトップPCのCPUはRyzen 7 2700、OSはWindows 10です。
ちなみに初期状態だとTurboBoostをON/OFFする設定が表示されません。設定変更するためにはレジストリを変更する必要があります(2020年7月9日の日記参照)。
結果はこんな感じ。動作周波数、フル稼働時のCPU温度(稼働1分くらい、リテールクーラー使用)、CPU-ZのScoreを示します。ScoreはCPU-Zのマルチスレッドベンチマークで何点くらい出るか?を意味する数字です。CPU性能の参考まで。
ノートPCのCore i5 8250Uは7段階ありましたが、デスクトップPC向けは4段階でした。微妙な数ですね、多くも少なくもないです。デスクトップPCはノートPCほど細かく節電する必要もないし、動作周波数の設定を多くする必要はないのでしょう。
今日は中秋の名月だそうです。手持ちのコンデジ(CASIO EX-ZR1300)のズームを最大にして月を撮影しました。
満月は非常に明るくて、ISO 80、シャッタースピード1/50のような普通なら夜の写真に使わない暗い設定でもばっちり映りました。月のクレーターを認識できるくらいの写真が撮れます。
三脚を使わなかった割にはブレなかったと思います。カメラの手ブレ補正スゴイな〜。プレビューではもっと鮮明に映ったように見えたものの、切り抜いてみるとややボンヤリしていますね……。ズームの倍率も光学12.5倍ですし、撮影者の腕的にもこんなもんですかね。
私が今使っているグラフィックスカードはMSI製で、オーバークロック用ツールMSI Afterburnerが使えます(MSI Afterburner公式サイトへのリンク)。他社製のグラフィクスカードでも類似のツール(ASUS GPU TweakIIなど)が公開されていると思います。
ツールの名前からしてコアクロックやメモリバスクロックを上げるのが主な目的だと思いますが、逆に下げる方向に使うこともできます。
GeForce RTX 3060の性能をフルに必要とするゲームばかりではありませんし、あえてクロックを下げて負荷軽減、省エネ&温度を低目に保てたら良いな〜くらいの期待です。残念ながらGPU温度を見ている限りでは、効き目はあまりなさそうですが……まあ気休めに。
< | 2022 | > | ||||
<< | < | 08 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | - | - | - |
合計:
本日: