Tender Surrender

最近のMac OS X用アプリには、自動的に更新をチェックしてアップデートしてくれるものも少なくありませんが、常に最新版を使いたい人にとって、そうでないアプリを管理するのは面倒なもの。チェック方法としてVersionTrackerや、デスクトップアプリケーションのLogicielMac Updateといった選択肢がありますが、いずれも今日紹介するコンボと比較すれば、つまらないものに思えてきます。

iusethis.com

iuserthis.comは使っているMac OS X用アプリを登録して共有するSNSです。

サイトにサインアップしてからimakeprofileというアプリを使うと、Macにインストールしてあるアプリを自動的にスキャンして、自分が主に使用しているアプリをiusethis.comに登録することができます。使用しているアプリが未登録の場合は、自分で追加することも可能。

登録したアプリは、サービスが最新版の情報を取得するので、更新が可能かどうかを調べることができます。もちろんレビューや、誰がそのアプリを使用しているのかを確認することもできます。さらには簡易的なSNS機能として、TwitterのようなFollow機能があるので、他の人のアプリ使用状況を追跡することもできます。

ちなみに僕が使用しているアプリはこんな感じ。

Facebookアプリも提供されているので、「俺こんなアプリ使ってんだぜ!」と叫びたいニーズも満たしてくれます。そのうちきっとOpenSocialにも対応してくれるでしょう。

AppFresh

AppFreshiusethis.comと連携して使えるソフトウェア更新ツールです。iusethis.comのデータベースから自動的に最新版を確認して、どれが更新できるかを知らせてくれます。その場でダウンロードからインストールまでまとめて行うこともできますし、ダウンロードのみ行うこともできます。Growlに対応しているので、ダウンロードやインストールが完了すると通知もしてくれます。

まとめ

AppFresh / iusethis.comは、SNSの楽しさで集めたユーザーに、アプリ開発者やサイト管理者の煩雑な作業を集合知として解決してもらうことで、くまなく幅広いアプリケーションの更新情報を提供可能とした最強のコンボと言えるのではないでしょうか。

※ちなみに、アプリの自動更新チェックには、RSS2.0のenclosureにアプリのリソースURLを入れるAppCastなるプロトコルが使われるケースが多いようです。

Read on...

SNSをオープン化する動き

Facebookの開発者向けプラットフォーム公開に始まったSNSのオープン化は、さらに加速度を増しています。Facebookの対抗と言わんばかりに登場したGoogle主導のOpenSocial。Facebookが自社サービスをプロプライエタリな基盤にする動きであったのに対し、Googleはその他大勢の連合を擁して、基盤の標準といえる規格を作りました。

両者のこの動きは、外部サービスをSNSの一部であるかのように取り込むという意味で共通しています。

SNSアグリゲートサービス

日本でSNSというとmixiを代表とした日記交換サイトがイメージされがちですが、Twitterのように一方通行の「Follow」が可能なものや、Flickr、Lastfm等のジャンルに特化したものもSNSと呼ぶことができます。

最近FriendFeedのように、こういった各種SNSをアグリゲートすることに特化したサービスも登場してきました。サービスに各種SNSのIDを預けることで、フィードのアグリゲーションが行われ、ユーザーはそのサイトさえ追いかけていれば必要な時だけ連携サービスを見に行くことができるようになります。

このように、ウェブの求める方向性はSNSの登場以降、IDがウェブ上のあちこちにあったとしても、使っている本人は一人であり、友達も同じなのだから、まとめちゃえばいいじゃん、にシフトしてきています。

DataPortability

DataPortabilityはそんな各SNSサービスに囲い込まれつつあるデータを解放して相互に利用できるようにしよう、という動きです。

DataPortability – Connect, Control, Share, Remix from Smashcut Media on Vimeo.

DataPortability – Join The Conversation from Smashcut Media on Vimeo.

詳細は僕もつかみきれていませんが、MySpaceのData Availability, FacebookのFacebook Connect, GoogleのFriend Connectと役者が揃ってきました。それぞれがどういう特徴を持っているのかを、追って紹介していきます。

Read on...

以前インストール方法をご紹介した(Java版PHP版)Shindigですが、ようやくPHP版も使えるレベルになってきましたので、ソースを読み解いてみました。なお、Java版の方が実装は進んでいますが、今回はPHP版に限った話ですのでご注意ください。

Shindigとは何なのか

そもそも、の話です。

Shindigはひとことで言うと「OpenSocialコンテナのサンプル実装」です。これをダウンロードして動かすだけで、iGoogleガジェットとOpenSocialガジェットの動作テストを行うことができます。実際はOpenSocialを広く普及させるよう、数多あるSNSがShindigを参考に、もしくは流用してOpenSocialに対応することを目的にしています。

主なディレクトリ構成

  • config: コンテナ設定
  • features: 各種機能セット(JavaScriptコード)
  • java: Javaソースコード
  • javascript: HTML, JavaScriptコード
  • php: PHPソースコード

