北海道のジンギスカンにもいろいろあるんだよっていう話

北海道の食の中には必ず挙げられるジンギスカンなんですが。

そのジンギスカンにもいろいろ種類がありまして。

まず、大きな分類としては、生ラム と 味付けラム の二つです。

生ラムというのは、羊の肉をそのまま焼いて、タレにつけて食べるというものですが、

このタレにもいろいろ派閥がありまして、

それは、ソラチ派とベル派です。

お肉自体にもこだわりがあって、臭みが少ないラム肉もありますが(観光客にはこちらオススメ)、丸めて冷凍してカットした、昔ながらのラムロール肉もあります。(こちらの方が好きな方もいます。)

このラム肉の発祥の地と言われているのが、札幌月寒にあるツキサップジンギスカンと言われています。

こちらは一般的な焼肉に近いイメージですね。

味付けラムの方は、ラム肉を特製ダレに漬け込んで、専用のジンギスカン鍋で焼いて食べるものです。

こちらはすでにお肉に味付けされているので、つけダレはありません。

お肉を焼くと、肉汁が出るので、それを縁の溝に集めて、そこで野菜を煮詰めて食べるのが一般的です。

ここにうどんを入れると最高です。

有名なところで言うと、滝川市にある松尾ジンギスカンですが、

道内では各社がいろんな味付けでスーパーで販売しているので、各家庭で好みがあったりします。

ちなみに、うちの家庭は、長沼ジンギスカンでした。(松尾は高い)

これを書いていたら、ジンギスカン食いたくなりました。

今度食べます。

ホストPC外部から仮想PCに接続できるようにする

これの続き。

仮想PCにUbuntu20.04をセットアップしたものの、

今の状態ではホストPCからでしか仮想PCに接続できないので、

これをホストPCの外からでも接続できるようにします。

仮想PCのネットワーク設定はデフォルトこうなっています。

内部ネットワークが選択されているから、外からアクセス出来ないんでしょう。

なので、新しい仮想ネットワークスイッチを追加。

接続の種類を外部ネットワークにして、物理ネットワークデバイスを設定。

これを仮想PCのネットワークに設定します。

これで仮想PCを起動。

ルータのDHCPでIPアドレスが割り当てられていれば成功。

あとは、MACアドレスを静的な値に設定、ルータのDHCP設定で固定IPアドレスを登録すればOKでしょう。

マインクラフトサーバを自宅に設置したい。

今使用しているモデムですが、

無線ルータ・ひかり電話内蔵のモデルなんですが、

今までは業者が全部セットアップしてくれたおかげで、設定をいじくることができませんでした。

しかし、ビッグローブにプロバイダを乗り換えたことで、設定が初期化・再設定を行ったことにより、設定をいじくることができるようになったのです。

マインクラフトサーバはメインPC内の仮想PCで動作させたいと思います。

今持っているラズパイ4では、メモリは十分でもCPUパワーが足りない。

そして、外部からマイクラサーバに接続するには、ルータの設定で仮想PCに接続できるよう設定を変える必要があるのですが。

通常のルータはポートフォワーディングといって、特定ポート番号でのアクセスのみを内部PCに転送する機能があるのですが、

このモデム一体型ルータはポート番号に関係なく、外からのアクセスを内部PCに転送する設定にしかできないみたいです。

ということは、その設定を有効にした場合、転送先のPCは常に外からのアクセスに晒されるので、ファイヤーウォールの設定は必須になりますな。

さて、実際に仮想PCを立ち上げようか。

【ラズパイ】ラズパイ4でマインクラフトサーバを稼働させてみる。

こちらのページを参考にしました。

今使用しているラズパイ4のモデルはメモリ2GBのやつです。

マインクラフトはJava版を使用しました。

ラズビアンにはデフォルトでJavaが入っていないので、Javaをaptコマンドでインストールする必要があります。

$ sudo apt install default-jdk-headless

結構時間かかります。

で、実行して、実際にプレイして見た。

まず、初回起動時のマップ生成処理に時間がかかってます。

そりゃそうだ。ストレージはSDカードだから。

SSDドライブを増設すればまた違うのかな。

そして、プレイ中のCPU使用率は、通常は20%程度ですが、たまに80%まで負荷がかかります。

1人では十分かもしれないけどマルチプレイだと耐えられるかどうか。

また、MOBや機構を増やすと早い段階で処理が重くなるんじゃないか。

って思いました。

メモリ的には十分なんだけどね。

よし、止めよう。

