Owl on 1月 4th, 2017

朝から、自宅のインターネットが不通になるというトラブルがあり、朝は出向先にギリギリ間に合う。

仕事を終えて、帰りに本屋でWEB-DBを久々に買う。swiftも3になっているのね。

とにかく、家に戻ってネットを何とかしないとと思い、フレッツ光の東日本にtel、そうすると光コラボはプロバイザーのsonetが保全サービス

をする契約になっているとかで、NTTでは受け付けられないとの事。それでもって、sonetの電話は、はもう既にclose…。

それでも、コールセンターの人が以外といい人で、モデムの事やら、何かしらヒントは与えてくれる。そうこうするうちにsonetを切り替えた際にID

が変わっていたのだけど、前のsonetのIDで今まで1ヶ月は繋がっていた事が判明、無事、新しいIDにupdateとすると繋がりました。

でもって、勤務表の処理をする。

今日は「日々是好日」はと聞かれると、3回ほどその言葉を頭の中で唱えたかな。

誰かの為に、自分の為に、皆が好日であるために、ちょっとした気遣いが出来たら良いんだけどね。

今日はコールセンターの人に教えられた一日でした。

 

 

 

mut11 on 1月 2nd, 2017

あけましておめでとうございます。

本年もよろしくお願い申し上げます。

 

今年のテーマは「日々是好日」

明けても暮れても未来を案じて不安になり、日々を感じる事、発信する事をおろそかにしていないだろうか?

所詮、この世は人々が発して、感じて、それが融合して未来ができる。

今では、これを発するのがエコノミー化されたロボット人間達である。

その情報が、まるで正解であるようにメディアの上位に踊る。

それに惑わされて、毎日不安を抱えて人々は生きている。

不安はお金になる、そこに資本家は目をつけただろうか。

高度成長時代に希望や欲望がお金になったように。

これが現在の日本の情報化のベクトルにあるように思える。

希望ではなく、不安だ。

毎日、今日を生きている。

こんなモノに惑わされて一日を無駄にしないように。

希望を語っていきたい。

Owl on 12月 31st, 2016

本日、2016年の大晦日となりました。

2015年、2016年とプロジェクト支援業務に常駐しているので、すっかりこっちの仕事が停滞してます。

2017年は次の3年計画の準備の年なので、コンテンツ事業を始めなければいけない。

2017年続けてやること宣言

一つ目、日々コツコツとこのブログを書こう。※目標週2日かな

二つ目、読書をする

三つ目、ビジネスモデルを考える

2016年12月に買った本(10冊)

スタンフォードの心理学講義「人生がうまくいくシンプルなルール」

自分の磨き方

村上ラジオ

村上ラジオ2

働く男

3000円投資生活

チーム芹沢に学ぶ「強くなる」思考法

海の見える理髪店

パリわずらい江戸わずらい

いずれ我が身も

Owl on 8月 21st, 2014

◆ジオフェンスのモニタリング起動

開始:CLLocationManagerの startMonitoringForRegion:
 結果成功:locationManager: didStartMonitoringForRegion:
  インサイド:locationManagerのdidEnterRegion:
  アウトサイド:locationManagerの didExitRegion:
 結果失敗:locationManager: monitoringDidFailForRegion: withError:
終了:CLLocationManagerの stopMonitoringForRegion:
————————————————————————————————
◆現在位置の確認
開始:CLLocationManagerの requestStateForRegion:
 結果:locationManager: didDetermineState: forRegion:
  インサイド:CLRegionStateInside
  アウトサイド:CLRegionStateOutside
  判断出来ない:CLRegionStateUnknown
———————————————————————
◆ビーコンのモニタリング起動
開始:CLLocationManagerの startRangingBeaconsInRegion:
 結果成功:locationManagerのdidRangeBeacons:
  近傍(1m未満)に検出:CLProximityImmediate
  近い距離(1m)に検出:CLProximityNear
  遠い距離(1m以上)に検出:CLProximityFar
  計測不能な距離に検出:CLProximityUnknown
  結果失敗:locationManagerのrangingBeaconsDidFailForRegion:
終了:CLLocationManagerの stopRangingBeaconsInRegion:
———————————————————————
◆エラー

