読者です 読者をやめる 読者になる 読者になる

ChanLab Report

近況の備忘録ブログ

進捗報告(12/11〜)

2016/12/11(SUN)

今日は特に何も進捗なし。
強いて言うならModelAppを外部テスター審査に出し、結果待ち。
あとはAnacondaの構築方法を読み、入れ(直し)てみた。
このページ紹介されて、機械学習早く触ってみたいなーとか思ったり。
そしてRuby on Rails始めてみようかなって思い、Udemyでコースを始めてみたり。
Pythonの方のコースもしっかりやらないとな。

2016/12/12(MON)

現地調査

2016/12/13〜17(SAT)

pandasでのソートに試行錯誤。
名前でのソートは達成。
日付ソートが出来ない。。。

10月の前回更新から、今までに取り組んでたことの概要

前回更新から2ヶ月くらいが経とうとしてるわけですが、何もしてなかったわけではありません。

むしろ11月の中旬に研究中間発表があったこともあり色々取り組んでいました。

 

 

まず一つ目、

ModelApp(調査員用アプリ)で計測したデータをAzure(Microsoftクラウドサービス)に送信しようとしてた。

具体的にはAzure SQL Database。

だがしかしFrameworkがObjective-C用しかなく、Swiftでの読み込み方が分からなく断念。

ここでちょっとMicrosoftにキレた。

(結局は自分の無知だったのだが。笑)

 

 

そして二つ目、

Microsoftにキレた私は、Google先生に助けを求めた。

そこで用いたのがFirebaseというNoSQL(Not Only SQL)。

これが凄くて、取得したGPSがリアルタイムでウェブ上で見れるという代物。json形式かな?

ただデータが多くなりすぎると、読み書きが重くなるのか、テーブルクリーンが出来なくなる。(テーブルなのかは不明)

なので、"./iOS/User名/YYYY-MM-DD/HH時/hh:mm:ss"みたいな感じで超細分化して対処をしていた。

....ところが色々な事情があり、やっぱりAzureでやろーよみたいな流れに。笑

Firebaseにかけた時間を返せ。Azureに費やした時間を返せ。涙

 

 

 

そして三つ目、

Azureに戻るわけです。

試行錯誤の末、AzureSQLへのGPS情報の送信が可能に。(あっさり)

じゃあ今度、その送信データをSakuraSprtMaster(管理者用データ可視化アプリ)で読み込もうとしたら、何故か50件しか読み込まない。何故。何故。F***。

ここで詰まっている場合ではない、何としてもとりあえず卒論レベルの最低ラインである可視化までたどり着かなくてはと思い、SQLのデータをAzureBLOBにぶち込んで、それを読み込もうという作戦に出た。(意味不明な二度手間)

「やっぱりGUIあったほうが分かりやすいよね〜〜〜〜( ̄▽ ̄)」ってことで、AzureML(Azure Machine Learning Studio)を使い、SQLCSV→BLOBに挿入し、それを読み取ることに成功。

ただここでまた問題が。

BLOBからの読み込みとPolylineの描写を非同期処理として行うと、エラーを吐いて動作が止まる!!!!!!

 

 

さて、ここからが取り組んだことの四つ目。

Polylineに色々とトラブルが起こる問題。笑

まず最初に、非同期処理(読み込みと描写を非同期に行うことでより効率よく描写している?)だと、描写が読み込みのスピードについていけず?、6個目とかで止まってしまう事態に。

なんと検索したのかは忘れたが、同期処理にするといいよ〜的な記事を見つけたのでトライ。

すると、アプリが止まらなくなり、描写も出来るように!!!やったね!!!!

.....しかしここでまたトラブル。(定番)

以前実地調査を行なったデータ(CSV,9万件弱の行)をBLOBにぶち込み、可視化用に描写を行なったところ、クソ重い。うんクソ重い。笑

そしてメモリが容量不足を起こし、アプリ落ち。( ̄∀ ̄)あぁもう最悪。ホンマにF***。

 

 

そして最近、

「同期処理してると、メモリに保存しなきゃいけなくて、容量不足を起こしてアプリが落ちてるんだから、非同期処理して効率やればいいんじゃね?」という何とも本末転倒なことを実験してみることに。

すると何故か描写が出来る。何故。何故出来るようになった。(本当に謎)

まぁ終わり良ければ全て良し、ってことで今は描写・可視化が可能に!

ただそれでもやっぱり9万件のデータは重い。笑

全て表示するまでには20分くらいかかるのでは....

 

 

んでそれが今後の課題!

あとは分析に進むべ!って感じのここ最近でした。

 

 

記事にしてないけど、達成したこと。

概要

