« 2008年5月 | メイン | 2008年7月 »

2008年6月 アーカイブ

2008年6月29日

SIer向けの管理ツールが欲しい

最近SIer的な仕事に戻っているのですが、チームリーダなんてのを任される年次になってしまったので、せっかくだから新しいツールを色々と導入したいなぁと思っています。

Subversionでドキュメント(Word,Excel)を管理、ってのはまあ最近でも良く聞く話で。

TortoiseSVNを使ったら、変更履歴がちゃんとWordやExcelのファイルの中で見られますよ、と。かなり便利ですよね、これ。

あと、コミュニケーションとか議事録、メモ代わりに先日SKIPとしてオープンソース化された社内SNSを使うようにしました。

ただ、これだとうちの会社に来てもらっているパートナーさんは使うことができないんですね(社内限りの情報もあったりするので、うちの会社では社員限定なのです)。

ちょっとしたURLや情報やりとりは、Google Talksみたいなのでやって、後で検索できるようにしておきたいしなぁ。

バグ管理、不具合管理もいい加減Excelから卒業して、BTSを使いたいのですが、パートナー企業に開発をお願いしていたりすると、ソースの修正がBTSのチケットと紐付けるのが難しくなる、というより不可能になってしまうので、BTSのうま味を活かしきれないんですよねぇ。

みんなの予定を管理するスケジューラも、サイボウズとか、Google Calendar(もちろん非公開で、かつ登録する内容はぼかして)とか、色々選択肢はあるのですが、どれも帯に短し、たすきに長しになってしまうのです。

あと、使うツールを増やせば増やすほど、付いて来れない開発者も多くなってきますし・・・。

自分の中でぼんやりと出来上がっているツールが使えたら良いんだけどなぁ。まあ、開発者だったらそんなの愚痴ってないで作っちゃえ、という話ですよね。

2008年6月30日

お金をカウント

"Code Challenge: Change Dispenser"より、0.37ドルがコインだと何枚になるかカウントするロジック。

function makeChange (money) {
    var i, num,
        output = [],
        coins  = [
            [100, "dollar",  "dollars" ],
            [25,  "quarter", "quarters"],
            [10,  "dime",    "dimes"   ],
            [5,   "nickel",  "nickels" ],
            [1,   "penny",   "pennies" ]
        ];
    money = money * 100; // avoid float precision issues
    for (i = 0; i < coins.length; i++) {
        num = Math.floor(money / coins[i][0]);
        money -= num * coins[i][0];
        if (num) {
            output.push(num + " " + coins[i][num > 1 ? 2 : 1]);
        }
    }
    return output.join(", ");
}

makeChange(0.37); // "1 quarter, 1 dime, 2 pennies"

ポイントは、コインが複数のときは単位を複数形にするところですね。

これを応用して、日本のお金で。

日本円の場合、複数になっても単語が複数形にならないから、若干楽かも。

function makeChange (money) {
    var i, num,
        output = [],
        coins  = [
            [10000, "1万円札"],
            [5000,  "5000円札"],
            [2000,  "2000円札" ],
            [1000,   "1000円札" ],
            [500,   "500円玉" ],
            [100,   "100円玉" ],
            [50,   "50円玉" ],
            [10,   "10円玉" ],
            [5,   "5円玉" ],
            [1,   "1円玉" ]
        ];
    for (i = 0; i < coins.length; i++) {
        num = Math.floor(money / coins[i][0]);
        money -= num * coins[i][0];
        if (num) {
            output.push(coins[i][1]+ " × " + num );
        }
    }
    return output.join(", ");
}
makeChange(12057); // "1万円札 × 1, 2千円札 × 1,  50円玉 × 1, 5円玉 × 1, 1円玉 × 2"  

だからどうしたってロジックですね。

2008年6月28日

SKIP -オープンソースへの道-

先日のRuby Kaigiで発表された、倉貫さんによる「Ruby×AgileによるSNS構築事例~オープンソースへの道~」がニコニコ動画で観られるようになってます。

