月別アーカイブ: 2013年12月

【アメリカ新婚旅行】 5日目 part1 デッドホースポイント (Dead horse point)




5日目の朝

この旅はいつも早起きだが本日もいつもと変わらず5時起き。そして、6時には朝食を頂く。
泊った Confort Inn 部屋は綺麗であり、朝食も豪華。牛乳、コーヒー、オレンジジュース、パンやベーグルもある。
そして、ワッフル製造機械もある。この機械は触ったことないが挑戦してみることにした。

機械は、黒いワッフルの型になっているフライパンがありこれを回転させて作る。

ワッフル作成マシーン
ワッフル作成マシーン

写真はここから拝借
機械の隣に、押しボタン式の溶いてあるワッフルの素が出る機械があり、近くにあるカップに出して使う。
ワッフルマシンにカップに入れた素を入れて回転させてしばらく待てば完成。

付近にはちみつなどがあるので好きなものをトッピングして出来上がり。これがまた美味しい。

最後にコーヒーを頂いて、旅の準備は整った。
朝食を食べたホールの横はどうなっているのか覗いたところジムだった。どうやら、長距離運転してると運動不足になりがちなのか、ジムやらプールやら併設されているモーテルが結構あるが、今回のここも同様のようだ。
そういえば、昨日チェックインした時に
「スイートルームにしな」
って勧められたが断った。もし、もっと早くチェックインしてればそれもいいだろうと思った。参考まで部屋を見せてもらったがなかなかの部屋だった。

朝のグリーンリバーは美しい

本日の目標は、デッドホースポイント(Dead horse point)と、アーチーズ(Arches)を見て、カイエンタ(Kayenta)に泊ること。
少し無理があるが、是非カイエンタまでは行きたい。なぜなら、明日の朝日をモニュメントバレー(Monument Valley)で見たいからである。

時間は6時。車を出すが早速朝日が美しい。

グリーンリバーの朝
グリーンリバーの朝

ここ、グリーンリバーはスイカの町。

グリーンリバーはスイカが有名みたい
グリーンリバーはスイカが有名みたい

スイカ売り場の近くで、給油して出発。

早朝のグリーンリバーで給油。店員も気さくなおばさん
早朝のグリーンリバーで給油。店員も気さくなおばさん

高速(I-70を東に)に乗って、 191号線(U.S. Route) にの道で降りようとするが失敗。何しろ朝日が眩しくて前が全然見えない。サングラスも意味なし。
車が少ないので良かったが、殆ど前が見えない状態で走っていたので危険極まり無かった。

間違って別の所で降りてしまったのだがどうやらここは休憩所のようだった。景色が良かったので写真を撮る。

休憩所からみる景色が絶景
休憩所からみる景色が絶景

ここを走ってきた
ここを走ってきた
太陽が出てきた。眩しい
太陽が出てきた。眩しい
なんか綺麗だったのでパシャパシャ
なんか綺麗だったのでパシャパシャ


大きな地図で見る

気を取り直して、再びデッドホースポイントへ向かう!

再び高速に戻り、次こそは191号線(U.S. Route)号線に乗る。

しばらく走ると、313号線(Utah State Route)とのT字路にぶつかるので右折。

大きな地図で見る

右折すると、岩の台地が見えてくる。この時点で相当感動する。シャッターを切りたくなるがここは我慢(してないが)。

Utha 州道 313 入ってするぐにある。ダイナミックな台地が目の前を走る。
Utha 州道 313 入ってするぐにある。ダイナミックな台地が目の前を走る。

デッドホースポイントを見たら再びこの道は戻る。なので、ゆっくり撮りたければデッドホースの帰りに撮ればよい。
車はどんどん高地に向かってゆく。そして、大きな台地の上に行くと、よく映画で見るような石油の掘削機が見えた。
初めてみた時は感動した。
石油採掘機とかで検索してもらえれば。
石油採掘機
他のサイトから拝借拝借元

そして、再びT字路に。今度は、左折する。ちなみに、まっすぐいくと、 キャニオンランズ国立公園(Canyonlands National Park)につく。今回はここには行かない。行っても大したことないと思ってる。

大きな地図で見る

しばらくすると、道が狭くなる。スピードリミットも30マイルぐらいの制限になる。
観光スポットに近づくと、制限が急に変わる。見落としてそのまま走って捕まったことあるので特に注意する。

朝は入場料金は自己申告で

朝が早かったのか、ゲートで料金の徴収は無かったが、先のオフィスでお金を支払ってくれとの事なのでゲートの先にあるオフィスにき料金を支払う。
ちなみに、ここは国立公園じゃなく、州立公園なので国立公園のパスは使えない。料金は、$10(2013/9/16)であった。
時間は、TODO時。少し肌寒い程度で非常に気持ちがよい。

再び車に戻り、この先にあるデッドホースポイントに向かう。途中で、少し景色が見えるが、
「うわぁ~」としか声が出ない。
凄い所を走っている。

そして、駐車場につきいよいよである。駐車場から歩いて3分ほどで絶景になる。

いよいよ絶景、デッドホースポイントへ

人は5人~6人ぐらいしかいない。フランス人?っぽいカップルがいた。ちなみに、美男美女だったが、いまはそんなことはどうでもよい。

