【さっぽろ夏割】ホテルWBF札幌ノースゲート

久しぶりに泥酔した。

さっぽろ夏割プランを利用して、ホテルWBF札幌ノースゲートに一泊してきました。

https://www.hotelwbf.com/sapporo-northgate/

さっぽろ夏割を適用すれば5000円割引になります。

さらに、札幌市内のお店で使用できる3000円分のクーポンつき。

https://www.sapporo-summer2020.com/shop_use/

さらにラウンジが利用できる宿泊プランでした。

ラウンジでは、ビールやお菓子が食べ飲み放題なのです。

久しぶりに泥酔レベルまで飲んだね。

さらに、チェックインの時に聞いたのですが、

GoToキャンペーンで、申請すれば宿泊料金の一部が還付されるようです。

いやー久しぶりにリフレッシュしたわ。

明日からダイエットと節約頑張る。

久しぶりのお風呂(サウナ)からのビール

いやー

力抜ける。

久しぶりにガーデンズキャビンさんのお風呂に行ってきました。

思った以上に混んでいませんでした。

ホテル側でお風呂を利用しているお客の人数を管理していて、混み合わないように人数制限しているようです。

広いお風呂、ほぼ貸し切りでした。

そして、サウナで出来上がったら、居酒屋でビール。

前回、ホットペッパーでお食事券を予約当日に購入したものの、利用開始が購入日の次の日からだったので、今回ようやく使用できます。

唐揚げ1個50円。

唐揚げとザンギの違いは、明確な区別は無いそうですが、ザンギは衣に卵黄を混ぜてあるヤツが多いそうです。

ウナ串一本99円。

あ、土用の丑の日、今日だっけ。

いやー完全にリラックスして力が抜けました。

そして、今日はもう一つ贅沢をしちゃいます。

これが最後です(何回目)

【モラタメ】キッコーマン 超焼肉のたれ 甘口

ああ、そういえば注文してたっけな。

大量。

中身は全て同じです。

超具材焼肉のたれ。

これは、焼肉を食えと言うことか。

焼きました。

ソースは思った以上にどろっとしてますね。

お肉にめちゃくちゃ絡みつきます。

これは甘口で、オイラは普段辛口を食べているのですが、全然クセが無く、飽きが来ない味付けになっていました。

なので、用意したお肉全部ペロッと食べてしまいました。

美味いね。

ごちそうさまでした。

まだ5本残っているけど、ボチボチ消費します。

【実質北海道一周】都市と距離データを作成する。

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

さて、GPSから距離を求めることが出来たので、

今度は実際に使用する都市間距離のデータを作成します。

どこかに便利なデータが公開されていないかなー

って探してみたのですが、

ありませんでした。

公開されているデータが無いので、自分で作りました。

チマチマとGoogle Mapを使って、北海道一周で通る都市と、その都市間の距離を測定しました。

ルート検索を使うと、走行距離が出てくるので、このデータを、とりあえずはExcelに入力。

これをエディターにコピペして、置換を使ってタブスペースを削除。

ちなみに、ルートとしては、札幌をスタートして小樽へ向かい、反時計回りで一周して、石狩から札幌に戻るルートです。

疲れた。

【北海道大戦】市町村選択処理を実装する。

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

https://github.com/takishita2nd/HokkaidoWar

前回作成したこれ。

これの「担当市町村を選択」の処理を作成していきます。

