タグ

ブックマーク / nanto.asablo.jp (18)

  • 行数の数え方: Days on the Moon

    行数を数えているのですが、コメント欄他のstr.split(/\n/).lengthはかっこいいけどoverkill 404 Blog Not Found:javascript - String.prototype.tr() released 当でしょうか? 実際に試してみましょう。変数 s が対象文字列を指しているものとします。 // charAt var lines = 1; for (var i = 0, n = s.length; i < n; i++) if (s.charAt(i) == "\n") lines++; // Array var lines = 1; var chars = s.split(""); for (var i = 0, n = chars.length; i < n; i++) if (chars[i] == "\n") lines++; // sp

  • SICP 読書会 #1: Days on the Moon

    書くのが遅くなりましたが、先日開かれた snow-bell さん主催の SICP 勉強会 (計算機プログラムの構造と解釈の読書及び演習) に参加しました。SICP 勉強会は午後からだったのですが、同じ会場で午前中に Gauche 勉強会 (私は不参加) も開かれており、チャットログも合同となっています。他の参加者の記事はSICP勉強会のまとめと異業種交流会 - snow-bellの日記からどうぞ。 組み合わせと合成手続き Scheme の式 (expression) には組み合わせ (combination) と合成手続き (compound procedure) がある。式を評価したとき、組み合わせならば部分式 (リストの各項) が再帰的に評価されるが、合成手続きでは部分式が組合せとして評価されるとは限らない。 たとえば、手続き定義 (関数定義) (define (square x) (

  • Narcissus の正規表現: Days on the Moon

    「前のエントリで書き忘れてた - 最速チュパカブラ研究会」にて、Narcissus で使われている正規表現が参考になるという話が出ています。 文字列リテラル /^"(?:\\.|[^"])*"|^'(?:[^']|\\.)*'/ 正規表現リテラル /^\/((?:\\.|[^\/])+)\/([gimy]*)/ コメント /^\/(?:\*(?:.|\n)*?\*\/|\/.*)/ 一流の人が書いたものを使いましょうというのに異を唱えるつもりはありませんが、そのままコピー & ペーストしていては意味がありません。ここはやはり一文字一文字心をこめて写経しましょう……ではなく、どうしてその書き方でうまくいくのかをきちんと考えた上で使いましょう。 文字列リテラルにマッチする正規表現 上記の文字列リテラルを表す正規表現から、一重引用符でくくられた文字列にマッチする部分だけを抜き出すと '(?:[^

  • 本気でやるなら黙読は避けて朗読すべき: Days on the Moon

    読書百遍義自ら見る」という言葉があります。難解な書物であっても 100 回も読めば自然と意味がわかるようになるという、熟読の大切さを説いた句です。しかし、これは当のことなのでしょうか? 2000 年もたてば社会も常識もまったく変わってきます。昔の人の言ったことが今も正しいとは限りません。 疑問があれば解明したくなるのが人の性というもの。実際に「読書百遍義自ら見る」は正しいか、確かめて紀要にまとめてくださった方がいます。それによると、女子大生にデカルトの「方法序説」を 30 回読んでもらったところ、ほとんどが内容を理解するにいたったとのこと。この言葉の正しさが見事に証明されたのです。 ただし、一点注意することがあり、それは黙読ではなく朗読するということ。人間は活字を使いだしたのはたかだかこの5千年程度のことであるが、音声を使った情報のやりとりは動物の時代から行ってきたことであるという由緒

    IMAKADO
    IMAKADO 2008/05/24
    間違いなし
  • JavaScriptでXPCOMを作る: Days on the Moon

    FirefoxのUIはXULとJavaScriptで構成されていますが、JavaScriptの組み込みオブジェクトだけではファイル操作やウィンドウ操作などができません。そこで登場するのがXPCOM、これを用いることでOSに絡んだ操作やRDFの操作などが行えるようになります。 Firefoxに付随するXPCOMコンポーネントの多くはC++でかかれ、プラットフォーム別にコンパイル作業などが必要なのですが、XPCOMはJavaScriptを用いて作ることもでき、これならOSにあわせてコンパイルする必要はありません。そこでここでは実際にJavaScriptでXPCOMを作ってみることにします。 今回作成するXPCOMコンポーネント(nntPerson)は人物をあらわすもので、年齢を示すageプロパティと年齢を言うsayメソッドを持つものとします。また、以下ではWindowsで作成することを前提とし

  • WEB+DB PRESS 連載: Days on the Moon

    現在発売中の WEB+DB PRESS Vol. 44 より、「JavaScript + ブラウザ探検」という連載を始めることになりました。初回は「JavaScript + ブラウザ温故知新」として、DOM の基概念や JavaScript を扱えるブラウザの歴史などをまとめています。次回以降は DOM や HTML 5 といった、ブラウザで利用できる API を中心に話を進めていこうと思っています。 というわけでタイトルに「JavaScript」と入ってる割に、純粋な JavaScript の話はあまりなさそうですが、ブラウザ上で何かを実現するためのヒントとなれれば幸いと思っていますので、よろしくお願いします。

  • 第 11 回 FLOSS 桜山勉強会発表資料: Days on the Moon

    先日名古屋で開かれた FLOSS 桜山の第 11 回勉強会で、JavaScript 1.7 で導入されたジェネレータに関する話をしてきました。発表資料などは以下の通りです。 スライド「JavaScript のジェネレータ」 Haskell のリストを模倣する JavaScript ソース 上記の JavaScript ソースをその場で実行できるようにしたもの (Firefox 3 Beta など、JavaScript 1.8 に対応した環境が必要) 補足 (質疑応答で出た内容も含む) ジェネレータ、配列内包、分割代入は JavaScript 1.7 から、関数の省略表記、ジェネレータ内包、正規表現の先頭固定 (sticky) オプションは JavaScript 1.8 からの対応です。Firefox 2 は JavaScript 1.7 に、Firefox 3 は JavaScript 1

  • Roppongi.JS #1: Days on the Moon

    さる 3 月 15 日に開かれた Roppongi.JS の jQuery コードリーディングにオンラインで一部参加しました。途中参加に途中退室、一部こちらの都合で音声なしでの中継視聴とあわただしかったものの、jQuery のソースコードをじっくり読むいい機会になりました。 jQuery オブジェクト 今回個人的にわかったのは jQuery オブジェクト、すなわち jQuery(...) と jQuery 関数 (または $ 関数) を呼び出したときに返ってくるオブジェクトは何なのかということ。jQuery オブジェクトは配列のようなオブジェクトであり、length プロパティと 0 ~ n (n は length - 1) までの数値的な名前のプロパティを持ちます。配列としての各要素 (数値的プロパティ) は DOM ノードオブジェクトを指しています。 jQuery オブジェクト自身はは

  • Kanasan.JS JavaScript 第 5 版読書会 #3: Days on the Moon

    Kanasan.JS の JavaScript 第 5 版読書会 #3 (当日のチャットログ、参加者のブログ記事一覧) に行ってきました。同じ会場で先立って vim 勉強会があったのですが、私は先日 Meadow に乗り換えたばかりなのでそちらのほうはパスしました。 配列のプロパティ JavaScript ではすべてのプロパティ名が文字列として扱われます。配列 a に対して a[-1.23] = true としても、a["-1.23"] = true と同じに扱われ、"-1.23" という名前のプロパティができるだけでエラーにはなりません。ただし、配列に関しては非負整数とみなされる名前のプロパティが特別扱い (length プロパティにも影響を及ぼしうる) されます。 Array#join と Array#toString 配列に対して、join メソッドを引数なしで呼び出すのと toSt

  • Firefox 1.5 の JavaScript の主な変更点: Days on the Moon

    えむもじらにて Firefox 1.5 の主な変更点が取り上げられているが、JavaScript 関係の話題がないようなので補足しておく。その後 JavaScript に関する話題も追加された。 E4X E4X (ECMAScript for XML) がサポートされた (Bug 246441) 。これにより JavaScript のデータ型として XML を扱うことができるようになる。サンプルは ECMAScript for XML - d.y.d.などを参照。 Array extras Array オブジェクトのインスタンスメソッドに indexOf 、lastIndexOf 、forEach 、map 、filter 、some 、every が追加された (Bug 290592) 。詳細については Core JavaScript 1.5 Reference の Array の項を参

  • JavaScript でカリー化、再び: Days on the Moon

    以前、「JavaScript で引数束縛」において関数のカリー化を試みました。しかし、そこでカリー化された関数は、そのままでは一度しか部分適用ができず、また、最初の関数呼び出しは必ず部分適用として扱われていました。 function mean3(a, b, c) { return (a + b + c) / 3; } // 「JavaScript で引数束縛」における curry 関数。 var curriedMean3 = curry(mean3); curriedMean3(1)(2, 3); // => 2 curriedMean3(1)(2)(3); // => TypeError: curriedMean3(1)(2) is not a function // そのままでは部分適用を 2 回以上行えない。 // curry(curriedMean3(1))(2)(3) なら大丈夫

  • Kanasan.JS JavaScript 第 5 版読書会 #2: Days on the Moon

    Kanasan.JS の JavaScript 第 5 版読書会 #2 へ行ってきました。今回は午前ライトニングトーク、午後読書会という二部構成。他の参加者の感想等は参加者のブログ記事一覧からどうぞ。参加人数が 50 人近くという大規模な読書会を企画し、無事成功に導いてくださった Kanasan さんはじめスタッフの方々、そして参加者の皆さん、当にありがとうございました。 ライトニングトーク Lightning Talk 一覧および Lightning Talk 発表資料一覧から各 LT に関する情報が見られます。 Mozilla Developer Center 翻訳事始 私も LT に参加したのですが、JavaScript に関することなら何でも OK とあるのを見落としていてほとんど関係ない話 (一応翻訳作業の実演は Core JavaScript 1.5 リファレンスの arug

  • プリミティブ値でもプロトタイプ的継承: Days on the Moon

    書き上げた後に元記事の続きが出ているのに気づいたが、方向性が違うようなのでそのまま掲載。 404 Blog Not Found:javascript - プロトタイプ的継承 (元記事: Prototypal Inheritance) より。継承という言葉は意味が広いので、この操作に対してはチャイルドの作成といったほうが個人的にはわかりやすい。 さて、元記事で紹介されているコードではプリミティブ値からのチャイルドの作成 (継承) ができなかった。これはなぜかといえば、オブジェクト作成の際、プリミティブ値をプロトタイプ ([[Prototype]] 内部プロパティ、__proto__ プロパティ) に設定することはできないからである。 そこで、プリミティブ値が渡された場合は、それをラッパオブジェクトに変換することにする。といっても場合分けの必要はない。Object 関数を使えば、プリミティブ値

    IMAKADO
    IMAKADO 2008/01/28
    プリミティブにも対応 __proto__ 解説有り
  • Kanasan.JS レポート

    関西での JavaScript 勉強会、Kanasan.JS に行ってきた。内容は Prototype.js のコードリーディング (バージョン 1.5.1.1 を使用)。「家に帰ってレポートを書き、主催者のブログにトラックバックを送るまでが勉強会です」と念を押されたので、まもなく Kanasan さんの記事経由で参加者各々の様子をうかがえるようになると思うけど、以下あとから思ったことも加えて私の場合をつらつらと。 JavaScript 概説 & コードリーディング プロトタイプ やはり皆さん一番引っかかるのはここみたい。おそらく、プロトタイプと名のつくものが 2 つあるのが混乱の原因だと思う。 prototype プロパティ 関数 (Function オブジェクト) のみが持つ。その関数をコンストラクタとして使ったときに用いられる。 [[Prototype]] 内部プロパティ すべてのオ

    IMAKADO
    IMAKADO 2007/12/13
    5..times(func)、5 .times(func)などなら大丈夫。
  • Safari でのクラッシュを修正: Days on the Moon

    Safari でこのブログを見るとクラッシュすることがあった問題ですが、私の書いたスクリプトに原因がありました。 var Klass = function () { if (this.constructor != arguments.callee) return new arguments.callee(); /* Initialize object... */ }; これは「クラスの機能と関数の機能を併用」を基にしたもので、Klass() のように関数として呼び出されたときも、new Klass() と呼び出されたときと同じく Klass オブジェクトを返すための処理なのですが、これが期待通り働くためには Klass.prototype.constructor == Klass が成り立っていないといけません。しかし、Safari には関数式により作られた関数オブジェクト f に関して、

    IMAKADO
    IMAKADO 2007/10/30
    safariは関数式により作られた関数オブジェクト f に関して、f.prototype.constructor が設定されない
  • JavaScript: Days on the Moon

    この記事はTypeScript Advent Calendar 2022の3日目の分です。 「addEventListenerでリッスンしているイベントをPromise化する」という記事で、イベントをPromiseで受け取る関数が紹介されています。Node.jsのeventsモジュールのevents.onceメソッドと同じ機能を実現するものですね。Webブラウザ組み込みのDOMでも同じ機能を提供しようという提案もなされています。 最初の記事では余談として今回紹介したeventPromisifyはTypeScriptで書こうとすると型の定義が難しいなと思いましたと書かれています。例えばeventPromisify(document, 'click')と呼び出したら返り値の型がPromise<MouseEvent>になってほしいのですが、そのような型定義を記述できるでしょうか? (以下、Typ

    IMAKADO
    IMAKADO 2007/10/30
    構文解析
  • JavaScript の new 演算子の意味: Days on the Moon

    JavaScript における new 演算子の動作は大まかにいって以下のとおりである。(new F() とした場合。) 新しいオブジェクトを作る。 1 で作ったオブジェクトの [[Prototype]] 内部プロパティ (__proto__ プロパティ) に F.prototype の値を設定する。 F.prototype の値がオブジェクトでないのなら代わりに Object.prototype の値を設定する。 F を呼び出す。このとき this の値は 1 で作ったオブジェクトとし、引数には new 演算子とともに使われた引数をそのまま用いる。 3 の返り値がオブジェクトならそれを返す。そうでなければ 1 で作ったオブジェクトを返す。 ここで「オブジェクトである」というのはプリミティブ値 (文字列、数値、真偽値、undefined 、null) ではないということだ。new Stri

  • Safari の JavaScript の不備 Days on the Moon

    ぱっと見はいいんだけど細かいところでちょこちょこ穴があるような気がする Safari (というより Apple WebKit) ですが、どのような穴がいつふさがれてきたのかまとめてみました。最初は JavaScript 関係だけ調べるつもりだったのですが Safari 2.0.3 で setSelectionRange がサポートされたというのを聞いたのでそっちのほうも少し。ただし、手元に Mac 環境がないので実際に Safari で試したわけではありません。すべてソースと変更履歴から推測しただけなのでそのつもりで。 下の表で「WebKit」というのはその機能が実装された WebKit の (正式公開) バージョン、「Safari」というのはそのときの Safari のバージョンをあらわしています。「-」はその機能が現時点 (Safari 2.0.3) でも未実装ということです。「-」は

  • 1