2009年12月4日金曜日

hidesBottomBarWhenPushed は viewDidLoad で呼んだら遅い。

UIViewController の hidesBottomBarWhenPushed というプロパティは、navigationController の Push機能で画面遷移した時に、画面下部のタブバーであったり、ツールバーであったりを隠すかどうかという設定を出来るプロパティ。UIViewController.tabBarController.tabBar というプロパティに変換をかけて、無理矢理この効果と同様の効果を作る事も出来るけど、デメテルの掟に反しているし、非常に煩雑になる事は目に見えているので、出来れば、ちゃんとこのプロパティを使いたいところ。しかし、このプロパティは他の多くの UIViewController のプロパティと違って、viewDidLoad メソッドの中で呼んでも効果が出ない。で、どうすれば良いかというと、単に init系のメソッドの中で設定しておけば、期待した効果が得られる模様。(たとえば、-initWithNibName:bundle: など)



参考したつぶやき:
http://favotter.matope.com/status.php?id=4000286651


UIViewController.hidesBottomBarWhenPushed はナビゲーションにプッシュする前に設定しておかないと効果ないんだなぁ。自分の viewDidLoad で設定してもダメ。考えて見りゃそうかもしれないけど、最初分からなかった。

2009年12月1日火曜日

wp_footer という関数がある事を、WP-PostRating というプラグインに教わる。

たいていの wordpress plugins は wp_header フックに自分の処理に必要な事前処理を書き込んでるけど、今日たまたま install しようとした、WP-PostRating というプラグインは wp_footer で、自分の処理に必要な javascript 関数を読み込んでいた(でも、ページの読み込みを出来る限り早くするという意味では正しいやり方かも知れない・・・)。wp_footer なんていう関数がある事自体知らなかったので、まんまとハマった。


参考URL: http://forums.lesterchan.net/index.php?topic=3753.0


PLEASE ENSURE YOU HAVE <?php wp_footer(); ?> IN YOUR THEME footer.php

fc2 拍手って3000でカンストするらしい。

http://static.fc2.com/image/clap/number/white/3000.gif


ただ、実際にカンストしてるところはまだ見た事無いけど・・・

In wordpress、get_permalink と the_permalink を間違えて、ハマる。

makula.miu.vc のブログに fc2 拍手を入れようという事で、fc2 の拍手サーバーに、ブログのエントリのアドレスを urlencode して送ることになったのだけど、その時書いてハマったのが下のコード



<?php echo urlencode(the_permalink()); ?>


これだと、url encode されない permalink の url が出力されるのだけど、すっかり、echo で出力してるものだと思い込んでいるので、(実際は the_permalink が出力していて、echo は空文字列を出力している)、urlencode が効かない!、wordpress と php のせいで urlencode が効かない!とか思って結構ハマってしまった。正しくは



<?php echo urlencode(get_permalink()); ?>

参考URL: http://stackoverflow.com/questions/274157/wordpress-php-url-encoding-issue

2009年11月28日土曜日

久しぶりに Chromium をアップデート

久しぶりに Chromium (mac) をアップデートしてみたら、以前(8月頃)見れなかった、iPhone OS Reference Library が見れるようになっていた。さすがに正式リリースが近い(rumorだけど)だけある。


個人的には、Chrom(e|ium) のアドレスと検索が一体化したインプットが非常に便利だと思っているので、またしばらく使ってみようかな・・・


追記:アドレスバーに日本語を連続して入力する時に、1回でも変換のエンターを押した以降に入力した内容がどこかに消えてしまう現象が未だに直ってなかった。結構実用上不便だと思う。

2009年11月26日木曜日

Syntaxhighlighter 導入。

Syntaxhighlighter という javascript ライブラリをブログに導入してみた。



<pre name="code" class="言語">
ソースコード
</pre>

と書くだけで、簡単に、ソースコードをカラーリングしてくれて、行数表示をしてくれる上に、コピー用ボタンやら、プリント用ボタンまで付けてくれて、非常に便利。(ただし、Objective-C など、対応してない言語も結構ある。)


blogger の場合は、さらに、Widget 化されていて、Widget ページから、Add to Blogger ボタンを押すだけで、Blog に導入できて、簡単。

2009年11月25日水曜日

Objective-C で class メソッドを書く時に自分のクラスを参照する方法。

+で始まるクラスメソッドを書く時に、
自分のクラスを参照するにはどうしたら良いのかと思って調べていたら、
self で良いらしい・・・


+ (id)objWithSomething {
id obj = [[self alloc] init];
[obj doSomething];
return obj;
}


参考:Objective-C プログラミング言語:メッセージングの仕組み
インスタンスメソッド内では self はインスタンスを参照しますが、クラスメソッド内では self はクラスオブジェクトを参照します。

cocoa の sqlite3 wrapper library

FMDB というライブラリが、良さそう。ドキュメントが無いけど、かなり分かりやすい使用感で、単に SQL を書いたら、欲しい結果が Cocoa らしいインターフェースで返ってくるという感じで、非常に簡単/便利。