これまで計測実験に追われていたり、アプリ開発が進まなかったりで、
色々達成していたのに記事にはしていなかったことが多々あるため、
この機会にそれらをまとめてみたいと思います。

達成したこと一覧

アプリ起動画面のアニメーション化

下記リンク参照
[iOS] Twitterのようなアプリ起動アニメーション【動作イメージ追加】 - Qiita

ほぼこのサイトのコピペ。
Twitterの起動画面のように中央にアイコンを配置し、
そのアイコンに飲み込まれるようにアプリが起動する。

調査アプリといえども、簡素すぎるUXだと起動する気も起きないため
今後のアプリ開発に役立つかもしれないと考え導入。

ジオフェンシング

下記リンク参照
ある地点への接近を知らせる(CoreLocation::CLLocationManager.startMonitoringForRegion) - Qiita

ジオフェンシングをすることで、どの施設に何回訪れたのかなどを
測定しようとしたが、ソースコードの段階で記載しなければならない為、
新しい効率の良い方法を模索中。

ユーザーの現在地表示の画像化

下記リンク参照
iphone - How to change MKMapView's user-location blue dot to an image of choice? - Stack Overflow

これは遊びごころでやろうとしたが、現在地だけでなく
キャプションを行った全ての位置のピンのデザインが変わってしまったので使用中止。

緯度経度から距離を測定

下記リンク参照
iOS/swiftで緯度・経度から2点間の距離を算出する - Qiita

多分上記リンクの通りに行った。
位置飛びが激しいので、距離を算出し、移動距離が離れすぎていると
Polyline(描写線)を消すなどの動作をするようにしている。

Polylineの色変更

下記リンク参照
iphone - How to distinguish two MKPolyline's in viewForOverlay: - Stack Overflow

(恐らくこのリンクではないのだが、)
if文でPolylineの色分けをする手法を閃いた。(パクった)

現在は信号強度で色分けを行なっている。
...のだがバグっているので改善が必要。

GPSの信号強度

下記リンク参照
iphone - Xcode: How to show GPS strength value? - Stack Overflow

GPSの信号強度をこの手法で測定し、
計測精度によって場合分けを行なっている。

感想/考察

こんな簡単にまとめちゃいけないような
キーポイントになる手法がこの記事には書いてあるので、
何かの機会にまとめ直すかもしれないです。

Swift3中断します!!

近況

過去エントリーの通り9月の頭まで製作していたSakuraSprtの製作終了後、
趣味の一貫として"ModelApp"というGPSを利用した類似アプリを製作していた。

課題点

このアプリ製作においては、
iOS10の登場に伴うXcode8の登場、更にそれに伴うSwift3への移行が課題点であった。

作業が進まない原因

ここで勘違いをしていたのだが、
→ iOS10で動かすためには、Xcode8が必要。
→ Xcode8からはSwift3が導入されている。
→ Swift3はSwift2.3の改良版なので移行したほうがいい。
という思考をして、今まで取り組んでいた。

しかし、実際は
→ iOS10で動かすためには、Xcode8が必要。        : ほぼ◯:裏技あるっぽい
→ Xcode8からはSwift3が導入されている。         : 
→ Swift3はSwift2.3の改良版なので移行したほうがいい。  : 

やはり最初なのでバグがあるっぽいということと、何より情報が少なすぎる

というわけで...

Swift3やめました!!!
とりあえずSwift2.3で今まで通りやっていきます!!

Swift3 → Swift2.3に逆変換

とりあえず設定変更。
参考リンク:Xcode8だけどSwift2.3で実行したい人向け対応 - Qiita

SakuraSprtのソースコードを見ながら、
ModelAppのコードエラーを一つずつ対処していくことに。

問題発生

全てのエラーを対処して、実行!そして成功!!
...かと思いきや、計測スタートボタンを押すと、、、
f:id:changmin1015:20161008195330p:plainf:id:changmin1015:20161008195334p:plain
Outletとかも全て正常だし、いままで見たsignal SIGABRTとは違い原因不明。

解決法

めtttttttっちゃ色々な記事を探した結果、
Xcode8でXcode7で作ったプロジェクトを開いて、XIBから追加したActionがエラーになるときの対処法 - Qiita
↑↑これが原因だと判明。↑↑
"withSender"の記述で普通に動いた!

ついでにもう一個悩んでたこと

ModelAppをSwift3で作っていたときに、
polyline(GPSの経路線を描く時に利用)が描かれるはずなのだが、
何度シミュレートしても位置が動くだけで線が引かれないという現象があった。

今回の逆変換の一件で判明したのだが、
f:id:changmin1015:20161008200510p:plain
このあたりの記述が途中で切れていた。
(rendererFor overlay : ~~~となっていた)
ちゃんと書き直したところ普通に線引かれるように修正された。

