2011/12/20

Web Storage APIを別空間から使ってみる - HTML5 Adv




12月20日のHTML5 Advent Calendar担当の@shoitoです。

今回は、以前にも本ブログで軽く紹介したことがある、Web Storage APIをFlash側と共有する簡単な方法について紹介します。業務でHTML5(File APIやWeb Storage, Application Cache...)以外にも、Flash/Flexもまだ現役で使用中(主にメンテ)なので、その両方に関係するネタを扱うことにしました。

ページの一部にFlashが埋め込まれているようなページで、HTML部分とFlash部分の共有ストレージ領域を設けられないかと思って、Web Storage APIに今回白羽の矢が立ちました。

多くのブラウザで利用できるAPIであることが大事ですので、Web Storage APIについて確認してみると、IE6, 7以外のほとんどのブラウザで使えることがわかります。

イメージ的には下記のようになりますが、Web Storage APIはもちろんJavaScript APIなので、ページ内のJavaScriptから簡単に扱えます。しかし、Flash側からWeb Storageのストレージ領域にアクセスするAPIがありません。そこでActionScriptでWeb Storage APIを実装します。青の矢印部分。

まず、ActionScriptのAPIを実装するために、W3Cで公開されているWeb Storage API仕様を確認すると、引数、戻り値の方は基本的にvoidかDOMStringなので扱いやすそうです。
Web Storage API自体シンプルなので、メソッドの数も多くはありません。なお、Local StorageとSession Storageはインターフェースは同じで、スコープが違うだけです。

次に、実装に用いるflash.external.ExternalInterfaceクラスのリファレンスに目を通すと下記のように説明されています。
ActionScript から、HTML ページに対して次のことを実行できます。
  • 任意の JavaScript 関数を呼び出す 
  • 引数の数を名前と共に渡す 
  • ブール(Boolean)、数値(Number)、ストリング(String)などの各種データ型を渡す 
  • JavaScript 関数からの戻り値を受け取る 
HTML ページの JavaScript から、次のことを実行できます。
  • ActionScript 関数を呼び出す
  • 標準の関数呼び出しの表記法を使用して、引数を渡す
  • JavaScript 関数に値を戻す
注目すべき点を太字にしましたが、ExternalInterfaceを利用することで、ActionScriptからJavaScript APIを利用できることが分かります。下記のようなイメージになります。

これに着目して、実装したActionScript APIが下記になります。
package com.google.code.as3webstorage {
    import flash.external.ExternalInterface;

    public class LocalStorage {
        public static function length():uint {
            return ExternalInterface.call("function() { return localStorage.length; }");
        }

        public static function key(index:uint):* {
            return ExternalInterface.call("localStorage.key", index);
        }

        public static function getItem(key:String):* {
            return ExternalInterface.call("localStorage.getItem", key);
        }

        public static function setItem(key:String, data:*):void {
            ExternalInterface.call("localStorage.setItem", key, data);
        }

        public static function removeItem(key:String):void {
            ExternalInterface.call("localStorage.removeItem", key);
        }

        public static function clear():void {
            ExternalInterface.call("localStorage.clear");
        }
       
        public static function available():Boolean {
            return ExternalInterface.available && ExternalInterface.call("function() { return typeof localStorage != 'undefined'; }");
        }
       
        public static function addStorageEventListener(func:Function, useCapture:Boolean = false):void {
            ExternalInterface.call("as3webstorage.assignSwf", ExternalInterface.objectID);
            ExternalInterface.addCallback("callbackToAs", func);
            ExternalInterface.call("as3webstorage.addStorageEventListener", "callbackToAs", useCapture);
        }
    }
}
ActionScriptに見慣れていない方には分かりにくいと思います。
どういうことをしているかと言うと、getItem()やsetItem()など各メソッドの中で、JavaScriptによるWeb Storage API実装を呼ぶようにしています(ラップしているだけ)。
call()メソッドの第一引数にJavaScriptコードの文字列表現、第二引数に各Web Storage APIに渡す引数を指定しています。こうすることで、ExternalInterfaceを通して、JavaScript <---> ActionScript連携が実現できます。しかし、これだけだとWeb Storage APIのStorageイベントを扱うことができません。

