稲村ヶ崎に行ってきた。

天気が良かったので家でパソコンやっていてももったいないので、久しぶりに稲村ヶ崎に行ってきた。といっても、家を出たのは3時近く。途中、北鎌倉あたりの紅葉を電車の中からチェックしたが、まだ紅葉はほとんどしていない。鎌倉駅で江ノ電に乗り換え、稲…

JavaScriptの大きな数と小さな数の仕組みを理解する 〜 IEEE754入門 〜

JavaScriptでの数値はIEEE754で規定されている倍精度型doubleです。符号部が1ビット、仮数部が52ビット、指数部が11ビットの64ビットで表現される浮動小数です。この辺りは、計算機の初歩の初歩で、当たり前すぎて普段は気にすることはないと思いますが、そ…

Operaだけ何故か極端に高速な正規表現パターン

とても単純な正規表現だけれど、照合するのに非常に時間のかかるパターンがあります。下記はその一例。 var s = "abcdefghijklmnopqrstuvwxyz".match(/a(.+)+c/); 照合することは一目瞭然です。しかし、+ は最長一致型の照合なので2重のバックトラックが発…

電車の中で聞いたちょっとイイ話

僕は通勤や帰宅電車の中では、椅子に座れてパソコンを広げられる程度に余裕があれば、だいたいにおいて音楽プレイヤーを聞きながらキーボードを叩いている。この文章もこうして電車の中で書いたものである。先日、うっかりプレイヤーのバッテリーを充電する…

ブログを読むな、マニュアルを読め。

プログラムを書くとき、分からない関数を調べるのに、なんでもかんでもブラウザで検索する人をときどき見かける。確かにそれによって目的のものを探すことはできるだろう。ブログには実体験に基づくヒントとなる情報が多いのも確かだ。でもね、そんな検索す…

JavaScriptで循環配列を文字列化したらどうなるか?

JavaScriptのオブジェクトは文字列化しても単に "[object Object]"と表示されるだけなのに、配列は文字列化すると "1,2,3,4" のようになる。便利なようであまり便利でもない。 var ary = [1,[2,[3,4]],5] var s = ary.toString(); // s は "1,2,3,4,5" 各要…

JavaScriptのsetInterval関数の意味を正確に理解するための1つの説明

ECMAScriptの言語仕様と組込関数の動作仕様は非常にきめ細かく規定されていますが、それに含まれていないJavaScriptの関数の仕様はどうもはっきりしないように思えます。そのためか、それを利用するコードも正確なものではないものが見受けられます。その1…

JavaScriptのToNumberとparseInt/parseFloatの仕様と実装の違い

ECMAScriptの規格書は非常に細部に至るまで細かく仕様が規定されていますが、100%全て正しく実装している処理系は僕の知る限りありません。過去に広まってしまったソフトとの後方互換性を維持するため、あえて仕様にあわせていないのだろうというものも…

レインボーブリッジを渡ってお台場へ

ストレス解消には歩くに限る。ただひとり黙々と目的もなく歩く。歩くついでに写真を撮る。歩きながら妄想に耽る。自分は何がしたいのか。とりとめもないことを考える。今日は天気が良かった。今年の2月に来たコースを同じ道のりで再び歩いてみた。ガンダム…

それにしても驚きました。

この記事がこんなにブックマークを集めるなんて。自分でもよく書けたと、多少は自慢したいところはあったけれど、それまで1日あたり40〜50程度のページビューしかないブログで、ブックマークも全部で6つしかなかったので、せいぜい10個くらいついた…

FAQ形式によるJavaScriptの本質がわかる超入門

はじめに JavaScriptは簡単な言語のようでいて、実は奥が深く、初心者にとってなかなかその本質がわかりにくい言語です。ここでは、JavaScriptの言語的エッセンスを理解できるようなものをFAQ形式で書いてみました。ご意見や誤り等を指摘してもらえたら嬉し…

はてな市民になった

気づいたらちょうど30日分書いたので、はてな市民になったようだ。4月から始めて6ヵ月かかってようやく市民になれた。ページビューは4890。まぁそんなもんだろう。誰にも話さず、密かに書いているので、たまたま検索で引っかかって訪れる人がほとんど。…

赤い羽根共同募金

今日は10月1日。そんなこと気にも留めず駅を歩いていたら、「赤い羽根の共同募金にご協力お願いしま〜す」と女子高生4,5人が声をそろえて叫んでいた。毎年思うが、その光景はとてもイヤなんです。募金すること自体は構わないが、どうして、あんな大声で…

たかがスペル、されどスペル

他人のプログラムを読むとき、大文字小文字の使い方やインデントの仕方などが自分のスタイルと異なる場合には読みにくいと感じるが、それもでも、一貫した規則によって書かれてればそれほど抵抗感はない。しかし、スペルミスが多いコードを見ると、それを書…

披露山公園−逗子海岸−長者ヶ崎、そして立石を歩いた

すっかり秋らしい天気である。世の中はシルバーウィークとかいって5連休であるが、月・火・水と出勤しなければならないため、出かけるなら今日しかないと思い立ち、久しぶりにカメラをもって海を見にいった。特に目的はない。延々と一人ただ歩きながらとり…

