OpenCV2.4.0でHAAR分類器を学習させるときの問題と対策
こんにちは、ちきん(@mokemokechicken)です。 今回は、OpenCV2.4でHAAR-Like分類器などを新たに自分で構築する際に発生することがある問題と対策についてです。
続きを読む "OpenCV2.4.0でHAAR分類器を学習させるときの問題と対策" »iOSシミュレータでメモリ警告を定期的に発生させる
こんにちは、ちきん(@mokemokechicken)です。
iOSでは不意に発生するメモリ警告(Memory Warning)に対応する必要がありますが、意外と実装ミスがあったり、検証漏れがあったりする部分でもあります。
iOSシミュレータでは、メモリ警告をシミュレートするメニューがありますが、毎度それをクリックするのも面倒です。
そこで、定期的に自動的にメモリ警告を送るPluginを作りましたのでご紹介します。
これを常にONにして開発をしていると、自然とある程度テストが為されるというわけです。
Objective-CのPropertyの解放忘れを見つけるスクリプト
こんにちは、ちきん(@mokemokechicken)です。
最近は、iPhoneアプリの開発に携わっていまして、そこで「Objective-CのPropertyの解放忘れを見つけるスクリプト」を作ったのでご紹介します。
Objective-C で開発しているときに、一つ頭を悩ますのはメモリの解放周りです。
何に悩むかというと、以下の2パターンです。
(a) オブジェクトを解放し過ぎることによるアプリの異常終了
(b) オブジェクトを解放しないことによるメモリリーク
今回の話は(b)を発見する補助ツールのご紹介です。
何かのお役に立てば幸いです。
Git-Redmine: GitのコミットとRedmineを連携する。チケット駆動開発にも。
おひさしぶりです。
kaoruです。
今回は、日常のGitの利用シーンでRedmineと連携できるGit-Redmineという小さなツールを作ってみたのでご紹介します。
(ツールは後ろのリンクからダウンロードできるので、ぜひお試しください。)
作業管理にRedmine、ソースコードの管理にGitを使っているプロジェクトは最近増えてきていると思います。
Redmineのチケットを見て作業内容を確認、該当するソースコードを修正、最後にGitでコミットしますよね。
Gitでコミットする時には、コミットメッセージというのを書きます。ここには、作業内容や変更点を簡単に記録します。
でも、Redmineを使って作業管理をしているプロジェクトでは、作業内容や変更点はRedmineのチケットの内容と基本的に同じですよね。
だからコミットメッセージを入力するとき、いままで、ウインドウを2つ並べて、Redmineからコミットメッセージの入力欄へのコピペを繰り返し・・・、チケットの番号を書き加えて・・・、とういうことをしていませんでしたか?
これだと、毎回、単純な作業にうんざりだし、コピペミスも怖い。
しかも、コミットメッセージが書くのが面倒で、ついつい2,3文字で済ませちゃった経験ありませんか?

面倒くさいことはツールで解決!
Git-Redmineを使うと、こんな問題を解決できます。
コミット時に作業の流れでチケットを確認できるので、巷で流行りのチケット駆動開発にもぴったりです。
できること
コマンドラインから、Redmineに登録されているチケットを確認できます。
Gitコミット時に、Redmineのチケットのタイトルをコミットメッセージに利用できます。
このツールは、Redmineが用意しているREST APIを利用しています。また、ソースコードをカスタマイズしやすいようにPythonで書いています。
インストール方法
1. 本ツール(Git-Redmine)のソースファイルを取得します。
(例)
$ git clone git://github.com/coiled-coil/git-redmine.git
2. git-redmineというファイルを実行パスの通った場所にコピーします。
(例)
$ cd git-redmine
$ mkdir -p $HOME/bin
$ cp src/git-redmine $HOME/bin/
git-redmineファイルの1行目にpythonのパスが書かれています。
/usr/bin/python以外を利用する場合はパスを書き換えてください。
Python 2.6 以降が必要です。CentOS5では、/usr/bin/python26 などに書き換えてください。
3. RedmineのAPIキーを設定します
APIキーは、Redmineログイン後に、個人設定の中に表示されます。(下の赤線部分)

