2024年3月の振り返り

日々の生活

運動をできるだけやるように生活習慣を変え始めた。

ゲームのところでも触れるけど二年ぶりくらいにリングフィットアドベンチャーを再開。

体調が悪い日以外はできるだけコンスタントにやるように心掛けている

そのおかげか体重も2kgくらい減り、大分体力が戻ってきた感じがある

 

ゲーム

Halo

相変わらずInfiniteではマルチプレイヤーでファイアファイトをやりながらウィークリーミッションとウィークリーアルティメットの消化とかをやっていた。

 

store.steampowered.com

 

コンスタントにウィークリーミッションを消化できていたのと、もう少し歯ごたえのある遊びがしたかったのでHalo2 Legendaryキャンペーン周回やHalo3 ODST Legendaryキャンペーン周回などもやっていた。

 

store.steampowered.com

 

Halo2Halo3 ODSTは大分久しぶり(たぶん数か月ぶり)のプレイだったのでどんなもんかなと思っていたけど、大分サクサクといけた。

とくにHalo3 ODSTの方は3時間以内くらいでクリアできたので大分いい感じだった。

 

Doom(1993)

最初のキャンペーンの「Keep-Deep in the Dead」をクリアした。

 

store.steampowered.com

 

Doom自体は初めてだったので武器の切り替え操作などで戸惑ったけど、プレイしているうちに慣れた

結構遊びやすい印象なのと、エイムもそこまで厳密ではないのでFPS始めるのにはいいかもしれない。

 

ペルソナ3リロード

p3re.jp

引き続きストーリーを進めながら、タルタロスでレベル上げをしていた。

まだ4月なので全然進んでないけど......。

 

タルタロスの攻略とレベル上げの見通しが立ったのでコミュ育成に力を入れていきたい。

 

 

Hollow Knight

メトロイドヴァニアかつソウルライクな2Dアクションアドベンチャー

 

store.steampowered.com

 

Xbox Game Passに前からあって気になっていたので初めてみた。

メトロイドヴァニア系はいくつかやったことがあるのもあり、今のところはサクサク進んでいる。

ただ大分広いダンジョンっぽいのでまだまだ遊び甲斐がありそう

 

リングフィットアドベンチャー

二年ぶりぐらいにリングフィットアドベンチャーを再開。

 

www.nintendo.com

 

最初のコースからプレイしなおして、ガンガンレベル上げとかやっていた。

 

とりあえず、3月中にクリア直前まで進められたので良い。

 

OSS

RubyにいくつかのPRを投げていた

 

github.com

 

github.com

 

NODE_ONCEの対応の件の詳細は事業部の開発者ブログの方に経緯とかまとめてある。

blog.agile.esm.co.jp

 

Ripperの件は、CreatodonでUniversal Parserを有効化していてRDocのビルドエラーが出ているのに気付いて調査を始めたもの。

メモリ周りの問題だったので、調査しながら初めて触ったGDBやValgrindにだいぶ慣れることができた。

 

Creatodon

引き続き、Mastodon のmain追従対応とかをしながらRubyのmasterで動かしている。

通知周りの設定がいくつか変更になったので、その辺りをまとめたりとかしていた。

2024年2月の振り返り

日々の生活

ひき肉を赤ワインで煮込んでミートソースを作ったりするのにハマっていた。

ケチャップとかで少し酸味強めにして、粉チーズをまぶしてまろやかにする感じで食べてたんだけど非常に良かった

一度に大量に作れるので作り置きしやすいのも良かった

 

あとは原木しいたけを頂いたので、それを焼いて醤油で食べたりしてた

そのまま焼いても美味しいんだけど、中華スープの素とかといっしょにスープにしておくのも良かった

 

ゲーム

Halo

久しぶりにHalo InfiniteのLegendaryキャンペーン周回とかやってた

久しぶりだったので大分ボス戦に苦戦するかなと思いきや、意外と覚えててサクサク進んでた

やっぱ継続してプレイしてたので少しは上達しているらしい

 

マルチプレイヤーの方は基本的にFirefightをこなしつつ、ウィークリーミッションを消化

あと個人的に嬉しかったのがミョルニルアーマーのMrak IVが来たこと

www.halowaypoint.com

 

ジェローム、アリス、ダグラスたちが使ってるアーマーでHalo Wars好きとしてはかなりありがたい

まだカスタムとかできていないので頃合いを見て好みのアーマーに仕上げたい

 

