2012年8月21日火曜日

DQXのモンスターの動きのアルゴリズムがなかなか頑張っている件について

ドラクエばっかりやりすぎて、

眠いです。

みけです。

ひょんな思いつき


DQXでレベルを上げる時にお世話になるトンブレロ。

かわいいですね。

動きが本当にブタさんのようでかわいいですね。

獅子のごとく可愛い子は崖から突き落としてみました。


崖から突き落としてみると、本当にストンと落ちます。


真っ直ぐでなくちゃんと最小経路をとおって来ようとする


落とされたトンブレロはどのような動きをするか?

平地でやっている分にはトンブレロの動きは直線的です。

なので、登れない崖をよじ登ってくるのかと思いましたが、

ちゃんと回りこんでくるようになっていました。

ちゃんと最小経路のアルゴリズムが組んであるようです。


プレイ動画でないのがアレですが…


2012年8月17日金曜日

Graffiti のmaven repo登録

暑い、

ドラクエのレベル上げルのきつい

ミケです。


Groovyにおけるsinatra



以前、上原さんがこんな記事を書いていました。

[groovy][Graffiti]さらにもう一つのGroovyベースのSinatraライクwebアプリフレームワーク Graffiti - Grな日々(uehajの日記)

よさそうだなと思って、早速使ってみようと思ったのですが…


Maven Centralにartifactが載っていない…orz


Gradleでのビルド化



う~む、どうするべきかと考えていたおり、

一応ソースがgithubにあるということなので、

見てみました。


げ、pom.xml…しかもreleaseプラグインとか一切なし…

かといって、僕もmaven詳しくないからな…


そうだ、gradleがあるじゃん。

というわけで、ビルドをGradleで書き換えて、

pullリクエストを送りました。


あっさりと…



マージしてもらえました。

その後、Kerry Wilsonさん(graffitiの開発者)からメールを頂いて、

pom.xmlとbuild.gradle使うのはどっちがいいのよ?

的な話になり、Groovy使いならGradleだよね~という話をしました。


maven centralにあげないの?


こちらでMaven Centralにあげないの?

と聞いたら、上げる予定はないようなので、

面倒くさくて、

僕の名前でmaven centralにあげちゃいました。

groupId org.mikeneck.graffiti
artifactId mike-graffiti-core
version 1.0.0

で入手できます。たぶん。

ゆーすけさんのページとか

わかめのページとか

参考にしました。

2012年8月13日月曜日

JsonPullParser勉強会に行って来ました。 #jppatk

ドラクエのレベル上げ辛いです。

みけです。

ひょんなことから


わかめ氏のつくった軽量のJSONパーサーである、

JsonPullParser勉強会に行って来ました。

なお、当日の参加者によるツイートはまとめられています。


宗教戦争


このブログをご覧の方はご存知のことかと思いますが、

わかめ氏はeclipseユーザーですが、

僕やイケメンこと山本裕介氏は最強のJava IDEである、

IntelliJ IDEAのユーザーです。

というわけで、アノテーションプロセッサーの設定方法で若干、

戸惑いました。

わかめ
mvn eclipse:eclipseして、mavenプロジェクトをeclipseで読み込めるようにします。

イケメン
ま、僕らIntelliJ IDEAユーザーだからpom.xmlをそのまま読み込めるんだけどね。

わかめ
なにーーー!

…30分後

わかめ
IntelliJ はわからないけど、eclipseで Java Compiler > Annotation Processing を選んで…

イケメン
IntelliJ でどうやるんだろう?

みけ
う〜ん、どうやるんだろう?

わかめ
ドヤァ



こんなやりとりがあったとか、なかったとか…


IntelliJ IDEAでの設定


正しくは次のように設定します。

  • IntelliJ IDEAのPreferenceを選びます。
  • Compiler > Annotation Processors を開きます。
  • Enable Annotation Processing にチェックを入れます。
  • Processor Pathにjsonpullparser-apt-1.4.11.jarのパスを入力します。
  • Annotation Processorsのところで + ボタンを押して、次のとおり入力します。
    • Processor FQN に net.vvakame.util.jsonpullparser.factory.JsonAnnotationProcessorと入力します。
    • Processor Options に JsonPullParserClassPostfix=Generatedと入力します。
  • Processed Modules にて + ボタンを押して、 Generated Source Directory Name に .apt_generated(ここは好きに入れて下さい)と入力します。
  • OKボタンを押します。
  • 次にProject Structureを開きます。
  • Modules > Sources を選びます。
  • .apt_generatedディレクトリーを選択して、Sourcesボタンを押します。
  • OKボタンを押します。


以上で設定は完了です。


ソースを自動生成


Eclipseではファイルを保存するという行為が必要ですが、

IntelliJ IDEAは勝手にファイルを保存してくれます。

(「手動でファイルを保存するのが許されるのは小学生までだよねぇ、キャッキャッ」とは言いませんが…)

そのため、Eclipseではファイル保存というトリガーによって、

Annotation Processorが起動しますが、

IntelliJ IDEAではトリガーがないので、

手動でAnnotation Processorを起動する必要があります。

手順は以下のとおり。

  • Build > Rebuild Projectを選択します。


簡単ですね。


JsonPullParserのアノテーションたち


