CakePHPでアプリケーションを組むのはとても楽ですよね。 しかも先人の方が残してくれたプラグインが大量にあるので何かやりたいときにまずプラグインを検索すればいいので本当に助かりますよね。

今回はCakePHPで出力されるエラー画面を編集していきます。 CakePHPをインストールしたままのデフォルトの状態だと存在しないコントローラーとかアクションにアクセスしようとするとエラーメッセージが出ますよね。 コントローラーがありませーんとか。 ここをいじっていきます!

CakePHPでは開発用モード、本番環境モードなどを切り替えることが出来ます。 app/Config/core.php

Configure::write('debug', 2);

と書いてある部分があると思います。
ここの”2″というのがデバッグモードです。この数字を”0″にすると本番環境モードになり、エラーメッセージも最小限しか出ないようになります。
実際に切り替えて見るとエラーメッセージが変化することがわかります。

開発用モードの表示方法を変更したいかもしれませんがそれはまた今度まとめたいと思います。
今回は本番環境のエラー画面を変更します。
変更しますというか変更出来るように知識をつけていきましょう。

CakePHPのデフォルトの緑画面のCSSはどこにあるのか、出力しているHTMLはどこかというのを知っておきましょう。

CSSはapp/webroot/css/cake.generic.css というファイルがあります。
ここでデフォルト画面のCSSが定義されています。
なのでこのCSSを一度消してしまいましょう。もし元の画面に戻したくなったら githubからダウンロードしてくればいいので大丈夫です。

消しましたか?
それではさきほどの画面を見てみましょう。

このように真っ白な画面になったと思います。これでデフォルト画面のCSSはcake.generic.cssだったことがわかりました。

ここまできた人は、「じゃぁcake.generic.cssを定義してるのはどこだよ!」と石を投げる勢いで感じることだと思いますが、もちろん定義してある場所はあります。

app/View/Layouts/default.ctp

<?php echo $this->Html->css('cake.generic');

と書いてある部分があります。ここでCSSを定義していたのですね。 そしてこのdefault.ctpがエラー画面のレイアウトになります。レイアウトを変えたい場合はここをいじりましょう。 それではレイアウトを少しいじってみましょう。

今回はエラー画面の下にあるcakephpの画像を消したいと思います。

app/View/Layouts/default.ctp に以下のようなコードがあります。これを全て消してしまいましょう。

<div id="footer">
<?php echo $this->Html->link(
    $this->Html->image('cake.power.gif', array('alt' => $cakeDescription, 'border' => '0')),
    'http://www.cakephp.org/',
    array('target' => '_blank', 'escape' => false)
        );
?>
</div>

どうなりましたか?ちゃんと消えましたか?
以下のようにしっかり消えます。

これでレイアウトファイルの場所、CSSの場所も理解出来たと思います。

あとはレイアウトに流し込まれるコンテンツはどこにあるかということです。

コンテンツは、app/View/Errors/にあります。

それでは少しいじってみましょう。 error400.ctp に書いていきます。 今のままだと英語表記なので日本語にしてみましょう。

<p class="error">
    <strong><?php echo __d('cake', 'エラー'); ?>: </strong>
    <?php printf(
        __d('cake', 'そのURLはこのサーバー上には存在しません:%s'),
        "<strong>'{$url}'</strong>"
    ); ?>
</p>

これで更新すると以下のように日本語化されました。

これでほとんどのことが出来るようになったと思います。
エラー画面もおしゃれに設定して綺麗なアプリケーションを作成しましょう。

参考

exception – CakePHP公式ドキュメント

Read more

あなたはiPhoneをもっていますか?

あなたはゲームをしますか? iPhoneで出来るゲームはクオリティが高いものが多いです。

最近ではiPhone5が出るというので一般消費者も開発者も盛り上がっていますね。 今回は僕がiPhoneのゲームで徹底的にはまったiPhoneゲームアプリを◯つ紹介しようと思います。 今回はいつもの記事とは少し趣向を変えて、僕がはまったゲームを紹介します。

Cut the rope

Cut the Rope App カテゴリ: ゲーム 価格: ¥85

シンプルな操作感におしゃれなデザイン。これのスコアアタックにめちゃくちゃはまりました。 単純なんだけど攻略ルートをがらっと変えるだけで圧倒的にスコアが変わる。そんなところにはまりました。 続編として、 「Cut the rope Experience」、無料版の「Cut the rope free」、「Cut the rope Experience free」があります。 まず最初に無料版をプレイしてみるとよいかもしれません。

Cut the Rope: Experiments App カテゴリ: ゲーム 価格: ¥85

Cut the Rope Free App カテゴリ: ゲーム 価格: 無料

Cut the Rope: Experiments Free App カテゴリ: ゲーム 価格: 無料

プラント vs. ゾンビ

プラント vs. ゾンビ 日本語版 App カテゴリ: ゲーム 価格: ¥250

適度な気持ち悪さと面白さを兼ね備えたゲーム。 ある程度コツを掴んでしまえば最強のフォーメーションが組めるようになるが、何週もしているとそれも崩される。 なぜか何週もやってしまう面白さがあり、いつまでたってもやめられない。 多少高いけど1回やってみるのはいいかもしれない。。 どはまり注意です。。

ファンタジーxランナーズ

ファンタジーxランナーズ (FANTASYxRUNNERS) App カテゴリ: ゲーム 価格: ¥85

買って結構たつはずなのにいまだにたまに起動してやってしまうくらいはまってます。 強制スクロールゲームに敵を倒す要素を加えた感じですね。 今はキャラがたくさんいますが昔はキャラが少なかったのです。 ただ少なかったほうがお目当てのキャラが出やすかったのでそれはそれでよかったのですが。。

