投稿者「sasakima-nao」のアーカイブ

Fedora 34 libav

Fedora 34 になってからアップデート通知が来なくなった。
時折 gnome-softwere を開いて手動アップデートする必要がある。
通知させる手段はあるんだろうけど別にこれでいいやって。

で、今日やったら GStreamer で動画が再生できなくなったんですけど。
再生は Celluloid 等を使えばいいんだけど Nautilus でサムネイルができない。
それは困る、とりあえず元に戻したい。

CentOS – Yum パッケージのダウングレード! – mk-mode BLOG

これで libav だけダウングレードしたら元通りになった。
Fedora 34 では yum でなく dnf コマンドです、オプションは同じ。
具体的には以下のコマンドを打ち込んだ。

# Listup
dnf --showduplicate list gstreamer1-libav

# Downgrade
sudo dnf downgrade gstreamer1-libav-1.18.4-2.fc34

バージョンを指定はハイフンの後に付ければいいようで。
指定しなければ勝手に一つ前になるみたいだけど一応。
そうそう、GStreamer のアップデートを禁止しないと。

sudo sh -c "echo 'exclude=gstreamer1*' >> /etc/dnf/dnf.conf"

dnf では /etc/dnf/dnf.conf に追記します。
dnf.conf は起動時読み込みなので再起動の必要があります。

これでアップデートされなくなるけど修正されても気が付くことができないw
まあ次の GStreamer アップデートは Fedora 35 の時でいいかなって。
SELinux を有効にしたままの Fedora ではセキュリティなんて無視でいいってばさ。

Flower Park

先週から久々に夜勤です。
歳をとったせいかキツイ、休日はずっと寝ていたい。

でも太陽にの光を浴びないとなんか体調が戻らない。
しかし鳥達はまだ川へ戻っていない、とはいえ田んぼも飽きた。
今日は趣向を変えてフラワーパーク江南で花でも。

アニスヒソップ?とクマバチ。
花のつもりだったけど蜜を吸っている虫がいっぱい。

セージ?とタイワンタケクマバチ。
羽まで真っ黒の蜂がいるんだ、へー。

バレンギク?とツマグロヒョウモン。
そういえば蝶も蜜を吸うよねって。

花???とオオスカシバ。
こんなヘンテコな形なのに蝶や蛾の仲間って面白い。

ぶっちゃけ花の名前は全然ワカラン。
Google レンズも的外ればかり出るし上記も合っているのかどうか。
筆者は向いていないとよく解った、ということで。
夏場は野鳥だけでなく蜂や蝶もやっていこうかなって。

今回はトリミング無し。
-scaled を URL から外すとフルサイズ画像になります。

pinch

今日の大口町。

chougenbou

チョウゲンボウ、ハヤブサ(スズキ)じゃないようで残念。
今日の収穫は以上、いやアオサギやダイサギは沢山いたんだけど。

って本当に野鳥ブログにするんかい。
いいかげんにプログラミングを再開しよう。
とりあえず macOS 用 RAW 画像選別アプリのほうを。

まずピンチを実装したい、トラックパッドで拡大縮小ね。
標準アプリはあたりまえにできるけど実装しなきゃできない。

cocoa – -[NSResponder swipeWithEvent:] not called – Stack Overflow

最初にまんまコレやって失敗した。
だってメソッド名がまぎらわしいんだもんもん。

Cocoaの日々: 1月 2011

こっちでいい、なんだ日本語で見つかるジャン。
NSResponder の magnifyWithEvent メソッドね。

ただ setFrameSize するのはどうなんだ。。。。。
拡大や縮小を指定し再描写にする。

#!/usr/bin/env python3

from AppKit import *
# Kill of control+C
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)

PATH = 'P1012925.RW2' # LUMIX(Panasonic) RAW image
RECT = NSMakeRect(0, 0, 600, 400)
wins = []

class RawView(NSView):
    def initWithFrame_(self, rect):
        objc.super(RawView, self).initWithFrame_(RECT)
        self.image = NSImage.alloc().initWithContentsOfFile_(PATH)
        self.draw_size  = 1
        #self.setWantsRestingTouches_(True) # ?
        return self

    def acceptsFirstResponder(self):
        return True

    def magnifyWithEvent_(self, event):
        print(event.magnification())
        if event.magnification() != 0:
            self.draw_size = event.magnification() + 1
            self.display()

    def swipeWithEvent_(self, event):
        print('swipe')

    def keyDown_(self, event):
        print('key down test')

    def mouseDown_(self, event):
        print('mouse down test')

    def drawRect_(self, rect):
        NSColor.blackColor().set()
        NSRectFill(rect)
        aw = rect.size.width * self.draw_size
        ah = rect.size.height * self.draw_size
        w = self.image.size().width
        h = self.image.size().height
        if aw * h > ah * w:
            width = w * ah / h
            height = ah
            x = (aw - width) / 2
            y = 0
        else:
            width = aw
            height = h * aw / w
            x = 0
            y = (ah - height) / 2
        r1 = NSMakeRect(x, y, width, height)
        self.image.drawInRect_(r1)

class MyWindow(NSWindow):
    def init(self):
        objc.super(MyWindow, self).initWithContentRect_styleMask_backing_defer_(
            RECT,
            NSTitledWindowMask | NSClosableWindowMask |
            NSResizableWindowMask | NSMiniaturizableWindowMask,
            NSBackingStoreBuffered, False)
        # NSView
        self.rawview = RawView.alloc().initWithFrame_(RECT)
        self.contentView().addSubview_(self.rawview)
        # self
        self.setTitle_('RAW image Viewer')
        return self

