2011-09-01から1ヶ月間の記事一覧

sha1を求める

これでよいのかな var crypto = require('crypto'); var sha1 = function(data) { return crypto.createHash('sha1').update(data).digest('hex'); }; console.log(sha1('foo')); // 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33

中規模以上くらいのアプリでのexpressのルーティング

expressは軽量ですごくいいんだけど、アプリの規模が大きくなってくるとどうしても管理が煩雑になる。というのもapp.jsにコントローラー全部書いたらルーティングが20とか30以上くらいになってくるともう無理ーってなる。探してみたら色々あるみたい。 GitHu…

expressのapp.use(app.router)

の意味がいまいちわかってなかった。app.getとかapp.postとかを処理する場所を決めるというやつだった。app.useは登録した順番で呼ばれるので、app.use(app.router)がないこの例では、foo -> bar -> send('hoge') という順番で呼ばれる。 var express = requ…

expressでPOSTデータをJSONにする

なおexpressはレスポンスを返すときのJSONは適切に処理してくれるんだけど、現状ではリクエストとしてJSONがPOST/PUTされてきたときにはそれをどうにかしてくれたりしないので、自分で JSON.parse() にかけてやる必要があったりしてちょっと残念。その点、フ…

githubからnpm installする

Nodemailerにpull req送って取り込まれたのはいいものの、npmにアップしてくれないのでどうしたものかと思ってたけど、そういえばnpm installはtarballのURLも指定できたことを思い出したので、forkした自分のリポジトリにtagつけてtarballつくった。 https:…

chrome.tabs.executeScriptのJSファイルのパス

html/popup.htmlからjs/script.jsを実行したかったので chrome.tabs.executeScript(null, { file: '../js/script.js' }); としたらエラったので chrome.tabs.executeScript(null, { file: chrome.extension.getURL('js/script.js') }); としたけどこれもだめ…

選択しているテキストの取得

これだけで取れるのね。 window.getSelection().toString() IEだとこうなのかな?(未検証) document.selection.createRange().text

chrome extensionのcontent script内でつくったiframe.contentWindowがundefinedになる

chrome14。タイトルそのままだけどcontent scriptで var iframe = document.createElement('iframe'); iframe.src = chrome.extension.getURL('iframe.html') document.body.appendChild(iframe); console.log(iframe.contentWindow); // => undefined うー…

Draggable的な実装

こんなん Draggable Test 1 これでもいいんだけど、これドラッグ中に要素からマウスポインタが外れると動かなくなるという問題がある。コードはこんな感じ。 var div = document.querySelector(".box") , startX = 0 , startY = 0 , currentX = 0 , currentY…

一定文字数以上のテキストノードを取得する

body以下の6文字以上のテキストノードだけ取得したいというケースがあって、XPathでけっこう簡単にできた。 var xpath = '//text()[string-length(normalize-space()) > 5 and not(ancestor::script)]'; var resultType = XPathResult.ORDERED_NODE_SNAPSHOT…

jQueryで閉じタグ消し忘れてはまった

IE9+、IE以外だとこうなんだけど $("<div>hoge</div></div>").html(); // => hoge IE6-8だと $("<div>hoge</div></div>").html(); // => null jQuery Templateのテンプレで閉じdivが多くて何も返ってこなくて大いにはまった。

popupが設定されてるとchrome.browserAction.onClicked.addListenerが発火しない

extensionのbrowser_actionでpopupが指定されてるとchrome.browserAction.onClicked.addListenerでイベントをバインドさせても無視される。 Fired when a browser action icon is clicked. This event will not fire if the browser action has a popup. htt…

dropboxをIE9で見るとDocument Modeが7になる件について

IE

Document Modeが7だとaddEventListenerとか使えない。色々検証したけどよくわからんくてyomotsuに教えてもらった。これがDocument Modeを決めるフローで http://ieblog.members.winisp.net/misc/How%20IE9%20Determines%20Document%20Mode.svgこういうリスト…

Transfer-Encoding: chunkedのメモ

