Fedora 30 Upgrade

Fedora 30 来ました。
下は [ダウンロード] ボタンを押した状態、今回はアップグレードです。

UnitedRPMs リポジトリを一時的に Disable にしないと更新できないエラーが出る。
無効にして再開、[インストール] ボタンが出るので押してパスワード。
しばらく待っていると Fedora 30 になっていた、アップグレードおしまい。

見た目の変更点とかはインストールだけなブロガーが書くだろうから無視して。
ずっと使ってプログラミングしている人しか解らない変更点なんかを。
てか、Linux ってプログラミングしない人には不便なだけの OS なんだけど。

何より、Gedit てか GtkSourceView が改善された!
タブのアクティブ毎にカーソル位置へ勝手にスクロールするのがウザかった。
それが何か打ち込むまで勝手にスクロールをしなくなった、マジで嬉しい。

Gedit のタブをドラッグして別ウインドウ時のアニメーションが復活。
前に戻っただけじゃんというのは置いておいて。
Nautilus は何故コレをできなくしてしまったのだろう?

Nautilus でファイルのドラッグ移動が失敗する場合があるのは変わっていないな。
ただ筆者はドラッグがスゲェやり辛い Macbook Air 2018 を併用しているということで。
command+X, command+V で移動が普通になっているので Ctrl+X でのファイル移動に苦は無い。

デフォルトじゃないけど Geary(メーラー) の起動が死ぬほど遅くなった。
追記: アップデートで普通になった
何故だろう、思いっきり GTK3 アプリなのに。
Google Chrome, KeepassXC, GNOME MPV 等は問題無し。

一番気になるアプリケーションメニューの廃止。
ハンバーガーメニューにする前の Comipoli 0.3.4 を起動してみる。

ココに出るだけか、あわてて作り変える必要は無かったな。

GNOME アプリは元の位置に「新しいウインドウを開く」が出る。
我がアプリではココが空になる、どうやるか後で調べる必要があるな。
「詳細を表示する」を選ぶと gnome-softwere の該当ページが開く、これ必要か?
ちなみに我がアプリ等の自前インストールは「見つかりません」と出る。

設定のアプリケーションって何かと開いたら我がアプリまで。
*.desktop ファイルを解析している、というか *.desktop を編集できるってか。
追加ができないのではあまり意味は無いと思うんですけど。

後は特に変わったような気がしない、何か気が付いたら又。

そうそう、我がアプリの Comipoli はハンバーガーメニュー化だけで問題無し。
Y901x は引数付き起動ができなくなっていた!
Gjs, Clutter, GStreamer のドレが原因か解らないけどなんとかしなきゃ。

二時間くらい調べてなんとか原因が判明。
ClutterGstVideoSink で得る GstPad が null になっている。
別の手段で動画のオリジナルサイズを得る必要があるなと。

ClutterGstTypes: Clutter Gst 3.0.24 Reference Manual

ClutterGstVideoResolution 構造体に width, height があるな。
だったらこうすればサイズが得られるのかも?

