[CircleCI] Ruby のバージョン指定について

CircleCI の公式ドキュメントに書いてある ruby のバージョンのみ対応しています。

CircleCI

続きを読む

[MongoDB] mongo shell から別 DB へ接続してクエリを実行する

MongoDB で別データベースに接続してクエリを実行する方法をご紹介します。

MongoDB | モンゴディービー

続きを読む

[Node.js] Error: bind EADDRINUSE

Node.js (Express) で forever restart 後に bind EADDRINUSE エラーが頻発する障害が発生しました。

Error: bind EADDRINUSE はそのポートが既に使われてる場合に発生するエラーでして、同じ障害に悩まされた人のために解決方法をメモしておきます。

エラーメッセージ

Error: bind EADDRINUSE
    at errnoException (net.js:904:11)
    at net.js:1084:30
    at Object.12:1 (cluster.js:592:5)
    at handleResponse (cluster.js:171:41)
    at respond (cluster.js:192:5)
    at handleMessage (cluster.js:202:5)
    at process.EventEmitter.emit (events.js:117:20)
    at handleMessage (child_process.js:318:10)
    at child_process.js:392:7
    at process.handleConversion.net.Native.got (child_process.js:91:7)
    at process.<anonymous> (child_process.js:391:13)
    at process.EventEmitter.emit (events.js:117:20)
    at handleMessage (child_process.js:318:10)
    at Pipe.channel.onread (child_process.js:343:11)

まず netstat コマンドで node.js サーバーのプロセスで使うポートが他のプロセスに使われていないか確認します。

$ netstat -nltp | grep 3000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:3000                0.0.0.0:*                   LISTEN      6653/phantomjs

今回は phantom.js が 3000 番ポートで起動していたようでした。phantom.js は利用しているものの他のポート番号を指定して起動させるようにしていたので 3000 番ポートを使っていた理由は不明です。プロセスを停止させて問題ない場合、 ps aux | grep phantomjs で phantom.js の PID (プロセス番号) を特定して kill コマンドでプロセスを終了させます。

最後に forever や pm2 もしくは node コマンドなどで node サーバーを起動させて、エラーログに Error: bind EADDRINUSE が出力されていないことを確認すれば完了です。


参考情報

Node.jsの開発で `warn – error raised: Error: listen EADDRINUSE` って怒られるときの対応 – Qiita

node.js – Nodejs application Error: bind EADDRINUSE when use pm2 deploy – Stack Overflow

Linux ソケット・プログラミングの 5 つの落とし穴

[JavaScript] jsdom memory leak (メモリリーク)

Node.js で jsdom を利用して数万件のウェブページをスクレイピングしたところ out of memory エラーが発生しました。

Node.js のエラーメッセージ

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

jsdom のメモリリーク解決方法

jsdom.env メソッドに渡す callback メソッドの中で使用した window オブジェクトに関連するメモリを解放するために window.close() メソッドを呼ぶ必要があるそうです。

jsdom.env(html, function (errors, window) {
  // free memory associated with the window
  window.close();
});

ドキュメントに書いてある通りに使わないとダメだなぁと痛感しました・・・。


参考情報

tmpvar/jsdom

jsdom and node.js leaking memory – Stack Overflow

javascript – Memory leak in Node.js scraper – Stack Overflow

技術的負債を返却するには何をすればいいか?

最近、技術的負債の返却のやり方について考えていたのですが、そのアプローチの1つとして参考になる記事を教えてもらいました。

■ 技術的負債を返却するには何をすればいいか
A. “技術的負債の返却が上手な人を雇って権限を与える”

ほんとこれ。2年以上ずーっとやって来てわかった。

サービス開発しながら空いた時間で返却とか、時間の流れで積み重なる負債の量にはまるで歯がたたない。積み重なる負債を圧倒的に倒せる能力を持った人を雇うか、組織の何処かから連れてきて権限を与えるしかないと思う。

・引用元:楽天 TechTalk で Ruby と Rails の話をしてきた, 技術的負債を返却するには何をすればいいか – HsbtDiary(2014-12-12)

サービスと事業が成長してきて、サービス開発する人以外も雇える余裕ができてきたら「技術的負債の返却が上手な人」を雇って権限を与えて任せるというのが良さそうですね。問題点としては、そういう人材は市場にほとんどいないのでリクルーティング自体が難しそうということぐらいでしょうか。

[MongoDB] aggregate の実行時間を確認する方法

mongo shell で db.collection.aggregate() の実行時間を確認するコマンドをご紹介します。

MongoDB | モンゴディービー

続きを読む

[Mac] QuickTime Player での画面録画の手順

Mac の QuickTime Player を使って画面を録画する手順をまとめました。

事前準備

Sony の USB マイクを Mac に接続します。

Amazon.co.jp: SONY エレクトレットコンデンサーマイクロホン PCV80U ECM-PCV80U: 楽器

QuickTime Player で画面を録画する

  1. QuickTime Player を起動する
  2. [ファイル] – [新規画面収録] をクリックする
  3. [画面収録] ウィンドウにて [マイク] から UAB-80 を選択する
    QuickTimePlayer-1
  4. 赤丸の録画ボタンをクリックする
  5. クリックするとフルスクリーンで収録されます。… というメッセージが表示される
    QuickTimePlayer-2

    • フルスクリーン収録: クリック
    • 部分収録: ドラッグ
  6. メニューバーの ■ ボタンをクリックして収録を停止する
    QuickTimePlayer-3
  7. 収録停止後、 Command + S でファイルを忘れずに保存する

以上です。


参考情報

Mac標準ソフトQuickTimeで、パソコン画面を音声込みで動画録画する方法

[Android] SSHクライアントアプリ JuiceSSH

休日にサーバーアラートが飛んできても安心して対応できるように、SSHクライアントアプリ JuiceSSH をインストールしました。

JuiceSSH – SSH Client – Google Play の Android アプリ

Nexus5 にインストールしたのですが、SD カードを差すことができないので SSH 秘密鍵はメール経由でコピペしました。

他は UI が分かりやすいので接続先など特に困ることなく設定できました。

[Google] 2段階認証 Google Authenticator を複数端末で設定する方法

Google 2段階認証を管理する Google Authenticator アプリを複数端末で設定する方法をメモ。

Google 公式のマニュアルに書いてあります。

Google 認証システムのインストール – Google アカウント ヘルプ

公式サイトよりも分かりやすいのが下記のサイトです。

iPhone 機種変更時の2段階認証の移行 | Steppin' out

最後に Gmail 以外に、二段階認証を設定しているサービスのURLを貼っておきます。

Dropbox

アカウント – Dropbox

Evernote

セキュリティ概要

GitHub

Security

[Homebrew] brew missing, imagemagick: xz

Homebrew で brew doctor したら xz というライブラリがインストールされてないというエラーが出ました。

$ brew doctor 
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!
 
Warning: Some installed formula are missing dependencies.
You should `brew install` the missing dependencies:
 
    brew install xz
 
Run `brew missing` for more details.

brew missing すると詳細が分かるということだったので、やってみたら ImageMagick の依存ライブラリとのことでした。

$ brew missing
imagemagick: xz

xz を brew install します。

$ brew install xz
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/xz-5.0.7.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring xz-5.0.7.yosemite.bottle.tar.gz
  /usr/local/Cellar/xz/5.0.7: 58 files, 1.5M

もう一度、brew doctor でチェックします。

$ brew doctor
Your system is ready to brew.

正常に戻りました。