git hotfixとは?
– リリースされたバージョンで発生したバグを速やかに修正するブランチ
– 修正後すぐmaster, developブランチにマージ
なるほど、そういうことか、特別な機能があるわけではなく、そういう名称で運用するって取り決めのことね。理解した。
随机应变 ABCR: Always Be Coding and Rust : хороший
git hotfixとは?
– リリースされたバージョンで発生したバグを速やかに修正するブランチ
– 修正後すぐmaster, developブランチにマージ
なるほど、そういうことか、特別な機能があるわけではなく、そういう名称で運用するって取り決めのことね。理解した。
$ 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#7 パディングはRFC5652で定義されたパディング方式
pkcs#5 パディングは8バイトを倍数とした場合のパディング
なるほど、ちょっとモヤモヤしますな..
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の知識も大分必要だな
入力元として取ると乱数が返ってくるファイル
適当な値を取るときに使う
$ 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-).??Ѳ
なんかバグのようなファイルが生成される
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 "マッチしませんでした。"; }
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"; }
インターフェースは、そのインスタンスはこのメソッドを持っているという意味
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固有に近い
マジックメソッドは、インスタンスがある特定の条件になった時に、明示的に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();