Ruby×Agileによる社内SNS構築事例〜オープンソースへの道〜‐ニコニコ動画(SP1)

大会社の中でオープンソース化するための難しさや、自分、会社、世界を変えていこうという強いメッセージが伝わってきます。

僕もこのSNSの恩恵にあずかった一人なので、倉貫さんやSKIPに対して恩返しをしていきたいなぁと思っています。

いつになるかは分かりませんが(まずはRuby覚えろって話かな)。

2008年6月27日

仕事が忙しくなると、ブログ更新が滞る

プライベートな時間が減るから当たり前と言えば当たり前なんですが。

書く時間が減ることよりも、インプットの時間が減るからという方が更新が滞る理由のような気がしますね。

Google Readerの未読フィードもなかなか消化できないしなぁ。

ブログ書いて発散していた何かが、もんもんと蓄積されてしまい、ストレスで通常の仕事がうまく回らないと言う悪循環になってます。

通勤時間とかもっと有効に使わねば。

2008年6月26日

OCNが転送量の制限

1日30GB以上も送信したら利用停止、OCNが8月1日よりヘビーユーザーの制限へ | ネット | マイコミジャーナル

おそらくファイル共有ソフトとかを使っているユーザへの対応なんでしょうね。

僕はその手のソフトを使っていないので、特に困らないとは思いますが・・・。

YouTubeとかニコニコとか、一日中見ていたら転送量ってどれくらいになるんだろ。それでも30Gにはいかないですよね、きっと。

MA4に参加しよう!

MASHUP AWARD事務局のSUN藤井さんのブログより。

リアルな親父のMashup : 日々是新 Akihito Fujii's Weblog

まだまだMashup Award 4th 知られてないようです(涙)。一応世界一のMashup Contestを目指していますので、是非みなさん参加&宣伝への協力をお願いします。Mashup Awardは、開発者が新たなステージに上るためのコンテストでもあります。是非参加登録だけでなく、blog, mailなどでの告知の協力をお願いします。宣伝費はありません(笑)。口コミ命です。ご協力をお願いします。文句のあるかたは藤井まで直接教えてください。いろいろなご意見歓迎です。

だそうです。

まだまだ参加登録者少ないのかな。

こういうのは、「あとで」と思っているといつの間にか忘れてしまうので、気が付いたときに脊髄反射で登録するのが良いと思います。参加費無料だし、参加登録して結局応募しなかったとしても何のペナルティもないわけだし。

1人で参加するのが自信ない人は、誰かと一緒に参加すればいいし。

「プログラミングしたいけど、仕事ではなかなかそういう機会がなくて・・・」と思っているエンジニア(特にSEの人)は、この機会を活用するべき。なんてったって出品すれば100万円もらえる可能性があるわけだからね。勉強にもなって、エンジニア同士のつながりができて、さらにお金ももらえたら最高じゃないですか。

さあ、今すぐ参加登録を!

※MAがらみでちょっと企画しているブログのネタがあるので、うまくまとまったら公開します。

2008年6月24日

Google Map Maker

GoogleがGoogle Map Makerをリリースしました。

Google Map Maker

ユーザが地図上に情報を登録することで、Google Maps本体へ地理情報をマッピングしていくサービスのようです。

これまでにキプロスなどの小さな国で実績があるようですね。

個人的には、日本の地図がゼンリンの地図ではなくGoogle提供の白地図になっているのがおもしろかったです。

2008年6月23日

MASHUP AWARD 4thカウントダウンガジェット

以前公開した「MASHUP AWARD 4thカウントダウンガジェット」をバージョンアップしました。

今回のバージョンアップで、MASHUP AWARD 4thのバナーを表示できるようになりました。表示するバナーはガジェットの設定から選択することができます。

↓ノーマルな設定だとこんな感じで、テキストの"MASHUP AWARD 4th"と締め切りまでの残日数を表示します。

