2011年10月11日火曜日

iPhone 4Sも?au新モデル購入予定者必見!エリア調査用端末レンタルのすすめ

iPhone 4Sなどのau新モデルを購入予定の皆様!新モデルのうち、一部のスマートフォンは、新800MHzという今までのau携帯電話と若干違ったサービスエリアのみに対応した機種があります。そこで、サービスエリアの違いや確認方法をご紹介します。

2011年9月7日水曜日

3Gインターネット国内最安!イオンSIM(980円プラン)のレビュー

3Gインターネットをするなら国内最安!月額980円(+ユニバーサルサービス料7円)で使い放題のb-mobileイオン限定SIMのレビューをお送りいたします。

2011年7月14日木曜日

SH-03C、IS11SHユーザー必見!?なるべく失敗しないように3D写真を撮るための技


SH-03Cイメージ

シングルレンズの3D撮影可能な携帯端末として日本で初めて登場したのがSH-03Cだったよね。



一部を除き裸眼3D液晶搭載Androidとして定着してきたであろう、シャープの携帯たち。

裸眼3D搭載端末は3Dコンテンツやゲームを楽しめることはもちろん、3D写真の撮影ができるところも他のAndroidには無いお楽しみポイントだと言えよう!


そこで、私が編み出した3D写真撮影のコツを書き記しておきたいと思うんだ。

誠に恥ずかしながら、作例も載せております。









意外と難しい3D写真撮影


携帯電話で3D写真撮影を楽しむ。


一見楽しげな創造がふくらむ機能だ。

しかし、実際に使ってみると3D写真撮影は思いのほか上手くいかないことが多い。

イライラの挙句、結局使っていない人も多いのではないだろうか?


普通、3D写真が撮影できるカメラと言えば、レンズが二つ搭載されているものが多い。

が、しかしIS11SH、SH-03C、007SH(J)、003SH、005SHなど(以下:シングルレンズ機)にはレンズが一つしか無い。

そのためシングルレンズ機の場合は撮影時に端末の位置をずらして二枚の写真を連続で撮影し、その二枚の画像を合成し3D写真を生成するという、ある意味強引な撮影方法となっている。

そのせいか、なかなかどうして失敗も多いことだろう。


そんな人に私の考えた3D写真撮影方法を紹介したい。

LYNX 3Dだって、あと十年、いや一年は戦える!


目次



  1. 主に三種の「スタイル」があることに気付いた

  2. スウィンガー(Swinger)

  3. パームスクローラ(Palm Scroller)

  4. シフトスライディング(Shift Slidings)

  5. 3種のスタイル別「できあがり写真比較!」

  6. おまけ:シングルレンズ機における3D写真撮影の基本


主に三種の「スタイル」があることに気付いた


「スタイル」


・・そう、言うなれば「型」だ。

空手などでもあるよね?

あの「型」のようなものだと思ってくれればいい。

以下に説明する「スタイル」を徹底することで、3D写真撮影での失敗が劇的に減るはずだ。


私は下記の三つの「スタイル」を考案した。



以下に詳しい方法を説明しよう。

見本で撮影したデータも載せておくから、裸眼3D液晶端末ユーザーはダウンロードして見てちょうだいっ!


スウィンガー(Swinger)


この撮影方法はシングルレンズ機ユーザーにとっておそらく、最もポピュラーな撮影方法だろう。

ざっくり言うと、「自らの体を回転させ、2枚の画像を撮影する」方法だ。

ポピュラーなため、シングルレンズ機ユーザーの誰もがすでに使っているであろう撮影方法とも言える。


難易度:☆☆

成功度:☆☆

飛び出し度:☆☆☆


撮影方法


スウィンガースタイルのイメージ

一般的かつ自然に行っていたであろうスタイル。だが今こそ定義しておく必要はあるだろう。



  1. 普通に構える(持ち方は自由)

  2. 3Dカメラを起動しシャッターを押す

  3. 丹田を中心に上半身を右に回転させる


スウィンガーについては特筆すべき点は無い。

なぜなら、おそらく誰もが自然に使っている方法だからだ。

強いてコツを挙げるなら、「上半身を固定すること」。

手や腕だけを使うような撮り方は失敗の原因となることが多い。


パームスクローラ(Palm Scroller)


この撮影方法は今回紹介する3種の「スタイル」のうち、最も失敗の少ない撮影方法と言えるだろう。

デート中など、とにかく時間の無いとき、また、失敗ばかりでお悩みだった人は、ぜひ試してみたらいいと思う。

私自信、イチ押しの撮影方法だ!


難易度:☆

成功度:☆☆☆☆☆

飛び出し度:☆☆


撮影方法


パームスクロ-ラのイメージ