忙しい!

忙しい、いそがしい、めっちゃ忙しい。ブログなんて書いている暇なんかない。っな筈なのに、気分が乗らない。急遽、仕事でFlashでアプリケーションを書くことになった。しかも短期決戦。JavaやJavaScriptでアプリケーションはたくさん書きましたよ。ECMAScri…

JavaScriptで ""+x を文字列変換に使うのは気持ち悪い

JavaScriptの本やブログなどで非常に良く見かけるのだが、数値などの文字列でないものを文字列に変換する方法として var s = "" + x; のように空文字との連結によって行っているが、私としてはちょっと気持ち悪さを感じる。もちろん、間違いではない。確かに…

クロアチアの写真

クロアチアに行ってきたときの話を書こうと思っていますが、遅々として進まないので、とりあえず、写真の一部を公開します。はてなフォトライフ Panoramio

JavaScriptでおもちゃのLispを作ろう(5)〜組込み関数編〜

前回までに組込み関数を一切定義していないピュアなLisp処理系ができました。今回は必要最小限の組込み関数を実装します。 /* * 関数に名前をつけて登録する。引数lazyがtrueのときは、関数の引数を評価しない。 * スペシャルフォームのときtrueをセットする…

JavaScriptでおもちゃのLispを作ろう(4) 〜評価器編〜

いよいよ評価器の実装を行います。Lispの評価器はeval()関数を実装することです。eval()関数はLisp自身で実装することができます。Lisp自身によるeval関数の実装はLispの古典であるLisp1.5マニュアルによると以下のようになります。 apply [fn;x;a] = [atom[…

Yコンビネータのお話

過去にもいろいろなブログで何度も取り上げられて話題になりましたが、自分なりの理解で書いてみました。Yコンビネータはシンプルでありながら、不思議で奥が深いので興味をそそる要素があるのでしょう。JavaScriptも広い意味では関数型言語であり、λ計算と…

クロアチア

実は、8/8〜8/19まで夏休みをとってクロアチアに行って来ました。首都のザグレブからアドリア海のザダール、トロギール、スプリット、ドブロブニク、さらにボスニア・ヘルツェゴビナのモスタルをレンタカー(モスタルのみバスツアー)で回ってきました。日本…

JavaScriptでおもちゃのLispを作ろう(3) 〜リーダ/パーサテスト編〜

これまでに実装したのは、文字列からS式を読み込むリーダとその逆のプリンタです。今回はそれらの機能が期待した通りの動作をするかテストします。JavaScript用の自動単体テストフレームワークJsUnitがありますが、ここは趣味のプログラミングなので、オレ流…

JavaScriptでおもちゃのLispを作ろう(2)〜プリンタ編〜

今日は前回に引き続き、リーダ関数の残りとリーダ関数と反対のプリンタ関数を実装します。S式を読み込むリーダ関数のサブ関数であるreadString()とreadList()関数は次のようになります。Lispの文字列はエスケープもいろいろできるのですが、複雑なことは後…

JavaScriptでおもちゃのLispを作ろう(1)〜リーダ編〜

こんなものは数え切れないくらい既に沢山あると思いますが、JavaScriptでおもちゃのLispを作り始めたので日記として書いておきます。普段は会社では仕事でC++を使ってプログラムを書いていますが、趣味のプログラミングというのは、やっぱりおもちゃのような…

都会で天の川を見る方法

随分前のことになりますが、スラッシュドットで話題として取り上げられた、「世界の5人に1人は夜、天の川が見られない」に関連してちょっと一言。都会では光害が進み、夜空が明るくなり、天の川が見えなくなっているとのことですが、コメントを読んでいると…

eラーニングがいろいろひどい、について確認してみた

sumiiの日記より: http://weblearningplaza.jst.go.jp/ の「情報通信」→「データ構造とアルゴリズムコース」がいろいろとひどい。 だそうだが、他はどうなのか見てみた。 「情報通信」→「プログラミング言語コース」→「6.データ抽象化とオブジェクト指向」…

JavaScriptの基本型とオブジェクト型のパフォーマンスの違い

JavaScriptの数値や文字列などの基本型はオブジェクトではありませんが、あたかも対応するクラスのインスタンスオブジェクトであるかのようにメソッドをコールすることができます。例えば、下記のプログラムではv1とv2はどちらも"123.00"という同じ文字列に…

Google Chrome OS考

Google Chrome OSが発表され、ニュースやブログで大きく取り上げられて話題になっている。まだ、詳細な内容は公表されていないが、どんなものが登場するのだろうかと、いろいろ妄想すると楽しくなる。従来からいくつも登場し、そして消えていったWebOSとの基…

まつもとゆきひろ コードの世界

Rubyの生みの親であるmatz氏が書いた本である。某缶コーヒーのコマーシャルではないが、本人が直々にRubyについて語るのを読めるのはこの上ない「贅沢」である。それだけに、ソースコードのインデントの崩れや印字ミス、仮名漢字変換の誤り、すぐ直前に書か…