進捗報告エントリー(2016/10/05更新)

前回のエントリー(9/11更新)はこちら

今取り組んでいること(保留プロジェクト含む)

"ModelApp(仮)"の作成 →(保留中)

Xcode8とSwift3を利用した、"SakuraSprt"の様なiOSアプリによるマーケティング調査サポートアプリの新規作成。

Google Maps API + HTML5による移動経路可視化

GoogleAppScript(GAS)or エディタを利用して、
CSV,GPX,KML等の位置データを読み込んで可視化できるような仕組みの構築。

現状/今後

11月の中旬に研究の中間報告会があるということで、とりあえずある程度成果を報告できる様にしなければならない。
…というわけで、ModelAppの制作は中断。
ある程度GoogleMapに可視化できる様に出来たら再開しようかなと。

というわけで今何も進んでなくて、モヤっとタイムなう。

進捗報告エントリー(2016/09/11更新)

前回のエントリー(8/8更新)はこちら

達成したこと

とりあえず8月中で達成したことの概要をザックリまとめてみる。

UI/UXデザインの改善

アプリの機能自体には直接関係はないが、
アプリの起動自体を促す効果とアプリの質感を高める効果がある。
従来の簡素な作りから、カラーテーマを統一し、起動時の画面アニメーションも加えた。
参考リンク:
[iOS] Twitterのようなアプリ起動アニメーション【動作イメージ追加】 - Qiita
[iOS]TwitterアプリのようにLaunch Screenがアニメーションするように見せる技 - Qiita
ワードリンク:5分でわかるUIとUXの違い : Excite Designer's Blog

移動経路の可視化

従来ではGPSの緯度/経度をRealmデータベースに記録するだけであったが、
移動を検知すると、地図上の一つ前の位置から線を引くようにした。

問題点(9/10現時点)

GPSは室内における計測がほぼ不可能である。
更に、室内に入った場合において計測不可のような状態になるならばいいのだが、
実際には『位置飛び』といった形で誤検知してしまう。
その場合、実際には行ってない場所に線が引かれてしまい調査に支障をきたす。

ジオフェンシング

指定した場所から一定の距離への進入/退出を検知出来るようになった。

今後の課題

・位置飛びの修正
・現在地を示すピンを画像に変更
・ジオフェンシング検知時に通知センターへの通知
ウォークスルーの作成参考リンク
 → 初回起動の判定に苦戦してましたが、無事完成。(9/11更新)

現状

・調査アプリとは別に、新しくアプリの作成を開始。
・コピペで作るのではなく、自らコードを打つことでSwift言語を習得したい。
・Swift2.2から3.0に移行したいのだが、Xcode8.0がイマイチ不調。
 (レイアウトが言うことを聞かない)

進捗報告エントリー(2016/08/08更新)

過去記事(Part1)はこちら

コンパスアプリの改善

Start/Stopボタンの実装

Start/StopボタンでGPSの取得を開始/停止の操作が可能に。
(元はアプリ開いた瞬間から自動取得)
ボタンのデザインも変更。

バックグラウンドで位置情報取得

アプリを開いたままでなくとも、バックグラウンドでGPSを取得可能に。
プロジェクトのタブからCapabilities -> Background ModesをONにし、Location updatesにチェックを入れる。
f:id:changmin1015:20160807183721p:plain
参考リンク:バックグラウンドで位置情報を取得する

問題発生(08/07発生) → 解決済み(08/08更新)

バックグラウンドで起動後、一定時間の間に位置の移動が観測されないと
計測が自動的に停止するという問題が発生。
→ 参考リンク:バックグラウンドでも処理を続ける方法
  上記の内容に基づき、対策中。

→ 解決しました。
  参考リンク:Backgroundで位置情報を取得しよう!
  上記はObjective-Cの内容だが、
  ”pausesLocationUpdatesAutomatically”の機能は継続しているらしい。

locationManager.pausesLocationUpdatesAutomatically = false

  の記載で、GPS取得の自動停止を無効にさせることに成功。

ログイン画面の改善

初回判定の改善

アプリ起動が初回であるかを判定し、名前の入力を促す画面を改善。
従来だとログイン画面表示後、バックグラウンドタスクから削除することで
名前の入力を省略することが可能であったのを修正。

名前未記入の改善

従来ならば名前を入力しなくても、ログインが可能であったが
何かしらの文字を書かなければログインが出来ない様に修正。

Doneボタンの設置

名前記入後にキーボード以外のところをタップで閉じることが可能であったが、
わかりづらく、混乱を招く可能性があったため
キーボード右上にDoneボタンを設置し、ボタンでキーボードが閉じられるように修正。
参考リンク:キーボードに「閉じる」ボタンを追加する