2012-01-01から1年間の記事一覧

Indexed Database APIを使いやすくするためのライブラリ KageDB その2 - バルク更新

今回も、KageDB の紹介。 https://github.com/nakamura-to/KageDB 今回はバルク更新です。 IDBObjectStoreのadd/put/deleteに対応して、bulkAdd/bulkPut/bulkDeleteというメソッドを追加しています。名前のとおり、複数件をまとめて更新できます。 KageDBのb…

Indexed Database APIを使いやすくするためのライブラリ KageDB その3 - 待ち合わせ

KageDB の紹介です。 https://github.com/nakamura-to/KageDB 今回は待ち合わせです。 joinというメソッドをつかって複数処理を待ち合わせします。こんな感じで使います。以下の例では削除と追加を同時にやっています。 myDB.tx(["person"], function (tx, p…

Indexed Database APIを使いやすくするためのライブラリ KageDB

Indexed Database APIを使いやすくするためのライブラリを開発してます。現在のバージョンは0.0.1。GW中に0.0.0を作ったのですが、ほとんど全部捨ててこの土日で作り直して0.0.1としました。 https://github.com/nakamura-to/KageDB ほんとはドキュメントを…

msIndexedDBのIDBDatabaseのプロパティにプロトタイプ経由でアクセスできない?

IndexedDBを触っていてどうにもAPIが使いにくいのでラッパーを作ろうと思っているのですが、IEでなんかよくわからないエラーに出会ってしまいました。たとえば、IDBDatabaseのnameプロパティにアクセスしたいのですが、直接アクセスはもちろんOK。でも、Obje…

HTML5のローカルストレージとWinRTのローカルストレージ

