<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>クレコ &#187; iPhone</title>
	<atom:link href="http://creco.net/tag/iphone/feed/" rel="self" type="application/rss+xml" />
	<link>http://creco.net</link>
	<description>East or west, home is best.</description>
	<lastBuildDate>Fri, 27 Nov 2009 13:26:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://creco.net/tag/iphone/feed/" />
		<item>
		<title>iPhone OS 3.0 のブラウザから使えるようになったGPS現在位置情報をTwitterに投稿するJavaScript</title>
		<link>http://creco.net/2009/06/17/iphone-os-3_with_w3c_geolocation_api/</link>
		<comments>http://creco.net/2009/06/17/iphone-os-3_with_w3c_geolocation_api/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 13:09:47 +0000</pubDate>
		<dc:creator>inagaki</dc:creator>
				<category><![CDATA[作ってみた]]></category>
		<category><![CDATA[Geolocation]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[ジオポ]]></category>

		<guid isPermaLink="false">http://creco.net/2009/06/17/iphone-os-3_with_w3c_geolocation_api/</guid>
		<description><![CDATA[
Google Maps API V3 と Gears Geolocation API 使って Android のブラウザで現在位置情報を取得する &#124; クレコ では、Androidのブラウザで現在位置情報取得してTwit [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="iphone" border="0" alt="iphone" src="http://creco.net/wp-content/uploads/iphone.jpg" width="192" height="365" /></p>
<p><a href="http://creco.net/2009/06/11/google_maps_api_v3_with_gears_geolocation_api/">Google Maps API V3 と Gears Geolocation API 使って Android のブラウザで現在位置情報を取得する | クレコ</a> では、Androidのブラウザで現在位置情報取得してTwitterにポストするというJavaScriptを作りました。</p>
<p>今回は、それのiPhone版です。要 iPhone OS 3.0以上なので、まだアップデートされてない方は本日のアップデートを楽しみに待ちましょう。</p>
<p> <span id="more-573"></span><br />
<h3>iPhone OS 3.0 のブラウザ Mobile Safari でGPS現在位置情報が取得できるようになった</h3>
<h4>Mobile Safari の W3C Geolocation API 対応</h4>
<p><a href="http://lab.cirius.co.jp/blog/2009/06/-iphone-safari.php">ついに iPhone Safari ブラウザから位置情報を取得できるようになります &#8211; Cirius Lab. ブログ</a> から知ったのですが、iPhone OS 3.0 に標準搭載されているブラウザ Mobile Safari が W3C の Geolocation API に対応して、ブラウザから JavaScript を用いることによって、GPSの現在位置情報を取得することが可能になりました。</p>
<p>これによって、いままでネイティブアプリでしかできなかったことが、簡単に敷居なく実装することが可能です。</p>
<h4>W3CのGeolocation API って？</h4>
<p><a href="http://www.w3.org/TR/geolocation-API/">Geolocation API Specification</a>     <br />W3Cで標準化を進めている、位置情報を取得するためのAPI使用のことです。</p>
<p>位置情報を取得するメソッドには、<strong>getCurrentPosition()</strong> と <strong>watchPosition()</strong> があり、前者は現在の位置情報を取得するメソッド、後者は連続した位置情報を取得するメソッドとなっています。</p>
<p>つまり、従来の携帯電話ではできなかった、連続した位置情報を扱うGPSトラッキングなどもJavaScriptを記述するだけで実現できるのです！</p>
<h3>実際に現在位置情報をTwitterへポストするJavaScriptを作ってみた</h3>
<h4>JavaScript ソース</h4>
<pre class="csharpcode">&lt;html&gt;
&lt;head&gt;
&lt;meta name=<span class="str">&quot;viewport&quot;</span> content=<span class="str">&quot;initial-scale=1.0, user-scalable=no&quot;</span> /&gt;
&lt;meta http-equiv=<span class="str">&quot;content-type&quot;</span> content=<span class="str">&quot;text/html; charset=UTF-8&quot;</span>/&gt;
&lt;title&gt;GeoPo : Mobile Safari&lt;/title&gt;
&lt;script type=<span class="str">&quot;text/javascript&quot;</span> src=<span class="str">&quot;http://maps.google.com/maps/api/js?sensor=true&quot;</span>&gt;&lt;/script&gt;
&lt;script type=<span class="str">&quot;text/javascript&quot;</span>&gt;

<span class="rem">/*</span>
<span class="rem"> * GeoPo Encode in JavaScript</span>
<span class="rem"> * @author : Shintaro Inagaki</span>
<span class="rem"> * @param location (Object)</span>
<span class="rem"> * @return geopo (String)</span>
<span class="rem"> */</span>
<span class="kwrd">function</span> geopoEncode(location){
    <span class="rem">// 64characters (number + big and small letter + hyphen + underscore)</span>
    <span class="kwrd">var</span> chars = <span class="str">&quot;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_&quot;</span>;

    <span class="kwrd">var</span> geopo = <span class="kwrd">new</span> String();
    <span class="kwrd">var</span> lat = parseFloat(location.lat); <span class="rem">// Parse as float</span>
    <span class="kwrd">var</span> lng = parseFloat(location.lng); <span class="rem">// Parse as float</span>
    <span class="kwrd">var</span> scale = parseInt(location.scale); <span class="rem">// Parse as int</span>

    <span class="rem">// Change a degree measure to a decimal number</span>
    lat = (lat + 90) / 180 * Math.pow(8, 10);
    lng = (lng + 180) / 360 * Math.pow(8, 10);

    <span class="rem">// Compute a GeoPo code from head and concatenate</span>
    <span class="kwrd">for</span>(<span class="kwrd">var</span> i = 0; i &lt; scale; i++) {
        geopo = geopo + chars.substr(Math.floor(lat / Math.pow(8, 9 - i) % 8) + Math.floor(lng / Math.pow(8, 9 - i) % 8) * 8, 1);
    }
    <span class="kwrd">return</span> geopo;
}

<span class="kwrd">var</span> lat;
<span class="kwrd">var</span> lng;
<span class="kwrd">var</span> latLng;
<span class="kwrd">var</span> geocoder = <span class="kwrd">new</span> google.maps.Geocoder();
<span class="kwrd">var</span> map;
<span class="kwrd">var</span> infowindow = <span class="kwrd">new</span> google.maps.InfoWindow();
<span class="kwrd">var</span> marker;
<span class="kwrd">var</span> watchId;

<span class="kwrd">function</span> update(position) {
    lat = position.coords.latitude;
    lng = position.coords.longitude;
    latLng = <span class="kwrd">new</span> google.maps.LatLng(lat,lng);

    <span class="kwrd">if</span>(!map){
        <span class="kwrd">var</span> options = {
            zoom: 15,
            center: latLng,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            scaleControl: <span class="kwrd">true</span>,
        }
        map = <span class="kwrd">new</span> google.maps.Map(document.getElementById(<span class="str">&quot;map_canvas&quot;</span>), options);
    } <span class="kwrd">else</span>{
        map.set_center(latLng);
    }

    <span class="kwrd">if</span>(!marker){
        marker = <span class="kwrd">new</span> google.maps.Marker({
            position: latLng,
            map: map,
            title: <span class="str">&quot;現在地&quot;</span>,
        });
        google.maps.<span class="kwrd">event</span>.addListener(marker, <span class="str">'click'</span>, <span class="kwrd">function</span>() {
            stopUpdate()
            geocoding();
        });
        google.maps.<span class="kwrd">event</span>.addListener(infowindow, <span class="str">'closeclick'</span>, <span class="kwrd">function</span>() {
            startUpdate()
        });
    } <span class="kwrd">else</span>{
        marker.set_position(latLng);
    }
}

<span class="kwrd">function</span> geocoding() {
    <span class="rem">// geopo</span>
    <span class="kwrd">var</span> location = <span class="kwrd">new</span> Object();
    location.lat = lat;
    location.lng = lng;
    location.scale = 7;
    <span class="kwrd">var</span> geopo = geopoEncode(location);

    geocoder.geocode({<span class="str">'latLng'</span>: latLng}, <span class="kwrd">function</span>(results, status) {
        <span class="kwrd">if</span> (status == google.maps.GeocoderStatus.OK) {
            <span class="kwrd">var</span> geocodeAddress;
            <span class="kwrd">for</span>(i=1; i&lt;results.length; i++){
                <span class="kwrd">if</span> (results[i].types.length &gt;= 2 &amp;&amp; results[i].types[1] == <span class="str">&quot;political&quot;</span>) {
                    <span class="kwrd">if</span>(results[i].formatted_address.indexOf(<span class="str">&quot;日本&quot;</span>) != -1){
                        geocodeAddress = results[i].formatted_address.substring(2);
                    }<span class="kwrd">else</span>{
                        geocodeAddress = results[i].formatted_address;
                    }
                    <span class="kwrd">break</span>;
                }
            }
            <span class="kwrd">if</span>(geocodeAddress){
                infowindow.set_content(<span class="str">'&lt;strong&gt;現在地：&lt;/strong&gt;&lt;br /&gt;&lt;span style=&quot;font-size:80%&quot;&gt;'</span> + geocodeAddress + <span class="str">'&lt;/span&gt;&lt;hr /&gt;&lt;a href=&quot;http://twitter.com/home?status='</span> + encodeURIComponent(<span class="str">' L:'</span> + geocodeAddress + <span class="str">' http://geopo.at/'</span> + geopo) + <span class="str">'&quot; target=&quot;twitter&quot;&gt;&lt;img src=&quot;icon_twitter.gif&quot; width=&quot;14&quot; height=&quot;16&quot; border=&quot;0&quot; align=&quot;bottom&quot; hspace=&quot;5&quot; /&gt;TwitterにPOSTする&lt;/a&gt;'</span>);
                infowindow.open(map, marker);
            } <span class="kwrd">else</span> {
                alert(<span class="str">&quot;現在地が取得できませんでした＞＜&quot;</span>);
            }
        } <span class="kwrd">else</span> {
            alert(<span class="str">&quot;Geocoder failed due to: &quot;</span> + status);
        }
    });
}

<span class="kwrd">function</span> startUpdate() {
    watchId = navigator.geolocation.watchPosition(update);
}

<span class="kwrd">function</span> stopUpdate() {
    navigator.geolocation.clearWatch(watchId);
}

startUpdate();

&lt;/script&gt;
&lt;/head&gt;
&lt;body style=<span class="str">&quot;margin:0px; padding:0px;&quot;</span>&gt;
&lt;div id=<span class="str">&quot;map_canvas&quot;</span> style=<span class="str">&quot;width: 100%; height: 100%;&quot;</span>&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h4>前回の数倍丁寧に解説<br />
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
</h4>
<p>前回のAndroid版では説明が省略されすぎて、説明になってなかった反省を踏まえて丁寧に解説。</p>
<h5>HTML</h5>
<p>前回と同様、<a href="http://code.google.com/intl/ja/apis/maps/documentation/v3/">Google Maps API V3</a> を使います。</p>
<pre class="csharpcode">&lt;meta name=<span class="str">&quot;viewport&quot;</span> content=<span class="str">&quot;initial-scale=1.0, user-scalable=no&quot;</span> /&gt;</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>これは、iPhoneのためのmeta要素です。地図上でピンチイン、ピンチアウトを使った拡大縮小できるように、<strong>user-scalable</strong>はnoにして、HTMLでの拡大縮小はできなくしてます。</p>
<pre class="csharpcode">&lt;script type=<span class="str">&quot;text/javascript&quot;</span> src=<span class="str">&quot;http://maps.google.com/maps/api/js?sensor=true&quot;</span>&gt;&lt;/script&gt;</pre>
<p>Google Maps API V3のJavaScript読み込みですが、位置情報を取得できるデバイスでは<strong>sensor</strong>パラメータをtrueにします。</p>
<pre class="csharpcode">&lt;body style=<span class="str">&quot;margin:0px; padding:0px;&quot;</span>&gt;
&lt;div id=<span class="str">&quot;map_canvas&quot;</span> style=<span class="str">&quot;width: 100%; height: 100%;&quot;</span>&gt;&lt;/div&gt;
&lt;/body&gt;</pre>
<p>divタグで地図を表示する領域を作成、めいっぱいにするため、縦横100%にし、bodyタグでは余白をなしにするCSS。</p>
<p>うん、丁寧な説明ですね。</p>
<h5>GeoPoエンコードライブラリ</h5>
<p><a href="http://geopo.at/">ジオポ &#8211; 位置情報を短縮して使いやすく</a></p>
<p><strong>GeoPo</strong>（ジオポ）というのは、私が作成したWebサービスで。</p>
<blockquote>
<p>ジオポは位置情報を表す緯度・経度を短縮したURLに変換し、受け取る側のブラウザに合わせた地図を表示するウェブサービスで、会員登録なしに誰でも無料で利用できます。</p>
</blockquote>
<p>という、Twitterに位置情報を付加したいときに使うといいよ！的なサービス。詳しくは、<a href="http://geopo.at/intl/ja/help/feature.html">ジオポの特徴</a> や <a href="http://geopo.at/intl/ja/developer/">開発者向け情報</a> を見てね。よかったら、実装してください。</p>
<p>ソース上では、</p>
<pre class="csharpcode"><span class="rem">/*</span>
<span class="rem"> * GeoPo Encode in JavaScript</span>
<span class="rem"> * @author : Shintaro Inagaki</span>
<span class="rem"> * @param location (Object)</span>
<span class="rem"> * @return geopo (String)</span>
<span class="rem"> */</span>
<span class="kwrd">function</span> geopoEncode(location){
    <span class="rem">// 64characters (number + big and small letter + hyphen + underscore)</span>
    <span class="kwrd">var</span> chars = <span class="str">&quot;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_&quot;</span>;

    <span class="kwrd">var</span> geopo = <span class="kwrd">new</span> String();
    <span class="kwrd">var</span> lat = parseFloat(location.lat); <span class="rem">// Parse as float</span>
    <span class="kwrd">var</span> lng = parseFloat(location.lng); <span class="rem">// Parse as float</span>
    <span class="kwrd">var</span> scale = parseInt(location.scale); <span class="rem">// Parse as int</span>

    <span class="rem">// Change a degree measure to a decimal number</span>
    lat = (lat + 90) / 180 * Math.pow(8, 10);
    lng = (lng + 180) / 360 * Math.pow(8, 10);

    <span class="rem">// Compute a GeoPo code from head and concatenate</span>
    <span class="kwrd">for</span>(<span class="kwrd">var</span> i = 0; i &lt; scale; i++) {
        geopo = geopo + chars.substr(Math.floor(lat / Math.pow(8, 9 - i) % 8) + Math.floor(lng / Math.pow(8, 9 - i) % 8) * 8, 1);
    }
    <span class="kwrd">return</span> geopo;
}
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
</pre>
<p>という GeoPoエンコード ライブラリ部分と、</p>
<pre class="csharpcode">    <span class="rem">// geopo</span>
    <span class="kwrd">var</span> location = <span class="kwrd">new</span> Object();
    location.lat = lat;
    location.lng = lng;
    location.scale = 7;
    <span class="kwrd">var</span> geopo = geopoEncode(location);</pre>
<p>呼び出し部分。</p>
<p>lat：緯度、lng：経度、scale：縮尺を渡して、geopoというジオポコードの文字列が返ってくる。</p>
<h5>位置情報の取得制御<br />
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
</h5>
<p>W3CのGeolocation APIを使って、現在位置情報を取得する。</p>
<pre class="csharpcode"><span class="kwrd">function</span> startUpdate() {
    watchId = navigator.geolocation.watchPosition(update);
}

<span class="kwrd">function</span> stopUpdate() {
    navigator.geolocation.clearWatch(watchId);
}

startUpdate();</pre>
<p>ここでは、watchPosition() を使う。というのも、iPhoneでは getCurrentPosition() がうまく動かなかった。また、最初の1回だけの位置情報取得では位置情報の精度がかなり荒いので、連続して取得し精度が高くなった段階で、その位置情報を採用するという形にしたかったというのもある。</p>
<p>ここで、startUpdate() と stopUpdate() とわざわざ関数にしているのは、後々に取得動作の制御したいためです。</p>
<h5>位置情報の加工と地図の表示</h5>
<p>位置情報が取得できたときに呼ばれる update() では、位置情報を加工して、地図を表示するようにします。</p>
<pre class="csharpcode"><span class="kwrd">var</span> lat;
<span class="kwrd">var</span> lng;
<span class="kwrd">var</span> latLng;
<span class="kwrd">var</span> geocoder = <span class="kwrd">new</span> google.maps.Geocoder();
<span class="kwrd">var</span> map;
<span class="kwrd">var</span> infowindow = <span class="kwrd">new</span> google.maps.InfoWindow();
<span class="kwrd">var</span> marker;
<span class="kwrd">var</span> watchId;

<span class="kwrd">function</span> update(position) {
    lat = position.coords.latitude;
    lng = position.coords.longitude;
    latLng = <span class="kwrd">new</span> google.maps.LatLng(lat,lng);

    <span class="kwrd">if</span>(!map){
        <span class="kwrd">var</span> options = {
            zoom: 15,
            center: latLng,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            scaleControl: <span class="kwrd">true</span>,
        }
        map = <span class="kwrd">new</span> google.maps.Map(document.getElementById(<span class="str">&quot;map_canvas&quot;</span>), options);
    } <span class="kwrd">else</span>{
        map.set_center(latLng);
    }

    <span class="kwrd">if</span>(!marker){
        marker = <span class="kwrd">new</span> google.maps.Marker({
            position: latLng,
            map: map,
            title: <span class="str">&quot;現在地&quot;</span>,
        });
        google.maps.<span class="kwrd">event</span>.addListener(marker, <span class="str">'click'</span>, <span class="kwrd">function</span>() {
            stopUpdate()
            geocoding();
        });
        google.maps.<span class="kwrd">event</span>.addListener(infowindow, <span class="str">'closeclick'</span>, <span class="kwrd">function</span>() {
            startUpdate()
        });
    } <span class="kwrd">else</span>{
        marker.set_position(latLng);
    }
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>position.coords.latitude には緯度、 position.coords.longitude には経度</p>
<blockquote>
<pre>  interface <dfn>Coordinates</dfn> {
    readonly attribute double <a href="http://www.w3.org/TR/geolocation-API/#lat">latitude</a>;
    readonly attribute double <a href="http://www.w3.org/TR/geolocation-API/#lon">longitude</a>;
    readonly attribute double <a href="http://www.w3.org/TR/geolocation-API/#altitude">altitude</a>;
    readonly attribute double <a href="http://www.w3.org/TR/geolocation-API/#accuracy">accuracy</a>;
    readonly attribute double <a href="http://www.w3.org/TR/geolocation-API/#altitude-accuracy">altitudeAccuracy</a>;
    readonly attribute double <a href="http://www.w3.org/TR/geolocation-API/#heading">heading</a>;
    readonly attribute double <a href="http://www.w3.org/TR/geolocation-API/#speed">speed</a>;
  };</pre>
</blockquote>
<p>他にも、altitude：高度、accuracy：水平方向の精度、altitudeAccuracy：垂直方向の精度、heading：方向、speed：速度 といった属性があります。iPhone 3G S では、コンパスによって方向なども取得できるかもしれません。iPhone 3Gでは、方向には null値、速度には 0 が入るようです。</p>
<p>map や marker は、初回はインスタンスを生成し、2回目以降の呼び出しでは地図は中心地への移動、マーカーは位置情報取得値への書き換えを行います。</p>
<p>marker の初回で、イベントリスナーを作成。上のイベントは、マーカーをクリックしたら位置情報取得動作を止めて情報ウィンドウ（ geocoding() で現在位置の住所やTwitterへポストするアンカーを記載）の表示、下のイベントは、情報ウィンドウを閉じたら位置情報取得動作の再開。</p>
<p>ここで、位置情報の取得動作を操作してるのには次の理由があります。</p>
<ol>
<li>情報ウィンドウが表示されるときに、位置情報が更新されて地図表示が移動されたりすると使い勝手が悪い。 </li>
<li>位置情報の取得のたびに情報ウィンドウの中身を更新すると大変（逆ジオコーディングとか）。 </li>
</ol>
<h5>情報ウィンドウの更新（逆ジオコーディング）</h5>
<p>現在位置の住所取得（逆ジオコーディング）とジオポコードの作成、Twitterへポストするためのアンカーを情報ウィンドウの中に書き込むための処理を geocoding() でやります。</p>
<pre class="csharpcode"><span class="kwrd">function</span> geocoding() {
    <span class="rem">// geopo</span>
    <span class="kwrd">var</span> location = <span class="kwrd">new</span> Object();
    location.lat = lat;
    location.lng = lng;
    location.scale = 7;
    <span class="kwrd">var</span> geopo = geopoEncode(location);

    geocoder.geocode({<span class="str">'latLng'</span>: latLng}, <span class="kwrd">function</span>(results, status) {
        <span class="kwrd">if</span> (status == google.maps.GeocoderStatus.OK) {
            <span class="kwrd">var</span> geocodeAddress;
            <span class="kwrd">for</span>(i=1; i&lt;results.length; i++){
                <span class="kwrd">if</span> (results[i].types.length &gt;= 2 &amp;&amp; results[i].types[1] == <span class="str">&quot;political&quot;</span>) {
                    <span class="kwrd">if</span>(results[i].formatted_address.indexOf(<span class="str">&quot;日本&quot;</span>) != -1){
                        geocodeAddress = results[i].formatted_address.substring(2);
                    }<span class="kwrd">else</span>{
                        geocodeAddress = results[i].formatted_address;
                    }
                    <span class="kwrd">break</span>;
                }
            }
            <span class="kwrd">if</span>(geocodeAddress){
                infowindow.set_content(<span class="str">'&lt;strong&gt;現在地：&lt;/strong&gt;&lt;br /&gt;&lt;span style=&quot;font-size:80%&quot;&gt;'</span> + geocodeAddress + <span class="str">'&lt;/span&gt;&lt;hr /&gt;&lt;a href=&quot;http://twitter.com/home?status='</span> + encodeURIComponent(<span class="str">' L:'</span> + geocodeAddress + <span class="str">' http://geopo.at/'</span> + geopo) + <span class="str">'&quot; target=&quot;twitter&quot;&gt;&lt;img src=&quot;icon_twitter.gif&quot; width=&quot;14&quot; height=&quot;16&quot; border=&quot;0&quot; align=&quot;bottom&quot; hspace=&quot;5&quot; /&gt;TwitterにPOSTする&lt;/a&gt;'</span>);
                infowindow.open(map, marker);
            } <span class="kwrd">else</span> {
                alert(<span class="str">&quot;現在地が取得できませんでした＞＜&quot;</span>);
            }
        } <span class="kwrd">else</span> {
            alert(<span class="str">&quot;Geocoder failed due to: &quot;</span> + status);
        }
    });
}</pre>
<p>前回のAndroid版とほぼ同じです（多少変えたってこと）。</p>
<p>逆ジオコーディングした結果で、郵便番号や道路名ってのをフィルタリングし、formatted_address には「日本」という文字が入るのが気にくわないので、「日本」を取り除いてやる。という内容。</p>
<h4>実装して iPhone OS 3.0 で動作させてみる</h4>
<p>実際に動作させてみる。</p>
<p><a href="http://inagaki.co.uk/test/safari.html">GeoPo : Mobile Safari</a> ＠inagaki.co.uk に作ったものをおいたので、自由に試してみてください。ソースコードも自由に使ってください。</p>
<h5>iPhoneでの位置情報利用の確認</h5>
<p><a href="http://creco.net/wp-content/uploads/1.jpg" rel="lightbox[573]"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1" border="0" alt="1" src="http://creco.net/wp-content/uploads/1_thumb.jpg" width="162" height="242" /></a> <a href="http://creco.net/wp-content/uploads/2.jpg" rel="lightbox[573]"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="2" border="0" alt="2" src="http://creco.net/wp-content/uploads/2_thumb.jpg" width="162" height="242" /></a> </p>
<p>初回のみSafariでの位置情報利用と、ドメイン単位での位置情報利用の確認があります。<br />
  <br />#これ、ドメイン単位の位置情報利用確認ってリセットする方法あるんですかね？</p>
<h5>地図と情報ウィンドウの表示</h5>
<p><a href="http://creco.net/wp-content/uploads/3.jpg" rel="lightbox[573]"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="3" border="0" alt="3" src="http://creco.net/wp-content/uploads/3_thumb.jpg" width="162" height="242" /></a> <a href="http://creco.net/wp-content/uploads/4.jpg" rel="lightbox[573]"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="4" border="0" alt="4" src="http://creco.net/wp-content/uploads/4_thumb.jpg" width="162" height="242" /></a> </p>
<p>ブックマークなどからURLを読み出せば、そのまま現在位置を取得して地図を表示するという一連の動作ができます。</p>
<p>そして、この地図はスマートフォンに最適化された Google Maps API V3 で作成していますので、まるでネイティブアプリのような感覚でシームレスなスクロールが可能。</p>
<p>マーカーをクリックすることで、情報ウィンドウを表示。このときに、位置情報取得動作をストップさせて、逆ジオコーディングを行い住所を取得。</p>
<p>住所表示の下にある、アンカーをクリックすることで別ウィンドウが立ち上がりTwitterへ現在地情報のついたポストが行えます。</p>
<p>情報ウィンドウの右上の×印をクリックすれば、情報ウィンドウは非表示になり、位置情報取得取得動作を再開させます。現在地が移動した場合はリロードしなくても、情報ウィンドウの開閉だけで位置情報取得のコントロールができます。</p>
<h5>Twitterへ現在地情報の投稿</h5>
<p><a href="http://creco.net/wp-content/uploads/5.jpg" rel="lightbox[573]"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="5" border="0" alt="5" src="http://creco.net/wp-content/uploads/5_thumb.jpg" width="162" height="242" /></a> <a href="http://creco.net/wp-content/uploads/6.jpg" rel="lightbox[573]"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="6" border="0" alt="6" src="http://creco.net/wp-content/uploads/6_thumb.jpg" width="162" height="242" /></a> </p>
<p>アンカーをクリックするとTwitterの投稿のために新しいウィンドウが立ち上がります。このときに、Twitterへログインされてない場合は、ログイン画面となるので、ログインを行ってください。</p>
<p>また、iPhoneからTwitterを使用する場合、デフォルトではモバイル版の画面表示となっています。しかし、モバイル版の画面表示ですと、アンカーをクリックした際に伝える住所やジオポURLが反映されないので、ページ下部にある「スタンダード版で見る」をクリックし、スタンダード版でTwitterを表示させてください。<br />
  <br />#これ、回避方法を知ってる方いましたら教えてください</p>
<p>スタンダード版では、いまなにしてる？のテキストエリアの中に、住所とジオポURLが反映されている状態となります。そこから、メッセージを加えたり、<a href="http://geopo.at/intl/ja/help/feature.html">ジオポURLの縮尺精度変更操作</a>を行うことができます。</p>
<h3>感想、まとまらないまとめ</h3>
<p>連続した位置情報が取得できるのは熱いですね！！でも、iPhoneも熱くなります ＞＜<br />
  <br />位置情報を連続取得させるのは非常にバッテリーを消費します、ほどほどにしましょう。</p>
<p>今までGPSロガーなどがないとGPSトラッキングできなかったのですが、それがJavaScriptだけで実現できるのは魅力的です。私もiPhone単体でできるGPSトラッキングサービスを早速作りたいと思っていますよ。</p>
<p>また、すでにあるGPSトラッキングサービスでも簡単（上のソースを数行いじるだけ）に実現できるので、<a href="http://imakoko-gps.appspot.com/">今ココなう！(β)</a> などの人気のあるサービスが対応すれば一気に対応端末が増えるようになるんじゃないでしょうか？位置情報を使うことの面白さがいろんな人に伝わってくれるとうれしいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://creco.net/2009/06/17/iphone-os-3_with_w3c_geolocation_api/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://creco.net/2009/06/17/iphone-os-3_with_w3c_geolocation_api/" />
	</item>
		<item>
		<title>App Store10億ダウンロード達成したね</title>
		<link>http://creco.net/2009/04/26/app_store_billion_download/</link>
		<comments>http://creco.net/2009/04/26/app_store_billion_download/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 10:55:23 +0000</pubDate>
		<dc:creator>inagaki</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://creco.net/2009/04/26/app_store_billion_download/</guid>
		<description><![CDATA[ 
って今さらなことなんだけど。24日の早朝5時30分ごろに達成。
http://creco.net/wp-content/uploads/countdown.txt
にcronでcountdown.txtを取得していた [...]]]></description>
			<content:encoded><![CDATA[<p><img title="Ci090426192221" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="243" alt="Ci090426192221" src="http://creco.net/wp-content/uploads/ci090426192221.jpg" width="424" border="0" /> </p>
<p>って今さらなことなんだけど。24日の早朝5時30分ごろに達成。</p>
<p><a href="http://creco.net/wp-content/uploads/countdown.txt">http://creco.net/wp-content/uploads/countdown.txt</a></p>
<p>にcronでcountdown.txtを取得していたのをうｐしたので、ご自由にご利用ください。</p>
<p> <span id="more-524"></span>
<p>到達予想時間のスクリプトをJavaScriptで書いたんだけど、そういえばJSはクロスドメイン制限があったって思い出してPHPでcountdown.txtの取得ラッパーを書いてるうちに、JavaScriptが無意味なことに気付いて、PHPでスクリプト書きなおしてたあたりで、予想したって無意味じゃね？って思って、めんどくさくなって投げた。</p>
<p>結局、エクセルでcountdown.txtを処理させたほうが遥かに効率いいし、楽。</p>
<blockquote><p>wget -qO countdown-`date +\%Y\%m\%d-\%H`.txt http://www.apple.com/autopush/us/itunes/includes/countdown.txt</p>
</blockquote>
<p>当初の予想は、</p>
<blockquote><p>このペースだと現地時間の14時（日本時間 明日4時）くらいに確実に突破。ただ、加速つくと思うので2時くらいから様子みたほうがよさそう<a href="http://twitter.com/shinagaki/status/1592815298">6:16 PM Apr 23rd</a> from <a href="http://d.hatena.ne.jp/Kiri_Feather/20071121">Tween</a></p>
</blockquote>
<p>だったんだけど、意外に伸びなかったね（1日のダウンロード回数が3日前とくらべると減ってる）。</p>
<p>そのまま、たいした加速もなくゴール。10億ダウンロードおめでとう。</p>
<p>#10億DLの瞬間を撮ったという動画には突っ込みいれてはいけないのかな？</p>
]]></content:encoded>
			<wfw:commentRss>http://creco.net/2009/04/26/app_store_billion_download/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://creco.net/2009/04/26/app_store_billion_download/" />
	</item>
		<item>
		<title>iPhoneの位置ゲー、Parallel Kingdom AOGが面白い</title>
		<link>http://creco.net/2009/04/07/parallel_kingdom_is_locating_game_on_iphone/</link>
		<comments>http://creco.net/2009/04/07/parallel_kingdom_is_locating_game_on_iphone/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 10:17:41 +0000</pubDate>
		<dc:creator>inagaki</dc:creator>
				<category><![CDATA[レビュー]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Parallel Kingdom]]></category>
		<category><![CDATA[位置ゲー]]></category>

		<guid isPermaLink="false">http://creco.net/2009/04/07/parallel_kingdom_is_locating_game_on_iphone/</guid>
		<description><![CDATA[ 
ジオメディアサミットに影響されてか、位置ゲーを企画して作ってみたいなって思っていた矢先。iPhone向けの面白い位置ゲー「Parallel Kingdom AOG」が熱いのでご紹介。
アップルストアでお会いした後、T [...]]]></description>
			<content:encoded><![CDATA[<p><img title="20090407_pk_13" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="343" alt="20090407_pk_13" src="http://creco.net/wp-content/uploads/20090407-pk-13.jpg" width="291" border="0" /> </p>
<p>ジオメディアサミットに影響されてか、位置ゲーを企画して作ってみたいなって思っていた矢先。iPhone向けの面白い位置ゲー「<a href="http://click.linksynergy.com/fs-bin/click?id=Y1KYUHctP9k&amp;subid=0&amp;offerid=94348.1&amp;type=10&amp;tmpid=3910&amp;RD_PARM1=http%3A%2F%2Fitunes.apple.com%2FWebObjects%2FMZStore.woa%2Fwa%2FviewSoftware%3Fid%3D308407509%26mt%3D8">Parallel Kingdom AOG</a>」が熱いのでご紹介。</p>
<p>アップルストアでお会いした後、TwitterでFollowした<a href="http://www.macotakara.jp/">MACお宝鑑定団</a>のdanboさんと林信行さんのTL上で展開される楽しそうなやりとりが気になり、<a href="http://click.linksynergy.com/fs-bin/click?id=Y1KYUHctP9k&amp;subid=0&amp;offerid=94348.1&amp;type=10&amp;tmpid=3910&amp;RD_PARM1=http%3A%2F%2Fitunes.apple.com%2FWebObjects%2FMZStore.woa%2Fwa%2FviewSoftware%3Fid%3D308407509%26mt%3D8">Parallel Kingdom AOG</a>っていうiPhoneの無料ゲームアプリをダウンロードし、速攻でプレイしてみた。</p>
<p>他所ではMMORPGと紹介されているようだけど、このゲームはAoE系にある資材集めの要素もあり、ひとりで黙々とやっていても楽しい。そして、何よりGPS位置情報を使った現実世界とのマップ連動で、思わずニンマリしてしまうことしばしば。</p>
<p> <span id="more-348"></span><br />
<h4>はじめてのParallel Kingdom</h4>
<p>なにはともあれインストール。起動し、最初はアカウントを作ることになる。</p>
<p>メールアドレスや名前やパスワード。初期に訊かれたかどうかは覚えてないけど、Email notificationsはお知らせメールのオンオフ、SMS notificationsやPhone nomberは日本では無理なので無しでOK。</p>
<p>最初は親切にもチュートリアルから始まる。</p>
<p><img title="20090407_pk_14" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_14" src="http://creco.net/wp-content/uploads/20090407-pk-14.jpg" width="214" border="0" /> </p>
<p>基本的な操作、</p>
<ul>
<li>移動したい場所をダブルタップで移動</li>
<li>Stag（鹿）をタップしてAttack（攻撃）</li>
<li>Leather（革）をタップしてPickup（拾う）</li>
<li>Tree（木）に移動してHeal（回復）</li>
<li>TreeをタップしてChop Down（切り倒す）</li>
<li>Menu（メニュー）からBuild（建設）、Flag（旗）を選び、旗を立てる</li>
<li>FlagをタップしてVisit Location（その場所に訪れる）</li>
<li>Self（自分）をタップしてEnd Tutorial（チュートリアル終了）</li>
</ul>
<p>わかりやすい操作で誰でも簡単に覚えられる。</p>
<h4>メニューを見てみよう</h4>
<p><img title="20090407_pk_12" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_12" src="http://creco.net/wp-content/uploads/20090407-pk-12.jpg" width="214" border="0" /></p>
<p>まずはメニューを開いて、どんなコマンドがあるか把握しよう。</p>
<ul>
<li>Items（アイテム） &#8211; アイテムを使ったり、装備したり、捨てたり</li>
<li>Relocate（再測位） &#8211; GPS位置情報の更新。リアル場所を移動したときに使う。</li>
<li>Chat（チャット） &#8211; マップ上にいる人に向けてチャット。協力プレイ、トレード、招待など</li>
<li>Players（参加者） &#8211; 参加しているユーザーの情報、ランキング</li>
<li>Message/Invite（メッセージと招待） &#8211; 参加しているユーザーに向けてメッセージを送信。招待もできる</li>
<li>Inbox（受信箱） &#8211; メッセージやイベントの受信箱</li>
<li>Make（作成） &#8211; 材料を組み合わせてアイテムの作成</li>
<li>Build（建設） &#8211; 材料を組み合わせて旗や家の建設</li>
<li>Map（地図） &#8211; 地図に戻る</li>
<li>Setting（設定） &#8211; 設定</li>
</ul>
<p><img title="20090407_pk_4" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_4" src="http://creco.net/wp-content/uploads/20090407-pk-4.jpg" width="214" border="0" /></p>
<p>アイテム画面。アイテムを選択すると、アイテムに対するコマンドが出てくる。</p>
<p><img title="20090407_pk_11" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_11" src="http://creco.net/wp-content/uploads/20090407-pk-11.jpg" width="214" border="0" /><img title="20090407_pk_7" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_7" src="http://creco.net/wp-content/uploads/20090407-pk-7.jpg" width="214" border="0" /></p>
<p>チャットと参加者の画面。参加者の絞り込みはアクティブ・地域・全体から選べて、お金、旗の量でソートできる。</p>
<p><img title="20090407_pk_9" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_9" src="http://creco.net/wp-content/uploads/20090407-pk-9.jpg" width="214" border="0" /><img title="20090407_pk_8" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_8" src="http://creco.net/wp-content/uploads/20090407-pk-8.jpg" width="214" border="0" /></p>
<p>メッセージ、受信箱。</p>
<p><img title="20090407_pk_6" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_6" src="http://creco.net/wp-content/uploads/20090407-pk-6.jpg" width="214" border="0" /><img title="20090407_pk_5" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_5" src="http://creco.net/wp-content/uploads/20090407-pk-5.jpg" width="214" border="0" /></p>
<p>作成。Halvar’s ResinとRolly’s Serumはそれぞれ右の素材を集めれば作れる。   <br />建設。Flag（旗）とHouse（家）。Flagは自分のテリトリーを獲得できて、Houseは寝首をおそわれず安全に休憩できるみたい。</p>
<h4>まずは、近所に旗を立ててみよう</h4>
<h5>旗の材料を集める</h5>
<p><img title="20090407_pk_1" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_1" src="http://creco.net/wp-content/uploads/20090407-pk-1.jpg" width="214" border="0" /></p>
<p>旗の材料は、Leather（革）が3つとWood（木）が3つ。</p>
<p>LeatherはStag（鹿。上のスクリーンショットにいるモンスター）を狩って手に入れるのが一番いいだろう。近くのStagを倒し、Leatherを落とすのを拾う（落とさないときもあるよ）を繰り返して、3個ゲットする。</p>
<p>右下のゲージで表示されている体力が少なくなったら、Tree（木）の近くまで移動すれば自然に回復する。木は何種類もあるが、最初はDusk Tree（枯れている木。体力を奪う）には近づかないほうが無難。</p>
<p>Treeを手に入れるには木を切り落とす（Chop Down）必要がある。この時注意することとして、周りに怖い顔をしたTroll（トロール）がいないことを確認したほうがいい。なぜなら、木を切ったとたんにおそってくるからだ。</p>
<h5>旗を建設する</h5>
<p><img title="20090407_pk_3" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_3" src="http://creco.net/wp-content/uploads/20090407-pk-3.jpg" width="214" border="0" /></p>
<p>なんとか、LeatherとWoodを3つずつ手に入れたら、旗を立てたい場所へ移動する。</p>
<p>旗を立てる場所も戦略的に重要なんだけど、まずは自分の家の近所に立てておけばいいだろう。</p>
<p>メニューのBuild（建設）からFlag（旗）を選択。そうすると、旗の周りに円状に半透明で色づけされたエリアが広がり、自分のテリトリーの完成。</p>
<p>いろんな遊び方があるんだろうけど、基本は旗の数を競うゲームらしい。旗を立ててから、ようやくParallel Kingdomの泥沼試合ｗがはじまるので、まずは一本立ててみよう。</p>
<h4>泥沼試合って？</h4>
<p>上のスクリーンショットとしたのスクリーンショットを比較してもらいたい。</p>
<p><img title="20090407_pk_2" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="319" alt="20090407_pk_2" src="http://creco.net/wp-content/uploads/20090407-pk-2.jpg" width="214" border="0" /></p>
<p>実は、この場所には昨日まで僕が立てた旗があったんだけど、壊されて下のスクリーンショットみたいになっていた（神聖なナゴヤ球場のマウンドに旗を立てるとは ＞＜）。</p>
<p>そこで、オフィス周辺のエリアは死守したい僕は、ナゴヤ球場にあった旗を攻撃し、上のスクリーンショットのように旗を立てて、エリアを確保。</p>
<p>こんな泥仕合が毎日繰り返される ＞＜</p>
<p>もちろん、交渉して平和にエリアを分け合うのもありです。</p>
<h4>このゲームのおもしろさ</h4>
<p>ベースとなる狩猟・収拾→作成・建築→陣地の取り合いといったゲームがシンプルながら面白いのもあるけど、位置情報を利用したリアルとバーチャルの混ざり具合が上手くできてる。</p>
<p>というのも、ゲーム中のチャットで「中目黒のあたりに狼がいるから一緒に狩ろう」とか、リアルで会ったときに「桑名市は私のテリトリーなので旗を立てないでください」とか言われる。</p>
<p>僕は飽きっぽい性格なので、このゲームもすぐに飽きてしまうとは思うけど、地域でのコミュニケーションツール（攻撃的な人だと逆効果ｗ）と考えることもできるんじゃないかな。</p>
<p>iPhoneというデバイスを上手くいかしたこのゲーム。Android版もあるそうなので、お好きな方で是非ためしてみてください。</p>
<p><a href="http://www.parallelkingdom.com/home.shtml">Parallel Kingdom &#8211; GPS MMORPG for your cell phone</a>    <br />公式</p>
<p><a href="http://www.macotakara.jp/blog/index.php?ID=3076">リアルマップRPGゲームアプリ「Parallel Kingdom AOG」を試す － MACお宝鑑定団 blog（羅針盤）</a>    <br />danboさんの紹介</p>
<p><a href="http://www29.atwiki.jp/pk_aog/">Parallel Kingdom @Wiki – トップページ</a>    <br />2chのまとめWiki（モンスターと武器の相性は役に立つよ）</p>
]]></content:encoded>
			<wfw:commentRss>http://creco.net/2009/04/07/parallel_kingdom_is_locating_game_on_iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://creco.net/2009/04/07/parallel_kingdom_is_locating_game_on_iphone/" />
	</item>
		<item>
		<title>名古屋アップルストア栄でのiPhone開発者イベントに行ってきたよ</title>
		<link>http://creco.net/2009/04/05/iphone_dev_jp_event_at_apple_store_saka/</link>
		<comments>http://creco.net/2009/04/05/iphone_dev_jp_event_at_apple_store_saka/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 07:27:12 +0000</pubDate>
		<dc:creator>inagaki</dc:creator>
				<category><![CDATA[イベント・セミナー]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://creco.net/?p=291</guid>
		<description><![CDATA[ 
開催時間の20分前くらいに着いたのだけど、その時からほぼ満席。雨降り天気のなかでこの集客はすごい。林信行さんもポストされてたけど、イベントスペースはガラス越しに見える位置にあったので、通りを歩いてる人も立ち止まって覗 [...]]]></description>
			<content:encoded><![CDATA[<p><img title="20090406_apple_store" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="274" alt="20090406_apple_store" src="http://creco.net/wp-content/uploads/20090406-apple-store.jpg" width="424" border="0" /> </p>
<p>開催時間の20分前くらいに着いたのだけど、その時からほぼ満席。雨降り天気のなかでこの集客はすごい。<a href="http://nobi.cocolog-nifty.com/">林信行</a>さんもポストされてたけど、イベントスペースはガラス越しに見える位置にあったので、通りを歩いてる人も立ち止まって覗いてるほど。</p>
<p>林さんの基調講演から始まり、豪華なiPhoneアプリ開発者たちが直接プレゼンしてくれて、GClue佐々木さんのiPhoneSDKを使った10分iPhoneアプリ作成講座もありと、2時間ちょいオーバーのとても盛り上がるイベントとなった。</p>
<p>冒頭、林さんがTwitterのタグについて説明され、<a href="http://search.twitter.com/search?q=%23idj">#idj</a> にポストしろと煽るので、プレゼン聞きながらiPhone使って必死にポストｗ</p>
<p>リアルタイムでこういうことができるってのは、ほんとに面白い。iPhoneとTwitterは最高のコンビネーションだね。</p>
<h4>二次会</h4>
<p>場所を移して二次会。</p>
<p>アップルストアでは一般の方向けな情報が多かった面、こちらでは100％開発者向けといった感じ。アップルストアのスタッフがいたけど、ぶっちゃけ話もあって、興味津々な話題が多かった。</p>
<p>途中であった、iTunes Storeの問題やApp Sniperなどからブログでのアフィリエイトなど、まだまとめられた情報がないような気がするので、後でまとめページ作りますね。</p>
<h4>三次会</h4>
<p>酒の勢いで、何がなにやらｗ</p>
<p>iTSにアプリを登録すらしてない僕が、いろいろ偉そうな口たたいてごめんなさい。</p>
<p>Finger Pianoの和田さんに勝ちました！・・・ジャンケンで。それで、人気のアップルTシャツをいただく。やたー。</p>
<p><img title="20090406_apple_store_3" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="274" alt="20090406_apple_store_3" src="http://creco.net/wp-content/uploads/20090406-apple-store-3.jpg" width="424" border="0" /> </p>
<p>戦利品。iTunesソングカード3枚とTシャツ</p>
<h4>四次会</h4>
<p>記憶にないけど。サンソフトさんとPodCastのことについて話をできたのはよかった。</p>
<p><img title="20090406_apple_store_2" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="274" alt="20090406_apple_store_2" src="http://creco.net/wp-content/uploads/20090406-apple-store-2.jpg" width="424" border="0" /> </p>
<p>早く、名古屋でエアタグ打ちまくりたいな。</p>
<p><strong>追記</strong>：名刺切らして、交換できなくてごめんなさい。郵送でよければ、お送りしますので、メールでご連絡ください。それか、また会うときで。</p>
]]></content:encoded>
			<wfw:commentRss>http://creco.net/2009/04/05/iphone_dev_jp_event_at_apple_store_saka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://creco.net/2009/04/05/iphone_dev_jp_event_at_apple_store_saka/" />
	</item>
		<item>
		<title>GeoPo Twitterクライアントを自分用に作ってみた</title>
		<link>http://creco.net/2009/03/29/twiter_client_with_geopo_for_iphone/</link>
		<comments>http://creco.net/2009/03/29/twiter_client_with_geopo_for_iphone/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 08:56:01 +0000</pubDate>
		<dc:creator>inagaki</dc:creator>
				<category><![CDATA[作ってみた]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[ジオポ]]></category>

		<guid isPermaLink="false">http://creco.net/2009/03/29/twiter_client_with_geopo_for_iphone/</guid>
		<description><![CDATA[&#160; 
自分で使うためだけにGeoPoを付加できるiPhoneのTwitterクライアントを作ってみた。
NatsuLiphone 1.00のソースを公開しました &#8211; takuma104.log
gi [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="274" alt="20090329_geopotwitter" src="http://creco.net/wp-content/uploads/20090329-geopotwitter.jpg" width="424" border="0" />&#160; </p>
<p>自分で使うためだけに<a href="http://geopo.at/">GeoPo</a>を付加できるiPhoneのTwitterクライアントを作ってみた。</p>
<p><a href="http://d.hatena.ne.jp/takuma104/20081024/1224838928">NatsuLiphone 1.00のソースを公開しました &#8211; takuma104.log</a></p>
<p>githubで公開されているものを利用させていただいたので、僕は多少のUIとイベント、そしてジオポの符号化ソースを加えるだけ。とても有益なものを公開していただき、ありがとうございます。</p>
<p> <span id="more-243"></span><br />
<h4>Xcodeで実装</h4>
<h5>ジオポの符号化をコピペ</h5>
<p><a href="http://geopo.at/intl/ja/developer/sample_code.html#objective-c">ジオポ / 開発者向け情報</a> GeoPo符号化 サンプルコード in Objective-C</p>
<p>以前に作ったObjective-Cのサンプルコードをそのままコピペ。すげー、変な処理（無駄な）してると自覚してるコードなんだけど、誰からも突っ込みがないのでそのまま使う。この部分の効率を高めたとしても全体的な効率に貢献できるわけでもないしね（でも、突っ込み歓迎だよ）。</p>
<h5>UIのボタンを作る</h5>
<p>&#160;<img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="89" alt="20090329_geopotwitter_2" src="http://creco.net/wp-content/uploads/20090329-geopotwitter-2.jpg" width="324" border="0" /> </p>
<p>InterfaceBuilderで残り文字数とpostボタンの間にGeoPoボタンを入れる。んで、ビルドしてシミュレーターで確認するも反映されない ＞＜</p>
<p>どうやら、InterfaceBuilderのファイルがあるものの、UIはコードの中に埋め込まれていた。なので、コードでボタンを設置。ついでにイベントも。</p>
<h5>GeoPoボタンを押したときのイベントを作る</h5>
<ol>
<li>GeoPoボタンを押す</li>
<li>位置情報を取得</li>
<li>ジオポ符号化</li>
<li>「<a href="http://geopo.at/">http://geopo.at/</a>」に符号化したコードを加える</li>
<li>Tweetの本文に4.を加える</li>
</ol>
<p>以上のようなフローで処理を展開させる。</p>
<h5>位置情報を取得</h5>
<p><a href="http://www.gclue.com/top.html">GClue</a>の佐々木さんが作ったチュートリアルがわかりやすい。    <br /><a href="http://sites.google.com/a/gclue.jp/iphone-app-docs/iphoneapurinyuumon--gps">iPhoneアプリ入門(GPS) &#8206;(iPhone App Docs)&#8206;</a> GClue</p>
<p>ただ、このままだと位置情報をとり続けるので、位置情報を取得したあとは、</p>
<p>
<div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:857b00f0-0137-4621-9d19-ea75f6a3a4c3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre name="code" class="php">[locationManager stopUpdatingLocation];</pre>
</div>
<p>してください。</p>
<p>そのタイミングなんだけど、精度が高まるまでチェックするとか、何秒後とかいろいろやり方あると思うけど、めんどくさいから僕はupdateをcountして2回目を取るとか、適当すぎる作り。</p>
<h5>Tweetに反映</h5>
<p>これで、ボタンを押せばTweetのテキストにジオポURLが付け加えられるようになった。</p>
<p>位置情報を取得している間は、本来ならば、プログレスアイコン（処理中を示すぐるぐる回ってるアレ）を表示させて、操作はできないようにすべきなんだけど、めんどくさいｋ（ｒｙ</p>
<h5>アイコンと、ロード中画像を作って完成</h5>
<p>47pxの正方形アイコンと起動時の画像を用意してあげて完成。</p>
<h6>余談</h6>
<p>iPhoneシミュレーターの位置情報デフォルト値はクパチーノのApple本社近くなんですね。それも、デフォルトアプリ「マップ」のアイコンデザインと同じとこ。<br />
  <br /><a href="http://geopo.at/dlipAo">ジオポ @ CAクパチーノ</a></p>
<p>あと、シミュレーターでは複数回の位置情報アップデートがされない（値変わらないから）ことに注意してください。</p>
<p>Twitterクライアントの名前を残したい（このままだとfrom Webになる）ところだけど、メールでの申請が必要らしいので、自分専用クライアントのGeoPo Twitterでは無理。パス。</p>
<h4>実機で使ってみる</h4>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="315" alt="20090329_1" src="http://creco.net/wp-content/uploads/20090329-1.jpg" width="210" border="0" /> </p>
<p>アイコン。</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="315" alt="20090329_2" src="http://creco.net/wp-content/uploads/20090329-2.jpg" width="210" border="0" /> </p>
<p>夏Lion for iPhoneそのまま。</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="315" alt="20090329_3" src="http://creco.net/wp-content/uploads/20090329-3.jpg" width="210" border="0" /> </p>
<p>Tweetを入力して、GeoPoボタンを押すとGPSを使った現在位置のジオポURLを付加してくれる。</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="315" alt="20090329_4" src="http://creco.net/wp-content/uploads/20090329-4.jpg" width="210" border="0" /> </p>
<p>GeoPo Twitterからタイムラインのジオポをクリックして、アプリ内蔵のブラウザを通して地図を表示した様子。</p>
<p>GeoPoの仕様は最初、iPhoneからは直接デフォルトアプリの「マップ」に飛ばすようになっていたんだけど、アプリを跨ぐのが非常に煩わしいので、携帯版ジオポと同様、スタティックな地図を表示させて、地図下部にあるリンクからデフォルトアプリを呼べるように仕様変更した。</p>
<p>こっちのほうがいいと思う。うん。</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="315" alt="20090329_5" src="http://creco.net/wp-content/uploads/20090329-5.jpg" width="210" border="0" /> </p>
<p>別のTwitterクライアントであるTwitterFonで表示した様子。</p>
<p>TwitterFonの場合、タイトルが上部に表示されるので、住所も表示されていい感じ。</p>
<h4>まとめ</h4>
<p>僕はほとんど何もしてない。簡単にTwitterクライアントが作れることを実証。</p>
<p>Twitterクライアント開発者のみなさん、ジオポを実装してみませんか？詳しくは<br />
  <br /><a href="http://geopo.at/intl/ja/developer/sample_code.html">ジオポ / 開発者向け情報</a></p>
<p>来週、東京で山手線ウォーキングをする予定なので、そのときにコレを活用してみる。Twitterでつぶやきが地図になり、つぶやきの連続がGPSトラッキングになるっていう面白さを伝えるためにね。</p>
]]></content:encoded>
			<wfw:commentRss>http://creco.net/2009/03/29/twiter_client_with_geopo_for_iphone/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://creco.net/2009/03/29/twiter_client_with_geopo_for_iphone/" />
	</item>
		<item>
		<title>４月３日に第３回ジオメディアサミットが開催</title>
		<link>http://creco.net/2009/03/20/geomedia_summit_and_iphone_developer_event/</link>
		<comments>http://creco.net/2009/03/20/geomedia_summit_and_iphone_developer_event/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 09:46:10 +0000</pubDate>
		<dc:creator>inagaki</dc:creator>
				<category><![CDATA[イベント・セミナー]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[ジオポ]]></category>
		<category><![CDATA[ジオメディアサミット]]></category>

		<guid isPermaLink="false">http://creco.net/2009/03/20/%e3%82%b8%e3%82%aa%e3%83%a1%e3%83%87%e3%82%a3%e3%82%a2%e3%82%b5%e3%83%9f%e3%83%83%e3%83%88%e3%82%b8%e3%82%aa%e3%83%9diphone/</guid>
		<description><![CDATA[地理的なコンテンツを扱う人たちの集い「ジオメディアサミット」の第３回が来る４月３日（金曜日）に、立教大学池袋キャンパスで行われます。
第3回ジオメディアサミット開催のお知らせ &#8211; Cirius Lab. ブロ [...]]]></description>
			<content:encoded><![CDATA[<p>地理的なコンテンツを扱う人たちの集い「ジオメディアサミット」の第３回が来る４月３日（金曜日）に、立教大学池袋キャンパスで行われます。</p>
<p><a href="http://lab.cirius.co.jp/blog/2009/03/3.php">第3回ジオメディアサミット開催のお知らせ &#8211; Cirius Lab. ブログ</a></p>
<blockquote><p>イベント詳細<br />
日時：2009年4月3日（金）18:30〜21:00 (18:10開場)<br />
：懇親会：21:15 〜<br />
会場：立教大学池袋キャンパス<br />
<a href="http://www.rikkyo.ac.jp/access/pmap/ikebukuro.html">http://www.rikkyo.ac.jp/access/pmap/ikebukuro.html</a><br />
定員：100名<br />
参加費：無料 ※懇親会は実費 ( 3,500 〜 4,000 円を予定)<br />
テーマ：「盛り上がるジオメディアとは?」<br />
主 催：ジオメディアサミット運営実行委員会</p></blockquote>
<p>当然、僕も<strong>初</strong>参加させていただこうと、申し込みました。しかも、ライトニングトーク希望を加えて。</p>
<p>どうやら、ＬＴ希望者が多数いらっしゃるようで、僕が壇上に上がれるかどうかはわかんないですが、次のようなことを話そうかと思ってます。</p>
<p><span id="more-200"></span></p>
<h5>移動体ライブトラッキング配信のすすめ</h5>
<p>自分の体や自転車にGPSロガーとウェブカメラを付け携帯通信でアップロード、視聴者はリアルタイムに現在位置を把握しながら映像を見ることが出来るという、いままで僕がやってきた移動体ライブトラッキング配信。</p>
<p>それらが、どんな仕組みで動いてるのかをハードやソフトを紹介しながら、配信のおもしろさを伝えられればいいな。</p>
<p>実際に、ジオメディアサミット当日にも山手線ウォーク（残りの田端-池袋）をライブ配信しようかなって思ってる。</p>
<h5>ついでにジオポの宣伝</h5>
<p>上記のことを一般人がするには少々敷居が高いかもしんない。</p>
<p>よりカジュアルにするために、iPhoneとTwitter、そしてジオポを使った簡易ライブトラッキング配信の構築を紹介。ある日、散歩しながらTwitterでつぶやいてたら、それがライブトラッキング配信になってたよ！ってな流れ。</p>
<p>まだ、話したいことやアイデアは沢山あったりするんだけど、とてもＬＴの枠に収まりきらないと思うので自重。</p>
<p>当日までに、プレゼン資料とジオポTwitterアプリを完成させなければ。</p>
<p>そして４月３日の翌日、４月４日には、</p>
<h5>Apple Store, Nagoya SakaeでiPhone App 開発者イベント</h5>
<p>４月４日（土曜日）の１４：００から名古屋栄にあるアップルストアで、iPhone開発者向けのイベントが開催されます。</p>
<p>林信行さんの講演（先週あたりTwinkle＠名古屋で見かけました）や、（僕にMacBookとiPodTouchを買って会津若松まで来なさいとやさしく声をかけて、iPhone開発の世界へ連れて行ってくれた）GClueの佐々木さんがデモを行うみたい。</p>
<p>こちらも参加（たぶんオーディエンスとして）。</p>
]]></content:encoded>
			<wfw:commentRss>http://creco.net/2009/03/20/geomedia_summit_and_iphone_developer_event/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://creco.net/2009/03/20/geomedia_summit_and_iphone_developer_event/" />
	</item>
		<item>
		<title>仕事を中断してデブサミに行こう</title>
		<link>http://creco.net/2009/02/16/devsumi2009/</link>
		<comments>http://creco.net/2009/02/16/devsumi2009/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 12:18:26 +0000</pubDate>
		<dc:creator>inagaki</dc:creator>
				<category><![CDATA[イベント・セミナー]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://creco.net/2009/02/16/%e3%83%87%e3%83%96%e3%82%b5%e3%83%9f/</guid>
		<description><![CDATA[
Developers Summit 09 デベロッパーズサミット
会場：目黒雅叙園
主催：株式会社翔泳社
今年も行ってきました、デブサミことデベロッパーズサミット＠目黒。
毎年、毎年、バレンタインと同時開催されるこのイ [...]]]></description>
			<content:encoded><![CDATA[<p><strong><img class="alignnone size-medium wp-image-19" title="デブサミ2009" src="http://creco.net/wp-content/uploads/devsumi2009-300x235.jpg" alt="デブサミ2009" width="300" height="235" /></strong></p>
<p><strong>Developers Summit 09 デベロッパーズサミット</strong><br />
会場：目黒雅叙園<br />
主催：株式会社翔泳社</p>
<p>今年も行ってきました、デブサミことデベロッパーズサミット＠目黒。<br />
毎年、毎年、バレンタインと同時開催されるこのイベントは、日夜システムやソフトの裏側で働くエンジニアが、貴重な時間を割いて貴重なプレゼンをしてくれるという、私にとってはチョコよりも100倍嬉しい贈り物。</p>
<p>セッションごとにさくっと所感（というより走り書き）を。自分メモ。</p>
<p><span id="more-13"></span></p>
<h4>2009年2月12日（木）</h4>
<h5>【12-B-1】 実例で学ぶObjective-C 2.0とGUIの関係～iPhoneアプリ開発を視野に入れて</h5>
<p>荻原剛志 氏</p>
<p>Objective-Cの歴史からだったので、実例部分は少し押し気味だったかな。<br />
MacとiPhoneでは実装方法が少し異なるので、それぞれで簡単なデモ。<br />
デモ見ててXcodeのエディタで右上の□が２つ重なったアイコンをクリックすると、ヘッダと実装ファイルを行き来できることを初めて知った！こういう細かいことは、見に行かないとわからないよね。</p>
<h5>【12-B-2】 iPhone 開発者座談会</h5>
<p>高橋征義 氏/ shachi 氏/ 瀧内元気 氏/ 中川智史 氏/ 森琢磨 氏/ 吉田悠一 氏</p>
<p>豪華なメンバーで、いい意味で普通の方たちでした。中川さんは超イケメン。高橋メソッドで有名な高橋さんがモデレータ。<br />
<a href="http://www.appbank.net/">AppBank</a>さんのところで<a href="http://www.appbank.net/2009/02/12/iphone-application/9101.php">ログ</a>があるので参照。<br />
みんな終始笑顔で、全世界で開発したアプリを使ってもらえるという喜びが伝わってくるよう。<br />
アップルに苦言を呈することもあるけど、年会費１万円という中での仕事ぶりには驚きが。<br />
shachiさんをはじめ様々な方が言われていた、機能を削ぎ落とすというのは重要だと再認識。iPhoneでのアプリ占有時間を増やすのではなく、起動回数を増やしたほうがいいアプリじゃないかなって私は思う。<br />
情報交換に関しては現在進行形でいい方向へ向かっているんじゃないかな？今年入ってから加速してるイメージ。</p>
<h5>【12-A-3】 時を超えたプログラミングの道への道</h5>
<p>角谷信太郎 氏</p>
<p>ソフトウェアでは、新たな社会構造を作る機会がある。<br />
開発だけがアジャイルではいけないよ！マネージメント、デプロイもアジャイルに！！</p>
<h5>【12-C-4】 クラウドプラットフォームの実際</h5>
<p>岡本充洋 氏</p>
<p>Salesforceの宣伝らしさがまったく見えないテンポのいいプレゼンがプロフェッショナル。<br />
シングルテナントのスケーラビリティ問題とマルチテナントのカスタマイズ問題を解決<br />
クラウドサービスというのは、クラウドを作るか、クラウドの上で何をするかの２つしかない。<br />
デモ見てるとブラウザ上でコードアシストもできたり、クラウドをクラウドで作ってるという現実が斬新。<br />
Eclipseでもプラグインあるし、気軽に試してみてねーって感じだったので試してみようかな</p>
<h5>【12-B-5】 ブラウザJavaScript高速化JITバトル最終決戦</h5>
<p>森田創 氏</p>
<p>Chrome(V8) vs Safari(SquirrelFish Extreme) vs Firefox(Trace Monkey)の高速化方法をアルゴリズムとか比較<br />
何で今までJavaScriptは遅かったの？→うざいダイアログやブラクラしか使い道がなかったから＞＜<br />
それに、言語仕様的に高速化しにくい<br />
高速化３つのキーワード ・クラスがない・メソッド呼び出し・正規表現<br />
コミットされてるソース見ると今後の流行りがわかるらしい。んで、GeoLocationみたいな実装があるらしい！これは見なくちゃ！！</p>
<h5>【12-B-6】 PHP/MySQL を用いた大規模向けパッケージソフトウェア開発</h5>
<p>田中裕一 氏</p>
<p>サイボウズガルーン。パッケージソフトの肝は、ユーザの操作性・機能も重要だけど、管理者が管理しやすいことを忘れちゃいけない。<br />
サイボウズではブラウザで４秒以内に表示されればokというルールを設定して、検証<br />
動作環境に合わせた最適な構成になるように実証して、設定を切り分け</p>
<h5>【12-C-7】 株式会社はてなの開発戦略</h5>
<p>舘野祐一 氏</p>
<p>館野さんってこんこんのsecondlifeさんだったんですね、わーい<br />
はてなの開発戦略と聞いて、勝手に外部的なものを想像してただけにgitの話とはビックリ！git厨恐るべし<br />
私は今までgitを「ジット」と読んでました「ギット」なんすね、恥ずかしいわ＞＜<br />
svnのブランチ作るのってそんなに面倒かな？GUI厨なんでCUIでコマンド打つ方がよっぽど面倒！<br />
ただ、gitもtortoiseGitがあるので、将来はsubversionとも変わらなくなって来るらしい<br />
後半は、はてブのリニューアルについて。前回のはてブはsqlで直DB読んでたりして密結合だったけど、JSONやRSSを使って疎結合にしたから機能追加とか制限なくできるよ！って話。squidでキャッシュさせてるから速度面でそんなに遅くなるようなこともないみたい。<br />
ポストイットとホワイトボードでのタスク管理は真似して取り入れたいな</p>
<h4>2009年2月13日（金）</h4>
<h5>【13-A-1】 これからのWebテクノロジーを予測する</h5>
<p>秋元裕樹 氏</p>
<p>これからという未知の予測というより既存の技術がどうなっていくかっていう内容だったと思う<br />
Web2.0<br />
クラウドコンピューティング：日本にはマッチしないよね<br />
OpenID：ログインウィンドウというUIの慣れをどう解決していくか、採用すると得する仕組みを作っていかないと<br />
OpenSocial：課金をどう解決？<br />
OAuth：twitterで実験中らしい。これ早くこないとパスワードの問題がどんどん表面化していくと思う、期待<br />
CGM/UGC：（答えは会場のみで）<br />
ブラウザ：標準化されていい世の中になったよね。ただ、携帯・TV・ゲーム機を考えちゃうとアレだけど<br />
RIA：去年のデブサミはRIAテーマのセッション多かったけど、まだ波がきてないよね、なんでだろ？<br />
Yahoo!に対するGoogleといい、次というのは必ず来る<br />
なんでも作ってみて、公開しようよ</p>
<h5>【13-B-2】 パネルディスカッション：クラウド時代のプログラミングスタイルを語り合おう</h5>
<p>米持幸寿 氏/ 萩原正義 氏/ 松尾貴史 氏/ 及川喜之 氏</p>
<p>Google AppEngine、Salesforce、Azure（、IBM社内クラウド）のパネルディスカッションでの戦いを期待してたけど<br />
それぞれの長所を発表してるだけに聞こえて、少し退屈<br />
5分というデモ時間を守らないのには見ている側からもイラっときた＞＜</p>
<p>（途中昼飯と美容院行ってたので3コマ抜けてます、決してサボっていたわけでは…）</p>
<h5>【13-A-6】 ひよこクラブ ver.Engineer</h5>
<p>庄司嘉織 氏/ 谷口公一 氏/ 堀邦明 氏/ 一井崇 氏</p>
<p>勉強の仕方やアウトプットを紹介しつつ、聴衆のみなさんも壇上に立とうよ！いい刺激になるライトニングトーク<br />
大学では「人に聞くな！まず調べろ！！」という教育されていたので、庄司さんの「ぐぐれかすっていわれないよ」というのにはハッとした。<br />
訊かないことでコミュニケーションを遮断してるようなモヤモヤが私の中にあるので、これからは積極的に「教えてクン」になろうかと。度が過ぎたらググれカスって言ってください。<br />
そして、知らないことをググって調べてるときに見つからないときには諦めるという谷口さんの考え方、今度からは自分がアウトプットした情報をググって見つけられるようにする。素敵です。</p>
<h5>【13-A-7】 Webセキュリティ攻守攻防パネルディスカッション「Webアプリケーション／Ajaxセキュリティ徹底バトル」</h5>
<p>竹迫良範 氏/ 徳丸浩 氏/ はせがわようすけ 氏/ はまちちゃん 氏/ 大垣靖男 氏</p>
<p>豪華すぎて鼻血が出る。それに糸柳さんたちもいたし、隣の隣の席の方とはまちちゃんがリアルタイムでtwitterしてるよ（藁）とかコミュニケーションとったり、会場全体が異様な雰囲気でしたねw</p>
<p>無知な私にとってIPAの果たしてる仕組み（報告者と対象の折衝役）ってのもわかりやすかったし、手法を実演してくれたりワクワクしながら楽しく参加させていただきました。<br />
幸いにも私ははまちちゃんのウィルスに感染しなかったようでピンピンして名古屋に帰れましたが、潜伏期間とかないよね。</p>
<p>今年も２日間があっという間に終わり。翔泳社さま、スポンサーさま、そしてエンジニアの皆さん、ありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://creco.net/2009/02/16/devsumi2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://creco.net/2009/02/16/devsumi2009/" />
	</item>
	</channel>
</rss>
