WebStormショートカット覚書

12/06 にブチブチつぶやいてたヤツをまとめておいたほうがいいかなと思った。
記憶を頼りに書いてるので、間違ってたら教えてください。
機能名はぶっちゃけ適当に名付けてる。
Eclipse風のバインディングにしたほうがいいのかなぁ…。

ショートカット 対応するEclipseのショートカット 機能名 Eclipse機能名
Cmd+Shift+a Cmd+F3 コマンド検索  
Cmd+←→ Cmd+←→ キャレットを行頭行末に移動  
Opt+←→   キャレットをワードっぽい単位に移動  
Ctrl+←→ Ctrl+rollup or rolldown(fn+↑↓) エディタの移動  
Cmd+w Ctrl+Shift+↑↓ 選択範囲拡大(複数回可)  
Cmd+1 Cmd+Opt+q p  キャレットをProject explorer  
Cmd+2   Favoritesモード  
Cmd+7 Cmd+o Structureモード Quick Outline
Cmd+n Cmd+Shift+T クラス名ジャンプ リソースを開く
Cmd+Shift+n Cmd+Shift+R Open file Open Resource
Cmd+g Cmd+l 行番号指定ジャンプ  
Cmd+B F3 宣言ジャンプ  
Ctrl+Shift+F   Find in Path  
Opt+Shift+f   Add to favorite  
Cmd+Shift+-   たたむ  
Opt+F7 Ctrl+Opt+h Find Usages Call Hierarchy
Shift+F6 Cmd+Shift+R Refactor name  
Cmd+j   テンプレート挿入  

