M1 Mac Setting

macOS のサンドボックスってこんなにウザかったっけ?

sandbox1

端末アクセスごときにチマチマ許可を与えるのが面倒すぎる。
とっとと端末のサンドボックス設定をフルディスクアクセスに変えよう。
zsh という意味ではないです、Terminal.app のみに適用される。

full_disk

それと、こんなのを見つけたので前回の PyObjC を試す。

Macで実行しているアプリがIntel x86_64かApple Silicon arm64アーキテクチャかをメニューバーに表示してくれるオープンソースのユーティリティ「Silicon Info」がリリース。 | AAPL Ch.

端末から Python3 に渡して起動すると arm64 になる。
Atom から command+option+T で起動する端末は arm64 になる。
Atom から atom-runner でプロセス起動すると Intel になる。

Rosetta2 で起動した Python3 でも PyObjC は使えたんだね。
まあ Atom が arm64 になるまで端末利用かなって。

後は apache だな。
どうせまたアップデート毎に httpd.conf が初期化されるので。

#!/usr/bin/env python3

'''
    # Run on root
    sudo python3 httpd_rewrite.py
    #
    # start or restart
    sudo apachectl restart
    #
    # Auto start of service
    sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
'''

import shutil

CONF = '/etc/apache2/httpd.conf'
out = []
# User Rewright
ROOT = 'DocumentRoot "/Users/sasakima-nao/www"\n'
DIRC = '<Directory "/Users/sasakima-nao/www">\n'

shutil.copyfile(CONF, 'backup_httpd.conf')

with open(CONF, 'r') as f:
    for line in f:
        if 'php7_module' in line:
            out.append(line[1:])
        elif line.startswith('DocumentRoot'):
            out.append(ROOT)
        elif '<Directory "/Library/WebServer/Documents">\n' == line:
            out.append(DIRC)
        else:
            out.append(line)

with open(CONF, 'w') as f:
    for s in out:
        f.write(s)

以前 JXA で作ったけど手抜きだったので Python で描き直し。
これで同じ LAN に繋がった iPhone 等から
http://コンピュータ名.local
でアクセスできる、てか今までと変わっていなかった。

http

Mac の人は面倒なのに vim で書き換えしている人ばかりなのは何故?
スクリプトを作っておけば初期化されても一発で書き換えできるのに。
Python とかのスクリプト言語ってこういうことをする為にある。

これで 2018 Air の頃と同じように使えるようになった。
後は Lightroom か、arm64 版も出たみたいだし。
その前にサブスクについてもう少し調べなきゃだが。

M1 Mac JXA and PyObjC

会社の都合で休日出勤は無しなので M1 Air をしっかり試す。
たしかパワーは 2019 Air の五倍なので筆者の 2018 からだと八倍くらいか。
ログイン画面まで 15 秒、パスワードを打ち込みプラス 15 秒でもう使える。
他に Web でベタ褒めされている件、あれらは全部本当だった。
こんなの筆者の知っている Macbook Air じゃない、怪物にも程がある。

とりあえず再構築、Atom を公式サイトから入れよう。
起動しようとすると Rosetta2 をインストールしますか?とアラートが。
インストールを選ぶと一瞬で入ったから内部で有効化しただけだと思うけど。
ぶっちゃけ来年くらいまでは全員が入れると思う。

Atom を Gedit のように使う – Paepoi

再構築完了、書いてて良かった自前カスタムのすべて。
早速 JXA を試そう、ES2020 は対応されているか。
?? 演算子と BigInt と globalThis をまとめてテスト。

#!/usr/bin/osascript

const p = globalThis.print ?? console?.log;
p(12341234123412341234n *2n);

atom_run

動くじゃないの。

GNOME 3.38 Gjs | Paepoi Blog
import 関数は使えない。
Promise も動いた、ただ筆者には便利さが解らない。
matchAll も動く、Gjs と同じく詳細は出力されないけど。

だいたい Gjs と同じって感じ。
ただし、NSMakeRect のバグはそのまんまだ、やっぱりやる気無いのね。

しかしマジで Python2 がデフォルトで入っているのがなんとも。
PHP は 7.3.22 か、さくらインターネットでさえ 7.4.10 なのに。
perl と ruby はどうでもいい。

端末で python3 と打ち込むと CommandLineTools のダイアログ。
インストールすると Python3 が使える、3.8.2 だ。
普通に使えるけど、PyObjC が pip3 でインストールできない。

Python Release Python 3.9.1 | Python.org

macOS 64-bit universal2 installer
というものが公式にあった、これならイケるかな。
CommandLineTools を先に入れないと 3.8 に上書きされるので注意。
インストーラに従うだけで 3.9 にアップグレードできる。
んで、pip3 のアップグレードを行う必要があった。

# pip upgrade
pip3 install --upgrade pip
# install
pip3 install -U pyobjc

PyObjC Tips – Paepoi

PyObjC

PyObjC もコレで問題なく動くじゃないの。
少し面倒だったけど混迷期だからしかたがないね。