まずは、状態の定義を作成しましょうか。

    class HokkaidoWar
    {
        Player _player = null;

        enum GameStatus
        {
            SelectCity,
            ActionEnemy,
            ActionPlayer,
            ShowResult,
            GameEnd
        }

        GameStatus gameStatus;

上からstatus=1~5に相当します。(実際に振られている値は違いますが)

        public void Run()
        {
            while (asd.Engine.DoEvents())
            {
                asd.Vector2DF pos = asd.Engine.Mouse.Position;

                switch (gameStatus)
                {
                    case GameStatus.SelectCity:
                        var info = Singleton.GetInfomationWindow();
                        info.ShowText(pos, "都市を選択してください\r\n");
                        onMouse(pos);
                        break;
                }

                if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
                {
                    switch (gameStatus)
                    {
                        case GameStatus.SelectCity:
                            _player = new Player(getCity(pos));
                            gameStatus = GameStatus.ActionEnemy;
                            break;
                    }
                }
                asd.Engine.Update();
            }
            asd.Engine.Terminate();
        }

マウスカーソルを動かすと、テキストウィンドウに「都市を選択してください」と表示されます。それに加えて、マップの上にカーソルがあると、その都市の情報も表示します。

マウスをクリックすると、その選択した都市でプレイヤーデータを作成します。

    class Player
    {
        private City city;
        public Player(City city)
        {
            this.city = city;
        }
    }

そして、statusを「敵の行動」に遷移させます。

【マインクラフト】【MOD】Minecraft Forgeをセットアップする。

まだまだ勉強中。

前回はこちらのページで統合版マインクラフトのプログラミングを紹介しましたが、

今回はJava版の方を弄ってみたいと思います。

必要になるのは、Minecraft Forgeという開発環境です。

https://mcforge.readthedocs.io/en/1.15.x/

これを使えばModを自分で作ることが出来ます。

今のMinecraftのバージョンは1.16.1ですが、対応するForgeはbeta版です。

まずは、こちらのサイトからMdkをクリックしてソースファイルをダウンロードします(バイナリではありません。)

https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.16.1.html

ソースファイルを適当なフォルダに展開します。

Terminalを開いて展開したフォルダに移動し、

> .\gradlew.bat genEclipseRuns (Eclipseの場合)

もしくは、

> .\gradlew.bat genIntellijRuns (IntelliJの場合)

を実行します。

Eclipse、IntelliJ、好きなIDE用に環境を構築してくれます。(自分はIntelliJです。)

完了したら、IDEを開いてプロジェクトをインポートします。

インポートが完了したら、とりあえず実行。

たぶん最初は英語になっているはずなので、言語設定で日本語にできます。

(新しいバージョンがあるって。後で更新しておこう。)

IDEのsrc/main/javaの下にExampleMod.javaがあると思いますが、

こんな感じでModをコーディングすることによって、統合版のMinecraftプログラミングと同じような事が出来るとおもいます。

まだオイラも勉強中ですけどね。

日照センサーで遊ぼう。

発光ダイオードって、抵抗噛まさないと壊れるんだね。

今回は日照センサーを仕入れたので、これで遊んでみたいと思います。

センサー部分に光を当てると、抵抗値が変わるという物です。

それを利用すればスイッチ処理に応用できたりします。

電流を測定すれば光量を数値化できると思いますが、アナログデータの扱いは難易度が高いので、今回はやりません。

今回は明るさによってLEDが点灯・消灯する回路を作成していきます。

回路図はこんな感じ。

明るいときは日照センサーの抵抗値が低いため、

この方向に電流が流れるため、LEDは点灯しません。

暗くなると、日照センサーの抵抗値が高くなるため、

この方向に電流が流れ、トランジスタのベースに入力が発生し、

この様にコレクタからエミッタ方向に電流の流れが発生してLEDが点灯します。

スマホのフラッシュで日照センサーに光りを当てています。

元々部屋の中が暗いので、通常状態でLEDが点灯しています。

ただ、今回は、あり合わせの抵抗を使用しているため、抵抗値は適当です。

ちゃんとした、計算された抵抗を使用すれば、もっと利便性の良い日照スイッチが出来るかもしれません。

【ダイエット支援】【食事管理】データ一覧処理を作成する。

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

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

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

今回はデータ一覧画面を作成していきます。

この画面は日付ごとにタンパク質、脂質、炭水化物、カロリーを集計して一覧表示にします。

今回の一番の肝、データを処理するリポジトリの処理。

class EatingManagementRepository
{
    private $paramNames = ['date', 'item', 'protein', 'liqid', 'carbo', 'calorie'];

    /**
     * データを取得して日毎にまとめる
     */
    public function getDailyList($user, $page = 1, $days = 10)
    {
        $dates = [];
        for($i = ($page - 1); $i < ($days * $page) ; $i++) {
            $dates[] = date('Y-m-d', strtotime('today - '.$i.' day'));
        }

        $eatings = $user->EatingManagements()
             ->whereIn(DB::raw('date_format(date, "%Y-%m-%d")'), $dates)
             ->get();

        // 日毎に集計
        $dailyDatas = [];
        foreach($eatings as $eating) {
            for($j = 2; $j < count($this->paramNames); $j++) {
                if(!array_key_exists($eating->date, $dailyDatas)) {
                    $dailyDatas[$eating->date] = [];
                }
                if(!array_key_exists($this->paramNames[$j], $dailyDatas[$eating->date])) {
                    $dailyDatas[$eating->date][$this->paramNames[$j]] = 0;
                }
                $dailyDatas[$eating->date][$this->paramNames[$j]] += $eating->{$this->paramNames[$j]};
            }
        }

        // 戻り値に変換
        $retDatas = [];
        $index = 0;
        foreach($dailyDatas as $dailykey => $dailyData) {
            $retDatas[$index][$this->paramNames[0]] = $dailykey;
            for($k = 2; $k < count($this->paramNames); $k++) {
                $retDatas[$index][$this->paramNames[$k]] = $dailyDatas[$dailykey][$this->paramNames[$k]];
            }
        }

        return $retDatas;
    }

まずはwhere inで日付指定でデータを取得するために、今日から(デフォルト)10日前までの日付を配列$datesに作成します。

>>> $dates
=> [
     "2020-07-30",
     "2020-07-29",
     "2020-07-28",
     "2020-07-27",
     "2020-07-26",
     "2020-07-25",
     "2020-07-24",
     "2020-07-23",
     "2020-07-22",
     "2020-07-21",
   ]

そして、DBにアクセスして、データを取得、結果が$eatingsに入ります。

>>> $eatings = $user->EatingManagements()->whereIn(DB::raw('date_format(date, "%Y-%m-%d")'), $dates)->get();=> Illuminate\Database\Eloquent\Collection {#3920     all: [
       App\Model\EatingManagement {#3917
         id: 1,
         date: "2020-07-30",
         item: "item1",
         protein: 10,
         liqid: 10,
         carbo: 10,
         calorie: 10,
         created_at: "2020-07-30 10:38:50",
         updated_at: "2020-07-30 10:38:50",
         pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3916
           user_id: 1,
           eating_management_id: 1,
         },
       },
       App\Model\EatingManagement {#3652
         id: 2,
         date: "2020-07-30",
         item: "item2",
         protein: 20,
         liqid: 20,
         carbo: 20,
         calorie: 20,
         created_at: "2020-07-30 10:39:00",
         updated_at: "2020-07-30 10:39:00",
         pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3915
           user_id: 1,
           eating_management_id: 2,
         },
       },
     ],
   }

