2012-12-29

JICA WORLD REPORTER #12

JICAワールドレポーター更新。
デング熱?!


11月下旬のことだが、オフィスに出社後、急に寒気を感じ、椅子に座っているのも辛かったので早退。家に帰って熱を測ってみると37度位と微熱気味。横になっていると、その後も熱はどんどん上がり続けて夕方には38.6度までに。このまま熱が上がりつづけたらまずいと思い、勤務先でもある病院の緊急外来に駆け込む。

しばらく待たされた後に熱を測って、パラセタモールを服用させられ1時間くらいエアコンの直下に放置され(意味不明)、その後も熱が下がらなかったので、ようやく採血と検尿、結果が出るまでまたまた1時間くらいロビーで待たされ、ようやくドクターによる診察。たぶんデング熱だろうと、2日後に再検査に来いという。

デング熱とは、デングウィルスが原因の感染症である。熱帯病なので日本ではほとんど聞かないが赤道付近の国々では流行している。デングウィルスは、主にネッタイシマカと呼ばれる蚊により媒介される。症状は、発熱、頭痛、筋肉痛、関節痛、発疹等とされる。

自分の場合、毎日38度以上が一週間続き、39度も数回。その間は頭痛、関節痛や目の奥の痛みが伴う。風邪とは違うのがだんだん良くなっていくという実感が全くない。解熱剤を飲めば熱は下がって、その効果が切れたらまた上がってという繰り返し。また、38度超えているのに寝てても汗はほとんどかかない。そんな症状が1週間続いたかと思うと急に熱が下がる。熱が下がった後は、赤いプツプツした発疹が腕、掌や足の裏に出て夜寝ようと思っても痒くて眠れない。それが2, 3日続く。症状が回復した後も何だか倦怠感があって、ちょっと何かするとすぐ疲れる。

それにしても、先に書いた初日は結局あれだけで4時間以上も病院に、帰ったのは深夜。その2日後は2日後で、病院に行くとすぐ採血されたので今日こそすぐ帰れるかなと思ったら、7時間以上も高熱の中、ロビーで待たされた上に、挙句の果ては検査結果は今日は出ないから帰って2日後に結果を取りに来いと。

元気じゃないと病院行けないな...というのが感想。

そして、未だデング熱かどうかは分からず。国内での検査ではデングウィルスや抗体は検出されず。採血をトリニダード・トバゴにも送ったらしいがそちらは未だ結果は出ず。
なので今のところ病名は「デング熱疑い」。

2012-12-06

JICA WORLD REPORTER #11

JICAワールドレポーター更新。
インディペンデンス デー 


ここドミニカは今年で34歳と非常に若い国である。1978年11月3日にイギリス連邦(Commonwealth of Nations)加盟国として独立した。その独立を記念して、この日に向け各地で色々な行事が開かれる。公式パンフレットによれば、今年の祭典期間は9月23日-11月5日、総イベント数は60にものぼる。その中のいくつかをご紹介。

■クレオール デー (CREOLE DAY) - 10/26 (金)
この日は平日であるが、多くのドミニカ人が正装であるチェックのクレオール衣装を身につけて職場に行く。オフィスワーカーはもとよりスーパーの店員までもがクレオール衣装を着ている。町中がそんなチェック柄一色に染まる一日である。女性のチェックのクレオールの派手さに比べ、男性は控えめである。白シャツ、黒ズボンが基本、シャツあるいはタイとベストにチェック柄を使うか、またはチェックは全く用いず腰にサッシュと呼ばれる赤い布を巻く。



音楽関係イベントもこの期間に多数開催される。中でも規模が大きいのが次の2つである。
■クレオール イン ザ パーク (CREOLE IN THE PARK) - 10/22 (月) - 25 (木)
ボタニカルガーデン(植物園)で開かれる地元ドミニカのバンドが中心で地元住民を対象としているためか入場料も安い(数百円)。平日にも関わらず昼間から夜7時位まで連日開催される。昼間は会社勤めの人間にはちょっと行きづらいが、多くの職場が4時で終わるため、その後に行く人が多く夕方以降が一番盛り上がる。前年に比べ、今年は天候にも恵まれたせいか、超満員だったように思う。