支点・力点・作用点という言葉が想い起こされるだろう。まさに様式美と言える。



  1. レンズの直線上を左手人差し指と親指で持つ

  2. 3Dカメラを起動しシャッターを押す

  3. 左手人差し指と親指を支点にして本体を回転させる


「パームスクローラ」、あえて直訳するならば、「手のひらで回転」だ。

レンズの直線上を支点にさりげなく回転させる。

ちなみに、3D撮影をしていることを周囲に悟られにくいスタイルである。

ポーカーフェイスで3D撮影というのもシングルレンズ機の醍醐味かもしれない。


シフトスライディング(Shift Slidings)


この撮影方法は今回紹介する3種の「スタイル」のうち、最も躍動的な撮影方法だ。

3Dの飛び出しはズバ抜けている!

ただし、躍動的であるがゆえに失敗する可能性も高い撮影方法だ。

パンチの効いた一枚を撮りたい時に使ってみてほしい。

コンテストに応募するなら迷わずコレだ。

繰り返し、チャレンジしてほしい。


難易度:☆☆☆☆☆

成功度:☆

飛び出し度:☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


撮影方法


シフトスライディングのイメージ

ある意味で某格闘マンガの「乾坤一擲」を彷彿とさせる人も時にはいるかも知れない。



  1. 構える(要集中力)

  2. 3Dカメラを起動しシャッターを押す

  3. 本体の向きや角度を変えないようスライドさせるイメージで右へ動かす


簡単に言うと本体をそのまま右へスライドさせるイメージだ。

ポイントとしては、とにかく上下ブレしないこと。

そしてスライドさせる速度を一定に保つことだ。

失敗の多い撮影スタイルだが、成功するとなんか楽しいことうけあい!


3種のスタイル別「できあがり写真比較!」


それでは、誠にアレですが私の作例を見ていただこう。

