現在の macOS のバージョンは Sonoma 14.2.1 です。実は以前から、ひょっとしたら Big Sur 11.0 あたりからターミナルで open ~/Documents/Python/hoge とかやってもウィンドウが開かないなと気になってはいたのですが、そんなに実害も無いしまあいいか、と放置していました。ところが今日、GitHub Desktop をいじっていた時に症状が現れました。同アプリで Show in Finder ボタンをクリックすると、本来開くべき書類フォルダ数階層下のフォルダでは無く、かわりに自分のホームフォルダがヘンな感じで開いたのです。これはやっぱりおかしい、解決しておかないと面倒なことになりそうだぞ、と言うことで調べ始めました。
症状
ターミナルアプリで ~/Documents フォルダ以下の様々なフォルダを open コマンドで開いても、同じく自分のホームしか開いてくれません。開いた Finder のウィンドウで書類フォルダをクリックすれば、内部のフォルダは全て開けます。ミュージック (~/Music) やダウンロード (~/Downloads) などの内部にあるフォルダも同様の手順でターミナルから開けます。書類フォルダの中にあるフォルダだけ、直接 Finder で開けないのです。Finder の「移動」メニューから「最近使ったフォルダ」で書類フォルダ以下のフォルダを指定したときも同じ動作です。右クリックから「新規タブで開く」を選んでも同じ。とにかく Finder が、書類フォルダ自体とその配下のフォルダを直接開くことができず、仕方なくホームフォルダを開いている感じでした。
どうやって解決したか
いろいろ試しましたが、最終的には Finder の表示方法をリストに変更することで解決したようです (元々は、カラム表示がダメだった雰囲気)。手順をもう少し細かく書くと、まず書類フォルダを開き、ウィンドウ上部にある表示からリストを選びます。
その後、アクションメニューから「表示オプションを表示」します。
開いた小さいウィンドウの「常にリスト表示で開く」にチェックを入れ、一番下の「デフォルトとして使用」をクリックし、閉じます。これで、書類フォルダや配下のフォルダが Finder のリスト表示で開くようになりました。
勝利宣言
Finder は、小さな親切か大きなお世話かわかりませんが、あるウィンドウで表示方法を変更すると、次に新しく開いたウィンドウも表示方法が踏襲されたりします (条件はよくわからず)。なので、不具合を再現してみようと、上記設定をした後に表示方法をカラムにしたりギャラリーにしたり閉じたり開いたりを繰り返していたところ、最終的に不具合はぱったり発生しなくなりました。カラム表示でもサブフォルダが開くんです。よって、原因不明ながら、上記手順で解決、と言ってしまおうと思います。
# certbot certonly --manual --preferred-challenges dns-01 -m mail@example.com -d '*.dev.peddals.com' -d peddals.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
今回はなぜかここで止まって進まなかったので一度 ctrl + C で止め、再度同じ certbot コマンドを実行しています。問題なく進んだので原因は調べていません、あしからず。
メールアドレスの共有 (上の質問) は強制では無かったと思いますが、IP アドレスの登録 (下の質問) は必須なので Y を入力しましょう。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for dev.peddals.com
dns-01 challenge for peddals.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.dev.peddals.com with the following value:
(ここにコードが表示される)
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
ここで一度止まるので、指示の通りに DNS に TXT レコードとして追加します。こんな感じです。
追加したら CLI に戻ってエンターキーを押します。自分の例ではトップレベルドメインも -d で追加していたので、もう一度 DNS レコード記入の指示が出ました。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.peddals.com with the following value:
(ここにコードが表示される)
Before continuing, verify the record is deployed.
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
同じ要領で DNS に追加し、エンターキーを押します。うまくいけば以下のように表示されて、証明書の取得が完了です。
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/dev.peddals.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/dev.peddals.com/privkey.pem
Your cert will expire on 2024-02-10. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
秘密鍵や証明書の保存場所は IMPORTANT NOTES に書いてあります (忘れたら /etc/letsencrypt/live/ を見ましょう)。証明書の期限は 90日で、つど再取得の必要があります。再取得後も Apache の設定ファイルを書き直さなくて良いように、それぞれ実ファイルへのリンクになっています。
# ll /etc/letsencrypt/live/dev.peddals.com/
total 12
drwxr-xr-x 2 root root 4096 Nov 12 19:00 ./
drwx------ 3 root root 4096 Nov 12 19:00 ../
-rw-r--r-- 1 root root 692 Nov 12 19:00 README
lrwxrwxrwx 1 root root 39 Nov 12 19:00 cert.pem -> ../../archive/dev.peddals.com/cert1.pem
lrwxrwxrwx 1 root root 40 Nov 12 19:00 chain.pem -> ../../archive/dev.peddals.com/chain1.pem
lrwxrwxrwx 1 root root 44 Nov 12 19:00 fullchain.pem -> ../../archive/dev.peddals.com/fullchain1.pem
lrwxrwxrwx 1 root root 42 Nov 12 19:00 privkey.pem -> ../../archive/dev.peddals.com/privkey1.pem
# a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl.
See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
systemctl restart apache2
# systemctl restart apache2
# systemctl status apache2
# certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/dev.peddals.com-0001.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.')
Attempting to renew cert (dev.peddals.com-0001) from /etc/letsencrypt/renewal/dev.peddals.com-0001.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.'). Skipping.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/dev.peddals.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.')
Attempting to renew cert (dev.peddals.com) from /etc/letsencrypt/renewal/dev.peddals.com.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.'). Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/dev.peddals.com-0001/fullchain.pem (failure)
/etc/letsencrypt/live/dev.peddals.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/dev.peddals.com-0001/fullchain.pem (failure)
/etc/letsencrypt/live/dev.peddals.com/fullchain.pem (failure)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2 renew failure(s), 0 parse failure(s)
Attempting to renew cert (dev.peddals.com) from /etc/letsencrypt/renewal/dev.peddals.com.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration. The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.'). Skipping. All renewal attempts failed. The following certs could not be renewed: /etc/letsencrypt/live/dev.peddals.com-0001/fullchain.pem (failure) /etc/letsencrypt/live/dev.peddals.com/fullchain.pem (failure)
# certbot certonly --manual --preferred-challenges dns-01 -m mail@example.com -d '*.dev.peddals.com'
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/dev.peddals.com-0001.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.')
Attempting to renew cert (dev.peddals.com-0001) from /etc/letsencrypt/renewal/dev.peddals.com-0001.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.'). Skipping.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/dev.peddals.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.')
Attempting to renew cert (dev.peddals.com) from /etc/letsencrypt/renewal/dev.peddals.com.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.'). Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/dev.peddals.com-0001/fullchain.pem (failure)
/etc/letsencrypt/live/dev.peddals.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/dev.peddals.com-0001/fullchain.pem (failure)
/etc/letsencrypt/live/dev.peddals.com/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2 renew failure(s), 0 parse failure(s)
root@ubuntu:/home/handsome# certbot certonly --manual --preferred-challenges dns-01 -m admin@peddals.com -d '*.dev.peddals.com'
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for dev.peddals.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
Yで進める。
Please deploy a DNS TXT record under the name
_acme-challenge.dev.peddals.com with the following value:
(ここにコードが表示される)
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
以前追加済みの TXT レコードがドメインのパブリック DNS に残っていれば値を上記のコードに書き換え、削除済みであれば新規で TXT レコードを追加 (上記例のホストは _acme-challenge.dev.peddals.comがホスト名。コードを値として設定)。
DNS レコードの追加後、シェルに戻って Enter キー押下。やや待つとこんな感じの内容が表示されます。
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/dev.peddals.com-0001/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/dev.peddals.com-0001/privkey.pem
Your cert will expire on 2024-10-22. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
んで、Apache を再起動。
# systemctl reload apache2
Safari で Cmd + Opt + R でページを新規読み込みすれば、無事表示されると思います。念のため証明書を確認してみましょう。
system/shscreens.py", line 578, in load_pyte_screen
c = pyte_screen.buffer[idx_line][idx_column]
TypeError: list indices must be integers or slices, not float
My guess would be that stash uses / division for line/column indices. On Python 3 / always produces a float. The fix is simple: replace it with flooring division //.
Date:
2023年5月6日 22:31:24
Model:
realisticVision-v20_split-einsum
Size:
512 x 512
Include in Image:
cartoon, a young man waring glasses, super happy
Exclude from Image:
Seed:
3826992198
Steps:
20
Guidance Scale:
11.0
Scheduler:
DPM-Solver++
ML Compute Unit:
CPU & Neural Engine
赤文字の英語で「CommandError: You must set settings. ALLOWED_HOSTS if DEBUG is False.」と出た場合は、ここではとりあえず気にせず Pythonista 3 を終了・起動、そしてもう一度 manage.py を Run しましょう。iOS がネットワークアクセスの可否を聞いてきたら許可してください。
ステップ数が少ないからかなり怖い画像になってますが、Mochi Diffusion の max 値である 50にすると、変にまとまってしまって自分のうれしい気持ちを表現しきれないので、最初に出力した画像をアイキャッチにしました。ゾッとした方、ごめんなさい。
Date:
2023年5月6日 14:35:09
Model:
realisticVision-v20_split-einsum
Size:
512 x 512
Include in Image:
cartoon, people happy with a new release of software
Exclude from Image:
Seed:
3343127351
Steps:
20
Guidance Scale:
11.0
Scheduler:
DPM-Solver++
ML Compute Unit:
CPU & Neural Engine
Mac mini (M1) と MacBook Air (Intel 2019) を macOS 12.3.1 にし、iPad mini (第 5世代) を iPadOS 15.4.1 にアップデート。ユニバーサルコントロールを有効にして、ワンセットのマウスとキーボードで操作してみました。最初の感触としてはすごくいいです。3つの Apple デバイス+1つのモニタが、シームレスに操作できています。使い切れていない機器が再び使えるようになりそうですよ。
Apple のデモを見ていたときには、あたかも置いてある方のデバイスのモニタにマウスカーソルが移動できるような雰囲気ではありましたが、さすがにそれぞれのデバイス同士で位置情報を交換しているわけでは無いです。ざっと試した感じでは、モニタの端にマウスカーソルを持って行ってから、さらに画面の外に持って行こうとすると、未接続のデバイスにカーソルが移動します。そうやって接続してから、Mac のディスプレイ設定で上のスクリーンショットのように気に入った場所に移動しましょう。下にも配置できます。iPad 画面の縦横も反映されるので、Sidecar より便利ですね。
MacBook Air (Intel) を生かせそうな予感
性能がかなり控えめで、たまーにリビングで Mac を使うときにしか稼働させることの無くなってしまった Intel CPU の MacBook Air (Retina, 13-inch, 2019) ですが、ユニバーサルコントロールのおかげで生き返りそうです。Mac mini と一緒に机で使うときは、3枚目のモニタとしてメールを開きっぱなしにしておけます。また、トラックパッドでページをめくれるので、リビングでは外付けモニタ的に iPad の Kindle で技術系書籍を開き、MBA でプログラムを書くなんて便利な使い方ができます。自分の用途では Sidecar より便利です (Sidecar は iPad を縦表示にできず、フルスクリーンでは使えない)。ただし、Kindle ではダブルクリックやドラッグで文字を選択することはできないようで、おそらく amazon 側の対応が必要な感じです。
ベータ版だからか、サポート外か?
ファイルのドラッグアンドドロップもできるということで、iPad のスクリーンショットをファイルに保存し、マウスで Mac のデスクトップに持ってこようとしましたができませんでした。できないどころか、Mac mini のディスプレイ設定から iPad mini が消え、MBA では見えているけど iPad mini の画面位置を移動できず、他のことをしていたらいつの間にか復活、という動作になりました。そもそも写真のドラッグアンドドロップは対応していないのかもしれません。使い続けていると、できそうでできないことが他にも見つかりそうです。少なくともデバイス間のテキストのコピペは問題なさそうです。
これは困る。iPad mini ではキーボード配列が日本語になってしまう
Mac mini M1 にインストールはできるものの、頻繁にクラッシュして使い物にならない Pythonista3 を iPad mini で起動していじってみました。使い慣れたキーボードで操作できるなんて最高です!と報告して本投稿を終了、と思ったのですが、なんだか様子がおかしい。どういうことかというと、キーボード配列が日本語 JIS 配列になってしまっていて、HHKB Pro 2 の英語キーボードではアンダースコアが入力できないのです。ググってみても、日本語キーボードが英語キーボードと認識されてしまうという情報は多いのですが、逆はみつかりませんでした。果たしてユニバーサルコントロールの問題なのか調べるために、iPad に USB-A コネクタを追加するアダプタでキーボードをつないだところ、結果は同じでした。日本語配列キーボードとして認識されてしまいます。
娘のパソコンを iMac (Retina 4K, 21.5-inch, Late 2015) から Mac mini (M1, 2020) にしました。スペックや実際の移行方法など難しい話は別記事にします。こちらでは、読み物的な内容をまとめています。パソコン初心者 (自分の親や子供) にパソコンを買ってあげる、自分のパソコンの知識に自信は無いがなんか満足度が高いのが欲しい、昔から Mac っていいよなーって思っている、そんな方に読んでもらえるように書きました。
これまでは年代物で親のお古の Mac を 2台使わせていましたが、実際のところ一日の中で Mac を使う時間は家族で一番長いのです。主な用途のイラスト描きや YouTube 視聴は問題無いものの、マイクラにシェーダーやリソースパックを入れて Replay Mod で記録しながら QuickTime で録画するとか、編集した動画を書き出すとか、実は親よりもパソコンの性能を要求する使い方をしているのも事実。誕生日まで 3ヶ月ほどあるものの、安く手に入れられればそのタイミングで新しい Mac を買い与えることにしました。
Windows PC にしなかった理由
初期の動画は iMove を使っていた娘ですが、無料で高機能な DaVinci Resolve を少しかじり、現在はゆっくりムービーメーカー4 で YouTube 動画を作っています。同アプリは Windows 10 & 11 用のフリーウェアで、有料アプリの Paralles Desktop バージョン 16 に Windows 10 Home 環境を作り、その上で動作させています。他にもいくつか Windows 専用アプリを使用しているため、移行先も Windows が動くコンピュータである必要があります。娘の仲の良いお友達はみんな Windows PC ユーザです。親であるボクは完全 Windows 環境の会社の IT マネージャをやっているので、Windows PC という選択肢も無いわけでは無い。しかしそうしませんでした。いくつかある理由の一つは、娘が Windows OS の見た目をダサいと思っていて、macOS の方が良いと思っていたから。そしてもう一つは、娘以上にボクがそう思っているから。と、まぁダサいナウいの話は置いておいても、あまたある Windows PC の筐体やスペック、価格、サポート体制、評判などを調べ上げて最適なものを選定し、導入後は自宅でも Windows PC のサポートをしなければならなくなる、ということを考えると全く気分が乗らなかったからです。そんな自分を正当化するために、2週間ほどは Intel PC vs M1 Mac 的な YouTube を見まくりました。そして、性能、価格、発熱量、先進性などという要素を元に、Apple Silicon (M1 チップ) 搭載 Mac が最適であるという結論に至ったのです。Parallels Dekstop は早々に M1 チップ対応を謳っていましたし、逆に Windows で Mac 用アプリを動かすソリューションは知りません。
Mac mini M1 にした理由
Windows アプリを使用するための互換性から Intel Mac も考えなかったわけでは無いですが、Apple のラインナップからなくなることがわかっている製品を購入するよりも、これから各メーカさん・開発会社さん・OSS 開発者さん達による対応が進んでいくであろう M1 チップを搭載したコンピュータを子供に与えることに、何らかの意味があるように思えました。またちょうどこの頃 (2022年 2月)、Apple が近々発表する新製品の噂が各方面で記事にされていました。話半分で探ってみたところ、どうやらパワフルなものが中心になりそうで、Mac mini M1 がモデルチェンジしそうな感じもありません。歴代 Mac mini もモデルチェンジのが頻度が低かったですし、新機種登場による値下がりも期待薄です。また、娘は液晶タブレットを使ってイラストを描いているため、Macbook Air や Pro ではメインモニタが小さくて不便です (使っていた iMac は 21.5 インチ)。小学生なので持ち運んでドヤることもありません。こういった事から、本体は Mac mini M1 搭載モデルで決定しました。…といいつつ、当初は iMac M1 を第一候補として USB ポートのやりくりや設置場所の検討をしていました。娘が選ぶのは紫かな、水色かな、なんて思いながら必要な機器の金額を足していくと、どうしてもトータルが 27万円を超えることに。さすがにその金額はきびしいぞ、と。で、必要なハードウェア構成を考えてみると、キーボードとマウスは持っているし、使用中の iMac の 21.5インチ Retina 4K モニタは解像度を半分にしているので高解像度は必要ない。音は常にヘッドフォンで聴いているし、調べてみると Vtube 系アプリの顔認識には 720p のウェブカメラで十分らしい。さらに、会社の福利厚生の一環であるベネフィット・ステーションの Apple Store 割引は iMac M1 には使えないが、Mac mini M1 は対象ということが判明 (Apple Store に電話して聞きました)。ボクが使っている Dell の QHD 解像度モニタ なら 3万円台なので、トータルで 20万円かからない。ということもあり、Mac mini M1 となった次第です。
Windows アプリの動作確認には M1 アプリ対応の確認よりも時間がかかりました。理由の一つは、日本のフリーウェアを M1 Mac + Parallels Desktop で動作させているような人の絶対数がそもそも少ないということ。情報が無いので、試してみるしか無い。それともう一つは、Arm 版 Windows 10 では x64 エミュレーションが行えなくなるような記事が見つかったことに起因します (ソースはこのあたり)。これはつまり、Arm 版 Windows 10 では Intel (x86 や x64) アプリが動かなくなるということです。マイクロソフトさんはその対応策として、Windows 11 へのアップグレードを推奨、ですって。さらにこちらの情報では Arm 版 Windows 10 の提供が停止されると言うことで、どのみち Windows 11 にする必要があるみたいでした。Windows エコシステムの良さは、古いアプリが新しい OS でもそのまま動くというところにあるとはいえ、Windows 11 の、しかも Arm 版でこれまでのアプリが動くのか。これは試してみないとわかりませんでした。結果は上の表の通り。マイクラ Java 版は Mac で使えるのでヨシということで娘には納得してもらいました。
アウトかグレーか半分か
ところで、Windows 11 と M1 Mac という点で調査を進めたところ面白いことがわかりました。おおっぴらにそのことに触れている大手メディア系サイトでは見つけられませんでしたが、通常版として使える Windows 11 が UUP dump というサイト手に入るのです。しかも Windows 10 の同じエディションのキーで本当の Windows としてアクティベーションできる。Parallels Desktop のインストール手順ページ含め大手のメディアでは Insider Preview 版 (要するに評価版) の Windows 11 をインストールできますよーとは表記していますが、評価版を娘に使わせ続けるのはトラブルがありそうで不安です。しかし通常版が使えるのであれば安心感は大きく向上します。UUP dump では海賊版の OS を配布しているわけでは無く、Microsoft 社が過去に公開したイメージをダウンロードし、インストール可能な ISO や VHDX 形式に変換するツールを提供しているので安心感があります。さらに、ボクと娘が持っている Parallels Desktop のバージョンは一つ前の 16 なのですが、16.5 以上であれば Windows 11 のインストールもできると。極めつけに、Yahoo ストアでは、Windows 10 や 11 のアクティベーションキーが数百円で買えることもわかりました。さすがに普通に amazon で買うと 1万円以上する OS が、メディア無しで文字列だけのアクティベーションキーまたはオンラインコードだけになったからと言って数百円になるというのはグレーかアウトか判断できません。不安な方は避けた方がいいと思います。ボクはというと、自己責任、怖いもの見たさ、ダメもと、人柱上等で 500円ほどの Windows 11 Home のキーを買ってみました。結果、Windows 11 のアクティベーションはできて、一ヶ月以上使えています。このあたりは覚悟のある方のみ試されたらいいと思います。
さて、やっと買う直前のフェーズに移行。とにかく安くしたい
使いたいアプリは M1 Mac でも、その上で動く Windows でも動作すると言うことが確認できたので、後は Mac 含めたハードウェアを安くという段階に入りました。Mac 以外に必須なのは、モニタ、キーボード、マウス、さらに我が家では web カメラとなります。特にこだわらない限り Mac 以外で高価なのはモニタですので、ここを安く抑えることがキーになります。だからといって値段だけで判断すると、品質や使い勝手で不満が出て、結局はより良いものを買い直すことになったりする危険もあるので、良い製品を安く買うということが重要になります。我が家では機能と価格のバランスが高い Dell モニタにすることにしました。ボクと同じモデルを探したのですが販売終了となっており、純粋な後継機はありません。QHD (解像度 2560×1440) で画面サイズは 23〜27インチ、USB Type-C 接続ができ、USB ハブとしても使える機種で探したところ、S2722DC が見つかりました。M1 Mac シリーズは USB ポートの少なさがネックなので、モニタがハブになっていくつかの USB 機器をつなげられるというのはコストカットになります。ボクの P2421DC と比較すると、解像度は同じなのに画面サイズが大きく、USB ハブとして使えるポートが 2つに減っていましたが、設置面積に問題は無く、評価を見るとP2421DC で問題のあった USB ハブ機能を使うためにケーブルの抜き差しが必要という問題も解消されているようで、こちらに決定です。Dell 製品は、納期に納得できれば直販サイトの価格が一番安いことが多いです (ビジネス向けしかり)。3月後半現在の価格は 46,536円になってしまっていますが、ボクは Dell 直販 20% オフの 34,110 円で購入し、納期は 2週間でした。同時期の amazon の価格は、2,000円割引が効いても 38,426円。プライムセールでも変化無しでした。ネットにはもっと安く買えたという情報もありますが、今は半導体不足による品不足や納期問題もあるようですし、35,000円程度で購入できれば十分いいところでしょう。間違って他のモデルを買ってしまわないよう、常にブラウザの左端のタブにページを開いておきました。
割引の効率
さて、最重要アイテムであり、最も高価でその分割引効果が一番大きいのはなんと言っても Mac mini M1 です。もちろんこれを買わなければ意味がありません。で、ベネフィット・ステーションの 3% 割引を使おうと思いつつ数日情報収集していたところ、とある方が YouTube で整備済製品の Mac mini を購入したとおっしゃっているのを聞きました。スペックはボクが選定した構成そのものです。これは盲点でした。amazon 含め、Apple Store 以外のショップではいわゆる吊るしモデルしか手に入らないのが普通です (「吊し、つるし」とはハンガーにつるされた洋服を買うように、自分好みにカスタマイズしない既製品を言います)。ボクはこれまで何年も、メモリやストレージのサイズを変更し、キーボードを US 配列にするというカスタマイズをしていたので Mac を整備済製品で入手するという考えに至りませんでしたが、確かに整備済製品は吊しとは違います (詳細は Apple 社のページ参照)。16GB メモリで 1TB の Mac mini M1 の筐体に傷が付いていたら、筐体だけ交換して販売されることもあるでしょう。というわけでその日から、日に数回 Mac整備済製品ページを覗きに行く日々が続きました。最初の頃は黒い Intel Mac mini や Intel Macbook Pro の大きな液晶モデルが現れては消えてという状況です。果たして娘の誕生日までに現れるのか、ま、最悪ベネフィット・ステーションもあるし、なんて思いながら 2週間ほど経ったある日の夕方、突然 iMac M1 が大量に現れました。多分全ての構成がそろっていて、カラーもいろいろ。もちろん 16GB メモリ 1TB SSD という構成のものもあり、パープルは無いけどブルーがある。じっくり見るとブルーの方が娘の好みに近い。キーボードは何が付いてるかわからないけど、どうせ今使っているものを使い続けるからどっちでもええわ。うーん、これ明日の朝には全部無くなってるかもしらん。今頃嗅覚の鋭い人たちや独立系メディアは祭りをやってるな。世の中がスペックやカラーに目移りしている間に絞り込みがほぼ終わっているオレがこのレースを制してやるぜ!
そして購入へ
整備済製品ページで iMac を見つけた時間に救われました。しらふの状態で十分冷静に検討することができたので。安くなっているとはいえ iMac M1 は 20万円を超えており、液晶タブレットを HDMI 接続するにはプラス 8千円ほどのアダプタも必要になります。キーボードなど、娘の用途には不要なものが多くその分高い。突然の出会いに胸が躍ったのは確かでしたが、見送ることにしました。我が家に向かい入れることはできない。その後 3日ほどかけて徐々に iMac は新しいユーザに買われて行きました。ひょっとしたら、いっせいに咲いた綺麗な花が徐々に枯れていくようだったかもしれません。しかしボクには確信めいた予感がありました。次に整備工場から出てくるのは Mac mini M1 に違いないという予感が…。
もったいぶりました
結果、狙ったとおりの Mac mini M1 16GB 1TB をポチれたのは、その数日後のことでした。確定するまで間違いが無いように何度もスペックを見直したのでずいぶん時間がかかりましたが、その間に売り切れることも無く、無事購入することができました。その流れで Dell のモニタを直販サイトでポチり、amazon ではお手頃な web カメラと念のための USB ハブをポチり、怒濤の勢いで購入作業を終わらせました。満足感と充実感。勝った感とやりきった感。Mac のリプレイスを決断してから 1ヶ月以上かかったと思いますが、機種の選定から購入までの一連のアクションがここに完結しました。
娘が親のおさがりじゃ無い現行の Mac を手に入れてからまだ 1ヶ月もたっていないのですが、忖度されないように極力さりげなく感想を聞いてみると「マイクラにキレイな影 Mod とリソースパック入れて録画してもぬるぬる動くようになったから最高」という反応が返ってきて安心しました。使う本人が最優先と思いながらも、実際は親の都合や趣味が多分に含まれたチョイスになっているわけで、娘が望んでいたことが実現できたのは素直にうれしい気持ちです。当初 Mac か Windows かで調査した時は、M1 がいくら速いと言ったって上位モデルの Intel/AMD CPU に性能はかなわないし、そもそもゲームが全然無いじゃないか、という趣旨の情報を多く目にしました。多くの Windows 専用アプリは Parallels で動くのですが、ハードウェアを酷使するゲームは動かないか、動いてもカクカクで遊べたものじゃ無いということです。ま、それはそうなんでしょうが、ファミコン世代・8 bit パソコン世代のボクにしてみれば、ゲームはゲーム機で遊ぶものであり、パソコンは何かを作る、実現するモノなんです。娘もゲームにはそれほど執着していないので問題ありませんでした。むしろ今後ゲームに傾倒することがあるとしても、Mac に向かっている間はゲームばかりにはならないということでもあり、クリエイティビティを伸ばしていきたい親としては好都合です。自分との違いも感じました。女の子だからなのかコンピュータのアーキテクチャやプログラミングに対する興味はおろか、カスタマイズして使いこなしたいという欲求も無く、最新の M1 チップ搭載!ということは娘には全く価値がないようです。でも、単に速いだけのパソコンというのとは違う、未来に期待できる M1 Mac を早い段階で与えられたことは、彼女のステキな未来に役立ってくれそうな、そんなワクワク感もボクに与えてくれています。ジョブズがこの世を去り、アイブは会社を去りましたが、M1 を始めとした Apple Silicon は、Apple 製品やコンピュータの世界を楽しいものにしてくれました。
結局どっちを勧めるか
お子さんをプロゲーマにさせてあげたい、ゲーム実況のスキルを伸ばしてあげたい、一緒に PC ゲームをしたい、という方は Windows の走る、Intel/AMD 搭載ゲーミング PC がいいと思います。もしそうではなく、上に書いた感想に共感できる方には、M1 を搭載したどれかの Mac をお勧めします。入門者向けには安いモデルでいいでしょう。まさに Mac mini は最適です。Macbook Air や Pro、iMac といった一体型は、液晶が壊れたら全て修理でその間は使えません。Mac mini なら本体さえ壊れなければ、その場しのぎの液晶モニタを買ってでも使い続けることができます。逆に、主な用途が変わればモニタだけ良いものに変えるだけで環境をアップグレードできるのです。モヤモヤするなら今日から整備済製品ページに足繁く通いましょう。
% brew info python3
python@3.9: stable 3.9.6 (bottled)
Interpreted, interactive, object-oriented programming language
https://www.python.org/
(略)
tkinter is no longer included with this formula, but it is available separately:
brew install python-tk@3.9
(略)
ほんの最近まで、多分去年くらい?までの情報では「Python で GUI やるなら、まずは標準で入っている tkinter を試しましょう」と書かれていると思うんですが、少なくとも Mac の brew によるインストールでは標準では入っていない、ということですね。
動かなくなったときのエラーはこんな感じ
% python3 -m tkinter
Traceback (most recent call last):
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 188, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 147, in _get_module_details
return _get_module_details(pkg_main_name, error)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 111, in _get_module_details
__import__(pkg_name)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/tkinter/__init__.py", line 37, in
import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'
本ブログの別記事でも取り上げていますが、Fire HD 10 は画面が大きく雑誌や技術書を読むのに便利で、Kindle Unlimited で読み放題を満喫するなら是非手に入れるべきデバイスだと思っています。スマホと比べると映像の迫力も大違いです。Kindle Unlimited を利用していなくても、Amazon Prime の会員特典をエンジョイできるメディアプレイヤーという観点で言えば、第一候補にしていいと思います。ボクは第 7世代の Fire HD 10 を持っていて、Amazon コンテンツ以外では、abema で格闘技などを見ながら家の中をうろうろするようなシーンでも活躍してくれています。独自のアプリストアのラインナップを気にするとか、SaaS やクラウドを利用して仕事やクリエイティブなことにも使い倒してやろう、なんて色気を出してはいけません。家の外に持ち出すことも考えない方がいいでしょう。自宅の Wi-Fi 環境でスタンドに立ててメディア鑑賞、これが Fire HD 10 の使い方です。そしてその用途であれば、十分に満足させてくれます。
NEW Fire HD 10 はどうなんか (この商品の発売予定日は2021年5月26日です)
と、高級品の iPad ではないことを十分に認識し、IT リテラシーを存分に効かせて上手に付き合っている第 7世代 Fire HD 10。でも、もどかしいところすらかわいい、なんて言える心に余裕が無いときには、雑誌の表紙をザッピングする時の動きだけでイライラしちゃいます。スクロールしようとしているのに、指を置いた位置がわるくて詳細ページが開いちゃうなんてのはざらで、見るものが決まるまではある程度の忍耐が必要なんです。んで、ギズモードさんの紹介してくれた、なぜかセールが続いていた Fire HD 10 は、どうも評価が低い。発売当初ソフトウェアの問題があったようで、それが大きく影響しているような感じではありますが、スペックを見ると大きな画面に対して RAM の容量が少ない感じ (2GB)。ボクがジェフベゾさんの手下だったら、これをラインナップに入れ続けるより、RAM を増やした新製品を出すだろうし、そのために少しでも在庫を整理したいし、ということは、さらにそのためにメディアにも協力してくれるよう相談するな。ははぁ〜ん、こりゃ出るな、新機種、と様子をうかがっていたところに Fire HD 10 新機種発表のニュースが各メディアに載りました。しかもスペック違いの 2機種あり、無印でも 3GB、Plus は RAM を 4GB 積んでいる。他にも違いがあるようですが、後で付け足すことのできない RAM はなるべく大きくしておきたいので、Fire HD 10 Plus を推しとして今後のレビューを楽しみにすることとしました。ボクの M1 Mac mini も最初から 16GB の RAM を積んでいます。後で追加することはできないので。
【表示されている方限定】という割引がまた来おった
ボクは 20年?ほど前、会費無料期間中に解約することを忘れた時から Amazon Prime 会員を続けているからか、ちょいちょい「お客様限定で○○% オフ」等のオファーをうけています。最初は多分、ドットの荒い Kindle で、980円みたいな価格だったので即ポチり、まもなく解像度の高い機種が発売されました。この時は、きっとそんなことだろうとは思いつつも、ずっと気になっていた新テクノロジの E Ink を手に入れられてウハウハしたものです。次は確か初代の Fire TV Stick で、日本での一般発売に先立って予約してくれたら割引してくれるというので、即ポチりました。初代 Echo dot もおそらく同じような割引があったのでやはり即ポチり、今ではこういうファミリー構成になっています。
そして推しの NEW Fire HD 10 Plus のレビューを待つと決め、NEW Fire HD 関連のページをジロジロ行ったり来たりしていたところ、こんなページが表示されました。
されど、Plus だけは 20% OFF にあらず
キャプチャの通り、ボクの推しの Fire HD 10 Plus は対象外、とは言いつつも何かの手違いで Plus も 20% OFF が適用されちゃったりするんじゃなかろうかと、ねちょねちょと Fire HD 10 の各ページを行ったり来たりしましたが、いくら頑張ってみても 3GB RAM の通常モデルと全部乗せ風エッセンシャルセット、Kids モデルのみが 20% OFF。推しの 4GB RAM 搭載 Plus ちゃんには割引は適用されません。こんなにたくさんの Amazon デバイスを買っているボクだけど、これ以上の特別扱いはしてくれないようです。残念。。。だけど、ポチりました。3,196円引きになった、推しじゃ無い方の 【NEWモデル】Fire HD 10 タブレット 10.1インチHDディスプレイ 32GB ブラックを。12,784円で。わはは!リンクを張っていますが、ボクみたく Prime 会員でいろいろ買っていないと割引は無いんじゃないかと思いますので、表示されていない方は Cyber Monday (年末) あたりまで待ってみてください。ちなみに、これまでの Fire HD タブレットシリーズは SD カードにアプリやコンテンツを保存できるため、使っていない SD カードを持っている人は大きなストレージのモデルを選ぶ必要はないです。上にも書いたように Wi-Fi 環境で使うことが前提のデバイスなので、なおさら大きな内蔵ストレージは必要ないですね。
結局何を言いたいのかというと
どんなに好きな人の言うことも 100% 真に受けちゃいかんよ、少しでもなんか変だな、とおもったら自分の心の声に従った方がいいよ、ということ。いつもは Mac の在庫がなくなってきたら新製品が出そうですよ、とアドバイスをくれる G さんが、よくわかんないけど安売りしてるから買っちゃえ、なんて言ってるのはどう考えてもアヤシイと疑ったボクは、ちょっと安く最新モデルの Fire HD 10 をポチれました、という自慢話でした。おしまい。