mattak's blog

人生を1ミリ進める

termbox-go 試してみた

termbox-goとは?

nsf/termbox-go · GitHub

golangからterminalのAPIを叩けるlibrary. pecoの内部でも利用している。

基本

importする

import "github.com/nsf/termbox-go"

初期化 & エラー処理

    err := termbox.Init()
    if err != nil {
        panic(err)
    }

終了処理

    defer termbox.Close()

WindowやKey入力のEvent Wait

for {
    switch ev := termbox.PollEvent(); ev.Type {
    case termbox.EventKey:
        switch ev.Key {
        case termbox.KeyEsc:
            return
        }
    default:
                    draw()
    }
}

全体

Show current time using termbox-go

...

f:id:mattaclj:20150104003239g:plain

2015年の始まり

2015年に意識すること

エンジニアとして、対外的にまともになる

  • 挑戦する
  • 晒す
  • リリースする
  • 表現力を上げる

エンジニアとしての成長曲線の限界を感じるこのごろ。 対外的なOutput力が圧倒的に不足しているのはずっと認識しているので、なんとか行動を変化させて習慣化させる. がむしゃらにやって行き当たりばったりという時期もすぎたので、もう少し計画的に行動していきたい。 理想をいえば、週1ブログ、月一プロダクト(20hくらいのもの)を作って1年すごせたらなーという感じ。

人間として、まともになる

  • 能動的に人付き合いを楽しむ
  • 体型をまともにする
  • 本を習慣的に読む
  • 予定を管理する

受け身で何も考えずに生きていると、受け身ばかりの人間関係で人生に広がりがなくてつまらないなーと散々思っているので、自分からActionする習慣をなんかしら作る。

体型のだらしない自分に失望する年齢になったので、運動と食事制限はまともに行う。 週2運動 (ジム or ランニング)、寝る前腹筋くらいが目標。アララギ君くらい腹筋を割ってみたいな。。

本は人を豊かにするらしいので、習慣的によむ & 読書分野を広げる (ラノベ、小説、技術書いがいにも)。 理想は週1冊ペース。

週末を楽しく過ごしたいので、ある程度自己管理を行う。 土日夕方まで寝る\(^o^)/オワタパターンをなくすように努めたい。

というかんじで適度にがんばります。

SceneKit Training for OSX by Swift (2): Default Objects

基本的なオブジェクトを表示してみる

Box

f:id:mattaclj:20141026231014p:plain

func createCube() -> SCNNode {
    let cube = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)
    let cubeNode = SCNNode(geometry: cube)
    let rotateDegree : CGFloat = CGFloat(M_PI_4) / 2
    cubeNode.transform = SCNMatrix4MakeRotation(1.0, rotateDegree, rotateDegree, 0)
    return cubeNode
}

Capsule

f:id:mattaclj:20141026231028p:plain

func createCapsule() -> SCNNode {
    let capsule = SCNCapsule(capRadius: 1, height: 4)
    let capsuleNode = SCNNode(geometry: capsule)
    return capsuleNode
}

capsuleは height >= capRadius * 2 出ないとうまく表示できないので注意.

Cone

f:id:mattaclj:20141026232113p:plain

func createCone() -> SCNNode {
    let cone = SCNCone(topRadius: 1, bottomRadius: 2, height: 2)
    let coneNode = SCNNode(geometry: cone)
    let rotateDegree : CGFloat = CGFloat(M_PI_4) / 2
    coneNode.transform = SCNMatrix4MakeRotation(1.0, rotateDegree, rotateDegree, 0)
    return coneNode
}

topRadius = bottomRadiusならば円柱形、topRadius = 0 ならば円錐形になる.

Cylinder

f:id:mattaclj:20141026233530p:plain

