kidoOooOoooOOom

ゲーム開発やってます

elixir と phoenixを軽く触ってみる

elixir の wikipedia Elixir (プログラミング言語) - Wikipedia Elixir (エリクサー)は並列処理、関数型に対応した、Erlangの仮想環境(BEAM)上で動作する汎用プログラミング言語である。ElixirはErlangで実装されているため、分散システム、耐障害性、ソフト…

gruntでjshintとjscsのlintをタスク化

jshintのチェックルールを.jshintrcに、jscsのチェックルールを .jscsrc とかで用意しておき、下記をGruntfile.js に追加する。 grunt.initConfig({ jshint: { files: [ 'lib/**/*.js', 'test/**/*.js', '*.js', ], options: { jshintrc: '.jshintrc' } }, j…

mongodbで正規表現でcollectionを指定してremove

mongodbで正規表現を指定して特定のcollectionsだけremoveしたいケースがあったので、それのメモ。 コンソールからmongoシェルを立ち上げて下記を宣言し、宣言した関数を実行してあげるとok. var removeUserCollections = function() { var removeTargets = …

mongodb設定周りメモ

パラメータの設定方法について。 mongod( or mongos)起動時に、コマンドライン引数か config ファイルで設定する。両方に同じパラメータの設定があった場合、configファイルが優先される。 コマンドラインの場合 $ mongod --plogappend true --verbose confi…

Node.jsでエクセルparseして出力など

本来はやりたくないことだが、大量のエクセルファイルで用意されてしまったデータから必要なものだけ抜き出して整形して出力する必要性があったので対応した。 使用したのは xlsx モジュール例えば、下記のようなテンプレートのエクセルファイルがあるとする…

Node.jsでBasic認証

basic-auth-connect モジュールを使うと簡単にできる。 そのまま user名とpasswordを渡すと、認証エラーの場合は 401を返してくれる。 var basicAuth = require('basic-auth-connect'); app.use(basicAuth(username, password)); ちょっと特殊な処理をかまし…

serverspec v2で NICのリンク速度テスト

serverspecでNICのリンク速度設定のテストを行う場合は下記のように書く。 describe interface('eth0') do its(:speed) { should eq 1000 } end Ubuntu 12.04 のサーバで実行してみると、ethtool が無いよと怒られたので、ansible の taskに追加。 - name: I…

sudoersの文法メモ

serverspecやansibleでsudoの動作設定を変更することがあるので、一応 sudoers の文法について整理しておく。sudoの動作設定は /etc/sudoers に記述されており、visudo コマンドでのみ編集を行うことができる。visudo コマンドは保存時に自動的に構文チェッ…

serverspec v2で複数ホストにrole別にtest実行

serverspec v1からv2でいくつか変更点があり、v1のソースではそのまま実行できない箇所があったので、変更点を見つつ v2 で基本的なテストを実行できるようにした。ディレクトリ構成は下記の通り。最低限のwebのテストを用意する。 ├── Gemfile ├── Gemfile.…

Macのターミナル上でマウス操作を有効にする

tmuxを使っていて、分割したウインドウにマウス操作で移動できないのが不便だったので下記対応をした。 EasySIMBLをインストール https://github.com/norio-nomura/EasySIMBL/ MouseTerm をインストール https://bitheap.org/mouseterm/ 自分の場合は解凍し…

rubyのhighlineでパスワード入力を隠すなど

rubyのコンソールアプリでユーザ名とパスワードを入力させる際に、タイプしたパスワードは隠しておきたい場合は highlineを使えばすぐできるとのこと。 require 'highline/import' username = ask("Enter user: ") { |q| q.echo = true } password = ask("En…

zshの導入と初期設定

今までbashを使っていてそんなに不便に感じることはなかったけど、開発効率化のため zshに入れ替えてみることにした。 参考にしたのは WEB+DB PRESSの zsh大活用の記事。コマンドを書き写すのがちょっと大変だったけれど、分かり易くて良い記事だと思った。W…

serverspec実行できるところまで試してみる

serverspecとは、サーバの状態をテストするためのフレームワークで、Rubyで実装されておりRSpecの書き方に準拠している。 公式サイトはこちら http://serverspec.org/今回、インストールをして簡単なテストが実行できるところまでを試してみたのでメモ。 イ…

node.jsで objectをyamlで出力

node.js で形成した objectを yamlフォーマットで出力したいケースがあったのでメモ。 やりたいこととしては、ansibleのinventoryに記載したhosts情報を元に、tmuxinatorの設定ファイル(yaml)を自動生成すること。 yaml出力には js-yaml モジュールを使えば…

INI LIKEフォーマットをparse

node.jsのプログラムから、ansibleのinventory に記載した hosts情報を使ってごにょごにょしたいような場合、INI フォーマットをparseする ini モジュールを使えば簡単。 iniファイル [webservers] foo.example.com bar.example.com [dbservers] one.example…

複数ホスト、ファイルを同時にtailできるmultitailコマンド

複数ホストにまたがるログファイルを同時にtail できるコマンドがあったのでメモ。 yum install multitailでインストールするだけ。 ホストAのログファイルXとホストBのログファイルをYを連結してtailfする場合は下記のようなコマンド。 multitail -l "ssh u…

nodeでファイルの拡張子を厳格に指定して読み込み

nodeのプロジェクトで、/lib/service/index.js などのファイルから、同ディレクトリ配下のjsファイルを一括してexportsさせるケースがある。例えば下記のようなコード。 var fs = require('fs'); var path = require('path'); var _ = require('lodash'); _.…

macのterminal.appを環境別に色分け設定して共有

tmuxで各環境(dev, stg, prdなど)別のコンソール設定を作成できたので、次は環境別にコンソールの色を変えてみたい。 Macのターミナルappの[環境設定]-[設定]で + を押して新規プロファイルを作成する。 適当にウインドウの色や大きさの設定をし、[シェル]…

tmuxのconf

いくつかのtmux設定記事を参考にして、適当な設定を自分向けに書いたのでメモ。 https://github.com/kidooom/tmux/blob/master/.tmux.confよく使うキーバインドとしては、(prefixはCtrl+aに変更してます) C-a ? : ヘルプ C-a [0-9] : window移動 C-a o : pai…

tmuxとtmuxinatorで開発環境別のコンソール環境整備

dev環境で作業やログ調査をする際に、webサーバをsshで開いてlogをtailして dbサーバをsshで開いてlogをtailしてmanagerサーバを(略)するのが面倒なので、tmuxとtmuxinatorを使ってコマンド一発でこの環境が開くようにする。 tmuxのインストール $ brew in…

Jenkinsジョブをリモートからビルド実行

管理ツールなど外部サーバからJenkinsのジョブを実行したい場合、Jenkinsのジョブ設定にある下記のリモートビルドの設定を行えばOK. 後は、外部サーバから設定したtoken付随のURLを叩くとjobが実行される。

nodejsで文字コードがsjisのcsvを取得して出力

svnサーバにあがっているcsvファイルを、httpsで取得してごにょごにょ処理をする必要があったのでメモ。 最初、httpsモジュール使って書いてたけど、文字化けがどうしても解決できなくて request モジュールに変えて enconding = null のオプションを使った…

mongodbでクエリログを全部みたい

setProfillingLevelを2にする。 $ mongo > use myDb switched to db myDb > db.getProfilingLevel() 0 > db.setProfilingLevel(2) { "was" : 0, "slowms" : 1, "ok" : 1 } > db.getProfilingLevel() 2 > db.system.profile.find().pretty()これでquery log …

[JS] スネークケースのstring/object keys を キャメルケースに変換

最近はガリガリ開発していてそっちでアウトプットしているので、ブログには書く頻度が減ってしまった。 今日書いたコードは糞だけど汎用性あるのでこっちにメモ /** * Convert snake case string or object keys to camel case. */ convertSnakeToCamel: fun…

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(secretKe…

markdownでchecklist

Rebuild.fm を聞いていたら、pull req のコメントに markdown で checklistを書いて進捗具合を可視化するという方法がいいようなので、今後やっていきたい。 markdownでchecklist書く場合は以下のような感じ。 - [ ] チェック項目 - [ ] 未完了タスク - [x] …

gitでやり直し系の操作

Git

こちらを見て勉強。 http://d.hatena.ne.jp/idesaku/20091106/1257507849 前回のコミットをちょっとだけ修正したい場合。 git-commit --amendを使う。ミスコミットをしてしまった後に修正をして、上記コマンドを実行すればおk。 もっと前のコミット操作など…

reponse返却イベントで処理

Nodeでリクエストが来たタイミングと、レスポンスを返すタイミングでログを出したいような場合、下記のようなmiddlewareを登録すればおk。 exports.accessLogger = function(req, res, next) { var logResponse = function() { res.removeListener('finish',…

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 .…

shellで条件式書く時のオプション

dとfを間違えていてハマったのでmemo。オプション: 使用例: オプションの意味 -z: test -z string : string の文字列長が 0 ならば真となる。 -n: test -n string : string の文字列長が 0 より大ならば真となる。 -d: test -d file : file がディレクトリな…