文字コードの表記方法メモ

文字コードを指定するとき、「ハイフン入れるんだっけ?」「小文字だっけ?」「ujis? euc?」と
しょっちゅう混乱するのでメモ。
間違いがあっても知りません。大文字でもいいとか色々ありそうな予感。

言語など 記述法など シフトJIS EUC UTF-8
css @charset shift-jis euc-jp utf-8
PHP php.ini,mb_〜() SJIS EUC-JP UTF-8
HTML <meta ... charset= Shift_JIS EUC-JP UTF-8
MySQL my.cnf sjis ujis utf8
Emacs C-x RET c〜 sjis euc-jp utf-8

Emacs用チートシート(自分用)


36歳ともなると物忘れが激しくて、物覚えが悪くて困る。
何が困るかってEmacsの操作が覚えられん。
基本操作は覚えたけど、稀にしかしない操作を忘れる。


今日もUTF-8のファイルを開いたらShift-JISになっていて、
文字コードの指定の方法が思いだせん。


操作メモをテキストファイルに保存し、いつでも見られるようにしてるけど、
それを開くのも面倒なので印刷してモニタの横においておくようにPDFを作成。


なんか環境によって操作方法が微妙に違うので、あくまでも自分用NTEmacs)。


もっと他にも便利な操作があるだろうけど、知らない。あくまでも自分用


需要は無いと思うけど、せっかくなのでアップロード。


Emacsチートシート.pdf


せっかくなのでイラレ形式もアップロード。安心のバージョン8保存。
Emacsチートシートv8.ai..zip


追記:あとで見るメモ
http://d.hatena.ne.jp/goinger/20090120/1232423745

CakePHP 1.2でvalidate::emailで携帯だとエラー

ものすごい今更。

CakePHP 1.2でvalidate::emailで携帯のメルアドだとエラーがでる場合がる。

案の定、連続ドット「.」や@の手前のドットで出る。

誰のせい?ドコモのせい?

どうしようかな〜

やっぱ俺々my_validation_rule.phpに入れちゃおかな〜

validation.phpのソースを見たけど、正規表現読むのめんどくさい。

人様のをコピペ参考にするか。
【CakePHP】validate::email で携帯電話のアドレスをvalidateする


追記:人の説明をよく読んでない俺馬鹿。
上のリンク先の奴は「携帯専用」なんで、今回はダメ。
結局昔作った誰かが作ったゆるゆるチェックで対応することに。
"/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/"

弾さんにバレたら怒られる。

Firefox3でGoogleツールバーが表示されない

Firefox3(Win)でGoogleツールバーが表示されない。いつの間にか。
今消えた。さっき消えた。馬鹿。
これで2回目。

状況としてはこの人(めっさ怒ってらっしゃる)と同じ
ボタンが表示されない。インストールしなおしても同じ。具体的な対処がすぐ出来るようにしてもらえませんかね。

アドオンをオンオフしても治らず。

表示メニューを確認しても問題ない。

前回は仕方なくアドオンをアンインストールし、
再度インストールすると治った。

新たなアドオンは最近入れてない。
やったのはFirefox自体のバージョンアップぐらい。
1回目と2回目の間になんもしてないし。
謎。

NTEmacs導入メモ

新しく購入した古いノートPCにNTEmacsを導入。
作業メモ。


NTEmacs本体の入手
ダウンロード - NTEmacs JP Project - SourceForge.JP



■HOMEディレクトリの作成
「システム→プロパティ→詳細設定→環境変数→ユーザの環境変数
新規作成でHOMEという変数を作成。
ホームディレクトリとして使用するディレクトリのパスを設定。


参考)
k4zm blog NTEmacsが最高すぎました



■背景色を黒ベースに変更(すぐ辞めた)
作成したショートカットのリンク先指定で「-reverse」を追加
C:\emacs\22.2\bin\emacs.exe -reverse

参考)
背景色が「黒」な人に質問です。 あなたはどんな配色でemacsを利用していますか。 特に視認性にこだわりのある方の回答をお待ちしています。 ち.. - 人力検索はてな



■カラーテーマを設定

  • reverseだと何となく色がもっさりしているのでちゃんと(?)設定する

color-theme-elをダウンロード


color-theme.elthemes/をsite-lispに入れる

.emacsに下記のように設定

;カラーテーマを設定
(require 'color-theme)
(color-theme-initialize)
(color-theme-euphoria)

参考)
Emacs Color Theme: プログラマーになりたい!



