_onichannn

【CentOS】時刻をサーバーと同期させる際のコマンドめも。

よく使うので殴り書き。

$ ntpdate ntp.nict.jp

ntp.nict.jp

覚えよう。

 

【CentOS】CentOSのTimezoneを変更する方法。

めも。

ntpdateとかで時刻あわせたのにどうにもこうにも時刻がおかしい場合、タイムゾーンがずれている場合が考えられる。

ということで下記コマンドを実行。

$ cp -p /usr/share/zoneinfo/Japan /etc/localtime

やったねたえちゃん時刻が直(ry。

 

【Webサービス】JavascriptやHTMLのminify化データを綺麗に整形してくれるサービス。

めも。

http://jsbeautifier.org/

テキストエリアにminifyコードを貼り付け「Beautify JavaScript or HTML」を押すだけでインデントと改行を見やすく挿入してくれる。

クソ便利。( ˘ω˘ )

 

【Javascript】HTML5のカスタムデータ属性にアクセスする方法。

今回はjQuery無しのアプローチ。

下記のようなHTMLがあったとする。

<div class="target" data-hoge="piyo">target</div>

上記の「data-hoge」の中身を取得したい場合。

var elem = document.querySelector('.target');
var data = elem.getAttribute('data-hoge');
console.log(data);
// piyo

という様に取得できる。

 

【CakePHP】App::uses()の注意点。

めも。

App::uses()はクラス名とファイル名が一致していないと読み込めない。

TwitterのOauthライブラリを読み込もうとした際に、クラス名とファイル名の命名規則が異なっていたため一向に読み込めないという問題が発生。

大文字、小文字を確りと判別しているため、挙動に違和感を感じたら素直に統一させるべし。

 

【CakePHP2.4】DataSource::update()は常にfalseを返す。

これはほんとに要注意。

DBへのsave()処理時、返り値で成功失敗判定を行っている部分があったため一向に通過しないif文が発生してしまった。

というお話。

今後のトラブルシューティング時に覚えておきたいTips。

 

【CakePHP2.4】SessionComponent::setFlash()でエレメントを使う。

めも。

まず「app/View/Elements/」以下に好きなエレメントを作成する。

そしてコントローラーでsetFlash()をする際、下記のようにエレメントを呼び出す。

// elementFileName.ctpというエレメントを作成したと仮定する
$this->Session->setFlash('メッセージ', 'elementFileName');

これで作成したエレメントが呼び出される。

エレメント内では$messageに第一引数で渡したメッセージが格納されているので、任意の場所でechoしてやればよい。

 

【PHP】配列で二つの値が共に重複しない新規配列を返す関数。

必要だったので自作。

例えば以下のような配列があったとする。

$array = array(
	0 => array(
		'name' => 'tarou',
		'age' => '17',
	),
	1 => array(
		'name' => 'tarou',
		'age' => '19',
	),
	2 => array(
		'name' => 'tarou',
		'age' => '17',
	),
	3 => array(
		'name' => 'hanako',
		'age' => '15',
	),
	4 => array(
		'name' => 'alice',
		'age' => '20',
	),
	5 => array(
		'name' => 'bob',
		'age' => '17',
	),
	6 => array(
		'name' => 'alice',
		'age' => '20',
	),
	7 => array(
		'name' => 'bob',
		'age' => '17',
	),
	8 => array(
		'name' => 'tarou',
		'age' => '19',
	),
);

ここで配列中のnameとageが共に重複するレコードのみ取り除きたい。
というわけで下記関数を用意。

function array_pair_unique($array, $one, $two) {
	$first = reset($array);
	if(!array_key_exists($one, $first) || !array_key_exists($two, $first) ) {
		return $array;
	}
	$tmp = array();
	$return = array();
	foreach($array as $k => $v) {
		if(array_key_exists($v[$one], $tmp) && in_array($v[$two], $tmp[$v[$one]])) {
			continue;		
		} else {
			$tmp[$v[$one]][] = $v[$two];
			$return[$k] = $v;
		}
	}
	return $return;
}

上記関数を以下のようにして用いる。

$array = array_pair_unique($array, 'name', 'age');

すると下記のような結果が返る。見事に思惑通り。

array(5) {
  [0]=>
  array(2) {
    ["name"]=>
    string(5) "tarou"
    ["age"]=>
    string(2) "17"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(5) "tarou"
    ["age"]=>
    string(2) "19"
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(6) "hanako"
    ["age"]=>
    string(2) "15"
  }
  [4]=>
  array(2) {
    ["name"]=>
    string(5) "alice"
    ["age"]=>
    string(2) "20"
  }
  [5]=>
  array(2) {
    ["name"]=>
    string(3) "bob"
    ["age"]=>
    string(2) "17"
  }
}

元配列のキーは保持され、重複したレコードがある場合はその中で一番最初にヒットしたもがセットされる。
関数を呼び出す際に存在しないキー名が渡された場合、元配列をそのまま返却するようにしてみた。