画像ファイルが縦長か横長かを判断するpy

ディレクトリパスが固定で、標準出力に bat ファイル用のスクリプトを書き出す python スクリプト

import os

#--------------------
# $ pip install Pillow
#--------------------
from PIL import Image

#--------------------
# constant
#--------------------
PATH = 'C:/path/to/dir'

#--------------------
# output bat script to stdout
#--------------------
def judge_portrait(path='.'):

    print('@echo off')
    print('mkdir portrait')

    with os.scandir(path) as it:
        for entry in it:
            if entry.is_file():
                
                try:
                    img = Image.open(PATH + '/' + entry.name)
                    if img.height > img.width:
                        # portrait
                        print('move ' + entry.name + ' portrait/')
                except:
                    pass

#--------------------
# main
#--------------------
judge_portrait(PATH)

出力を任意の bat ファイルに書き出すようにリダイレクトして、
その bat ファイルを指定したディレクトリにコピーしてから
コマンドプロンプトで実行する、みたいな使い方

コマンドラインオプションでディレクトリを指定できるようにしたり、
移動先ディレクトリの作成やファイル移動自体をpythonスクリプト内に実装してしまう、
みたいな発展が考えられそう

自VPSにdocker環境を作るメモ

インストール

公式に従って CentOS 9 Stream の自VPSへインストール

docs.docker.com

  • Set up the repository
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • Install Docker Engine, containerd, and Docker Compose
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

dockerグループが自動で作られる。dockerグループに所属するユーザーはまだいない。

  • Start Docker
sudo systemctl start docker
  • Verify that the Docker Engine installation is successful by running the hello-world image.
sudo docker run hello-world

こんな出力がなされればOK

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

docs.docker.com

Manage Docker as a non-root user

  • Create the docker group

dockerグループがすでにあるかを確認

cat /etc/group | grep docker

さきの手順でdockerグループが作られていれば、以下のような1行が出力されるはず。987 の部分は環境によって異なる

docker:x:987:

出力されなければ、手動でdockerグループを作る

sudo groupadd docker
  • Add your user to the docker group
sudo usermod -aG docker lmtak

ここではdockerグループにユーザーlmtakを追加した

  • Log out and log back in so that your group membership is re-evaluated

ログアウト→ログインするか、su で自ユーザーにログインしてもよい

su - lmtak
  • Verify that you can run docker commands without sudo

sudoなしでdockerコマンドが実行できればOK

docker run hello-world

さきと同じ出力がなされるはず

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

  • Configure Docker to start on boot with systemd

OS起動時に、docker.service と containerd.service がサービス自動起動させる

 sudo systemctl enable docker.service
 sudo systemctl enable containerd.service

イメージ

ls -laF /var/lib/docker

total 52
drwx--x--- 12 root root 4096 Feb 27 09:27 ./
drwxr-xr-x. 29 root root 4096 Aug 30 07:43 ../
drwx--x--x 4 root root 4096 Aug 30 07:43 buildkit/
drwx--x--- 5 root root 4096 Feb 27 09:31 containers/

  • rw------- 1 root root 36 Aug 30 07:43 engine-id

drwx------ 3 root root 4096 Aug 30 07:43 image/
drwxr-x--- 3 root root 4096 Aug 30 07:43 network/
drwx--x--- 10 root root 4096 Feb 27 09:31 overlay2/
drwx------ 4 root root 4096 Aug 30 07:43 plugins/
drwx------ 2 root root 4096 Feb 27 09:27 runtimes/
drwx------ 2 root root 4096 Aug 30 07:43 swarm/
drwx------ 2 root root 4096 Feb 27 09:27 tmp/
drwx-----x 2 root root 4096 Feb 27 09:27 volumes/

containers の中身

ls -laF /var/lib/docker/containers

total 20
drwx--x--- 5 root root 4096 Feb 27 09:31 ./
drwx--x--- 12 root root 4096 Feb 27 09:27 ../
drwx--x--- 4 root root 4096 Feb 27 09:31 44a7142a6f691dd8904d9b5e85f55d7d5b6bf118aca6fef7c5b66988c6d44242/
drwx--x--- 4 root root 4096 Feb 27 09:28 45518d82aeabfa2e6e14bd0233e0969316366c06b380a6a0344fcb9da2de9c25/
drwx--x--- 4 root root 4096 Feb 27 09:27 7ab49285e28f943ccf4316b8dec38b2e5245d1ab8d68971871d50ed781d83d01/

ハッシュだと分かりにくいがしかたない

ls -laF /var/lib/docker/containers/44a71...

total 44
drwx--x--- 4 root root 4096 Feb 27 09:31 ./
drwx--x--- 5 root root 4096 Feb 27 09:31 ../

  • rw-r----- 1 root root 2348 Feb 27 09:31 44a7142a6f691dd8904d9b5e85f55d7d5b6bf118aca6fef7c5b66988c6d44242-json.log

