Afrous.dev

Afrous - Ajax for the rest of us

2008-03-03

Afrous 最新情報 16:29 はてなブックマーク -  Afrous 最新情報 - Afrous.dev  Afrous 最新情報 - Afrous.dev のブックマークコメント

2つ更新するのが面倒で、こっちのブログ更新してないよー。

こちらへどうぞ。

[afrous] - snippets from shinichitomita’s journal

2007-08-24

最新版、スクリーンキャスト 15:04 はてなブックマーク - 最新版、スクリーンキャスト - Afrous.dev 最新版、スクリーンキャスト - Afrous.dev のブックマークコメント

すいません、ブログ全然更新してないです。

デモサイト

http://afrous.com/demo/

以前と比べて変わった点

  1. UIがExtJSベースになってます
  2. 自由レイアウトウィンドウ=>スタックウィンドウ(直線的に上下に並べている;Automator的)になりました
  3. Process Configurationファイルの保存、読み込み(Copy&Pasteによる暫定対応)

スクリーンキャスト

http://www.screencast.com/users/stomita/folders/Jing/media/a0086f46-5717-4211-b581-ac7bc742db2b

まだまだ、やることいっぱい。もちろん、いわゆる本公開ではありません。

2007-06-10

Afrousのコアプロセスエンジン部分 16:37 はてなブックマーク - Afrousのコアプロセスエンジン部分 - Afrous.dev Afrousのコアプロセスエンジン部分 - Afrous.dev のブックマークコメント

現在Afrousはコアとなっているプロセス実行エンジン部分リファクタリング中です。具体的には、変数関数のネーミングの統一と言ったところから、複数の要求による同時実行制御、エラー処理などをサポートするためのオブジェクト構成について見直しています。まだ循環参照制御などといったところは実装できてませんが、一応非同期データ取得を依存性を元に順次制御するところまでは作り直せています。

まだこのバージョンプロセスエンジンに対応するGUIエディタ部分はありませんが、定義情報JSON記述できるので、JSONを直接記述してプロセス定義をすることは可能です。

プロセス定義方法

以下のようなJSON記述して、プロセス定義を行います。

var config = {
  name : "process1",
  params : [ 
    { name : 'username', type : 'string', 'default' : 'stomita' },
    { name : 'count', type : 'integer', 'default' : 5 }
  ],
  output : "${networkPosts}",
  actions : [
    { name : "delnetwork",
      type : "Ajax.Jsonp",
      inputs : { 
        "url" : "http://del.icio.us/feeds/json/network/${username}"
      }
    }
    ,
    { name : "networkPosts",
      type : "Array.Iterate",
      inputs : { 
        "array" : "${delnetwork}"
      },
      innerProcess : {
        output : "${posts}",
        actions : [
          { name : "posts",
            type : "Ajax.Jsonp",
            inputs : { 
              "url" : "http://del.icio.us/feeds/json/${networkPosts_each}"
            }
          }
        ]
      }
    }
  ] 
}

JSONプロセス定義のルートには以下のプロパティ記述できます。

name
プロセス
params
プロセスが外部から受け取ることが出来るパラメータリスト。型およびデフォルト値を指定可能
output
プロセスの出力値を定義(必須) パラメータ値/アクションの出力値を${}を使用して参照可能
actons
アクション定義のリスト

アクション定義には以下のプロパティ記述します

name
アクション名(必須)
type
ユニットアクションタイプ名。あらかじめ該当ユニットアクションを含むパッケージがロード済みである必要がある。
inputs
アクションの使用する入力値の定義。パラメータアクションの値を${}を使用して参照可能
innerProcess
アクションが入れ子のプロセスを使用する場合、そのプロセス定義

ユニットアクションとは、プロセスに組み入れて再利用することが可能な処理が記述されたJavaScriptオブジェクトです。文字列、配列処理、AJAXリクエストJSONP)などは標準で組み込まれます。プロセス実行に必要なユニットアクションを新たに拡張して定義することも可能です。

プロセスの実行

JSONによる定義が終わったら、以下のスクリプトプロセスを実行できます。

var pdef = new afrous.ProcessDef(config); // 設定情報のロード
var proc = new afrous.ProcessInstance(pdef); // 定義情報からプロセスをインスタンス化
proc.start(function(obj) { /*  */ }); // プロセスの開始。プロセスの出力結果はコールバック関数で受け取る

サンプル

こちらのページから実際にプロセス定義のJSON記述して試せます。

http://afrous.com/demo/afrous-test.html

2007-05-22

Webサービス表計算関数型プログラミング 00:51 はてなブックマーク - Webサービスの表計算、関数型プログラミング - Afrous.dev Webサービスの表計算、関数型プログラミング - Afrous.dev のブックマークコメント

たぶんAfrousは表面的には全く関係ないと思うものが影響を与えています。

まず最初はなにがやりたかったかというと、Webサービス表計算をやりたかった。表計算WebサービスGoogle Spreadsheetとか)じゃなくって。

表計算では、まずベースとなる入力データがあって、それを望む出力に向けてインクリメンタルに組み立ててくことする。で、一旦出力を設定しておけば、後からその入力データが変更になっても、出力は組み立てておいたロジックに従って自動的に変化する。

表計算が格子状のテーブルなのに対して、WebサービスメッセージXMLであれJSONであれ階層構造が基本なのだけど、きっと階層構造でも同じことが出来ると思った。その状態で、Webサービスの一つ一つがExcelでいうシートに相当している状態を考えてみようと思った。

そう考えていたときに全く別にHaskellとかをちらちら眺めていたら、表計算関数型プログラミングの考えに近いのだと知った。

http://web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html

表計算ソフトを使ったことがある人は関数型プログラミングを 経験済みだと言えるでしょう。 表計算ソフトでは各セルの値を、他のセルの値を基に決定します。 ここで注目されるのは 何を計算するのかであり、 どう計算されるかではありません。

このことは、なんとなく実装へのヒントと勇気を与えてくれた。ただ、どこまで実装を関数型に近づけるかについての判断がまだつかないでいるので、ちょっとした足かせにもなっている。

2007-05-13

Iterate対応 22:54 はてなブックマーク - Iterate対応 - Afrous.dev Iterate対応 - Afrous.dev のブックマークコメント

先週、AfrousはIteration(for each loop)に対応してます。

これで例えば

  1. del.icio.us network idを取得
  2. network idのそれぞれのpostを取得

とか

  1. gooキーワードRSS(http://ranking.goo.ne.jp/rss/keyword/keyrank_all1/index.rdf)を取得
  2. top5のキーワードに対してsite:wikipedia.orgでYahoo検索を実施
  3. 検索結果トップのSummaryキーワードを同時に表示

ということが出来るようになってます。

しかし、今のところイテレーションは直列処理で、しかも実装はデモで間に合うことを優先させたため、かなり汚いです。並列化とかはリファクタ後でないと無理そう。

Pipesで出来て今できていないオペと言えば文字列系かな。まあ正規表現くらいいつでも入れていいのですが、まんまPipesの後追いになるのもどうかなあと思うし。そもそも、そういえばもともとは「表計算Webサービスでやれないのか」というアイディアだった(ような気がする)ので、むしろ集合関数の方に興味がある。

まあ、どっちにしろこれから2ヶ月くらいはリファクタ作業に入るので、サイトの見た目の更新は止まると思う。

ところで、今なんかうちの部屋の環境からサーバアクセスできない。携帯からはアクセスできるので、経路のネットワークの問題なのか?はやくなんとかならんかな。