WebAssemblyを触ってみた

めっちゃお久しぶりです。 WebAssembly でハロワ的なサムシングを C++ でやったらすんなり動きすぎて感動したというポストです。 動機としては C++ で書いた SMF (Standard MIDI File) のパーサをブラウザ上で使いたかった ということです。別に速度を求めていたとかそういうわけではないのですが、バイナリを扱うのはやっぱり JavaScript よりも C++ とかの方がぱぱっと書けるかな、という。 で、使ったコードはリンク先に置いてあります。 https://github.com/kofuk/haystack/blob/df5d58caadf1ca640fef80484ac138faa6090c14/smf.cc 一応ビッグエンディアンをリトルエンディアンに変換している部分が wasm での挙動が予想できないため 不安な要素だったんですが、リトルエンディアンと考えていいみたいでした。 (これってコンパイルされた wasm をビッグエンディアンのマシンに持っていったら動かない

VTE で Sixel が使えるようになった

久しぶりに vte のリポジトリを見に行ったら HEAD で Sixel が使えるようになっていたので、 その導入方法を……。 適当に調べた感じだと GNOME 端末 3.37 とかでもサポートされてるっぽいです。 sover 見た感じだと ABI 互換性が崩れたことはなさそうなのでどのバージョンでも問題は起きないかと思います。 バージョン Arch Linux 上で確認をしています。 また、実際に使ったコミットのハッシュは以下です。 c17e6d12da00a94c3768be6671182a6a039ec0c0 方法 まだリリースされていないので HEAD を取ってくる必要があります。 なんかサーバ遅い気がするので --depth 1 をつけて履歴を取ってこないようにした方がいいかもしれません。 $ git clone https://gitlab.gnome.org/GNOME/vte.git ソースのディレクトリに入り、Meson で Ninja などなどを生成 & ビルドします。 sixel はデフォルトだと無効なの

GObjectについて

