6 月月報
今月の後半はちょっと調子悪くてぐったりしてたので少なめ
ゲーム
- The Talos Principle
- 3D パズルだけどなんかストーリーが哲学的なゲーム
- そろそろ終盤かな?くらいまで進んだ。パズルがそんなに得意ではない自分でも、基本そこまで苦しまずに解けているので簡単目ではあるのかも
- Monument Valley
- 立体の錯視を使ったゲーム
- 雰囲気がかなり良い感じだけどゲームとして面白いかというとそこまで...って感じ。実装どうやってるのか気になる
ギター
- 結束バンドの別の曲としてフラッシュバッカー練習し始めた
- これはフルでもちゃんと弾ききれそうなくらいの難易度。でもかなりやりがいがあるのでやってて楽しい
5 月月報
ゲーム
- balatro
- クリアしました!!!!!!!!!!!!!!!!嬉しすぎ!!!!!!!!!!
乙!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! pic.twitter.com/YrMUexOloe
— マヨ子@秋篠宮popstar (@mayoko_) 2025年5月15日
- inverted angel
- 自由記述形式の推理ゲーム
- 適当なトンデモ推理を投げたりするとなんかいい感じに解釈されることがあって面白い
- 推理がだいぶ難しいので、多分毎回スキップしないで読んで違和感あればそれを記述でぶち込む、って感じでやるのが良いのかな。ゲーム形式的にもできるだけそういう感じでやれるほうが楽しそうだったな...と思いつつ、難しすぎて攻略も普通に使っちゃった
- 都市伝説解体センター
- ドラマの TRICK みたいな感じで怪奇現象を解き明かしていくゲーム これも推理ゲーですが上の inverted angel に比べたら難易度はかなり低い
- 演出好きだし、ストーリーもかなりびっくりするところがあって面白かった
- このゲームと inverted angel は誰かがやってるところ見たいのでだれか見せてください
- Leap Year
- 2マス以上の段差を降りると死ぬ哀れなキャラのお手軽2Dアクションゲーム
- ひらめき・気付きが必要なんだけど、全然気付けなくてクソ時間かかった
- こういうのスイスイいけば楽しいんだろうけど、個人的には楽しさ半分苦行半分くらいでそんなに...って感じでした
- The Blue Prince
- 自分では買ってないけど友達がやってるところをずっと見てた (30 時間くらい...)
- 謎解きローグライクみたいなイメージ?館に次々と部屋を生成していき、「46 番目の部屋」を目指すというゲーム。生成するそれぞれの部屋に、謎解きのためのヒントが隠されているので、それをうまく使う必要がある
- 謎解きはかなり面白い。Google スプレッドシートにゲームのスクショを貼っていって、これはこういうことなんじゃない?とかこれとこの情報つなぎ合わせると謎解けそうじゃない?とか議論するのが楽しい。点と点がつながって「このゲームおもしろ!」となる瞬間が何回もある。
- ただ、ランダム要素は正直かなり残念。謎解きのやり方は分かっているのに、そのために必要な部屋の組み合わせが全然出ないせいでその謎解きができなくて萎える、っていうのが中盤から増えていく。これに萎えたせいで友達もやるのやめちゃったので、ここは修正してほしい... (「クリア」したら部屋生成は好きにやらせてくれてもいいんじゃないかな...)
ギター
- 相変わらず青春コンプレックス練習してる
- 140 bpm くらいまではまぁ弾けてるかなって感じになってきて、「おっ、実はあっさり弾けるやつ???」と思い始めたけど、190 ではめちゃくちゃ早くてついていけない......
- ちょっと練習も飽きてきたので別の曲探しても良いかもと思い始めた
- ヘッドレスギターの存在を知って次のギターこれにしたくなってきた
読み物
- ベルセルク (漫画)
- ついに現在発売中の最終巻まで追いついた
- イッツダボム (本)
- グラフィティのお話。オモコロウォッチというラジオ(?)番組で言及されてるのをみて読んでみた
- そもそもグラフィティをやっている人がどういうつもりでやっているのか、みたいなことがわかるのが面白かった
4 月月報
お仕事
みんな仕事進めるためにみんな巻き込むムーブできて偉いなぁと思いつつ、「これってコードがまともならコミュニケーション半分で済んだんじゃ...」とも思っちゃう
「自分の感覚ならこういうコード書くけどなー」っていうのをどれくらい押し付けてよいのか迷っちゃう。自分の中で書くときの方向性はあるけどそれが絶対的に正しいと思ってるわけでもないし難しい
ギター
5 月上旬に発表会があるから練習しなきゃなんですが、コード弾きあんまり面白くないので別の練習やっちゃう。
その次の発表会が 9 月で、半年くらいあるしぼっちざろっくの曲行けるか?ということで青春コンプレックスの練習を始めた。めっちゃ難しいけどやりがいあって楽しい。BPM 120 だしミスりまくってるけどとりあえず全部弾ききるところまではできるようになった。ここから 190 まで上げないといけない...
ゲーム
- balatro
- このゲームめちゃくちゃ上手くなっちゃった。すべてのデッキで最高難易度で勝つともらえる完全主義者+という実績も獲得できた。残りは最高難易度でラスボスを倒したときに所持していたジョーカーを全埋めする完全主義者++が残っています
- 勝つためのコツも書いたから苦戦してる人は見てみてね
読み物
- ベルセルク (漫画)
- 無料キャンペーンで読んでたけど途中から購入し始めた。めちゃおもろい
- ハイパフォーマンス ブラウザネットワーキング
- おすすめしてる人がいたから読んでみた。ネットワークスペシャリスト試験前に読みたかった。
- 「その視点はなかった~」っていうのがそこそこ書いてあって面白かった。例えば
- ハンドシェイクでデータを往復する時点でレイテンシがあるので、とりあえずユーザーの近くにハンドシェイクする奴がいるだけでも最適化になる
- そもそも LTE とかの通信方法を知らなかったので仕組み自体おもろい。仕組み的に送受信タイミングが悪いと対した通信してないのにめっちゃ電気食うというのも知らなかった
- センスの良いSQLを書く技術
- 575
- EXISTS は二階述語論理、NULLの区分など、ちょっと参考になる部分もあったけど、基本的には味の薄い読み物って感じでした
- db 系統ではデータ指向アプリケーションデザインがめっちゃ面白くて、こういうのもっと読みたい
balatro で勝つ
balatro で gold stake 埋めをやってきて、そこそこ balatro うまくなってきたので gold stake で勝つためのコツをメモ
重要だと思うのが☆3で、ちょっとしたテクニックが☆1
☆☆☆なにかを買うときは、「何%点数が上昇するか」を考える
購入することで上がる点数の見積もりをすることで、今のジョーカーで点数が十分足りているかどうかなどの判断が立てやすくなる。
例:
現在 pair のハンドをよく打っていて、それにより +100 chips, +5 mult くらいの点数が毎回出ているとする。
- +50 chips のジョーカーを買うと、+100 chips が +150 chips になるので、点数としては 1.5 倍くらいになりそうだと計算できる。
- +15 mult のジョーカーを買うと、+5 mult が +20 mult になるので、点数としては 4 倍くらいに跳ね上がりそうだと計算できる。
この見積もり感覚を応用すると、今どういうジョーカーがほしいのかもわかりやすくなる。
mult のジョーカーがかなり育っていて例えば +50 mult とかになっている場合、+15 mult のジョーカーなどが出ても (それ単体では強く見えるが)、点数的には 1.3 倍くらいにしかならない計算になる。
逆に、+50 chips 程度のそれ単体では弱く見えるジョーカーでも、今の手持ちの中ではめちゃ点数を上げるファクターになる、という評価になることもある。
また、タロットを選ぶ際も、「今は pair ばっかり打ってて基礎の mult 低いから steel card 増えても点数に寄与しないな」とか「pair 役の chips 低いから bonus card 欲しいな」とか判断できる。
☆☆☆余裕がある場合、バリューが保証されない散財は避ける
round 1 つ勝利するごとに報酬としてお金がもらえるが、報酬には interest (所持金の 1/5, max 5 円) が含まれる。この interest で安定してお金を供給できるようになるまでは、むやみな散財は避けたほうが、必要になったときに必要なものが購入できる確率が高まり、結果的に勝率も上がる。
「絶対次の round で負けるしここで良いジョーカー引かなきゃ...」みたいなときはしゃーないが、そもそもその状況になってる時点で運負けしてるので、萎え落ちして new game したほうが精神的には楽。今の round しのげてもまた次の round を切り抜けるために別の切り札必要になりがちだし...
バリューが高確率で保証される散財は例えば、
- telescope 持っていてほしい惑星が必ず引ける
- Fortune Teller 持ってるのでとにかくアルカナパック引きたい
- vampire を育てたい。5 枚入りアルカナパックから vampire に食べさせるための tarot を引きたい
- ジョーカー 0~1 枚しかないのでもう一枚をパックから引きたい
など。
☆☆☆9 割の勝ちパターンはジョーカー育成型
こんな感じで勝つことが多い:
- 序盤に +mult 育成系のジョーカーを拾う
- そのジョーカーを育てて最終的に +50mult くらいにする
- 道中でなんやかんや +100 ~ +200 chips 位を確保したり、x mult のジョーカーを拾ったりする
- chips は天体で育てたり、+chips のジョーカーで確保
- x mult は辛抱強くジョーカーを探し続ければそのうち見つかる。見つからなかったら運負け
- 結局 (200 ~ 500 chips) * (200 ~ 1000 mult) みたいな感じになって点数足りる
この勝ちパターンが多い理由は、
- mult 育成系のジョーカーは common に固まっているので、序盤でも見つけやすい
- ジョーカー自身で mult を確保するため、作る役自体はどうでも良いことが多い。pair とか、なんなら high card を打ち続けるだけでもかなりの点数が出せる。なので、「欲しい役が引けなかった」という理由で負けることがほぼない
序盤で mult 育成系を見つけたら迷わず購入。自分は Green Joker の評価がかなり低かったけど一回それで勝ってからはめちゃくちゃ信頼をおいていてそれでばっか勝ってる
ちなみに +mult 育成系ジョーカー2つは大抵の場合いらない。たかだか点数 2 倍程度の寄与しかないので、別のジョーカーを引いたほうが良いがち。+chips 育成系ジョーカーと +mult 育成系ジョーカーの相性はかなり良いので、それは一考の余地あり。square joker と Spare Trousers が序盤に来たりすると「はい勝ち~~~」って気持ちになる
☆☆残りの勝ちパターンは強い役一発で決める型
ストレートは Lv が 1 上がると +3 mult, +30 chips とかなり破格の上がり方をするので、じっくりとレベルを上げていくと一発打つだけで目標点に達する強い役が作れる。
ストレートよりは格が落ちるがフラッシュも 1 レベルごとに +2mult 上がるので、こちらも強力な役が打ちやすい。
また、上のように pair を連発する型とは違い、基礎の mult が高いので、steel card や photograph, Bloodstone など、カード自体の効果で x mult するものとの相性もよく、うまくデッキビルドできればかなり強くなる。ストレート狙うときは、中心にするカード (序盤に引いた良い感じのカードの rank) を決めて、それを中心に正規分布っぽくできると良い
序盤にストレートを正当化するジョーカー (Shortcut や Runner) が来たら考えても良いかも。
また、序盤フラッシュを打ち続けるためのデッキビルドをしているとそのうち Flush House (フラッシュ + フルハウス) が打てるようになり、そちらはレベルごとの上がり幅が破格 (1Lv ごとに +4 mult, +40 chips) なので、そちらで強い役を構築するのも良い。
役を育てるうえで、blue seal はかなり強力なので、スタンダードパックやスペクトラルパックを使って一枚は持っておきたい。これも telescope もないとなるとなかなか思うように役のレベルが上がらず厳しい。
割と条件が厳しい上に、この戦法をボスに対策されている (Play only 1 hand とか Start with 0 discards とか Only one hand type can be played とか) のでほしい役引けなかったんですけどー!で死ぬことがあって上のパターンに比べて難しい印象。
☆一度出たボスはもう出ない
なので例えば ante 1 で heart debuff のボスが来たら全部のカードを安心して heart に変えられる。これで flush を安定して打つデッキにしても良いな~とか考えられる
☆手持ち、ショップにあるものはパックからは出ない
なので手持ちにいらない惑星カードがある場合、すぐに売らずに取っておくと、惑星パックを開けたときに所望の惑星カードを引ける確率は高まる。ショップにいらない惑星カードがあるときはそれを残しておきながらパックを引くとなお良い。shop で何回か reroll する予定のときは、先にいらない惑星が出るまで reroll してからパックを開けると所望の結果になる確率が高くなる。
同じことが tarot カードでも言えるが、tarot は種類が多いのであんまり変わらない
ちなみに Showman はこの性質が打ち消される
☆役の点数計算をするとき、左側から順に計算される
例えば Play するグラスカードは一番右側にある方が良いし、Raised Fist を持っている場合は Steel Card を一番右側に持ってくる方が良い。
Midas Mask を Vampire より左に置いておけば、gold 化 -> gold 打ち消して Vampire の x mult が増えるというコンボができるなど
☆タロットの fool を常に意識する
fool は直前に使ったタロット、惑星カードの複製をする。例えば直前にお金倍タロットを使っていた場合に、どうでもいい役を上げるために惑星カードを使うのはもったいない。惑星パックからハズレしか出なかったときはあえて skip する、そもそも惑星パックを引く前にタロットパックを引いて fool が来ることを考慮するなどすると良い。
ちなみに直前に使ったカードが何であるかは、Options > Collection > Tarot Cards > Fool の説明 から確認することができる。
月報
日記書きたくなってきた。初めて月報書くので今回は量多め。
お仕事
コードを自分好みのコードにしたくて、みんなを誘導しています。うまくやりたい
お仕事のコード、DDD っぽく書ける (ビジネス的な要求をプログラムとして落とし込む) とかっこいいなと思っているけど、どれくらいできるもんなのか気になる。
パフォーマンス考えると DDD でおすすめしているコードにできるわけないところはあるよなとは思いつつ、できるだけビジネスロジックをまとめられると、「コードが仕様」と言われてもブチ切れないような見通しの良いコードになるんじゃないかとか思っている
実際のけしかけムーブではまだ「DDD やろう」までは言ってません
ギター
ギター教室通い始めてる (半年くらい経った) んですけど、5 月に教室内発表会があるのでそれの練習が始まりました。
みんなで歌いながら演奏する感じで、正直歌うのは嫌なんだけどまぁそれも経験か、みたいな感じで受け入れています。
ギターではコードをジャカジャカ引くだけなんですが、コードの並び見るだけでどう弾くのかちゃっちゃとわかるようになってたのは成長を感じる
これの次の発表会ではぼっちざろっくの曲挑戦したい
ゲーム
- モンスターハンターワイルズ
- 最初の一週間はアホみたいにやってたけど、最近は落ち着いてきた
- このシリーズ久しぶり or 初めて遊ぶ人へのアドバイスなんですが、絶対動画とか見て操作方法覚えたほうが良いです。武器の操作もそうだし、ゲームの仕様もなかなか理解しづらくて、何も教えてもらってないと厳しいです。そこら辺で敷居は高いんですが、わかってくるとめっちゃ爽快で楽しいです。2G とかやってたんですけど、あれは明らかにターン制 (敵の攻撃終わったらこっちが攻撃、また敵の攻撃避ける、の繰り返し) だったのに対して、今のモンハンは敵の攻撃をうまく捌けば実質ずっと自分のターンみたいにできて、それができると気持ちいい。
- balatro
- 友人が完全主義者++ (0.3% の人しか取っていないすごい実績) を取っていてオイラもやってみるか、と挑戦しています。週一くらいで gold stake 一つずつ取りたいわね (今 6/15)
鑑賞
- ベルセルク (漫画)
- 無料キャンペーンで読んでました。エルデンリングとか隻狼のパクリ (実際は逆) がたくさんあって面白かったです。
- 運動脳 (本)
- 「運動すれば脳に良いから運動しろ」って本。水泳とかランニングを最低 20 分、できれば 30~45 分やるのを週 2, 3 回やると良いらしい。週一で泳いでるけどもう一回か......
- ビーキーパー (映画)
- ジェイソン・ステイサムが主演なのでそんな予感はしていたけど、完全にジョン・ウィックでした。ジョン・ウィックに収束する速度が早すぎてめちゃくちゃ爆笑しました。
畳み込みニューラルネットワークを使って質感を学習してみた
背景
世の中の物質は様々な材質をしており, その材質により物の見え方は大きく異なります。たとえば, アルミニウムなどの金属を見ると光沢感があるように感じると思いますが, 布はそのような光沢感を感じません。今回は, この物体の見え方の意味での質感を機械に学習させて, 「質感 A と質感 B は, 感覚的に(人の直感的に)どれくらい異なるか」ということを学習させることを目標にします。
下の絵は質感の違いの例です。右側の物体は光沢感があって, 中央, 左の物体は光沢感はないですが白黒の違いがあります。

