ホーム » 2022

年別アーカイブ: 2022

古代の残骸とチャンク境界

マインクラフトでワールドの開拓が進むと、ネザライト装備を揃えるという課題に取り組むことになる。ネザライトはネザーのy=15を中心に上下7ブロック付近に生成される古代の残骸(あるいはがれき)を集めて精錬することで手に入るのだが、溶岩だらけのネザーで地下を掘るのは結構面倒だ。というのも古代の残骸の生成率は1チャンクあたり平均1.7個と非常に少なく、オーバーワールドで鉱石を採掘するときに使うブランチマイニングのような手法では見つけきれないからだ。そこでTNTを使って発破するような方法が使われるのだが、それにしても何かしら効率的に掘り当てる方法が知りたい。

マインクラフトの噂話のひとつに「古代の残骸集めはチャンク境界に沿って掘ると効率的」というのがある。なんとなくもっともらしく聞こえるし、実際にチャンク境界で掘るとたくさん取れると主張する人もいる。しかし、プログラマ的立場で考えるとチャンク境界で生成率を上げるようなコードは面倒臭くて書いていられないような気がする。だが気がするだけで済ましてしまうのもアレなので、ちょっと検証してみようと思う。

[続きを読む]

SeleniumでWebページをスクレイピングする

自分はバッチ大好きなので、何かを毎日チェックしたいときには、なるべくコードで自動化することを考える。たとえば最近MinecraftサーバをPaperMCで立てたのだが、PaperMCは(上流を含めて)開発が活発で頻繁にアップデートされる。これを定期的にチェックして常に最新版にしておきたいのだが、アップデート情報はWebページに記載されているのみの状況だ。具体的には

のページを見に行って、リストの一番上にあるものがアップデートされたものかどうか確認しなければならない。いちいちこれを目でチェックして手動でダウンロードするのは面倒なので避けたいわけだ。こういうときはWebページをバッチで読んで該当部分をparseしてやればよいわけだが、問題は該当ページがJavascriptによる動的生成である場合だ。このようなページはLWP::UserAgentのようなライブラリでは読めない。そこで動的にページ生成して、その結果を読むような仕組みが必要だ。

Seleniumはブラウザ自動化とそれを支えるツール・ライブラリ群のプロジェクトだ。

これと、APIをサポートしたブラウザを組み合わせれば、簡単にページをparseできるようになる。本稿ではAlmaLinux上のPerlでparseできるように環境を構築する手順を示す。

[続きを読む]