GNOME のデスクトップエントリー

これは GNOME に限らず,XDG 準拠のデスクトップ環境ならどこでも使える気がするんですが。 基本的にデスクトップエントリーのファイルは /usr/share/applications か /usr/local/share/applications に作ればいいと思うんですが,権限がないときとか, システムワイドにインストールしたくない場合とかがある。そのときは ~/.local/share/applications に置けばいい。~/.local は /usr/local に対応していると考えていいっぽいです。 あと,アイコン。デスクトップエントリーのファイルでは,Icon というキーでエントリー用のアイコンを 指定できるんですが,これは,テーマごとのアイコンのディレクトリから探索されます。 で,システムにインストールする場合は, /usr/share/icons か /usr/local/share/icons に 置けばよくて,ユーザーの場合は ~/.local/share/icons に置けばいい。 icons 以下にテーマのディレクトリがあるんですが,だいたいのテーマは hicolor を継承しているので, /usr/share/icons/hicolor に置けばいいみたいです。 そしてこれはちょっとハマったんですが,48x48 のアイコンは必ず準備しないと,他の解像度のを用意しても アイコンが認識されないみたいです。あと,画像のファイルは icons/テーマ/解像度(e.g. 48x48)/apps に置く。解像度のディレクトリに直接置いても認識されないです。

Software Design を買い始めてみた

今更ながら,技術評論社の Software Design を買い始めてみた。 前々から気になってはいたのだが,こういうのは一回買ったら毎回買わないといけなくなるので 今まで買わないでいた。 あと,今まで調べてなかったけど,年間購読にするとちょっとだけ安くなるみたいなのも あるっぽい。

Minecraft のマップを生成するやつを C++ で書き直し始めた

一月は行く,二月は逃げる,三月は去るみたいな,この時期にありがちな,でもちょっと早いような話をしつつ……。 でももう二月なんで早いですよね。まあそんなことはどうでもいい。 こないだ作った Minecraft のマップ画像を生成するやつを C++ で書き直し始めてみたりした。 でもまあ今日はそんなに作業できなかったのでほとんどヘッダファイル書いたら終わったみたいな感じだけど。 もともと Python で書いていたやつは anvil-parser というライブラリを使っていて, そのライブラリは NBT なる Minecraft の独自バイナリ形式のパーズには nbt という別のライブラリに 任せているっぽかった。nbt というライブラリのリポジトリを見に行ってみたら,チャンク読むところとかも実装されていて, なんかマップを生成する example も存在したんですね。うーん。まあいいやろ。 で,anvil-parser ってのはそのライブラリのチャンクの実装とかは使ってなくて, その部分は独自でやってるみたいでした。まあ古い形式にしか対応してなさそうだったのでそのせいかな, という感じがします。

アプリが Google Play から削除された

最近,というかここ1年くらい Android アプリは全然作ってなくて, 今ストアにあるやつもフェードアウトしつつある。でも意図せずタイトルが釣りになっているのか, SecureScreen というアプリは少しではあるが,毎日コンスタントにダウンロードされてるっぽかったので, 消されないように注意しつつ見守っていた。でも,アクティブに Android やってないと気づいたら消されているので, そのたびに Google Play Console を開いてストアの掲載情報をアップデートするのはかなり面倒くさい。 で,今回は12月くらいに削除したぞとメールが来ていて,面倒なので放置していたのだが, ついに今日,掲載情報をアップデートした。今回のはよくいつものに増してよく分からなかった。 ただ,アクティブに開発してないといつの間にか消されているシステムは必要なのかなと思ったりもしていて, それはなぜかというと,アクティブに開発されていないアプリは UI はさることながら使ってた API も古いものになっていき,ストアにゴミがあふれる結果になる気がするからだ。 そういう意味では,過去1年にアプリのアップデートがない場合は削除するみたいな仕組みを作ってもいいような気がする。

PAM で遊んでみた

PAM で遊んでみた。PAM ってのは Pluggable Authentication Manager の略らしく, Linux のユーザー認証のしくみで,これの設定次第でユーザーが自由に認証の方法を変更できる。 例えばパスワード認証の代わりに指紋認証を使いたいみたいな場合もこの PAM のモジュールで実現できるはず。 当たり前だが,設定次第で認証システムを破綻(?)させることも可能で,常にログインできる PAM モジュールを使ってパスワードなしでログイン可能にしてしまったり,逆に絶対にログインできない PAM モジュールで全ユーザーを締め出したりもできてしまう。てなわけでまあ割とヤバイ部分で遊んだ。 PAM のモジュールを書くのはとても簡単な部類で,常にログインできるやつとかだと下みたいなコードで できたりする。

Python の並列処理とか

