AQUOS PHONE THE HYBRID SoftBank 007SH を買いました

我が家の携帯は、主契約(ガラケー)、iPhone、嫁さんのガラケーソフトバンク三台体制なのですが、ここんところずっと使ってなかった主契約のガラケー(920Tでした。くーまんね)を、アンドロイドの 007SH に機種変更してきました。

これまで主回線だった920Tは、iPhoneがあるからってことでずっとメインで使っていなくて、ただただ迷惑メール処理機と化していたのと、iPhone アプリ開発に Titanium Mobile を使うようになって、アンドロイドも欲しいなぁと思っていたので、主契約だけど開発機と割り切って機種変更することにしました。

前日までは、Twitterで HTC Desire HD がいいよと教えてもらっていたのですが、近場のSBショップも量販店も軒並み品切れ、取り寄せ、ということだったので、在庫のあった007SHに落ち着きました。
一番新しいし、ホットモックを触った感じでは他の機種よりさくさく動くみたいだし、開発用としては十分かなということで。

契約については、なるべくランニングコストを下げることを念頭に、

  • ホワイトプラン(980円)
  • パケットし放題S for スマートフォン(390円〜5,985円)
  • 継続でS!ベーシックパック(315円)、あんしん保障パック(498円?)、世界対応ケータイ(これは使うときにかかる)

になりました。

とりあえず、モバイルデータ通信をオフに設定して、Wi-Fiのみでどのくらいで運用できるのかをしばらく見ていきたいと思います。
iPhoneがあるのでアンドロイドでやりたいことなんてあんまりないんだけれどもw)

jQueryライトユーザレベルアップ勉強会おかわりってのを開催してきました

先日開催した勉強会アンコール開催をしてきました。
もっとも、アンコールを要望してた人はほとんど来ていませんがw

本職で忙しかったこと、Titanium Mobileでの開発、検証などで、勉強会に十分な時間を割く事を怠ったために、全体的にぐだぐだになってしまいました。
この場を借りてお詫び申し上げます。
また、主催者のくせに開始時間を間違って覚えていたおかげで、主催のくせに開催時間に遅刻するという大失態を犯してしまい、重ね重ね大変申し訳ありませんでした。


それはそれとして、前回勉強会との差異を簡単に整理しておくと、

  • 第一部については、前回よりもプログラム部分の説明をちゃんとやった
  • 追加で用意した資料について、簡単に説明して、帰ってから見てもらうことにした

 (ですので前回参加されたかたも資料を更新しておくといいと思います)

  • 第二部については、自分用ファイル作成の部分についてだいぶはしょった。
  • Firebugで、要素を選択、右クリックから要素の調査、コンソール、HTMLタブ等の見方などを説明
  • 前回実施したデバッグ大会については、今回は簡単に説明しただけにとどめて、今回用のデバッグファイルでのデバッグを実施してもらった
  • 第三部については、参加者全員に、自己紹介を含めて、デバッグしたファイルの内容の説明等を行ってもらった
  • あまりいいネタが思い浮かばなかったのは反省点
  • 時間を見誤って結構早くに終わってしまった
  • 懇親会は10人(だっけ?)


時間管理含めて反省点だらけで、あまりよくないなぁと。
開催告知から開催まで、一ヶ月もあると前回の内容を忘れていたり、モチベーションが維持出来ていなかったり、そもそも違うことやってたりで、この辺りは今後どうやってやっていくか、を自分の中でよく考える必要があるな、と思いました。

HTML5+CSS+JavaScriptでiPhoneアプリ開発ができる PhoneGap 始めました

先月はちっとばかりhttp://www.appcelerator.com/products/titanium-mobile-application-development/を使って遊んでいたのですが、せっかく jQuery を使っているので、もっと jQueryをばりばり使えるようにってことで、http://phonegap-fan.com/に手を出してみました。

インストールはとても簡単で、サイトで紹介されていた手順だけでiPhoneアプリはいけました。アンドロイドは実機を持っていないのでパスしています。
Titanium はインストールから初期設定の段階で、資料的な罠にはまってちょっと躓いたりしたのですが、PhoneGapはまったく問題ありませんでした。