パズル&ドラゴンズ

パズル&ドラゴンズ App カテゴリ: ゲーム 価格: 無料

あのCEDEC2012にでて受賞した今話題のゲーム。それがパズドラ! パズルゲーム×モンスター育成ゲーム。 たまにいきなり現れる緊急ダンジョンや、曜日によって変わるダンジョンに夢中になります。 無料なので一度やってみるとよいと思います。

ZOOKEEPER

ZOOKEEPER DX Touch Edition App カテゴリ: ゲーム 価格: ¥85

僕がはじめてZOOKERPERをやったのはmixiのゲームでした。 あのときは友達と必死でスコアを競い合っていました。 それがiPhoneで出来るときいて即ダウンロードしました。 毎日何時間もやり続けた、そんなゲームです。

最近新しいZOOKERPERが出ました。 それが「対戦ZOOKERPER」です!

対戦ズーキーパー App カテゴリ: ゲーム 価格: 無料

対戦型のZOOKERPERで、30秒間の間にどれだけ多くの動物を確保出来るかを競うゲームです。 僕は最大世界ランキング90位までいきましたが、今は1万位くらいまで落ちてしまいました。。 これは無料なのでぜひやってみてください。

最後に

いかがでしたでしょうか。 僕が大好きなゲーム5つです。 意外と有料ゲームが多いですね。。 無料ゲームはすぐダウンロード出来ますが有料は少しハードルが高いですね。 今回紹介した無料ゲームでもやってみて、はまってもらえれば僕は嬉しいです。

Read more

CakePHP2を使おうと思ったときにおそらく1番最初にやることといえば公式ドキュメントを読んでブログチュートリアルを行うことだと思います。

ただこのブログチュートリアルは、CakePHPってこんなにすごいんだぜ! っていうのを強調したいためか、ある程度自動的にモデルと接続したりバリデーションが出来たりしています。

今回僕が少しつまった部分はバリデーションの部分です。

チュートリアルでは $validate に条件を書けば勝手にバリデーションしてくれますが、実際に運用する場合は自動的にバリデーションを行うというよりはむしろ明示的にバリデーションを行ないたいと思うことも多いと思います。

結論をいうと

Modelの関数であるvalidates()関数を使用する

ことで解決出来ます。

以下に例を示しましょう。

PostsControllerに以下のようなコードが書いてあるとします。

<?php
class PostsController extends AppController {

    public function index(){
        if($this->request->data){
            // ここにバリデーションをかけたあとに色んな処理をしたい
        }
    }

バリデーションをしたいのでモデルにバリデーションを書きます。
ただし今回は自動でバリデーションしないように、Userモデルにバリデーションを書きたいと思います。

<?php
class User extends AppModel {
    public $name = 'User';

    public $validate = array(
        'name' => array(
            'rule' => array('notEmpty'),
            'message' => '空にしないでくださいっ!!'
        )
    );
}

バリデーションに関しては公式ドキュメントを参照してください。

ここに書いたバリデーションをさっき書いたPostsControllerでバリデーションを使用したいとします。
その場合は以下のように書けばUserモデルのバリデーションを使用してバリデーションを行うことが出来ます。

<?php
class PostsController extends AppController {

