2016年8月24日水曜日

RealmデータベースでdeleteAllした後のデータ復元は可能か

次世代モバイルデータベースっていう風に言われているRealmを使ってみた。
アプリで実際に組み込むのは初めてなので無知な点が多々あります。
気づきましたらご指摘ください。

公式ドキュメント(https://realm.io/jp/docs/swift/latest/)には以下のように書かれている。

※公式ドキュメントより引用
下記のように、Realmに保存されてるオブジェクトをすべて削除することもできます。 ディスクスペースを効率的に再利用するために、Realmファイルのサイズはそのまま維持されることに注意してください。


// Realmに保存されているすべてのオブジェクトを削除します。
try! realm.write {
  realm.deleteAll()
}


ということはdeleteAllしただけでは実データは削除されないんじゃないのか、ってことで試してみるとやはりフラグを書き換えるだけであっさりRealm Browserで削除したデータが見れるようになった。

実験データは準備できたら更新します。

2016年8月16日火曜日

在日中国人(永住権あり)が台湾に行くためのビザ申請

久々に海外。
今回は近場で手頃な台湾に遊びに遊びに行こうと思います。

日本人なら難なく観光に行けますが外国籍となると面倒なのだ。
お金に余裕があるなら旅行代理店に任せちゃった方が楽です。

私みたいに貧乏な人は自力で取りに行きましょう。
ネット経由でも申し込みはできるみたいですが、今回は自分の足でいきました。


持ってくもの
★パスポートの写真面のコピー
★在留カードのコピー
※コピー機あるので現地でコピー可能
★住民票
★旅程表 ※事前の電話で確認した時は言われなかったけど申請事項記入時に必要
★証明写真 3.5x4.5 ※これも現地で撮れる
★お金 シングル1900円 マルチ3800円

白金台駅の地上に出たら、左側に進んで2つ目の信号を渡って、
小さい路地に入る。50mほど進んだところの左側に入口がある。

中に入ったら、

① 6番窓口で申請用紙をもらう
② 記入し、パスポートコピーを切り取って貼る、証明写真も貼る
③ シングルかマルチか聞かれるので答える
④ 支払いをして終わり


混んでなければ15分くらいで終わりです。
ネット経由じゃないと受取に来ないといけないのかな?
8/16申請で、9/2受取予定。受取できないと9/3出発できない!!!

余裕を持って申請しましょう。

ちなみに申請用紙どこにも置いてなくて、知らない人に尋ねたらネット申請しないとダメって言われたけどそんなことないですよ!!!

2016年8月2日火曜日

Apache Cordovaを利用したiOSアプリでCustome URL Scheme呼び出しでhandleOpenURLが呼び出されないエラーの対処法

タイトルが長くなってしまった。

そして、久しぶりにブログを書きます。
どういうキャラで書いていたのかも忘れるくらい。

久しぶりなので前置きが長くなるのは許してください^^;;

ちょっとCordovaとの出会いについて。。。
ハイブリッドアプリのいうワードの加熱期をすぎ、騒がれなくなりましたね。
既存のウェブ技術でモバイルアプリが開発できるのでウェブのフロントエンドデベロッパーにはもってこいの技術。
さらにオンライン上で開発ができるMonacaっていうサービスもあるし簡単に始められる。

私が仕事でハイブリッドアプリを作り始めたのは2014年ごろ、やはりMonacaでした。開発に参加した当初はMonaca上で開発していました。
しかし、無料アカウントだと色々と制限があったので、Cordovaに全て移行することになって現在まで来てると。

本題に入ります。
なぜ、ブログを書くのかというと久々に3、4時間くらいハマった問題(タイトルの通り)があったからメモしないとまたいつかはまるかもしれないので。

◆環境
・Macbook Pro 15 2015late
・Mac OS X 10.11.6
・実行環境:iPad Pro 9.7 iOS 9.3.3
・Xcode 7.3.1
・Cordova 6.3.0
・bower 1.7.9(これは使わないけど一応)
・Atomエディタ
・リソース管理やビルド作業にはshell scriptとgruntを使ってます

2016年6月5日日曜日

奥多摩ドライブの楽しみ方

日曜の朝早くから奥多摩駅まで2時間ちょっとで着いた。

大きな渋滞はない。

駅には意外に多くの人がいた。
どっかの大学の集まりがあったせいか。

トレッキングスタイルな人が多かった。

とりあえず、観光案内所で色々パンフレットを散策。
そこで「わさびアイス」を発見する。
勢いで買う。硬いので溶けるまでちょっと待つ。
なんとなくわさびがピリッと?するかな。結論、もう食べることもなさそう^^;

夏のキャンプ計画に向けて色々下見をしようとなった。
「アメリカキャンプ村?」受付に見学を申請すると15分という条件でOK。
すごく綺麗な感じで良かった!
ツリーハウスが斬新すぎて笑った!!
ただ、料金的にぶっ飛んでいて、ここは利用することはなさそう。。。

もう一軒、名前忘れた。
ここは、川遊びが出来る、腰が曲がったおばあちゃんが可愛い、安いで好印象!!
ただし、泊まれる部屋は期待しない方がいい。雑魚寝な感じ。女子は厳しいかも。


お腹すいたってことで、
川の上に建っているような家のごはん屋「ちわき」に入る!
これがまたうまい!
個人的には七輪で焼くキノコが素朴で美味しかった!
釜飯は是非食べておきたい!!!
大満足!!

食べた後は、体を動かそう。
ものづくり体験できるところへ。木材を使ったものづくり、石を使ったものづくり、色々あって楽しそうだし、安い。
木材が混んでいたので、誰も居なかった石を体験することに!

小さな石を削って理想の形にして、最後はツヤ出しのために削って。
超音波穴あけ器で穴を開けてチェーンを通せばネックレスの出来上がり、
ストラップ紐もあるのでキーのストラップなどにもできてなかなかいい体験できた!

何より普段石を削れる機会はないから。
ここは是非寄っておきたいところ!

で、しっかりと最後にうの花ドーナッツを10個買って帰りました。

意外に満足できた、奥多摩。

時間や金銭に余裕がない時の近場ドライブとしては、
とてもいいスポットでした。

2016年1月28日木曜日

湯めぐり 竜泉寺の湯八王子みなみ野店

最近は日帰り温泉施設を回るのがちょっとしたマイブームになってます。

ちょっと前に高尾山口駅直結して新しいのができたとか、
八王子みなみ野にも新しいのができたとかという情報を小耳に挟みまして。


今回は「竜泉寺の湯八王子みなみ野」に行ってきました。
住所:東京都八王子市片倉町3505
電話:042−632−2611

詳細をリポートするつもりはなく、あくまでも一般客として行ってきた一個人の感想です^^;


1月24日、夜10時前に車で行きました。
まずここでつまづく、幹線道路から小道に曲がって入るようになっているので、
初めて行く方は要注意です。

なんとか駐車場入って第一印象は混んでるな〜でした。
1階の駐車場スペースはほぼ埋まってるような感じでした。
根気よく回ってようやく1台スペースを見つけてラッキーでした。

お風呂は2階なので、エレベーターまで歩き2階に上ります。
ここでも注意!エレベーター内の防犯カメラ映像は各フロアで見えるようなモニタが付いてるので気づかないでイチャイチャすると恥ずかしい思いをします。お気をつけを。

あとはそこらの日帰り温泉施設と同じで、
発券機でチケットを買って入るだけです。大人750円と比較的お得です。
タオルなどを持参すればそのまま入れます。

中は中央に広い畳の休憩スペースとその周りにテーブル席があります。
休憩スペースを中心に各施設が四方にあるため、休憩スペースから周りをキョロキョロ見渡せば何があるか一目瞭然です。
これは結構戦略的な構造だなと感じました。

お風呂上りにおいしそうなジュースカウンターが目に入ってきたり、
子供向けにゲームコーナーがあったり、
マッサージコーナーがあったりして、
かなり誘惑がありました。

ここは散財しないように、お風呂上りにジュースだけ買いました^^;
(買ってるじゃん!というツッコミは。。。ご遠慮ください)



さてさて、本丸のお風呂はというと。
・脱衣所
新しいということもあって綺麗です。ただ、八王子なので大学生が多く(長期休暇間近のせいかも)て、うるさかったですね。静かにしっぽりお風呂を楽しみたい方にはちょっとお勧めできませんね。
ロッカーは100円で、帰る際に返却される仕組みです。

・お風呂(今回は時間がなく、寒かったので中だけ)
洗い場は数があって、仕切りもあるので混まずに安心してじっくり洗えます。
シャワー圧が普通すぎてちょっともの足りないです。シャワー圧って結構大事だと思うんですけどね。。。
水はプッシュ式で押したら出て、しばらくすると止まるようになってます。

洗った後、お風呂に入ろうと見渡すが、混んでる。。。
お!空いてるというが電気風呂^^
面白そうと思って入ると、これがまた面白いw
今までになかった意外に結構強めな電流が体験できた!数種類の電流パターンがあって面白かった。
電気風呂に入りながら天井を見渡してると、何やら長文が書いてある看板が。
どうやら炭酸風呂が売りらしい。
がん細胞をどうのこうのって書いてあって、岩盤浴と合わせて利用するとなおいいですよって書いてある。
なるほど、商売上手だ。岩盤浴は別途料金だからね^^
さて、炭酸風呂に移る。

身体中に気泡が付き始める。
意外にも気持ち良く、ボーと仕事(プログラミング)の考え事をする。

洗ってから風呂に浸かって出るまで約1時間くらいかな。

風呂から上がって、髪を乾かし外に出ると、結構塩素の匂いがする。
出る前にシャワーで軽く流したけどな。

ちゃんと消毒をしているのはわかるけど。なんか残念。


通うかと聞かれると、いーや、と答えます。
学生が多すぎてうるさいんです。
また時間が経った頃に行ってみたいと思いました。
まだまだ混んでるし。
空いてる時間帯を知りたい。

2016年1月20日水曜日

携帯を変えてから、データ移行の話

ソフトバンクiPhone 5sからワイモバイルのAndroid端末に変えました。

いろんなアプリを入れないと。
ほとんどの場合はアプリを入れてアカウントでログインすれば使える。

ただし、Lineとアドレス帳は手作業はちょっと面倒でした。

★アドレス帳の移行
面倒だけど、流れを覚えてしまえば簡単。
Gigazineの記事がわかりやすくまとめられてます。
http://gigazine.net/news/20141101-switch-to-android/

まず、iPhoneでアドレス帳をiCloudに同期する。
それからhttps://www.icloud.com/にアクセスしてログインする。
左下の歯車で、アドレス帳を全部選択して、エクスポートする。
エクスポートされたファイルは適当なところに保存する。

次に、Android端末に設定しているアカウントでGmailにログインする。
表示を電話帳から連絡先に切り替えてインポートするだけど。

あとは端末で連絡先を同期していればあっという間に移行完了。


★Lineの移行
これは結構手間取った。
いや、普通にアカウントをちゃんと設定している人は問題ないです。簡単です。

ただし、私みたいに古い携帯のメールアドレスを設定して、さらにパスワードを忘れるってことをすると。。。。たいへん。
パスワード再発行は古いアドレスに飛ばされ見れない。
パスワードも頻繁に使わないし忘れますよね。。。。。

でも、大丈夫!!Facebookがありました!
まず、古い携帯をWi-FiにつないでLINEの設定→アカウント→Facebook連携をします。
連携が済んだら、
新しいスマホでLINEにFacebookでログインします。
そうするとPINコードを聞かれます。※聞かれない人もいるかと思います。
PINコードを入れてやると復活。

一安心。

トーク履歴がないのは仕方ないですが、
グループの誰か発言すれば戻ってきます。

やれやれ。

携帯をソフトバンクからワイモバイルに変えた話

私事ですが、
ソフトバンクでiPhone 5sを使っていて毎月の支払額を圧縮したいと思い、
年初めなのもあり、ワイモバイルに変更しました。

★現在のランニングコスト
・2年縛り中
・端末代金未払い金あり
・未使用のガラケー1台(番号お預かり中、端末代金未払い金あり)
毎月の支払金額:12000円前後。


以下、ソフトバンクショップでの手続きした内容です。
まず、使っていないガラケーを処分しました。
残債金額:7920円
解約手数料:10260円
合計:18180円の支払い。やめる時の代償はでかいということか。

続いて、MNP手続き。
残債金額:5670円
解約手数料:10260円
MNP手数料3240円
合計:19170円

ワイモバイルに行き手続きした内容です。
一番安いプランをと相談し月額3980円(1G)のプランを提示されましたが、
通信容量が足りないようなきがしたので、1G、3G、7Gと三段階あるうちの3Gに変更しました。
紹介された端末もデザインが気に入らなかったので+500円でアップグレードしました。
仕事の都合で電話をたくさんするので+1000円でかけ放題をつけました。
結局ワイモバイルも2年縛りですが。

新規で入ればもっと安いのですが、
仕事の都合で番号を変えたくなかったのでMNP。

★移行後ランニングコスト
以下、トータルのランニングコストです。
月額:4980円(3G・10分以内200回?)※今回はソフトバンクからの転入のため+1000円
端末代金:500円
かけ放題:1000円
ユニバーサルサービス料:2円
合計:6482円(7000円)
※これでも高いと思われるかもしれませんが、ソフトバンクで最安を提示されたのはこれよりも高い金額でした。

月額とは別に初回費用:6000円(事務手数料:3000円、翌月解約可能なオプション3000円分)
初期費用はランニングコストからは除外し、移行費用として考えます。


キャリア移行費用として今回かかったのが、
18180円+19170円+6000円=43350円でした。

もちろん、ガラケーの部分は普通の人はないと思うので、
25000円前後で済みそうですね。
さらに、残債がない人は17000円以内ですね。


今回の移行をまとめると、
毎月のランニングコストが約-5000円になりました。
単純計算で年額60000円圧縮ができます。
ただし、想定外の請求があるかもしれないので-4000くらいで計算すると、
43350円÷4000円=10.83ヶ月
今回かかった移行費用は1年くらいで回収できそうです。

ネット容量に問題がなければ、1Gへのダウングレードも検討しているのでさらに毎月500円(年6000円)圧縮できます。



ちなみに、ドコモ、auからの移行はもっと安くなります。

しばらくワイモバイルで運用してみて、MVNOで移行するかどうか検討します。

参考になったかどうかわかりませんが、
移行を考えている方は一度ショップに見積に行ってみるといいと思います。




ここからは余談ですが、
今回行った最寄りのソフトバンクショップ武蔵小金井の対応が残念でしたね。
淡々と事務作業しているみたいで、どうして解約しようと思っているのか聞こうともせず。
人を選んでいるんですかね、バックヤードの会話がうるさいですし、
別のお客さんの「娘が月々2500円しか払ってないっていうんだけどあれは何なの?」っていう
質問に対してもきちんと説明せず。いろいろと残念。

ワイモバイル武蔵小金井の方は割と話しやすかったですね。
ケースの会計を忘れちゃうくらい話しました。ちょっと惜しい。

2016年1月7日木曜日

SKEYE Pico Drone買ったよ!

去年の暮れに一番小さいドローンを探していたところ、
今んとこ?世界一最小なドローンPico Droneを見つけた。
1個6千円程度です。

SKEYE Pico Drone2台


とりあえず飛ばしてみた感じは、小さいのに意外に機敏に動くし、あっちこっちぶつけても意外に壊れないw
頑丈でよかった。

細かい性能とかは下記のブログのレビューが詳しいので見てみてください。
http://go-gadgetgadget.blogspot.jp/2015/10/skeye-pico.html#.Vo36Z5OLRE4


覚えとくべきは3つ。
1、キャリブレーションをすること
2、ヘッドレスモードを活用すること
3、バッテリは大体5分くらい
【番外編】空中で360度回転させようぜ!





小さいからといって侮ることなかれ。
こいつダイナミックに飛べるんだぜ!

1、キャリブレーション
これはどのドローンを飛ばすときもそうですが、
ちゃんとキャリブレーションをやりましょう。キャリブレーションのやり方はちゃんと説明書に書いてあります。
Picoの場合、左スティックを左下方向、右スティックを左上方向に傾ける。
そうするとドローン本体が反応してLEDが点滅します。

2、ヘッドレスモード
左スティックを押し込むとモードが変更できます。
ぴっぴっぴっとコントローラーが3回なったらヘッドレスモードです。
初心者には優しいヘッドレスモードをこいつは搭載されています。
ドローンがどっちの向きを向いているかを気にせずに飛ばせます。
Youtubeとかで外人さんが丁寧にヘッドレスモードのデモをやってくれてます。
https://www.youtube.com/watch?v=9-9nWh6hJBc

3、バッテリー
ずっと飛ばしてると大体5分くらいでLEDが早い点滅を始めます。
もうバッテリーがやべーっていう合図です。しばらくは飛びますが、
すぐにプロペラが止まるので速やかに着陸させてください。

【番外編】
ドローンが空中で安定しているときがオススメです。
コントローラーの右スティックを押し込むとぴぴぴって鳴るので、
鳴った後でスティックを好きな方向に倒してください。
びっくり!!!ドヤ顔でドローンが回転しますww
注意、ヘッドレスモード中でも回転の向きはドローンの向きみたいです。


※注意※
・プロペラは外れやすいのでぶつけて取れると探すのがたいへん。スペアが付いてきてるので紛失しても大丈夫。
・何回かぶつけるとプロペラの角度がずれるので調整しましょう。
・意外に丈夫なので豪快に家の中で飛ばしても大丈夫!。。。なはずwまずは安定したホバーリングを習得しましょう。

いやー、意外に楽しいおもちゃです。
早くメインコントローラーをハックしたいものだ。

2015年12月15日火曜日

Cordovaのプロジェクトにcordova-plugin-wkwebview-engineでつまづいた

開発に携わっている既存のCordovaプロジェクトで、
iOSでのパフォーマンスアップさせるためにUIWebViewの代わりにWKWebViewの導入を検討してるとこ。

とりあえず試してみるべと、
安易にプラグインをインストールしていくとアプリが起動中でプリーズする。
ログを見てみると、file://プロトコルで読み込もうとしている部分がすべてこけてる。

なんで?

ググってみると案の定WKWebViewでfile://でこけてる人がたくさんいた。
リンクは割愛するので「wkwebview file protocol」でググってみてください。

特定のディレクトリでしかfile://は動かないと。。。

現在の状態だとアプリバンドル内のwwwというディレクトリにすべてコピーされ、
file://で読み出そうとしている状態。

特定のディレクトリでfile://が動作するならば、
そもそもリソースのアップロード先を変更すれば解決できるそうだ!
これから検証していくけど、険しい道のりになるかもしれない。

2015年12月9日水曜日

nRF52 PDKを手に入れたの巻。

2015.12.08六本木ヒルズ49Fアカデミーヒルズにて開催された、

Nordicの「Global Tech Tour 2015」カンファレンスに行ってきた。


正直専門でもなく、電波にも疎いのでど素人として参加してきた。
同時通訳で行われたおかげで過ごしは話は理解できた。
わからないながらに話を聞き進めていくとnRF52(nRF51も)がすごいことに気づく。

特に2016年の世の中が変わっていくと感じた技術が、
NFC pairing(Touch-to-Pair)だ。

Bluetoothのペアリングを経験したしたことはありますか?
初めて接続する機器では必ずペアリングという作業が必要になります。
セキュリティを確保するためPasskey entryがつかわれているだとかで、
パスコード「0000とか9999とか1234とか」を入力したことはありませんか?

そ!れ!が!

Suicaをタッチする感覚でタッチするだけでペアリングができてしまうんですよ!!!
デモを見る限りおそらくSuicaより速度は遅い気がします。
もしかしたら環境、プログラムのせいもある気もしますが。
ともかく素晴らしく便利になる。

日本でモジュール提供する会社様からはすでに量産に向けて準備しているようで、
早ければ2016年のQ1、Q2には搭載された製品が市場に出てくるのではないかと勝手考えております。

他にも注目しなければいけないのが省エネ技術だ。
電力供給のオートメーション、CPU稼働を極力抑えたPPI(Programmable Peripheral Interconnect)技術、
ちょっと私には話が複雑で詳細までは掴めませんでしたがなるほどと納得はできた。
PPIはCPUを経由しないでイベント処理ができるとか。
Pin Crossbarなるものが入っていてピンの切り替えができるとか。
ん〜ど素人の私に誰か詳しくここらへん教えて欲しい。

nRF52 PDK
最後には、参加者にPDKボードを配布されたのでイジイジしながら勉強したいと思います。
とんでもないポテンシャルを持っている気がしてならない。
SDKおよびツールはここから、ドキュメントはここからダウンロードできます。

2015年10月21日水曜日

kAudioFormatAppleLosslessの型が変わったみたい

勉強がてらSwiftでアプリ開発してる時の話。
AVAudioRecorderで録音をしたいと思い初期化のサンプルを探した。

辞書型で設定を渡すと書いてあったが、
Xcode7.0.1ではエラーが出てしまう。
SOFによると原因は赤字の部分のようだ。
※参考(http://stackoverflow.com/questions/32509565/how-to-resolve-type-of-expression-is-ambiguous-without-more-context-for-an-audio)
var recordSettings = [
            AVFormatIDKey: kAudioFormatAppleLossless,
            AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
            AVEncoderBitRateKey : 320000,
            AVNumberOfChannelsKey: 2,
            AVSampleRateKey : 44100.0

        ]

kAudioFormatAppleLosslessがIntからInt32/UInt32になったそうです。
Int32はNSNumberにブリッジされるために起きていました。

以下のようにIntにすればエラーは無くなります。
var recordSettings = [
            AVFormatIDKey: Int(kAudioFormatAppleLossless),
            AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
            AVEncoderBitRateKey : 320000,
            AVNumberOfChannelsKey: 2,
            AVSampleRateKey : 44100.0

        ]

細かい変更で出回っているサンプルが動かないことは他にもありそう。
学習コストはまだまだかかりそうだ。

2015年10月19日月曜日

軽自動車の名義変更まとめ

友人から軽自動車を譲り受けるとこになり、
名義変更の手続きは自分でやろうと思い代行は頼まなかった。

友達に教えてもらった手順が若干違って三度手間になってしまったが、
ようやく終わった。いい勉強になったのでまとめる。

今回名義変更にいった場所は「軽自動車検査協会東京主管事務所多摩支所」っていう場所です。味の素スタジアムの近くにある。

■概要
譲渡元「府中市在住の友人」
譲渡先「小金井市在住の俺」
譲渡物「軽自動車」

■必要な書類
・旧車検証(友人の名義のままでOKなので、友人から車と一緒にもらう)
・住民票(俺が役所またはコンビニで発行)
・自賠責保険証明書(だいたい車検証一式と一緒に入ってるはず。自分の名義じゃなくてもいいです。その車に自賠責保険があるかという確認だけをするそうです。)
・プレート(今回は同じ管轄内なので必要ありませんでした。管轄が違うと必要かもしれません。)
・申請用紙(現地で貰える。今回は友人が用意して先に署名、捺印したものをもらった)
※友達の印鑑を借りてくるか、事前に申請用紙をもらって友人に記入、捺印してもらった方が便利だろう。

■費用
無料だった。
念のため、ついでに警察署で車庫証明も取っておきました。
車庫証明発行に500円かかりました。

わからなければ、入ってすぐのカウンターの人に聞けば教えてくれる。
(ちょっと無愛想な人もいるけど概ね優しい人たち。)

用紙の記入をする際は住所を番号で書かなければいけないので、
それだけ事前に調べていけばよい。
住所コードは下記のURL先で調べることができるので活用してください。
http://www.kodokensaku.mlit.go.jp/motas/

どちらも待ち時間はほぼなく、
順調にいけば1時間もかかりません。
移動時間の方が長いくらいです。

もうすぐ車検切れなので受けなければなりません。
ユーザ車検とやらに行ってみたいと思います!

2015年10月16日金曜日

iTunesConnectアカウントの不具合?

私のAppleデベロッパーアカウントをabc@efg.jpだとする。

知り合いのデベロッパーの内部テスターとして、
abc@efg.jpあてに招待メールをもらう。

招待メールからアクティベイトする。
※そもそもアクティベイト画面がバグる。回避方法はmain.jsを書き換えて再読み込みすればいける。

自分のアプリが管理したくなったので、
その後、内部テスターを解除してもらう。

しかし、iTunesConnectに何度ログインしても、
はじめよう画面(初期の)が表示されてしまいます。

メンバーセンターへは正常にログインできるし、
ライセンスの有効期限は来年まである。

どうにもならなくなったのでアップル側サポートへメール。
1営業日以内には返事が来ました。返事は以下のような概要。
「あなたのアカウントを確認しました。内部テスターの解除も確認しました。
アカウントを調整したので再度サファリから正しいアカウントでログインしてください。」

言われた通りにする。

ログインすると、なんかアクティベイトに似た画面が出たので、
チェックして先に進むと画面が真っ白になった。

あ??と思ってリロードを何回かすると通常通りに戻った。

明らかにiTunesConnectの不具合だと思うのだけど、、、
他に同じような現象に遭遇した方はいるのかな。。

2015年10月7日水曜日

iOS9でHTTP通信できなかったので理由をメモ

LOVETOHOという拙いアプリを公開しています。
AppStoreで「toho」って検索すればトップにでます。

iOS9対応に重い腰を上げてやったのはいいが、
iOS8の頃と違っていろいろ不具合出ちゃう。

HTMLパースしかしてないアプリなのに。。。とほほ

そもそもhttpリクエストでHTMLを読み込むところでコケる。
iOS9からATS(App Transport Security)なるものがデフォで有効になっているせいだ。
そう、もう非セキュアなHTTP通信させないぜ、ということだ。
詳細はここを参考にしてください。
http://dev.classmethod.jp/smartphone/iphone/ios-9-intro-ats/

無効にすることもできるが、アプリ審査で弾かれるかもしれないという
噂がネット上に漂ってて。。。ゲロ吐きそう。

でも、対応は意外に単純でしたのでご紹介します。
特定のドメインとHTTP(S)通信をしますって宣言して、
どういうセキュリティレベルで通信しますってちゃんとplistに書いておけば良い。
もちろんHTTPSに対応してないサーバや、バージョンや暗号スイートが違うなんてザラ。
だから通信先のサーバではこれを許してねとかっていうのを明記していけばいいらしい。

世の中の流れ的にHTTP通信は撲滅の方向なのが身にしみた。
いろんなアプリが影響受けそう。

iOS9、Objective-CでHTMLParserを使っていたら文字化け起こした

何時間もかかってしまったが原因を特定できました。

HTMLParserはlibxml2のラッパーでHTMLをパースするときに
大いに助けられています。

が!iOS9で日本語部分がどうしても文字化けを起こしてしまい
使いものにならない。

パースする前は正常、パース後に文字化けする。
ってことは確実にHTMLParserが原因。にたどり着くまでが時間かかった。
iOS9でいろんな文字化けが出ているようで、その一つだと楽観視してたせいだ。

実際、原因はCFStringGetCStringPtrという関数がnullだったせいで、
エンコーディング引数が正常にわたっていなかったようで。
実際下記のサイトではnullになりうるからって書いてあった。
でもHTMLParser内ではそれは考慮された実装になっていないため気をつける必要がある。


NSString *enc = (__bridge NSString *) CFStringConvertEncodingToIANACharSetName(cfenc);
とするようにして
_doc = htmlReadDoc ((xmlChar*)[string UTF8String], NULL, [enc UTF8String], optionsHtml);
というように書き換えるとうまくいく。

文字化けっていやだね。
Githubのissueに出しておくかな。

と思ったらすでに提議されてたー!
https://github.com/zootreeves/Objective-C-HMTL-Parser/issues/34

2015年9月10日木曜日

Recon Jet向けAndroidアプリ開発:ヘッドトラッキング編

前回はRecon JetでAndroidアプリ開発するための前準備について書きました。

【注意】
ReconOSを最新版にしておきましょう。
Recon UplinkアプリをダウンロードしてデバイスをPCに接続するだけでアップロードが始まります。なお、Recon UplinkはEngageに登録後ダウンロードできます。
最新版のファームにしないと実機デバッグができない場合があります。

今回はヘッドトラッキングをするための手順をメモしていきます。
こちらの手引きを参考にすればできます。
英語なので苦手な方に参考になれば幸いです。

①AndroidManifest.xmlに追加します。
applicationタグの間に下線部を追加します。
<下記は引用>
<manifest…>
…
<application…>
…
<uses-library android:name="com.reconinstruments.os" />
…
</application>
…
</manifest>

②パッケージのインポート、マネージャーの取得、リスナーの実装をします。
Activityクラスに直接実装する場合は大枠は以下のようになるはずです。
<下記は引用>
import com.reconinstruments.os.HUDOS; ←インポート
import com.reconinstruments.os.hardware.sensors.HUDHeadingManager; 
←インポート
import com.reconinstruments.os.hardware.sensors.HeadLocationListener; 
←インポート

public class SampleActivity extends Activity implements HeadLocationListener ←ロケーション情報コールバック用のリスナーを実装します。
{

HUDHeadingManager mHUDHeadingManager = null; ←マネージャー保持用変数

@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG,"onCreate");
...
mHUDHeadingManager = (HUDHeadingManager) HUDOS.getHUDService(HUDOS.HUD_HEADING_SERVICE); ←onCreate時にマネージャー取得します。
}

@Override
public void onStart() {
Log.i(TAG,"onStart");
super.onStart();
mHUDHeadingManager.register(this); ←onStart時にリスナーを登録します。
mIsStarted = true; ←トラッキング中かどうかのフラグを保存しておけば便利になります。
}
@Override
public void onStop() {
Log.d(TAG,"onStop");
mHUDHeadingManager.unregister(this); ←onStop時にリスナーを登録を解除します。
mIsStarted = false;
 ←トラッキング中かどうかのフラグを保存しておけば便利になります。
super.onStop();
}

@Override
public void onHeadLocation(float yaw, float pitch, float roll) { ←リスナーの実装部分です。
// ここでRecon Jetの現在のヘッドロケーションがコールバックされます。
// yaw値:頭の水平方向の移動(※詳細は後述)
// pitch値:頭の上下方向の傾き(※詳細は後述)
// roll値:頭の左右方向の傾き(※詳細は後述)
}

}