func createCylinder() -> SCNNode {
    let cylinder = SCNCylinder(radius: 1.0, height: 2.0)
    let cylinderNode = SCNNode(geometry: cylinder)
    let rotateDegree : CGFloat = CGFloat(M_PI_4) / 2
    cylinderNode.transform = SCNMatrix4MakeRotation(1.0, rotateDegree, rotateDegree, 0)
    return cylinderNode
}

円柱。SCNConeでも表現できる。

Floor

無限に広がる床.

f:id:mattaclj:20141027005645p:plain

floorはそのままだと遠近感がつかめないので、傾けて対象にcubeを表示。

func createFloor() -> SCNNode {
    let floor = SCNFloor()
    let floorNode = SCNNode(geometry: floor)
    let rotateDegree : CGFloat = CGFloat(M_PI_4)
    floorNode.transform = SCNMatrix4MakeRotation(rotateDegree, 0.1, 1, 0)
    return floorNode
}

Plane

有限の板.

f:id:mattaclj:20141027012324p:plain

planeはxy平面に表示され、floorがzy平面に表示されるのと異なる。

func createPlane() -> SCNNode {
    let plane = SCNPlane(width: 1.5, height: 1.5)
    plane.firstMaterial!.doubleSided = true
    plane.firstMaterial!.diffuse.contents = NSColor.darkGrayColor()
    let planeNode = SCNNode(geometry: plane)
    return planeNode
}

firstMaterial.diffuse.contentsに色を設定できる。

pyramid

四角錐.

f:id:mattaclj:20141027013758p:plain

func createPyramid() -> SCNNode {
    let pyramid = SCNPyramid(width: 1.5, height: 1.5, length: 1.5)
    pyramid.firstMaterial!.doubleSided = true
    pyramid.firstMaterial!.diffuse.contents = NSColor.darkGrayColor()
    let pyramidNode = SCNNode(geometry: pyramid)
    let rotateDegree : CGFloat = CGFloat(M_PI_4)
    pyramidNode.transform = SCNMatrix4MakeRotation(rotateDegree, 1, 0, 0)
    return pyramidNode
}

pyramidもfirstMaterial.diffuse.contentsで色を指定しないと表示されない.

Shape

shapeは任意の2次元の形。

f:id:mattaclj:20141027022020p:plain

func createShape() -> SCNNode {
    let path = NSBezierPath()
    let step : CGFloat = CGFloat(M_PI * 2 / 5)
    let scale : CGFloat = CGFloat(0.4)

    path.moveToPoint(NSMakePoint(cos(0), sin(0)))
    path.lineToPoint(NSMakePoint(scale * cos(step * 0.5), scale * sin(step * 0.5)))
    let i : CGFloat = 0
    for i in 1...4 {
        let pos : CGFloat = CGFloat(step * CGFloat(i))
        let pos_inner : CGFloat = CGFloat(step * CGFloat(CGFloat(i) + 0.5))
        path.lineToPoint(NSMakePoint(cos(pos), sin(pos)))
        path.lineToPoint(NSMakePoint(scale * cos(pos_inner), scale * sin(pos_offset)))
    }
    path.closePath()

    let shape = SCNShape(path: path, extrusionDepth: 1.0)
    shape.firstMaterial!.diffuse.contents = NSColor.darkGrayColor()

    let shapeNode = SCNNode(geometry: shape)
    return shapeNode
}

shapeもmaterial.diffuse.contentsで色をつけないと表示されない。

Sphere

球。

f:id:mattaclj:20141027022529p:plain

func createSphere() -> SCNNode {
    let sphere = SCNSphere(radius: 1)
    let sphereNode = SCNNode(geometry: sphere)
    return sphereNode
}

Torus

トーラス、円環面、ドーナッツ型。

f:id:mattaclj:20141028001616p:plain

func createTorus() -> SCNNode {
    let torus = SCNTorus(ringRadius: 1.0, pipeRadius: 0.4)
    let torusNode = SCNNode(geometry: torus)
    torusNode.transform = SCNMatrix4MakeRotation(CGFloat(M_PI_4), 1, 0, 0)
    return torusNode
}