今気になってるところは、Titanium だと元のソースコードは1つで、ビルド時にそれぞれの環境用のプロジェクトファイルを吐き出して、それをコンパイルするイメージ(ちょっと正確じゃないかも?)なので、ワンライトマルチユースな感じがするんだけど、PhoneGapはデバイス毎の新規プロジェクトベースのファイルを持っているので、開発者が自分でソースコードの共有を考えないと、ワンライトマルチユースにはならないところ。

個人で開発する分には別にいいのかもしれないけど、仕事で開発しようと考えた時に、ソースコードが(特にメインの部分が)分散しちゃうのは、ハイブリッドアプリなのにもったいない、かなぁとか。

もちろんプロジェクトの構造を工夫するとか、ベースにするファイルのデプロイ方法を工夫するとか、やり方はいくらでもあるんでしょうけれど。

とりあえず、しばらくの間は、PhoneGapで遊んでみて、もうちょっといろいろ見てみようと思っています。

先月末に jQueryがバージョンアップ(主にバグ潰し?)して、1.6.2 になったのと、jQuery Mobile もバージョンが1.0b1になっているので、ファイル名とパスにだけ気をつければ問題なさそうです。

jQueryライトユーザレベルアップ勉強会ってのを主催してきました

ちょっと思いつきとゆーか、jQueryの勉強会したいねって話をついったーでしたら、思ったより反応があったので、タイトルのような勉強会を主催して、やってきました。

イベントの概要は jQueryライトユーザレベルアップ勉強会 : ATND

人前で発表ベースでしゃべるの久しぶりだったのですが、割といいリハビリになったと思うとゆーか、むしろもっとやってもいいかなって気になったりしたりしてなかったりw

第一部

イベントの内容的には、タイトルどおりに、割とjQueryはあんまり使ってないんだよー、くらいの人を対象に、jQueryAPI(メソッド)の分類を本家ドキュメントベースで流しながら、それらがどんなことをするのか、のサンプルファイルのソースコードを見ながら説明をしたのが第一部。

第二部

第二部は、Initializr - Start an HTML5 Boilerplate project in 15 seconds!を使って、自分専用初期ファイル群の作成ってことで、ダウンロードしたファイルの手直しの仕方、その内容とか、WEBの高速化技法込みでだらっと説明して、後半はイベント概要に記載した、お題例を見ながら、FirefoxFireBug+FireQuery で、どのようにして既存のサイトをいじるか(≒jQueryをどうやって書いてみるか)を説明しました。

LTの時間

第三部の始めに、[twitter:@tetsunosuke],[twitter:@hikos] , そして会場を貸していただいたフォトクリエイトさんの新入社員のせたさんの三人にLTをしてもらいました。

LT @ 伊藤さん

[twitter:@tetsunosuke]の分は、

って言ってるくらいだからいいんだけど、○○をやってみた、が大好きな彼のやることで、ちゃんと動くものを作っちゃうところはほんとすごいんだけど、LTでやるにはちょっと駆け足すぎてぽかーんってゆうかw
LTじゃなくて、もう少し時間をとったところで、工夫どころも盛り込んだ形だったらもっとよかったな、とか。
自分が同じ内容で、”LT”をやるなら、表紙、自己紹介、やってみたデモ、ソースの中身はこんな感じ、ファイルはここ、で都合三分で片付けるかなぁ、と思いました。
書いてて思ったけど、LTならLTらしく、LT以上ならLT以上で、ちゃんと割り切ったほうが、聞いてる方としてはいいかな、と思った、という感じ。
あ、あとしゃべるの相変わらず早口だねw もっとゆっくりしゃべっていいのにw

LT @ 篠原さん

[twitter:@hikos]の分は、

