https://github.com/takishita2nd/HokkaidoWar
最初のプレイヤーの都市選択で確認ダイアログを出すようにしました。
あとは、最後までプレイできることも確認しました。
ただ、戦力差がありすぎると、バトルがワンパンで決着が付いてしまうのが、ちょっとよろしくないですね。
https://github.com/takishita2nd/HokkaidoWar

最初のプレイヤーの都市選択で確認ダイアログを出すようにしました。
あとは、最後までプレイできることも確認しました。
ただ、戦力差がありすぎると、バトルがワンパンで決着が付いてしまうのが、ちょっとよろしくないですね。
このやり方で設定できるはず。
ただしHTTPは動かさないので、その設定は省いている。
$ sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
$ sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$ sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT ACCEPT
さらにマインクラフトのポート番号を開ける。
$ sudo iptables -A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT
$ sudo /etc/init.d/netfilter-persistent save
この状態でLANからサーバに接続できることを確認。
そしたら、ルータの設定を変えて、仮想PCに流れるようにしてみようか。

前回のままだと、クライアント側(ブラウザ)を撮影中に閉じてしまうと、動画撮影を終了する人がいなくなってしまいます。
これを防ぐためには、クライアントが生存していることを常に確認する処理が必要になります。
まぁ、今回はプレビュー画面で常にデータのやりとりを行っているので、これを利用しましょう。
def do_GET(self):
parsed = urlparse(self.path)
if parsed.path == '/Streaming':
global lasttime
lasttime = time.time()
enc = sys.getfilesystemencoding()
プレビュー画をリクエストがあったら、その時間を記憶しておきます。
def videoCapture():
global capture
global out
while capture:
nowtime = time.time()
if nowtime - lasttime > 10:
capture = False
out.release()
out = None
break
_, img = cap.read()
out.write(img)
ビデオキャプチャーの周期処理の中で、現在時刻と、プレビュー画要求時の時刻を比較します。
周期処理の時刻がキャプチャー時の時刻より10秒経過していたら撮影を終了します。
ブラウザを撮影途中で閉じた場合、プレビュー画要求時の時刻が更新されなくなりますので、こうすることで、ブラウザを閉じてから10秒後に撮影は終了します。

さて、カメラでやりたいことが終わってしまった・・・
次何しようかな。
特に特筆することはやっていないので、進捗報告だけ。
https://github.com/takishita2nd/diet-mng

とりあえず画面の表示だけ。
全チェック処理とか、テンプレートに移す処理とか、データを削除する処理とかは次回やります。
あと、管理者アカウントを別に作って、他の人がこのページにアクセスできないようにする必要もありますね。
マインクラフトサーバプログラムをダウンロードして、
/opt/minecraft-server/配下に設置。
rootがアクセス出来る所ならどこでも良いが、慣例的に/opt配下にディレクトリを作って配置するのが一般的らしい。
こちらの記事を参考にしてserviceファイルを作成。
これを、/etc/systemd/system配下にコピー。
そのあと、パーミッションをRead Onlyに変える。
$ sudo chmod 444 minecraft-server.service
サービス開始
$ sudo systemctl start minecraft-server.service
サービス登録
$ sudo systemctl enable minecraft-server.service
初回起動時はeula.txtの中身がeula=falseになっているので、これをtrueに書き換えてサービスを再起動。
$ sudo systemctl restart minecraft-server.service
この状態でクライアントから接続できることを確認。
OK。

