カテゴリー : 2014年 6月

[Yeoman] You don’t seem to have a generator with the name chrome-extension installed.

nvm + Yeoman という環境で generator が見つからないというエラーに陥りました。

➜  yo chrome-extension
 
Error chrome-extension 
 
You don't seem to have a generator with the name chrome-extension installed.
You can see available generators with npm search yeoman-generator and then install them with npm install [name].
To see the 0 registered generators run yo with the `--help` option.

yo –help してみてもインストールしたはずの generator が何も表示されない・・・。

➜  yo --help
Usage: yo GENERATOR [args] [options]
 
General options:
  -h, --help     # Print generator's options and usage
  -f, --force    # Overwrite files that already exist
 
Please choose a generator below.

自分のPC環境の Node.js のデフォルトバージョンが v0.10.26 で、今回 Yeoman をインストールしていたのが v0.10.29 で、環境変数 $NODE_PATH の設定が切り替わってないのが原因でした。

echo $NODE_PATH
/Users/bakorer/.nvm/v0.10.26/lib/node_modules
 
➜  echo $NVM_PATH
/Users/bakorer/.nvm/v0.10.29/lib/node

環境変数 NODE_PATH を NVM_PATH を使って、再設定すれば解決です。

export NODE_PATH=${NVM_PATH}_modules
➜  echo $NODE_PATH
/Users/bakorer/.nvm/v0.10.29/lib/node_modules

でも、nvm use で切替えたときに、毎回 NODE_PATH をセットするのは正直メンドイ。

nvm use で一緒に NODE_PATH も切り替えたい。

というわけで、.zshrc に export_node_path と nvmuse 関数を定義しました。

## nvm
if [[ -f ~/.nvm/nvm.sh ]]; then
  source ~/.nvm/nvm.sh
 
  if which nvm >/dev/null 2>&1 ;then
    export_node_path () {
      export NODE_PATH=${NVM_PATH}_modules
    }
 
    nvmuse () {
      nvm use $1
      export_node_path
    }
 
    export_node_path
  fi
fi

これで nvmuse コマンドを使って、Node.js のバージョン切替えと、環境変数 NODE_PATH を一緒に切替えられるようになりました。

➜  ~  node -v
v0.10.26
➜  ~  echo $NODE_PATH
/Users/bakorer/.nvm/v0.10.26/lib/node_modules
 
➜  ~  nvmuse v0.10.29
Now using node v0.10.29
➜  ~  echo $NODE_PATH
/Users/bakorer/.nvm/v0.10.29/lib/node_modules

もっと良い方法ありそうだけど、とりあえずこれで良いかな。


参考情報

Yo doesn't install any generators (nvm, node 0.10.24), yo 1.0.7-pre2 · Issue #125 · yeoman/yo

[JavaScript][BigDecimal] java.lang.RuntimeException: Unknown call signature for obj = new java.math.BigDecimal: object

JavaScript の bigdecimal.js ライブラリを使うときに数値じゃない値でインスタンス生成しようとすると例外が投げられるみたいです。

var bigdecimal = require("bigdecimal");
var obj = {};
 
new bigdecimal.BigDecimal(obj);
// java.lang.RuntimeException: Unknown call signature for obj = new java.math.BigDecimal: object

new bigdecimal.BigDecimal() の引数に渡す値はちゃんとチェックしてあげましょうというお話でした。


参考情報

how do i set a math context? · Issue #1 · iriscouch/bigdecimal.js

[Amazon CloudSearch] [*Deprecated*: Use the outer message field] Validation error for field ‘xxx’: Invalid codepoint 1C

Amazon CloudSearch で検索ワードとしてインポートする JSON データの一部で下記のようなエラーが発生して、インポートできませんでした。

エラーメッセージ

[*Deprecated*: Use the outer message field] Validation error for field 'title_ja': Invalid codepoint 1C

原因のダメ文字は \u001c だったので、これを削除すれば正常に JSON データを読み込ませることが出来ました。

フォーム入力からデータベースに保存された値なのだけど、この文字どうやって入ったのかな・・・?


参考情報

AWS Developer Forums: Which codepoints are disallowed in text …

Guide to Formatting Your Data in SDF for Amazon CloudSearch : Articles & Tutorials : Amazon Web Services

Scalaで正規表現: ユニコードの空白文字29種類にマッチするか試してみた – Qiita

これは備忘録 ASCII文字コード

[JavaScript] java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

JavaScript で浮動小数を計算する npm モジュール bigdecimal.js で、割り算を行う divide メソッド使ったらエラーが発生しました。

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

JavaScript

続きを読む

[Atom.io] 500 Error Page

Atom.io で Package をインストールしようとしたら、何を検索しても表示されない。

Web で https://atom.io/packages/search?q=node とかキーワード検索すると 500 エラーページが・・・

atom-io-500-error

Package を色々と漁りたかったけど、明日は朝からワールドカップ 日本 vs ギリシャ なので寝ます。