③onHeadLocationコールバックについて
実際に20ms前後の間隔でコールバックされてきました。
yaw, pitch, rollそれぞれの値の単位は恐らく【度(°)】です。
yaw=0°になる位置とiPhoneのコンパスアプリの北が微妙にずれていました。
ちゃんと検証してないので間違っているかもしれないのでご注意を。
だいたい以下のような感じです。
■yaw
0°=北
90°=東
180°=南
360°=北
■pitch
−90°=真上仰向け
0°=正面
90°=真下
■roll
-90°=右真横
0°=垂直
90°=左真横

④あとは応用
好きに料理しちゃってください。

あまりRecon JETでアプリ開発してる人いなそうな。
ぐぐってもあまり情報がないような。。。

2015年9月2日水曜日

地元の豆腐屋食べ比べ。

午前の仕事終わり、帰りに地元の豆腐屋に寄ってみた。
最寄駅は西武多摩川線の新小金井駅。

お世辞にも活気がある商店街とは言えないが、豆腐大好きとしては買わずにはいられない。

木綿一丁。
あと夕食用にゆばと揚げ出しも。

早く豆腐を食べようと歩いてるともう一軒豆腐屋があった。

思いついた。

食べ比べよう!

木綿もう一丁。

先に買った方(写真右)をA、あとに買った方(写真左)をBとしよう。

