Skip to content

Instantly share code, notes, and snippets.

@kawanet
kawanet / param-with-json.js
Created February 3, 2014 02:52
This encodes a query parameter object as `key=value` pairs of `application/x-www-form-urlencoded`. Uses JSON when an object given as a value.
/**
* @param {Object} query - query parameter object
* @param {String} `application/x-www-form-urlencoded` encoded string
*/
function param(query) {
var list = [];
for(var key in query) {
var val = query[key];
if ('object' === typeof val) {
@kawanet
kawanet / server_tokens.conf
Created February 3, 2014 14:56
This one line conf file work to remove version signature at nginx response such as `Server: nginx/1.4.3`.
server_tokens off;
@kawanet
kawanet / wrap_error_middleware.js
Last active August 29, 2015 13:56
An Express.js middleware wraps error responses as JSON structure.
/**
* @example
* var app = express();
* app.use(wrapError);
* app.use(yourMiddleware);
*/
function wrapError(req, res, next) {
var superSend = res.send;
res.send = _send;
@kawanet
kawanet / html_parser.js
Created February 25, 2014 14:31
Fetch and parse HTML as a JSON representation
/**
* Fetch and parse HTML as a JSON representation
* @license MIT
* @author kawanet
* @example
* var parser = require("./html_parser");
* var url = "https://github.com/kawanet";
* parser(url, function(err, data) {
* if (err) return console.error(err);
* console.log(JSON.stringify(data, null, " "));
@kawanet
kawanet / suumo-tsubotan.html
Last active August 29, 2015 14:08
SUUMO の検索結果画面の価格欄に坪単価を追記するブックマークレット用JS
<a href="javascript:(function(){if (location.host != 'suumo.jp') {location.href = 'http://suumo.jp';return;}$('.property_unit').each(function(idx, div) {var m,p,q,r,s,t,u,v;m = {};$(div).find('dt').each(function(idx, dt) {$dt = $(dt);m[$dt.text()] = $dt.parent().find('dd');});t = function($e) {return $e.text().replace(/[\s\r\n]+/g, '').replace(/^\D+/, '').replace(/[^\d\.\,].*$/, '');};p = m['販売価格'] || m['賃料'];s = m['専有面積'] || m['建物面積'];r = t(p) / t(s) * 3.3;u = (r &#x3E; 10) ? (Math.round(r*10)/10 + '万') : Math.round(r*10000);q = p.find('span:first') || p;q.append('(' + u + '円/坪)');});})()">Suumo</a>
@kawanet
kawanet / kill-child-process.sh
Created December 13, 2014 13:29
bash で自プロセスが落ちたときに子プロセスも一緒に伝搬して落とす
#!/bin/sh
trap "pkill -P $$" EXIT
# do something
@kawanet
kawanet / unpack_JS_Packer.js
Last active August 29, 2015 14:21
JS_Packer の自己解答処理コードの代案
// @see https://github.com/yomotsu/JS_Packer
// JS_Packer の自己解答処理コードの代案。for ループの文字列結合は遅そうなので join("") を使う。
// 画像全体を一括処理すると RangeError: Maximum call stack size exceeded. になりそうなので、行単位で変換してから join("") する。
// でも、元のコードよりも、長くなっちゃった。JS_Packer は小さくするのが主目的で、処理時間は関係ないのか。
function unpack_JS_Packer() {
var i = document.getElementsByTagName("img")[0];
var c = document.createElement("canvas").getContext("2d");
c.drawImage(i, 0, 0);
@kawanet
kawanet / removeElementsByQuerySelector.js
Created May 19, 2015 10:06
remove DOM elements without jQuery
// $("#id").remove();
Array.prototype.forEach.call(document.querySelectorAll("#id"), Function.prototype.call.bind(document.body.remove));
@kawanet
kawanet / verbose.js
Last active August 29, 2015 14:21
node.js で、起動時のコマンドライン引数にある「-v」の個数を1行で取得
var VERBOSE = Array.prototype.filter.call(process.argv, RegExp.prototype.test.bind(RegExp("^-v$"))).length;
console.error("error");
if (VERBOSE > 0) console.warn("warn");
if (VERBOSE > 1) console.log("log");
if (VERBOSE > 2) console.info("info");
if (VERBOSE > 3) console.debug("debug");
@kawanet
kawanet / CLI.js
Created May 21, 2015 10:57
node.js のライブラリに CLI 版を内蔵させる場合の引数の渡し方
#!/usr/bin/env node
if (!module.parent) CLI.apply(null, Array.prototype.slice.call(process.argv, 2));
function CLI(arg1, arg2) {
//
}