■せっかくなので半透明
.emacsに設定。
かっこいいけど、飽きるかな?


参考)
これから windows で emacs はじめるなら Meadow よりも NTEmacs の方がいいたった 1 つの理由 - yagihiro output



■行番号を表示
linum.elをダウンロードして、.emacsに設定。
Linum


参考)
プログラムノ~ト:CarbonEmacsでもlinum.el



PHPモード
PHP mode for Emacs | Get PHP mode for Emacs at SourceForge.net


参考)
11. emacsでPHP開発 - PHP TIPS:ITpro



■タブ幅を4文字にする
下記のサイトを参考に設定。


参考)
emacsのphp-modeでのタブ幅の変更 - sky hopper’s diary

CSSモード
下記のサイトを参考に設定。
http://uch-x40.seesaa.net/article/44721501.html


■未解決
タブを4文字幅にしたい。但し空白じゃなしに。(09.09.07解決)
全角スペース、タブ、改行文字を視覚化。
起動直後の画面の大きさをもう少し大きく、というか全体表示にしたい。

独自バリデーションの作成とその名前をどうにかせんといかん

ようやく仕事絡みでCakePHPに関われるようになったはいいが、
同時に2件の案件を進めることになったので、途端に自作ビヘイビア、コンポーネント、ヘルパー、バリデーションの最新版の管理がややこしくなってきた。
という訳で、下記のページを参考にプラグイン化をやってみる。


第4回CakePHP勉強会@TokyoのLTで発表してきました! - 忍び歩く男 - SLYWALKER

よく使う独自バリデーションルールをプラグインのbehaviorにまとめる - cakephperの日記(cakePHP1.2ベース)


共通のプラグインフォルダを使用するので、
アプリ毎にビヘイビアがを用意して片っ方を修正したらもう片方にコピーして....
みたいなことをする必要がなくて、いい感じ。


日本語絡みのバリデーションはcakephperさんのcakeplusを使用させてもらい、
その他、必要なやつを独自に作成。


■文字数を表示幅でチェック
広告コンテンツのため、見た目の幅(全角を2、半角を1)で制限する必要があり、
mb_strwidth()関数で幅をチェックする。


■電話番号チェック
探せばありそうだったけど、作った方が早そうなので作る。


■値の重複チェック
下記のページを参考にさせて頂きました。
實松アウトプット: バリデーションでメールアドレスの重複登録チェック2


■どっちかのフィールドを必須項目にする
メールアドレスか電話番号のどちらかに入力を必須とさせる。
以前に似たようなのを見た記憶があったけど、思い出せず、
cakeplusのcheckCompare()を参考に作成。


以下、ソース

<?php
/*
 * 使い方...
 * 
 * 	var $validate = array(
 * 		'test' => array(
 *			"rule1" => array('rule' => array('maxWidth', 30),
 * 				'message' => '全角15文字(半角30文字)以内です'
 * 			),
 *			"rule2" => array('rule' => array('phoneJP'),
 * 				'message' => '電話番号ではありません'
 * 			),
 *			"rule3" => array('rule' => array('checkDuplicates'),
 * 				'message' => 'この値は既に使用されています'
 * 			),
 *			"rule4" => array('rule' => array('checkEither', 'test2'),
 * 				'message' => 'testフィールドまたはtest2フィールドのどちらかに入力して下さい'
 * 			),
 * 		),
 * 	);
*/
class MyValidationRuleBehavior extends ModelBehavior {

	function setup(&$model, $config = array())
	{
		//$this->settings = $config;
		mb_internal_encoding('UTF-8');
	}
		
	/**
	 * 文字数を表示幅でチェック(全角2文字、半角1文字でカウント)
	 * @param array &$model
	 * @param array $wordvalue
	 * @param int $length
	 * @return boolean
	 */
	function maxWidth(&$model, $wordvalue, $length) {
		$value = array_shift( $wordvalue );
		return (mb_strwidth($value) <= $length);
	}
	
	/**
	 * 電話番号チェック 
	 * @param array &$model
	 * @param array $wordvalue
	 * @return boolean
	 */
	function phoneJP(&$model, $wordvalue) {
		$value = array_shift( $wordvalue );
		return preg_match("/^\d{2,4}\-\d{2,4}\-\d{4}$/", $value);
	}