絶景である。広く、深い大地と、朝の澄んだ空気が肺の奥までしみわたる感覚が心地よい。心があらわれる。
ずっと見ていると、景色と自分が一体化したような気分になり、凄く大きな気持ちにある。デッドホースポイントの景色は、グランドキャニオンに似ている。
似ているが、ここがグランドキャニオンと大きく違うのは人の数。グランドキャニオンは、ラスベガスに近く、いつも人がいるがここは人が圧倒的に少なく静かである。
これは、かなり重要なポイントだと思う。静かに、景色をゆっくりと見る。何も考えずにただただ景色を見る。そうすると、感覚が研ぎ澄まされて、凄く気持ちのよい感じになる。

絶景のデッドホースポイント
絶景のデッドホースポイント

青い空と、赤茶色台地のコントラストが最高
青い空と、赤茶色台地のコントラストが最高
写真では伝わらないが、相当な高低差
写真では伝わらないが、相当な高低差
どこを撮っても美しい
どこを撮っても美しい
別のカメラから。青い空がさらに美しい
別のカメラから。青い空がさらに美しい
空が鮮明に青いほうが、妻のカメラ。こっちの方が高いカメラ
空が鮮明に青いほうが、妻のカメラ。こっちの方が高いカメラ
どうやら、妻のカメラ SONY NEX-7のほうが、私のPanasonic Lumix GX-1より上か。それともテクか。
どうやら、妻のカメラ SONY NEX-7のほうが、私のPanasonic Lumix GX-1より上か。それともテクか。
パノラマ写真拡大してみて
パノラマ写真拡大してみて
Sony NEX-7 はパノラマも撮れるので完全負けか。
Sony NEX-7 はパノラマも撮れるので完全負けか。

それでも、替えレンズとか買ったので GX-1で行く。

しばらく周りを歩いて景色を堪能する。少し高台があってそこに上ると、キャンプ場が見える。マウンテンバイクも見えるので、ここでキャンプしながら自転車で堪能するのか。
なんと、贅沢な遊びだろうか。正直、羨ましい。

こんな所でキャンプしてみたい
こんな所でキャンプしてみたい

そんな、事を考えていたら足元にリスが。とりあえず撮る。

リスが突然現れた
リスが突然現れた

おい、待て
おい、待て
お前は何を見ている
お前は何を見ている
そして、何を考えている
そして、何を考えている

そして、感動を胸にデッドホースポイントを後にする。

次は、アーチーズだ。時間は8時。急がねば。

動画はこれ。
313号線(Utah State Route) 入った所からの道と、デッドホースポイント、そしてその戻ってアーチーズ入るまで撮ってある。

[Grails (グレイルズ)] spock の where を使いパラメタ化してテストの冗長化を無くす




単体テストは、同じコードをコピペして数十もしくは、数百ケースといったテストを書く場合がある。
こんなとき、
「インターフェース変わったらどうしよう」
と心配になると思う。
単体テストでも、コードを少なくしてインターフェースに変更があっても軽微の修正ですませるようにしたい。

そんな時は、spockを使って単体テストでありがちな、コードの冗長化は where を使って無くすことにする。

javaからも使えるので、Grailsに限らず単体テストの冗長化に頭を悩ませている人は spock を使って欲しい。

単純な値の場合

「|」 で パラメタ化

のように、渡す値と結果を書いておく。

これを使って以下のように定義する

このテストを実行すると、4個のテストが行われる。
where: で定義した1行単位に処理が行わる。
コード中はそれぞれ、 address,name,age,testfor が変数として参照できる。

where: 無しだと、4つのテスト分それぞれメソッドを分けてかく必要がある。冗長化してメンテナンスが面倒になる。巨大なテストソースにありがちな構造。

コード中のキーワードの説明

  • @Unroll
  • このアノテーションがないと、テスト実行時に1つのテストとして扱われる。その場合失敗時にどのケースで失敗したか確認できない。
    @Unrollを付けることを推奨。また、 #testfor のようにメソッド名にパラメタが使用できる。

  • setup:
  • ここに、試験に必要なデータをセットする。例えば、予め数件のレコードを入れておいて、正しく取得できるかのテストをしたい時用などデータを用意する場合に使う。

  • when:
  • 実際にテストを行う。

  • then:
  • テストの結果を確認。

単純なデータではなく、オブジェクトなどを渡したい場合

オブジェクトを渡す場合は、配列にして渡してあげるとよい。

テストソースはこのようになる。

dataServcie.list の結果としては
[list : データのリスト, total : 全件数]
が入っている。

このテストは、 Usersystem, admin, user の 3パターンでテストして結果としてリストの件数と、データの全件数を取得できるかチェックしている。

where: では、それぞれ行うテストのデータ(user)と結果(listsize, totla)、そして表示用(testfor)を用意している。

where: でオブジェクトを共有して使いまわす

where: で、ひとつのデータを共有して他のテストでも使いまわす場合は、クラスメンバとして宣言して
@Shared
を付ける。
「|」でパラメタ化も出来る。
クラスメンバとして宣言

setupSpec で初期化。 ちなみに、setupSpec はテスト中の初期化で一度だけ呼ばれる。 setup メソッドはテスト毎に呼ばれる。

そして、パラメタ化で使う

「|」と配列のパラメタ化がごっちゃ混ぜになってもよい。