Domain=kCLErrorDomain Code=4

問題

バックグラウンド、bluetooth、GPS。

対策

appのバックグラウンド更新をONにする。

Info.plistに NSLocationAlwaysUsageDescription を追加(iOS8)。

Domain=kCLErrorDomain Code=5 

問題

StackOverFlowなどで、登録数が20を超えてる。

バージョンの問題。

対策

iPhoneを再起動する。

iOSを7.1.2に上げる。

詳しくはサンコウ電子 BLOGに乗っています。

Domain=kCLErrorDomain Code=17

問題

bluetoothが起動出来ない環境でのビーコン開始

Ranging is disabled. This might happen if the device is in Airplane mode or if Bluetooth or location services are disabled.

Available in iOS 7.0 and later.

対策

bluetoothの環境で起動

詳しくは

https://developer.apple.com/Library/ios/documentation/CoreLocation/Reference/CoreLocationConstantsRef/Reference/reference.html#//apple_ref/doc/uid/TP40010237-CH2-SW1

そんな感じでテストした結果

画面はボタンだらけとなりました。

 

 

 

 

「お気に入り」にお店を登録しておくと、近くを通るだけでタイムリーなマル得情報が送られるようにします。

お店情報画面にお気に入りボタンを付けて、それをタップするとお気に入りリストに登録します。

お気に入りボタンを追加

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SQLiteはWrapperライブラリーのFMDBを使います

libsqlite3.0.dylibを追加

 

 

 

 

FMDBのクラスをプロジェクトに追加

 

 

 

 

 

 

お店情報クラスにFMDBクラスをインポート

#import “FMDatabase.h”
#import “FMDatabaseAdditions.h”
#import “FMDatabasePool.h”
#import “FMDatabaseQueue.h”
#import “FMResultSet.h”

お気に入りボタンをタップするとローカルDBに出力

 

 

 

お気に入り画面に同じくFMDBクラスをインポート

viewWillAppearでマイリストデータ読み込み

 

 

 

DBデータの読み込み処理で、対象データのみを表示

 

 

iBeaconは既にテスト済みなので、「お気に入り」に登録した店のUUIDを対象にビーコンを起動します。

※次回

ローカルDBにUUIDの項目を追加、お気に入り登録をするとDBからお店のUUIDを取得

ジオフェンス画面にビーコンボタンを追加、タップすると近くにあるお気に入り店の情報を取得します。

 

 

Owl on 8月 16th, 2014

お店紹介のホームボタンをタップすると地図にピンを立ててバルーンを表示するようする。

 

delegateに情報をセットして、GeoFenceタブを呼ぶ。

TakePhotoAppDelegate* get = (TakePhotoAppDelegate *)[[UIApplication sharedApplication] delegate];

get.contributeID = contributeID;

get.name = name;

get.latitude=latitude;

get.longitude =longitude;

get.comment = comment;e

[result addObject:get];

UITabBarController *tabs = self.tabBarController;

tabs.selectedIndex = 1;

呼ばれた地図側ではDelegeteに情報がセットされていれば、その地点に飛んで地図を表示、ピンを立ててバルーンで情報を表示します。

TakePhotoAppDelegate* get = (TakePhotoAppDelegate *)[[UIApplication sharedApplication] delegate];

