Hasu

今週の土日はいかにも梅雨らしい雨模様。
湿気が凄いのでエアコンの効いたお家でのんびり。
流石に飽きた、ハスの花でも撮影にいこう。

hasu

近場の名所を知らないので名古屋市の某公演へ。
ポケ GO のおかげでココにならハスがあるって知っていたので。

hasu

標準ズームでは無理なのでここからパナライカ 100-400mm へ。
300mm にて、ワイド端とテレ端以外を意図的に使ったの初めてかも。

hasu

しばらくすると雨に、よし狙ったとおりだ。
ワイド端にて、雨水の線が思ったより細いなぁ。

hasu

テレ端で、こっちのほうがはっきりと雨が写るのね。
ぶっちゃけさ、超望遠ってテレ端とワイド端しか使わないよね。

hasu

花もいいけど天然のワイングラスもいいじゃないか。
雨中の撮影も楽しいや、いや湿気はどうにもならんけど。

ところでこの E-M5 Mark3 なんだけど。
EVF を覗いた状態から液晶タッチで AF ターゲットが動くんだが。
以前はできなくて困ったはずなのに何故だ。
ファームウエアもそのまんまだしなにか設定弄ったせいかな?
イマイチこいつの設定を筆者は理解できていない。

signal

先日 Python コードが実行できなくなっていて焦った。
でもソースを他のディレクトリに移動したら普通に動いた。
パーミッションや SE Linux コンテキストは問題無い、あれ?

本日原因が判明。
signal.py というファイルが同一ディレクトリにある、中身は関係ない。
from gi.repository import *** を行う。
という条件を満たすとエラーになる、他の from なら問題ないようだけど。
ついでに __pycache__ も同一ディレクトリに作られてしまう。

signal

import しなくても存在するだけで影響を受ける場合があるんですね。
モジュールに存在するファイル名を付けては駄目というお話でした。

それだけではアレなので。
下記のサンプルコードがいつのまにか GTK4 になっていました。

Overview ? PyGObject

いつまで GTK3 のまんまなんだよと思っていたけどやっとか。
set_application_name は意味無いだろ、は置いといて。
せっかくこんなネタなので signal の所を見てみよう。

Signals ? PyGObject

PyGObject で signal の定義はデコレータを付けるだけなのか。
シグナル名は関数名そのままってことでいいのかな、実験してみよう。

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw, GObject

class Win(Gtk.ApplicationWindow):
    def __init__(self, a):
        manager = Adw.StyleManager.get_default()
        manager.set_color_scheme(Adw.ColorScheme.DEFAULT)
        Gtk.ApplicationWindow.__init__(self, application=a)
        button = Gtk.Button(label='Click!')
        button.connect('clicked', self.on_button_clicked)
        self.set_child(button)

    def on_button_clicked(self, button):
        self.emit('my_signal')
        print('Button Signal')

    @GObject.Signal
    def my_signal(self):
        print('My Signal')

app = Gtk.Application()
app.connect('activate', lambda a: Win(a).present())
app.run()

signal

うん、普通に emit をキャッチできますね。
非同期になるわけではないしこういう使い方では関数と変わらないですが。
自作 widget に signal を実装したい場合こんなに簡単にできるみたいです。

Signals ? Building an Application ? GTK4 + GJS Book

ちなみに Gjs はこう、メンドクセー。
そりゃみんな PyGObject を選ぶよって。

hibari

今日は何故か芝生の中でヒバリのメスがハアハアしていました。
暑いなら日陰にいけばいいのに、日陰はカラスが占領していたけど。

Gakuajisai

十円ハゲみたく外側にだけ花が付いたアジサイ。
ハゲの部位がだんだん大きくなり普通のアジサイになると思っていた。

ガクアジサイの花言葉|種類、特徴、色別の花言葉  | LOVEGREEN(ラブグリーン)

あれってガクアジサイというアジサイの原種だったんですね。
しかも花に見える部位はガクで本当の花は十円ハゲだったなんて。
てことで 12-40 PRO レンズを持って小牧の某公園へ。

gakuajisai

改めて本当の花部分を見ると凄い複雑な形なんだなって。
久々にフォーカスクラッチを使った、存在を忘れる使用歩度。

gakuajisai

クリオネが沢山いるみたいな何ともいえない花なんですね。
今まで気にしたことなかった、新たな発見はジジイになっても嬉しい。

gakuajisai

いつもの 17mm にしてフォーカスは十円ハゲに。
我ながらイイ感じ、やっぱりオリンパスは青がいい。

gakuajisai

クマバチが現れた、ガクには目もくれず花ばかりに止まる。
なるほど、蜂はわかっているんだねって。

なんだよホンアジサイよりガクアジサイのほうが綺麗じゃん。
いや人によるけど、花も鳥も知れば知るほど面白くなる。

