2012-02-22 shutdownユーザー
■/etc/passwd
shutdown:x:6:0:shutdown:/sbin:/root/script/shutdown.sh
2012-02-20 [cakePHP]リンクを絶対パスで
htmlヘルパーとか、formヘルパーなんかで生成されたURLって基本的に相対パスで書かれる。これを絶対パスで書いてもらおうとするお話。
とりあえず、cake/lib/router.phpを見てみる
* @param mixed $full If (bool) true, the full base URL will be prepended to the result. * If an array accepts the following keys * - escape - used when making urls embedded in html escapes query string '&' * - full - if true the full base URL will be prepended. * @return string Full translated URL with base path. * @access public * @static */ function url($url = null, $full = false) { $self =& Router::getInstance(); $defaults = $params = array('plugin' => null, 'controller' => null, 'action' => 'index');
おお、router::urlの第二引数をtrueにすればいいらしい。
とりあえず、デフォルト値をtrueにしてみたんだが、相対パスで出力された。
function link($title, $url = null, $options = array(), $confirmMessage = false) {
$escapeTitle = true;
if ($url !== null) {
$url = $this->url($url);
} else {
$url = $this->url($title);
$title = $url;
$escapeTitle = false;
}
で、
function url($url = null, $full = false) {
return h(Router::url($url, $full));
}
ってなってた。
urlメソッドで$fullは受け取れるようになってるんだが、linkメソッドで値を渡していないので、相対パスになってしまう。
ヘルパーの各メソッドを直すのは筋悪なので、router.phpに手をつけることにした。
function url($url = null, $full = false) {
/* ここで無条件にtrueに変更 */
$full = true;
$self =& Router::getInstance();
$defaults = $params = array('plugin' => null, 'controller' => null, 'action' => 'index');
if (is_bool($full)) {
$escape = false;
で、全部のリンクが絶対パスになった。
2012-01-31 [PG]netBeans+xdebug+samba
2012-01-25 [php]php -a
2012-01-24 [PG]webアプリ自動テスト
ちょっと調べてみたので。
テストツールって基本的に、いろんな状態での動作を再現させるツールで、再現結果を評価できるようになっている。
何を再現させるかで、いくつかツールがあったので。
2012-01-17 [PG]論理削除フラグに一言
どういう実装になるのか気になったので書いてみる。
何が気になったかって一意制約。こういうデーターは「PKになるだろう」って説もあるが、昨今のフレームワークの作法で祖も行かないことも多い。さて本題。
物理削除(ログテーブルに移してからの)の場合、再度同じのデータをinsertしてもすでに削除されているので、一意制約に違反することはないけど、論理削除(フラグによる論理削除)の場合、思いっきり違反しますよね。
これをどうやって実装してるのか非常に気になります。
ちょっと考えてみた。
論理削除と合わせて一意制約
でも、再度登録されたデータを削除すると、ここで一意制約違反。
なので、削除フラグが0/1な値にならなくなる。削除時に値を取得して、その値に更新。値はPKのhashとか、削除フラグ用にシーケンスを用意するとかでいいだろう。
・・・筋悪な気がしてならない。
アプリからレコードを削除するのにどれだけコードを書くんだよ。
そもそもどれだけのレコードが削除される? 該当列につけるであろうindexの効果は?
制約は設けずに、アプリでチェック
一度selectしてデータの一意性を確認してからinsertすれば一意になる。
だけど同時更新があると駄目。
二つのトランザクション(A,B)があったとして、同時に同一のデータをinsertしようとする
- Aでselect。同一データなし
- Bでselect。同一データなし
- Aでinsert
- Bでinsert
ってなったときに同じ値ができてしまう。
select前にテーブルロックすれば回避できるがそれでいいの?
きっと、こういった問題のないエレガントな方法があるんだろうなー。
2011-12-23 [数学]交換法則のない世界
http://blogs.itmedia.co.jp/magic/2011/12/6886-2d5b.html
より。
6×8 は 8×6 とは違うのか。
よく考えたら、交換法則の存在しない世界での数式なら×だわ。文章と違う計算やってるんだから答えがあっててもそれは偶然の一致でしか無いんだから、理解を評価するテストなんだから×にすべき。*1
この問題は、数と単位の関係を正しく読み取れているかを聞いているんでしょう。
だから、8人に6本と、6人に8本は違うんだから×でしょ。算数のルールとして掛けられる数は左ってなってるんだし、被乗数と乗数を入れ替えても結果が変わらないルール(交換法則)もないんだし。
ところで、ここ来るまでに、演算と単位の関連性について教えてるんですかね?
- 加減は同じ単位(概念)のものでしかできない。
- 乗除は異なる単位(概念)のものの間で行う。
簡単な話だけど、重要なこと。
オチとしては、算数の授業も受験数学と同様に、出題者が望む解答+解法を示すテクニックを習うものである。ということでいいんじゃないかな?
追記
問題の本質は、
- 問題文から乗数、被乗数にふさわしい数を抜き出し(被乗数)×(乗数)の形で記述せよ。
- (1)で立てた式を計算せよ。
なのでしょう。
とは言っても、「以下の問題文から乗数、被乗数にふさわしい数を抜き出し(被乗数)×(乗数)の形で記述せよ。」なんてメタな出題ができないわけで。
*1:この偶然の一致は偶然ではなく、そこを追求することに大きな価値があることは確実