サブPC新調

2015年から使っていたサブPCを新調しました。データ用のHDD/SSDビデオカード以外全部替えたのでほぼ丸ごと新調ということになります。

旧PC 新PC
CPU Core i5-6600 (4C4T/3.3GHz) Ryzen 5 8600G (6C12T/4.3GHz)
MB ASUS Z170-K ASRock B650 Pro RS
MEM 16GB (DDR4 2400MHz) 64GB (DDR5 4800MHz)
SSD Samsung SSD 850 EVO (500GB) Crucial P3 Plus (2TB)
VIDEO GeForce RTX 3060 Ti AERO ITX 8G OC LHR 変更なし
OS Windows 10 Pro Windows 11 Pro
CASE Cooler Master CENTURION 534 Cooler Master MasterBox CM694
PSU SUPER FLOWER GOLDEN KING (??W) Seasonic FOCUS GX-850 (850W)
CPU COOLER (リテールクーラー) (リテールクーラー)
CASE FAN 12cm(ケース付属)+12cm(??) 12cm x3 (CASE付属)
KB Owltech OWL-KB90PFLAT E元素 Z-88/学覇 (茶軸)

旧PCのパーツで必要以上に分解しないとわからない箇所は ?? になってますが…

キーボードは Amazon で、それ以外の新しいパーツは全部 Ark で買いました。

パーツの選定

サブPCはサブといいつつ Windows でゲーム、動画編集、画像処理等、重たい処理をやる用のPCなのでメインPCよりも高性能なパーツで組むようにしていたのですが、一昨年のメインPC新調で性能が逆転した状態でした。

CPU が10年近く前のものなので仕方がないのですが。ということで少なくともメインPCよりはパワフルなPCにするのが目標です。

諸般の事情で以前からなるべく Intel の CPU を避けているのですが*1 旧PCを組んだ頃は AMD の CPU が性能・消費電力共に散々な状況だったので仕方なく Core i5 を選択しました。だが今は違う!(ギュッ) ということで、Ryzen です。

肝心な時にグラボの故障で*2 PCが一晩使えなくなってベランダでの天体撮影に支障が出るのは避けたいので内蔵 GPU がある APU を選択しました。最新の APU は 8000G シリーズ。本当は ECC メモリを使いたかったのですが、G シリーズは Ryzen Pro でないと ECC 非対応です。そこは DDR5 の On Die ECC を信じて妥協しました。*3

マザーボードはゲームはやるもののオーバークロックとかやるつもりはなかったので ASRock でゲーミング寄りでないものを選んだつもりでしたが、デフォルトで LED が七色に光っていました… まあ、UEFI設定(ツール/RGB LED: LED MODE)で速攻切りましたが。

SSD はゲームのインストール先にもするので大きめの 2TB のもの。中国製の激安 SSD は怖いので無難な範囲で安くて PCIe 4.0 の NVMe でそこそこ速いものということで選びました。

今回はケースも交換することにしました。ケース自体は先々代?から使っているもので2006年発売のモデル。買った時の日記が残ってますね…

2007年の BIGLAN Socket 5 (秋葉原で開催された大規模LANパーティー)に持っていったのもこのケースですね。

さすがに20年近く前のケースだと USB3 とか USB-C の口がないので交換です。

しかしケースの選定は悩みました。旧PCでは5インチベイを3段使って HDD を4台接続可能なリムーバブルラック(iStarUSA BPN-DE340SS)を使ってケース本体と合わせて5台の HDD を載せていたのですが、最近のケースは5インチベイが3段もあるケースはほとんどありません。Blue-ray をPCで見るので光学ドライブの分も必要ですし…

結局リムーバブルベイは諦めて3.5インチベイが多いケースを選びました。CM694 は3.5インチドライブが6台まで載ります。8台載るバージョンもあるのですが、背が高くてデスクの下が窮屈すぎることになりそうなのでやめました。

電源は評判のいい Seasonic で。ゲームはやるもののハイエンドビデオカードを使う予定はないので、もう少し容量小さくてもよさそうでしたが、効率の面を考えて850Wのものにしました。

キーボードは今まで使っていたものがヘタレてきて、反応しないキーはないものの、ASDFととかゲームで使うキーが激しく摩耗して、薄くなりすぎて穴があいたキーまで出てきたので新調することにしました。

デスクスペースの関係でいわゆる65%キーボード以下の大きさがマスト。しかし Windows 用のソフトだとファンクションキーがないと不便なものがあるので Fn キーと同時押しでない物理ファンクションキーは欲しい、となると選択肢が限られてきます。結局 Amazon でみつけたe元素(「いーよーそ」と読むらしい)の格安ゲーミングキーボードを選びました。

全然知らなかった中国メーカーの製品でかなり博打なのですが、評判は可もなく不可もなくという感じですし、メカニカルキーボードでキースイッチも交換できるようなので。青軸/茶軸/赤軸から選べましたが、青軸はむっちゃうるさいとの評判。無難に赤軸、と思いましたが、ゲームやる時にクリック感があった方がアガりそうという謎の理由で茶軸にしました。キー配列がUS配列オンリーなのは元々US配列をずっと使ってきたので無問題。

組み立て

マザーボードへの部品の組み付けは思ったより楽でした。AM5 は初めてなのですが、リテールクーラーなのでマザーに最初から組み付けてあるバックプレートがそのまま使えました。ネジ留め式だしクーラーにはグリスが塗布済みだしでほぼポン付け状態。

SSD の取り付けも簡単でしたが、旧PCからの載せ替えのデータ用 SSD (Samsung 980 1TB)をどこに挿すかは悩みました。PCIe Gen 3.0 x4 の SSD ですが、残り二つの口のうち片方は Gen 4 x4、もう片方は Gen3 x2。Gen 4 x4 に挿すのはもったいないのですが、Gen3 x2 だと帯域が足りません。*4 結局 Gen 4 x4 に挿しました。

新しいケースは想像以上にデカくて、前のケースより一回り大きい感じ。水冷ラジエーター対応なので背が高めのようです。内部が広くて比較的組み立てやすかったですが、板金のペラペラ感は気になりました。振動でビリビリ音鳴るんじゃないかなと不安でしたが意外と大丈夫でした。

ファンの音漏れは… これはペラペラ以前に天板と正面がメッシュなのでどうにもならないのですが思ったよりは静か。でもちょうどデスク向かって座るとフィ〜ンインイン… という唸り音が。近づいても離れても聞こえなくなるのですが、普通に座る場所が一番うるさいというのが残念… たぶん複数のファンのノイズが干渉して強まる場所がそこなのだと思います。

マザーボードへの配線は4ピンの ATX12V2 コネクタだけは電源側に対応するケーブルが入ってなくて悩みましたが、マザーボードのマニュアルを見ると、これはオーバークロックするなら推奨するが通常は必要ないとのことでここは挿さずに済ませました。


起動、UEFI設定

HDD の積替えは後回しにして先に起動確認と Windows のインストール。ここでトラブルが出ると配線を全部外してマザーボードを取り出して、という作業になるので先にやります。

電源投入後、ランプやファンの回転に異常はないものの、数分起動画面が出てこなくて焦りましたが、初回起動時(もしくはCMOSクリア後の最初の起動時)はメモリ搭載量の応じて分単位で時間がかかるとマザーボードのマニュアルに書いてありました。

というかビデオカードから出力が出ない?と思ってこの時に画面出力をマザーボード側に繋ぎ替えました。たぶんこれは必要なかったと思います…

SSD は新品 & データ用で OS がないので起動後UEFI画面が出てきました。真っ先に H/Wモニター でCPU温度とファンの回転数を確認します。

CPUクーラーの取り付け不良があると、この段階で60℃とか70℃とかになりますが、30℃台ということで一安心。CPUファンとケースのリアファンは認識されています。

フロントファンが認識されていませんでしたが、実物を確認すると回転はしていました。これは2台のファンが一つのコネクタに並列で繋がっているようで、おそらく回転数のモニタリング用の線を繋いでないのだと思います。

PWM 対応分岐ケーブルだとモニタリングは片方のファンの線だけ繋いで、回転数制御は制御用の線を両方に繋ぐようですが、これはそうなってないみたいです。まあ特にうるさくはないので当分このまま使うことにしました。

次に省電力設定。メインPCの時もやりましたが、CPUの消費電力制限のターゲットを定格の65Wから45Wに設定しました。

35W に、と思いましたが不安だったので。後で調べたら CPU のスペック上は 35W には対応していないようで、35W は ASRock の UEFI が提供する裏技っぽいですね。


Windows 11 のインストール

ここで一緒に購入していた OEM 版の Windows 11 Pro をインストール。新品の方の SSD を選択してそのままクリーンインストールパーティションとか作成しませんでしたが勝手にやってくれるようです。

インストールはつつがなく進み、更新のインストールに入ったのですが、ここでゲームができるようになっていました。

せっかくなので新しいキーボードの感触の確認も兼ねてプレイしました。プレイヤー・キャラクターは猫を選択。

無事インストールが完了し、GeForce のドライバもインストールして2画面出力も確認できました。ただ、このマザーボードには PS/2 ポートがなくて、PS/2 ポートから電源を取るタイプの古いモニター切り替え機が動きませんでした。以前これを使うためにわざわざ DisplayPort to DVI-D の変換ケーブルとか買ったんですが… まあ、元々色々不便はあったのでこれを機に HDMI 切り替え機を買って移行することにしました。

ベンチマーク

パフォーマンスチェックと負荷テストのために 3D Mark Demo版の Time SpyCINEBENCH 2024 を回してみました。3D Mark は旧PCにビデオカードを足した時に取った記録があるので比較できます。

Graphics CPU
旧サブPC 11365 3502
新サブPC 11471 8713

Graphics スコアはビデオカードが同じなのでほとんど変わりませんが、CPU スコアは倍以上になりました。正直なところ、10年近く経っているので3倍くらいにはなって欲しかったですが…

CINEBENCH 2024 は CPU Multi Core のスコアが 670 でした。よそで見たスコアより少し低いのが気になりますが、それより CPU 温度にびっくり。Package 温度の MAX が 91.6℃ に。

こんな温度は見たことがないのでびっくりしました。CPU クーラーの取り付けに失敗したか?と思ってネジの締め増しとかもしていましたが、MAX 温度は変わらず。

調べてみると今どきの CPU は電力設定の範囲内で自動オーバークロックでサーマルスロットリングが起きる限界までクロックを上げるようになっているそうで、これで正常みたいです。

ゲーム(CS2)もプレイしてみましたが、やはり MAX 90℃ ぐらいまで行くものの、ゲームの動作に支障はありませんでした。ACE COMBAT 7 はデフォルト設定(垂直同期 OFF、フレームレート無制限)だと温度上限の 95℃ まで行きましたが、やはり動作に支障なし。

こういうものか、とは思ったものの、45W 設定(実際は MAX 60W くらいまで行きました)でこれなのは納得いきませんし、夏場にはパフォーマンスに影響が出てしまうことになりかねません。

8600G はリテールファンが一番グレードの低いものであること、*5 殻割りレポートによるとヒートスプレッダとコアがソルダリングされておらずサーマルペーストが使われているとのことで、熱が溜まりやすいようです。

さすがに夏までには CPU クーラーを替えようと思いますが、グレードの低い CPU を選んだのにグレードの高いクーラーを買うのもちょっと納得いかない…

とりあえず UEFI の「OCツール: Performance Preset」で「PBO and Tjmax=85℃」を設定して85℃でサーマルスロットリングがかかるようにしておきました。この設定は電圧等も調整するそうで、設定してもパフォーマンスはほとんど変わりませんでした。3D Mark Time Spy の CPU スコアは 8467 で2%弱下がりましたが、CINEBENCH 2024 は 677 とむしろ上がりました。

HDD 載せ替え・データ移行

HDD の載せ替えは、ケースの3.5インチベイのコネクタ側に余裕がなく、*6 コネクタを挿すとサイドパネルがぱっつんぱっつんになりましたが、なんとか無事載せ替えられました。