    public function index(){
        if($this->request->data){
            // ここにバリデーションをかけたあとに色んな処理をしたい
            $this->User = ClassRegistry::init('User');
            if($this->User->validates()){
                // 色んな処理を書く!
            }
        }
    }

この例からわかることは、CakePHPが自動的にやってくれてたことは全て明示的に書くことが出来るということです。

当たり前のことですが、意外とここが理解できなくて苦しむことが多かったです。
また、モデルはデータの入出力、コントローラーはデータの道筋、というMVCの考えがしっかりしていればどこに関数があるかなんとなく検討がつくのかな、と思います。

もし何か質問や相談、ここ違うよ!ってところがあれば以下のコメント欄、またはリプライ(@DAI199)でお願いしますっ

Read more

毎週Facebookの変更点やニュース、コラムをまとめて配信します。 今週は7個の記事を紹介! 記事は上から時系列順になっています。今週のFacebookを振り返ってみましょう!

FacebookのiOSアプリケーション、最新版投入以来レビュー評価が星1.5個から星4個に急伸

あなたの「当たり前」の知識がFacebookからお客様を連れてくる

FacebookのザッカーバーグCEO、「HTML5に賭けたのは失敗」 Androidアプリも間もなくネイティブに

Facebook が利用している Linux ディストリビューションは何か?

Facebook、クッキーでユーザーを再ターゲットする新広告のテスト結果を発表―費用対効果は最大16倍

コムニコ、Facebookページ担当者のためのガイドブックを無料公開

Facebook、ターゲティング広告サービス「Facebook Exchange」を一般公開

Read more

この記事はSMASHING HUBに掲載された 10 Best Responsive CSS Frameworks For Web Design の内容を日本語訳したものです。

よいレスポンシブCSSフレームワークやひな形は簡単に使用出来、時間が節約出来るという事実と、求められているものがよく似ています。 これらのフレームワークは基本的なCSSスタイルなどを書く手間を省いてくれます。

ただ、よいものを見つけ、問題のないフレームワークを見つけるのは簡単ではありません。

あなたはおそらくレスポンシブHTML5フレームワークに興味があるでしょう。 なので今回はいくつかの驚くべきレスポンシブCSSフレームワークを見つける手助けをするために10個のレスポンシブCSSフレームワークと紹介文をのせています。 これらすべて標準的なCSSで作成されています。

好きなものをピックアップして使用してみてください。

YAMB

すばやくサイトを作るための素晴らしいツールや方法を兼ね備えているフレームワークです。 流動的なグリッド、キャプションつきのかっこいいフォトスライドショー、サブレベルが無制限なドロップダウンメニューなどを使用することが出来ます。

Less+ Framework

Lessフレームワークを拡張したものです。IEにも対応しています。 デザイナーがjQueryメディアクエリライブラリを利用して、画面の解像度に応じてそのコンテンツを合わせることが出来るレスポンシブなサイトを作成することが出来ます。

Ingrid – A Fluid CSS Layout System

1つ1つの単位で機能を使用することが出来ることを目指した、小さくて扱いやすいCSSレイアウトシステムです。 これは全てをとても簡単に作ることができます。またカスタマイズ性にとても優れています。

Responsive Grid System

ウェブサイトをすばやく開発することを目指した流動的なグリッドをもつCSSフレームワークです。現在12,16,24カラムのバージョンがあります。とてもよいCSSフレームワークの1つです。

Susy – Responsive Grids for Compass

レスポンシブなセマンティックCSSグリッドシステムです。 これらのグリッドは流動的で、いつ、どこで、どのようにそれらが応答するかを好きなように作成することが出来ます。見た目の異なるウェブサイトを作成するのを助けてくれるでしょう。

Responsive Grid System

レスポンシブなサイトをとても早く手軽に構築することが出来るフレームワークです。 これはいくつでもカラムをもつことが出来ます。 これはパーセンテージでカラムを指定しているので任意の幅に流動的なカラムをおさめることが出来ます。自分が好きなように利用でき、モバイル版のグリッドも提供しています。

Gridiculous – A Fully Responsive Grid Boilerplate

12カラムのグリッドをもつとてもかっこいいひな形です。 これを使うことで、カラムにスペースを空け、ネストしたカラムを作成し、写真やビデオを画面サイズに関係なくレスポンシブに置くことが可能です。

Responsive HTML5 Aeon Framework

これはAeonフレームワークのversion 2.0です。 HTML5で書かれたレスポンシブな12個のグリッドをもつことが特徴的です。 簡単に素早くモックアップやワイヤーフレーム、本格的なウェブサイトを立ち上げるための3つの基本的なクラスを保持しています。

Wirefy – The Responsive Wireframe Boilerplate

レスポンシブワイヤーフレームをもつことが出来るCSSとJSで作成されたフレームワークです。常に正しいviewportに対応します。デザイナーや開発者に、基本的なCSSを作成する手助けをしてくれるすばらしいツールの1つです。

Titan Framework

これは960.gsと同じCSSクラスを利用しています。なので960.gsからこれに乗り換えるのは非常に簡単です。このことからTitan Frameworkは残りのフレームワークの中でとても目立っています。

この記事はSMASHING HUBに掲載された 10 Best Responsive CSS Frameworks For Web Design の内容を日本語訳したものです。
最近はレスポンシブなウェブサイトが普通になってきていると感じます。 ただ自分自身まだ’px’でサイトを構築していたりパーセンテージでの指定がうまくないなどまだまだな部分が多いのでこういうフレームワークを使用したりコードを見たりすることで勉強していこうと思います。 まだまだ日本語の情報が少ないと感じていたので訳させていただきました。
Read more

フレームワークはとても便利なものです。 色々な用途があるにせよ、保守性を高めたりプラグインを使用することによって難解な処理を簡単にしたりすることが出来ます。

僕は今のところスクリプト言語で主に使っているのがPHPなので、フレームワークは一般的だと思われるCakePHP2を採用しています。

ここではCakePHP2を初めて勉強し、CakePHPをうまく使いこなしていくための記事を紹介しています。

最初フレームワークを勉強したときはPHPで出来ているのにPHPとは全く違う言語だとびっくりしたものの、慣れてしまえば、「やっぱりPHPだね」と開き直ることが出来ました。ただ最初慣れるまでが辛いかもしれません。

ここに紹介している記事は僕が何度も読み返し、理解しなおし、コードを書いた記事たちばかりです。 何度も読み直し、理解すればおのずと使えるようになります。頑張りましょう。

まずは・・・

なぜCakePHPを使うのか、考えてみましょう

なぜCakePHPなのか? – ECWorks Blog

MVCとは?CakePHPとは?という部分を読みましょう

CakePHPの概要 – CakePHP公式ドキュメント

そして・・・

ブログチュートリアルで基本的な使い方を理解しましょう

ブログチュートリアル – CakePHP公式ドキュメント

そのあとは・・・

初心者向け記事で様々な事柄を少しずつ勉強しましょう

初心者向け 8時間耐久CakePHP2勉強会を開催しました – candycane development blog

8時間耐久CakePHP2勉強会の資料 – SSSSlide

3時間濃縮CakePHP2.1@札幌資料 – slideshare

慣れてきたら・・・

ベストプラクティスを勉強しましょう

何か困ったときにこういう記事を読んでおけば助かることがあります。 CakePHP1.1,1.2,1.3などの情報は、役に立たないと思いがちですが、その情報に書いてあるメソッドなどは2.x系でも実装されていることが多いです。 過去の情報もうまく利用しつつ、公式ドキュメントで検索してみて、あれば使いましょう。

CakePHPを使ったMVC設計のベストプラクティス – sooey.com

CakePHP開発者が知るべき10のこと – 1byte.jp

CakePHP Modelとの付き合い方(CakePHP Advent Calendar 2010 3日目) – Shin x blog

CakePHPで細かすぎて伝わらないtipsネタBEST3 – Knockin’on TechLog

誰でもできるサービスレイヤの実装 – 24時間CakePHP

CakePHP Best Practices: Fat Models and Skinny Controllers – bitfluxx(英語)

最後に・・・

わからないことがあればドキュメントのAPIに聞きましょう

CakePHP 公式ドキュメント

注意

よくGoogleなどで検索すると過去の情報(CakePHP1.1や1.2の情報)が出てくることがあるのですが、ここであきらめずに、使われているメソッドなどを追ってみましょう。

結局はCakePHPで実装されていることなのでもしかしたら同じメソッドが実装されている可能性があるのです。そこでしっかり公式ドキュメントに戻って検索し、ドキュメントを読むことがCakePHPを使いこなすための鍵です。

いかがでしょうか。この記事によって、あなたの力に少しでもなれれば幸いです。 もし、もっと参考になる記事があればぜひ教えてください。 以下のコメント欄、またはリプライ(@DAI199)までお願いします。

Read more

最近MongoDB入門した @DAI199 ですが、NoSQLに興味が出たのでNoSQL勉強会に参加してきました。 イベントリンクはこちら→ 【NoSQL徹底解剖!@ヒカリエ】 最先端の新技術研究を行うシーエー・アドバンスの技術責任者が登壇! ハッシュタグはこちら→#lvtve

追記:2012/10/11 22:30 イベントレポートがアップされました! 以下URLになります。 >> 「NoSQL徹底解剖!」が開催されました! – @Agent

追記:2012/10/03 09:53 当日スライドがアップされました! 以下URLになります。 >> NoSQL勉強会

講演者について

大谷 祐司 様 →Facebook:https://www.facebook.com/yuji.otani.16 株式会社CA ADvance(シーエー・アドバンス)技術統括本部 本部長 兼 技術責任者

インターネット広告運用のプラットフォーム「SearchSuite」をゼロから一人で立ち上げる。
サイバーエージェントでのスタッフMVPをはじめ、数多くの賞を受賞する。
2011年11月よりシーエー・アドバンスの技術責任者に着任。要件定義から開発までをマルチにこなし、多くのシステムをリリースする。
「ADvanceFriday(金曜午後に新しい技術に取り組むことができる)」「WorkADvance(沖縄勤務)」等、多くの社内制度を実現。

仲里 淳矢 様  →Facebook:https://www.facebook.com/j138cm 株式会社シーエー・アドバンス(CA ADvance,Inc)エグジニア

岩瀬 高博 様 →Facebook:https://www.facebook.com/takahiro.iwase 神戸デジタル・ラボ 上級技術者

分散KVS「okuyanma」の開発者 CEP Setsunaの開発
大規模eコマースサイトのチューニング、運用
分散処理、データベースの研究及び適応
OSS,Java,DB,車が好き

講演内容

■NoSQLってなに?
 ・今まで主流であったRDBMSとは
  →RDBMSの強み・弱み
 ・NoSQLがRDBMSと違うところ
  →NoSQLの強み・弱み
 ・どういった開発ケースの際に使用すべき技術なのか

■どんな種類があるのか?それぞれどんな特徴があるのか
 ・Cassandra
 ・HBase
 ・TokyoTyrant
 ・MongoDB など

NoSQL徹底解剖

内容:
◯CAアドバンスとは
◯NoSQLの特徴
◯NoSQLが苦手なこと
◯NoSQLの種類
◯CAP定理について
◯CAアドバンス社で検証したNoSQL
◯CAアドバンスでの採用
◯最後に

◯CAアドバンスとは

サイバーエージェントの子会社。東京と沖縄に事業所がある。(東京:50名、沖縄:250名)
技術推進グループを立ち上げ、NoSQLの研究をしている

■NoSQLの用途
・リスティング広告のデータに使っている
・サイト監視対象の画像やテキストデータ→アメーバやアメーバピグのものを監視している。そのデータ分析のためにNoSQLを使用している
・サイバーエージェントの大量のログデータの分析をしている

上記3つはMySQLだと読み書きの性能に限界を感じていた。
資金投入出来る環境でもないため、限られた資源を最大限使うためにNoSQLを使用することにした。

■CAアドバンスで使うデータ量はどれくらい?
▶リスティング広告のデータ
1日600万〜1500万レコードくらい
▶キーワード・広告
全部で20億レコードくらい。10%くらいが1日に更新される
▶サイト監視対象の画像、テキストデータ
1日500万〜1000万レコードくらいずつ増加。
▶システム運用に関する各種ログデータ
1日2000万レコードくらいずつ増加

◯NoSQLの特徴

▶固定されたスキーマに縛られない
  →スキーマレス:自由に絡む定義が出来る
  →KVS(KeyValueStore):キーと値をセットで保持する

▶関係モデルの結合操作を利用しない(JOINが出来ない)
  →テーブル間のJOINが出来ない
  →必要であればアプリケーション側で実装
  →JOINがない理由としては、ロックが発生してしまうため

▶水平スケーラビリティが確保しやすい事が多い
  →サーバの追加が容易
  →自動的に負荷分散を行なってくれるケースが多い

▶トランザクションが利用出来ないものが多い
  →データの一貫性よりも速度を重視しているから
  →必要ならアプリケーション側で実装する必要がある

▶SQLではない方法でデータを操作する
  →memcachedプロトコル等の汎用的なものを使用
  →独自のコマンドで操作を行う
  →言語側でライブラリが提供されている場合がある

◯NoSQLが苦手なこと

▶データを結合させて取り出す
  →KVSではデータをキーの単位でしか操作できない
  →階層モデルはテーブル間の結合が出来ない

▶データの整合性を完全に保つ
  →複数サーバにデータが分散している場合、サーバ間の整合性が保証されないケースが多い

▶柔軟な検索/集計/並び替え
  →SQLのように、値に対しての操作は苦手
  例)MongoDB
   検索用のコマンドは容易されているが、実行速度が非常に遅くなる
   シェルを使ったMapReduceで集計すると速いが、シェル作成の手間がかかる
  例)KVS
   そもそも値が操作出来ないのでアプリケーション側一度取得して操作する

