ボチャレってロードバランシングしてる気分になるよねって話

僕は通勤中、習慣的に駅メモをよくプレイします。
駅メモをよく知らない人に向けて簡単に説明すると、

「でんこと呼ばれるなんかすごいアンドロイドみたいなやつを駅にアクセスさせて思い出を集めよう!」

というゲーム。
これだけだとコレクションゲームっぽい雰囲気が出て、いろんな駅を巡って思い出作りができる素晴らしいゲームなのですが、

実際のところは駅の奪い合うという椅子取りゲームになっており、またその駅にランキングがあるものですから、当然地主プレイヤー(僕じゃないよ)や、沿線を独占するプレイヤー(僕じゃないよ)がちらほら見かけられます。

またやたら攻撃的なプレイヤー僕じゃないよもいたりなど、独占欲と暴力で支配され、プレイヤー同士の憎しみが蔓延り、完全に人間の闇を具現化したゲームでもあります。

で、その治安最悪ゲームは、でんこに複数の駅をリンクさせると、その駅数と保持した時間によって通常よりも多くポイントがもらえる(ボーナス)仕組みになっています。

この仕組みを利用して、短時間に一気にでんこにリンクを持たせる(あるいは複数駅を長時間持たせる)ことで、スコアの荒稼ぎができます。これをボチャレ(ボーナスチャレンジ)と言います。
僕はこのボチャレのプレイスタイルがロードバランシング(負荷分散)に似ているな、と思いました。

どういうことか。
でんこに複数の駅をリンクさせるということは、当然ほかのプレイヤーから攻撃を受ける可能性が高まります。駅によっても異なりますが、だいたいの駅は1, 2プレイヤー分のでんこしかリンクさせることができません。

それ以上のプレイヤーがアクセスしてきた場合、既にリンクしているプレイヤーのでんこに対して「攻撃」するか、「強制的に追い出す」かの二通りです。
でんこが攻撃されてHPが0になるとやられた駅だけでなく他の駅でもっていたリンクもすべて消失、ボチャレ終了となります。

つまり、ボチャレを効率よく行うには、「いかにでんこへの負荷を分散出来て長時間の稼働(リンク&回復)ができるか」が肝となります。(人によっては単一のでんこで大量の駅を持つこともありますが…)

ボチャレプレイしているときの自分はロードバランサなのです。でんこに負荷をかけすぎない調整をしつつ長時間保持を目指すのです。

というわけでボチャレプレイスタイルをロードバランシングの方式にたとえてみました。

1. ラウンドロビン方式
アクセスする駅ごとに次々とでんこを変えていくスタイルです。一番無難。

2. 比率方式
予めどのでんこにはどれくらいの駅を持たせるかなどの重みづけし、その割合で割り振るスタイルです

3. 最小コネクション方式
一番リンク数が少ないでんこに対して優先的に駅を割り振るスタイルです

4. サーバー監視方式
でんこのHP、リンク数、攻撃された回数など統計情報を元に駅を割り振るスタイルです。

これ、意外と実プレイでも使えるんじゃね?ってちょっと思ったりもしたのでだれかやってみてください(他人任せ)

これでボチャレがうまくいかなくても僕は一切の責任を取りませんので悪しからず。

体重が増えた

体重が増えた。突然何いってんだこいつって感じですが、体重が増えました。
実家にいたころは常にBMIが17~18を行き来するいわゆる痩せ型でした。
それが…どうしてこんなことになったのか。BMIが20~になるなんて。
僕はいくら食っても体重が増えない体質だと思っていたのですが、そんなわけなかった。夢だった。幻想だったのです。

考えうる原因はやはり、一人暮らしを始めたことによる食の抑制がなくなったことだと思います。
一人暮らしは何もかもが自由なので、実家にいたころの制限というか拘束がほぼないんですよね。ご飯はいついつに食べる、お菓子はこれだけとか。
僕は実家にいたころでもそこまで制限があったわけではないですが、やはり一人暮らしとなると夜中にコンビニにお菓子を買いに行ったり牛丼食いに行ったりできるのでそういった食生活が僕を横に広げていったのだと思ってます。

はじめよう、ダイエット。とまではいきませんが、ちょっと生活習慣含め見直したいと思います。

Swift3向けのGeoHex3ライブラリつくった

最寄り遺産サーチを作る際、Swift向けのGeoHex3ライブラリがなかった(厳密にはあるのですが、Swift3向けに対応する必要があったりPodsになかったり)ので作りました。いわゆる副産物ってやつですね。

nekowen/GeoHex3.swift

本家からSwift3へそのままポーティングしただけですが、なるべく扱いやすいようにはしています。
以下、サンプルを置いておきます。

// とりあえず緯度経度からHexを取得する
GeoHex3.getZone(latitude: 35.12345, longitude: 35.12345, level: 7)

// ヘックスコードからHexを取得する
GeoHex3.getZone(code: "XM1234567")

// X、YからHexを取得する
GeoHex3.getZone(x: 123, y: 456, level: 7)

// 表示範囲からHex配列を取得する
GeoHex3.getZone(southWest: 南西の座標, northEast: 北東の座標, level: 7, buffer: false)

書く順番間違えましたが、ライブラリは

pod 'GeoHex3.swift'

からプロジェクトに組み込むことができます。また、

pod try GeoHex3.swift

より、サンプルを試すことも可能です。

最近某ゲームで触れて興味を持ち始めたGeoHexですが、位置情報ゲームや探索時には非常に有用なアルゴリズムだと思うので、今後機会があればその類のサービスか何かを作ってみたいですね。

働き出してからのcompany.log

この記事は「dendai sie; Advent Calendar 2016」4日目の記事です。遅れてすんません。