先日作った Minecraft のマップ画像を生成するやつが遅すぎる(7min/region)のをなんとかしたいので, Python で並列処理をする方法を調べて使ってみた。 Thread concurrent.futures.ThreadPoolExecutor を使うというもの。別に pool 使わなくてもいいけど。 でもまあ pool 使った方がいいでしょってことで。 この方法では結局 GIL のせいか全然速くならなかった。むしろ遅くなった。たしか 11min/region とかになった気がする。 Python で Thread を使うのは,主に IO がネックになってる場合っぽい。IO の待ち時間は GIL が解除されるけど,その他の状況では GIL のせいで並列処理というよりむしろ 並行処理になってる。 Process concurrent.futures.ProcessPoolExecutor を使うというもの。 fork できる環境(主にUNIX 系の OS?)ではデフォルトで fork になるって書いてあった。 これがなかなか速くて,なんでか 2 つしかプロセス起動してないのに半分未満の時間で処理できた。 Windows とかでは fork できないから遅いのかもしれないけど,Windows 使ってないのでよくわからない。

Hugo を使い始めた

サイトに関してはここ半年くらいで elisp や bash で CMS 書いたりして迷走していたのだけど, 結局 hugo 使う感じになった。自前で実装するモチベーションが消えてしまったので。 多分当分変えることはないと思う。なんで今まで自分で実装していたかというと, 自分で実装して使うのが美徳みたいな考えがあったからだ。でもモチベーションが消えたので仕方ない。 この Hugo ってやつは本当に快適で,自分では何もしなくていい。ただ,hugo new foo/bar.md した後に表示されたファイル名をエディタで自分で開かないといけないのは割と不満なので, 暇があるときに適当にプルリクでも投げてみようかしらと思っていたらどうやらそういうオプションがあるっぽい。 あと,この Hugo の便利な点は,ビルトインサーバーの使いやすさにある。 このサーバーは生成した HTML を serve してくれるだけでなく,ファイルの更新を監視して, ページをリロードさせたりしてくれる。雑に見た感じだと WebSocket で実装されているみたい。モダン〜。 テーマもいろいろあるけれど,簡単そうでそこそこデザインが良ければいいやという感じで選んだ。 ただ,数式を簡単に表示できるという機能に関しては譲れないところなので, そういう条件で選んでいたら選択肢は割と絞られてきた。 複雑なやつは高機能ではあるんだけど,設定が面倒だったりシンタックスを覚えないといけなかったりと, 記事を書くコストが高くなる気がして良くないな,と。

さくらインターネット

から数日前に,お試し期間が終わるから VPS 代をクレジット決済するぞというメールが来ていた。 でも,決済自体は申し込んだ日に行われていたので怖くなった僕はさくらインターネットにメールした。 そうすると,決済は済んでいるので今回はメールで来たみたいな引き落としはなくて,次回は来年の 12 月 ですということで安心した。さくらインターネットってほら,なんか対応が雑みたいなので有名なので 怖かったんですよね。でもメールしたらその日のうちに返信来てた。 そういや,さくらインターネットがいつメンテナンスするって言い出すかっていうのがいつも怖くて, それはなんでかというとメンテナンスで壊されて自分で OS を再インストールしろと言われたという おそろしい話を Web でよく見るからです。OS インストールするの割と面倒くさかった,というか かなり苦労してインストールしたので,もう一度インストールしろって言われるとちょっと辛すぎるな,と。

Minecraft のセーブデータから地図を生成するやつを作った

VoxelMap というクライアント Mod を使っていて,この Mod は地図を PNG に書き出したり できるのだけれど,このところ書き出すところでクラッシュしていたので,セーブデータから 地図を生成するやつを自分で作ることにした。これを実現するためには Minecraft のセーブデータ をパーズする必要があるので,GitHub で適当に検索していたら良さげなのを発見。 matcool/anvil-parser 実際良いのかは分からないけど,なんかそこそこ動いてそうで,且つ最終コミットの日付が最近だったので これを使うことにしてみた。で,example っていうディレクトリがあって,一番上の非空気なブロック を画像に書き出すというものがあったので,それを参考にしながら作った。 作ってから分かったけどめちゃくちゃ遅い。生成にかかる時間はリージョンの中で生成されているチャンクの 数に依存するところはあるんだけど,だいたい 1 リージョン分の画像を生成するのに手元のラップトップだと 7 分くらいかかる。Python のオーバーヘッドだろうか。(知らんけど)

Minecraft のマップを表示するサイト作ってみた

なんかここに 画像は VoxelMap という MOD が生成したやつで,JS は数ヶ月前に作った「洪水シミュレータ」という訳わからん やつを改造しただけなので適当。あとはいつもの GitHub に push したら自動で更新されるやつを 設定した。これがないと更新する気にならないので。