<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HACKist &#187; iOS</title>
	<atom:link href="https://hackist.jp/?cat=25&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://hackist.jp</link>
	<description>HACKistは日々、博報堂アイ・スタジオで挑戦している、ちょっと変わった新しい実験をお知らせしていきます。</description>
	<lastBuildDate>Wed, 30 Sep 2020 02:59:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.4</generator>
	<item>
		<title>【Swiftでクリエイティブコーディング！C4とは】</title>
		<link>https://hackist.jp/?p=7345</link>
		<comments>https://hackist.jp/?p=7345#comments</comments>
		<pubDate>Tue, 05 Apr 2016 10:15:27 +0000</pubDate>
		<dc:creator><![CDATA[HACKist]]></dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://hackist.jp/?p=7345</guid>
		<description><![CDATA[C4とは？ C4とは、オープンソースなクリエイティブコーディングの為のフレームワークのことで、 Swiftでクリエイティブコーディング出来るよ！みたいな話です。 C4を使えば以下のようなことが出来ます。 詳細はC4公式サ [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>C4とは？</h2>
<p>C4とは、オープンソースなクリエイティブコーディングの為のフレームワークのことで、<br />
Swiftでクリエイティブコーディング出来るよ！みたいな話です。</p>
<p>C4を使えば以下のようなことが出来ます。<br />
<iframe width="500" height="281" src="https://player.vimeo.com/video/158074307?color=0ca0e6&amp;byline=0" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe></p>
<p><iframe width="500" height="281" src="https://player.vimeo.com/video/158223690?color=0ca0e6&amp;title=0&amp;byline=0" frameborder="0" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowfullscreen"></iframe></p>
<p>詳細は<a href="http://c4ios.com" target="_blank">C4公式サイト</a>をご覧ください。</p>
<p>ここでは、</p>
<ul>
<li><strong>C4の始め方</strong></li>
<li><strong>C4で円を描いてみる</strong></li>
<li><strong>oFやProcessingとの違い</strong></li>
</ul>
<p>といった流れで進めていきます。<br />
&nbsp;</p>
<h2>C4の始め方</h2>
<p>C4にはいくつかインストール方法があるのですが、<br />
なぜかその難易度がジャッ○ー・チェンやブルー○・リーで表現されています。<br />
<img class="aligncenter size-large wp-image-7369" src="http://hackist.jp/wp-content/uploads/install_level-1024x320.png" alt="install_level" width="1024" height="320" /></p>
<p>作者の趣味でしょうか、あまり嫌いではないです。</p>
<p>今回は一番簡単な方法を紹介したいと思います。</p>
<ol>
<li><a href="http://c4ios.com/install/" target="_blank">C4 Installer</a>のDownloadからインストーラをダウンロード</li>
<li>.pkgファイルをダブルクリックして開く</li>
<li>指示に従いインストール</li>
</ol>
<p>これでインストールは完了です。</p>
<p>&nbsp;</p>
<h2>C4で円を描いてみる</h2>
<p>新規プロジェクトの作成から、紹介したいと思います。</p>
<ol>
<li>Xcodeを開き、Create a new Xcode projectを選択</li>
<li>C4 Single View Applicationを選択</li>
<li>Product Nameに適当な名前を入れて次へ進み、Createを選択</li>
<li>左上の実行ボタンを押して、成功したら準備はOKです</li>
</ol>
<p><img class="aligncenter size-large wp-image-7383" src="http://hackist.jp/wp-content/uploads/C4_buildsuccess-1024x758.png" alt="C4_buildsuccess" width="512" height="379" /></p>
<p><strong>円を描いてみる</strong></p>
<p>Workspace.swiftファイルのsetup内を以下のように書き直します</p><pre class="crayon-plain-tag">override func setup() {
    //円を描く
    let circle = Circle(center: canvas.center, radius: 50)
    canvas.add(circle)
}</pre><p>実行し直すと、半径50の青色の円が表示されるかと思います。</p>
<p><img class="aligncenter size-large wp-image-7384" src="http://hackist.jp/wp-content/uploads/C4_circle-606x1024.png" alt="C4_circle" width="300" height="512" /></p>
<p>C4でいう「Hello World」は終了です。<br />
数は多くありませんが、<a href="http://c4ios.com/tutorials/" target="_blank">公式のチュートリアル</a>は丁寧なので是非参考にしてみて下さい。</p>
<p>チュートリアルを少し改良したレベルですがデモを作ってみました。<br />
<iframe width="630" height="472" src="https://www.youtube.com/embed/x4rcZYGkGc8" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>&nbsp;</p>
<h2>oFやProcessingとの違い</h2>
<p>C4のチュートリアルを一通りやってみたのですが、感じたことやC4の位置づけについて書きたいと思います。</p>
<p><strong>感想</strong></p>
<ul>
<li>アニメーションの調整が簡単に出来る</li>
<li>アプリをリリース出来るのは良い</li>
<li>Swift2.0で書ける</li>
<li>OSC等のサポートが不十分なので、生Swiftを書く必要がある</li>
</ul>
<p><strong>oFやProcessingとの違い</strong></p>
<ul>
<li>C4自体がSwiftを学ぶ人たちをサポートする為にあるので、oFやProcessingと似ているところもあるが根本的な違いもある</li>
<li>draw()を書かない代わりに、アニメーションを分離させることに重きを置いているため概念が異なる</li>
<li>音や映像、画像フィルタ等のサポートはされているが必要最低限の為、oFやProcessingの方が自由度は高い</li>
<li>アニメーションのプロトタイプを作る場合、C4の方が良いと感じた</li>
</ul>
<p>&nbsp;<br />
アニメーションの調整が便利な例を一つ挙げます。<br />
下のコードは、黒→白→黒…と背景がアニメーションするプログラムです。</p>
<p><strong>Processingの場合</strong></p><pre class="crayon-plain-tag">int val = 255;
int dir = -1;

void setup() {
    size(640, 360);
    background(0);
}

void draw() {
    background(val,val,val);
    val += dir;
    if (val == 255 || val == 0) {
      dir *= -1;
    }
}</pre><p></p>
<p><strong>C4の場合</strong></p><pre class="crayon-plain-tag">override func setup() {
    let a = ViewAnimation(duration: 4.0) {
        self.canvas.backgroundColor = black
    }
    a.repeats = true
    a.autoreverses = true
    a.animate()
}</pre><p></p>
<p>&nbsp;<br />
Processingで書くのとC4で書くのではこんなにも差があり、<br />
autoreversesやdurationの値を変えてあげるだけで、直感的に変わってくれます。</p>
<p>C4は、現状ではiOS専用のクリエイティブコーディングの為のフレームワークですが、<br />
コミュニティが活発なので、近いうちにOS Xにも対応するかも知れません。（詳しくは<a href="https://github.com/C4Framework/C4OSX" target="_blank">C4OSXリポジトリ</a>を参照）<br />
C4のこれからに期待したいところです。</p>
<p>以上になります。最後まで読んで頂きありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>https://hackist.jp/?feed=rss2&#038;p=7345</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>りんごを食べると歯の検診ができる「Dentapple」リリースしました</title>
		<link>https://hackist.jp/?p=6726</link>
		<comments>https://hackist.jp/?p=6726#comments</comments>
		<pubDate>Wed, 09 Dec 2015 09:14:37 +0000</pubDate>
		<dc:creator><![CDATA[HACKist]]></dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://hackist.jp/?p=6726</guid>
		<description><![CDATA[公文です。１ヶ月ほど経ってしまったのですが、11月8日(いい歯の日)に、 長野県の松本りんご協会さんと歯科医院さん、博報堂ケトルさんと新しいりんごの販売とアプリをリリースいたしました。 弊社では、アプリを制作いたしました [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>公文です。１ヶ月ほど経ってしまったのですが、11月8日(いい歯の日)に、<br />
長野県の松本りんご協会さんと歯科医院さん、博報堂ケトルさんと新しいりんごの販売とアプリをリリースいたしました。<br />
弊社では、アプリを制作いたしました。</p>
<p><img src="http://hackist.jp/wp-content/uploads/dentapple_1209-01-1024x613.jpg" alt="Print" width="1024" height="613" class="alignright size-large wp-image-6828" /></p>
<p>その名も、<strong>「<a href="http://dentapple.jp/" target="_blank">Dentapple</a>」</strong></p>
<p>この「Dentapple」とは、りんごをかじったときに感じる痛みや違和感、出血の有無などをスマホから答えることで、歯科衛生士さんが歯の健康リスクをチェックしてくれるサービス付きのりんごです。<br />
Dentappleでわかる歯の健康リスクは、<strong>「虫歯」「歯周病」「顎関節症」</strong>のリスクです。</p>
<p><img src="http://hackist.jp/wp-content/uploads/Screen-Shot-2015-12-07-at-15.41.21-1024x451.png" alt="Screen Shot 2015-12-07 at 15.41.21" width="600" height="264" class="alignleft size-large wp-image-6732" /><br />
（*あくまでも、歯の健康リスクを簡易的に調べる「テスト」であり「歯科診断」を行うものではございません。適切な処置を受けるためにも、歯科医による診断を仰いでください。）</p>
<p>Dentappleアプリのフロー詳細は以下です。</p>
<p><img src="http://hackist.jp/wp-content/uploads/Screen-Shot-2015-12-07-at-16.56.28.png" alt="Screen Shot 2015-12-07 at 16.56.28" width="600" height="290" class="alignleft size-full wp-image-6744" /></p>
<p><strong>【フロー】<br />
STEP1 : </strong>「Dentapple」についたQRコードから、専用アプリををDLします。<br />
<strong>STEP2 : </strong>スマートフォンのナレーションに従い、りんごをかじります。<br />
<strong>STEP3 : </strong>りんごを食べながら、出血の有無や、かじった時の違和感などをアプリの質問事項を答えていただきます。</p>
<p><img src="http://hackist.jp/wp-content/uploads/4e86680aeab2d72e15a1253f39ab6f41-300x263.png" alt="4e86680aeab2d72e15a1253f39ab6f41" width="300" height="263" class="alignleft size-medium wp-image-6730" /></p>
<p><strong>STEP4 : </strong>最後に、かじったリンゴの断面の写真を送信すれば完了です。１日程待てば、歯科衛生士さんから返信がきます。<br />
<strong>STEP5 : </strong>このような感じでテスト結果が返ってきます。</p>
<p><img src="http://hackist.jp/wp-content/uploads/dentapple4-174x300.jpg" alt="dentapple4" width="174" height="300" class="alignleft size-medium wp-image-6739" /></p>
<p><strong>STEP6 : </strong>アプリから近場の歯医者、提携医院医院を検索・予約することもできます</p>
<p><img src="http://hackist.jp/wp-content/uploads/image-169x300.png" alt="image" width="169" height="300" class="alignleft size-medium wp-image-6749" /></p>
<p>りんご片手でも簡単にアプリが操作できるように、<br />
<strong>　・各画面にナレーションの挿入<br />
　・直感的に質問に回答できるように、アニメーションによるフォロー<br />
　・回答をスワイプ式の2択：スワイプの動きも気持ちよく</strong><br />
といったUIの工夫も。<br />
また、歯科衛生士さんの採点後、結果が即時ユーザーの元に反映されるように、<br />
<strong>　・即時プッシュ通知でお知らせ<br />
</strong>もしてくれます。（*あくまでも、「テスト」で「歯科診断」ではございません。）</p>
<p>この「Dentapple」は、11月8日に発売を開始し、都内では「<a href="http://shunpachi.jp/2015/11/08/1426" target="_blank">旬八</a>」さんに取り扱っていただきました。</p>
<p><img src="http://hackist.jp/wp-content/uploads/PB080055-1024x768.jpg" alt="PB080055" width="600" class="alignleft size-large wp-image-6795" /></p>
<p><img src="http://hackist.jp/wp-content/uploads/PB080042-1024x768.jpg" alt="PB080042" width="600" class="alignleft size-large wp-image-6796" /></p>
<p>メディアにも多数取り上げていただいたこともあり、嬉しくも店頭の在庫は品薄状態に。</p>
<p>▼アドタイ：歯の診断付きりんご、想定3倍の売れ行き 東急百貨店など<br />
<a href="http://www.advertimes.com/20151110/article209157/" target="_blank">http://www.advertimes.com/20151110/article209157/<br />
</a><br />
海外メディアやニュース番組にも<br />
▼The Wall Street Journal : New Apple Product–From Japanese Farmers–Includes Dental Advice<br />
<a href="http://blogs.wsj.com/japanrealtime/2015/11/10/new-apple-product-from-japanese-farmers-includes-dental-advice/" target="_blank">http://blogs.wsj.com/japanrealtime/2015/11/10/new-apple-product-from-japanese-farmers-includes-dental-advice/<br />
</a><br />
▼FNN : リンゴを使った「おいしい歯科検診」を紹介します<br />
<a href="http://www.fnn-news.com/news/headlines/articles/CONN00307654.html" target="_blank">http://www.fnn-news.com/news/headlines/articles/CONN00307654.html<br />
</a></p>
<p>最近、りんごを食べる機会とか、丸かじりする機会が減っていますよね！<br />
この機会に、旬のみずみずしい松本のりんごをかじりながら、自分自身の歯の健康状態も意識してみてください:)</p>
<p>「Dentapple」の取り扱いは、<br />
■都内の八百屋さん（旬八さん）<br />
<a href="http://shunpachi.jp/2015/11/08/1426" target="_blank">http://shunpachi.jp/2015/11/08/1426</a><br />
■ECサイト<br />
<a href="http://dentapple.theshop.jp/items/2136961" target="_blank">http://dentapple.theshop.jp/items/2136961</a><br />
で購入できます。(現状、品薄になってます。)</p>
<p>それでは！</p>
]]></content:encoded>
			<wfw:commentRss>https://hackist.jp/?feed=rss2&#038;p=6726</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iBeaconを使ったイベントを実施する時に気にしたい９のこと  *森のパスポート 信州の収穫祭篇*</title>
		<link>https://hackist.jp/?p=5249</link>
		<comments>https://hackist.jp/?p=5249#comments</comments>
		<pubDate>Wed, 26 Nov 2014 07:59:49 +0000</pubDate>
		<dc:creator><![CDATA[HACKist]]></dc:creator>
				<category><![CDATA[event]]></category>
		<category><![CDATA[iBeacon]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[memo]]></category>

		<guid isPermaLink="false">http://hackist.jp/?p=5249</guid>
		<description><![CDATA[秋ですね。とはいえもうすぐ１２月で丸の内界隈ではイルミネーションが綺麗です。 つまり、冬です。 どちらでも良いですね。こんにちは。Qawasakiです。 先日、小諸ツリーハウスプロジェクト「信州の収穫祭」にて森のパスポー [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img src="http://hackist.jp/wp-content/uploads/IMG_1729.jpg" alt="IMG_1729" width="720" height="480" class="aligncenter size-full wp-image-5272" /></p>
<p>秋ですね。とはいえもうすぐ１２月で丸の内界隈ではイルミネーションが綺麗です。</p>
<p>つまり、冬です。</p>
<p>どちらでも良いですね。こんにちは。Qawasakiです。<br />
先日、小諸ツリーハウスプロジェクト「信州の収穫祭」にて森のパスポートを実施してきました。</p>
<p><img src="http://hackist.jp/wp-content/uploads/IMG_1762.jpg" alt="IMG_1762" width="720" height="480" class="aligncenter size-full wp-image-5270" /></p>
<p>秋の紅葉に染まるアウトドア空間は良い具合にゆっくりとした空気感があってアプリでも採集出来るアキアカネというトンボが飛んでいたりする中で、大人も子供も一緒に森のパスポート、楽しんでもらえました。</p>
<p>イベントやワークショップについては前回のBe-PAL西湖で布田さんに説明してもらったので今回は趣向を変えて、iBeaconを使ったイベント実施の際に気をつけている事などのを書いてみたいと思います。</p>
<h2>■1   iBeaconを入れる筐体を作って防風防塵防寒対策をしよう</h2>
<p>森のパスポートで使っているiBeaconは２代目のデバイスです。初期はApplix社が出していた単三電池型のビーコンをつかっていて、筐体も初代は巣箱型の箱を作って設置していました。</p>
<p><img src="http://hackist.jp/wp-content/uploads/blog5.jpg" alt="blog5" width="720" height="540" class="aligncenter size-full wp-image-5257" /></p>
<p>※右側緑のデバイスがMyBeacon®、赤い方が2代目のACCESS社ビーコンモジュール</p>
<p>屋内のビーコン施策なら良いのですが森のパスポートのようなアウトドア実施の場合は雨風防塵防寒対策も必要になります。<br />
雨風防塵はビニール袋でビーコンモジュールを包めばある程度はカバー出来ます。<br />
もし神経質な状況や過酷な環境化の実施でコストを問わないならば防塵対策がされたビーコンも販売されてるのでそれを使いましょう。</p>
<p>そして寒いとビーコンの電力消費量も上がります。<br />
ビーコンは無線電波を放つだけなので排熱対策は要らないのですが、筐体などである程度の温度は担保した方が安全に運用出来ると思います。氷点下２０度とかになるとどうなのかは疑問です。<br />
今度はその辺もやってみたいですが、そんな環境じゃ誰も虫を捕まえに来てくれないのが悩みどころです。</p>
<h2>■2  筐体はある程度見つけやすく高い場所にも簡単に設置出来る形状に</h2>
<p>前述した巣箱型の初代筐体ですが、１つだけ問題がありました。</p>
<p><img src="http://hackist.jp/wp-content/uploads/ibeacon.jpg" alt="ibeacon" width="720" height="500" class="aligncenter size-full wp-image-4706" /></p>
<p>こんな箱は市販されてるはずもないので、レーザーカッターで切り出して接着剤で一つ一つ組み立てたのですが、これが超、面倒です。レーザーカットも原料の木材コストもかかるし量産も限界があります。</p>
<p>設置は写真のように木に紐で吊るすのですが、あまり高いところに吊るすと安全面や電池交換の運用が大変という問題も出てきます。なので、ビーコンは小型のACCESS社のモジュールにしました。ボタン電池型になり大きさがかなり削減されたのでケースをフリスクケースに変更しました。</p>
<p><img src="http://hackist.jp/wp-content/uploads/01_0000_1-e1414136641611.png" alt="01_0000_1" width="480" height="320" class="aligncenter size-full wp-image-4932" /></p>
<p>上からレーザカットした木材を貼付ければ立派な筐体になります。設置もポンと置くだけで木の上に置いたり固定も出来ます。これにより現地でのビーコン設置の手間が大幅に削減されました。<br />
現地での動作テストなどで当日時間を取られる事が多いのでこういう時間の削減は結構大きいです。</p>
<p>ですが、小さくすればするほど暗い環境では見つけ難くなるのもお忘れなく。<br />
森のパスポートは屋外で当日回収で陽が暮れたキャンプ上や山の中では回収が不可能になるのでバタバタしてたりします。</p>
<h2>■3  ビーコンは地面に置くのではなく80cmくらいがおすすめ</h2>
<p>ビーコンは無線電波を放つデバイスです。電波は回転楕円体の形状で広がり伝播します。この空間をフレネルゾーンと呼びます。フレネルゾーンの一部にでも障害物があれば通信距離に影響するらしいです。<br />
一般的にフレネルゾーン半径の60%を確保できれば通信を良好に行えるといわれています。<br />
何が言いたいかというと地面にビーコンを直置きしてしまうと下図のように電波のロスが発生します。<br />
<img src="http://hackist.jp/wp-content/uploads/blog7.001.jpg" alt="blog7.001" width="720" height="540" class="aligncenter size-full wp-image-5258" /></p>
<p>森のパスポートでは万が一見つかっても大丈夫なように筐体クラフトもしていますが、やっぱりビーコンは見えないのにアプリが反応する方が体験のクオリティは高くなります。<br />
電波も考慮して木の幹や岩の上などやや高い位置に設置して電波のロスを減らしています。自然環境化では電波が反射するものも無く、干渉も少ないので電波強度の設定が読み難いです。<br />
逆に強度を下げたい場合などはわざと地面に置いてロスを出したりと、現地での運用で対処する事が多いです。</p>
<h2>■4  電波強度最大状態での連続稼働時間を考えよう</h2>
<p>森のパスポートは企画上、アウトドア環境での利用がメインです。<br />
ある程度反応する範囲が広くがないと体感的に気持ちよくなりません。<br />
ACCESS社のビーコンは電波強度の設定が出来るのですが今現在はデフォルト（中間）設定で大体７〜10M前後で反応します。これくらいであれば子供が適当に歩き回っても大体検知する事が出来るので難易度的にも丁度良い感じになりました。</p>
<p>電波強度は上げれば上げるだけ範囲が広くなり、干渉にも耐えやすくなります。<br />
ただデメリットとして隣接するビーコンが近すぎると両方に反応してしまったり、ビーコン側の電池の消耗が激しくなります。</p>
<p>中期的な運用をするならば最大にした場合の連続稼働時間は企画段階で検討しておいた方が良いですね。<br />
全国の野山に置いてみたけど１ヶ月で電池切れて交換、とかなるとあまり現実的ではなくなるので。</p>
<p>ちなみに電池が減るとビーコンの発信する電波も不安定になるのでアプリも思わぬ挙動をしたりしますのでそれも注意しましょう。</p>
<h2>■5  アプリ側のビーコン検知処理は適当にしてはいけない</h2>
<p>デバイスや運用方法も気をつけないといけないですがアプリ（ソフトウェア）側も考慮する事が色々あります。そもそもiBeaconはアプリ側で特定のビーコン端末からの電波をキャッチして処理をする事で成り立ってるのですが、この電波をキャッチする処理も何も考えずに動かしているといくらBLEで電力が抑えられてもスマホの電池はアメ車並みに消費されていきます。</p>
<p><img src="http://hackist.jp/wp-content/uploads/image9.001.jpg" alt="image9.001" width="720" height="540" class="aligncenter size-full wp-image-5263" /></p>
<p>森のパスポートではストレスなくアプリがビーコンに反応する為の受信周期を繰り返しテストして設定し、一度反応したビーコンに関してはその後一定期間、電波を無視する事で余計な処理が繰り返されないようになっています。見えない努力というヤツですね。</p>
<h2>■6  これでもかというくらいアプリのテストしよう</h2>
<p>当たり前なのですが、テストがとっても重要です。<br />
ビーコンはBluetoothです。つまり2.45GHz帯の無線です。<br />
この帯域は電子レンジとかWiFiとか色々干渉します。さらに反射とか人や遮蔽物での遮断とかで電波状態は変化します。</p>
<p>電波状態が変わる、という事はビーコンの設置場所を変えなくてはならない事もあります。<br />
机上テストや開発してる建物内だけではなく、必ず実施前に限りなく実施環境に近い状態でテストすることをおすすめします。<br />
また、電池がなくなるケースが以外と盲点で、現地に行って反応悪くなるとかもあります。<br />
状況に応じて電池の予備も用意しておきましょう。</p>
<h2>■7  AppStore申請はビデオが必須</h2>
<p>Appleに申請する際、審査官はビーコンを反応させる事が出来ません。なのでちゃんと反応している状況のムービー提出を求められます。面倒くさがって提出しないと審査期間は伸びる一方なので、スマホ撮影でも良いのでちゃんと撮りましょう。</p>
<h2>■8  バックアップ端末とバックアッププランを用意しておく</h2>
<p>これもリアルイベント＆デバイスを使う場合には当然なのですが、特に日程が限定されてるイベントなどではビーコンの不具合や電波状況の変化、アプリのバグなど想定外の事が発生します。<br />
ビーコンを５０台使う企画だったとしても実際には1.5倍くらいの台数を用意しておいた方が良いです。<br />
その際に余剰なビーコンのUUIDをアプリ内でどう扱うかなどの設計を含めて、何かあった場合にも現地で対応出来るようなプランは必ず用意しておきましょう。<br />
森のパスポートでもバックアッププランとビーコンは用意してて、実際必要になるシーンもありました。</p>
<h2>■9  アプリを使う人(体験する人)へのフォローをちゃんとやる</h2>
<p>ビーコンはOSが古いと反応しないです。<br />
それはアプリの対象OSなどで縛ったりも出来ますが、それ以外にもBluetoothをONにしたりアプリ起動時に出てくる通知とGPSのダイアログに「はい」を押さないと反応しない、などなどユーザに設定してもらわないと正常な体験が出来ない事があります。この辺りのフォローをちゃんとしないといざ当日になって沢山の人が参加しても「あれ、反応しない」みたいな事になるので注意しましょう。</p>
<p>以上がイベントを何度か運営して分かった事です。<br />
iBeaconを利用したリアルな施策は実施して始めて分かる事が多いですね。</p>
<p>実際、この森のパスポートで得た知見は上記以外にも色々あって他の色々なお仕事で生きていてます。<br />
森のパスポートはプロトタイピングから始めたプロダクトです。<br />
今はワークショップを通じて親子が自然の環境に帰って学習出来るという形で色々な方に体験して頂いてますが、作る側としてはそれ以上に得るものが多いなーと思いました。</p>
<p>冬の間は虫も冬眠して森のパスポートが実施出来る環境も少なくなりますが、次に向けてまた色々考えて進めていこうかと思います。</p>
<p>では。</p>
]]></content:encoded>
			<wfw:commentRss>https://hackist.jp/?feed=rss2&#038;p=5249</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iBeaconを動かしてみた</title>
		<link>https://hackist.jp/?p=2965</link>
		<comments>https://hackist.jp/?p=2965#comments</comments>
		<pubDate>Mon, 13 Jan 2014 18:43:12 +0000</pubDate>
		<dc:creator><![CDATA[HACKist]]></dc:creator>
				<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://hackist.jp/?p=2965</guid>
		<description><![CDATA[みなさん、こんにちは。 リアル連動大好き一階です。 &#160; アプリを起動すると周囲のBeaconを検知するアプリを作ってみました。 以下実装方法です。 １．CoreLcoationFrameworkを追加する。 ２ [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさん、こんにちは。<br />
リアル連動大好き一階です。<br />
&nbsp;<br />
アプリを起動すると周囲のBeaconを検知するアプリを作ってみました。<br />
以下実装方法です。</p>
<p><span id="more-2965"></span></p>
<p>１．CoreLcoationFrameworkを追加する。<br />
２．変数を定義して</p>
<pre class="brush: objc; title: ; notranslate">
@property (nonatomic, strong) CLLocationManager* locationManager;
@property (nonatomic, strong) NSUUID* proximityUUID;
@property (nonatomic, strong) CLBeaconRegion* beaconRegion;
NSString* beaconUUID = @&quot;XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&quot;;
</pre>
<p>※beaconUUIDは事前にEstimote社のサンプルプログラムを動かして取得<br />
&nbsp;<br />
３．viewDidLoadで測定開始</p>
<pre class="brush: objc; title: ; notranslate">
if ([CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]) {
	if( _locationManager == nil ) {
		_locationManager = [CLLocationManager new];
		_locationManager.delegate = self;
	}

	_proximityUUID = [[NSUUID alloc] initWithUUIDString:beaconUUID];
	_beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:_proximityUUID identifier:@&quot;EstimoteSampleRegion&quot;];
	[_locationManager startMonitoringForRegion:_beaconRegion];
	// 最初から範囲内にいるとイベントが走らないのでここで走らせておく。
	[_locationManager startRangingBeaconsInRegion:_beaconRegion];
}
</pre>
<p>※コメントにもありますが&#8221;startMonitoringForRegion&#8221;を呼び出すとBeaconの監視を開始しますが、この時に対象Beaconが既に近くにあると発見イベントが通知されない仕様になっているので、即Beaconとの距離測定を開始しています。<br />
※<a href="http://brightechno.com/blog/archives/220">このBlog</a>によれば上記呼び出し方は誤りとのことなのですが、Blog記載の方法では検知を開始しなかったのでとりあえず修正していません。<br />
※EstimoteのBeacon全てを対象にしているのでinitWithProximityUUIDにmajorやminorを指定していません。<br />
&nbsp;<br />
４．Beacon発見/ロストイベント</p>
<pre class="brush: objc; title: ; notranslate">
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
</pre>
<p>※Beaconが見つかると&#8221;didRangeBeacons&#8221;が、Beaconを全て見失うと&#8221;didExitRegion&#8221;が呼び出されます。<br />
※&#8221;didRangeBeacons&#8221;の(NSArray *)beaconsには、Frameworkが近いBeaconから順番にセットしてくれているので、自前で距離計算をする必要はありません。<br />
&nbsp;<br />
５．Beaconの情報に応じた処理</p>
<pre class="brush: objc; title: ; notranslate">
for (CLBeacon* clBeacon in beacons) {
	NSUUID* beaconUUID = clBeacon.proximityUUID;
	NSString *uuid= beaconUUID.UUIDString;
	NSString* proximityString = nil;
	switch (clBeacon.proximity)
	{
		case CLProximityUnknown:
			proximityString = @&quot;Unknown&quot;;
			break;
		case CLProximityImmediate:
			proximityString = @&quot;Immediate&quot;;
			break;
		case CLProximityNear:
			proximityString = @&quot;Near&quot;;
			break;
		case CLProximityFar:
			proximityString = @&quot;Far&quot;;
			break;
		default:
			break;
	}

	NSInteger major = [clBeacon.major integerValue];
	if( major == AQUABLUE_BEACON_ID ) {
		NSLog(@&quot;aquaBlue:promixity: %@&quot;, proximityString);
	} else if( major == BLUE_BEACON_ID ) {
		NSLog(@&quot;blue:promixity: %@&quot;, proximityString);
	｝else if( major == LIGHTGREEN_BEACON_ID ) {
		NSLog(@&quot;lightGreen:promixity: %@&quot;, proximityString);
	}
}
</pre>
<p>※EstimoteのBeaconは３色全てmajorの値が異なるので、majorの値を元に３色を識別しています。<br />
※majorの値は事前に端末に３色それぞれを近接させて取得しました。<br />
&nbsp;<br />
６．ログ出力</p>
<pre class="brush: objc; title: ; notranslate">
for (CLBeacon* clBeacon in beacons) {
	NSUUID* beaconUUID = clBeacon.proximityUUID;
	NSString *uuid= beaconUUID.UUIDString;
	NSString* proximityString = nil;
	switch (clBeacon.proximity)
	{
	    case CLProximityUnknown:
	        proximityString = @&quot;Unknown&quot;;
	        break;
	    case CLProximityImmediate:
	        proximityString = @&quot;Immediate&quot;;
	        break;
	    case CLProximityNear:
	        proximityString = @&quot;Near&quot;;
	        break;
	    case CLProximityFar:
	        proximityString = @&quot;Far&quot;;
	        break;
	        
	    default:
	        break;
	}
	NSMutableString* messageString = [NSMutableString string];
	[messageString appendString:proximityString];

	NSString* workString = nil;
	[messageString appendString:@&quot;/&quot;];
	[messageString appendString:@&quot;uuid:&quot;];
	[messageString appendString:uuid];
	[messageString appendString:@&quot;/&quot;];
	[messageString appendString:@&quot;major:&quot;];
	[messageString appendString:[clBeacon.major stringValue]];
	[messageString appendString:@&quot;/&quot;];
	[messageString appendString:@&quot;minor:&quot;];
	[messageString appendString:[clBeacon.minor stringValue]];
	[messageString appendString:@&quot;/&quot;];
	[messageString appendString:@&quot;accuracy:&quot;];
	workString = [NSString stringWithFormat:@&quot;%g&quot;, clBeacon.accuracy ];
	[messageString appendString:workString];
	[messageString appendString:@&quot;/&quot;];
	[messageString appendString:@&quot;rssi:&quot;];
	workString = [NSString stringWithFormat:@&quot;%ld&quot;, clBeacon.rssi ];
	[messageString appendString:workString];

	NSLog(@&quot;%@&quot;, messageString);
}
</pre>
<p>一応参考までに。<br />
&nbsp;<br />
意外と簡単に扱うことが出来ます。</p>
]]></content:encoded>
			<wfw:commentRss>https://hackist.jp/?feed=rss2&#038;p=2965</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iBeaconの仕様</title>
		<link>https://hackist.jp/?p=2956</link>
		<comments>https://hackist.jp/?p=2956#comments</comments>
		<pubDate>Fri, 10 Jan 2014 06:17:27 +0000</pubDate>
		<dc:creator><![CDATA[HACKist]]></dc:creator>
				<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://hackist.jp/?p=2956</guid>
		<description><![CDATA[みなさん、こんにちは。 リアル連動大好き一階です。 &#160; 実際に動かす前にiBeaconの仕様をおさらいしておきます。 １．iBeaconとは 　AppleがiOS7で搭載した、BluetoothLowEnerg [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさん、こんにちは。<br />
リアル連動大好き一階です。<br />
&nbsp;<br />
実際に動かす前にiBeaconの仕様をおさらいしておきます。</p>
<p><span id="more-2956"></span></p>
<p>１．iBeaconとは<br />
　AppleがiOS7で搭載した、BluetoothLowEnergy規格に準拠したBeaconを利用するための技術です。<br />
　Beaconは2秒間に1回の程度の発信ならボタン電池1個で5年は軽く持つと言われているので、一度設置したら当分放っておいても大丈夫な便利デバイスです。<br />
&nbsp;<br />
２．Beaconの識別情報<br />
　Beaconは個体識別を行うために３つのパラメータを持っています。<br />
　（１）proximityUUID<br />
　　　いわゆる大区分。１つのアプリには20個まで登録可能。<br />
　（２）major<br />
　　　いわゆる中区分。大区分配下でBeaconをグループ分けする際に利用<br />
　（３）minor<br />
　　　いわゆる小区分。中区分配下でBeaconをグループ分けする際に利用。<br />
&nbsp;<br />
　重要なのは、これらの値はBeacon個体毎に個別の値を設定する必要がないということです。<br />
　とある外食産業の各店舗にBeaconを配置する際の設定方法を、利用シーンごとに書いてみます。<br />
　・店舗を識別せずに、単純にレジにだけBeaconを配置する場合<br />
　　proximityUUIDを全て同じに設定すればOK<br />
　・店舗を識別せずに、単純にレジとドリンクバーにBeaconを配置する場合<br />
　　proximityUUIDを全て同じにし、majorをレジとドリンクバーで別々に設定すればOK<br />
　・店舗を識別して、レジとドリンクバーにBeaconを配置する場合<br />
　　proximityUUIDを全て同じにし、majorの値を各店舗で別々に、minorをレジとドリンクバーで別々に設定すればOK<br />
&nbsp;<br />
　と、利用の仕方に応じてフレキシブルに設定出来ます。<br />
&nbsp;<br />
３．Beaconからの情報<br />
　Beaconを認識すると識別情報に加えて、以下３つの情報が来ます。<br />
　※認識したBeaconの情報はFramework側で自動的に近い順に並べてくれます。<br />
　（１）proximity<br />
　　　端末との距離で、近接/近い/遠い/不明の４種類で定義<br />
　（２）accuracy<br />
　　　正確さ？とりあえずは不要？<br />
　（３）rssi<br />
　　　電波受信強度。とりあえずは不要？<br />
&nbsp;<br />
　アプリケーション側はBeaconの識別情報と主にproximityの情報を利用して、来店回数を+1したり、お知らせを出したりします。</p>
]]></content:encoded>
			<wfw:commentRss>https://hackist.jp/?feed=rss2&#038;p=2956</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iBeaconが届いたのでいろいろ調べてみた</title>
		<link>https://hackist.jp/?p=3072</link>
		<comments>https://hackist.jp/?p=3072#comments</comments>
		<pubDate>Wed, 08 Jan 2014 04:09:25 +0000</pubDate>
		<dc:creator><![CDATA[HACKist]]></dc:creator>
				<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://hackist.jp/?p=3072</guid>
		<description><![CDATA[みなさん、こんにちは。 リアル連動大好き一階です。 &#160; 随分前に発注したEstimote社のBeaconがやっと来ました。 ちょっと遅くなりましたが、いろいろ軽く調べた事をメモがてらつらつら書いていきます。 ま [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://shiffon.info/blog/wp-content/uploads/2013/11/iBeacon.jpg"><img class="alignnone size-medium wp-image-159" src="http://shiffon.info/blog/wp-content/uploads/2013/11/iBeacon-300x168.jpg" alt="iBeacon" width="300" height="168" /></a></p>
<p>みなさん、こんにちは。<br />
リアル連動大好き一階です。<br />
&nbsp;<br />
随分前に発注した<a href="http://estimote.com/" target="_blank">Estimote社のBeacon</a>がやっと来ました。<br />
ちょっと遅くなりましたが、いろいろ軽く調べた事をメモがてらつらつら書いていきます。</p>
<p><span id="more-3072"></span><br />
まず、使い方。<br />
パッケージには使い方などが一切入っていません。<br />
どうやって電源を入れるのか？どうやってBeaconの情報（後述）を書き換えるのか？<br />
いろいろと分かりません。</p>
<p>とりあえず電源を入れないことには始まらないので、まずは電源の調査から。<br />
いろいろこねくり回したけど分からないので、さくっと割りました！<br />
<a href="http://shiffon.info/blog/wp-content/uploads/2013/11/7740bd659c24ff11af5d89dd61c91fea.jpg"><img class="alignnone size-medium wp-image-158" src="http://shiffon.info/blog/wp-content/uploads/2013/11/7740bd659c24ff11af5d89dd61c91fea-300x168.jpg" alt="iBeacon中身" width="300" height="168" /></a><br />
電池は工場出荷時から既にセットされていてすぐ使える状態でした。<br />
OFFにしたり電池を交換するときは割って中身を取り出さないと駄目なようです。<br />
・・・試験品のくせに面倒くさい。</p>
<p>次はBeaconの情報<br />
<a href="http://estimote.com/api/index.html" target="_blank">Estimate社のHP</a>からサンプルアプリのプロジェクトがDL出来るようになっているので、落としていろいろ見てみました。<br />
BeaconはEstimoteが提供しているライブラリ（サンプルアプリのプロジェクトから取り出して利用）を組み込むことで利用可能になり、情報はESTBeaconというクラスに格納されます。</p>
<pre class="brush: objc; title: ; notranslate">
/////////////////////////////////////////////////////
// bluetooth beacon available when used with
// startEstimoteBeaconsDiscoveryForRegion:
@property (nonatomic, strong)   CBPeripheral*           peripheral;
@property (nonatomic, strong)   NSString*               macAddress;
@property (nonatomic, strong)   NSNumber*               measuredPower;
@property (nonatomic, strong)   NSNumber*               major;
@property (nonatomic, strong)   NSNumber*               minor;
@property (nonatomic, strong)   NSNumber*               rssi;

/////////////////////////////////////////////////////
// properties filled when read characteristic
@property (nonatomic, strong)   NSNumber*               power;
@property (nonatomic, strong)   NSNumber*               frequency;
@property (nonatomic, strong)   NSNumber*               batteryLevel;
@property (nonatomic, strong)   NSString*               hardwareVersion;
@property (nonatomic, strong)   NSString*               firmwareVersion;

/////////////////////////////////////////////////////
// core location properties
@property (nonatomic, strong)   CLBeacon*               ibeacon;
@property (nonatomic, readonly)   BOOL                  isConnected;
</pre>
<p>ちなみにこのクラスのメンバにCLBeaconがあったので、普通のやり方で直接扱えるのではないかと思って試してみたら、扱えました。<br />
なので、特にEstimote社のライブラリを利用しなくても動きます。</p>
<p>実際の動かし方などは次回以降で。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://hackist.jp/?feed=rss2&#038;p=3072</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