class AppDelegate(NSObject):
    def applicationDidFinishLaunching_(self, notification):
        window = MyWindow.new()
        window.makeKeyAndOrderFront_(window)
        # save
        wins.append(window)
        # Activate
        NSApp.activateIgnoringOtherApps_(True)

class AppMenu(NSMenu):
    def init(self):
        objc.super(AppMenu, self).init()
        item_app  = NSMenuItem.new().autorelease()
        self.addItem_(item_app)
        menu_app = NSMenu.new().autorelease()
        item_app.setSubmenu_(menu_app)
        # quit menu
        item_quit = NSMenuItem.new().autorelease()
        item_quit.initWithTitle_action_keyEquivalent_('Quit App', 'terminate:', 'q')
        menu_app.addItem_(item_quit)
        return self

pool = NSAutoreleasePool.new()

NSApplication.sharedApplication()
NSApp.setMainMenu_(AppMenu.new().autorelease())
NSApp.setDelegate_(AppDelegate.new().autorelease())
NSApp.run()

できたけど。
拡縮の原点は左下、ジェスチャ終了でゼロを投げてくる。
数値はアクション毎にリセット、うーん計算が難しい。
てかレスポンスが酷い、Preview.app 等と全然違う。

コレ違うだろって感じ、もう少し調べなきゃ。

kiji

今日の大口町。

Hibari

ヒバリさん、ストーップストップひばり君(古い)
高く飛んでピーチクパーチクするのは威嚇だと思っていた。
アレ求愛だったのね、鳥の世界はよくワカラン。

Kawasemi

カワセミ君、ひっさしぶり。
いやココ水を張った田んぼだよ、魚いないよ?
調べたらカエルやザリガニも食うのか、へー知らなんだ。

Kiji

キジの夫婦、ちょっとブレた。
てかここらにマジでいるんだな、初めて見つけたよ。
こんなにデカくて目立つビジュアルなのにね。

ここ最近休日は小牧山に行っていたんだけど。
コマドリ等のさえずりは聴こえるけど姿は見えず。。。。。
が続いていたのでキジ発見は嬉しい。

Eye of Mac

筆者は Fedora と Mac を併用しています。
写真関連は現在全部 Mac でやっている。
そして思う、Eye of GNOME(eog) を Mac で使いたい。

大量画像の Exif 情報をサクッと確認したくなる場合が多い。
eog は左右矢印キーでディレクトリ内を巡回できるのがいい。
Finder のギャラリー表示はなんかもどかしくて。

Photo management | Paepoi Blog

Mac にインスト、、、、、いや Gedit でやって劇遅だったじゃん。
だから Atom を Gedit 風にカスタムして使っているのだし。
コレも似たようなビューアを探す?いやどうせなら自分で作ろうかなって。
カスタムするくらいなら最初から自分好みに作ったほうがいいので。

まて、その前に RAW 画像を NSImage は表示できるのか?
ということで試してみた。

#!/usr/bin/env python3

from AppKit import *

PATH = 'P1012925.RW2' # LUMIX(Panasonic) RAW image
RECT = NSMakeRect(0, 0, 600, 400)
wins = []

class RawView(NSView):
    def initWithFrame_(self, rect):
        objc.super(RawView, self).initWithFrame_(RECT)
        self.image = NSImage.alloc().initWithContentsOfFile_(PATH)
        return self

    def drawRect_(self, rect):
        NSColor.blackColor().set()
        NSRectFill(rect)
        aw = rect.size.width
        ah = rect.size.height
        w = self.image.size().width
        h = self.image.size().height
        if w - h > 0:
            if aw * h > ah * w:
                width = w * ah / h
                height = ah
                x = (aw - width) / 2
                y = 0
            else:
                width = aw
                height = h * aw / w
                x = 0
                y = (ah - height) / 2
            r1 = NSMakeRect(x, y, width, height)
            self.image.drawInRect_(r1)

class MyWindow(NSWindow):
    def init(self):
        objc.super(MyWindow, self).initWithContentRect_styleMask_backing_defer_(
            RECT,
            NSTitledWindowMask | NSClosableWindowMask |
            NSResizableWindowMask | NSMiniaturizableWindowMask,
            NSBackingStoreBuffered, False)
        # NSView
        view = RawView.alloc().initWithFrame_(RECT)
        self.contentView().addSubview_(view)
        # self
        self.setTitle_('RAW image Viewer')
        return self

class AppDelegate(NSObject):
    def applicationDidFinishLaunching_(self, notification):
        window = MyWindow.new()
        window.makeKeyAndOrderFront_(window)
        # save
        wins.append(window)
        # Activate
        NSApp.activateIgnoringOtherApps_(True)

class AppMenu(NSMenu):
    def init(self):
        objc.super(AppMenu, self).init()
        item_app  = NSMenuItem.new().autorelease()
        self.addItem_(item_app)
        menu_app = NSMenu.new().autorelease()
        item_app.setSubmenu_(menu_app)
        # quit menu
        item_quit = NSMenuItem.new().autorelease()
        item_quit.initWithTitle_action_keyEquivalent_('Quit App', 'terminate:', 'q')
        menu_app.addItem_(item_quit)
        return self

pool = NSAutoreleasePool.new()

NSApplication.sharedApplication()
NSApp.setMainMenu_(AppMenu.new().autorelease())
NSApp.setDelegate_(AppDelegate.new().autorelease())
NSApp.run()

rw2_view

普通に表示できるじゃん。
macOS が対応している RAW は全部表示できると思う。
RAW 対応は「システムレポート」で見ることができる。

mac_raw

EXIF は以下の方法で RAW でも取得できるようだ。

PyObjC Exif | Paepoi Blog

これは思ったより簡単に作れそうだぞ。
GTK4 もやらなきゃだけど今はこっちをやりたいかな。