k2wankoの技術的なanything

プログラミングとか技術系の情報とか書いてます。

Cocos2d-x v3.3から入門する

就活までになにかプログラマっぽいポートフォリオを作りたいしReleaseもしたい!

ということでCocos2d-xを入門してみようと思います。

まぁ今年就活ではないんですがね。

まだデベロッパー登録してないのでiOS端末には入れられないので

Androidの実機でTestCppを動かすまでを目標にしたいと思います。

Cocos2dx(v3.3)のインストール

開発環境はMac OS X 10.10.1です。

AndroidSDKとAndroidNDK(r9d)はインストールされているもので

Xcodeも入ってる状態です。

Download Cocos2d-x Cocos2d-html5 Cocos Studio | Cocos2d-x

公式のダウンロードページからCocos2d-xのv3.3をダウンロードしてきて適当な場所に解凍します。

僕は見つけやすいという理由でHOMEディレクトリの直下においています。

$ unzip cocos2d-x-3.3.zip && mv cocos2d-x-3.3 ~

そしたら以下をbashrczshrc的なシェルの初期化処理をする場所に記述しておきます。

export ANDROID_SDK_ROOT=$ANDROID_HOME
export ANDROID_NDK_ROOT=$ANDROID_NDK_HOME

# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x
export COCOS_CONSOLE_ROOT=$HOME/cocos2d-x-3.3/tools/cocos2d-console/bin

# Add environment variable ANT_ROOT for cocos2d-x
export ANT_ROOT=/usr/local/bin

export PATH=$PATH:$COCOS_CONSOLE_ROOT

cocosコマンドが使えればOKです。

TestCppを動かす

カレントディレクトリをcocos2d-x-3.3/tests/cpp-tests/に移動し

以下のコマンドでコンパイルから端末にインストールまでやってくれます。

$ cocos run -p android

ハマリポイント

TestCppを動かそうと思った時Android NDK r10ではリンカーでエラーが出るのでr9を使わないといけないようです。

Android NDK r10が非推奨を知らずに時間をだいぶ無駄にしたorz

Qiita API v2 Hackathonに参加してきました。

できるなら週1でブログを書きたいと思いつつも 何ヶ月ぶりになる僕です。

最近は「書くからめんどくさいんだ!」という結論に至り 自動投稿に憧れて自然言語処理とか機械学習とかのアルゴリズムを真面目にやりたいと思ってます。

後は技術よりのノウハウはもっぱらQiitaに投稿してるから ブログに書くネタなかったりしてるってのもブログ書かない理由だったりしてます。

そんな、ふと書いてしまうQiitaのイベントということでwkwkしながら行ってまいりました、が

f:id:k2wanko:20141213235116j:plain

って、わけでもないんですが まぁ自分の開発力のなさを痛感できました。

作ったもの(作ろうしたもの)

QiitaSummaryというQiita記事をまとめるツールを作ろうとしました。

テーマがQiitaAPI v2を使った「毎日が楽しくなるもの」だったので

そもそも書くってめんどくさい、自動で記事を生成できればいいんじゃない?

という適当な発想で記事を自動生成する物を作ってたんですが さすがに0から生み出すのは厳しいので

Qiitaの投稿を色んなパターンでまとめられて 要約機能がつけて 記事を生成すればいいんじゃない?

それをチーム内で公開してそこの記事から

気になったのに触発されて記事が書ければIN/OUTのいいスパイラルになるんじゃないかなと思ったんですが

流石にやっつけ仕事ではほとんど実装できませんでした。

自然言語処理は流行りだし楽勝なライブラリもあるだろーと楽観視してたら かなり自分で実装するはめに...

まぁおかげで 要約機能の作り方をなんとなくわかったので

今度、npmにした後 まとめてQiitaに投稿しようと思います。

ちなみにこんな感じのを出力できたりします。

(自分のストックをまとめたやつ)

user title tags
@dtan4 nginx.conf で環境変数を読み込む #nginx
@kinu Chrome 40 で今すぐ ServiceWorker を試す #JavaScript #Chrome #HTML5
@mizchi 俺のJSライブラリの世界観(2014末版) #JavaScript #AdventCalendar
@kgmyshin [翻訳] android best practice #翻訳 #Android
@chocopie116 Loopbackでコード1行も書かないでAPIができた #loopback #exercise #Node.js
@h_demon 俺のaltjsがこんなに簡単にpegjsで作れるわけがない #pegjs #altjs #JavaScript
@watilde Direct Proxiesを使ってaltCSSを作ってみた #JavaScript #Node.js
@watilde cliでQRコードを生成、ときどきお寿司 #Node.js
@mizchi atom-shellを雑に使って任意のnodeスクリプトが実行可能なアプリケーションとして配布する #nodejs #atom-shell #JavaScript
@cubicdaiya Goサーバのモニタリング #Go
@stwhabout 歴史で振り返るWebRTC #WebRTC #AdventCalendar
@Kokudori 例外大統一理論 #例外
@pocotan001 Gitのコミットメッセージを絵文字から始める #Git #GitHub
@nezuq Webスクレイピングの法律周りの話をしよう! #Webスクレイピング #著作権
@hokaccha Direct Proxiesでmethod missing的なことをやる #JavaScript
@soundTricker HTTP Load Balancerを使って、Host名やURIによって接続するインスタンス(群)を切り替える #googlecomputeengine #GoogleCloudPlatform #gcpja
@laco0416 Dartをはじめよう #Dart
@nowri 0行から始めるクライアントサイドJavaScript入門 #JavaScript
@sudix (翻訳)Goでのパイプラインとキャンセル #Go