追記:FMDatabase クラスの -executeQuery: メソッドでプレースホルダーに数値を入れたい時は、NSInteger 型ではなくて、NSNumber 型で置く必要がある。あと、プレースホルダーを指定する場合は、NSArray のコンストラクタのように、最後に nil を置いてあげる必要がある。


例えば、i が NSInteger で来ているとして、



FMResultSet rs;
rs = [db executeQuery:"select * from secrets where id = ?", [NSNumber numberWithInt:i], nil];

と、呼ぶ必要がある。

2009年11月19日木曜日

iPhone プロジェクト内で普通の関数を定義する。

XCode から、MyFuncs.h と MyFuncs.m という空のファイルを追加して、以下を記述する。


// MyFuncs.h

#import ...

普通の関数宣言 (Objective-C を混ぜても OK)

// MyFuncs.m

#import "MyFuncs.h"

普通の関数定義 (Objective-C を混ぜても OK)


で、普通の関数をぽこぽこ追加した後、
App_Prefix.pch に #import "MyFuncs.h" を追加。


#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "MyFuncs.h"
#endif


これで、プロジェクト内でどこからでも定義した関数を呼べる様になる。

nkf で excel が吐いた csv を utf-8 に変換したら、,(カンマ) が消えた。


nkf -Lu data.csv > data-u.csv


をやったら、なぜか特定の ,(カンマ) が消えてハマった。残念。

mi で開いて、文字コードと改行を変換したらうまく行った。

2009年11月16日月曜日

PHP が性に合わないなと思う PHP の挙動


kt3k-macbook:php-test $ cat this.php
<?php
pRiNt_R(aRrAy(true,TRUE,True,tRuE,tRUe));
kt3k-macbook:php-test $ php this.php
Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => 1
)

2009年11月13日金曜日

PHP の関数名が case insensitive という事を知った。


kt3k-macbook:php-test $ cat this.php
<?php
function a () {echo "2\n";}
A();
kt3k-macbook:php-test $ php this.php
2
kt3k-macbook:php-test $ masaka!

2009年11月6日金曜日

マイ・アニメーションブロック

iPhone アプリ開発で、起動時にスプラッシュスクリーンを入れたいときとか、細かいアニメーションをたくさん入れたい時に、自分用のアニメーションブロックみたいなのを作ると、コードが読みやすくなるし、タイプ量も減って、コードがメンテナンスしやすくなる。


- (void)animDur:(float)dur next:(SEL)sel {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:dur];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:sel];
}

- (void)anim {
[UIView commitAnimations];
}

- (void)sleepDur:(float)dur next:(SEL)next {
[NSTimer
scheduledTimerWithTimeInterval:dur
target:self selector:next userInfo:nil repeats:NO];
}

- (void)splash0 {
[self animDur:0.4 next:@selector(splash1)];
splash.alpha = 1;
[self anim];
}
- (void)splash1 {
[self sleepDur:1.5 next:@selector(splash2)];
}

- (void)splash2 {
[self animDur:1.0 next:@selector(splash3)];
splash.alpha = 0;
[self anim];
}

- (void)splash3 {
[self animDur:1.0 next:nil];
mainView.alpha = 1;
[self anim];
}

2009年11月4日水曜日

ホスト名に "_"(アンダーバー)が入ってると、IE は cookie を受け付けない。

http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/3711fedc-546a-4123-a0b5-33a45a762cc1
http://d.hatena.ne.jp/pirikara/20070920/1190292214

テスト環境で、アンダーバー入りのホストを立てててハマった。
RFC 952 によれば、ホスト名にアンダーバーは駄目らしい・・・
だから、IE は アンダーバーの入ったホストからのクッキーは受け付けない
らしい。

2009年10月29日木曜日

CodeIgniter 言語ファイル

デフォルトでインストールした状態だと、
system/language/japanese というディレクトリが出来てるのに、
動かそうとすると、なぜか
system/language/ja
というディレクトリにアクセスしようとして、言語ファイルが無いと言う。
system/language 以下に、ja という japanese への
シンボリックリンクを貼って解決。
なんでこんな風になっているのか?

default character set latin1

http://sourceforge.jp/projects/codeigniter/lists/archive/users/2008-February/000337.html
http://wota.jp/ac/?date=20061011
http://d.hatena.ne.jp/tueda_wolf/20080716/p7
http://www.abe-tatsuya.com/web_prog/mysql/mycnf_xampp_mysql_1.php

この辺を見ながら、mysql のデフォルトの文字コードを utf8 に変更。
latin1 とか誰が嬉しいんだろう・・・
freebsd の ports からのインストールだと、 /etc/my.cnf がデフォルトで
出来ていないという仕様もなんだか非常に分かりづらい気がする・・・

2009年10月28日水曜日

WP Security Scan でテーブルの prefix を書き換えたら、ログインできなくなった。

WP Security Scan という wordpress のプラグインによれば、
wordpress をインストールした時のデフォルトのデータベースのテーブルのプレフィクスの
"wp_" を、そのままで使うのは危険らしい。
で、そこをクリアしておいて、と橋場さんから頼まれたので、
そのままポチッと、WP Security Scan プラグインの機能の
テーブルプレフィクスを書き換えボタンを押してみたら、
見事に管理画面全体にログインできなくなった。

