スキップしてメイン コンテンツに移動

投稿

2011の投稿を表示しています

RX100 S7 へ Ubuntu 10.04 をインストール

FujitsuのRX100S7にUbuntu10.04 LTSをインストールした。 標準ドライバでは認識しなかったので、LSIとIntelからDriverをダウンロードした。 まずはこれ。 OS標準のドライバでRAID 1 組んだ後のディスクを認識しなかった。 で、LSI行って見つけてきた。 MegaRAID SAS Driver Ubuntu 10.04 LTS Version 5.30 (2011/12/26現在) 手順通りに従って、無事、OSのインストールができました。 次。 オンボードNICのうち、一個だけ離れているLANポートを認識しなかったので、これも、Intelさん行って見つけてきた。 Network Adapter Driver for PCI-E Gigabit Network Connections under Linux (2011/12/26現在、バージョン1.95) これも、手順通りに従ってコンパイルしてインストール。 無事、認識できました。 ただ、NICドライバは、カーネルのバージョンが上がる度に再コンパイルが必要なので注意。

PHPセッション開始のサンプル

# セッションIDの保存は、クッキーのみを利用する。 ini_set('session.use_cookies', 1); ini_set('session.use_only_cookies', 1); ini_set('session.use_trans_sid', 0); # セッション名を変更する。 session_name('SITENAME'); # 第1引数:セッションクッキーの有効時間(秒数)。0でブラウザを閉じるまで。 # 第2引数:セッションクッキーが有効なパス。供用サーバーで独自ドメインがない場合は、 #      自分が管理するディレクトリ以下に対してのみ、ブラウザからセッションクッキ #      ーを送信させる。 # 第3引数:セッションクッキーが有効なドメイン。 # 第4引数:HTTPSでのみセッションクッキーを有効とする場合は、true とする。 # 第5引数:セッションクッキーへのアクセスはHTTPのみとし、JavaScriptからのアク # セスは許可しない。 session_set_cookie_params(0, '/user/', NULL, false, true); # セッションを開始する session_start(); # セッションハイジャック対策 # セッション固定化攻撃対策 # F5連打対策 # 前回セッションIDを再生成した日時と現在日時を比較し、一定期間(例えば20分)経過 # していたら、セッションIDを再生成する。 $_SESSION['lasttime'] = isset($_SESSION['lasttime']) ? $_SESSION['lasttime'] : 0; $now = time(); if (($_SESSION['lasttime'] + 20 * 60)

PHPで2重登録、2重ポスト、CSRF対策

こんな感じで実装できると思う。 ■ input.php ... 入力画面など <?php // セッションを開始する session_start(); // ワンタイムチケットを生成する。 $ticket = md5(uniqid(rand(), true)); // 生成したチケットをセッション変数へ保存する。 $_SESSION['ticket'] = $ticket; ?> <html> <head> <title>サンプル登録画面</title> </head> <body> <form action="regist.php" method="POST"> <input type="text" name="UserName" value=""> <input type="submit" value="regist"> <!-- 生成したワンタイムチケットを隠しフィールドとして、 登録処理へPOSTする --> <input type="hidden" name="ticket" value="<?=$ticket?>"> </form> </body> </html> ■ regist.php ... 登録処理など <?php // セッションを開始する session_start(); // ポストされたワンタイムチケットを取得する。 $ticket = isset($_POST['ticket'])    ? $_POST['ticket'] : ''; // セッション変数に保存されたワンタイムチケットを取得する。 $save   = isset($_SESSION['ticket']) ? $_SESSION[...

PHPの配列は

こんな感じで配列を作ると、添字は順番に振られるけど、順番には並んでいない。 $arrVar = array(); $arrVar[] = "a"; $arrVar[] = "b"; $arrVar[] = "c"; なので、添え字を使って処理するときは問題ないけど、例えば配列の並び順に従って二つ以上の配列を処理するときは、ksort()使って添え字でソートしておく必要がある。 $arrVar = array(); $arrVar[] = "a"; $arrVar[] = "b"; $arrVar[] = "c"; $arrTmp = array(); $arrTmp[] = "あ"; $arrTmp[] = "い"; $arrTmp[] = "う"; ksort($arrVar); ksort($arrTmp);

オブジェクトは参照渡し

