復旧方法:「dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.58.dylib」nodeのエラー

Macでnodeを使おうとすると、「dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.58.dylib」とエラーが出て動かなくなっていたので、以下の方法を試したら復旧した。

brew uninstall –ignore-dependencies node icu4c
brew uninstall –force icu4c
brew install node

これで無事に、nodeが動くようになった。

Googleの知見:リトライ処理間隔と優先順位付け

Google Cloud Platform Blog に投稿された「自業自得の DDoS 攻撃から身を守るには : CRE が現場で学んだこと」が興味深く示唆に富む内容でした。
アプリケーションサーバーとアプリ間の通信の負荷分散と、接続エラー時のリトライ処理間隔をどのように設計すべきかというお話です。

  • リトライ感覚を指数的に増やす:1分、2分、4分、16分
  • ジッターを追加する:リトライ間隔をばらすために1分(20%)のランダム秒を追加する
  • リトライ回数で優先順位をつける
  • リトライと通常接続を分けて処理する。通常処理90%、リトライ10%などで正常性復帰を優先する

npm install でエラーが出たときの対応

Vagrant で立てたCentOSの仮想マシンで、Vagrantの共有ディレクトリを設定しているディレクトリで、「npm install」をするとエラーが出てインストールできない問題が発生しました。

 

image

[vagrant@localhost data]$ npm install request
npm ERR! Linux 2.6.32-573.el6.x86_64
npm ERR! argv "/home/vagrant/.nvm/versions/node/v0.12.4/bin/node" "/home/vagrant/.nvm/versions/node/v0.12.4/bin/npm" "install" "request"
npm ERR! node v0.12.4
npm ERR! npm  v2.10.1
npm ERR! path ../node-uuid/bin/uuid
npm ERR! code EPROTO
npm ERR! errno -71

npm ERR! EPROTO, symlink ‘../node-uuid/bin/uuid’
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>
npm ERR! Linux 2.6.32-573.el6.x86_64
npm ERR! argv "/home/vagrant/.nvm/versions/node/v0.12.4/bin/node" "/home/vagrant/.nvm/versions/node/v0.12.4/bin/npm" "install" "request"
npm ERR! node v0.12.4
npm ERR! npm  v2.10.1
npm ERR! path npm-debug.log.9927247cd1d61b6b742d72329d2f7db2
npm ERR! code ETXTBSY
npm ERR! errno -26

npm ERR! ETXTBSY, rename ‘npm-debug.log.9927247cd1d61b6b742d72329d2f7db2’
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /data/npm-debug.log

対処方法として、githubのnpmのissueに登録されていました。
EPROTO: protocol error, symlink ‘../user-home/cli.js’

symlinks を使用できないので、「–no-bin-links」フラグを立てて回避してね!とコメントがあります。

2015年11月の Windows Update で発生している不具合への対応

社内のWindows 7で、Windows Updateが走って再起動したときに、「画面が真っ暗になり、マウスカーソルのみが表示されて何もできない」問題が発生しました。

15分ほど経過して、待ち切れず電源ボタンを長押ししてしまい、Windowsが起動しなくなったり、「画面が真っ暗になり、マウスカーソルのみが表示されて何もできない」問題に遭遇します。

最初に、「画面が真っ暗になり、マウスカーソルのみが表示されて何もできない」状態になったときに20分前後待つとすんなり終わる可能性もあります。
ダメな場合は、システムの復元で過去の復元ポイントにリストアしてから再起動するとログインできます。

手順は、https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=011923を参照。

HttpClient のレスポンス改善方法

System.Net.HttpにあるHttpClientを使用して通信をする際に設定をしておくとレスポンス速度を改善されることができる方法をメモしておきます。

Http通信時に、gzip、Deflateをヘッダーに設定することでデータを圧縮した状態で受信できるので、通信量を削減することができます。その分、圧縮&解凍のオーバーヘッドはあるのでCPUと通信どちらを取るかという問題はあります。ケースバイケース。

var handler = new HttpClientHandler();
if (handler.SupportsAutomaticDecompression)
{
    handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
}
var client = new HttpClient(handler);
var response = await client.GetAsync("http://yahoo.co.jp");
var content = await response.Content.ReadAsStringAsync();

HttpClientHandlerで設定をして、それをHttpClientのコンストラクタに渡してあげるといい。

設定するとリクエストヘッダーに設定される。

image

レスポンスバイトは4614バイト。

image

ハンドラを渡さないときのリクエストヘッダーは次の通り。

image

レスポンスバイトは、1882バイト。

image