2011まとめ

仕事

1月

1月から新プロジェクトが立ち上がり、10月ごろまで掛け持ちで開発リーダーをやった。

3月

震災発生。地震発生時はエイプリルフール企画のMTGをやっていた真っ最中だった。ビルもすごい揺れた。地震発生直後からiPhoneでもNHKとかのサイマル放送をやることになったので、開発チーム総出で24H監視を行った。ちょっとは人様のお役に立てただろうか。

4月

スマホ関係の有料セミナーの講師をやった。

6月

元々やっていたほうプロジェクトの責任者になった。んで会長の別荘に行って作戦会議を行った。軽井沢の別荘は異世界だった。

8月

もう一方のプロジェクトで火事を起してしまった。8月はしんどかったな・・。反省。そして開発リーダーの掛け持ちは無理ってことがわかったので、そっちは別の方にお願いした。

10月

組織体制が変わって開発以外のこともよく見るようになった。売上とか売上とか。とはいえ11月〜12月は結構コード書いたな

全体

2010年以前にくらべて(色々ヘマもやらかしたが)より真面目に責任感を持って仕事に取り組めたような気がする。今の職場でも学ぶことはまだまだある気がする。

プライベートとか趣味とか

なんといっても5月に娘が生まれた。すごくかわいい。ありがとう妻〜ッ。
初めて病院から連れて帰ってきたときは、なんて小さくて儚い存在なんだ!と思ったが、7ヶ月目の今となっては存在感ありまくりで、元気に毎日、泣いたり、笑ったり、ウンチしたりしてます。
そういえば2011年の大晦日にはじめて喋った。何を喋っているかは不明だが「てんてん・・」みたいなことをつぶやいている。。

寄稿

仕事や子育てが忙しくなってきたので、2年半くらい続けてきた日経ソフトウエアへの寄稿を一旦終わらせてもらった。
かなり大変だったけど、よい経験となった。

Apple

iMacとMacBookAirとiPad2と、2011年もアップル製品をいろいろ買った
ジョブズが生きている間にWWDC行きたかった・・。合掌。

趣味の開発

どっちかと言えば、休日でも時間があまったら仕事のコードを書いてた。
ってことで2011年は、まとまった成果物はそれほどないな。
会社のハッカソンで作ったもの:http://www.kenmaz.net/html5/animemaker/

新しくはじめたこと

冬休みから、ふとした思いつきで電子工作を始めた。いつまで続くかな。
ドラムもよく練習していたけど、最近はやってないなー。

旅行

1月に石川県の実家&温泉、2月に箱根、9月にまた石川、って感じ。
娘が大きくなったらアメリカにでも行きたいな。

なわけで、今年もよろしく。

iOSアプリでプッシュ通知を完璧にテストする方法

もしかしたらよく知られていることなのかもしれないけど、割とハマったのでメモ。

iOSアプリでプッシュ通知機能のテストは結構面倒である。特に面倒なのが、アプリ初回起動時の挙動のテスト(以下の画像参照)。

iOSのプッシュ機能は以下のような流れで設定される。

  1. アプリ起動時にregisterForRemoteNotificationTypesメソッドを呼ぶ
  2. 端末はアップルのサーバー(APNs)と通信して、プッシュのためのデバイストークンを取得
  3. アプリの初回起動時にのみiOSが「<アプリ名>はあなたにプッシュ通知を送信します。よろしいですか?」というアラートを表示する
  4. 「はい」ボタンを押すと、APNsに端末が登録されプッシュを受信できるようになる

で面倒なのが、初回起動時のみに表示されるアラートのテスト。このアラートは本当に初回起動時にしか表示されず、アプリを一度削除して、再度インストールしても、このアラートは二度と表示されない。

が、以下の手順を踏めば、再度アラートを表示させることができる。

  1. アプリを削除する
  2. Macのシステム時計を2週間ほど早める(!)
  3. iPhoneを再起動する
  4. iPhoneをMacに接続すると、iPhoneのシステム時計が2週間進む
  5. アプリを再インストールする
  6. アラートが表示される

iPhoneの設定で直接時刻すると、Macに接続した瞬間に時間が補正されてしまって元に戻ってしまうので、仕方なくMac側のシステム時計を変更している。

ちなみにiPhoneのシステム時計をあんまり進めすぎるとプロビジョニングプロファイルの有効期限を超えちゃって実機転送できなくなるのでお気をつけて。

詳しくは以下を参照してくださいー。
http://developer.apple.com/library/ios/#technotes/tn2265/_index.html

Resetting the Push Notifications Permissions Alert on iOS
The first time a push-enabled app registers for push notifications, iOS asks the user if they wish to receive notifications for that app. Once the user has responded to this alert it is not presented again unless the device is restored or the app has been uninstalled for at least a day.

If you want to simulate a first-time run of your app, you can leave the app uninstalled for a day. You can achieve the latter without actually waiting a day by setting the system clock forward a day or more, turning the device off completely, then turning the device back on.

娘のスキル一覧

生まれてから2ヶ月が経過し、横顔が父親に似てきた娘だが、ここで一旦彼女がこれまでに習得したスキルを整理してみる。

  • 生後1ヶ月までに習得したスキル
    • 寝る
    • 起きる
    • おしっことうんちをする
    • 乳を吸う
    • ときどき吐く
    • 泣く
    • へっへっ、あ〜、う〜、う”〜、などと発声する
    • 何かを見つめる
  • 生後2ヶ月までに習得したスキル
    • 拳をしゃぶる [New!]

あと6年くらいしたら「FizzBuzz問題を解ける」くらいに成長してるといいな!

iPadのGarageBand+iRigで簡単多重録音