マニュアル、ちゃんと読めってね。 PHP Manual オブジェクトと参照 http://php.net/manual/ja/language.oop5.references.php 引用 ここから オブジェクトと参照 PHP 5 でのオブジェクト指向プログラミングのポイントとしてよく言われるのは 「オブジェクトはデフォルトでは参照渡しとなります」ということです。 しかし、正確には少し異なります。 この節では、いくつかの例を用いてその誤解をといていきます。 PHP の参照は一種のエイリアスで、ふたつの異なる変数に同じ値を書き込めるものです。 PHP 5 以降、オブジェクト変数の値にオブジェクト自身は含まれなくなりました。 含まれるのはオブジェクトの ID のみで、 これを用いて実際のオブジェクトにアクセスできるようになっています。 オブジェクトが引数として渡されたり返り値となったり あるいは別の変数に代入されたりした場合、 それはエイリアスではありません。ID のコピーを保持し、 同じオブジェクトを指すようになるのです。 ここまで

kvmでvmvgaドライバ

Ubuntu 10.10 でKVM環境を構築したよ。 で、ゲストでWindows XP を動かしてみた。 vgaドライバがなかったので、vmvgaドライバを入れてみた。 で、rdesktopで接続して仕事していたら、起動後3時間すると、 ゲストのCPU使用率が100%になって にっちもさっちもいかなくなった。 最初は「何が悪いの」的な感じで、何が何だかだったけど、 最終的に、ビデオカードのモデルを「vmvga」から「vga」に戻したら、 何時間経過しても問題なくなった。

date()関数は賢い

UNIXタイムスタンプについて調べていたとき、 PHPで、 date_default_timezone_set('Europe/London'); echo date('Y-m-d H:i:s', 0); ってやったら、 1970-01-01 01:00:00 って出た。 ん?日本と9時間違うはずなのに... で調べてみたら、 Wikipedia に書いてあった。 Wikipedia 英国夏時間 1968年2月18日1時(UTC)から1971年10月31日2時(UTC)までの期間、グリニッジ標準時よりも1時間早い英国標準時(BST: British Standard Time, UTC+1)を標準時とし、通年でこれを用い、夏時間が実施されなかった。 もろ、1時間進んでたときだったのね。 で、次のコードで確認してみたら、思った通りにちゃんと出た。 // タイムゾーンを Europe/London にする date_default_timezone_set('Europe/London'); echo date('Y-m-d H:i:s I e P T', 0); // タイムゾーンを Asia/Tokyo にする date_default_timezone_set('Asia/Tokyo'); echo date('Y-m-d H:i:s I e P T', 0); // タイムゾーンを Europe/London にする date_default_timezone_set('Europe/London'); // 1971/10/31 02:00:00 $intTime = mktime(2,0,0,10,31,1971); echo date('Y-m-d H:i:s I e P T', $intTime); // タイムゾーンを Asia/Tokyo にする date_default_timezone_set('Asia/Tokyo'); echo date('Y-m-d H:i:s I e P T', $intT...

isset()とis_null()の関係

PHPのマニュアルを見ていて、へぇーって。 ■PHP Manual 付録 PHP型の比較表 http://www.php.net/manual/ja/types.comparisons.php isset()で false が返るモノと is_null()で true が返るモノが 同じだった。 ・NULL ・宣言された直後の変数 ・宣言されていない変数

JavaScriptのif文

