このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

定額給付金を88倍に増やそうキャンペーン

2009年3月10日 by mikuta

笑わそうとしてるという風にしか思えない。

【日本初】初期費用30万円のSEOサービス「ダイヤモンドSEO」を定額給付金12000円で お申し込みできる「定額給付金を88倍に増やそうキャンペーン」を2009年3月限定で開始(ダイヤモンドメディア株式会社)


キャンペーン名「定額給付金を88倍に増やそうキャンペーン」は、
実際に売上げ増加に貢献することと、
末広がりの8で縁起を担ぎたかったため、このようになりました。

アホか。

このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

cakephp1.2でcontrollerでのvalidatesが機能しない時

2009年1月23日 by mikuta

確認画面などをはさみたいとき、controller内でvalidationをしなければいけない。
しかし、

if( $this->Model->validates( $this->data)){
$this->render('confirm');
}
上記だけでは、validates()は機能しない。
一文追加することで正しく機能する。
$this->Model->set( $this->data);
if( $this->Model->validates( $this->data)){
$this->render('confirm');
}
一時間ハマった…。

このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

1対1のリレーション構造のテーブルの意味

2009年1月9日 by mikuta

たとえば、名簿のテーブルを作成するとして、

・id
・氏名
・生年月日
・性別
・アドレス
・会社
・部署
・電話番号
・FAX番号
などのコラムを考えていたとき。
・id
・氏名
・生年月日
・性別
------
・アドレス
・会社
・部署
・電話番号
・FAX番号
こんな感じでテーブルを分けたがる人が周りにいた。
何でだろうって思って聞いても返答は、「なんとなく。」
気になって調べました。


後の仕様変更による、1対1から1対Nへの変更の可能性を考慮する場合。
 つまり、仕様変更しやすいようにしとくってこと。

パフォーマンス改善を目的にテーブルを分割(非正規化という)することがある。
 例として、以下のようなケースが有効。

・同じようなSELECTクエリがほとんどを占めるシステム
 通常検索に使われないフィールドを別テーブルに分けることで、
 クエリに使用するメモリを縮小することが出来る。

・DELETE / INSERTが多いシステム
 データ型が可変長であるフィールドを別テーブルに分けることで
 レコードが固定長になり、ディスクの有効活用が期待できる。

しかし、ストレージエンジン(InnoDB、MyISAM)などの違いによって状況は様々で、小中規模のシステムでは必要ない。って感じ。

結論としては、面倒なだけ。自分は分けません。

このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

cakephp1.2でXML形式のAPIをmodelとして使用する方法

2008年12月17日 by mikuta

cakephpには便利なXMLのパース関数があるので、それを使用する。
すげーラク、まさに「ゆとりプログラム」

app/models/yahoo.php
<?php
class Yahoo extends AppModel {

 var $name = 'Yahoo';
 
 // tableを使用しないという設定。
 var $useTable = false;
 
 // Yahoo!で取得するKEYを設定する。
 // app/confing/bootstrap.php に定義するのが無難か。
 var $appId = 'XXXXXXXXXXXXXXXXXXX';
 
 /**
  * web検索
  * http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html
  *
  */
 function webSearch( $word, $start = 1, $results = 10, $type = 'all', $format = 'any', $adult_ok = '1', $similar_ok = '', $language = 'ja', $country = '', $site = ''){
  $word = urlencode( $word);
  $req = "http://search.yahooapis.jp/WebSearchService/V1/webSearch?appid={$this->appId}&query={$word}$start={$start}&results={$results}&type={$type}&format={$format}&adult_ok={$adult_ok}&similar_ok={$similar_ok}&language={$language}&country={$country}&site={$site}";

  uses('Xml');
  $xml = new XML( $req);
  $respons = Set::reverse( $xml);
//  pr( $respons);
  return $respons;
 }

}
?>

このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

cakephp1.2のvalidationの組み込みルールまとめ

2008年12月11日 by mikuta

1.2になって、大分便利になってきたcakephpのvalidation。
組み込みルールがかなり増えていたので、まとめ。
(日本語環境で使えないようなものは切り捨ててあります)


必須項目(定番)

var $validate = array(
 'title' => array(
  'rule' => 'notEmpty',
  'message' => '必須項目です。'
 )
);



半角のアルファベットか数字のみ
var $validate = array(
 'username' => array(
  'rule' => array('alphaNumeric')
  'message' => '半角英数字でご記入下さい。'
 )
);



数字もしくは数値形式
var $validate = array(
 'age' => array(
  'rule' => 'numeric',
  'message' => '半角数字でご記入下さい。'
 )
);



URLであるか
var $validate = array(
 'website' => array(
  'rule' => 'url'
  'message' => 'URLをお確かめ下さい。'
 )
);



