月報 2025/03, 2025/04
Tue 04 Mar 2025
14:46:01
-
DeepResearch
- 行列分解を全部まとめる
- Reparametrization Trick を全部まとめる
Wed 05 Mar 2025
16:51:23
行列分解系の手法を全部まとめたい. そして読めてなかったものがあったら拾っておきたい.
前々から思ってたんだけど, そういえば ChatGPT に Deep Research が来てたんでこれ使ってみた. 内容の正しさの精査はしてない. モデルは o3-mini-high.
論文URLは別の論文だったりとっくにリンク切れであることがよくあったので結局全部手動で調べ直した. こうなると内容の正しさも怪しい. 本当に主要なものだけだし, アレが入ってないのか (EASE) てのもある.
-
1990年 – Latent Semantic Indexing (LSI)
-
1999年 – 確率的潜在意味解析 (PLSA)
- Hofmannによって提案された手法で、LSIを確率モデルに発展させたものです。文書と語彙の共起行列を確率的に分解し、各文書を潜在トピックの混合で表現します。PLSAは情報検索やレコメンダにも適用され、行列分解を統計的枠組みで解釈する先駆けとなりました(後のLDAにつながるモデルです)。
- Just a moment...
-
1999年 – 非負値行列因子分解 (NMF)
-
2000年 – 行列分解による協調フィルタリング
-
2003年 – 潜在ディリクレ配分法 (LDA)
-
2004年 – マックスマージン行列分解 (MMMF)
-
2006年 – Funkの行列分解モデル
-
2007年 – 確率的行列分解 (PMF)
- MnihとSalakhutdinovにより提案された手法で、評価行列の各要素を確率的生成モデルで説明します。ユーザとアイテムに対応する潜在要因にガウス事前分布を置き、観測された評価のみを対数尤度に含めて学習することで、大規模かつスパースなデータでも高精度に推薦を行えることを示しました。
- Probabilistic Matrix Factorization
-
2008年 – ベイズ確率的行列分解 (BPMF)
-
2008年 – SVD++
- KorenらはNetflixデータを用いた研究で、評価履歴だけでなく非評価の行動履歴(暗黙的フィードバック)も組み込んだ拡張行列分解モデルSVD++を提案しました。ユーザが評価していない閲覧や購入履歴を潜在要因に反映させることで精度を向上し、明示的評価と暗黙的フィードバックの両方を活用する手法です。
- Just a moment...
-
2008年 – Collective Matrix Factorization
-
2009年 – Bayesian Personalized Ranking (BPR)
-
2009年 – 時間要因を組み込んだ行列分解
- Korenは協調フィルタリングにおける時間的変動をモデルに取り入れました。TimeSVD++などと呼ばれる手法では、ユーザの嗜好やアイテムの人気度が時間とともに変化する現象を捉えるために、ユーザバイアス項や潜在因子に時間依存項を導入しています。Netflixの大規模データで検証した結果、時間による評価値のドリフトをモデル化することで精度が飛躍的に向上しました。
- https://dl.acm.org/doi/10.1145/1401890.1401944
-
2010年 – ファクタリゼーションマシン (FM)
-
2011年 – RESCAL(知識グラフのためのテンソル分解)
-
2015年 – AutoRec (オートエンコーダを用いた協調フィルタ)
-
2017年 – ニューラル協調フィルタリング (NCF)
- Heらは行列分解モデルにおけるユーザとアイテムの内積を多層パーセプトロン(MLP)で置き換えるNCFを提案しました。GMF(汎用行列分解)とMLPを組み合わせたNeuMFモデルでは、ユーザ・アイテム間の非線形な相互作用を学習でき、従来の線形内積モデルを包含・拡張するフレームワークとなっています。実験ではNeuMFが従来手法を上回る精度を示し、深層学習により行列分解モデルの表現力を高めた例として注目されました。
- [1708.05031] Neural Collaborative Filtering
-
2018年 – Variational Autoencoder for CF
-
2017年 – 幾何学的行列完成 (Graph-based MF)
-
2020年 – LightGCN (グラフ協調フィルタの簡素化)
Thu 06 Mar 2025
11:01:53
夢日記。 ホラーワールドに三人で行く。 4つくらいのパズルを解いてゴールするらしい。 他の二人とは早い段階で別れてしまい、わたしは一人になって怖かったのでじっと動かないでいたら、とっくにゴールした他の一人が私を迎えに来た。 その人に指南してもらいながら残り2つのパズルを解いた。 パズルは一見して難しいが実はとても簡単だった。 最後の問題は1から60の数字を使った数独。 でも隣に人間の集合写真があってこれが答えと対応していた。 そして一番下の行にいる人間と2番目の行にいる人間に確かに重複があったのでそれで数字が埋まって、そして全てを埋めなくても一部だけわかれば答えられたので、それで完成ということだった。
ゴールして、そして最後までこのワールドに残っていると、 この世界の真理を見せてもらえる。 私以外は実はゴム人間だということだ。 それを最初から知ってた人は、だから、傍若無人にやりたい放題の態度を取っていた。 そして私は2周目に参加することになった。
Fri 14 Mar 2025
13:20:25 アルトラを買った
Vive Ultimate Tracker を買った. VRChat 用として.
参考
特にセットアップに関しては出来るだけ新しいものを参照してくださいね.
私の場合
発売されてすでに一年経っており, 日本語の記事もだいぶ出てる. 発売されてすぐはそもそも SteamVR に対応してなかったし, 対応してからもしばらくはβ版だったこともあり, その頃と今とでは使い心地や特にセットアップの手間は改善されているそうで, 古い記事を読んでもそこまで役に立たない.
-
必要なもの
-
アルトラ本体
- トラッカー三個と, ドングル一つのセットを購入した
-
装着する用のベルト
-
DanceDash 用のを購入した
- めちゃ高いがこれは DanceDash 自体の値段が入ってる
-
もし必要なら Type-A to Type-C ケーブル
- アルトラは全て Type-C に統一されてる
- PC に Type-A ポートしかないなら Type-A と Type-C を繋ぐケーブルが必要
- 私は Type-C ポートが一つだけあったので買ってない
-
セットアップ
- 本体を充電する
-
Vive Hub をインストールする
- ドングルを始めてPCに接続したら勝手に Steam 版がインストールされた
-
セットアップの中で勝手に Vive Space Calibration もインストールされた
- 内部的には OpenVR SpaceCalibalation をフォークして作られた公式版
- 後述するが OpenVR 版をそのまま使うメリットもある
- 両立はできないので注意
-
トラッカーをペアリングする
- 電源入れて Vive Hub の設定画面を開けばOK
- 基本的にはセットアップの指示に従えば問題ない
-
ファームウェアアップデートをする
-
トラッカーを USB でPCと直接接続する必要あり
- USB2.0 以上なら大丈夫みたい
- 古いとか給電専用ケーブルだとアップデートボタンが押せないので注意
-
トラッカー一つずつアップデートする
-
部屋のスキャン
-
マスターとなるトラッカー一つを選んで行う
-
私は一箇所だけスキャン精度が悪いままだが気にしてない
-
SteamVR の設定でトラッカーの役割を割り当てる
- これはやらなくてもいい
-
私は一応設定してるけど
- 設定では「足首」にした状態で, 実際には足首に取り付けたり足の甲に取り付けても問題なかった
-
足に付けてたのを肘に付けてみたりもしたが, VRChat でキャリブレーションし直したら勝手に認識された
これくらいかな. 初めてのアプリケーションなので戸惑ったが, 実際に面倒くさいのは部屋のスキャンくらいだけだった.
-
SpaceCalibalation について
-
2つある
- 両立はできないのでどちらかだけでキャリブレーションすること
-
公式の Vive SpaceCalibalation
- 内部的には OpenVR SpaceCalibalation
- 設定できる項目が少ない
-
コントローラ(右または左)といっしょにトラッカーを八の字することでキャリブレーションする
-
スケール補正は必須
Enable scaled compansation
という名前のチェックボックスがこっそりある
- 必ずチェックすること
- これをしないと, トラッカーの移動距離と頭の移動距離がズレる
-
八の字は思ったより大きく動くこと
-
たぶんこれによって上に書いた移動距離を計測してるので
-
OpenVR SpaceCalibalation
- Vive 公式があるより前から有志に作られたもの
- キャリブレーションしたあとに, そのキャリブレーションを手動で修正することができる
-
頭にトラッカーを一つ付け足すことで, 八の字キャリブレーションが不要になる
八の字キャリブレーションを面倒と感じるか, トラッカーを買い足すかどうかで選ぶことになる. 私は Vive 公式で八の字してる.
-
精度について
- 良いね
-
私がちゃんと経験したのは Haritora Wireless と HaritoraX2 だけで比較対象としては弱いけど
-
それでもたまにはトラッカーが飛ぶ
-
トラッカーがズレたときにやること
-
ズレたトラッカーだけ取り外して以下を順に試す
- 胸の位置に掲げてみる
- カメラを覆い被せてわざとトラッキングを一度失敗させる
-
そのトラッカーだけを再起動する
-
放って置く
-
諦める
- ズレるといってもそのズレ方も厳密(例えば正しい位置より何センチだけちょうど右にあるとか)なのでTポーズキャリブレーションだけやり直しちゃえば実は困らない
アルトラはワンタッチで土台から取り外しが出来るので, そこだけが救いだ.
-
他のトラッカーと混ぜることについて
- 問題ない
- 私が持ってるのが Haritora だけなので, 試したのはそれだけだけど
-
HaritoraX2 の肘トラッカーだけ電源を入れて Shiftall VRManager を起動してみた
- ちゃんと肘だけが追加された
- めちゃ良い
- Haritora 伝統の五分おきキャリブレーションも必須になるわけだが
-
さらに胸を追加してみた
-
横を向けば体が横向きに捻れる
- いいね
- でも IMU 方式 (つまりHaritora) は特に捻じれ方向にドリフトしやすいので, たぶんもう使わない
HaritoraX2 (肘以外)はそのうちメルカリに出そうと思う.
-
追加で試そうとしてること
-
VirtualDesktop の仮想トラッキングと混ぜる
-
充電用に Type-C をマグネットに変換するやつを使う
-
抜き差しする代わりに Apple 製品にあるマグセーフみたいなやつに変換してくれるやつ
- とりあえず充電は出来てる
-
マグネットがトラッキング精度に悪影響を与えないかどうかが未確認
Wed 26 Mar 2025
20:54:50
忙しすぎて, どんくらい忙しいかというと, 先週の水曜日のダウンタウンを配信終了一時間前に慌てて見てるくらい.
3/2 に初めて交通違反をしてしまった. 正真正銘初めてで, 次の更新でゴールド免許剥奪ということになる. 6000円の反則金も, 納めるのに自分を納得させるのに時間がかかった. ちゃんとした名前を忘れたけど, 慌てて右折レーンに入ろうとしたら区分線がオレンジ色になっていて, ちょうど白バイに見られていた.
悲しい.
Tue 08 Apr 2025
17:33:04 アルトラを追加で買った
アルトラ (Vive Ultimate Tracker) の3+1セットを購入して使い始めて, もうすぐ一ヶ月になる. ほぼ毎日使い倒してる.
3+1 セットというのはトラッカー3つとドングル1つのセット. 9万1千円で手に入る. 「9万1千円のセットを1つ買えば上等なフルトラが手に入る」というのは本当に強いと思う. IMU方式を2つ買えば結局10万円になるからね.
-
良い
-
トラッキング精度が本当に良い
- 遅延もほぼない
- 足が10cm動いたらVRの中でも即座に10cm動く
-
毎日のセットアップは簡単
-
最初に8の字キャリブレーションだけやる必要あり
- SteamVR 上で HMD+コントローラの位置と同期させる操作
- でも 20秒くらい
-
クイックリリース機構で取り外しが一瞬
- ベルトだけ体に巻いたままトラッカーを外すということが出来る
-
大きさや重さは気にならない
- 他製品(特にIMU)と比べると重いけど, 問題ない
-
アルトラ 3点 (+HDMとコントローラの3点) で十分
-
足先と腰につけてる
- 膝の位置なんて計算で出すしかないので必ずしも正確ではないんだが, 期待してたより精度良い
- これはトラッカーというより VRChat が優秀
-
ケーブル周りが簡潔
- ベースステーション不要
- PC にドングル1つを生やすだけ
-
悪い
-
大きめの家具を動かしたら部屋のマッピングからやり直し
- Yogibo Max (なかなかでかい)を右に置いたら右足だけちょっとずれるようになった
- 誤魔化し使えるけどマッピングやり直したらまたズレなくなった
-
充電時間が長くて電池持ちも悪い
-
充電は3,4時間掛かってる
- 電池持ちは公式7時間といっていて, 実際ちょうど7時間ぴったり
でもアルトラを2つ追加で購入した. 合計 5 個あることになる.
-
8点トラッキングしたい
- 肘に使うか太ももに使うか...
- ほんとうは両方欲しいけどね
-
1ドングルは5つまでしか接続できない
-
ドングル増やせばいいのかな?(やってる人を見たこと無い)
-
電池がすぐ切れる(七時間)ので予備として使うのもありか?
- 電池が切れたらそこだけ交換する
- だとしたら2つじゃなくて3つ追加購入すべきなんだが, そうなるとドングルをもう一つ生やしておかないといけない...
Mon 14 Apr 2025
18:19:51
RecSys/Industry で面白いのを探す
AutoMLP: Automated MLP for Sequential Recommendations
Sequential recommender systems aim to predict users' next interested item given their historical interactions. However, a long-standing issue is how to distinguish between users' long/short-term interests, which may be heterogeneous and contribute differently to the next recommendation. Existing approaches usually set pre-defined short-term interest length by exhaustive search or empirical experience, which is either highly inefficient or yields subpar results. The recent advanced transformer-based models can achieve state-of-the-art performances despite the aforementioned issue, but they have a quadratic computational complexity to the length of the input sequence. To this end, this paper proposes a novel sequential recommender system, AutoMLP, aiming for better modeling users' long/short-term interests from their historical interactions. In addition, we design an automated and adaptive search algorithm for preferable short-term interest length via end-to-end optimization. Through extensive experiments, we show that AutoMLP has competitive performance against state-of-the-art methods, while maintaining linear computational complexity.
- 時系列データから次のアイテムを予測する
-
long/short-term の両方を捉えたい
- long 用と short 用のそれぞれのMLPを作るだけ
-
ユーザーごとのデータは \(T \times D\) 行列
- 時系列は長さ \(T\) に揃える
- 各アイテムは \(D\) 次元のベクトルにする
-
Sequence Mixer
-
\(D\) 次元から \(D\) 次元へのマッピングをする
-
残渣接続を使う
- \(x \mapsto x + W_2(\mathrm{Act}(W_1(\mathrm{LayrerNorm}(x))))\)
- ユーザーデータの 各行 に適用する
-
Channel Mixer
-
T 次元から T 次元へのマッピングをする
- ユーザーデータの 各列 に適用する
-
SRSMLP (Sequential Recommender System MLP)
-
上記の Sequece Mixer, Channel Mixer をこの順に適用する MLP
-
long-term module
- \(T \times D\) 行列について SRSMLP を適用する
-
short-term module
-
\(T \times D\) 行列のうちのシーケンス長 k の部分だけとりだして,
- ただしこの \(k\) は1つに定めない
-
良さそうな \(k\) の集合を使う
Tue 15 Apr 2025
14:44:10
Understanding and Modeling Passive-Negative Feedback for Short-video Sequential Recommendation
Sequential recommendation is one of the most important tasks in recommender systems, which aims to recommend the next interacted item with historical behaviors as input. Traditional sequential recommendation always mainly considers the collected positive feedback such as click, purchase, etc. However, in short-video platforms such as TikTok, video viewing behavior may not always represent positive feedback. Specifically, the videos are played automatically, and users passively receive the recommended videos. In this new scenario, users passively express negative feedback by skipping over videos they do not like, which provides valuable information about their preferences. Different from the negative feedback studied in traditional recommender systems, this passive-negative feedback can reflect users' interests and serve as an important supervision signal in extracting users' preferences. Therefore, it is essential to carefully design and utilize it in this novel recommendation scenario. In this work, we first conduct analyses based on a large-scale real-world short-video behavior dataset and illustrate the significance of leveraging passive feedback. We then propose a novel method that deploys the sub-interest encoder, which incorporates positive feedback and passive-negative feedback as supervision signals to learn the user's current active sub-interest. Moreover, we introduce an adaptive fusion layer to integrate various sub-interests effectively. To enhance the robustness of our model, we then introduce a multi-task learning module to simultaneously optimize two kinds of feedback -- passive-negative feedback and traditional randomly-sampled negative feedback. The experiments on two large-scale datasets verify that the proposed method can significantly outperform state-of-the-art approaches. The code is released at https://github.com/tsinghua-fib-lab/RecSys2023-SINE.
清華大学って Qinghua じゃなくて Tsinghua なんだ. 伝統的にそう書くのかな?
TikTok 想定. ユーザーの行動は時系列データ. 短くスキップしたら暗黙的なネガティブだと思う. これをpassive-negative feedback と呼称.
passive-negative feedback と random-sampled negative feedback の二種類を扱う. マルチタスクモデルを構築する.
問題設定. ユーザーの集合 U, アイテムの集合 I. 各ユーザー u について時系列データ S[u] = [s1, s2, ..., sT]
がある. これはアイテムの列ってことかな. そしてこれらについてのユーザーの評価である列 R[u] = [r1, r2, ..., rT]
がある. r_i
は 1 ならば好意的, 0
なら passive-negative を表す. さて目的は, ユーザー u が次にインタラクトするアイテムの確率分布を求めること.
手法. 3つのコンポーネントが登場する.
- Sub-interest-based sequential encoder.
アイテムの列はあらかじめ embedding しておく. それぞれについて, どの属性が良い悪いに寄与するかは独立である. これを捉える.
Z = [z1, z2, ..., zK]
とする. 各 z_i
を prototype と呼ぶ.
-
EXMF (Exposure-based MF)
- 観測データはユーザー i がアイテム j を高評価した
x[i,j]=1
だけでそれ以外を暗黙の negative とする
-
ただし事前確率としてベルヌーイ分布を仮定する
a[i,j] ~ Bernoulli(p[i,j])
- 事前分布による評価の推定
-
P(x=1|a=1) = N(u[i] * v[j], lambda[x])
- 正しく予測できる場合の確率分布
- 普通のよくある MF
- ただし
lambda[x]
の分散付きの正規分布にしておく
-
P(x=1|a=0) = N(eps, lambda[x])
- 予測が間違っている場合の確率分布
eps
は小さい値
Thu 17 Apr 2025
13:42:22
夢日記。新幹線で新潟に行く。でも降りる駅は新潟の一駅前のなんとか灯駅みたいな可愛い名前だった。新幹線に乗る5分前に出会ったような人と仲良くなって一緒に新幹線乗った。中に足湯とかあって豪華だったけどトイレが汚くて嫌がった
18:13:45
データセット \(K = \{ (u, i) \}\) . rating \(r_{ui}\) .
SVD より前の簡単なモデルでは rating の予測を次で行う
\[\hat{r}_{ui} = \bar{r} + b_u + b_i\]
\(\bar{r}\) は rating の平均. \(b\) はユーザーとアイテムについてのバイアス.
次に SVD ではアイテムとユーザーに embedding を与えてその交絡を内積で与える.
\[\hat{r}_{ui} = \bar{r} + b_u + b_i + p_u^T q_i\]
WSVD では重み \(w\) を追加する. \(w\) は \(p,q\) と同じ長さのベクトルで,
\[\hat{r}_{ui} = \bar{r} + b_u + b_i + (w \odot p_u)^T q_i\]
とする. \(w\) とは要素ごとの積を取ってる. \(w\) はアイテムとかユーザーに依らない.
19:38:52
cympfh.cc/paper を何でも読んだもの雑多に書いてきたけど
- 面白かったものだけに選定したい
- 読んだ順じゃなくて論文の発表年順にまとめたい
- タグ検索は使ったこと無いので消す
一旦 paper-new
で作り直して出来上がったら paper
にする.
Mon 21 Apr 2025
15:26:20
もうこれでいいじゃんシリーズ
- node.js: nodebrew
- Rust: rustup
- Python: uv ← new!
## Python のインストールとバージョン管理
uv python install 3.12 3.13 3.14
uv python list
uv run python3.12
## ライブラリの管理
uv add requests
Rust でいうところの cargo が標準でついてきて, すぐにそのメタ的存在の rustup が出てきて, そしてこれの流れがようやく Python にも来たか.
Tue 22 Apr 2025
19:22:24
RecSys'23
-
INTRO
-
Negative feedback 使うのが熱いぜ
- といってる References も 2023 からだ
-
METHOD
-
損失関数に Negative Feedback を組み込む
- やることは簡単
-
Positive Feedback については
- \(-\log p(y_i \mid u_i)\) を損失関数に足す
-
Negative Feedback については
- \(-\log p(1 - y_i \mid u_i)\) を損失関数に足す
-
\(L = -\sum_{\mathrm{positive}} r_i \cdot \log p(y_i \mid u_i) - \sum_{\mathrm{negative}} w_i \cdot \log p(1 - y_i \mid u_i)\)
- \(r_i, w_i\) はサンプルの重みなんだけど, 論文では positive/negative のラベルの重みということになってる
本当に素直に Negative を Negative として学習に取り入れますというだけだな. 一応論文では強化学習に使う話も言及はしてる. 具体的なことは言ってないけど.
-
ライブ実験
- 「嫌いフィードバック」を取り入れた
-
名言されてないけど... たぶん YouTubeShorts のことかな???
- 前の論文が YouTube Recommendations だし
- "Short-form content platform" って言ってる
-
Methods
-
「嫌い」を特徴量にはいれるけど目的関数には入れない
-
「嫌い」をレコメンド結果から取り除くパターン
-
提案手法パターン
- もちろんこれが最良で, 嫌いされる率を 2.44% 減らした
Wed 23 Apr 2025
18:22:46
SWE-bench: Can Language Models Resolve Real-World GitHub Issues?
Language models have outpaced our ability to evaluate them effectively, but for their future development it is essential to study the frontier of their capabilities. We find real-world software engineering to be a rich, sustainable, and challenging testbed for evaluating the next generation of language models. To this end, we introduce SWE-bench, an evaluation framework consisting of $2,294$ software engineering problems drawn from real GitHub issues and corresponding pull requests across $12$ popular Python repositories. Given a codebase along with a description of an issue to be resolved, a language model is tasked with editing the codebase to address the issue. Resolving issues in SWE-bench frequently requires understanding and coordinating changes across multiple functions, classes, and even files simultaneously, calling for models to interact with execution environments, process extremely long contexts and perform complex reasoning that goes far beyond traditional code generation tasks. Our evaluations show that both state-of-the-art proprietary models and our fine-tuned model SWE-Llama can resolve only the simplest issues. The best-performing model, Claude 2, is able to solve a mere $1.96$% of the issues. Advances on SWE-bench represent steps towards LMs that are more practical, intelligent, and autonomous.
-
SWE-Bench
- LLM をエージェントとして活用する系の評価指標
- 実際の Github にある Issue をどのくらい解決できるかを見ようぜ
-
ベンチマーク構築
- 12 popular OSS Python PRs
- 合計 90k issues くらい
-
以下に絞る
- マージされた
- Issue に紐づいてそれを解決した
-
テストコードの変更を含む
-
変更後のテストコードを使って
-
ChatGPT/Claude/(CodeLlama を fine-tuned した) SWE-Llama で比較した
- Figure4 が結果
- プロジェクトによるけど 3 ~ 15% とかそんくらい
Thu 24 Apr 2025
11:53:14
Google Pixel 9a を一昨日購入してさっそく届いた. Google ストアで買ったんだけど住所が前の住所で, ヤマト運輸からの電話で今朝起こされた. スマホ本体は無事届いたんだけど, 古いスマホを送り返すための下取りキットがまだ届いてない. こちらは郵便パックらしいんで, また住所云々のやり取りをしないといけないはずだ.
最近のスマホはずっと Google Pixel を使ってて, Pixel 3 → Pixel 7 → Pixel 9a ときてる. 初めて廉価版の a シリーズなんだけど, もう私はスマホにゲーム性能もカメラ性能も求めてないし, 小さくて軽いほうが嬉しい. 9a は別に小さくも軽くもないんだけど, カメラのでっぱりが無いのが大きい. それで言えば Pixel 3 が最も良かった. 軽くて小さくて持ちやすい. ファブリック製の公式のケースを付けると手から絶対に滑り落ちない. これは今でも手元に置いてある. バッテリーが膨らんでるけど.
15:47:35
最近の躍進
-
会社PCをMacbookからちゃんとWindowsに移行しようとしてる
- まだ一部設定ができてないのがあるのでMacbookは捨てきれてない
- Macbook は軽いし薄いのが良いんで, どうしても外で作業するとき用にとっておく
-
自分のスマホを移行した
-
時計兼Qi充電器を買った
- 充電速度は遅いけどいつかは充電されてる
- スマホの定位置ができたのが嬉しい
- 家に時計があるっていいね
Fri 25 Apr 2025
16:57:49 外からWSLへのポートフォワーディング
この設定ってたぶん永続的で一度やったらずっと有効になってるっぽい. だからもういつ設定したのかも忘れてた. そういえば最近アクセスできないことに気づいて必死に思い出してた.
手動で設定を頑張ろうとしてたけど, スクリプトがそのまんま残ってたのを見つけた.
##!/bin/bash
## /opt/wsl.port.sh
IP=$(ifconfig eth0 | grep 'inet ' | awk '{ print $2 }')
ports() {
echo 22
echo 80
echo 9090
echo 9091
echo 9092
echo 9093
echo 9094
echo 9095
seq 8000 9900
}
for PORT in $(ports); do
echo Fowarding ${IP}:${PORT}
netsh.exe interface portproxy delete v4tov4 listenport=${PORT}
netsh.exe interface portproxy add v4tov4 listenport=${PORT} connectport=${PORT} connectaddress=${IP}
done
exit 0
そして管理者としてPowerShellを起動して実行.
C:\Windows\System32\wsl.exe -d Ubuntu --exec bash /opt/wsl.port.sh
たぶん「指定されたファイルが見つかりません」っていうエラーが大量にできるけど無視してくれ.
18:24:06 写真の管理について
とにかくもう, 写真が多すぎる. HDD の逼迫が切実だ. 本当は Dropbox に課金してるんで手元からは消せるんですけどね.
ポケットの中で間違えてシャッターを切ったような写真は削除するでいいけど, 削除することのハードルは自分の中で十分高く持っておきたい. もともと何でもかんでも削除してたんだけど, もったいない気持ちが強くなった. 結局HDD逼迫が気がかりなんであれば, ファイルサイズを小さくしましょう. 圧縮なんかしないでいい. 画質を落とせ. 削除する代わりに 4K 解像度を 1080 にしろ.
ということをしたいので, 「解像度を落とすボタン」を生やしただけの画像ビューワでも作ってやろうかと思ったけど, そんなことしなくてもよかった. 我々には feh があった.
これでどうだ.
##!/bin/bash
cat <<EOM >&2
Usage:
- Hit 0 to mark
- Hit 1 to unmark
- Space/Backspace to next/prev
- q to quit
EOM
echo -n "OK?" >&2
read OK
feh -dZF \
--action "echo MARK %F" \
--action1 "echo UNMARK %F" \
. >/tmp/feh-marking.out
cat /tmp/feh-marking.out | awk '
{
operation = $1
item = $0
sub(/^[^[:space:]]+[[:space:]]+/, "", item)
if (operation == "MARK") {
states[item] = 1 # MARK操作の場合、状態をマーク済みに設定
} else if (operation == "UNMARK") {
states[item] = 0 # UNMARK操作の場合、状態を非マークに設定
}
}
END {
for (item in states) {
if (states[item] == 1) {
print item
}
}
}
'
これは feh で画像表示しながらキーを教えていって「マーク」をしていく. このスクリプトは最後にマークした画像パスをただ出力して終わるだけ. ただそれだけ. なのでその後にそのファイルすべてを縮小するとかのスクリプトを適宜書いて実行したらいい.
feh --min-dimention
を使えば解像度が一定以上の写真だけを最初から選択させられる. 今の目的ではこのオプションはあったほうがいいね.
Sun 27 Apr 2025
20:23:33 GW中にやること
Mon 28 Apr 2025
13:29:10 LLMは何も知らない
ちょっと古い知識になると LLM は何もしらない. 最近私が困った事例だと feh とか, GNU Make とか. feh はともかくとしても make は現役だろと思うんだけど. 何にせよ LLM はどんだけ賢くたってそのデータセットに無ければ無い. ドキュメントを検索すればいいはずだけど, 持ち前の少しだけある知識の中で強引に応えようとする. その結果としてハルシネーションが起きる.
モデルを変え質問の仕方を変え, GNU Make に VPATH
なるものがあることを教わった.
src/YYYY/mm.md
から YYYY/mm.html
を生成するルールを記述したかった.
%.html: src/%.md
echo "これは動かない"
src/2010/hoge.md
があるときに make 2010/hoge.html
で動かしたかったが, ルールが見つからないと言われる. %
がディレクトリ二段階層になると私が思ってる挙動から外れる. 例えば src/hoge.md
に対して make hoge.html
は動く. また %
が二段階層であっても, 出力が同じディレクトリにあるなら動く.
src/%.html: src/%.md
echo OK
%.html: %.md
echo これでも OK
これで make src/2010/hoge.html
なら動く. でも目的と違う.
なんでダメなのかわからん.
%.html: src/%.md |
src/x.md |
x.html |
Yes |
%.html: src/%.md |
src/2010/x.md |
2010/x.html |
No |
src/%.html: src/%.md |
src/x.md |
x.html |
Yes |
src/%.html: src/%.md |
src/2010/x.md |
2010/x.html |
Yes |
%.html: %.md |
src/x.md |
x.html |
Yes |
%.html: %.md |
src/2010/x.md |
2010/x.html |
Yes |
本当はルールの範疇で解決したかったけど vpath
を知った.
環境変数の VPATH
とディレクティブ vpath
とがある. ソースとしてファイルを探すディレクトリを指定できる. 通常は make を叩いたカレントディレクトリだけなのを, ここに追加できる.
VPATH = src
とすれば src
ディレクトリを探してくれる.
vpath %.md src
とすれば *.md
に限って src
ディレクトリを探してくれる.
というわけで
vpath %.md src
%.html: %.md
echo "暫定 OK"
ということにした.
Wed 30 Apr 2025
夢日記。PC の日付が元旦になってておかしいので別なデバイスで確認すると今日は金曜日なことに気付く。 木曜日はミーティングが二つあるのに出席した記憶がないので焦る。 恐る恐る聞くと昨日どころかほぼ毎週サボってたことを上司に聞かされる。 その場で平謝りする。 こっそり別の人に、あの謝り方では足りないと言われる。 そんなことよりも自分の失態に落ち込んだ。 その日も他のことに集中していたら2つミーティングをすっぽかした。