Hatena::ブログ(Diary)

鳥さんの独り言 RSSフィード Twitter

2012年10月07日

[][]iOSデバイスの回転前を検出してみる

やぁ。鳥のようなものだ。
もしかしたら島かも知れないし烏かもしr(ry
あ、毎度うるさいですねすみません(´・ω・`)

今日はチマっとした記事だよん。

iOSデバイス(iPhoneとかiPadとか)の回転後を検知するには、
EZ-NET: iPhone デバイスの回転を検出する : Objective-C プログラミング辺りを
参考にすれば上手くいくんだけど、回転の検知前に、
ビューのリサイズとか、スクロールとか、なんか色々と発生するわけさ。

それを差っ引いても、回転に色々やりたいよね。

ビューが一番上のビューなら、ビューコントローラー(UIViewController)に
ふつーに「willAnimateRotationToInterfaceOrientation」を書いてやれば検出できる。

でも、トップビューでない場合、回転の検出がなぜか出来ない(ぉぃ
そこで、以下のコードを書いてやれば検出できるようになったさ。

ヘッダーに以下。
- (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) orientation;

実装に以下。
- (void) viewWillAppear: (BOOL) animated {
  [super viewWillAppear: animated];
  [self updateLayoutForNewOrientation: self.interfaceOrientation];
}

- (void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation duration: (NSTimeInterval) duration
{
  [self updateLayoutForNewOrientation: interfaceOrientation];
}


- (void) updateLayoutForNewOrientation: (UIInterfaceOrientation) orientation
{
  //ここに回転前の処理を色々書く
}


ただこの方法だと、取得できるのは回転後のサイズだったりするので、
回転前の値はどっか変数で保持しとかないといけない。。
なんか方法ないかの〜?

参考)
iphone - willAnimateRotationToInterfaceOrientation not called on popViewControllerAnimated - Stack Overflow

でわでわノシ

2012年09月22日

[][][]Google Analytics SDK for iOS V2(バージョン2)のマクロを作ってみた

f:id:diveintounlimit:20120922211211p:image

やぁ。鳥だ。

iOS向けのGoogle Analytics SDKの、バージョン2のベータ版が出たわけさ。

何が嬉しいって、専門になってアプリ、OSのバージョンのトラッキングをしてくれるようになったわけさ〜。
それに、ソーシャルやら色々とトラッキングできるよーになったっ
Androidに限って言えば、Playストアからのアクセスも見られちゃう。

ちなみにバージョン1のほうは過去の記事を参照してねん。

で、一式マクロを作ってみたよ。

最初に呼び出す初期化マクロ。
PERIODは溜まったログをGoogle Alanyticsに吐き出す間隔ね。秒単位。

#ifdef DEBUG
#define GA_INIT_TRACKER(ACCOUNT, PERIOD) { \
[GAI sharedInstance].trackUncaughtExceptions = YES; \
[GAI sharedInstance].dispatchInterval = PERIOD; \
[GAI sharedInstance].debug = YES; \
id<GAITracker> tracker = GAI sharedInstance] trackerWithTrackingId:ACCOUNT; \
tracker.useHttps = true; \
}
#else
#define GA_INIT_TRACKER(ACCOUNT, PERIOD) { \
[GAI sharedInstance].trackUncaughtExceptions = YES; \
[GAI sharedInstance].dispatchInterval = PERIOD; \
[GAI sharedInstance].debug = NO; \
id<GAITracker> tracker = GAI sharedInstance] trackerWithTrackingId:ACCOUNT; \
tracker.useHttps = true; \
}
#endif

イベントをトラッキングするマクロ。
これはほぼバージョン1系と一緒。

#define GA_TRACK_EVENT(EVENT,ACTION,LABEL,VALUE) [GAI sharedInstance] defaultTracker] trackEventWithCategory:EVENT withAction:ACTION withLabel:LABEL withValue:VALUE];

ユーザーが何秒その画面に居たかを記録するマクロ。
TIMEで指定した秒数分いた場合に記録されるよっ
(居た時間が記録されるわけではない点に注意)

#define GA_TRACK_TIMING(CATEGORY,TIME,NAME,LABEL) [GAI sharedInstance] defaultTracker] trackTimingWithCategory:CATEGORY withValue:TIME withName:NAME withLabel:LABEL];

ソーシャルトラッキング。
現時点では記録が見れる画面は無いよ。

#define GA_TRACK_SOCIAL(NETWORK,ACTION,TARGET) [GAI sharedInstance] defaultTracker] trackSocial:NETWORK withAction:ACTION withTarget:TARGET];

クラスのトラッキング。呼びたい部分で「GA_TRACK_CLASS」って書く。

#define GA_TRACK_CLASS GA_TRACK_PAGE(NSStringFromClass([self class]));

メソッドのトラッキング。
呼びたいメソッドのどっかで「GA_TRACK_METHOD」と書く。

#define GA_TRACK_METHOD GA_TRACK_EVENT(NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"", NSNumber alloc] initWithInt:-1]);

ページ(画面?Googleはスクリーンと呼んでる)のトラッキング。
呼びたいビューのviewDidLoadの最初とか最後とかで「GA_TRACK_PAGE(@"ページ名")」。

#define GA_TRACK_PAGE(PAGE) [GAI sharedInstance] defaultTracker] trackView:PAGE];

例外系が結構ややこしくなってるので省いてる。

また、EC向けの設定もあるけど、それはマクロにするとややこしくなるだけなので、本家を見てね〜。

本家: Google Analytics SDK for iOS v2 - Overview - Google Analytics - Google Developers

えぇ、難点としてはカスタム変数のトラッキングが無くなってるとこね。。

でわでわ。

2012年09月17日

[][][][]RackhubのphpMyAdminの警告を黙らせてみた

f:id:diveintounlimit:20120903024553p:image

やぁ。鳥のようなものだ。

今回は以前作ったRackhubのphpMyAdminのワーニングを黙らせてみるよ〜。

f:id:diveintounlimit:20120908212307p:image

もくじ

  1. mysqliワーニング、mcryptワーニングを黙らせる
  2. phpMyAdmin 環境保管領域ナンタラ警告を黙らせる

 

mysqliワーニング、mcryptワーニングを黙らせる

今回はコマンドだけザーっと書いていくよん。

これらのエラーを解決するには、どっちもPHPの再コンパイルっていうめんどーくっさい作業が必要だ。
ついでなので、PHP自体のアップデートも行っちゃうよ。

まず、mcrypt導入に必要なライブラリ、"libmcrypt"をゲットしてくる。
URLはmcrypt - Browse /Libmcrypt at SourceForge.netからゲットしてくる。

以下コマンドで、ダウンロード→解凍→コンパイルまでやっちゃうよ。
コンパイルの際に、"--disable-posix-threads"オプションを指定して./configureしている点に注意。
PHP: Mcrypt: インストール手順 - Manual

$ cd ~
$ wget http://downloads.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmcrypt%2Ffiles%2FLibmcrypt%2F2.5.8%2F&ts=1347858671&use_mirror=jaist
$ mv libmcrypt-2.5.8.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fmcrypt%2Ffiles%2FLibmcrypt%2F2.5.8%2F libmcrypt.tar.gz
$ tar xvzf libmcrypt.tar.gz
$ cd ./libmcrypt-2.5.8
$ sudo ./configure --disable-posix-threads
$ sudo make
$ sudo make install

次に、最新のPHPをゲット、解凍して配置。この時の最新バージョンは5.4.7。
PHPのダウンロードURLは、PHP: Downloadsからゲットしてね〜。

$ cd ~
$ wget http://jp2.php.net/get/php-5.4.7.tar.gz/from/jp.php.net/mirror
--2012-09-16 06:59:25-- http://jp2.php.net/get/php-5.4.7.tar.gz/from/jp.php.net/mirror
:
$ tar xvzf mirror
$ sudo mv ~/php-5.4.7 /usr/local/php-5.4.7
$ cd /usr/local/php-5.4.7

で、次に./configure。こっからすごーーーく時間かかるから覚悟してね。

$ sudo ./configure --prefix=/usr/local/php-5.4.7 --with-apxs2=/usr/bin/apxs --enable-mbstring --with-mysql --with-pdo-mysql --with-unixODBC=/usr --with-gd --with-openssl --with-zlib --enable-phar --with-mysqli --with-mcrypt

ほとんどは元からあったオプションのコピー。
今回追加したのは、以下の2つだよ。

  • --with-mysqli:mysqliを導入するためのオプション
  • --with-mcrypt:mcryptを導入するためのオプション(要libmcrypt)

その後、いつもどおりmake、make installする。
場合によるかもだけど、トータルで1時間程度。

$ sudo make
$ sudo make install

旧PHPへのシンボリックリンクがそこここにあるので、全部更新。

$ sudo ln -sf ../local/php-5.4.7/bin/php /usr/bin/php
$ sudo ln -sf ../local/php-5.4.7/include/php /usr/include/php
$ sudo ln -sf ../local/php-5.4.7/lib/php /usr/lib/php
$ sudo ln -sf php-5.4.7 /usr/local/php
$ sudo ln -sf local/php-5.4.7/php /usr/php
$ sudo ln -sf ../local/php-5.4.7/bin/php-cgi /usr/bin/php-cgi
$ sudo ln -sf ../local/php-5.4.7/bin/php-config /usr/bin/php-config
$ sudo ln -sf ../local/php-5.4.7/bin/phpize /usr/bin/phpize
$ sudo ln -sf ../local/php-5.4.7/bin/pear /usr/bin/pear

で、バージョンアップされたことと、拡張が無事に導入されたことを確認しませう!

$ php -v
PHP 5.4.7 (cli) (built: Sep 17 2012 05:45:30)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
$ php -m
:
mcrypt
:
mysqli
:

今のところ要らないかもだけど、初期はphp.iniが居ないので、コピーして作っておくよ。
今回は開発用のをコピる。

$ sudo cp /usr/local/php-5.4.7/php.ini-development /usr/local/php-5.4.7/lib
$ sudo mv /usr/local/php-5.4.7/lib/php.ini-development /usr/local/php-5.4.7/lib/php.ini

これだけだと、「設定ファイルが無い」と怒られるので、
違うディレクトリにある設定ファイルへのショートカット(シンボリックリンク)をディレクトリ内に作る。

$ cd /usr/local/httpd/htdocs/phpmyadmin
$ ln -s /etc/phpmyadmin/config.inc.php config.inc.php

で、Apacheを再起動。

$ sudo apachectl restart

phpMyAdminの画面から"mysqli"、"mcrypt"のメッセージが消えていれば成功だ!
※config.inc.phpの$cfg['Servers'][$i]['extension']の設定を"mysql"から"mysqli"に戻すのを忘れずに!

 

phpMyAdmin 環境保管領域ナンタラ警告を黙らせる

こっちはとてもカンタン。

まず、phpMyAdminにログインして、"phpmyadmin"というユーザーと、同名の空のDBを作る。

次に、"examples/create_tables.sql"にあるクエリを実行する。

で、config.inc.phpを編集し、
「User used to manipulate with storage」「Storage database and tables」セクションの
コメントアウトを全部取る。
"controluser"と"controlpass"の設定は適宜。

一旦phpMyAdminからログアウトし、再度ログイン。
するとエラーは消えてるはずだよん。

以上!
でわでわ。