を参照してもらうとして、伊藤さんと同じく、完全に、LTとしては長過ぎ、資料としては掘り下げなさすぎ、という印象。
悪く言うつもりはまったくない([twitter:@hikos]は俺にとってとても大事な友達だし)のだけど、LTとしてはちょっとどうか、という話。
[twitter:@tetsunosuke]のと違って、プラグインを拾ってきて、ほとんどコピペのコンストラクタと引き渡す設定を書いただけ、なのであれば、そのバックグラウンドは(当人はそこをしゃべりたがっていたのでほんとアレだけど)別にどうでもいいよね?
むしろ、表紙兼自己紹介、このプラグインを使ってみた(URL)、こう書いてみた(ソース)、こうなった(デモ)、ファイルはここ(DL)、最後に宣伝(w)で都合三分、宣伝いれても四分がベターかなって。
LTは自分のやってみた、を発表するってことで全然構わないと思うけど、聞いてくれた人に何か残さないと意味がないというか、それはただの自己満足になってしまうってゆうか、自分の話したいことじゃなくて、聞いてくれる人が知りたいと思うことを話したほうがいいってゆうか、むしろ野球の話とっぱらって、サンプルデータでのデモにすればもっとシンプルで簡単に短時間で説明できて、それこそLTって言うか。
でも朝からこれの話をしてて、ソースとか取り込んでくれたんだよね、ありがとう。
あくまで個人的意見と、よりよくやるならこんな風にするのがいいんじゃない?って程度で。
あ、あとUstしてくれてありがとう。

LT @ せたさん

ここは意見の別れるところな気もするけど、個人的に一番LTっぽくていいなと思ったのは、せたさんのやってくれたやつでしたw
もちろんもっともっと整理はしないといけないし、もろもろ言うべきことはあるとは思うけれども、開催二、三日前になってからやってー、みたいに言われた状態で、LTとして5分で、という条件下で十分なパフォーマンスだったと思います。
短時間で資料化は困難だったかもだけど、紹介サイトをきちんと紹介する、その中で自分が紹介したいのはこれとこれとこれ、をしっかりリストアップして見せる(それからデモを動かしてみせる)、今後の自分の展望として短期目標を語る、をパワポに出来てたらほんと言うことないくらい。
次は掘り下げる方向のLTを聞いてみたいかなw
きっと場数と経験を積んだらすごく優秀な技術者になるんだろうなぁっていうか、若さゆえ(?)のはつらつさが好印象でした。

第三部

で、第三部は、別のお題5問を見てもらい、好きなやつの回答を作ってもらい、それを発表してもらう、という形式をとりました。
初心者向けとうたったはいいけど、お題例は事前にイベント案内に掲載していたし、必要なFireBugの使い方等も説明したし、いけるかな、と思ってたんだけど、ちょっとプログラマブルな感じにすると、そもそもの言語慣れ?とかの違いのせいか、全部はやりきってもらえませんでした。

ここは次回の課題というか、やってみて、できたら発表して、ってやるのは結構難しいというか、出来ても手をあげて発表しない、とか、そもそもできてない、とか、時間配分が難しいみたい。
一度に五問だと、どれやるかとか誰がやるかとか、時間がかかりすぎてちょっとだれちゃう感じになるのもよくなかったかも。
誰かが出来るんだろうから、自分はやんなくてもいい、みたいな空気が混じると特に難しいかも。
ハッカソンだとやる気まんまんな人が集まってる風だし、問題ないのかもしれないけどw

懇親会

終わった後は残れるメンバーで近くの飲み屋さんに移動して懇親会をして、楽しい時間を過ごさせていただきました。
本当にみんなありがとうございました。

飲み会はねぇ、、、我々の共通の友人に、株式会社レーベンの森山さんという営業マンがいて、これが本当に会話の振りが上手っていうか、参加者みんなに気を配って、丁寧に会話を広げていって、万遍なく全員を会話に巻き込むのが非常に上手な男で、本当にすごくその辺り尊敬していて、真似出来るようになりたいと常々思っていて、今日はちょっとがんばって、ほんと自分の周りだけだったんだけど、それなりに会話をふりこんでみたんだけど、上手く出来てたようなそうでもないような、、、ともかく、まだまだでしたw
(人見知りの自分としてはそーとーがんばったと思うんだけれどもw 自分で自分をほめられる程度にはw)

個人的趣旨について

勉強会はわりと足がかり。どんなに仕事が出来ても出来なくても、能力があってもなくっても、自分とのつながりが希薄なら、それは知らないのと同じ、ただの他人と同じ、ですよね。
勉強会(と懇親会やついったーやmixiなどなど)を通じて、人としてのつながりを濃くしていって、お互いに切磋琢磨出来たり、知らないことを教えあったり、協力して何かやったり、要は友達になれる人を増やしていきたいと思っています。
今回の勉強会に限らず、いろんなところでそんな関係を築ける人と出会いたいなぁと思っています。

