【Laravel】【ホテル予約管理】予約時に解錠ナンバーを発行する。

前回までの状況はこちら。

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/hotel-mng

今回は予約時に部屋の鍵を解錠する番号を発行する、という処理を作ります。

まずはマイグレーション。

class AddLockNumberUsersReserve extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('reserve_managements', function (Blueprint $table) {
            $table->string('lock_number');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('reserve_managements', function (Blueprint $table) {
            $table->dropColumn('lock_number');
        });
    }
}

解錠ナンバーは予約テーブルに追加しました。

解錠するときは、入力日時と部屋番号、解錠ナンバーがインプットとなり、一致すれば解錠される、という仕組みを考えています。

では、予約登録処理。

    public function add($param, $room, $user)
    {
        Log::debug(print_r($param ,true));
        $model = new ReserveManagement;
        foreach($this->paramNames as $name)
        {
            $model->$name = $param[$name];
        }
        $model->lock_number = $this->generateLockNumber();
        $model->save();
        $this->attachToRoom($model, $room);
        $this->attachToSchedule($model);
        $this->attachToUser($model, $user);
    }

generateLockNumber()という関数を追加しました。

この関数で解錠ナンバーを作成します。

これは、予約登録時に作成され、編集を行っても変更しません。

では、generateLockNumber()の実装。

    public function generateLockNumber()
    {
        return rand(0,9).rand(0,9).rand(0,9).rand(0,9);
    }

簡単で、0〜9の範囲の数字をrand()で発生させ、それを4つつなげるだけです。

うまくできたようです。

次回は、これをQRコードに変換する処理を作成します。

【C#】【数独】オブジェクトを複製する

前回までの状況はこちら。

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/sudoku

仮置きロジックに必要な処理を実装していきます。

まずは、解析状況のデータの複製を作るところです。

仮置き解析して、矛盾があれば、そのデータを破棄するようにします。

オブジェクトの複製に=演算子を使用してはいけません。

これはオブジェクトの移動です。

C言語的に言えば、ポインタを移しているだけです。

なので、オブジェクトをnewで作成して、同じデータを持たせるように設定しなければなりません。

まずは、Squareクラス。

    class Square
    {
        // 確定した数字
        private int _value;
        // 確定したかどうか
        private bool _confirmed;

        public Square()
        {
            this._value = 0;
            this._confirmed = false;
        }

        public Square(int val)
        {
            this._value = val;
            if(val == 0)
            {
                this._confirmed = false;
            }
            else
            {
                this._confirmed = true;
            }
        }

中略

        public Square Clone()
        {
            return new Square(_value);
        }
    }

Clone()で同じデータを持つオブジェクトを作成して返しています。

次に、Sudokuクラス。

    class Sudoku
    {
        private Square[,] _square;

中略

        private Square[,] makeClone(Square[,] _square)
        {
            Square[,] ret = new Square[9, 9];
            for(int i = 0; i < 9; i++)
            {
                for(int j = 0; j < 9; j++)
                {
                    ret[i, j] = _square[i, j].Clone();
                }
            }

            return ret;
        }
    }

Square[]をnewで作成し、SquareのCloneを設定し、返しています。

これでこの関数の戻り値は、完全なSquare[,]の複製が作成されます。

次回は実際に仮置きをするロジックを考えます。

【自作PC】Ryzen5 3600Gでベンチマークを試す。

パーツ交換したら恒例、ベンチマークテスト祭。

ちなみに交換前のスコアはこちら。

ドラクエ10

PSO2

FF14

FF15

PCMARK10

やはり全体的にスコアがアップしました。

PCゲーム系も多少アップしたのも良いですね。

もう、今のPCに満足したので、PCパーツはもう買い事は無いでしょう。(たぶん)

【鬱病】こないだ通院時に医師の反応がやばそうだった件

いつも、通院したときの診察は、ほぼほぼ雑談で終わってしまうのですが、

今回の医師の反応はちょっと違ってました。

ちょっとやばそうな反応だったのです。

思い当たる原因としては、

薬を一日抜いたことぐらいかな。

やはり医師にはお見通しなんですね。

おかげで、次回の診察時は血液検査する羽目になったよ。

みんなは勝手に薬を抜く事はしないように。

きちんと医師と相談しよう。

ちょっとした小さな変化でも医師に伝えるのが重要です。

【自作PC】CPUをアップデートしちゃいました。

でん。

ででん。

でででん。

第3世代Ryzen5です。

今までは、Ryzen5 3400でした。

今回はRyzen5 3600です。

これで何が違うかというと、

まずプロセッサーが第2世代から第3世代になりました。

型番は3000番台で、製造時期も第3世代に近いですが、中身は第2世代です。

そして、コア数が4コアから6コアになりました。

スレッド数も8スレッドから12スレッドに増えました。