質感の違いを計算出来ると, 質感のデザインを行う際に, 今デザインしている質感と目標の質感がどれくらい異なるのかを数値化できたり, さらに応用すると自分が使いたい質感のデザインを直感的に選択したり(色の選択については, HSV 色空間を使って直感的に出来るようになっていると思いますが, それを質感でも出来るようになる)出来るかもしれません。これを機械学習的にやってみようかなと思ったのがこの記事です。
質感の違いを測る
まず質感の違いをどう測るのかを考えます。何となくの直感ですが, 人はものをパッと見るだけで質感がどんな感じなのかを推測することが出来ると思います。そこで今回はいろいろな質感の画像を作って, 被験者が画像の「似てる・似てない」を判定することで学習データを作ります。
ということで, 考えることは「質感の画像をどう作るか」と「質感の画像をどのように比べて似てる・似てないのデータを作るか」「データからどのように学習するか」の 3 つです。
質感の画像生成
実は質感が決まってもまだものがどう見えるかは決定しません。対象がどう見えるかは, 対象の形, 環境光, そして質感が必要となります。今回は(かなりサボって)これらのうち主に質感のみしか変化させず, 形と環境光はほぼ fix して画像を生成していきます。*1ただ, 形に関しては少し変えます。
画像は BRDF Explorer というものを使って生成しました。また, 質感のデータは MERL BRDF Database を用いました。
https://www.disneyanimation.com/technology/brdf.html
https://www.merl.com/brdf/
下の画像は生成した画像の一例です。コンピュータービジョン的な研究をやってる人ならおなじみだと思いますが, 形状は armadillo です(環境光も論文でよく見るやつだと思いますが名前を知りません, にわかなので)。