データ移行は iTunes の楽曲と Kindle for PC の電子書籍Lightroom Classic の写真のライブラリが対象ですが、結論から言うと Kindle for PC の電子書籍は移行できませんでした。

iTunes の楽曲ライブラリは元々別ドライブに保存していましたが、メタデータの類は常にCドライブの方に入っています。以下の手順で無事移行できました。

  • 旧PC でユーザーの ミュージック\iTunes フォルダをバックアップ
  • 楽曲ライブラリのフォルダのあるドライブのドライブレターを旧PCと同じにする
  • iTunes をインストールして起動
  • Apple ID でログイン
  • iTunes のライブラリのパス設定を変更
  • iTunes を終了してユーザーの ミュージック\iTunes フォルダをバックアップで上書き

これで iTunes を起動すると旧ライブラリが表示されました。手動で設定したアルバムジャケットも正常に表示されました。購入楽曲の再生、リッピングした楽曲の再生、共に OK。

Lightroom Classic のデータは写真とカタログを別のドライブにしていたのですが、*7 旧PCとドライブレターを同じにしておいてカタログを開けば今まで通りでした。

Kindle for PC のライブラリはライブラリフォルダを旧PCから載せ替えたドライブのフォルダに設定してもダウンロードしたはずの本がダウンロードしていない状態で表示されました。ダウンロード時に本ごとのフォルダが作成されない時代にダウンロードした古い本は何故かダウンロード済み状態で表示されましたが、その本を開こうとするとエラーになって「再ダウンロードしてください」と言われて読めませんでした。DRM の関係で移行できないようですね…

キーボードについて

e元素のキーボードですが、今のところ悪くはないです。物理的な仕上げの雑さとかケーブルがダサい(塩ビ管みたいな色と質感)とか、カラーのゴールドが思ったより派手だなとかありますが、ゲームで使っても支障はありません。

キースイッチの音は思っていたよりデカかったですが許容範囲。反応の悪いキーもなく、普通に使えてます。キータッチは昔の PC-98 のキーボードみたいなカチャカチャ感で個人的には嫌いじゃないです。耐久性はまだわかりませんが交換用のキースイッチが数個、専用工具と一緒に付いてきたので当分は大丈夫だと思います。

あと、デフォルトでフルカラーLEDで虹色に光るんですが、これは接続先PCのOSと関係なく Fn キー + ↑/↓キーで設定変更できます。速攻 OFF にしたんですが、ふと思い立って電気を消して ON にしてみたら、これが結構悪くないような… なんというか、癒やされるというか…

動画は iPhone 15 Pro で撮ったらなんか HDR がかかっていたようで、アップロードするとかなり暗くなってしまいました。実際にはもっと明るいです。眩しいってほどではないですが。

ということで…

その後色々インストールしたりして、新PCもほぼ元通りに使えるようになったのですが、USB にカメラを繋いで天体撮影のテストをしたところ色々トラブルが出ました。なんとか解決はしましたが大変でした。このあたりは後日天文ブログの方に書きたいと思います。

*1:要は Intelイスラエルで CPU の開発・製造をやって税金納めてるのが気に入らない。

*2:冷却ファンのトラブルで以前実際にありました。

*3:Ryzen Pro は基本的に OEM メーカー向けの製品でパーツショップでの流通は基本的にありません。Pro 4000G シリーズは一部ショップでマザーボードとのセット販売をやっていましたが、以後はそういうのはやらなくなったようで、Pro 8000G シリーズのリリースを待っても無駄になりそうなので諦めました…

*4:980 は 3500MB/s なのに対して Gen3 x2 は1.97GB/s

*5:Wraith STEALTH で上位の PRISM と違い、ヘッドに銅芯が入っていない。

*6:専用のマウンタに載せて挿す方式で HDD を深く挿すことで調整することができません。

*7:カタログだけSSDに置いていました。

インターネットで実名でレスバしてたらISPの社長から脅迫された話。そして17年後…

インターネット老人会 Advent Calendar 2023」3日目の記事です。

インターネット老人会」ということで、今日は日本の商用インターネット接続サービスが始まった前後の頃の話をしたいと思います。

今日は fj の話をしようと思うがその前に…

インターネットと言えば今は Web *1 のことですが、Web が普及する以前、1990年代初頭から世界規模のネットコミュニティが既にあったことをご存知でしょうか。その名を NetNews といいます。

NetNews は一言で言うなら公開メーリングリストのようなものです。あるいは分散型掲示板とも言えるでしょうか。メッセージの形式は当時既に普及していた E-Mail とほとんど同じでしたし、メッセージの配送の仕組みも E-Mail とよく似ていました。参加者はISPや所属組織にあるサーバーにメッセージを送信すると、世界中のサーバーにそれが配送されるという仕組みです。

NetNews は世界規模の巨大なコミュニティですが、ジャンルごとに階層化されたグループ分けがされており(これをニュースグループと言います)、日本語でやりとりするニュースグループは fj (From Japan の略)という階層の下にまとめられていました。また、これらの階層とは別に、組織内で閉じた(組織の外部に配送されない)ニュースグループを運用している組織もありました。

Web が普及し始めた当時は NetNews を投稿したり閲覧したりするための機能が Netscape Messenger や Outlook Express のようなメジャーなメールソフトに備わっていたため、NetNews は E-Mail や Web よりは一段マイナーなものの、代表的なネットの機能の一つという認識は一般的なものでした。

インターネットで必要なことはすべて NetNews で学んだ

僕が本格的に NetNews を始めたのは大阪大学で大学院生をやっていた1995年頃でしたが、それ以前に学内で閉じたニュースグループを利用していました。1993年頃からだと思います。当時は学内の情報処理教育センター(情教)というところで利用者のサポートやマシンのメンテナンスを手伝うボランティアをやっていたのですが、学内ニュースグループの常連はそのボランティアの仲間たちでした。

学内ニュースグループといえども荒らしみたいな人や非常識な発言をする人はどこにでもいるもので、自治的な活動をしているボランティアの人たちは当然それに批判的なレス*2 を返すのですが、皆が思い思いにレスを返したら袋叩きみたいになってしまった、ということがありました。それはちょっとどうか、ということになって問題的な投稿に対するレスは事前にボランティアの間で話し合って誰かが代表してレスを付ける、みたいな話に落ち着きました。

最近、というかかなり前から言われていることですが、ネットでの誹謗中傷は、一つ一つの発言自体はそれほどではなくても、それが大勢から一斉に発せられると、それを浴びせられる側には致命傷になりかねない、その構造が問題だ、という話がありましたが、同様のことをこの頃から身をもって知ることになったのです。

ただ、それに対策できたのは組織化された人たちが場を仕切っていたからこそで、今のネットのように自由に発言できるバラバラの個人がマジョリティになっているとこうはいきません。というか、学内ニュースグループから一歩外に出て fj のニュースグループに参加するようになってからそのことを思い知りました。

fj というバトルフィールド

fj ではコンピュータ系の話題を扱う fj.sys.*, f.os.* や社会や時事問題に関する話題を扱う fj.soc.* (特にジェンダー系の話題を扱う fj.soc.men-women)、宗教関係の fj.life.religion に出入りしていました。

fj.soc.men-women に出入りしていたのは、当時宮台真司の著書を読んでいた関係で売買春に関する話題に首を突っ込んだのがきっかけだったと思います。fj.life.religion については、僕自身は信仰する宗教等はなかったのですが、当時は地下鉄サリン事件から間もない頃で連日テレビにオウム真理教の話題が出てくる状況で、宗教全般についても興味がわいてきたからです。

今思うとよりによって地雷原みたいなところに… とは思うのですが、当時は今以上に「議論」が大好きだったのです。

fj は原則実名制です。到達性のあるメールアドレスを投稿に設定するルールもありました。特に商用インターネットが普及し始める1996年より前はネットワークは企業や大学がボランティア的に運用しているものだったので、匿名でタダ乗りするのは許されないという雰囲気がありました。投稿で実名と所属を名乗る習慣も根付いており、僕も「なんば@大阪大学」のような名乗りをしていました。*3

よくインターネット老人会メンバーが「古のインターネットではいい歳した大人たちが実名で殴り合ってたのじゃ…」みたいな思い出話をしますが、あれは紛れもない事実です。実名なら礼儀正しくやりとりするだろうと思ったら大間違いです。

もちろん大半は穏やかなやりとりなのですが、一度荒れると歯止めがありません。言葉の荒い人も少なからずいて、それが原因でヒートアップすることもありました。言葉遣いそのものについても喧々諤々の議論がありましたが、常連は荒い言葉に比較的寛容というか、もうそれが fj の文化みたいになっていたところはあります。特に有名な void 氏(日下部陽一氏)、lala 氏(松岡宏氏)についてはこんな投稿も…


> あなたは void さんの「罵倒」記事を見たことはないのですか?

くさかべさんの発言で「罵倒」に相当するようなものを
見た記憶がないのですが、具体的な例を示していただけ
ませんか?

私が見たことがあるのは

ばかじゃないの?
ばかですね
ばか...
あたまわるそうですね
ATOKユーザーだから?
だまってればいいのに
さっさとひっこんだら?

のようなものがほとんどです。いずれも声としてはおと
なしいほうで、どちらかといえば独り言とかつぶやきに
近く、感情的でもないし激昂してもいません。というわ
けで、私から見ればくさかべさんの発言は「罵倒」の要
件を満たしていないのですが...。

Re: void 型罵倒と lala 型罵倒 - fj.usage


あと、松岡さんの発言でも「罵倒」に相当するようなもの
を見た記憶がないのですが、具体的な例を示していただけ
ませんか?

私が見たことがあるのは

