電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

M5StickC Plus で時計制作

眠ってたM5StickC Plusを有効活用できないかと思い、時計を作ってみました。

プログラムもそんなに大きくならなかったので、全文掲載します。

#include <WiFi.h>
#include <M5StickCPlus.h>
#include <time.h>

const char* ssid       = "(Wi-fiアクセスポイントのSSID)";  
const char* password   = "(Wi-fiアクセスポイントのパスワード)";

const char *wd[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

// NTPサーバのURL
const char* ntpServer =  "ntp.jst.mfeed.ad.jp";
//  GMT+9(日本時間)
const long  gmtOffset_sec = 9 * 3600;
// サマータイム時差(無し)
const int   daylightOffset_sec = 0;


void setup() {
  M5.begin();
  
  M5.Lcd.fillScreen(TFT_BLACK);
  M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
  M5.Lcd.setRotation(1);

  adjust();

}

void loop() {
  struct tm t;
  if (getLocalTime(&t)) {
    M5.Lcd.setTextSize(5);
    M5.Lcd.setCursor(20, 25);
    M5.Lcd.printf("%02d:%02d", t.tm_hour, t.tm_min);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(175, 38);
    M5.Lcd.printf(":%02d", t.tm_sec);
    M5.Lcd.setTextSize(3);
    M5.Lcd.setCursor(10, 90);
    M5.Lcd.printf("%04d/%02d/%02d", (1900 + t.tm_year), (t.tm_mon + 1), t.tm_mday);
    M5.Lcd.setTextSize(2);
    M5.Lcd.setCursor(197, 97);
    M5.Lcd.printf("%s", wd[t.tm_wday]);

    if (t.tm_hour == 4 && t.tm_min == 0 && t.tm_sec == 0) {
      adjust();
    }
  }
  
  delay(100);

}

void adjust() {
  WiFi.begin(ssid, password);

  // 500ms*120回なので、1分でタイムアウト
  for (int i = 0; i < 120 && WiFi.status() != WL_CONNECTED; i++) {
    delay(500);
  }
  if (WiFi.status() != WL_CONNECTED) {
    // Wifi接続エラー
  }

  if (WiFi.status() == WL_CONNECTED) {
    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
    struct tm t;
    if (!getLocalTime(&t)) {
      // NTPサーバ接続エラー
    }
  }
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}

M5StickC Plus

M5StickC Plus

  • スイッチサイエンス
Amazon

Macのこと

まだ学生の頃はPC-9801BXでMS-DOS→Windows3.1→Windows95を使用してました。
Windos95も無理をしながら使用してたものの、i486ではいい加減重いのでPentiumのDOS/Vに乗り換えました。
いくら安かったとは言えメーカー物はまだ学生には高かったので、自作をしました。この時から最近までデスクトップはパーツを交換しながらずっと自作してました。

自作PCをやめてミニPC Minisforum HM90 にしました - 電子趣味の部屋


学校の友人がMacを使用してWebや音楽制作をしてるのを見て画面がさわやかでなんか使ってて面白そうだと思い自分も欲しいと思ってましたが、まだその頃のMacはWindows機と比較しても高くてなかなか手が出ない存在でした。

一番初めにMacを買ったのは故スティーブ・ジョブズがAppleに戻ってきて発売した Power Macintosh G3 (B&W)でした。
この頃はただの憧れで買ったのですが結局使い慣れたWindowsの方ばかり使ってしまい、ただのおもちゃでした。
MacOSでVBのようなプログラミングができるREALbasicを購入していつものパズルゲーム等を作ったりもしてました。
結局2年ほどで後継機も買うことなく手放してしまいました。

久しぶりにMacを買ったのは Mac Mini が発売された時でした。
当時余ったパーツで作ったLinux機を作っていたのですが、OSXはBSD系ということもあり置き換えができるのとデザインが良く場所を取らないので飛びついてしまいました。
日本語のソフトも結構出てきた時なので普通のPCとしてもそこそこ使用してました。
1年ほど経過したときにCPUがIntelに変更になってしまいました。
当初は急激な移行はあるわけが無いと思っているとどんどんソフトがIntelにネイティブに対応していき、OSもIntelでないと使えない機能等も出てきました。
2年もするとIntelのみ対応のソフトも増えてPowerPC Macでは使いにくくなり、またMacから離れてしまいました。

その後はiPhoneOS2の頃にiPhoneSDKが公開された時にMacbookProを購入し、それ以来Macも持ち続けています。
今ではMacもWindowsと同じくらい使いこなせるようになってますが、長年の習慣からか色々な作業をする場合のメイン機種はWindowsになってます。
MacbookAirのサイズ感や手軽さからリビング等でWebやメール等の普段使いはMacを使うことが多いです。

認定整備済製品で MacBook Air (M1) を買いました - 電子趣味の部屋

結局 PS5 も買いました PlayStation 5

以前PS5は小型化されるまで買わないと書きましたが、ヨドバシに行った際に在庫があるのを見かけて、つい買ってしまいました。

今まで所有してたPS4は初代モデルなので、以前使用していたRyzen 7 3700X+GeForce GTR2060のデスクトップPC並みにファンがうるさくいつも気になっていました。スリムなモデルが登場し消費電力も下がりファンも静かになったところで何回も買い替えようと思ってましたが、結局いままで初代で粘っていました。

PS4はテーブルの上に8cmの高さのテレビ台を置いてその隙間に置いていたのですが、これを12cmの高さの台に変えてそこにPS5を横置きで置けたので、スペース問題もクリアしました。テレビの位置も4cm上になりましたが、逆に見やすくなりました。

今のところPS5専用で遊びたいゲームはなく、PS4で遊んでたグランツーリスモ7がPS5になって光がよりリアルになって良かった以外は特にPS4と変わらない使い方をしてます。
OSのレスポンスも良く、ディスクアクセスも早くなったので、操作性は快適になりました。ファンも静かになりました。
PS4ではHDDのまま使っていたため、PS5のゲームでなくても起動やローディングも早くなり快適になりました。
今までのような新しいゲーム機を買った感覚は特に無く、新しいPCに買い替えた感覚に近いです。
XBOXの方が本当に新しいゲーム機を買った感覚でした。

XBOX SERIES Xと比較すると、同じゲームの場合はほぼ同じ感覚です。細かく検証するとどちらの方がフレームレートが高いとかどちらの方がより詳細に描写されるとかあると思いましが、正直優劣がわかるほどの差はありません。
最近では大型タイトルは大抵両機種で発売されるので、ストアを見てもそんなに差はありませんが、あえて言うとPS5は大型タイトル+国内向けのゲーム、XBOXは大型タイトル+PCにもあるような洋ゲーといったところですかね。
個人的にはGPUを追いかけるのをやめてゲームはゲーム機でやろうと思ったのでPS5を買った後でもXBOXの方で遊ぶことが多いですが、ダウンロードで買ったゲームやレトロゲームも好きなのでアーケードアーカイブも結構あり、PS5も結局は必要になったという感じです。

改めて目的を見てもただの買い替えであり、やはり小型するまで待ってても良かったと少し後悔してます。

【PS5】グランツーリスモ7

【PS5】グランツーリスモ7

  • ソニー・インタラクティブエンタテインメント
Amazon

MakeCode Arcade で遊んでみました

Microsoft MakeCode Arcade で簡単なゲームを作ってみました。

Space Attack
Catch Apple

Microsoft MakeCode Arcadeはゲームを作成できる開発環境です。
初めから基本的な機能や素材が用意されているので、簡単にゲームを作ることができます。
プログラム方法はブロック、JavaScript、Pythonでできるのですが、今回はブロックで作ってみました。

実行はWeb上でもできるのですが、対応ハードで実行することができます。
今回はELECFREAKS Retro Arcade for Educationを購入しました。
すぐに欲しかったのと、メーカーの通販サイトで送料を含めるのとそんなに変わらない金額だったので、共立エレショップで購入しました。

USBを接続してからクリックで転送できるお手軽仕様です。
また、USBドライブとして見えているので、ここにダウンロードしたuf2ファイルをコピーしても転送することができます。

対応機種はこれの他にも色々あり、Amazonからも購入できるのもがあります。

UbuntuでNAS環境構築

現在Beelink U59でNASを構築してして運用していますが、このときに行ったセットアップ内容をまとめておきたいと思います。

自分へのメモも兼ねて一通り書いたので、長文になります。

ディスク構成

デバイス 種類 用途
/dev/sda 2.5インチHDD 2TB NAS領域のデータ用
/dev/sdb M.2 SATA SSD 128GB OS含むシステム用

Beelink U59の2.5インチスロットは厚さ7mmまで対応してます。9.5mmのものは入りませんので注意してください

導入

Ubuntuのインストールとディスク構築方法はここでは省略します。
また、Ubuntu以外でもDebian系のディストリビューションなら同じ手順で構築できると思います。

OSインストール後初期ディスク構成

Ubuntuインストール時に"ディスクを削除してUbuntuをインストール"を選択したので、/dev/sdbは自動で設定されました。
/dev/sdaはディスク全体をNAS用としてExt4でフォーマットして、/nasディレクトリを作りそこにマウントしてます。
フォーマットとマウント定義はUbuntu標準の"ディスク"アプリで行いました。

デバイス マウントポイント フォーマット サイズ
/dev/sdb1 /boot/efi FAT32 537MB
/dev/sdb2 / Ext4 128GB
/dev/sda1 /nas Ext4 2TB

/nasディレクトリはrootで作成

sudo mkdir /nas

Samba

インストール

sudo apt install samba

サービス開始、自動起動設定

sudo systemctl start smbd
sudo systemctl enable smbd

アクセスユーザ設定

SambaにアクセスしたいユーザがUNIXユーザにいない場合は作成。
ここでは仮にユーザ名をuser1とする。

sudo adduser user1

Sambaパスワード設定

sudo pdbedit -a user1

Sambaのパスワードは独自に管理しているため、すでに存在するUNIXユーザでもパスワード設定が必要。

共有フォルダ用のディレクトリ作成。

ゲスト等だれてもアクセスできる共有フォルダ

ディレクトリの所有者をroot、権限を777とする。
ここでは仮に共有フォルダ名をshareとする。

sudo mkdir /nas/share
sudo chmod 777 /nas/share
特定のユーザがアクセスできる共有フォルダ

ディレクトリの所有者をアクセスユーザ、権限を700とする。
ここでは仮にアクセスユーザをuser1、共有フォルダ名をprivate_user1とする。

sudo mkdir /nas/private_user1
sudo chown user1 /nas/private_user1
sudo chmod 777 /nas/private_user1

ワークグループ設定

Sambaの設定でワークグループはWORKGROUP
これを変更する場合は設定ファイル /etc/samba/smb.conf の以下の行を変更する

workgroup = WORKGROUP

共有フォルダ設定

/etc/samba/smb.conf に共有フォルダ毎の設定を追加する
詳細な説明は省略するが、基本的に[]内に共有フォルダ名、pathにサーバ内のディレクトリを設定する

ゲスト等だれてもアクセスできる共有フォルダ

ここでは仮に共有フォルダ名をshareとする。

/etc/samba/smb.conf の最後に追加。

[share]
comment = share folder
path = /nas/share
writable = yes
guest ok = yes
guest only = yes

guest only = yes を設定することによって、すべてのアクセスがnobody:nogroupになり、ファイルを作成した他のユーザが更新や削除ができないといったことがなくなる。

特定のユーザのみアクセスできる共有フォルダ

ここでは仮に共有フォルダ名をprivate_user1、アクセス可能なユーザをuser1とする。

/etc/samba/smb.conf の最後に追加。

[private_user1]
comment = only user1
path = /nas/private_user1
writable = yes
valid users = user1
設定後Samba再起動
sudo systemctl restart smbd

転送速度チューニング

デフォルト状態では転送速度が遅いので少しチューニングしてみた。
ここの設定は環境によるので各項目の説明は省略して参考程度に書いておく。

以下の設定を /etc/samba/smb.conf の[global]セクションに追加

[global]

unix charset = UTF-8
dos charset = CP932

client min protocol = SMB2

log level = 1

socket options = TCP_NODELAY

wsdd

Windows10でデフォルトでSMB1.0のプロトコルが無効化され、Web Service Discoveryを使用するようになり、このままではWindowsのネットワーク共有に表示されなくなった。
これを解決するために Web Service Discovery host daemon (wsdd) を導入する。

/etc/apt/sources.list.d/wsdd.list作成
↓内容

deb https://pkg.ltec.ch/public/ bullseye main

pgpキーを登録してインストール

sudo apt-key adv --fetch-keys https://pkg.ltec.ch/public/conf/ltec-ag.gpg.key
sudo apt update
sudo apt install wsdd

サービススタート、自動起動

sudo systemctl start wsdd
sudo systemctl enable wsdd

NAS基本機能構築完了

ここまででNASとしての基本機能は完了。
以降の項目は個人的にやりたいことをやったので、付加機能として書いておく。

bcache導入

システム部分は128GBのSSDを使用しているが、この段階で10GBほどしか使用していない。
今後多少のサーバ機能を追加してもそんなに急激に増えるとは考えられない。
これでは非常にもったいないので、半分の64GBをHDDのキャッシュとしてSSHD的な動作を行えるbcacheを導入することにした。

まずはインストールメディアとして使用したUSBメモリからライブブートし、"ディスク"アプリを使用して/dev/sda1を64GBに縮小し、新たに64GBのExt4でフォーマットした領域を確保した。

このディスク構成からの設定を行う。

デバイス マウントポイント フォーマット サイズ
/dev/sdb1 /boot/efi FAT32 537MB
/dev/sdb2 / Ext4 64GB
/dev/sdb3 未割当て Ext4 64GB
/dev/sda1 /nas Ext4 2TB

この構成で /dev/sda1 をバックディスク、/dev/sdb3 をキャッシュディスクとして扱う

インストール

sudo apt install bcache-tools

ファイルシステムのメタデータをクリア

sudo wipefs -a /dev/sda1
sudo wipefs -a /dev/sdb3

bcache作成

sudo make-bcache -B /dev/sda1 -C /dev/sdb3

正常に作成できた場合はデバイスファイル /dev/bcache0 が作られている。(0の部分は連番)

マウント定義

まず/dev/bcache0のuuidを取得

blkid /dev/bcache0

/etc/fstabを編集
元々/nasのマウント定義のデバイス部分が "/dev/disk/by-uuid/(UUID)"の形式だったのでこのUUIDを書き換えるだけにして他のパラメータはそのまま使うことにした

仮に/dev/bcache0のUUIDを14bb71b8-a012-47fb-8290-XXXXとする

/dev/disk/by-uuid/14bb71b8-a012-47fb-8290-XXXX /nas auto nosuid,nodev,nofail,x-gvfs-show 0 0

/nasをアンマウント、マウントするのも良いが、一旦再起動

sudo reboot

再起動したらマウント確認

mount | grep nas

/dev/bcache0 on /nas type ext4 (rw,nosuid,nodev,relatime,x-gvfs-show)

キャッシュモード

cat /sys/block/bcache0/bcache/cache_mode

現在は[writethrough]となっていた。
電源切断時のデータ損失が怖いので、そのままとする。(writethroughはファイル更新時に遅延なしにHDDも更新される)

評価

まだキャッシュにあるデータが少ないせいか、そんなに変わらないが多少早くなった気がする。
PC無線LAN-NAS有線LANの環境で試したので、ディスクアクセス速度より転送速度のほうがネックになってそう。
小さいファイルの連続アクセスは快適になった気がする。

バックアップ

外付けHDDにNAS領域をバックアップすることにした。
HDDはWindowsでも読めるように、Windows上でNTFSでフォーマットしたものを使用。

マウント

/media/backupにマウントするように定義

マウントポイント作成
sudo mkdir /media/backup
uuidを取得

USBディスクを接続して"ディスク"アプリで確認したところ/dev/sdd1と判明したので、これのUUIDを取得

blkid /dev/sdd1

接続する際にデバイス名が変わる可能性があるので、UUIDでマウント定義をする

/etc/fstabに追加
仮に/dev/sdd1のUUIDをB6149A52149AXXXXとする

UUID=B6149A52149AXXXX /media/backup/ ntfs auto,nosuid,nofail,user_id=0,group_id=0,default_permissions,allow_other 0 0

USBを接続して起動すると認識されるが、起動中に接続してマウントされない場合はマウントコマンドを実行

sudo mount /media/backup

バックアップスクリプト

Sambaでシェルを編集できるように定義

管理系のファイルを置くディレクトリを作成

sudo mkdir /nas/admin_tools
sudo chmod 777 /nas/admin_tools

とりあえず誰でもアクセスできる共有フォルダとする
/etc/samba/smb.conf の最後に追加。

[admin_tools]
comment = admin tools
path = /nas/admin_tools
writable = yes
guest ok = yes
guest only = yes
設定後Samba再起動
sudo systemctl restart smbd
バックアップスクリプト作成

今回作成したPythonのスクリプトを書いておきます。
ソースの始めの方にあるfoldersの配列定義部分にバックアップ対象の/nas以下のディレクトリ名を書いてください。

folders = [
	"share",
	"private_user1",
]


この部分


バックアップスクリプトのソースファイル
ファイル名は"/nas/admin_tools/daily_backup.py"で保存してください。

import datetime
import subprocess
import os

# バックアップする対象
folders = [
	"share",
	"private_user1",
]

# logsフォルダを除外するバックアップする対象
exclude_log_folders = [
	"admin_tools",
]

dt = datetime.datetime.now()
d = dt.strftime('%Y%m%d_%H%M%S')

backup_tool_dir = "/nas/admin_tools"
nas_dir = "/nas"
dist_dir = "/media/backup/nas"
backup_delete_dir = "/media/backup/backupfiles/backup_" + d
log_dir = backup_tool_dir + "/logs/" + d[:6] + "/" + d[:8]

os.makedirs(log_dir, exist_ok=True)

# mountチェック
check = subprocess.run("mount | grep backup", shell=True, capture_output=True, text=True)
if "media" not in check.stdout:
	log_file = log_dir + "/" + d + "_error.log"
	command = "echo \"disk mount error\" > " + log_file
	subprocess.run(command, shell=True)
	exit()

# 続行

# folders
for f in folders:
	target_dir = nas_dir + "/" + f
	log_file = log_dir + "/" + d + "_" + f + ".log"
	command = "rsync -avh --delete --exclude=\"*.DS_Store\" --exclude=\"._*\" --backup --backup-dir=\"" + backup_delete_dir + "\" --log-file=\"" + log_file + "\" " + target_dir + " " + dist_dir
	subprocess.run(command, shell=True)

# exclude_log_folders
for f in exclude_log_folders:
	target_dir = nas_dir + "/" + f
	log_file = log_dir + "/" + d + "_" + f + ".log"
	command = "rsync -avh --delete --exclude=\"*.DS_Store\" --exclude=\"._*\" --exclude=\"logs\" --backup --backup-dir=\"" + backup_delete_dir + "\" --log-file=\"" + log_file + "\" " + target_dir + " " + dist_dir
	subprocess.run(command, shell=True)

command = "chmod -R a+rw " + backup_tool_dir + "/logs/" + d[:6]
subprocess.run(command, shell=True)

更新や削除されたファイルは/media/backup/backupfiles以下の日時別ディレクトリに保存される。
この処理が不要な場合は、rsyncコマンドを定義している箇所(command = "rsync〜の部分)から"--backup"を削除する。

ubuntu上で作成した場合は権限変更をする

chmod 777 /nas/admin_tools/daily_backup.py

cron登録

バックアップスクリプトの実行をcronに登録する。
毎日4時に実行するように登録した場合を書く。
cronはrootで実行するようにする。

sudo crontab -e

↓追加する内容

# backup daily
0 4 * * * /usr/bin/python3 /nas/admin_tools/daily_backup.py

ログファイル

バックアップスクリプトが実行されるとログが/nas/admin_tools/logs/(日時)に保存される。

Netatalkサーバ

MacのTimeMachineのバックアップ先として使用できるようにnetatalkを導入
最大500GBを使用できるように設定

インストール

sudo apt install netatalk

メディアファイルを置くディレクトリ

/nas/timecapsuleに置くとする

sudo mkdir /nas/timecapsule
sudo chmod 777 /nas/timecapsule

設定ファイル編集

/etc/netatalk/afp.conf を編集
割と短いので全文載せます

;
; Netatalk 3.x configuration file
;

[Global]
; Global server settings
 mimic model = TimeCapsule6,106
 mac charset = MAC_JAPANESE

; [Homes]
; basedir regex = /xxxx

; [My AFP Volume]
; path = /path/to/volume

[nas timecapsule]
 path = /media/timecapsule
 time machine = yes
 vol size limit= 500000
 valid users = user1
 unix priv = yes

サービス開始、自動起動設定

sudo systemctl start netatalk
sudo systemctl enable netatalk

DLNAサーバ

NAS製品によくあるDLNAサーバの機能も欲しので、手軽なminidlnaを導入

インストール

sudo apt install minidlna

サービス開始、自動起動設定

sudo systemctl start minidlna
sudo systemctl enable minidlna

メディアファイルを置くディレクトリ

/nas/dlnaに置くとする
今回は動画、画像、音楽ファイルの置く場所を区別しない

sudo mkdir /nas/dlna
sudo chmod 777 /nas/dlna

とりあえず誰てもアクセスできる共有フォルダとする
/etc/samba/smb.conf の最後に追加。

[admin_tool]
comment = dlna
path = /nas/dlna
writable = yes
guest ok = yes
guest only = yes

設定後Samba再起動

sudo systemctl restart smbd

DLNA設定

/etc/minidlna.conf を編集する

media_dirを変更

media_dir=/nas/dlna

リストの自動更新を有効

inotify=yes

(コメントの#を削除するだけ)

自動更新時間を1分毎に変更

notify_interval=60

(コメントの#を削除して値を変更)

設定後minidlna再起動

sudo systemctl restart minidlna

WEBサーバ

ちょっとしたメモをウェブ上におけると便利だと思い、WEBサーバを導入
始めは慣れているApacheと思ったが、少しでも軽量にしたくてnginxを使うことにした

インストール

sudo apt install nginx

サービス開始、自動起動設定

sudo systemctl start nginx
sudo systemctl enable nginx

ファイルを置くディレクトリ

/nas/wwwに置くとする

sudo mkdir /nas/www
sudo chmod 777 /nas/www

とりあえず誰てもアクセスできる共有フォルダとする
/etc/samba/smb.conf の最後に追加。

[www]
comment = www
path = /nas/www
writable = yes
guest ok = yes
guest only = yes

設定後Samba再起動

sudo systemctl restart smbd

nginx設定

/etc/nginx/sites-available/default を編集
serverブロックにある root を /nas/www に変更する

        root /nas/www;

ついでにPHPインストール

sudo apt install php php-fpm php-common php-gd php-mbstring php-json php-xml

/etc/nginx/sites-available/default にPHPの定義があるので、下のようにコメントを外して編集する

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

設定後nginx再起動

sudo systemctl restart nginx

ZX01 Celeron N5105の超小型PC

最近立て続けに小型PCを買ってますが、もう1台 ZX01 というものを買いました。

72mm四方で高さ45mmと非常にコンパクトです

AliexpressでRAM8GB,SSD128GBのモデルを22,000円ほどで購入、思ったよりも早く2週間ほどで届きました。
元々の目的はMinisforum JB95と同じくLinux環境用でした。
注文したのはこちらの方が先で、たまたま気になっていたMinisforum JB95が安く購入できる機会があったので、そちらも注文してしまった形です。
初めは使い勝手を試してみてどちらかを手放せばよいかと思ってました。拡張性やメンテナンスのしやすさ、USB-C1本でモバイルディスプレイに接続できることからMinisforum JB95の方を採用しましたが、ZX01の方も結構気に入ってしまい、本当の意味での遊び用、おもちゃとして当分置いておくことにしました。

CPUはMinisforum JB95はCeleron N5095なのですが、ZX01はCeleron N5105です。

CPUの仕様概要

型番 コア スレッド ベース周波数 バースト周波数 GPUユニット TDP
N5105 4 4 2.0GHz 2.9GHz 24 10W
N5095 4 4 2.0GHz 2.9GHz 16 15W

ネット上で比較されている各所のベンチマークを見たところ、純粋なGPUではGPUユニット数が多いおかげでN5105の方が20%程高いですが、CPUのみやゲーム等のCPUとGPUの総合では10%程N5095の方が高いようです。
実際に負荷をかけたりして比較しところTDPが高いN5095の方が高い周波数で動作してました。TDPの範囲内で動作するようにクロック数を落としてるような動きをしてました。
Minisforum JB95ZX01 でCPUのクロック数をみながらGPUを使用するようなゲームをしたところ、N5095は最大2.8GHzで動作してたのに対してN5105は最大2.5GHzで動作してました。GPUで電力を使用する分CPUの方で落としたような感じになってました。

ベンチマークで見ると以上のように数%の差が出ますが、実際に使用してる感じでは全くわかりません。あまり気にすることのない差だと思います。

ZX01の消費電力はWindows11環境ではアイドル時6W、ChromeでWebを見る程度では10W以下、ゲーム等の少し負荷のかかる処理でも20W以下で動作してます。
Ubuntuの環境ではアイドル時4.5Wで、色々アプリを動作させるとWindowsと同様の消費電力になります。
Minisforum JB95はWindows11環境のアイドル時は8Wでしたが、Ubuntuの環境ではアイドル時はZX01と同様にアイドル時4.5Wまで下がりました。Windows11のアイドル時に消費電力が高い原因はわかりませんが、2W程度の差なので気にするほどのことでもないと思います。
ZX01Minisforum JB95もWebやOfficeの通常使用時はどちらも10W前後であまり変化はないようです。負荷のかかる処理をした場合にMinisforum JB95の方が25Wを超えることもあるので、TDPの差の5W分頑張ってるようです。この差がベンチマーク上では10%程N5095の方が高い原因だと思います。

小型なので拡張性はあまり無く、メモリは交換できませんが、SSDは裏蓋を外すだけで交換できます。2242サイズのM.2 SATAIII のSSDを使用することができます。

前述の通りにMinisforum JB95の方を普段使いとして採用しましたが、ZX01は小型で愛着の沸くデザインですので持っておきたくなってしまいました。
小さくて取り回しもよいので割り切って遊びで使用しようと思ってます。
いくつか環境を作ってSSDを交換しながら使おうと思い、Aliexpressで2000円程度の128GBのSSDを3個注文してしまいました。

Minisforum JB95

24時間可動させても気にならないくらいの消費電力でCeleron J4125以上のスペックのLinux環境は欲しかったので、Minisforum JB95を購入しました。

運良くYahooショッピングのセールで31,800円、更にクーポンで10%OFF、更にポイント15%だったので、実質25,000円ほどで購入することができました。

CPUはCeleron N5095、メモリ8GB、M.2 SATA SSD 128GBです。
Beelink U59でCeleron N5095の実力は分かっていたので、スペック的には十分と判断しました。
今回はWindowsは動作確認程度で使用した程度でSSDは外してバックアップとして保管してます。
代わりに256GBのSSDが余ってたのでこちらに交換してUbuntuをインストールしました。
Windowsでの使い勝手はBeelink U59と変わりません。
サイズ的にはMinisforum UM350と同じで127mm四方で結構コンパクトです。
ファンも殆ど音が聞こえないくらいで非常に静音です。高負荷時でも若干音が聞こえるくらいです。
Ubuntu環境時の消費電力はアイドル時4.5Wで高負荷時でも20Wまでしか上がりませんでした。

Celeron N5095は前世代のJ4125やN4100でもう1歩だと思ってた点が解消されて、ゲームや動画編集等のパワーが必要な作業以外の普段使いとしては十分なCPUだと思えました。