JsonPullParserで重要なアノテーションは以下の二つです。

  • @JsonModel
    • 一つのオブジェクトを表象するアノテーション
    • Javaのクラスに付与する
  • @JsonKey
    • 一つのキー-バリューペアを表象するアノテーション
    • Javaのクラスのプロパティに付与する
    • decamelizeをtrueにすると、Javaではあまり望まれないような体裁のキー(例:first_name)をJavaのスタイルのプロパティー(例firstName)に合わせてくれます。
    • valueにキー値を設定することで、classなどJavaで予約語となっているようなキーのマッピングを指定することができます。
    • converterを指定すると、JsonPullParserを直接操作することが可能になります。


まあ、やってみよう!



というわけで、さっそくモデルクラスを書いて、

パーサーを作ってもらいましょう!




このモデルを書いた後、一度ビルドします。

その後にテストを書きます。





実行結果は…




おお、成功しました(∩´∀`)∩ワーイ


ちなみに、Groovyクラスタの方は自重して下さい。


さて、ここまでできることがわかると、


Groovy使いの僕としては、

アノテーションプロセッサーの設定を手でするのが面倒になってきます。

というわけで、アノテーションプロセッサーをビルドに含める、build.gradleを作成しました。

こんな感じ。





あ、そういえば、Annotation Processingって、gradleでどうやるんだろう… T.B.D.

2012年8月11日土曜日

素数の時にEnrico Pucciと出力するプログラムを書いてみた

ドラクエ、素手プレイのため、

全然先に進めません。

みけです。

おやおや!


FizzBuzz問題が話題になっているさなかですが、

面白いエントリーがあったので、批判しつつ取り上げます。


SST


素数のときだけ"JOJO!"って出力するプログラムを作ってみた - くりにっき

まあ、Rubyを応用したシンプルなプログラムです。

ただ、Integer#prime?という言語に元々ある素数判定を使うのは

反則な気がしなくもないかな。

この問題のポイントは素数であるか判定できるプログラムを書くことなので…


KPT


素数のときにJoJo - scala - - 言葉をポッケに持ち歩こう

Scalaをつかった、これまたシンプルな実装です。

Scalaには素数を判定するというメソッドがないので、

自前で実装しています。

それはいいんだけど、計算量が多すぎるorz

例えば、素数1009を素数であると計算するための計算回数が、1007回になります。

そんなに計算する必要はありません。


計算量


どれくらい計算する必要があるかというと、

2で割り切れるかどうか調べたら、対象となる数値の約1/2まで、

調べれば良いことがわかると思います。

何故ならば、対象となる数値(N)の1/2より大きい数値(M)は、

もはや商が1で余りがM - Nなので、

Mの値を増やしていっても商が1以外の数値を取ることはないからです。

同様に、3で割り切れるかどうか調べたら、対象の数値(N)の1/3より大きい数値は

もう調べる必要がありません。

何故ならば、Nの1/3より大きい数値MでNを割ると、

商1または2、余り1~Mの間の値になるからです。

という感じで、割り算をする値kをインクリメントしつつ、

チェックする最大値MをN/kとして限定していくことで、

計算量を減らします。


屁理屈はここまでで…


素数の時にJOJOと出力するプログラムを書こうとしたのですが、

素数でJOJOと言ったら、忘れることのできないキャラが居ますね。

プッチ神父です。

というわけで、素数になったら、Enrico Pucciと出力されるプログラムを

JavaScriptで書きました。


サンプルではまあ、他のブログのご多分に漏れず、1~100までやっています。





JavaScript可愛いですね。

2012年8月9日木曜日

山ライオンでmac portsがうまく動かなんだが…

こんちわ。

最近、やっとObj-Cを始めてみたみけです。

ふとしたきっかけで


最近ふとしたきっかけというよりは、

mac portコマンドを打ったら、

selfupdateしろと怒られたので、

> sudo port selfupdate
をしたのですが、

Error: 
Error: No valid Xcode installation is properly selected.
Error: Please use xcode-select to select an Xcode installation:
Error:     sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer # version 4.4
Error: 

こんなメッセージが出て、

何もできなくなってしまいました(´・ω・`)

ggrks


まあ、ほっといたわけですが、

どうにもこうにもmac portsを使わないわけに行かない状況に

なったので、ggrました。

「Mountain Lion で MacPorts の更新」 - 『j-mason's diary』

ありました。

どうやら、山ライオンにするとコマンドラインツールがデフォルトオフになっていて、

かつgccのライセンスに同意しないといけないらしいです。

というわけで、上記のサイトに書かれているとおりやりました。

現在、もりもりアップデートしてくれています。

オワリ


2012年8月5日日曜日

工数盛っちゃいましょう

みけです。

ドラクエやばいですね。

ハマります。

工数削減=売上減なのか?


まあ、単なる屁理屈を述べるんですけどね、

「減った分の工数も稼働していたことにして、工数盛っちゃえ」

とおもいます。


ShinSemiyaの日記 - なぜSIerの管理職は変化を受け入れないのか


一番大きいのはJenkinsの自動テストを提案し、「手動テストを自動テストに置き換えれば手動テストの工数を他に回せます!」と言ったら「減った分の工数だけ売上が減るじゃないか!」と言われた点だと思う。最大の問題は契約。


「減った分の工数だけ売上が減るじゃないか!」は屁理屈なので、

屁理屈で返しましょう。


少しガチ


少しだけガチなことを言えば、

企業の経営にとっては売上よりも利益のほうが大切です。

売上があっても、利益がない会社は力尽きていきます。

オワリ