すでに、面白いマイマップがエントリーされているのでご紹介します。

カップ酒マップ
日本全国のカップ酒を紹介。カップ酒のパッケージデザインってかわいいものが多いですよね。( 未成年者の飲酒は法律によって禁止されています )


また、このキャンペーンに賛同してくれた著名人の方々もゲストマップをよせてくれました。
女優のサエコさんの「サエコのお気に入りマップ」

他の方のゲストマップも EXPO のサイトからぜひご覧ください。

Google マイマップEXPO 」参加のために、新しいマイマップを作っていただいてもいいですし、過去に作成した自慢のマイマップでも参加いただけます。

お正月休み、書初めならぬ、マイマップ初めはいかがでしょう。みなさまの参加をお待ちしています。 しめきりは2月28日です。


それでは、みなさま、よいお年をお迎えください。



カラオケクラブのブースに立ち寄った方には豪華賞品が当たるチャンスがありました。


私たちもカメラクラブに参加しましょう!


ジャグリングクラブの竹内君の演技は素晴らしかったです。


なお、日本語でブログを書くことは初めてだったので、とっても難しかったです。書く前までできると思っていませんでした。でも同僚の工藤さんの助けを借りて完成することができました。ありがとうございました。







ゲストから、パラダイムシフトという言葉が飛び出すほどの大きな期待が寄せられている Google Gears 。ではどのような使い方があるのでしょうか? 具体的なイメージを得るにはやはり、サンプルアプリケーションを見ることでしょう。次回は Google Gears を使ったサンプルアプリケーションを紹介します。

一言で 「Google T シャツ」 と言っても、色々なバリエーションがあります。

Google Store で販売している T シャツだけでなく、イベントやプロジェクトの立ち上げ時など、色々なタイミングでオリジナルの 「Google T シャツ」 が作られます。少し前のことになりますが、本社の屋上にソーラーパネルを張り巡らせたことを公表したときには、ソーラーパネルの描かれた記念 T シャツが本社中庭で配布されていました。このような限定 「Google T シャツ」 はそのときにしか作られません。レアなのです。

東京オフィスでもそのような T シャツを作ることがたびたびあります。今回はそのうちの一つとして、エンジニアが作った T シャツをご紹介します。

これはエンジニアのオフサイト ( アウトドアイベントを通じて日本のエンジニア同士が交流するイベント ) 記念に作られたものです。でも、オフサイトと関係のない謎の文字列が並んでいます。一体この文字列は……

b;main(){printf("g%sgle",memset(&b,111,atoi(gets())));}

実はこれ、れっきとした C 言語のプログラムです。言語標準に完全に準拠しているわけではありませんが、Linux の gcc では動作します。エンジニアの S.H さんにお願いして書いていただきました。

( コンパイラや実行環境によっては、プログラムだけでなく OS にも悪影響を及ぼす可能性があるので、実際に実行するときには自己責任でお願いします )

では、これは何をするプログラムでしょうか。

このようなプログラム、およびそれを書く行為は、俗に 「コードゴルフ」 と呼ばれています。「与えられた問題に大していかに少ないバイト数で問題を解けるか」 という一種の遊びで、ハッカーの伝統的なスポーツ、とさえ言われています ( ただし、あまり痩せません ) 。http://codegolf.com/http://golf.shinh.org/ が有名な「ゴルフ場」です。

上記のプログラムは 「数値を入力として受け取って、その数値分だけ 'o' を挟んだ "gooo...ogle" という文字列を出力してください」 という問題に対する 「コードゴルフ」 の結果です。


$ cat google.c
b;main(){printf("g%sgle",memset(&b,111,atoi(gets())));}
$ gcc google.c
( 警告が出ますがエラーにはなりません )
$ ./a.out
15
gooooooooooooooogle


T シャツ作りにも Google のエンジニアらしさが現れているのでした。

興味のある方もいらっしゃるかと思いますので、上のプログラムがなぜ動作するのかについて説明します。

まず、全体としては以下のように動作することを意図しています。

  • gets() によりユーザからの入力を受け取る。
  • atoi() で gets() の結果を整数に変換 ( ここではその整数をNとする )
  • memset() で変数 b のアドレスに 111 すなわち char 型で言う 'o' を整数 N 分書き込む。
  • printf() で goo...gle を出力。

