【ジビエ】鹿モモ肉のコンフィ

コンフィはオリーブオイルで低温調理した料理全般を言うみたいです。

味はちょっと薄かったです。

もっと塩を使うか、お肉を細かく切った方が良いかもしれないでです。

あと、どのように映っているか、調理中でも確認できるビデオカメラがあればいいですね。

カメラ、高いんだよなぁ・・・

バナークリックで応援よろしくお願いします。

【Laravel】バリデーション処理を追加する

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

最新ソースはこちら。

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

バリデーション処理とは、フォームで入力した値が、正しいかどうかを確認する処理です。

現在は入力された値がそのままデータベースに入るようになってしまっているので、パラメータチェック処理を入れて、エラーを返せるようにします。

今回は実装量が少ない方法で行きます。

以下のコマンドを入力。

$ php artisan make:request ManagementRequest

そうすると、App/Http/Request/ManagementRequest.phpが作成されます。

その内容を修正します。

class ManagementRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required|string',
            'address' => 'required|string',
            'phone' => 'required|digits:11',
            'num' => 'required|numeric|digits_between:1,2',
            'days' => 'required|numeric|digits_between:1,4',
            'start_day' => 'required|date',
        ];
    }
}

authorize()の戻り値はtrueに変えます。

falseのままだとすべて認証エラーとなります。

rules()に各パラメータの確認内容を記入します。

こちらのサイトが参考になります。

https://qiita.com/fagai/items/9904409d3703ef6f79a2

あとは、コントローラーを変更します。

use App\Http\Requests\ManagementRequest;

    /**
     * 登録処理
     */
    public function store(ManagementRequest $request)


    /**
     * 更新処理
     */
    public function update(ManagementRequest $request)

確認を行うフォームのリスエスト処理の引数の型をManagementRequestに変更します。

これで、App/Http/Request/ManagementRequest.phpの内容が適用されます。

あとは、bladeにエラーを表示する領域を追加すればOK。

                @if ($errors->any())
                    <div class="alert alert-danger">
                        <ul>
                            @foreach ($errors->all() as $error)
                                <li>{{ $error }}</li>
                            @endforeach
                        </ul>
                    </div>
                @endif

クリックで応援よろしくお願いします。

2画面スマホLG G8X Thinqってどうなの?スペックを比較してみた!

LG G8X ThinQはLGからリリース予定の2画面スマホです。

キャリアはソフトバンクのみ。

通常は1画面ですが、アタッチメントでもう1画面増やすことができます。

この画面は製品に付属されています。

この2画面は、それぞれ独立しているため、二つのアプリを同時に扱えるというメリットがあります。

使い方次第では便利なのかもーと思います。

しかも価格も抑えめ。

スペックの比較です。

比較するのはPixel4です。

Pixel4 Pixel4 XLLG G8X ThinQ
ディスプレイ5.7インチ6.3インチ6.4インチ、6.4インチ
解像度FHD+ 19:9QHD+ 19:9FHD+ 2340×1080ドット
プロセッサSnapdragon855Snapdragon855 SDM855
メモリ6GB 6GB 6GB
ストレージ64GB/128GB 64GB/128GB 64GB
サイズ147×68.8×8.2mm160.4×75.1×8.2mm 160×76×8.4mm
2画面では
166×164×15.0mm
重さ162g193g 193g 2画面では 331g

また、おサイフケータイ、指紋認証、ワンセグ、フルセグが付いています。本体のみ防水・防塵仕様になっています。

お値段、合計55440円。

このスペックで5万円台か。どこかでコスト削っているのか?

そうだな・・・2画面あるのだから、テレビみながらツイッターできる、と言うことができるのか。

それはそれで便利かも。

別に今のPixel3に不満は無いけどね。

バナークリックで応援よろしくお願いします。

【Laravel】スタイルを整える

前回までの様子はこちら。

最新ソースはこちら。

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

まあ、ここまで見ていただいた方々は、ほぼ100%思っていることがあると思います。

見づらい。