あほう!!!
馬鹿,黙ってろ。
自分で勉強しろよ。
大馬鹿野郎現わる!
いらん口を挟むな!!
ガキの遊びのつもりか。
ちゃんと趣旨を理解しろ。
少しは脳みそを使えよな。
DATEを直せよ,馬鹿。
脊髄反射でfollowするなよ。
fj.news.policy を読め!!!
くず記事投稿するんじゃない。
どうせ説明もできないんだろ。
無知がでしゃばって馬鹿を晒す。
こんなやつを野放しにするなよ。
確信犯の大馬鹿野郎がまた現れた。
出鱈目を書いているんじゃねぇよ。
辞書で「部隊」くらい調べろよな。
「考える」ことに資格がいるのかよ。
こんな馬鹿の相手をやってられるか。
何を考えているんだか。この馬鹿は。
放送業務やるなら、法律くらい守れ!
さっさと具体的なurlを提示しろよな。
また訳の分からん馬鹿が絡まってきた。
どうしてこういう馬鹿を接続するんだ。
馬鹿じゃないの。ああ、馬鹿だったっけ。
本当にこいつは条文さえ読んでいないな。
まったく脳みその使い方も知らないのか。
くず記事はどこまでいっもくず記事だな。
声の届かぬところで叫ぶ、馬鹿の遠吠えか。
まったく,こんな馬鹿を野放しにするなよ。
何を馬鹿な文句を吐いているんだろうねぇ。
やれやれ。もう少し論理展開を勉強したら。
第30条の条文をちゃんと読め!!!!!!
はぁ???何を読んでいたんだ。こいつらは。
自粛の意味分かって文章書いているのかねぇ。
という誹謀はしない程度の礼儀はわきまえろ。
やれやれ、何が言いたいんだろ、この馬鹿は。
そんなことも理解できない頭で、投稿するな。
情報を伝えたいのであれば,そのように書け。
根拠もなく名前を挙げるのはいい加減にしろ。
どうしてこういう馬鹿が繰り返し現れるんだ。
まったく、誰が説明しても無意味じゃないのか。
何が「構いません」なんだか。本当に社会人か?
自分のスタイルも持てないのかねぇ。この馬鹿は。
どうしてこうも同じ事を繰り返す馬鹿が多いのだ。
揚げ足をとるつもりなら、もっと記事を読めよな。
ここは、fj.jokesではない。失せろ!!!
あまりに初歩的な事さえしない人間は無視するぞ!
いまだにこんな馬鹿なこと言っているのがいるわけ。
理解したくもないのなら、もうfollowしないでくれ。
同一account を複数の人が利用して投稿するな!!!
どうしてそこまで馬鹿をさらけ出したいの?????
まともな文章も書けないなら、出てくるなよ。馬鹿が。
さすが。よくもこんな文章投稿する気になれるもんだ。
お願いですから、大脳皮質で考えて議論してください。
やれやれ。netnews と私生活がなんで関係するんだか。
本当に馬鹿だってこと世界中にさらけ出すんだものなぁ。
いまだにnetnews を子供相談室と思って使っているのか。
netnews fj の利用の仕方について勉強してから、出直せ。
やれやれ。人の記事を引用するなら、出所を明示しろよな。
やれやれ,また馬鹿どもが同じネタを繰り返していやがる。
条文があっても読まない馬鹿には何を提示しても無意味だ。
疑問符で終る文章を提示する前に、その根拠を示してみろ!
解説書の一冊でも読んで理解できるまで、出てくるな!!!
もうすこしnetnews の利用方法を勉強してから利用を始めろ。
なんで、こんな人間の研究費が税金で賄わればならないんだ!
著作権法第1条さえも、まともに読まない人は失せろ!!!!
やれやれ、「区別」と「差別」の違いも理解できないのかねぇ。
駄文投稿している暇があったら、さっさと謝罪記事を投稿しろ!
やれやれ。人の記事も読まないで、記事を投稿するなよな (-_-#)
こいつも、まともなnewsgroup を設定するだけの頭がないらしい。
やり方を非難するなら、自分が適切であると思う方法を提示しろ。
ほんとにこの馬鹿はnewsgroup の選び方も理解できないようだな。
無意味にsigantureは2回も付けるし,馬鹿を放し飼いにするなよ。
何をか書いているかと思えば、寝言だけなんだから。馬鹿馬鹿しい。
おいおい、最近はこの程度のことさえ理解しないで投稿するのかぁ。
こういう馬鹿は相手にすればするほど、つけ上がってくるだけだぞ。
やれやれ、同レベルの人間が互いにfollow して何が生まれるんだろ。
お前等なぁ,少しは頭を使えよ。だんだん馬鹿馬鹿しくなってきたぞ。
fj の利用に関して、幾つかの文献をまずは読んで勉強してから出直せ!
やれやれ。分かりもしないで、文句だけ投稿していたのか。この馬鹿は。
パソコン通信とInterNet の違いも理解しないで利用しているのだろうか。
どうせ、また「違法かどうかの判断」と同様、思い付きで書いた文章だろ。
そんなあたり前のことを確認するたけだけのために、followしているのか。
やれやれ,またこの馬鹿か。人のケツばかり追っかけて何が楽しいのやら。

のようなものがほとんどです。いずれも声としてはおと
なしいほうで、どちらかといえば独り言とかつぶやきに
近く、感情的でもないし激昂してもいません。というわ
けで、私から見ればまつおかさんの発言も「罵倒」の要
件を満たしていないのですが...。

Re: void 型罵倒と lala 型罵倒 - fj.jokes

後者は fj.jokes への投稿ですから「罵倒」の容認ではなく皮肉なのでしょうが*4 前者は容認的な文脈での発言でした。

僕自身は lala 氏の投稿を読む機会はあまりなかったのですが、void 氏の投稿は度々目にしていたので、はっきり言って void 氏のことは嫌いでした。fj ではあんなだけど会うといい人だよ、なんて話を聞いてなおさら嫌いになりました。こんな投稿をしたこともあります。

だいぶ前の話ですが fj.soc.men-women で、

<571sog$hui@orchid.mirai.or.jp> にて okumura さん:
> 一刀両断!!
> 
>   ヘ | _ヘ   
> ミ・ | ・ ミ 
>  (   | ° )~

これにはいたく感動いたしまして、私もいろいろ考えてみました。


 ヘ ヘ  
  ____   
ミ・・ ミ
 (  ° )~  みみそぎ



    ヘ_ヘ       ~ミ
   (・・ )   ~ミ 
   (  ° )~         ひげ切り



★        ヘ ★
 ★ヘ _    ★
ミ・★★ ★    ミ 
 ★★★★  ・  
  ★★★★      )~