■ワールド クレオール ミュージック フェスティバル (WORLD CREOLE MUSIC FESTIVAL) - 10/26 (金) - 28 (日)
こちらは中国が投資して作られたドミニカ唯一のスタジアム(主目的はクリケット試合用)で開催される。ワールドとつくだけあって海外からも多数のアーティストを呼び、チケット代も高い(3,000円強)。そのためか、地元住民よりは海外からの観光客が目立つ。こちらは連日、夕方頃から始まり夜通しライブが行われ朝方に終わる。住宅地も近くだし大音量なので、日本だと問題にもなりそうな時間帯であるが、こちらの人は特に気にもしてない様子。


独立記念日当日に行われるのが次のイベントである。

■ナショナル デイ パレード (NATIONAL DAY PARADE) - 11/3 (日)
一年間の功労を表彰する式典が行われ、その後、警察官を中心に編成されたパレードバンドが演奏する。日本のパレードバンドの凄さを知っているだけに、練習不足のバラバラ感は否めない。人数少ないし楽器も古そうなものが多いので音も迫力に欠ける。まあ、そこはドミニカ(人)のご愛嬌でもあったりする。ただ、去年よりは確実にましになった気がする。

2012-11-01

JICA WORLD REPORTER #10

JICAワールドレポーター更新。
突撃ストリートライブ


自称スムースジャズバンドのストリートライブにギター1本で飛び入り参加してきた。当日、ギターの他に小型アンプとアンプシュミレーターの付いたマルチエフェクター(いずれも先輩隊員の置き土産)、ついでに変圧器までと準備万端、重い思いをして持っていったのだが、道中でケーブルが断線したようで使えず。結局、ギターからPA卓に直接繋ぐことに。エレキギターを弾いている人はわかると思うが、アコースティックギターやキーボードと違って、エレキギターはアンプ(もしくはシュミレーター)があってこそ一つの楽器といえる。PAスピーカーから聞こえる完全なドライで、まるでラジカセに繋いだかのようなバンドから一人浮いたペンペケな自分のギターサウンドに早くもヤル気半減、出鼻を挫かれた。

ストリートライブの場所は首都ロゾー(タウンと呼ばれる)のほぼ中央にあるチャイナタウン(中華街じゃなくてそういう名の店)の軒下。金曜なこともあり、平日はあまり夜遊びしないドミニカ人もこの日ばかりはタウンに繰り出すため、結構な人だかりに。なので気を取り直して、とはいえ事前に何をやるかなんて知らされてないから全くの行き当たりばったりなのだが、とりあえず何とかバンドについていこうと奮闘。



ジャズバンドとはいうものの、このバンドにはスコアはおろかコード譜すら存在しない。そもそもドミニカ人で楽譜読める人はほんの一握り。このバンドの彼らも楽譜は苦手のようだ。毎週2回集まって練習しているらしいが、どうやってメンバー間でコード進行やらアレンジを共有してるのか不思議に思う。ドミニカ人の特徴でもあるが、あんまり音楽理論だったり楽譜読んだりといったことは、コツコツ勉強したり訓練したりしなきゃならないことだから苦手らしく、それに代わってリズムを中心にもっと感覚的に音楽を捉えている印象。なので多少ベースとキーボードが違うコード弾いててもそんなのお構いなし。パワーでゴリ押しといった感じ。

正直に言うと、このバンドは選曲とかはジャズ風ではあるけど、ジャズバンドじゃない。ソロオーダーも適当過ぎで、一曲のうちにソロが数回まわってきたりするし、4バースや8バースとかもごちゃ混ぜ。互いに好き勝手に個性を主張しながら演奏していて、周りの音を良く聞いてないからジャズの醍醐味でもあるインタープレイなんてものは皆無。

