[git] branchのマージ

$ ls
program.txt
$ git branch
* master

// ブランチの作成
$ git branch develop
// ブランチの切り替え
$ git checkout develop

// developブランチで開発
$ cat program.txt
9104 商船三井
9107 川崎汽船
// commit
$ git add .
$ git commit -m “develop first commit”

// masterにブランチの切り替え
$ git checkout master
// masterにブランチのマージ
$ git merge develop
$ cat program.txt
9104 商船三井
9107 川崎汽船

$ git branch
develop
* master

「Automatically delete head branches」にチェックを入れておくと、pull requestがmergeされたときにブランチが消える。そうでなければ、branchはそのまま残る。

なるほど、 やってみないとわからんねこれ。

pkcs#5方式

ブロック暗号方式の場合、平文の文字数をブロック長の倍数に合わせるように、末尾に文字を足すなどの処理を行う必要がある。
ブロック暗号方式において文字を足すことをパディングと呼ぶ。

PKCS#7 パディングはRFC5652で定義されたパディング方式
pkcs#5 パディングは8バイトを倍数とした場合のパディング

なるほど、ちょっとモヤモヤしますな..

Rijndael-128とは

AESは鍵長128, 192, 256bitから選択できる
Rijndaelはブロック長も128, 192, 256bitから選択できる

$key = "秘密の合言葉";
$text = "暗号化するメッセージ";

srand();

$size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($size, MCRYPT_RAND);

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
$hex = bin2hex($encrypted);

$bin = pack("H*", $hex);
$decrptyed = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);

echo $text . "=>".rtrim($decrypted);

あれ、なんかおかしい。。

共通鍵暗号と公開鍵暗号とは?

インターネット上でデータ伝送するには、データを暗号化して送信することが一般的
データを暗号化して受信した際にデータの復号を行う
暗号化や復号は暗号化アルゴリズムと鍵によって行われる

### 2種類の暗号化方式
暗号化方式には共通鍵暗号と公開鍵暗号がある
共通鍵暗号は、暗号化と復号に同じ鍵を使用する 。第三者に知られないようにする
アルゴリズムにはRC4, DES, 3DES, AESなどがある AESが主流で無線LANやWPA2でも採用されている
通信接続先ごとに共通鍵を生成する必要がある
公開鍵暗号は、公開鍵と秘密鍵を生成する RSAやEIGamalなどのアルゴリズムがある
ハイブリット方式もある

なるほど、cryptの知識も大分必要だな

/dev/urandomとは

入力元として取ると乱数が返ってくるファイル
適当な値を取るときに使う

$ head -c 200m /dev/urandom > test.txt
$ cat test.txt
?x??y??Q%s}?Gz?¯???$?_?g7T!L??+\?*???f>?$????Q?7?????i%?M??X???? BY?P??”?gO?%Š??O??/??j?n??7??dnZ?…?
r????u??/???,O @ep?????>?;??’y?l?]?\e-).??Ѳ

なんかバグのようなファイルが生成される

PHP checkEmpty, preg_match

private function checkEmpty($key, $message, ErrorCode $errorCode){
	if(self::isEmpty($this->array, $key)){
		throw new InnerException($message, $errorCode);
	}
	return $this->array[$key];
}
if(preg_match("/PHP/", "今PHPを勉強しています。")){
	echo "マッチしました。";
} else {
	echo "マッチしませんでした。";
}

PHP ErrorException

function exceptionErrorHandler($errono, $errstr, $errfile, $errline){
	throw new ErrorException($errstr, $errno, $errfile, $errline);
}
set_error_handler('exceptionErrorHandler');

error_reporting(E_ALL);
try {
	$arr = array();
	print $arr['a'] . "\n";
	strpos();
} catch (Exception $e){
	print $e->getMessage(). "\n";
	print $e->getTraceAsString(). "\n";
}

PHPのインターフェースと抽象クラス、多重継承、トレイト

インターフェースは、そのインスタンスはこのメソッドを持っているという意味

interface hoge {
	public function t1();
}

class foo implements hoge {
	public function t1(){
		echo "foo's t1()\n";
	}
}

$obj = new foo();
$obj->t1();

抽象クラス

abstract class hoge {
	abstract public function t1();
	abstract protected function t2();

	private $i_;
}

class foo extends hoge {
	public function t1(){
		echo "foo's t1()\n";
		$this->t2();
	}
	public function t2(){
		echo "foo's t2()\n";
	}
}

$obj = new foo();
$obj->t1();

PHPのマジックメソッドと無名関数

マジックメソッドはPHP固有に近い
マジックメソッドは、インスタンスがある特定の条件になった時に、明示的にcallしなくても暗黙的にcallされるメソッドの総評
先頭2文字がアンダースコア(__)になっている

### アクセス不能プロパティを読み書きする__get(), __set()

class hoge {
	
	private $i_;
}

$obj = new hoge();
var_dump($obj->i_);
$obj->i_ = 1;
class hoge {

	public function __get($name){
		echo "get: name is ${name}\n";
		return "dummy";
	}
	public function __set($name, $val){
		echo "set: ${name} <= ${val}\n";
	}

	
	private $i_;
}

$obj = new hoge();
var_dump($obj->i_);
$obj->i_ = 1;

### __call()と__callStatic()
アクセス不能メソッド

class hoge {
	public function __call($name, $args){
		echo "call {$name}\n";
		var_dump($args);
	}
	public function __callStatic($name, $args){
		echo "callStatic {$name}\n";
		var_dump($args);
	}
}

$obj = new hoge();
$obj->func();
hoge::func_static();

### 無名関数

$func = function(){
	echo "Anonymous function\n";
};

$func();
var_dump($func);
class hoge {
	public function __invoke(){
		echo "call method\n";
	}
}

$obj = new hoge();
$obj();

PHPにおける継承、オーバーライド、protected、parentの書き方

class hoge {
	
	public function A(){
		echo "call A\n";
	}
	private $i_ = 1;
}

class foo extends hoge {
	public function B(){
		echo "call B\n";
	}
	private $j_ = 999;
}

$hoge_obj = new hoge();
$hoge_obj->A();
var_dump($hoge_obj);

$foo_obj = new foo();
$foo_obj->B();
$foo_obj->A();
var_dump($foo_obj);

### オーバーライド

class hoge {
	
	public function A(){
		echo "call A\n";
	}
	private $i_ = 1;
}

class foo extends hoge {
	public function A(){
		echo "call B\n";
	}
	private $j_ = 999;
}

– protected

class hoge {
	
	private function h_pri_func(){
		echo "call h_pri_func\n";
	}
	protected function h_pro_func(){
		echo "call h_pro_func\n";
	}
}

class foo extends hoge {
	public function f_pri_func(){
		echo "call f_pri_func\n";
	}
	public function test(){
		$this->f_pri_func();
		$this->h_pro_func();
	}
}


$foo_obj = new foo();
$foo_obj->test();

– parent: 継承元のconstructor, destructorを呼ぶ

class foo extends hoge {
	public function __construct(){
		parent::__construct();
		echo "run foo constructor\n";
	}
	public function __destruct(){
		parent::__destruct();
		echo "run foo destructor\n";
	}
}

なるほど、constructorの整理にはなった。