macOS Monterey JXA

macOS Monterey の JXA は NSRect のバグが無くなった。
ということで、今の知識で NSWindow を作ってみたらどうなるか。

いや PyObjC のほうが簡単なんだけど、デフォルトで入っていないのが。
JXA ならどんな Mac でもそのまま動かせるという利点があるので捨て難い。

ただ JXA では PyObjC みたいに class にできないんだよなぁ。
ネットで簡単に見つかる方法では全部グローバル変数にするしかないのが。
そもそも JavaScript の class は他の言語の class とは違うし。
なので GNOME の Gjs もアクロバットな手段で class っぽくしている。

ObjC.registerSubclass を上手く利用してソレっぽくやってみよう。
追加メソッドはどう書けばいいのかな?とか。

#!/usr/bin/osascript

ObjC.import('Cocoa');

//let wins = [];

ObjC.registerSubclass({
    name: 'AppDelegate',
    protocols: ['NSApplicationDelegate'],
    methods: {
        'applicationDidFinishLaunching:': function (notification) {
            let window = $.MyWindow.alloc.initWithContentRectStyleMaskBackingDefer(
                $.NSMakeRect(0, 0, 300, 100),
                $.NSTitledWindowMask
                | $.NSClosableWindowMask
                | $.NSMiniaturizableWindowMask
                | $.NSResizableWindowMask,
                $.NSBackingStoreBuffered,
                false
            );
            window.makeKeyAndOrderFront(window);
            $.NSApp.activateIgnoringOtherApps(true);
            //wins.push(window);
        }
    }
});

ObjC.registerSubclass({
    name: 'WinDelegate',
    protocols: ['NSWindowDelegate'],
    methods: {
        'windowWillClose:': function(notification) {
            console.log('MyApp Close !');
            return $.NSApp.terminate(0);
        }
    }
});

ObjC.registerSubclass({
    name: 'MyWindow',
    superclass: 'NSWindow',
    propertyies: {},
    methods: {
        'initWithContentRect:styleMask:backing:defer:': function
        (contentRect, style, backingStoreType, flag) {
            let _this = ObjC.super(this).initWithContentRectStyleMaskBackingDefer(
               contentRect, style, backingStoreType, flag);
           _this.title = $('JXA NSWindow');
           _this.delegate = $.WinDelegate.new;
           // Button
           let button = $.NSButton.buttonWithTitleTargetAction('button', this, 'onButtonClick:');
           button.setFrame($.NSMakeRect(10, 10, 200, 36));
           _this.contentView.addSubview(button);
           // return
            return _this;
        },
        'onButtonClick:': {
            types: ['void', ['id']],
            implementation: function(sender) {
                sender.setTitle('Clicked!');
            }
        }
    }
});

/**
 * Application
 */
$.NSApplication.sharedApplication;
$.NSApp.setActivationPolicy($.NSApplicationActivationPolicyRegular);
$.NSApp.mainMenu = function() {
    let mainMenu = $.NSMenu.new;
    let itemApp  = $.NSMenuItem.new;
    mainMenu.addItem(itemApp);
    let menuApp  = $.NSMenu.new;
    itemApp.setSubmenu(menuApp);
    // quit menu
    let itemQuit = $.NSMenuItem.new;
    itemQuit.initWithTitleActionKeyEquivalent('Quit App', 'terminate:', 'q');
    menuApp.addItem(itemQuit);
    return mainMenu;
}();
$.NSApp.setDelegate($.AppDelegate.new);
$.NSApp.run;

nswindow

こんな感じになった、
ボタンのハンドラは delegate ではなく this に届くようだ。
オーバーライドは types 指定不要なのね、ふむふむ。
これだけ解れば応用でなんとかなりそう。

ただ PyObjC と違って NSWindow がガベージコレクションされないんだが。
let 指定ならばハンドラを抜けたら破棄されるはずなんだけど、何故だ?
Python とは破棄対象の選定方法が違うんだろう、知らんけど。

ところで Monterey で今頃気がついたんだけど。

power

iOS みたいに充電の保留機能が付いたんだね。
筆者は滅多に持ち歩かないんで意味はないかもだがけど。

ibus Mozc

ごめん、GNOME 41 でブランクスクリーンを「しない」の選択肢あった。
ポップアップをスクロールで Never が出てくる、わかり辛いよ!

それと今回初めてやってみたんだけど。
ssh の設定って $HOME/.ssh 以下をコピペで引き継ぐことできるのね。
公開鍵ってこんなものなのか、もっと面倒だと思っていた。

しかし前回の続きを書こうと思ったけど、別に無いな。
だってほとんど変わっていないんだもの、中身は変わっているはずだけど。

それから、Mozc はやっぱり筆者的にはダメだ。
変換精度は macOS 標準入力メソッドには及ばないなりにイイんだけど。
US 配列でテンキーレスの Real Force では肝心の使い勝手が。

kkc setting

この切り替え時の入力モードを固定する機能がないと本当に困る。
macOS でも US 配列は入力メソッドを切り替えして使うんですよ、直接入力いらない。
Mozc だと切り替えで直接入力になっていたりするし設定が見つからない。

それとサジェストのウザさが Visual Studio Code のイライラを思い出す。
あれでアプリを作っている人おらんだろって思うんだけど、人気なんだよな…
macOS の入力メソッドではあまり気にならないのはトータルデザインの差だろうか。

それと設定ダイアログがおもいっきり GTK2 だし Windows 臭いし。
統一された操作性や見た目というものがさ、Qt アプリも気に入らない。
関係ないけど Windows Explorer が F11 でフルスクリーンになると先日知った。

