Amazon Campaign

2014年11月20日木曜日

Google Calendar API v2 が 2014年11月17日 で終了しました

Google Calendar API を使ってるシステムでカレンダーデータが取得出来なくなりました。
Developer サイトをみてみると、なんと 2014年11月17日をもって v2 のサービスは終了していました。

https://developers.google.com/google-apps/calendar/v2/developers_guide_protocol?hl=ja

何年も手が掛からずに動いてくれていたシステムなので気にもとめていなかったのですが、そいうシステムほどこういったことを上手くキャッチアップする仕組みを持っていないと行けませんね。

2014年11月12日水曜日

GAE の PHPランタイムが 5.4 にアップデートされています

GoogleAppEngine for PHP で FuelPHP 1.7 を使いたかったのですが、同梱のランタイムのバージョンが古く要件を満たしていなかったので、今まではコンソールから別のランタイムを指定して起動していました。

ところが、同梱のランタイムには手が加えられているらしく、CloudStorage が使えませんでした。(他のサービスも使えないものがあると思います。)

そこで、GoogleAppEngineLauncher の最新版 1.9.11 のPHPバージョンは何かと確認してみたら、なんと PHP 5.4 にアップデートされていました!

https://cloud.google.com/appengine/docs/php/

あー、よかった。

2014年11月8日土曜日

トップワンのクロスバイクは小学生高学年の自転車として最適

小学生高学年の子供に買って上げる自転車ってなかなか良いのがないですよね。
大きなジュニア向けではデザインが子供っぽくて、中学になったら乗れなくなってしまいそうだし、大人向けでは、まだちしっかり足が着かないのでちょっと心配だし。

ウチの小6の息子が乗っている自転車がだいぶ小さくなってきたので色々と物色していたのですが、Amazonで買ったトップワン(TOP ONE)のクロスバイク「MCR266-29」がとても良かったので紹介します。
現物見ずにネットで買うのは心配だと思うので、皆さんの参考になれば幸いです。


こんなダンボールに梱包されています。
型番は MCR266-29


箱から取り出した状態。ハンドルはフレームに括り付けられています。
ハンドルは自分で取り付けますが、各ワイヤーはセッティングされています。
ハンドルをネジ止めするだけです。



付属品のペダルとLEDライト、工具もあります。

フレームのネジ穴は前方のフレームのみにあります。


前ブレーキとエンブレム。エンブレムはシールなので剥がせます。
後ろブレーキ

残念ながら前後輪共にクイックレバーはありません。




タイヤナットのカバーが付属します。


バルブはは英式
サドルレバーはあります。
このワイヤーロックのホルダーがサドルフレームについており、サドルが高くなっています。
これを本体フレームに取り付けることでサドルを一番低くできるようになります。
シフトグリップ。6段変速です。


ウチの息子は身長150cmちょうどなのですが、サドルを一番下にすればかかとがやや浮く程度で両足が着くので問題ありませんでした。このデザインであれば中学になっても乗ってくれると思います。

スチームフレームなので15kgと重くはありますが、この値段ですからね。自転車に特別こだわりがなければ十分な品質で大変満足しています。


2014年9月15日月曜日

PHP で rest する時は var_dump() に注意しましょう

FuelPHP で RestAPI 組んでいて、「なんか出力が2重にされるなぁ。なんでかなぁ?」と悩んだら、どこかで var_dump() していないかを疑いましょう。レスポンスの body に出力されちゃいますよ!

PHPer ならきっと誰でも注意していることなんですよね。まる1日悩んでしまいました。。。(TT)

でも解決してよかった!

2014年8月18日月曜日

【紹介】はじめてのフレームワークとしての FuelPHP 第2版 実践編

この度「はじめてのフレームワークとしての FuelPHP 第2版 実践編」(鈴木憲治 著)をご提供いただいたので紹介したいと思います。 (憲治さん、遅くなってしまいスミマセン。。。)

はじめてのフレームワークとしてのFuelPHP第2版(3) 実践編
鈴木憲治
達人出版会
発行日: 2014-04-23
対応フォーマット: EPUB, PDF

 FuelPHP のオンラインマニュアルはAPIリファレンス的な構成となっているため、用意されている様々な機能を応用しにくく感じていました。
この書籍は「実践編」と銘打っているだけあって、実際のアプリケーション構築の際に必要とされるであろう事項に対して、Fuelを使っていかに実装するかが書かれており非常に実践的です。実際の開発現場できっと役立つと思います。

 そんな中で特に有用だと感じたのは、アプリケーションレイヤー毎のテスト方法について詳しく書かれている点です。例えば「4.7 モデルのテスト」では、データベース上への効率的なテストデータ作成方法や、「第6章 コントローラのユニットテスト」では通常はテストし難いコントローラのテストを AspectMock を用いて行う方法が書かれています。今回はそれぞれ簡単に紹介してみようと思います。

モデルのユニットテスト

モデルをテストするためには事前にデータベース上にテストデータを格納しておく必要があります。ボクは今まで Fuel の Orm\Model クラスを利用してテストデータを作成していました。

 例)Orm\Model を使ったテストデータの作成例
$u = Model_User::forge(array(
    'username' => '担当1',
    'password' => 'KWd27qfZtlw9qbEVMe5v2zRnZUuC0Eqa330cdN+9lro=',
    'email' => 'hoge@hoge.jp',
    'last_login' => '2013-08-30 00:00:00',
    'created_user' => 1,
));
$u->save();