そして何より辛いのがドミニカのバンド全般にいえることだが、いつ終わるか分からないエンドレスのように感じる曲の長さ。E7一発物みたいなジャムでも大したソロをまわす人数が居ないのに30分以上やってたりする。適当な気分で誰かがソロとって、あれ、さっきやったのにまた同じ人がソロとってみたいな感じで、聞いてる方もそうだろうが演奏しているこちらも疲れてきてしまう。

そしてさらに酷いのがエンディング。ソロオーダーが適当だから曲がいつ終わるのかも予測不能、その上、誰もエンディングをどうしようなんて考えてないから、どの曲やってもゴチャゴチャと終わる。何か疲れたんで終わり、みたいな。

たぶん大事な基本的な事を知らないのだろう。Youtubeとかで動画を見て、見よう見まねでこんな風だったかなみたいな感じでやってるように思う。
ちょっと学べば良いだけの事なのに、そして今やその情報を得る事は我々日本人より容易に出来るはずなのに、その辺を物臭がるドミニカ人の嫌な気質を久々にみてしまった。こんなもんだろみたいな。満足点が低いというか。

話は飛ぶが、ここドミニカは本当の意味でのプロフェッショナルが少ない。道路工事やっても、水道工事やっても、大工仕事やってもみんな中途半端。一見して素人仕事にしか思えないということが多々ある。こんな出来だったらわざわざ依頼するまでもなく自分でするのだけどな…という気にさせるられる。


もっとも嫌なことだけが見えたわけではない。逆にドミニカならではの凄いと思えることも多々あった。聴衆と奏者の垣根が低いこともその一つだろう。

小さな子供を抱えたおばちゃんが近づいてきたかと思うと誰かにその子を預け、いきなりマイクを取ってスキャットでアドリブをとりだしたり(それも見事なリズム感と声量で)、今風の格好をしたお兄ちゃんがラップとダンスを披露したり、帰宅途中と思える格好をしたお父さんがバンドをカラオケ代わりにしてレゲエソングを歌ったり。しかもみんなそこそこ様になっている。こうした好きな事、楽しい事に対する彼らの直感的な反応とそのセンスには目を見張るものがある。

嫌な面も良い面も、一言で言ってしまえばすべて直感的、感覚的。例えそれが将来の自分のためだと分かっていても、嫌いだからやらない。面倒だからやらない。逆に今こうしていることは、楽しいからやる。好きだからやる。ドミニカ人をよく知るためのキーワードでもありそうだ。

2012-10-06

JICA WORLD REPORTER #9

JICAワールドレポーター更新。
トレーニング&カンファレンス参加

現在、所属先ではWebアプリケーションフレームワークとしてSymfony2 というオープンソースのフレームワークを用いている。比較的最新のフレームワークであるため、情報が不足しており、とりわけ、ここドミニカでは書籍も全く手に入らなければ、周りに一人も詳しい人がいないような状況。そんななかフレームワークを提供するSensio社(フランス)がトレーニングとカンファレンスを開くということで参加してきた。

会場はサンフランシスコのダウンタウンにあるマイクロソフトのオフィス。Sensio社がフランス企業なこともあり、南北中米大陸では、例年ここサンフランシスコでしか行われていない。そのためカナダや南米からの参加者も多数見受けられた。カンファレンス初日の夜にはオフィシャル カクテルパーティーが開かれ、そこで世界中の技術者と情報交換や連絡先の交換ができたのは良かった。これも、こうしたイベントに参加するメリットの一つだと思う。

一つ驚いたのは、ここでのMacの比率の高さである。会場は見渡す限りMac。各自ラップトップを持参しているが、Windowsのラップトップを持ってきている人は一割以下という印象。日本でもこうしたイベントに参加した事はあるが、まだまだMacの方が少数派のイメージであったが、時代が変わってきているのか、場所柄なのか(町の喫茶店等でみかけるのもMac)、イベントの傾向なのかは分からないが、Macばかりだった。