違いがよくわからないので調べました。結論は ローカルコンテキストでどちらも使える Webコンテキストでどちらも使える(iframeで読み込んだのはローカルのhtmlだった。それ以外の場合はわからない。) APIは別(どっちかがどっちかへデリゲートみたないなこ…

セッション状態のシリアライズ/デシリアライズ

ドキュメント(http://msdn.microsoft.com/en-us/library/windows/apps/hh781225)にあるように、WinJS.Application.sessionState を使ってセッションを管理すると、suspendedな時とreactivatedな時にシリアライズ/デシリアライズを自動で行ってくれる。ちな…

node.jsでDomainを関数ごとに作ってエラーハンドリング

node.js Domain 時代のエラー処理のコーディングパターンで、node-v0.7.8でDomainという機能が入ったのを知りました。 これはいいですね! さっそく、自分好みの使い方を考えてみました。 それは、Domainを関数ごとに作る、というもの。こんな感じ。 var fs =…

2 Way SQLパーサとしてのDoma

もともとは「2Way SQLのパーサ *だけ* って無いのかな?」と思って探したら偶然見つけた。なので、本当に欲しかったのは「2Way SQLのパーサ」。案外無いので、clione-sqlとかmirage、s2jdbcのソース読んで勉強するしかないかなと思ってる。 2012-04-07 Doma…

Doma 1.22.0 リリース

Doma 1.22.0 をリリースしました。ダウンロードはこちらからどうぞ。 http://doma.seasar.org/downloads.html Mavenをご利用の方はこちらを参照ください。 http://www.seasar.org/wiki/index.php?Maven2RepoRemote 以前のバージョンから移行するには移行ガイ…

アダプタ的な関数で非同期コールバックをつなぐ

昨日のエントリでは、「2つのファイルを同時に読み、結果を連結して書き出し、書き出した内容をもう一度読む」という処理を以下のコードで実現しました。 var gate = require('gate'); var fs = require('fs'); var latch = gate.latch(); fs.readFile('pat…

問題は非同期コールバックのネストにあるんじゃない、待ち合わせにあるんだ!

Node.jsでのプログラミングで問題としてよく挙げられるコールバック地獄。 ずっと、非同期コールバックがネストすることが問題なんだと思っていました。でも、そうじゃない。ネストすればクロージャが使える(内側の関数から外側の関数スコープにある変数を…

関数の数珠つなぎ 逐一版

そういえば、一週間くらい前、変な夢をみたんですよね。関数がいつまでたっても関数を返してくれるばかりで実質的な処理をしてくれなくて苦しむという。 たんに関数を返す条件と実質的に実行する条件を決めてやればいいだけなのですが、夢の中ではそれに気づ…

node.jsで使える非同期コントロールフローライブラリ nue 0.6.0 リリース

0.6.0をリリースしました。npm install nue でインストールできます。 https://github.com/nakamura-to/nue CHANGELOG 新機能 - デバッグをサポートしました。`NODE_DEBUG=nue` が使えます。 変更 - NueAsyncError を改善しました。NueAsyncError は通常のEr…

関数の数珠つなぎ

nueでは、独立に定義された関数を数珠つなぎにしています。 その中核を担っているコードはこんなです。 function chain(functions) { return functions.reduceRight(function (next, curr) { return function () { curr.apply({next: next}, arguments); } }…

複数ファイルを同時ダウンロードして順番に書き出す

@yssk22 さんの node.js ハンズオン資料に「複数ファイルを同時ダウンロードして順番に書き出す」というサンプルがあります。 http://dl.dropbox.com/u/219436/node.js/handson/build/html/intro/async_io.html#id8 今回は、このサンプルを拝借して、同等の…

関数の数珠つなぎ もしくは インタフェースの数珠つなぎ

JavaScriptで書いた関数の数珠つなぎ(http://d.hatena.ne.jp/taedium/20120310/p2)ですが、Javaでもやってみました。 JavaScript版とまったく同じ処理ではないですが、ある関数の実行結果を次の関数の引数としています。当然、型の制約を受けたりクロージ…

node.jsで使える非同期コントロールフローライブラリ nue 0.5.0 リリース

0.5.0をリリースしました。npm install nue でインストールできます。 https://github.com/nakamura-to/nue CHANGELOG 新機能 - nue.as関数を導入し、非同期コールバックの引数を次の関数の引数にマッピングできるようにしました。 変更 - step関数のコンテ…

node.jsで使える非同期コントロールフローライブラリ nue 0.4.0リリース

0.4.0をリリースしました。npm install nue でインストールできます。 https://github.com/nakamura-to/nue CHANGELOG 新機能 - nue.parallelでstep関数を並列実行できるようになりました。 新機能 - step関数の中で、this.forEach関数を使って配列の要素ご…

node.jsで使える非同期コントロールフローライブラリ nue 0.3.0リリース

0.3.0をリリースしました。npm install nue でインストールできます。 https://github.com/nakamura-to/nue CHANGELOG 新機能 - step関数の中で this.endWith(err) を実行してエラーでflowを終了できるようになりました。flowの最後のstepの this.err に thi…

例外についての質問に答えました

http://d.hatena.ne.jp/taedium/20111122/p2#c質問者さんが回答されたことに気づく仕組みってあるんですかねー?

nueで関数合成っぽいもの

underscore.jsには関数合成の機能があります。 var _ = require('underscore'); var greet = function(name){ return "hi: " + name; }; var exclaim = function(statement){ return statement + "!"; }; var welcome = _.compose(exclaim, greet); console.…

node.jsで使える非同期コントロールフローライブラリ nue その9 - 0.2.0リリース

0.2.0をリリースしました。npm install nue でインストールできます。 https://github.com/nakamura-to/nue CHANGELOG 非同期コールバックに渡されるエラーはNueAsyncErrorでラップして通知しデバッグしやすくしました。 ハンドルされなかったエラーはNueUnh…

node.jsで使える非同期コントロールフローライブラリ nue その10 - node-seqのサンプルと比較

GREEではnode-seqを使っているんですね。 http://www.atmarkit.co.jp/fsmart/articles/devsummit2012_01/01.html 気になったのでnode-seq(https://github.com/substack/node-seq/tree/master/examples)のサンプルをnueで実装したらどうなるか試してみまし…

node.jsで使える非同期コントロールフローライブラリ nue その7 - 0.1.0リリース

0.1.0をリリースしました。npm install nue でインストールできます。 https://github.com/nakamura-to/nue 前回ブログを書いた時点ではなんだかんだで800行くらいあったのですが、機能を削って200行くらいにしました。やっぱりコードは少ない方がいいですね…

node.jsで使える非同期コントロールフローライブラリ nue その8 - 例外ハンドリング

nueでは、例外(エラー)はflowの最後の関数でハンドリングできます。例外が起きた場合、処理は最後の関数に移り、this.errに例外を表すオブジェクトが設定されます。 非同期ワークフローにおける例外には2種類あります。1つめは、フローの中で明示的にthro…

node.jsで使える非同期コントロールフローライブラリ nue その6 - mapの必要性について

id:koichik さんがフロー制御のライブラリ(node-flowless)を作ったそうです。いやー刺激的です。 http://d.hatena.ne.jp/koichik/20120219#1329634800 上記エントリ中の次の文章に反応してみます。 あとは map() なんかの非同期版も重宝ではありますが,そ…

node.jsで使える非同期コントロールフローライブラリ nue その3

どうやら僕は間違った方向に進んでいたようです。シンプルに考え直してみると、parallelとかmapとかfilterとかいらない。もっとシンプルに非同期コールバックの待ち合わせに焦点を当てたほうが使いやすくなるはず。コードの1/3以上を捨てて、その2で示したサ…

node.jsで使える非同期コントロールフローライブラリ nue その4

非同期処理前と非同期処理後のコードで値をどう共有するか? nueでは2つの方法を提供します。 引数で渡す flowローカルな変数を介して共有する (グローバル変数とかflowよりも大きなスコープで共有する方法もありますが、ここでは取り上げません。) 1. 引…

node.jsで使える非同期コントロールフローライブラリ nue その5

単体テストのしやすさって重要ですよね。ここでflowがネスト可能であることが効果を発揮します。テストライブラリにmochaを使った場合のサンプルコードはこのようになります。 var flow = require('nue').flow; var fs = require('fs'); var assert = requir…

Doma 1.21.0 リリース

Doma 1.21.0 をリリースしました。ダウンロードはこちらからどうぞ。 http://doma.seasar.org/downloads.html Mavenをご利用の方はこちらを参照ください。 http://www.seasar.org/wiki/index.php?Maven2RepoRemote 以前のバージョンから移行するには移行ガイ…