$g = Model_Group::forge(array(
        'name' => 'グループ1',
        'status' => 0,
        'created_user' => 1,
));
$g->save();

書籍では YAML ファイルでテストデータを記述して、Fuel の Format クラスを使ってデータ登録する方法が紹介されています。この方が保守性も汎用性も高くよいですね。さっそく現場で活用できそうです。

 例)YAML ファイルを使ったテストデータの作成(書籍からの引用)
id: 1
name: 小野小町
email: komachi@example.jp
comment: |
    花の色は移りにけりないたづらに
    我が身世にふるながめせし間に
ip_address: 192.168.1.1
user_agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0
created_at: 1333524234
updated_at: 1333524234
-
id: 2
name: 文屋康秀
email: yasuhide@example.jp
comment: |
    吹くからに秋の草木のしをるれば
    むべ山風を嵐といふらむ
ip_address: 10.10.10.10
user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
created_at: 1333534305
updated_at: 1333534305

上記 YAML を下記コードで配列にして DB へインサート出来ちゃいます。

$data = file_get_contents($fixt_file);
$data = Format::forge($data, static::$file_type)->to_array();

foreach ($data as $row) {
    DB::insert($table)->set($row)->execute();
}

また、ボクは Format クラスの存在を知らなかったのですが便利なクラスですね。YAML 以外にも様々なファイルフォーマットに変換可能で下記フォーマットに対応していて今後活躍してくれそうです。

  • CVS
  • XML
  • json
  • シリアライズ文字列
  • xml:ns


コントローラのユニットテスト

コントローラのユニットテストとして「AspectMock」というモックアップツールを使った方法が紹介されています。 コントローラのユニットテストは難しいのでボクはユニットテストは諦めて、テストサーバを立てて PHPUnit_Extensions_Selenium2TestCase によるUIテストによる自動化を行ってきましたが、AspectMock を使えば簡単にユニットテストができます。
例えば static メソッドである Validation::run() で true を返させたい場合はコントローラを呼ぶ前に下記コードを呼んでおくだけです。

use AspectMock\Test as test;

・・・略・・・

test::double('Fuel\Core\Validation', ['run' => true]);

// HMVCリクエストを実行
$response = Request::forge('form/confirm')->execute()->response();

便利ですねぇ。もう明日からでも使いたい気分です。 他にも

  • 2.1.5 独自検証ルールの作成
  • 2.3 ファンクショナルテストの追加
  • 第7章 コードカバレッジ解析

など、現場で即活用したい内容が目白押しです。すでにFuelを利用している方にはとても役立つ書籍だと思うのでオススメです。


はじめてのフレームワークとしてのFuelPHP第2版(3) 実践編
鈴木憲治
達人出版会
発行日: 2014-04-23
対応フォーマット: EPUB, PDF

2014年5月6日火曜日

phpQuery 注意点

phpQueryを使ってみたので注意点を共有します。

利用バージョン


  • phpQuery 0.9.5
  • PHP 5.4

Webサイトからの取得方法

Webサイトからドキュメントを取得する場合のコードは下記のようになります。
$html = file_get_contents('http://www.yahoo.co.jp/');
\phpQuery::newDocument($html);

tbodyがパースされない

phpQueryは読み込んだDOMに対してCSSセレクタを用いて要素を抽出します。ボクが読み込んだページに対では<tbody>タグが読み込まれずに無視されました。例えば
#system-contents > table.hoge > tbody > tr.abc
というセレクタの場合
#system-contents > table.hoge > tr.abc
と指定する必要があります。他にも同様のタグがあるかもしれませんが、今のところ<tbody>以外には遭遇していません。

children() で指定するセレクタは子供または子孫セレクタから記述する

1度セレクタで取得したオブジェクトに対して再度セレクタで要素を絞りたい場合があると思います。セレクタで取得したオブジェクトは phpQueryObject であるため、children('セレクタ文字列') メソッドで行います。 ここで指定するセレクタは抽出済みの要素に対する子供または子孫となるため、子供の場合は'>'、子孫の場合はスペースから始める必要があります。

例)

$hoge->children('> td')->eq(0)->text());
$hoge->children(' td')->eq(0)->text());

2014年1月17日金曜日

三崎 うらり の「にじいろさかな号」に乗るならランチセットがお得!

神奈川県 三浦市 三崎の水産産直センター「うらり」に遊びに行く際は、水中観光船「にじいろさかな号」への乗船がオススメです。三崎の風景はもちろん、魚の観察、餌付け、カモメへの餌付けも楽しめます。


こちらのビデオがとても楽しさが伝わります。

そんな「にじいろさかな号」にお得なランチセットプランがあります。ランチのグレードによって3つのプランがあり、最も安いプランは1500円から。
ランチは提携している港周辺の食事処での食事となるのでお店選びの楽しさも味わえます。

ランチセットメニュー
ランチセットメニュー

今回選んだお店は乗船所の湾の向かいあるログハウスのお店「はまゆう」です。
こちらのお店は地元の漁師さんの奥さんたちが切盛りしていて、家庭的で暖かいメニューが特徴です。
選んだメニューは1500円コースの「はまゆう定食」(写真左上)。いかコロッケと"さんが"のメニューです。
このメニューを普通に購入すると

乗船料 1200円(大人) + はまゆう定食 900円 = 2100円

のところ、ランチセットだと 1500円です。

※ランチセットに子供料金のセットはありませんのでご注意ください。子供の乗船料は 600円です。

料金、運行スケジュール
料金、運行スケジュール

Amazon_ad