Linux暗号化パーティション sysbench

(1) PC
M/B: GigaByte GA-MA78GM-S2H ver1.1 (AMD 780G, AMD SB700)
CPU: AMD PhenomII X4 945
Mem: DDR2-800 2GB x 2
OS: Ubuntu 14.04 32bit

(2) ST380815AS (80GB)

通常ext4: /dev/sdc1に20GBのext4を作成した。
暗号化ext4: 通常ext4を削除し、/dev/sdc1に20GBの暗号化パーティションext4を作成した。(パスフレーズ長は32文字)

hdparm- t seqrd seqwr rndrd rndwr
通常ext4 68 MB/sec 73 68 4.3 1.1
暗号化ext4 69 73 68 3.5 1.1

暗号化後もほとんど違いはなかった。

(3) HDS721050CLA362 (500GB)

通常ext4: /dev/sdceに20GBのext4を作成した。
暗号化ext4: 通常ext4を削除し、/dev/sdceに20GBの暗号化パーティションext4を作成した。(パスフレーズ長は32文字)

hdparm- t seqrd seqwr rndrd rndwr
通常ext4 129 MB/sec 126 116 4.6 2.2
暗号化ext4 125 86 104 3.8 2.1

暗号化後、seqrdが86 MB/secと遅くなった。

(5) sysbench
トータルファイルサイズ(既定では2048MB)を5000Mで測定した。
sysbench –test=fileio –file-total-size=5000M prepare
sync; sysctl -w vm.drop_caches=3
sysbench –test=fileio –file-total-size=5000M –file-test-mode=seqrd run
sync; sysctl -w vm.drop_caches=3
sysbench –test=fileio –file-total-size=5000M –file-test-mode=seqwr run
sync; sysctl -w vm.drop_caches=3
sysbench –test=fileio –file-total-size=5000M –file-test-mode=rndrd run
sync; sysctl -w vm.drop_caches=3
sysbench –test=fileio –file-total-size=5000M –file-test-mode=rndwr run
sysbench –test=fileio –file-total-size=5000M cleanup

buffalo LS420D sysbench

(1) NAS
buffalo LinkStation LS420D
2TB + 2TBをRAID-1で運用。
ST2000DM001-1CH1

M/B: GigaByte GA-MA78GM-S2H ver1.1 (AMD 780G, AMD SB700)
CPU: AMD PhenomII X4 945
Mem: DDR2-800 2GB x 2
OS: Ubuntu 14.04 32bit

(2) sysbench fileio result
seqrd: 84 MB/sec
seqwr: 63 MB/sec
rndrd: 1.2 MB/sec
rndwr: 4.9 MB/sec

ちなみにカタログの転送速度は100MB/sec。

(3) cifs-utils package
windows共有をマウントするには、cifs-utilsパッケージが必要。
デスクトップLauncherのUbuntuソフトウェアセンターを開き、cifs-utilsを検索してインストールした。
(または apt-get install cifs-utils)

(4) mount
sudo mount -t cifs //192.168.xx.xx/shared /media/taro/shared -o uid=taro,gid=taro

(5) sysbench
トータルファイルサイズ(既定では2048MB)を5000Mで測定した。
mkdir /media/taro/shared/temp
cd /media/taro/shared/temp
sysbench –test=fileio –file-total-size=5000M prepare
sync; sysctl -w vm.drop_caches=3
sysbench –test=fileio –file-total-size=5000M –file-test-mode=seqrd run
sync; sysctl -w vm.drop_caches=3
sysbench –test=fileio –file-total-size=5000M –file-test-mode=seqwr run
sync; sysctl -w vm.drop_caches=3
sysbench –test=fileio –file-total-size=5000M –file-test-mode=rndrd run
sync; sysctl -w vm.drop_caches=3
sysbench –test=fileio –file-total-size=5000M –file-test-mode=rndwr run
sysbench –test=fileio –file-total-size=5000M cleanup

ログインとサインイン

日本語表記では「ログイン」が多いようです。

