調べたら普通にドキュメントが出るけどメモ。
まず 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 のソースいじったりしていろいろやろうと思っている(思いつき)。
僕は ThinkPad X1 Carbon の 2019 年モデルを使っていて,少なくとも僕が学生の間は買い換えないつもりでいる。 そこでちょっと気になるのがバッテリーの劣化という面。ThinkPad はバッテリーが取り出せないので 工夫して使わないとバッテリーをいじめる結果になってしまいそうだと思う。
で,ACアダプタにつないだときにバッテリーに充電する閾値を設定する方法。
入れる。
$ sudo pacman -S tlp acpi-call を入れることを薦められたりするが,これはバッテリーの内部ゲージのリセットとかをしようと しない限り必要ないようだ。
tlp-stat というユーティリティも同時にインストールされるので次のような感じで現在の設定値を確認できる。
$ sudo tlp-stat -b まあ確認するだけなら適当なファイル(/sys/class/power_supply/BAT0/* とか)を見れば分かる気がするが。
Twitter でちょっと話題になっていた「作ろう!CPU」という,FPGA の上で簡単な CPU を作るという本が 1 週間くらい前に届いたのでちょっと FPGA で遊んでみるなど (こういう中途半端な知識で書いてる入門記事って圧倒的 Web のノイズなんだよな,どうでもいいけど)。
まだ全部読んでいないけど,現時点で思うのはハードウェアがなくてもいいと言ってはいるけどやはりないとつまらないと思う。 シミュレーションの波形眺めたり生成される謎ファイルを眺めるだけというのは……。 あと論理回路の解説部分は大学でやった内容のサブセットという感じだったので特につまずくことなく読み進められた。 あの授業の前に買っていれば実際に動かせたりして面白かったんだろうと思ったけれど, その頃はまだこの本が出版されていないので…。 全部読んだら改めて感想文を書こうと思う。
最初の設定は最初しかしない(当たり前)のですぐ忘れる。
これをせずに未署名のアドオンをインストールしようとすると壊れているとか文句を言われる。壊れてねーよ。
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 のところはメールアドレススタイルの id 考えるのがだるいので適当に uuidgen で生成した UUID で埋めればいいっぽい (知らんけど)。
Linux カーネルには Kernel address space layout randomization という仕組みがある(別に Linux カーネルじゃなくてもあると思うが)。 これはカーネルのコードが置かれる仮想アドレスを起動するたびにランダムにするというもので, 悪意のあるソフトウェアのカーネルへの攻撃を難しくしている。ってのはまあどうでもいい話。
で,これ,セキュアになるのはいいんだけどあんなことやこんなことをする時(つまり自分が悪意のある側, とまではいかないが何かの手段としてそれに近いことをしようとした場合)に 面倒臭いことがあって,かといって自分で無効化してコンパイルし直すのもなということでメモ。
nokaslr をカーネルパラメータに追加する1だけ。終了。
一応これをデフォルトにするのは良くない気がするので,起動時に GRUB で変えてやるのがいいと思う。 ↩︎
いつも忘れる。
本文には[^1]のように書く。`1`の部分には任意の文字列が使えるが, 何の文字列を使ったとしても見た目は変わらない。脚注の内容は 必ずしも一番下である必要はないらしく,任意の場所に書ける。 [^1]: でこれが脚注。 本文には1のように書く。1の部分には任意の文字列が使えるが, 何の文字列を使ったとしても見た目は変わらない。脚注の内容は 必ずしも一番下である必要はないらしく,任意の場所に書ける。
でこれが脚注。 ↩︎
今まではタグは全部小文字で書く方針だったのだが,一般名詞は小文字,固有名詞はもとの 表記を尊重することにした。もっとも,大文字で書こうが小文字で書こうかタグのページの タイトルの表記が変わるだけで,別のタグになる訳ではなさそうだが。 別の表示のタグが混在している場合にどれが選ばれるのかはよく分からない。
しかし Hugo でタグをつけるには内容に応じて手動でタグをつけていく必要があり, 限界がある気がする。前の記事であるタグをつけていたのを忘れるだけでなく, 最初の記事を書いているときにはそのテーマの記事をたくさん書く予定はなかったが 後になって意外とそのテーマの記事が増えてきたという状況もある。 いつか何らかの方法を考えてタグを自動でつけたり外したりする仕組みを 作らないといけないかもしれない。
ふと FizzBuzz を LISP 的に書くとどうなるんだろうと思って調べてみた。 ループで書くのは LISP 的にはダサいはず(適当)なので末尾再帰とかだろうかと 思っていたら,1 から 100 までのリストを作って map していくという感じらしい。 ほんまか?
(letrec ((print-all (lambda (l) (when (pair? l) (print (car l)) (print-all (cdr l)))))) (print-all (map (lambda (n) (cond ((= (remainder n 15) 0) "FizzBuzz") ((= (remainder n 3) 0) "Fizz") ((= (remainder n 5) 0) "Buzz") (else (number->string n)))) (iota 100 1)))) てことで Scheme で書いてみた。一応手元の環境の Gauche 0.9.9 では動いた。
出力する部分のせいでかなりごちゃごちゃになったが,FizzBuzz のリストを作ること自体は 簡単にできる(僕は LISP はまともに書けないのでこのコードは LISP の人から見ると一笑に付す ようなものだろうが)。
しかしなんというかメモリが潤沢な前提の贅沢な考え方だなぁ……。
面倒臭い失敗をしてしまった(戻せるのでセーフ) 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 として解釈するみたいなマップになっている。 空で書けって言われても無理。
バイトオーダー依存だとか。いくらなんでもイケてなさすぎる。