var Y901xWindow = GObject.registerClass({
    GTypeName: 'Y901xWindow'
}, class Y901xWindow extends Gtk.ApplicationWindow {
    _init(app) {
        super._init({application: app});
        // etc...
        this.player = new ClutterGst.Playback();
        // Ready
        this.player.connect('ready', (player)=> {
            this.player.set_playing(false);
            // Get Origin Size
            let vsink = player.get_video_sink();
            /* old
            let it = vsink.iterate_pads();
            it.foreach((pad)=> {
                let caps = pad.get_current_caps();
                let struct = caps.get_structure(0);
                this.src_width = struct.get_int('width')[1];
                this.src_height = struct.get_int('height')[1];
            });*/
            // new (Fedora 30)
            let frame = vsink.get_frame();
            this.src_width = frame.resolution.width;
            this.src_height = frame.resolution.height;

イケた!

ということで Comipoli 0.3.5, Y901x 1.2.1 公開。
Linux アプリケーション – L’Isola di Niente

Y901x のほうは変更点が多いけど解説すると長くなるのでまた今度。

ところで Fedora 29 の時に勘違いしていたけど GTK+ の 2 年枚更新は前回だったのね。
だから少し仕様が変わっていたのか、次の仕様変更は Fedora 33 なのね。
筆者はそれに合わせてクリーンインストールする予定。

30

Fedora 30 が予定通りに出ている!
Get Fedora: download our Linux-based OS for developer desktops, running containers, and more

絶対にまた遅れると思っていたのに。
でも更新通知は来ていない、面倒だから今回はアップデートでいくつもり。

手動更新ボタンを押したらこんなの出た。
gnome-softwere を更新しなきゃいけないのかな?
さっそく入れたけどやはり通知はこない。
あーもう、更新は明日にしよう。

ところで Y901x はもう更新をヤメようかと思ったけれど。
コレをヤメたら JavaScript を勉強する道具が無くなると気がつく。
comipoli は Python に戻しちゃったし、しょーがないから更新を続けるわ。
というか今日は雨だし一日中やっていた。
細かいことは Fedora 30 での動作確認の後で。

GtkPopover

Fedora 30 の準備をそろそろしなければ。

GNOME が 3.32 になって ApplicationMenu が非推奨に。
GTK3 アプリ以外には広がらなかったからしかたがないかもね。
Android のメニューボタンみたいなものだし広まってもよさげだったのにね。
何故か反 Apple みたいな輩がボロクソに言っていたり、根暗ってマジで意味不明。

我がアプリもハンバーガーメニューに変更しなきゃ、面倒だなぁ。
と思ったんだけーが。

#!/usr/bin/env python3

from gi.repository import Gtk

class ComipoliMenuButton(Gtk.Button):
    def __init__(self):
        # MenuIten
        menu_open  = Gtk.ModelButton(active=True, action_name='app.new_file_action', text="_Open", use_markup=True)
        menu_new   = Gtk.ModelButton(active=True, action_name='app.new_window_action', text="_New Window", use_markup=True)
        menu_pref  = Gtk.ModelButton(active=True, action_name='app.preference_action', text="_Preference", use_markup=True)
        menu_kbd   = Gtk.ModelButton(active=True, action_name='app.shortcut_action', text="_Keyboard Shortcut", use_markup=True)
        menu_about = Gtk.ModelButton(active=True, action_name='app.about_action', text="_About", use_markup=True)
        menu_quit  = Gtk.ModelButton(active=True, action_name='app.quit_action', text="_Quit", use_markup=True)
        # Box
        vbox = Gtk.Box(visible=True, margin=10, orientation=Gtk.Orientation.VERTICAL)
        vbox.pack_start(menu_open, False, False, 0)
        vbox.pack_start(Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL), False, False, 0)
        vbox.pack_start(menu_new, False, False, 0)
        vbox.pack_start(menu_pref, False, False, 0)
        vbox.pack_start(menu_kbd, False, False, 0)
        vbox.pack_start(menu_about, False, False, 0)
        vbox.pack_start(Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL), False, False, 0)
        vbox.pack_start(menu_quit, False, False, 0)
        # Hamburger Image
        image = Gtk.Image(icon_name='open-menu-symbolic')
        # init
        Gtk.Button.__init__(self, can_focus=False, focus_on_click=False, image=image, visible=True)
        # Popover
        self.popover = Gtk.Popover(relative_to=self)
        self.popover.add(vbox)

    def do_clicked(self):
        if self.popover.props.visible:
            self.popover.hide()
        else:
            self.popover.show_all()

を作ってみた。

GtkApplication から Gio.Menu だけを消す。
app.*** と指定していたアクション名を GtkModelButton でそのまま指定。
後は掟どおりにパッキング、relative-to に自分を指定。
GtkPopover のクリック処理もオーバーライドでやってしまえ。

って、コレだけで動いてしまうジャン!
本体に新たなハンドラを書く必要もアクションを新規で作る必要も無かった。
つまり変更は超簡単です、本体に F10 でメニュードロップ追加を忘れずに。

後はフルスクリーン時の F10 キーをどうするかだ、斜めにポップアップするんだが。
それとデザインがなんかイマイチ、Fedora 30 が出るまでに色々考えておく。
てか Y901x はどうしよう、スタンドアロンの動画プレイヤーってもういらなくね?

いやまあ、AppKit では分離があたりまえなので同じようにできないかなって。
AppKit より簡単だった、フレームワークは色々使ってみると経験値が上がるね。
そんなことより、やっぱり RealForce は快適だ!

f-string

PEP 498 — Literal String Interpolation | Python.org

f-string なんてものが Python 3.6 から使えるのか。

#!/usr/bin/env python3

suzuki = 'スズキ'

# Python2 互換
print('%sのバイクはカッコイイ' % suzuki)
# Python3 format
print('{0}はスクーターもカッコイイ'.format(suzuki))
# f-string (3.6 or lator)
print(f'{suzuki}は自動車もカッコイイ')

# raw f-string
lf = '元からある改行はダメだけど\n'
print(fr'{lf}この \n は改行されない')

# docstring
doc = 'ヒアドキュメント'
print(f'''これなら ' も " も普通に使える
まるで{doc}だね''')

# ゼロ詰め
for n in range(3):
    print(f'{n:#03d}')

なるほど。

当然だけど f-string が一番短く書ける、かつ理解しやすい。
ゼロ詰めが可能なので js のテンプレートリテラルより便利。
今後 Python はコレでいこう。

vscode だとヘンテコな色分けをしてくれます。
てか f’ と打ったら閉じクォートを勝手に補完するのをヤメてくれ!
閉じクォート補完設定は OFF にしているのに、別設定なのかよ。
本当に余計なことばかりするクソエディタだな。

私的には $ 記号が欲しかった、sh, php, js 互換になるし。

Graphics

18 日に上げた PyObjC Tips の日付が 2018 年になってた!
よしさっさと更新してごまかしてまえwwwww

PyObjC Tips – L’Isola di Niente

てか、AppKit に関しては comipoli で必要な API しか調べていないんで。
全部調べて作ってだとスゲェ時間が掛かるので細切れで出すことにした。
ゴールデンウイークは 10 連休なのでもちっと進めたい。

あっちにも書いたけど。
Cocoa Dev Central: Cocoa Graphics with Quartz
Cocoa Dev Central: Cocoa Graphics with Quartz II
すごく解りやすいよね。
今後のページ作りの参考にしよう。

cairo だとココとか。
Cairo samples

日本語でこの手を探すとスクショだらけな Xcode の使い方解説ばかりで困る。
Visual Studio もそうだったね、Mac も Windows も本当に何も変わらないなと。
インストールのスキルしか上がらない Node.js よりマシ程度。
日本人はコードを書くのが嫌いなんだろうか?