サイト ログイン日本語表記 サインアップ日本語表記 ログイン英語表記 サインアップ英語表記
WordPress ログイン サインアップ Log In Signup
Yahoo!JAPAN ログイン 新規取得
YAHOO! Sign In Create New Account
Google ログイン アカウントを作成 Sign in Create an account
FaceBook ログイン アカウント登録 Log In Sign Up
Twitter ログイン Twitterに登録する Sign in Sign up
楽天市場 ログイン 楽天会員に新規登録 Login Create a new Rakuten membership
Nifty ログイン 新規登録
amazon.co.jp サインイン サインイン sign in sign in

各サイトの「ログイン状態を保存する」チェックボックスのname属性、id属性

ログアウトしないままブラウザを閉じても、次回サイトにアクセスしたとき、ユーザーIDとパスワードを入力することなくログイン状態を保持する機能。

サイト 日本語表記 英語表記 name属性 id属性
WordPress ログイン状態を保存する Remember Me rememberme rememberme
Yahoo!JAPAN (英語表記はYAHOO!から) ログインしたままにする Keep me signed in .persistent persistent
Google ログイン状態を保持する Stay signed in PersistentCookie PersistentCookie
FaceBook ログインしたままにする Keep me logged in persistent persist_box
Twitter 保存する Remember me remember_me (なし)
楽天市場 ブラウザを閉じるときオートログインを無効にする Turn off automatic log in when I close my browser auto_logout auto_logout
Nifty ログインしたままにする (不明) remember saveLogin
amazon.co.jp (チェックボックスなし。常に保存される) (なし) (なし) (なし)

MODX Japan関連

■MODX Japan (MODX 日本公式サイト)
http://modx.jp/
過去のリリースのダウンロードリンクは見つからなかった。

■MODX Japan github
https://github.com/modxcms-jp/evolution-jp
安定版はstable、最新版はrevision。
1.0.10Jまでは、tagあり。
1.0.10J-r1以降は、Log Messagesを検索するとでてきます。
manager/includes/version.inc.phpにバージョンとリリース日が記述されているので、追跡の参考に。

ただしgithubとは別に、非公開のリリース用ブランチがあるようです(*2)。過去のリリースのzipが見つからない場合は、フォーラムで聞いてみたほうがいいかもしれません。

(*2) 1.0.10Jと1.0.14J-r4について、gitとダウンロードzipのWinMerge結果は一致しなかった。

■リリース履歴(MODX Japan ニュースから)
2014-09-05 1.0.14J-r4
2014-08-11 1.0.14J-r3 (*1)
2014-07-27 1.0.14J-r2
2014-07-13 1.0.14J-r1 (*1)
2014-06-12 1.0.14J
2014-05-13 1.0.13J-r1
2014-04-26 1.0.13J
2013-12-31 1.0.12J-r1
2013-10-12 1.0.12J
2013-08-03 1.0.10J-r3 (*1)
2013-07-14 1.0.10J-r2
2013-06-24 1.0.10J-r1 (*1)
2013-05-02 1.0.10J

(*1) githubのstable/revisionブランチのMessageで見つからなかった。

■MODX Japan Google Code
1.0.10J-r3.zip 以前のファイル
https://code.google.com/p/modx-ja/

■MODX Japan フォーラム
http://forum.modx.jp/index.php

■MODX 公式サイト
http://modx.com/

Selenium IDE: Gosub Control: サブルーチン化のコツ

BASIC言語に倣って、サブルーチンではない部分をグローバル部と呼ぶことにします。

(1) サブルーチンは後半にまとめて記述する。
グローバル部とサブルーチンが交互に現れると、グローバル部が途切れ途切れになってしまい、読む人にとって見通しが悪くなるように思います。

推奨例

gosub myfunc1
verifyText ...
gosub myfunc2
verifyText ...
#
sub myfunc1
endsub
#
sub myfunc2
endsub

推奨しない例

gosub myfunc1
verifyText ...
#
sub myfunc1
endsub
#
gosub myfunc2
verifyText ...
#
sub myfunc2
endsub

(2) サブルーチン内でverifyをしない。