弾力 A > B
水分 A < B

味はBはクリーミーで滑らかな舌触り。
Aはやや弾力がありかみごたえが楽しめる上味もしっかりしている。

木綿としての好みはA。

お店の詳細は今度紹介してみよう。

2015年8月27日木曜日

ドライブでまれのロケ地(大沢集落)に行ってみた【1日目】

■3日間(8月22日〜24日)の大体の概要
レンタカー(アクア)、2泊3日、宿予約なし。
走行距離1210km。
道中給油が3384円。
ガソリンは地方は高いですね。レギュラーはだいたい130円オーバー。東京だと120円程度。
平均燃費25.6km/L
最後は燃費計算で返却で総額43550円。(レンタカー3日間+ガス代+高速代)
ETCカードはレンタル。

コースはだいたいこんな感じ。
東京→山梨→長野→岐阜→富山→石川→富山→新潟→群馬→埼玉→東京。

天気
たまたま3日間晴天でした。曇りはありましたが。。。


①下道でゆっくり行こうとしたが思ったより時間がかかるので、
大月ICで高速へ。

②PM2:30頃にネットランキング3位のお蕎麦屋さん「水車挽き番所そば 中之屋」へ。水車で挽いてるとのこと。さっぱりと美味しかったです。写真下手でごめんなさい。
(左)おろしそば1550円  (右)水車小屋