↓ガジェットの「▼」をクリックして「設定を変更」をクリック。

ma4gadget_001.png

↓バナー画像は以下のプルダウンから選択できます。全4種類で、「ランダム」を選択すると4種類の中からランダムで表示します。

ma4gadget_002.png↓カウントダウンの表示を消すこともできます。

ma4gadget_003.png
ブログに貼り付けるには、↓以下のページでコードを生成します。

自分のサイトにガジェットを追加

↓生成されるコードで以下のようなガジェットを貼り付けることができます。

モチベーションの維持にご利用ください。

2008年6月22日

Google Trendsの新機能

Google Trendsで、ウェブサイトのトレンド(アクセス状況)も見られるようになったようです。

↓こちらが、chrisryu.comドメインのTrend。

Google Trends for Websites: chrisryu.com

零細ブログなので、アクセス数は表示されませんが、「Also visited」のところと「Also searched for」ってところが丸見えなのがおもしろいですね。

今のとこ、chrisryu.comドメインはredmineとjqueryで注目されているサイトのようです。

↓gihyo.jpとthinkit.co.jpとcodezine.jpを比較したものがこちら。

Google Trends for Websites: gihyo.jp,thinkit.co.jp,codezine.jp,

gihyo.jpが伸びてきているのが分かります。また、年末年始にアクセスが落ちているのもおもしろいです。

2008年6月21日

SKIP USER GROUP

TISが公開したオープンソース社内SNSのユーザグループが公開されています。

SUG

Skip User GroupでSUGですね。

このサイト自体がSKIPで運営されています。未ログイン状態でサイトを表示すると、ゲストアカウントでログインした状態になっています。この状態だと、機能がかなり制限されるので、SKIPを試してみようと思っている方は、是非ユーザ登録をして、使い心地を確かめてみてください。

2008年6月20日

Google Chart API の Google-o-meter

Google Chart APIにあるGoogle-o-meterってちょっとおもしろいです。

↓こんなURLで、

http://chart.apis.google.com/chart?chs=225x125&cht=gom&chd=t:80&chl=now

↓こんなグラフが取得できます。

パラメータの意味は以下の通り。

chs : グラフの大きさ(横 x 縦)

cht : グラフのタイプ(Google-o-meterのときはgom)

chd : グラフのデータ(,区切りで複数指定可)

chl : ラベル(|区切りで複数指定可)

↓ということで、こんな感じのグラフもできます。

http://chart.apis.google.com/chart?chs=400x200&cht=gom&chd=t:90,80,20&chl=today|yesterday|tomorrow

ラベルに日本語を指定できるようになって欲しいなぁ。

2008年6月19日

外部JavaScriptファイルをロードして、そこに書かれている関数を実行する。

Greasemonkey勉強会で紹介したJavaScriptのTips。

hoge.jsにhogeFuncが定義されていて、hoge.jsを読み込んですぐにhogeFuncを実行したいとき。

↓こんな風に書いちゃうと、エラーになってしまいます。

var s = document.createElement('script');
s.type='text/javascript';
s.charset = 'utf-8';
s.src = 'hoge.js';
document.getElementsByTagName('head')[0].appendChild(s);
hogeFunc();//この時点ではまだhoge.jsがロードされていない可能性が高い

hoge.jsのscriptタグをappendした後、実際にhoge.jsがダウンロードされ、JavaScriptが解釈されるまではhogeFuncは実行できません。

ということで、↓こんな風にしてsetIntervalで定期的に処理を実行してやればOK。

var s = document.createElement('script');
s.type='text/javascript';
s.charset = 'utf-8';
s.src = 'hoge.js';
document.getElementsByTagName('head')[0].appendChild(s);
var timerId = setInterval(timerFunc,100);//100msecごとにtimerFunc()を実行
function timerFunc(){
  if(window.hogeFunc){
    clearInterval(timerId);//100msecごとに実行している処理を停止
    hogeFunc();//ロードされているのでエラーが起こらない
  }else{
    //hogeFuncが定義されていない場合はここを通る。=何もしない
  }
}