せめて、罫線ぐらい引けよ。

ということで、やります。

Laravelでは、public/css/app.cssを読み込んで、スタイルを設定しています。

じゃあ、ここにスタイルを書き足せばいいのか?と思うかもしれませんが、Laravelでは、もっと便利な方法があるんです。

sass/scssというんですけどね。

こちらにスタイルを書き込み、node.jsのプログラムを実行して、app.cssを作成することができるんです。

sass/scssは普通にCSSを書くよりも、少ないコードでスタイルをかけるので便利でした。

まずは、node.jsの準備。

$ sudo apt install nodejs
$ sudo apt install npm
$ npm install
$ npm run dev

もし、npm installに失敗した場合は、imagemin-pngquantのバージョンが一致していないので、package.jsonのdevDependenciesに以下を書き足します。

        "imagemin-pngquant": "5.0.1"

npm installが完了すれば、準備完了。

npm run devを実行すると、sass/scssのコンパイルが実行されます。

スタイルは何度も書き換えることが多いので、コンパイルが面倒くさい人は、

$ npm run watch

を入力すると、sass/scssを保存するたびに、それを検出してコンパイルしてくれます。

では、sass/scssを作成します。

resource/assets/sassの下に、_Management.scssを作成し、app.scssに以下を追加します。

@import "Management";

そして、_Management.scssに記述を追加。

table.management {
    width: 100%;
    tbody tr{
        th {
            border: solid;
            border-width: thin;
        }
        .name{
            width: 15%;
        }
        .address{
            width: 20%;
        }
        .phone{
            width: 15%;
        }
        .num{
            width: 10%;
        }
        .date{
            width: 10%;
        }
        .command{
            width: 5%;
        }
        td {
            border: solid;
            border-width: thin;
        }
        .name{
            width: 15%;
        }
        .address{
            width: 20%;
        }
        .phone{
            width: 15%;
        }
        .num{
            width: 10%;
        }
        .date{
            width: 10%;
        }
        .command{
            width: 5%;
        }
    }
}

bladeにスタイルを適用します。

                    <table class="management">
                        <tr>
                            <th class="name">名前</th>
                            <th class="address">住所</th>
                            <th class="phone">電話番号</th>
                            <th class="num">人数</th>
                            <th class="date">宿泊日</th>
                            <th class="num">宿泊日数</th>
                            <th class="command">編集</th>
                            <th class="command">削除</th>
                        </tr>
                    @foreach ($registerLists as $list)
                        <tr>
                            <td class="name">{{ $list->name }}</td>
                            <td class="address">{{ $list->address }}</td>
                            <td class="phone">{{ $list->phone }}</td>
                            <td class="num">{{ $list->num }}</td>
                            <td class="date">{{ $list->start_day }}</td>
                            <td class="num">{{ $list->days }}</td>
                            <td class="command">{{ Html::link('/management/'.$list->id.'/edit', '編集') }}</td>
                            <td class="command">{{ Html::link('/management/'.$list->id.'/conform', '削除') }}</td>
                        </tr>
                    @endforeach
                    </table>

これで見た目がだいぶ良くなりました。

バナークリックで応援よろしくお願いします。

【Laravel】スケジュール一覧を表示する

前回までの様子はこちら

最新ソースはこちら

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

今回はスケジュール一覧を表示させたいと思います。

まずはルーティング。

Route::get('/management/schedule', 'RegisterManagementController@schedule');

コントローラー。

    /**
     * スケジュール表示
     */
    public function schedule()
    {
        return view('register.schedule', ['Lists' => $this->registerManagement->getSchedule()]);
    }

リポジトリ。

予約名はテーブルが違うので、リレーションを使って参照します。

リレーション便利。

    /**
     * スケジュール一覧を取得する
     */
    public function getSchedule()
    {
        $lists = array();
        $index = 0;
        $models = ReserveDayList::get();
        foreach($models as $model)
        {
            $lists[$index] = array('day' => $model->day, 'name' => $model->reserveManagements()->first()->name);
            $index++;
        }
        return $lists;
    }