Tube

チューブ

f:id:mattaclj:20141028002327p:plain

簡単にトイレットペーパーオブジェクトが作れる

func createTube() -> SCNNode {
    let tube = SCNTube(innerRadius: 0.5, outerRadius: 1.0, height: 2)
    let tubeNode = SCNNode(geometry: tube)
    tubeNode.transform = SCNMatrix4MakeRotation(CGFloat(M_PI_4 * 2 / 3), 1, 0, 0)
    return tubeNode
}

Text

文字.

f:id:mattaclj:20141028004924p:plain

func createText() -> SCNNode {
    let text = SCNText(string: "Hello Text", extrusionDepth: 2)
    text.font = NSFont(name: "Arial", size: 1.0)
    text.chamferRadius = 0.3
    text.flatness = 0.1
    text.firstMaterial!.diffuse.contents = NSColor.darkGrayColor()
    text.alignmentMode = kCAAlignmentCenter
    text.containerFrame = CGRectMake(-2.4, 0.0, 5, 1)
    let textNode = SCNNode(geometry: text)
    let rotateDegree : CGFloat = CGFloat(M_PI_4)
    return textNode
}

alignmentModeで指定したアラインメントを実現するためには、containerFrameの大きさの設定が必要な点に注意。

SceneKit Training for OSX by Swift (1): Display Cube

Xcode 6.1 が release されてswiftがMac OSXでも動くようになった。 あんまりチュートリアルもなさそうなので、SceneKit勉強したログを残します。

ベースプロジェクトの作成

Xcode -> New -> Project -> OSX -> Game

f:id:mattaclj:20141026023137p:plain

実行

f:id:mattaclj:20141026023603p:plain

デフォルトだとAirPlaneが表示される。

空シーンを指定する

ViewControllerをまっさらな状態に直す。

import SceneKit
import QuartzCore

class BasicObjectSceneController: NSViewController {

    @IBOutlet weak var baseView: BaseView!

    override func awakeFromNib () {
        let scene = SCNScene()

        self.baseView!.scene = scene
        self.baseView!.allowsCameraControl = true
        self.baseView!.showsStatistics = true
    }
}

実行

f:id:mattaclj:20141026024417p:plain

背景色をつける

SceneKitというかViewの機能ですが、backgroundColorのpropertyにアクセスして変更する。

override func awakeFromNib () {
    let scene = SCNScene()

    self.baseView!.scene = scene
    self.baseView!.allowsCameraControl = true
    self.baseView!.showsStatistics = true
    self.baseView!.backgroundColor = NSColor.blueColor()
}

f:id:mattaclj:20141026024920p:plain

Cubeを表示する

SCNSceneをextendしてカスタムシーンを作ります。

import SceneKit

class BaseObjectScene: SCNScene {
    init(named name: String) {
        super.init()

        let cube = createCube()
        rootNode.addChildNode(cube)
    }

    required init(coder aCoder: NSCoder) {
        super.init(coder: aCoder)
    }

    func createCube() -> SCNNode {
        let cube = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)
        let cubeNode = SCNNode(geometry: cube)
        let rotateDegree : CGFloat = CGFloat(M_PI_4) / 2
        cubeNode.transform = SCNMatrix4MakeRotation(1.0, rotateDegree, rotateDegree, 0)
        return cubeNode
    }
}

呼び出しの変更

+        let scene = BaseObjectScene(named: "cube scene")
-        let scene = SCNScene()

実行

f:id:mattaclj:20141026030158p:plain

Golang はじめた

install

$ brew install go
$ echo "export GOPATH=$HOME/.gopath" >> $HOME/.zprofile
$ exec $SHELL -l

editor

atomエディタがよさそう

$ atom something.go

installしたプラグイン

  • Go Format
    • go fmtをファイル保存したときに実行してくれる.
  • Language Go
  • Vim mode
    • vimバインドでかけないとつらい
  • Atom Runner
    • Cmd + Rでgo run を実行してくれ. スプリットタブで結果を表示してくれる