③白川郷に向かう途中で鍾乳洞を見つける。入場券1000円で入る。気温12度でだいぶ冷やされた。上着必須。最後まで歩くと30分くらいかかるので今回は15分で出ました。進むに連れて狭くなるので苦手な人は気をつけてください。
あとでっかい鍋「日本一宿儺鍋」があった。数千人分の炊き出しができるとか。大橋展も併設されていたがあまり興味なかったのでスルー。
ライトアップされた鍾乳洞内(入場券1000円)


④夕方8時頃に白川郷に着く。この時間にはほとんどのお店は閉まっている。3時でほとんど閉まってしまうので要注意。さらに注意したいのは駐車場が18時に閉まってしまうので路頭に迷います。
★夏の夕暮れ時の白川郷は何とも言えない哀愁を漂わせ、なんだか懐かしい雰囲気で心落ち着きました。これはオススメ!予約すれば8000円台〜民宿に泊まれる。次は冬の景色を見に行きたいところ。
きれいな夕暮れに包まれた白川郷


⑤初日の宿探し。健康ランド「アラピア」に決めた。20時過ぎに着いた。付近でご飯を食べるために散策したが遠い。結局近くのインドカレー屋に入った。カレーとナンで1040円。つくってる方は現地の方っぽいのですが、地元のインドカレーの方が美味しかった^^;
アラピアは想像より大きい施設。16種類もある温泉でさっぱりして快適に過ごせました。ただ、難点がいくつかある。館内の温度設定が若干私には暑い。テレビが0時で消えるのはいいけど、朝テレビが大音量でいきなりつくのでびっくりする。女性専用部屋もあるしオススメ。一人2500円と格安。素泊りより安い。
貴重品の管理方法を決めて置かないと私みたいにビクビクしながら寝ることになりますのでご注意を。
でもリクライニングチェアーでプログラミングもはかどりましたし、Macbook Proもなくなりませんでした!
今晩の宿アラピア