ラズパイでマインクラフトサーバは無理だ。

眼精疲労防止のためにやったこと

いろいろ試行錯誤しましたが、いまのところ、オイラの眼精疲労はだいぶ改善できました。

今は1日普段通りに行動できます。

やったこと

●ブルーライト対策

メガネにブルーライト対策を施したレンズにする。

スマホの画面の明るさを調整。あまり明るすぎず、適度な暗さにする。

Android OSの機能で、夕方になると、画面が暖色になる設定を有効にする。

f.luxというアプリをPCにインストールし、夕方になると、ディスプレイを暖色にする機能を使用する。

●部屋の明かり対策

ノングレア対応ディスプレイを使用する。

部屋のカーテンを閉め切り、太陽光が直接部屋に入らないようにする。

ルームライトの明るさを調整する。夜に明るさ全開は、老眼に負担が大きかった・・・。

●疲れ目対策

PC作業は1時間毎に10分の休憩を入れる。

疲れ目を感じたら蒸しタオルで目を温める。

肩こり、首こりを防ぐために、ストレッチなどの運動を行ったり、マッサージ器を使用する。

遠くを見るのも効果的とあったが、うちの部屋からは隣の壁しか見えないので・・・。

【ダイエット】HIKAKINの体重まで痩せました。

確かHIKAKINの体重が82kgだったと思う。

やったこと

足をめちゃくちゃ鍛えた。

ほぼ一年ぐらいスクワットをやり続けて、足の筋肉がバッキバキに鍛えられました。

もっと鍛えれば、もっとバッキバキになると思いますが、ズボンがはけなくなるかもと思って、いまはそんなに鍛えていません。

しかし、筋肉は鍛えればちゃんと答えてくれるという事が分かりましたので、今後は腹筋やダンベルのトレーニングもやってみようと思います。

めちゃくちゃ歩いた。

最近の歩数のカウントですが、☆が付いている日が1万歩以上歩いた日です。

天候によっては歩けなかった日もありますが、のぼ半分以上は歩きまくっている事になっています。

多い日は2万歩も歩いたことも。

分かったのは、汗をかけば痩せるという物ではなく、足を動かした量が多ければ痩せるということ。

歩きまくりましたが、そんなにダラダラ汗をかいているわけでも無く、休みながらマイペースで歩きました。

そのぶん、1日2時間ぐらいは歩きました。

あとは、食べ過ぎ、飲み過ぎが無ければ痩せます。

運動を続けるためには

スマートフォンのGPSを使用した位置ゲーアプリを使用すると、楽しみながら歩くことができます。

オイラの場合は、ドラクエウォークとテクテクライフを使用しています。

さて、一応当初の目標はクリアしましたが、さらなる減量を目指して、次は80kgを目標にダイエット頑張ります。

ビッグローブの光回線が開通しました。

本日、ビッグローブから回線開通とIDの通知が来ましたので、早速セットアップ。

今使用しているモデムなんですが、

これはどうやらWi-Fiが内蔵されているだけで無く、光電話にも接続できる一体型モデムらしい。

で、ビジモネットでセットアップしたときは、業者が全部やってしまって、IDとかパスワードとか全く分からないままだったんですが、

ビッグローブのセットアップ手順を見ると、設定を一度初期化してセットアップするらしい。

あ、ということは外部から接続できるトンネル設定できる。(今のところ予定はないが。)

そして、設定内容を確認したところ、すでにIPv6接続にもなっているようです。

ということは、早速スピードテスト。

https://speedtest.gate02.ne.jp

二度見した。

念のため他のスピードテストでも測定してみたけど、変更前より3倍の速度が出ています。

変更前はこうでした。

そして、@niftyよりも早い。

あと、ビジモネット使っていて思ったのが、夜間の回線速度が遅いと感じてたんですよね。

これはビッグローブを紹介してくれた業者さんGJですわ。

よし、@niftyからビッグローブにいろいろ乗り換えよう。

【ラズパイ】【カメラ】WEBから動画を撮影する。

今回はWebのプレビュー画面から動画の撮影を行いたいと思います。

赤丸のボタンを設置し、押すと録画開始、もう一度押すと録画停止という感じです。

まずはサーバ側。

すでに動画を撮影する方法は知っているので、これを使用します。