このコードが実際にコンパイルされ、意図通りに動作するかは、実行する環境に依存します。細かい点を説明すると、大体以下の通りになります。

  • バイト数を減らすため、stdio.h, string.h に対する include 節が省略されています。
  • 冒頭の "b" は int 型のグローバル変数宣言です。C 言語では仕様により、型名を省略した変数は int 型とみなされます。この規則を利用してバイト数を減らしています。
  • main() の引数も戻り値はなくても動作するので省略されています。
  • gets () は本来引数をひとつ受け取る関数ですが、やはり省略されています。この場合、実行時に gets() がどのようなポインタを受け取るかは未定義ですが、 ここでは 「偶然書き込み可能なメモリ領域へのポインタが渡されていて、ユーザから与えられた文字列が短い」 という条件がそろった時に動作します。結局、実 際に動作するかどうかは環境依存です。
  • 111 は ASCII コードの 'o' を意味します。111 も 'o' も 3 バイトでプログラムのサイズは変わりませんが、見づらくなるように敢えて 111 となっています。  
  • memset() で b へのポインタが指すメモリ領域に整数 N の分だけ 111('o') を書き込んでいます。N が size(int) の値より大きいときにはオーバーフローしますが、与えられた数値がそれほど大きくなければ、オーバーフローしても一応動作します。

私の手元の Linux 環境では入力された値が 2000 程度までは大丈夫でした。別の環境では 4000 程度まで大丈夫だったり、逆にまったく動かなかったりするようです。やはり環境依存な部分が多々あります。

コードゴルフで書かれるプログラムは、そのプログラムが実行される環境に強く依存した形で書かれることが多く、仕事で書くようなプログラムにはあまり向きません。あくまで趣味の領域で愉しむことですね。

もちろん、Google 社内で仕事のプログラムを書くときには、誰もこのような書き方はしませんのでご安心を :-)