	/**
	 * 値の重複チェック
	 * @param array $model
	 * @param array $wordvalue
	 * @return boolean
	 */
	function checkDuplicates(&$model, $wordvalue) {  
		$cond = array(key($wordvalue) => array_shift($wordvalue));
		$id = $model->getID();
		if ($id !== false) {  
			$cond[$model->name.'.id !='] = $id;  
		}
		return $model->findCount($cond) === 0;   
	} 

	/**
	 * 該当フィールドと指定フィールド、いずれかを必須入力としてチェック
	 * @param array &$model
	 * @param array $wordvalue1
	 * @param string $fieldname2
	 * @return boolean
	 */
	function checkEither(&$model, $wordvalue1, $fieldname2) {
		$fieldname1 = key($wordvalue1);
 		return ($model->data[$model->alias][$fieldname1] !='' || $model->data[$model->alias][$fieldname2] !='');
	}
}
?>


「どっちかのフィールドを必須項目にする」バリデーションの
名前を何にすればいいのか小一時間悩む。


チャットで相談してみると、「AnySides」「Either」でどうでしょう、とアドバイスを頂き、結局checkEither()にした。
最初やけくそで、docchika()という名前にしていたけど、チャットで笑われたw


関数名とか変数名とかクラス名とかファイル名とかテーブル名とかフィールド名とか悩むねぇ。


英語がダメダメだから翻訳サイトで単語を調べてわかっても、文脈というか用途に合っているのか、さっぱりわからん。


他の人(日本人)が書いたソースを見ると、「へぇ〜英語でそう言うんだぁなるほどぉ」と感心するけど、もしかすると、その人も自信無いまま書いてるのかもしれんなぁっと思ったり。


英語圏の人が英語の関数名を見る感覚って、日本人が日本語の関数名を見るのと同じだと想像すると、英語圏の人でも悩むのかもしれんなぁっと思ったり。


命名についての勉強会とかあると面白そうだと思う今日この頃。

ルーティング設定しているとedit($id)の$idが空になる?(その2)

前回の続き


自分の単なる勘違いなどで、前回かなり混乱しているので、
まずは問題を整理。自分用にメモ。


結論としては、
(1)(現時点の自分には)2種類のRouter::connect設定は不要
(2)コントローラのメソッドの引数に入ってくるのは$this->params[pass]の値のみ
(3)一気に色々やろうとするから混乱する


(1)2種類のRouter::connect設定は不要
なんで2種類の設定を記述したのか...それは解らないまま色々試すうちに
2種類を記述した時点で動いたように見えたから。
本来なら「設定-2」で事足りている(はず)。



(2)メソッドの引数に入ってくるのは$this->params[pass]の値
ソースを見るとそういう仕様。
「:id」のように「:hoge」みたいにした場合は、$this->params['hoge']に格納される。
本やウェブ上のサンプルソースでコントローラメソッドの引数が
function edit() {

function edit($id = null) {

function edit($id) {

function edit($id, $fuga) {
だったりするのが、ずっと気になってたけど、要するに
/コントローラ/アクション/パラメータ1/パラメータ2/....
っと、パラメータの数によって変わるからだということを知った。


ソースを追って調べると、


各コントローラのアクションメソッドの呼び出し元
「cake/libs/object.php」のObjectクラス、
Object::dispatchMethod()を見ると引数の$params配列の要素数ごとにcaseで分岐している。

<?php
function dispatchMethod($method, $params = array()) {
	switch (count($params)) {
		case 0:
			return $this->{$method}();
		case 1:
			return $this->{$method}($params[0]);
		case 2:
			return $this->{$method}($params[0], $params[1]);
		case 3:
			return $this->{$method}($params[0], $params[1], $params[2]);
		case 4:
			return $this->{$method}($params[0], $params[1], $params[2], $params[3]);
		case 5:
			return $this->{$method}($params[0], $params[1], $params[2], $params[3], $params[4]);
		default:
			return call_user_func_array(array(&$this, $method), $params);
			break;
	}
}	


その呼び出し元である「cake/dispathcer.php」のDispatcherクラス、
Dispatcher::_invoke()内の$contoroller->dispatchMethod()で
渡しているデータは$params['pass']となっている。

<?php
$output = $controller->dispatchMethod($params['action'], $params['pass']);


...そしてrouter.phpだったか?を見ると「:hoge」と設定したものは'pass'には入らない。



(3)一気に色々やろうとするから混乱する
ルート設定でのprefix指定やログイン認証など、一気に色々やるから
こんなことになる....と反省。


とりあえずはシンプルにCRUDを作ってから、一つずつ取り組むべし>俺