JavaScript で if() を実験してみた。 実験ソースはこれ var objArray = {'true':true, 'false':false, 1:1, 0:0, '-1':-1, '"1"':'1', '"0"':'0', '"-1"':'-1', 'NULL':null, '"js"':'js', '""':''}; for (var i in objArray) { document.write('if (' + i + ') は '); if (objArray[i]) { document.write('true です'); } else { document.write('false です'); } document.write('<br />'); for (var j in objArray) { if (i === j) continue; document.write('if (' + i + ' == ' + j + ') は '); if (objArray[i] == objArray[j]) { document.write('true です'); } else { document.write('false です'); } document.write...

2次元配列は表じゃない

例えば、 $arrVal = array(array('AA', 'BB', 'CC'),                 array(11, 12, 13),                 array('ab', '12', 'c4'),) と定義した配列の場合、こんな感じの表をイメージすると思う。 +------+------+------+ | 'AA' | 'BB' | 'CC' | +------+------+------+ | 11 | 12 | 13 | +------+------+------+ | 'ab' | '12' | 'c4' | +------+------+------+ でも、実際は表じゃなくてこんな感じ +----------------------+----------------------+----------------------+ |+------+------+------+|+------+------+------+|+------+------+------+| || 'AA' | 'BB' | 'CC' ||| 11 | 12 | 13 ||| 'ab' | '12' | 'c4' || |+------+------+------+|+------+------+------+|+------+------+------+| +----------------------+----------------------+----------------------+ こんな感じで、 「 配列の各要素の中が配列 」 になっている。

PHPにそんなマニュアルがあったなんて

PHPで1年半開発してきたけど、今日、始めてこんなマニュアルがあるのに気づいた。 ■PHPマニュアル 付録 PHP型の比較表 http://www.php.net/manual/ja/types.comparisons.php ==で緩やかに比較したときの、あの、わけの分からないTRUEとFALSEの評価と is_null()、empty()、isset()の結果が一覧表で載っていた。 知らなかった... マニュアルは、ちゃんと読みましょう。ね。 で、どうしても解せない不愉快な評価結果。 if (0 == NULL) は TRUE と評価され if (0 == "0") は TRUE と評価されるのに if ("0" == NULL) は FALSE と評価される。 if (FALSE == NULL) は TRUE と評価され if (FALSE == "0") は TRUE と評価されるのに それでもやっぱり if ("0" == NULL) は FALSE と評価される。 証明が成り立っていない。だめだ、俺の中であり得ない。 世の中、理不尽なことばかりだ。 if ("" == NULL) は TRUE だけど if ("" == "0") は FALSE だから if (NULL == "0") は FALSE なんだろうか? 「仕様です」 ではなくて、この理由をご存知の方、教えてください。

phpのdateとtimestamp

例によって、phpのバージョンはこれね。 $ php -v PHP 5.3.6-13ubuntu3.1 with Suhosin-Patch (cli) (built: Aug 29 2011 23:39:16) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies で、確認。 <?php date_default_timezone_set('Asia/Tokyo'); echo date('Y-m-d H:i:s', 0); ?> 結果は 1970-01-01 09:00:00 ふむ。 じゃ、これは? <?php date_default_timezone_set('Europe/Paris'); echo date('Y-m-d H:i:s', 0); ?> 結果は 1970-01-01 01:00:00 へー。 結論。 date()は、与えられたtimestampを、タイムゾーンの日時に変換する。 これで、やっとUTCからの経過秒数っていう意味がわかったよ。

MySQLのUNIX_TIMESTAMP() と FROM_UNIXTIME()

とりあえず、MySQLのバージョンね。 $ mysql --version mysql Ver 14.14 Distrib 5.1.58, for debian-linux-gnu (x86_64) using readline 6.2 で、ログインしてやってみた。 $ mysql -u root -p mysql> select from_unixtime(unix_timestamp('1970-01-01 00:00:00')) from dual; +------------------------------------------------------+ | from_unixtime(unix_timestamp('1970-01-01 00:00:00')) | +------------------------------------------------------+ | 1970-01-01 09:00:00 | +------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select from_unixtime(unix_timestamp('1970-01-01 09:00:00')) from dual; +------------------------------------------------------+ | from_unixtime(unix_timestamp('1970-01-01 09:00:00')) | +------------------------------------------------------+ | 1970-01-01 09:00:00 | +------------------------------------------------------+ 1 row in set (0.01 sec) ん?1970-01-01 00:00:00 も 1970-01-01 09:00:00 も結果は同じ? ちょっと待て。 mysql> select unix_time...

vmwareのvmdkをコピーしたときは

マスターイメージをインストールして、使いまわしたいときあるよね。 でも、コピーして使うと...おや?eth0がない! そんな時は慌てずに、Ubuntuなら # sudo nano /etc/udev/rules.d/70-persistent-net.rules とやって、 eth0の行を削除。 そしてeth1をeth0に変更後、上書き保存して再起動! これで無事、eth0として認識されました。 2012/10/04 追記 CentOS 5.x をコピーした場合は、 何もしなくてもよかった。 ほんとか? ちなみに、CentOS 6.x は、Ubuntuと同じやり方でOK。