コア数が増えれば、それだけ同時に処理できる仕事の数が増えるので、それだけでもパワーアップが期待されます。

そして、グラフィックスチップ内蔵だったのが、無くなりました。

まぁ、すでにグラボを使用しているので、問題ありません。

では、まずはCPUを撤去します。

埃だらけのCPUクーラーを取り外し。

CPU撤去。

新しいCPUを装着。

クーラーも取り付け。

ヒートシンクのサイズが小さくなったような気がします。

グラフィックスチップが内蔵されていないため、発熱量が抑えられているのかもしれません。

BIOSで正しく認識されているのを確認しました。

さて、古いCPUは下取りに出して、引っ越し資金の足しにしようと思います。

パーツ型番価格
CPURyzen 5 3600G24368
マザーボードPRIME A320M-A7544
メモリCT2K16G4DFD822614280
電源KRPW-L5-750W/80+6256
ケースCC-9011086-WW5099
SSDGH-SSDR2SA1202178
M.2SSDSCKKW480H6X15980
グラフィックボードSAPPHIRE PULSE RADEON RX 570 8G GDDR514800
DVDドライブIHAS324-17/A2020
OSWindows 10 Pro3259
電源ユニットネジ200
合計85986

なかなかのレア物件を見つけましたよ。

公営住宅の利用にはなかなかハードルが高いと知り、ダメ元でYahoo!不動産を検索して見たところ。

今の部屋よりも、家賃が安くて、部屋が広くて、設備が整っている物件を見つけました。

今の部屋もかなりのレアに分類されると思うんですけどね。

それ以上のレアですよ。

東西線の南郷通の近辺は安いね。

アクセスも大通りと新さっぽろ両方に行ける。

良い住宅地です。

今日実際に部屋を下見に行ってきたのですが。なかなか良いですな。

2部屋あるので、広く使えます。

畳の部屋なのですが、中に入っても鼻がむずむずしなかったので、ダニはいない模様です。

きちんと毎日掃除しないといけませんね。

トイレもシャワー付きだし、光回線も引けます。

BSは映らないけど、ひかりTVを使用しているので、問題ありません。

BSが映るって事はNHKの受信料、BS分も払うのは変わらないのか。

ちぇっ。(もちろんちゃんと払いますよ)

手続きは順調に続いてて、後は、審査が通れば契約になります。

今回初めて、保証人代行会社を利用するのですが、それにどれくらいかかるのか、がちょっと気になってます。

保証人になってくれる代わりに、家賃の数パーセントを支払わなければなりません。

万が一、自分が家賃を対応しても、保証人が肩代わりしてくれますが(本当はこんなことが無いようにしなくちゃいけない)その代わり、契約更新時にペナルティとして支払うパーセンテージが増えることがあるとのこと。

ネットで調べた。

聞いた感じでは、数百円程度って聞いたけどね。

とりあえず、審査結果を待ちたいと思います。

【スクスタ】デッキのライブパワーが10000越えました。

ただいま、90連無料ガチャログインボーナスが開催されていますが、それだけじゃ無いですね。

デッキを強くするには、とにかくマカロンを集める必要がありまして、

それをアシストしてくれていたのが、前回のイベントにて、イベントポイントをマカロンと交換してくれるというヤツ。

そのおかげで、ほとんどのメンバーでできるところまで特訓で強化しています。

その中で、オススメ自動編成で組んだデッキが上の画面。

このくらいになると、ライブの上級もSランククリアできる曲も増えてきます。

そうなると、ライブ報酬のイベントポイントも上がるわけで。

だって、スキップチケットでデッキとは関係無しにSランククリアと見なしてくれる。

なので、デッキにイベントボーナスキャラを入れておけば、イベントポイントもガッポガポ。

お得しかありません。

こういったイベントもまた開催して欲しい。

【Laravel】【ホテル予約管理】クレジット情報を登録する(訂正)

前回までの状況はこちら

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/hotel-mng

さて、まずはユーザー登録時にクレジット情報を登録するようにしましょうか。

本来ならば、SSL通信によって、暗号化した状態でデータを送信しなくちゃいけないのですが、今はローカル環境でテスト用に動かしているので、そこら辺は考慮しないことにします。

考慮する場合は、NginxなどのWebサーバの設定が必要になります。

こちら、自前のクラウドサーバをHTTPSに対応した記事が参考になると思います。

それではコーディングしていきます。

やっていることは、以前にも書いた、usersテーブルにカラムを追加していく、ということです。

まずはマイグレーションの記述。

class AddCreditInfoUsers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('credit_number')->after('phone');
            $table->string('mm')->after('credit_number');
            $table->string('yy')->after('mm');
            $table->string('credit_name')->after('yy');
            $table->string('code')->after('credit_name');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('credit_number');
            $table->dropColumn('mm');
            $table->dropColumn('yy');
            $table->dropColumn('credit_name');
            $table->dropColumn('code');
        });
    }
}

