あどけない話

Internet technologies

プログラミング

私とテストと自動化と

何度か講演でこの話をしたのだが、気が向いたのでエッセンスを書き下しておこうと思う。 テスト駆動という言葉が流行る前にプログラマとなった私は、当初どのようにテストを書いてよいのか分からなかった。そんなとき、(当時はオーム社で現在はラムダノート…

詳説 正規表現 初版

先週、Perl の正規表現と Posix の正規表現の違いについて説明する機会があった。端的に言えば、非決定性有限オートマトン(NFA)と決定性有限オートマトン(DFA)の違いだ。この違いを理解するには、「詳説 正規表現」の「エンジン始動」の章を読むとよい。正規…

正規表現を超える

まずは、Audrey さんが言った Haskell の殺し文句を思い出して頂きたい。 正規表現ベースのパーサはメンテナンスしにくいのに気づいた? Parsec を使って 15分で Perl6 の完全なパーサを書く方法を勉強しましょう。 15分というのは誇張が入っていると思うが…

ネットワーク・プロトコルに依存しないプログラミング

あきみちが、「Mac OS Xネットワークプログラミング」を書いて、はてブでも注目されているようです。今どき古いプログラミング・スタイルを推奨しちゃダメだよー。昨日、ブログにコメントを書き込もうと思いましたが、方法が分りませんでした。そこで、こち…

動的型付言語とデザインパターン

「具体例で説明するデザインパターン」は、よく使われている JavaScript のデザインパターンについて分りやすく説明しています。そもそも、僕がこのブログを始めた理由は、JavaScript のデザインパターンを議論したいからでした。(今では、全然違う内容にな…

リテラル

文字列リテラルと正規表現リテラルの区別がついてない人がいましたので、ちょっとだけ説明します。(僕も昔はそうでした。^^;)そもそも「リテラル」とは、あるデータ型をプログラムの中に直接書き下せる形式のことです。別の言葉で言えば、そのデータを作るた…

プログラマの壁

プログラマに向いている人と向いていない人がいるそうです。Jeff Atwood さんの「どうしてプログラマに・・・プログラムが書けないのか?」: プログラムを書ける者とプログラムを書けない者の間にある大きな溝についてはよく知られているが、プログラマの職…

Emacs Lisp で FizzBuzz

Emacs Lisp の習得を目指す誰かの参考になるかもしれないので、僕なりの解答を書いておきます。 アルゴリズムの実装 繰り返しと仕事は分離したいので、まず仕事の部分を定義します。 (defun fizzbuzz (num) (cond ((= (% num 15) 0) "FizzBuzz") ((= (% num …

余り

昔、あるプログラムのソースを読んでいて、ハッシュの大きさとして 128 が使われていました。「2 の累乗を使うとは何事か!」と思い、二度とその人の書いたコードは読まなくなりました。2 の累乗で割って余りを取ると、ほとんど計算しないことは明らかですね…

ミックスイン

今日、みなとみらいのCold Stone Creameryで、アイスを食べました。メニューを見ると、トッピングが「ミックスイン」と呼ばれていました。Steve's Ice Cream Parlor の商標は、もう期限切れってことですかね。今度、「OO でいうミックスインだけど、語源は何…

偉大な習慣

「僕は、偉大なプログラマなんかじゃない。偉大な習慣を身につけたプログラマなんだ。」 --- Kent Beck 僕の信じた伝説 この一年間、あまりコードを書かずに、たくさんの本を読み、勉強ばかりしていました。そして、自分がかなり時代に取り残されたプログラ…

Emacs Lisp と総称関数

僕は Lisper ですが、「Lisp では、マクロを書けばなんでもできる」という主張には、かなり疑問を持っていました。たとえば、「Emacs Lisp で総称関数を導入することなんてできない」と思っていたのです。しかし、今日ひらめいて、試しにこんなコードを書き…

なぜ読める?

Haskell の本を買って勉強を始めました。その理由は、変数への代入は一回しか許されないのにグラディウスを作れる理由を探るためです。(変数は宣言時に初期化できるが、代入できない? あるいは、定数と言えないの?)初めて読むのに、なぜか読めるなーと思っ…

Emacs Lisp のパターン

デザイン(設計)パターンという程のことはない、Emacs Lisp のパターンを思いつくままに書きます。心は、 高階関数を書こう マクロを書こう です。 mapcar mapcar は、引数に関数をとる高階関数のよい例です。リストを取り、それぞれの値を加工して、新しいリ…

関数型プログラミングと代入

関数型プログラミングでは、よく「代入は使ってはならない」と言われます。関数型言語の一種である Emacs Lisp を生業とする僕は、この言葉に長年悩まされてきました。代入を使わないで実用的なプログラムを書くことは無理だからです。もちろん、問題の内容…

Lisp で多態性

On Lisp を理解するためのメモです。 オブジェクト指向Lisp オブジェクト指向Lispの章には以下のような記述があります。 CLOSの到来はLispがオブジェクト指向のパラダイムを取り込み始めた兆に見えるかも知れない.実際には,Lispはオブジェクト指向のパラダ…

On Lisp

以前から、Lisp でのデザインパターンとは何かについて考えていました。それに答えを与えてくれそうな 「On Lisp」 という本を読んでいます。On Lisp作者: ポールグレアム,野田開,Paul Graham出版社/メーカー: オーム社発売日: 2007/03/01メディア: 単行本購…

Rubyのローカル変数

Ruby のローカル変数の仕様が、さっぱり分らず、いろんな文献/ページや、実験をしてみてようやく分りました。注:これは、Ruby ではどう書くべきかということではなく、仕様はどうなっているのかという話です。 スコープ Ruby 書籍には、ローカル変数には以…

今日の MacPorts

来たー! 今日の sync で、GDC がインストールできるようになりました!これで、D 言語を勉強できるよ!

あなたはどれが好き?

イベントリスナーの実装の違いを吸収するために、よく以下のようなコードを書きます。 var setHandler = (function() { if (addEventListener) { return function(el, type, func) { el.addEventListener(type, func, false); }; } if (attachEvent) { retur…

Emacs と Ajax

巷では、やれ Ajax だとか、RIAだとか騒がれていますが、Ajax の非同期性は基礎がなってない、というお話です。 Emacs Emacs では、コマンドを start-process で起動したり、TCP コネクションを open-network-stream で開くと、それは非同期プロセスに見えま…

JavaScript で Singleton

Singleton は、インスタンスが1つしか作成されないようにするデザインパターンです。 Java では? Java でインスタンスを作るには new するしかありません。Singleton では、1 回のみ new を許すように実装する必要があります。そこで、コンストラクタを pri…

JavaScript でデザインパターン

JavaScript でプログラミングをするときに、オブジェクト指向の手法を使うのであれば、折角なのでデザインパターンを利用したいと思います。しかし、デザインパターンの本は、Java を対象に書かれているものが多く、単純には JavaScript へ応用できません。…

無名コンストラクタ

web 2.0 EXPO の JavaScript Labs で、リクルートの川崎さんが講演されていました。口頭では触れていませんでしたが、講演資料の中で無名コンストラクタが紹介されていました。無名コンストラクタを使うと、無名関数と同様に、グローバルの名前空間を汚さず…

オブジェクト指向再入門

C は知っているけれど、Java のオブジェクト指向に挫折した人は、今すぐオブジェクト指向再入門を読みましょう。みんな初めからこう説明してくれればよかったのにと思います。面白いと感じた人は、今すぐ「Java謎+落とし穴徹底解明」を買いましょう!Java 謎…

LogUpdater

僕はよくネットワークや電話を使ってミーティングをします。その際、記録係は適当な web サーバに議事録を随時書き込み、参加者はそのページを見ることで、議事録を共有します。僕が記録係の場合は、Emacs の tramp を使って、web サーバ上のファイルを書き…

JavaScript でデザインパターン

以下は株式会社ネットスプリングのニュースレター NSquest No. 4 に寄稿した記事です。JavaScript に対するデザインパターンの議論を始めるにあたり、同社の許可を得て、このブログに転載します。 オブジェクト指向と JavaScript もし、プログラマを3つに分…

prototype.js の Ajax

prototype.js 1.6 がリリースされましたね。今日は、Ajax クラスのお話です。 prototype.js を利用しない場合 prototype.js を利用しないで、XMLHttpRequest オブジェクトを非同期に利用する場合、典型的には以下のようなコードになります。この JavaScript …

Adobe Max Japan 2007

Mozilla Japan に招待状を頂きましたので、Adobe Max Japan 2007 に行ってきました。Tamarin の話が目的ですが、その他 3 つのセッションにも参加しました。 ActionScript 3.0 はじめの一歩 (野中文雄) ActionScript で動画を作っている人、特に絵は得意だが…

JavaScript で setter/getter

鶏肋(けいろく)。文字通りに取れば、鶏の肋骨という意味。三国志演義という「フィクション」の中で、曹操は悪役として登場します。多くの人は演義を多少なりとも知っているものですが、正史は読まないので、曹操に悪いイメージを持っていることでしょう。中…