2018年10月
Halite-III
少し前に記事にしたが、今月はHaliteというAIコンテストで遊んでいた。言語はいろいろ選べるが僕はRubyでやってる。AIプログラムを書いて送ると他の人との対戦が始まって、ブラウザ上で動いてるところが見えるというやつで、無限に時間が潰せそうでやばい。
一時は100位以内まで上がったけど、今は拠点周りの挙動を改善しようとしてスコアが落ちている。こればっかりやってても何だなと思うけど、開催期間が来年1月まであるので、気が向いたら直すかも。
少し前に記事にしたが、今月はHaliteというAIコンテストで遊んでいた。言語はいろいろ選べるが僕はRubyでやってる。AIプログラムを書いて送ると他の人との対戦が始まって、ブラウザ上で動いてるところが見えるというやつで、無限に時間が潰せそうでやばい。
一時は100位以内まで上がったけど、今は拠点周りの挙動を改善しようとしてスコアが落ちている。こればっかりやってても何だなと思うけど、開催期間が来年1月まであるので、気が向いたら直すかも。
Rubyで書けるクライアントサイドWebフレームワーク、Ovtoの0.2.0をリリースしました。
いろいろ機能が増えていますが、一番大きいのはAjax対応で、Ovto.fetch
というメソッドでサーバ側のAPIを簡単に叩けるようになりました。
これでだいぶ実用的になった、というか実際にVisionというTODOアプリを作って、実用しています。VPSに置いているのでPCでもスマホでも使えて便利です。
VisionはRails5.2.1 + Ovtoという構成で、このへんがクライアント側(Ovto)のコードです。実行時には、これがopal-sprocketsでJavaScriptに変換されてブラウザで動きます。
10/16から始まった https://halite.io/ がけっこう面白かったので、始め方を解説します。
HaliteはTwo Sigmaという会社が開催しているプログラミングコンテストで、Halite-IIIはその第三回目になります。
Halite-IIIは2〜4人対戦型のゲームで、海に船を出して海中の"halite"を回収し、一定ターン後に一番たくさんhaliteを蓄えたプレイヤーが勝者となります。試合はAIを投稿するたびに自動的にサーバ側で行われ、勝率によってレーティングが変化します。
Gitのpost-checkoutフックを使って、ブランチを切り替えたときにWIPコミットがあればメッセージを出すようにしてみたという話。
WIPコミットというのは個人的な名称だが、全ての変更を仮コミットにまとめたものをそう呼んでいる。例えばブランチで新機能を開発している最中にバグを見つけてmasterを触らないといけなくなった時は、git commit -am 'WIP'
でWIPコミットを作ったあとmasterに移動する。
バグ修正を終えてmasterから戻ってきたあとは、git reset HEAD^
とするとWIPコミットが削除され、作業中の状態に戻すことができる。
作業状態の保存はgit stash
でもできるが、stashの場合は「このブランチにはWIPがある」ということは自分で覚えておかないといけない。一方WIPコミットはブランチに紐づくので、ブランチをcheckoutしたあとgit logすればWIPがあったことを思い出せる。
RubyでAPIサーバを作っていると、Rack::ShowExceptionsとかでエラーレスポンスがHTMLになることがある。通常はこれはデバッグに役立つけれど、APIサーバの場合はcurlで動作確認してたりするので、ターミナルにHTMLがだーっと出力されるとあんまり嬉しくない。
対処法としてはいったん.htmlに保存してブラウザで開くという手があるけど何回もやるのはちょっと面倒。こんなときはw3mを使うと直接見ることができて楽。-Tを付けると標準入力をHTMLとして表示することができる。
curl http://localhost:9292/some_api | w3m -T text/html
Rack::ShowExceptionsの場合は冒頭だけ見ればエラーの主な情報(例外クラス名、メッセージ、発生箇所)が分かるので、以下でもいいかも。
curl http://localhost:9292/some_api | w3m -T text/html | head
近況です。
継承とサブタイプ関係を実装した。
あと、OptionとかResultをどうやって入れるかを考えていた。https://twitter.com/yhara/status/1039172726362009600 https://twitter.com/yhara/status/1038826257482301441 現時点では、Swiftみたいにenum
を入れる案に傾きつつある。
Rubyでブラウザゲームが作れるライブラリ、DXOpalの1.3.0をリリースしました。
1.3.0ではパッチをいただいて加算合成ができるようになりました。例えば炎のエフェクトを背景の上にいい感じに合成できるみたいです。かっこいいですね。
1.2.0から変わっていません。チュートリアルは以下のとおりです。
SteamでInto The Breachというゲームを買った。ドット絵がかっこいい。 pic.twitter.com/BEr0KwkAVy
— yhara (Yutaka HARA) (@yhara) 2018年9月12日
ここ2週間ほどInto the Breachというゲームをやっている。けっこう面白い。絵と効果音がかっこいいのもいい。システムはけっこう複雑な点もあるけど、随所にツールチップで解説が出るのでやってるうちに分かるようになって、そういうところもすごく良くできてる。
ゲームモードは1人用のみ。自軍のメカが3体あって、それを操作して敵モンスターを倒していく。リアルタイム性はなくて、良い手が浮かぶまでじっくり考えることができる(というか、考えざるを得ないというか)。画面上の電力ゲージがいわゆるHPで、これをゼロにすることなく指定ターン数を乗り切ればステージクリア。
自軍メカはそれぞれ2つまで武器を装備することができるのだけど、稼働には「エネルギーコア」というアイテムが必要で、手持ちのコアを3体にどう割り振るかで「駒としての動き」が変わってくる。強い武器は必要コア数も多い。
近況です。
8月は自分用のTODOアプリを作っていた。繰り返しTODOまで実装できたので、そろそろ実用できそう。
自作のフロントエンド用フレームワーク使ってTODOアプリ作ってるけど、最高に楽しい😇 pic.twitter.com/z9M2fEGR0P
— yhara (Yutaka HARA) (@yhara) 2018年8月13日
これのためにフレームワークの方にも手を入れて、例えばOvto.fetch
というfetch APIを叩くメソッドを追加したりした。そろそろv0.2.0としてリリースしないとなぁ(どうもその手の作業は後回しになりがち)。
rubygems.orgを「rg」とかの名前でchrome検索に登録しておくと、一瞬でgemのページを開けて便利。