2日目へつづく。

2015年7月4日土曜日

Recon Jet向けAndroidアプリ開発:開発準備編

昨今話題になっているメガネ型のウェアラブルデバイス「Recon Jet」
詳細はここ→http://www.reconinstruments.com/products/jet/

ようやくSDKが公開されたので早速アプリを開発しましょう!
ということで準備しましょ。

【注意事項】
Androidアプリの開発環境がすでに整っている前提とします。
また、ご自身の環境に合わせて読みといてください。

■環境
OS:Mac OS X 10.10.4
Java:1.8

■必須
事前にRecon JetのOSのバージョンを最新の4.2.0(2015年7月3日現在)にアップデートしておいてください。

本家のページを参考にすれば数分でセットアップは終わります。
http://www.reconinstruments.com/developers/develop/getting-started/recon-sdk-4-api/

1、Android Studioを起動します。Configure→SDK Managerを起動します。
2、一旦すべてのチェックをはずしてから、APIレベル16(4.1.2)のSDK PlatformとSources for Android SDKを選択しインストールする。
3、次にRecon SDK Add-Onをインストールするために、SDK ManagerのToolsメニュー→Manage Add-on sitesを選択する。
4、User Defined Sitesタブを選択し、Newを選択する。
5、http://www.reconinstruments.com/wp-content/recon-sdk/repository.xmlを入力してOKを選択し、Closeを選択する。
6、Recon instruments SDK Add-onが追加されているのでインストールする。
7、appモジュール内のbuild.gradleを開いてcompileSdkVersionの項目を下記のように修正する。
compileSdkVersion 'Recon Instruments:Recon Instruments SDK Add-On:16'
8、ついでに、targetSdkVersionをついでに「16」に変更します。
9、このままだと実機(Recon Jet)を接続しても表示されないので、Adbを差し替えます。
9−1、http://www.reconinstruments.com/wp-content/recon-sdk/adb.zipからダウンロードする。※3つのバージョンが入ってます。
9−2、./adb kill-serverで一旦終了させてから、既存のadbはadb.orgなどにリネームして置いておくといいと思います。
9−3、解凍したadbに置き換えてください。
10、アプリを実行してみてください。めでたくReconJetが表示されれば成功です。

