【マインクラフト】自前サーバであるが故の弊害

まずはこちらの動画をご覧ください。

Realmsを使用していなければ、こんなおかしい動きになるわけが無いと思いますが。

まぁ、エリトラに限らず、以前からおかしな動きが起きていました。

時間が巻き戻ったり、ワールドから退出させられたり、等々。

ちょっと、サーバのリソース情報を見てみましょう。

ちなみに、サーバのスペックは、ConoHaのマインクラフトテンプレートの最低条件とおなじプランを使用しています。

CPU情報、グラフが上に伸びている時間が、マインクラフトをプレイしている時間です。

特に目立って増えているところはありません。

ディスクのI/Oの情報。一箇所飛び抜けている箇所がありますね。上の動画はだいたいこの時間帯に撮影しました。

ネットワーク情報。特に、通信量が多くなったわけでは無いですね。

まぁ、この状況から推測すると、エリトラで未開拓エリアへ向かうと、そのエリア生成で大量のディスクアクセスが発生して、サーバの遅延が起きている、と考えるのが普通でしょう。

ただ、クラウドはSSDなので、そんなにディスクアクセスで遅延するとは考えられない。

なので、単にサーバのスペック不足かも。

サーバのCPUがいっぱいいっぱいでクライアントからの情報を処理しきれないという。

そんな気がするー

もう一つ上のランクのプランに変えてみようかな。

ただ、ConoHaって(他のサーバは知らんけど)スペックダウンできないんすよねー。

悩む。

とりあえず、CPU3Core RAM2GBに一つスペックアップさせてみた。

一つ前まではスペックダウンできるっぽい。

引っ越しの見積もり、インターネット回線の引っ越し

昨日はいろいろてんこ盛りでした。

まずは、引っ越しの見積もりをして貰わなくちゃいけなくって、

こちらのサイトを利用しました。

https://www.zba.jp/hikkoshi/

引越し比較サイトを利用するのは定石ですよね!

そして、引越し業者からインターネットの引越し代行を提案されました。

最初はうさんくさいやつかな、って思ったんですが、解約違約金や工事手数料などなどキャッシュバックてんこ盛りだったので、いいだろう、その提案乗ってやろう、と思いました。

どうやら、BiZiMo(ビジモ)ネットという聞き慣れないプロバイダを使用することになりそうです。

口コミも調べてみましたが、利用者がそんなにいないらしく、情報がありませんでした。

いや、これはむしろチャンスじゃね?

他の利用者がいないと言うことは混雑が少ないというメリットがあるし、口コミ第一号にもなれる。

不満があれば半年後に他プロバイダに乗り換え可能と言うことだし。

最悪、ネタになると言うことで。

解約違約金もキャッシュバックしてもらえると言うことだけど、問題はひかりTVだよなぁ。

ひかりTV、なにげに気に入ってます。

毎月届けられる番組表をチェックして、見たい番組を確認する、という楽しみがあります。

いま気に入っているのは、Peak Huntという、東野幸治と天津木村が、ただただ険しい登山をする、と言うだけの番組。

新居でも利用したい。

新居の下見に行ってきました。

すでに新居の鍵を貰っていて、もう部屋に入っても良いと言われていたので、部屋の下見に行ってきました。

目的は、部屋の寸法を測って、買う必要な物を調査するためと、家具の配置を検討するためです。

こんな感じ。

iPadまじで便利よね。

タブレットのオススメ聞かれたら間違いなくiPadにApple pencilをオススメするよ。

買う必要があるのは照明器具2個(8畳と6畳)と、カーテン。

あ、ガステーブルの幅測るの忘れてた。

明日、ホームセンターに照明器具を探しに行ってくるついでに計るとしましょう。

あと、管理会社に部屋の退去日を通知して、引っ越し屋さんの調整も完了しました。

来週から忙しくなりそうです。

とりま、こんなところで。

冷蔵庫整理で焼き肉。

【Laravel】【ホテル予約管理】解錠ナンバーをQRコードに変換する

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

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

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

さて、今回は、前回作成したコードで生成した解錠コードをQRコードに変換します。

使用するのは、simplesoftwareio/simple-qrcodeというライブラリ。

Laravelのプロジェクトディレクトリにて、以下のコマンドを実行。

$ composer require simplesoftwareio/simple-qrcode

いま使用しているLaravelのバージョンは5.5.*なのでこれだけでライブラリが使用可能になります。

では、解錠コード生成処理を修正します。