そこで、addStorageEventListener()用のコールバックをJavaScript側に実装します。
(function() {
    if (this.as3webstorage) return;
   
    var as3webstorage = this.as3webstorage = {
        swf: null,
       
        assignSwf: function(swfId) {
            this.swf = document.all ? window[swfId] : document[swfId];
        },

        addStorageEventListener: function(callback, useCapture) {
            window.addEventListener("storage", function(event) {
                var returnObject = {
                    "key": event.key,
                    "oldValue": event.oldValue,
                    "newValue": event.newValue,
                    "uri": event.uri,
                    "source": undefined,
                    "storageArea": undefined
                };

                as3webstorage.toNativeFunc(as3webstorage.swf, callback).apply(null, [returnObject]);
            }, useCapture);
        },
       
        toNativeFunc: function(obj, functionName) {
            return function() {
                var parameters = [];
                for(var i = 0; i < arguments.length; i++) {
                    parameters[i] = "_" + i;
                }
               
                return Function(
                    parameters.join(','),
                    'this["' + functionName + '"](' + parameters.join(',') + ')'
                ).apply(obj, arguments);
            };
        }
    };
})();
サンプルを作ったので下記で試せます。
http://dl.dropbox.com/u/227786/code/flex/as3webstorage/as3localstorage.html
本当にWeb Storageが使われているかはデベロッパーツールなどを使って確認してください。

ExternalInterfaceでJavaScript <---> ActionScript間のデータ交換はXML形式で行われるので、オブジェクトによってはデシリアライズできないものもあります。
そのため、シンプルなインターフェースなら今回のように実装することが可能なのですが、Indexed Database APIのような複雑なものだと難しそうです。

あ、これって誰得?ActionScriptの話が多くない?という感じで終わってすいません。
HTML5 Advent Calendar 2011はまだ続きますのでお楽しみに。

関連記事
Flash + HTML 5 : Offline Flash Apps using DataStore API
http://blog.flexgeek.in/2010/05/flash-html-5-offline-flash-apps-using-datastore-api/ 
HTML5 Web Storage APIをFlash/Flexから使う - as3webstorage
http://blog.air-life.net/2010/06/as3webstorage.html 
HTML5 Geolocation APIをFlash/Flexから使う - as3geolocation
http://blog.air-life.net/2010/06/as3geolocation.html

2011/12/15

JIRA 5.0、REST APIとREST API Browser

JIRA Advent Calendarの12/15担当 @shoito です。

今回は、フライング気味にJIRA 5.0(12/15時点ではRC2)のREST APIとREST API Browser(RAB)について紹介します。
12/14担当の@showyouさんとREST APIネタで被っている気がしますが気にしませんw

みなさんはJIRAプラグインやJIRA連携ツールはご存知でしょうか?
初耳という方はどんなものがあるのかAtlassian Plugin Exchangeをご覧ください。
https://plugins.atlassian.com/plugin/home
Atlassian Plugin Exchange
JIRAプラグイン
JIRA以外にも、Confluence, FishEye, Bamboo, Crowd, CrucibleなどAtlassian製品のプラグインが1000以上あり、JIRAだけでも12/15時点で、395のプラグイン(または連携ツール)が公開されています。
Atlassian製品のGreenHopperやBonfireもJIRAプラグイン(+ブラウザ拡張)ですので、Atlassian Plugin Exchangeで見つけることができます。

JIRA連携ツール
JIRAはAPIを公開してくれているので、他のツールと連携させることが可能です。
SOAP、XML-RPC、REST APIと受け口は設けられていて、連携元の構成に合わせて選択できますが、今回はREST APIに焦点を絞って話を進めます。
ちなみに、連携ツールとしてはEclipseやVisualStudioなどのIDEと連携するAtlassian Connectorが私は思い浮かびます。