tutorial

http://go-tour-jp.appspot.com/

オフィシャルのgo tourを半分読んだ。 LLほど便利じゃなく、cより便利、c++ほど記述力はなく貧弱だがシンプルで基本読みやすいという感想。 goroutineとかを使いだすといよいよgoらしさが出てくるのだろうけど、まだそこまでいっていない。 個人的には、分散ビルドシステムとかgolangで作ったら面白そうって感じた。

とりあえず、チュートリアル後半をあとで読み進める.

YAPC 2014 感想

ブログを書くまでがYAPC! 書き殴った.

DAY1

Perl meets Real World..

  • @mackee_w マコピー さん
  • Raspberry Piを最近調べだしたのでちょうど求めていたトークでした
  • 電子工作のつらい部分が減って、一昔前のH8/PICいじってた頃に比べるとかなり楽になっている印象
  • Grove と シード、オープンハードウェアって概念が初耳だったのでありがたかった
  • 全体的に内容豊富で聞き応えありました

Introducing Swift

  • Dan Kogaiさん
  • 恒例のPapixさんネタがw
  • swiftの文法を全然理解してなかったのでFooBuzz例の差分がありがたかったです
  • Xcodeのコードが文字小さくてみえなかったのが残念.
  • 言語として、関数志向 / 演算子の書き換え / オープンクラス / 他言語組み込みの容易さ (.hをinclude) など表現力が高くて楽しそう
  • Compile言語、Script言語、理想言語って対比がわかりやすくてなるほどってなった
  • Gihubにおける各言語の相関関係、d3.jsで書いていたけどあの図はどこにあがってる感じだろう
  • トップダウン言語の方が数年のびているらしい
  • 自分で一本Swiftアプリつくろーって気になった

JSON Schema / API test

http://yapcasia.org/2014/talk/show/4d4a9af6-02d0-11e4-9357-07b16aeab6a4

  • @deme0607 さん
  • 前にr7kamuraさんの記事みて、自分の中で消化しきれてなかった部分を消化できた気がする
  • JSON Schema はtest / document / mockでいい感じに利用できそう. うまくやればeasy_mockもいらなくなりそうだ
  • テストで利用するときにはフォーマットチェックメインになりそうではあるが、それを自動化できる恩恵が大きそうだ
  • 一度自分で簡単なサービス作ってJSON Schema書いてみよう

ランチ

DBIx::Class

http://yapcasia.org/2014/talk/show/3c896370-01de-11e4-9357-07b16aeab6a4

  • Ribasushiさん
    • スシじゃないよ
  • DBIx::Class自体ちょろっと古いシステムで触った程度の知識しかなかったので内容理解が辛かった
  • DBなめるときに、::ResultSet::HashRefInflator は早くて便利だてことだけ覚えておこう

Scala in Perl

http://yapcasia.org/2014/talk/show/3c896370-01de-11e4-9357-07b16aeab6a4

  • @hakobe さん
  • java/gradle/clojure使いとしては聞いておかねば!スタッ
  • コンパイル長い問題はjvm系で共通の問題だなーとしみじみ
  • コンパイル早くするお守りはほしい・・.とくにブランチかえて再ビルド時間が辛すぎる
  • android gradleだとある程度 aarファイルでプロジェクト/モジュール分割してビルドフェーズすっ飛ばすけど、そうゆう工夫とかscalaはどうやってるんだろと気になった
  • EditorはやっぱりIntelliJ なのね
  • mackalelみたいなOSSプロダクトうらやましい
  • Scalaは基礎ぐらい知っておこう
  • 価値を生み出し続ける => 安全で継続的なソフトウェア進化 ってのに同意
  • 今やってるプロジェクト/チームもそんな姿でありたいな

One layer down below