このテーブルにさらにdigestができる予定だったんですが 組み込むところには間に合いませんでした。 でも適当な要約機能はできてるので上から3つ分くらい貼っておきます。

nginx.conf で環境変数を読み込む

すでにlua_nginx_module.html#env-`env`ディレクティブ__と     __ngx_http_perl_set$server_name_from_env```##環境変数名と環境変数をnginx変数に設定したい場合は、sedとかERBを使ってnginx.org/en/docs/ngx_core_moduleに含まれていません。 ```nginxenvENV_NAME=hoge.example.comhoge/nginx`みたいに参照できたら良いのですが、nginxは起動時に入れてやる必要があると思います。今回は環境変数を引き継ぎません。

Chrome 40 で今すぐ ServiceWorker を試す

例えばGithubPagesはHTTPSのセットアップをする必要があります。 </p><pid="log"></p>ServiceWorkerをサポートして動作するWebサイトを作ってみてください。一方、ServiceWorkerからページのデータはWebフォントを使ってページをキャッシュする。

俺のJSライブラリの世界観(2014末版)

ただしtypescriptはHEAD使ってることが一度もないのでmocha-phantomjs:ブラウザテスト-sinon可能な限りヘッドレス(node)でテストする派。 gulp-concatなんだかんだでコマンド実行するのとconcat必要になるケースが多いので、プラグイン=低品質とほぼ同義であると言っても良い。UI層の開発イテレーションはトライアンドエラーを繰り返したい。

...まぁ ランダムにやってるし コードとか記号とか文章に関係ないのも合わさってるのでカオスです。(わけわからない要約が なんか楽しくなるんじゃないかなとも思ってたりしましたが...あんまりおもしろくなかった)

まとめ

  • 限られた時間で実現可能なアイデア出しがどのチームもよかったなと思えるハッカソンでした。
  • (自分のは実現が難しいアイデアでアホだったと反省)
  • 懇親会のお寿司美味しかったです。

次回も楽しみです。

AndroidWearを開発する 準備編

念願のMoto360を手に入れることができたので やっとWearアプリの開発ができます。

Android Wearでできること

Android Wearは腕時計型の端末です。 そしてAndroid Wear単体ではネット接続もできません (最近、腕時計型のAndroidが予約開始されてるけど これはWearじゃないので)

なので基本的には繋いだスマートフォン端末の通知をWearで受け取ったりできます。

でもただ受け取るだけじゃまだ腕時計です。

受け取ったメールに返信したりGmailであればアーカイブ、InboxならDoneなど操作ができます。

Wearで文字を入力するには音声入力のみなので 返信は短い文章に限られそうですね。(そのうちテンプレート返信くらいはできそうですが)

他にもスマートフォンのカメラのシャッタを押したり 心拍センサーがついてる端末などもあります。

まだ 対応アプリが少ない中なので一般向けではありませんが 今後AppleWatchが発売されれば腕時計型のウェアラブル端末の敷居が低くなれば一般にも広がるでしょうし AppleWatchはAndroidと連携する可能性よりAndroidWearがiOSと連携する可能性のが高いので投資するならWear(かな〜?)といえるかもしれません。

余談ですがMoto360を見た時スパイキッズ2に出てくるスパイウォッチだ!と思いました。 機能的には時間の確認できるMoto360のが優秀ですね(笑)

開発環境の用意

入門エントリーなんですが開発環境構築くらいは とっくにたくさんの人が書いているわけでDRYに則ってリンクだけ貼るスタイルで行きます。

15分ではじめるAndroid Wear開発 - 実機を使った開発環境の作り方 - Qiita

ちなみにMoto360の人はBluetoothデバッグがメインになると思います。

AndroidStudio使い Bluetooth経由でアプリのインストールができました。

gcp ja night #28 に行ってきました

f:id:k2wanko:20140917231939j:plain

gcp ja night #28に行ってきました。

初の六本木での勉強会でした。

セッション内容はこんな感じでした

Managed VMのDocker対応とKubernetes最新動向 by Brian Dorsey, Developer Advocate, Google Inc.

Manged VMとは、Google App Engine(AppEngine)とGoogle Computer Engine(GCE)を連携させるもののようです。

何が嬉しいのかというと AppEngineでは制限されていたAPIやCやRubyとかで書かれたアプリケーションをGCE側で動かしてTask Queues APIで連携するようです。

GCE側で動かすソフトの配置方法にDockerが使われるようで