Selenium IDEでテストケースを実行すると、verifyの失敗箇所が赤く表示されて、どこで失敗したのか一目瞭然です。

ところがサブルーチン内でverifyしていて2回gosubで呼んでいる場合、表示されているのは2回目の実行結果です。1回目の実行結果を知るには、ログを見る必要があります。

そこでサブルーチン内では調べたい値をverifyせずにstoreして、グローバル部に戻ってからverifyするようにしましょう。1回目、2回目、どちらの実行結果もグローバル部に赤・緑が残ります。

推奨例

gosub new_post
gosub get_post_count
verifyExpression ${POST_COUNT} 1
#
gosub new_post
gosub get_post_count
verifyExpression ${POST_COUNT} 2
#
sub new_post
~記事を新規投稿する~
endsub
#
sub get_post_count
storeText id=post_count POST_COUNT
endsub

推奨しない例

gosub new_post
store 1 EXPECTED_POST_COUNT
gosub verify_post_count_equals_to
#
gosub new_post
store 2 EXPECTED_POST_COUNT
gosub verify_post_count_equals_to
#
sub new_post
~記事を新規投稿する~
endsub
#
sub verify_post_count_equals_to
verifyText id=post_count ${EXPECTED_POST_COUNT}
endsub

Selenium IDE: Gosub Control 使い方

定型操作のlogin

gosubを使わない例

# login user
open ${BASE_URL}/login
type name=username ${USER_USERNAME}
type name=password ${USER_PASSWORD}
clickAndWait id=btnLogin
# action and verify
...
# lougout
clickAndWait link="logout"
#
# login admin
open ${BASE_URL}/login
type name=username ${ADMIN_USERNAME}
type name=password ${ADMIN_PASSWORD}
clickAndWait id=btnLogin
# action and verify
...
# logout
clickAndWait link="logout"

gosubを使って、login user、login admin、logoutをサブルーチン化した例

gosub login_user
# action and verify
...
#
gosub logout
#
gosub login_admin
# action and verify
...
gosub logout
#
#----------------------------------------
# sub login_user
#----------------------------------------
sub login_user
open ${BASE_URL}/login
type name=username ${USER_USERNAME}
type name=password ${USER_PASSWORD}
clickAndWait id=btnLogin
endsub
#----------------------------------------
# sub login_admin
#----------------------------------------
sub login_admin
open ${BASE_URL}/login
type name=username ${ADMIN_USERNAME}
type name=password ${ADMIN_PASSWORD}
clickAndWait id=btnLogin
endsub
#----------------------------------------
# sub logout
#----------------------------------------
sub logout
clickAndWait link="logout"
endsub
#

Selenium IDE: Gosub Control

Selenium IDE: Gosub Controlをリリースしました。
Selenium IDEにBASIC言語ライクなgosub、sub、endsub、returnコマンドを追加します。

https://github.com/ninton/selenium-ide-gosubcontrol
https://addons.mozilla.org/ja/firefox/addon/selenium-ide-gosub-control/

・定型作業をサブルーチン化して、testcaseを読みやすくしましょう。

・定型作業ではなくても、コメントを詳しく記述するよりは、サブルーチン化のほうが効果的な場合があります。

・testcaseをまたいだサブルーチン呼び出しはできません。
同じ内容だとしてもtestcaseごとにサブルーチンを記述する必要があります。

・sub ~ endsub のネストはできません。

・サブルーチン内から別のサブルーチンへgosubできます。

・参考
gotoIfやwhile/endWhileを追加するプラグイン Selenium IDE: Flow Control
https://addons.mozilla.org/ja/firefox/addon/flow-control/
https://github.com/davehunt/selenium-ide-flowcontrol

サンプル1
gosubから呼ばれた場合、subとendsubの間を実行します。
次のサンプルは、x_add_1 を3回読んでいるので、Xの値は3になります。
endsubの後ろのverifyExpressionでは、Xの値は4ではなく、3のままです。

store 0 X
# x_add_1 x 3
gosub x_add_1
gosub x_add_1
gosub x_add_1
# verify( x == 3 )
verifyExpression ${X} 3
#
sub x_add_1
storeEval parseInt(${X})+1 X
echo ${X}
endsub
#
verifyExpression ${X} 3

