ImageMagick の image stack operator

ImageMagick のコマンドラインオプションはスタックに画像を積み上げていって、 その画像に対してなんかやるみたいな体系になっている。 そのスタックの操作についてメモ。 ( 新しくスタックを作る。 スタック作っただけじゃあんまり意味なくて、何か画像を乗っけることで他のオペレータにも スタックが使われるようになるっぽい (このへんの挙動がよく分からん)。 ) 今いるスタックに乗っかってる画像をメインのスタックに乗っける。複数の画像がいた場合は全部乗る。 -delete スタックから、指定したインデックスの画像を消す。負数を指定すると後ろから。 ハイフンで範囲指定もできる。 -insert スタックの一番上の画像のインデックスを指定したインデックスに変える。 負数だ

lighttpd でローカルでいろいろやる場合のテンプレート

あけましておめでとうございます (社交辞令) ってことで、lighttpd で適当にローカルにサーバ立てたりする場合のテンプレートをメモ (新年とか関係ないけどそのくらいのもの)。 Python の http.server モジュールとかでも静的なファイルを見せるとかとおまけの CGI くらいの機能ならあるんだけど、なんかいろいろ足りなかったりするので。 コマンドラインでいい感じになるように起動する デフォルトだとデーモンになってしまってウザい (は?)。 $ lighttpd -D -f path-to-conf.conf FastCGI server.port = 8000 server.document-root = "<適当>" server.modules += ( "mod_fastcgi" ) server.error-handler-404 = "/" fastcgi.server = ( "/" => ( ( "socket" => "<ソケットへのパス>", ) ) ) WebDAV ずっと立てておくわけではないので認証とかは

readlineの前のリリースとdiff取ってみたり

したけど readline って新機能入ったりしてるのね。 コミュニティが活発な感じは全然しないが……。 ここで見たのは readline-8.0 と readline-8.1 の diff。 見た感じ bracketed paste のサポート強化が目玉機能っぽい。あとはバグ修正とか。 結構修正されてる。 bracketed paste てのは端末が対応してると普通にキーボードから入力されたか クリップボートから貼り付けるられたかを中で動いてるアプリケーションから区別できる機能っぽい。 貼り付け部分の前後にエスケープシーケンスがくっついてくるとかとか……。 最近クリップボードから貼り付けると貼り付けた部分の色が反転する (選択してるみたいになる) なぁ〜と思ってたけど、それはこれが動いてるからな気がする。 最近の端末はリッチだなぁ〜 (なお、

シェルのプロンプトが壊れる

端末が完全に壊れるので困ってる。 数ヶ月この状態が続いていて、僕が .bashrc の中で変なハックをしてるのが悪いのかなとか いろいろ考えていじくり回してたんだけどどうしようもない。 というかこれが vte のバグか readline のバグか分かってなかったんだけど、 termtosvg で録画してもこれになるということは readline のバグである可能性が高いということか。 master ブランチとかを取ってきてビルドすれば直ったりするかな・・・? 追記 この件はこの記事の方法で解決しました。

カジュアルにブラウザ拡張を作ってWebサイトを快適にする

この記事は「ョョョねこ Advent Calendar 2020」 12日目の記事です。 「ョョョねこ Advent Calendar」なのにねこも VRChat も関係ない記事でいいのかなと 思いつつ、説明見た感じだと記事のテーマは割となんでもいいっぽかったので (言い訳) 12日目を 担当することにしました。 とか言ってたら 3 日も過ぎてました。すみません……。 突然ですが、いつも使っていた Web サイトに突然いらない機能が追加されて「あー、この表示消したいなー」 とか思うことありますよね。(え?ない?) そういうときに適当にブラウザ拡張を作って Web ページを勝手にカスタマイズしてしまおうというのがこの 記事の趣旨です。 多少の JavaScript の知識を前提として書きますが、JavaScript が

DBusのEmacs Lispバインディング

Emacs の scratch バッファで DBus のメソッドを叩いたりできるので便利。たぶん。 DBus 便利じゃんね。(分かってない) 準備 require する。M-x describe-function すると勝手に内部で require するようなので 忘れていたが、当然といえば当然。 (require 'dbus) Introspection プロパティとかインターフェースを眺めるやつ。 GNOME Shell のスクリーンショットのインターフェースを眺めてみる。 XML でなくて S 式で表示される。 (dbus-introspect-xml :session "org.gnome.Shell" "/org/gnome/Shell/Screenshot") メソッドを叩く 適当に introspection で見えた通りに引数を詰め込んでウィンドウのスクリーンショットを撮ってみる。 コマンドラインの dbus-send だと型の指定が面倒だが(まあ 1 と "1" の区別つかないのでそれはそう) Emacs だと Lisp での型が適当に DBus の型にマッピングされていて割と楽。 あと引数が一致しなかったりしたら Emacs Lisp の例外

WebKitGTK+でインスペクタを表示する方法

調べたら普通にドキュメントが出るけどメモ。 まず WebSettings というのを変更して enable-developer-extras というのを有効にしてやって、 WebKitSettings *settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW(web_view)); g_object_set(G_OBJECT(settings), "enable-developer-extras", TRUE, NULL); それから inspector を開くという感じ。 WebKitWebInspector *inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(web_view)); webkit_web_inspector_show(WEBKIT_WEB_INSPECTOR(inspector)); 実行してやるといつも F12 で開いてる感じの画面が別窓で出てくる。 全体像 #include <gtk/gtk.h>#include <webkit2/webkit2.h> static void on_destroy(GtkWidget *widget, GtkWidget *window) { gtk_main_quit(); } static gboolean on_close_web_view(WebKitWebView *web_view, GtkWidget *window) { gtk_widget_destroy(window); return TRUE; } int main(int argc, char **argv) { gtk_init(&argc, &argv); GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600); gtk_window_set_title(GTK_WINDOW(main_window), "Browse"); WebKitWebView *web_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(web_view)); g_signal_connect(main_window, "destroy", G_CALLBACK(&on_destroy), NULL); g_signal_connect(web_view, "close", G_CALLBACK(&on_close_web_view), main_window); WebKitSettings *settings = webkit_web_view_get_settings (WEBKIT_WEB_VIEW(web_view)); g_object_set(G_OBJECT(settings), "enable-developer-extras", TRUE, NULL); webkit_web_view_load_uri(web_view, "https://www.chronoscoper.com/"); WebKitWebInspector *inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(web_view)); webkit_web_inspector_show(WEBKIT_WEB_INSPECTOR(inspector)); gtk_widget_grab_focus(GTK_WIDGET(web_view)); gtk_widget_show_all(main_window); gtk_main(); } このキャプチャはインスペクタを表示して、ソースコード眺めてたら目についた console.screenshot() というのを 呼んでみたところ。 どうでもいいけど WebKit のソースいじったりしていろいろやろうと思っている(思いつき)。