Sea of Stars 

store.steampowered.com

 

序盤はのんびりプレイしてたけど、だんだんとハマって最後はのめり込むようにプレイしてた

シナリオの楽しさ、音楽の良さももちろんだけど何より戦闘システムがいい

リズムよくボタンを押すと連撃が決まったり、ジャストガードができたりと臨場感があって良い

またスキルポイント的なものは通常攻撃で回復するので、どのタイミングで通常攻撃を行いスキルポイントを回復させるかの判断も絶妙に楽しい

 

戦闘中、強力な攻撃を行う相手の頭上に阻止するための攻撃属性とかが表示されるのでそれをうまくつきながら敵の攻撃をいなして完封とかができるシステムなのも非常に良かった

そのために仲間の入れ替えなどもうまく考えつつ立ち回らないといけない

上手く完封できた時の楽しさは最高

ペルソナ3リロード

p3re.jp

久しぶりのペルソナ

たぶん最後にやったの女神異聞禄ペルソナ(PS)を久しぶりにプレイした時なので数年前とかかも

 

初代と2とかは遊んでたんだけど、3は今回初めてプレイ

シナリオ自体はアニメ版を見てたのでだいたい分かってるので比較的サクサク進んでる

 

OSS

Rubyに最近導入されたUniversal Parserの依存関係整理とかやってた

github.com

 

あと社内の勉強会で出たバグの対応とかも投げたりしてた

 

月の終わりごろはUniversal Parserを有効化するとRipperがメモリ関連のエラーを出して落ちる件の調査とかをメインにやってた

とりあえず原因らしきところとか対応とかは見えてきたところなので引き続き頑張りたい

 

Creatodon

引き続き、main追従したりしてた

けど、Ripperのメモリ関連のエラー調査とかにかかりきりになってて最近追従できていないので週末に頑張って対応したい

 

あとCreatodonはUniversal Parserを有効化したRubyのmasterで動かしている

だけど、Ripperのエラーの件が解消できていないので暫くはUniversal Parser有効化したRubyは使えなさそうかなぁと思ってる

使ってるとやっぱりバグを踏むので出来るだけ使いたいけど......

2024年1月の振り返り

日々の生活

最近、節約をしたいということでトクバイというアプリを使いだした。

 

tokubai.co.jp

 

近所のスーパーのチラシとかがスマホから確認できるので非常に便利。

あと今日のレシピとして献立の例とかも出てくるのも地味に嬉しい。

 

最近はトクバイ経由で知ったスペアリブのほったらかし煮をクッキングプロで作ったりしてた。

 

ゲーム

Halo

ずっとInfiniteのマルチプレイヤーをやってた。

 

www.halowaypoint.com

 

最近高難易度キャンペーン周回とかもやりたくなってきたのでMCCでHalo初期三部作Legendaryキャンペーン周回とか配信でやりたい

 

Supraland: Six Inches Under

レッドとブルーの棒人間みたいなのになって地下を探検する感じのゲーム。

 

store.steampowered.com

 

悪魔城ドラキュラとかメトロイドみたく、徐々にパワーアップして謎解きしながらストーリーを進める感じだった。

意外とメタなネタとかもあってニヤリとするところもあってよかった。

 

Planet of Lana 

横スクロールで進んでいくパズルゲーム。

 

store.steampowered.com

 

非常に音楽が良く、サントラを買うことにした。

ストーリー的には住んでた星にやってきたロボットたちにさらわれた兄弟を探す少女の話。途中で合流する猫っぽい相棒と一緒にパズルを解いていくのが非常に楽しい。

 

 

Rise of the Tomb Raider

言わずと知れたトゥームレイダーシリーズの一つ

 

store.steampowered.com

 

どうも三部作の中編らしい(Xbox Game Passに来てたのでやってみたんだけど、シリーズ通してはやってないのよね)

 

落ちてるアイテムを加工して立ち回るのとか非常に楽しかった。特に空き缶使ってのステルスアクションをやってる時はテンション上がったなぁ。

 

Sea of Stars

スーファミ時代のPRGを現代に再現という感じのゲーム

 

store.steampowered.com

 

プレイしてないから良く知らないんだけどクロノトリガーとかのBGM作った人も協力してるらしい。

凄く親切なPRGという感じでサクサク進む。おまけに戦闘自体もボタンをタイミング良く押すことでより戦いやすくなるという感じで単調な感じにならないのもいい。

 