もし、表示されない場合はREST API機能がオフになっている可能性がありますので、
管理者にお問い合わせください。また、古いRedmineでは利用できない可能性があります。
(例)
$ git config --global redmine.apiKey xxxxxxxxxxxxxxxxxxxxxxxxxxx
4. プロジェクトのGitレポジトリに、プロジェクトのRedmineのURLを設定します。
(例)
$ cd /repos/YOUR-PROJECT
$ git config redmine.projectUrl http://SAMPLE.COM/repos/YOUR-PROJECT
使い方
1. チケットの一覧を表示する。
$ git redmine
2. あるチケットの詳細を表示する。
$ git redmine 1234
3. あるチケットの情報を利用して、コミットを行う。
$ git redmine commit 1234
4. あるチケットの情報を利用して、コミットを行う。同時にチケットの達成率を90%に更新する。
$ git redmine commit 1234 --done-ratio=90
5. あるチケットの情報を利用して、コミットを行う。同時にチケットの達成率を100%、ステータスを解決済みに更新する。
$ git redmine commit 1234 --done-ratio=100 --status=3
ソースコード
こちらにソースコードを置いています。
https://github.com/coiled-coil/git-redmine
完全公開!ソーシャルゲーム設計事例:後編
はじめに
こんにちは。樽八です。
この記事は、前記事「完全公開!ソーシャルゲーム設計事例:前編」の続きになります。
まだの方は是非合わせてお読みください。
○完全公開!ソーシャルゲーム設計事例:プロローグ編
○完全公開!ソーシャルゲーム設計事例:前編
いよいよ後編では、データベース構成とシステム全体の冗長化に関して記述させていただきます。
本丸であり、少々長くなりますがお付き合い下さい。
続きを読む "完全公開!ソーシャルゲーム設計事例:後編" »
完全公開!ソーシャルゲーム設計事例:前編
はじめに
こんにちは。樽八です。
この記事は、前記事「完全公開!ソーシャルゲーム設計事例:プロローグ編」の続きになります。
おさらいとして、今回要求されたシステム要件(機能要件および非機能要件)
- 2000万PV/日のアクセスに耐えるシステムを作ること。
- 会員数の増減に合わせて速やかにシステム全体の構成を変更出来ること。
- 予期される障害発生に関しては、たとえスループットが落ちた状態状態であったとしても通常サービスの継続が可能であること。
- 特定の機器が障害によって復旧不可能な状態に陥っても、サービス継続に必要なデータが復旧可能であること。
- 負荷のピーク時においても、各ページの応答時間が5秒を超えないこと。
- サービスを動かしながらの頻繁なアップデートおよびデータ更新が可能であること。
完全公開!ソーシャルゲーム設計事例:プロローグ
はじめに
こんにちは。樽八です。
ちょうど1年ほど前になりますが、弊社にてGREEプラットフォームにおけるソーシャルアプリ携帯ゲーム「偉人伝心」のリリースを致しました。
その時のシステムに対する機能要求および非機能要求に対してできたこと、できなかったことをエンジニア視点で列挙したいと思います。
システムに対する要求と、達成、未達成状況
ほぼ達成された要求項目(4項目)
2000万PV/日のアクセスに耐えるシステムを作ること。
→負荷試験時において、画像合成、Flash合成ページを含めて、webサーバ10台時の構成において、1400リクエスト/秒(単純計算だと1億2000万PV/日)以上のスループットを達成。
(※残念なことに、これだけの負荷が実際に掛かることはありませんでした。)
会員数の増減に合わせて速やかにシステム全体の構成を変更出来ること。
→サーバの追加に応じてシステム全体のスループットを上げることのできる、スケールアウト可能な構成としました。
→上記負荷試験時の数字もWebサーバの追加によりさらに引き上げることが出来る事を確認しました。
予期される障害発生に関しては、たとえスループットが落ちた状態状態であったとしても通常サービスの継続が可能であること。
→全てのHW機器を冗長化して構築しました。
特定の機器が障害によって復旧不可能な状態に陥っても、サービス継続に必要なデータが復旧可能であること。
→上記、HW機器の冗長化に加えて、データの保有に関しても冗長化を行いました。
続きを読む "完全公開!ソーシャルゲーム設計事例:プロローグ" »Android NFCとNexusSで MifareClassic を読み書きする(後編)
こんにちは、ちきんです。今回も引き続きMifareClassicの話です。
今回は、入手した真っさらな MifareClassic(Mifare Standard)のカードに NdefFormatable#format() をしたところ、
NDEF_DISCOVERED で intentが発生したり、Ndef の instanceが使えるようになりましたのでその辺りのお話と、
MifareClassicシリーズ最終回ということでMifareClassicに関するまとめをしてみたいと思います。
Android NFCとNexusSで MifareClassic を読み書きする(中編)
こんにちは、ちきんです。
前回に続き、 MifareClassicの話です。
今回は、 NdefFormatable を使って、 MifareClassic にデータを書き込めるか調査しました。
結果は、 (おそらく)検証に用いたカードの問題で「中途半端に書込みが成功」というものでした。きっとまっさらなカードなら成功したのではないかと思います。
色々興味深いこともいくつかわかったので、以下、その状況について説明していきます。
Android NFCとNexusSで MifareClassic を読み書きする(前編)
こんにちは、ちきんです。
前回のエントリで「MifareClassicにNdefFormatableで書きこむとどうなるのか?」という疑問がありましたので、調査を続けていきます。
今回は準備として MifareClassic カードに読み書きをしたり、データのバックアップやリストアを実装してみました。
しかし、その過程でいつものようにトラブルが発生し、 解決のためにMifareClassicの仕様を調べてみたところ、
MifareClassicは後戻りできない書込みもできてしまうことなども判明しましたので、その辺りを共有したいと思います。
何せこのカードは私物の保育園の入館証なので、再起不能にしてしまったかと色々冷や汗物語はありましたが、
無駄に長くなるので、なるべく要点を記述していきたいと思います。