全体を通じての(わりとどうでもいい)メモ

  • ATND は本当にキャンセル率高い。想定してたよりもずっと。そして当日ドタキャンも多いw
  • ATNDで送ったメッセージ見てない人多いw 初期の頃にはなかったと思うんだけど、いつの間にかメッセージ機能がついてて、登録者にメッセージ送れるんだけど、それを見てない人多いみたいw えー。。。w
  • ATNDでイベント概要を書き直しても見てない人多い。事前準備してこない人も多い。これは最初にきちんと準備できていないこちら側の問題もあると思うけど。今回はATNDの登録日から開催日まで間があったので、何回かにわけてデバッグ大会のお題を小出しにしてたんだけど、半分くらいの人が見てなかったみたい。これはちょっと誤算。
  • これらを踏まえていても、やっぱり勉強会の開催はいろいろストレスたまるw 席が足りなくなったら困るんだけど、空いちゃうのも困るし、キャンセルするなら前日、当日じゃなくてもっと前にしてよ、とか。発表内容はこれでいいかなとか、もっとこうしたほうがいいかなとか、難しすぎないかな、簡単すぎないかな、とか、ほんとやばいw もっと場数増やさないとダメだw
  • 時間に遅れるのは仕方ないことか。交通事情とかもあるし、一方的に非難は出来ないんだけど、恋人とデートする時も遅刻すんの?って思っちゃうのはよくないことですかね?始業時間に間に合わなくても怒られないようなフレックスな仕事をされてるんですかね?無料の勉強会だから別にいいんですか?そうですか。
  • 参加者名簿もらいそこなったw これは後で頼んでおくけど、参加の名簿を作ってもらってたのに、その情報もらうの忘れてたw
  • 喫煙率下がりまくってる。勉強会の参加者でタバコを吸うのは自分を入れて三人だけ?懇親会の時は自分だけ。肩身狭いわぁw

まとめ

勉強会は場数大事。特に発言する機会を増やすの大事。月一は難しいにしても、もうちょっとがんばって回数増やしたい。
LTならいつでもやれるから、小さい会場とかで、LT大会とかならやれるかなぁとか。本気のLTみたいなw

もっといろんな人と出会う機会を増やせるといいな(人見知りのくせにw)

おまけ

[twitter:@blaue_fuchs]が、jQueryライトユーザレベルアップ勉強会 #jqstudy - Togetterを作ってくれたので、そっちも見てね。

最後に、本日の資料は、google code の ここに置いてあります。
ひとつづつDLするのは馬鹿っぽいし、trunkを丸ごとDLするのも時間がかかるので、

svn checkout http://office-l.googlecode.com/svn/trunk/jquery office-l-read-only 

として落としていただければ。
ちなみに、part3.pdfは閲覧パスワードがかかっています。
(勉強会時に、先に開いてしまって先にごにょごにょされたくなかったのでw)
パスワードは上記Togetterを参照していただくか、[twitter:@raki]または[twitter:@officel]までお問い合わせください。

まだまだ少しのjQueryコードでHTMLテーブルの列にリンク先を指定できるようにする

最近めっきりブログもご無沙汰です。

さて、どっかから回ってきたこの記事が気になったので、もっとイマドキ風にしてみようというエントリー。

元記事 少しのjQueryコードでHTMLテーブルの列にリンク先を指定できるようにする | かちびと.net

そもそも、アクセシビリティとかクロスブラウザとかプログレッシブエンハンスメントとか、まぁどう呼んだって別にいいんだけど、JavaScriptなしの時にアンカークリックしても動作しないなんて、HTMLがそもそも気に入らないので、普通の状態にしています。

