今年も米ケ袋の花桃が綺麗に咲いた。今日(5月5日)あたりが見納めかな。
写真を載せておく:



そのほかの写真はここにある。
先日「とまと」に乗ったときにこの「遊動マルタンガール」を使った。
この装置の写真はここにある。
「とまと」はすぐに頭を上げてしまうのでそれを防ぐことができる。装置をつけた「とまと」の走りは安定したものでとても乗り易かった。
「乗馬教本」(日本馬術連盟)の説明は「ウマが制御できないほど高く上げたり振ったりするのを防ぐ」また「騎乗者の手がどんなに動いても手綱は常に正しい方向から銜に到達するのを確実にするためのものである」とある。
マルタンガールには遊動マルタンガール(Running Malutingale)と固定マルタンガール(Standing Malutingale)がある。使ったのは前者である。
「折り返し」を使うことに批判的な意見をよく聞くが、それとは違う役割を「マルタン」はしているのかもしれない。
前回ではPython仮想環境で起動したLibreOfficeではそのマクロのためのAPSOがエラーで使えないという結果だった。
原因はunoモジュールなどのマクロに必須のモジュールがインポートできないことである。ubuntuなどのlinuxではこれらのモジュールはシステムワイドの領域にインストールするパッケージとして用意されていてPython仮想環境に直接インストールすることは困難になっている。
Python仮想環境はシステムワイドなPythonと隔離してPythonが使えることを理想としているように思われるが、ここでは次善の策としてシステムワイド用に用意されているパッケージを臨時的に使えるようにしてPython仮想環境のLibreofficeを起動させる方式をとった。
そのためにはPython仮想環境下でのターミナルエミュレータで
export PYTHONPATH=/usr/lib/python3/dist-packages
とシステムワイドのパッケージへのパスを通してやる。この下でLibreOfficeを起動させる。これでマクロの作成は問題なくできる。
この方式を採ると1つのPython仮想環境をシステムワイドな環境から切り離した理想的なPython仮想環境とLibreOffice のマクロ作成の環境とに切り換えて使うことができる。
RawTherapeeがヴァージョン5.9から局所処理に使えるようになってその処理を時々使っている。今回は背景をぼかすことにつかった。
写真は蝋梅をアップで撮ったものであるが、背景のボケが甘く蝋梅がすこし沈んでいる。そこで背景のボケを少し強くしたい。ボケの処理は簡単にできるがそれを背景にのみに作用させたい。この処理をRawTherapeeの局所処理で行う。
まず処理の適用部分の切り出しをする。RawTherapeeの領域選択はアルゴリズム的である。適用部分のなかに典型的なスポットを選択する。そのスポットを参照点として各ピクセルの色空間上の距離を計算する。これが予め定めてある閾値より小さければそのピクセルは参照点と同類であるとする。そうでなければこのピクセルは処理範囲外とする。このようにして参照点と同類であるかどうかで処理領域を決める。
背景をぼかす領域の設定では画面全体を選択してぼかす処理をしたくない点を参照スポットとする。今の場合は中心にある蝋梅の花弁。
つまり背景をぼかす処理をするときにはその処理をしたくない領域をまず確定させる。次にその「リヴァース」をとる。これで領域が反転する。この反転した領域がぼかしをかけたい領域となる。
適用確認ボタン(ΔEのプレヴュー)がにオンなっていると、適用領域に半透明のマスクがかかる。適用領域が期待したものになるように閾値(実は複数個ある)を変えてみる。
このようにして得られた領域に適当なガウスぼかしを施した画像を以下に載せる:
ScriptForgeはLibreOfficeをプログラム的に操作することを目的としたモジュール作成のためにLibreOfficeから提供される膨大なライブラリー群である。Pythonマクロ作成にはその一部であるクラスCreateScriptServiceを使う。
ScripyForgeはLibreOfficeのインストールと一緒にインストールされるがxubuntuを含むubuntuではシステムワイドなパッケージとして別個にインストールする:
sudo apt install python3-scriptfoge
またこのクラスを継承した各種ドキュメント用、インタフェース用のクラスが用意されてる。これらの説明はここにある。
ここではスプレッドシートCalcをPythonマクロで操作するために必要なそのサブクラスを使う。
このサブクラスで使える様々のメソッドの説明はここにある。
例題は「今開いているシートのセルA!に書かれている数値を読み込み、それに書かれていた数値に1を加えた数値を再度セルA1に書く出す」というものである:
# coding: utf-8
from __future__ import unicode_literals
from scriptforge import CreateScriptService
doc = CreateScriptService("Calc")
def increment_cell(args=None):
value = doc.GetValue("~.A1")
print(type(value))
value += 1
doc.SetValue("~.A1", value)
g_exportedScripts = (increment_cell, )
GetValue、SetValueが使ったメソッドで、引数の中の~はCalcで今開いているシートを指す。最後の行はこのモジュールでマクロとして登録する関数名をタプルで並べる。ここの例ではincrement_cellがそれである。
ScriptForgeなしでもマクロは書けるが、これを使った方がプログラムはすっきりする。
今日(3月12日)に散歩中に近所の家の梅の花が一輪咲いているのを発見した:
もしかしてと思い東北大学片平キャンパスに行ってみた。そこの梅はかなりの花を付けていた:
LibreOfficeのPythonマクロ環境は前回に述べた。ここではこの環境で便利なsite-packegeを使うことについてのべる。
windowと異なり、linuxではPythonマクロのために特別なPythonインタプリタが用意されてるわけではない。LinuxではLibreOfficeを起動した環境下にあるPythonを使う。従ってそのPythonにインストールされているsite-packegeがそのまま使える。Pythonプログラミングの作法として仮想環境を使うことを以前述べたが、Pythonマクロ環境もこの仮想環境から起動したPythonを使うことが合理的である。
LibreOfficeの起動は仮想環境のターミナルエミュレータから
soffice -n
を入力する。これで新規のdocumentでLibreOfficeが立ち上がる。様々なフラグは
soffice --help
で見れる。
このLibreOfficeのマクロ作成ではプログラミングには仮想Pythonでインストール済のsite-packageが利用できる。
ここまでのシナリオでいけるかなとおもったらPython仮想環境から立ち上げたLibreOfficeではマクロのための統合環境APSOが起動でエラーになる。
前回の続きである。LibreOfficeのマクロは様々なプログラミング言語で作れるようになっていて、Pythonもその1つである。
xubuntuでは別な方法もあるようであるが、ここではwin10でも使ったAPSOというツールを使った環境を作る。このツールの登録はLibreOffice.Calcを立ち上げてツール->拡張機能と進むと登録画面が出るので予めダウンロードしておいたAPSOを登録する。オプションでプログラミングで使うテキストエディタを指定する。xubuntuではnanoやplumaなどが使えるようになっているが、nanoはそのままではダメらしい。plumaは/usr/bin/plumaで引数なしでで立ち上がる。
ユーザが作るマクロの保存場所は決まっていてlinuxでは
.config/libreoffice/4/user/Scripts/python/
である。初期状態では必要なディレクトリが存在しないので適宜に作る。
またユーザが作る汎用的なモジュール(例えばメッセージボックス)は
.config/libreoffice/4/user/Scripts/python/pythonpath
に保存する。これらのモジュールはマクロでインポートして使うことができる。
APSOの起動はLibreoffice.Calcの画面のメニュの
ツール->マクロ->Pythonスクリプトの管理
で行う。APSOの初期画面がでるのでそのメニュから作業を始める(注:APSOの最新版はAPSO1.4.4であるが、ここでは安定版のAPSO1.3.2を使う)。
APSOはよく出来ていて開発中のマクロのデバッグ実行やPythonシェルの表示(マクロの中のprint文の出力はこのシェルにでる。これもデバッグに重宝)などの機能を持っている。なおLibreOfficeのPythonのヴァージョンは3.12.3である。
これで準備は完了。