質感の画像比較
質感の画像比較に関しては, 過去に似たような研究がなされていたので, それを参考にしました。
Toward a perceptual space for gloss
この論文では, 被験者に対して 3 枚の質感画像を見せます。そして, 「中央の写真に左右どちらの写真の質感が似ていると思うか?」を質問し, 被験者に答えてもらいます。
今回の場合もこれに倣って, この実験を繰り返し行ってデータを作ります。20 代の男性 1 名が実験に参加しましたが, 被験者が苦痛を訴えたので, 比較データはだいたい 400 個しかありません。
学習手法
学習に関して何も知識がないので, 割と適当です。「ネットワークこういう風にした方が良い」とかあったら教えてほしいです。
自分の作ったネットワークは,
- A: 画像を低次元のベクトルにする(今回は可視化がしたかったので 2 次元)畳み込みネットワーク
- B: 低次元のベクトル同士の距離を計算することで, 「似てる・似てない」を計算する層
の 2 つに分かれています。各被験者実験データは 3 枚の画像から構成されていますが, まず 3 枚の画像それぞれを A のネットワークに入れて低次元ベクトルにし, それを B のネットワーク(?)に入れて「被験者が『左の方が近い』と答える確率はこうだよ」ということを計算します。
1 つ目のネットワークは, VGG16 を単純化したものを使いました。VGG16 を参考にした理由は, どっかの話で「VGG16 でスタイル変換が出来るよ」という話を聞いたからで, これを用いると(質感とスタイルは似てるところがあるので)質感を計測したい対象の形が変わってももある程度正確に質感の違いを予測できるのではないかと考えたからです。
普通の VGG16 では 1000 クラス分類をしてますが今回は上で書いた通り 2 次元ベクトル化したいだけなので出力ベクトルは 2 次元です。
2 つ目のネットワーク(?)では, 低次元化したベクトルに関して, 左画像と中央画像のベクトルの距離を d_L, 右画像と中央画像のベクトルの距離を d_R とし, 1 / (1 + exp(d_L - d_R)) を計算することで, 被験者が左と答えるか右と答えるかをモデル化しました。
一応コードも置いておきます。Google Colaboratory で実装しました。
BrdfNetwork.ipynb - Google ドライブ
実験結果
上記のような方針で実験を行った際の, 質感の二次元分布を示します。
まず armadillo オンリーで実験を行った場合ですが, この場合は結構いい感じに分布してる気がします。傾向として, 右側に白色が, 左上側に黒色が分布しており, かつ下側の光沢感が強い傾向が読み取れます。

