[JS] スネークケースのstring/object keys を キャメルケースに変換
最近はガリガリ開発していてそっちでアウトプットしているので、ブログには書く頻度が減ってしまった。
今日書いたコードは糞だけど汎用性あるのでこっちにメモ
/** * Convert snake case string or object keys to camel case. */ convertSnakeToCamel: function(snake) { if (!snake) { return snake; } var camel; var that = this; if (typeof snake === 'string') { camel = snake.replace(/_./g, function(matched) { return matched.charAt(1).toUpperCase(); }); return camel; } _.each(snake, function(value) { if(_.isObject(value) === true) { return that.convertSnakeToCamel(value); } }); for (var prop in snake) { if ((prop.indexOf('_') !== -1) && snake.hasOwnProperty(prop)) { var tmp = snake[prop]; delete snake[prop]; camel = this.convertSnakeToCamel(prop); snake[camel] = tmp; } } return snake;
コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)
- 作者: 西尾泰和
- 出版社/メーカー: 技術評論社
- 発売日: 2013/04/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (33件) を見る
Nodeのcryptoモジュールで AES algorithmの暗号・復号
例えば秘密鍵が 123456789key で、Hello worldという文字列を暗号・復号すると下記のようになる。
var crypto = require('crypto'); var secretKey = '123456789key'; var text = 'Hello world'; var hash = crypto.createHash('md5'); hash.update(secretKey, 'utf8'); var key = hash.digest(); hash = crypto.createHash('md5'); hash.update(secretKey + 'randomToken'); var ive = hash.digest(); var cipher = crypto.createCipheriv('aes-128-cbc', key, ive); var crypted = cipher.update(text, 'utf8', 'hex'); crypted += cipher.final('hex'); console.log('暗号結果: ' + crypted); var decipher = crypto.createDecipheriv('aes-128-cbc', key, ive); var dec = decipher.update(crypted, 'hex', 'utf8'); dec += decipher.final('utf8'); console.log('復号結果: ' + dec);
cipher.update と decipher.update とで引数の input/outputが逆になるのが注意。
また、ivとはCBCモードで必要になるinitialization vector (初期化ベクトル)のこと。
暗号ブロックを使い回して暗号処理をするCBCでは、初期化の値が必要なのでそれを用意してあげる。
このivは第3者に見られても問題はない。
- 作者: David Mark Clements,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 2人 クリック: 4回
- この商品を含むブログ (5件) を見る
markdownでchecklist
Rebuild.fm を聞いていたら、pull req のコメントに markdown で checklistを書いて進捗具合を可視化するという方法がいいようなので、今後やっていきたい。
markdownでchecklist書く場合は以下のような感じ。
- [ ] チェック項目 - [ ] 未完了タスク - [x] 完了済みタスク
gitでやり直し系の操作
こちらを見て勉強。
http://d.hatena.ne.jp/idesaku/20091106/1257507849
- 前回のコミットをちょっとだけ修正したい場合。
git-commit --amend
を使う。ミスコミットをしてしまった後に修正をして、上記コマンドを実行すればおk。
- もっと前のコミット操作などを修正したい場合
- git reset と git reflog を使う。git reflogでコミット履歴を見て、git reset --hard で対象のコミットをresetできる。
git rebaseについてはこちらの記事が参考になった。
http://liginc.co.jp/web/tool/79390
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (17件) を見る
reponse返却イベントで処理
Nodeでリクエストが来たタイミングと、レスポンスを返すタイミングでログを出したいような場合、下記のようなmiddlewareを登録すればおk。
exports.accessLogger = function(req, res, next) { var logResponse = function() { res.removeListener('finish', logResponse); res.removeListener('close', logResponse); // レスポンスに関してのログ出力処理 }; // リクエストに関してのログ出力処理 res.on('finish', logResponse); res.on('close', logResponse); next(); };
upstartで起動・終了周りのtips
upstartのscirptを書いていて、プロセスをkill -TERMで終了させた場合は勝手にstartしないようにしたかったので、normal exit を使用した。
start on started sshd stop on shutdown kill timeout 30 normal exit 0 TERM respawn respawn limit 2 5 script .... end script pre-start script .... end script pre-stop script .... end script
また、再起動処理を永遠に繰り返してほしくないので、respawn limit を使用している。respawn limit 2 5 と書くと、5分以内の2回再起動繰り返したらそれ以上起動しないという意味とのこと。
shellで条件式書く時のオプション
dとfを間違えていてハマったのでmemo。
オプション: 使用例: オプションの意味
- -z: test -z string : string の文字列長が 0 ならば真となる。
- -n: test -n string : string の文字列長が 0 より大ならば真となる。
- -d: test -d file : file がディレクトリならば真となる。
- -f: test -f file : file が普通のファイルならば真となる。
- -s: test -s file : file が 0 より大きいサイズならば真となる。
- -e: test -e file : file が存在するならば真となる。
- -r: test -r file : file が読み取り可能ならば真となる。
- -w: test -w file : file が書き込み可能ならば真となる。
- -x: test -x file : file が実行可能ならば真となる。