drwx------ 2 root root 4096 Feb 27 09:31 checkpoints/

  • rw------- 1 root root 2506 Feb 27 09:31 config.v2.json
  • rw------- 1 root root 1462 Feb 27 09:31 hostconfig.json
  • rw-r--r-- 1 root root 13 Feb 27 09:31 hostname
  • rw-r--r-- 1 root root 174 Feb 27 09:31 hosts

drwx--x--- 2 root root 4096 Feb 27 09:31 mounts/

  • rw-r--r-- 1 root root 99 Feb 27 09:31 resolv.conf
  • rw-r--r-- 1 root root 71 Feb 27 09:31 resolv.conf.hash
cat /var/lib/docker/containers/44a71.../44a71....json.log

{"log":"\n","stream":"stdout","time":"2024-02-27T00:31:50.423961874Z"}
{"log":"Hello from Docker!\n","stream":"stdout","time":"2024-02-27T00:31:50.424012277Z"}
{"log":"This message shows that your installation appears to be working correctly.\n","stream":"stdout","time":"2024-02-27T00:31:50.424015811Z"}
{"log":"\n","stream":"stdout","time":"2024-02-27T00:31:50.424018274Z"}
{"log":"To generate this message, Docker took the following steps:\n","stream":"stdout","time":"2024-02-27T00:31:50.424020338Z"}
{"log":" 1. The Docker client contacted the Docker daemon.\n","stream":"stdout","time":"2024-02-27T00:31:50.424022476Z"}
{"log":" 2. The Docker daemon pulled the \"hello-world\" image from the Docker Hub.\n","stream":"stdout","time":"2024-02-27T00:31:50.424025148Z"}
{"log":" (amd64)\n","stream":"stdout","time":"2024-02-27T00:31:50.424027409Z"}
{"log":" 3. The Docker daemon created a new container from that image which runs the\n","stream":"stdout","time":"2024-02-27T00:31:50.424029426Z"}
{"log":" executable that produces the output you are currently reading.\n","stream":"stdout","time":"2024-02-27T00:31:50.424031541Z"}
{"log":" 4. The Docker daemon streamed that output to the Docker client, which sent it\n","stream":"stdout","time":"2024-02-27T00:31:50.424033591Z"}
{"log":" to your terminal.\n","stream":"stdout","time":"2024-02-27T00:31:50.424035697Z"}
{"log":"\n","stream":"stdout","time":"2024-02-27T00:31:50.424037695Z"}
{"log":"To try something more ambitious, you can run an Ubuntu container with:\n","stream":"stdout","time":"2024-02-27T00:31:50.424039628Z"}
{"log":" $ docker run -it ubuntu bash\n","stream":"stdout","time":"2024-02-27T00:31:50.424041831Z"}
{"log":"\n","stream":"stdout","time":"2024-02-27T00:31:50.424043876Z"}
{"log":"Share images, automate workflows, and more with a free Docker ID:\n","stream":"stdout","time":"2024-02-27T00:31:50.42404584Z"}
{"log":" https://hub.docker.com/\n","stream":"stdout","time":"2024-02-27T00:31:50.424048005Z"}
{"log":"\n","stream":"stdout","time":"2024-02-27T00:31:50.424050021Z"}
{"log":"For more examples and ideas, visit:\n","stream":"stdout","time":"2024-02-27T00:31:50.424051941Z"}
{"log":" https://docs.docker.com/get-started/\n","stream":"stdout","time":"2024-02-27T00:31:50.424054006Z"}
{"log":"\n","stream":"stdout","time":"2024-02-27T00:31:50.424056099Z"}

hello-worldイメージを実行したときの画面出力と同じものだ。1行1JSONオブジェクトのログとして保存されている

beatorajaでINFINITASコントローラを2台(DP)認識させる

左手強化のために自作BMSを作って動作する環境を作る一環として、まずコントローラ認識にハマったので

ポイント

  • メイン画面の 6 キー(キーアサイン)で、<-- 14 KEYS --> を選んだら
  • いったん beatoraja を再起動して、configuration の Input タブで 14 KEYS に選択されたゲームコントローラの名前が表示されていることを確認してから
    • 改めてメイン画面の 6 キー(キーアサイン)でボタンをアサインしていく

発端

ほかにも困っているひとを見かけた

ネットに先達を求めて

mirais-station.hatenablog.com

専用コントローラーが動かねぇ!!
設定をちゃんとしてあげましょう。

この問題、特にPHOENIXWANやINFINITASコントローラーで起きがちです。

これらのコントローラーを使用する*7場合、設定→Inputタブから、使いたいコントローラーの「アナログスクラッチ」の項目をオンにしましょう。

直接の回答ではないが有用な情報な気がする。

