Road to WWDC2015 「前夜祭」
WWDC前夜祭
@taketo1024 さんらの呼びかけで日本人Developerが集う前夜祭が開かれました。
去年は行けなくて残念だったので今年はすぐに参加表明しました。
出発
ホテルロビー集合で出発。
会場は中華料理のFang。
着いた着いたと思ったら@k_katsumiさんが。
ひさしぶり〜ってやろうと思ったら、まってましたとばかりにレイバンいじりを受けました。
その勢いたるやw
おかげでだいぶ和みました。
前夜祭始まり。
そら案内の方の前。
#WWDCの道 pic.twitter.com/lwQpPkZ1Sp
— ひとのみち (@hitonomichi) June 8, 2015
おのおの乾杯スタイルでスタート!
deploygateの安田さんにTシャツもらいました。
普段でも着れるクオリティー!
deploygate.com
自己紹介とかどんな仕事してるとか
こんなことしようと思ってこれを頑張ってるとか
同じ業界で頑張ってる人たちと話せてまたエネルギーもらいました。
楽しかった!
@shu223 さんにアドバイスももらったので緊張して写真撮りました。
会期中になかなか交流しにくいので前もって顔見知りになっておくと
より楽しく円滑に過ごせますね。
幹事の方々、ありがとうございました。
関連記事はこちら。
WWDC2015 カテゴリーの記事一覧 - ROADTO みちログ
Road to WWDC2015 「レジストレーション」
レジストレーション
ホテルから早速レジストレーションへ。
いわゆる受付で、WWDC初日のKeynoteを生で見るためには
前日までに済ましおく必要があります。
また、長旅で疲れた体にテンションを注入してくれる儀式です!
一年前歩いた道をすすむと見えてきましたあの看板!
来た来たー!
この辺りまで来ると背中に番号を背負った人たちがたくさん歩いています。
レジスト済ませた人はその年の背番号入りジャケットがもらえます。
Moscone Westへ
会場のモスコーンに入ると壁にどかーんとその年のアイコンが書いてあります。
レジストにWWDCチケットのPassbookとパスポートを出せば完了。
私はAppleWatchのPassbookでピッ。
ジャケットをもらって完了!簡単!親切!
はい以上。
ジャケットですが私の前の人が太っちょさんでL頼まはって
明らかに入らんやろって思ってたら結局その人は一番お大きいやつにしてて
自分で自分のサイズわかってないんかよーwって思ってて、
次自分の番になって最初Mをお願いして試着してみたら少し大きくて、
Sに変えてくださいって言ってる自分に気付いて
はははー俺も自分のサイズわかってないなーwって思ったんですよって
これ誰が興味あんねん!
レジストレーション完了
あと、前あったおもちゃ屋は潰れたけど他にもあるよ。
@hitonomichi サンフランシスコショッピングセンターの上に小さなおもちゃ屋あり。
メトレオンの二階のショッピングセンターに適当なおもちゃ屋売り場あり
— Yuichi Fujishige (@nakiwo) June 8, 2015
関連記事はこちら。
WWDC2015 カテゴリーの記事一覧 - ROADTO みちログ
Road to WWDC2015 「サンフランシスコに行くよ」
出発
いよいよこの日かやってきました。
WWDCに出発します。
ホテルまでの道のりです。
関空へ
まずは関空へ。
家を出発。
#WWDCの道
— ひとのみち (@hitonomichi) June 7, 2015
戦地に向かう男の背中は強さと頼もしさが満ち溢れていますね。
いきなり飛行機の出発が3時間遅れという仕打ち。
おかげで予定してたApple本社への巡礼があっけなく水の泡。
え?飛行機3時間5分遅れ?
マジ?
#WWDCの道
— ひとのみち (@hitonomichi) June 7, 2015
もろもろの出国準備を淡々と。
モバイルWi-Fiレンタルdone.
受け取っただけ。
#WWDCの道
— ひとのみち (@hitonomichi) June 7, 2015
チェックインdone.
身軽に。
#WWDCの道
— ひとのみち (@hitonomichi) June 7, 2015
Exchange done.
$1=¥126.37
やっす。
#WWDCの道
— ひとのみち (@hitonomichi) June 7, 2015
出国
関西組の皆さんとも合流。
搭乗はAppleWatchで。
AppleWatchのPassbookで飛行機の搭乗口行ったら初めて見たーって言われた。
んでバーコード読み取り機の作りが腕入らなくて結局外してピッてした。
ちゃんと通れたんだけど僕も係りのお姉さん達も不安そうでしたw
#WWDCの道 pic.twitter.com/kd39Odz1FL
— ひとのみち (@hitonomichi) June 7, 2015
今回はサンフランシスコへの直行便。
United航空。
ご飯は普通。
ホテルへ
10時間くらいのフライトでサンフランシスコへ。
サンフランシスコ到着。快晴。来たよ。これから苦しみの1week。お覚悟は、よろしくて?#WWDCの道 (at @flysfo in San Francisco, CA) https://t.co/kyTsQfmKeO pic.twitter.com/S7kQ4jSQ2d
— ひとのみち (@hitonomichi) June 7, 2015
イミグレに1時間20分。
何にも聞いてくれへんかった。
何にも。目的とか。練習してたのに。
何にも。
#WWDCの道
— ひとのみち (@hitonomichi) June 7, 2015
空港からはBARTで移動。
切符を買わずにClipper Cardを買ってみました。
この道と書いているカードがそれです。
ICOCAみたいなチャージするタイプのやつ。
$25チャージ、発行手数料$3でした。
うそです。道と書いているカードはClipper Cardではありません。
ほどなくして最寄り駅Powell stに到着。
@nakiwoさんを探せ。
同室の方と合流してホテルにチェックイン。
到着。
荷物を置いてほっと一息。
これこれ。この雑踏感。
来たなー。
今年もよろしくお願いします。
記念に。
15:14にWakeUp!
6/7(日) San Franciscoの天気
快晴
これからの最高19.4 ℃/最低13.4 ℃
#AlarmWeather http://t.co/kKZxc60yjh
— ひとのみち (@hitonomichi) June 7, 2015
関連記事はこちら。
WWDC2015 カテゴリーの記事一覧 - ROADTO みちログ
Road to WWDC2015「準備するよ」
準備するよ
WWDCの季節がやってきました。
去年に引き続き、今年も参加してきます。
まさ連続で行くことになろうとは。
数年前の自分に言っても信じないでしょう。
ということで、もうすぐ出発なので準備します。
去年の自分の記事も参考にして。
hitonomichi.hatenablog.com
hitonomichi.hatenablog.com
予約・申請系
オールOK。
ホテルはユースホステルの二人部屋。
ありがたいことに誘って頂いて部屋代も割り勘。
リーズナボー!
デジタル系
- Macbook Airとケーブル
- iPhone 6plusとケーブル
- AppleWatchとケーブル
- モバイルバッテリーとケーブル
- イヤフォンとケーブル
- 4穴USB充電ケーブル
- モバイルWiFi(関空でレンタル)
ケーブルの多さよ。関西電力かよ。
MBAの充電だけが心配。
発電機もっていったろか。
関西電力かよ。
着替えと小物
- 半袖Tシャツ+長袖シャツの組み合わせを数セット
- 下着と靴下(適当)
洗濯できるっぽい。
やったことないけどチャレンジしてみよ。 - パンツ数本
- 春物ジャケット
ジャケットはKeynote並ぶ用と夜出歩く用。
夜はぐっと冷えるし、たぶんWWDCジャケットもらえるけど
それで歩くと狙われるから。 - WWDCパスケース パス落とすと、もう入れないグッバイモスコーン!なので落としにくい首さげパスケースを持参。
- 道プレート
- ノートとペン
- 名刺
- 歯磨きセット
- 整髪料
- 薬
- 英語話す気概
持っていかないもの
- コンデジ
去年持って行ったけどほとんどiPhoneで写真とってたので今年はなし。 - イス
並ぶときあるといいらしいけどウロウロする派なのでなし。 - 洗濯グッズ
潜在とかホテルにありそう。 - 変圧器
なくて大丈夫。 - さぼりたい自分の中の弱い気持ち。
こんなもんかな。 去年より軽くしていきたいところです。
あとメガネ必須。
— ひとのみち (@hitonomichi) June 5, 2015
関連記事はこちら。
WWDC2015 カテゴリーの記事一覧 - ROADTO みちログ
GeoFenceとCoreMotionを組み合わせたバックグラウンド常駐監視の一案
仕事へのパッションが抑えられません。
ジオフェンシングとモーションセンサーを使って
バックグラウンドやロック状態でも何かをしたいときの一案。
ジオフェンシングって知ってますか?
ではEnjoy ジオフェンシングとモーションセンサー!
やりたいこと
ある領域内にいるうちは定期的に何かしたい。
何かのトリガーでバックグラウンドでアプリを起動させても動くのって10秒ほど。
がんばって延長させても最長10分弱。
そうじゃなくて定期的に何かしたい。
やることの要約
- 指定領域内に入ったらモーションセンサー開始
- モーションセンサーで歩くたびに何かする
- 指定領域内は継続
- バックグラウンドでもロック時も動作開始、継続
- 指定領域から出たらモーションセンサー停止
前提
- Xcode6.3.1
- 検証機はiPhone6plus iOS8.3。
- AppStoreに申請したことはない。
- SwiftじゃないよObjective-Cです。
「・・・」のところは本筋から外れるので間引いています。
気になる方はサンプルコードからどうぞ。
サンプルコード
実装のまえに
プロテイ、、プロジェクトの設定をします。
位置情報「常に使用」を有効にします。
* Info.plistにNSLocationAlwaysUsageDescription
を追加
バックグラウンドで動かす設定をします。
* TARGETS
- Capabilities
- Background Modes
をON
* Location updates
にチェックをつける
やっと実装
まずはインポート。
余談ですがframeworkに追加しなくてよくなったのね。
framework追加なしでエラーになりません。
#import <CoreLocation/CoreLocation.h> #import <CoreMotion/CoreMotion.h>
CLLocationManager初期化と監視領域の指定。
CLLocationCoordinate2DMake
で指定した緯度軽度を中心に、
CLLocationDistance
で指定した領域を監視します。
//CLLocationManager初期化 self.locationManager = [[CLLocationManager alloc] init]; ・・・ self.locationManager.delegate = self; //Region初期化 CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(37.324540, -122.041241);//アメリカ(クパチーノ) CLLocationDistance radiusOnMeter = 100.0;//範囲指定 self.geoRegion = [[CLCircularRegion alloc] initWithCenter:coordinate radius:radiusOnMeter identifier:@"jp.roadto.ROADTO-Geo"]; //位置情報の許可状況に合わせて動作開始 if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { // iOS8 switch ([CLLocationManager authorizationStatus]) { case kCLAuthorizationStatusNotDetermined: NSLog(@"位置情報の許可が未設定なのでユーザに確認する"); [self.locationManager requestAlwaysAuthorization]; break; case kCLAuthorizationStatusAuthorizedAlways: NSLog(@"「常に許可」されている"); break; ・・・ } } else { // iOS7以下 [self.locationManager startUpdatingLocation]; }
続きましてCLLocationManagerDelegateメソッドたち
requestStateForRegion
で監視が始まったときとか
requestAlwaysAuthorization
の位置情報使用確認後とかに通知されます。
領域内に入ったときにモーションセンサーをONにし、
領域外になったときにモーションセンサーをOFFにします。
説明はコメントにて。
#pragma mark - CLLocationManagerDelegate // CLLocationManager初期化時または // アプリの位置情報の許可状態ステータスが変更されたときに通知される -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { switch (status) { case kCLAuthorizationStatusNotDetermined: break; case kCLAuthorizationStatusAuthorizedAlways: NSLog(@"「常に許可」"); // 領域監視スタート [self.locationManager startMonitoringForRegion:self.geoRegion]; break; ・・・ } } //領域監視がスタートしたときに通知 - (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region { //現在の領域状態を確認。 //「- locationManager:didDetermineState:forRegion:」が呼ばれます。 [self.locationManager requestStateForRegion:region]; } //領域内に入ったときに通知 - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { NSLog(@"領域内になったよ"); //モーションセンサー 開始 内容は次の章で説明。 [self startMotionActivity]; } //領域の状態について通知。状態が変わるたびに呼び出される。 - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region { switch (state) { case CLRegionStateInside: NSLog(@"領域内"); //モーションセンサー 開始 内容は次の章で説明。 [self startMotionActivity]; break; ・・・ } } //領域から出たことを通知 - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { NSLog(@"領域外になったよ"); //モーションセンサー 停止 [self stopMotionActivity]; }
あとはモーションセンサー
CMMotionActivityManager
を使ってモーションを取ります。
今回は歩いているか否かを使っていますが、他にもいろんな状態をとれます。
「//do something」でしたい何かの処理を書きます。
#pragma mark - モーションセンサー //モーションセンサー 初期化 - (CMMotionActivityManager *)getActivityManager { if (!self.motionActivityManager) { self.motionActivityManager = [[CMMotionActivityManager alloc] init]; } return self.motionActivityManager; } //モーションセンサー 開始 - (void)startMotionActivity { NSLog(@"モーションセンサー 開始"); //iOS7,8ともに必要 [self.locationManager startUpdatingLocation]; //←キモ。iOS7,8ともに必要です。 if([CMMotionActivityManager isActivityAvailable]){ NSOperationQueue *queue = [NSOperationQueue mainQueue]; CMMotionActivityManager *motionActivityManager = [self getActivityManager]; [motionActivityManager startActivityUpdatesToQueue:queue withHandler:^(CMMotionActivity *motionActivity){ //do something NSString *log = [NSString stringWithFormat:@"motion %@", motionActivity.walking ? @"そうだね。プロテインだね。" : @"んーんーんー。"]; NSLog(log); ・・・ }]; } } //モーションセンサー 停止 - (void)stopMotionActivity { NSLog(@"モーションセンサー 停止"); CMMotionActivityManager *motionActivityManagerUpdate = [self getActivityManager]; [motionActivityManagerUpdate stopActivityUpdates]; }
テストに出ます
「←キモ」のところ。
startMotionActivity内で「-locationManager startUpdatingLocation」を呼んでいます。
これ自体は位置情報の更新監視をスタートさせるものですが
なぜかこれを書くとモーションセンサーもバックグラウンドで動いてくれます。
バックグラウンドでもロック状態でも起動するし、
フォアグラウンドで起動して、バックグラウンドやロック状態になっても動き続けます。
尚、「M7」モーションセンサーはiPhone5sから搭載なので、
iPhone5以前は使えません。
結果
サンプルコードを起動させます。
サンプルコードでは画面に出力させています。
歩いているかどうかを判定しています。
歩いてると出てますね。「そうだね。プロテインだね。」
バックグラウンドでも動いていますね。「そうだね。プロテインだね。」
以上です。
エヴィバディパッション!
そうだね。プロテインだね。
— ひとのみち (@hitonomichi) 2015, 5月 29
Road to Passbookの作成
Passbookを作ってみる機会があって色々調べたので残しておきましょう。
ではEnjoy Passboooooooooook!
前提
素材を集める
証明書を作成
「キーチェーンアクセス」ー「証明書アシスタント」ー「認証局に証明書を要求」
「CertificateSigningRequest.certSigningRequest」ができました。
あとで使います。
Pass Type IDsを作成
デブセンでPass Type IDsを作成します。
証明書(さっき作った.certSigningRequest)を使用します。
できたらDownloadします。
ダブルクリックでキーチェーンに保管します。
テンプレートをゲットだぜ
Passbookのテンプレートを取得します。
ここから。Passbook Support Materials
「Passbook Materials」てリンクからダウンロード。
落ちてきたpassbook_materials.dmgを開く。
必要なやつだけ別に置いてみたら分かりやすいんじゃね?
任意の場所にフォルダを作成。今回は「PassSample」とします。
「PassSample」にサンプルjsonファイルと必要素材のどれかを置きます。
今回は「Generic.raw」を使用します。
signpassのプロジェクトをXcodeでビルドし作成されたsignpassを「PassSample」フォルダに移動に置きます。
こんな感じ。
Passbookの中に具を詰めます
pass.jsonを編集します。
まず、必要な情報があるのでキーチェーンアクセスから証明書を見てみます。
作成して保存した証明書を右クリックから「情報を見る」で開きます。
詳細な情報を開くと、あったあった。
これらをpass.jsonに設定します。
- passTypeIdentifierにPass Type IDを指定
例)"pass.com.example.PassbookSample" - teamIdentifierに部署を指定。10桁の英数字文字列です。
- organizationNameに組織を指定。
その他必要な項目を設定します。
ここを参考に。
Pass Design and Creation
オーブンに入れて出来上がりを待ちます
ターミナル起動。
「PassSample」ディレクトリに移動。
実行。
./signpass -p Generic.raw
Generic.pkpassができました!
ダブルクリックでプレビューできます。
作成手順は以上です!
アレンジで自分だけのPassbookを。
去年のWWDCで現地のディベロッパーは名刺をPassbookで持ってるって耳にしたので、
試しにひとのみちPassbook名刺をつくりました。
ひとのみちPassbook名刺
iPhoneだとPassbookアプリに入るよ。
え?いらない?ですよね。いらない人は燃えるゴミの日にだすか、かたつむりにあげてください。
別腹
余談ですが。
PassbookはiBeaconに反応してロック画面に表示しますが、
表示対象のPassbook複数あったらどうなるか。
たぶん並んで表示されるんやろーなーと思ってたら、、なんと!
思ってた通り並んで表示されました。
ちなみに、passTypeIdentifierが違えば別モノとして表示、
passTypeIdentifierが同じでserialNumberが違うと同じpassTypeIdentifierのうちどれか一つが表示されました。
食後に
PassbookはiBeaconや緯度経度に連動するし、
AppleWatchにも搭載されるし、
あんまり流行っていないけど、使い道はあると思ってるんですけどね。
自動更新とかサーバ絡んだことはまたそのうち研究します。
iBeaconとPassbookのサンプルを作ったよ。
iBeaconとPassbookのサンプル作りました。 サンプルコードとか技術的な話はないです。ないんです。
ビーコンとは最近流行ってるIoTの切り込み隊長で、 電波を発信してモバイル端末に訴えかける仕組みです。
小売店や映画館とか、割と事例が出てきてます。
小売店や飲食店でもホームページみたいに必須になるかも。このスマフォの普及に加えてウェアラブルの普及が来たらこちらからの訴えかけに最適。
/企業の導入で注目が高まる「Beacon」って何? http://t.co/tJSpCIk5ub @HuffPostJapanさんから
— ひとのみち (@hitonomichi) 2015, 1月 8
Apple WatchとiBeaconは相性良さげ。
大手が導入して世間の生活に入り込めたら普及するのに。
/米国スーパー、Apple Watch向けにiBeaconを活用した初のプロモーション http://t.co/rsFGvlNu2T @iPhoneMania_jpさんから
— ひとのみち (@hitonomichi) 2015, 1月 12
iBeaconで映画館でのプロモーションやって。同じ目的のグループに対して能動的なアピールは効果的やわ。
/新体験!?映画館や映画フェスでのiBeaconを使った最新事例 | オムニチャネルラボ(Omni-Channel Lab.) http://t.co/T5nHeoQoDG
— ひとのみち (@hitonomichi) 2015, 1月 22
カードのプロモ目的の、街フェスタ×ビーコン事例。お客さんからの有用さはいかに。
/国内初、大手クレジットカードの iBeaconを活用したO2Oサービスに「ACCESS(TM) Beacon Framework」が採用 http://t.co/C7F3xdpLJ6
— ひとのみち (@hitonomichi) 2015, 2月 25
はい。 こんな感じです。
作ったサンプルですが、下の写真の黒い四角いのがビーコンです。 一個1000円で電池で動きます。
空想上の街イベントアプリを作りました。
食とバンド、アートが街のいろんなところで楽しませてくれます。
例えば、ハンバーガーショップに近づくとアプリがビーコンに反応します。 ピロンとアラートが表示されますねー。
この例ではクーポン¥300,000OFFをゲットです。
店側からしたら、なかなかアピールする手段がない中、 こちらから訴えかける一つの仕組みとして有効ですね。
あと、Passbookも一度iPhoneに取り込めばビーコンに反応して、 ロック画面に出てきます。
こちらも合わせてアピールの道具になりそうですね。