if(get.latitude) {

//経度緯度文字列を数値に変換

double lat_su = [ get.latitude doubleValue ];

double lng_su = [ get.longitude doubleValue ];

CLLocationCoordinate2D co;

co.latitude = lat_su; // 緯度

co.longitude = lng_su; // 経度

[_mapView setCenterCoordinate:co animated:NO];

MKCoordinateRegion rgn;

memset(&rgn, 0, sizeof(rgn));     // 構造体をクリアする

rgn.center.latitude = co.latitude;      // 中心位置を設定する

rgn.center.longitude = co.longitude;

rgn.span.latitudeDelta = 0.01;      // ズームレベルを設定する

rgn.span.longitudeDelta = 0.01;

[self.mapView setRegion:rgn animated:YES];  // 表示領域を設定する

CustomAnnotation*  annotation;    // カスタムアノテーションを作成する

annotation = [CustomAnnotation alloc];

CustomAnnotation *ha = [[CustomAnnotation alloc] initWithCoordinate:co];

ha.title = get.name;

ha.subtitle = get.comment;

ha.isStart = NO;

[_mapView addAnnotation:ha];   // ピンを立てる

[_mapView removeOverlays:_mapView.overlays]; //地図に上書き

 

ジオフェンスボタンをタップするとお店を中心にジオフェンスを張ります。

 

 

 

 

 

 

 

 

 

 

 

現在位置表示ボタン追加して、タップすると現在地を表示するようにしました。

 

- (IBAction)ButtonPushed:(id)sender {

_mapView.centerCoordinate = _mapView.userLocation.location.coordinate;

MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);

MKCoordinateRegion region = MKCoordinateRegionMake(_mapView.userLocation.coordinate, span);

[_mapView setRegion:region animated:YES];

self.mapView.showsUserLocation = YES;  //青丸表示

[self.mapView setUserTrackingMode:MKUserTrackingModeFollow];   //追跡

}

Owl on 8月 15th, 2014

地図を表示する場合のMKMapViewのメソッド

MKCoordinateRegion 地図の縮尺度を設定する。

現在はジオフェンスの3倍を指定しています。

最大1000mなので3km四方でしょうか。

ちなみに緯度は1で111キロ変わります。テストの際に1000メータは変更する場合は0.01刻みで位置情報をカスタマイズします。

画面上に描写したジオフェンスとCLLocationManagerで設定した値が合わないので領域の赤円を変えてみる。

領域の円形サイズを変更

MKCircle *_fenceRange1 = [MKCircle circleWithCenterCoordinate:_centerLocation radius:100];

MKCircle *_fenceRange2 = [MKCircle circleWithCenterCoordinate:_centerLocation radius:500];

MKCircle *_fenceRange3 = [MKCircle circleWithCenterCoordinate:_centerLocation radius:1000];

地理的領域を定義

_regionNearby = [[CLCircularRegion alloc] initWithCenter:_fenceRange1.coordinate radius:_fenceRange1.radius identifier:@”nearby”];

_regionBlock  = [[CLCircularRegion alloc] initWithCenter:_fenceRange2.coordinate radius:_fenceRange2.radius identifier:@”nextBlock”];

_regionTown = [[CLCircularRegion alloc] initWithCenter:_fenceRange3.coordinate radius:_fenceRange3.radius identifier:@”nextTown”];

 

ジオフェンスの範囲設定

CLLocationManagerのstartMonitoringForRegion

[_locationManager startMonitoringForRegion:_regionNearby];

[_locationManager startMonitoringForRegion:_regionBlock];

[_locationManager startMonitoringForRegion:_regionTown];

 

実機テストを行う。

 

 

Owl on 8月 13th, 2014

storyboadを使った画面遷移からxibを呼び出すように変更します。

今からゴルフで、続きは帰ってから書きます。

ジオフェンスアプリも新幹線、車中と実機テストをしたのですがメッセージが表示されませんでした。

その上、ゴルフはドライバーショットが方向定まらずOB連発、一緒にプレーしてくださった方に迷惑かけてしまって。情けないやら腹立たしいやら。

一石二鳥を目論んだ一日は、どちらも結果が出ず。帰路の新幹線で黄昏れてました。

就寝…。

 

Wake up!!

しばし名言を呼んで、エネルギーチャージ。

昨日から学び、今日を懸命に生き、明日への希望を持て。大切なことは問うことをやめないことだ。byアインシュタイン

お前がいつか出会う災いは、お前がおろそかにしたある時間の報いだ by ナポレオン

四葉のクローバーを探すために三つ葉のクローバーを踏みにじってはいけない。幸せはそんな風にさがすものではない。 by作者不明

 

 

 

 

 

 

 

 

 

 

 

 

ではアプリ開発の続きを、

UIStoryboardSegueを使って画面遷移をしているのでxibに変更

modalviewの表示は

presentModalViewController:animated:だったのですが

iOS6以降は

presentViewController:animated:completion:になっています。

今回はNavigationControllerにしました。

 