これまた日本のそれとは違ってレジュメは全く配られず、当然ネイティブ対象なのでプレゼンテーションの進みも早く、自分の英語力では着いていくのがやっと、途中???な時が何度もあったが、それでも得られるものは大きかったし、これから自分自身で克服しなければならない課題も色々見つかった。本当に参加できて良かったと思う。




 念のため、ちょっと専門的だが下記がイベントの詳細。

26日(水) 8:30 - 18:30 トレーニングデイ
コンテキストサービスの作成
依存性の注入の管理
ファンクションテスト(PHPUnit)
HTTPキャッシュ セキュリティ設定

27日(木) カンファレンスデイ 1
8:00 - 9:15 Registration & Breakfast
9:15 - 9:30 Welcome Session
9:30 - 10:20 Keynote
10:40 - 11:30 Security: In Real Life
11:40 - 12:30 Symfony2 search engine propelled by Solr
14:00 - 14-50 Symfony2 meets Drupal 8
15:00 - 15:50 Leveraging the Serializer Component
16:20 - 17:10 Designing HTTP Interfaces and RESTful Web Services
17:20 - 18:20 JEOPARDY

28日(金) カンファレンスデイ 2
9:00 - 9:30 Registration & Breakfast
9:30 - 10:20 Silex, the other Symfony full-stack framework
10:40 - 11:30 In-Depth with Composer
11:40 - 12:30 Bundle Pro-tips
14:00 - 14:50 Symfony2 Form Tricks
15:00 - 15:50 The Wonderful World of the Symfony Components and Composer
17:20 - 18:20 LIGHTNING TALKS - Various Speakers

29日(土) フリー ハッキングデイ


それにしてもサンフランシスコは寒かった。南国ドミニカとの気温差はどの位あったのだろうか。もうかれこれ1年半に亘ってドミニカに住んでいるため暑さに対する耐性はついたが、寒さに対するそれは逆になくなってしまったようだ。スプリングコートも持っていったが、それだけでは足りず秋冬物のセーターを買ってしまった(ドミニカじゃ絶対使わない)。逆に、カナダから来た技術者は、サンフランシスコは暖かいといって半袖半ズボンにサンダルで過ごしていたのにはビックリ。

今回は業務出張なので、観光はほとんどできず。それでも最終日の飛行機に乗る前に少しだけ時間があったので、自転車を借りてゴールデンゲートブリッジを渡ってきた。さすがに20世紀中頃まで世界最大の吊り橋だっただけにやはり大きい。思っていたより遠くて、近くに見えているのになかなか橋までたどり着かない、加えて結構な登りが続き、ようやく橋の上と思ったら猛烈な逆風で自転車が思うように進まない。時間に余裕もないため焦って漕いだので、もう汗だく。でも、この時ばかりはサンフランシスコの冷たい風が心地よく感じた。

2012-09-01

JICA WORLD REPORTER #8

JICAワールドレポーター更新。
Waitukubuli National Trail



ワイツクブリ・ナショナル・トレイル(Waitukubuli National Trail、以下WNT)とは、ドミニカ中を右往左往しながら縦断するトレイルコースのことで、欧州連合(EU)、隣国フランス領マルティニークとドミニカ政府が共同で整備を行った。ちなみにWaitukubuliとは先住民カリブ族が呼んでいたこの島の名称である(前にも書いたがドミニカは先住民カリブ族を排斥せず共存している)。

この辺りのカリブ諸国の中で、国を縦断/横断するくらいにまでトレイルコースが整備されている国は珍しいらしい。トレイルコースは全部で14のセグメントに分割されていて、それぞれ独立している。パンフレット、案内版やWebサイト等で各セグメントの総距離、所要時間、難易度とハイクのタイプおよび見所が表記されている。参加者は事前にどんなハイクであるか想像することができるため、自分の体力や好みに合わせてコースを選択することができる。