( ★  °  ★
 ★         ★          爆破!
★


            
      ☆  ◆
  ヘ_ヘ ◆\
ミ゜゜ミ    \
 (( ° ))~        背後からハンマーで!

void 氏を 一刀両断 ! - fj.jokes

まあ、今思えば僕もたいがいアレでしたね…

fj で議論した相手から脅迫される

そんな殺伐とした fj で、僕自身も事件に巻き込まれます。相手を仮にB氏とします(敢えて名を伏せる理由は後述します)。B氏とは確か fj.life.religion でやり取りしたのが最初だと思います。

B氏は今風に言うとマウンティングしたがりというか、普段は下手に出るような態度をとるのですが、fj でありがちな荒っぽい歯に衣着せぬ物言いに対しては世間の常識を振りかざして個人攻撃するようなタイプで、それでいて大量の投稿をするものですから fj のあちこちで先住ユーザーと軋轢を生み出し、少なからぬ人たちから「荒らし」として認識されるようになりました。

fj というか、当時のネットの空気そのものがそうだったのですが、ネットは一般社会のしがらみから開放された機会平等で実力主義の空間という考え方が強く、社会的地位による上下関係を押し付けようとしたり、目上の人を敬えとか礼儀正しい言葉を使えとか、そういう態度が毛嫌いされる風潮がありました。

B氏の大量の投稿の多くは今で言えばクソリプなんですが、現代のSNSとは違って fj はリプライし合うのが当たり前の場ですから、不躾なリプライ自体は問題になりませんでした。問題は礼儀ではなく発言の内容で、その議論の場を荒らすような性質です。

僕はそんなB氏と最初は普通に(?)議論していたのですが、言葉の端々に感じる上から感とか、それでいて妙に持ち上げたり、なれなれしい態度を取ってくる上、言葉遣いが独特で議論していても何言ってるのかよくわからず、やりとりしても埒が明かないことが多々あり、だんだんB氏にキツく当たるようになりました。

僕だけでなく多くの人はそんな感じでした。今見ると、僕も含め、もう少しこう何というか手心というか… という感じなのですが、もっとキツい人がそこらじゅうにいたので…

そんな状況で、いつからか、B氏は自分にキツく当たるユーザーにメールで抗議するようになりました。脅迫とも言えるような内容もありました。到達性のあるメールアドレスを From に書くのが fj のルールなのでそういうことができてしまいます。抗議メールが届いたユーザーは当然 fj でそのこと批判するので、それがまた fj の人たちのB氏に対する反感を呼び、という悪循環に陥りました。

B氏から抗議(あるいは脅迫)メールを送りつけられた一部の人たちは、同報メールで「被害者の会」的な情報交換を行い対策を検討することになりました。その過程でB氏がとあるインターネットプロバイダ(ISP)の社長であることが判明しました。当時日本の各地にISPが雨後の筍のように乱立していて、B氏の会社はそんな ISP の一つのでした。

これには頭を抱えました。普通なら目に余る荒らしが出たらその人の接続先プロバイダに苦情を入れて止めてもらうのですが(大抵はプロバイダの規約違反になるはずなので)、相手がプロバイダの社長ではそうはいきません。

そこでB氏の会社の上位プロバイダに苦情を入れてみてはどうかという案が「被害者の会」で出ました。B氏の会社のようなエンドユーザーと契約してインターネット接続サービスを提供する会社は、ユーザーの回線を上流の回線に繋げるために一階層上のプロバイダと契約します。上位プロバイダにも荒らし(net abuse)禁止の規約はあるので最悪契約解除になるのでは、という読みです。

もっとも上位プロバイダからすれば下位プロバイダは月何十万円も払うお客さんですから、その利益を失ってまで厳しい対応をとるだろうか?という懐疑の声もありました。そこで僕はB氏に以下のようなメールを送りました。

  • あなたがXXX社の社長であることを確認した
  • XXX社の上位プロバイダのYYY社に苦情を入れようと思う
  • あなたの行為はYYY社の規約に違反している可能性がある
  • あなたが態度を改めるなら苦情は入れないかもしれない
  • これが最終通告である

これにはB氏もビビッたようで、反省し態度を改める旨の返信が届きました。もっとも、本当に反省してるのか?というのが極めて疑問な内容でもあり… とはいえ、その日からB氏の fj への投稿は止まりました。

これで一見落着、と思いきや、2週間ほどで投稿を再開。どうやら上位プロバイダに苦情を入れられても大丈夫と踏んだようです。あるいは自分は悪くないという申し開きを事実関係を捻じ曲げつつ投稿しておけば誤魔化せると思ったのかもしれません。

ここで上位プロバイダへの苦情申立というカードを切るべきか否かが悩みどころでしたが、そうこうしているうちに僕のところにも脅迫メールが届きました。内容は、刑事告発民事訴訟を弁護士と検討している、というもの。僕の他にも被害者の会で同様のメールが届いた人がいました。

刑事はもちろん民事でも問題になるようなことはしておらず、事実を把握すれば弁護士も相手にしないであろうとは思いましたが、ネットが普及してからまもない当時でしたので、果たしてネット上の事実関係を的確に把握できる弁護士がいるだろうか?という疑問もあり…

事実を捻じ曲げて自分が被害者で被害者の会の人たちが加害者だと主張するB氏の投稿は放置できなかったので、僕も fj に経緯をまとめた長文を投稿するという対応をしましたが、上位プロバイダへの苦情申立は保留にしていました。こちらとしても申立が功を奏する可能性は五分五分以下だと思っていて、これが失敗するともう打つ手がなかったからです。

なのですが、特に激しく個人攻撃を受けていた被害者の一人が意を決して上位プロバイダへの苦情申立を実行し、その内容を fj に公開してしまいました。公開された苦情申立文には WHOIS で取得したB氏の会社の情報がそのまま掲載されていました。

前後して WHOIS の情報の一部は既に fj に流れていて、B氏はそれに抗議していたのですが、その時はまだ会社名とB氏の役職(社長)までしか開示されていませんでした。しかし上の苦情申立文には会社の住所までがフルで掲載されていたのです。

さすがにこれでB氏はおとなしくなった、、、というのが僕の記憶だったのですが、今確認してみると、全然そんなことなかったんですね…

どうやら上位プロバイダからは決定的な対応はなく、その後もB氏は fj で暴れ続けていたのでした。この頃僕は就職して仕事もプライベートも目まぐるしく変化していた時期だったので NetNews は全然見ていなくて気付いていませんでした。

B氏の投稿はその後1999年頃まで続いていましたが、何があったのか2000年を境に投稿はパッタリと途絶え、fj では時折「伝説の荒らし」的な位置付けでその名が言及される以外には彼の名は見られなくなりました。

そして17年後…

fj での騒動から17年後、思わぬところでB氏の名を見ることになります。ソフトウェアの違法販売の容疑で逮捕された容疑者の名前がB氏と完全一致したのです。まさか?同姓同名?と思ったのですが、報道された容疑者の住所は市町村までB氏の会社の住所と一致しますし、年齢もB氏のプロフィールと矛盾しません。

そもそも何故そんなちっぽけな事件の報道を目にしたかというと、このB氏が著名なネトウヨC氏と同一人物であるとの情報がSNSに流れていたからです。C氏は Twitter やブログで在日コリアンに対する過激なヘイトスピーチを繰り返す一方で、歴史修正主義的な情報発信も行い、右派の著名人や産経新聞記者、はては自民党の現役国会議員にRTされたりリプをもらったりしていました。

批判する在日コリアンや反差別団体、左派の著名人に対する攻撃も激しく「殺す」「虐殺する」等の暴言も飛び出し、それだけでも脅迫罪に問われるレベルではないかと思うのですが、匿名の影に隠れてやりたい放題でした。

そんな状況にたまりかねたジャーナリストのD氏がC氏の実名と住所を突き止めて突撃取材を敢行したのが上の逮捕報道の半年ほど前。散々D氏を煽っていたC氏でしたが、結局自宅に閉じこもり取材に応じませんでした。

しかしD氏の周辺住民への取材で氏の暮らしぶりが判明します。どうも地元の飲食店で韓国人女性客に絡んで出入り禁止になったりと、リアルでも問題行動があったようです。

そのジャーナリストのD氏が上の逮捕報道後 Twitter やメディアの取材で容疑者がC氏で間違いないことを認めました。逮捕容疑の犯罪行為についても取材過程で掴んでいたようです。

ただ、この時点ではまだC氏がB氏と同一人物かどうかは不明でした。ネットでは「こいつひょっとしてあのB氏?」というのはインターネット老人、じゃなくて古参ネットユーザーの間では噂され、半ば確定事項となっていましたが、決定的な情報はまだありませんでした。

しかし思わぬところからC氏=B氏が確定します。僕には fj でやりとりしたのがきっかけで、今でもやりとりのあるネットユーザーが何人かいますが、その一人のE氏が事件とは無関係の文脈でB氏の名を挙げてツイートしたところ、なんとC氏が返信してきたのです。

E氏のツイートの文脈は「昔のネットユーザーにはモラルと常識があった」「いやそんなことないだろ、fj のログ見ても同じこと言えるのか?」というやりとりへの反応で、「そういえばB氏も fj にいたよな」とつぶやいていたのでした。そのツイートにC氏が「なつかしいな、実はE氏のことは尊敬していたんだよ」などと返信したのです。

マジか…

因縁の再戦

ここで実はC氏とは自分もレスバしていたのを思い出しました。逮捕の1年前の話で、Twitter まとめサイトのコメント欄でのことです。議論していた話題は外国人に対する生活保護の是非についてでした。

この話題については僕が事ある毎に言っていますが本来なら「国際条約(国際人権規約社会権規約)で外国人を社会保障の対象から除外することは許されていない」で終了です。

条約の相互主義だなんだと反論する人もいますが、というかこの時C氏も同様の趣旨の反論をしてきたのですが、国際人権規約は普遍的な人権を保証するものですから相互主義は取りません。すなわち、ある国が人権を保証しないからといって条約加盟国がその国の国籍を持つ人の人権を保証しないということは認められません。

この「外国人に対する生活保護の是非」の話題というのは、ネットでは単に外国人一般の話ではなく、元々は在日コリアン差別のネタの一つでした。特に2ちゃんねる発の「在日の5人に1人は生活保護受給者である」というデマがきっかけで広く話題にされるようになったものです。

実はこのデマについては発生源まで辿ってデマであることを確認したことがあります。くわしい経緯はこのブログの以下の記事に書きました。

要は元々は計算ミスから始まった話で、最初に2ちゃんねるにデマを投稿した人も計算ミスを認めて撤回していたのですが、コピペの形で本人の手を離れて拡散してしまった、という話なのです。

ちなみに同様の計算ミスはひろゆき(西村博之)もやらかしています(「元祖しゃちょう日記」というのが当時のひろゆきのブログです)。

以来長らくこのデマへの反論は僕の持ちネタのようになっていたのですが、ここ10年ほどはデマの方も明らかな計算ミスを修正したバージョンになり、その一方でそれでも残る問題点を指摘する人も多くなりメディアのファクトチェックの対象にもなるようになったので、最近はあまり触れる機会もなくなりました。

しかし、未だに右派知識人や保守系政治家などから外国人に対する生活保護を廃止しろという吹き上がりが出てくるので、それは国際条約脱退しないと無理だよ、という話は繰り返しています。

さて、この記事を書くに当たって上記のジャーナリストD氏の著書にあるC氏=B氏への突撃取材の経緯を確認していたのですが、そこにB氏がネトウヨになったきっかけについての記述がありました。そのきっかけというのがどうも「在日の生活保護」デマのようなのです。

かねてから在特会などのヘイト団体は生活保護の打ち切り問題を引き合いに出して「在日コリアンへの生活保護給付のせいで日本人が割を食って餓死している!」などといったデタラメを主張しており、B氏もこの手の主張の影響を受けていたのでした。

生活保護受給者のほとんど(D氏の著書では97%としています)が日本人ですから在日コリアン生活保護をやめたところで財政への影響はほとんどありません。元々のデマで在日コリアン生活保護受給率が計算ミスで12倍に見積もられていたのがこの手の誇張された主張の原点ではないかと思われますが、僕がそのデマの誤りを指摘する一方で、B氏はそのデマに感化されネトウヨとして名を馳せることになったわけです。

なお、C氏=B氏の Twitter アカウントは数年後に凍結され、ツイートは全て非表示になりました。ブログは今でも残っていますが、Twitter 凍結後は数回更新したのみで現在は更新停止しています。

最後に

というわけで、この話はここまでです。

最後にB氏の名前を伏せたことについて。実名制の fj でのB氏の発言を敢えて名前を伏せて紹介したのは、この記事がB氏に対する個人攻撃を目的としてものではないからというのもありますが、17年後の犯罪報道で氏の実名が公表されてしまったからです。

B氏の更生を妨げないように名前を伏せるためには、過去の実名での発言についても名前を伏せる必要がありました。また、上述のジャーナリストD氏の著書ではB氏の実名はもちろんのこと、C氏のハンドル名も伏せられていましたので、僕もそれにならいました。まだネットに一部残っているC名義で公開されたヘイトスピーチが拡散されるきっかけを与えたくないという理由もあります。

そんなわけで、みなさんもB氏のプロフィールについて具体的な言及は避けていただけるとありがたいです。

*1:元々は World Wide Web と呼んでいましたが、みんなもう World Wide とか付けなくなりましたね。

*2:NetNews 用語としては「フォローアップ(フォロー)」が正しいのですが、SNSが普及した現代では混乱する用語なので「レスポンス(レス)」の語を用います。

*3:プロバイダと契約して家から投稿するようになってからは所属は書かなくなりましたが。

*4:この投稿は後に「LaLa総目次」と呼ばれ話題になりました。

はてなブログで mermaid を使う (2023/3/7追記あり)

天文ブログの方でフローチャート風の図を描くのに Mermaid を使ってみたのだけど、うまくいかないことがあったので回避方法をメモ。

Mermaid はダイアグラムやチャートを Markdown 風の記法で記述して、JavaScript で図として描画する仕組みで、数式における MathJax に相当するもの。

はてなブログの場合、数式に関しては「はてな記法」で書けば事足りるのだが、Marmaid については識別用のタグを付けたブロックに marmaid の記法で記述して、その後ろに JavaScript のコード断片をコピペしておくことで、閲覧者のブラウザ上で JavaScript を動かしてブロックを図(SVG)に変換するというやり方になる。たとえば以下のように(ブログをはてな記法で書く場合)。

><pre class="mermaid">
graph TD
    Hello --> World
</pre><script type="module">import mermaid from 'https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs';mermaid.initialize({ startOnLoad: true });</script><

これは以下のように表示される。

graph TD
    Hello --> World

はてなブログはデフォルトで編集画面で入力した論理行を p タグで囲んで表示してしまうため、mermaid をそのまま書くとエラーになってしまうので ><pre class="mermaid">...</script>< のように「pタグ停止記法」を使用している。*1

しかし、これでうまくいかない場合がある。たとえば以下。

><pre class="mermaid">
graph TD
    iPhone --> Xperia
</pre><script type="module">import mermaid from 'https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs';mermaid.initialize({ startOnLoad: true });</script><

ラベル名が変わっただけなのだが、これは描画に失敗してしまう。

graph TD
    iPhone --> Xperia

これはブログのHTMLに変換される際に「iPhone」「Xperia」といった単語に「はてなキーワード」のマークアップが追加されてしまうからだ。上の例だと pre タグのブロックは以下のように変換されてしまう。

<pre class="mermaid">graph TD
    <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a> --&gt; <a class="keyword" href="http://d.hatena.ne.jp/keyword/Xperia">Xperia</a>
</pre>

「pタグ停止記法」はあくまで p タグの挿入を停止するだけで、他のタグは挿入されてしまう。「スーパーpre記法」と同等のブロック内に一切タグが挿入されない記法があればよいのだが…

そこでスーパーpre記法の中に mermaid を書きたいのだが、mermaid のスクリプトは class="mermaid" の付いた div または pre の直下のテキストしか見てくれないようで、スーパーpre記法をpタグ停止記法の ><pre class="mermaid">...</pre>< で囲んでもダメだった。

そこで以下のようにスクリプトを追加することで解決した。

><pre class="mermaid">
graph TD
    iPhone --> Xperia
</pre><script>document.querySelectorAll('.mermaid:not([processed])').forEach((e) => { e.innerHTML = e.textContent; e.setAttribute('processed', 'true'); }) </script><script type="module">import mermaid from 'https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs';mermaid.initialize({ startOnLoad: true });</script><
graph TD
    iPhone --> Xperia

追加のスクリプトでは mermaid クラスの pre タグの内容をタグなしのテキストで置換する。また、このスクリプトがページ内に複数ある場合に処理が繰り返されないように*2 processed 属性を追加して、この属性があるタグは置換の対象にしないようにしてある。

スクリプトはロードされた時点で実行されるため、スクリプトが書かれた場所より手前にある pre タグしか置換されない。そのため mermaid クラスの pre タグの直後、mermaid のスクリプトより手前に書くようにする。

追記(2023-03-07): mermaid 記法(未満)、ありました…

なんと公式に mermaid 記法(未満)ありました。いつからあったんだろう?

スーパーPREの言語指定の部分に「mermaid」を指定しするだけ!と、言いたいところですが、mermaid の JavaScript は別途ロードしなくてはなりません。そこが「(未満)」と書いた所以です。

*1:script タグを「pタグ停止記法」の中に含めて </pre> に改行なしで続けて記述しているのは、はてなブログの記事一覧で並べて表示される記事の冒頭部分に mermaid がある時に図が正しく描画されることを期待してだが、確実な効果があるかは不明。

*2:置換が繰り返されても同じ内容になるので表示は変わらないが処理が無駄になる

うなぎ絶滅キャンペーンへのご協力ありがとうございます!

うなぎ絶滅キャンペーンへのご協力ありがとうございます!

うなぎは邪悪な生き物です!地球上に存在してよい種ではありません!旧約聖書にもそう書いてある。皆で食べて絶滅させましょう!

ご存知のように日本におけるうなぎの漁獲量は現象の一途をたどり、1970年代の3000トンが2019年には過去最低の3.7トンにまで減少しています!皆様のご協力に感謝します。あともう一息です!

でも、貧乏で養殖のうなぎしか食べれないし… というあなた!大丈夫です!養殖のうなぎを食べるだけでもうなぎ絶滅に貢献できます!

養殖のうなぎも元は天然の稚魚(シラスウナギ)を捕獲して育てたものだからです。卵から成魚まで育てる完全養殖が実用化されていない現在、養殖のうなぎを食べることは確実にうなぎ絶滅へと繋がる一歩となります!胸を張って食べていきましょう!

国際自然保護連合(IUCN)の「絶滅の恐れのある野生生物のリスト(レッド・リスト)」にはニホンウナギが「絶滅危惧種(EN)」として記載されていますが、水産庁ではニホンウナギの資源水準は「調査中」管理目標は「検討中」としています。

養殖や稚魚の捕獲についての管理措置はありますが、稚魚の密漁は絶えず、海外で捕獲された稚魚の密輸は野放し状態です。水産庁にも我々のキャンペーンへの賛同者が浸透しているのです!同志によるサボタージュが功を奏しているうちに皆でうなぎを食べ尽くし絶滅させましょう!

https://rna.sakura.ne.jp/share/diary/『寄生獣(2)』 この「種」を食い殺せ.jpg
岩明均寄生獣(2)』より

(初出:facebook)

解説

facebook でうなぎの蒲焼の写真をでかでかと載せて飯テロしてる人がいたので書きました。

Emacs の表示欠けの件

先日の、新メインPC/Ubuntu 20.04 への移行の際の未解決問題の一つの「Emacs の表示欠け」問題ですが…

あらためて再現動画を貼りますが、こんなんです。

あれから調べていたのですが、以下のことがわかりました。

  • 表示欠け状態は redraw-display または redraw-frame で修復できる。redisplay ではダメ。
  • emacs -q の初期設定で表示された *GNU Emacs* バッファでも再現する。
    • なのでフォント設定とか関係なさそう。
    • 表示欠けの部分が真っ白ではなくGNUアイコンの一部が描かれる場合がある。
  • ASCII 文字だけのバッファでも発生。
    • 日本語表示が原因というわけではなさそう。
  • scroll-down, scroll-down-command, recenter-top-bottom によるスクロールで再現するが常に再現するわけではない。
  • 表示欠けはウィンドウの最下行かその近くの行で発生する。

というわけで、ウインドウがスクロールするタイミングで redraw-frame を呼び出せばいいのでは?と思って以下のような設定をしてみました。

;; スクロール時に表示が欠けるバグの回避
(defun my-auto-redraw (win start)
  (redraw-frame))

(defun my-auto-redraw-setup ()
  (if (not (member 'my-auto-redraw window-scroll-functions))
      (progn
       (add-hook 'window-scroll-functions 'my-auto-redraw nil t))))

(add-hook 'after-change-major-mode-hook 'my-auto-redraw-setup)

スクロール発生時に呼び出される hook は window-scroll-functions ですが、buffer 毎に add-hook してあげないとダメみたいで、じゃあ buffer が作られる時に呼ばれる hook は?と思ったら、どうもないみたいなんですね…

代替案として after-change-major-mode-hook と buffer-list-update-hook が候補に上がっているのですが、buffer-list-update-hook が呼び出された時の current buffer がどれになるかよくわからなくて after-change-major-mode-hook でやりました。

これでうまくいくかと思ったら、表示欠けの発生自体は防げませんでした… でも C-l なり C-v なりでスクロールしたタイミングで修復されるので、ウィンドウの下の方で編集を続けるのでない限りは気にならなくなりました。表示が重くなったりちらついたりしないかと思ったのですが、GPUが速いせいか全然気にならないレベルでした。

とりあえずこれで様子見ですかね。バグレポとかした方がいいのかなぁ。でも検索しても他に発生してる報告を見かけないので環境特有の何かっぽいんですよね。うーむ…

メインPC新調 (ソフトウェア編)

前回の続きです。


Ubuntu 20.04 インストール

旧PCの Ubuntu 18.04 上で Ubuntu 20.04.1 ja (日本語Remix) をダウンロードしてブータブルUSBメモリを作成。

組み立てOSが何も入ってない状態で USB メモリを挿して起動したら普通にインストーラが起動しました。Ryzen PRO 4000 シリーズ(Renoir) の内蔵GPUが 20.04 の初期状態で動かないことがあるという話を聞いていましたが、HDMI で Full-HD モニターを繋いだ限りは大丈夫でした。*1

インストール先の SSDパーティションをいつものように切っていたら、インストールに進もうとすると、EFIシステムパーティションが必要だよ、このままだとブートしなくなるよ、みたいな警告が出て、EFIシステムパーティションて何?ってなったので調べました。

OSのブートローダーを入れる用のパーティションのようですね。MBRが手狭になったからこんなのできたんですかね?128MBもあれば十分みたいなので、それで設定しました。念の為 HDD の方にも作っておきました。なんかあった時にブートドライブにするかもしれないので。SSD は残り全部 / に、HDD は残り全部 /home に、swap パーションはナシ、で行きました。

その先は特にトラブルなくデスクトップが立ち上がりました。デスクトップは標準の Xorg を使いました。Wayland はまだ安定性が心配なのと、旧メインPCでベンチマークを測定しても特に速いわけではなかった(むしろ Xorg よりちょっと遅い)ので今回はパスしました。

デスクトップは今まで GNOME Flashback を使っていたのですが、home には Ubuntu 10.04 あたりからずっと引き継いできた秘伝のタレみたいな設定が仕込まれていて、トラブルの際に何がどうなってるのかよくわからなくなってきて放置になってる件もいくつかあり、この際一度まっさらな状態からやり直したいということもあって、今回から標準のデスクトップ環境を使うことにしました。標準のデスクトップならトラブルの際に情報も集めやすいというのもあって。

センサー関係

まずはハードウェアのトラブルをいち早くキャッチできるように、CPUやSSD/HDDの温度を確認できる体制にしたいと、hddtemp と lm-sensors をインストール。

$ sudo apt install hddtemp
$ sudo apt install lm-sensors
$ sensors-detect
...

sensors-detect は適当にやったのでよくおぼえていません… 基本デフォルトだったと思います。

この後 sensors-applet をインストールしたのですが、起動の仕方がわからず使用を断念。gnome-panel じゃないと使えない?

Ubuntu Software から適当に見繕った Hardware Sensors Indicator というのをインストールしました。パッケージ名は indicator-sensors です。

Preference で読み取るセンサーを選びます。CPU 温度は k10temp-pci-xxxx の Tdie、GPU 温度はたぶん amdgpu-pci-xxxx の edge、NVMe SSD の温度は nvme-pci-xxxx の Composite を見ればよいようです。HDD は HDD の型番が出てくるのでそれを。

これで温度が簡単に監視できるようになったのですが、トラブルが。indicator-sensors を起動したまま画面ロックまたは他のユーザーのデスクトップに切り替えてから戻ってくると、デスクトップがグレーアウトして、

Authentication is required to check power state for WDC WD40EFZX-...

という認証画面が表示されてデスクトップが一切操作できなくなってしまう現象が発生しました。キャンセルしても速攻再表示されます。認証すれば閉じると思ったのですが、一度は成功したものの、その後何度やっても認証が通らなくなって諦めて Ctrl+Alt+F3 でコンソール画面に入って X 関係のプロセスを kill するはめになりました…

どうやら以下の issue と同じ現象のようですが、まだ解決していないようです。

とりあえず HDD の温度表示は諦めて、Preference の Plugins タブから udisks2 を無効化しました。エラーメッセージでググるpolkit の設定ファイルを書き換えることで回避できるようなのですが、意味がよくわからないので敬遠しました。ていうか hddtemp 使ってないんですね。hddtemp を使うプラグインがあればいいのに…

ECC メモリは認識されている?

以下のコマンドでメモリが ECC かどうか確認できます。

$ sudo dmidecode -t 17
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.
# SMBIOS implementations newer than version 3.2.0 are not
# fully supported by this version of dmidecode.

Handle 0x0016, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x000F
	Error Information Handle: 0x0015
	Total Width: 72 bits
	Data Width: 64 bits
	Size: 16384 MB
	Form Factor: DIMM
...

ECC メモリでは Data Width と Total Width が同じ(64 bits)になるそうです。

エラー検出用のドライバは EDAC (Error Detection and Correction) というのですが、dmesg で EDAC がロードされて ECC が有効化されているのが確認できます。

$ dmesg
[    0.000000] Linux version 5.8.0-59-generic (buildd@lcy01-amd64-022) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021 (Ubuntu 5.8.0-59.66~20.04.1-generic 5.8.18)
...
[    4.140391] EDAC amd64: F17h_M60h detected (node 0).
[    4.140441] EDAC amd64: Node 0: DRAM ECC enabled.
[    4.140442] EDAC amd64: MCT channel count: 2
[    4.140517] EDAC MC0: Giving out device to module amd64_edac controller F17h_M60h: DEV 0000:00:18.3 (INTERRUPT)
[    4.140520] EDAC MC: UMC0 chip selects:
[    4.140522] EDAC amd64: MC: 0: 16384MB 1:     0MB
[    4.140524] EDAC amd64: MC: 2:     0MB 3:     0MB
[    4.140527] EDAC MC: UMC1 chip selects:
[    4.140528] EDAC amd64: MC: 0: 16384MB 1:     0MB
[    4.140529] EDAC amd64: MC: 2:     0MB 3:     0MB
[    4.140530] EDAC amd64: using x8 syndromes.
[    4.140545] EDAC PCI0: Giving out device to module amd64_edac controller EDAC PCI controller: DEV 0000:00:18.0 (POLLED)
[    4.140546] AMD64 EDAC driver v3.5.0
...

メモリのエラー発生と訂正の情報は、edac-util で確認できます。

$ sudo apt install edac-utils
$ edac-util -sv
edac-util: EDAC drivers are loaded. 1 MC detected:
  mc0:F17h_M60h
$ edac-util -v
mc0: 0 Uncorrected Errors with no DIMM info
mc0: 0 Corrected Errors with no DIMM info
edac-util: No errors to report.

というわけで ECC は OS 側から認識されているようです。エラー発生・訂正の様子を実際に確認するにはメモリを起動でコケない程度にオーバークロックするとよいそうですが、さすがにそこまではやりませんでした…

データコピー

デスクトップ環境をまっさらな状態から構築する関係で旧PCの home ディレクトリをそのまま移行はしないのですが、データの大半は必要ですし、必要になるたびコピーするのは面倒なので、旧 home をまるごと新PCの適当なフォルダにコピーしました。2TB近くあるので、万一のデータ化けを防ぐために転送方法を工夫しました。

最初は samba をインストールして SMB 署名を有効(smb.conf の [global] セクションで server signing = mandatory を設定)にして nautilus からコピーしようとしたのですが、SMB だとシンボリックリンクのコピーでエラーになり、ずっと確認ダイアログが出てきて前に進まないので*2 ssh と tar を使いました。

まず新PC側に ssh サーバーをインストールします。

$ sudo apt install openssh-server

そして新PC側にコピー先になる一時ディレクトリを作成して(~/tmp とします)、旧PC側で以下のようにして home ディレクトリを丸ごと転送しました(ユーザー名 hoge は適当に置き換えてください)。

cd /home
tar cfpv - -C . hoge | ssh hoge@keynes.local 'tar xf - -C tmp'

tar の p オプションでシンボリックリンクシンボリックリンクのまま転送しています。

ssh を使ったのは暗号化された通信なら通信路でデータ化けが発生すれば送信先で復号できなくなってエラーになることが期待できるからです。エラーにならずに送信が完了すればデータは無事というわけです。

単純なコピーなら scp の方が簡単ですが、scp はシンボリックリンクはリンク先の実体をコピーする形でしかコピーできないので上の方法にしました。

キーボード、日本語入力

mozc の修正

今まで何度か書いてますが、US配列キーボード + かな入力 + NeXT かな配列 という少数派(ていうか他にそんな人いるのかな?)の日本語入力方式を使っている関係で、mozc に自作パッチを当てて使っています。fcitx-mozc, ibus-mozc, emacs-mozc に対応したパッチがこれです。

実際には古いパッチがそのままでは使えなかったので、このパッチは手修正したものから再作成したものです。

作業手順は、まず、apt のソースリポジトリを有効にします。/etc/apt/sources.list の、

# deb-src ...

となっているところのコメントアウトを全部外します。ssh でリモートログインして作業してたのでこうしましたが、デスクトップが使える状態なら「ソフトウェアとアップデート」の「Ubuntu のソフトウェア」タブから「ソースコード」にチェックを入れたほうが早いです。

以下適当な作業ディレクトリを作って作業。

$ sudo apt-get update
$ sudo apt-get install dpkg-dev
$ sudo apt-get build-dep ibus-mozc
$ apt-get source mozc

ここで上のパッチを適用(path/to のところは適当に置き換えてください)。

$ patch -p1 < path/to/mozc-2.23.2815.102-nxkana-20210708.patch

パッチが終わったらビルドします。

$ dpkg-buildpackage -rfakeroot -uc -b

パッチでは changelog は修正していないので元のソースのバージョンと同じバージョンの deb が生成されます。これをそのまま上書きインストールしますが、その前に依存するパッケージをインストールしておきます。途中右往左往して最小限のパッケージがどれだかわからなくなりましたが、emacs と fcitx 関係を入れたのかな…

$ sudo dpkg -i *.deb

mozc のアップデートが降ってくると上書きされてしまいますが、その時は再び上の作業を繰り返す必要があります。

ちなみに最初は changelog に別のバージョンのログを定義してバージョンの違う deb をビルドしていたのですが(-8ubunt1 のところを -8rna1 とかにしてた)、mozc 以外のアップデートが降ってきた時に依存関係のせいなのか元のバージョンに上書きされてしまったので同じバージョンでビルドするようにしました。

キーボードの設定

旧メインPCに繋いでいる HHK (Happy Hacking Keyboard PD-KB02) は、新メインPCの設定が一通り終わるまでは使いたいので予備のキーボードを繋いだのですが、日本語キーボードしかなかったのでインストール時の初期設定は日本語キーボードにしていました。

新PCへの移行の目処がついた時点で HHK を新PCで使うためUSキーボード用の設定に切り替えました。まずコンソールのキーボードを変更。

$ sudo dpkg-reconfigure keyboard-configuration

CUI で設定画面が出るので HappyHacking, English(US) で設定しました。

次にデスクトップにログインして「設定 - 地域と言語」で入力ソースから「日本語」を削除して「英語」を追加して、追加されたエントリをドラッグして先頭に持っていきます。

Shift Space で IME を ON/OFF して入力モードを切り替える派なので、その後 Mozc の設定で「キー設定」をATOKをベースにして以下のように設定しました。

  • 変換前入力中/キャンセル後IMEを無効化 を Shift Space に
  • 直接入力/IMEを有効化 を Shift Space に
  • 入力文字なし/キャンセル後にIMEを無効化 を Shift Space に
  • 入力文字なし/代替空白文字を入力 を Ctrl Shift Space に

デスクトップを一度ログアウトしてログインしなおすと設定が反映されます。これでだいたい思ったとおりの挙動になりました。

emacs の設定

emacs はそのままだとインライン入力(on-the-spot)ができません。ibus-mozc からの入力になり、カーソル位置の下に小さなウィンドウが出てそこに入力文字が表示されて変換・確定して emacs のバッファに入力されることになります。

これは不便なので emacs-mozc パッケージを使いたいのですが、IME の ON/OFF を他のアプリと同じキーで行うには ~/.Xresources に以下の記述が必要です。

Emacs*UseXIM: false

これは X から emacsGUI への IME 入力を無効化する設定です。このあとデスクトップを一度ログアウトしてログインしなおすか、コマンドラインで以下を実行します。

$ xrdb merge ~/.Xresources

あとは ~/.emacs.d/init.el に emacs-mozc の設定をすればいいのですが、素の emacs-mozc は使っているうちに変換候補表示がものすごく重くなることがありました。今でもそうなのかわかりませんが、Ubuntu 18.04 では mozc-popup を入れると解決したので今回も入れます。

まず、melpa からパッケージをインストールできるようにします。

(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))

package-list-package して melpa のパッケージが出てきたら*3 mozc-popup を探してインストールします。

で、これをインストールすると依存パッケージとして emacs-mozc の最新版もインストールされてしまうので、上でやった mozc へのパッチの emacs-mozc の分が台無しになります… しょうがないので、emacs の設定の方で解決します。まず、以下のかな配列テーブルを ~/.emacs.d/ にコピーします。

そして ~/.emacs.d/init.el で以下のように設定しました。

(require 'mozc)
(load-file (expand-file-name "~/.emacs.d/mozc-keymap-kana-101us-nx.el"))
(setq mozc-keymap-kana mozc-keymap-kana-101us-nx)
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
(prefer-coding-system 'utf-8)
(global-set-key (kbd "S-SPC") 'toggle-input-method)
(require 'mozc-popup)
(setq mozc-candidate-style 'popup) ; select popup style.

Shift Space で IME ON/OFF の設定も入っています。

GNOMEEmacsキーバインド

GNOME/GTK アプリで Emacs 風のキーバインドが使えるように設定します。dconf で設定してもいいのですが、ミスに気づきにくくてハマりやすいので GUI の dconf-editor をインストールします。

$ sudo apt install dconf-editor
$ dconf-editor

パスをたどって /org/gnome/desktop/interface/gtk-key-theme を Emacs にします。

xkeysnail のインストール

以下の理由から xkeysnail でキーのリマップを設定します。

HHK の Meta キーの件は以前は xkb の設定で解決していたのですが、面倒なのと、Firefox の件でどっちみち xkeysnail を使うので、キーリマップは xkeysnail に一本化しました。

まずインストール。

$ sudo apt install python3-pip
$ sudo pip3 install xkeysnail

設定ファイルを書きます(xkeysnail-config.py とします)。

import re
from xkeysnail.transform import *

define_modmap({
    Key.MUHENKAN: Key.LEFT_ALT,
    Key.HENKAN: Key.RIGHT_ALT,
})

define_keymap(lambda wm_class: wm_class in ("Firefox"), {
    K("C-n"): with_mark(K("down")),
    K("C-b"): with_mark(K("left")),
}, "Firefox")

前半は HHK のメタキー(◇)を Alt にするための設定、後半は Firefox に Ctrl N と Ctrl B が食われないようにするための設定です。

以下で動作を確認します(path/to のところは適当に置き換えてください)。

$ xhost +SI:localuser:root
$ sudo xkeysnail path/to/xkeysnail-config.py -q

上のように xkeysnail は root 権限で実行する必要があります。以前はデスクトップにログインするたびに sudo のパスワード入力をしていたのですが、面倒なので以下を参考に自動実行するように設定しました。

まずグループの作成とユーザーのグループ設定(hoge (ユーザ名)は適当に置き換えてください)。

sudo groupadd uinput
sudo gpasswd -a hoge input
sudo gpasswd -a hoge uinput

/etc/udev/rules.d/input.rules を作成して以下のように設定。

KERNEL=="event*", NAME="input/%k", MODE="660", GROUP="input"

/etc/udev/rules.d/uinput.rules を作成して以下のように設定。

KERNEL=="uinput", GROUP="uinput"

~/.config/systemd/user/xkeysnail.service を作成して以下のように設定(path/to のところは適当に置き換えてください)。

# 1. Copy this to ~/.config/systemd/user/xkeysnail.service
# 2. systemctl --user enable xkeysnail
#
# Note that you need to set proper $DISPLAY on your environment.

[Unit]
Description=xkeysnail

[Service]
KillMode=process
ExecStart=/usr/local/bin/xkeysnail path/to/xkeysnail-config.py -q
ExecStartPre=/usr/bin/xhost +SI:localuser:root
Type=simple
Restart=always

# Update DISPLAY to be the same as `echo $DISPLAY` on your graphical terminal.
Environment=DISPLAY=:0

[Install]
WantedBy=default.target

xkeysnail の -q オプションは入力したキーをシステムのログに残さないための設定です。こうしないと実質キーロガーになってしまうので…

このサービス有効化します。

$ systemctl --user enable xkeysnail
$ systemctl --user start xkeysnail

一度再起動しないと xkeysnail の起動に失敗するので start はいらないかも。ここまできたらPCを一度再起動します。

再びデスクトップにログインして、以下のようにステータスを確認します(hoge や 1234(ユーザID) や /path/to は適当に読み替えてください)。

$  systemctl --user status xkeysnail
● xkeysnail.service - xkeysnail
     Loaded: loaded (/home/hoge/.config/systemd/user/xkeysnail.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-07-05 09:39:27 JST; 16s ago
    Process: 2224863 ExecStartPre=/usr/bin/xhost +SI:localuser:root (code=exited, status=0/SUCCESS)
   Main PID: 2224864 (xkeysnail)
     CGroup: /user.slice/user-1234.slice/user@1234.service/xkeysnail.service
             └─2224864 /usr/bin/python3 /usr/local/bin/xkeysnail /path/to/xkeysnail-config.py -q

 705 09:39:27 keynes systemd[1421]: Starting xkeysnail...
 705 09:39:27 keynes xhost[2224863]: localuser:root being added to access control list
 705 09:39:27 keynes systemd[1421]: Started xkeysnail.

フォントの設定

何かと便利なので Windows と共通のMSコアフォントは入れておきます。

# sudo apt install ttf-mscorefonts-installer

日本語フォントは入ってませんが…

ネットで入手できるフォントはファイルをダブルクリックしてフォントビューアからインストールできますが、数が多くなると面倒なのと、.ttc (TrueType Collection) ファイルはなぜか [インストール] ボタンが無効になってインストールできないのでどうしようかと思っていたところ、~/.local/share/fonts にファイルをコピーするだけでそのまま使えるようになりました。

その他

ruby bundler でデプロイしたスクリプト

このブログを書くのにも使っている HatenaBlogWriter ですが、gem のバージョンを固定するために ruby bundler を使っています。

Ubuntu のデフォルトでは ruby からして入ってないので(python は入ってるのに…) bundler も一緒にインストールします。

sudo apt install ruby
sudo apt install ruby-bundler

旧PCからコピーしたデプロイ先ディレクトリ(/path/to/dir とします)でそのままスクリプトを実行すると、こんな感じのエラーで実行できません。

Traceback (most recent call last):
	2: from /usr/bin/bundle:23:in `<main>'
	1: from /usr/lib/ruby/2.7.0/rubygems.rb:294:in `activate_bin_path'
/usr/lib/ruby/2.7.0/rubygems.rb:275:in `find_spec_for_exe': Could not find 'bundler' (1.16.1) required by your /path/to/dir/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:1.16.1`

古い bundler で入れた gem はそのままでは動きません。エラーメッセージの指示通り更新します。

$ bundle update --bundler
Fetching gem metadata from https://rubygems.org/.
Fetching rake 10.5.0
Installing rake 10.5.0
Fetching atomutil 0.1.5
Installing atomutil 0.1.5
Using bundler 2.1.4
Warning: the lockfile is being updated to Bundler 2, after which you will be unable to return to Bundler 1.
Bundle updated!

これでスクリプトが動くようになりました。

VLC

デフォルトの動画プレイヤーは対応コーデックが限られているので VLC をインストールしました。

$ sudo apt install vlc

Full-HD 動画の再生も特に問題なし、と思ったのですが、特定の MPEG2 TS ファイルを開くと途中から映像が止まり音声だけ進む状態になり、やがてマウスカーソルも動かなくなりました。音声はそのまま流れます。外から ssh でログインはできるので X だけハングしている状況のようです。

原因の切り分けのためにまず VLC の [ツール - 設定 - ビデオ] で「Output」を「無効」に設定してみたところ、ハングしなくなりました。なぜかウィンドウのサイズが勝手に変わり続けて気持ち悪いのですが、音声は正常ですし、ハングもしません。

では OpenGL 関係の不具合なのか?と思って今度は「ASCII Art」に設定してみたところ、同じ動画の同じ箇所でハングしてしまいました。ということは OpenGL は関係なく、MPEG2 ビデオデコーダーの不具合?

[ツール - 設定 - 入力/コーデック] の Hardware-accelarated decoding はデフォルトで「自動」になっていて、Ryzen APU の場合、ハードウェアデコーダが使用されているものと思われます。そこでこれを「無効」に設定したところ、ハングしなくなりました。

ソフトウェアデコードは重いのでは、と思ったのですが、さすがに 4コア8スレッドの Ryzen だけあって全く気になりません。再生中に Twitter で実況しても特に重くなる場面はありませんでした。CPU 使用率も MPEG2/Full-HD で20%前後、H264 でも10%前後(何故かH264の方が軽い)で CPU 温度も特に問題なかったので、それ以上設定を試さずにこれで行くことにしました。

shotwell

旧PCでは ~/Photos に写真を入れる設定にしていたのですが、旧PCから

  • ~/.local/share/shotwell
  • ~/.cache/shotwell
  • ~/Photos

を同じ場所にそのままコピーすると問題なく移行できました。ただし、Flickr への写真のアップロードの際は再認証が必要でした。何故かパスワードが通らなくて(アカウントが連携している yahoo.com では通るのに)一度パスワードリセットをする必要がありました。

Nextcloud クライアント

クラウドストレージは以前は Dropbox をメインに使っていたのですが、規約改定で無料で連携できるデバイス数が制限されてしまい使い勝手が著しく悪化したので、最近は昔から借りているさくらのレンタルサーバーに Nextcloud をインストールして使っています。

すでに 13GB くらい使っているのですが、さくらのレンタルサーバー(プレミアム)は一度に大量の転送が発生すると 503 エラーを返すようになり、ブログの画像置き場としても同サーバーを使っている身としてはそれは避けたかったので、ローカルでコピーしてから同期することで転送を防ごうとして試行錯誤していました。

最終的には、

  • 旧PC の Nextcloud クライアントを止める
    • 同期フォルダ直下にある以下のファイルが消える(xxxxxxxxxxxx は乱数っぽい文字列)
      • ._sync_xxxxxxxxxxxx.db-shm
      • ._sync_xxxxxxxxxxxx.db-wal
      • ._sync_xxxxxxxxxxxx.db は残る
  • 同期フォルダをまるごと(._sync_xxxxxxxxxxxx.db も含めて)新PCにコピーする
  • 新PCに Nextcloud クライアントをインストール(sudo apt install nextcloud-desktop)
  • nextcloud を起動して認証、同期フォルダ設定

でなんとかなりました。最初は ._sync_xxxxxxxxxxxx.db が残っていると悪さしそうと思って消していたのですが、それをやると逆にほぼ全ファイルを同期しようとしてダメでした。

XSH2

XSH2 は、とあるプロジェクトで使用している perl ベースの言語で、XMLの処理を簡単に記述できるので使っています。Ubuntu のパッケージはないので、CPAN でインストールします。試行錯誤しましたが、以下の手順でインストールできるはずです。*4

まず libxslt1 の開発用パッケージをインストールします。XSH2 が依存する XML-LibXSLT-1.99 がこれを必要とします。

$ sudo apt install libxslt1-dev

cpan を起動します。初回起動時の初期設定はデフォルトのままで進み、まず XML::LibXSLT を notest install します(test で失敗するため)。

cpan[1]> nostest install XML::LibXSLT
Running install for module 'XML::LibXSLT'
  SHLOMIF/XML-LibXSLT-1.99.tar.gz
...
  SHLOMIF/XML-LibXSLT-1.99.tar.gz
  /usr/bin/make install  -- OK

その後 XML::XSH2 を install します。

cpan[1]> nostest install XML::LibXSLT
...

途中、

	Term::ReadLine::Perl::readline(Term::ReadLine::Perl=ARRAY(0x56316edc7470), "Enter arithmetic or Perl expression: ", "exit") called at test.pl line 54
Enter arithmetic or Perl expression: exit

というメッセージが出て止まりますが、そのままリターンキーを押せば最後まで進んでインストールできました。

CPAN の初期設定で変更していないなら、~/perl5/bin/ に xsh がインストールされます。ここには CPAN が .bashrc を変更して PATH を通してあるので、シェルを立ち上げ直せば xsh が起動するようになります。

Stellarium

プラネタリウムソフトの Stellarium ですが、Ubuntu の公式リポジトリからインストールすると何故か少し古いバージョンが入ります。旧PCでは一時期あった月食のバグ(月食中の空を表示すると落ちる)を回避するために公式 PPA からインストールしていた関係で、旧PCの設定ファイルを新PCにコピーしても設定が一部反映されなくなりました。

仕方がないので新PCでも公式 PPA からインストールするようにしました。

$ sudo add-apt-repository ppa:stellarium/stellarium-releases
$ sudo apt-get update
$ sudo apt install stellarium

その後旧PCから ~/.stellarium を丸ごと新PCにコピーしてから stellarium を起動したところ、無事旧PCの設定が反映されました。

astrometry.net

astrometry.net は天体写真から写野の天球上の位置を特定する(plate solve といいます)ためのソフトです。Ubuntu にもパッケージがあるので、apt でインストールします。

$ sudo apt install astrometry.net

しかしこれだけでは計算できません。星表のデータが必要になります。これが膨大で全部で 30GB 以上あるものをダウンロードしなくてはなりません。これも apt でインストールできるので旧PCには全部いれていたのですが、むちゃくち時間がかかるしサーバーにも負荷がかかるので気が引けます。そこで旧PCからデータを丸ごとコピーすることにしました。

astrometry-data- 系パッケージのファイルリストを見ると、tycho2 (ティコ第二星表)も 2mass (Two Micron All-Sky Survey)も、最終的には /usr/share/astrometry/ に fits データを置いているだけのようです(2mass の方は中身はダウンローダーで別のサーバから fits をダウンロードしています)。その他ドキュメントも /usr/share にインストールしていますが、これは動作には関係ないと思われます。

ということで旧PCから /usr/share/astrometry/ の中身だけコピーします。新PC側で、先に sudo で何か実行して認証を済ませてから(そうしないと ssh と sudo のパスワード入力が被って入力できなくなる)以下を実行。

$ ssh rna@OLD_PC 'tar cfp - -C /usr/share/astrometry .'| sudo tar xvf - -C /usr/share/astrometry/

コピー完了後 solve-field コマンドを実行すると無事 plate solve に成功しました。

未解決の問題

indicator-sensors で HDD 温度表示を有効にすると認証を要求される

上の「センサー関係」で書いた通りです。今は udisks2 プラグインを無効にして、必要な時にコンソールから hddtemp を実行しています。あまり激しく温度変化することはないようなので当分これで行きます。

Emacs の表示欠け

Emacs を使っていると時々表示が欠ける(一部の文字が背景色で塗りつぶされる)ことがありました。こんな感じ。

文字単位で消えるわけではなく一部が欠ける感じなのですが、上の動画のように欠け方が大きくてほぼ1行まるまる消えているように見えることもあります。発生条件は不明ですが C-l でスクロール位置を切り替えていると発生することがあります。発生しないこともありますし、そうでない時に発生することもあります。

当該箇所でカーソルを動かしたり範囲選択したりすると表示が復帰しますが、編集中に発生すると文字の消しすぎと勘違いして再入力してしまったりして厄介です。

サウンドのノイズ

これも発生条件が不明なのですが、何かの拍子にサウンドにノイズが入り初めて、システムサウンドも含めてどのアプリから音を鳴らしてもノイズが入るようになってしまいます。ノイズの入った音のあとにエコーのように同じ音が繰り返されるのが特徴です。

気がつくと直っていることもあるのですが、ずっと直らないことも。ベンチマーク中でも何時間も動画を再生していても再現しないので負荷でチップが熱を持って、みたいな話ではなさそう。

再起動後デスクトップにログインしていきなり再現したこともあります。この時は top でプロセスを見ると pulseaudio が 5% ぐらいCPUを食った状態で張り付いていて、pulseaudio の暴走かなと思い以下のコマンドで pulseaudio だけ再起動すると即直りました。

$ pulseaudio -k

とりあえず再発したらこれでしのぎます…

nautilus で SMB のファイルコピーが遅い

Windows の共有フォルダをファイルマネージャー(nautilus)でマウントしてファイルをコピーすると異様に遅いことに気が付きました。1Gbps のネットワークなのに 30〜40MB/s 前後しか出ません。Windows 同士だと 100MB/s 近く出るのですが。

これは困る、と思ったのですが、調べてみると旧PCでも同じくらいしか速度が出ていないことが判明。なら今まで困ってないからいいか… ということで諦めたのですが、一応調べてみると、どうも GNOME の未解決の不具合(制限?)のようです。

nautilus の SMB は gvfs-smb 経由で GIO API を使っているのですが、この時デフォルトの 64KB のブロッサイズが適用されてしまい、性能が出ないとのこと。適切なブロックサイズをオプションで指定すれば性能が出るのは確認済みですが適切なブロックサイズを検出する方法が難しいようでまだ fix されていません。

apt で cifs-utils をインストールして、以下のように正攻法で cifs ファイルシステムとしてマウントするか(マウントポイントは share ユーザ名は hoge とする)、

$ sudo mount -t cifs //windowspc/share/ share -o "username=hoge"

あるいは逆に Ubuntu 側で samba の共有フォルダを作り Windows 側からコピーしてあげるとフルスピードでコピーできるので、それでしのぐことにしました。

デスクトップ壁紙画像が変更できない

デスクトップの背景を変えようと、設定 - 背景 の [画像を追加] で ~/ピクチャ から画像を選ぼうとしても選べませんでした。ファイルダイアログは開くのですが画像を選んでも [開く] ボタンがグレーアウトしたまま。~/Photos の下のファイルでも同様なので日本語パス名の問題ではないようです。

納得行かないのですが、dconf-editor で /org/gnome/desktop/background/picture-url に画像のURLを file:///home/hoge/ピクチャ/cure-marine.jpg のように設定してやれば変更できるので、当分それでしのぐことにしました。

iPhone からの動画のコピーで nautilus が固まる

USB で iPhone を繋いで iPhone 側で「このPCを信頼する」を許可してからUSBを挿し直したら nautilus から写真とドキュメントにアクセスできるようになったのですが、写真から大きな動画をコピーすると nautilus が固まってしまう現象が発生しました。

プログレスバーが進まなくなって転送速度も0KB/s表示になり、nautilus の操作が一切できなくなりました。しかし実際にはコピー自体は進んでいるようで、コピーが終わると nautilus も復帰し、コピーも成功していました。

いまいち納得いきませんが当面我慢して使っていこうと思います。

まとめ

いくつか問題は残りましたが、おおむね旧PCでできていたことは一通りできるようになりました。新PCはさすがに最新のCPUだけあってサクサク動くし気持ちいいです。

今までネットとテキスト編集程度だけなら低スペックのPCで十分って思ってたのですがそんなことはありませんでした。今どきの Web ページ、JavaScript バリバリに使ってるせいもあって、CPUパワー次第でレスポンス全然違いますね… どうせサーバーサイドが重いんでしょ、と諦めてた TwitterFacebook もサクサク動くようになってびっくり。

メモリも 32GB になると安心して使えます。16GB の時は長期間大量のタブが開いた Firefox を放置しているとメモリ残量が気になりだして Firefox を再起動したり Shotwell の同時起動をためらったりしてましたが、今は何も考えずガンガン起動できる感じです。

ということでこれから5年くらいは新PCでなんとかしのげるかな…

長々と書きましたが、正直これ読んで楽しい人なんてほとんどいないと思うんですけど、自作PCLinux やってる人で困った人が検索で見つけてちょっとは役に立ったりすればいいなと思って公開することにしました。実際今回も今までも自分がそうやって助かっているので。

*1:4K では表示がおかしくなるという話もありますが、Ubuntu 20.04 はデフォルトで HWE (HardWare Enablement) スタックのドライバが入るので、現在はインストール後アップデートをかければ直るものと思われます。

*2:なんでそんなにシンボリックリンクがあるのかというと IIIME 関係のソースをビルドした時に生成されたもののようですが、全部特定していらないものを削除したり、いるものは tar で固めたり、というのは大変すぎるので諦めました。

*3:最初 gnu のパッケージしか表示されなくて遅れて出てくることがある。出てこないなら M-x package-initialize したら出てくるようになるかも。

*4:参考: https://stackoverflow.com/questions/28473981/how-to-reinstall-re-run-module-installation-for-a-failed-install-in-perls-mcpa

メインPC新調 (ハードウェア編)

2014年から使っていたメインPCを丸ごと新調しました。Linux (Ubuntu)で使うということもあり、今回も自作です。

旧PC 新PC
CPU Athlon 5350 (4C4T/2.05GHz) Ryzen 3 PRO 4350G (4C8T/3.8GHz)
MB ASRock AM1B-ITX ASRock B550M-ITX/ac
MEM 16GB (DDR3 1600MHz) 32GB (DDR4 3200MHz, ECC)
HDD/SSD WD Red 4TB SSD 960 EVO 500GB / WD Red Plus 4TB
OS Ubuntu 18.04 Ubuntu 20.04
CASE Cooler Master CENTURION 6 (ATX) SSUPD MESHLICIOUS (Mini-ITX)
PSU SUPER FLOWER SF-500P14FG Seasonic FOCUS-GM-550 (550W)
CPU COOLER Thermaltake MeOrb II CRYORIG C7 V2
CASE FAN 12cm+14cm (CASE付属) 12cm x2 (Cooler Master MasterFan SF120M, 山洋 SF12-S4)

パーツの選定

旧PCのパーツは主にツクモから買いましたが、今回は Ryzen PRO 4000 シリーズがマザーボードとセットでしか販売しておらず、組わせられるマザーが店によって限定されている場合があり、目当てのマザーと組み合わせられるアークで揃えました。一部パーツは他の店の方が安かったのですが、同じ店で買った方がサポートで安心かと思って。

CPU の選定基準は、省電力運用できること、ECC に対応していること、内蔵グラフィックがあること、ということで Ryzen PRO シリーズ一択になりました。8月に最新の 5000G シリーズが発売ですが PRO 版がいつ出るかわからないし、そもそも8月まで待つつもりはないので 4000G で。省電力版の 4000GE は一般販売されていないので、4000G を cTDP 設定で 35W にして運用します。

マザーは UEFI (BIOS)で cTDP が設定できる ASRock の製品を選びました。設定場所がなかなかわからなくて苦労しましたが…

ケースは一時期流行ったキューブ型ケース以来の小型ケースですが、これは置く場所がなかったから。旧PCはそのままファイルサーバーとして運用する予定なので机の上しか置く場所がないのでした。HDD が1台しか載りませんがバックアップ等は旧PCをネットワーク越しに使えばOK。小型ケースは昔冷却能力の低さに悩まされてずっと敬遠してきたのですが、全面メッシュならなんとかなるだろう、水冷ラジエーターも対応してるので最悪水冷化も、と。

設置場所の制約で、幅20cm、奥行き30cm、高さ35cm くらいまで、種類が豊富なATX電源が載る、3.5' HDD が最低1台載る、という条件で在庫があるケースはほとんどなくて選択の余地があまりありませんでした。SSUPD は聞いたことのないメーカーだなと思ったら Lian Li のサブブランドということで、それなら作りもきっと大丈夫だろうと思って決めました。

起動ドライブは NVMe SDD にしました。これはサブPCで天体撮影のデータ一時置き場*1に使っていたものを、SSD を新調したのでお下がりで使い回すことにしたものです。交換前に Windows 用のツールで確認するのを忘れていたのですが、総書き込み量はたぶん8TBぐらい。960 EVO 500GB は TBW 200TB なのでまだまだ使えるはず…

/home 用には WD Red Plus を選択。メインPCは基本的に電源を落とさない運用なので NAS 用です。仮想通貨関係の需要による価格高騰が8TB以上ではまだ続いているので4TBを。NAS 用 HDD は東芝が安いのですが、先日録画サーバ用に使ってみたところ、書き込み時のカリカリ鳴る騒音が予想以上にでかくて結局バックアップ用にしたことがあったので… 作業中のカリカリは気にならないのですが、バックグランウドで動かしたまま寝たり動画観たり音楽聴いたりする時はどうしても気になってしまうので。

電源は、旧PCではファンレス電源でしたが、さすがに Mini-ITX ケースでファンレス電源は危険なので、信頼性の高そうな Seasonic の電源を選びました。このへんはあまり詳しくないので 80PLUS GOLD 以上のものからブランドだけ見て適当に選んでます。

CPUファンも詳しくないのですが、35W 運用とはいえ設定がうまくいかなかった場合も考えて 65W 以上対応で、小型ケースで邪魔にならない高さの低いもので、それでいて騒音の少ないものを選んだつもりです。

ケースファンは耐久性と静音性に期待して Cooler Master MasterFan を1個だけ注文したのですが、実際にケースの小ささを目の当たりにして、これはファン1個ではキツそうだな… と思って急遽サブPCのケースファンの交換用にストックしていた山洋の San Ace 12cm を追加投入しました。

組み立て

組み立ては結構苦労して半日かかりました。それとは別に組み立てと設置のスペースを確保するために部屋を片付けるのに2日かかってますが…

まず小型ケースはやっぱり苦労しました。いきなりケースのパネルの開け方がわからなかったのですが、これは戸棚の扉などでよくあるジュラコンキャッチ?式の突起を穴にパチッとはめ込むタイプでした。説明書が入っている箱がケースの中にくくりつけてあって、開け方を調べるために説明書を見ようと思っても開けないと説明書が取り出せないという…

部品の組付け方法が独特なので何をするにも説明書の確認は欠かせません。それでも組付けの順番や制約条件は自分で判断しないとわからないところもあり、途中まで組んでから一度バラしなおしたりという場面もありました。

ケースの工作精度は悪くないですが、板金が薄めでヤワいところがあり、雑な扱いは禁物という印象を受けました。特に 3.5' HDD を取り付ける部分は剛性が足りない感じ。スペース的には2台取り付けられる余裕はあるのですが、重さ的に厳しい印象。

この 3.5' HDD の取り付けですが、今回は内蔵GPUしか使わないので縦に取り付ける長いグラフィックボードとは排他なのは構わないのですが、ケースの中に水平に渡す金具に片持ちで HDD を吊るす形で取り付けるという独特なもの。ゴム製ダンパーが付いているので単周期の振動は発生しにくいようですが、本当に大丈夫なのか…

こういう仕組みなので 3.5' HDD を使うなら横置きは厳禁です。横置きできるとはどこにも書いてないし横置き用の足も付いてないので、設置は縦置きのみですが、マザーボードの組付けのためにケースを横に倒すのも、3.5' HDD を取り付ける前にやらないとダメです。

ちなみに製造不良なのか作業中ミスでネジ穴をナメてしまったのか、3.5' HDD 取り付け金具のケースに組み付けるためのネジ穴の一つにネジを奥までねじ込めないというトラブルがありました。ケースの構造上ネジの頭が出ているとサイドパネルがはまらないはずなのと、ネジを奥まで締め込まないと金具がぐらついて強度的にも振動的にも不安すぎるので焦りました。

無理やりねじ込もうとしても組み付け用の小さな皿ネジは材質的に弱いようで、あまり力を入れると頭の溝が欠けてきて、これは万事休すか、と思ったのですが、付属のネジにサイズとネジピッチが同じで頭がより大きな平ネジがあって、こちらの方が頭が丈夫そうだったので、これをねじ込んでネジ穴をタッピングすることに成功、その後元のネジを奥までねじ込むことができました。

なお MESHLICIOS は 3.5' HDD を取り付けてもライザーケーブルの取り付け位置を変更することで短い PCIe カードなら取り付けられる仕組みですが、ライザーの取り付け位置が変わるため、マザーのスロットとライザーの距離が離れてしまい、付属のライザーケーブルでは届かなくなり、長いライザーケーブルは別売りです。

ケースファンはフロントに 12cm または 14cm を2個取り付け可能ですが、上述の通り1個で済ます予定が、ケースの中が想像以上に密になりそうだったので2個取り付けました。2つとも静音ファンなのと設置場所がデスクから少し離れているのでファンノイズはほぼ気にならないです。

あとはマザーボードへの CPU ファンの取り付けが苦労しました。C7 は樹脂製バックプレートにボルトを通してナットで締めて固定する方式ですが、バックプレートの穴にボルトがなかなか通りません。一本通すと別の一本が外れてしまいます。CPU のコアがむき出しだった時代なら絶対コア欠けしてたな、というレベルでクーラーがガチャガチャ傾いてましたが、最終的にはかなり思い切って力を入れて無事はめ込むことができました。

UEFI(BIOS)設定

組み立て後、モニターとキーボードとLANケーブルを繋いで起動。一回で無事起動しました。ケースにスピーカーが付いていなくて POST コードがわからないので起動後しばらく画面が表示されなくて焦りましたが、待っていると UEFI の画面が表示されました。メモリも SDD も HDD も認識され、ファンセンサーも正常、CPU温度も異常なし。

デフォルトで自動オーバークロックが有効になっているのですが、トラブルの元なのでメモリのクロックだけは定格に固定しておきました。あとは内蔵GPU用のメモリを 1GB 固定に設定して、起動時 Num Lock を無効に。

最初 cTDP の設定が見つけられなくて困っていたのですが、これは後から姉妹板?の A520M-ITX/ac のレビューに書いてあったのと同じ設定項目があって無事設定できました。アドバンスド / AMD CBS/NBIO Common Options / SMU Common Options で System Configuration AM4 を 35W に変更。

ベンチマーク

Ubuntu 20.04 インストール後簡単なベンチマークを実施しました。ハードウェアの性能比較のためではなく、自分の作業環境がどれだけ改善されたかを確認するため、あるいは設定ミス等で異常に性能が落ちていないかを確認するのが目的です。

まず Octane 2.0 です。Firefox 89.0 の新規プロファイルで測定しました。

旧メインPC 4376
新メインPC 19672
サブPC 17456

サブPCは Windows 10 で天体撮影と画像処理、RAW現像、動画編集、ゲームなどに使っているマシンで、CPU は Core i5 6600、GPU は内蔵グラフィック(RAM は 1GB 割当)、メモリは 16GB (DDR4 2133MHz)です。

旧メインPCの4.5倍、サブPCと比べても1割程度速い結果になりました。

次に GPU の性能を見るのに Unigine BenchmarkHeaven。古いベンチマークですが、新しいものは負荷が高すぎて低スペックPCの内蔵グラフィックでは差が分かりづらいのでは思ってこれにしました。

Basic Extream
旧メインPC 170 53
新メインPC 1498 416
サブPC 635 172

もう一つ Linux オンリーですが OepnGL のベンチマークの GL Mark 2 を。

default fullscreen
旧メインPC 930 598
新メインPC 6646 6038

fullscreen は 1920 x 1080 (Full-HD)です。

ECC メモリだと内蔵グラフィックが遅くなるという噂を聞いて心配していたのですが、旧メインPCの 7〜10 倍速いし、Core i5 6600 のサブPCと比べても倍以上速いので、ひょっとしたらこれでも性能出ていないのかもしれないですが、自分の用途には十分すぎるくらの性能は出ているのでこれでよしとします。

結局新メインPCは家にあるPCの中で最速のPCになりました。なお、cTDP が定格(65W)だった時にも同じベンチマークをやりましたが、上の結果とほとんど変わらない結果でした。CPU と GPU 両方負荷かけないと差は出ないのかも。

冷却能力

GPU温度(amdgpu-pci, edge)は Unigine Heaven 実行中に 52℃ まで上昇しました(室温 27℃)。

CPU温度(k10temp-pci, Tdie)は Linux kernel のビルドで全コアに負荷をかけるテストではで 65℃ まで上昇しました(室温 26℃)。まあ許容範囲。

SSDの温度(nvme-pci, Composite)はアイドル時で 39℃、kernel ビルド時で 52℃ まで上昇しました(室温 26℃)。壊れる温度ではないですが、高め。マザー付属のヒートシンクを付けているのですがいまいち冷えていません。

HDDの温度はアイドル時で 36℃、kernel ビルド時で 37℃ まででした(室温 26℃)。

ということで…

ハードウェア自体は問題なく使えそうです。SSD もっと冷えて欲しいですが、作業は基本 HDD 上でやるのでまず問題ないかな。HDD の振動が心配でしたが、今の所問題は起きていません。

Ubuntu 20.04 のインストールと各種ソフトウェアの設定ついては後日エントリをアップします。

追記(2021-07-04): ケースの USB-C 端子について

一つ書き忘れていたことがありました。SSUPD MESHLICIOUS には上面に2つ USB の口がついていて、その片方は Type-C なのですが、マザー側に繋ぐケーブルの先のコネクタが20ピンの小さいやつ(Key A とか Type-E とか呼ばれてるやつ)で、B550M-ITX/ac 上にはこれに対応するヘッダがありませんでした。

マザー上には USB 3.2 Gen1 の19ピンの大きなヘッダがあり、これを20ピンに変換するパーツは1500円程で売っていますが、ヘッダは1つしかなく、Type-A の方に繋いでしまっています。ということで、ケーブルを繋ぐ先がなくて、ケースの Type-C は飾りになってしまいました。

PCIe 拡張カードで Type-E を増設できるやつがあるのですが、背が低いのでブラケットを外してスロットの摩擦だけで固定して無理やり組み込めるかも?でもそうまでしてフロントの Type-C 使いたいかというと…

*1:惑星撮影でCMOSカメラから動画を撮る時の保存先に高速なディスクが必要になるので使っていました。