当PC環境

コントロール パネル > ハードウェアとサウンド > デバイスとプリンターから見ると「beatmania IIDX controller Entry Model」のアイコンが 2 つある

レジストリに登録されているEntry Modelのゲームコントローラ名を変える

見やすさのために regedit を使う(レジストリの変更に慣れてない場合はスキップしてよい

変更の手順は下記サイトを参考にした(再掲)

mirais-station.hatenablog.com

どちらかの「beatmania IIDX controller Entry Model」を右クリックして「プロパティ(R)」

「ハードウェア」タブの「HID 準拠ゲーム コントローラー」をクリックしてから「プロパティ(R)」

「詳細」タブの「プロパティ(P)」に "ハードウェア ID" を選択すると、値(V) が表示される

ここで、"HID¥VID_xxxx&PID_yyyy" のような値をメモしておく

レジストリエディタを起動して、以下のツリーを辿る

  • コンピューター
    • HKEY_CURRENT_USER
      • System
        • CurrentControlSet
          • Control
            • MediaProperties
              • PrivateProperties
                • Joystick
                  • OEM
                    • HID¥VID_xxxx&PID_yyyy (先ほどメモした値)

この画像はOEMNameの値が変更された後のものだが、当初は「2 軸 16 ボタン ジョイスティック」という値が設定されている。ここに ASCII 文字以外が含まれていると、beatoraja の configuration ウィンドウやゲーム内でのコントローラ文字列が「文字化け」するようだ。

名前「OEMName」部分をダブルクリックすると、

値のデータを変更できるので、よさげに変更して「OK」ボタンをクリック

beatoraja v0.8.6 展開直後のファイル

C:\Games\beatoraja 配下に展開した状態。このフォルダに beatoraja.exe がある

下記サイトに従って、GENOSIDE -BMS StarterPackage- を用意する

www.ukitouchtypist.org

nekokan.dyndns.info

beatoraja.exe 初回起動時の configuration

「リソース」タブ

「+」ボタンをクリックして、GENOSIDE-BMS_StarterPackage- を展開したフォルダーをクリックして「フォルダーの選択」ボタンをクリック

BMS Path にフォルダが追加されていることを確認

下の「楽曲読み込み」ボタンを念のためクリック

「Input」タブ

MODE「7KEYS」を選択して、「アナログスクラッチ」をチェックする
この時点では「アナログスクラッチ」のチェックボックス左にゲームコントローラ名が表示されていない

MODE「14KEYS」を選択して、「アナログスクラッチ」をチェックする

スクロールバーをクリックして、2P の「アナログスクラッチ」もチェックする


左下の「起動」ボタンをクリック

「GENOSIDE-BMS_StarterPackage-」フォルダが表示されていることを確認

キーアサイン画面に移動

MUSIC SELECT 画面でキーボードの 6 キーを押す

キーボードの矢印キー左右「←」「→」を押して、" <-- 7 KEYS --> " を表示する
キーボードの 2 キーを何度か押して、Entry Model ゲームコントローラ名を表示させる

キーボードの矢印キー左右「←」「→」を押して、" <-- 14 KEYS --> " を表示する

キーボードの 1 キーを何度か押して、"2dx dp" を表示させる
キーボードの 2 キーを何度か押して、Entry Model ゲームコントローラ名を表示させる
キーボードの 3 キーを何度か押して、Entry Model ゲームコントローラ名を表示させる
ここで、「Controller Device 1」と「Controller Device 2」は異なるゲームコントローラ名になっていることを確認する


ESC キーを押して beatoraja を終了して、もう一度 beatoraja を起動する

Input タブ

MODE「7KEYS」「14KEYS」ともに「アナログスクラッチ」のチェックボックス左にゲームコントローラ名が表示されている

「起動」ボタンをクリック

いよいよキーアサイ

MUSIC SELECT画面でキーボードの 6 キーを押す

7 KEYS

カーソル「←」「→」で " <-- 7 KEYS --> " を選ぶ


  • カーソル「↑」「↓」で KEY を選択(青背景)
  • Enter を押すと青背景が赤背景になる
  • アサインしたいEntry Modelのボタンを押す(BUTTON 1などと表示され、赤背景が青背景に戻る)

これをすべての KEY に対して繰り返す

14 KEYS

カーソル「←」「→」で " <-- 14 KEYS --> " を選ぶ


  • カーソル「↑」「↓」で KEY を選択(青背景)
  • Enter を押すと青背景が赤背景になる
  • アサインしたいEntry Modelのボタンを押す(BUTTON 1などと表示され、赤背景が青背景に戻る)

設定が終わったらテストプレイしましょう

それでは良い beatoraja ライフを!

IIDX DP中伝 先輩たちのWeb記録

毎回検索しなくてもいいようにリンク集を作ります。