JavaScript

ダイアログをはさみながらの非同期処理の再実行

接続ボタンを押したら、XMLHttpRequestを飛ばして取得したHTMLのサイズを表示するというものです。 タイムアウトが起きたら、ダイアログを表示して再接続するかどうかをユーザーに尋ねます。 再接続でまたタイムアウトしたら同じダイアログを出すということ…

ChromeのIndexedDB

https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/chromium-html5/RQFrG9SDPTI%5B1-25%5Dversion change transactionがアクティブな場合に、別のトランザクションを実行するとエラーになる、という話。バージョン21から仕様に合わせて厳…

KageDB 0.0.8 リリース

どう考えても、自分を含めた数人しか使っていないKageDBですが、0.0.8をリリースしました。KageDBは、HTML5のIndexedDBのAPIを使いやすくするライブラリです。 ダウンロードはこちらからどうぞ。 https://github.com/nakamura-to/KageDB/downloads サンプル…

KageDB 0.0.6リリース - fetchで多くの抽出条件を指定可能に

Indexed Database API(IndexedDB)を使いやすくするためのライブラリKageDB 0.0.6をリリースしました。 https://github.com/nakamura-to/KageDB/downloads 今回は、fetchという機能を強化して多くの抽出条件を指定可能にしました。これでカーソル処理が必要…

KageDB 0.0.5リリース - IE 10 Release Previewに対応

Indexed Database APIを使いやすくするためのライブラリKageDB 0.0.5をリリースしました。 https://github.com/nakamura-to/KageDB/downloads 昨日リリースされたIE 10 Release Previewに対応しました。それから、Windows 8のメトロスタイルアプリケーション…

IndexedDBを使いやすくするためのライブラリ KageDB 0.0.4 リリース

バージョン0.0.4をリリースしました。 https://github.com/nakamura-to/KageDB/downloads KageDBの特徴はこんなものです。 IndexedDBのAPIをシンプルにする 追加/更新/削除の一括処理をサポート 複数の非同期処理を待ち合わせできる グローバルなエラーハン…

WinJS.Binding.Template.prototypeの拡張

WinJS.UI.ListViewのitemTemplateやgroupHeaderTemplateの中で、何番目のindexか? グループ内にいくつ項目があるか? とかを出力したいなあと思っていたのですが、適切なAPIが用意されていないみたいです。ドキュメントには書いていないですが、WinJS.Bindi…

Indexed Database APIを使いやすくするためのライブラリ KageDB その6 - マイグレーション

KageDB の紹介です。 https://github.com/nakamura-to/KageDB 今回は、マイグレーションについて書きます。Indexed DBのデータベースはスキーマのバージョンを持っていて、バージョンが上がったタイミングをフックできるようになっています。標準のAPIでやっ…

Indexed Database APIを使いやすくするためのライブラリ KageDB その5 - フェッチ

KageDB の紹介です。バージョンはちょこちょこ上げていて、今は0.0.3です。 https://github.com/nakamura-to/KageDB 今回は、フェッチについて書きます。 前回、カーソルについて紹介しましたが、カーソルは1件1件取得する処理なので、全件取得するには次の…

Indexed Database APIを使いやすくするためのライブラリ KageDB その4 - カーソル

KageDB の紹介です。 https://github.com/nakamura-to/KageDB 今回は、次のバージョン(0.0.2)に入れる予定の機能ということでカーソルについて書きます。 IndexedDBのカーソルを使った検索には、keyRangeとdirectionというものが関係してきます。keyRangeは…

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つのファイルを同時に読み、結果を連結して書き出し、書き出した内容をもう一度読む」という処理を以下のコードで実現しました。 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 今回は、このサンプルを拝借して、同等の…

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…

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行くらいにしました。やっぱりコードは少ない方がいいですね…