<table>
	<thead>
		<tr>
			<th>地名</th>
			<th>読み方</th>
			<th>En</th>
			<th>詳細</th>
			<th>その他</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>東京</td>
			<td>とうきょう</td>
			<td>Tokyo</td>
			<td>日本の事実上の首都がある</td>
			<td><a href="http://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC">ダミーリンク</a></td>
		</tr>
		<tr>
			<td>京都</td>
			<td>きょうと</td>
			<td>Kyoto</td>
			<td>794年に日本の首都に定められた</td>
			<td><a href="http://ja.wikipedia.org/wiki/%E4%BA%AC%E9%83%BD">ダミーリンク</a></td>
		</tr>
		<tr>
			<td>静岡</td>
			<td>しずおか</td>
			<td>Shizuoka</td>
			<td>静岡市と浜松市の2つの政令指定都市を有する<a href="http://yahoo.co.jp/">なぜかYahoo!</a></td>
			<td><a href="http://ja.wikipedia.org/wiki/%E9%9D%99%E5%B2%A1%E7%9C%8C">ダミーリンク</a></td>
		</tr>
		<tr>
			<td>大阪</td>
			<td>おおさか</td>
			<td>Osaka</td>
			<td>関西地区の経済・文化の中心地</td>
			<td><a href="http://ja.wikipedia.org/wiki/%E5%A4%A7%E9%98%AA">ダミーリンク</a></td>
		</tr>
	</tbody>
</table>

テスト用に静岡のところにYahoo!へのリンクを張ってみました。

次、スタイルはどうでもいいけど、参考まで。

<style>
table{
	border:1px solid #ccc;
}
th,td{
	border:1px solid #ccc;
	padding:5px;
}
th {
	color:#fff;
	background-color:#000;
}
tr:hover{
	background-color:#fedede !important;
	cursor:pointer;
}
</style>

