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

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

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

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

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

OSXでmongodした時にDBアクセスが異常に遅い

新しくMacBookProを買い換えてキャピキャピしながらコーディングしていると、前のMacで作ったRailsアプリの動作が異常に重い。

$ mongod を実行後に出力されているログを見ると、以下のような警告が出力されていた。

2015-08-00T00:00:00.000+0900 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000

これの解決方法について。

続きを読む OSXでmongodした時にDBアクセスが異常に遅い

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
}

参考資料

Thunderbolt Displayが突然ブラックアウトする

Thunderbolt Displayが使用中に突然 真っ暗になって電源が落ちてしまったり、Thunderboltを指しても反応しなくなってしまったりしていた。使用不能になるまでの時間が日に日に短くなり、最後には全くうんともすんとも言わなくなってしまった。

時は流れて1年間、諦めきれずに捨てずに放置していたThunderbolt Displayをいい加減にどうにかしようと思って「Thunderbolt Display 通電しない」で検索していたら、似たような症例に悩まされていた方のブログを発見。

[Mac] Thunderbolt Display … 突然の復活

以下、上記ブログより引用。

Thunderbolt Displayが不調に陥った際の復旧策として「ACプラグを抜いてしばらく放置する」方法も有ります。
私も昨日試しましたが、放置していたのは一時間ほどでしたから短かったのかもしれません。
改めて調べてみると半日から丸一日放置しておいたら復旧した…という事例がありました。

対する担当者からの回答は…修理対応も可能と前置きした上で以下のような内容でした。

  • 新規購入(新品、認定整備済製品)した直後は内部に溜まっている静電気により誤動作が起こり易い。
  • ACケーブルを抜いて暫く放置することで静電気が抜けて正常に戻る。
  • 購入直後に発生しACケーブル抜き(静電気抜き)で正常復旧したケースでは殆ど再発していない。

ということですので、私の場合も暫く様子見することにしました。

そんなバカな、電源を抜いて放置する時間を伸ばすだけで復活するなんてありえないと思いつつ、モッタイナイの気持ちが優先して試してみたら、あっさり復活してしまった。

Thunderbolt Display

諦めていた時間も長かったので、3日間ほど電源コンセントとThundebolt Display側のコンセントの両方を抜いて放置していた。直ってよかった。静電気除去シートでも買い足そうか。

iOSでTwitter投稿で「ツイートを送信できません」とエラーが出る

iOSにTwitter投稿する機能をSLComposeViewControllerを使ってつくったところ、「ツイートを送信できません」というエラーが出るという報告がきた。全文を書くと以下のような感じ。

ツイートを送信できません

Twitterに接続できなかったため、ツイート"◯◯◯◯◯◯"は送信できません。

これは、iOSで設定されているTwitterアカウントが、パスワードが間違っていたり変更忘れがあったりで、本当にTwitterに接続できなくなってるだけ。設定 -> Twitter -> @(アカウント名)から再ログインしなおしてもらうと解決する