log

日記です

家を買いたい

家を買いたい。

住宅スペック

  • JR山手線 駒込駅徒歩3分
  • 戸建て新築注文住宅

Pros

  • 山手線徒歩三分の高立地で戸建て
  • 会社がどこになっても通勤しやすさ◎
  • おそらく資産価値は下がりづらいと考えていいと思う
  • 治安が良く子育てに最適
  • 駒込という渋い場所
  • お隣さんはお偉いさんらしい
  • 書斎と駐車場が手に入る

Cons

  • 背伸びし過ぎな値段
  • 生活苦しくなりたくない
  • 将来は実家の田舎に帰るかもしれないのに、家を買う意味はあるのか
  • 土地の資産性を本当に信じていいのか
  • IT系は渋谷、目黒、新宿、五反田、六本木あたりに集中している気がするのに、駒込遠くないか
  • ローン通るんですか

うーむ。35年で借りるが、気合い入れて20年で返したい。30歳->50歳。
徒歩3分はいい。

KTM 640 LC4 Supermotoを20万で買ってみた

悩みに悩んで、ヤフオクでポチった。えい。

平成18年式、西暦2006年のバイク。12年前のバイクになるとは、結構昔だなぁ。
20万で買えるというのは安いと思う。Dトラッカー250を20万で買うなら、車検の維持費はかかるがKTM640を買ったほうがお得感がある。この値段なら最悪2年乗って壊れたら捨ててもいいと思ったが、調べてみるとエンジンヘッド周りメンテナンスを行ってあげれば結構持つみたいだ。ロッカーアームのベアリングがやられるらしい。購入したKTM640は1万キロしか走っていないので、当分はエンジン周りのメンテは不要っぽいし、ヘッド周りのメンテなら自分でもできそうなきがする。

あとはKTMユーザーには定番と噂のウォーターポンプシールの交換を早めに。

ぶん回すと壊れにくいらしい、了解しました(笑)

KTMはレース用バイクでメンテナンスサイクルが短く壊れやすいんじゃないかというイメージがあって不安だったので調べたが、LC4エンジンは市販車向けに作られているらしく信頼性が高いようだ。あまりちゃんと調べてないので間違っているかもしれないけど。。

本当なら最新のKTM 690 SMC Rがいいが、なんと言っても高い。どうせ乗れば転ぶのだし、あんなにいいバイクを買うと気を使って楽しめない気がする。
時間なくてあんまり乗らないし。。。

FIのモタードは初めて。FCRやTMRのように気を使わずに乗れるのかなと思うと楽しみ。
20万、車検と配送料を含め約25万で12年前のバイクだが十分にハイスペックな車体のはず!
なんで安いんだろ。人気無いのかな。古いからかな。まあちょっと外装ボロイし。いいバイクだと思うんだけどなぁ(まだ乗ってないけど)

アーキテクチャ

フレームワークの上で開発しているといろいろ調べたりコード読んだりする必要が出てきて、なんかストレス溜まるし、一から書いたほうが早いのでは、みたいな気持ちになることがある。
実際はちゃんと逃げ道を用意してくれていたり、DIっぽくその処理は外部から注入できますよ( LaravelならXxxProviderとか )という風になっているので、ドキュメントをちゃんと読めば解決する。それでも試行錯誤してしまうけど。ある程度思想を理解しないといけない為だ。
この気持何かに似ているなと思ったら、人が作ったシステム・アーキテクチャの上で開発するときの気持ちに似ているかも。
join時の痛みで、有る種の成長痛である場合もある。
あまりにもやりたこととミスマッチしていたり、変更しづらすぎる、追加開発をしすぎて複雑になってしまっている、また開発者に業務知識が十分にある(どう作ればいいか知っている)場合だと一から書いたほうがいい場合もあると思う。

自分でアーキテクチャを設計し、継続的に開発して育てていく感じなら、こうはならずに使いやすいように随時少しずつリファクタしていけると考える。そういうのいいな。

laravel-adminで独自ログイン認証を実装

github.com

基本は上記のとおりでいいが、Model(Authenticatable) に下記をmixinする必要がある。

対象trait

Encore\Admin\Auth\Database\HasPermissions;
Encore\Admin\Traits\AdminBuilder;

対象interface

Illuminate\Contracts\Auth\Authenticatable;

// admin_permissionsとかadmin_operation_logを本当は無効にしたいがめんどいのでやっていない

pythonとphpで相互に暗号化/復号化を行う

pythonで `Simple-AES-Cipher` を使って暗号化された文字列を復号化する。

`Simple-AES-Cipher` を使った場合デフォルトの暗号化方式はaes-256-cbcで、initialization vectorにランダムの文字列が使われる。
返り値はinitialization vector + 暗号化された文字列のbase64となる。

phpでは以下の手順をふみ、復号化する。

  • base64デコード
  • initialization vectorと暗号化を分ける。
  • openssl_decryptにそれぞれのパラメーターを渡す

以下テストコード。

'12345678901234567890123456789012' を共通で使用するkeyとする。

python で "php man" を暗号化

from simple_aes_cipher import AESCipher

cipher = AESCipher('12345678901234567890123456789012')
cipher.encrypt('php man')
# 0DbgJCpQDDvH8vNs1teJWaSk3U7mGsEdnA/mfg3r0bw=

php で "php man" に復号化

<?php
$key = "12345678901234567890123456789012";

$encrypted_by_python = '0DbgJCpQDDvH8vNs1teJWaSk3U7mGsEdnA/mfg3r0bw=';

$decoded = base64_decode($encrypted_by_python);
$iv = substr($decoded, 0, 16);
$encrypted = substr($decoded, 16);

$encrypted = openssl_decrypt($encrypted, 'aes-256-cbc', $key, true, $iv);
// php man

無事OK。

vi(initialization vector)ってなんだ

initialization vectorはECBモードの脆弱さをなくすために作られたらしい。

CBC暗号モードの初期値は、敵から見えてもかまわないことになっていますが、毎回違う値を利用することが推奨されています。

ふーむ。

ブロック暗号モード(block cipher mode)

CBCモードでは、前の平文ブロックを暗号化した結果を次の平文に XOR 演算によって重ね合わせ、その結果に対して暗号化処理を行います。

なるほど。ECBモードに存在した、

  • 同じ鍵で暗号化したデータは同じ暗号文になるため、元の平文データを推測しやすい。仮にphp manの暗号文がxxx だった場合、xxxという暗号文はphp manという事がわかってしまう。
  • 改ざん検知機能がない

っていうのを改善しているわけだ。改ざん検知機能は不産物感あるな。

少しずつしか上手くならない

でも、いろんなことが少しずつうまくなってきている気がする。
同時進行でいろんな可能性を探って、いろんなところに投資していくと小さな芽がでていくなって。
ホントは「えいやっ」でやってみただけだけど。