Wiki for3arrows制作日記

自作のローカルWikiを、3arrowsというOpensocialベースのグループウェアに移植しています。

ローカルWiki自体は、ちょっと変態的なことをして詰まったりしましたが、僕は元気です。

以下のURLで見たり触ったりできます。
http://gadget-os.googlecode.com/svn/tinywiki/wikihelp.html

とりあえず、Wikiを作ってみたいという方は以下から。
http://gadget-os.googlecode.com/svn/tinywiki/tinyWiki_origin.html

動作確認はWindowsのみ、IE6~8、Firefox3、Safari3、Iron8、Opera9~10で動きました。Opera11では動きませんでした。無念っ、、、!

~で、こいつを3arrowsに移植してみます。

Opensocialコンテナ3arrowsの所感
3arrowsは、Opensocialをベースにしたグループウェアで、情報共有の軸にはTwitterのようなマイクログログを据えています。このマイクロブログ機能もOpensocial規格のユーザーのアクションを友達に通知する、機能で実現しています。

また日報や日程表といったサービスも、すべてOpensocialガジェットで提供するパラノイアっぷりで、今後シンプルでパワフルなサービスとして育っていきそうです。

そういう思い切った感じがいいなと思って、自作Wikiの移植に挑んでみました。

開発ための情報
Opensocial準拠ですのでOpensocialの知識があれば制作できます。

SocialPrise 広報ブログ
Nakajiman Software Blog
開発のための情報は少ないですが、機能紹介を見ていけばソーシャルガジェット制作のヒントになります。このページで紹介されているツイートインガジェットのコードは短いものなのではじめて作るときには参考になると思います。

http://twitter.com/#!/nakajiman/status/39238368726487040
の AppData は、今のところ 1キーあたり 1MB くらい格納できます。キー数も制限していません。データ量やキー数を大量に使うのは誤用にあたりますが、常識の範囲であればまったく問題ないです!

一般的なOpensocialガジェットは10KB程度のアプリケーションデータをOpensocialコンテナに保持できますが、3arrowsはこの部分が拡張されていて、アプリケーションの保存容量に制限はないそうです。ただし1キー辺り(このキーをつけてそのとき必要なデータだけを呼び出す)1MB位にしたほうがいいそうです。

データの持ち方

自前のTinyWikiでは、すべてのページをひとつのhtml中に持っています。手元の結構ガッツリ書いたものでも200KB程度のファイルサイズですので、ひとつのWikiをひとつのキーに格納する感じでいいでしょう。

また、TinyWikiにはなかった、複数のWikiを作れる機能が必要そうですね。
せっかくガジェットをインストールしたのに、Wikiが一つしか作れなかったらシャレになりません。。。

まずは複数のWikiを管理するマネージャから作る
を最初の目標にして、とりあえずここまできたのが一番上の画像になります。

userのdisplayNameをhtmlに書き込むサンプルは、コントロールパネル>アプリケーション>アプリケーションの追加で、テンプレートというアプリケーションが現れるのでそいつを見てみましょう。または最初から追加されています。

jQueryやjQuery-uiはあらかじめ3arrowsのサーバにあがっているので、カレンダーなどのコードを覗いてscriptの呼び出しをコピペしておきましょう。

appDataのgetとupdateを使って、ユーザーのWiki一覧を表示するための情報を取得したり更新しています。(このデータにはWikiの実体は含まなくて、画像のようなWikiのサムネイルを表示するための僅かなデータだけを持っています。)この部分を作るのには、ツイートインガジェットが参考になりました。ツイートインガジェットはコード量も他のガジェットにくらべ短いので最初に見るにはいいと思います。

アプリケーションエディターについて
3arrowsはアプリケーションエディタを持っていて、ガジェットのカスタマイズが行えます。

ガジェットの設定部分、html部分、js部分、それぞれきちんと色分けされていていいです。僕のAptanaも見習ってほしいです。

たまに保存に失敗したりするので、今はAptanaで書いてコピペして保存>実行しながら開発しています。

まだよく把握できていないこと
jQuery.historyを使ってブラウザの戻る・進む時にユーザーの予期した画面を提供するようにしている。最終的にこいつも考慮しながら作らなくちゃいけないけど、これはまだやったことがない。

おそらくそれと関連して、gadget.Viewにいろんなものができてる。Content view="home,schedule,register,import,profile">これはガジェット仕様なのかな?3arrowsの拡張なのかな~?

カレンダーと
ツイートインでappDataの呼び方が違う。最初にカレンダーを参考にしたときはデータの保存がうまくいかなかった。Opensocialには、viewerとかuserとかfriendとかいろんなパラメータがあるんだけどこの辺をよく把握してないからかな??


カレンダー
.add('userAppData', osapi.appdata.get({ userId: '@viewer', groupId: '@self', appId: '@app', keys: [ 'calendar', 'gcal' ] }))

ツイートイン
.add('viewer', osapi.people.getViewer({ fields: 'appdata.qs' }))

この次は、ここまでで何とか表示できたサムネイルに削除や編集ができるようにしていきたいと思います。

以下がここまでのコードになります(^-^;;
http://code.google.com/p/gadget-os/source/browse/tinywiki/3arrows/tinyWiki.3arrows.xml?spec=svn210&r=210