ふとchunkedの挙動が気になったので調べたメモ。nodeのhttpはデフォルトでTransfer-Encoding: chunkedになってる。 require('http').createServer(function(req, res) { res.writeHead(200, {'content-type': 'text/html' }); res.write('<style>body{background:re</style>…

chrome extensionのBadgeText

はてぶ拡張とかでブクマ数とかがでてるアレ。 chrome.browserAction - Google Chrome chrome.browserAction.setBadgeText({ text: '10' }); とかで表示される。日本語にすると化けた。画像設定できるといいな。

homebrewで入れたmongodbの自動起動設定

plistあらかじめ用意されてるのでコピペするだけ。さすがhomebrew。 $ cp /usr/local/Cellar/mongodb/1.6.3-x86_64/org.mongodb.mongod.plist ~/Library/LaunchAgents $ launchctl load -w ~/Library/LaunchAgents/org.mongodb.mongod.plist

socket.ioでtwitterのstreaming API

初socket.io。streaming API試すのはありがちだけどググってもsocket.ioのバージョン古い版しかなくてよくわからんかった。とりあえずこんな感じで動いた。socket.ioのバージョンは0.8.4。 // server var io = require('socket.io').listen(8000) , confy = …

chrome extensionでCross-Origin XHR

Cross-Origin XMLHttpRequest - Google Chrome ここに書いてあるとおりmanifestのpermissionsにChross-Origin XHRを許可するドメインを書いてbackground.htmlで実行すればOK。ポートの指定でちょっとはまった。テストでローカルの8000にサーバーたてて以下…

confyってのをnpmにアップした

GitHub - hokaccha/node-confy: Manage settings library, like as pit.ようはnode版pit。ホントはpit互換にしたかったけどnodeのYAMLモジュールが微妙でpitと互換性とるのがむずかしかったのでpit互換は諦めた。あとconfy.getは非同期にしたくなかった(コ…

webkitNotificationsの表示数制限

Notice that there is a limit of notifications that can be displayed depending on the screen and notification size. The average tends to be around 5 and any new notification beyond that will be queued waiting for the current notifications t…

Googleのanonymous OAuth

Chrome ExtensionでのOAuthしたいけど、consumer_keyとかconsumer_secretとか隠せないけどどうすんねんと思って調べてた。 Tutorial: OAuth - Google Chrome ドキュメントにこういうのあって、 var oauth = ChromeExOAuth.initBackgroundPage({ 'request_url…

npm install -gしたモジュールにパスが通ってない

$ npm install -g nodeunitしたけどnodeunitがないって言われてなんぞと思ってみたら > require.paths [ '/Users/hokamura/.node_modules', '/Users/hokamura/.node_libraries', '/Users/hokamura/.nvm/v0.4.7/lib/node' ]ってなってて実際にインストールさ…

nodeでワンライナー

ヘルプみたら $ node --help Usage: node [options] script.js [arguments] node debug script.js [arguments] Options: -v, --version print node's version --v8-options print v8 command line options --vars print various compiled-in variables --max…

トップレベルで呼ばれたかどうかの判定

Pythonでいう if __name__ == "__main__": ... みたいなやつ。 if (!module.parent) { ... } こうかな。

exportsとmodule.exportsの違い

exportsにはそれ自体に代入できない。module.exportsはできる。ってのであってるのかな。ドキュメントにはソース読めって書いてあるけど読んでもよくわからんかった。 // hoge.js exports = function() { console.log('hoge') }; var hoge = require('hoge')…

setTimeoutとかsetIntervalを同時に走らせるときのはなし

var i = 0; (function loop() { console.log(i++); setTimeout(function() { loop(); loop(); }, 0); })(); このコード動かしてみるとわかるけど、途中で処理がつまってほぼ動かなくなる。node.jsとchromeで同じだった。これloop()は一回で二つ同時に呼んで…

expressのapp.localsが重複してる気がする

https://github.com/visionmedia/express/blob/6b161d5389339a976937ed2946998b4615bd366c/lib/http.js#L80-85 これと https://github.com/visionmedia/express/blob/6b161d5389339a976937ed2946998b4615bd366c/lib/http.js#L296-299 これ。app.localsのほう…

expressのhelpersとdynamicHelpers

removed old dynamic helper logic from the view system · expressjs/express@986916c · GitHub Removed `app.dynamicLocals()`. Closes #756 · expressjs/express@cd88b92 · GitHub dynamicHelpers(dynamicLoclas)はこの辺りで消されてる。middlewareで…

ubuntuにweinerをいれる

なんかiOSとかのWebサイトのデバッグをサーバーたててPCのブラウザでできるようになるかんじ。まずJavaをいれる $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" $ sudo apt-get update $ sudo apt-get install sun-java6-jdk…

Email::Senderでメールを送る

nodeでどうしても文字コード周りがうまくいかんので諦めてperlにする。 use strict; use warnings; use utf8; use Email::Sender::Simple qw(sendmail); use Email::Sender::Transport::SMTP; use Email::MIME; use Email::MIME::Creator::ISO_2022_JP; use …