2023

2023年ももう終わりなので今年も(一応)書きます。 ちなみに2週間くらい前まで忘れていました。

去年: xecua.hatenablog.com

アウトプットをまとめたブログを書くと勘違いしていましたがまとめをアウトプットするっていう感じなんですね。今年は特にアウトプットしてない気がするのでそっちのが気楽で良いです。


最大の変化は社会に放出されたことです。 今のところの最終学歴は修士(工学)ということになります。 研究はなんかふわっとしたらなんか合格したのでこれでいいのかなあという気持ちになりましたが、貰っとけるものは貰っとけの精神で貰っときました。 博士号ってなんかかっこいいので将来的には欲しいところではありますが、結構怠惰なところがあるのでなんだかんだ取らずに人生終えちゃうんじゃないかなあとか、入試受かるのかなあとか、入試受かったとしても研究ちゃんとできるのかなあとか、いろいろ不安です。

現在は都内で一般ソフトウェアエンジニアをやっています。 割と飽きっぽい(正確には気まぐれ、というような気がすると最近気付きました)性格をしているおり、大学に入ってから始めたソフトウェア開発という趣味を仕事にしてそのまま続くのか不安ではありましたが、今のところは楽しくやれています。 現在の会社については、待遇が良いとは言い切れない感じなのと、このまま漠然と仕事を続けると思うと将来に若干の不安を感じるところではあるので、来年は転職こそしなくてもちょっと考えます。


2月頃、Twitterにいろいろあった頃にTLに流れてきた謎のSNS(?)、Nostrに漂着しました。 すごい変な仕組みで動いていて、それもあってか変な技術が好きなソフトウェアエンジニアが結構集まっていました。 私は1ヶ月くらい眺めていましたが結局Twitterに戻ってきてそれ以来特に触っていません。多分プロフィールとかは消し飛んでいると思います(そういう仕組みなので)。

