NULL::something

2007-11-17

New version of $X

コピペメモ

今までの $X は evaluate を二回する問題があってダサいので、使い勝手をそのままにしつつ新しくして使いはじめました。

  • type 指定を導入
    • ECMAScript 側で受けとりたい型を指定する。 (Array, String...)
    • XPathResult.BOOLEAN_TYPE とか指定するのはめんどいし覚えられない。
  • type 指定なしの場合は UNORDERED_NODE_ITERATOR_TYPE をそのまま Array に変換してかえす
    • たぶんこれでも殆どの場合は問題ないと思う
    • ノード集合じゃない (number とか) ならそれぞれそのままかえす (いままでとおなじ)
  • type 指定で Array を指定した場合は ORDERED_NODE_SNAPSHOT_TYPE を Array に変換してかえす
    • UNORDERED なやつで特別問題がある場合つかう

あんまり type 指定するの好きじゃないので (めんどい) 基本的に指定しなくても問題ないように

(長いのでまだ変更するかも)

// $X(exp);
// $X(exp, context);
// $X(exp, type);
// $X(exp, context, type);
function $X (exp, context, type /* want type */) {
    if (typeof context == "function") {
        type    = context;
        context = null;
    }
    if (!context) context = document;
    var exp = (context.ownerDocument || context).createExpression(exp, function (prefix) {
        var o = document.createNSResolver(context).lookupNamespaceURI(prefix);
        if (o) return o;
        return (document.contentType == "application/xhtml+xml") ? "http://www.w3.org/1999/xhtml" : "";
    });

    switch (type) {
        case String:
            return exp.evaluate(
                context,
                XPathResult.STRING_TYPE,
                null
            ).stringValue;
        case Number:
            return exp.evaluate(
                context,
                XPathResult.NUMBER_TYPE,
                null
            ).numberValue;
        case Boolean:
            return exp.evaluate(
                context,
                XPathResult.BOOLEAN_TYPE,
                null
            ).booleanValue;
        case Array:
            var result = exp.evaluate(
                context,
                XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
                null
            );
            var ret = [];
            for (var i = 0, len = result.snapshotLength; i < len; i++) {
                ret.push(result.snapshotItem(i));
            }
            return ret;
        case undefined:
            var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
            switch (result.resultType) {
                case XPathResult.STRING_TYPE : return result.stringValue;
                case XPathResult.NUMBER_TYPE : return result.numberValue;
                case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
                case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
                    // not ensure the order.
                    var ret = [];
                    var i = null;
                    while (i = result.iterateNext()) {
                        ret.push(i);
                    }
                    return ret;
                }
            }
            return null;
        default:
            throw(TypeError("$X: specified type is not valid type."));
    }
}

2007-09-15

出張 Shibuya.js 24 「正しい Photoshop の使い方」

Mozilla 24出張 Shibuya.js 24 で LT しました。

スライドは CodeRepos にコミットしました。psd でプレゼンしましたがたぶん見れない人のほうが多いので png に変換してあります。

出張 Shibuya.js 24 「正しい Photoshop の使い方」変換済み

時間の関係で全部できませんでしたが、実演のシナリオも一応あります。


あのシェルも CodeRepos にコミットしてあります。pshell (追記: SlideShare にもアップしました)

Windows 版の CS3 を持っていないのでうごくのかよくわからないですが、基本的にファイルのよみかきしか行なっていないので、ruby と CS3 があればうごくんじゃないかと思います。


追記

そういえば深夜にやっていたライブコーディングにもせかんどらいふさん経由で飛び入り参加しました。ネタがあまりにもうかばないのでかなり困った。結局 10 分ではてダのセクションならびを統一する Greasemonkey スクリプトを書きました。むかしに書いたことあったのですが、いつのまにかアンインストールされてたのでスクラッチから書きなおしみたいなものです。(書いたの10行だけ)

CodeRepos にコミットしてあります

2007-05-21

謎の勉強会 (twitter ではじまったやつらしい) でしゃべったりしました。

「Ruby とか」のほうは実際には Lua の話です。

AS 関係のかたが多かったので微妙にシクった話をした感じでしたけど気にしない!! もうちょい AS 書かないとだめますね。


参照:


text-hatena.js が nitoyon さんだったっていうのを聞いてびびったりしました。