各セグメント毎にそれぞれ見所はあるが、全体として、公式サイトの言葉を借りれば、「文化、歴史的遺産、地元民の生活、ドミニカ島の地形、および川、滝、山、エキゾチックな小渓谷や熱帯雨林といった大自然のある最高のドミニカ」を概観することができる。そんな理由もあり、自分はこのトレイルが大好きである。

公式サイト: Waitukubuli National Trail


とはいえ、トレイルコースが整備されていても、多くのセグメントでその入口、出口に行くまでの交通網が整備されていない。そんなところがいかにもドミニカらしい。普通にバスで行ったら、バス降りてからトレイルコースの入口にたどり着くまでに1,2時間以上かかるようなセグメントも多い。そのため、自分はローカルのハイク・グループに入れてもらっている。聞くところによると、ドミニカには大きなハイキンググループが3つあるらしいが、自分が入れてもらっているグループもその中の一つである。

このグループの活動は月に最低1回、多い月は2回、どこかにハイクに行くわけなのだが、普通のハイク グループなのでWNTばかりに行っているわけではないが、それでも結構な頻度でWNTに行く。また、グループのメンバーの中では連続して何日間で14セグメントを制覇するか競っている人達もいて(特に女性数名が)、今のところの記録は連続3日間らしい。初めてこの話を聞いたときには耳を疑った。自分にはとてもじゃないが無理だ。1日1セグメントで良いから14日間で全て制覇しろといわれても疲労等考えると正直厳しいと思う。最近はその往復に挑戦しようと思うと言っていた。全く恐れ入る。

実は、自分は根っからのハイク好きとかではない。ここドミニカに派遣されるまで、日本ではほとんどハイクや山登りをしたことがない。たまに年に1度くらいは高尾山に登っただけである。そんな自分がここまでハイクにほれ込むのも、「何もないが自然はある国ドミニカ」のせいなのか(笑) 帰国(半年後)までに、WNTの全14セグメントを制覇しようと思っている。

自分の備忘も兼ね、各セグメントの特徴(距離、所要時間とタイプ)と自分の達成状況。

  • #1 Scotts Head to Soufriere Estate
    7km, 5.5時間, Easy hike, family hike
    2011年10月8日
  • #2 Soufriere Estate to Bellevue Chopin
    10.8km, 6.5時間, Moderate hike
    2011年6月5日(Walk and Smileイベント)
    2012年6月16日(PUBLIC SERVICE DAY ACTIVITY)
  • #3 Bellevue Chopin to Wotten Waven
    14.9km, 7時間, Moderate hike
    2012年2月4日(ローカルハイクグループDwivayez)
  • #4 Wotten Waven to Pond Casse
    11.7km, 6時間, moderate hike /nature lovers
  • #5 Pont Casse to Castle Bruce
    12.8km, 6時間, Easy hike, family hike
    2012年6月19日
  • #6 Castle Bruce to Hatten Garden
    15km, 7時間, moderate hike
    2013年1月5日
  • #7 Hatten Garden to First Camp
    12.6 km, 6時間, Moderate hike/nature lovers
  • #8 First Camp to Petite Macoucherie
    10km, 6時間, Difficult (strong hikers who are well trained)
  • #9 Petite Macoucherie to Colihaut Heights
    9.8km, 7時間, hard hike/nature lovers
    2012年6月2日(ローカルハイクグループDwivayez)
  • #10 Colihaut Heights to Syndicate
    6.4km, 4時間, Easy hike, family hike
    2012年5月19日
  • #11 Syndicate to Borne
    10km, 7時間, Hard hike/long hike suited to nature lovers
    2012年4月6日(別のローカルハイクグループ)
  • #12 Borne to Penville
    9.5km, 7時間, difficult & long hike
    2013年7月6日(ローカルハイクグループDwivayez)
  • #13 Penville to Capuchin
    8km, 3.5時間, moderate hike
    2012年12月30日
  • #14 Capuchin to Cabrits
    10.8km, 5時間, moderate hike
    2012年12月30日
