2012-10-08
_ HiddenRadio が届いた
Kickstarter で出資した HiddenRadio がようやく届いた.当初,3月には出荷される予定だったけど,結局10月までかかってしまったけど,まぁ,実際にモノを作ろうとするといろいろと問題も発生するだろうし,ちゃんと出来上がったものが受け取れたのでまずは安心.
9月28日に商品を出荷したことを知らせるメールを受信.商品は DHL で香港から送られてきまて,10月2日に受け取りました.
HiddenRadio は FM 受信機能の付いた Bluethooth なスピーカーです.見た目が特徴的なスピーカーで,デバイスをひねって電源の ON/OFF や音量の調整をします.付属品は,充電用の USB ケーブル,スピーカーコード,FM 用のアンテナケーブル,専用袋です.充電用の AC アダプタは付属しません.PC の USB から給電するか,iPhone などのアダプタを流用して充電します.これは,AC アダプタを付属するかどうかという,出資者へのアンケートの結果から含まれないことになりました.
ぱっと見は充電状態や,Bluetooth のペアリングの状態などを示す LED が見えるくらいで,通常見える部分には特にボタンなどもありません.底面に,Bluetooth,ラインイン,FM の切り替えスイッチと,充電用の USB の口と,ライン入力の口があります.この充電用の USB のケーブルの差し込みが非常にやりにくいのがとても残念.
実際に,Bluetooth でペアリングして音楽を再生させてみると,音声はじゃっかんくもった感じの音で,低音が弱い感じ.同じ,Blutooth スピーカーの Logicool Mini Boombox の方が価格の割に良いように感じられます.
FM についてはチューニングがかなり面倒で状態もわかりづらい.あまり使わなさそう.アンテナケーブルをつけてしまうとせっかくのデザインも損なわれてしまうしなぁ.
HiddenRadio の特徴的な操作のひねって電源を入れたり,音量を調整する仕組みは,スピーカーをどういう材質のものの上で操作するかに影響をうけそうな感じ.HiddenRadio の底面は吸着する素材のものが取り付けられているので,ある程度は滑り止めになっている.ガラステーブルのようなところだと比較的滑らずに操作できるので,片手でも問題なく操作できるけど,材質によっては滑ってしまって,両手で支えて操作をする必要もあるかもしれない.この吸着する素材もどのくらいの持続するのかは気になるところ…
そんな HiddenRadio ですが,現在は公式ストアで$149.95 からPre-Order を受け付けています.11月には価格が $189.95 となるようです.
2012-10-02
_ OS X ネイティブなアプリケーションを含んだ gem を作成してみる
ちょっとしたツールはたいていシェルスクリプトや Ruby なんかでカバーできるんだけど,ときどき OS ネイティブなコードが必要な場面が出てきたりする.そこで,Mac OS X ネイティブなアプリケーションを gem のインストール時にビルドして利用したりできるのだろうかと思い,一応それっぽいことができたようなので,その手順を残しておく.
スケルトンの作成
bundle コマンドを利用して rubygem のスケルトンを作成する
$ bundle gem hello_world_notification --bin
指定した名前でディレクトリが作成されるので,その中に Mac アプリのコードを格納する ext ディレクトリを作成する.
$ mkdir hello_world_notification/ext
Mac アプリの作成