[Atom.io] インストール後の初期設定

Atom.io をインストールしてからやった設定をメモ。

(最終更新日:2014/06/20)


Core Settings

まず、Core Settingsの項目は変更せず。

atom_io-default-core_settings


Editor Settings

次に、Editor Settingsの項目はデフォルトは下記のような感じなので、

atom_io-default-editor_settings

↓ のように変更しました。

atom_io-my-editor_settings

Editor Settings の変更点

無効 → 有効

  • Show Indent Guide
  • Show Invisibles

有効 → 無効

  • Soft Tabs
  • Soft Wrap
  • Soft Wrap At Preferred Line Length

Packages

デフォルトで色んなPackageが入ってますね。

Whitespace

半角スペースとか自動で消さないように Disable に変更しました。

とりあえず、以上です。(随時更新予定)

[jQuery] .data() で整数が丸められることがあるので .attr() で取得する

jQuery の .data() メソッドで整数の桁数が多いと丸められることがあるので .attr() で取得しましょう。

jQuery

続きを読む

継続的にアプリ/Webサービスをアップデートしないと二度と開発できなくなる

リソースの都合で開発が止まっている Android/iPhone アプリやウェブサービスがいくつかあります。

久しぶりに軽い改修をしようと思って、開発環境を整えようとしたのですが、それすらできない状況なわけです。

例えば、ウェブサービスの場合は、git clone → npm install してみると特定のモジュールのインストールでコケるわけです。

そして、iPhone アプリは、Apple が頑張ているので Xcode が進化しまくっていて、最新の Xcode でビルドできない状態という感じです。

幸い Android アプリだけは、開発環境の変化はそんなに大きくないので無事にビルドができたわけですが、これも放置しておくとそのうちダメになりそうですよね。

継続的にアップデートしてあげればいいんですけどね。

ある程度、開発が終わって運用フェーズに入った後にたまに気にかけてあげるってのがなかなか腰が重くて・・・。

こんな状況になるなら、こまめにメンテナンスしないとなぁという反省でした。

[Nagios] アラートメールの内容を変更する

Nagios からのアラートメールを社内メンバー(非エンジニア)向けにも送信することになったので、分かりやすいメールの内容に変更しました。

メールの内容を変更するために notify-service-by-email をベースに、notify-service-for-member-by-email コマンドを定義しました。

define command {
  command_name notify-service-for-member-by-email
  command_line /usr/bin/printf "%b" "サーバーの異常を検知しました。\n\nステータス: $SERVICESTATE$\nサービス名: $HOSTALIAS$\nドメイン名: $HOSTADDRESS$\n監視対象: $SERVICEDESC$\n\n■日時: $LONGDATETIME$\n\n■連絡先:\nステータス「CRITICAL」の場合、至急サーバー管理者へ連絡して下さい。\n\n・重岡: 090-XXXX-XXXX\n\n■追加情報:\n$SERVICEOUTPUT$\n\n" | /bin/mail -s "*Alert* $HOSTALIAS$/$SERVICEDESC$ : ステータス $SERVICESTATE$" $CONTACTEMAIL$
}

下記は、メールの内容です。

[件名]:
*Alert* codenote/HTTPS : ステータス CRITICAL
 
[本文]:
サーバーの異常を検知しました。
 
ステータス: CRITICAL
サービス名: codenote
ドメイン名: codenote.com
監視対象: HTTPS
 
■日時: Thu Jun 5 06:04:08 UTC 2014
 
■連絡先:
ステータス「CRITICAL」の場合、至急サーバー管理者へ連絡して下さい。
 
・重岡: 090-XXXX-XXXX
 
■追加情報:
HTTP CRITICAL: HTTP/1.1 200 OK - 146477 bytes in 0.093 second response time

以上です。

screen でよく使うパターン

長時間、掛かるバッチや集計処理を動かすときに、screenを使えば幸せになれるかも。

ということで、screen でよく使うパターンを流れに沿って、まとめてみました。


何かしら時間が掛かるコマンドを実行する

  1. sshログイン
  2. セッション名を付けて screen を起動する
    screen -S samplename
  3. screen を起動できているか確認する (Attached になっていたらOK)
    % screen -ls
    There is a screen on:
            15117.samplename  (Attached)
    1 Socket in /var/run/screen/S-ec2-user.
  4. コマンド実行!!
  5. screen のセッションから一時離脱(デタッチ)
    Ctrl-a Ctrl-d

コマンドの実行が終わったか確認する

  1. sshログイン
  2. セッション一覧を確認する
    $ screen -ls
    There is a screen on:
      15117.samplename  (Detached)
    1 Socket in /var/run/screen/S-ec2-user.
  3. セッション名を指定して再開 (Attached)
    screen -r 14418.samplename

参考情報

screenコマンドを使う – インテグレイテッドシステムズ

screenに名前をつけて管理する方法。まとめ – それマグで!

デタッチされているscreenを削除する | Linuxで自宅サーバ構築