◯NoSQLの種類

▶分散KVS
データをキーとバリューのペアにして管理するデータベース。高速な読み書きが可能だが、複雑な検索処理には向いていない
例)memcached,Couchbase,okuyama,Amazon Dynamo, kyoto cabinet

▶列指向データベース
データを列単位でひとめとめにして管理するデータベース。大容量に対して検索を行うなど、処理の負荷が高くてRDBMSでは高性能を期待できない場合でも、高速な読み書きが可能
例)Google BigTable, Amazon Simpledb ,HBase, Cassandra

▶ドキュメント指向型データベース
特定のスキーマを持たないデータベース。構造が複雑なオブジェクトをそのまま保存しやすい。スケーラビリティが高く、サーバを容易に追加出来る
例)mongoDB,Couchdb

◯CAP定理について

CAP定理とは→wiki

C (Consistency)
 全てのサーバーでおなじデータが見れる
A (Availability)
 どんな状態でもデータの参照が可能である
P (Partition-tolerance)
あるサーバーのネットワークが分断されても、別のサーバーからデータを参照可能であること

例)RDB(MySQL)はCとAを保証しており、Pを犠牲にしている
C:サーバーが単一なため、一貫性は保証されている
A:ネットワークを超えた高頻度の読み込みロックは発生せず、高い可用性が保証されている
P:構成するネットワークが途中で切れたり大きく遅延した場合、そのシステムとしては動作が保証されなくなってしまう

