Javascript

SunSpider JavaScript Benchmarkを移植してJSXとJavascriptの速度を比べてみた

JSXの特徴は、トップページにも書いてあるとおり「faster, safer, easier」の3つです。安全性とか簡単さについては人とか状況によって様々な定義や意見がありますが、唯一Fasterだけは客観的に測れます。 しかしJSXと速度については、トップページにあるBox2…

読書メータの確認ダイアログがうざい

最近、読書メータに登録しました。が、本を登録するたびに確認ダイアログがでてくるのが、面倒くさい。 というわけで、これを無効にするユーザユクリプトを書いてみた。 ダウンロード http://gist.github.com/61709.txt?.user.js 注意点 Opera9.6では動きます…

SWFAddressすごい

SWFAddressというライブラリがすごい。 AjaxやFlashでもページ遷移時にURLを書き換えれる。しかも、ちゃんとブラウザの戻るボタンも効く。デモページざっとソースを見たところ、location.replaceなどを使ってURLを書き換えているみたい。ブラウザに合せて、a…

DuceScript

http://howdyworld.org/junk/duce.html30分プログラム、その227。CDuceっぽいXML記法をJavascriptで提供する。実際は30分以上かかっていたりする。 CDuceのXML記法がWebページでも使えたらおもしろいなぁ、と思ったのでOreScriptで実現してみた。次のように…

XMLパーサっぽいの

30分プログラム、その226。XMLパーサっぽい何か。 OCamlDuceなどの[ [] "xyzzy"]という記法をXMLに変換するのが目的。まだ属性を書けない。 Javascript-Parsecとprototype.jsを使っている。 使い方 var parser = new DuceParser('<foo>[ <bar>[] <baz>"xyzzy" ]'); var resu</baz></bar></foo>…

Javascriptのパーサコンビネータを試す

30分プログラム、その225。Javascriptでパーサが書きたくなったのでJavascirpt版Parsecを試してみた。 ドキュメントがなくて苦労しているけど、全部自前で書くのに比べたら楽。 今のところ分った使い方は、 a b のかわりにa.l(b)メソッド do{a; b; c}のかわ…

Javascriptプリプロセッサ

JavascriptでJavascriptプリプロセッサを作れば、Javascriptでマクロが使えるようになるんじゃね、と思ったので作ってみた。テストページ(Firefoxで確認、Operaでは動かない)パーサはNarcissus(Javascript on Javascript)のものを流用したので苦労してない。…

S6印刷用CSS

S6の印刷用ページ。まだ、完成してないけど、とりあえず使えるようになったので。このCSSを適用してインデックスページを印刷すると、A4一枚にちょうど6ページ収まるようになる。Firefoxで確認、Safari/Operaは微妙。IEは知らない。複数ページには対応してな…

S6印刷モードが欲しい

前からHTML+CSS+Javascriptでスライドを作りたかった。でも、Slidyの印刷モードは格好悪いので敬遠してた。 でも、S6のインデックスモードが、とてもいい感じ。これをちょっと改造したら、印刷モードになるんじゃないかと思ってがんばっている。まだ、できて…

Javascriptで挫折

JSONをULで表現して楽々把握という車輪の再発明をしようとして、途中で挫折した。挫折したポイントを列挙すると、 jQueryのmapが使いずらい。配列を返すと、勝手に結合される 配列とオブジェクトを区別したいのに、区別する方法が思いつかない やりたかった…

URLエスケープ Bookmarklet版

30分プログラム、その175。URLエスケープをするBookmarklet。 昨日のURLエスケープコマンド(id:mzp:20071105:escape)のBookmarklet版。Opera/Safari/Firefoxで確認。IEはしらない。 使い方 ブックマークレットとは - はてなキーワード参照。 ソースコード ja…

CPSっぽいAjax