他に何かあったら教えてください…(´・ω・`)すくな

追記

追加しました!
追加しました!
追加しました!

CoffeeScript導入に必要なこと

導入

会社でCoffeeScript試しに使ってみるべ… 的な流れになったので導入の手順を書いておく。

Macの方は

sudo port sync ; sudo port install nodejs npm ; sudo npm install -g coffee-script

で導入出来ます。port にも coffee-script がありますが、あんまりおすすめ出来ません。…なんでだっけ。

今のところこんな感じです。
coffee-script@1.2.0
nodejs@0.6.6
npm@1.0.106

Windows?(゚⊿゚)シラネ

開発環境

IDE

http://www.jetbrains.com/webstorm/ WebStorm3.0 以上を使うことをおすすめします。
別に IntelliJ とかでもいいです。
CoffeeScriptも対応しているので便利です。ですが、まだサイキョーとは言えなくて、困ったことになるパターンも結構あります。
まぁ大概コードフォーマッタ周りなんですけど。

not とかが正しく扱えない

console.log "hoge" if not flag

に対してコードフォーマットをかけると、

console.log "hoge" if notflag

に変換されて意味が変わってしまいます。if の代わりに unless を使うか、not の代わりに ! を使いましょう。

インスタンス変数のインデントが正しく扱えない

class Hoge
  defaults:
    hoge:1
    hige:2

class Hoge
  defaults:hoge:1
  hige:2

に変換してくださいます。やめてぇぇ意味変わっちゃう!!Backbone.js との相性が悪いこと甚だしい…。

IDEまとめ
ソース全体に対してコードフォーマットかけると動かなくなったり壊れたりするのでしちゃいけません。
自分の新しく書いた範囲について適宜コードフォーマットかけるみたいなめんどくさい感じが必要です。
あと他にもなんかネストしたメソッド呼び出しの時意味が変わるような変換されることがあって辛かった気がする。
マジで困るのでIssue登録したいんだけどIssue登録までに色々長い道のりがあって心折れた(ITSへのユーザ登録とか

コンパイルするとか

CoffeeScriptは一回コンパイルしてJavaScriptに変換したほうがブラウザでデバッグしやすくなる気がする(CoffeeScriptのままデバッグしようとしたことがない)ので、コンパイルする環境を整えます。
CoffeeScriptでは、Makefile みたいなノリで cakefile というファイルを作ります。

だいたいこんな感じ
監視するディレクトリが増えると記述が増えたりします。本当はcompileは同期処理にしたいんだけどよくわからないので放置中。既に同期処理?
https://gist.github.com/1516033

task に登録されているものが実行出来るので、 cake compile で普通にJSにコンパイル。cake watchディレクトリ監視して変更があったら随時JSにコンパイル ていう感じ。コード書いてる時はcake watch を走らせながらコードを描きます。
WebStormが実行してくれる機能とかも探せばありそうなんだけど探してないです…。
あと、文法エラーでコケた時に気が付かなくて、
"あれー?これで動くはずなんだけどなー?動かないなー?"←文法エラーでJSが更新されてないのに気がついてない
とか稀にあるので、コケたらGrowlとかで通知してほしいなー…。WebStormが怒ってくれるのでだいぶ減ったけど。

このあたりはもうちょっと頭良いやり方がある気もしている。

コード規約 または 落とし穴

こういうコード規約はあったほうがええんちゃう…と思ったのを書いていくよ!

  • 関数を定義するときは -> ではなくて => を使う

例えば以下のような場合

class Hoge
  value : false
  constructor: ->
    func = ->
      @value = true
    func()
    console.log @value

期待するのは、new Hoge() した時に "true" が出力されることです。ですが、-> を使っているため @value に true をセットしている箇所での this は 無名のfunction 自身です。ここでは => と書かないといけません。

  • >の方が嬉しい場合っていうのは少ないので、class 中で関数を作る時は常に => にしましょうっていうルールにしたほうがいい気がする。

次に、関数の呼び出し方法について

hoge(fuga)
hoge fuga
# ---
hoge fuga piyo
hoge(fuga(piyo))
# ---
hoge fuga, piyo
hoge(fuga, piyo)

それぞれ上下で同じ意味になります。括弧が省略出来るのです。これは好みの問題だと思うのですが、プロジェクト内で統一はされていたほうがいいと思います。今のところ、僕は上側のスタイルにしています。(入力が楽だから)
メソッドチェーンとかの場合は下で書くしかないので下で書くんですけどね!

プロジェクト運用

コンパイル後のjsもコミットしたほうがいいやよ。すぐ試せるのと、Herokuにdeployした時に向こうでコンパイルしてからnode.js立ち上げるのが今のところ出来てなかったりするので。

併せて使いたい

jQuery, Underscore.js あたりは入れておいたほうが!

サンプル

https://github.com/vvakame/google-checkout-archiver
こんなんこさえた

複数EntityGroupに対するトランザクション処理が追加されたらしい

appengine SDK 1.5.5 prerelease がリリースされました。
https://groups.google.com/forum/#!topic/google-appengine/f9YVplAlRs4/discussion

気になるのはこれ。

  • App Engine now supports Cross Group (XG) transactions with the High

Replication Datastore, which allow you to perform transactions across multiple
entity groups.

すごい!!複数EGに対してトランザクション処理が可能だって!?
appengineだと今まではひとつのEGしかトランザクションの対象に出来なくて、要するに関連性のない複数のレコードの更新がトランザクション下で達成することは出来ない感じになってました。
代表例としてよく言われるのは、銀行の口座間送金ですね。
口座Aからお金を引き落とす。
口座Bにお金を入金する。
をシンプルに1つのトランザクションとして処理することは出来なくて、口座Bへの入金が失敗したらTQで非同期でリトライするみたいな工夫が必要だったんす。
これがちゃんと何も考えなくてもトランザクション下で安全に処理できるようになった。みたいな。

で、ある処理を非同期でやるってのは結構めんどくさいです。
自動でTQを生成するための https://github.com/vvakame/appengine-deferred みたいなライブラリを作ったりもしてたんですが、どうやらかなりの場合に今回のXG transactionでまかなえるんじゃね?しかも同期的に処理出来ることを保証できるパターンが増えるんじゃね?
ってのが今回の(*´Д`)=3 ムッハー! ポイント

検証用コードを書いてみました。
https://gist.github.com/1264065
結果、DevelopmentServer(要するにローカルのエミュ環境)と実環境 共に5EGまで同時に扱えるみたいです。
6EGからは例外が発生すると。
java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.

ちなみに、HRD専用なのでM/Sを利用しているappIdは移行ツール使って新appIdにお引越ししなければならないみたいです。
面倒くさいけど、やる価値はあるなぁ…!

これは高まる…!(*´꒳`*)
後は11/1からの新料金プランがもちょい手加減してくれれば…(´ω`;)

