non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

Goオールスターズ2に行った

ちゃんしたレポートは

早速その日に

dev.classmethod.jp

という記事が書かれているので、そちらへ行ってください。

勉強になったこと

Goのチャネルは面白そうで、一見、とっつきやすそうだが、注意しないとハマりそう。

あと、チャネルの実装もslectの話を聞いていると気になった。

を読むと良いらしい。気になる。

また、規模が大きくなった際の開発もDDDのことがよく分かってないからかもだが、 結構自前でルールを決める必要がありそうで難しそう。

あと、実際の本番では、ピンポイントでの運用から始めるケースが多そうだった。

せっかくチャネルのお話を聞いたので、gopheronでもgoルーチンになっているWebSocketサーバーの 起動処理が完全に立ち上がったら、呼び出し元に起動完了を通知するような処理を 追加したかったが、

http.ListenAndServe(":"+strconv.Itoa(port), nil)

で行ったきりになるので、困った。

監視用のgoルーチン立てて、そこで、websocket試すとか しないといけなそうなので、だったら、 本来websocketサーバーにアクセスする処理で、リトライ処理を入れておく程度で良いかなという状態に。

懇親会

全く、知ってる人がいないし、特にNode.jsなどと違い、Go関連のリポジトリにコミットした実績もない状態だし、 そもそも、自分の関わる日中の仕事での縁のない言語なので懇親会うろうろしてたら、 声かけてくれた方がいて、そこから少し話ができた。

数人の方と話せたが、皆さんPHPで性能が出なくて、goに移って来られた とのことだった。

関連記事

7年前の記事

1年前の記事

iOSでもCordovaプラグインを作ってmrubyを動かした

おはよう長男はこのところ、Amazonプライムで無料で見られるワイルドスピードシリーズにハマって、段ボールでスポーツカーを作っています。@kjunichiです。

iOSでもやってみた

iOSではmrubyを動かせるアプリ

https://itunes.apple.com/jp/app/rubypico/id1042498865?mt=8&at=10l8JW&ct=hatenablog

があり、実用的に使えるのですが、 Androidで少しCordovaのプラグイン周りが分かってきたので、より理解を深める為に、iOSにチャレンジした。

2年待たずに機種変更が比較的安価で出来るauのサービスにiPhone6S購入時に加入しており、今回iPhone 7 Plusを予約したので、 これが届けば、iPhone 7 Plusで試せたのに残念です。iPhone 6Sで動かしました。

準備

iOSも去年から実機で動かすのに、デベロッパー登録してお金を払わなくてもよくなっている。が、デベロッパー登録自体は必要。 自分は、はるか昔に、年会費の掛からない登録をしていたハズ。

node.jsを自分はnodebrewでバージョン管理して利用している環境なので、sudoは不要。

Xcodeが入っている状態で、cordovaをインストールすれば、あとiOSで必要なパッケージはエラーメッセージで教えてくれるので、 それにしたがってnpm install -g すれば環境は出来るはず。

XcodeiOSの署名

のように進めればできた。

mrubyの組み込み

Androidと異なり、iOSではCordovaの制約(plugin.xmlの記述方法を知らないだけ?)から、libhoge.a形式では、エミュレーターと実機に対応したバイナリを 同時に作成できなかったので、Framework形式にする必要があった。 (のちの作業で、lipoでlib.aに複数のCPUアーキテクチャを詰め込めることを知った。)

(https://cordova.apache.org/docs/ja/latest/plugin_ref/spec.html 見たら、ブラックベリーのタグを使えばよかったのかも)

Framework化は

RakefileにmrubyのAPI「mrb_load_string」を利用可能にするため、

conf.gem :core => "mruby-compiler"

を加えて、githubから最新のmrubyを持ってきて、ビルドした。

さらに、最近のiOSの開発では、Apple純正のライブラリ以外は、<hoge.h>形式で呼ばずに"hoge.h"で呼べというようことなので、 これに従い、

<mruby.h>

などは、

"mruby.h"

と変更した。

はじめてのObjective-C

SwiftでプラグインをつくるCordovaのプラグインも見つけたりしたが、今回は、無難そうなObjective-Cで実装を始めた。

putsとgetsの実装

iOSでは

[self.commandDelegate evalJs:@"alert('Hello,world!')"];

JavaScriptを呼ぶようで、putsはこれで楽勝。

getsの実装もAndroidの実装同様、スレッドを別に作ることで、対処できた。

成果物

0からCordovaのプロジェクト作って、mrubyのプラグインを追加して、動かすまでの動画:

www.youtube.com

まとめ

iOSもアプリの署名の箇所だけ、Xcode使うだけで、Android同様にコマンドラインで操作出来て、 なんとなく安心したw。

iOSでの作業は、Objective-Cで、どうやってグローバル変数を扱えるのか程度で、Androidのように デバッグ文も書かずに作業出来てしまった。

今後の課題

  • Objective-Cのコードをswift化(Cordovaでプラグインが既に用意されており、これを使えば簡単そう)
  • mruby側にOpenCVを組み込んで、AndroidiOS共通な処理をどう実装できるのかやってみる。

参考資料

関連記事

7年前の記事

1年前の記事