Ajaxでこんな感じのコードを書いた。 api.edit({ onSuccess: function(){ api.get({ onSuccess: function(){ // .... }, onFailure: fail_handle('取得失敗!') }) }, onFailure: fail_handle('送信失敗!')}); 後続の処理を渡すあたりがなんかCPSっぽい。じゃ…

デバッグメッセージの削除

前々から、Javascriptコードにconsole.logを埋め込みっぱなしなことを気にはしていたのだけれど、とうとうid:mirakuiさんから指摘されてしまったので、ちゃんと対策する。実はjsjuicerを使うと、「;;;」で始まる行を削除できる。だから、こんな感じに書くこ…

JSUnitを試す

30分プログラム、その148。JsUnitを試してみる。JsUnit を使った JavaScript のユニットテスト - WebOS Goodiesを参考にした。結構いいね。テストに失敗したとき、スタックトレースが表示できるあたりが実にすばらしい。一応、IEでも動く。まあ、IE固有の動…

Builder.dumpがめっさ便利

id:Gemma:20070730のBulider.dumpが実に便利。だって、 Builder.dump(); var div = P({},[A({href:"http://d.hatena.ne.jp/mzp/"},["id:mzp"])]); って書けるんだよ。これで書いてたら、id:selvaggioから「まるで関数型言語だな」って言われたけど、実にその…

prototype.jsでクラス定義

30分プログラム、その125。prototype.js風のクラス定義を勉強してみる。prototype.jsだと Hoge = Class.create(); Hoge.prototype = { initialize: function(){ // ... }, f: function(){ // ... }, g: function(){ // ... } }; といった書き方ができる。普…

Ajax.Request

Ajax.RequestというかXmlRequestのURLに指定できるのは、相対URLのみ。 new Ajax.Request('http://example.com/hoge.cgi',{method:'get'}); // NG new Ajax.Request('hoge.cgi',{method:'get'}); // OK より正確にはできないブラウザもあるらしい。とりあえ…

分散関数呼び出し

30分プログラム、その111。どう書く?org via id:Gemmaさんより。mixiで、次のようなメッセージを受けとったので。 javascriptならproc.toSourceもevalもあるから、本物の分散関数呼び出しができるんじゃない? やらないか? 使い方 こんな感じで使います。ち…

mixiの1x1のプロフィール画像置き換え

30分プログラム、その103。mixiで1x1のプロフィール画像を置き換えるユーザJavascript。 使い方 「環境設定->詳細設定->コンテンツ->Javascriptオプション->ユーザーJavascriptファイル」で指定したフォルダに置くだけです。 ソースコード new function(){ d…

RhinoでCGI(GET編)

30分プログラム、その99。RhinoでCGIを書いてみる。 CGIライブラリが見つからなかったので、自力でGETパラメータをとってきた。 GETが使えるようになる POSTが使えるようになる DOMが使えるようになる なにかアプリケーションを書く 使い方 http://localhost…

Rhinoでprotoype.js

30分プログラム、その97。Rhinoでprototype.jsを使ってみる。prototype.jsは、DOMに依存した関数と、DOMに依存していない関数が混ざって入っています。なので、mapとかが使いたいだけでも、DOM関数を用意する必要があります。John Resig - Bringing the Brow…

はじめてのRhino

30分プログラム、その96。Javaで実装されたJavascript処理系であるRhinoを試してみる。 id:Gemma:20070708によるとNext Big Languageらしい。でも、call/ccとはまだ出会っていない。探してもいないんだけど。 インストール http://www.mozilla-japan.org/rhi…

はてな サブアカウント 切り替え

30分プログラム、その77。サブアカウント切り替え用のリンクを追加するスクリプト。 けっこう便利なので、ちょっと丁寧に解説をば。 概要 画像のように、アカウント切り替え用のリンクを追加します サブアカウント一覧の自動取得はできないので、手動で設定…

Hatena RSS Backurl

はてなRSSのログインボタンが、いろいろと気にくわない。 httpsにリンクしてほしい。idea:12663 ログインするとトップページに戻される。 idea:15720 というわけで、CreameMonkeyで対応する。 // ==UserScript== // @name Hatena RSS backurl // @namespace …

PukiWiki AccessKey

AccessKeyの削除 AccessKeyの追加 30分プログラム、その59。PukiWiki関連のCreamMonkeyを2つほど。 PukiWikiは、AccessKeyが設定されているため、Control+Pでプレビューが表示できる。ただ、これがMac(Cocoa)の上移動のキーバインドとかぶっているため非常に…

SpiderMonkey

昨日のやつ(id:mzp:20070315:js)の訂正版。 JavaScriptのインタプリタのビルド方法。http://www.mozilla.org/js/spidermonkey/release-notes/からjs-1.6.0.tar.gzをダウンロードする。そして、展開してmakeする。 ~ $ wget http://ftp.mozilla.org/pub/mozil…

スタンドアロンなJavaScript

id:mzp:20070316にもっと簡単な方法が書いてあります。

カノン逆変換

friend:donutsが課題で作ってたカノン変換を逆変換してみた。(e.g.認証がかかっています 名前は、Kanon変換-1(カノン変換インバース)。 次のやつを、アドレスバーに貼付けて、エンターを押すと逆変換される。明らかに不可逆な変換だから適当なんだけどね。 j…

\s

Firefoxだと\sは全角スペースにもマッチする。Safariだとマッチしない。IEはしらん。 どういうことかというと、 // 全角スペース ' '.search(/\s/); // -> -1(Safari),0(Firefox)IEもマッチしなかった。 ということ。

addEventListener('load')

JavaScriptでロードが終了したときのイベントハンドラを書きたいとする。 document.addEventListener('load',function()alert('hoge'):,false);これだと、SafariとOperaではうごくけど、Firefoxでは動かない。(IEは知んない。)これを解決するにはdocumentの…