2008年6月18日

グリモン勉強会

会社でGreasemonkey勉強会を開催してきました。

発端は、社内SNSに投稿された一つのGreasemonkeyに関するエントリ。これに「おもしろいね」「勉強会したいね」というコメントが付いていたので、「じゃあ開催しましょう」と。

そこから2週間後くらいに開催日を設定して、社内SNSのイベント機能(オープンソース版にはこれから移植)を使って、出席者を管理して。

うちの会社は、部署によって竹芝と芝浦ふ頭に分かれている(ゆりかもめで2駅)んですが、開催場所を芝浦ふ頭にしたにも関わらず、竹芝からも数名参加してくれました。というか半分くらいそうだったかな。

当初は、Greasemonkeyとはなんぞや的な発表とか、いわゆる勉強会的なノリを想定していたのですが、勉強会を前にして、社内SNSの掲示板に次から次へと「こんなグリモン作ったよ」という投稿が相次ぎ、勉強会を前に手の内を晒すことに。

それがかえって、「あいつがあんなの作ってるんだから、俺はこんなのを作るんだ」と、みんなの闘争心に火をつけたようで、おもしろいグリモンがいくつも誕生しました。

勉強会の場でも、それぞれが5分くらいで自分の作ったグリモンを紹介して、技術的に苦労したところや、分からなかったところを、他の参加者に意見を求める的な流れで、なかなか盛り上がりました。

僕が作ったのは、社内SNSのブログの投稿で、PREタグに対して、pretty-printを実行するグリモンと、社内SNSのアクセスランキングのページにGoogle Chart APIを使ってグラフを追加するというグリモン。

両方とも、ちょっとしたテクニックを使っていて、参加者には割と好評でした。