ビュー。

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">スケジュール</div>

                <div class="panel-body">
                    <table>
                        <tr>
                            <th>日時</th>
                            <th>名前</th>
                        </tr>
                    @foreach ($Lists as $list)
                        <tr>
                            <td>{{ $list['day'] }}</td>
                            <td>{{ $list['name'] }}</td>
                        </tr>
                    @endforeach
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

今回はいろいろ手こずった割には、コード自体はあっさりしたという。

ビュー側がオブジェクトじゃなくて、連想配列だったのが落とし穴だったわ。

でも、システムとしてはまだまだ足りないところがあるので、そこを対応していきます。

【マインクラフト】#3 廃坑を発見する!

ここでまず必要なのは、サトウキビ。

これは紙の材料となり、地図を作成するのに必要になります。

サトウキビは水の周りにしか生えないので、川をくまなく歩いて、ようやく発見することができました。

サトウキビを拠点に持ち帰り、近くの水辺に植えておきました。

成長すれば収穫できるはずです。

次は、鉄が欲しいので、近くの洞窟を探検することにしました。

なんと、そこには廃坑があったのです!

これはラッキー。

廃坑は資材の宝庫!

でも、まだ深く探索するのは危険なので、鉄だけ回収して帰りました。

いずれ、きちんと探索します。

鉄を使ってはさみを作成。

はさみがあれば、蜘蛛の巣を回収できます。

蜘蛛の糸があれば糸を取り出すこともできますので、とりあえず、廃坑探検はここまで。

拠点を整備したい。

↑よかったらクリックお願いします。

【完全栄養食】BASE NOODLEをパスタソースに合わせてみる。

完全栄養食はこちらの記事でまとめています。

完全栄養食をもっとおいしく食べたい。

前回食べてみたときは、スープではなくて、ソースと合わせたほうがおいしい、というのが分かったので、

ならば、市販のパスタソースでも十分おいしく食べられると思ったのです。

というわけで、購入しました。

BASE NOODLE×ミートソース

BASE NOODLE×たらこソース

BASE NOODLE×明太子ソース

いずれも、ヌードル本体の味にも負けず、しっかりソースの味も感じられました。

三つともとてもおいしかったです。

これをうまく組み合わせれば、おいしくBASE NOODLEを食べられますね。

しかも、糖質は少ないので、小腹がすいた夜に食べても罪悪感ないし、腹持ちもいい。

ほんと、これはお勧め。

今年はe-Taxで確定申告をやってみたい。

前回、退職して確定申告を行ったときは、確か、Web上で必要事項を入力すれば、自動的に計算してくれて、印刷して税務署にもっていけばOKだったのですが。

まぁ、税務署は家からも近いのですが、それでも、寒い中、外出はなるべく控えたい。

なので、自宅で全部完結するe-Taxというものをやってみようと思ったのです。

ICカードリーダー

基本的には何でもいいのですが、e-Tax対応と商品説明にあるものを選んだほうが確実です。

マイナンバーカード

もはやこれぐらいしかマイナンバーカードのメリットがないのでは?と言われているものです。

様々な活用法を模索しているみたいですけどね。

マイナンバーカードで確定申告できるように設定

こちらのサイトにアクセスし、手続きを行います。

https://www.e-tax.nta.go.jp

まぁ、Windows10を指定している人だったら、「利用環境の確認」はクリアしていると思います。

「電子証明書の取得」に関しては、マイナンバーカードがそれに該当しますので、持っていればクリア。

なので、次は「開始届出書の提出になります。

事前準備のセットアップ

こちらのリンクから、

http://www.e-tax.nta.go.jp/e-taxsoftweb/e-taxsoftweb1.htm#Link4

このプログラムをダウンロードして、インストール。

注意するべきところは、

この画面で、Microsoft Storeからプラグインをインストールすること。

あとは、指示に従って進めていくだけ。

完了後にEdgeを確認すると、

