東日本大震災のボランティア情報とニュースをメールで配信するサイト作りました
本日、Volunteer Mailというサイトをリリースしました。キーワードを登録しておくと、FacebookアカウントまたはGoogleアカウントからインポートしたメールアドレスに一日一回、メールで配信するサービスです。
第一回Startup Technorogyに参加してきました
スタートアップテクノロジーをはじめた理由(ひさじゅさん)
- スタートアップは面白い
- でも、よくわからないのでうまくかみ合わない人が多い
- 資金調達のステージ
- シード(一億くらいまで)
- ステージAで数千万から数億
- ステージBでそれ以上
- 立ち上がりで300万
- そのあとで数千万かけて大きくしていく
- スタートアップの特徴
- 開発の流れはシンプルに
- スタートアップは制約が多い
- でも楽しい
Titanium Mobile 〜本当にあった恐い話〜
- ごく普通のエンジニアからみた、Titanium Mobile
- Write once Run Anywareときいて「いけるんじゃね?」と
- 事例も多い
- ネイティブに近い
- 同様のものも
- どうしてももっさりする
- 実際の事例
- 贅肉で育つペット
- 数字にこだわりがあるので全部画像
- ものすごい遅い
- 差分ロード
- アニメーションに弱い
- 動きかずれる
- 最終的にはあきらめた
- 実機に転送ですごい時間がかかる
- Androidで動かない
- いい点はある
- 熟練者が使えばよく動く
- 比較的スペックの高い新しい端末を使うべし
- JavaScriptは自由度が高すぎるので注意
- ツール系では使える
- ネイティブに切り替える勇気を持とう
Operaはレスポンスボディが含まれているとプライベートアドレスにリダイレクトしない
土曜日から二日間Qiitaのハッカソンに参加しました。その最中に判明したのですがOperaはリダイレクト元のレスポンスにレスポンスボディが含まれている場合、プライベートアドレス、あるいはプライベートアドレスに紐づけられたドメインに対してリダイレクトしません。
おそらくはFirefoxがlocalhostでのcookieを受け取らないのと同様の、大変オリジナリティあふれるオレオレセキュリティと考えられます
これで何が困るかといいますと、一つはOAuth、OpenIDの認証です。GitHubのようにリダイレクト時にユーザビリティの向上のためにリダイレクト中であることを表示しようとしている場合、Operaでは動作しなくなります。
もう一つはWebアプリケーションフレームワーク開発のサイトの投稿時の動作検証です。この場合、開発環境でのみ動作しなくなる可能があります。
第35回HTML5とか勉強会
Tizenの概要(暇村さん)
- Tizenについて間違った情報が流布している
- 一般にはLimoとMeeGoを足してHTML5を掲げたもの
-
- 実際にはMeegoの流れを汲んでいるのは車載向けTizen
- TizenMobileはSumsunのLinuxがベース
-
- TizenはLinux財団のプロジェクト
- Sumsunだけでなく色々な会社からデバイスが出てくる
- TizenWebAPIには独自拡張がある
- Linux部分にも拡張あり
- SDKあり
- TizenのHTML5スコアは462。まだちょっと足りない
- Tizenはネイティブアプリケーションもできる
- TizenIVI(車載向け)はダッシュボードひとつであれこれできるようにすることを目標にしている
- Sumsung系のMobileとインテル系のIVIの二系統。基本的に別物
- まとめ
- Tizen Mbileの普及はまあないだろう
- IVIは来るかも?
Tizen APIについて
KDDIの社長さんのお話
ありがたいお話でした。わりとぎりぎり。
Firefox OS(浅井智也さん)
- 2012年にFirefox
- アドオンは30億ダウンロード
- 50%高速化
- メモリ消費量の大幅改善
- HTML5アプリのためのHTML
- モバイルは独占プラットフォームの支配下にある
- 支配力が強すぎる
- 変更が必要
- 競争が損なわれている状況はユーザーにとって不幸
- Webベースで透明性や自由度の高いプラットフォームを作る
- マーケットさえもオープンに
- Webで色々なことができるようになっている
- さらにもっと自由度を高く
- 多くても全部覚える必要はない
- 調べて簡単に作れればいい
- FirefoxOSはWebが「ネイティブ」
- Gekoエンジンがカーネルに直接乗ってるので高速
- 最低限250メガバイトあれば起動
- シングルプロセス
- セキュリティ
- プライバシーに関わるものにはインストールと利用の両方でパーミッションを求める
- ブラジルで製品化
- ローエンド向けスマートフォンに搭載
- FirefoxOSだけがHTML5専門
- マーケットも自由に選べる
- Device。OS横断
- AndroidとFirefoxOSでプレビュー版が提供
- シュミレーターもあるよ!
- FirefoxがインストールされているAndroid端末ならWebViewでなくFirefoxのエンジンでアプリを動かせる
- アプリケーションUIのツールキットも配布されている
- 質問
- 動く端末は?
- いくつかのAndroid端末は独自ビルドで入れられる。有名な開発者にはDev Phoneが送りつけられるかも
意外と便利なJSON RPC
このエントリーはHTML5 Advent Calendar 2012の4日目のエントリーになります。
JSON RPCとは文字通りJSONでRPCするプロトコルで、現行バージョンは2.0です。
リモート環境にある関数をローカルの関数と同様に呼び出せるRPCは呼びだす機能が多かったり、複雑だったりする時に非常に便利です。またRESTと違い対象がHTTPを受け付けるサーバーである必要がないというメリットがあり、これがwebsocketやメッセージングAPI、webworkerといったHTML5 APIと非常に相性がいいのです。
またRPCというとXML RPCが有名ですが、JSON RPCはそれにくらべて以下のような特徴を持ちます
- プロトコルが軽量・シンプル
- 名前つきパラメーター(namedparameter)
- バッチリクエスト
では順番に見ていきます
プロトコルが軽量
RPCに限らずXMLとJSONの比較ではなんでもそうなのですが、JSONは非常に軽量でシンプルです。
まずは呼び出しですが
{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
これに対して例えば次のようなレスポンスが返ってきます。、
{"jsonrpc": "2.0", "result": 19, "id": 1}
この例をみれば説明しなくても大体基本的なプロトコルは解ると思います
具体的には
jsonrpc プロトコルのバージョンを指定します。現在は2.0固定です
method 呼び出すメソッドの名前
params メソッドの引数
result 結果
ということになります。
paramsに設定されるメソッドの引数の順番は呼び出し先の引数の順番にそのまま相当するのですが、JSON RPCにはもうひとつの引数決定方法があります。
それが名前つき引数です
名前つき引数
リモート側で設定されている以下のような関数をローカル側から呼び出すとします。
function subtract($a,$b){ return $a - $b ; }
これは先述のとおり、次のようなリクエストで呼び出すことができます
{"jsonrpc": "2.0", "method": "subtract", "params": [42, 43], "id": 1}
リモート側では引き算が計算され、返却されます(この場合は-1)。
この呼び出し方法にはもうひとつ呼び出し方法があり、それが名前つきパラメーターとよばれる方法です。この場合、引数と値のペアをparamsに設定して呼び出します
{"jsonrpc": "2.0", "method": "subtract", "params": {"b":43, "a":42}, "id": 1}
少し余談になりますが、この呼び出し方法は呼び出す側としては便利なのですが受け取る方の実装は大変です。Python以外の言語ではハッシュを可変引数として投げる機能はないので、実装しているライブラリのソースコードを読むと普段見ることないメタプログラミングに出会えます。
特に本来は複雑なメタプログラミング機能のないjavascriptにおいては大変興味深く、pmrpc.jsというライブラリは以下のように解決しています。
var fnDef = fn.toString();#定義文を取得 var argNames = fnDef.substring(fnDef.indexOf("(")+1, fnDef.indexOf(")")); argNames = (argNames === "") ? [] : argNames.split(", "); var argIndexes = {}; for (var i=0; i<argNames.length; i++) { argIndexes[argNames[i]] = i; }
evalの逆で関数オブジェクトを文字列変換すると定義文が取得できます。そこから引数の一覧を正規表現で切り出しているわけです。この発想はありませんでした。
バッチリクエスト
JSON RPCにはもうひとつの特徴としてバッチリクエストがあります。これは一度のリクエストで複数の関数呼び出しを行うもので、ローカル側ではリクエスト回数を減らし、サーバー側ではシステムの部品化がしやすくなります。
以下の例では四則計算を一度に行っています。
{"jsonrpc": "2.0", "method": "add", "params": {"b":43, "a":42}, "id": 1} {"jsonrpc": "2.0", "method": "subtract", "params": {"b":43, "a":42}, "id": 1} {"jsonrpc": "2.0", "method": "multiplication", "params": {"b":43, "a":42}, "id": 1} {"jsonrpc": "2.0", "method": "divine", "params": {"b":43, "a":42}, "id": 1}
実装
JSON RPCを実装しているライブラリについては、英語版wikipediaが詳しいです。
見ての通りサーバー、クライアント共に複数の言語で実装されており、よほど特殊な言語で無い限りは問題ありません。
基調講演
ここでいったん及川さんにバトンタッチ。
まとめるとさらっとした内容に見えますが、実際はかなり濃いセッションでした
- 2004年にapi への方向が決まる
- gdd day
- gears
- 標準への参考実装
- 2008年にchrome
- 2009年に普及開始
- 2010年にapple shock
- 2011年 デバイスapi WEB audio モダンブラウザ主流に
- ネイティブにあらゆる形で追い付き、追い越すのが目標
- 機能間の連携→webインテンツ
- WEBコンポーネントによる生産性強化
- ブラウザはクラウドと周辺機器の入り口になる
- 責任も重くなる
- それをクリアして初めて使ってもらえる
ここで白石さんにバトンタッチ
- コミュニティの未来
- 人はデスマーチを超えて強くなる(^^;)
- どんどん盛り上がっていく ひろがっていく