http://yapcasia.org/2014/talk/show/f028bcea-0b53-11e4-aec0-ad686aeab6a4

  • Kang-min Liu さん
  • 過ぎたるは及ばざるが如し。不要機能の排除大事だ.
  • 目的と用途をしぼって、KISSの原則を行うのは後になるほど忘れがち
  • Serealはmessage packみたいなもの? そうであれば差分を知りたいなとおもった
  • レイヤーを超えたHackerになろう
  • あのプレゼンはEmacsでやってるのだろうか?

いろんな言語を適材適所で使おう

http://yapcasia.org/2014/talk/show/ce831248-ebb4-11e3-bd6d-c7a06aeab6a4

  • あんちぽくん さん
  • 言語選択要因を 「言語特性」「コミュニティ」「エコシステム」に集約して系統立てて話していた
  • でもテーマ上トークの内容が広がりすぎて、所々脱線してたかも
  • ユーザに提供する価値の最大化って目的が第一. 手段と目的をはき違えないの大事
  • 新しい技術グループやチームのビルディングするときにも参考になる話だと感じた
  • 文章が多くて若干辛かった. 概念図みたいなものをもっと増やしてくれるとうれしかったかも

O2O/IoT/Wearable時代におけるWeb以外のネットワーク技術入門

http://yapcasia.org/2014/talk/show/75894e02-025f-11e4-9357-07b16aeab6a4

  • Lyo Kato さん
  • 最新のネットワークのプロトコル事情が詳細に語られていた
  • 特にBootooth LE のAndroid / iOS周りの話が参考になった
  • 全体的に内容がモリモリで追いきれなかった. 資料アップに期待
  • ビギナーには少し辛い内容だったかも.

ウェッブエンジニアのローレベルプログラミング

http://lowreal.net/2014/08/29/1

  • cho45 さん
  • 低レイヤーに向かっていくってモチベーションがすごい
  • 最近のC++周りの仕事で結構内部アーキテクチャがわかっていないと辛い事が増えてきたから ARMの勉強時かも
  • ノリノリで聞いててすごい楽しい発表だった
  • EAGLEなつい. まだ現役とはしらなかった. 今の時代ならwebサービスであってもいいくらいだよなって思う.
  • RasPi欲がまた喚起された

How's startup life? - working as CTO in Japan

http://yapcasia.org/2014/talk/show/6687aaca-034a-11e4-9357-07b16aeab6a4

  • Shohei Kameda さん
  • ShareOfficeたのしそうだ. 働き方として憧れる
  • startupで働くならエンジニアもfinanceの知識必須か
  • なぜかつんでた Y Combinatorの本よみたくなった.

Java For Perl Mongers

http://yapcasia.org/2014/talk/show/8f7ead9a-ebba-11e3-bd6d-c7a06aeab6a4

  • Kazuhiro Osawa
  • 途中参加で一部聞き逃し
  • 手の込んだジョークがたのしい
  • 愉快なトークだった
  • PerlCGIのイメージしかないっていう人と、Javaってエンタープライズのイメージしかないっていう人は似てる
  • どんな言語も間違った先入観あるなー

LT

個人的に Relocatable Perlの人の話が刺さった. 普段plenvで管理してるとそれで十分って考えしかなく、切り口が新鮮だった. Android/iOS/cocosで開発ではパッケージングとかPortabilityで不満になる部分が多い. 特にC開発でPortableでPackagableな仕組みがあればって常々感じていて、Relocatableという概念に考えさせられる部分があった.

DAY2

Dockerであそんでみよっかー

  • @kazeburo さん
  • さすが発表なれしていて、話の順序立てが上手だった
  • 僕はDockerをubuntu上でしか使ったことなく、macだとboot2dockerやvagrantでつなぎがんばるのが面倒そうだなという印象..
  • filesystemとのコミュニケーションのしやすさから vagrant方式採用するのは納得した、vagrantなら他の環境にもスムーズに移行できそう
  • docker欲高まる
  • ISUCON4 たのしそうだ. アプリサイドも同じようなコンテストあってもいいよなー

