mac book air 届いた
先週末に注文したMacbookAirが1週間後の今日届いた。
ただいまセットアップ中。
WindowsPCではControl-SpaceでIMEをON/OFFしているため、文章打っている最中にSportLightが起動しまくるw
インストールしたものとか書いてみようと思ったけど、数が多くてめんどくさいのでやっぱやめよう。
あぁそうだ。FirefoxでのWebブラウズではvimperatorでキーボード主体の操作をしてるんですけど、ブックマークを開きたいときにキーボードでの操作のやり方を知らなくてちょっと面倒な感じです。どなたかこれが良いとかご存知ないですかね?
(vimperatorでできたっけ?)
SublimeText3のカラーテーマ変更方法
PakageControlのInstall
PackageControlからColorSublimeのInstall
PackageControlのColorsSublime insgtall theme
Sublimetextのりかえ
Vim -> Sublimetext乗り換えしたいなーと思ってたが、無理かも。
ページ半分スクロールとかしようとしたらデフォルトではできない?あと単語単位の移動がよくわからん。
基本機能でできなくてPluginいれろって話ならそれこそVimのままでいいやってなるし...。
do while(0); block
Cocos2dxのサンプルコードをみていて一つ勉強になったスニペット
void function(void) { Obj* obj = NULL; do { obj = new Obj(); if(!obj)break; obj->fuga(); } while(0); if(obj) obj->cleanup(); }
こうかくと
・obj生成失敗時にbreakで後続の処理をすっ飛ばすことができる。
・しかもブロックによって処理にまとまりができるし、スコープも狭まる
do whileじゃなく書くならgotoをつかったものになりそうだが、たしかにこっちでもいいなぁ。
Mac bock air買おう
MBAを買おうかなと。11インチで。
今もってるPCは、Windows8のDesktop、VaioZと、MBP Retina 15インチという感じ。
VaioZは2年間ほど苦楽をともにしてきた愛機なわけだが、最近は会社でも家でもDesktop機を購入したため、めっきりつかわなくなってしまっていた。会社で新しいPCを買うときには弊社では予算内で自由にPCを選べるので、最初は新型のVaioを買おうかなと思っていた。しかし、何かVaioZ的なワクワク感がなく (VaioZにはPowerMediaDockといういい意味でアホな周辺機器がある)VGA出力も無いし結局Win8のDesktopを買うことにした。
で、そういう背景もありつつ、ふとRubyMotion+Cocos2dでiPhoneアプリをつくりたいなぁと思ってMBA11を買うことにしたわけである。MBP15があるのに勿体無い…っていうのはちょっと思うが、あのデカブツはちょっと自分は使わないっていうのもあって、軽くて小さい11を買うことにした。
VaioZとMBA15は売却しようと今見積もってもらってるがいくらになるかなー。多分プラマイゼロぐらいにはなってくれるんじゃないかと予想(PowerMediaDockも付いてる!)
そういえばVaioといえば、SonyがPC事業売却でこれからどうなっていくんだろう?ということなんですが。自分はべつにその辺にかんして明るいわけでも事情通でもないですが、Vaioにとってプラスに働いてほしいですね。でも普通に考えるとVaioからSonyのロゴがなくなっちゃうってことなんでしょうか。これは違和感バリバリですね。
ScalaでDynamoDBの進捗 4
今度は昨日のコードの変更点をMasterブランチへPullRequest送ってマージをしてみた。環境はBitbucketでホスティングしてGitを使っている。クライアントはWindowsのSourceTree。
- ローカルで今回の変更用にFeatureブランチを作成
- コードに変更を加える(ここまで昨日やった)
- ステージング→コミットを行う(コミットログには"fix #TicketNo"としてチケット連動も試してみた)
- リモートFeatureブランチがなかったので作る(SouceTreeから)
- リモートFeatureブランチにPushする
- BitbucketのWebコンパネ上でプルリクエストを作成(一人なのでレビュアー設定はナシ…)
- ここ、SouceTree上で出来た気がする?よくわかってなかった。次回は!
- BitbucketのWebコンパネ上でDiffを確認してマージボタンでマージ
マージまではスムーズにできたのだけど。その後。マージと同時に削除したFeatureブランチがSouceTreeクライアント上でのこっていて、これを消すにはどうすれば?ということになった。
とりあえずMasterブランチをPullしたけど、それでは消えず。じゃあFeatureブランチをPullしたら状態が同期されたのかな?と今にして思っているのだけど、その時は直接削除してしまった。
PullRequest -> Review -> Merge
結構いいなぁと思う。Bitbucketだけど、Web上でのDiffがすごい見やすかった。というのも、画面レイアウトがシンプルになってて、コードを左右においた状態のDiff(WinMergeやTortoiseMergeの画面みたいなやつ)のためにスペースが十分にあってGood。
AtlassianのCrucibleを仕事で使っているのだけど、それはサイドバーがあったりして横のスペースがなくて左右DiffするとFullHDでも辛い。(※表示領域をExpandすることができるので、それをやればいいのかも。初期状態が狭いってことで)
Reviewって、結局ローカルのIDEなりの上で確認したいのだけど(単純に見やすいし、悪いところをWarningしてくれたりするから)PullRequstの場合だとそれをするには、リモートブランチをチェックアウトするッて感じなんだよね?多分。
ふと思ったけど。PullRequestタイプのReviewって、多分PullRequst(Review)の単位でRemoteBranchが必要にならないか?RemoteBranchの作成ってポンポンできるほど軽いものなのだろうか?リポジトリ的にはポインタが増えるだけみたいな感じなのかな?
そこぐらいかなぁ。懸念点は。
すっきり感というか、クリーンな感じで言うと、Crucibleを使うときに基本となるPostCommitReviewよりも上だなやっぱり。つか、BitbucketやGithub上でPostCommitReview(Commitの範囲を指定してReviewだすやつ)ってできるのだろうか。それができるなら何の心配もなくなる。(けどそれやるとPullRequestの文化がなくなる気もするw)
いや、散文してますな。
ScalaでDynamoDBの進捗 3
先日書いたリソースファイルのパスを一定で書くためのテクニックはどうやら間違っていたようだ。
今日少しコードを変更して再実行すると何故かテストが通らない!getClass.getResourceAsStreamsでnullが返ってきていた。たまーにあることだが、本当になんでこの間は動いていたのだろう俺は夢でも見ていたのだろうか…と毎度モヤモヤした気持ちになる。
今回、またいろいろ調べたりTry&Errorした結果、どうやらgetResourceAsStreamsの対象ファイルの置き場所が悪かったらしい。
多分Javaの流儀か何か(それかClassPathなるもののチカラか…)知らないど
{ProjectRoot}/conf/
にファイルを置いて(自分の場合はさらにサブディレクトリを2階層ほど掘った中に入れたけど、問題はそこじゃないだろう多分)実行してみるとうまく行った。なぜここに置こうと思ったかというと
http://www.playframework-ja.org/documentation/2.0.8/Anatomy
ここに
conf → 設定ファイルおよびその他のコンパイルされていないリソース
とあったので、あれ?もしかして?となったのである。
まぁそういうわけで何とか今回も落ち着いたんだけど、こういう「知ってるか、知らないか」だけの問題に何時間もかかってしまうのはとってもアホらしい。こういうときに相談できるjava使いが知り合いにいれば…。
あと、関係ないが映画「ソーシャル・ネットワーク」を見た。2010年の映画なんで今さらだけど。仕事のモチベーションを上げるにはいい映画だった。
あと、書籍「TeamGeek」も読了。チームをうまくリードするためのいろいろTipsとか、考え方というのが書いてある。納得や共感できる部分はかなりあったけど、チームや会社の規模感の(著者たちとの)違いは考えておかないと、というきもする。
ScalaでDynamoDBの進捗 2
テーブルスキーマファイルからテーブルを作成する部分で、どうやって一定したパスを指定すればいいのかなぁという課題があったが解決した。多分。
PHPで書くと次のようなことがしたかった
$schemaPath = dirname(__FILE__).'/hoge/schema.json';
json_decode($schemaPath);
こういう感じで、環境依存な部分をプログラムで取得して、そこからの相対パスとしてパス指定するということ。
javaでは次のようにすれば良さそうだ。(と思ってる)
val source = Source.fromInputStream( getClass.getResourceAsStream(schemaPath) )
val jsonStr = source.getLines().mkString("\n")
val json = Json.parse(jsonStr)
schemaPathは、プロジェクトのルートパスからの相対でいけるようだ。