例)Apache CassandraはAとPを保証。代わりにCを犠牲にしている
C:複数サーバにデータが存在し、サーバ間のデータ同一性は保証されていない。
A:単一障害点となるノードが存在しない。同一のデータが複数サーバで保持されている。
P:ネットワークが分断されても、同一ネットワーク内のノードで運用を続けることが出来る

NoSQLにも様々な種類があるため、システムに求められるものは何か、解決したい問題は何かを意識してNoSQLを選択する必要がある

◯CAアドバンス社で検証したNoSQL

Cassandra

開発:Facebook
2008年公開、Javaで実装
開発体制:Apache Incubator
採用実績:楽天、docomo、Facebook、Twitter
Google BigTable+Amazon Dynamo
高可用性と冗長性を併せ持つ分散データベース

Google BigTableのデータモデルとは
無停止でサーバーの増加、削減が出来る。
常に1台のマスターが存在し、それが全体を管理している

Amazon Dynamoの分散システムデザインとは
高い可用性と永続性を達成するため、複数のホストにデータを複製する。

Cassandraの特徴 ▶大規模データを扱えるように設計。
▶前ノードが同一の機能を持っており、管理サーバなどは存在しない。可用性の高いシステムが構築可能。
▶データは各ノードに自動的にレプリケーションが行われる。ノードを増やすことで容易にスケールアウトが可能。
▶ノードの追加、削除が停止せずに行える。
▶データはすべて4次元、5次元の連想配列で保持する
▶データ保持方法がしっかりしているため、データベース設計がしやすい

HBase

開発:Powerset社、Rapleaf社の社員
実装言語:Java
公開日:2007年2月(プロトタイプ公開)
開発体制:Apache Software Foundation
採用実績:Facebook,サイバーエージェント

特徴 ▶KVS型の分散データベース
▶GoogleのBigTableを参考に設計
▶負荷に対して非常に高いスケーラビリティと性能を発揮
▶シンプルで強い一貫性モデルを備えている
▶自動ロードバランス、フェイスオーバー、自動シャーディング
▶行に対する操作はアトミック
▶更新前の古いデータが見えることがない
▶ReadよりもWrite性能が重視されている(RDBとは逆)
▶writeの動作は、メモリにバッファされ、一定サイズに達したらディスクに書き込む
データは3階層で保持する。一般的なRDBとおなじようなデータモデル

mongoDB

開発者:10gen社
公開日:2009年2月
実装言語:C++
開発体制:10gen社
採用実績:SAP,MTV,SourceForge,GILT Group,Disney,サイバーエージェント,NAVER他多数

ドキュメント指向データベース
▶スキーマレス
▶シャーディングが容易
▶レプリケーションが容易
▶スケールアウトが簡単
▶js実行エンジンを搭載しているので、MapReduce等に利用出来る

MapReduceとはwiki 大量出たを分散処理させるために使用されているフレームワーク。MAPで処理を多数のノードに分散し、Reduceで結合する

kyoto cabinet
開発者:mixi 平林さん
公開日:2010年5月
実装言語:C++
開発体制:FAL labs
採用実績:mixi

mixiにより開発されたkey-valueストアの機能を持ったデータストレージ。
TokyoCabinetに代わるものとして開発
memcachedからの比較的容易な移行が可能

memcachedとの違いは
▶データをファイルに書き出すことにより、永続性をもたせている
▶keyに対するvalueあたりの容量制限がない(memcachedは1Mの制約)
▶keyだけでなく任意のvalueを条件としてデータの検索を行える

◯CAアドバンスでの採用

