タグ

2008年1月12日のブックマーク (24件)

  • 最速インターフェース研究会 :: Function.prototypeを拡張して遅延実行を実現する

    JavaScriptにおいて関数というのはFunctionオブジェクトで、他のビルトインオブジェクトと同様に、組み込みのメソッドがある。これがapplyとcallしかないのだけれど、こんな感じに使う。 func.apply(thisObj,arguments) func.call(thisObj,arg1,arg2,arg3) thisObjには、その関数内で「this」として使うオブジェクトを指定する。applyの第二引数はargumentsオブジェクトを指定する。配列か、現在実行中の関数のargumentsオブジェクトを丸ごと別の関数に引き渡せる。つまり引数の長さが良くわかってなくても使える。 callは代わりに func.apply(thisObj,[arg1,arg2,arg3]) と書けるので、実はいらないんじゃないかと思う。 これらは多分、ふつうにJavaScriptを書く上で

  • Douglas Crockford's Javascript

    JavaScript Actual JavaScript Engine Performance JavaScript: The Wrrrld's Most Misunderstood Programming Language The World's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language A Survey of the JavaScript Programming Language Code Conventions for the JavaScript Programming Language The Little JavaScripter Private Members in JavaScript Prototypal Inherita

    agw
    agw 2008/01/12
    Douglas Croskford's Javascript
  • 最速インターフェース研究会 :: 実践JavaScriptリファクタリング

    同じ事をやるにも、いろんな書き方があるわけでいかにして短くてわかりやすいコードを書くかというノウハウを紹介します。 例として"abcde"を80回繰り返した文字列を作るとして実際に自分のコーディングスタイルがどんな風に変化していったのか、という。 短くなるのは確かなんだけどわかりやすいかというと、人によるかもしれない。 グローバル関数を定義2年前なら、多分こういう具合だった。 //ふつうに関数として定義する function x(str,num){ var tmp = ""; for(var i=0;i<num;i++){ tmp += str; } return tmp; } x("abcde",80) Stringのメソッドとして定義1年前だとこんな感じ。 //Stringのメソッドとして定義する String.prototype.x = function(num){ var tmp

    agw
    agw 2008/01/12
    {Programming]
  • 継続渡しによる停止・再開可能な反復処理 - JavaScriptライブラリでお馴染みの$関数を関数スタイルで実装してみる

    ここ最近の Scheme プログラミングで得た感覚を踏まえ、各種 JavaScript ライブラリでお馴染みの $ 関数 (ID による要素検索) を、ごく簡易にですが、関数スタイルで実装してみました。 まずは実装を見ていただく前に、このような例を考えてみてください。 $("id").do_something(); ここで、"id" 要素が確実に見つかるかどうかが保証されていない (do_something が失敗するかもしれない) とします。すると、 var o = $("id"); if (o) { o.do_something(); } のように、いちいちテストをしなければいけませんよね。 これが、関数スタイルでは $("id", do_something); と書くだけで済みます。つまり、$ 関数自身が成否のチェックを行い、成功していればコールバック関数にオブジェクトを渡すように設

    継続渡しによる停止・再開可能な反復処理 - JavaScriptライブラリでお馴染みの$関数を関数スタイルで実装してみる
  • 多元配列を一元配列に変換 (JavaScript): Days on the Moon

    なんだかよくわからないことになったのでメモしておく。きっかけはある要素ノード中のすべてのノード (テキストノードも含む) を集めようと思ったこと。childNodes では子要素の内容が取得できないし、getElementsByTagName("*") ではテキストノードが取得できない。今までの自分だったらこうしていただろう。 function getDescendants(node, previousNodes) { if (!previousNodes) previousNodes = []; var children = node.childNodes; for (var i = 0, length = children.length; i < length; i++) { var child = children[i]; previousNodes.push(child); if

  • 関数的っポイ!? JavaScript: Days on the Moon

    関数型プログラミング言語を触ったことがないのでこれが関数的かどうかは知らないが、いちいち function とか return とか書くのは面倒くさいと思ったのと「関数の変形」や beyond.js 、boost::bind に影響を受けて、関数の変形を行うライブラリを作った。 まずは引数の束縛、及び入れ替え。「関数の変形」及び boost::bind にならって後々入力される引数を _n であらわすことにする。 function concat(a, b) { return "" + a + b; } concat.bind(_1, "a")("b"); // "ba" concat.bind("a", _1)("b"); // "ab" concat.bind(_2, _1)("a", "b"); // "ba" concat.bind(_1, _1)("a"); // "aa" 次に関

  • IT戦記 - arguments を直接的に配列化

    Own Properties は同じだからプロトタイプだけ入れ替える (Firefox Only) id:cheesepie:20070129:1170012588 を見ていて思いつきました。 arguments.__proto__ = Array.prototype; ちなみにクロスブラウザなやり方 3 つ // 1 for(var i = 0, args = []; i < arguments.length; i ++) args[i] = arguments[i]; // 2 arguments = Array.apply(null, arguments); // 注意: コメント欄参照 // 3 for(var n in Array.prototype) arguments[n] = Array.prototype[n]; 別に配列化しなくても配列の関数は使えます 配列のプロトタイ

    IT戦記 - arguments を直接的に配列化
  • Scheme 的多値の実装 - (new Hatena).blog()

    擬似的なものですが、Scheme の多値の受け渡しの仕組みを実装してみました。このようなものです: call_with_values( function(){ values(1, 2, 3) }, function(a, b, c){ // a == 1, b == 2, c == 3 } );call_with_values の第一引数は多値を返す関数で、第二引数はそれを受け取る関数です。 多値と言っても JavaScript ですのでただの配列なんですが、それを関数に渡す際にばらしてやることで、擬似的に多値を実現することが出来るわけです。 実装はこんな感じです: function values() { return list_tail(arguments, 0); // Or, return Array.prototype.slice.call(arguments); } functi

    Scheme 的多値の実装 - (new Hatena).blog()
  • https://labs.cybozu.co.jp/blog/kazuho/archives/2006/12/oo-settimeout.php

  • Leopard解体新書--第1回:RubyCocoaでWebページ表示 - builder by ZDNet Japan

    Leopard登場!その真価は如何に? いよいよ待ちに待ったLeopardことMac OS X 10.5が発売される。Appleによれば、300を超える新機能を引っさげての登場となる。 インストールした直後は、新しくなったFinderやDockが目を引くだろう。Time Machineも強烈なインパクトがある。だが最初の驚きが過ぎると、「これだけ?」と感じる方もいるかもしれない。 しかし、決してそんなことはない。もともとOSのバージョンアップとは、内部のライブラリやフレームワークを整備して、多くのアプリケーションが活躍する土台を整える事にある。それらが充分に活用されるとき、その真価が発揮されるだろう。 とは言っても、せっかく手に入れたLeopardだ。そんな悠長な事は言わず、今すぐ色々な機能を試してみたいのが人情。そこで、この連載ではLeopardの新機能を体験し、その仕組みを掘り下げてみ

    Leopard解体新書--第1回:RubyCocoaでWebページ表示 - builder by ZDNet Japan
  • 新Emacsの強力な置換機能を使いこなす - builder by ZDNet Japan

    クラウドネイティブの実現 モダンインフラの構築・運用の課題解決へ コンテナの可能性を広げるVMware Tanzu アプリケーションモダナイズ 求められている背景にあるビジネスの今 そして、成功の鍵を握るDevOpsの真の意味 単純なインフラ製品の販売ではない DX、コンテナプラットフォームの実証など 自社の取り組みで得られた知見を顧客に提案 オラクルスペシャリストが語る! 多くの企業で利用されるオラクルDBの課題 アセスメントの重要性とコスト最適化 高まるゼロトラストの気運 妥協のない安全のために適材適所で組合せ トップ4社によるゼロトラストセキュリティ RPAによる自動化を年30万で実現 小さな投資が目に見える大きな効果に! デジタル化によるわかりやすい業務効率向上 さあ、その想いをカタチにしよう。 Google Cloud が企業の未来に向けた生産性 向上とコラボレーション実現のヒン

    新Emacsの強力な置換機能を使いこなす - builder by ZDNet Japan
  • perl - myとourとscopeと : 404 Blog Not Found

    2008年01月10日10:15 カテゴリLightweight Languages perl - myとourとscopeと うーん、微妙に違います。 local と my - IT戦記 our 名前をソース上のスコープに限定. local 値をスタック上のスコープに限定. my 名前と値の両方をソース上のスコープに限定 なら、理解しやすいと思います>< 以下のコードを見てみましょう。何と表示されるでしょうか。 { package Foo; our $bar = 'baz'; } our $bar = 'drink'; warn $bar; warn $Foo::bar; 「ソースに限定する」あるいは「ファイルに限定する」のだとしたら、この挙動はありえないはずです。 ここで、Perlのスコープに関するルールを覚えておきましょう。すっごく簡単です。 {}は、問答無用でスコープを作る = b

    perl - myとourとscopeと : 404 Blog Not Found
  • my と local のサンプル - IT戦記

    local と my - IT戦記の続き local と my の違いが分かるサンプルを書いてみた our $foo = 0; do { # ... (1) local $foo = 1; do { print "$foo\n" }; # 1 sub { print "$foo\n" } # 0 }->(); do { # ... (2) my $foo = 1; do { print "$foo\n" }; # 1 sub { print "$foo\n" } # 1 }->(); ちなみに do {...} は return の扱いを除いて (sub {...})->() と等価だと考えていいです。まあ、関数をその場で呼び出すようなものですね。単なる {...} との違いは、 {...} が式ではなくて文(ブロック)であって、 do {...} は式(do 関数の呼出し)というところで

    my と local のサンプル - IT戦記
  • local と my - IT戦記

    すっきりした>< - 宇宙行きたい このエントリの our 名前をスコープに限定. local 値をスコープに限定. my 名前と値の両方をスコープに限定 は、ものすごく分かりやすいし正しいと思うんですけど、たぶん昔の僕だったら理解出来なかったかもしれません>< our 名前をソース上のスコープに限定. local 値をスタック上のスコープに限定. my 名前と値の両方をソース上のスコープに限定 なら、理解しやすいと思います>< 今でも local 宣言のあるスコープ内で関数呼出しがあると混乱するの僕なのです>< 追記 弾さんが反応してるので、追記 404 Blog Not Found:perl - myとourとscopeと えっと 僕の「ソース上のスコープ」という言葉が良くなかったです><ごめんなさい そういう意味で言ったわけではなくて、「ソース上の(なんらかの記述の位置で決まる範囲の

    local と my - IT戦記
  • [Perl] my と local と our の違いについて - 竹迫の近況報告

    404 Blog Not Found:perl - myとourとscopeと みんな難しく考えすぎです。 (例外については後で考えることにして)とりあえず以下の基をおさえておけば混乱することはないと思います。 ■ our 宣言について our はグローバル変数をスマートに使用するための宣言です。our は use vars と等価と考えてください。 our $var; は use vars qw($var); と等価。 our $var = 1; は use vars qw($var); $var = 1; と同じ動きをするもの、と覚えておけばOKです。それ以上の違いは基的にないと考えて構いません。 ひとつ実用上の違いがあるとすれば、our は Perl 5.6 以降の built-in なのに対して、use vars は vars.pmPerlスクリプトで実装されています。し

    [Perl] my と local と our の違いについて - 竹迫の近況報告
  • CSSで罫線を角丸で表示する(1):FirefoxとSafariのCSS徹底検証 - builder by ZDNet Japan

    前回、前々回でブラウザと標準規格の動向を見てきたが、今回からは、Firefox 3やSafari 3が新しく対応したHTML/XHTMLCSSを紹介していきたい。 最初に紹介するのは、Safari 3が新しく対応した、罫線の角を丸く表示するスタイルシートだ。角丸のデザインは、Webページではよく利用されているが、現状では画像を使って表現するしかなく、HTML/XHTMLソースも複雑になるといった問題がある。スタイルシートだけで設定する機能は制作者の多くが待望している機能の1つと言えるだろう。現在のところ、Safari 3とFirefoxが対応しているが、OperaやInternet Explorerは対応していない。 -webkit-border-radiusプロパティ Safari 3が新しく対応した-webkit-border-radiusプロパティでは、半径を指定することで罫線の角

    CSSで罫線を角丸で表示する(1):FirefoxとSafariのCSS徹底検証 - builder by ZDNet Japan
  • 関数とクロージャ - ファイヤープロジェクト

    Common Lispでの関数の詳細についていろいろと試してみた. 関数の基 (setf 関数名)という関数名 大域関数と局所関数 関数のパラメータ レキシカル変数と関数とクロージャ 動的スコープ 関数の基関数は基的にdefunで定義する. (defun 関数名 パラメータリスト 体) 引数に1を加えて返す関数は以下のようになる. > (defun hoge (x) (+ x 1)) HOGE > (hoge 1) 2 関数の返り値は,体の最後の式の返り値,あるいは (return-from 関数名 値) で指定する値である.以下の関数はreturn-fromにより固定値5を返す.+式やformat式は無意味である. > (defun fuga (x) (+ x 1) (return-from fuga 5) (format t "fuga~%")) FUGA > (fuga 1

  • 週記くらい - クロージャとは

    freehttp://d.hatena.ne.jp/smeghead/20071216/closure の続きというか今回はもうすこし真面目にあえて、コードレスで、自分の理解しているところのクロージャを説明してみるテストです。まず、誤解を恐れずに書いてしまうと、言語によってクロージャという機能が提供されている訳ではない。クロージャというのは、ある機能の副作用を用いたテクニックの名前である。クロージャと呼ばれているテクニックを使える言語は、以下の機能を提供しています。言い換えると、以下の機能の副作用によってクロージャというテクニックを使用できるようになります。 レキシカルスコープ(静的スコープ)関数がファーストクラスオブジェクト(第一級オブジェクト)であることレキシカルスコープオブジェクト(主に関数)が定義された時に、その場所から参照できる範囲を、オブジェクト(主に関数)の実行時にも参照でき

  • 第一級オブジェクト - Wikipedia

    第一級オブジェクト(ファーストクラスオブジェクト、first-class object)は、あるプログラミング言語において、たとえば生成、代入、演算、(引数・戻り値としての)受け渡しといったその言語における基的な操作を制限なしに使用できる対象のことである。ここで「オブジェクト」とは広く対象物・客体を意味し、必ずしもオブジェクト指向プログラミングにおけるオブジェクトを意味しない。第一級オブジェクトは「第一級データ型に属す」という。 この言葉は1960年代にクリストファー・ストレイチーによって「functions as first-class citizens」という文脈で初めて使われた。 言語によって異なるが、第一級オブジェクトは概ね次のような性質をもつ。 無名のリテラルとして表現可能である。 変数に格納可能である。 データ構造に格納可能である。 それ自体が独自に存在できる(名前とは独立し

  • クロージャのわかりにくさ - 週記くらい(BTS開発記)

  • 日本のテレビ番組をアメリカで見る - アメリカでがんばりましょう

    東京放送(TBS)、フジテレビジョン、全国朝日放送(テレビ朝日)の民放3社が、地上波番組をネット配信するトライアルサービス「トレソーラ」の、第2弾の概要が少しずつ明らかになってきた。 昨年話題になった「トレソーラ」。 民放各社が実験的にテレビ番組をネット上に流して、需要の調査や技術的な問題点を探ったことで有名だった。 その第2弾がまた始まるとのこと。 公式にコンテンツを見られるのはうれしいが、PCでしか見られないフォーマットというのがネックでまだ試したことはない。 もうすこし自由度のある配布方法を提供してもらえると、うちのように海外に住んでいる人にとってはありがたいサービスになるのではないだろうか? 現在、アメリカで日テレビ番組を見るたの一番の方法はビデオレンタルだ。 シリコンバレーあたりでも、日のビデオレンタル専門のお店が3、4件もある。どこかのテレビにビデオを繋げて直接録画したよ

    agw
    agw 2008/01/12
  • SlingCatcher 発表 - アメリカでがんばりましょう

    年明け早々にラスベガスで開かれる CES (Consumer Electronics Show)が今年もはじまった。 いろんな新製品の発表がされたが、オレが気になったのは SlingCatcher というデバイス。 日にも進出した SlingMedia 社の製品だ。 SlingMedia 社の主力製品は SlingBox という自宅のテレビの映像と音声をインターネットを介して、好きな場所で見られるようにする製品。 SONYのロケフリと同じようなモノと言ったほうがわかりやすいかも。 このブログでも発売時に取りあげた。 日に SlingBox を置いておけば、アメリカからでも日テレビ番組が見られる。 もちろん逆のことも可。 そんなシステムを作ってみたいなぁなんて思っているのだけど、ネックだったのが SlingBox の映像を見るにはPCか3Gケータイが必要だったこと。 テレビの映像はテ

    agw
    agw 2008/01/12
  • 噂は信じるな!Windows Vista10の誤解

    印刷する メールで送る テキスト HTML 電子書籍 PDF ダウンロード テキスト 電子書籍 PDF クリップした記事をMyページから読むことができます 個人向け販売が公式に開始されたことで、Windows Vistaが皆の話題に上っている。しかし、残念なことにWindowsのファンからも「Microsoft以外であれば何でもいい」派の人々からも、話半分にしか聞けないようなことを多く耳にしている。多くの場合、センセーショナルにとり上げられているのは、語られている情報の不正確な部分である。それでは、大げさに語られている不正確な情報に一切惑わされずに、新OSがあなたのためにできることとできないことを見極めるためにはどうすればよいのだろうか? 稿では、Vistaに関してわたしが耳にした誇張や誤解、とんでもない間違いをとり上げている。 誤解#1:Vistaを使うには、新たにハイエンドPCを購入

    噂は信じるな!Windows Vista10の誤解
  • Perl/Emacs版IntelliSense(への期待が持たれる)、 perly-sense - Kentaro Kuribayashi's blog

    Perl(+Emacs)版IntelliSense、perly-senseなんてのがあります。デヴェロッパーリリースの時にちょっと試してから後しばらくしてから再度見てみたら、かなりと充実してきていて、ちゃんと使っていきたいとか思っているところ。まだIntelliSenseには遠いのだろうけど、まぁそれはおいても、普通に便利なんじゃないかなぁと思ったりしてます。 インストールは普通に。 cpan> install Devel::PerlySenseんでもって、あとはEmacs installationにある通り設定を書けばオケ。あと細かいことはいろいろあるけど、詳細はPODで。 現在のところ、実装されている機能は以下の通り。今後はメソッドの補完とかできるようになるのかなーとか期待してます。 パッケージの概要(継承関係、API一覧、useしてるモジュール、おとなりモジュール等)。 ポイント位置

    Perl/Emacs版IntelliSense(への期待が持たれる)、 perly-sense - Kentaro Kuribayashi's blog
    agw
    agw 2008/01/12