月別アーカイブ: 2022年2月

Pancake

パンケーキレンズが必要になった。

筆者手持ちのメッセンジャー型カメラバッグなんだけど。
去年まで 100-400 を装着した LUMIX G99 と標準レンズを入れていた。
しかし今は E-M5 がある、G99 は野鳥専用で交換レンズはサブ機で賄う。
その標準レンズの場所に 25mm 単焦点を装着した E-M5 が入らなかった。

しかたがないのでもう一つのリュック型カメラバッグを使っていた。
だが春そして夏が来る、リュック型では背中が汗まみれになる。
なのでメッセンジャー型を新たに買ってメインで使っていた。
そろそろ復活させないと、ということで。

いや気合いを入れた撮影は暑くてもリュックに PRO レンズでいくし。
今欲しいのは野鳥撮影のついでに使うお気楽用レンズ。

で、M.ZUIKO 17mm F2.8 という超不人気レンズを中古で買った。
LUMIX 20mm のほうが評判はいいけど 25mm と用途が被るのがね。
なんたってたったの一万円だもん、評判なんて当てにならないし。
帰り道に庄内緑地公園で装着して試し撮り。

17mm

なんだよ、思っていたよりカッチョイイじゃないか。
HAKUBA フィルターのロゴと相まって昭和チックな下品さがいい。
そしてメッセンジャーバッグに楽々入る、目的は達成した。

kaihou

絞り解放で適当に撮影しても周辺光は全然落ちないね。
豪快に落ちるパナ 14-140 を使っていた筆者だ、嬉しいかぎり。
いや普通に絞って使うと思うけど。

ume1

小牧山の梅はまだ全部つぼみだったけどココは少し咲いていた。
思ったより寄れないなって最初思ったけどよく考えたらパンケーキだ。
レンズ先端ではなくセンサー位置からならこんなものかなって。
それよりなんか背景がウザったいって感じ。

ume2

昨日小牧山にて PRO レンズで撮影した梅のつぼみ。
ほぼ同じ設定なんだけど背景のボケ感が全然違うなって感じ。
こういうのが高いレンズとの差なんだろうな。

いや多分筆者が使いこなせていないだけだと思う。
25mm に慣れすぎたのか 17mm の広い画角に思っていたより戸惑う。
オートフォーカスでギコギコ音がするし若干遅いけど許容範囲。
とにかく、以後野鳥のおまけ写真はコイツでいく。

ちなみに。
メジロやシロハラがいたけど曇り気味で綺麗に撮れなかったです。

Ikaru

そういえば筆者が木曽川遊歩道にも行くのはイカルが目的だった。
他人が撮影した写真を見てその巨大なクチバシに一目惚れしたんだが。
いまだ一度も見たことが無い、そろそろ見てみたい。

ということで今日も木曽川遊歩道へクロスバイクでゴー。
ってもしかして春一番ですか?とんでもねえ強風でコケそう。

cycleload

木曽川のサイクルロードは凄く気持ちよく走れます。
風がなければだけどね、一部区間は降りて押し歩いたよ。

てか風のせいか小鳥がいない。
鴨達すらなんか少ない、まだロシアへ帰るには早いと思うんだが。

kamos

トリミング無しだと筆者のパナライカでもこのサイズだからね。
ココで鴨狙いのカメラマンは綺麗に撮れているのか疑問。

それより昨年ウグイスがいつもいた薮が伐採されてしまった。
なんかもうココに来る理由が無くなってきたなって。
帰ろう。

帰り道、あるお寺のほうから凄く綺麗な小鳥の囀りが聞こえてきた。
もしかして、とカメラを出して探してみる。

ikaru

イカルだ!
まさかこんなところで、神様ありがとう。
ただ正面から撮影したかったな、贅沢だけど。

mpv @ Next File (Nautilus Sort)

しつこいようだけど mpv で次のファイルを再生させるスクリプト。
順番が Nautilus と同じでないのでイマイチ不便だなって。

だったらコレも作ってしまえ!
Gjs なり PyGObject なりでソートさせて出力するコマンドを。
mpv の拡張スクリプトでは無理なのでコマンドを自作する。
それを Lua で呼び出せばなんとかなるはず。

ついでに、いちいち拡張子を指定するのも面倒臭い。
てか Lua がショボいなら自作コマンドのほうで正規表現を使えばいい。
で、GNOME では動画ファイルの ContentType は以下のようになっている。

video/mp4
video/quicktime
video/x-matroska

ContentType なら先頭の video/ だけで動画ファイルを見分けできる。
ということでこんなスクリプトを書いてみた。

#!/usr/bin/gjs

if (ARGV.length == 0) {
    print('usage: nautilus_ls {DIRNAME}');
} else {
    const GLib = imports.gi.GLib;
    const Gio = imports.gi.Gio;
    const re = /^video\//;

    let files = [];
    let d = Gio.file_new_for_path(ARGV[0]);
    let ls = d.enumerate_children('standard::content-type', 0, null);
    for (;;) {
        let info = ls.next_file(null);
        if (info == null)
            break;
        let t = info.get_content_type();
        if (re.test(t))
            files.push(info.get_name());
    }
    files.sort((s1, s2)=> {
        let cmpstr1 = GLib.utf8_collate_key_for_filename(s1, -1);
        let cmpstr2 = GLib.utf8_collate_key_for_filename(s2, -1);
        if (cmpstr1 < cmpstr2)
            return -1;
        return 1;
    });
    print(files.join('\n'));
}