2015年6月12日金曜日

Mac OS X Yosemite 10.10.3でParrot社のDroneSDKをAndroid向けにビルド

いろいろな事前準備と予期せぬエラーで大変だったのでメモしておきます。
間違っていたらご指摘ください。コメントなどで補足いただけると幸いです。

※個人メモのコピペなので親切じゃないです。
パスなど環境は適宜に読み替えてください。
※個人の環境によっても発生するエラーが異なるので
がんばってください。。。orz

公式ブログも合わせてご参照ください。
http://ardroneblog.com/ARDroneBlog/DroneBlog/Entries/2015/2/24_Bebop_SDK_in_OSX.html

-------ここから------
Homebrewをインストールして、brewコマンドを使えるようにしておく

Oracle Javaをインストールしてjava -versionでバージョン表示されるようにする

brewコマンドでgit, wget, automake, autoconf, libtool, yasm, nasm, mysqlあたりはインストールできるはず。
※mysqlはなぜかビルド失敗時にそれ関係のログを吐いたので入れてます

rplは以下のURLからダウンロードして解凍してパスに通しておく
http://sourceforge.net/projects/rpl/files/rpl/rpl-1.5.5/

AndroidSDKとAndroidNDKをそれぞれダウンロードして解凍しておく
適当に~/devディレクトリを作成して、~/dev/sdk、~/dev/ndkのように入れておく
次にANDROID_SDK_PATHとANDROID_NDK_PATHにそれぞれSDKのルートまでのパスをとおしておく。
Macだと~/.bash_profileでいいと思います。