この記事では C++ とか Java とかを触ってる人が、 それと同等のコードを GObject 上に構築するにはどうしたらいいのかという視点で解説していきたいと思います。 ただし、一部にそれらの内部実装に関する知識を要する部分があるので、 使ったことがあるというだけでは理解が難しい部分があるかもしれません。 GObject 使おうとしても意外と Web 上に情報がなく…… (これは単に調べるのが下手という説もある)。 GObject とは GObject は C で書かれたユーティリティライブラリである GLib の一部で、 主に GTK の構築に使われているオブジェクトシステム (オブジェクト指向ぽくコード書くフレームワーク) です。 オブジェクト関連の言語機能がない C で簡単に OOP できます。 ……ということになってる (

LuaLaTeXをとりあえず使ってみる

なんでも pLaTeX が本格的にやばいかも らしい。pLaTeXやばいやばい話はこれまで何度も聞いた気がする。 ちょっと前に SATySFi 使ったりしたけど、あれはちゃんと SATySFi 書けないとあんまり満足度高くないので まあのんびり習得していけたらいいやと。 そういうわけで、とりあえず LuaLaTeX を使えるようにしておく。 LuaLaTeX について TeX を再実装した LuaTeX というやつに LaTeX のパッケージを乗っけたもの………だと思う。 あんまり正確なことは把握してないので気になった方はマサカリ投げてください…………。 まあ見た目は Lua が使える LaTeX という感じ。僕は Lua は日常会話レベル (ほんとか?) だけど TeX は海外旅行に行ったときに身振り手振りでなんとか意思疎通するレベルなので Lua が使えるのはけ

Firefoxでマイク使用中のポップアップを表示しない方法

Firefox でマイクとか画面共有とかを使ったときに出てくるこいつを消す1方法。 一応これは安全のために出ているので、専用のプロファイルを作って使用することをおすすめする。 (使用自体おすすめできないのでは?) about:config で toolkit.legacyUserProfileCustomizations.stylesheets を true にする (いつの間にか消えてそうな名前だなぁ)。 /.mozilla/firefox/<プロファイル> の中に chrome というディレクトリを作る。 その中に userChrome.css を作り、以下の内容を書く。 #webrtcIndicator { display: none; } もしくはマウスカーソル合わせたときだけ隠すとか。 ところで Firefox ってときどき Chrome という名前が内部的に使われてる2けど 何なんですかね。 参考 Is it possible to disable this overlaying microphone icon? : firefox どうでもいいこと リンク貼るためにタイトルをコピーしようと

OBS StudioのPipeWireキャプチャが古いリリースでも動くようにしてみた

今リリースされているバージョンの OBS Studio では Wayland 上で画面キャプチャができない。 OBS の master ブランチには PipeWire を使用した画面キャプチャが入っているので、 それを今のリリースされているバージョンに読ませて画面キャプチャできるようにしてみた。 これを /usr/lib/obs-plugins に置けば使えるはず。 (そのままビルドしただけでは動かないので適当に下みたいなパッチを当てた。) ビルドした linux-capture.so (消えてるかも) sha256: 693caf89788be465dfb813fd2c4662280fa2fbe218900dad3ad6111eec2926a6 適当に新しいやつのソース取ってきてビルドすればいいやんという話ではある。

dbus-glib

https://gitlab.freedesktop.org/dbus/dbus-glib 非推奨だったのか………。GDBus を使えって書いてある。 dbus-send の補完がなんかバグってるなと思ったので直していて、 Merge Request 投げる直前くらいに気づいた (でもせっかくなので投げた)。 https://gitlab.freedesktop.org/dbus/dbus-glib/-/merge_requests/5 dbus-send は DBus の一部なのになぜか Bash completion はこれの一部なのはわけが分からないが、 でもこれが死ぬと dbus-send の補完がなくなってしまうというのはマイナスだなと思った。 (まあなんかいろいろ補完がおかしかったりするのでいろいろ修正した方がよさそうではあるけど。) てなわけで 5 個くらいたまっていた TODO が一応 1 個捌けてよかったと思う。

sha256sumを書いてみた

Wikipedia に sha256 の疑似コード載ってるじゃん1ってことで sha256sum を書いてみた。 sha256.c あと出力されたバイト列見てもどこが間違ってるのか分からないので割と苦労した。 一応気づきとしては、coreutils に入ってる sha256sum コマンドは 相当速くて、かなり頑張ってチューニングしたんだろうなと思った。 どのくらい速いかというと、疑似コード真似しただけのコードだと 1 GiB のファイルの ハッシュに 40 秒強かかるところを、coreutils のそれだと 500 ms くらいで終わる。 coreutils 速いのは知ってるけどここまで歴然とした差があるとかなりびっくりする。 一応 coreutils の sha256sum は gnulib から引っ張ってきてるっぽいので そこへのリンクを。 http://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/sha256.c?id=591f00666450e5e70514d457846af2c8d301af9b FIXME: see sha1.c for a better implementation. とか言っててよく意味が分からん。これ

OBS StudioにWaylandのスクリーンキャプチャが入ったので試してみた

前 Wayland のスクリーンキャプチャの Pull Request 入りたがってたなとか 思ってリポジトリ見に行ったら、認識していたものは Close されてたんだけど、 他の Pull Request がマージされてて Wayland でもスクリーンキャプチャできるようになってた。 試してみたのが下の動画。 こういう部分あんまり知らんのでよく分からないんだけど PipeWire を使うと取れるらしい。 一応方法を。 OBS の HEAD を clone してきてビルドする。Browser Source 用っぽいところでコケたら -DBUILD_BROWSER=OFF で無効にしてやればおk。 install する。適当なパスでいい。 インストール先の lib ディレクトリを LD_LIBRARY_PATH に足す。 環境変数 OBS_USE_EGL を設定してから開く。こういうハックが必要なのは GNOME 上だけかも (Qt は GNOME 上での Wayland のサポートを意図的に無効化しているので)。 あと必要

Arch LinuxでWindowsの起動USBを作る方法

Windows のイメージは Microsoft のサイトからダウンロードできるが、 クソデカファイルが含まれているので、そのまま焼いても (USB の作成は成功したように見えるが) 壊れた起動 USB ができている。 FAT32 は 1 ファイルのサイズには 4 GiB の制限があるが、ISO ファイルには 5 GiB 超の ファイルが入っているのでそのまま焼くことができない。 このクソデカファイルを分割することで、この制限を突破することができるので、 その方法で起動用の USB を作成する。 1. USB を FAT32 でフォーマットする 普通。コマンドでやるなら下みたいな感じかな。 # parted /dev/sdb (parted) mklabel msdos (parted) mkpart primary fat32 0% 100% (parted) q # mkfs.fat -F32 /dev/sdb1 sources/install.wim 以外をコピーする ダウンロードしてきたイメージをマウントし、中のファイルをコピーする。 cp でやるなり rsync 使