その他、アクセス数が3の倍数(ry のとき、プロフィール画像があほになるグリモンとか、ブログの投稿欄にガンダムの名言を差し込むグリモンとか、便利なキーボードショートカットを追加するグリモンとかとか。

技術的におもしろいものや、アイデアの着眼点がおもしろいものとか。ほんと刺激になりましたよ。

こういう技術的な勉強会を開催して、それぞれ手持ちのアイデアを持ち込んで楽しめるって、うちの会社のまだまだ捨てたもんじゃないなと思いました。

2008年6月17日

TIS発Rails製オープンソース社内SNS「SKIP」のダウンロード開始!

以前に紹介したTIS発のオープンソース社内SNS「SKIP」のダウンロードが開始されました。

まずはversion0.9がリリースされているようです。

SKIP - オープンソースSNS「SKIP」を公開しました。

ダウンロードはこちらから。

サイトはMovableTypeで、リポジトリはSubversion、ドキュメントはGoogle Site、Issue TrackingはRedmineですよ。今風ですねぇ(←この感想がすでに死語)。

今夜はFirefox3のダウンロード開始日だし、オープンソース界隈がにぎやかですなぁ。

明日は業務後に、SKIP開発者達も交えて、Greasemonkeyの勉強会を開催予定。

如何にTCポータル(社内でのSKIPの名称)をGreasemonkeyでHackするかというところに主眼を置いて、というかいつのまにか置かれていて、勉強会を前に、社内SNSの掲示板では「こんなの作った」「これおもろい!」みたいなやりとりがなされています。

ユーザのプロフィールや名前をすべて社長に置きかえるというグリモンを考えたんだけど、悪ふざけしすぎかなと思い自重。まあでも明日になったら勢いで作ってるかもね。

↓ダウンロード開始については開発者達も自分のブログで報告してます。

オープンソースSNS「SKIP」がリリースされました! - RX-7乗りの適当な日々

SKIPのバージョン0.9.0がリリース - maeda.na@はてな

2008年6月16日

Amazon.comの本をGoogle Maps風に閲覧する"Zoomii.com"

Amazon Web Services Blogで、Amazon.comの本を本棚風に閲覧できて、マウス操作でズームイン/アウト、商品の詳細表示等ができる「Zoomii.com - The "Real" Online Bookstore」が紹介されていました。

Amazon Web Services Blog: Zooming in on Innovation

動画は↓こちら。

あれ、なんか既視感が・・・と思ったら、自分が作った「Amazon ベストセラー ビューア」にコンセプトが似てましたよ。まあ、僕の方はベストセラーのRSS拾ってきて表示しているだけですが。

ちょうどAWSを使って、詳細表示やカートに追加、検索を実装しようかなと思っていたところだったので、若干意気消沈。やっぱ同じこと考える人いるよなぁと。キーボード操作は「Zoomii.com」にはまだないみたいなので、この点をもっとプッシュしていこうかな。

Zoomii.comは、Flashアプリかと思ったら、Ajaxアプリでした。細かい画像がいっぱいあるように見えますが、各ズームレベルで↓こういうタイルをいくつも生成して並べているようです。

なるほどねぇ。

Google App Engineでオフラインタスク(バッチ)が実行できるようになったら、似たような処理を書いてみようかな。

ちなみに、「Ajaxアプリでアンカーを使ってURLを一意にするテクニック (でぃべろっぱーず・さいど)」で書いた「URLのアンカーで、表示位置を表現する手法」もZoomii.comで使われています。

2008年6月15日

jQueryのテスティングフレームワークQUnit

jQueryのSubversionリポジトリにtestフォルダがあって、jQuery自身のテストが納められていたのですが、そこで使われているテスティングフレームワークがQUnitとしてトップレベルのプロジェクトになったようです。

QUnit - jQuery JavaScript Library

これを使うと簡単にjQueryプラグインのテストコードが書けちゃいます。

使い方は以下の通り。

提供されているメソッド

test( name, test ) : nameにテストの名称、testには実行するテストを関数の形で渡します。

module( name ) : テストの途中で、テスト対象のモジュールや関数の目印を付けたいときに使います。nameにはモジュールの名称を渡します。

ok( state, message ) : stateがtrueならOK、falseならNGという判定になります。messageはテスト時に表示するメッセージです。

equals( actual, expected, message ) :actualとexpectedが同値ならOK、異なればNGという判定になります。messageは同上。

expect( amount ) : そのテスト(text(name,test)で引数に指定しているテスト関数)の中で実行されているok()/equals()の数をamountに指定します。テストの数が異なれば、エラーが表示されます。

start( ) : テストを再開します。

stop( ) : テストを中断します。Ajaxで非同期通信等のテストを行うとき、非同期処理前にstop()でテストを止め、非同期処理終了時のコールバック関数内でstart()を実行して、テストを再開します。

サンプル

実際のテストケースを見た方が早いと思うので、以下にQUnitのページで紹介されているサンプルコードを掲載します。

test("a basic test example", function() {
  ok( true, "this test is fine" );
  var value = "hello";
  equals( "hello", value, "We expect value to be hello" );
});

module("Module A");

test("first test within module", function() {
  ok( true, "all pass" );
});

test("second test within module", function() {
  ok( true, "all pass" );
});

module("Module B");

test("some other test", function() {
  expect(1);
  ok( true, "well" );
});

このテストの実行結果はこちらのページで確認できます。

テスト結果の行の最後の3つの数字は、それぞれ「エラー数」「成功数」「テスト総数」を意味しています。

結果の行をクリックすると、各テストのメッセージが表示されます。エラーが発生していた場合は、ここで、どのAssertでエラーが発生したかが分かります。

ということで、上記サンプルをちょっといじって、エラーが発生するパターンのページを作ってみました。

こちらでご確認ください。

equalsでエラーが発生した場合は、期待値と実際の処理結果の値が画面に表示されます。

非常にシンプルなフレームワークなので、さくっとテストを書くことができて便利です。

QUnitの基本的なHTMLは以下のようになります(DLはこちらから)。下記のページに、テストしたいjsを読み込んで、テストコードを書けばOKです。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>QUnit sample</title>
        <script src="http://code.jquery.com/jquery-latest.js">
        </script>
        <link rel="stylesheet" href="http://dev.jquery.com/view/trunk/qunit/testsuite.css" type="text/css" media="screen" />
        <script type="text/javascript" src="http://dev.jquery.com/view/trunk/qunit/testrunner.js">
        </script>
        <script type="text/javascript">
            $(function(){
                try {
                    //ここにテストを記述
                } 
                catch (e) {
                }
            });
        </script>
    </head>
    <body>
        <h1>QUnit example</h1>
        <h2 id="banner"></h2>
        <h2 id="userAgent"></h2>
        <ol id="tests">
        </ol>
        <div id="main">
        </div>
    </body>
</html>

テストケースを、どのように書いたら良いか分からない方は、本家のjQuery自身のテストケースを見てみることをおすすめします。以下にテストJavaScriptコードのリンクをいくつか紹介します。

2008年6月14日

Google Earth on Google Maps

Geekなページに、Google MapsのMap Typeを"G_SATELLITE_3D_MAP"にセットすると、Google Earthが表示できるというのでやってみました。

Geekなぺーじ : Google MapsでGoogle Earthを表示する

先日のBarNaviのAPIを使って、銀座コリドー街付近のバーの位置を表示しています。(簡易版なので、クリックしたらバー情報が見られるとかは実装してないです)

通常のGoogle Maps版

Map Typeが"G_SATELLITE_3D_MAP"版

Google EarthのAPIを見ると、Google Maps とはまた微妙に異なるAPIの使い方(書き方)になっているようですが、Google MapsのMap typeを変更する方法だと、マーカの表示はそのままのコードで動きました。

うまくすると、「Google Earthが使える人は3Dで、そうでない人は通常のMapで」という自動切り替えが実装できるのかも。

↓今回作ったコードはこちらです。

javascript

google.load("feeds", "1");
var map;
var map2;
function initialize() {
    init(G_NORMAL_MAP);
}
function initialize2() {
    init(G_SATELLITE_3D_MAP);
}
function init(type){
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(35.671051, 139.760535), 18);
        map.setMapType(type);
        var obj = {
            "key":"barnavi-api-key"
            ,"pattern":"1"
            ,"lat":"35.671051"
            ,"lng":"139.760535"
            ,"range":"1000"
            ,"datum":"world"
            ,"type":"0"
            ,"_callback":"cb"			
        }
        var url = getRequestUrl(obj);
        $.getScript(url);
    }
}
function getRequestUrl(obj){
    var base = 'http://pipes.yahoo.com/pipes/pipe.run?_id=7J43uok43RGoLtmxTqoASA&_render=json';
    var param = [];
    for(p in obj){
        param.push(p + '=' +obj[p]);
    }
    return base + '&' + param.join('&');
}
function cb(data){
    var shops = data.value.items;
    for(var i = 0,len = shops.length;i<len;i++){
        var point = new GLatLng(shops[i].lat_world,shops[i].lng_world);
        map.addOverlay(new GMarker(point));
    }
}

HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<link rel="stylesheet" href="./css/main.css" type="text/css"><link>
        <title>Google Maps</title>
        <script type="text/javascript" src="http://www.google.com/jsapi?key=apikey">
        </script>
        <script type="text/javascript">
        google.load("jquery", "1.2.6");
	google.load("maps","2.x");
        </script>
        <script type="text/javascript" src="./js/s.js">
        </script>
        <script type="text/javascript">
	$(initialize);//Earth風のときはinitialize2を使う
	$(window).unload(GUnload);
        </script>
		</head>
    <body>
<div id="map_canvas"></div>
    </body>
</html>

2008年6月13日

SIer向いてないな・・・

最近自分がSIerに向いていないとつくづく思っているわけですが。

SIerだからこそ体に染み付く本当に大切な事 - makoto_way’s Diary - Business/Marketing&AD

SIerだから身に付くもの、というのは確かにあると思います。大手のSIerだと、社内に仕事は標準化する、標準化のルールに従って行う、というイロハが当たり前のように行われているので、この手のルール化がいまいちなところに飛び込んでみると、「なんか自分っていつの間にか鍛えられていたな」と思うこともしばしば。

上記リンク先に書いてあることは、だいたい同意できるところだけど、↓この部分だけは理解することは無理だなと思いました。