(3D液晶じゃない人もなんとなく楽しめるようにイメージも載せてみました。)


  • まとめてダウンロード

  • ちなみに、裸眼3D液晶端末の人はTobidale3Dというアプリをインストールしておけばリンクをクリックで直接3D画像を見られるんだぜ・・!


    一輪の花




    謎の柵




    佇むデジタル一眼




    風車小屋に近づく




    風車小屋から離れる




    彼女の名は「まんじゅう」




    おまけ:シングルレンズ機における3D写真撮影の基本


    念のため基本もおさらいしていただこう。


    ポイントは5つ!

    下記の基本を守るだけでも失敗は減ると思う。


    ・とにかくしっかり掴む(ホールド)する

    ・一枚目→二枚目の撮影はゆっくりと行う

    ・体ごと動かない

    ・ピント合わせとシャッターはタッチパネルで行う

    ・一枚目と二枚目で上下をズレさせないこと


    上記のポイントを外さなければ失敗は減ることうけあい、に違いない!

    特にシャッターボタンは手ブレの原因にもなったりする。悲しいことだ。


    いつもの一言


    さて、どうだろう。

    失敗写真は減ったかな?


    ちなみに、上記を試してもなお失敗してしまうようなら、さっぱり諦めるのも一つのやり方だと思うよっ!

    参考になるかどうかわからないけど、良い画を撮ってくれよっ!


    そして言っておきたいことがある。

    それは「愛」だよ・・。


    我々はこの端末に出会ってしまい、購入した。

    人によっては二年契約という人もいるだろう。

    だがこれもひとつの「縁」だ。


    携帯電話など所詮道具に過ぎん・・。

    水に濡れればたちどころに逝ってしまう。

    そんな携帯電話の短い一生である二年間をともに笑い、泣き、付き合ってやるのが我々が携帯電話にしてやれるせめてもの餞というものだ。


    そう思わないかい?


    ちなみに次回、3D写真について更なる楽しみを追求する予定です。


    2011年7月9日土曜日

    複数のマーカーをクリックした時に同じ表示になってしまう時の対処法

    複数のマーカーを設置してクリックしたときにalertを出すようにプログラミングしたところ、全部のマーカーが同じ表示になってしまった

    対応方法が下記のページに出ていたので組み込んでみた
    http://www.nanchatte.com/map/showDifferentInfoWindowOnEachMarker.html

    しかし、alertではうまく動作しなかったので吹き出しのまま使用した


    <!DOCTYPE html>
    <html><head>
    <meta charset="utf-8">
    <script type="text/javascript" src="jsWaffle.js"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&language=ja"></script>
    <script type="text/javascript">
    window.onload = function () {
    // マップ(map_canvas)を画面全体に表示する
        var disp = droid.getDisplayInfo();
        $("map_canvas").style.width  = disp["width"] + "px";
        $("map_canvas").style.height = disp["height"] + "px";
        // Googleマップを初期化する
    var latlng = new google.maps.LatLng(36.323433,139.356441);
    var mypos = new google.maps.LatLng(36.323433,139.356441);
    // 自分の位置
        var mapOptions = {
            // ズームは大きくなるほど拡大される
    zoom:15,
            center:latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var gmap = new google.maps.Map($("map_canvas"), mapOptions);
    // 目的地にマーカー
    var poslist=[
    [36.323433,139.356441,"目的地2"],
    [36.328433,139.356441,"目的地1"]
    ];
    function attachMessage(marker, msg) {
        google.maps.event.addListener(marker, 'click', function(event) {
        new google.maps.InfoWindow({
        content: msg
        }).open(marker.getMap(), marker);
        });
    }
    for(var i=0;i<poslist.length;i++){
    var lat=poslist[i][0];
    var lng=poslist[i][1];
    var txt=poslist[i][2];
    var latlng = new google.maps.LatLng(lat, lng);
    var marker=new google.maps.Marker({
    position: latlng,
    map:gmap
    });
    attachMessage(marker,txt);
    }
    // 自分にマーカー
    var mymarker=new google.maps.Marker({
    position: mypos,
    map: gmap,
    icon: "man.png"
    });
    // 情報ウィンドウの設定
    var infowindow=new google.maps.InfoWindow({
    content: "最初の目的地",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント

        // 位置情報を定期的にチェックする
        var posOptions = {
            enableHighAccuracy: true,
            timeout: 1000 * 10,
            maximumAge: 1000 * 3
        };
        droid.watchPosition(positionHandler, errorHandler, posOptions);
        function positionHandler(position) {
            // 緯度
    var lat = position.coords.latitude;
            // 経度
    var lon = position.coords.longitude;
    // 精度
            var acc = position.coords.accuracy;
            // 現在位置まで線を引く
            var latlng = new google.maps.LatLng(lat, lon);
    var mypos = new google.maps.LatLng(lat,lon);
            gmap.panTo(latlng);
    mymarker.setPosition(latlng);
    // 距離の計算
    var dis=Math.floor(Math.sqrt((Math.pow((36.323433-lat)*100*1110,2)+Math.pow((139.356441-lon)*100*910,2))));
    // 情報ウィンドウの設定
    var myinfo=new google.maps.InfoWindow({
    content: "目的地までの距離" + dis + "m。" + "確認したら閉じてください",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント
    google.maps.event.addListener(mymarker,'click',function(event){
    myinfo.open(gmap,mymarker);
    });
        }
        function errorHandler(errorObj) {
            droid.log(errorObj.message);
        }
    };
    </script>
    <style>
        * { margin:0; padding:0; }
    </style>
    </head><body>
        <div id="map_canvas"></div>
    </body></html>

    マーカーのJSON配列の例

    1. window.onload = function() {
    2.  
    3.   if (GBrowserIsCompatible()) {
    4.     var map = new GMap(document.getElementById("map"));
    5.    
    6.     //地図の中心
    7.     var point =new GPoint(-122.141937.4419)
    8.     map.centerAndZoom(point, 13);
    9.    
    10.      var marks = [
    11.         { id:1, lat:41, lng:-121, text:'sample1' },
    12.         { id:2, lat:42, lng:-122, text:'sample2' },
    13.         { id:3, lat:43, lng:-123, text:'sample3' },
    14.         { id:4, lat:43, lng:-134, text:'sample4' },
    15.         { id:5, lat:40, lng:-135, text:'sample5' }
    16.     ];
    17.    
    18.  
    19.     function addMarker( mark ) {
    20.         var latlng = new GLatLng( mark.lat, mark.lng );
    21.         var marker = new GMarker( latlng );
    22.         map.addOverlay( marker );
    23.         GEvent.addListener( marker, 'click'function() {
    24.             marker.openInfoWindowHtml( mark.id + ': ' + mark.text );
    25.         });
    26.     };
    27.            
    28.     for( var i = 0;  i <marks.length;  ++i ){
    29.         addMarker( marks[i] );
    30.     };
    31.    
    32.   }

    各目的地にアラートがでるように設定

    次回はアラートの中身も配列にできるようにする

    <!DOCTYPE html>
    <html><head>
    <meta charset="utf-8">
    <script type="text/javascript" src="jsWaffle.js"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&language=ja"></script>
    <script type="text/javascript">
    window.onload = function () {
    // マップ(map_canvas)を画面全体に表示する
        var disp = droid.getDisplayInfo();
        $("map_canvas").style.width  = disp["width"] + "px";
        $("map_canvas").style.height = disp["height"] + "px";
        // Googleマップを初期化する
    var latlng = new google.maps.LatLng(36.323433,139.356441);
    var mypos = new google.maps.LatLng(36.323433,139.356441);
    // 自分の位置
        var mapOptions = {
            // ズームは大きくなるほど拡大される
    zoom:15,
            center:latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var gmap = new google.maps.Map($("map_canvas"), mapOptions);
    // 目的地にマーカー
    var poslist=[[36.323433,139.356441],[36.328433,139.356441]];
    for(var i=0;i<poslist.length;i++){
    var lat=poslist[i][0];
    var lng=poslist[i][1];
    var latlng = new google.maps.LatLng(lat, lng);
    var marker=new google.maps.Marker({
    position: latlng,
    map:gmap
    });
    google.maps.event.addListener(marker,'click',function(event){
    alert("目的地");
    });
    }
    // 自分にマーカー
    var mymarker=new google.maps.Marker({
    position: mypos,
    map: gmap,
    icon: "man.png"
    });
    // 情報ウィンドウの設定
    var infowindow=new google.maps.InfoWindow({
    content: "最初の目的地",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント

        // 位置情報を定期的にチェックする
        var posOptions = {
            enableHighAccuracy: true,
            timeout: 1000 * 10,
            maximumAge: 1000 * 3
        };
        droid.watchPosition(positionHandler, errorHandler, posOptions);
        function positionHandler(position) {
            // 緯度
    var lat = position.coords.latitude;
            // 経度
    var lon = position.coords.longitude;
    // 精度
            var acc = position.coords.accuracy;
            // 現在位置まで線を引く
            var latlng = new google.maps.LatLng(lat, lon);
    var mypos = new google.maps.LatLng(lat,lon);
            gmap.panTo(latlng);
    mymarker.setPosition(latlng);
    // 距離の計算
    var dis=Math.floor(Math.sqrt((Math.pow((36.323433-lat)*100*1110,2)+Math.pow((139.356441-lon)*100*910,2))));
    // 情報ウィンドウの設定
    var myinfo=new google.maps.InfoWindow({
    content: "目的地までの距離" + dis + "m。" + "確認したら閉じてください",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント
    google.maps.event.addListener(mymarker,'click',function(event){
    myinfo.open(gmap,mymarker);
    });
        }
        function errorHandler(errorObj) {
            droid.log(errorObj.message);
        }
    };
    </script>
    <style>
        * { margin:0; padding:0; }
    </style>
    </head><body>
        <div id="map_canvas"></div>
    </body></html>

    複数のマーカーを表示

    <!DOCTYPE html>
    <html><head>
    <meta charset="utf-8">
    <script type="text/javascript" src="jsWaffle.js"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&language=ja"></script>
    <script type="text/javascript">
    window.onload = function () {
    // マップ(map_canvas)を画面全体に表示する
        var disp = droid.getDisplayInfo();
        $("map_canvas").style.width  = disp["width"] + "px";
        $("map_canvas").style.height = disp["height"] + "px";
        // Googleマップを初期化する
    var latlng = new google.maps.LatLng(36.323433,139.356441);
    var mypos = new google.maps.LatLng(36.323433,139.356441);
    // 自分の位置
        var mapOptions = {
            // ズームは大きくなるほど拡大される
    zoom:15,
            center:latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var gmap = new google.maps.Map($("map_canvas"), mapOptions);
    // 目的地にマーカー
    var poslist=[[36.323433,139.356441],[36.328433,139.356441]];
    for(var i=0;i<poslist.length;i++){
    var lat=poslist[i][0];
    var lng=poslist[i][1];
    var latlng = new google.maps.LatLng(lat, lng);
    var marker=new google.maps.Marker({
    position: latlng,
    map:gmap
    });
    }
    // 自分にマーカー
    var mymarker=new google.maps.Marker({
    position: mypos,
    map: gmap,
    icon: "man.png"
    });
    // 情報ウィンドウの設定
    var infowindow=new google.maps.InfoWindow({
    content: "最初の目的地",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント
    google.maps.event.addListener(marker,'click',function(event){
    infowindow.open(gmap,marker);
    });
        // 位置情報を定期的にチェックする
        var posOptions = {
            enableHighAccuracy: true,
            timeout: 1000 * 10,
            maximumAge: 1000 * 3
        };
        droid.watchPosition(positionHandler, errorHandler, posOptions);
        function positionHandler(position) {
            // 緯度
    var lat = position.coords.latitude;
            // 経度
    var lon = position.coords.longitude;
    // 精度
            var acc = position.coords.accuracy;
            // 現在位置まで線を引く
            var latlng = new google.maps.LatLng(lat, lon);
    var mypos = new google.maps.LatLng(lat,lon);
            gmap.panTo(latlng);
    mymarker.setPosition(latlng);
    // 距離の計算
    var dis=Math.floor(Math.sqrt((Math.pow((36.323433-lat)*100*1110,2)+Math.pow((139.356441-lon)*100*910,2))));
    // 情報ウィンドウの設定
    var myinfo=new google.maps.InfoWindow({
    content: "目的地までの距離" + dis + "m。" + "確認したら閉じてください",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント
    google.maps.event.addListener(mymarker,'click',function(event){
    myinfo.open(gmap,mymarker);
    });
        }
        function errorHandler(errorObj) {
            droid.log(errorObj.message);
        }
    };
    </script>
    <style>
        * { margin:0; padding:0; }
    </style>
    </head><body>
        <div id="map_canvas"></div>
    </body></html>

    目的地リスト化前

    <!DOCTYPE html>
    <html><head>
    <meta charset="utf-8">
    <script type="text/javascript" src="jsWaffle.js"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&language=ja"></script>
    <script type="text/javascript">
    window.onload = function () {
    // マップ(map_canvas)を画面全体に表示する
        var disp = droid.getDisplayInfo();
        $("map_canvas").style.width  = disp["width"] + "px";
        $("map_canvas").style.height = disp["height"] + "px";
        // Googleマップを初期化する
    var poslist=[[36.323433,139.356441]];
    for(var i=0;i<poslist.length;i++){
    var lat=poslist[i][0];
    var lng=poslist[i][1];
    var latlng = new google.maps.LatLng(lat, lng);
    var marker=new google.maps.Marker({
    position: latlng,
    map:gmap
    });
    }
    var mypos = new google.maps.LatLng(36.323433,139.356441);
    // 自分の位置
        var mapOptions = {
            // ズームは大きくなるほど拡大される
    zoom:15,
            center:latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var gmap = new google.maps.Map($("map_canvas"), mapOptions);
    // 目的地にマーカー
    var marker=new google.maps.Marker({
    position: latlng,
    map: gmap
    });
    // 自分にマーカー
    var mymarker=new google.maps.Marker({
    position: mypos,
    map: gmap,
    icon: "man.png"
    });
    // 情報ウィンドウの設定
    var infowindow=new google.maps.InfoWindow({
    content: "最初の目的地",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント
    google.maps.event.addListener(marker,'click',function(event){
    infowindow.open(gmap,marker);
    });
        // 位置情報を定期的にチェックする
        var posOptions = {
            enableHighAccuracy: true,
            timeout: 1000 * 10,
            maximumAge: 1000 * 3
        };
        droid.watchPosition(positionHandler, errorHandler, posOptions);
        function positionHandler(position) {
            // 緯度
    var lat = position.coords.latitude;
            // 経度
    var lon = position.coords.longitude;
    // 精度
            var acc = position.coords.accuracy;
            // 現在位置まで線を引く
            var latlng = new google.maps.LatLng(lat, lon);
    var mypos = new google.maps.LatLng(lat,lon);
            gmap.panTo(latlng);
    mymarker.setPosition(latlng);
    // 距離の計算
    var dis=Math.floor(Math.sqrt((Math.pow((36.323433-lat)*100*1110,2)+Math.pow((139.356441-lon)*100*910,2))));
    // 情報ウィンドウの設定
    var myinfo=new google.maps.InfoWindow({
    content: "目的地までの距離" + dis + "m。" + "確認したら閉じてください",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント
    google.maps.event.addListener(mymarker,'click',function(event){
    myinfo.open(gmap,mymarker);
    });
        }
        function errorHandler(errorObj) {
            droid.log(errorObj.message);
        }
    };
    </script>
    <style>
        * { margin:0; padding:0; }
    </style>
    </head><body>
        <div id="map_canvas"></div>
    </body></html>

    2011年7月7日木曜日

    オリエンテーリング用マップにマーカーと情報を表示

    <!DOCTYPE html>
    <html><head>
    <meta charset="utf-8">
    <script type="text/javascript" src="jsWaffle.js"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&language=ja"></script>
    <script type="text/javascript">
    window.onload = function () {
        // マップ(map_canvas)を画面全体に表示する
        var disp = droid.getDisplayInfo();
        $("map_canvas").style.width  = disp["width"] + "px";
        $("map_canvas").style.height = disp["height"] + "px";
        // Googleマップを初期化する
        var latlng = new google.maps.LatLng(36.336702,139.3622);

        var mapOptions = {
            zoom:12,
            center:latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var gmap = new google.maps.Map($("map_canvas"), mapOptions);
    // セブンイレブンにマーカー
    var marker=new google.maps.Marker({
    position: latlng,
    map: gmap,
    title:"tokio tower"
    });
        // ラインマーカーを地図上に表示する
        var linepath = [];
        var line = new google.maps.Polyline({
            map: gmap, path: linepath, strokeColor: "#ff0000",
            strokeWeight: 3, strokeOpacity: 0.7
        });
    // 情報ウィンドウの設定
    var infowindow=new google.maps.InfoWindow({
    content: "最初の目的地",
    maxWindow:300
    });
    // マーカーをクリックした時のイベント
    google.maps.event.addListener(marker,'click',function(event){
    infowindow.open(gmap,marker);
    });
        // 位置情報を定期的にチェックする
        var posOptions = {
            enableHighAccuracy: true,
            timeout: 1000 * 10,
            maximumAge: 1000 * 3
        };
        droid.watchPosition(positionHandler, errorHandler, posOptions);
        function positionHandler(position) {
            // 緯度
    var lat = position.coords.latitude;
            // 経度
    var lon = position.coords.longitude;
    // 精度
            var acc = position.coords.accuracy;
            // 現在位置まで線を引く
            var latlng = new google.maps.LatLng(lat, lon);
            gmap.panTo(latlng);
            linepath.push(latlng);
            line.setPath(linepath);
        }
        function errorHandler(errorObj) {
            droid.log(errorObj.message);
        }
    };
    </script>
    <style>
        * { margin:0; padding:0; }
    </style>
    </head><body>
        <div id="map_canvas"></div>
    </body></html>

    2011年6月20日月曜日

    GALAXY S IIのタッチ&トライができるGALAXY CAFEに行ってきた!


    docomoから発売予定のスマートフォン、GALAXY S IIがタッチ&トライができるというGALAXY CAFE。場所は六本木ヒルズ。

    GALAXY S IIは有機ELディスプレイやデュアルコアCPUなど注目度がとても高く、すでに発売されている海外向けモデルを輸入して利用している人もいるなど人気のモデルです。

    さらにCAFEと銘打っているだけあってなのか、Samsung製ケータイを持って行くとオリジナルスイーツを無料で食べることができるということで、早速行ってきました!

    2011年6月4日土曜日

    gooスマホ部のプチ合宿を見てきた!

    gooスマホ部のプチ合宿におじゃましてきました!gooスマホ部とは、話題のスマートフォンにスポットを当てたQ&Aサイト「gooスマホ部に訊け!」のメンバーの方々。「gooスマホ部に訊け!」では通常のQ&Aサイトと異なりgooスマホ部の方々がユーザからの質問に対して画像や動画を使って直接回答してくれるため、スマートフォン初心者の方にはとってもうれしいサイトなのです。

    今回のプチ合宿では、gooスマホ部新入部員の方が、部長を始めとする先輩部員の方々とスマホを使って汗をかくそうな。いったいどうなるのやら!?

    運動会でよく見かける、点数表なんかも!?gooスマホ部のメンバーはアンド部とロイド部(つなげてアンドロイド!)に分かれて試合をするようです。

    こんなものまで用意されてる!かわいい!円に沿って描かれているキャラクターはgooスマホ部の先輩部員の方々のアイコンなのだ。

    gooスマホ部の部長さん、AGさんのご挨拶から。「スマホで地球温暖化が改善できる!」などスマートフォンの魅力を説明。この合宿でさらにスマホに興味を持っていただければと意気込みを話していました。

    試合の前に最新のスマホを部員の人たちが体験!今後NTT docomoから発売予定のGalaxy S II SC-02C、Xperia acro SO-02C、Optimus bright L-07C、MEDIAS N-06C、AQUOS PHONE SH-12C、P-07Cが用意されていました。もちろん、gooスマホ部のメンバー!皆さん興味津々で写真を撮ったり実際に触ったりされていました。

    試合の前はもちろん準備運動!!たいそうのおねえさんを中心に部員全員で準備運動をしていました。点数表といい、本当に運動会を見ている気分に。

    第一試合は「Toss It」というアプリを使った対決。Toss Itとは手元にあるゴミを風向きを考慮しつつゴミを上方向になぞることで、ゴミを投げ捨ててゴミ箱に入れていくゲーム。今回は両チームのうち、より多くゴミ箱に入れることができるかを競っていました。

    楽しみながらToss Itを練習するスマホ部部員。Toss Itは単純なゲームだが風の向きと強さがなかなかのくせ者で、入ったときのよろこびはかなりのものです。時折スマホから出てくる歓声や悲鳴の声が雰囲気をさらに盛り上げてくれます。

    思わずガッツポーズの新入部員、神田さん。(ご存じの方もいらっしゃるかと思いますが、あの神田さんです。今回は新入部員としてご参加しているとのことでした。)

    四苦八苦しつつも試合は進行。結果は赤のジャケット、アンドチームの勝利でした!

    第二試合は「hoccer」というアプリを使った対決。hoccerは、スマホに搭載されているBluetoothを活用して、キャッチボールの要領で画像を送りたい相手に投げる動作をすることで画像の受け渡しができるアプリ(双方ともにhoccerをインストールする必要あり)。gooスマホ部のお話では50メートル離れていても受け渡しが可能だったそうだ!言葉では伝わりにくそうなので、gooスマホ部の動画をご覧ください!


    会場はスマホが多いこともあってか、かなり混信しているようで画像の受信には運も必要に。
    画像を投げるスマホ部員の方。

    ポーズを決めて画像が送られてくるのを待っている新入部員の方々。より多く画像を受信できたチームが勝利と言うことで、結果青のジャケットを着たロイドチームの勝利でした!

    両チームともに一勝一敗。勝敗を分ける第三試合は歩数計アプリを使用した対決でした。スマホを単純に激しく振るだけなのですが、スマホは歩数計専門で作られたわけではないのでうまく振ってあげないと反応せず、がんばって振ったのにもかかわらず10歩ほどしかカウントされていない部員も。逆にうまく振れたのか190歩以上カウントされる部員もおり、その数字を知らされたとき驚きの声が起きました。勝敗の結果は安定して90歩をとれた赤ジャケットのアンドチームの勝利!今回のプチ合宿での勝者はアンドチームに決まりました!

    勝者にはメダル授与と景品ルーレット権が2回!敗者のロイドチームも景品ルーレット権が1回あり、景品を決めるルーレットもやはりスマホのアプリを使う徹底ぶり!!最後に集合写真を撮って解散となりました。gooスマホ部インの方々お疲れ様でした!!

    gooスマホ部新入部員の方々はiPhone使いやAndroid使いの方もいらっしゃいましたが、ガラケーを使っていて将来スマホにしようと考えている方が多かったです。さらに注目なのが女性が多い中、TwitterやFacebookなどのSNSやBlogを活用している方が多いと言うことです。やっぱりSNSとスマホの相性がいいと言うことでスマホに興味を持っていらっしゃるようです。お話を聞かせていただいた新入部員の方は今回触った新機種の中で、AQUOS PHONEが気に入ったようでした。


    また、会場では試合に使うアプリを新入部員の方々に対して丁寧に説明していた先輩部員の方々がとても印象的でした。スマホを使いこなしている部員の方々が全力で質問に答えてくれる、「gooスマホ部に訊け!」。ホームページでは画像や動画付きでとてもわかりやすい回答であったり、最新のスマホ情報もきちんと掲載されていました。これからスマホを使ってみようと思っている方は是非ご覧になってみてはいかがでしょうか。

    「gooスマホ部に訊け!」HP: http://sp.oshiete.goo.ne.jp/

    2011年5月29日日曜日

    Androidのカレンダーデータ復帰と過去データの同期方法(ジョルテやスケジュールストリートも)

    事件現場イメージ

    「事実は小説より奇なり」ってね!


    2011年5月某日・・
    Androidユーザーの間で妙な現象が発生した。

    被害にあったものは皆、口を揃えて「Googleカレンダーの同期がされずデータが真っ白になった」と言うのだ。

    私自身、そのようなTweetや価格.comのコメントを見て、「そんなことあるはずが無い、きっとネットワークエラーか何かだろう」・・そう思っていた。

    だが、自らのカレンダーを確認したとき私は驚愕した。

    ・・そう、私の端末でも既に発生していたのだ。

    危うく迷宮入りとなりかかったこの現象だが、Twitterのフォロワーさんからいくつかの情報提供を受け適当な解決の方法がわかったので、その手順をここに記しておこうと思う。

    ネットワークをさまよえる未だ見ぬ子羊のために。

    Android、カレンダーデータ消失事件レポート

      プロローグ:事件は会議室ではなく手元で起きていた

      いったい何が起きていたのか?

      情報は錯綜し私の思考から容赦無く冷静さを奪っていく。
      解決法の前にまず、同時に起きた二つの事件を話さねばなるまい。

      Chapter.1:一つ目の事件「消失」

      突然、何の前触れも無くGoogleカレンダーやジョルテなどスケジュールが真っ白になっていた。

      この現象がとんでもない「脅威」だということが、仕事のスケジュール管理としてGoogleカレンダーを使っていない人に伝わるだろうか・・。

      私の適当かつ適当な調査によりわかったことは、真っ白になってしまうカレンダーアプリはすべて、Androidのカレンダー同期によってスケジュール情報を取得するタイプのものだったということだ。

      Chapter.2:二つ目の事件「罠」

      真っ白現象を見事解決し、危機を脱したところに巧妙な「ワナ」が仕掛けられていた。

      過去のスケジュールデータが、一部分しか同期されなかったのだ・・。
      いや、もしかしたら元々そういう仕様だったのかも知れない・・。

      過去のスケジュールなど忘れ、前を向いて生きろ

      そんなGoogleからのメッセージかも知れないと感じたが、そう簡単に思い出を消すわけにはいかないのが人情というもの。

      そうやすやすと過去を無かったことにはできんのだよ、人は!!

      解決:事件の終わりはあっけないものだった

      さて、与太話はこれくらいにして、本題に入ろう・・

      同期されない現象に関しては、Android単体で解決できる。
      過去データの復旧はPCのブラウザからGoogleカレンダーをいじる必要がある。

      同期されない現象の対策方法

      カレンダー再同期の流れ

      人生は、時にリセットが必要なのさ・・

      ・Android端末側で「設定」

      →「アプリケーション」
      →「アプリケーション管理」
      →「メニュー」ボタン
      →「フィルタ」
      →「すべて」
      →「カレンダーの保存」
      →「データを消去

      その後、再度同期をかければ、めでたくカレンダーが復活する。

      過去スケジュールデータの同期方法

      どうやらAndroidは過去スケジュールデータを過去一ヶ月分にアクションのあったものしか取り込まない仕様のようだ。

      たしかに、過去のデータが何年分か積み重なってくると、非常に動作速度にも影響するかも知れないし、メモリの消費も多いだろう。

      それでも過去を表示したい人はやってみてもいいかも知れない。

      実行するのなら、カレンダーの削除を行うので自分自身の責任において実行しよう。
      それと、大量の予定が刻まれている人の場合、時間がかかることも考えられる。

      カレンダーエクスポ-トとインポート1

      PCのブラウザでGoogleカレンダーにログインし、「設定」をクリック。

      必ず「エクスポート」をしよう。

      エクスポートしなければ、取り返しのつかないことになりかねない。

      カレンダーのエクスポートとインポート2

      エクスポートだけは忘れてはならん!絶対にだ!!

      エクスポートすると、スケジュールデータがzipファイルでダウンロードされる。

      エクスポートが完了したら、次は既存のスケジュールデータを削除する。

      ちなみに私の場合は削除せずに強引にインポートしたが特に不具合は無かった。
      予定がダブったり、予期せぬ動作も考えられるので削除はした方が良いかとは思うが・・

      かれんだー

      既存のデータを削除する。

      エクスポートでダウンロードしたzipファイルを解凍すると、「.ics」という拡張子のファイルが誕生する。

      そのファイルをインポートする。

      か

      ここで今こそインポートだよ。

      カレンダーを確認しスケジュールが表示されていればインポートは完了だ!

      Androidで同期をしてみよう。

      しばらくすると過去の思い出も読み込んでくれるはずだ。

      所感

      私は冒頭でスケジュールが真っ白だったことに関し、驚愕したと述べた。

      しかし、恥ずかしながら「スケジュールが無いことによる安堵感」を感じてしまったことだけは告白しておこう。

      今週は楽できそうだな、そんなことを考えてしまった。

      結局それは夢物語だったのだが。

      普段、こなさなければならない物事に追われている、そういうことを身を持って実感した。

      しかし、「こなさなければならない」ものが「本当にやらなければならないこと」なのか?
      本当は、もっとリラックスして考えてもいいんじゃないか・・
      そう考えることきっかけになったのも事実だ。

      そして、クラウドへの「依存」も実感したことは言うまでも無い。

      クラウドコンピューティングは社会を変えようとしている。
      扱うデータだけでなく考えや想いまでもクラウド化しつつある人も多いだろう。

      だが。

      クラウドとは所詮、有って無いようなもの。

      なにかしらのバックアップは常に考えるべきことなのかも知れない。

      失うものがデータだけでなく、自分のアイデンティティになってしまう前に。


      2011年5月14日土曜日

      Optimus Pad
      Optimus Padの登場だ。

      去る2011年5月12日、「LG Optimus Pad タッチアンドトライ」という、まさにタッチアンドトライイベントに参加させていただきました。

      主催はアプリ紹介サイトとして有名なアンドロイダ-とLG。
      オッパッドことL-06CことOptimus Padを存分に、かつ自由に触ることのできるイベントです。

      Optimus Padと言えばAndroid3.0+Dual coreが魅力の端末。
      そんなOptimus Padの実力をこの眼で確かめてきました。

      2011年3月1日火曜日

      早速Google本社の敷地内にハニーカムのオブジェが登場!

      Google恒例のオブジェクトが公開されたようです。今回はAndroid3.0のコードネームであるHoneycomb(ミツバチの巣)のモニュメントとなっています。また、可愛らしいモニュメントです。

      The Honeycomb statue arrives at Google’s Android HQ

      過去のモニュメントも出ていますが、Gingerbread(しょうがクッキー)の写真が無いので、以下のサイトで確認できます。

      Google Video for Gingerbread Official Unveiling of the Statue

      やっぱり、かわいく良い感じのセンスの良さがGoogleらしい所です。どうやら、立てるのに手伝ったのは実際に開発しているスッタフらしいです。これも、Googleらしいかなと。