とにかく書く

日々の雑感や知り得たことを、とにかく書いています

阪急電車の車両間ドア(妻引戸)

車両と車両の間にあるドアは妻引戸というそうだ。
もともと建物の長い方を見たときに側面に当たる面を「妻側」というらしい。
この場合の妻は、端の意味だそうだ。刺し身の「つま」も同じ由来だとか。
そして車両において、妻(妻構)にある引き戸だから妻引戸なんだって。

先日、久々に阪急電車に乗った。
車掌さんが見回りに来ていたのだけれど、妻引戸が自動ドアになっていた。
妻引戸の取っ手をちょいっと傾けると、ドアがすーっと開く。
しかも、相対する車両の妻引戸も同時に開く。

昔は手で一枚ずつ開けていた。
左側に取っ手がついていて、左から右に開けていたのだけれど、基本的にドアクローザーで閉まろうとするので、子供の頃は随分苦労して開けた記憶がある。
それが、自動ドアになったので、取っ手も右側。開き方も右から左になっていた。

なにより不思議なのが、相対する車両の妻引戸も同時に開くこと。
もともと、別の車両として製造されているのに、どうやって同時に開いているのだろう。
Bluetooth だろうか?有線だろうか?連結時にコネクタが接続されるのだろうか?
何かあったときは一斉に開くことができるのだろうか?

偉い人、教えてください。

Fvwm + 日本語入力で直面している問題

Fvwm 2.6.9 で日本語入力をしていると、iBus だろうが Fcitx だろうが変換候補にマウスカーソルがあると、平仮名のまま勝手に確定してしまう。
Fvwm の設定で、ColormapFocus を FollowsMouse にしていることが原因かと思ったが、 FollowsFocus に設定しても変換候補の位置によっては対応できない。

Weston だとソースコードを変更すれば、マウスカーソルは自由に制御できるかも・・・と思っているが、そもそも Fcitx が起動しない(ディスプレイサーバに接続できないとエラーが出る。DISPLAY 環境変数を X と同様に設定してもだめ・・・)

xmodmap の設定も何故か自然に無効にされている?し、ちょっとよくわからないことが起きている。

ほんの1万年前までは、数年で東京が沖縄の気温になるほどの温暖化が普通だった

中川毅教授の「人類と気候の10万年史」を読んだ。
地球温暖化とかESGとかが叫ばれている中で、そもそも気候がどういう変遷を辿ってきたのかを知識として持つためにも必読の書。

まぁ、ただ単純に「へぇ!」ということが多くて、とてもおもしろかった。
ほんの12,000年前まで東京が北海道くらい寒かったり、2-3万年前だと福井県にシラカバの森が広がっていたり、それらが地球の自転と公転によって引き起こされていたり。予想外の気温の上昇は、産業革命からというより5,000年前から始まっていたり。

ちなみに、この本だと8,000年前になぜ気候が安定したかの理由は不明となっている。この本の続きとして、今月(2021/5月)にGlobal and Planetary Change誌に中川教授をはじめとするグループの論文が掲載されている。

続きを読む

画像ビューアーの作成2 PySimpleGUI

OpenCV の HighGUI で画像を表示させると、拡大縮小ボタンも表示された。
折角なので拡大ボタンを押して見ると、再描画まで1秒くらいかかった。ボタンクリックの読み取り間隔が遅いのだろうか・・・。

他の方法として Pillow でも画像表示させてみた。私の環境では、ImageMagick で画像が表示された。
ちょっと予想外だったし、そこから自由に作れそうにない。

PySimpleGUI を知って、サンプルを切り貼りして作ってみた。これなら使えそう。

import sys
import io
import PySimpleGUI as sg
from PIL import Image

if len(sys.argv) == 1:
    fname = sg.popup_get_file('Document Browser', 'Document file to open',
                              no_window=True,
                              file_types=(
                                  ("jpeg",     "*.jpg"),
                                  ("jpeg",     "*.jpeg"),
                                  ("png",      "*.png"),
                                  ("tiff",     "*.tiff"),
                                  # add more document types here
                              )
                              )
else:
    fname = sys.argv[1]

if not fname:
    sg.popup("Cancelling:", "No filename supplied")
    raise SystemExit("Cancelled: no filename supplied")

# ------------------------------------------------------------------------------
# use PIL to read data of one image
# ------------------------------------------------------------------------------
def get_img_data(f, maxsize=(1200, 850), first=False):
    """Generate image data using PIL
    """
    img = Image.open(f)
    img.thumbnail(maxsize)
    if first:                     # tkinter is inactive the first time
        bio = io.BytesIO()
        img.save(bio, format="PNG")
        del img
        return bio.getvalue()
    return ImageTk.PhotoImage(img)
# ------------------------------------------------------------------------------
image_elem = sg.Image(data = get_img_data(fname, first=True))
layout = [[image_elem]]
window = sg.Window('Image Browser', layout, return_keyboard_events=True,
                   location=(0, 0), use_default_focus=False)

while True:
    # read the form
    event, values = window.read()
    print(event, values)
    # perform button and keyboard operations
    if event == sg.WIN_CLOSED:
        break

window.close()

イベントを捕捉して処理する

画像ビューアーで、Ctrl を押しながらマウスホイールを回すと拡大縮小する機能を追加したいと思った。
ところが、マウスホイールを回すと ScrollPane もスクロールされてしまった。
結局、addEventFilter メソッドで指定するイベントハンドラにて、event.consume(); を実行していなかったからだった。
解決に思いの外時間を要したため記録しておく。

続きを読む