2020 Air 2

M1 Macbook Air が届いたけど忙しいのでちょっとだけの続き。
Terminal.app を開くとなんじゃこれ、hostname が酷い。

コンピューター名
漢字の名前のMacbook Air

hostname
漢字の名前を無理矢理ローマ字化noMacBook-Air

この hostname じゃプロンプトが長すぎる。
これは設定の共有のところで変更できる。
後は .zshrc を作って好みにプロンプトのカスタムを。

hostname

相変わらずスクリーンショットは 144dpi なのね。
72dpi に変換するスクリプトを Fedora からコピーしなきゃ。
とりあえず Fedora から ssh 接続。
上記の共有設定で「リモートログイン」にチェックする。
アクセス許可に自分を指定する。

ssh ユーザー名@ホスト名

うん M1 になっても普通にログインできるね。
ログインシェルはやはり zsh のようです。
ログインできるなら後は Nautilus から sftp でコピペできる。

Fedora Tips | ファイル共有 – Paepoi

いやまて、コピペじゃゲートキーパーにブロックされないか?

サンドボックスに許可を与えればスクリプトはコピペでも動くね。
よし再構築は結構簡単そうだぞと、今日はこのへんで。

2020 air 1

M1 MacBook Air が届いた。
でも仕事が忙しいので初期設定のみ。

iCloud にサインインしたら色々自動化されていてびっくりした。
iPhone に設定したメールアカウントや登録カード等が勝手に出る。
おかげでほとんどキーボードを打たないで初期設定完了。

少し使ってみる。
あれ?ファンクションキーから Launchpad のアイコンが消えた。
と思ったら Dock にアイコンが、この機能よく使っていたのにな。

その F4 の所には SpotLight が割り当てされている。
command+space 割り当てたり、どんだけ使って欲しいねん。

で、やっぱり control+space と command+space を間違える。
おまけに fn キーでも切り替えできるようになっていた。
とっととキーを入れ替えて fn キー切り替えも無効化、ほぼ全員やると思う。

細かいけど、US 配列の買い替えな人にしか解らないことだけど。
Option キーの上にあった alt の文字が記号になってしまった。
どれが alt キー相当なのか迷う、ということは無いかもだけど。

ここまでライブ変換を久々にやってみたけど、やっぱり無理w
こんな機能より「全角空白を打てない」オプションをくれ。
ibus-kkc に慣れすぎて切り替えが面倒くさいのねん。

しかし 2018 と色を同じにしたせいか全然代わり映えしないな。
でもやっぱりキーボードはいいね、うるさくないし。
うるさいことより耳障りだったペチペチ音ではなくなったのは大きい。

ぱっとつかってみての感想のみ、パワーとかはまた今度。

GNOME 3.38 Gjs

すっかり遅くなってしまったけど、GNOME 3.38 の変更点。
筆者に関係ありそうなのは Gjs だけだな。

開発者、システム管理者向けの新規事項

String.replaceAll() なんかはメソッド名で別るんだけーがさぁ。
?? と ?. オペレーターの追加、とあるけど説明無し、何だよコレ。
「 javascript nullish check 」で検索。

JavaScriptのOptional ChainingとNullish Coalescing Operatorでnullやundefinedと戦う

#!/usr/bin/gjs
 
//const p = console?.log ?? print;  // Error
const p = this.console?.log ?? print;
p("SUZUKIS Motorcycle is Cool!");

Gjs には console オブジェクトが無い、ということで単純にやってみた。
オブジェクトを直接 (undefined|null) かどうかは調べられないのね。
プロパティが (undefined|null) かどうかのチェックということね。
グローバルオブジェクトはルートの this から辿れる、いやこんな使い方普通はしない。

#!/usr/bin/gjs

if (typeof console === 'undefined')
    print('print');
else
    console.log('console');

undefined だけなら昔ながらの方法があるし、筆者も使っていた。
null かどうかも調べたい時に or 演算する手間が省けるようです。
というかコレ ES2020 の新規機能ってことみたい。

JavaScriptの次の仕様ES2020で追加されることが決定した新機能まとめ – ICS MEDIA

これ以外の ES2020 も使えるかテスト。
import 関数は使えない。
Promise はエラー、よくわからない。
matchAll は動く、Gjs では詳細は出力されないけど。
globalThis は Gjs では関係ない、てか this でよくね?
BigInt は GNOME 3.36 で既に対応していた。

ということで、今日の木曽川。

tsugumi

ツグミ、でかいスズメじゃないよ冬しかいないよ。

kogera

コゲラ、この可愛らしさでキツツキってのがまた。

enaga

エナガ、シジュウカラやメジロと混群していた。

今日はカメラを持った人を結構見た、巨大な白レンズも何人か。
けれど皆カモばかり撮っていた、小鳥も沢山いるのにもったいない。
てか爺さんばかり、なんか道の駅のバイク置き場カヨって感じ。
若い人も電車やコスプレばかりじゃなく小鳥も撮ろうよ。