▶システムのログ蓄積
mongoDB
・多くの採用実績
・大量データ操作時の安定したパフォーマンス
・PHPに専用のアクセスクラスが存在した

▶リスティング広告のレポートデータ蓄積
MySQL
・枯れたDBなので運用がしやすい
・データの一貫性と稼働率の高さが求められるため

▶社内標準のキャッシュ用DB
KyotoCabinet
memcachedプロトコルのために既存のプログラム資産を活かせる

運用しはじめて2ヶ月。何か起こりそう。。。

◯最後に

NoSQL導入にあたって、「問題点は何か」「導入によって何を実現したいのか」をしっかりと考えて選定するのが良い
検証にあたって、MySQL速いな、と感じた。「速い=NoSQL」っていう概念が崩れた。

一緒に働くメンバーを募集中です。
メールでのお問い合わせはこちら→ saiyo [at] ca-adv.co.jp まで

今回のNoSQL勉強会で、NoSQLの全体像がつかめた気がします。
データベースまわりは興味のある分野なので聞いていてすごくわくわくしました。
これからは一度触ったmongoDBで何かを作ってみたりしながら動向を追っていこうと思います。
講師の大谷 祐司様、仲里 淳矢様、岩瀬 高博様
今日はありがとうございました。
Read more

単一のフィールドでバリデーションを行うには、モデルでバリデーションを定義してやればいいのですが、複数のフィールドにかかるバリデーションはどうすればいいのかわかりませんでした。 今回取り扱う、複数のフィールドにまたがるバリデーションというのは以下のような電話番号のフィールドや名前のフィールドなどです。

1つずつフィールドにバリデーションするとエラーメッセージがいくつも出てくる

結論からいうと、

自分で関数を定義する

ことによって解決しました。 例えば、空のフィールドを許さないバリデーションを行う場合は以下のようにモデルに書くと思います。

モデル

<?php
class Posts extends AppModel {
   public $validate = array(
      'test_field' => array(
         'rule' => array('notEmpty'),
         'message' => '文字を入力してください。'
      )
   );
}

ここでruleに指定してあるnotEmptyというものは、CakePHP側で作成してある組み込み関数になります。
ちなみにnotEmptyがどこに定義してあるかは公式ドキュメントに書いてあります。

notEmpty – CakePHP公式ドキュメント

ruleに指定している部分が関数なのであれば、自分で作成しよう! ということで複数フィールドにわたるバリデーションも自作の関数を作成することで解決出来ます。
それではさきほどの画像のような、電話番号のバリデーションを行なってみましょう。

Viewに以下のように書いてあるとします。

<?php echo $this->Form->create('Post');?>
<?php echo $this->Form->text('tel1', array('label' => false));?> - 
<?php echo $this->Form->text('tel2', array('label' => false));?> - 
<?php echo $this->Form->text('tel3', array('label' => false));?>
<?php echo $this->Form->end('送信');?>

この場合、tel1,tel2,tel3それぞれにバリデーションをしてもよいのですが、tel1,tel2が空のフィールドだったりした場合、エラーメッセージが2つ表示されることになります。

モデルに全てのフィールドが空のフィールドを許さず、数字のみしか受けつけないという関数を作成し、$validateに定義します。

<?php
class Post extends AppModel {
   public $validate = array(
      'tel1' => array(
         'notEmpty' => array(
            'rule' => 'checkNotEmpty', //下に関数を定義している
            'message' => '電話番号を入力してください。'
         ),
         'custom' => array(
            'rule' => 'checkNumberAll', //下に関数を定義している
            'message' => '数字のみ入力してください。'
         )
      )
   );

   public function checkNotEmpty(){
      if(!empty($this->data['Post']['tel1']) && 
         !empty($this->data['Post']['tel2']) && 
         !empty($this->data['Post']['tel3'])) {
            return true;
      } else {
            return false;
      }
   }

   public function checkNumberAll(){
      // 数字のみ許可
      $pattern = '/^[0-9]+$/';
      $tel1 = preg_match($pattern, $this->data['Post']['tel1']);
      $tel2 = preg_match($pattern, $this->data['Post']['tel2']);
      $tel3 = preg_match($pattern, $this->data['Post']['tel3']);
      if(empty($tel1) && empty($tel2) && empty($tel3)){
         return true;
      } else {
         return false;
      }
   }
}

これで複数フィールドのバリデーションをすることが出来、エラーメッセージも1つしかはかなくなります。
$this->dataで無理やり行なっている部分を汎用性のあるものにするのが次のステップですね。
もっとよいやり方があれば教えていただきたいです。

この記事は以下のページを参考にしました。
CakePHP Users in Japanのほうのページには、汎用性のある関数が書かれているのでそれを見ながら上の関数たちを汎用性のあるものに変えていこうと思います。

参考ページ

“複数のフィールドにまたがるバリデーションは?” フォーラム – CakePHP Users in Japan

notEmpty – CakePHP公式ドキュメント

追記(2012年9月13日15:30)
公式ドキュメントにもしっかり書いてありました。。
こういうのって気づいたあとに見えるようになりますよね。。
Model – CakePHP API(validateの部分)

Read more

このブログは2012年7月11日に立ちあげ、今日で2ヶ月目になる。
このブログを立ち上げようと思ったのは本当にひょんなことで、せっかくブログを書くのだから何か目標があったら面白いかも、などと思い、わかったブログさんの「これからブログを頑張ろうと思う人へ。まずは三ヶ月毎日書く。話はそれからだ。」を読み、触発され、毎日ブログを書くことを決意しました。それも3ヶ月毎日。