nitoyon さんのニコニコ動画的プレゼンが素敵だったので見た瞬間から RubyCocoa で書いていたのですが、スキル的に間にあわなかったので、既に書いてあったやつと webrick を組みあわせるだけにしたのですが、やっぱヨコに流れるのがないとつまんねなと思いました。(すなおに Apollo つかえよって感じですが、Apollo のアレが Mac にはいっていないと思いこんでた)

ガッコの講義とかホントあれみたいにやればいいのになぁと思ったけど、変な学生じゃないとそもそもノートPCもってないし、ケイタイだとうつのが遅いのでだめだな。


Flash の開発スタイルを確立したい。なんか書いてるといつここが処理されるんだろう?とか考えて頭がスパゲティになってしまってダメだ。どっから入るのがいいのかなぁ。

2007-04-28

勉強会でセマンティックウェブについて話しました

バイト先の社内勉強会で SW/sw について話しました。資料を公開します。sw (SW)

なんというか、セマンティックウェブとか自分が言うとすごい恥かしいというか、「お前がセマンティックウェブとか笑わせるなよwww」って感じなんですが、もうちょっとこういう方面にも興味がわいてくれたり、理解がすすんでくれると面白いかなぁと思いやってみました。自分自身もよくわかっていない点が星の数ほどあったし、今もあるので、勉強になりました。

たぶん突っ込みどころがたくさんあると思うので、てきとうに突っ込んでいただきたいです。(勉強会は常時質問をうけつけながら、説明不足 (foaf が何の語彙だとか、XML の名前空間がどうとか) を説明していきました。最初は20分とか40分の予定だったのですが、いたらなさゆえに2時間ぐらいやってしまいました)


FOAF の RDF を例にしたのですが、あまりよくなかったと思います。FOAF ではメールアドレスを識別につかうんだよ、っていう話は口頭でしたので、資料のはのっていないです。foaf:Person に rdf:ID をつけている例がありますが、普通これはやりません。


少しだけ実演したソースです。Redland のほうはイメージしやすいかなと思います。ruby-binding とかは apt で入りました (librdf が Redland です)。

もっと実装の話をしてもよかったかなぁというか実装から入ったほうがよかったかなぁとかなんとか……


てきとーに眺めて興味がわいたら メタ情報とセマンティック・ウェブ を読んでみることをお勧めします。

2007-04-14

ちんこ演算子

数名のかたに「ちんこ演算子って知っていますか」と訊いてみたのですが、あまり知っている人がいないのですね。ねこみみ演算子よりずっとメジャーなのに。

ちんこ演算子は Ada の代入や、Io の setSlot のシンタックスシュガーや、Pascal の代入に使われています。また最近では Ruby のローカルスコープ代入演算子としてちんこ演算子が提案されています。

ねこみみ演算子は Perl にしかありませんが (いやよくわかんない)、ちんこ演算子はおそらくもっとたくさんの言語にもあると思います。

ただし、ちんこ演算子は左から右に突っ込むことを意味していますから、ちんこ演算子を「正しく直感的に」使っている言語はそれほどないのかもしれません。

それと余談ですが、腐女子が使う演算子である「×」はそのままちんこ演算子に置換可能です。この場合は直感的に正しいちんこ演算子になります。驚き最小になって素晴しいですね。

2007-03-25

Shibuya.js Shibuya.es

「えへへうふふ E4X」とかいうふざけたタイトルで発表しました。時間をオーバーしまくってご迷惑をおかけしました。

ということで資料を公開します。えへへうふふ E4X

タイトルに意味はありません。E4X ってえへへうふふって感じがしたのでつけただけです。


喋っていたら「ああ幸せだなぁ」とか思ってテンションがあがってしまいました。なんか変だったようです。たのしかった


そういえば、どうでもいいけど今回はパーカーではありませんでした。


あ、あと、XPath や DOM 低レベル関数と比較したのですが、もちろんこいつらには住み分けがあるので、「E4X が常にいい」と言っているわけではないです。特に E4X では XPath の following 系がなかったりとかするのでうまく使いわけられるのが一番いいと思います。


Shibuya.es カンファレンス で動画が公開されました。自分は怖くてみてません!!

2007-03-15

Opera のユーザJS と まるごとJS について

嘘を書いたので OperaのユーザーJavaScriptはUTF-8Nで - ノヴム・オペラヌム - by Satoru Watanabe を参照してくださいませ。やってみたら確かにその通り (.js でもメタデータによる @include 指定が効く) でした。検証しろよおれ……激反省……

ご指摘ありがとうございます。完全に思い込みしてました。申し訳ないです。

Page 1 of 2: 1

Archives