GCEでインスタンスを選択肢その中にDockerを動かす、と言った感じになるそうです。

ちなみに講演で聞いた内容ではGoogleが用意したImageを必ずしも使う必要はないようで

自分で80番ポートをListenするImageを使えますと言ってました。

実際触ってないのでGoogleが用意したImageってのがなんなのかわかってませんが

要は80番ポートを使うImageを作れば良いということなんでしょう。

さて現在Maneged VMはLimited Previewのようでフォームで申請して使うようです。

フォームは英語です、読めますが書けませんorz

KubernetesはDockerのコンテナ管理システムです。

DockerはOSのリソースを色々分割して管理してくれる それだけのアプリケーションなので そのDockerが提供してくれるコンテナを管理する方法がDocker自身には備わっていないので

そこでGoogleが長年培ってきたコンテナ管理技術をオープンソース化したものがKubernetesです。

Kubernetesを使えばDockerのどのコンテナなど意識することなくルーティングしたホストでアクセスできるとのこと(まだまだわかってないので 実際使って 理解を深めます)

Kubernetesについては こちらの記事がまとまってていいと思います。

メモ:Google製DockerクラスタツールKubernetes

Demoではtemplateから複数のコンテナを起動させたり コンテナのフェールオーバーなど見せてもらいました。

ただあまりにも早い起動のため 瞬きしてる間に次のインスタンスが立ち上がり 前の方の席に座ってましたが ヤムチャでした。

講演での資料等のリンク

感想

$500のクーポンをもらったことですし 今度の土日にCoreOSをKubernetesでクラスタリングしてみたいと思います!

LLDiver行ってきました

LL Diver | Dive into Lightweight Languages

ヨザさんという方に誘われて お台場まで行ってきました。

中々濃い セッションばかりでした。

LLについてなんですけど 型あると便利だよねIDEの恩恵も受けやすいし

とか

JavaScriptって実はLLじゃない?とかって話が中々面白かったです。

それでもNode.jsをやる

「Node.jsはオワコンなんじゃないか?」という話に「「ちょっと待った」」って言った内容で

Node.jsとはなにかを再認識するいいセッションでした。

Ruby2.1のRefinementsで作るSpockライクなテスト構文

Rubyの黒魔術に 恐れおののくセッションでした。

Rubyの黒魔術はやばいですねw

Let's メタプログラミング

東京Node学園13限目に行ってまいりました。

東京Node学園13限目

行ってきました。 今回はSocket.ioについてです。

Socket.io v1.0

いつの間にか1.0になっていたとは。 中のソースコードを読んでびっくり 超スッキリしてます。

僕の拙い文章では スッキリしてることしか伝えられないので @yosuke_furukawaさんの素晴らしいスライドを御覧ください。

コードがスッキリのほかに機能的すごいとおもったのはバイナリサポートとredisを使ったプロセス間通信でしょうか。

ここまで 簡単にできるもんなんですね。

LTについて

今回のLTは以下の様な感じでした。

「social-cms-backendの話」 by @dai_shi

「Node.jsが使えるホスティング環境としても利用可能なBaaS、Appcelerator Cloud ServicesとJavaScriptでネイティブアプリを作成できるTitanium」 by @yagitoshiro

「gulp.jsチートシート: 使いこなしの7パターン」 by @cognitom

「増え続けるmetafileが生む問題とchest.js」 by @watilde

この中で僕の中でタイムリーだったのがchest.jsです。

こんな便利なツールがあるならもっと早く知りたかった!

メタファイルをいい感じに隠してるくれるツールのようです。

ツールでGruntより早いそうなgulp.jsもぜひ使ってみたいですね。

終わりに

今回もお寿司ごちそうさまでした。(なんか寿司食いに行ってる感じになってしまった。)

Go勉強会に行ってきました。 Gunosy.go#1

Gunosy.go#1 - connpass

ムシムシして色々捗らないですね。

気分転換にGo言語を勉強して 何か作りたいなぁと思って勉強会に行ってまいりました。

東京タワーのすぐそばなんですね。

久しぶりに下から見た気がします。

内容

勉強会ではAから順番にパッケージの内容をやっていく というものみたいです。

今回は

  • archive/tar, archive/zip
  • bufio
  • builtin

の3つのパッケージと

簡単にGoの言語仕様とかの話を聞いてきました。

archive/tar, archive/zip

なんだかGoでzip作るの楽そうですね。

tarもいくつか種類があるそうなんですが

それを意識せずにパッケージを利用すれば

簡単に作れるみたいです。

普段あんまりzipを使うことはないんですが

実際使うとき意外とめんどくさかったりしますよね。

bufio

bufferのioを提供してくれるようです。

難しそうです。

でもそのうち言語も作ってみたいとは思ってるので

先読みとかそういったことをできるこのへんもちゃんと抑えておきたいところです。(C言語でやる気は起きないです)

builtin

Documentを作るための装飾を提供してくれるやつという認識ですが

あってるのか不安

終わりに

シールもらいました。

f:id:k2wanko:20140611215723j:plain