mongoDBのObjectIdフィールドに対し後方一致検索を行う

db.Collection.find({$where:function(){return this._id.toString().match(/9$/);}})

↑_idの末尾が9のドキュメントだけ取得する。

前方一致も部分一致も正規表現変えればOK

db.Collection.find({$where:function(){return String(this.someObjectId).match(/9$/);}})

toString()の代わりはコッチ

symfony2 + doctrine-mongodb-odm でembededDocumentの_idで検索

symfony2 + doctrine-mongodb-odm で、
embedされたドキュメントの _id に対して検索をかけるときにハマったのでメモ(´;ω;`)


$result = $this->get('doctrine.odm.mongodb.document_manager') // document managerを取得する
->createQueryBuilder('KusoBundle:MisoCollection') // documentを指定して
->field('TechColumn._id')->equals(new \MongoId('4f1fb319d0ad649e63000002')) // embedされたdocumentの_idを条件に検索する
->getQuery()
->execute();


new \MongoId('4f1fb319d0ad649e63000002')がポイント(`・ω・´)

sshのパスワード無しログイン設定

##
# ログイン元での作業
#

# 公開鍵/秘密鍵のペアを作成する
# パスワードなしログインの場合は何も入力せず[enter]連打でOK
ssh-keygen -t dsa

# ログイン先に公開鍵を送る
scp .ssh/id_dsa.pub {user}@{host}:~

##
# ログイン先での作業
#
ssh {user}@{host}
test ! -d .ssh && mkdir -m 700 .ssh
cat id_dsa.pub >> .ssh/authorized_keys2
chmod 600 .ssh/authorized_keys2
rm id_dsa.pub


以上。
次回からパスワードなしでログインが成功する。
ついでに

alias z="{user}@{host}"

のようにエイリアス設定しておくとログインがマッハ(`・ω・´)

chromeのプロキシ設定をIEのインターネットオプションから独立させる

chromeがいまいち使いにくい理由のひとつは、
プロキシ設定をIEのインターネットオプションと共有していること。

調べてみたら、chromeの起動オプションに --proxy-server というのを発見。

chromeのショートカットアイコンを右クリック→プロパティ→ショートカットタブ→リンク先に
以下のように入力することでIEのプロキシ設定から独立できた。(`・ω・´)

"C:\〜\〜\chrome.exe" --proxy-server=host:port

PHPのuniqid()が重い件について

コマンドラインから↓を実行してみると、何と完了まで1分もかかる。

php -r 'for ($i = 0; $i < 10000; $i++) { uniqid("hoge"); }'

uniqid()を1万回ループさせるだけのプログラムが、
どうしてこんなに時間がかかるのか(´・ω・`)

Linux: 2.6.18-6-686-bigmem, PHP: 5.2.5
Linux: 2.6.22.18-co-0.7.3, PHP: 5.1.2

では、ともに処理完了までに1分かかった。
cliで実行してもapacheのモジュールとして実行してもその重さは変わらず。

しかしtwitter上では1秒で処理完了したよ派の方々もいた。
設定や環境で何か決定的な違いがあるってことかなー

引き続き調べるお(´・ω・`)

  • -

