snake_caseなプロパティにcamelCaseでアクセス

とあるAPIのレスポンスJSONのキーがsnake_caseだが、JavaScript的にはcamelCaseでプロパティアクセスしたいんだよなー、みたいな話を某所で見かけた。 ES2015 Proxyを使って解決してみる。 function toSnakeCase(name) { name = name.replace(/([A-Z]+)([A-Z…

Hostname/IP doesn't match certificate's altnames

node v0.8時代のアプリをv4.2で起動したら、Hostname/IP doesn't match certificate's altnames というエラーが出て動作しなかった。 HTTPSリクエストで、リクエストホスト名とサーバ証明書に記されたドメインが一致しないというエラーメッセージ。node v0.1…

do式

do式が実装された - JS.next へえ〜 ES7のfeatureなので、正式に標準化されるのは2017年以降になると思われますが、babelでは--stage=0ですでに動くようです。 // hoge.js let x = 3 let y = do { let a = 1; var b = 2; a + b + x; } // console.log(a); //…

toCamelCase / to_snake_case

JavaScriptでcamelCaseとsnake_caseの変換 function toCamelCase(name) { return name.replace(/_(.)/g, function(_, $1) { return $1.toUpperCase(); }) // 先頭も大文字にするならこっち // return name.replace(/(?:^|_)(.)/g, function($$, $1) { return…

不思議なfizzbuzz

社内チャットにて > @here 面白いfizz buzz実装がありました。 https://gist.github.com/kazuho/3300555 > Javaではできなさそうなfizz buzzですね^^ > ですねぇ~(^ω^) https://gist.github.com/kazuho/3300555 innerクラスとか匿名クラス駆使すれば…

ES6で末尾再帰呼び出しの最適化

ECMAScript 6thには仕様として末尾呼び出しの最適化が盛り込まれている(ECMAScript 2015 Language Specification14章の6)。そしてES 6thのコードをES 5thに変換するbabelは末尾再帰呼び出しの最適化を実装しているらしい。試してみた。 再帰といえば定番の…

node.jsのPromiseでTwitter APIにアクセス

ECMAScript 6thが正式版になったのでPromiseを使ってみたい! というわけで、Twitter APIにアクセスしてOAuth 1.0のアクセストークンをゲットするコマンドラインツールをPromiseで書いてみました。 OAuth 1.0ではアクセストークンを取得する過程で、ブラウザ…

homebrewでGitHub API rate limit exceeded

brew updateやsearchのコマンドを実行したときにGitHub API rate limit exceededと表示されてエラーになった場合の対策メモ まず、https://github.com/settings/tokens でGithubのAPIトークンを作成する。権限はrepoがあればよさそう。 次に作成したトークン…

小笠原諸島西方沖地震M8.5

はい、みなさん巨大地震ですよ。 M8.5という数字にも驚きですが、今回の地震の震源はなんと地下590km。 実は、小笠原や鳥島の近くではこのような地下深くで大きな地震がよく発生します。最近では2012年の1月1日に鳥島近海の地下390kmでM7.0の深発地震が発生…

cursorを回しつつupdateすると同じドキュメントが二回更新される

mongoDBでcursorでコレクションを取得しつつupdateすると、同じドキュメントが二回updateされたり、全くされなかったりすることがあるようだ。 たとえば次のようなクエリをmongoシェルから流すと db.Hoge.find().forEach(function(result) { db.Hoge.update(…

fluentdとrewrite-tag-filterプラグインで任意のmongoDBコレクションにログを保存

fluentdでログの内容によって保存先のmongoDBコレクションを変えたくなったので調べてみた。 mongoプラグインにはタグをコレクション名とするtag_mappedオプションがある rewrite-tag-filterプラグインはログ内容によってタグを変更できる 求めているものは…

node v0.12の公開鍵暗号API

Added APIs for RSA public/private key encryption/decryption. Node v0.12.0 (Stable) cryptoモジュールに公開鍵暗号のAPIが追加されたそうなので試す。 鍵生成 $ openssl genrsa 2048 > test_private.key $ openssl rsa -pubout < test_private.key > tes…

postgresのJSONカラムに触ってみた

準備 まずメモリ上にDB用の領域を確保。MacOSXではhdiutilというコマンドでディスクイメージを作成するのがお手軽。Linuxなら普通にtmpfsでどうぞ。 $ hdiutil attach -nomount ram://256000 /dev/disk2 $ newfs_hfs /dev/disk2 Initialized /dev/rdisk2 as …

securityコマンド

Mac

MacOSXにはsecurityというコマンドがあって、これを使うとシェルからキーチェーンにアクセスできる。OSXのコマンドはLinuxではなくBSD由来だが、securityはOSXの機能にアクセスするコマンドなのでたぶんOSX専用だろう。 MacOSX - シェルスクリプトで使用する…

Apple Careに登録

Mac

購入したMacのApple Careの登録を忘れていたので、さきほど行った。 Apple Storeで本体と同時に購入すれば、ストアのスタッフが登録してくれるが、今回は本体と別に購入したので自分で登録した。 この登録は購入から1年以内しかできない。Macは1年だが、iPho…

新Mac購入と移行作業

Mac

3年ぶりにMacを買い替えた。新しいマシンは13インチ MacBook Pro (mgx92j/A) 。 13インチ Retina MacBook Proのモニタピクセル数は2560 * 1600。標準解像度は1280 x 800。液晶の4pixelで1dotが構成されるイメージだが、もちろん4pixelを一つの固まりとして…

Excelにエビデンス貼り付けする理由

Excelにスクリーンショットを貼るのは"テストしました"って証拠だから。してないのにテストしたって言う開発者とか、テストしないで納品しようとする会社なんて普通にあるので、対策として一番手っ取り早い方法。 SIerの闇・Excelにエビデンス貼付け - Toget…

pecoでlaunchctl start/stopを呼びやすくする

Mac

最近社内の一部でpecoが流行っているので、流行に乗ってlaunchctl start/stopの対象をペコるシェル関数を作ってみた。 function launchctl-start() { local SERVICE_NAME SERVICE_NAME=$(launchctl list | grep "^-" | peco | head -n 1 | cut -f 3) if [ -n…

node.jsのrequire相対パスうざい問題

node.jsのrequire相対パスうざい問題 - Qiita 結局シンボリックリンク方式が採用されました。

廃止されるかもしれないautoloadの代わりを用意する

Rubyのautoloadは廃止されるかもしれないので、代わりの方法を用意しておきたい。 Rubyにはconst_missingというヤバいメソッドがある。このメソッドは未定義の定数にアクセスした時、NameErrorが発生する前に処理をフックする事ができる。superを呼べばその…

Rubyのautoloadって無くなるの?

Rubyにautoloadという機能がある。 autoload :Hoge, "hoge.rb" と書いておくと、定数Hogeが最初に使用された時にhoge.rbがrequireされる。Rubyのクラスは定数に入っているので、Hogeクラスの定義をhoge.rbに書いておくだけで、Hogeクラスの遅延ロードができ…

Rubyのlオプションがつらい

Rubyのnまたはpオプションは標準入力からテキストを読み込み、行ごとに-eで指定したRubyスクリプトに渡して処理を行う。 $ echo "123" | ruby -pe "" 123 さらにlオプションを付けると行末の改行コードを削除してから処理を行うのだが、chomp!じゃなくてchop…

デフォルト引数でフィボナッチ in JavaScript

Rubyのメソッド引数は奥が深い(その2)または別のフィボナッチ ES6にはデフォルト引数があるのでJavaScriptでも書けそう。 Firefoxでは動いた。 function fib(n, m = (n === 0 || n === 1 ? n : fib(n-2) + fib(n-1))){ return m } undefined fib(1) 1 fib(2…

日本語ページを除外するGoogle検索グリモン修正

Google検索結果のHTMLに変更が入って動作しなくなっていたので直しました〜 https://github.com/paulownia/greasemonkey/blob/master/googleNotInJapanese.user.js Firefox 29とChrome 34で動作確認しております。

REPEATABLE READの話

SQL

MySQL5系で、REPEATABLE READな環境があったのですが、ん?と思うことがあったので、備忘録。 結論から言うと、MySQL5.5 + InnoDBでファジーリードやファントムリードと思われる挙動が確認できた(気がする)。 InnoDBのREPEATABLE READでハマった話 - カイ…

Generator of ECMAScript 6th

ECMAScript 6thのジェネレータについてのスライドです。ネット上にある資料がどれもこれも適当な説明ばかりなのでカッとなって作成しました。 内容を一言でまとめると「ジェネレータは本来、非同期処理のための機能ではなく反復処理のための機能」という事な…

nodeモジュールとしてC++でLinked listを実装

node.jsのアドオン作成の練習として、先日書いたJavaScriptのlinked listをネイティブ実装に移植してみた。 https://github.com/paulownia/node-linkedlist 先日のJS実装と速度を比較した。リスト先頭への大量の要素追加にかかる時間(ms)を表に示す。 1000…

Linked listをJavaScriptで実装

JavaScriptで双方向連結リストを書いてみる。 function List() { this._length = arguments.length; for (var i = 0; i < arguments.length; i++) { this.addLast(arguments[i]); } } Object.defineProperties(List.prototype, { length: { get: function() …

argumentsオブジェクトと仮引数の謎挙動

JavaScriptのargumentsはなかなか不思議なオブジェクトで、配列のようで配列でなかったり、関数スコープで暗黙に作られていたり、きわめつけは… function hoge(a, b) { console.log(a); arguments[0] = 5; console.log(a); } hoge(1, 2); 1 5 !? function …

コンシステントハッシュ法

社内の勉強会で使用したコンシステントハッシュ法の資料です。 私の勤務している会社のあるサービスでコンシステントハッシュを使用しているのですが、そのサービス特有の事情や裏話は資料からカットしているため、ググって出てくる一般的な知識以上の内容は…