use QrCode;

    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();

        $src = base64_encode(QrCode::format('png')->size(100)->generate($model->lock_number));
        Log::debug(print_r($src ,true));
        $model->save();
        $this->attachToRoom($model, $room);
        $this->attachToSchedule($model);
        $this->attachToUser($model, $user);
    }

QrCodeクラスを使って解錠コードをpngファイルで生成、それをbase64に変換しています。

これは、とりあえずログに出力させています。

[2020-02-07 10:06:26] local.DEBUG: iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB3UlEQVR4nO2b24rEIBAFd8L+/yeHfRMWQbrsNjozVa+Ty1CcQ4zG133fPxLj2v0H3gllAZQFUBZAWQBlAZQFUBZAWQBlAZQFUBZAWQBlAZQFUBZAWYDfudOuK2W5Tc/21+lnbtsxg7Pm7k4xWQBlASZr2ECRHpRurlnJu1NMFkBZgGwNG4OQD8oyeNJVVaxwYdRkAZQFKKthFck+LsVkAZQFOKWGkZfE7ZgsgLIAZTWca01V157prMkCKAuQrWFy3iPybjgYneZnXRAmC6AswOuQsZ+D0k9DWYCF64ZoBTCycjH3WCyc8zFZAGUBsk/D8vX3yOlVV6aYLICyAPU17El2BL0ALh3KmiyAsgD1M6XJkSe6V4TC9UeTBVAWYPJpGMl2VfvQlOnS0anJAigLMPk0jCS5Pwa990V4+EsbkwVQFmDzDou5acy5L1EdlD6KsgCbd1hUHbzuPfTfX6q60DegLMDmHRYRkh/PuG64B2UBNn/aPahGcgEx8hPFZAGUBTh3h0WjamdxHpMFUBZg8w6LwemtUMkJmcJimiyAsgCbd1j010FLIX7Mdi7KApyyw+ItMFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQH+AEkJCJS/ZGd/AAAAAElFTkSuQmCC  

これは後ほど、HTMLメールのimgタグのsrc要素に書き込んで使用することを考えています。

これをブラウザで表示させてみましょう。

以下をアドレスバーに入力するとQRコードが表示されます。

data:image/jpeg;base64, iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB3UlEQVR4nO2b24rEIBAFd8L+/yeHfRMWQbrsNjozVa+Ty1CcQ4zG133fPxLj2v0H3gllAZQFUBZAWQBlAZQFUBZAWQBlAZQFUBZAWQBlAZQFUBZAWYDfudOuK2W5Tc/21+lnbtsxg7Pm7k4xWQBlASZr2ECRHpRurlnJu1NMFkBZgGwNG4OQD8oyeNJVVaxwYdRkAZQFKKthFck+LsVkAZQFOKWGkZfE7ZgsgLIAZTWca01V157prMkCKAuQrWFy3iPybjgYneZnXRAmC6AswOuQsZ+D0k9DWYCF64ZoBTCycjH3WCyc8zFZAGUBsk/D8vX3yOlVV6aYLICyAPU17El2BL0ALh3KmiyAsgD1M6XJkSe6V4TC9UeTBVAWYPJpGMl2VfvQlOnS0anJAigLMPk0jCS5Pwa990V4+EsbkwVQFmDzDou5acy5L1EdlD6KsgCbd1hUHbzuPfTfX6q60DegLMDmHRYRkh/PuG64B2UBNn/aPahGcgEx8hPFZAGUBTh3h0WjamdxHpMFUBZg8w6LwemtUMkJmcJimiyAsgCbd1j010FLIX7Mdi7KApyyw+ItMFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQGUBVAWQFkAZQH+AEkJCJS/ZGd/AAAAAElFTkSuQmCC

スマホで読み取ると、

データベース上では、

うまくできているようです!

新居、契約してきました。

無事、部屋の契約を済ませてきました。

これから引っ越しで忙しくなります。

とりあえず、もう部屋には行っていいらしいので、明日、一度部屋に向かい必要な物を調べる予定です。

ついでだから、雪まつり会場行ってみようかな。

みのりんに会いたいし。

これからやること。

  • 退去の通知
  • 引っ越しの見積もり
  • 引っ越し先の下調べ
  • 郵便の転送

お昼に食べたラーメン。

あまり無駄遣いできねっす。

メルペイを使ってみた!

QRコード決済。

PayPayは便利でキャッシュバックサービスもあるから、よく利用しているのですが。

使ってみたきっかけは、メルカリの売上金があったので。

メルカリの売上金をそのままメルペイに使えるのです。

でも、決済方法にメルペイが使える店舗って、少ないんですよ。

圧倒的に。

それはPayPayやLinePayの比ではないです。

