面倒臭い失敗をしてしまった(戻せるのでセーフ) pic.twitter.com/GSo48SZ9Vw
— kofuk (@man_2_fork) August 17, 2020 覚えていたのでパッと対処できたけど忘れないとも限らないのでメモ。grub じゃない環境での方法は分からない。
再起動する。 GRUB のメニューが表示されたら eを押すと起動のコマンドを編集できる。 linux から始まる行での後ろに init=/bin/bash と書き加える。 Ctrl-x で起動する。 Bash が起動しているので何でもアリの無法地帯。 終わったら exec /sbin/init して起動する。 init を起動せずに Bash から exit すると kernel panic するので注意。
ウェブのいろんなところに書いてあるけどレジストリをいじる。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00 CapsLock を読んだら Ctrl として解釈するみたいなマップになっている。 空で書けって言われても無理。
バイトオーダー依存だとか。いくらなんでもイケてなさすぎる。
なんかおかしいな〜と思いつつ何もやってなかった。 Noto の CJK フォントはインストールするだけじゃなくて自分で symbolic link 作ってやる必要あり。
$ ln -s /etc/fonts/conf.avail/70-noto-cjk.conf /etc/fonts/conf.d/. これをやっていなかったので,あらゆるフォントが Noto Sans CJK JP で描画されていて, ソースコード部分に web font 使ってないサイト(つまり自分のブログ)のソースコードとかが死んでた。
開発者ではなく一ユーザーとして。メジャーリリースでいろいろ変更があるようだ。 NEWS.27 のファイルに変更の長いリストがある(visible changes って書いてあるので 内部的にはもっといろいろ変わっているということだが)。
JSON のパースがネイティブになる LSP が広がったことで JSON をパースすることが多くなり,高速化を図ったのだろう。
設定ファイルをホームディレクトリに直接置く必要がなくなった 今までは設定ファイルは .emacs.d の中に設定ファイルを置いていたが, $XDG_CONFIG_HOME/emacs に置けるようになる。 多分デフォルトの XDG_CONFIG_HOME であれば ~/.config/emacs になると思う。 ホームディレクトリが散らからないので良い(ドットファイルだったのでさほど問題ではなかったが)。
package-initialize する必要がなくなった init.el を読む前にインストールしているパッケージが読まれるようになったらしい。
数ヶ月前から送ってくるようになった気がする。前もあったのかもしれないが気づかなかった。 こういうのを見ると bot とか抜きで意外と見られているんだなという気持ちになる。
レポートによると Surface Go に Ubuntu を入れた話が最も見られていて, 他はちょこちょこという感じらしい。 実際に検索してみるとなぜかかなり上位に出てきて,まともにまとめてもいない長いだけの糞記事 なので申し訳ない気持ちになる(Qiita にかなりの良記事を書いている人がいるのでセーフ)。 僕がこれを書いた当初はウェブ上に本当に情報がなくて僕の書いた記事程度の情報でも 相対的に価値があったかもしれないが。 ちなみにこの検索のレポートで Surface Go 2 なるデバイスが出たことを知った。 まあ僕は Surface のようなキーボードが駄目なデバイスを買うようなことはないだろう。
ということを最近知った。ハイバネートというのは現在のメモリの状態をハードドライブに永続化して CPU やメモリへの電源供給を止めることだ。
起動時のパフォーマンス改善のためらしく,試しにハイバネートさせない設定にしてみたら たしかに起動が少し遅くなる。
シャットダウンしたときにシャットダウンするようにする方法を簡単に説明すると,
コントロールパネルを開く(検索などの機能を使えば簡単に開ける) 「システムとセキュリティ」を開く 「電源オプション」を開く 「電源ボタンの動作の選択」(左側のメニュー)を開く 「現在使用可能ではない設定を変更します」のリンクをクリックする シャットダウン設定の中から「高速スタートアップを有効にする」のチェックを外し,変更を保存する ハイバネートの設定になっている場合,デュアルブートなどで別の OS の環境から ストレージを触ると内容が破壊されることがあるらしい。おそろしあ。
今日初めてテーマについている検索というものをやってみたが, タグの一覧があるせいで検索がまともに機能しない。 たとえば c++ などと検索するとタグの部分にマッチしてしまって 全ページがヒットする。
Qt は全く使ったことがなかったが,ここまでできれば簡単なことはリファレンスだけで できそう。
.ui ファイルでレイアウトを作る方法や QtCreator を使う方法(まあこれも間接的に .ui を使う 方法だといえると思うが)ではなく,とりあえずコードでレイアウト組む方法でやってみた。 ちょっとした GUI を作るのに別ファイルが必要だったりテキストファイルを埋め込んだり (バッファから読ませることができるのかは調べてないので分からない)というのは 面倒臭いと思ったので。
というわけで Hello world。
#include <QApplication> #include <QLabel> int main(int argc, char **argv) { /* Widget を作る前に QApplication を作っておく必要あり */ QApplication app(argc, argv); QLabel l("Hello"); l.setWindowTitle("Hello world!"); l.show(); return app.exec(); } コンパイルは:
$ g++ -fPIC $(pkg-config --cflags --libs Qt5Widgets) foo.cc これで Hello と書かれた Hello world というタイトルのウィンドウが出てくる。 まともにレイアウトを作るならばなんとか Layout とかに addWidget したりしていき, 最後にルートの Widget に setLayout していくことになる。
UNIX のコマンドで(本来の)機能が誤解されがちなコマンドとして cat や touch が有名な 気がするが,env もそのひとつだと思う。env の使われ方としては,単独で実行して設定されている 環境変数を見たり,shebang で bash (やその他 executable)のパスをハードコードするのを避けるために
#!/usr/bin/env bash といった感じで使われるのが多分ほとんどのような気がする。
env の本来(?)の機能は環境変数をいじってからコマンドを実行するといったところだ。 なので Bash から実行するときは env なしで
FOO=bar command といった感じで実行しているのをこういった書き方が使えない環境で実現したいと思ったときに
env FOO=bar command というコマンドで実行すると等価なことができるということだ。
NMake は並列でビルドできないという問題があるので,JOM という NMake のクローンを使う。 これは Qt の開発元が作っているらしい。
ビルドするのは面倒なので適当に公式からバイナリ配布を拾ってくる(ソースコードかと思ってダウンロードしてみたらバイナリだった)。 で,面倒なので PATH を通す。こういう具合でどんどん PATH を通していくと膨大な PATH になってしまう訳ですね。
で,CMake で JOM 用の Makefile を生成する。
$ cmake -G"NMake Makefiles JOM" .. これで
$ jom /J 8 とかすると 8 並列でビルドされる。おしまい。