このデータを日付毎に集計します。

$dailyDatasは二次元の連想配列になっていて、$dailyDatas[日付][栄養素]という感じで格納されます。

栄養素の連想配列名は定義済みの$paramNamesの値をそのまま使用します。

こうすることで、今後何かDBに修正が入ったとしても、$paramNamesのみを修正すれば良いことになります。

>>> $dailyDatas
=> [
     "2020-07-30" => [
       "protein" => 30,
       "riqid" => 0,
       "carbo" => 30,
       "calorie" => 30,
     ],
   ]

ただ、このままだと、Json化してJavascript側で処理するのに、ものすごい面倒なことになるので、扱いやすいようにデータを変換します。

具体的には、$retDatas[データ番号][項目]という形にします。

>>> $retDatas
=> [
     [
       "date" => "2020-07-30",
       "protein" => 30,
       "riqid" => 0,
       "carbo" => 30,
       "calorie" => 30,
     ],
   ]

この状態でJson化してフロントエンド側に送信します。

この処理書くの大変だったわ。

namespace App\Http\Controllers\Eating;

class ApiController extends Controller
{
    /**
     * データ一覧を取得する
     */
    public function list(Request $request)
    {
        return response()->json(['dataLists' => $this->eatingManagement->getDailyList(Auth::user(), $request->contents["page"])]);
    }
Route::post('api/eating/list', 'Eating\ApiController@list');
<script>
export default {
    created: function() {
        this.updateList();
        //this.createPagenate();
    },
    methods: {
        updateList: function() {
            this.datalists = [];
            this.contents.page = this.currentPage;
            this.param.contents = this.contents;
            var self = this;
            axios.post('api/eating/list', this.param).then(function(response){
                response.data.dataLists.forEach(element => {
                    self.datalists.push({
                        date: element.date,
                        protein: element.protein,
                        liqid: element.liqid,
                        carbo: element.carbo,
                        calorie: element.calorie
                    })
                });
            }).catch(function(error){
            });
        }

いやー未だにPHP慣れないわー。

札幌にもUber EATSがやってきた!

7月28日、札幌でもUber EATSのサービスが開始されました。

元々Uber EATSは日本各地でサービスを行っていたので、詳細は省きますが、

いいね。

オイラが住んでいる白石区はギリギリサービス圏内で、

サービス圏内端っこの方なので、利用できるお店は中央区ほど多くありませんが、

昨日の時点ではマクドナルド、スターバックス、かつやの三軒だけでしたが、

今日になって、新たに牛角とベントスが追加になっていました。

まだまだ出前館には、お店の数では及びませんが、

Woltはサービス圏内ですらありませんが、

今後も店舗が増えるかもと考えると、なかなか良い宅配サービスです。

※スターバックスはブランチ月寒からの配達なので、おそらく配達員がそこに張り付いているのだろう。

Uber EATSを選択するメリットは、最低購入価格が設定されていないところ。

なので、本当にコーヒー一杯からでも配達してくれます。

ただ、配達料がかかるから、頼むとしたらまとめて注文するけどね。

ただ出前館も負けじと、最近は新規の店舗も増えてきて、住民からすれば嬉しい限りです。

出前、いいねぇ。

今の体調とコリの恐ろしさ

仕事を退職して10ヶ月経過。

失業手当も次回の認定で終わってしまいます。

昨年の体調不良の原因が、肩こり、首こりにあると分かって、定期的に整体に通い、凝りをほぐすことによって、だいぶ回復してきました。

筋肉のコリって怖いね。

筋肉が凝り固まってしまうと、血液が十分に流れなくなってしまうので、手足の末端が震えたり、頭が働かなくなったりします。

(そういえば、最近は手のしびれが無くなったな・・・)

コリを防ぐには、定期的に体を動かしたり、ストレッチを行うことによって防ぐことが出来るのですが、

凝り固まってしまうとそれだけではなかなか解消できなくって、

高い金を払って整体に通わなければならなくなります。

整体のお金って結構高いんすよ。

オイラの行っていたあゆみ整骨院は1回あたり4000円だったかな・・・。

整体って、整体師が力業で体をマッサージする物だと思っていたけど、

ここはかなりハイテク(?)な治療マシンを使っているので、効果はテキメンでした。

しかも痛くない。

前回で通うのを終了しましたが、今でも定期的なストレッチは欠かしていませんし、なんてったって、ネックマッサージャーがあります。

これを使うと、使用後の感覚が整体終えた直後と同じなので、本当に効果テキメンです。

これで1万円なら安い物です。

でもまだ問題がありまして、

どうやら目の疲れがひどいらしい。

目の疲れからか、目のコリが発生して、耳鳴りがする。

で、どうやったら目の疲れを軽減できるのか、と言うのを調べてみたのですが、

その原因の一つに、パソコンディスプレイがあるらしい。

というのも、

ディスプレイが部屋の光りを反射して(グレアというらしい)、それが目に負担をかけていると言うことなのです。

そういえば、オイラのパソコンディスプレイ、メインのやつ(中央)が一番古いディスプレイだ。

そして、よく見ると、メインのディスプレイは背景の光りを反射している。

これがグレアか。

メインディスプレイを2番目に古いディスプレイに配置交換。

(一番新しいヤツはラズパイと兼用なので、位置を変えると不便。)

目の疲れは多少軽減できましたが、完全に対処するには、ノングレアのディスプレイカバーを買えば良いらしい(結構高い。)

あと、目の周りをマッサージしたり、眼球を動かす運動を定期的に行ったり、目を温めたりすると良いらしい。

さらなる体調改善を期待。

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