$ANDROID_SDK_PATH/tools/androidを起動してAPI14とAPI19の2つに関するもの、
ADTの最新版をインストールしておく。
SupportLibraryなども入れといた方が良さそうです。

~/dev/android_toolchainsディレクトリを作成し、さらに中に
~/dev/android_toolchains/toolchain_arm,
~/dev/android_toolchains/toolchain_mips,
~/dev/android_toolchains/toolchain_x86の3つのディレクトリを作成する

以下のコマンドで上記の3つのディレクトリにツールを入れる
$ANDROID_NDK_PATH/build/tools/make-standalone-toolchain.sh --platform=android-14 --arch=<arch> --install-dir=<your/installation/dir>
【注意】
<arch>はそれぞれarm, mips, x86
<your/installation/dir>はフルパス指定で作成した3つのディレクトリをそれぞれ指定
(例)
<arch>がarmの場合は、
<your/installation/dir>を/Users/tsuyoshi/android_toolchains/toolchain_arm

上記のすべてが終われば事前準備は完了のはず。はず。

ビルドスクリプトをgitからダウンロードする。
~/dev/dronesdkを作成して
cd ~/dev/dronesdk; git clone https://github.com/ARDroneSDK3/ARSDKBuildUtils.git
すでにclone済みの人はgit pullで最新版にしておいてください。