サンプル3
gosubから呼ばれたのではなく、単にsubに到着した場合、endsubまでスキップします。
次のサンプルでは、x_add_1を呼んでいないので、Xの値は0のままです。

store 0 X
# verify( x == 0 )
verifyExpression ${X} 0
#
sub x_add_1
storeEval parseInt(${X})+1 X
echo ${X}
endsub
#
verifyExpression ${X} 0

Selenium IDE ユーザー拡張スクリプトでstore変数を参照する

Selenium IDE で、store変数USERNAMEに “taro” を保存する。
コマンド: store
対象: taro
値: USERNAME

store変数USERNAMEをinputタグ(id=”username”)に入力する。
コマンド: type
対象: id=username
値: ${USERNAME}

ユーザ拡張スクリプト(jsファイル)で独自コマンドを定義する。
http://oss.infoscience.co.jp/seleniumhq/docs/08_user_extensions.html

ユーザ拡張スクリプト(jsファイル)の設定箇所
Selenium IDE>オプション>設定>Selenium Core 拡張スクリプト(user-extensions.js)

ユーザ拡張スクリプトの例

Selenium.prototype.doEchoUsername = function() {
	// 独自コマンド echoUsername
	// store変数USERNAME をログに表示する

	// Selenium IDEのログに表示する
	this.doEcho( storedVars.USERNAME );

};

cakephp plugin CryptoDbをgithubで公開しました

github / ninton / cakephp.CryptoDb

特徴
1) 平文と暗号キーがMySQL binlogに残りません。

2) ivを毎回生成します。そのため同じ平文、同じキーで暗号化しても同じ結果になりません。
(暗号データにivを含んでいます)

----------------------------------------
MySQL field type	CryptoDb support
----------------------------------------
text			recommended
varchar(255)		plaintext length <= 32

----------------------------------------
設定手順
----------------------------------------
YourModel.messageを暗号化してDB保存したい場合

1) edit App/Config/bootstrap.php

CakePlugin::loadAll(array(
  'CryptoDb' => array('bootstrap' => true),
));

2) create plugins/CryptDb/Config/bootstrap.php

Configure::write( 'CryptoDb.cryptoKey', 'Your Cryptography Key' );

plugins/CryptDb/Config/bootstrap.sample.phpも参照してください。

*注意*
サービスを開始したら、暗号キーを変更してはいけません。
古いキーで暗号化したフィールドは、新しいキーで復号できません。

3) edit App/Model/YourModel.php

App::uses()、extends Crypto、$cryptoFieldsの3点を編集してください。

App::uses('Crypto', 'CryptDb.Crypto');
class YourModel extends Crypto {
    public $cryptoFields = array(
        'message'
    );

4) call save() and find()

暗号/復号処理を記述する必要はありません。

// save()に平文を渡してください。
$data['YourModel']['message'] = 'This is my secrets';
$YourModel->save( $data );

// find()を呼ぶと、平文が返ってきます。
$data = $YourModel->find('first');
echo $data['YourModel']['message'];
--> 'This is my secrets'

phpMyAdmin (or mysql command) で直接データベースを見ると、暗号化されています。
--> 'a:4:{s:4:"algo";s:12:"rijndael-256";s:4:"mode";s:3:"cbc";s:2:"iv";s:44:"56...'

----------------------------------------
CakeTest fixture
----------------------------------------
CakeTestのfixtureには、暗号化したデータを記述してください。
記述したとおりにINSERTされます。

----------------------------------------
暗号化せずに、saveする方法
----------------------------------------
save()ではなく、saveAll()を使います。

$params['callbacks'] = false;
$this->saveAll($data, $params);

----------------------------------------
復号せずに、findする方法
----------------------------------------

// way-1.
$this->virtualFields['hoge_raw'] = 'hoge';
$data = $this->find('all', $params);
		
// way-2. 
unset($this->cryptoFields['hoge']);
$data = $this->find('all', $params);