ブロックの高さと名前が出せるようになった。 パーサーをサーバーとして実行てきるようにして,PHP で Unix ドメインソケットで話させる みたいな感じにした。
サーバーの実装だけど,最初 wait してなかったせいで,大量のゾンビプロセスを作ってしまった。 これは,犠牲となる子プロセスを作ったあと,そのプロセス内でプロセスを立ち上げて レスポンスを返す感じにして,即座に終了する最初の子プロセスをwaitするようにして解決した。
自分で買うぞと思いながら作った。
https://suzuri.jp/kofuk/3008828/t-shirt/s/white
短いコードが書かれている。内容は以下だ。
#include <stdio.h> int main(void) { int i,a; while(a<5) {a=a+1; printf("Hello, world!\n"); }} ツッコミどころが多すぎるので完結に表すと,こんなに短いのにクソ汚くて, しかも未定義動作まで踏んでしまうというコードになっている。
はい,しょうもない。
僕がブルジョワジーになった日に買おう。(来るのか?)
Google Chrome Light ってやつを入れた。デフォルト厨なので(?)今まではデフォルトのままで使ってきたけど急に変えたくなったので。 今は Google Chrome 使ってないけどあのモダンなデザインは割と好き。
あと,タブがウィンドウの枠に直接描画されるようにした。GNOME だとトップバーがあって, ウィンドウの枠があって,それから Web ページって感じだとかなり狭いので。 これが Firefox 標準のカスタマイズってところで変えられることに気づいてなかった。
で,最終的にこういう感じ。
そういや今日やったのではないけど,新しいタブのページの中の最近アクセスしたページ の一覧とかは使ったためしがないので設定で消してる。
そういや GNOME のテーマは逆にデフォルトに戻した。 今まではダークを使っていて,ライトよりダークの方が好きなんだけど, webkit2gtk でウェブページ内にもダークテーマが部分的に適用されたりして都合が悪かったので。
これは 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 を買い始めてみた。 前々から気になってはいたのだが,こういうのは一回買ったら毎回買わないといけなくなるので 今まで買わないでいた。 あと,今まで調べてなかったけど,年間購読にするとちょっとだけ安くなるみたいなのも あるっぽい。
一月は行く,二月は逃げる,三月は去るみたいな,この時期にありがちな,でもちょっと早いような話をしつつ……。 でももう二月なんで早いですよね。まあそんなことはどうでもいい。
こないだ作った Minecraft のマップ画像を生成するやつを C++ で書き直し始めてみたりした。 でもまあ今日はそんなに作業できなかったのでほとんどヘッダファイル書いたら終わったみたいな感じだけど。 もともと Python で書いていたやつは anvil-parser というライブラリを使っていて, そのライブラリは NBT なる Minecraft の独自バイナリ形式のパーズには nbt という別のライブラリに 任せているっぽかった。nbt というライブラリのリポジトリを見に行ってみたら,チャンク読むところとかも実装されていて, なんかマップを生成する example も存在したんですね。うーん。まあいいやろ。 で,anvil-parser ってのはそのライブラリのチャンクの実装とかは使ってなくて, その部分は独自でやってるみたいでした。まあ古い形式にしか対応してなさそうだったのでそのせいかな, という感じがします。
最近,というかここ1年くらい Android アプリは全然作ってなくて, 今ストアにあるやつもフェードアウトしつつある。でも意図せずタイトルが釣りになっているのか, SecureScreen というアプリは少しではあるが,毎日コンスタントにダウンロードされてるっぽかったので, 消されないように注意しつつ見守っていた。でも,アクティブに Android やってないと気づいたら消されているので, そのたびに Google Play Console を開いてストアの掲載情報をアップデートするのはかなり面倒くさい。
で,今回は12月くらいに削除したぞとメールが来ていて,面倒なので放置していたのだが, ついに今日,掲載情報をアップデートした。今回のはよくいつものに増してよく分からなかった。
ただ,アクティブに開発してないといつの間にか消されているシステムは必要なのかなと思ったりもしていて, それはなぜかというと,アクティブに開発されていないアプリは UI はさることながら使ってた API も古いものになっていき,ストアにゴミがあふれる結果になる気がするからだ。 そういう意味では,過去1年にアプリのアップデートがない場合は削除するみたいな仕組みを作ってもいいような気がする。
PAM で遊んでみた。PAM ってのは Pluggable Authentication Manager の略らしく, Linux のユーザー認証のしくみで,これの設定次第でユーザーが自由に認証の方法を変更できる。 例えばパスワード認証の代わりに指紋認証を使いたいみたいな場合もこの PAM のモジュールで実現できるはず。 当たり前だが,設定次第で認証システムを破綻(?)させることも可能で,常にログインできる PAM モジュールを使ってパスワードなしでログイン可能にしてしまったり,逆に絶対にログインできない PAM モジュールで全ユーザーを締め出したりもできてしまう。てなわけでまあ割とヤバイ部分で遊んだ。
PAM のモジュールを書くのはとても簡単な部類で,常にログインできるやつとかだと下みたいなコードで できたりする。
先日作った 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 使ってないのでよくわからない。
サイトに関してはここ半年くらいで elisp や bash で CMS 書いたりして迷走していたのだけど, 結局 hugo 使う感じになった。自前で実装するモチベーションが消えてしまったので。 多分当分変えることはないと思う。なんで今まで自分で実装していたかというと, 自分で実装して使うのが美徳みたいな考えがあったからだ。でもモチベーションが消えたので仕方ない。
この Hugo ってやつは本当に快適で,自分では何もしなくていい。ただ,hugo new foo/bar.md した後に表示されたファイル名をエディタで自分で開かないといけないのは割と不満なので, 暇があるときに適当にプルリクでも投げてみようかしらと思っていたらどうやらそういうオプションがあるっぽい。
あと,この Hugo の便利な点は,ビルトインサーバーの使いやすさにある。 このサーバーは生成した HTML を serve してくれるだけでなく,ファイルの更新を監視して, ページをリロードさせたりしてくれる。雑に見た感じだと WebSocket で実装されているみたい。モダン〜。 テーマもいろいろあるけれど,簡単そうでそこそこデザインが良ければいいやという感じで選んだ。 ただ,数式を簡単に表示できるという機能に関しては譲れないところなので, そういう条件で選んでいたら選択肢は割と絞られてきた。 複雑なやつは高機能ではあるんだけど,設定が面倒だったりシンタックスを覚えないといけなかったりと, 記事を書くコストが高くなる気がして良くないな,と。