Linux on ThinkPadのバッテリー設定をいい感じにする

僕は ThinkPad X1 Carbon の 2019 年モデルを使っていて,少なくとも僕が学生の間は買い換えないつもりでいる。 そこでちょっと気になるのがバッテリーの劣化という面。ThinkPad はバッテリーが取り出せないので 工夫して使わないとバッテリーをいじめる結果になってしまいそうだと思う。 で,ACアダプタにつないだときにバッテリーに充電する閾値を設定する方法。 入れる。 $ sudo pacman -S tlp acpi-call を入れることを薦められたりするが,これはバッテリーの内部ゲージのリセットとかをしようと しない限り必要ないようだ。 tlp-stat というユーティリティも同時にインストールされるので次のような感じで現在の設定値を確認できる。 $ sudo tlp-stat -b まあ確認するだけなら適当なファイル(/s

FPGAとかいうやつを触ってみた

Twitter でちょっと話題になっていた「作ろう!CPU」という,FPGA の上で簡単な CPU を作るという本が 1 週間くらい前に届いたのでちょっと FPGA で遊んでみるなど (こういう中途半端な知識で書いてる入門記事って圧倒的 Web のノイズなんだよな,どうでもいいけど)。 まだ全部読んでいないけど,現時点で思うのはハードウェアがなくてもいいと言ってはいるけどやはりないとつまらないと思う。 シミュレーションの波形眺めたり生成される謎ファイルを眺めるだけというのは……。 あと論理回路の解説部分は大学でやった内容のサブセットという感じだったので特につまずくことなく読み進められた。 あの授業の前に買っていれば実際に動かせたりして面白かったんだ

Firefoxで署名していないアドオンをインストールする

最初の設定は最初しかしない(当たり前)のですぐ忘れる。 これをせずに未署名のアドオンをインストールしようとすると壊れているとか文句を言われる。壊れてねーよ。 Firefox Developer Edition を入れる。Stable とかだと署名していないアドオンをインストールできるようにできない。まあこれは常識。 about:config で xpinstall.signatures.required を false にする。 おしまい。 これで壊れていると言われたら多分本当に壊れている(欠けているファイルがあるとか)。 今日ハマったのとしては,zip にするときに zip extension.zip * ってやったことでサブディレクトリが zip に入ってなかった。 zip extension.zip ** ってやれば解決。 あと applications.gecko が必要なのかよく分かってないけど前うまくいかなかった気がするので追加。 "applications": { "gecko": { "id": "{9e13ea3f-fe6d-4246-88f9-00a9836d9816}" } }, id のところ