まだクリアしてないけど、たぶんこれPRG好きの人は満足しそうだなとか思った。

 

OSS

基本的にRubyのパーサー周りにPRを投げてた。

特にNODE_INTEGERとかの導入やUniversal ParserのAPI依存削減とかはマージされて良かったなぁ。

 

github.com

github.com

github.com

github.com

github.com

github.com

github.com

github.com

github.com

Creatodon

基本的にはMastodonのmainブランチ追従とRubyのmaster追従をしてて大きなトラブルは無しという感じだった。

 

ただ、Web UI周りのデザインが大きく変わった関係でコンフリクトしたのとかは大変だった。

 

github.com

 

Creatodonでは自動投稿削除とか予約投稿などもWeb UIからできるようにしている関係でそのあたりがコンフリクトしていた。

とはいえ、CypressでのE2Eテストを書いてあったのでいくらか楽にできたのは良かった。

 

あとCreatodonはRubyのmasterブランチで動かしている関係でリモートサーバーからの画像とかが一時的に保存できないみたいな現象も発生した。

 

それに関しては以下のPRの変更で解消されてて、どうも内部の処理でArray#firstを呼び出した際にheap-buffer-overflowが起きてた模様。

 

github.com

 

 

Creatodonの全文検索にkuromojiなどを使うようにした

はじめに

Creatodonの全文検索機能に日本語形態素解析エンジンのkuromojiを導入した時の覚書です。

 

やったこと

変更差分は以下のPRを参考にすればOKです。

 

github.com

 

基本的に最小限の変更でOKとなるようにインデックス周りとCIのみを修正しています。

 

インデックス周りの修正に関してはmayeahさんの以下のコードを参考にさせていただきました。

 

github.com

 

CI周りに関してはコメントアウトするよりは実際の環境に近いものをテストできるようにしておきたかったのでMastodonソースコードで利用しているElasticsearchのイメージではなく、Elasticsearchが提供しているGitHub Actionsを使うようにしています。

GitHub Actionsを使うようにすることでkuromojiなどのプラグインをCI上で利用できるようにしてる感じですね。

 

あとはCreatodonを動かしているサーバーでkuromojiなどをインストールして、再度インデックスを再生成してます。

 

おわりに

 

とりあえず、CI周りだけどうするかなぁと考えてたんですがGitHub Actions側でいい感じにできたので良かった。

他のサーバーでkuromoji入れてるサーバーへCI周りの修正はPR投げれそうだなぁと思ってますが、やるリソースがあるかは分からないのでその辺は未定......。

 

参考

 

www.elastic.co

 

www.elastic.co

blog.asterism.xyz

 

github.com

(WIP)「リテラルオブジェクトをRubyのオブジェクトから卒業させる」をやってみた Part 2

はじめに

この記事は、以下の記事の続きです

gamelinks007.hatenablog.com

parse.yリファクタリングチャレンジの中の一つ「リテラルオブジェクトをRubyのオブジェクトから卒業させる」をチャレンジしている途中記録をまとめたものになります。

前回から今回の記事までにやったこと

マイナスがついているIntegerのリテラルオブジェクトを生成できるように対応

前回の記事までの対応だと、以下のようなコードが正しく処理されませんでした。

p -117
# => 117と出力される

これは parse.y の以下の部分で行っている -117 へと変換する処理がすり抜けているため、117 という正の数になってしまっていた感じでした。

github.com

なので、以下のコミットでマイナスがついている場合も負のIntegerを生成できるように修正した。

github.com

やっていることとしては rb_integer_literal_info_t というInteger関連の情報を保持する構造体を追加し、そこへ負の値かどうかの情報を渡すようにしています。 それを compile.cリテラルオブジェクトを生成する部分でチェックし、チェックに引っかかれば負の値として値を返すようにしています。

0の場合だけIntegerのリテラルオブジェクトを正しく生成できない問題に対応

次になんとかしたのは 0 の場合だけ正しくリテラルオブジェクトを生成できていない部分です。

具体的には以下のコードが false を返していました。

p 117 - 117 == 0
# => falseが返される

挙動などを調べたところ、これは以下のようにリテラルオブジェクトを生成していることが分かりました。

117 - 117 == 117

何故か 0 の部分が 117となっているため 0 == 117という式になり、結果として false が返っていたというわけです。

で、こちらに関しては以下のコミットで修正しました。

github.com