そこ経由でBlueSky SocialのInvitation Codeを貰ってアカウントも生えました。 ちなみに昨年のうちにWaiting Listに登録していたのですが、そちらのInvitation Codeは11月くらいに届きました。Twitterの人格はWaiting Listで貰ったInvitation Codeで作ったアカウント(https://bsky.app/profile/xecua.caffeine.page)に移植しようかな、などと考えています。 ちなみに前者のアカウントはこのアカウントのIDから自明に導けます。そっちを動かすかは不明。


今年始めた趣味にTCGがあります。具体的にはMagic: the Gathering。
テーブルトップはジャンプスタートから始めて統率者戦、リミテッド(といってもプレリリースのシールドくらいですが)を遊びました。また、Arenaも主に構築でちょっとずつ遊んでいます。 個人的には統率者戦がお気に入りです。身内で、日本公式のレベルでいうとたぶん3~4くらいのデッキをいじって遊んでいます。パーティーゲーム感もあって楽しいです。

統率者デッキははじめはスターターの緑白(イマーラ)を使っていましたが、エルドレインの森のプレリリースで引いた氷冠のヒルダ(白青)に惹かれ、いろいろ寄せ集めて組みました。 後者は自発的に組もうと思っただけあって結構お気に入りで、今のところはどこに向かっているのかわからないデッキですが、少ない枚数でいい感じのコンボ組めないかなあとか思っています(難しそう)。 構築でも白青を結構気に入っていて、今のところはいわゆるアゾリウス兵士をメインで使っています。単に兵士だけでなく、タップによるアドバンテージの要素も少し入れています。

来年は店舗イベントにソロで参加したいと思っています。プレリリース、マジックリーグ(を始めとしたシールド戦)あたりが気軽なんじゃないかなあと思っています。 あとは統率者戦を身内以外で遊んでみたいところですが、もう少しデッキをいじる必要がありそうな気がしています。


あとは特に思いつかなかったのでカメラロールを見返して適当に書きます。

2月。Do It Yourself!! -どぅー・いっと・ゆあせるふ-の聖地巡礼として新潟県三条市に行きました。 写真のはちょいちょい出てきたところだったと思います。

3月。問題のアニメのBDBOXが届きました。全然見てません(時間が確保できていない)。

これも3月。N700S系に初乗車。このときは人生で初めてのグリーン車でもありました。 グリーン車を選んだのは普通車指定席の早割が完売していて、通常チケットよりもグリーン車の早割の方が安いという状態になっていたためでした(よく考えたら別の車両を選べばよかったのですが)。 この頃は割とレアだった気もしますが、最近はスマートEXでもN700S系かどうかが判別できるようになり狙いやすくなりました。 グリーン車はかなり快適だったのでこの後も新幹線に乗る機会があるときはちょいちょい乗っています。

これも3月。ありがとうExtreme Hearts。 Hyper×Stageは見に行きたかったですが親が大学の学位記授与式を見に来ていたので予定空けておいた方がいいかなあと思って見送りました。アーカイブはちゃんと見ました。 来年もCDが出てくれるみたいで有り難い限りですね。可能なら2期頼む。

xecua.hatenablog.com 4月はSSDの画像があったのでこれですね。今年これしか書いていないらしいです。

5月。ゆかりコレクトで入手したゆづきずトレカからV3ゆかりさん(ホロ)が出ました。 あまりにも顔がよかったのでカードを飾るやつを買ってしまいました。今も飾っています。

これも5月。いすです。キャンプギアらしいキャンプギアを買ったのはこれが始めてな気がします。安くて使い勝手もよく大活躍でした。

6月。会社の金で大阪に行ったのでそこそこ有名な気がするラーメン屋さんに行ってきました。たぶん来年も行くのでまた行きます。

同じ日に大阪のゲーセンでエルドラに到達しました。暇すぎた。 ボルテの方はちょいちょい進捗あったのですがあーけあの方はいまだに赤ポテです。来年は星ポテになれるといいな。

これも6月。深夜1時に終電を逃した酔っ払いからドライブに召喚されたのでお台場に行きました。 この写真朝焼けの感じがめっちゃよくないですか? 脳がやられているため島/Islandのイラストにあってもよさそうだとか思いました。

いい笑顔
6月。VVVは情報出た当初はかなり怪しさを感じていたのですが、見てみるとめっちゃよかったです。第2回やるなら金出します。あと第1回の円盤は出してくれ。 こういうのオタク語りするとブログ感出そうですが私にはその根気がありません。

7月。2台目のHHKBを購入しました。今度は雪の無刻印。 といっても墨の方は会社に置きっぱなので基本的には1台構成です。

7月。山中湖の近くでキャンプしました。今年は結構キャンプ行きました(全部誘われですが)。

9月。これも誘われですがワールドダイスターの聖地巡礼スタンプラリーをしました。浅草って意外と行く機会ないのでいい機会だったかもしれません。

10月。2回目のキャンプです。今回はゆるキャン△7巻(アニメ2期7~8話)でなでしこがソロキャンしていたところ(https://fujikawa-camp.jp)でした。 夜景はスマホのカメラでは収め切れないくらい綺麗だったので肉眼で見てほしいです。 アクセスはまあまあアレなので徒歩でいったなでしこはバケモンだと思います。 10月はなんかもう一回キャンプ(デイですが)行ってたみたいです。

11月。池袋で幻覚を摂取しました(https://shiokazehs.jp)。 ここまで小規模なオンリーイベははじめてでしたが、雰囲気が和やかで眺めていて楽しかったです。 私はその輪に入れる側の人間ではないので残念ですが。 廃校になった施設を使っているのも非常によかったです。

これも11月。家族旅行で神戸に行きました。 これは北野異人館(のどれか)。ここの踊り場の上にかかってる通路の雰囲気なんかすきでした。

これも11月。キャンプギアらしいキャンプギアその2。 山登る訳ではないのでウィンドマスターはオーバーキル気味ですが使い勝手は悪くなかったのでいいと思います。

12月。なぜか会社の人と舞浜の方に行きました。テーマパークは久々でしたが楽しめました。 思ったより翌日には響きませんでした。


こんなところでしょうか。他人がこんなん見ていて楽しいんか?という気持ちは置いておきます。

M.2 SSDでびゅー

ふと思い立って数ヶ月前の話を書きます。嘘です。書く気があったのを放置してました。


HDD遅すぎて死にました。 死んだのでM.2のNVMe SSDを買いました。

Amazon.co.jp: HIKSEMI 2TB NVMe SSD PCIe Gen 4×4 最大読込: 7,450MB/s 最大書き:6,750MB/s) PS5確認済み 放熱シート付き M.2 Type 2280 内蔵 SSD 3D TLC 国内正規品 メーカー5年保証 FUTURE70-02TB : パソコン・周辺機器

なぜかアホみたいに安くて心配になる中華SSDです。 噂によるとApple様のお陰らしいのでAppleアンチですが有り難く頂戴しておきます。

でGWにインストール。

このPCにはすでにSSDとHDDが積まれていて( *1 の回で乗せたもの)、こんな感じの構成になっていました。

SSD (256GB)
├── ESP (512MB)
├── C: (Windows; 160GB、うち140GB使用)
└── / (Gentoo Linux; 60GB、うち7.5GB使用)
HDD (2TB)
├── D: (Windows; 1TB、うち520GB使用)
├── /usr (Gentoo Linux; 200GB、うち16GB使用)
├── /home (Gentoo Linux; 200GB、うち148GB使用)
├── /var (Gentoo Linux; 100GB、うち72GB使用)
└── 不使用 200GB

なんというか計画性がありませんでした。特に/homeと/var。

ともあれ、起動速度をなんとかしたいのでESPは今回買ったSSDに乗せます。あと他のデータも全部今回のやつに乗せたいです(それはそう)。 ということでこれまでに使っていた人は一旦リストラして、足りなくなった時に予備的に使うことにしました。 パーティションは使用状況を見て次のとおりにしました。

SSD (2TB)
├── ESP (1GB)
├── C: (Windows; 1.5TB)
└── / (Gentoo Linux; 500GB)

全部クローンとかするとそれはそれでめんどくさい(特にHDD)のでぜんぶクリーンインストールすることにしました。

#WindowsInstallBattle

普通にインストールして終わりです。

ちなみにログインする時に不定期でOffice買え!!!!!!!!!!!!(意訳)って言ってくるやつは設定の「通知」→「追加の設定」のチェックを外すといいらしいです。

#GentooLinuxInstallBattle

3回以上やってるのでもうBattleって感じでもありません。

そのまま入れてもおもしろみがないのでなんかします。 白羽の矢が立ったのは以前見つけていたsystemd-homedで、Arch wikiの記事を眺めているとbtrfsという単語が目に入ったのでついでにファイルシステムもbtrfsにしてみることにしました*2。 といってもやることはext4とそんなに変わらなくて、Gentoo wikiの記事見ながらmkfs.btrfsしてカーネルコンフィグいじって終わりです。

あとはブートオーダーをいじります。 GRUBならよしなにしてくれるのかもしれませんが私はsystemd-boot派なので手動でなんとかします。 適当にいじってたらWindowsが4つに分裂しました。

この機会にざっくりbcdeditの概念をさらって完全に理解して解決しました。 エイリアスまわりとかは↓の記事がよかった気がします(メモにそう書いてあった)。

atmarkit.itmedia.co.jp

あとは普段通りにprofileを設定しt……

なんか見つけてしまった。見つけてしまったのでやります。 どうせ最近はあんまり開発とかしてないので多少致命傷を負っても問題にはならないはずです(ラップトップもあるし)。 といいながら選んだのですがprofileって選んだらあとは勝手に動くようになってるもので(experimentalとはいえ)、特に問題ありませんでした。

カーネルコンパイルも問題なくできて動いています。 LLVM=1LLVM_IAS=1をつけること*3だけ忘れないようにしないといけませんね(そうじゃないとgccコンパイルしちゃうので)。

その後

しばらくの間は旧ディスクも常時接続しておいて設定等を参照したくなった時にいつでも見られるようにしていましたが、2週間程度で外し、基本的にSSD1枚だけで繋ぐようにしました。 こうなると起動も爆速でとても快適です。

clangを使うのに合わせてリンカをmoldにしたり、Thin-LTO*4を有効化しようとするといろいろコケて、clangじゃなくてgccならいいのか!?moldじゃなくてlldならいいのか!?みたいな(しょうもない)悩みを爆発させていたのですが、私の設定が悪かった(CFLAGSだけじゃなくLDFLAGSにも-flto=thinをつけるべきだった)ようです。 実際build.log見てるとそうせざるを得ないパッケージもありました。

yaneuraou.yaneu.com ↑背中を押してくれたブログ

ということで$LDFLAGSがだいぶ長くなりました。

COMMON_FLAGS="-O2 -pipe -flto=thin"
LDFLAGS="-fuse-ld=mold -flto=thin -rtlib=compiler-rt -unwindlib=libunwind -Wl,--thinlto-cache-dir=/var/cache/thinlto -Wl,-O1 -Wl,--as-needed"

不具合的なやつとか

  • GCCは普通に入ったんですがなぜかアプデができません(install phaseでコケます)。これはマジで原因がわからんので困っています。
    • build.logをそのへんに貼っつけようとしたら60万行あったのでやめました。
  • Neovimをターミナルで開いてるとlibunwind: __unw_add_dynamic_fde: bad fde: FDE is really a CIEとか出ます。これは多分私が悪いのでなんとかします。

たすけてもらえると私がたすかります。

*1:https://xecua.hatenablog.com/entry/2020/12/20/204000

*2:LUKSという単語も目に入りましたがなんとなく億劫でやめました。

*3:https://wiki.gentoo.org/wiki/Clang#Kernel

*4:https://clang.llvm.org/docs/ThinLTO.html

2022

というのを見てやってみようかな〜となった次第 今年やったアウトプットを一応まとめておきます。


まずは研究関係から。

研究会での口頭発表とワークショップでのポスター発表をしました。 いずれも大学の所在地ではないところへの出張という形になり、学費を回収できたのはよかったかと思います(親に払ってもらっている身ですが)。 修論研究のブラッシュアップのための議論をしたいなあというモチベーションで参加したのですが、期待していたほど議論は活発にはなりませんでした(期待しすぎた他、私の提示する材料が不足していたのもあったと思います)。

ポスター発表は学内でもやる機会がなく初めてだったため、かなりgdってしまったと思います。 ブースに来た人がどの内容に興味を持っているのかは視線を追うとなんとなくわかりそうな気もしますが、そこだけを説明すればいいのか、そこを説明するために他の部分も説明した方がいいのか、というあたりで混乱してしまいました。 結局全体を説明するという形にしたのですが、それでよかったのか、悪かったのかは(フィードバック等を貰った訳ではないため)今でもわかりません。 ポスター発表はそんなに機会の多いことでもないと思っているので、院生レベルだとgdってもしかたないのかなあという気もしないでもないです。

余談。学内にポスターを印刷する設備があるのですが、ワークショップ前日(印刷予定日)に限ってその設備が使えない、ということが印刷予定日の前日に判明し、kinko'sに駆け込むなどしました。事前にスケジュールがわかっている場合、(指導教員等に丸投げせず)しっかり確認しておくと良いと思いました。

また、昨年出していた国内の論文誌への査読が通ったので修正して投げたりもしました。 査読内容自体は割とあまあまでサクっと修正して投げたため、特に得るものはなかったかもしれません。

口頭発表の原稿と論文誌の論文は一応探せば見つかると思いますが自信作という感じでもないのでここでは挙げません(こんな姿勢でいいのか?)。


研究以外だと、個人的に一番大きかったのは初めての身内ではないOSSへのcontribute(というかただissueを投げただけなのですが)でした。

github.com

bat-extrasというユーティリティ結構便利なのですが、batpipeというコマンドの挙動がなんか怪しかったので調べてみたらだいたい原因がわかり、関連したissueがなかったので投げてみた、という次第です。 特に今回は調査の過程で修正方法がわかったのですが、それをissueとするべきなのか、いきなりPRを投げていいのか、といった辺りで悩みました。 友人にもアドバイスをもらいながら書いたのですが、最終的にはissue descriptionの最後に「こういうことすると治るんじゃないかな〜」というのをつけたす形にしてみました。

ちなみに見ていただければわかりますが、投げてから3ヶ月経った今でも特に返答はありません。 まったく動いてない訳じゃないのでmaintainerさんが忙しいのかな〜と思ったり。

あとこのブログに4つの書き捨てを残しました。役に立つことはそんなにないと思いますがいつか自分の命を救うかもしれませんし救わないかもしれません。

また、夏ごろ友人間で日記生成系を作って日記を書くというのが流行ったため、便乗して日記生成系を作ったりしました。 丁度そのころErgというプ言語の話が流れてきたので面白そうやん使ってみよ〜と意気込んでいたのですが、まだまだ作ってる最中だったみたいですね(そのうちなんか投げようかなと思っていますが果たして)。 ということで安定のRustで作りました。ソースコードは今のところPrivateですが、GitHub Pagesで動かしており、GitHub Educationの期限切れと同時にPublicにせざるを得なくなるので、その頃見に行くとソースコードを見ることができると思います。

日記自体は https://diary.caffeine.page に公開しているので読みたかったら読むといいです。 RSSフィードも生やしたので活用してもしなくてもいいです。 特に面白い情報はありません。


追記。1つ忘れていました。

動画内容自体はなんてことはないんですけど、やっと結月ゆかりさんにまともに働いていただきました。 2分の動画に数時間かかったんですけど慣れの問題なんでしょうかね。 来年は積みゲーを消化しつつ動画作れたらいいな〜とか思っています。


アウトプットとして出したのはこんくらいかな〜というもんですが、就職活動をしたり内定先でバイトしたりはしました。 就活エントリを書く予定はありません。

最後にアウトプットでもなんでもない今年の個人的ハイライトを貼っておきます。

(IIでの初プレーから8年目にして)念願のLv19初クリア

或帝滅斗

神引き

適当に受けたけどまあまあよかったTOEIC

HP Pavilion Aero 13-beの雑感(微量)

5月に表題のPCを買ってから半年くらいが経過したので、現時点での雑感を書いておきたいと思います。

kakaku.com

軽い

まずなんといっても軽いです。1kg切ってるので持ち運びが苦になりません。 どっかのAirとは名ばかりの重いPCとは違います。 情報学徒にとって命の次に大事といって過言ではないPCが軽いのはたすかります。

性能がそこそこいい

CPUがRyzen 5800U(Zen 3)、メモリが16GBと現代的な生活を送るには十分なスペックを持っています。 一般的な用途ではほとんど困りません。

ところでWin11 Proが入っているのでHyper-Vを使いたくなりますが、流石にそれでこのメモリ容量はきついかもしれません。 また、Gentooでアプデをかけるとたまに死にますが、それはデスクトップPCでも同じなので気にしないことにします。

指紋センサ

指紋センサが搭載されており、まともに動けばWindows Helloがスッとできるので便利です。 反面、いまいち反応が悪いことがあります。 特に長時間スリープした後に復帰させると高確率で反応しません。こうなった時はPINで対応しています。

ドライバが微妙

ベンダ製PCあるあるかもしれませんが、OEMドライバが微妙です。これについては自分で書ければなんとかなりそうだとは思いますが(ほんとかな)。

たとえば、イヤホンの音の出だしが切れます。 数秒音を出さなかっただけでスリープ状態になり、次に音を出した直後の2秒程度の音が消えます。 本当にすぐこの状態になるので動画を見て回る時は結構なストレスになります。

また、慣性スクロールが無条件で入ります。

VivaldiだとAlt+スクロールでタブスイッチングができます。これめっちゃ便利です。 しかし、この機能を有効にしていると、ページの一部をスクロールした直後にAlt+←でブラウザバックしようとした時にタブスイッチングが反応してタブが勝手に切り替わります。 マウスの場合はホイールを止めればスクロールしなくなりますが、このPCではそれが通用しません。 これが原因でタブスイッチングを切りました。

また、Ctrl+スクロールのズーム機能も勝手に発火します。 私はSKKIMEを使っているので日本語入力を行う際必然的にCtrl+jを押すことになりますが、このCtrlが慣性スクロールと組み合わさって勝手にズームします。 これについてはそもそもいらねえなとこの記事を書きながら思ったので切りました。


今のところ思っているのはこんくらいです(そんなに多くなかった)。 キーボードの叩き心地も悪くなく、HDMIポート完備、USBポートもType-A×2、Type-C×1となくはないレベルであるのでこれ一台しか持ってなくてもそんなに困らないという感じ。

正直HPはあんまり信用していなかったのですが、これは結構いいPCだと思うので壊れるまでは使い続けると思います。

cmakeがビルドできねえ!どいつが悪いんだ?→お前

ちゃんとログ読もうね〜という話


ここ数日dev-util/cmake::gentooのアプデ(3.23.3)が降ってきているにも関わらずビルドがコケてアプデできていませんでした。

自分自身は別に(間接的にしか)使ってないんですが、あまり気分がいい状態ではないのでなんとな〜く調査しつつもめんどくさそうだな〜と思って手を出さずにいました。 ちなみに同じくGentooを使っている知人は普通に入っているらしい(そっちはsystemdがビルドできないらしい。私は普通にできてますが)。

んで今日やるか〜となったのでそのログ。

調査

まずはログを読む。

実はこの画像に答えが書いてある

jsoncppのシンボルが見つからんとか言ってる気がするので、jsoncppのバージョンとかをチェックするが、問題はなさそうな雰囲気。

じゃあ指定されてるメソッドとかがないのでは……と確認してみるが、普通にある。

じゃあコンパイルオプションがおかしいのか……?となり、ちゃんと見てみることに。

cd /var/tmp/portage/dev-util/cmake-3.23.3/work/cmake-3.23.3_build/Source && /usr/bin/cmake -E cmake_link_script CMakeFiles/ctest.dir/link.txt --verbose=1
/usr/lib/ccache/bin/x86_64-pc-linux-gnu-g++ -02 -pipe -Wl,-01 -Wl,--as-needed CMakeFiles/ctest.dir/ctest.cxx.o -o ../bin/ctest -Wl,-rpath,/usr/local/lib libcTestLib.a libСMakeLib.a kwsys/libcmsys.a -ldl ../Utilities/std/libcmstd.a /usr/ lib64/libexpat.so -lz /usr/lib64/libarchive.so /usr/local/lib/libjsoncpp.so /usr/lib64/libuv.so /usr/lib64/librhash.So /usr/lib64/libcurl.so 

1行目はcdしてcmake起動してるだけなので無視。 2行目はctest.cxx.oコンパイルして../bin/ctestを出力していて、あといろいろオプションつけてて……、

と読んでて、これオプションの順番おかしいせいでUndefinedとか言ってるのでは?とか思ったけど、これで合ってるらしい(むしろ依存されてる方が後ろに来るらしいですね。gccまともに触ったことないので知らなかった)。

bfin.sakura.ne.jp

んでもうちょっとちゃんと読んでると、件のjsoncppだけパスがなんかおかしいことに気付く。

お前だけなんかおかしくね?

なんか/usr/local/lib/libjsoncpp.soが参照されている(参照してほしいのは/usr/lib64/libjsoncpp.soである)。 ちなみに/usr/lib64/より/usr/local/lib/の優先順位が高いのは/etc/ld.so.confでそうなってるから。

こんなん置いた覚えないぞ……?とか思いながらこいつが何者なのかを見てみると、

最近もはやあんまり使ってないアプリであるToggl Trackのデスクトップ版をGNU Stowを使ってリンクしたものだった。

Stowは結構いいと思いますよ(というか今回の話について言えばStowは関係ない)

対処

ということで原因は

  1. /usr/local/
  2. Toggl Trackをインストールしていること
  3. さらに、/usr/local/lib//usr/lib64/より優先順位が高くなっていること

の3つが揃ったせいだった。

一番手っ取り早いのはToggl Trackを消すことだけど、根本的な解決かというと怪しいし、使ってないけど消すのは負けた気もする……ということで選択肢

  • 1.を解決する
    /usr/local/にインストールしなければいい。どうせ自分しか使わないので~/.localとかに。
  • 2.を解決する
    前述の通りなんか負けた気がするので却下。
  • 3.を解決する
    すなわち、/etc/ld.so.confを書き換える。
    なんか問題が起きそうだし、/usr/local/libの方が優先順位が高いのは「デフォだと問題があるので自分で差し替えました」みたいなユースケースがある(やったことはない)と思うと違うかもなあということで却下。

ということで1.の解決を選択。

~/.localにstowのディレクトリを作ってインスコ

これでcmakeがビルドできるようになった……はず。

できた

めでたし。


ちなみに cmake jsoncpp failed とかでggるとcmakeでjsoncppをビルドする時に失敗した話ばっかりでてきた。

systemd (genie) on Gentoo on WSL2 (あとgpg-agent)

(追記)ストア版がv1になってビルトインサポートが安定化したのでややこしくないようにタイトル書き換えました

センセーショナルなタイトルのような気もするけど新規性のある所だけかいつまんでるので、抜けてるところは他のブログでも見てください。


新しいPCを買いました。

kakaku.com

いまのところ物理的にも論理的にも軽いので良いです。ぜんぜん使ってないけど。 ところで5800Uと5600XってCineBenchのスコアがあんまり変わらないらしいね。デスクトップェ……

環境検討

今回はデュアルブートをせずになんとかしようの試みをしました。

このPCなぜかWin11 Pro が入ってるのでHyper-Vを検討しましたが、別にめちゃくちゃパフォーマンスが良い訳ではないらしいのでやめました。

pmp-style.hatenablog.com

で次にWSL。せっかくなのでディストリはGentooにしました。

入れ方はかんたん。Stage3 tarballを落としてきてxz部分だけ解凍したらwsl --importするだけ。あと細かいのはあるけど↓に大体書いてあります。

wiki.gentoo.org

pacstrapするだけのArchはインスコ楽だよなあと思ってたけど、こう思うとGentooも大概楽だよなあと(最近GUIのLive USBも出たらしいし)。 ちなみにWSLでArchやるならarchwslがいいと思います(scoopで入るし)。

github.com

閑話休題(これが言いたいだけ)。

genie

以前からWSL環境でsystemd環境下っぽい動きのできるgenieというのを知っていたので導入を検討しましたが、配布パッケージがない模様。

github.com

しかたがないのでebuildを書きました。↓のoverlayに入っています。 github.com

時代は(laymanではなく) eselect-repositoryらしいのでこれ経由で(というかGitHubgit://を無効化したことに気付いてなくて執筆時点ではlayman経由だと無理です)。

emerge app-eselect/eselect-repository
eselect repository add gachicam-overlay git https://github.com/Gachicam/gachicam-overlay.git

あとemerge --syncとかいるんだっけ

genieはビルドの途中でpythonライブラリを(pip経由で)入れようとするんですが、portageは当然これを許さないので自前でsrc_compileとかを書き直しています。もちろん入れようとするパッケージのebuildも↑のoverlayに入っています。 1つはGitHubから直pullするやつになっていて(PyPIにはあるけどgenieが使っているバージョンのものではない)、それはNo Keywordsになっています。悪しからず。

ということでflaggieが入っているなら↓からどうぞ。

flaggie +~amd64 sys-apps/genie dev-python/python-hosts
flaggie dev-python/nsenter '+kw::**'
emerge sys-apps/genie

あとは~/.profileとかで適当に

if [ ! -v INSIDE_GENIE ]; then
  genie -s
fi

(これはwikiに乗ってるやつ)

おまけ: YubiKey

YubiKeyが便利なので使っているんですが、genieの環境下だとwsl2-ssh-pageantが(READMEに乗ってるままだと)使えなくなる可能性が高いです(未検証)。

wsl2-ssh-pageant自体についての説明は省略(そのへんにいくらでも転がってるので)。 一応リンク。 github.com

で、

関係あった (https://lists.gnupg.org/pipermail/gnupg-devel/2016-June/031192.html あたり?)

/var/run/<uid>/gnupgが作られてしまうものはどうしようもないので便乗してgpgconf --list-dirsを使う方向に。 あとはGpg4Win 4.0あたりでソケットのパスが%LOCALAPPDATA%\gnupgになったらしいことを踏まえ、修正版

wsl2_ssh_pageant_bin="/path/to/wsl2-ssh-pageant.exe"
wsl2_ssh_pageant_opt="-verbose -logfile $HOME/.wsl2_ssh_pageant.log -gpgConfigBasepath 'C:/Users/<username>/AppData/Local/gnupg'"

if test -x "$wsl2_ssh_pageant_bin"; then
  ## SSH
  export SSH_AUTH_SOCK=$(gpgconf -L agent-ssh-socket)
  if ! ss -a | grep -q "$SSH_AUTH_SOCK"; then
    rm -f "$SSH_AUTH_SOCK"
    (setsid nohup socat UNIX-LISTEN:"$SSH_AUTH_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin $wsl2_ssh_pageant_opt" >/dev/null 2>&1 &)
  fi

  ## GPG
  export GPG_AGENT_SOCK=$(gpgconf -L agent-socket)
  if ! ss -a | grep -q "$GPG_AGENT_SOCK"; then
    rm -rf "$GPG_AGENT_SOCK"
    (setsid nohup socat UNIX-LISTEN:"$GPG_AGENT_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin $wsl2_ssh_pageant_opt -gpg S.gpg-agent" >/dev/null 2>&1 &)
  fi
else
  echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable."
fi
unset wsl2_ssh_pageant_bin
unset wsl2_ssh_pageant_opt

ちなみにArchだと(?) gpg-agentのsystemdソケットが開いているせいかなんかで動かないことがあるので、そういうときは

$ systemctl --user mask gpg-agent.socket gpg-agent-ssh.socket

するといいかも(disableだとgenieが再起動した時に生き返る)。

追記: VSCodeとかでいい感じにするために/etc/wsl.confでデフォルトユーザを変更すると↑の作戦が使えなくなったのですが、私の場合wsl2-ssh-pageantのログファイルのownerがrootなことに気付いたので一旦消してみたところ(とりあえず)動いたので、同じ症状が出たら試してみてください(また動かなくなるかもしれん)。 逆になんでrootになっていたんだ……?(無知)


これでしばらく頑張ってみます。

Kotlin Scriptが普通に書けそうな件

Kotlinをスクリプト言語っぽく書きたい。書かせてくれ


kscript?

一昔前はkscriptが定番で、一応通常のコンパイラでもスクリプトを書くことはできたが、依存関係を別のファイルに書く必要があるなど本当にポータブルな感じではなかった、らしい(私は最近Kotlinを触りはじめたので知らん)

例: 一昔前の(比較的まともな)記事

nnao45.hatenadiary.com

qiita.com

ところでkotlin -helpしてみるとこんな記述が

この件について言及している記事があんまりないので調べていると公式がなんか言っていることに気付く

github.com

starting from Kotlin version 1.3.70 it could even be used without explicit kotlin-main-kts.jar in the classpath, provided that the compiler could find the required jars. In addition starting from 1.3.70 kotlin runner supports scripts the same way as kotlinc -script combination

つまり .main.ktsを拡張子につけてさえいれば特に準備することなくkotlin foo.main.ktsとするだけで動きそう (2022/11/03修正・追記: 別にmain.部分はなくてもいいですね(should haveと言っているだけ))

試す

*1

動きますね ということで使っていくぞ