笑わそうとしてるという風にしか思えない。
【日本初】初期費用30万円のSEOサービス「ダイヤモンドSEO」を定額給付金12000円で お申し込みできる「定額給付金を88倍に増やそうキャンペーン」を2009年3月限定で開始(ダイヤモンドメディア株式会社)
キャンペーン名「定額給付金を88倍に増やそうキャンペーン」は、
実際に売上げ増加に貢献することと、
末広がりの8で縁起を担ぎたかったため、このようになりました。
アホか。
定額給付金を88倍に増やそうキャンペーン
2009年3月10日 by mikuta
cakephp1.2でcontrollerでのvalidatesが機能しない時
2009年1月23日 by mikuta
確認画面などをはさみたいとき、controller内でvalidationをしなければいけない。
しかし、
if( $this->Model->validates( $this->data)){上記だけでは、validates()は機能しない。
$this->render('confirm');
}
一文追加することで正しく機能する。
一時間ハマった…。$this->Model->set( $this->data);if( $this->Model->validates( $this->data)){
$this->render('confirm');
}
1対1のリレーション構造のテーブルの意味
2009年1月9日 by mikuta
たとえば、名簿のテーブルを作成するとして、
・idなどのコラムを考えていたとき。
・氏名
・生年月日
・性別
・アドレス
・会社
・部署
・電話番号
・FAX番号
・idこんな感じでテーブルを分けたがる人が周りにいた。
・氏名
・生年月日
・性別
------
・アドレス
・会社
・部署
・電話番号
・FAX番号
何でだろうって思って聞いても返答は、「なんとなく。」
気になって調べました。
後の仕様変更による、1対1から1対Nへの変更の可能性を考慮する場合。
つまり、仕様変更しやすいようにしとくってこと。
パフォーマンス改善を目的にテーブルを分割(非正規化という)することがある。
例として、以下のようなケースが有効。
・同じようなSELECTクエリがほとんどを占めるシステム
通常検索に使われないフィールドを別テーブルに分けることで、
クエリに使用するメモリを縮小することが出来る。
・DELETE / INSERTが多いシステム
データ型が可変長であるフィールドを別テーブルに分けることで
レコードが固定長になり、ディスクの有効活用が期待できる。
しかし、ストレージエンジン(InnoDB、MyISAM)などの違いによって状況は様々で、小中規模のシステムでは必要ない。って感じ。
結論としては、面倒なだけ。自分は分けません。
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;
}
}
?>
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」を入力してください。'
)
)
);
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 . "
";
}
}
}
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
登録:
投稿 (Atom)