偏見入ってます。参考程度にしてください。参考程度に!

働き出してもう数か月たちますが、既に20人以上の社員が入れ替わっていて、退職のお知らせを読むたびに心が抉られる気分です。

そんなわけで、会社。特に、IT系のベンチャー企業を考えている人たちに入社してから後悔しないためにも、経験ログとして、この記事を残しておきます。

1.経営が安定している、また起業してから5年以上経過している会社かどうか

ベンチャー系の8割は5年以内に消滅すると言われています。会社を選ぶ際には設立5年以上経過していて、なおかつ「今後も安定して利益が得られるプロダクトが存在している」会社を選びましょう。

たまたま入った会社が崩れかけていた、なんてこともあります。本当にあります。マジであるからな。なので、その会社が今後やっていける状態か?というのを見極める必要もあります。

2. 完全週休二日、残業代は必ず出るところを選ぼう

たまに土日出勤でつらい思いをしている方をTLでみかけますが、土日は出勤しなくてもいいように、完全週休二日を選びましょう。もしアラート対応や緊急トラブルが発生した場合でも、代休や給与が上乗せされるような場所を選んだほうがいいです。

あと、最近は見込み残業制度を利用するところが多いですね。見込み残業は給与に最初から規定の時間分の残業代が含まれていますが、逆にその時間より多く残業すると損してしまいます。ソシャゲや常時稼働のプロダクトを運用する会社は、時期によって泊まり込みになる可能性が高いため、きちんと残業代が出るところを選びましょう。

3.勉強会や自発的にサービスを立ち上げていける会社を選ぼう

月に1度社内のエンジニアを集めて勉強会を開催するイベントがあったり、個人で購入した参考書の費用を負担してくれる会社があれば、そこを選ぶとよいです。エンジニアという職業柄、自分も圧倒的成長しなければどんどんおいていかれてしまいます。周りの人を集めて勉強することで、新たな知見を得られるとともに、自分の知識を共有することで、ほかのメンバーとの交流や技術力向上の糧となります。

あとは、ベンチャー系であれば、積極的にサービスを提案していける雰囲気のある会社だとよいと思います。いわゆる自社開発が活発なところです。開発だけなら受託でもいいのですが、1からの開発提案から自分・メンバーで作ってゆくものは仕様書を渡されて開発するだけよりも大きな経験を得られると思います。主にモノを作り上げていく楽しさとか意識とか。

最後に

いろいろ書きましたが、とりあえずテキトーな会社に入ってダメだったら別のところにいく、でもいいと思います。「まだ若いんだから、いくらでもやり直せる」です。

…20代限定ワードですが。ブラックに入社して心病んでしまうとキツいですが、そうでなければ、まだ若いんだから失敗してもやり直せる可能性はいくらでもあるよ、ということです。

ちなみにこれは病気で辞めてしまった先輩に言われたものです…

でんこのHPとAPの伸びについて調べてみた

この記事は「ステーションメモリーズ! Advent Calendar 2016」 3日目の記事です。

なにかこっかなーと考えていたら夜になっていました。おえねこです。おひさ~

とりあえずネタがないので今回はこれでよろしく。

みなさんでんこ育成捗ってますか?駅メモ内のでんこお仕事回数ランキングみましたが、トップがにころなのはああ…(察しって感じですネ。経験値渡せるし。

ところで、でんこは成長させると、HPとAPが伸びます。当たり前です。伸びなかったらキレて五反田を攻めます。ただ、でんこ毎によってHPとAPの伸びって違いますよね?

HP、APが近いでんこ同士で比較してみるとわかりやすいと思います。

例えば、しいら(最大HP:384)さんはLv.1 -> Lv.10でHPが6増えます。お仕事回数ランキング3位のルナ(最大HP:360)さん。Lv.1 -> Lv.10でHPは22も増えます。いったいこの違いって、なんでしょうか?

APに対しても同じことが言えます。調整で弱体化予定のりんご(最大AP: 300)ちゃんは4、同じアタッカーの井村(最大AP: 300)さんは41、APが増加します。りんごちゃん初期の伸びは悲惨ですが、最終的にAPは井村さんと同等になります。

このように、同じタイプのでんこでもキャラクターによってHPとAPのステータスの伸びに違いがあります。もちろん初期ステータス値や最大HP、最大APが異なるからでしょ?というのはありますが、りんご・イムラのように、辿り着くまでのHP、APの変動値もキャラクターによって異なっています。

なーぜぇ?

イージングという言葉をご存知でしょうか?FlashやCSSを触っている方なら「あーあれね」でわかると思うのですが、簡単に言うと「物体を加速・減速してアニメーションっぽくみせるアレ」です。

easing_1こちらのサイトで実際のアニメーションを確認できます

HPやAPの上昇値にはナミがあり、またでんこによっては初期が全く伸びないタイプ、後半になると伸びなくなるタイプ、だいたい一定に伸びるタイプ、とイージング処理に似た性質をもっています。そのため、イージング計算を行うことでゲームに近いか同じHP・APを算出することができます。

私が調べたところ、駅メモでは「Linear(直線型)」「Sin Ease In(余弦波型)」「Sin Ease Out(正弦波型)」が利用されているようです。とりあえずシーナ様はHPが「Sin Ease Out」、APが「Linear」を利用していると思います。ほかは自分で調べてくれ。

最後に

これをきっかけに誰かでんこのHP/AP計算ツールでも出してくれれば幸いです。ぼくはめんどいし駅ろけメンテしたいしシーナさんを賢くしたいので作りません。ということで頼みましたよ。

ちなみに↑のサイトのコードを利用して計算したところ、実際のHP/APと少しズレがありました。なんかミスったかな