JIS 配列キーボードしか知らず Windows 文化が絶対な人用って感じ。
コレを勧めている人はみんな VLC Media Player を入れてフルスクリーンを Alt+Enter に変更している Windows 信者だと思う。
筆者は ibus-kkc と celluloid にします。

それにしても、Linux を便利とか言っている人達。
ssh や python を使わない人はいったい何が便利なんだろう?
上記のように画像に線を引くの一つにもアプリを入れなきゃいけないのに。

ちなみに Drawing っていうシンプルなアプリを使った、コレでいいや。
macOS なら Preview.app で普通に線や文字が入れられるんですけど。
ちなみに macOS は動画の切り貼りさえ QuickTime 一つで可能。

ということで、今日の五条川。

kogamo

コガモ発見、冬鳥が続々とやってきていますね。
五条川を一発変換してくれる kkc なのに何故不人気なのか。

Fedora 35 Install

インストール方法は今までと変わらないので省略。
サードパティリポジトリを有効にするかの指定が増えたくらい。

hostname が localhost-live になっている。
hostnamectl でとっとと変更しよう。

gnome-softwere を起動しても何も表示されないんですけど。
アップデートしたら表示されるようになった。

アプリ検索で google-chrome は出てくるようになった。
でも Celluroid Celluloid は出てこない、使えないなぁ。

アップデートに動画 Codecs があるけど。
相変わらず何も再生できないね、RPM Fusion 必須。
てか何で肝心な libav が最初には入っていないんだよ!

その RMP Fusion リポジトリ追加を Firefox が拒絶する。
無視して OK し続ければ追加できた、いやコレどうなんだ?
こんなセキュリティは SELinux の仕事だろ、って思うんだけど。
Linux はもっと自由でないと、いや狐は Linux 専用じゃないし。

入力メソッドは今回も ibus Anthy だ。
PageDown でページめくりできないままなのね。
ずっと ibus-kkc に変更して使ってきたけど今回は Mozc とやらを。
macOS でも勧めている人いるし、食わず嫌いもあれだし。

と思ったけど US 配列のキーボードだとチト使いづらいなコレ。
入力モードひらがな固定ってできないの?全角半角キー無いんだけど。

ブランクスクリーンで「しない」の選択肢が無くなった、何故?

Gedit プラグインで v3 用プラグインがまだそのまま使える。

Fedora Tips

うん変わっていない、てか変わった気がしない。
続きは明日、夜勤行かなきゃ。

macOS Monterey

macOS を Monterey に遅ればせながらアップグレード。
Fedora とは違ってスッゲェ時間が掛かると解っているので休日まで待った。
12.13GB か、前の 14GB より減ったとはいえ酷い。

そろそろ全部終わったかな?
って画面を表示させると「インストールします」ダイアログ。
ガックリ。。。。。

[続ける]-[同意] って感じでボタンを押さないとインストールが始まらない。
今度こそ終わったかな?って見ると「再起動」ダイアログ。
ションボリ。。。。。

その再起動が又時間が掛かる。
終わった!と思ったらフェイントだった。
ゲンナリ。。。。。

M1 でコレだぞ、Intel Air だったらドンダケだったんだ?
アップグレードくらいボタン一発でスパッとやってくださいよ。
あーやっとこさ終わった。

それはいいとして。

Apple、macOS 12 MontereyにPython 2.7.18などを同梱してリリース。Big Surまで同梱されていたphpは削除されるので注意を。

マジで PHP は削除されるのね。
httpd.conf が初期化されるのはいつものこと。

php

WordPress の時代にコレって macOS を Web 開発に使うなってメッセージ?
Fedora のように dnf コマンドで即座に導入できるってわけでもないのにさ。
いったいどんな政治的なやりとりがあったのか、みたいな。
これだから Fedora も併用しなきゃなんだよ、macOS で開発は自由が無い。

自力で Python3 を入れている人は残る。
3.10 になっているのか、アップグレードしとこ。
macOS 64-bit unibersal2 installer で M1 ネイティブだよ。

Python Release Python 3.10.0 | Python.org

Lightroom は問題なく動く、コレのために Mac を使っているのだし。

それと Fedora から SSH てか SFTP で簡単アクセスする用の
~/.ssh/id_rsa.pub
とか設置していたものも普通に残っているしアクセスもできる。

そんなことより何より。

#!/usr/bin/osascript

ObjC.import('Cocoa');
let r = $.NSMakeRect(0, 0, 10, 10);

console.log(`width = ${r.size.width}`);

jxa

JXA での NSRect バグがやっと、ついに修正されたぞ!
Big Sur アップデート毎にコレ動かしてションボリしてたのよね。
待ちわびた、待ちすぎて PyObjC 万歳になっちゃった。

Autumn colors

すっかり冬とか書いていたけど本当は紅葉写真の季節です。
バイクの聖地せせらぎ街道の紅葉が見頃のようです、しかし寒い!
twitter 検索すると午前は氷点下って、ちょっとヘコたれた。

1

ということで名城公園でごまかしてみようかなって。
しかし俺って風景写真が本当にヘタクソだ。
散々撮ってブログに上げれそうなのがコレ一枚って。
せせらぎ街道の紅葉はもっと練習してからだw

2

シジュウカラ、やっぱり鳥さんだよ。
1/60 秒でよくこんな止まったのが撮れたなぁって。

3

コゲラ、さっきもだけどなんか被写体がブレるなぁ。
よく見たら F10 になっていた、レンズ交換する時は注意しないと。

4

オナガガモ、名古屋城の堀を覗くと群で寄ってくるんだが。
誰か餌でも巻いているんだろうか。

5

オオバン、水面に顔が鏡像したのは偶然です。
木曽川で超遠いカモを撮っている人達、名城公園のほうがいいよ。

いや風景写真の練習をしろよ俺。