ビューの記述。

                        <div class="form-group{{ $errors->has('credit') ? ' has-error' : '' }}">
                            <label for="credit" class="col-md-4 control-label">credit number</label>

                            <div class="col-md-6">
                                <input id="credit" type="credit" class="form-control" name="credit" required>

                                @if ($errors->has('credit'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('credit') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="mmyy" class="col-md-4 control-label">MM / YY</label>

                            <div class="col-md-6">
                            <select name="mm">
                                <option value="1">01</option>
                                <option value="2">02</option>
                                <option value="3">03</option>
                                <option value="4">04</option>
                                <option value="5">05</option>
                                <option value="6">06</option>
                                <option value="7">07</option>
                                <option value="8">08</option>
                                <option value="9">09</option>
                                <option value="10">10</option>
                                <option value="11">11</option>
                                <option value="12">12</option>
                            </select>
                            /
                            {{Form::selectYear('yy', 2020, 2030)}}
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('credit_name') ? ' has-error' : '' }}">
                            <label for="credit_name" class="col-md-4 control-label">credit name</label>

                            <div class="col-md-6">
                                <input id="credit_name" type="credit_name" class="form-control" name="credit_name" required>

                                @if ($errors->has('credit_name'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('credit_name') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('code') ? ' has-error' : '' }}">
                            <label for="code" class="col-md-4 control-label">security code</label>

                            <div class="col-md-6">
                                <input id="code" type="code" class="form-control" name="code" required>

                                @if ($errors->has('code'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('code') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

入力項目に、クレジット番号、有効期限(MM/YY)、名義、セキュリティコードを追加しました。

バリデーション処理です。

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'fullname' => 'required|string|max:255',
            'address' => 'required|string|max:255',
            'phone' => 'required|digits:11',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'credit' => 'required|digits:16',
            'mm' => 'required|numeric',
            'yy' => 'required|numeric',
            'credit_name' => 'required|string|max:255',
            'code' => 'required|digits:3',
        ]);
    }

登録処理です。

    protected $fillable = [
        'name', 'fullname', 'address', 'phone', 'email', 'password', 'credit_number', 'mm', 'yy', 'credit_name', 'code'
    ];
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'fullname' => $data['fullname'],
            'address' => $data['address'],
            'phone' => $data['phone'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'credit_number' => encrypt($data['credit']),
            'mm' => $data['mm'],
            'yy' => $data['yy'],
            'credit_name' => encrypt($data['credit_name']),
            'code' => encrypt($data['code'])
        ]);
    }

クレジット番号、名義、セキュリティコードは機密性が高いため、encrypt()(※2020/2/5訂正)で暗号化してわからない形でデータベースに保存します。

※bcrypt()では、復号化できないようです。後ほどこの情報を使って自動決済する必要がありますので、復号化できないと困ります。

うまくできました。

失業手当が入ったので、公営住宅の申し込みに行ってみたのだが

これはあくまでも札幌市での話です。他の自治体は知らん。

公営住宅の申し込みに行ってきたのですが、そこで新たに判明したことがあるのですよ。

まずいっこめ。

月末だから、応募できる物件が少ない。

来月頭(2月3日)に募集開始するとのこと。

そもそも、単身者が応募できる物件が少ない。

すぐ枠が埋まっちゃう。

予想以上に物件が古い。

そのため、家賃の他に色々費用がかかります。

例えば、

風呂場があるが、浴槽が無い。リースに月1000円程度かかる。

シャワーも無い。入居者が購入しなければなりません。14000円程度。

共益費がかかる。まぁ、自治会に払うものなので、致し方が無い。2000円程度。

あとは、冬期間のみ暖房費、そして、給湯費が使った分だけかかります。

まぁ、月々の負担としては、家賃+3000円はかかると思った方が。

しかーし、いろいろ設備を買い足さなくちゃいけないのは痛い。

ぶっちゃけ、今の部屋でも十分安いし、ある程度設備も整っています。

不満があるならば、狭いだけ。

んー、とりあえず、次の募集開始まで待ちますか。

それまでは、今のお金は温存しておこう。

しかしこれだけは買わせてくれ。

AMD Ryzen 5 3600 BOX !

【バンドリ】【ガルパ】SNS招待機能が有効になりました。

ボタン自体はありましたが、ようやく機能するようになりました。

ボタンをタップすると、外部アプリが立ち上がり、招待リンク付きSNSメッセージを送信します。

「協力ライブ」で検索するといろんな人からの招待を参照することができます。

このリンクからガルパを起動し、ライブホーム画面に移動すると、入室できるルームが表示されます。

いまなら初顔合わせで一人につき100個の星がもらえます。最大10回までもらえるので、最大1000個の星がもらえます。

いいですね。1000個もらっちゃいましょう。

自分、ぼっちですが何か?