JavaScript

canvasの画像も右クリックで保存できる

canvasに描画された画像の上で何気なく右クリックしてみると「画像を保存」というメニューが出てきた。Firefoxはcanvasに描画された画像をpngで保存できるらしい。で、保存した画像を開いて…、バケツ塗りつぶしのバグに気付いた。画像の最初のラインが塗りつ…

HTML Canvasでバケツ塗りつぶし

気晴らしにコード書いてないとやってらんないので、今日はJavaScriptとHTML Canvasでバケツ塗りつぶしを作成してみた。https://nullpon.moe/dev/sample/canvas/bucketfill.htmlFirefox3とOpera9.6、Safari4で動きます。Safariはそこそこ速いですが他のブラウ…

ECMA 262 5th Edition草案公開

JavaScript2の言語仕様となるECMA 262 5th Editionとして最終草案が公開されたらしい。Final draft of ECMA-262 – the ECMAScript language standard – has been publishedECMA 262 5th Editionは、今までECMAScript 3.1と呼ばれていた仕様で、大きな変更点…

window.showModalDialog

returnVal = window.showModalDialog(uri[, arguments][, options]);モーダルで別ウィンドウをオープンするメソッド。IEの実装がHTML 5の仕様に取り込まれたようです。IEは4.0の頃から実装されていたメソッドで、Firefoxでは3.0から実装されたそうです。Fire…

navigator.onLine

まだFirefoxだけかもしれないが、JavaScript で navigator.onLine というプロパティが利用できる。このプロパティはHTML 5の仕様の一つのようで、例えば、オンラインならばローカルストレージとサーバサイドのストレージを同期するという実装を行う場合に、…

DOMストレージ

先日リリースされたIE8にはDOMストレージが実装されており、主要ブラウザのほとんどでDOMストレージが使えるようになりました。以前作成したサンプルをIE8でも動作するように書き直しました。 セッションストレージ ローカルストレージ IE8では、 sessionSto…

数値リテラルに直接メソッドを呼べない理由

(5).toString() がOKで 5.toString() がダメな理由を調べてみた。まず (5) の ( ) は何なのか。これはグループ化演算子と呼ばれるもののようだ。 生成規則 PrimaryExpression : ( Expression) は、次のように評価される: Expression を評価。これは Referenc…

Number

これはOK var x = 5; x.toString(); これはだめ 5.toString(); // エラー 数値リテラルを直接数値オブジェクトに変換してくれないらしい。なのでRubyっぽく 5.times( function(i){ ... } ); みたいなメソッドを作ろうと思ったのが、一瞬でダメポ終了した。

日本語のページを除外してGoogle検索するGreaseMonkey

Googleで「ウェブ全体から検索」を選んで検索しても、結果が「日本語のページから検索」とほとんど変わらなかった。カッとなって、ついGoogle検索のページに「日本語以外のページを検索」というラジオボタンを作成するGreaseMonkeyスクリプトを作ってしまっ…

HTML Canvasで平均画素法

今日はHTML Canvasで平均画素法を書いてみた。 https://nullpon.moe/dev/sample/canvas/average.html 平均画素法は画像縮小用のアルゴリズムです。例えば元画像と縮小後の画像のサイズの比率が3:2だとすると、2倍に拡大して、1/3に縮小する、という処理を通…

HTML Canvasで拡大縮小

HTML Canvasで画像の拡大縮小を行うにはscaleメソッドを使ってdrawImageすればいいのですが、暇つぶしにニアレストネイバー法、バイリニア法による画素サンプリングを書いてみました。もちろん、重くて使い物にはなりません。ImageDataを使うため、Firefox 3…

Array#forEachの話