Bridge は世界で最も競技人口の多い、4 人用トランプゲームです。このクラブは毎週集まっては何卓かに分かれてお喋りしながらゲームしています。 (注:勧誘の場所なのにゲームが始まってしまいました。)
ちなみに、僕の席の近くには US チャンピオンが座っています。

  • Knitting Club

    編み物クラブです。きれいなマフラー、セーター、ニット帽が置いてあります。写真には写ってませんが、結構人だかりのある人気のブースでした。

  • Juggling Club

    実は私も所属していて、 Mountain View に行く度に必ず遊びに行っているのがこの Juggling Club です。( 注: ジャグリングが始まってしまい、誰も勧誘してません )
    毎週火曜夕方に集まって、みんなで色々なものを投げまわします。

  • Wine Club

    試飲もあり、かなり賑わっていました。ある意味、一番深い交流ができそうなクラブ活動です。
  • Anime Club

    日本発アニメの DVD を音声日本語、英語字幕で見るそうです。右の人は日本語も少しわかります。左の人にはなにかちょっと聞きにくいオーラがあります。


  • いかがでしたか?
    この他にも、サルサダンス、サイクリング、ソフトボールなどの運動系のクラブ活動や、他にも ( 日本語を学びたい人のための ) 日本語でランチの会、など色々な活動があります。
    Google のクラブ活動の一番の特徴は、職種を超えて誰とでも気軽に交流したり情報交換したりできることです。メーリングリストに登録するだけで簡単に参加でき、活動日以外にもメールで盛り上がったりします。
    Google には様々な経歴、趣味、特技の持ち主がたくさんいます。私は普段はエンジニアとして周りのエンジニアと作業することが多いですが、そういった人達とも直接交流できる機会があってとても楽しいです。

    東京オフィスも人が増えてきて、ジャグリング部、ダーツ部、カタン部など続々と New クラブが増えてきました。これからどんな活動がでてくるのか楽しみです。
    次回は日本で行われた Club-day を紹介したいと思います。


    交流会では 、最初にGoogle Gears について Google エンジニアの Gregor Hohpe がプレゼンテーションを行い、Google Gears の最新情報をお伝えしましました。
    続いて開催されたパネルディスカッションでは、パネリストの方々が作成した Google Gears を活用したウェブアプリケーションを中心に Google Gears の活用方法と開発のコツについて意見交換が行われました。とくにGoogle Gears をオフライン時だけに活用するのではなく、新しいアイデアを実現するために積極的に活用するアイデアが提起され、Google Gears のさまざまな可能性が確認されました。

    交流会についての詳細なレポートは後日このブログ上でお伝えいたします。

    WorkerPool (JavaScript にスレッド的機構を追加します)
    前者の2つは、オフラインでのデータへのアクセスを便利にしてくれます。近頃のWebアプリケーションは、常時接続の普及を前提として Ajax などを使い頻繁にサーバに接続しますが、一旦オフラインになると動けなくなってしまいます。LocalServer はその名の通り、ローカルな HTTP サーバであるかのようにキャッシュしたコンテンツをブラウザからオフラインでもアクセスできるようにしてくれます。また、データベース機能は Google Gears の内部に組み込まれた SQLite というオープンソースのデータベースエンジンを利用して SQL を使ったデータの保存や検索を可能にします。ブラウザ上で動作する JavaScript プログラムはセキュリティ上の理由で簡単にローカルデータを参照したり保存したりできません。そのため、これまでは Cookie を使ったり、ある程度以上の大きなデータを扱いたい場合にはデータをオンラインのサーバに置く等の必要がありました。データベースを使えばこのような問題 も解決します。また、データベースには全文検索機能もあり (残念ながら、現時点では日本語のように単語が空白で区切らない言語には対応していませんが将来対応予定です) 、より高度なアプリケーション開発を可能にしてくれることでしょう。

    最後の WorkerPool は、ブラウザ上で動作する JavaScript にスレッド的な機構を追加します。これは必ずしもオフライン Web アプリケーションの開発に必要なものではありませんが、うまく利用することによってユーザの使用感を向上させることができます。Web ブラウザ上で動く JavaScript プログラムは基本的にシングルスレッドで動作するため、ある処理に時間がかかると他の処理が行えず、しばらくボタンが押せなくなる等ユーザーが待たされる ケースが発生していました。この WorkerPool を使えば、データベースの I/O 処理などをメインとは別のスレッドにバックグラウンドで行わせることによって、よりレスポンスのよいユーザインターフェイスを構築することが可能になりま す。

    これらの機能はすべてブラウザ上の JavaScript API から利用可能となっています。API の詳細やコードのサンプルは、Google Code 内のGoogle Gears API サイトをご覧ください。JavaScript や SQL での開発経験があれば、すぐにでもドキュメントを読んで Google Gears API を使い始めることができると思います。

    以上の3機能だけでもかなり強力で、ブラウザ上で実現できるアプリケーションの可能性が大きく広がったように思いませんか?
    これらの機能は、開発者にとってオフラインでブラウザをアプリケーション環境として利用するためのハードルを低くし、より Web アプリケーションを通常のアプリケーションに近づけることを可能にしてくれるでしょう。また、最近 Google Gears と Greasemonkey (任意のサイトで指定の JavaScript を実行できる人気の Firefox 用アドオン) を組み合わせ、自分のサイトだけでなく任意のサイトで Google Gears の機能を使う "GearsMonkey" と呼ばれるテクニックも発明 ( ? ) され、ますます可能性が広がっていきそうです。

    Google Gears はまだベータ版ですが、互換性をサポートするための機構も持っているため (詳細は Factory APIのドキュメント を参照してください) 、将来に渡って同じ API を利用し続けることができます。また、オープンソースプロジェクトとしてプロジェクトページでソースコードを公開しており、Google Gears そのものの開発に参加することも可能です。

    来る 12 月 7 日 ( 金 ) には、当 Google Japan ブログでもご好評頂いているデベロッパー交流会 (第1回, 第2回, 第3回) の第4回がこの Google Gears を題材に品川で開催されます。Gears の具体的な使用方法やテクニックについて話題にする予定です。今回は、一般聴講者の参加も募集していますので、Google Gears に関してもっと知りたい、先進的な Web アプリケーションを作ろうと考えいてる方は、ぜひ足をお運びいただければと思います。参加登録などはこちらをご覧ください。




    交流会の様子
    (Googleへの要望・質問)



    最後はGoogle Data APIsとは離れた質問となってしまいましたが、盛り上がった交流会の様子は伝わったでしょうか?

    次回は恒例の懇親会の様子をお伝えします。


    Google Data APIs サンプル・アプリケーション

    石原:Google Data APIsが何かを理解するには、事例を見ることが一番分かりやすいですね。皆さんが作られたウェブアプリケーションを紹介してもらえますか。

    櫻吉さん:私はGoogleカレンダー を利用し、タスク管理を行うアプリケーション「二次元タスクリスト 」を作りました。これは2つのGoogle カレンダーを利用しています。それぞれを「タスク登録用」「作業時間登録用」として必要事項を記入します。これらのカレンダーからGoogle Data APIsを用いてデータを取り出してマージし、緊急度と重要度を座標軸としてタスクを表示したものが「二次元タスクリスト」となります。

    半谷:これはGoogle カレンダーがプライマリー、セカンダリーという形で複数のカレンダーをもてる機能とGoogle Data APIsの特徴を最大限に利用したアプリケーションですね。サービスを提供する側としては、ここまで使い込んでくれると嬉しいですものです。

    桜庭さん:私はPicasa ウェブアルバム を利用したアプリケーションを作ってみました。ロジックはJavaで、GUIJavaFXで作り、Picasaから画像データを取得して、iPodのように写真を表示するアプリケーションです。

    作ってみて気がついた点は、認証の仕組みがシンプルで開発がとても楽だったことです。Flickrでも同様なことを作るのは可能ですが、認証の仕組みが煩雑なので、それと比べるとGoogle Data APIsはとても使いやすいですね。

    石原Picasaからは画像の他にもデータは取得できるのですか

    桜庭さん:画像のほかに、画像名や撮影日時などのメタデータも取得できます。あらかじめ登録されているならば、ジオデータを取得することもできます。

    半谷:Google Data APIsを使い、あとからジオデータを付加することもできますね。

    桜庭さん:Google Data APIsを利用したウェブアプリケーションとして「こみゅすけ」を紹介しましょう。これは私の友人の田中洋一郎さんが作成したもので、コミュニティの活動情報をまとめて見られるサービスです。Googleカレンダーに登録されたイベント情報をGoogle Data APIsを利用して取得し、地図上にプロットします。たとえば、来週のイベントを調べれば、場所と時間、天気予報まで表示されます。

    Google Data APIsでビジネス

    石原:ではGoogle Data APIsをビジネスで活用するにはどのようなアイデアがあるでしょうか?

    尾藤さん: 今日(注)リリースされたSNS 共通規格であるGoogleの「OpenSocial」はGoogle Data APIsと関係しているのでしょうか?関係しているならばビジネス的に大きな意味を持つと思います。

    (注:「デベロッパー交流会(第3回)」は112日に開催されました)

    半谷:関係してくると思います。簡単に言えば、Google Data APIsを使いSNSのデータにアクセスできることになります。OpenSocialによって さまざまなSNSに対し共通したAPIでアクセスできるようになるということは、Google Data APIsを活用することによって、複数のSNSをまたいだサービスが実現できるということになります。

    桜庭さん:となると、RSSリーダーのSNS版のようなものも出てくるでしょうね。

    増井さん:アイデアはいろいろひらめきます。帰ったらOpenSocialについてのドキュメントを読んでみます!

    尾藤さん:もう1つ気になることがあります。GoogleのAPIを利用して本格的なビジネスを行う場合、たとえばアクセスが急増するような事態となることでGoogleのAPIが利用できなくなるのではという恐れがありますが、良い解決方法はあるのでしょうか。

    石原:Google のAPIはライセンスの範囲内で基本的に無料でお使いいただけます。しかし、より高いレベルの保障が必要なお客様には有償ライセンスプログラムも用意して います。Google Data APIsに対応したGoogle カレンダーやGoogle ドキュメントについてはGoogle Apps Premier Edition をご利用いただければ、ビジネスでお使いいただくうえでも満足していただけるはずです。





    交流会の様子
    (サンプル・アプリケーション)




    交流会の様子
    (Google Maps API でビジネス)

    ちょうど交流会の開催日に発表されたGoogleの新しい技術で話題が盛り上がったひと時でした。リアルタイムで新たな技術の登場とその展望を語り合えたことは、とても貴重な経験でした。このディスカッションが皆様のビジネスのヒントとなればと思います

    次回はGoogle Data APIsに関する苦労話や質問をお伝えします。




    これまでのデベロッパー交流会でご紹介してきたiGoogleGoogle Maps APIとは異なり、さまざまなサービスに対応するGoogle Data APIsは、立場によって捉え方が異なることがお分かりいただけましたでしょうか?次回はGoogle Data APIsGoogleのサービスを活用した開発例を紹介します。



    いつもとは違った相手との対戦によって緊張感のある試合ができ、楽しい一日となりました。
    交流試合のお誘いを頂いたサイボウズさん、本当にありがとうございました!
    (サイボウズさんにもブログ記事を書いていただきました。 サイボウズ マーコムブログ:グーグルとの直接対決!)