最初はとても苦痛な作業だったり、何を書けばいいのか悩むこともあったが、自分のブログなので自分が書きたいことを書けばいいんじゃないか、と思うようになって毎日書くことが苦痛じゃなくなった。

ブログを毎日書き続けることは、多くの文字を書くことが苦痛じゃなくなる、発信する癖をつけるにはちょうどいいのではないかと思う。

もしこれからブログを始めようと思う人がいれば、一緒にブログを書き続けよう。僕は少なくともあと1ヶ月は毎日書き続ける予定なので。

おかげ様でこのブログは2ヶ月で約1400人の方に見られ、PVとしては合計で4000PVくらいになっている。
また、最近ではGoogleからの流入も多く、何もせずとも20人くらいの方が来てくれるようになりました。本当に嬉しいことです。

僕のブログのPVやUUは他の大手ブログからすれば微々たるものかもしれないが、僕からしたら当初予定していたよりも多くの方に見てもらえているので満足しています。もちろんもっと多くの人に見られるべく努力はしていきます。

今日、ブログ開始2ヶ月を迎えるにあたって、これまでの2ヶ月間を振り返るという意味も含めて、このブログの中でよく読まれている記事5つを紹介したいと思います。
もしまだ読んだことがない記事があれば見てみてください。

5番目によく読まれている記事:
プログラミング出来るようになるまでにしたであろうこと

この記事は自分がプログラミング出来るようになるまで、実際に行動したことをまとめた記事になっています。
ただ自分でも明確に自分のやったことを覚えているわけではないのであやふやな題名になっています。

今思い返すと、しっかりとした題名にすればよかったかなぁと思います。
プログラミングを今から勉強して出来るようになりたい!と思っている人は参考にしてみてください。

4番目によく読まれている記事:
ブログを1ヶ月毎日書き続けてわかった、ブログを毎日更新し続ける秘訣

ブログを書き続けて1ヶ月記念として作った記事が4番目によく読まれています。
1ヶ月続けてみると、何がブログを書かなくなる理由なのかが明確にわかってきます。
そのブログを書かなくなるであろう原因をしっかりつぶしてこれたからこそ毎日書き続けて2ヶ月目を迎えることが出来たのかなぁと感じます。

機会があればブログを書かなくなる理由もまとめてみようと思います。

3番目によく読まれている記事:
知らないなら損をしている!HTMLコーディングスピード3倍に!? zencoding 導入方法まとめ

僕がコーディングをするときは、もうzencodingなしではやる気がなくなるくらい便利です。
これを導入することでHTMLを書くことが苦じゃなくなりましたし、作業効率も圧倒的にあがりました。
なのでもしコーディングをしている人がいれば、zencodingを導入してみてください。
必ずコーディングスピードがあがること、間違いなしです!

2番目によく読まれている記事:
テック系なら必ずフォローすべき おすすめTwitterアカウント10選

僕がフォローしていて、かつ有益な情報をよく流してくれているTwitterのアカウントを10個、紹介しています。
Twitterは人とコミュニケーションをとるツールとしても優れていますが、情報収集ツールとして使う場合でもとても優れています。
もしまだフォローしていないアカウントがあればぜひフォローしてみてください。

1番よく読まれている記事:
WordPressでブログを立ち上げたときにすぐに入れるべきプラグイン9選

WordPressを立ち上げたときに、最初に必ずいれるべきプラグインたちをまとめました。
この記事がやはり1番シェアされていて、このバズが起きたときは本当に驚きました。
ただとても便利なのでWordPressを運用されている人は1度チェックしてみるとよいと思います。

毎日ブログを書き続けて2ヶ月を迎えて

2ヶ月間毎日書き続けていることによって、僕のブログのコンテンツは60を超えました。
これによってGoogleからの流入も日に日に多くなっています。
僕の目標である3ヶ月毎日書き続ければコンテンツは100を超えているでしょう。
どれだけ流入が増えるのかをわくわくしながら毎日記事を更新し続けたいと思います。

今までこのブログを読んでくださったみなさま、ありがとうございます。これからもよろしくお願いします。そしてぜひ、下記のFacebookページにいいね!を押してください(笑)

Read more

この記事はSMASHING HUBに掲載された 12 Evil HTML Tag Mistakes You Really Should Avoid の内容を日本語訳したものです。

HTMLを書く仕事をしている人たちはHTMLポリシーについて熟考し、気をつけなければならない。ここでは、コード内でよくある小さなミスを取り上げ、それぞれのHTMLタグのミスに名前をつけました。これから取り上げるようなミスを避けたいのであれば、この記事はあなたを助けることになります。以下で、コーディング中に犯しがちなもの、無視されがちなものについて解決策とともに、議論しています。これらのヒント(チップス)はHTMLを書く仕事をしている全ての人たちにとって役立つものになるでしょう。

ミス1:HTMLタグの間違ったネスト

HTMLタグの適切な閉じ方は重要です。HTMLタグは上から書いた順とは逆の順番で閉じていかなければなりません。初心者は通常、適切な終了タグについてチェックすることを怠らないでください。バリデーションエラーが出てしまい、適切なスタイルが適用されないことがあります。なので、以下のミスには注意してください。

間違った使い方:

<div><p><a>This is my Smashing text</p></div></a>

正しい使い方:

<div><p><a>This is my Smashing text</a></p></div>

ミス2:リストの不適切な使い方

OLタグ、LIタグはいつも、ウェブページの様々な用途で使用するアイテムを並べるために使われるべきです。これによって他の多くの利点を得ることが出来ます。リストタグは適切な方法で情報を並べることにとても役立ちます。コード内で、強制的な改行を避けたほうがよりよいです。(強制改行とは長い1文を見栄えをよくするために文の途中で改行すること)