ディレクトリ解説

config

container.jsというファイルがコンテナのデフォルト設定となり、プロキシやOpenSocial APIのパス等の設定を行います。設定を変更したい場合はこのディレクトリにファイルを追加して、必要な部分のみをJSON形式で追記すれば、デフォルト設定が引き継がれます。なお、JSON形式なのは、PHPやJavaだけでなく、他の言語からも読み込むことを想定しているためと思われます。(Perl版やRuby版のShindigも開発される予定だそうです。)

features

ガジェットXMLに<Require features=””>という形式で記述される機能(features)をセットとして読み込みます。featuresディレクトリ内は機能セットごとにさらにディレクトリに分けられていて、各ディレクトリにあるfeatures.xmlファイルで必要なJavaScriptライブラリセットが指定されています。

php

PHPのソースコードはJava版を参考にしているためか、あまりPHPらしくない実装になっています。

まずMVC形式を取っていません。オブジェクトの分け方は色々な方法がありますが、ウェブアプリケーション的なものと言うよりは、Java的な方法で(?)機能や設定ごとに、非常に細かく分けられています。メンバ変数にいちいちget〜やset〜メソッドを用意しているのもJavaっぽい。

PHPへのリクエストはリライトされ(.htaccessファイルで指定)、すべてindex.phpに読み込まれます。index.phpはリクエストのパラメータに応じて処理を6種類のサーブレットに振り分けます。

  • 静的ファイル(/gadgets/files)
  • JavaScript(/gadgets/js)
  • プロキシ(/gadgets/proxy)
  • ガジェット(/gadgets/ifr)
  • メタデータ(/gadgets/metadata)
  • OpenSocial API(/social/data)

クラスのインクルードは__autoloadが使用されているため、ほとんど書かれていません。

config.phpには各種ファイルへのパスなど、設定が記述されています。(config/container.jsとは別物です)

なお、Shindigはデータベースを使っていないので、キャッシュは/tmpディレクトリ、設定はcookie、友達リストは静的XMLファイルでそれぞれ管理されます。

まとめ

ソースコードは一見シンプルですが、かなり複雑です。Java的な実装方法に加え、他言語版Shindigとの設定等の共有を想定した汎用化など、オプティマイズする余地はかなりありそう。PHP版Shindigを既存フレームワークに取り込むのは難しくはありませんが、あくまでも参考にする程度にした方がいいと思われます。

なお、今のところOpenSocialバージョン0.7対応ですが、まだまだバグも存在しています。バージョン0.8の機能仕様が出揃ってきたところですが、Shindigでの対応は時間差が出そう。

OpenSocial APIは実装されていますが、ShindigでOpenSocial機能が使えるようになったというには、まだまだ足りない感じ。あとはOAuthとか、RESTful APIとか、、、。

Read on...

今日は久々にいけてるサービスを見つけたのでご紹介。

MindMeister

マインドマップとは、言葉を枝上に分岐して記述することで、アイディアの整理するのに役立つ記法/ツールです。僕なんかは、TODOとかアイディアはポンポン出てくるんだけど、体系的にまとめることが苦手なため、これまで無料のマインドマップツール、FreeMindを利用してきました。

利用法としては

  • 議事録や講演会のメモ
  • やることメモ
  • 仕様書作成中の頭の整理
  • プレゼン資料作成中の頭の整理

という感じで、いずれもとにかく書きなぐり書きなぐり、後でグループごとにまとめる、という感じ。

なんですが、問題は、FreeMindのスピード。Mac OS Xバージョンだと、Core2DuoのMacBookですら起動に数分かかるという状況(バージョン0.8.1以降?)で、最近は立ち上げるのが億劫だったところに、MindMeisterのバージョンが2になったというリリース。

というわけで、早速試してみました。

編集機能

見ての通り、(MindManagerは使ったことないですが)FreeMindよりも多機能です。ノードごとにアイコンを付けられるだけでなく、色や文字の大きさ、メモも加えることができます。もちろん日本語も問題ありません。メモ機能は個人的にFreeMindにぜひ欲しかったものです。

さらに、まだ試していませんが、TODO管理的な機能もあるようです。

OpenID対応

最近人気が出てきたOpenIDにも対応しています。OpenIDはYahooなど、他サービスのID認証でサービスが利用可能になる共通プロトコルです。(※OpenIDを使うと認証できないため、後で紹介するウィジェットが使えません)

FreeMindやMindManagerからのインポート

マインドマップツールとしてはメジャーなFreeMindとMindManagerのマインドマップをインポートすることができます。これはありがたい。

ウィジェットやブラウザから一発投稿

箇条書きにするのがもったいないくらいですが、下記ウィジェット/ガジェットに対応

  • WIndows Vistaのサイドバーガジェット
  • iGoogleガジェット
  • Yahoo! Widget Engineウィジェット
  • Mac OS X Dashboardウィジェット