hover 状態で色を変えたりマウスカーソル変えたりする程度ならCSSで十分だよね?
(これが動かないブラウザのことは気にしない、のがプログレ(ry)

<script type="text/javascript">
<!-- 
$(function() {
	$("table tr:even").css({background:"#dedede"}); // ゼブラ
	$("tbody td").click(function(){
		var url = $(this).parent("tr").find("td a:first-child").attr("href");
		window.location = url;
	});
});
// -->
</script>

説明する必要があるほど長くないと思うけど、コメントでゼブラって書いている行は、行をしましまにするアレ。
次の行は、クリックターゲットを指定("tbody td"を"#tableのid td"とかすると少し早くなるかも)して、それが押された時に、押された自分自身の(this)、親のtrの(parent("tr"))、子孫要素中のtdの中で最初に出現するアンカー(find())のhrefアトリビュートを拾ってくる、ということをしています。

htmlも古くからある正しい書式で独自拡張なんかしてないし、完全にプログレッシブエンハンスメントで動作するし、ビューとモデルを適切に分離したコードになっていると思うし、クリック時以外にDOMをいじらないし、多少古いjQueryでも動くと思います。

いかがでしょう?

マックでWindowsキーボードを使う時の設定メモ

自宅ではWindows Vista のデスクトップマシンと、Mac Book Pro を併用しています。
つい先日までそれぞれ別に使ってたけど、MBPにWinマシンのディスプレイをつなぐとサブモニタとして使えたので、切替器を買ってきて、ディスプレイとキーボードとマウスを切り替えて使えるようにしてみました。
Macは頭がいいので、サブモニタを勝手に認識してくれる上に、個別に解像度が変えられるし、壁紙も別に出来てなかなか良好です。
どうでもいいけど、MBPは15インチなのに対して、サブモニタは21インチで1600x1200が出せるので、ものすごく快適ですw こんな感じです。

それはさておき、困った事が2、3あって、そのうちの一つがキーボード。
俺のスタイルのせいか、狙った通りの情報にあたらなくて割と困ってます。
とりあえず、http://pqrs.org/macosx/keyremap4macbook/index.html.jaと、http://pqrs.org/macosx/keyremap4macbook/extra.html.jaを使わせてもらうことにして、いくつか解決できたので、そのメモ。
ちなみに、これらのソフトにした理由は、無料であること、状況に応じてマッピングが変えられるところ、かな。一番の理由はぐぐった時に一番早く見つけたとも言うけれどもw

準備

特にないw 上記ふたつを順番にインストールして再起動しただけ。あと、切替器でちゃんと切替できればOK

解決済み設定

ctrl+c,ctrl+v 所謂こぴぺ

Windowsのキーボードだと左コントロールキーとcキー、vキーじゃできなかった。
PCKeyboardHack を使って、Change Control_Lにチェックを入れる(デフォルトの55:Command_LでOK)と、左コントロールキーがコマンドキーとして動作するので、普段のWindowsと同じようにctrl+c,ctrl+vが使えるようになる。MBPのキーボードでcommand+c,vが打ちにくいと思っていた俺にはとてもうれしい状態。

ctrl+insert,shift+insert 所謂古いタイプのこぴぺw

たぶん、古いWindowsユーザしか使わない気がするけど、時々手が勝手に使ってることが。。。w
これはKeyRemap4MacBookの設定で、For PC Users の中の Use PC Style Copy/Paste #3 にぴったりの設定があった。

無変換キーで英数、(変換ボタンではなくて)カタカナ、ひらがな、ローマ字キーでかな入力切替

うん、矛盾してるかもしれないけど、Alt+半角/全角漢字キーよりは、英数キー、かなキーで入力切替したほうが楽だと思っていて、その通りにしたい。
これも PCKeyboardHack で、Enable NFER Keyをチェック(デフォルトの102:EISUUでOK)で無変換キーが英数入力になって、Enable KANA Keyをチェックして、右端セルをダブルクリックして、キーコードを104(KANA)にすることで、カタカナ、ひらがな、ローマ字キーがかな入力に切り替わるようになる。
ぶっちゃけ、マックを買うまでは、Alt+漢字キーでトグルするほうが絶対いいと思ってたんだけど、いつの間にか慣れてしまったようで。。。w

未解決設定

時間足りなくてちゃんとチェックできてないともいうw
誰かご存知の方がいらしたら教えてください。

Alt+Tabでアプリケーションの切替

Winキーがcommandキーになるのはとてもいいというか、そのままでいいと思ってる。でも、Windows使いは、Alt+Tabでアプリケーションを切り替えるのに慣れてるので、その通りにしたい。今のままでもWin(cmd)+Tabで切り替えられるけど、Alt+Tabを無駄にTabとして使わずに、アプリケーションの切替に割り当てられたらもっと素敵だと思うの。

画面キャプチャ

command+shift+3とか、絶対覚えてられないw 使用頻度の低いキーボードショートカットなんて覚えてられないw
Windows では、PrintScreenキーでスクリーンキャプチャ(command+shift+3)できるし、Alt+PrintScreenでウィンドウキャプチャ(command+shift+4でスペースキー)できるので、その通りにしたい。たぶん、このアプリだとデフォルトでは対処できない気がする。PrintScreenの項目少ないし。



とりあえずこんなところ?
また後で追記したりするかも。

Zend Framework 1.11.0 の tests でAllTests.php がエラーになる

昨夜の続き。
PHPUnitがなんとか入ったので /Zend/tests 下の AllTests.php を動かしてみるんだけどエラーが。


$ php AllTests.php

Notice: Please no longer include "PHPUnit/Framework.php". in /Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework.php on line 50

Call Stack:
0.0010 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
0.0014 353880 2. require_once('/usr/local/ZendFramework-1.11.0/tests/TestHelper.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:23
0.0015 358312 3. require_once('/Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework.php') /usr/local/ZendFramework-1.11.0/tests/TestHelper.php:26
0.0036 451800 4. trigger_error() /Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework.php:50


Fatal error: Class 'PHPUnit_Framework_AssertionFailedError' not found in /Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework/IncompleteTestError.php on line 59

Call Stack:
0.0010 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
0.0014 353880 2. require_once('/usr/local/ZendFramework-1.11.0/tests/TestHelper.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:23
0.0044 451916 3. require_once('/Applications/XAMPP/xamppfiles/lib/php/pear/PHPUnit/Framework/IncompleteTestError.php') /usr/local/ZendFramework-1.11.0/tests/TestHelper.php:27

そんなファイルパスだしっぱなしで大丈夫か?
大丈夫だ。問題ない。

ネタはさておき、どうやらこれは、 PHPUnit のバージョンが新しいと出るらしい。
検索してみると、
http://code.google.com/p/yii/issues/detail?id=1641
というのがひっかかる。要は(PHPUnitが)バージョン新しくして構造変わっちゃってるから、PHPUnit/Framework.php を呼んでるところは PHPUnit/Autoloader.php を呼ぶようにして、ってこと?

というわけで、 /Zend/tests/TestHelper.php の require_once('PHPUnit/Framework.php'); を require_once('PHPUnit/Autoload.php'); に置き換えてみる。するとエラーが変わる。(要は今までのところはスルーできたってことだろう)


$ php AllTests.php

Fatal error: Call to undefined method PHPUnit_Util_Filter::addDirectoryToWhitelist() in /usr/local/ZendFramework-1.11.0/tests/TestHelper.php on line 80

Call Stack:
0.0009 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
0.0013 353880 2. require_once('/usr/local/ZendFramework-1.11.0/tests/TestHelper.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:23

んー。まぁ確かに PHPUnit/Util/Filter.php にはそんなメソッドないしね。。。
これもどうやらPHPUnitが新しいせいらしい?検索してみると
http://youtrack.jetbrains.net/issue/WI-3198?projectKey=WI&query=phpunit
こんなページがひっかかる。
PHP_CodeCoverage_Filter::getInstance()->addFileToBlacklist(__FILE__, 'PHPUNIT');
ちょっと違うけど、要は新しいPHPUnitではPHPUnit_Util_Filterクラスをいじくったってことでしょう?
PHPUnit/Framework.php の中の記述も新しいスタイルのコードになってるし。

というわけで、その付近の関連コードも同じように修正してみる。
addDirectoryToFilter は addDirectoryToBlacklist にするみたい。
http://efreedom.com/Question/1-3810825/PHPUnit-Error-AddDirectoryToFilter

今度こそうまくいくだろ、と思ったら。


$ php AllTests.php

Fatal error: Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(/Applications/XAMPP/xamppfiles/lib/php/pear/Zend): failed to open dir: Permission denied' in /Applications/XAMPP/xamppfiles/lib/php/pear/PHP/CodeCoverage/Filter.php on line 115

UnexpectedValueException: RecursiveDirectoryIterator::__construct(/Applications/XAMPP/xamppfiles/lib/php/pear/Zend): failed to open dir: Permission denied in /Applications/XAMPP/xamppfiles/lib/php/pear/PHP/CodeCoverage/Filter.php on line 115

Call Stack:
0.0209 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
0.0216 355200 2. require_once('/usr/local/ZendFramework-1.11.0/tests/TestHelper.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:23
11.8038 2912572 3. PHP_CodeCoverage_Filter->addDirectoryToBlacklist() /usr/local/ZendFramework-1.11.0/tests/TestHelper.php:91

あぁ、うん、xampp についてた 1.9.8 かなんかを使わないようにするために pear 下に入ってた Zend のディレクトリの権限を 000 にしてたんだけど。
てゆうか、そもそも Zend のパスは include してるのになんでそんな違うとこ見に行って権限がないとか言うの。。。
ちゃんとインクルードパスは新しいZendを前にしてあるのに。。。
仕方がないので当該ディレクトリ(/Application/XAMPP/xamppfiles/lib/php/pear/Zend)を mv で他のディレクトリに放り出す。

今度こそ!


$ php AllTests.php

Fatal error: Call to undefined method PHPUnit_Util_Filter::addFileToFilter() in /usr/local/ZendFramework-1.11.0/tests/Zend/Barcode/AllTests.php on line 36

Call Stack:
0.0008 338256 1. {main}() /usr/local/ZendFramework-1.11.0/tests/AllTests.php:0
11.2078 3172232 2. require_once('/usr/local/ZendFramework-1.11.0/tests/Zend/AllTests.php') /usr/local/ZendFramework-1.11.0/tests/AllTests.php:29
12.3489 18378744 3. require_once('/usr/local/ZendFramework-1.11.0/tests/Zend/Barcode/AllTests.php') /usr/local/ZendFramework-1.11.0/tests/Zend/AllTests.php:35

うん、すいません。そもそもちゃんと使い方わかってなかった俺が悪いんだけど、Zend/tests/Zend 以下の AllTests.php 全部に影響するんだね。。。
無理w いちいち直してられない。
それなら古いバージョンのPHPUnitをインストールしたほうがよほど簡単な対応で済むのでわ。。。?

たぶんきっと次の次くらいのリリースまでには新しいPHPUnitに対応したソリューションが出来ると思うので、それまでこれは触らない方向で。。。