gnome-text-editor: snippets

gnome-text-editor には謎の設定がある。

dconf

コードスニペットの有効を切り替える設定だと思うんですけど。
F1 でのヘルプにも公式サイトにも説明が無い、いったい何なんだコレ?
試しに Gedit のスニペットファイルを同様にコピーしても動かない。

ぶっちゃけ筆者を含めて今でもほとんどの人が Gedit を使っていると思うけど。
Gedit は GTK3 だしメンテも消極的、数年前の Python2 と同じ状況。
こっちでもスニペットが使えるならいいかげんに切り替え候補にはなる。
ということで使い方を自力で調べてみる。

gio open /usr/share/gtksourceview-5/snippets

default

こんなディレクトリがあった。
licenses.snippets を Gedit とかで開いてみよう。

<?xml version="1.0" encoding="UTF-8"?>
<snippets _group="Licenses">
  <snippet _name="GPLv3 or later" trigger="gpl3" _description="File header with GPLv3+ license">
    <tooltip position="1" text="The name of the file belongs here"/>
    <tooltip position="2" text="The name of the author belongs here"/>
    <tooltip position="3" text="The email address of the author belongs here"/>
    <text languages="python;python3;"><![CDATA[# ${1:$TM_FILENAME}

あぁなるほど、こんな XML を書けば適用できるのね。
というかデフォルトでは GPL3 等のライセンスしか登録されていないってか。

とにかくデフォルトのを試す、最初の設定を true に設定しておくのを忘れずに。
python ファイルを gnome-text-editor で開く、gpl3 と打ち込み [Tab] キーを叩く。

tabkey

XML の指定が違うだけでスニペットの使い方は Gedit と同じですね。
後は名前 [Tab] 日付 [Tab] メールアドレス [Tab] で完成っと。
使い方が解ったところで追加のスニペットを登録してみる。

<?xml version="1.0" encoding="utf-8"?>
<snippets _group="Shebang">
  <snippet _name="Insert Shebang" trigger="sh" _description="pass">
    <text languages="python;python3"><![CDATA[#!/usr/bin/env python3
$0]]></text>
    <text languages="js"><![CDATA[#!/usr/bin/gjs
$0]]></text>
    <text languages="sh"><![CDATA[#!/bin/sh
$0]]></text>
  </snippet>
</snippets>

sh をトリガーにしてシバンを流し込む例。
シェバングなんて読んでは駄目ですよ、末尾の g は発音しないと中学で(以下略
コレに snippets の拡張子を付け以下に保存、ディレクトリは自分で作成。

~/.local/share/gtksourceview-5/snippets

set

後は py や sh ファイルを開いて sh と打ち込み [Tab] キーを。
こんな感じでスニペットを追加登録できるようです、チトめんどいぞ。

ところでシバンといえば。
そもそも Fedora 38 な現在 /usr/bin/python は Python3 へのリンクなんです。

link

なので今では python に 3 指定は不要なんです、ただ Gedit を使う限りは必要。
このシバンが無いと Gedit は Python2 と認識してしまう困った奴なんです。
3 指定無しで match case 文を書けば色分けされないことがすぐ解るよ。
gnome-text-editor なら 3 指定は不要なんですけど。
それがそろそろ気になってきた、ということでこんなことやってます。

いや筆者は macOS で sublime text を購入しているので Linux でも使えるんだけど。
なるべくならデフォルト (GTK4) の UI を使いたいよねって。

Sasagoi

梅雨の休日はプログラミングを、と考えていたのですが。
今日の尾張地区は雲ひとつない晴天です、よし野鳥を探すぞ。
紫陽花もそろそろと思ったけどまだイマイチつぼみですね。

isohiyodori

イソヒヨドリのメスを見つけました。
柵の形から解るだろうけど 5/28 のオスと同じ場所にて。

isohiyodori

同じ個体かは判らないけれど物凄い近くにも突然現れました。
人懐っこいんですね、こっちを向いている所を撮れなくて残念。

sasagoi

ササゴイ、枝が邪魔だけどこの角度でしか撮れなかった。
五条川で見たのは初、てゆーか川の中以外で見たのも初。

kiji

そしてキジ、まだおるでー。
すっかりオチになってしまった感、夕方にいることが多いし。

しかしカメラボディは E-M5 Mark3 しか使わなくなってしまった。
だって OM Workspace の AI ノイズリダクションがありがたすぎる。
上記のイソヒヨドリの写真にも使っているし、もはや必須機能。

Lightroom に同様な機能が付いたので Adobe に戻れば LUMIX でも。
いやプロキャプチャや深度合成が、サブスク料金も必要だし。
そんなこんなでサブ機用途で買ったのにすっかりメインに。