こんなのが出るので、有効化します。

利用者識別番号の取得

たぶん、この画面が表示されるので、

右の「初めての~」をクリックして、必要事項を入力します。

無事、手続き完了すれば、利用者識別番号が発行されます。

この画面は必ず印刷するか、PCに保存してください。

とりあえず、今できるのはここまで

というのは、まだ今年度の確定申告の受付は始まっておりません。

でも、準備は早いに越したことはないので、

マイナンバーカードの申請は今からならばぎりぎり間に合うかもしれないので、e-Taxやってみたいという人は、早めに準備しておくことをお勧めします。

↑よろしかったらクリックをお願いします。

【マインクラフト】#2 畑を作る!

食料を安定的に獲得するために畑を作って栽培しようと思います。

まずは、草を刈って、種を採取します。

この種を育てると、小麦になります。

次にこれを植える場所。

まだ水を汲むことができないので、水の近くに畑を耕そうと思います。

なので、水野周りを整地します。

そして、クワで土を耕し、

種を植えます。

時間が経てば、麦になるはずです。

↑よかったらクリックおねがいします。

【Laravel】スケジュールとの連携を行う

前回までの様子はこちら。

最新ソースコードはこちら。

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

まずは、テーブルの連携が正しくできるように、マイグレーションを修正しました。

実際に修正を行う際には、事前にロールバックを行うか、テーブルを書き換えるマイグレーションファイルを追加してください。

        Schema::create('reserve_day_list_reserve_management', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('reserve_management_id')
                  ->foreign('reserve_management_id')
                  ->references('id')->on('reserve_managements')
                  ->onDelete('cascade');
            $table->integer('reserve_day_list_id')
                  ->foreign('reserve_day_list_id')
                  ->references('id')->on('reserve_day_lists')
                  ->onDelete('cascade');
            $table->timestamps();
            $table->engine = 'InnoDB';
            $table->charset = 'utf8mb4';
            $table->collation = 'utf8mb4_unicode_ci';
        });

Laravelには、中間テーブルのネーミングルールが決まっており、それに合わないと、正しく中間テーブルを認識できません。

しかし、ネーミングルールがあっていれば、中間テーブルのモデルを定義しなくても、Laravelは中間テーブルを認識します。

各モデルの関数も修正します。

class ReserveManagement extends Model
{
    protected $table = 'reserve_managements';

    public function reserveDayLists()
    {
        return $this->belongsToMany('App\Model\ReserveDayList');
    }
}
class ReserveDayList extends Model
{
    protected $table = 'reserve_day_lists';

    public function reserveManagements()
    {
        return $this->belongsToMany('App\Model\ReserveManagement');
    }
}

これで、各モデルから連携先のモデルを直接参照することができます。

最後にリポジトリの修正を行います。

    public function add($param)
    {
        $model = new ReserveManagement;
        foreach($this->paramNames as $name)
        {
            $model->$name = $param[$name];
        }
        $model->save();
        $model2 = new ReserveDayList();
        $model2->day = $model->start_day;
        $model2->save();
        $model->reserveDayLists()->attach($model2);
        for($i = 1; $i < $model->days; $i++)
        {
            $model2 = new ReserveDayList();
            $model2->day = date('Y-m-d', strtotime($model->start_day.'+'.$i.' day'));
            $model2->save();
            $model->reserveDayLists()->attach($model2);
        }
    }

ちょっと変数名がよろしくありませんが、attach関数でLaravelは自身で中間テーブルを認識し、レコードの紐付けを行います。

逆に削除する場合は、

    public function deleteById($id)
    {
        $model = $this->getItemById($id);
        $model2s = $model->reserveDayLists()->get();
        $model->reserveDayLists()->detach();
        foreach($model2s as $model2)
        {
            $model2->delete();
        }
        $model->delete();
    }

今度は逆にdetach関数で紐付けを解除します。

少し修正が発生しましたが、これで少ないコードでデータベースを簡単に扱うことができます。

↑よかったらクリックお願いします。

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