POSTリクエストを受け付ける処理を書いていきます。

    def do_POST(self):
        global thread
        global aviFilename
        global capture
        global out

        content_len = int(self.headers.get('content-length'))
        requestBody = json.loads(self.rfile.read(content_len).decode('utf-8'))

        if requestBody['contents']['command'] == 1:
            _, img = cap.read()
            dt_now = datetime.datetime.now()
            filename = dt_now.strftime('%Y%m%d_%H%M%S')+".jpg"
            cv2.imwrite(filename, img)

            response = {
                'status' : 200,
                'path': "http://pi4.local:8000/" + filename
            }
        if requestBody['contents']['command'] == 2:
            dt_now = datetime.datetime.now()
            aviFilename = dt_now.strftime('%Y%m%d_%H%M%S')+".avi"
            out = cv2.VideoWriter(aviFilename, fourcc, 20.0, (640,480))
            
            capture = True
            thread = threading.Thread(target=videoCapture)
            thread.start()

            response = {
                'status' : 200,
            }
        if requestBody['contents']['command'] == 3:
            capture = False

            thread.join()

            out.release()
            out = None

            response = {
                'status' : 200,
                'path': "http://pi4.local:8000/" + aviFilename
            }
        else:
            response = {
                'status' : 200
            }

        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        responseBody = json.dumps(response)

        self.wfile.write(responseBody.encode('utf-8'))

録画開始(command=2)を受信した場合、VideoWriterを作成し、動画を保存するスレッドを起動します。

録画停止(command=3)を受信した場合は、このスレッドを停止するように動作します。

実際のスレッド処理はこんな感じです。

def videoCapture():
    while capture:
        _, img = cap.read()
        out.write(img)

captureフラグがTrueのときは延々とカメラの映像を動画ファイルに保存します。

録画停止時にcaptureフラグをFalseに変更し、このスレッドが終了するのをjoinで待ってから、作成された動画ファイルのパスを返信します。

動画のダウンロードですが、たぶん、content-typeを用意しないと行けないので、Dictionaryに追加しています。

CONTENT_TYPE = {'.html': 'text/html; charset=utf-8', '.txt': 'text/plain; charset=utf-8', '.js': 'text/javascript', '.json': 'application/json',
        '.jpeg': 'image/jpeg', '.jpg': 'image/jpeg', '.png': 'image/png', '.gif': 'image/gif',
        '.css':'text/css', '.avi': 'video/x-msvideo'}

さて、このままだと録画中にブラウザを閉じてしまって、録画を止める手段が無くなってしまいます。

これの対処を次回やります。

(そろそろカメラネタも無くなってきた。)

【テクテクライフ】滝野すずらん丘陵公園

滝野すずらん丘陵公園は、札幌市南部の山の中にある公園で、もちろん徒歩で行けるところではありません。

一般的にバスか自家用車で行くことになります。

バスは地下鉄南北線真駒内駅と東豊線福住駅から出ています。

入るには、入場料がかかりますが、障害者手帳があれば無料になります。

山の中なので、今の時期なら紅葉がきれいに見えます。

今が見ごろだね。

さて、これで札幌名所10選ラリーを攻略しました。

今後の予定は・・・地道に塗っていきますかね。

まだ札幌市13%しか塗れていないんすよ。

雪が降るまでの残りわずか、もう少し頑張ります。

cocos2d-xのコーディングしてて思ったこと。(ガベコレの話)

C#やJavaにはガベージコレクションと言って、使用しなくなったオブジェクトを自動的に解放してくれる仕組みがありまして、

だからnewしたオブジェクトの使用後を意識しなくても使用できるんですが、

C++にはそんな機能は無く、

newしたオブジェクトは明示的にdeleteしないと、そのオブジェクトは消えません。

で、cocos2d-xはspriteなどを作成するときにnewを使用せずにcreate()メソッドを使用しているんです。

そして、サンプルを見る限りではdeleteは行っていない。

これはcocos2d-xのプラットフォームの中で独自にガベージコレクション的な動きをしています。

ただ、cocos2d-xのガベコレとC#やJavaのガベコレとは少しロジックが異なるようです。

詳しい内容はこの記事を見て欲しく

http://furicotech.blogspot.com/2015/03/memory-management-in-cocos2d-x.html

まぁ、この内容をまとめると、

cocos2d-xのspriteなどのオブジェクトは1回使い切り。(その都度createしなければならない。)

これ、自分もコーディングしててハマりました。

あると思っていたspriteのポインタが無効なポインタになっていた、と言うことが多々ありました。

C#と同じ感覚で使用することができないんですね。

なので、クラス設計をどうするか、少し悩んでいます。

spriteなどの部品はシーンクラスの中で全部処理させた方が良いかもしれない。

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