OSXでbundle installするとmysql2でエラーが起きる

bundle install すると、以下のようなエラーが表示されて、成功しなかった。

Installing mysql2 0.4.3 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
(以下略)

以下のブログ記事を参考にしたら、一瞬で解決。

macOS Sierra で mysql2 の bundle install に失敗する場合 – ハトネコエ Web がくしゅうちょう http://nekonenene.hatenablog.com/entry/2016/10/31/061350

bundle config build.mysql2 --with-opt-lib=/usr/local/opt/openssl/lib --with-opt-include=-I/usr/local/opt/openssl/include

Color Oracle: 超簡単に使える色覚シミュレータ

https://gyazo.com/a032b78edd46b5b066d725c3ed312756

Color OracleというWindows/OSX/Linuxで動作する色覚シミュレータの紹介。

色盲と言われる色覚を持つ人がいる。日本眼科学会によると日本人男性の20人に1人が該当するらしい。日本眼科学会の表現では色覚異常なので、こちらが学術的な名称なのかもしれない。色弱という表現もある。

Webサービスやアプリケーションを開発していると、この色覚をシミュレートしたいことがある。なにせ男性だけでも5%が対象なので、下手なブラウザやOSよりも影響が大きい。

Color Oracleはそんな色覚をシミュレートできるソフト。サイトのデザインは古いけれど、Mac OS X Yosemite 10.10.5で動作することを確認できた。

http://colororacle.org

色覚シミュレータは色々あるけれど、ブラウザに依存せずにすぐにどんな画面でも色覚シミュレートできるのでとても便利。

OSXの回線速度を落とすNetwork Link Conditionerがデバッグに便利

iOS アプリの UI でこれだけはおさえたい、読み込み中の体験を向上させる基本 UI パターン3つ – クックパッド開発者ブログを読んでいて、OSXの回線速度を3GやADSLやWiFiをシミュレートできるNetwork Link Conditionerを知った。iOSにも似たような機能が標準で付いてるんだけど、OSXはApple公式の別アプリとしてリリースされていた。

クックパッドの記事だとmatttさんのブログ記事にリンクが貼ってあるんだけど、スクショでは”Network Link Conditioner”を検索しているのに対して本文では”Hardware IO Tools for Xcode”を検索するよう指示しているというトラップがあるので、要注意。

https://gyazo.com/112a056e686e772e63f3d45d7bf13006

Hardware IO Toolsを探せばその中にNetwork Link Conditionerが入ってます。分かりづらいので以下のリンクからどうぞ。

https://developer.apple.com/downloads/?name=Hardware%20IO%20Tools

余談

リンスっぽいとおもいました。

ngrok: localhostにドメインを割り当てる

ローカルで開発しているWebサービスに、どうしても外部サービスからアクセスさせたい時がある。例えばtwitterやfacebookで共有した時にどのような見た目になるか、を検証する時などはhttp://localhost:3000/を共有するわけにもいかない。

そんな時はngrokを使うと、超便利。ngrokをインストールしたら、以下のようにするだけでhttpアクセスを3000番ポートに飛ばすプロキシサーバーが生成される。

$ ngrok http 3000
ngrok by @inconshreveable                                                                                      (Ctrl+C to quit)

Tunnel Status                 online
Version                       2.0.19/2.0.19
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://7c7*****.ngrok.io -> localhost:3000
Forwarding                    https://7c7*****.ngrok.io -> localhost:3000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

超便利!!

brewでinstallしたmemcachedを自動起動する

memcachedとかmongodとか毎回叩くのが面倒なので当然自動起動したいと思うんだけど、OSXの場合以下のようにシンボリックリンクを貼る方法が多く取り上げられている。

$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents

こんなことやらなくても、brewにサービスの起動を管理する機能を追加できた。

続きを読む brewでinstallしたmemcachedを自動起動する

Objective-Cのnil/Nil/NULL/NSNullの使い分け

Objective-Cには「null」に相当するものがnil, Nil, NULL, NSNullの4種類ある。それぞれの意味の説明はあったが、使い分けに踏み込んだ記事が少なかったのでメモ。

nil

// 初期化に失敗した時はnilが入る
SomeClass *myInstance = [[SomeClass alloc] initWithFailCode];

// 変数に代入
id hoge = nil;
NSObject *fuga = nil;

if (fuga) {
  // false
}
if (!fuga) {
  // true
}
if (fuga == nil) {
  // true
}

// nilにメッセージを送信してもnilが返る
if ([fuga doSomething] == nil) {
  // true
}

// ブロックを渡す時のnullオブジェクトはnilで渡す
[something setCompletionBlock:nil];

Nil

  • Nil はnullクラスオブジェクトを表す
// クラスを取得する
Class something = [NSObject class];

// クラスの指定がnull
Class anything = Nil;

NULL

  • C言語の (void *)0 と同じ
  • void* 型のnullとして使う
[objA addObserver:objB forKeyPath:@"hoge" options:NSKeyValueObservingOptionNew context:NULL];

NSNull

  • nullであることを示す、シングルトンのインスタンス
  • シングルトンの取得には [NSNull null] を実行する
  • インスタンスなので、[NSNull null] == nilNO (false) になる
  • NSArrayやNSDictionaryの値のように、nilを指定できないところでnullオブジェクトを表したい時に使う
NSDictionary *someVars =
@{
  @"keyA" : @"abc",
  @"keyB" : [NSNull null]
 }

// 1. NSNullはシングルトンなのでisEqualで比較できる
if ([someVars[@"keyB"] isEqual:[NSNull null]]) {
  // true
}

// 2.NSDictionary#objectForKeyは存在しないキーを指定するとnilを返す
if (someVars[@"keyC"] == nil) {
  // true
}

// 1.と2.により、キーに値が存在するかどうかは2つの検査が必要
if (someVars[@"keyA"] != nil && ![someVars[@"keyA"] isEqual:[NSNull null]]) {
  // nilではなく、NSNullでもない
  // => true
}

参考資料

nokogiri がlibxml2のせいでインストールできない

Mac OS X Mavericksで”gem i nokogiri”失敗の解決方法 – Qiita
http://qiita.com/t_732_twit/items/a7956a170b1694f7ffc2

上のリンク先を参考にnokogiriをインストールしようとしたものの、文中のgem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"を実行するタイミングでlibxml2 version 2.6.21 or later is required!というエラーが表示されてしまってnokogiriがインストールできなかった。

続きを読む nokogiri がlibxml2のせいでインストールできない