次に, sphere と armadillo を混ぜた場合の結果です。うーむ。何となく分かれてる気がする。

bunny と armadillo です。大きく見ると分かれてる感がありますが細かく見ると一か所にいろんな質感(白黒)があってダメな感じがします。

まとめ
- 質感の違いをニューラルネットワークを使って学習してみた
- 形が 1 種類の時は結構いい感じに分布している
- 形が増えるとイマイチだけどそもそも学習データ少ないからかもしれない
- Persona 5 と大神は良かったぞ
ISUCON 8 予選に参加しました
ISUCON8 の予選に参加しました。
詳しい記事は我らがリーダー(?)が書いています
brookbach.com
とりあえず僕も書くかっていうだけ書いておきます。
今回は"前半戦は"座るだけではなかったので良かった(多分一番おいしいところを持っていった)
本番の流れ
僕はサーバーの設定ファイルとかよくわからない(えぇ…)のでそこらへんは任せて最初からアプリの実装を見たりデータベースの仕様を確認したりしていました。
で, get_event 関数がクソ遅そうだったのでそれの報告と改善方法を言ったら「やって~」と言われたので実装
実装内容
- 各 sheet 毎に SQL を呼び出しているのが遅そうなので一回のクエリですべての情報を引き出すように変更
- 具体的には SELECT * FROM reservations WHERE event_id = ${id} みたいな感じのクエリを呼び出せば, イベントごとの sheet 情報が引き出せる
- sheet 情報は固定なので "ベタ書き"(???)
okeigo 君が開発用サーバーも用意してくれてたのでそっちでテストしてましたが, 7, 8 回書き直したので自分の実装力の NASA を感じる
でも 14:00 くらいに実装出来たのでベンチ通したらスコアが 600 点 -> 3000 ~ 5000 点くらいになってテンションが上がった
get_event 周りの所感
~競技終了まで
これ終わった後は特に改善できそうなところがよくわからなかったので終わり
- 他の 2 人が改善していたっぽい
- データベースの reservations に event_id, user_id, sheet_id の外部キー登録すると改善するのかなーと思ったけどパッとうまくいかなかったし, データベース変更しちゃったらどうしようという不安に襲われたのでやめた
最終的には 8000 点くらいだったっぽく, 予選落ち
- 残念
まとめ
UNDERTALE はいいぞ!
undertale.jp
(PVだけ見るとオススメしづらそうなのやめろ)