ウィジェット/ガジェットから一発投稿で、デフォルト指定されたマインドマップに追記されていきます。TODO管理で役立ちそう。これはありがたい。

他にも、IE/Firefoxの機能拡張、iPhone用追加ページなどが用意されています。

オフラインでの利用が可能

なんといってもこれでしょうか。オフライン機能。

FirefoxまたはInternet ExplorerでGoogle Gearsが必要ですが、オフラインでMindMeisterを利用することができます。これで、いつでもどこでもアイディアを書き留めていくことができますね。

まとめ

ここでは書ききれませんでしたが、実はマインドマップを共有して編集する機能や、APIまで提供されています。(今となっては古臭さすら感じる言葉ですが)Web2.0を絵に描いたようなサービスではないでしょうか。

ただ、オフライン機能等はまだ成熟しきった技術とは言えないため、今後の動向が気になるところ。Google Gears / Prism / HTML5の棲み分けはどうなっていくのか?また、ウィジェット/ガジェットの重要性は日に日に高まってきています。JavaScriptの技術は今のうちに磨いておかなければ…!

Read on...

OpenSocial周りの調査をしていると、Cajaという言葉に遭遇します。セキュアなJavaScriptを実現するもの、ということだけ分かっていたのですが、詳細を調べてみました。

クロスサイトスクリプティングとブログパーツ

gooやlivedoor、fc2などのホスティングを含めたブログサービスを使ったことのある方はご存知と思いますが、サービスによってブログパーツが貼れるもの、貼れないもの、一部だけ許可しているものがあります。なぜでしょうか?

Cookieには同一ドメインから実行されたスクリプトしか参照できないという特徴があります。これを利用して、Cookieをセッション情報や閲覧履歴の保存場所として活用しているサービスは少なくありません。上記ブログサービスがブログパーツを許可しないのは、これらの情報を悪意のあるJavaScriptから守るためです。逆に言うと、同一ドメイン上でJavaScriptが実行できれば、そのセッション情報や閲覧履歴を盗むことができてしまいます。これをXSS(クロスサイトスクリプティング)と言います。

XSSが発生するのは、投稿フォームを使って、そのドメイン上のページにJavaScriptを埋め込み、実行できるケースが挙げられますが、ブログパーツが貼れること自体もJavaScriptが埋め込めるという意味では同じであり、まともに作られたサイトであれば、まずこういったことは出来ません。

とはいえ、実際にブログパーツを貼付けることができるブログは存在しますし、セキュリティの問題を回避しつつこれを実現するためのアプローチがいくつか存在します。

JavaScriptを貼付けるためのアプローチ

ドメインを分ける

ブログを表示するドメインをセッション情報等のクリティカルなCookieを保存していないものにしてしまいます。盗むものがなければ、泥棒が入ったところで何も困ることはありません。このアプローチをとっているものにはlivedoorブログが挙げられます。

安全性の確認できたJavaScriptのみ許可する

サービス提供者が安全なブログパーツのリストを作り、ブログ管理者がそこから選ぶ、というアプローチです。ブログパーツの選択肢が狭くなるためユーザーには好まれませんが、全く貼れないよりはよいはず。gooブログやはてなダイアリがこのアプローチをとっています。

iframeで表示する

iframe内に別ドメインで表示してしまえば、上記「ドメインを分ける」と同様に扱うことができます。このアプローチを取っているものにiGoogleが挙げられます。iGoogleはブログではありませんが、ブログパーツ=ガジェットと捉えれば同じ問題を扱っていると言えます。

JavaScriptの危険な部分を無力化する

サーバーがJavaScriptを出力する前に危険な部分を書き換え、無力化してしまいます。このアプローチをとっているブログがあるか知りませんが、やり方としては誰でも思いつくのではないでしょうか。ただ、これを実現するためには膨大な労力と知識が必要となります。これがオープンソースで存在しているとすれば、どんなに素晴らしいでしょう。そして、これを実現することができるのが今回紹介する、Cajaです。

Cajaで実現できること

Cajaはカハと読みます。CajaはGoogleのオープンソースプロジェクトの名前で、これを使うことで、同一ドメイン上のページに安全に外部のJavaScriptを貼付けることが可能になります。

Caja紹介(日本語訳)

開発に当たってCajaを使って防がれるべきとされた攻撃方法の一覧

どこでCajaを使うのか

CajaはOpenSocialコンテナ上での利用を想定して作られているようです。Caja紹介(日本語訳)の説明も、Shindigでアプリケーションを利用することが前提となっており、Cajaを使ってガジェットをインラインで表示した方がパフォーマンスが向上する旨が記載されています。

Cajaの形態

実はここがまだ調べきれていない部分なのですが、どうやらJavaによるサーバーサイドでのリライトと、JavaScriptのライブラリで構成されている、ぽいです。この辺はもう少し調べる必要がありそうです。

何か他に情報をお持ちの方がいらっしゃいましたらぜひ、教えてください。

Read on...