Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

【マインクラフト】#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関数で紐付けを解除します。

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

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

【マインクラフト】#1 新ワールドに入りました!

自前のマインクラフトサーバを立ち上げましたので、早速プレイします。

いでよ、マイワールド!

世界に入って最初にやることは、寝床の確保と、食料の確保です。

まずは適当に拠点を見つけて、木を殴ってアイテム化します。

そして、木から作業台を作成します。

作業台があれば、いろんなツールを作成することができます。

一通り揃えてしまいましょう。

次に羊さんをやっつけます。

羊毛と食料が確保できます。

羊毛はベッドを作るのに必要になります。

羊毛があれば作業台でベッドを作成できます。

次は、かまどを作成するために、石を採取します。

岩場が無ければ、地面を掘って石を確保するのも良いでしょう。

これで作業台でかまどが作れます。

食材は生のママでは効率が悪いですし、バッドステータス②鳴ることもあります。

なので、かまどで調理する必要があるのですが、

そのとき、木材を燃料にして食料を調理しても良いのですが、木材を燃やして木炭にすると、燃焼効率が良くなります。

それに木炭はたいまつの材料にもなりますし。

ここまで来れば、必要最低限の作業完了です。

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

【Laravel】テーブルのデータを削除する

前回までの様子はこちら

お次はテーブルのデータを削除する処理を作成します。

まずは、ルーティング。

Route::get('/management/{id}/conform', 'RegisterManagementController@conform');
Route::post('/management/delete', 'RegisterManagementController@delete');

/management/{id}/conformにアクセスすると削除確認の画面が、

/management/deleteにアクセスすると、実際に削除処理を行うようにします。

次は一覧画面に削除確認画面へのリンクを作成します。

                            <td>{{ Html::link('/management/'.$list->id.'/conform', '削除') }}</td>

そして、削除確認画面。

@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">
                {!! Form::open(['url' => action('RegisterManagementController@delete')]) !!}
                {!! Form::hidden('id', $item->id) !!}
                <table>
                    <tr>
                        <td>名前</td>
                        <td>{!! $item->name !!}</td>
                    </tr>
                    <tr>
                        <td>住所</td>
                        <td>{!! $item->address !!}</td>
                    </tr>
                    <tr>
                        <td>電話番号</td>
                        <td>{!! $item->phone !!}</td>
                    </tr>
                    <tr>
                        <td>人数</td>
                        <td>{!! $item->num !!}</td>
                    </tr>
                    <tr>
                        <td>宿泊日数</td>
                        <td>{!! $item->days !!}</td>
                    </tr>
                    <tr>
                        <td>宿泊日</td>
                        <td>{!! $item->start_day !!}</td>
                    </tr>
                </table>
                {!! Form::submit('削除') !!}
                {!! Form::close() !!}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

隠しパラメータにid番号を含め、formをSubmitしたときのパラメータにします。

次に、コントローラー。

    /**
     * 削除確認
     *
     * @return \Illuminate\Http\Response
     */
    public function conform($id)
    {
        return view('register.conform', ['item' => $this->registerManagement->getItemById($id)]);
    }

    /**
     * 削除処理
     */
    public function delete(Request $request)
    {
        $this->registerManagement->deleteById($request->id);
        return redirect('management');
    }

削除確認では、URLのID番号を受け取り、そのIDからデータを参照し、Viewに返しています。

削除処理では、$requestにID番号が入っていますので、そのIDをリポジトリに渡して、削除処理を行ったあと、一覧画面にリダイレクトします。

次はリポジトリ。

    /**
     * 予約を削除する
     * 
     * @return void
     */
    public function deleteById($id)
    {
        $model = $this->getItemById($id);
        $model->delete();
    }

IDでモデルを検索して、delete()メソッドを実行すれば、そのデータはデータベースから削除されます。

これで削除処理が完成しました。

次は、この情報から予約スケジュールを作成する処理を作成していきます。

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

マインクラフトサーバを立ち上げる

何を思ったのかJava版のマインクラフトを買ってしまいました。

単体でプレイしてもいいのですが、せっかくなので、サーバを立ち上げて、いろんな環境からプレイできるようにしたい、と思いました。

サーバの設置

まずは、サーバに、ダウンロードしたjarファイルを設置します。

実行するコマンドは、

$ java -Xmx1024M -Xms1024M -jar server.jar nogui

デスクトップ環境があれば、noguiオプションを取り除けば、GUIでいろいろ操作できるのですが、

こんな感じ。

ログも確認できる他、接続しているユーザーも確認できるし、ここからコマンドを入力して設定を変えることもできます。

しかし、VPS上で動かすならば、デスクトップ環境は無いので、このような画面は使用できません。

taki@taki-300-030jp:~/minecraft-server$ java -Xmx1024M -Xms1024M -jar server.jar nogui
 [20:01:20] [main/ERROR]: Failed to load properties from file: server.properties
 [20:01:20] [main/WARN]: Failed to load eula.txt
 [20:01:20] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

実行すると、こんなメッセージが表示されます。

どうやらEULAを承諾しないと動かすことができないみたいなので、同じディレクトリに生成されている、eula.txtの記述を変更しなければいけません。

eula.txtを開いて、

eula=true

と書き換えます。

Done (47.956s)! For help, type "help"

と表示されればサーバは稼働しています。

ポートの開放

iptableを使用している方は、マインクラフト用のポートを開放しなければ、外部からアクセスできません。