【注意】
以下は、ARSDKBuildUtilsの中のpythonスクリプトが実行できない場合、改行コードが影響していると思われるエラーが出たらやってください。実行できるなら必要ないです。
ARSDKBuildUtils以下にある.pyファイルの改行コードをLFに変換する。
ARSDKBuildUtils/Utils以下にある.bashファイルの改行コードをLFに変換する。

環境セットアップが正しいかどうか必ずCheckEnv.pyを実行してオールグリーンにしておく
ただし、AndroidSDKのAPI19をインストールしてもMissingって出るのは放置。←10.10.3では出なかったな。。。
Platoforms/Android-19があることを確認して、あればおk。

CheckEnv.phを実行してAndroidセクションがOKであれば次はビルドを実行する

./SDK3Build.py -t Androidとすればビルドが開始される

2015/06/05にビルドしたらopensslのダウンロードで証明証エラーでコケる。
opensslで証明証エラーって怖いな。。と思いつつ、手動でダウンロード。
※これは発生しない場合もあったので注意
wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2a.tar.gz -O /Users/[USERNAME]/mydev/drone/dronesdk/ARSDKBuildUtils/../openssl/openssl-1.0.2a.tar.gz
【追記】2015/06/12時点で上記のコマンドではエラーになる。原因はopenssl-1.0.2a.tar.gzがないようだ。openssl-1.0.2b.tar.gzになっているので以下のように手動でダウンロードおよび解凍をしてください。--no-check-certificateオプションは必要に応じて。
wget --no-check-certificate https://www.openssl.org/source/openssl-1.0.2b.tar.gz -O /Users/[USERNAME]/mydev/drone/dronesdk/ARSDKBuildUtils/../openssl/openssl-1.0.2a.tar.gz
ダウンロードしたら、手動で解凍します。
cd ../opensslに移動して、tar xzvf openssl-1.0.2a.tar.gzで解凍します。
openssl-1.0.2bと解凍されるので、openssl-1.0.2aにリネームしてください。

そしたら、またARSDKBuildUtilsディレクターに戻って、
再度./SDK3Build.py -t Androidを実行してください。

スペックに依存しますが、10分前後くらい時間かかります。
正常にすべてのビルドが終了すると以下のような表示になるはずです。
そうするとARSDKBuildUtils/Targetsの中にビルド結果ができてますね。
結構面倒です。
がんばってください。。。