MetaPortal
6/8の「ホームページ作成ツール」ですが、MetaPortalとか名前付けて、本気で開発するも一興じゃないかと思った。
と言うのも、実装できそうだし、ここでJavaScriptとかWebアプリとかをしっかり勉強しておくのも損じゃない。
分散ファイルシステムはどうした?てな話もあるわけですが、それはそれ、これはこれ。
Ruby + JavaScriptで。
全部JavaScriptでも良いかも。kjsとかSpiderMonkeyとかで。いや、JavaScriptだとファイルとかソケットとか使えないからダメか。
モジューラブルなアーキテクチャで、1つのモジュールの構造は↓以下。
hoge/
hoge/main.rb # Model
hoge/fuga.erb # default View
hoge/fuga.full.erb # PC用View
hoge/fuga.mobile.erb # 携帯用View
hoge/fuga.firefox.erb # Browser specific View
hoge/fuga.js # 同じようにJavaScript
hoge/fuga.mobile.js
hoge/fuga.css # 同じようにCSS
viewはブラウザによって分岐する。
main.rbで、
inject_view :fuga
と書いておくと、ブラウザがIEだったら、まずfuga.ie.erbを探して、無かったらfuga.full.erbを探して、それも無かったらfuga.erbを探す。同じようにCSSとかJavaScriptも。
ファイルが多くなるなぁ…うーむ。しょうがないか。
これでクロスブラウザに対応。
そんな感じでhogeモジュールを作る。
同じように時計モジュールとか、カレンダーモジュールとか、ファイラモジュールとかを作っていくけど、設定データを保存するとか、データをファイルに保存するとか、そう言う機能はどこからでも使う。
そこで、「設定データを保存するモジュール」を作る。で、モジュール同士でお互いを呼び出せるようにする。これでOK。
以上がRubyで書く基盤部分。
続いて見た目部分。ぎゅぃーんとアニメーションするのは、もはや必須の機能であるから、ここをサポートするいろいろが必要。
http://jquery.com/
↑こんな便利なモノを発見したので、これを使う。
http://www.ndesign-studio.com/blog/design/css-dock-menu/
↑こんな激しいモノもできるらしい。
試しに時計モジュールの擬似コードを考えてみる
clock/main.rb
clock/view.rb
clock/digital.erb
clock/ditigal.js
clock/digital.css
clock/digital.mobile.erb
clock/digital.mobile.js
clock/digital.mobile.css
clock/fuzzy.erb
clock/fuzzy.js
clock/fuzzy.css
clock/fuzzy.mobile.erb
clock/fuzzy.mobile.js
clock/fuzzy.mobile.css
# clock/main.rb
class Module_clock
require "#{moduleDir}/view.rb"
inject_module :config, :frame
# 設定データを保存するモジュールと、
# HTMLのヘッダとフッタを制御するモジュールをinject
inject_view :digital, :fuzzy
# digital.{erb,js,css}とfuzzy.{erb,js,css}をinject
def run
if @@config.isSet("clock", "use_digital")
position = @@config.get("clock", "digital_position")
@@digital.run( position )
end
if @@config.isSet("clock", "use_fuzzy")
position = @@config.get("clock", "fuzzy_position")
@@fuzzy.run( position )
end
end
end
# clock/view.rb
class Module_clock
class View_digital
inject_module :tinysnippet
def initialize(position)
@position = position
end
attr_reader :position
end
class View_fuzzy
def initialize(position)
@position = position
end
attr_reader :position
end
end
# digital/digital.erb
# digital/digital.js
時計を表示するJavaScriptくらいどこかにあるに違いない。
…面倒だ…もっと簡単に書けないとやってられない。こりゃダメだ。
JavaScriptからサーバーにデータを伝えるにはどうしたらいいのかワカラン…
お、ここでXMLHTTPRequestを使うのか…うーむ。