愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

JavaScript

JavaScriptでEventまわりのコードをテストする時のアレ

addEventListenerのラッパとか、書くじゃないですか。iPhoneやAndroidでswipe event的なものを用意するために、DOMContentLoaded呼ばれたときにbindしておいてevent delegation使ってほむほむするコードも書くじゃないですか。で、そいつらをテストするコー…

JavaScriptのお勉強をするときの話(環境構築編)

この記事は、JavaScriptを勉強して可能なら使えるようになりたいけど、どこからやっていいかよくわからない、という昔の僕みたいな人のためのガイドです。ちなみにいささかCUI寄りです。初めに断っておきたいのは、僕が多少なりとも真面目にJavaScriptを勉強…

Node.jsひみつの花園、readline module

Nodeの公式docにはだいたいの標準モジュールのドキュメントがそろっているのだけど、なぜかreadlineという名前のモジュールだけはundocumented。-> http://nodejs.org/docs/v0.4.4/api/readline.html中身としては、readlineのない環境(?)で簡易なGNU Read…

Delicious BookmarksのFirefox4.0対応、というか主にVimperator3.0対応まとめ

べ、別にFirefox4.0がリリースされたからこんな記事書いてるんじゃないんだからねっ!あんたのことなんて待ってないし、今頃迎えに来てくれたってちっとも嬉しくないんだから!バカ!バカ! とりあえずadd-on本体をぶっ込む それはさておき、僕はDelicious B…

Replica - terminalのreplからブラウザ上のJavaScriptを実行する

マクラ このまえ会社でちょっと特殊なJavaScript replを作ったのだけど、もうちょっと汎用的なものを作ってみたかったのでNodeで書いたっていうお話。Nodeで書くこと自体にあまり深い意味はないんですが、Socket.IO使えばcross-browser/cross-originでのpush…

JavaScriptのテストについて本気出して考えてみた(2)