// ex: ft=js

Gjs での例。
nautilus_ls という拡張子無しファイル名でパスの通った場所に保存。
実行パーミッション追加でコマンドの出来上がり。
このコマンドを Lua で呼び出しする。

-- ~/.config/mpv/scripts/next_prev.lua

local utils = require 'mp.utils'

-- Ctrl+DOWN @ Next File Play
function on_nextfile()
    local hit = false
    local directory, fn = utils.split_path(mp.get_property('path'))
    if directory == '.' then
        directory = utils.getcwd()
    end
    local pfile = io.popen('nautilus_ls  "'..directory..'"')
    for filename in pfile:lines() do
        if hit then
            mp.commandv('loadfile', utils.join_path(directory, filename))
            if mp.get_property_bool('pause') then
                mp.set_property_bool('pause', false)
            end
            break
        end
        hit = filename == fn
    end
    pfile:close()
end
mp.add_key_binding('Ctrl+DOWN', 'nextfile_func', on_nextfile)

-- Ctrl+UP Previous File Play
function on_prevfile()
    local prevfn = ''
    local directory, fn = utils.split_path(mp.get_property('path'))
    if directory == '.' then
        directory = utils.getcwd()
    end
    local pfile = io.popen('nautilus_ls  "'..directory..'"')
    for filename in pfile:lines() do
        if filename == fn and prevfn ~= '' then
            mp.commandv('loadfile', utils.join_path(directory, prevfn))
            if mp.get_property_bool('pause') then
                mp.set_property_bool('pause', false)
            end
            break
        end
        prevfn = filename
    end
    pfile:close()
end
mp.add_key_binding('Ctrl+UP', 'prevfile_func', on_prevfile)

イケた!
GNOME 限定です、他の環境の人は参考程度に。

pic 2022.02.06

今日の五条川は雪です。
よし雪景色の写真を撮影してみよう。

でも雪は少ないし雪雲なので白黒な地味すぎる写真に。
なので Olympus Workspace でアートフィルターを掛けてみる。

snow01

ポップアート II を掛けてみた。
ほぼ白黒だったのがいい感じに色づいてくれた。
うん、原色に拘らなくてもいいんだよ。

snow02

ドラマチックトーンを掛けてみた。
舞っている雪が一番強調されたのがこのフィルターだった。
RAW そのままだと全然見えなかったんだよね。

写真を原色から弄って何が楽しいんだ?
そう思っていた頃が筆者にもありました。
色々試していたら恐ろしいくらい時間がたっていました。

OM SYSTEM の Youtube でプロがアートフィルターを勧めていたのよ。
プロが言うならやってみようって感じで。
RAW で撮影すれば現像アプリでフィルターを撮影後に適用できるのね。
てかカメラ側のフィルター機能ってぶっちゃけ使わないよね。

hiyodori

今日はヒヨドリしかまともに撮れませんでした。
でも巨大写真もあるよ。
0206hiyo.jpg (5184x3888px) 6.2MB

editorconfig Gedit 41

「秀丸エディタ」が10年以上ぶりのメジャーバージョンアップ ?v9.00が正式版に – 窓の杜

Windows は会社でしか使わなくなって何年もたつので今頃知ったけど。
editorconfig って何だろう、モードラインよりイイのか?

チーム開発に効く環境構築術 | 第1回 EditorConfigのススメ | CodeGrid

モードラインじゃダメなのか?って感じだな。
あぁ VSCode というゴミクソエディタがモードラインを使えないからか。

EditorConfig

対応エディタって、よく見たら全部単なるプラグインじゃん。
Gedit のプラグインもあるのでチビッと試してみるか。

GitHub – editorconfig/editorconfig-gedit: EditorConfig plugin for Gedit

Gedit 41 だけど Gedit 3 用で動くだろう。
でもいきなり Installation が間違っています。

editorconfig.plugin
editorconfig_gedit3.py
editorconfig_plugin

editorconfig-core-py の中にある editorconfig
ディレクトリのコピーが必要でした。

editconfig

それと以下を書き換えする必要がありました。

editorconfig.plugin にて Loader=python3 に書き換え。
Loader=python のままでは Python2 を呼び出そうとする。

editorconfig_plugin/gedit3.py にて。
document.get_location は Gedit 40 から使えなくなっています。

#location = document.get_location()
location = document.get_file().get_location()

後は設定で有効にして .editorconfig を書いて。
筆者は Tab 設定を Python ガイドラインな半角スペース 4 つにしているので。

root = true

[*]
indent_style = tab
indent_size = 8

おぉ反映されるようになりました。
たださ。

// ex: noet ts=8

モードラインなら最終行にコレ書くだけでまったく同じことができるんだよね。
Gedit なら最初からプラグイン入っているし Atom にもプラグインあるし。

いや筆者はモードラインも拡張子が無いスクリプトに ft 指定するだけなんだが。
ただ Gedit も Atom もファイル判別が優秀すぎて滅多に必要が無いんだなこれが。

てかコレ別ファイルに記述なのでファイルタイプ指定ができないし。
拡張子が必ずある Windows 専用ですね。