しかし、

メルペイがiDと連携できると聞いたらどうだろうか?

メルペイのアカウントとiDを紐付けることによって、iD決済でメルペイでの支払いができるのです。

やり方は簡単で、メルカリアプリの設定でiDと連携設定を行えば良い。

これは、スマホがFelica(いわゆる、おサイフケータイ)に対応していれば使用できます。

iDで決済ができると言うことは、ドコモが築いたインフラがそのまま使用できるので、使用できる店舗が圧倒的に増えます。

唯一の欠点と言えば、

メルペイに入金したら、現金化に時間がかかる。

これはメルカリの売上金と同じ。

これが解決できたらなぁ。(切実)

今まで家計簿が続かなかった人こそ、Line家計簿を試して頂きたい。

お金を管理して無駄遣いしないようにするためには、家計簿を付けるのが一番とわかっているのだけれど、データの入力がめんどくさいのよ。

オイラも、何度か家計簿を付けようとしたけれども、結局途中で挫折した。

我々も忙しい日々の中生きているわけだから、その中で家計簿のデータ入力というめんどくさい作業に時間をかけるのは、難しいと思うんです。

でも、Line家計簿を使ったら、以外とこれが続くんです。

理由は簡単で、レシートのデータ入力の手間を省く工夫がされているんです。

例えば、レシートをカメラで読み取って、データの読み取り。

これがね、非常に便利なのよ。

昔は、アプリからカメラ撮影して読み込んでいたけれど、最新のアップデートかしら、レシートにカメラを向けるだけで、スキャナーの役割を果たしてくれて、読み込んでくれます。

その識字率も非常に高い。我々がやることと言えば、数字が正しいかの確認だけ。

金融機関の口座と連携させれば、そのデータも読み取って、反映してくれます。

これも以外と便利。

あとは電子マネーにも対応してくれれば言うこと無いでしょう。

無駄遣いを防ぐには、常に、どこにお金がいくらあるか、を認識する必要があると思うんです。

毎日家計簿をつける習慣を付けて、日々、財布の中と口座の残高を認識すれば、無駄遣いも減ると思うんです。

皆さんも是非Line家計簿で家計管理をやってみて欲しいです。

オススメ。

LINE家計簿

LINE家計簿

LINE Pay Corporation無料posted withアプリーチ

【C#】【数独】仮置きロジックを適用する条件を考える。

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

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

https://github.com/takishita2nd/sudoku

さて、いよいよ仮置きロジックの実装にとりかかります。

そのためには、仮置きロジックを行う条件を考えましょう。

現在まで実装しているロジックでのみで、ある程度はマスを埋めることができますので、そのロジックでも埋まらなかった場合、と考えるのが妥当でしょう。

その条件とは、周期処理の前と後で、確定しているマスの数が同じならば、と判断するのが一番簡単だと思います。

それでは実装します。

まずは、確定しているマスを数えるメソッドを作成します。

        private int countInputedNumber()
        {
            int ret = 0;
            for(int i = 0; i < 9; i++)
            {
                for(int j = 0; j < 9; j++)
                {
                    if(_square[i, j].isConfirmed())
                    {
                        ret++;
                    }
                }
            }
            return ret;
        }

特に難しいところはありませんね。

これを、周期処理に組み込みます。

        private int now_count = 0;
        private int prev_coount = 0;

        public void run()
        {
            bool roop = true;
            while (roop)
            {
                for(int row = 0; row < 9; row++)
                {
                    for(int col = 0; col < 9; col++)
                    {
                        if(_square[row,col].isConfirmed() == false)
                        {
                            Candidate candidate = new Candidate();
                            searchRowLine(row, candidate);
                            searchColLine(col, candidate);
                            search9Area(row, col, candidate);
                            _square[row, col].checkCandidate(candidate);
                        }
                    }
                }
                searchNumber();

                prev_coount = now_count;
                now_count = countInputedNumber();

                if(prev_coount == now_count)
                {
                    //debug
                    Console.WriteLine("ここで仮置きロジックを適用する {0} {1}", prev_coount, now_count);
                    return;
                }

                roop = !checkEnd();
                FileAccess.Output(_square);
            }
        }

こんな感じでどうでしょうか。

prev_coountが周期前の確定したマス数、now_countが周期後の確定したマス数です。

確定したマス数を数える前に前回のマス数を保存し、それと、現周期でのマス数を比較します。

これが同じならば、仮置きロジックを適用する(debug出力を行っているところ)という動きになります。

次回は、このdebugの箇所を考えていきます。

【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[,]の複製が作成されます。

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

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