サーバの実行ログから、使用されているポート番号は25565であることがわかりますので、外部からこのポートへのアクセスを許可します。

$ sudo iptables -A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT
$ sudo /etc/init.d/netfilter-persistent save

これでVPSを再起動しても、マイクラサーバにアクセスできます。(マイクラサーバプログラムは再起動させないといけませんが)

ホワイトリストの作成

このままでは、URL(またはIPアドレス)がわかってしまえば誰でもサーバにアクセスできる状態となってしまいます。

なので、管理者が許可したアカウントだけサーバにアクセスできるように、ホワイトリストを設定しなければなりません。

ホワイトリストを有効にするには、サーバプログラムと同じディレクトリに生成された、server.propertiesを開き、

white-list=true

に書き換えます。

これで、ホワイトリストが有効になります。

もしくは、サーバのコンソールに、

/whitelist on

と、入力してもOKです。

こちらのほうが簡単かもしれません。

次に、ホワイトリストの登録を行います。

サーバコンソールに以下のコマンドを入力します。

/whitelist add [アカウント名]

これで、ホワイトリストの登録が行なえます。

あとはクライアント側から登録アカウント名でログインし、サーバにアクセスすればワールドに入ることができます。

逆に登録されていないユーザーはワールドに入ることができません。

これで一通りの設定は完了です。

細かい設定は、サーバのコンソールから

/help

と入力すれば、コマンド一覧が表示されますよ。

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

【Laravel】テーブルの内容を更新する

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

ソースコードはこちら。

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

今回は登録した内容を更新するところまでやります。

データを更新する前に、データを更新するページにリンクするように一覧画面を修正します。

@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>
                            <th>電話番号</th>
                            <th>人数</th>
                            <th>宿泊日</th>
                            <th>宿泊日数</th>
                            <th>編集</th>
                            <th>削除</th>
                        </tr>
                    @foreach ($registerLists as $list)
                        <tr>
                            <td>{{ $list->name }}</td>
                            <td>{{ $list->address }}</td>
                            <td>{{ $list->phone }}</td>
                            <td>{{ $list->num }}</td>
                            <td>{{ $list->days }}</td>
                            <td>{{ $list->start_day }}</td>
                            <td>{{ Html::link('/management/'.$list->id.'/edit', '編集') }}</td>
                            <td>削除</td>
                        </tr>
                    @endforeach
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

そして、ルーティングの設定も追加します。

Route::get('/management/{id}/edit', 'RegisterManagementController@edit');
Route::post('/management/update', 'RegisterManagementController@update');

更新フォームへのリンクと、実際にデータを更新するリクエストですね。

コントローラーには、以下の関数を追加します。

    /**
     * 編集処理
     */
    public function edit($id)
    {
        return view('register.edit', ['item' => $this->registerManagement->getItemById($id)]);
    }

    /**
     * 更新処理
     */
    public function update(Request $request)
    {
        $param = $this->registerManagement->getParam();
        $this->registerManagement->updateById($request->id,
        [
            $param[0] => $request->name,
            $param[1] => $request->address,
            $param[2] => $request->phone,
            $param[3] => $request->num,
            $param[4] => $request->days,
            $param[5] => $request->start_day
        ]);
        return redirect('management');
    }

そして、リポジトリには以下の関数を追加。

    // IDから予約を1件取得する
    public function getItemById($id)
    {
        return ReserveManagement::where(['id' => $id])->first();
    }

    // 予約を更新する
    public function updateById($id, $param)
    {
        $model = $this->getItemById($id);
        foreach($this->paramNames as $name)
        {
            $model->$name = $param[$name];
        }
        $model->save();
    }

「編集」のリンクのURLにデータベースのID番号が入っていて、それをコントローラーで受け取り、データベースからIDで参照して、データを取得します。

そして、取得したデータをViewに渡します。

実際に編集画面のViewはこちら。

@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">
                {!! Form::open(['url' => action('RegisterManagementController@update')]) !!}
                {!! Form::hidden('id', $item->id) !!}
                <table>
                    <tr>
                        <td>名前</td>
                        <td>{!! Form::text('name', $item->name) !!}</td>
                    </tr>
                    <tr>
                        <td>住所</td>
                        <td>{!! Form::text('address', $item->address) !!}</td>
                    </tr>
                    <tr>
                        <td>電話番号</td>
                        <td>{!! Form::number('phone', $item->phone) !!}</td>
                    </tr>
                    <tr>
                        <td>人数</td>
                        <td>{!! Form::select('num', ['1' => 1, '2' => 2], $item->num) !!}</td>
                    </tr>
                    <tr>
                        <td>宿泊日数</td>
                        <td>{!! Form::select('days', ['1' => 1, '2' => 2, '3' => 3, '4' => 4], $item->days) !!}</td>
                    </tr>
                    <tr>
                        <td>宿泊日</td>
                        <td>{!! Form::date('start_day', $item->start_day) !!}</td>
                    </tr>
                </table>
                {!! Form::submit('登録') !!}
                {!! Form::close() !!}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

見た目は登録と同じですが、デフォルト値を設定しているのが異なります。

コントローラーから受け取った値をデフォルト値として設定しています。

そして、登録ボタンを押すと、その情報がコントローラーのupdate関数に渡されます。

そして、その情報をデータベースに設定し、一覧画面にリダイレクトします。

これで更新処理が完成しました。

次回は削除処理を作りたいと思います。

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

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