これでmajorNo.とminorNo.を受け渡して、対象のWebページを表示します。

 

 

 

 

 

 

 

 

 

 

 

Navigationボタンで地図に戻ります。

これでOKです。シュミレーターではテストも上手く言ったのですが、実機テストが…。

これからデバッグします。

Owl on 8月 12th, 2014

地図は表示されるようになったがジオオフェンスの領域の円形が表示されない。

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id < MKOverlay >)overlay {
が怪しい。
レンダラーって何?

googleさんで調べると、MKOverlayViewがiOS7.0か進化したとか。それでもってMKOverlayViewが非推奨にになってます。
とにかく古いソースなので、MKOverlayViewにを使ってテスト、でも表示されない。

MKOverlayRendererを使うには、iOS7.0以上となっていたので、Deployment Targetを7.0に上げる.

 

 

 

これで文句ないだろう、だが反応なし。

[_mapView addOverlay:_fenceRange1 level:MKOverlayLevelAboveRoads];

メソッドをどうみても問題ない。やはりレンダラーか…。

appleデベロッパーガイドで使い方を調べる。

線の色や、太さ、塗りつぶしの指定。

詳しくはこれを読みましょう。

 

https://developer.apple.com/jp/devcenter/ios/library/documentation/LocationAwarenessPG.pdf

問題ないよな…。

元のサンプルを動かしたがしっかり表示される。

やっぱりstoryboardで作り直すしかないかと悩みながら、もう一度xibの画面を確認。

MapViewを見ていてoutletのdelegateが接続されていない事に気づく。

 

 

 

設定してやり直す無事、ジオフェンスは表示されました。

 

 

 

 

 

 

 

 

 

 

 

何か赤色だと非常事態のようだねぇ、なので黄色に変えてみました。

renderer.fillColor = [[UIColor yellowColor] colorWithAlphaComponent:0.3];

 

 

 

 


 

 

 

 

 

 

今度は現在地の青い○が表示されてない。

self.mapView.showsUserLocation = YES;を追加

 

 

 

 

 

 

 

 

 

 

 

ジオフェンス機能の追加は完了したので、次はBeaconに反応した際のお店情報の表示。

メッセージを追加して行きます。

 

Owl on 8月 11th, 2014

昔作ったアプリのソースをマイグレーションするかどうか?

結構悩むポイントだ?

2012年に作成したアトラクション紹介アプリをCopyをして作成しよう。

マイグレーションポイント 1

ARC(Automatic Reference Counting)

Xcode4.2から搭載されたメモリーを自動で管理する機能です。初期に作成したプログラムは、まだこの機能がなかった為にretain/releaseを自分で計算して行っていました。落ちた時はデバッグが大変で、なんと面倒な言語なんだろうなといつもおもっていました。

リフェクタリングはxcodeの以下のプションで出来ます。

 

 

 

 

 

 

 

 

 

ARCに変換が自動で出来るかがチェックされ、出来ないコードは一覧で表示されます。

 

 

 

上のように変換の方法を選択するように指示されている場合は、Fixの方法を選択します。

 

 

自動変換不能の場合はソースコードを修正します。

上のようにautoreleaseしかないコードはエラーになるので削除します。

 

 

 

 

 

 

 

 

上のようなメッセージが出れば自動変換が可能になります。

マイグレーションポイント2

xibをStoryboardに変換する。

これ結構大変です。元のプログラムがtabbarでコントロールするUIなのですが、storyboadにすると画面は全て作り直し。

既に完成している画面なので今回はxibの追加で対応する事にしました。

マイグレーションポイント3

画面サイズの変更。

iPhone5のサイズに変更をします。

iPhone4を前提としたソースなので、自動で5の画面サイズに変換されていますが、当然縦長の影響で画面が間延びしています。

IBで修正出来る所と、ソースの中で設定している部分があるので適時修正して行きます。

以上です。

次はGeofenceの機能をtabViewの旧アプリに追加して行きます。

元のソースはサンプルソースはstoryboadを使用しているのですが、今回はxibを追加する事で対応して行きます。mapviewを既にアトラクションのナビゲーション機能で使用しているので合体します。