追記:CYGWIN_NT-5.1だと1秒もかからず終了(´・ω・`)

別におぼえたくないのに…Javaの方から勝手に脳に入り込んできて、気がつけばJavaを習得してしまうゲーム「Robocode」

HelloWorldやっても面白くねーんだよ!!



皆さんこんにちは。

Google App Engine (GAE)でJavaがサポートされ、
PythonはスルーしたけどJavaならやりたい!でもJava未経験!
GAE/Jに手を出してみたけど、結局hello, world!のサンプルアプリを公開したまま
放置した状態になっていませんか?
僕はそうです!


  • Java使えたら楽しいだろうなー
  • Java覚えて仕事の案件こなしたいなー


リア充へのあこがれ



、常々思っていつつも、Javaの最初の面倒臭さの前にいつもやる気喪失するんですよね。

  • HelloWorldひとつやるのにpublic static void main()書くなんて面倒臭すぎです
  • eclipseの使い方憶えるのが面倒だし eclipse重すぎてやる気になりません


まさに俺!



Java習得の壁、「とっかかりの面倒臭さ」を排除して、
しかも 遊んでるだけなのにいつの間にかJavaを憶えさせてくれる、
そんなフリーゲームがありました。

頼りになるリアクション



それが Robocode(ロボコード)


ロボコードは学習ツールではありません。これは本当にただのゲームです。
どんなゲームかということは、この画像を見れば一発でわかります。



でたー小林さんのマッハチョップハメ!! でリアル乱闘になるのがくにおくん名物


くにおくんの熱血行進曲の勝ち抜き格闘や、大乱闘スマッシュブラザーズのような、
戦車によるバトルロイヤルです。
この手のゲームで、熱くなりすぎてリアル乱闘に発展した思い出はありませんか?



他の戦車を破壊して最後まで残れば勝利ですが、
このゲームは、自機をコントローラーなどで操作できません。
自機を操作できないだって!
それじゃあ、どうやって自機を動かすんだ?
どうやって戦うんだ? …ハッ!まさか!


そうです、このゲームは自機にJavaで作戦を与え、命令することで、戦車が自動で戦うゲームです。
ゲームが始まると一切の命令ができないので、あらかじめJavaで作戦と命令をプログラムしておく必要があります。

そして、このプログラム次第で、戦車の強さが悟空にもヤムチャにもなるのがこのゲームの面白さ。

ヤムチャって舞空術つかえたっけ?


  • 隅に追い詰められたらどうする?
  • 被弾したときどうする?
  • 射程内に敵を発見したらどうする?
    • 砲撃?弾の強さは?
    • 接近?回避?
  • 敵を複数見つけたときはどうする?
  • 被弾しにくいポジションはどこだ?
  • 一定の移動パターンだと移動先を狙って砲撃されはしないか?


もちろん、これらすべてを考える必要はありません。
じっと動かずひたすら砲撃してる戦車だって作れますし、
突き詰めれば、まるで人間がコントローラで操作しているような戦車だって作れます。

敷居は超低く、奥は超深いRobocodeで、
Javaで遊びましょう!!
Javaのほうから勝手に自分の体にしみついて来てくれるよ!


あ、インストールとセットアップは超簡単だから心配しなくて大丈夫です。
SDKのインストールは割愛します)


http://sourceforge.net/projects/robocode/files/ にアクセスし、
ダウンロードしたセットアップファイルをダブルクリックしてインストール!



さっそく、Battle > Newでバトルをやってみましょう!



自分の戦車があれば、ここで選択してバトルに参加させることができます。




バトル実行できた!インストールからバトル開始までわずか1分、超カンタン!


次は、自分の戦車を作って、戦わせてみましょう!
メニューから Robot > Editorで戦車エディタが開きます!

戦車エディタから File > New > Robotで新しい戦車を作ります。
戦車に名前をつけてください! 戦車… 戦車といえば
シルバーチャリオッツ!!

アヴドゥルを… 殺したなどと… ウソをつくなぁぁぁぁぁぁーーーッ!!!



戦車の名前を入力します




パッケージ名を入力します。
すごくざっくりいうと、戦車の苗字みたいなものです。
ここではJPPにしようとしましたが、パッケージ名は全部小文字にしてくださいと怒られました。
ので、jppにしてOKしました。




キターーーー!戦車の動作を記述するプログラムが表示されました!
既にいくつかの動作がデフォルトで実装されていますね。

  • 前進と後退を繰り返しながら砲身を右回転させておけ!
  • 敵を見つけたら: パワー1の砲撃をしろ!
  • 被弾したら: 砲弾に対して垂直に方向転換し、弾道から逃げろ!

こんなことが書かれています。

メニューの Compiler > Compileで戦車を行えば、戦車は完成です!
またまた早い!ここまでわずか2分!
(戦車の名前で迷って時間を食わなければ…。)

コンパイルもメニューから簡単にできて素敵ですね。
こうして作成した戦車は、バトル時に選択できるようになります!
作成した戦車は公開できます!
皆の戦車を集めてワイワイ対戦しても楽しいし、
世界中の強豪戦車に挑戦して楽しむのもアリだと思います!



また、デバッグコンソールで、自機の状況を出力し把握することもできます。
自機の方向、砲身の方向、フィールド上の位置、確認できる情報はさまざまです。

自機の名前をクリックするとデバッグコンソールが開きます。

自機の動作を把握したら、がしがし強化して遊んじゃいましょう!
自分の戦車がどんどん賢くなっていくのはとても楽しいですよ!



そしてなにより、
遊んでいるだけで、
Javaのほうから勝手に、あなたの頭の中に
入り込んできてしまうこのすごさ、
ぜひ体験してください!



参考サイト:

ダウンロードページ(sourceforge) 
http://sourceforge.net/projects/robocode/files/


日本語ドキュメント 
http://www.geocities.co.jp/SiliconValley/9155/


API(命令群)日本語リファレンス
http://www.solar-system.tuis.ac.jp/Java/robocode_api/


関心空間: ゲームを楽しんでいるうちにJAVAも自然に身につくという最近見たアプリケーションの中でも最も感動した物の一つだ。
http://www.kanshin.com/keyword/114539


@IT:知的ゲーム「Robocode」でJavaのチャンピオンになろう
http://www.atmarkit.co.jp/fjava/column/andoh/andoh13.html


twitterアカウントです。よろしければフォローおねがいします。
http://twitter.com/a_a___a_a