どうも tok(p) で値を取得している際に以前の値が残ったままになっているケースがあり、そのエッジケースに遭遇したということのようです。 そのため tokfix(p) を追加して、その辺をいい感じに処理しています。

ここは現状のRubyでは問題になっていませんが、あとでPR投げてもいいかなと思っています。

今後

とりあえず、 make btest でパスしていないテストの数が17件くらいになってきたので残りの部分を直していきたいですね。 たぶん次に対応するのは 1.2rとかのリテラルオブジェクトを生成する部分などになりそう。

宣伝

parse.y リファクタリングチャレンジとかUniversal Parserの話、またはCRubyの内部実装の話などは以下のイベントでアレコレ話してたりするので興味のある方は是非是非ご参加くださいー。

hamadarb.connpass.com

(WIP)「リテラルオブジェクトをRubyのオブジェクトから卒業させる」をやってみた

はじめに

この記事は、以下の記事にある「リテラルオブジェクトをRubyのオブジェクトから卒業させる」をチャレンジしている途中記録をまとめたものになります。

 

yui-knk.hatenablog.com

 

まだ対応途中ということもあり、不正確な情報も混じっているかもしれません。

「ここ間違ってるよ」とかあればコメントなどでツッコミを入れていただければ幸いです。

 

やったこと(というか現在やっている作業)

とりあえず、以下のPR内でIntegerのリテラルオブジェクトの生成をparse.y内部ではなくcompile.cで行うように修正しました(ローカルで軽く動作確認はとれているんですが、CIはまだ落ちている状況)

 

github.com

 

RubyのASTのノードで利用されているRNodeという構造体にrb_literal_structという構造体を追加し、Integerのリテラルオブジェクトを生成する部分でrb_literal_structにパースしたコード(ex: 117などの数字)をchar*で保存しています。

また保存した値などを引き回してRNodeの生成部分まで渡し、最終的にcompile.cでリテラルオブジェクトをISeqへと渡す部分までもっていき、そこでIntegerを生成するようにしています。

 

困った点など

基本的にポインタで構造体を引き渡したりしており、意図せぬ箇所で初期化漏れがあったりしてSEGVが起き続けていたのは大分困りましたね......。

 

SEGVで大分時間が溶けたんですが「たぶん、何かしらCRuby用のデバッグツールが同梱されてるんじゃないか?」と思い、ソースコードを調べたところmake gdbという便利コマンドがあり何とかなりました。

 

make gdbRubyソースコードディレクトリ内にtest.rbを置くとそれを実行し、SEGVした際の情報などをgdbデバッグできるというコマンドです。

これのおかげでバックトレースなどをを詳細に確認でき、意図せぬ初期化漏れなどをつぶすことが出来ました。

 

今後

とりあえず、Integerのリテラルオブジェクトは剥がせそうな様子になってきたかなと思います。

ただCIがパスしていないことや他のリテラルオブジェクトを対応しないといけないので道のりはかなり長そうです。

 

ひとまず次は、CIがパスするところを目標に対応を進めたいと思います。

その後はSymbolかFloatを対応していきたいですね。

 

あと「とりあえず動く」を目標にコードを書いてるので大分アレな感じになっているのも直していきたい......。

 

Creatodonでparse.yのUniversal Parserを使っている話

はじめに

これは僕が運営・管理しているCreatodonというMastodonのサーバーでRubyに最近導入されたparse.yのUniversal Parserを使うようにした時の備忘録になります。

Rubyに導入されたparse.yのUniversal Parserのビルド方法については以下の記事が参考になります。

blog.agile.esm.co.jp

parse.yのUniversal Parser についてのより詳しい話は、yui-knkさんの以下のスライドも参照していただければと思います。

speakerdeck.com

やったこと

Creatodonではrbenvを使って利用するRubyをビルドしているので、以下のように cppflags=-DUNIVERSAL_PARSERを渡しています。 またjemallocとyjitを併用しており、それらもオプションとして渡しています。

RUBY_CONFIGURE_OPTS="--with-jemalloc --enable-yjit cppflags=-DUNIVERSAL_PARSER" rbenv install 3.3.0-dev --verbose

上記のコマンドを実行して、エラーなどなく終了すればparse.yのUniversal Parserを利用したRubyがビルドできています。

現状とか

parse.yのUniversal Parserを利用するようにしてから一か月くらい経ちましたが、いままでのところ問題なく使えています。 なので、他のRailsアプリケーションなどでも問題なく使えるんじゃないかなと思いますね。