画像を配置するのは簡単なんですが、
その配置位置を調整するのがめちゃくちゃ大変だったりします。
auto Button = Sprite::create("btnChara.png");
if (Button == nullptr)
{
problemLoading("'btnChara.png'");
}
else
{
Button->setPosition(Vec2(sprite->getPosition().x + sprite->getContentSize().width * scaleRate / 2 + origin.x, visibleSize.height + origin.y));
Button->setAnchorPoint(Vec2(1.0,1.0));
Button->setScale(3.0);
this->addChild(Button, 1);
}
まず、setAnchorPoint()についてですが、
これは画像位置の基準となるポイントを設定する関数ですね。
デフォルトでは、アンカーポイントは中心(0.5, 0.5)の位置にあり、これを左下にするには(0, 0)、右上にするには(1, 1)と設定します。
今回は画像の右上を、背景の右上に合わせたいので、(1.0 , 1.0)、すなわち、画像のアンカーポイントを右上に設定しています。
次に背景画像の右上の座標を調べる必要があるのですが、
getContentSize()でspriteのサイズがわかりますが、
これはsetScale()で拡大する前の値になっていました。
なので、getContentSize()の値に拡大率を計算式に入れることで、見事に位置が合いました。
あとは、ちょうど良い感じで画像の大きさを調整。
もう少し大きくしても良いかな?
用意したアイコンを全部配置して、バランスを取ってみたいと思います。
北海道の食の中には必ず挙げられるジンギスカンなんですが。
そのジンギスカンにもいろいろ種類がありまして。
まず、大きな分類としては、生ラム と 味付けラム の二つです。
生ラムというのは、羊の肉をそのまま焼いて、タレにつけて食べるというものですが、
このタレにもいろいろ派閥がありまして、
お肉自体にもこだわりがあって、臭みが少ないラム肉もありますが(観光客にはこちらオススメ)、丸めて冷凍してカットした、昔ながらのラムロール肉もあります。(こちらの方が好きな方もいます。)
このラム肉の発祥の地と言われているのが、札幌月寒にあるツキサップジンギスカンと言われています。
こちらは一般的な焼肉に近いイメージですね。
味付けラムの方は、ラム肉を特製ダレに漬け込んで、専用のジンギスカン鍋で焼いて食べるものです。
こちらはすでにお肉に味付けされているので、つけダレはありません。
お肉を焼くと、肉汁が出るので、それを縁の溝に集めて、そこで野菜を煮詰めて食べるのが一般的です。
ここにうどんを入れると最高です。
有名なところで言うと、滝川市にある松尾ジンギスカンですが、
道内では各社がいろんな味付けでスーパーで販売しているので、各家庭で好みがあったりします。
ちなみに、うちの家庭は、長沼ジンギスカンでした。(松尾は高い)
これを書いていたら、ジンギスカン食いたくなりました。
今度食べます。
これの続き。
仮想PCにUbuntu20.04をセットアップしたものの、
今の状態ではホストPCからでしか仮想PCに接続できないので、
これをホストPCの外からでも接続できるようにします。
仮想PCのネットワーク設定はデフォルトこうなっています。

内部ネットワークが選択されているから、外からアクセス出来ないんでしょう。
なので、新しい仮想ネットワークスイッチを追加。

接続の種類を外部ネットワークにして、物理ネットワークデバイスを設定。
これを仮想PCのネットワークに設定します。

これで仮想PCを起動。
ルータのDHCPでIPアドレスが割り当てられていれば成功。
あとは、MACアドレスを静的な値に設定、ルータのDHCP設定で固定IPアドレスを登録すればOKでしょう。

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

無線ルータ・ひかり電話内蔵のモデルなんですが、
今までは業者が全部セットアップしてくれたおかげで、設定をいじくることができませんでした。
しかし、ビッグローブにプロバイダを乗り換えたことで、設定が初期化・再設定を行ったことにより、設定をいじくることができるようになったのです。

マインクラフトサーバはメインPC内の仮想PCで動作させたいと思います。
今持っているラズパイ4では、メモリは十分でもCPUパワーが足りない。
そして、外部からマイクラサーバに接続するには、ルータの設定で仮想PCに接続できるよう設定を変える必要があるのですが。
通常のルータはポートフォワーディングといって、特定ポート番号でのアクセスのみを内部PCに転送する機能があるのですが、
このモデム一体型ルータはポート番号に関係なく、外からのアクセスを内部PCに転送する設定にしかできないみたいです。
ということは、その設定を有効にした場合、転送先のPCは常に外からのアクセスに晒されるので、ファイヤーウォールの設定は必須になりますな。
さて、実際に仮想PCを立ち上げようか。