3点目は、顧客が成果を出すために命を削ってコミットしていく

本質的な顧客志向。

タバコ吸わないのにタバコ部屋に行ってまでコミュニケーションをとっていた。

そう、どうせやるなら、顧客のために何かをやりたい。

自分のために命は削れても、顧客のためには削れないと思った。

世に言うデスマを立て直し、バリバリと案件を推進していく人ってのはきっと引用部分に書いてあることを実践・理解出来る人なんだろうなぁ。僕には無理ですわ。この時点でSIerに向いてないのかも。

2008年6月12日

SUNTORY BarNaviのYahoo Pipes

GDDが終わったので、気持ちを徐々にMA4へ切り替えていきます。

以前、Mashup Award 4thのエントリを書いたときに、SuntoryのBarNavi APIが気になっているということを書きました。

で、さっそくAPIの利用申請をして使おうとしたら、どうもフォーマットがXMLだけっぽい。なのでPipesでデータを取得できるようにしました。たいしたことはしてないのですが、まあ同じAPIを利用しようと思っている人がいたら、これを使うなりコピーするなりしてください。

Pipes: BarNavi

jQueryと使うならこんな感じすると良いかも↓

$(init);
function init(){
var obj = {
	"key":"your key"//BarNaviのAPIのKey
	,"pattern":"1"
	,"lat":"35.671051"
	,"lng":"139.760535"
	,"range":"1000"
	,"datum":"world"
	,"type":"0"
	,"_callback":"cb"//コールバック関数
}
var url = getRequestUrl(obj);
$.getScript(url);
}
function getRequestUrl(obj){
  var base = 'http://pipes.yahoo.com/pipes/pipe.run'
+'?_id=7J43uok43RGoLtmxTqoASA&_render=json'; var param = []; for(p in obj){ param.push(p + '=' +obj[p]); } return base + '&' + param.join('&'); } function cb(data){ //処理を記述 }

あくまで1例ですが。

さ、「おもろー!」なアプリのネタを考えようかな。

2008年6月11日

Google Developer Day 2008 Japan レポート

Google Developer Day 2008のレポートを基調講演からと思ったのですが、基調講演については色んなニュースサイトやブログで取り上げられているので、割愛します。

2年連続でGDDに参加しての感想と、僕が参加した「Google Data API」と「OpenSocialコードラボ」について書きます。

全体の感想

昨年のGDDでは、基調講演のときにMappletsやGoogle Gearsの発表があり、かなりわくわくドキドキさせられました。今年のGDDにも、なんとなくそんな「サプライズ」を期待していったのですが、その期待はあっさりと裏切られました。

GDDの親玉イベントであるGoogle I/Oが5月末に開催されたためか、まだどこにもリリースされていないニュースやAPIの発表はありませんでした。まあ、これは僕が勝手に期待していただけなので、だから今年のGDDはいまいちだった、なんていうつもりは全然ありません。

むしろ今後の開発やエンジニアライフへの影響を考えると、昨年以上の刺激やつながりを得られたと思います。

GDD全体のトーンは、Gears、OpenSocial、Android、Google App Engineという、Googleが力を入れているという3C (Client / Connectivity / Cloud)というコンセプトを軸にして、開発者にGoogle のAPIを紹介し、実際に使ってもらおうというもの。

Googleの及川さんが、基調講演の際、One more thing として4つめのCであるCommunityを挙げられていましたが、このコミュニティを育てること(もしくはそのきっかけを作る)こそがGDDの真の目的であるように思いました。

GoogleのAPIに慣れ親しんでいる開発者は「認定エキスパート」として、Google APIの初心者・中級者を引っ張る立場としてGDDに参加できるようにし、コードラボセッションのような上級者向けのセッションを用意する一方で、初心者向けのセッションも多数用意して門戸を広げていました。幅広いレベルのエンジニアが参加できて、それぞれに得るものがあるという場をGDDは実現しようとしていたのだと思います。

最後のSocial Talkという懇親会の場では、GDDに参加した人たちどうしがあちこちで名刺交換や話をしていて、活気にあふれていました。僕もOpenSocialセッションで説明していたGoogle社員のクリスさんに思い切って英語で話しかけてみました。下手な英語にもかかわらず、一生懸命聞いてくれて、「他に質問はないかい?何かあったら名刺のアドレスまでメールしてくれ」みたいなきさくな言葉もかけてもらいました。

ああいう場に行くと、知らない人に囲まれてついついしり込みしてしまいがちですが、積極的にいろんな人に話しかけてみることが楽しむこつですね。

来年も開催されるなら、また参加したいなと思っています。GoogleのAPIを使い倒して、認定エキスパートにしてもらえるくらいになっていると良いな。

では、僕が参加したセッションについての内容と感想を続けます。

Google Data API

Google CalendarやGoogle Healthなど、GoogleにストアしたデータをCRUDするためのAPIの総称がGoogle Data APIになります。

Google Data APIs - Google Code

AtomPubのプロトコルで実現されており、非常に簡単にデータを取り扱うことができます。

通常のRSSと違い、Googleの認証基盤を使うので、個人的なデータもhttpsで通信して安全に利用できます。

YouTubeやPicasaから動画・静止画データを取得したり、カレンダーやノートブックを使って便利なマッシュアップサイトを作ったりするのに便利そうでした。

Mashup Award 4th で使ってみよ。 

コードラボセッション「OpenSocial」

OpenSocialのハッカソン。

30名弱のエンジニアが集まって、OpenSocialのアプリを作るというもの。JavaScriptでお手軽に作れることもあってか、他のコードラボに比べて遅めの開催(14:00~)でした。

最初にGoogle社員のクリスさんから、OpenSocialについての説明(英語)が10分ほどあった後、ネタ出しブレストがあって、それぞれ自分が作りたいアプリに近いもので2~4名のグループを作りました。

僕のグループは、「友達リストにタグ付けしたり、タグで絞ってメッセージを送信できるようなアプリが作れたらいいねー」というグループ。このグループ分けの時点で15時だったので、実質アプリ構築の時間は2時間程度。

最初に自己紹介をしたのですが、なんとまずいことに、3人とも前日の夜にOpenSocialのチュートリアルやってみましたという状態。やりたいことに近いチュートリアルのコードを参考に作ってみましたが、いかんせん付け焼刃で、友達にタグをつけられるはずが、友達に「hoge」という固定のタグをつけるだけのアプリになってしまいました。むむー。

Googlerいわく、ハッカソンでアプリが完成することはあまりないとのことだったので、今後時間を見つけて続きを作っていけたらと思います。やっぱ事前の予習は超重要ですね。ちょっとガジェットが作れるもんだからっていい気になっていた自分のバカバカバカ。

部屋の後ろにコーヒーやパン、クッキーがあったのですが、プログラミングに熱中するあまり、それに気づきませんでした。もっと余裕をもってやらないとなー。

17:00からは、各チームの成果発表会。

友達リストでカバラ占いを作ったチームもあれば、ビデオチャット等サーバサイドアプリをがっつり使ったアプリを作ろうとしたチームもあり。個性があっておもしろかったです。GDDサポータの山下さんのチームは、Google App Engineのアプリと組み合わせて足跡アプリを作ってました。すごいっす。

少々不完全燃焼だったので、また機会があれば、こういうハッカソンに参加してみたいなと思いました。 

<関連エントリ>