2007/09/09
■[programming]LinearNote: Ruby on Railsで動くWikiのようなblogのようなメモ帳
この夏Ruby on Railsの勉強のために作ってたアプリケーションを、RubyForgeに登録しました。
RubyForge: LinearNote: Project Info
http://rubyforge.org/projects/linearnote/
ソースコードの量もまだそれほど多くない(というかかなり少ない)ので、Ruby on Railsの勉強にも役立つかもしれません。もしよかったらご覧ください。
■ これは何?
個人的なメモの記録を目的とした、メモ帳アプリケーションです。メモ帳アプリケーションはデスクトップアプリとしてもWebアプリとしても既に色々ありますけど*1、LinearNoteは特に以下の用途に特化しています。
- 普段は、気軽にメモを溜めたい(手元のPCにテキストファイルを書きためるように)
- でも、時々はメモの一部を他の人に公開したい。またはそのメモをベースにWikiのページを作りたい
利用イメージとしては、自宅または職場に1つLinearNoteのサーバを立てて、そこにありとあらゆるメモを残していくような感じです。
書き込まれたメモはデフォルトでは非公開状態になるので、普通に使う分にはWindowsの「メモ帳」でテキストファイルを作りまくるのと同じように気軽に書けます。それに加えて、適当に書いたメモをあとで他の人に公開したくなったときに、整形したりいくつかのメモを集めて1つにしたりするところで、LinearNote特有の機能が色々とフォローするわけです。
■ 主な機能とスクリーンショット
現在のバージョン(LinearNote 0.1.0)で実装している主な機能をご紹介します。
1. 複数のノートブックをホスト
LinearNoteにユーザ登録を行うと、誰でもノートブック(1つのWikiに相当するもの)を作成できるようになります。ユーザ登録画面はこんな感じ。
ユーザ登録すると、自分のノートブックを作れるようになります。
ノートブックの種類は、以下の4種類から選べます……が、Groupの機能は未実装です。すいません。
- Personal(所有者だけが書き込み可能)
- Group(許可されたメンバだけが書き込み可能)
- Public(登録ユーザ全員が書き込み可能)
- Exposed(どんなユーザも書き込み可能)
2. プレーンテキストかPukiWiki形式でメモ
作成したノートブックでメニューの「New Note」をクリックすると、メモ(LinearNoteでは「ノート」と呼んでる)の作成画面に入ります。
ノートを記入すると、画面下のプレビューが自動的に更新されます。メモのスタイルは、PlainスタイルかPukiWikiスタイルから選択できます(デフォルトのPlainスタイルを選んだ場合は、ノートが等幅フォントで表示されます)。
PukiWikiパーサには、Rubyist Magazine出張版に載っている添削後のPukipa(MITライセンス)を使わせていただきました。作者のgorouさん、添削者の青木さん、ありがとうございます。
3. メモの表示方法をカスタマイズ
これがLinearNoteの目玉機能です。他のアプリにあってもおかしくないけど、僕は見たことないので今回作ってみました。
何も考えずに適当にメモを残していると、いざ他の人にも見せようと思ったときに再編集が面倒です。そこで、その再編集を助けるために、LinearNoteは「スマートインポート」機能を備えています。
スマートインポートとは、簡単に言うとiTunesのスマートプレイリストと同じような機能です。iTunesでは、「ジャンルがRockの曲」とか「アーティスト名がthe pillows」という条件付きのプレイリスト(スマートプレイリスト)を作ると、その後曲が増えたり減ったりしても、そのプレイリストの中身が自動的に更新されます*2。参考までに、iTunesのスマートプレイリストの設定画面はこんな感じです(↓)。
LinearNoteのスマートインポートでも、あるノートの中に他のノートをインポートするために、「タグがp2p」とか「タイトルか本文にRuby on RailsかRoRという文字列が入っている」という条件を付けることができます。スマートインポートの設定画面は次のようになります。
スマートインポートを設定すると、ノートの下に、条件にマッチするノートの一覧が表示されます(ノートの増減に合わせて自動更新)。加えて、このノートの一覧のRSS(図の赤丸部分)を、ノートブックの最終更新一覧のRSSとは別に配信しており、ノートブックの特定の部分だけをRSSリーダで購読できるようになっています。
これをどう使うかというと……例えば、ノートブックのトップページで「タグがdiaryのノートを読み込む」というスマートインポートを設定して、公開したいノートにだけdiaryタグを付けるようにすると、トップページだけ見ると普通のブログのように見えます。RSSも出ますしね。
ちなみに、このインポート機能は自分のノートブックに対してでなく、他の人のノートブックや、全てのノートブックに対しても実行できるので、この機能自体をRSSリーダのように使う事も可能です。
■ 使ってみるには
LinearNoteの動作例
すいません。動作例はいまのところ公開してないです。さくらのレンタルサーバじゃちょっと動きそうにないので、今後の予定も未定です……。
インストール方法
RubyForgeからソースコードをダウンロードして、普通のRuby on Railsアプリケーションと同じようにすれば動作します(詳しい手順はまた後ほど)。企業内でこっそりいじるような利用法もサポートするため、ソースコードはMITライセンスで公開しました。
RubyForge: LinearNote: Project Info
http://rubyforge.org/projects/linearnote/
Railsアプリのgemの作り方が分からなったので、まだgemファイルはありません。
Ruby全般だとnewgemやHoeが使えそうというのは調べたんですけど、newgemはRailsとscriptファイルの名前が衝突してるし、Hoeは「binディレクトリが無い」とエラーを出すし、一体どうしたらいいのか分からないんですよね……。
動作環境
開発環境は以下の通り(要するにInstantRails 1.7)です。が、特殊な機能は使ってないので多少違う動作環境でもおそらく動くと思います。
- Windows XP SP2
- Ruby 1.8.6
- Rails 1.2.3
- MySQL Community Server 5.0.27
CentOSで動作することは、ちょっとだけ確認しました。db/migrate/001_setup_database.rb の中身をいじれば、MySQL以外のデータベースでも動くはずです。多分。
■ 今後のToDo
- ノートブック間でのノートの移動、コピー
- ユーザ同士のコミュニケーション機能(コメント機能か何か)
- 管理者向けの機能
- ノートの自動保存
- ノートのリビジョン管理
- インターフェイスの改善
■ ご意見ご感想
お待ちしています。コメント欄か、yoshizawa at muziyoshiz.jpまでお願いします。
*1 デスクトップアプリケーションではhowmや紙copi、WebアプリケーションではRandomNoteやTiddlyWikiなどなど。
*2 「ライブアップデート」のチェックを入れている場合に限りますが、普通このチェック外しませんよね??
2007/09/18
■[P2P][SIP]第3回P2P SIP勉強会(第9回SIProp勉強会)のお知らせ
今週土曜日の9/22に、第3回P2P SIP勉強会(第9回SIProp勉強会)が開催されます。
ここの日記での告知は、いつも開催直前になってしまっててホントすみません。さくらのメンテが無かったら、今朝には公開してたんですよ……(それでも遅いような)。
日時
- 9月22日(土)
- 16時〜2時間程度(その後、飲み会)
会場
ATL Systems さんのコラボレーションラウンジ
- 新宿のオークタワー17階
応募先
- どなたでも参加OKです。
- メールアドレス:「info__atmark__siprop.org」(__atmark__ を、@(半角) に変換)まで、参加表明をお願いします。
内容
- 内容的には、第三回P2PSIP勉強会となります。
P2PにSIPを適用すると?〜〜〜SIPの汎用セッションプロトコルとして。〜〜〜
SIPropプロジェクトの解説ページから、シグナリング・プロトコルから汎用セッションプロトコルへの流れをSIPropプロジェクトの各プロジェクトを例にしながら解説します。
- これが、前回の片山さんからの宿題である「SIPropコミュニティーは、何を目指すのか?」の解になるのではないかと考えています。
さらに、汎用セッションプロトコルの例としてM2M-Xを取り上げるという予定です。そして、真の汎用セッションプロトコルとしてのSIPを考えます。
- これが、P2PSIPにつながっていくのではないかと考えています。
今回は、NTTコミュニケーションズの「m2m-x」について今村さんが講演します(予定)。
m2m-xとはNTTコミュニケーションズが主に提唱している、SIPとIPsecをベースにした、end-to-end通信のための汎用的な認証、認可および課金のフレームワークです。m2m-xの中身については、以前ITProで連載されていた以下の記事が参考になります。
- モノ同士を安全につなぐ仕掛け --- m2m-xの裏側(1):ITpro
- モノ同士を安全につなぐ仕掛け --- m2m-xの裏側(2):ITpro
- モノ同士を安全につなぐ仕掛け --- m2m-xの裏側(3):ITpro
今までの勉強会とはずいぶん毛色の違うネタになりましたが、これは前回の勉強会にて、nicoさんが
IETF P2PSIPは「VoIPのためのSIP」をP2P化しようとしているために、不要に複雑化してしまっている。もともとSIPは汎用的なセッションを確立するために作られたプロトコルなのだから、どうせなら「P2PのためのSIP」、すなわちP2Pに適した汎用的なセッション確立方法を考えよう!
という素敵な演説をされ、一部から「SIP原理主義者」という素敵なレッテルを貼り付けられたことを受けて、ここは一つ「SIP原理主義」の先行事例(と呼ぶと怒られるかもしれませんけど……)に学ぼうというわけです*1。
前回の勉強会について、詳しくは以下のSIPropサイトの議事録をどうぞ。
また、今回から参加される方は以下のページを事前に読んできてもらえると、前回の議論の中身がなんとなく分かってもらえると思います。これはSIPropプロジェクトのゴールについて説明する文章なのですが、その中で「シグナリングプロトコルとしてのSIP(VoIPのためのSIP)」と「汎用セッション・プロトコルとしての SIP (汎用的なSIP)」の違いが簡単に整理されています。
本来、汎用セッション・プロトコルであるはずの SIP が、IP 電話に付随する通信プロトコルとして語られることが多いのは、IP 電話が SIP が提供するセッション管理機能を必要とする最もメジャーなアプリケーションであり、他に SIP を必要とするアプリケーションが見つからないことに原因がある。
さらに、近年の通信事業各社によるNGNやFMCと呼ばれる試みは、「シグナリング・プロトコルとしての SIP」を推し進めるものであり、SIP の本来の「汎用セッション・プロトコルとしてのSIP」という設計意図からの乖離を生み出している。
このような状況により SIP は、大きなジレンマを抱え込むことを意味している。「汎用セッション・プロトコルとしての SIP」では、特定のアプリケーションに依存しない汎用セッション・プロトコルとしての地位を保ち続けるべきであるが、「シグナリング・プロトコルとしての SIP」では、通信事業者のシステムも含めたシグナリングに必要な機能が拡充が求められるからである。
(注:この後に、そのような現状に対するSIPropの位置づけについての文章が続く。詳しくはリンク先を参照)
P2P SIPから少し話が離れてきた感もありますが、SIP原理主義にご興味のある方は奮ってご参加ください。
*1 SIP原理主義という単語ですが、決して悪い意味では使ってないので誤解無きよう。むしろ、僕もSIP原理主義者です。
また、この日記に無関係と判断したコメント及びトラックバックは削除する可能性があります。ご了承ください。