Android Honeycomb 3.1 New Feature. Joysticks and Gamepads

遅くなってごめんよ!!
Gamepadからの入力をキャッチして適当にdumpして表示するアプリのコードを置いておきます。
https://github.com/vvakame/AndroidGamepadSample

Eclipseの活用方法についての資料書いたりライブコーディングしたりしたよ

上記みたいな資料を作ったりしたよ。
TOPGATE社には おがわさん という魔術師が棲んでいるので、僕如きがこういうこと偉そうに書くと死んだりします。
一応、参考になりそうなものを下記に書きだしておきました。 #u_s_k

つぎゃった
http://togetter.com/li/170487

資料
http://www.slideshare.net/vvakame/eclipse-expert

ライブコーディング録画
http://www.ustream.tv/recorded/16427271

資料を見てくれた弊社のおがわさんとのとさん、ありがとうございました!
なんかライブコーディングしてるとまだまだEclipse使い込んでない感が滲み出てたりミスタッチ多かったり、補完の癖つかめてなくて誤操作してたりします。
複数PC間でEclipseの設定が同期できないとなかなかカリカリにチューニングする気にならない…(´・ω・`)

Android Honeycomb 3.1 New Feature. USB Host API

というわけで、とりあえずグリッターパネルを制御するためのコードを公開することにしました。
バイス側からのデータ受信を行わないデバイスなので、USB Host APIのサンプルとしては若干不足ですが、基本的な流れは抑えているはずです。
現在は KURO-RS というUSB赤外線リモコン学習機器をAndroidから動かそうとしている所です。
が、色々作業が残っているためなかなか進まない可能性が高いです。ぼちぼちお待ちください…。

注意点

microUSBケーブルは、普段使っているやつではダメで、microUSBコネクタ側がHostのケーブルでないとダメです。
詳しくは下記のつぎゃった "USBってなんで動くの?" を参照してください。

書評 オライリー "初めてのOpenGL ES"

初めてのOpenGL ES

初めてのOpenGL ES

この本です。著者の揺下こと山下( @eaglesakura )は、僕が務めているトップゲート社の社員です。
彼は一流のゲーム開発者で、OpenGLもバリバリ使えるZE☆とか言ってたのですが、なんかいつのまにか本書いてました。
同じ会社のよしみで、一冊まきあげた献本してもらったので、読んだ感想とかを書いておこうかと思います。

感想

電車でつらつら読んだだけで、手を動かさずに読みきりました。(手を動かしてみるのは今後の課題…)
OpenGLや3Dの世界の常識が非常に分かりやすく解説されていて、短時間(トータル4時間くらい)で概要を理解することができました。
読み終わった後に、揺下と以下のようなやりとりをしてちょっと絶望したのはナイショ
わ「これさー、衝突判定とかボーンのあるモデルの動かし方とか書いてなくない?」
揺「それはOpenGLの機能じゃないよ。OpenGLはただの描画ライブラリだよ。」
わ「え、まじ…。衝突とかボーン仕込んで動かすとか、頑張って各自実装するの?」
揺「そう(´・ω・`)」
わ「((((;゚Д゚))))ガクガクブルブル」

対象読者

3Dやってみたいけど、全然わかんない…。OpenGLってどうなの?いきなり噛み付いたりしない?
こわくない?((((;゚Д゚))))ガクガクブルブル

ちょっと対象外読者

ゲーム作りたい!!!!ゲームの作り方が知りたい!!!!!
→3Dの描画の仕方とか(OpenGLが出来ることに)に絞って書かれているので、ゲームを作りたいゲームを作ったことがない人が最初に買う本ではなさそう。

良くなかった点

  • Java的な用語の厳密さにちょっと ? と思う箇所があった。
  • 冒頭に書いた会話のような箇所が理解できなかった。(フォローしてないことが書いてない)
  • 佐天さん的な何かを堂々と使い過ぎだろJK

良かった点

  • "例え" が良く考えられており解りやすい
  • OpenGLに出来ることや、陥りがちな罠とその回避方法が紹介されている。
  • 無料モデリングツールであるメタセコイアなどの実用的ツールとの連携方法について書かれている

総評

3Dなにそれわかんない だけど ちょっと 興味があ・る・か・も☆ な人は買ったほうがいいよ(`・ω・´)