REST APIを試す準備
JIRA 5.0のREST APIを試すためには、まずAtlassian SDKをインストールします。
Mac OS X環境でHomebrewを使っていれば、下記のコマンドでインストールできます。
$ brew install atlassian-plugin-sdk
他の環境の方はAtlassian Developersからダウンロードし、PATH変数の設定などを行います。
この辺はInstalling the Atlassian Plugin SDKが参考になります。

次に、JIRAプラグイン/連携ツール開発用のJIRAを立ち上げるために、プロジェクトを作ります。
JIRA 5にするのかい?4にするのかい?と聞かれるので、JIRA 5を使うように1を選択しましょう。
$atlas-create-jira-plugin

A new plugin structure is required for JIRA 5 plugins due to significant changes in the APIs.
Create a plugin for?
1) Shiny new JIRA 5
2) Regular 'ol JIRA 4 (or earlier)
mavenプロジェクトのgroupIdやartifactIdなどの入力を求められるので、適当に入力します。
Define value for groupId: : com.github.astah
Define value for artifactId: : jira-connector
Define value for version:  1.0-SNAPSHOT: :
Define value for package:  com.github.astah: : com.github.astah.connector.jira
Confirm properties configuration:
groupId: com.github.astah
artifactId: jira-connector
version: 1.0-SNAPSHOT
package: com.github.astah.connector.jira
このままの状態で、atlas-run コマンドを実行してJIRAを起動すると5.0-beta1で起動してしまうので、pom.xmlのjira.versionを最新バージョンに変更します。
REST APIは5.0 finalに向けてどんどん追加されていっていたので、beta1のままだと扱えないAPIがあるためです。
[before]
<jira.version>5.0-beta1</jira.version>
[after]
<jira.version>5.0-rc2</jira.version>
pom.xmlを編集し終えたら、atlas-run コマンドを実行します。
$ atlas-run
JIRAの実行に必要なライブラリが大量にmavenリポジトリからダウンロードされ、私の家の貧弱な回線では30分程度時間がかかったので、この間にランチやディナーにでも行ってください。

さぁ、これでJIRAのREST APIを試す環境はできましたが、このままではプロジェクトも課題もadmin以外のユーザーも存在しないので、適当なプロジェクトを作って、課題を幾つか登録しておくことをお勧めします。
(準備でここまで...)

REST API
REST APIを使うことでプロジェクト、ユーザー、課題の検索や操作などが行えます。
では、JIRA REST API Tutorials を見ながら幾つか試してみましょう。

下記の例では、初期状態で登録されているadminユーザー、パスワードadminでREST APIを読んでいます。
  • 課題JAC-1の詳細をJSON形式で取得
  • JIRAにあるプロジェクトの一覧をJSON形式で取得
  • adminユーザーにアサインされている課題の一覧をJSON形式で取得
というように、これは一例ですがこれまでもREST APIを試すことが出来ました。
しかし、curlコマンドやREST ConsoleよりもJIRAに特化して試しやすいツールがAtlassian SDK 3.6.2から登場しました。それがREST API Browserです。

REST API Browser(RAB)
Atlassian SDKに含まれるJIRAプラグイン。各種REST APIをブラウザ上から試すことができます。
何が便利かというと、まず各APIのパラメーターをイチイチ調べなくて良くなりました。
各APIを試すためのフォームが設けられていて、そこにパラメーターの入力フィールドもあるため、このAPIのパラメーターはprojectIdと何を指定するんだっけ?issueId?fieldsだっけ?ということがなくなりました。
レスポンスのJSONも当たり前のように整形されていてステキです。

まず上部から試したいAPIを選択します。
ここでは、11番目くらいにあるAtlassian JIRA - Plugins - REST Plugin (/rest/api/2)を試しましょう。

次に、adminユーザーにアサインされている課題の一覧を取得してみます。
/search を選択し、jql フォームに assignee=admin と入力し、Executeボタンを押下します。
するとスクリーンショットにあるように、リクエスト、レスポンスヘッダ、レスポンスボディが確認できます。