Google Big Queryで DWH構築

  • Naoya Ito さん
  • さすがの大人気。座ってみてたので内容全部追いきれなかった
  • あとからtwitterにupされた写真みて気づいたのだけど、僕が座った真後ろからmiyagawaさんが写真を取ってたみたいで、憧れのハッカー2人の間にいたって考えるとそれだけでテンションがあがった
  • 12億レコードを5秒でフルスキャンってのはすげぇな
  • ログはいてGoogle BigQueryに流し、あとで自由にSQLたたいて検索って使い方がとりあえず正解っぽい.
  • 画像認識やってたとき、学習データが一番大事だねだからBing・Googleなんかの数でごり押しするサービスにはかなわんなって議論を思い出した.

JSON Schema Injection and the Lessons Learned

  • Kazuho Oku さん
  • picojsonいつも使ってます. ありがたやー
  • jsonSQLクエリをビルドするときには、valueなのかarrayなのかhashなのかきちんと意識せねば
  • 条件を関数化するのはいいアイデアだとおもった.
  • 座りたい...

モバイルアプリとAPIのありかたを考える2014

  • あらたま さん
  • シンプルだけど、聞く人に歩み寄るいいプレゼンだった
  • チラシル つかいます https://www.chirashiru.jp/
  • JSON-RPC 2.0 って規格しらんかった. Batch処理は便利そう
  • Parseよいって評判を聞くけど、実際にサービスに投入してる事例は初めて聞いた
  • 次に簡単な個人アプリつくるとき、導入してみよう

Changing the tires on a moving car: a case study in upgrading legacy architecture

  • Andy Delcambre さん
  • NativeEnglishどれくらい聞けるのかって実験で、レシーバなしで聴いた
  • 内容的には https://speakerdeck.com/adelcambre/git-github-etc に近かった
  • GitのRuby BindingのGrit / Ruggedだけど、きれいなbindingでAPIもすっきり素敵そうな印象
  • Gitのbaredなレポジトリを直接いじろうとして前に困った事があったけど、libgit2使えば良かったのね.

Mobile Application Development for Perl Mongers [ninjinkun x gfx]

  • gfx さん、ninjinkun さん
  • 一番テンションがあがったセッション
  • モバイルディベロッパみんなに聴いてほしい.
  • ninjinkunさんのエンジニアがUIデザインに参画していくべきっていうのは同意.
  • 結構デザイナでもガイドライン知らなかったり、ネイティブレイアウトの定石みたいなものを理解してもらえなくて辛い事多い.
  • Reactive Programming / MVVMあたりの話は、front周りでよく聴くが実際どうなんだろ. 一度触ってみよう
  • rebuild.fm / WEB+DB PRESS とgfxさんのwatcherの一人としては、dejavuな話題が多いなと思いつつ 生で聴いて得るものもあった
  • jenkinsおじさんをnative開発で利用してるけど、Androidだとemulatorの周りの調整とか、iosだとxcodeの設定とか、メンテナンスが面倒だったり、完全に自動化きなかったりで不満に思うところ多々ある.
  • cookpadだとどんな運用になっているのか詳細が気になった
  • Publisher APIつかってみよ
  • YAPC規模のAndroid/iOSの勉強会ほしいってのは完全同意!

そんなにビッグでもないデータ処理手法の話

  • tagomoris さん
  • ベストトーク 2位 おめでとうございます!
  • サーバー周り理解不足で内容についていくのがかなり辛かった... ゆっくり口調だと素人にはうれしかったかも
  • TBスケールのデータ... LINEほどになると日常なのね...
  • naoya さんに言及しているところが面白かったw
  • 小さいと思っている事でもシェアして育てていく姿勢大事だな

LT