達成: 11セグメント
残り: 3セグメント(#4, #7, #8)
(更新日: 2013年7月7日)

少なくとも一月に1回行ければ何とかなる。
ただ、特に交通不便な#7,#8を残してしまっているのがちょっと気がかり...

2012-07-31

JICA WORLD REPORTER #7

JICAワールドレポーター更新。
多事多端


最近、ホントに活動(仕事?)が忙しい...そんなでこのブログも投稿が滞りがち。週末の予定は全てキャンセル、平日も毎晩2時くらいまで家で仕事をしてる。ここ2ヶ月間で出かけたのは平日の夜に外食に3回行っただけという引きこもり具合。万国共通でこの業界(IT系)は納期前になるとどうしてもこうなってしまうのか、自分のやり方が悪いのか、何だか日本で仕事をしていたときのようになってきた。

とはいえ配属先から納期や残業をとやかく言われているわけではなく、今まで自分で決めた納期を守れずズルズルと延長してきた自分に嫌気がさし、覚悟を決めてやってるわけなのだが...それにしてもやらなきゃならないことが多過ぎる。こんなに働いてるJICAボランティアは世界中探しても他に居ないんじゃないかなと思う。

こんな状況が9月末までは続きそう(というか、その頃までには終わらせたい...)。

開発環境のご紹介

朝9時に出社して昼休みに家に戻って1時間弱仮眠して、また職場に戻って6時頃に帰宅。その後は夕飯を食べてから2時くらいまで仕事をしてシャワー浴びて寝る。仕事中は独り黙々とコーディングしているだけ。そんな毎日の繰り返しなのでブログネタがないというのが正直なところ。というわけで、今回は同職種(同業者)向けに開発環境のご紹介。何という内輪ネタ(苦笑)。

開発概要:
ドミニカ国の保健情報を統合管理するWebサイトの構築

  • サーバー: Ubuntu 12.0.4 LTS
  • Webサーバー: Apache 2.2
  • DB: MySQL 5.5
  • 言語: PHP 5.3, Twig, Ajax(jQuery)
  • フレームワーク: Symfony2
  • 主要追加バンドル: StofDoctrineExtensionsBundle, DoctrineFixturesBundle, JMSSecurityBundle, KnpPaginatorBundle
  • ツール, モジュール: Google Maps API, FPDF, Spreadsheet_Excel_Writer
  • テストフレームワーク: PHP Unit, Stagehand_TestRunner
  • ソース管理: Git, git-flow, GitHub

こうして見るだけでも色んな知識が必要なのが分かる。しかも日本で仕事してた時よりはるかに最新の開発環境。ちなみに要求定義~設計~コーディング~テストまで全て独りです。根っからのソフト開発屋なのでWebの画面デザインとかあまり得意じゃないんだけどな...

2012-07-02

NetBeans で PHPUnit を使う際の注意

NetBeans 上で PHPUnit が使えるのは非常に便利だが、その際にNamespace を用いているクラスの場合、名前解決に結構クセがありハマったのでメモ。
以下いくつか注意点を列挙。

PHPUnitフレームワーククラス自体の名前解決

当然ながらテストクラスはnamespace宣言により、テスト対象クラスの名前空間になっているので、継承時にPHPUnit_Framework_TestCaseだけではダメで最初に"\" が必要。サイトや書籍のサンプルを試すときは要注意(テストクラス自動生成時は既に追加されている)。
namespace Hoge\Moge;
class SomeClassTest extends \PHPUnit_Framework_TestCase 
{
}

クラス読み込み(require_once)

テストで使用するクラスはモックを使用する場合でも全て読み込みをする必要がある。 通常テスト対象クラスとテストクラスはディレクトリが異なるので(例えばsrcとtestsのように)、そこまでのパスを相対指定する。
namespace Hoge\Moge;
require_once __DIR__ . '/../../../src/Hoge/Fuga/AnotherClass.php';

ただし、この方法だと階層が深いと読みづらい上に、使用クラスが多くなると大変。bootstrap.phpを用意してauto_loadを実装したクラスローダークラス等を先に読み込ませた方がスマート。
その場合は、プロジェクトのプロパティ>PHPUnitカテゴリーのUse Bootstrapにチェックしてファイルを指定するか、require_onceで読み込ませる。
namespace Hoge\Moge;
require_once __DIR__ . '/../../bootstrap.php';

この方法だと使用クラスが増えた際も、その都度個別のファイルを指定する必要がなく便利。

クラスインスタンス生成

通常のクラスインスタンス生成はuseキーワードを追加することで、ショート名を用いることができる。
namespace Hoge\Moge;
require_once __DIR__ . '/../../bootstrap.php';

use Hoge\Fuga\AnotherClass;

class SomeClassTest extends \PHPUnit_Framework_TestCase
{
    public function testMethod() {
        $class = new AnotherClass();
    }
}

モック生成時のクラス名指定

問題はモックを使用する場合で、requireで個別にファイルを読み込ませたか、クラスローダーに読み込ませたかに関わらず完全修飾名で指定する必要がある。
namespace Hoge\Moge;
require_once __DIR__ . '/../../bootstrap.php';

use Hoge\Fuga\AnotherClass;

class SomeClassTest extends \PHPUnit_Framework_TestCase
{
    public function testMethodNotUseMock() {
        $class = new AnotherClass();
        $this->assertEquals('foo', $class->doSomething());
    } 

    public function testMethodUseMock() {
        $stub = $this->getMock('Hoge\Fuga\AnotherClass');

        $stub->expects($this->any())
               ->method('doSomething')
               ->will($this->returnValue('foo');

        $this->assertEquals('foo', $stub->doSomething());
    }
}

なぜか、PHPUnitに渡すクラス名の場合、名前解決は完全修飾名ではないとダメな模様。自分は、これに引っ掛かって相当時間を費やした。もしかしたら設定で指定できるのかもしれないが、とりあえずこれでも解決。

Abstract クラス
抽象クラスのモックインスタンス生成はgetMockForAbstractClassを使う(抽象クラスはそもそもgetMockではインスタンス生成できない)。その際、具象メソッドはメソッド上書きの対象にならないので注意。抽象クラス上の具象メソッドを偽装させたい時は一度その抽象クラスを継承したクラスを宣言した上で、そのクラスをgetMockで上書きする必要がある。
// AbstractClass.php
abstract class AbstractClass
{
    public function notOverridable() {
        return 'hoge';
    }

    public function concrete() {
        $this->overridable();
    }
     public abstract function overridable();
}

-------------------------
// AbstractClassTest.php
class ConcreteClass extends Abstracrt
{
    public function overridable() {
        return 'fuga';
    }
}

class AbstractedClassTest
{
    public function testAbstractMethod() {
        $stub = $this->getMockForAbstractClass('AbstractClass');
        $stub->expects($this->array())
             ->method('overridable')
             ->will($this->returnValue('moge');

        // abstractメソッド(overridable()) は上書き(実装)される
        $this->assertEquals('moge', $stub->concrete());
    }

    public function testConcreteMethod() {
        $stub = $this->getMockForAbstractClass('AbstractClass');
        $stub->expects($this->array())
             ->method('notOverridable')
             ->will($this->returnValue('moge');

        // 具象関数 notOverridable は上書きされず 'hoge'が返される(アサート発生)
        $this->assertEquals('moge', $stub->notOverridable());
    }

    public function testOverridedConcreteMethod() {
        $stub = $this->getMock('ConcreteClass');
        $stub->expects($this->array())
             ->method('notOverridable')
             ->will($this->returnValue('moge');

         // ようやく overridable()  は上書き(実装)される
         $this->assertEquals('moge', $stub->notOverridable());
     }
}

もっともこのように抽象クラスの具象メソッドを偽装させたい時に、テストクラス側に抽象クラスのサブクラスを記述しなければならないのであれば、あまりgetMock系メソッドの恩恵は少ないように感じなくもないが、それでもなお各テストメソッドにおいて動的に返り値を指定できるというメリットは大きい。

2012-06-19

Waitukubuli National Trail Seg. 2 - PUBLIC SERVICE DAY ACTIVITY

I have uploaded a short movie 'Waitukubuli National Trail Seg. 2 - PUBLIC SERVICE DAY ACTIVITY' I made to my Photo Blog 'photoconuts' and Vimeo.  enjoy!
 
WNT Seg. 2 - PUBLIC SERVICE DAY ACTIVITY from toconuts on Vimeo.

2012-06-16

github 導入2 - リポジトリ作成編

github にリポジトリ作成

github のサイト右上の Create a New Repo をクリック
プロジェクト名を入力して作成。

※ Initialize this repository with a README のチェックは外しておく。
チェックしたまま作成すると、下記の手順ではpush時にreject される。
その場合は git fetch 後 git merge origin/master を実行すればOK。

ローカルにリポジトリ作成

$ mkdir test
$ cd test
$ git init
$ touch README
$ git add README
$ git commit -m 'first commit'
$ git remote add origin https://github.com/username/test.git
$ git push -u origin master

push時にgithubに登録したユーザー名とパスワードを入力
以降は既存のファイルを編集したり、新たにファイルを追加したり際には、 add > commit > push  を繰り返す
既存ファイルの編集だけで、新たに追加したファイルがない場合は"-a"オプションをつけてcommitを実行すればaddを省略することができる。
$ git commit -a -m 'modified'

SSHで接続するにはリモート追加時に下記のように記載する
$ git remote add origin git@github.com:username/test.git

README.md の編集

Markdown 文法については下記サイトを参照

リポジトリ内のファイル操作

ファイル名変更 (README からREADME.md に変更)
$ git mv README README.md

ファイル削除(README.mdを削除)
$ git rm README.md

コミット前に削除を取り消し
$ git reset HEAD -- README.md
$ git checkout -- README.md

ファイル名変更、ファイル削除のいずれの場合も commit でリポジトリに反映
$ git commit -m 'comment'

コミット前にステータスを確認するには
$ git status

2012-06-15

github 導入1 - 設定編

gitのダウンロードとインストール

Ubuntuの場合
$ sudo apt-get install git-core
他の環境はこちらを参照
git - downloads

gitの設定

デフォルトユーザー名とEメールアドレス
$ git config --global user.name "Your Name Here"
$ git config --global user.email "your_email@youremail.com"

これらは個別のリポの設定で上書きすることもできる
$ cd my_other_repo
$ git config user.name "Different Name"
$ git config user.email "differentmail@email.com"

HTTPSでのPassword caching の使用とタイムアウトの指定(秒: デフォルト15分)
$ git config --global credential.helper chache
$ git config --gllbal credential.helper 'cache --timeout=3600'

設定の確認
$ cat ~/.gitconfig


※以下はgithubとの接続にSSHを用いる場合のみ設定が必要。Httpsで接続するのであれば上の設定だけで良い(こちらがgithub推奨)

SSH鍵の作成と登録

既存の鍵の確認
$ cd ~/.ssh
$ ls

.ssh ディレクトリが既に作成されていて、そこにid_rsa と id_rsa.pubがあればそれを使うこともできる。その場合は「公開鍵のコピー」までスキップ

既存の鍵のバックアップ
$ mkdir key_backup
$ cp id_rsa* key_backup
$ rm id_rsa*

鍵の生成
$ ssh-keygen -t rsa -C "your_email@youremail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (home/user/.ssh/id_rsa): [just press enter]
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type a passphrase]

公開鍵のコピー
$ xclip -sel clip < ~/.ssh/id_rsa.pub

xclipがインストールされていない場合は先にインストール
$ sudo apt-get install xclip

公開鍵の登録

githubのサイト右上のAccount Settingsをクリック
左のサイドバーのSSH Keysをクリック
Add SSH keyをクリック
Keyフィールドにペースト
 
Copyright 2010 toconuts. Powered by Blogger Blogger Templates create by Deluxe Templates. WP by Masterplan