iRigを買ったらiPadGarageBandがかなり実用的な多重録音環境となった。おもろい!

以下がiPadで録音した音楽。
Download
http://kenmaz.net/tmp/bambina.mp3

こんな感じで録音/編集する。

ちなみにiRigってのは、ギターとiPadをつなげるようなやつ。

IK Multimedia iRig IPIRIGPLGIN

IK Multimedia iRig IPIRIGPLGIN

「Javaツール完全理解」という本を書きました(プレゼントもあるよ)

3/14に日経BP社より「Javaツール完全理解」というムック形式の本が発売されました。

Javaツール完全理解 (日経BPパソコンベストムック)

Javaツール完全理解 (日経BPパソコンベストムック)


私は「第1部」と「第3部」の約150ページ分を執筆しました。2010〜2011年に日経ソフトウエアで連載していた「じっくり学ぶJavaツール」の記事と、2010年に寄稿した特集記事、プラス今回のための書き下ろした記事などが収録されています。

第1部では、Java開発を行う上で欠かせないツールである Eclipse, JUnit, Ant, Subversion, Hudson(Jenkins), Maven, Coberturaなどの活用方法を紹介しています。第3部では、Javaを用いたWebアプリケーションの設計・実装・テスト手法を詳細に解説しています。

とくに第1部で紹介しているツールは、自分自身が仕事をしていく上で欠かせないと感じているものだけを取り上げているので、実際の開発現場でもすぐに活用できるような内容になっていると思います。ある程度Javaでプログラムを書けるようになったけど、もっと効率よく開発できるようになりたい、という方に読んでいただけると嬉しいです。

なお、第2部、第4部はじゅんいち☆かとうさんによる記事です。http://d.hatena.ne.jp/j5ik2o/20110313/1300001708 でも紹介されています。

で、編集部より見本誌を2冊多く頂いたので、もし読んでみたい(タダで!)と言う方がいれば、Twitter(@kenmaz)やgmail(kentaro.matsumae@...)などで連絡していただければプレゼントいたします。どしどしご応募ください(・・・希望者がいなければ実家の両親あたりに記念品として押し付けよう)。

CakePHPのmodel.phpをオーバーライドしたらFatal Error

最近CakePHPを使い始めたんだが、いきなりハマったのでその詳細を書いておく。

再現手順

  • 環境:PHP5.3.5+CakePHP1.3.6
  • CakePHPでは、すべてのモデルクラスの共通処理をapp/app_model.phpに書くのが流儀である。
  • というわけで、app_model.phpを以下のように書いてみる
class AppModel extends Model{
   function __construct() {
        parent::__construct();
        //なにか処理
    }
}
  • 次に、次のようなモデルを定義する。hasManyでBlogモデル同士で親子関係をもたせている。
class Blog extends AppModel {
    var $hasMany = array(
        'Parent' => array(
            'className' => 'Blog',
            'foreignKey' => 'parent_id',
        ),
    );
}
  • 最後にwebブラウザで適当なコントローラにアクセスすると・・・・
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 523800 bytes) in /xxx/cake/libs/debugger.php on line 94
  • Fatal errorで落ちます

何が駄目だったのか

  • AppModelのコンストラクタ引数が空だったのが問題
  • Modelクラスのコンストラクタ内でClassRegistry::addObjectしてるのだがコンストラクタを上書きして隠してしまっているので、いつまでたってもClassRegistryにクラスが登録されず、hasManyの解釈時に「Blogクラスがいないよー、Blogクラスがいないよー、・・・」といつまでも騒ぎ続けて、そのうちメモリがいっぱいになるのであった。
  • コンストラクタをオーバーライドしたいのなら以下のようにすべし
class AppModel extends Model{
   function __construct($id, $table, $ds) {
        parent::__construct($id, $table, $ds);
        //なにか処理
    }
}

結論

  • フレームワークのクラスをオーバーライドしたいときは、とりあえず対象のコードに目を通しておこう
  • エラーが発生するのはいいんですけど、このエラーメッセージから原因を特定するのは難しい
  • てかCodeZineで紹介されているこの記事(http://codezine.jp/article/detail/670?p=2)のサンプルコードはダメなんじゃないか
  • CakePHP触ってまだ1週間くらいなんで間違っている点があれば教えてください

ドラム練習

今日はドラムの練習をしに五反田のスタジオに個人練習に行った。バンドやってたときなんかは何度もスタジオ入ってたけど、ひとりで、しかもドラムを叩きにスタジオに入るなんて初めて。何でドラムを叩く必要があるのかと言われれば特に大きな理由はない。なんとなくドラムを練習したい年頃なのである。で、はじめての個人練の感想を書く。

  • セッティングに時間がかかる。最初の10分はひたすら各楽器の調整。やたらとハイハットが高い位置にあったりクラッシュの角度が微妙だったりするので調整は必須。バンドで入るとだいたいドラマーのセッティングが遅くて早くしろよ、と思っていたけどこういうことだったのね・・・。
  • バスドラム難しい。全体的にドラムって難しいんだが特にバスドラムが思った以上に難しい。かかとをつけて踏むと割と安定するけど脛がしびれてくるし、かと言ってかかとを上げて踏むと雑になってしまう。自宅で練習するときはいつも床を足で直接叩いてバスドラムの練習をしているので、ペダルに慣れないと話にならないっぽい。
  • テンポキープできない。とくに足がモタる。
  • ライドシンバルのリムショットを一定の音量・音質で叩くのが難しい。
  • タム回しはなんか適当にやったら意外とそれっぽい感じに叩ける
  • iPodで音楽を聞きながら練習すると楽しいけど、ヘタさがごまかせるので、あんまり練習になっていない。
  • 1時間はあっという間

とかとか。またそのうちはいろう。