http://wordpress.org/support/topic/256981

http://beconfused.com/2007/08/28/how-to-solve-you-do-not-have-sufficient-permissions-to-access-this-page-in-wordpress/

上2つを見て、データベース内の wp_usermeta テーブル内の wp_capabilities というレコード
のプレフィクスをユーザー数分だけ、手で書き換えたら、入れるようになった。
メンテナンスされてないプラグインて怖い。

2009年10月23日金曜日

iPhone アプリ内からメーラーを起動するワンライナー


[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto:jacques@example.com"]];


iPhone アプリ内から、メールを出させたい時に。

2009年10月22日木曜日

UIPickerView のドラムを止めるイディオム


[picker selectRow:[picker selectedRowInComponent:n] inComponent:n animated:No];

UIPickerView はドラム式の選択肢インプットを自動で作ってくれる便利な UIKit コンポーネントだけど、ちょっと困るのが、勝手にドラムの慣性を処理してくれているせいで、値の選択に微妙なタイムラグがあるのが、ちょっと面倒。(ユーザー視点で言えば、それが気持ちいい訳だけど、・・・)たとえば、ドラムを目一杯勢いを付けた状態で、即決定ボタンにタッチみたいな操作をされると、picker から取得した値と picker の状態に齟齬が生じて、思わぬバグが混入したりする可能性がある。(しかも、そういう操作のテストが面倒。)そういうバグを防ぐ為に、picker の値を取得する際に、強制的に picker を止める上のイディオムが結構有効だと思う。

2009年10月18日日曜日

UINavigationBar の挙動が邪悪な件

Cocoa Touch フレームワークの UIKit の UINavigationBar の挙動が邪悪(=非論理的)な気がする。

View hierarchy を無視して、親ビューのサイズとかオフセットを無視して、
勝手な位置に固定サイズで勝手に表示される。どうにかコントロールできないものか・・・

2009年10月6日火曜日

Golfscript のダンプ

ダンプしたい場所に行って、

]p#

を挿入。あるいは、

]`#

を挿入。

PHP のダンプ

ダンプしたい場所に行って、


<plaintext>
<?php print_r($GLOBALS); ?>


を挿入。

2009年9月24日木曜日

fancybox の角の×を消す。

fancybox.css の中で、

div#fancy_close の中に、

visibility: hidden;

プロパティを追加。
同様に、div#fancy_title に visibility: hidden を追加して、タイトルを消す事も出来る。

2009年9月20日日曜日

QuickSilver に起動音をつけてみた

QuickSilver の起動(invoke)時に音が出たらどんな感じがするだろう
と思って、いろいろ試していたら、以下の方法で出来る事が分かった。

ステップ 1. Play Sound をインストール

ステップ 2. 以下の AppleScript を作成

tell application "Play Sound"
play "Macintosh HD:System:Library:Sounds:Bottle.aiff"
end tell

tell application "Finder"
open "Macintosh HD:Applications:Quicksilver.app"
end tell

ステップ 3. 作成したスクリプトファイルを QuickSilver のトリガーに登録

あとは、登録したトリガーを押せば、音をならしながら QuickSilver が起動。

2009年9月18日金曜日

なかなか覚えられない css のプロパティ名とその値

改行を禁止する css のプロパティの設定で、
ホワイトスペース:ノーラップ;
というのがあるけど、どこにハイフンが
入るんだったかがなかなか覚えられない。


whitespace: nowrap;
whitespace: no-wrap;
white-space: nowrap;
white-space: no-wrap;

さてどれが正解だったか・・・

2009年9月17日木曜日

Launcher を QuickSilver に

Killer App launcher を見つけて、やっと良いランチャーに出会えた
と思っていた矢先に、QuickSilver という、ある意味究極のランチャーを
発見したので、早速 Killer App launcher を捨てて、QuickSilver を
導入した。

少し使ってみると、単にアプリケーションの launch だけでなくて、
よく使うディレクトリを開いたり、ゴミ箱を空にしたり、電源を切ったり
と、いろんな事がキーボード操作で行えて、かなり快適だなと思った。

PC 前での作業量が多い人間にとっては有用なツールだと思った。

2009年9月12日土曜日

Killer App Launcher

Mac の Dashboard Widget の Killer App Launcher というの導入してみた。
何がどう Killer なのか分からないけど、いろいろ見た中で一番使いやすくて、
デザインも良いので、これを使っていく事に・・・

festival lights

Mac の Dashboard widget で festival lights というのが結構良かった。

http://www.interdimensionmedia.com/widgets/index.html

2009年8月29日土曜日

rsync

rsync コマンドをはじめて使った。


rsync -a workdir/ /Volumes/LaCie-300GB/workdir/


2つ以上の環境で作業したりする場合必要だと思った。

2009年8月12日水曜日

Celtic Knot

http://github.com/jamis/celtic_knot/tree/master

グラフからケルティックノットを作るのだとか言うレポジトリ。パブリックドメイン。

2009年8月5日水曜日