メールアドレス。引数に true を設定すると、メールサーバーのホストが存在するかどうかを確認する。
var $validate = array(
 'email' => array(
  'rule' => array('email', true),
  'message' => 'メールアドレスを正しく入力してください。'
 )
);



日付
var $validate = array(
 'born' => array(
  'rule' => 'date',
  'message' => '正しいデータを「YY-MM-DD」のフォーマットで入力してください。',
  'allowEmpty' => true
 )
);



文字の長さ。
var $validate = array(
 'login' => array(
  'rule' => array('minLength', '8'),
  'message' => 'ユーザ名は8文字以上にしてください。'
 )
);

var $validate = array(
 'login' => array(
  'rule' => array('maxLength', '15'),
  'message' => 'ユーザ名は15文字以下にしてください。'
 )
);



指定した範囲の長さでおさまっていること。最小値と最大値は必須
var $validate = array(
 'password' => array(
  'rule' => array('between', 5, 15),
  'message' => 'パスワードは5文字以上15文字以下にしてください。'
 )
);



範囲
var $validate = array(
 'number' => array(
  'rule' => array('range', 0, 10),
  'message' => '0より大きく10より小さい数を入力してください。'
 )
);



ユニークであるかどうか(超便利!!)
var $validate = array(
 'login' => array(
  'rule' => 'isUnique',
  'message' => 'このユーザ名はすでに使用されています。'
 )
);


数字の比較
var $validate = array(
 'age' => array(
  'rule' => array('comparison', '>=', 18),
  'message' => '18歳以上の方のみ対象です。'
 )
);
var $validate = array(
 'age' => array(
  'rule' => array('comparison', 'greater or equal', 18),
  'message' => '18歳以上の方のみ対象です。'
 )
);



IPv4
var $validate = array(
 'clientip' => array(
  'rule' => 'ip',
  'message' => 'IPアドレスを正しく入力してください。'
 )
);



小数。パラメータは、小数点以下の桁数。もしパラメータを何も与えなかったら、データが浮動小数点であってもバリデーションは成功。
var $validate = array(
 'price' => array(
  'rule' => array('decimal', 2)
 )
);



値と型の両方で確認
var $validate = array(
 'food' => array(
  'rule' => array('equalTo', 'cake'),
  'message' => 'この項目は文字列で「cake」としなければなりません。'
 )
);



ホワイトスペースのみ。ホワイトスペースは、半角スペースとタブ、復帰文字(\r)および改行文字(\n)を含む。
var $validate = array(
 'id' => array(
  'rule' => 'blank',
  'on' => 'create'
 )
);



指定したリストの中に含まれているか
var $validate = array(
 'function' => array(
  'allowedChoice' => array(
   'rule' => array('inList', array('Foo', 'Bar')),
   'message' => '「Foo」か「Bar」を入力してください。'
  )
 )
);

このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

Google AJAX Search APIのサーバーサイドスクリプト向けのものが64件まで取得できるようになってる。

2008年11月27日 by mikuta

前に書いたエントリ「Google AJAX Search APIにサーバーサイドスクリプトで取得できるものができてる」

32件までしか取得できなかったのに、今日試したら64件まで見れる!!!

証拠はコチラ

超適当な検証コードは以下。

if ( !function_exists('json_decode') ){
  function json_decode($content, $assoc=false){
    require_once 'Services/JSON.php';
    if ( $assoc ){
      $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
    } else {
      $json = new Services_JSON;
    }
    return $json->decode($content);
  }
}

if ( !function_exists('json_encode') ){
  function json_encode($content){
    require_once 'Services/JSON.php';
    $json = new Services_JSON;
    return $json->encode($content);
  }
}


$q = urlencode( "テスト");

for( $i = 0; $i < 100; $i += 8){
  $url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q={$q}&rsz=large&hl=ja&start={$i}";
  $jsonText = file_get_contents( $url);
  $jsonDec = json_decode( $jsonText);
  echo "{$url}
\n";
  if( is_array( $jsonDec->responseData->results)){
    foreach( $jsonDec->responseData->results as $key => $value){
      echo ($i+1+$key) . ' : ' . $value->title . "
";
    }
  }
}

このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

httpdのlogrotateのタイミングでhttpdが落ちてしまう時の対処法

2008年11月25日 by mikuta

logrotateの設定を変更する。

vi /etc/logrotate.d/httpd
/var/log/httpd/*log {
 missingok
 notifempty
 sharedscripts
 postrotate
  #/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true #ここを削除
  service httpd condrestart 2> /dev/null || true #ここを追加
 endscript
}


設定ファイルにミスがないか確認
logrotate -dv /etc/logrotate.d/httpd
参照:Bug 64133 – sometimes upon SIGHUP it doesn't like certificates and apache STOPS