また、サーチエンジンはリストタグを認識し、間違った使い方をしたサイトの順位を下げ、標準的な使い方をしているサイト順位を上げます。

ミス3:フォームタグの不適切な使い方

私たちの多くはフォームタグとテーブルタグを同時に使うときに困惑します。多くはテーブルタグを最初に置きます。テーブルタグ、フォームタグ、どちらを最初に置くのか迷うのです。以下が正しい方法です。

間違った使い方:

<table><form><tr><td>……..</td></tr></form></table>

正しい使い方:

<form><table><tr>…….</tr></table></form>

ミス4:インライン要素内にブロック要素を使う

使っているHTMLのほとんどは、インライン要素かアウトライン要素のどれかに当てはまることを知っているだろう。プログラマーによって作られたこれらのタグはデフォルトではブロック要素かインライン要素として作られた。ブロック要素は、ドキュメント内の区分と同様にパラグラフを含みます。それに対してインライン要素はブロック要素の内部に置かれます。この構造はドキュメントの構造と合っています。したがって、インライン要素を使うとき、必ずブロック要素の内側に置き、それ以外の場所に置いてはいけない。

いくつかのブロック要素:

<pre><div>,<h1>…<h6>,<p>,<ul>,<ol>,<dl>,<table>,<blockquote>,<form></pre>

いくつかのインライン要素:

<pre><span>,<a>,<strong>,<em>,<img />,<abbr>,<acronym></pre>

ミス5:alt要素を取り除いてしまう

画像を扱うときや、ページに画像を並べたいときは必ずalt要素を使わなければならない。これはユーザーが並べられた画像が何か決定することが出来るし、回線速度の遅い閲覧環境やスクリーンリーダー(音声でページを読み上げるソフト)を使用しているユーザーにとって必要です。この属性は表示された画像を適切に説明しなければならない。alt=”image”と書いてはいけない。画像を用いて装飾する場合はalt=””を使う。

間違った使い方:

<img src="smiley.gif" alt="" />

正しい使い方:

<img src="smiley.gif" alt="Smiley face" width="42" height="42" />

ミス6:太字や斜体に間違ったコードを使う

普通、<b>は太字に使われ、<i>は斜体で使われるが、これらは表層タグとして知られている。したがって、CSSを用いて様々なフォントスタイルにしていくのがよいのです。もし一部のテキストだけ強調したい場合は、<strong><em>を使う。これらは<b><i>とおなじことをしてくれる。

ミス7:不必要な強制改行を使う


タグは1つの文章を強制的に改行し、次の行のセンテンスを始めるタグです。多くの人たちは要素間で強制的に改行を挿入しています。これは正しくない。次の行にする必要があるときだけ必要なら使用しましょう。

間違った使い方:

This is my first paragraph
<br>
<br>
<br>
This will be my test description

正しい使い方:

<p>This is my first paragraph</p>
<p>This will be my test description</p>

ミス8:正しくないstrikeタグを使用する

これまで、<strike>タグや<s>タグはテキストの打ち消し線に使われてきました。しかし今ではこれらのタグは非推奨のタグとして知られています。新しいタグは<ins>タグや<del>タグが紹介されています。これらはページやドキュメントからテキストを挿入したり消去したりするのに使われます。

ミス9:インラインstyleを使う

インラインstyleはよくないとたくさん聞いたことがあると思います。ではなぜ悪いことなのか思ったことはありますか?それはCSSとセマンティックHTMLはすべての装飾と構造をわけることであり、よってHTMLドキュメントに直接書き込むことは正しくないのです。これがスタイルシートでスタイルを常に保つこといつもアドバイスしている理由です。

間違った使い方:

<p style="font-size:14px; font-weight: bol">

また、スタイルシートを用いた適切な方法は、表層的であり、よい方法はCSS内に保持しておくことです。

ミス10:border属性を要素に含めたり含めなかったりすること

border属性は表層的な効果でしかないことを心にとめておきなさい。したがって、CSSによって代替しなければならないのです。たとえデフォルトでborderが作成され、邪魔されたとしても面倒臭がってはいけない。

間違った使い方:

<img src="smiley.gif" alt="" border="0" />

正しい方法はスタイルシートを用いて定義することです。

ミス11:ヘッダータグを無視すること

ヘッダータグは文章の見出しを作り、ヘッダーとともにセクションが作られます。通常、<h1><h6>タグがこの目的で使われます。ときどき、ヘッダーはページの正しい位置に置く必要があります。全体的に、ヘッダーが現れて欲しいところに依存します。これらを1-6のオーダーで使用するのがよい方法です。

間違った使い方:

<strong>This is my Smashing Heading</strong><p>This is my xyz description.</p>

正しい使い方:

<h1>This is my Smashing Heading</h1><p>This is my xyz description.</p>

ミス12:marqueeやblinkのひどい使い方

<marquee>タグや<blink>タグはページの見た目をひどいものしてしまう方法の1つだと言えます。もし何かでユーザーの気をひきたいのならば、文章を縦横に流すよりも代わりの方法を使ったほうがよいかもしれません。これは間違いなくユーザーを不愉快にさせます。

この記事はSMASHING HUBに掲載された 12 Evil HTML Tag Mistakes You Really Should Avoid の内容を日本語訳したものです。
HTMLのバッドノウハウがよくまとめていますね。 ついつい面倒だと思ってやってしまうことがありますが、それをやってしまうということはまだまだレベルが低いということですね。 常に気をつけながらHTMLを書いていこうと思いました。
Read more