ちなみに、選択できるカテゴリを数えてみたら34ありました。スゴいなー。
Applinks Product Plugin
Atlassian Developer Toolbox
Atlassian Embedded Crowd - Administration Plugin
Atlassian JIRA - Plugins - Admin Quick Navigation
Atlassian JIRA - Plugins - Common AppLinks Based Issue Link Plugin
Atlassian JIRA - Plugins - Confluence Link
Atlassian JIRA - Plugins - Gadgets Plugin
….
まとめ
準備のため長い前置きとREST APIとREST API Browserについて紹介しました。
REST API Browserの登場のおかげで、連携ツールの開発が進めやすくなったと思います。
是非、来年(?)正式リリース予定のJIRA 5.0のREST APIで遊んでみてください。

注意
atlas-runで起動したJIRAでは、JIRA_HOMEがtarget/jira/home ディレクトリに設定されているため、atlas-cleanコマンド(mvn clean)を実行するとキレイさっぱりと消えてしまいます。
そもそも開発用ですので、適宜データをExportしておくか、消えるのを覚悟しておいてください。

次の担当は @literaliceさんです。お楽しみに!
JIRA Advent Calendar (#jiraadvent) ではあと10人(9人?)の書き手が不足しているようなので、JIRAを既に使いこなしている方もまだまだこれからという方も立候補してみてはいかがでしょう。

最後に
REST API周りでは @kompiroさんとの会話で気づいたことや存在を教えてもらったことが含まれています。@kompiroさん、ありがとうございます。

2011/11/27

Backlog Connector for astah - astahプラグイン

背景
Backlog Connector for astahは「Cacoo Finder - ブラウザ拡張」と同様にMA7向けに、何か提供できるアプリ/サービスがないか考えてプライベートで開発したものです。
しかし、MA7の締め切りには間に合わなかったので、残念ながら応募はできませんでした。

Backlog Connector for astahとは
ソフトウェア設計支援ツール astah(旧JUDE) から、Backlogの課題を確認/作成/編集ができるastahプラグインです。astah community, UML, professionalの何れかにインストールして利用します。なお、プラグインはastahのバージョン6.5以上でないと利用できません。
ちなみに個人で作ったプロトタイプなので無保証でお願いします。
ご存知ない方のために紹介しますが、Backlogは、Cacooと同様にヌーラボが提供しているプロジェクト管理のためのサービスです。XML-RPCによる実装のAPIが公開されているので、astahプラグインからそのAPIをコールして利用しています。
プロジェクトページ

backlog-connector-for-astah

インストール
astahのインストールフォルダ/plugins に connector-backlog-x.x.x.jar ファイルをコピーしてastahを再起動します。 ※astahバージョン6.5以上のンストール この辺から各OS用のインストーラーをダウンロードして、実行します。 http://astah.change-vision.com/ja/product/astah-community.html
アンインストール
astahのインストールフォルダ/plugins から connector-backlog-x.x.x.jar ファイルを削除してastahを再起動します。
使用方法 プロトタイプレベルなので、Youtube動画をご覧いただければ十分です。 http://www.youtube.com/watch?v=kh61BBOTyRg
フィードバック
感想、要望、不具合などありましたら @shoito へツイートいただけると嬉しいです。

2011/11/01

astah Viewer Gadget - OpenSocial Gadget

背景
こちらも「Cacoo Finder - ブラウザ拡張」と同様にMA7向けに、何か提供できるアプリ/サービスがないか考えて開発したものです。

astah Viewer Gadgetとは
astah(旧JUDE)製品で作られた設計情報を見るためのOpenSocial Gadgetです。
astah Viewer Gadgetを使うことで、astahで描かれたUML、ER図、データフロー図、フローチャート、CRUD、要求図、マインドマップをOpenSocial対応インフラ上で見ることができます。
infoScoop OpenSourceをターゲットにしていますが、OpenSocial Gadgetの仕様に沿って作っているため、infoScoop以外にも、iGoogleでもご利用いただけます。


インストール
各OpenSocialインフラ上でガジェットの追加メニューから、ガジェットのURLとして下記を指定します。

Gadget URL

使用方法
  1. astah ViewerをinfoScoopやiGoogleなどのガジェットとして追加する
  2. astah(旧JUDE)製品で作られた.asta/.judeファイルをastah publishで公開する
  3. ガジェット設定のastah URLに.asta/.judeファイルのURLを入力する
    [例: http://p.astah.net/a/dademo]
フィードバック
感想、要望、不具合などありましたら @shoito へツイートいただけると嬉しいです。

Cacoo Finder - ブラウザ拡張

背景
毎年9月〜11月上旬にかけて開催されているMashup Awardsですが、今回で7回目(MA7)になります。
応募条件は、MA応募対象になっている数百あるWeb API/プラットフォームを一つ以上使ったアプリ/サービスです。
http://ma7.mashupaward.jp/outline?locale=ja

数百あってどのAPIを使ったものかと考えていたところ、良く使わせてもらっているヌーラボのCacooもAPIを提供していたので、それを使用したブラウザ拡張を作りました。

Cacoo Finderとは
Web上で図の作成&リアルタイムコラボレーションサービスCacooをブラウザでより簡単に使える、”非公式”のブラウザ拡張です。

Cacoo Finderでは、以下の機能をご利用いただけます。
  • Cacooで作った図の情報を確認
  • Cacooで作った図に簡単にアクセス
  • Cacooで新規に図の作成
  • 図のコメントを確認/追加


ダウンロード
Google Chrome用
https://chrome.google.com/webstore/detail/pcfedgjdgkacloiabdlghochjfmnalck?hl=ja

Firefox用
自動アップデート対応のため、一時的に非公開

Safari用
http://dl.dropbox.com/u/227786/app/safari/CacooFinder/CacooFinder.safariextz

使用方法
  1. 利用しているブラウザ用のファイルを上記URLからダウンロード/インストールします。
  2. ブラウザにCacoo Finderのボタンが追加されているので、それをクリックします。
  3. 初回実行時には、CacooのAPIキー入力フォームが表示されるので、APIキーボタンをクリックして、CacooのAPIキーを生成/コピーします。
  4. Cacoo FinderにCacooのAPIキーを設定すると、あなたの作成した図、または他のユーザーから共有されている図の一覧が表示されます。
  5. 図の一覧からは、素早く図を開く、各図のシートやコメントを確認する、コメントを書き込むなどの操作が可能です。
※ CacooのAPIキーを再作成した場合は、Cacoo FinderでAPIキーの再設定を行う必要があります。

ソースコード - GitHub
https://github.com/shoito/cacoo-finder-chrome-extension

※2013/01/23追記
ソースコードを公開していなかったことに気付いたので、CoffeeScript(JavaScript), LESS(CSS), Knockout.js(MVVM), Yeoman(Grunt)を利用して再構築し、GitHubに公開しました。
http://blog.air-life.net/2013/01/cacoo-findercoffeescript-less-knockout.html

フィードバック
感想、要望、不具合などありましたら @shoito へツイートいただけると嬉しいです。

2011/06/12

私の福井県立図書館の利用法

私は最寄り図書館の福井県立図書館に、隔週〜月イチくらいのペースで通っています。
貸し出し期間が2週間なので、隔週で行くことが多いですね。


大きな地図で見る

福井県立図書館に限らず、図書館には多くの本があり目的の本を見つけるのも一苦労ですし、いちいち図書館の検索システムで探すのも面倒だなと思ってました。

そんな中、Amazonのページから最寄りの図書館の蔵書を”自動で”検索できる便利なブラウザ拡張Libronの登場は、これぞ待ち望んでいたものでした。
LibronはChrome/Firefox/Safariに対応しているので、多くのユーザー環境で利用できます。

私の場合は、Chrome版のLibronと、Userscript(実質1行)を合わせて利用しています。

Chrome拡張 Libron
https://chrome.google.com/webstore/detail/fpfgglfemmnflnmjminpghmeiajcajoi

Userscript

// ==UserScript==
// @name 福井県立図書館予約システム利用支援スクリプト
// @namespace http://labs.shoito.me/userscripts/
// @description 福井県立図書館予約システムで、資料を受け取る館に「県図書」を設定
// @include https://www.library.pref.fukui.jp/cgi-bin/Sfkisyoc.sh
// ==/UserScript==
(function(){
document.getElementsByName('yukn')[0].value='01';
})();


このUserscriptが何をしているかというと、@descriptionにも書いているように、資料を受け取る館に「県図書」を設定しているだけです。
県立図書館のシステムで、この項目は「未選択」になっていて、いちいちマウスで「県図書」を選択しないと進めないので、私にとっては無意味な操作を繰り返さないといけなかったんです。
ドロップダウンメニューのこの操作を省略したおかげで、図書館予約システムのボタンのクリック操作だけで済むようになってます。

0. Amazonで気になる本を都度、欲しいものリストに追加しておく

1. Amazonの欲しいものリストページを開く

2. 目当ての本の「福井県立図書館で予約する」を選択する

3. 予約ボタンを選択する (ここから福井県立図書館の予約システム)

4. 利用カードの番号、パスワードの入力をする (ブラウザに記憶してあるので自動入力 - なんで毎回入力せにゃいかんのやろ)

5. 資料を受け取る館を選択して、予約ボタンを選択する (Userscriptが自動設定)

6. 2〜5を読みたい本の分だけ繰り返す

以前はAmazonの欲しいものリストから本当に読みたいものだけを、図書館の検索システムで検索して予約していた
んですが、Libronのおかげで簡単に図書館に本があることの確認もできるし、予約もできるようになりました。
おかげで、今は図書館のカウンターへ行って予約した本を受け取るだけと楽になってます。

Thanks Libron!

2011/06/05

UPGRADE JAPAN!!で話してきた | HTML5時代の技術の恩恵を受けるには

HTML5時代の技術、その恩恵を受けるにはどうすれば良いのか15分という短い時間ですが紹介させていただきました。
難しい内容もあったかもしれませんが、聞いてくださった皆さんが少しでもHTML5に興味を持って、調べたり、実際に使うきっかけになると嬉しいです。

HTML5やCSS3など、新しい技術を使おうにもInternet Explorer 6, 7, 8などの非モダンブラウザのことを考えると使用するのを躊躇してしまう現場もあると思います。
そんな現場でもHTML5やCSS3の利用を支援してくれるライブラリ群(Polyfill)をいくつか紹介しました。


※6/8(水)追記: セッションの内容を補完してくれる記事が本日公開されていました。
HTML5&CSS3入門 with HTML5 パック 第6回 Graceful DegradationとPolyfill
by 小山田 晃浩さん
http://www.adobe.com/jp/joc/devnet/dreamweaver/articles/html5pack_css3_part6.html

※6/9(木)追記: セッション中に省略したGraceful Degradation, Regressive Enhancement, Progressive Enhancementについての参考にどうぞ。
第16回HTML5とか勉強会 Progressive Enhancement
by 羽田野 太巳さん
http://www.html5.jp/blog/?p=503

2011/03/20

データ復旧のためのHDD取り扱いについて

石巻市で津波の被害にあった関係者から「サーバーが海水に浸かってしまったのだが何とかHDDからデータを復旧したい。可能性があるのならどうしたら良いか。」という相談を受けるという機会があったので、少しだけ情報を共有しておく。

相談者の利用しているサーバーはDell(デル株式会社)の物だったため、Dellにデータ復旧の件で電話したところ、Dellではそのようなサービスは行っておらず、株式会社ワイ・イー・データのオントラックというサービスを紹介された。

データ復旧/復元サービス オントラック(株式会社ワイ・イー・データー)
http://www.ontrack-japan.com/

電話にてHDDドライブが海水に浸かってしまっている、泥がドライブ内部に混入している可能性もあることを伝え、対応方法を伺った。
すると同様の問題に遭遇した人たちに向けて「水没ドライブ取り扱い」という案内を掲載してくれていたので紹介する。
詳細はリンク先を参照していただきたい。

水没ドライブ取り扱い
http://knowledge.ontrack-japan.com/guide/flood_drives.html
近年発生した水害からの教訓より、洪水等で水没してしまったハードディスク・ドライブ(HDD、HD)等の媒体(メディア)からデータを復旧するにあたっての注意点をお知らせいたします。下記の注意点を守って頂く事でデータ復旧できる可能性が上がります。
一般的な注意点
....
ハードディスク(HDD、HD)をお送りになるときの注意点
....

現在、仙台市でデータ復旧サービスを提供している株式会社データサルベージコーポレーションが「仙台営業所への持込に限定」「データ容量が1GB以下」「障害のレベルが軽度、中度に分類されるもの」のようにかなり厳しい条件ではあるが3/25日まで無償で復旧してくれるらしい。
被災地では、運送業者がまだ機能しておらず、自分で持って行くしか手段がない状態であるため、このように現地の営業所で受け付けてくれることは重要だと思う。

被災して読めなくなったHDDを無償で即日復旧、病院や学校のデータを優先
http://itpro.nikkeibp.co.jp/article/NEWS/20110315/358368/

是非、被災地の法人/個人のためデータ復旧サービスを提供する企業には、費用の値引きを検討していただきたい。
サーバーやPCはまだ買い替えれば済むが、データの価値はそれら以上に遥かに高いものなので。

2011/03/01

福井でみんなで集まってサービス/ソフトウェアを作ってみませんか?[3/5, 3/12]

2011年3月5日(土), 3月12(土)に第2回Google Hackathon for GAE in 福井が開催されます。なんで第2回かというと、2010年は2月にGoogle App Engine、4月にChrome拡張をテーマにGoogle Hackathonが行われており、無料で使えるクラウドプラットフォーム Google App Engine(GAE)をテーマにするのが2回目だからです。

今回は3月12日のHackathon当日に、京都GTUG(Google Technology User Group)からGoogle API Expertの山下さんGoogleからGoogle App Engineを担当されている松尾さんに来ていただきます。GAE/Python、GAE/Javaの先生がいるのでここぞとばかりに疑問をぶつけるチャンスかと思います。

現在の申込者の統計(だいたい)としては、下記のようなデータとなっています。
GAE初心者:90%
デザイナー:20%
女性:10%


「Hackathon?レベルの高い人たちの集まりかな?そんなの怖いわー。ついてけないよ。」という心配はありません。事前勉強会やIdeathonからHackathonまでの準備期間が十分にありますので 学生や初心者の方も安心してご参加いただいております。

また、バックエンドはGoogle App Engine + 各種Webサービス、フロントエンドはPC/Mac、iPhone/Android/ガラケーというように組み合わせはいろいろ考えられますので、フロントエンドのデザイン/開発をしたい方の参加も強く願っています。
是非、JavaScript , Objective-C , HTML5 , CSS3 など持っている知識を存分に活かしてください。

====== イベント案内 ======
■名称
 第2回Google Hackathon for GAE in 福井
■申し込み
 こちらのフォームからお申込みをお願いします。
 http://goo.gl/UMfRE
■日程
 2011年3月5日(土) 事前勉強会, Ideathon
     12日(土) Hackathon

 ※Hackathonのみの参加は原則出来ません。Ideathonにもご参加下さい。
 難しいなという方はコチラへご相談ください -> gh.fukui at gmail.com
■スケジュール
 3月5日(土)
  12:30 ~ 開場
  13:00 ~ 15:00 事前勉強会(こちらは必須ではありません)
   GAE/Java編  @shoito
   GAE/Python編 @rch850
  15:00 ~ 18:00 Ideathon(ここからの参加でOKです)
  18:30 ~ 懇親会(ビアバッシュ)

 3月12日(土)
  09:30 ~ 開場
  10:00 ~ 18:00 Hackathon
  18:30 ~ 懇親会
■会場
 めがね会館7階 株式会社jig.jp様 会議室
 ・地図: → http://goo.gl/2rXe
 ・アクセス:JR鯖江駅から徒歩15分、鯖江ICから車で5分
■定員
 最大30名(事前にお申し込みが必要です)
■対象者
 プログラマー、デザイナー、Hackathonに興味がある方 (入門者や学生の方も大歓迎)
■参加費
 一般1,000円、学生は無料
 ※参加費は備品の準備、遠方よりご参加いただくスタッフへの交通費に割当てさせていただきます。
■その他
 twitter公式タグは #ghfukui です。

2011/01/26

AWS Elastic Beanstalkを求めて、JAWS-UGの勉強会に行ってきた

既に、ギークなご家庭では「新しいPC買ってよ。」でなく「今月はインスタンス3つまでよ。」とか、「あなた!今月インスタンス立ち上げ過ぎじゃない?MapReduceでいかがわしい画像をごにょごにょしてたんでしょ!」などという会話が交わされている思います。

そんな、オフィスでも家庭でもクラウドは切っても切れない時代ですので「Japan AWS User Group (JAWS-UG) - Hokuriku(金沢)勉強会 第0回」に参加してきました。
http://atnd.org/events/11854


JAWS-UGはAWS(Amazon Web Services)の利用促進、情報共有のためのユーザーグループで、全国各地でイベントを開催しています。
今回はAWSエバンジェリストの玉川憲さん(@KenTamagawa)がいらっしゃるということと、先週、AWS Elastic Beanstalk(以降、Beanstalkと表記)という興味深いサービスが発表されたので、それを目的に参加しました。

AWSの多くの情報を共有していただいのですが全部は書ききれないので、今回はBeanstalkについて共有します。
これまでAmazonが提供していたEC2, S3のようなサービスはIaaSというタイプに分類(どこかの誰かが勝手に?)されていましたが、BeanstalkはPaaSに分類されるであろうサービスだと思います。

Beanstalkを使用すると、私たちはJavaで開発したアーカイブ(warファイル)をアップロードするだけで良く、あとのEC2インスタンス、Elastic Load Balancing、Auto Scalingの作成/設定はAWS側で自動的に行われます。
この辺のインフラ周りの作成/設定が面倒だったのですが、Beanstalkのおかげで解放されそうです。
(SimpleDBやRDSまではその範疇でないので、完全に解放されるわけではなさそうですが)

まだ試してないですが、Google App Engineのような運用の手軽さ、AWSの自由度が合わさった魅力的なサービスな気がしています。
ちなみに、現在はJavaだけに対応しているのですが、今後、Rubyなど他の言語にも対応していくそうです。

それと昨夜のイベント中、Amazon Simple Email Service(SES)という大量メール送信ができるサービスが発表されました。
AWSのサービスブロックが着々と揃ってきた感じがしますね。
http://aws.amazon.com/ses/

AWSには無料枠が設けられていますので、もしまだ使ったことがないという方は試してみてはどうでしょう?
百聞は一見に如かずと言いますし。
http://aws.typepad.com/aws_japan/2010/11/%E3%82%A2%E3%83%9E%E3%82%BE%E3%83%B3%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%81%AE%E7%84%A1%E6%96%99%E3%83%86%E3%82%A3%E3%82%A2%E3%82%92%E7%99%BA%E8%A1%A8.html

※JAWS-UG: Japan Amazon Web Services User Group (ジョーズ・ユージー)
http://jaws-ug.jp/

※AWS: Amazon Web Services(下記のサービス群)
http://aws.amazon.com/jp/

※AWS Elastic Beanstalk
http://aws.typepad.com/aws_japan/2011/01/introducing-amazon-beanstalk.html