Hyper-V 上の Fedora が grub2 メニュー後の解像度が切り替わるタイミングで固まる

普段から開発に使っている Hyper-V 上の Fedora 27 が起動しなくなってしまったので、その一時回避策をメモしておきます。

通常 Fedora を起動すると、初めに grub2 のメニューが表示され、タイムアウトで自動的にメニュー項目が選択されると、画面解像度が切り替わって、グラフィカルな進捗バー(スプラッシュ画面と呼ぶらしい)が表示され、その後、ログイン画面が表示されるといった流れになるかと思うのですが、画面解像度が切り替わるタイミングで以下のように上辺に赤いノイズの入った画面が表示され、そのまま固まってしまうという現象が起こりました。
Hyper-V 上の Fedora 27 が起動時に固まったときの様子

Firefox Quantum & ツリー型タブでタイトルバーにタイトルを表示する方法

ツリー型タブを使うとタブをサイドバーに表示できるようになってとても便利なのですが、Firefox Quantum 版の場合、ブラウザの制約から上にあるタブも残ってしまいます。
そこで、userChrome.css を使って Firefox 自体に独自の CSS をあてると、このタブを非表示にすることができるのですが、そうすると今度はタイトルバーに何も表示されずデッドスペースが生まれます。
タブブラウザの欠点として、タブ幅の制約からページタイトルを全て表示しきれないというところが前から不便で気になっていたのですが、折角あいたデッドスペースがあるので、そこにページタイトルを表示する方法がないか調べてみました。

Firefox Quantum は前のバージョンと比べるとカスタマイズがしにくくなっていて、アドオンを入れたら一発で解決というわけにはいきません。
ただ、userChrome.css を使って見た目を調整することはできるので、Firefox がもともと用意している要素をうまく使って、この要件をうまく実現できないか試行錯誤してみました。

AutoHotKey を更新したら Invalid Hotkey といわれた

Windows 10 のクリーンインストールに伴って、色んなソフトを入れ直していたのですが、その中で AutoHotKey 1.1 系の最新版を入れたところ、今まで使っていたスクリプトが読み込めなくなってしまいました。

読み込めなくなったのは以下の設定

; Ctrl + 無変換 で ESC キー
^vk1Dsc07B::Send, {Esc}

調べてみると vk__sc___ という表記の仕方に仕様変更があったみたいで、修正が難しそうだったので、ひとまず AutoHotKey のバージョンを最後のこの表記が有効だった 1.1.26.01 に戻したら、無事スクリプトが読み込まれました。

古いディスクからレジストリ情報を抽出

Windows 10 をクリーンインストールしたので、インストールしていたソフトを片っ端からインストールし直しています。

最近は C:\Users\<ユーザー名>\AppData\Roaming に設定を保存してくれているものが多いので、ここのファイルをコピーするだけで半分くらいのソフトは復元できました。
ただ、レジストリに設定を保存しているタイプのソフトは復元が難しく、今まで不可能だと思い込んでいたのですが、レジストリの情報はファイルに保存されているらしく、そのファイルから値を取り出せば、設定を復元できるようです。

クリーンインストールしたらブルースクリーンが出なくなった!

ブルースクリーンが出て Windows が起動しなくなったのですが、新しい SSD に Windows 10 をクリーンインストールしたら、ブルースクリーンが出なくなりました。

Windows 10 のインストール時に、インストール先のドライブを選択するところで 0x80300024 というエラーが出たのでググってみたら、どうやらドライブを接続する順番に制約があるらしく、それを直したら無事インストールできました。

もしかしたらブルースクリーンの INACCESSIBLE BOOT DEVICE の原因ってこれだったのかも……?

ブルースクリーンが出て Windows が起動しなくなった話

Windows 10 にしてからというもの、しばしばブルースクリーンが現れるようになり、気にはしてたんですけど原因が解らず放置していたら、Intel CPU なのに Meltdown/Spectre 脆弱性に対応する Windows Update で INACCESSIBLE BOOT DEVICE というブルースクリーンが出て起動しなくなってしまいました。

以下の記事の方法に従って、原因と思われるプログラムをアンインストールすることで一時は起動するようになったのですが、数日後、またブルースクリーンが現れ、また起動しなくなってしまいました。

自作 PC なのでパーツを最小限にして試してみたりもしたのですが、最小構成 + C ドライブの SSD でもブルースクリーンが発生したので、原因として思い付くのは……

  • Windows がソフトウェア的に壊れている(ただし修復はできなかった)
  • C ドライブのファイルシステムが壊れている(ただし chkdsk では問題は発見されなかった)
  • C ドライブに使っている SSD が壊れている(ただし S.M.A.R.T は正常)
  • マザーボードが壊れている
  • CPU やメモリなどのその他のパーツが壊れている

で、まず試せるのは新しい SSD を使って OS をクリーンインストールすることかなあ。
それでダメだったらマザーボードごと一式買い直すか……?

CentOS 7 で Let's Encrypt が使えなかったときにやったこと

Let's Encrypt で SSL 証明書を取得するための certbot が CentOS 7 でうまく動かなかったので、そのときにやったことをメモしておきます。

yum でインストールした certbot コマンドを実行すると、次のようなエラーが発生してしまいました。

ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

pyOpenSSL というモジュールを v0.14 以上にアップデートしてねと書いてあります。
pyOpenSSLcertbot と一緒に yum でインストールしたものが入っていて、バージョンは v0.13.1 でした。
これをアップデートすればよさそうです。

Python モジュールのアップデートには pip コマンドを使います。

$ sudo pip install --upgrade --force-reinstall pyOpenSSL

このとき --force-reinstall を付けないとアップデート後も同じエラーが出てしまいました。

以上で certbot コマンドが使えるようになりました。

Perl でファイルの更新日時を Time::Piece で取得する

もしかしたらこれらをまとめてやってくれるモジュールがあるのかもしれないけど……

use common::sense;
use Time::Piece qw/localtime/;

my ($accessed_at, $updated_at, $created_at) = map { scalar localtime($_); } (stat $file)[8..10];

stat 関数で取得した、ファイルのアクセス日時,更新日時,作成日時を map を使って Time::Piece オブジェクトに変換しています。

初めスカラーコンテキストの指定をしてなくてハマったのでメモしておきます。

PuTTY+tmux 環境で Ctrl+矢印 が効かなかった原因が解ったかも

tmux で <Ctrl+矢印> を使いたい場合は、.tmux.confに以下のように設定しろという記事をよく見かけます。

set-window-option -g xterm-keys on

しかし、PuTTY から SSH アクセスしている時に、この設定をしていても、<Ctrl+矢印> が tmux の中で実行しているプログラムにうまく伝わってくれなくて、そのために Ctrl + 左右キーで vim のタブ切り替えをする という設定が使えず、もう何年も tmux を使うのを諦めていました。

ところが、ようやくxterm-keysの意味と、PuTTY を使った環境でなぜこの設定が効かなかったのかが解ってきたので、改めてここに記しておきます。