Xcode を利用して Cocoa Application の新規プロジェクトを先ほど作成した ext 以下に作成する.作成されたスケルトンで実行すると空のウィンドウが表示される.サンプルなのでこのままでもいいし,なんでもいいんだけど,ちょっとコードを変更して,起動すると通知センターへの通知を表示して終了するアプリにする.
#import "AppDelegate.h"
@implementation AppDelegate
- (void)dealloc
{
[super dealloc];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSUserNotification *userNotification = [[NSUserNotification alloc] init];
userNotification.title = @"HelloNotification";
userNotification.informativeText = @"Hello World!!";
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification];
[NSApp terminate:self];
}
@end
実行してみるとちゃんと通知センターで通知される.
Mac アプリをコマンドラインからビルドする
Mac アプリは xcodebuild コマンドを利用することで Xcode を使わなくてもアプリをビルドすることができる.また,xcconfig ファイルを利用するとビルド設定を定義することができるので必要な項目を記述して ext 以下に例えば hello_notification.xcconfig として作成する.ここではビルド先のディレクトリや出力先を定義している.
DSTROOT = ../../ INSTALL_PATH = /vendor/hello_world_notification SKIP_INSTALL = NO SYMROOT = build OBJROOT = $(SYMROOT)
GitHub を探してみると,rb-fseventで xcodebuild を利用してビルドを行うrakefile.rbがあったので,これを元に設定値を変えて利用してみる.
実際にビルド可能か,ext 以下で rake コマンドを実行してみると,トップディレクトリの vendor 以下にビルドされた Mac アプリがあることを確認できる.アプリを実行すると通知センターでの通知が表示されて正しく動作している.
Ruby から Mac アプリを呼び出す
呼び出しは単純に外部コマンドを実行する形にする.
#lib/hello_world_notification.rb
require "hello_world_notification/version"
module HelloWorldNotification
BIN_PATH = File.expand_path( '../../vendor/hello_world_notification/HelloNotification.app/Contents/MacOS/HelloNotification', __FILE__ )
def self.execute
`#{BIN_PATH}`
raise "HelloNotification failure" unless $?.success?
end
end
#bin/hello_world_notification #!/usr/bin/env ruby require "hello_world_notification" HelloWorldNotification.execute
これで bin/hello_world_notification を実行すると通知センターで通知されることが確認できる.
gemspec の変更
これまで作成したファイルは git add していれば,gemspec の gem.files には必要なファイルは適切に追加される.追加で必要なのは gem.extensions の項目.ここで Mac アプリのビルド用タスクの rakefile.rb を指定する.あとは TODO の項目も修正する.
gem のビルドとインストール
ここまできたらあとは,実際に gem をビルド,インストールしてみてうまく動作するか確認するだけ.
$ rake build $ rake install $ hello_world_notification
rbenv を利用している場合は rehash が必要.gem のインストール時にちゃんと Mac アプリもビルドできていれば,作成した Mac アプリが起動する.あとはリリースするのみ.
そもそも,なんでこんなことをしたかというと,常駐するスクリプトは Ruby で書いたけど,特定の条件になったときは別途作成した Mac アプリを起動したくて,インストールは gem 経由でまとめてやりたいなぁと思ったことと,Mountain Lion になってからはダウンロードしたアプリは Developer ID での署名がないと,環境によっては単純に動作させられなかったりするけど,自分でビルドした限りではこの制限は影響を受けないようだということ.
また,RubyCocoa や MacRuby を使えばネイティブの Mac アプリが作れるけど,常駐させたときに何もしていないのに数%だけど,CPU リソースを食ってしまっているのが気になった(これは自分のコードが悪いんだろうけど)ので,このアプローチを検討してみたのでした.
あと Ruby から単純に通知センター使って通知するだけなら terminal-notifier を使えば簡単にできる.ただ,通知センターはアプリ単位で区分されるので,terminal-notifier 経由のものはすべてそこに集約されてしまうので,呼び出すアプリ側で通知の設定が変えたいとかなったときは,この方法だとうまく使えそうな気がする.
2012-09-23
_ 店頭に出向かずに MNP で iPhone 5 にした
長年 Softbank を利用してきましたが,約 2 年利用した iPhone 4 から iPhone 5 への乗り換えは au と契約することにしました.Softbankとの付き合いは 12 年 8 か月とわりと長い間でした.au へ MNP をしようと思ったのは,やはり,一括で端末代金を支払ったあとは,各種キャンペーンなどを組み合せると,月々の支払いが1725円ですんでしまうというのが大きいです.2年間の総額で見たときに,Softbank で機種変更したときと比べると5万円以上差があるとなると…
そんなわけで,今回の iPhone 5 の購入は Softbank から au への MNP を店頭に出向かずオンラインと電話のみで MNP してみたので,その流れを書いてみます.
オンラインで iPhone 5の予約
この時点ではまだ au にするか Softbank にするか決めかねていたので,ひとまず両方で予約をとることに.au オンラインショップで予約したのは 9/15 の午前 10 時頃.
本申し込みの案内と MNP 予約番号の発行
9/18 午後8時過ぎに au オンラインショップから本申し込みの案内メールを受信.本申し込みには MNP の予約番号が必要だったので,翌日,9/19 午後8時前に,Softbank の MNP 問い合わせ窓口にて電話で MNP 予約番号を発行してもらう.運良くそれほど込み合っていなかったからか,電話をかけてから5分程度で予約番号の発行ができた.なんかもっと引き止めとかあるのかと思ったら,そんなことなくて,わりとあっさり予約番号が発行されたので拍子抜け.受付時間終了ぎりぎりだったからかなぁ.
本申し込み
9/19 午後8時過ぎ,MNP の予約番号を取得して,そのままオンラインショップの本申し込み画面に入力して申し込み完了.
発送予定日の連絡
発売日の21日には特になんの連絡もなく, 9/22 午前9時過ぎ,au オンラインショップから発送予定日のお知らせを受信.22日に発送予定ということで,順調に行けば翌日には入手できそうなことに.9/23の深夜にクロネコメンバーズの My 荷物を確認すると,新しい荷物が登録されていて,どうやら無事発送されたらしいことがわかった.その後,9/23 の午前9時過ぎに,発送完了のメールを受信.
iPhone 5の到着
9/23 午前11時過ぎ,ようやく iPhone 5 が手元に到着.まずは回線の切り替え手続き.Nano IC カードを取り出し SIM カードトレイを…と,ここで問題発生.同梱されているはずの SIM 取り出しツールがどういうわけか入っていない.仕方がないので,iPhone 4 の箱を引っ張りだしてきて,SIM 取り出しツールを手に入れて,無事に iPhone 5 に SIM を挿入.オンラインで切り替え手続きを行い30分ほど待機.テストコールを行って無事切り替えられたことを確認.
あとは表示される手順通りにアクティベーションを行い,バックアップから復元して,いくつかのアプリケーションなどのパスワードを設定して元通り.その他,MMS のメールアドレスを取得したりして一通りの環境は整いました.最初,iTunes で接続されたiPhoneの電話番号がn/aとなっていて,何か問題でもあるのかと思ったのですが,2,30分ほどで電話番号が表示されるようになりました.
というわけで,MNP の予約番号の取得で電話をかけた以外は,すべてオンラインから MNP で iPhone 5に切り替えることができました.平日はショップに向かう時間もなかなかなく,また自宅の近くには au のショップがないこともあって,すべてオンラインですませられるのはやっぱり便利でした.MNP の予約番号の発行もオンラインでできるとなお良かったのですが.
あとは,普段のオンラインの買い物感覚でいると,注文した翌日には届いてるというのが当たり前になってしまっているので,今回の au オンラインショップでの発送予定日の案内や,配送伝票番号の連絡など,対応がわりと遅かったりして,この辺は利用者側がもっと安心して利用できるようになってほしいと感じたかな.