サイトに関してはここ半年くらいで elisp や bash で CMS 書いたりして迷走していたのだけど, 結局 hugo 使う感じになった。自前で実装するモチベーションが消えてしまったので。 多分当分変えることはないと思う。なんで今まで自分で実装していたかというと, 自分で実装して使うのが美徳みたいな考えがあったからだ。でもモチベーションが消えたので仕方ない。
この Hugo ってやつは本当に快適で,自分では何もしなくていい。ただ,hugo new foo/bar.md した後に表示されたファイル名をエディタで自分で開かないといけないのは割と不満なので, 暇があるときに適当にプルリクでも投げてみようかしらと思っていたらどうやらそういうオプションがあるっぽい。
あと,この Hugo の便利な点は,ビルトインサーバーの使いやすさにある。 このサーバーは生成した HTML を serve してくれるだけでなく,ファイルの更新を監視して, ページをリロードさせたりしてくれる。雑に見た感じだと WebSocket で実装されているみたい。モダン〜。 テーマもいろいろあるけれど,簡単そうでそこそこデザインが良ければいいやという感じで選んだ。 ただ,数式を簡単に表示できるという機能に関しては譲れないところなので, そういう条件で選んでいたら選択肢は割と絞られてきた。 複雑なやつは高機能ではあるんだけど,設定が面倒だったりシンタックスを覚えないといけなかったりと, 記事を書くコストが高くなる気がして良くないな,と。
から数日前に,お試し期間が終わるから VPS 代をクレジット決済するぞというメールが来ていた。 でも,決済自体は申し込んだ日に行われていたので怖くなった僕はさくらインターネットにメールした。 そうすると,決済は済んでいるので今回はメールで来たみたいな引き落としはなくて,次回は来年の 12 月 ですということで安心した。さくらインターネットってほら,なんか対応が雑みたいなので有名なので 怖かったんですよね。でもメールしたらその日のうちに返信来てた。
そういや,さくらインターネットがいつメンテナンスするって言い出すかっていうのがいつも怖くて, それはなんでかというとメンテナンスで壊されて自分で OS を再インストールしろと言われたという おそろしい話を Web でよく見るからです。OS インストールするの割と面倒くさかった,というか かなり苦労してインストールしたので,もう一度インストールしろって言われるとちょっと辛すぎるな,と。
VoxelMap というクライアント Mod を使っていて,この Mod は地図を PNG に書き出したり できるのだけれど,このところ書き出すところでクラッシュしていたので,セーブデータから 地図を生成するやつを自分で作ることにした。これを実現するためには Minecraft のセーブデータ をパーズする必要があるので,GitHub で適当に検索していたら良さげなのを発見。
matcool/anvil-parser
実際良いのかは分からないけど,なんかそこそこ動いてそうで,且つ最終コミットの日付が最近だったので これを使うことにしてみた。で,example っていうディレクトリがあって,一番上の非空気なブロック を画像に書き出すというものがあったので,それを参考にしながら作った。
作ってから分かったけどめちゃくちゃ遅い。生成にかかる時間はリージョンの中で生成されているチャンクの 数に依存するところはあるんだけど,だいたい 1 リージョン分の画像を生成するのに手元のラップトップだと 7 分くらいかかる。Python のオーバーヘッドだろうか。(知らんけど)
なんかここに
画像は VoxelMap という MOD が生成したやつで,JS は数ヶ月前に作った「洪水シミュレータ」という訳わからん やつを改造しただけなので適当。あとはいつもの GitHub に push したら自動で更新されるやつを 設定した。これがないと更新する気にならないので。
ターミナル内で Emacs じゃないです。Emacs 内でターミナルです。いつも軽い用途であれば M-x shell とかを使って, ちゃんと使いたいときは GNOME のワークスペースを増やしたりしてターミナルを使っているんですが, M-x shell はターミナルとしてはかなり機能が貧弱だと思っていて,ワークスペースを切り替えるのはターミナルを 見ながら書けなかったり Emacs のヤンクみたいなことができなかったり残念なので,Emacs 内でもっと 便利に shell にアクセスできないかなと。で,なんか M-x の補完を眺めていたら, term ってやつを 見つけて,適当に試してみたら,色もちゃんとついたりして意外と良さそうだと。 ちゃんと使うとなるとウィンドウを分割して使ったりできないと不便なので,やってみようと思ったら, そのへんのキーもターミナルに持っていかれるらしく,なんか残念だなと思いました。 あとヤンクとかもできない。なんじゃこりゃ。存在意義が。
なんか,前は Emacs Lisp で動く CMS でブログを動かしていたのだけど,なにしろ Emacs Lisp で拡張していくのはあまりにも苦行なので VPS を移行するのと同時に書き直すことにした。 VPS を移行したといっても今も昔もさくらの VPS なので,その部分は変わってないのだけど, 前は Minecraft のサーバーを動かす必要があってそこそこハイスペックなものを借りていて毎月の出費が痛かったので, それを小さいものに移行したという話。さくらインターネットはスケールアップだけじゃなくて ダウンする方も実装してくれていいのではと思う。(そういや最近さくらインターネット炎上してたなあ。。。)
で,CMS を書き直した話だけど,変な言語で書きたいけどあまり辛い思いはしたくないな, ということで Bash で動くやつを書いてみた。といってもなんか結局割と苦労したが。 辛い思いをしたくないのであれば Wordpress などといった既存の CMS を使ったらいいじゃないかという話 なんだけど,ウェブインターフェースで記事を書かないといけないところとか RDB で管理されるところとか が後で動かしたくなったときに辛そうな気がして,なんとなく気が進まず,自前で用意している。 ブログサービスなんかを使うという手もあるけどその場合,前者の理由に加えて,他人の場所を使っているということで S/N 比を気にしてしまうところがあって,やっぱり自分で作るという結論になってしまった。 まあ Emacs で動かしていたころも S/N 比どうでもいいにも関わらずあまり書いてなかったわけではあるが。
ウィンドウのボタンの配列を変更 Unity の頃の Ubuntu に慣れすぎて Windows なレイアウトに慣れないので, mac 風のレイアウトに変更.
※ 決して Windows が嫌いだからとかそういう理由ではない.
$ gsettings set org.gnome.desktop.wm.preferences button-layout 'close,minimize,maximize:appmenu' CapsLock を潰す 鬱陶しいので. あとついでに Caps の位置に Ctrl があるのに慣れといた方がいいかな, と.
$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']" gsettings ではないけど,linux console で CapsLock を Ctrl として使うには, /etc/default/keyboard に以下を追加する.
XKBOPTIONS="ctrl:nocaps"
Google からダウンロードできる Nexus用 (もしくは Pixel用) のFactory Image は Linux でそのままマウントすることはできません.
$ sudo mount system.img system mount: /home/kofu/Downloads/razorg-JLS36C/tmp: wrong fs type, bad option, bad superblock on /dev/loop6, missing codepage or helper program, or other error. これをマウントするためには, simg2img というコマンドを利用します. APT で入ります.
$ sudo apt install simg2img $ simg2img system.img out.img $ sudo mount out.img system simg ってのは何かというと, img の空の領域を圧縮してサイズを小さくしたものらしい (simg2img の simg とは何か? (make_ext4fs コマンドなど)).
Ubuntu (をはじめ多くの GNU/Linux ディストリビューション) では C 言語のマニュアルページは最初から標準で入っていますが、 C++ のマニュアルページは入っていません (C++ にはマニュアルページを見る文化がないのだろうか…)。 という訳で、自分でインストールする必要があります。
$ sudo apt install libstdc++-8-doc で、見るときは、
$ man std::vector みたいな感じで std:: までつけないといけないみたいです。
まずはじめに、Surface Go に Ubuntu をインストールするモチベーションは何かというと、 Surface Go を買ったときにとりあえず (とりあえずかどうかは議論が分かれるところですが) 入っている OS は当然ながら Windows 10 なわけですが、ずっと GNU/Linux の何らかのディストリビューションを使ってきた 僕としては Windows がどうしても使いにくかったということです。Surface Go は大きさとしては なかなかコンパクトで持ち運びしやすいのでこのサイズで OS が Windows じゃなかったら (婉曲?) 最高だなと思ったってのもあります。
まあそんなわけで (まとまらなかった) インストールの手順を書いこうと思います。
インストーラの USB をつくる ここが一番大変だったかもしれません。 自分の場合、USB の Type A から Type C に変換するアダプタを持っているので、それを使ってインストール用の iso を焼いた USB をつないでいたんですが、どうにもこうにも起動しない。最終的には起動させられたんですが、 いろいろ試しすぎてどれが要因なのか分からないです。 何のおかげでうまくいったのかを調べようと思わなくもなかったんですが、それまでの試行錯誤で疲労困憊していて、 そのモチベーションがなかったので。 という訳で、とにかく試したことを書きます。