前回からの続きで。 DOMエミュレーションの戦略 一方で、本物のブラウザを使わずに何らかのJavaScript実行環境でDOMをエミュレートして、その上でテストを走らせよう、という戦略もある。この分野の大御所はEnv.js(http://www.envjs.com/)ということになって…

JavaScriptのテストについて本気出して考えてみた(1)

一週間のうちまる一日くらいは、「あーあのJavaScriptコードのテストってどうするのがいいかしら?」と考えている。嘘です。多分45分くらい。考えている時間の長さはどうでもいいんだけど、JavaScriptのテストは場合によっては中々ややこしい問題に成り得る…

githubのアレ(history.replaceStateとかhistory.pushStateの話)

会社で下の記事についてリマインドしてもらって、なんとなく気になっていたことを調べたメモ。http://webtech-walker.com/archive/2010/12/06160539.html記事を読んで、history.replaceState(null, "title", "/new.html") とかやると遷移なしでページのconte…

jQueryで複数の要素が返ってくるセレクタの結果セットにget系の関数を適用する場合の返り値

割と常識的な話かもしれないけど 例えば、 (function($) { $(".hoge").attr("name", "hoge"); })(jQuery); という風に書くと、内部的にループが回ってhogeクラスが指定されているelement全てのnameを"hoge"にできる、というのは割と知られた話である。じゃあ…

Shindigのwave featureで実現する簡単なお絵かきチャット feat. node.js and Socket.IO

タイトル書いてから気づいたけど、別にチャット機能とかなかった。 http://d.hatena.ne.jp/zentoo/20100821/1282407303 以前に書いた↑のエントリでは、Shindigのextrasに入ってるwave featureを調べてみて、「あーこれShared Stateはコンテナ側で何とかして…

VimperatorでInstant Previewsとイチャイチャするためのpluginを作った、けど…

最近(3日前くらい?)、Google検索の結果画面でリンク先のページのプレビューが見えちゃうInstant Previewsというムフフな機能がリリースされた。けど、ブラウザとしてVimperatorを選択した僕達がInstant Previewの引き金となっている(であろう)clickイベン…

v8botをTwitter用にportした

某所の某チャンネルで、v8botなるものを見つけたので、Twitterでも動くようにしてみた。動くようにしてみたというか、サンドボックス周り以外はイチから書いているし、機能は一つしか移植していない。元のヤツは参考程度。http://twitter.com/v8botReplyでJa…

ゆとりがlong pollingを実装してみた

long pollingって結局 HTTPでつなぎに行って、レスポンスが帰ってきたら何かして再度つなぐ(Client Side) HTTPリクエストをキープしといて、イベントに応じてレスポンスを好きな時に返す(Server Side) の2つだろう、と思って、勉強を兼ねて「とりあえず上記…

redflagをナビ子記法でリファクタリングする

WEB+DB press vol.59に載っていた、id:uupaaさんのナビ子記法が目からウロコだったので真似してみた。 (function(global, require) { var sys = require('sys'), fs = require('fs'), Script = process.binding('evals').Script; setups = [], events = {}; …

IE8におけるreadyStateとstatusのおいしい関係

ちょっと若気の至りでこんなコード書いてた。 if ( xobj.readyState === 2 && xobj.status === 401 ) { // hogehoge } このコード、IE8だと「エラーを特定できません」とか言って怒られる(特定しろよ!ハゲ!)。readyState === 2のところをreadyState === …

node.jsのsysパッケージはutilパッケージに移行予定らしい

node.jsのsysパッケージはutilパッケージに移行予定らしい。 11:22 JimBastard: a message is outputed on 0.3 when you require('sys') 11:22 % ./node 11:22 > process.version 11:22 'v0.3.1-pre' 11:22 > require('sys') 11:22 The 'sys' module is now …

二人のJake

とあるプロジェクトをgithubから引っ張ってきて、プロジェクトのルートディレクトリに"Jakefile"なるファイルがあったので何かと思って調べたら、Rakefileの拡張文法でJakefileを書いておくことで、.jsファイルのcompressとかドキュメントの生成?などが出来…

node.jsで「メタプログラミングRuby」水曜日のredflagを実装する

はい、つられましたね。あなた、node.jsっていう流行り言葉につられてこのリンクを踏んでしまいましたね。ここはバーボンハウスだ。ゆっくりしていってくれたまえ。 というような冗談は置いといて。最近、「メタプログラミングRuby」っていう本を読んだので…

gumistudy #5に行ってきたような気がする

現GREE、id:naoyaさんによるTitanium MobileというJavaScriptで、iPhone/Androidのネイティブアプリを作れるSDKのおはなし。 公式はこれですな。http://www.appcelerator.com/ 要点としては、 チタニウムじゃなくてタイタニウムらしい? 事前情報だと違うのか…

Test::QUnit - mozrepl経由でコマンドラインからJavaScriptのテストを実行する

マクラ - JavaScriptのテストについて テストのないコードはコードではなく、テストを書かないプログラマはプログラマではなく、テスティングフレームワークのない言語は言語と呼ぶに値しない。と以上のような偉そうなことを言う資格は全くないし狂信的でも…

Google Wave追悼にちなんでShindigのwave featureを試してみた

仕事でApache Shindigというプロダクトに関わっているのだけど、その関係でShindigプロジェクトのtrunkを時々svn upして、最新版のShindigにどのような更新があるのかチェックしている。それで、この前svn upをかけたらtrunk/以下にextras/src/main/javascri…

JSONP ってJSONあんま関係ないよね

既に流通してる名称だからしょうがないけど、JSONPって名前は何だか紛らわしい。この名称はちょっといただけない。JSONPを試してみよう!というとき、大体こういう感じにhtmlを書く。(なんかscriptタグとか消されるので変なhtmlでご勘弁を) JSONP test jav…

fms_switcher.jsで端末固有番号も設定できるようにした

以前に作った、VimperatorのコマンドラインからFireMobileSimulatorの設定を変更するプラギンを更新した。(前記事 → http://d.hatena.ne.jp/zentoo/20100612/1276329010) http://gist.github.com/435540 変更点としては、 コマンドの第二引数でUID(端末固有…

JavaScriptのnewって何?一体何なの?という話

マクラ JavaScriptを使っている人なら知っていることだろうけど、JavaScriptはプロトタイプベースのオブジェクト指向を採用しているので「クラス」がない。オブジェクトしかない。でも、組み込みの演算子としてnewがあって、それを使って var obj = new Obje…

僕がJavaScriptで簡易なdeep copyを必要としたわけ

しばらく前から仕事でApache Shindigを触っている。Shindigは、Googleの提案しているソーシャルアプリケーション(日本だとソーシャルゲームと言った方が通りがいいかも)の共通API、OpenSocialの参照実装。もそっと分かりやすく説明すると、mixiアプリって…