DAY1 よりノリがさらによく、Sawyer X さんのpapixさんネタが痛快で楽しかったw あの人数、あのノリで盛り上がれるLTってよくよく考えるとすごい. 他の勉強会にはないYAPC風物詩だ.

キーノート

  • typester さん
  • 人に歴史ありだな... キャリアの話は誰に聞いてもみんな違ってみんな面白い.
  • すごいHackerもシャイな自分から1歩踏み出していったんだって思うと勇気もらえる
  • shiroさんは前のブログでgaucheのコードを書いたとき、つたないコードなのにコメントもらって、すごい感動したの今でも覚えてる
  • そういう意味でもあの仕事と趣味の話で心の琴線に触れる部分があり感動してしまった
  • 自分の生き方を口にして、その通りに生きていけるってなんてかっこいいんだ
  • Jr.かわいい

全体を通して

YAPC楽しい! miyagawaさんやnaoyaさん、gfxさんに、nekokakさんあげれば尽きないけど、あのiconのhackerは実在するんだなーと声優のトークライブにいったときのようなリアルな実感がある. 技術的にもそうだけど、それ以外にも毎年得るモノがある. 今年はキャリアとか、今後自分がどういう30代になりたいかって自問させられた. 考える時期に来ているのかもしれない.

すごい人にあうたびに感じていた焦燥感はなくなったけど、これが停滞なのか、それとも今やるべき事があるからなのか. 悩んでもしょうがないことは置いといて、あのロールモデルに近づけるようがんばってこー

cocos2dx 3.2 をためしたメモ

Download

http://www.cocos2d-x.org/filedown/cocos2d-x-3.2.zip

Install

$ cd $HOME/src/cocos
$ unzip cocos2d-x-3.2.zip
$ ./setup.py

.zshrc に勝手に以下が追加されてうざいので、適当に他のprofileに移動する

# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x
export COCOS_CONSOLE_ROOT=$HOME/src/cocos/cocos2d-x-3.2/tools/cocos2d-console/bin
export PATH=$COCOS_CONSOLE_ROOT:$PATH

# Add environment variable ANT_ROOT for cocos2d-x
export ANT_ROOT=/usr/local/Cellar/ant/1.9.3/libexec/bin
export PATH=$ANT_ROOT:$PATH

cocosコマンドがうてる事を確認

$ cocos new
Running command: new
usage: cocos new [-h] [-p PACKAGE_NAME] -l {cpp,lua,js} [-d DIRECTORY]
                 [-t TEMPLATE_NAME] [--ios-bundleid IOS_BUNDLEID]
                 [--mac-bundleid MAC_BUNDLEID] [--no-native]
                 [PROJECT_NAME]
cocos new: error: argument -l/--language is required

プロジェクト作成

$ cocos new SampleGame -l cpp -p me.mattak.samplegame
Running command: new
> Copy template into $HOME/git/cocos/SampleGame
> Copying cocos2d-x files...
> Rename project name from 'HelloCpp' to 'SampleGame'
> Replace the project name from 'HelloCpp' to 'SampleGame'
> Replace the project package name from 'org.cocos2dx.hellocpp' to 'me.mattak.samplegame'

いらないプロジェクトを削除

$ cd SampleGame
$ rm -rf proj.win32 proj.wp8-xaml proj.linux

androidのビルド

$ cd $PROJECT/proj.android
$ android update project -p .
$ cd -
$ cd cocos2d/cocos/platform/android/java
$ android update project -p .
$ ./build_native.py
$ ant debug install

iosのビルド

  • 開いてビルドするだけ

所感

  • いまどきantでdefaultビルドはないな・・・
  • iosのビルドおそくてつらい・・・
  • ビルド早くする工夫がほしいな...
  • updatableなプロジェクト構成にしてほしいな...
  • iosのbundle identifierが変更されてない気がする

おまけ: gradle対応

cocos2d/cocos/platform/android/java/build.gradle

proj.android/settings.gradle

proj.android/build.gradle

これで gradle installDebugが動く