引数があった場合はそのオブジェクトにしたいってことはわかったのだがなぜ引数無しで動作するのかがわからない。気になったので調べてみた。おそらくこんな感じではないでしょうか。 Array.prototype.forEach = function(fun /*, thisp*/) { var len = this…

google code prettify

MOONGIFT: » ソースコードの色づけを行う「Google Code Prettify」:オープンソースを毎日紹介JavaScriptライブラリなのでWebアプリケーションの言語を選ばずに使うことができて便利ですよね。自分もサイトの以下のページ等で使ってます。 https://nullpon.mo…

XSLT

旧サイトのコンテンツJavaScriptでXSLTを弄る方法をサルベージした。 https://nullpon.moe/dev/sample/xslt/index.html このような標準化されていないFirefoxの機能はXULで使う事を想定しているのでしょう。

jQuery 1.3

jQuery バージョン1.3が正式リリースされていたらしい。jQuery: The Write Less, Do More, JavaScript Library

はてなダイアリーを投稿前に自動セーブするGreaseMonkeyスクリプト

はてなダイアリーは結構な頻度でエラーが出ますけど、日記を投稿したときに例の犬が現れて書いていたエントリが消滅したりすると、あのウェルシュコーギーペンブロークを韓国に強制連行して(-- 禁則事項のため削除 --)。もちろん、はてなが大好きなはてな…

ヨシオリを警告するGreaseMonkeyスクリプト

最初からネタとわかっていれば、みんなネタとして安心して楽しめる。例えば、ヨシオリというキーワードが入っていれば、それはネタ決定なわけです。http://d.hatena.ne.jp/higayasuo/20080709/1215570797 そうなんですか?でもこういうのって忘れちゃいます…

オーバーラップはてブ追加ブックマークレット

ちょっと改良版 javascript: function closeHatebuWindow(){ with(document.body){if(lastChild.tagName=='IFRAME')removeChild(lastChild)} } ( function(){ var b=document.body; var a=document.createElement('iframe'); with(a.style){ position='absol…

登録画面がオーバーラップするはてブ追加ブックマークレット

FriendFeed のブックマークレットがちょっと使いやすい件 こんな風に、別のウィンドウがポップアップするのではなく、開いている画面上に登録用のコーナーがオーバーラップされます。ブックマークレットをクリックする前にテキストを選択しておけば、ご覧の…

HTML Canvasに角丸の矩形を描く

arcメソッドの角度の指定はドロー方向が時計回り・反時計回りであるかに関わらず、3時の方向を0、6時の方向をMath.PI/2、12時の方向をMath.PI*3/2として始点、終点を設定するようだ。数学のxy座標と比べると6時と12時の方向の値が逆なので分かりにくい。canv…

jQueryのプラグインを作る

今さらながらjQueryにハマっている。このライブラリは分かりやすくて、とにかく簡単に使えるのが魅力だが、プラグインも簡単に自作できる。この拡張性も人気の秘訣なのだろう。この人気っぷりにも頷ける。jQueryにメソッドを追加するには、extendを使う方法…

ロシア農民のかけ算とCPU

ロシアの農民のかけ算という、かけ算の方法があるらしい。たとえば9×12ならば、前の数を半分にしていき、後の数を2倍していく。 9 12 4 24 2 48 1 96前の数が2の倍数になってるものを削除して 9 12 1 96残った後ろの数を足すと 12 + 96 = 108あら不思議、9…

関数内 static 変数もどきをつくってみる

ひさびさにプログラミングな話で。JavaScriptで関数内static変数みたいなのを作ってみる。非オブジェクト指向言語におけるstatic変数は関数やブロック内で宣言された変数で、そのブロックが終了しても値を保持している変数のこと。それっぽいのを作ってみる…

google-code-prettifyでどこでもシンタックスハイライト

google-code-prettifyというスバラシイJavaScriptライブラリがあることを知った。HTML上に書かれたサンプルコードをシンタックスハイライト表示するJavaScriptライブラリ。Pure JavaScriptということはブックマークレット化できるんじゃないですか?? 試し…

JavaScriptと二重否定

prototype.js 1.5.1のソースでこれは何??、と、同僚に聞かれた。 Browser: { IE: !!(window.attachEvent && !window.opera), Opera: !!window.opera, WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, Gecko: navigator.userAgent.indexOf('Gec…

JavaScriptのargumentsはArrayじゃない

Function.prototype.curry = function(t) { var self = this; return function() { return self.apply(this, [t].concat(arguments)); } } のような関数をカリー化引数を部分適用させるメソッドを作ってみたが上手く動作しない。arguments は Array オブジェ…

ループ脱出に例外を使うのはgoto乱用以上に良くないのでは?

gotoの話とは直接関係ないのだが…気になったのでメモ http://blog.livedoor.jp/dankogai/archives/50707799.html 例外処理がある言語であれば、そちらを使う手もある。以下はJavaScriptの例。 try{ for (var y = 0; y < height; y++){ for (var x = 0; x < w…

Dojo ScriptSrcIOのコールバック関数

Dojo ScriptSrcIOのJSONPコールバック関数はリクエストする毎に名前が異なっている。Dojoは文字列から関数名を動的に生成しているということだが、どのような方法を使って文字列から関数名を作っているのか? 悔しいが分からなかったのでDojoのソースを読ん…

Dojo 0.4

http://labs.unoh.net/2006/10/dojoioscriptsrcioajax.html Dojo 0.4では、この書き方で動かないようだが・・・。 http://dojotoolkit.org/api/?#dojo.io.ScriptSrcTransport.bind これでいいのだろうか? dojo.require("dojo.io"); dojo.require("dojo.io.Scri…

E4XP

DojoでJSONPを弄っていて、ふとJSONPができるならXMLでE4XPもできんじゃね、という超どうでも良いヨタ話を思いついたのでweb.paulownia.jpの方に載せてみた。できたからといって何の役にも立たないけどナ〜。ところでE4Xで名前空間を扱う場合 var ns = new N…