Fitbit StudioにiPhoneが繋がらない場合に試すべき民間療法
Fitbit Studio から iPhone が認識されない問題、iPhone の名前からマルチバイト文字無くしたら認識した.........
— アンドレス・ダレッサンドロ (@side_tana) 2017年11月16日
参考までに環境をまとめておくと
- iPhone 6s
- iOS 10.3.3
- mobile app: Fitbit 2.43(730)
- Fitbit Ionic: バージョン 27.30.5.8
で、具体的な手順としては
- Fitbit App のアンインストール
- 端末名の変更
- Fitbit App のインストール
という感じ。アプリのインストールとアンインストールは勘でやったので不要かもしれません。
とにかくこれでアプリの開発者向けメニューから DeveloperBridge を有効にした際に「非アクティブ」と「接続しています…」みたいなのが交互に出てくる状況からは脱せました。
他に言語設定英語にしたり日本語にしたりしたけど関係あったのかな。
ところでfitbit ionic の開発環境は全てブラウザで提供されていて、PC、スマートフォン、ionic本体 が全てサーバを介してWebSocketで接続され、アプリのインストールやログの取得もWebSocketで行われていて、気合入ってるって感じ。
GarminのアプリケーションはUSBで本体繋いで、ビルドしたアプリケーションパッケージをファイルとしてコピーするだけだったので簡単に理解できたけど、試すたびに本体をUSBで繋ぐ必要があったりしてなかなか大変であった。
YAPC::Kansai でタイトルの長いやつをやります
えー、どうも、このところは猫も杓子もディープラーニングだってんで、ビッグデータやらHTML5やらなんてのはとんと聞かなくなっちまいまして。今じゃすっかり定着しちまいましたが、その前にはクラウドってのが流行り言葉でありました。その頃といえば PaaS とか IaaS とか、これも今日はきちんと使われちゃいますが、当時はもうめちゃくちゃだった[要出典]。さてそんな XaaS に BaaS というのがあったわけです。なんの略かといえば、 Backend as a Service でございますな。
そんな BaaS の中でもとくにモバイルアプリ向けのバックエンドを提供する一派がありまして mBaaS なんて名乗っていたわけですが。その中でもひときわ有名なのに Parse.com ってサービスがあった。こいつは 2016年の初めに終了宣言をしてそれから1年後、まあ今年の初めですな、宣言通りサービスを終了しました。
さて慌てるのは Parse.com を使っていた事業者だ。
というわけで、利用しているBaaSが終了するときにすべきこと または Parse.com の終了と私たちの取り組み というタイトルで一席ぶたせていただきます。
愉快な話ができるよう準備しておりますので、是非お越しください!
Google App Engine で Parse.com を看取る
ところで皆さんは1年前の今日,2016年の1月の28日に何が起きたかを覚えていますか? 私は覚えています.そう,Parse.com が1年後にサービス終了する,と宣言したあの日です.*1
ということで死にゆく Parse.com への最後の手向けとして parse-shutdown-monitor というサービスを作りました.斎場とも言えます.*2
いわゆる外形監視になるんですかね? そういう意味では普通の外形監視使ってもよかったのですが,今回は Google App Engine氏に喪主をお願いしました.
監視しているのは
- ParseObject の取得と書き込み
- Query の実行
- User のSign-in
- File の取得/アップロード
- ParseConfig の 取得
- Hosting で設置した静的コンテンツ
- CloudCode の Hello, World
- Jobs による定期実行
の 8 種類 10 項目です.
CloudCodeって言うのは Google App Engine とか Heroku みたいな PaaS として使える機能ですね*3.Jobs は Parse.com 上で動作する cron というか,Google App Engine の cron を使ったことがある人にはおよそそのままの理解で良いんですが,CloudCodeとして登録した関数を定期的に実行してくれる君です.
基本的にはGoogle App Engine の urlfetch api を使って, Parse.com の REST API を叩き,帰ってくる http のステータスコードを監視する,というようなことをしています.Jobs については直接監視できないので, Parse.com の CloudCode 実行してる環境から毎分アウトバウンドリクエストを生成して,Google App Engine 側で受けとって保存,さらに Google App Engine の cron で新しいレコードが作成されていることを毎分監視し続ける,みたいなアーキテクチャになっています.*4
作ってた時の面白エピソードとしては,移行先として公開されている Parse.com のオープンソース実装であるところの parse-server にはJobs に相当する機能が無く,また公式ドキュメントは全て parse-server を基準としたものに置き換わっているため, 結果としてドキュメントがない状態で Jobs に関するあれこれをしなくてはいけない,みたいなことがあったこととかですね.
開発環境について
なんかいろいろやってて結構便利に開発出来たんですけど改めて書きます.
*1:先日1月30日に終了するという情報更新がありました.
*2:ひょっとしたら日本で最後にParseAppの新規作成をしたのは俺なのではないか,もしかしたら世界中で最後かもしれない.世界一短命なParseAppがParseの最期を見守るのだ
*3:DBへの書き込みと取得を繰り替えし実施する必要がある場合,USにあるParseのサーバとJPのアプリやサーバがちまちまやりとりすると累計のトランザクションタイムが10秒を軽く超えていくので,こういったDBに近いところで処理出来る環境は大層重宝するわけです
*4:この記事書き始めた時点では Jobs からのリクエストは記録だけだったんですけど,それはだめだよねってことでさっき監視を追加しました.
■
静的ファイルの配信ができてるかとりあえず確認するために <h1>It works</h1> だけのファイルつくったんですけど,インターステラーでジェシカ・チャステインが「ユリイカ!」って叫びながら書類ばらまくシーン思い出した
— Pygame (@side_tana) 2017年1月17日
ユリイカって叫びながら書類ばら撒いたあと「伝統なの」って言ってたのが印象的,我々も HTTP サーバをこしらえたらまずは echo \<h1\>It works\</h1\> > index.html とします
— Pygame (@side_tana) 2017年1月17日
これは一種の伝統なのではないでしょうか?
— Pygame (@side_tana) 2017年1月17日
エクスクラメーションマークが足りない
— Pygame (@side_tana) 2017年1月17日
君は異体字セレクタを見たことがあるか
node v6.2.0
> var codePoints = [10548, 65039] undefined > var s1 = String.fromCharCode(...codePoints) undefined > var s2 = codePoints.map((p)=>{return String.fromCharCode(p)}).join() undefined > s1 '⤴️' > s2 '⤴,️' > s1 === s2 false > s1.length 2 > s2.length 3 > s2.codePointAt(2) > 44
65039
は異体字セレクタ (VS16) なので,これが単体で登場するというのはおかしい.
String.fromCharCode()
に 65039
だけを与えると 44
が前に追加されて,それと 10548
を連結するので3 文字になる.ということらしい.
この 44
がどこから来たのかもうちょっと追ってみたいけど明日新幹線乗れなくなりそうなのでこの辺でやめておこうという感じ.
コメントで指摘していただいたとおり.上記のコードで .join()
した時のデリミタとして ,
,コードポイントでいうと 44
が入るは Array.prototype.join()
の仕様でした.ということで
> var s2 = codePoints.map((p) => {return String.fromCharCode(p)}).join('') undefined > s2 '⤴️'
とすることで期待する挙動になりました! id:t_motooka さんありがとうございました!
参考
Variant form (Unicode) - Wikipedia
Miscellaneous Symbols and Arrows - Wikipedia
このページの一番下に,このブロックで異体字セレクタが用意されている記号について触れられている.
http://www.unicode.org/Public/UNIDATA/StandardizedVariants.txt
これは試験に出るので全部暗記しましょう.