mieki256's diary



2023/08/14(月) [n年前の日記]

#1 [nitijyou] まだ椅子を物色中

座面のサイズが50x50cm以上で、背もたれがハイバックで、肘掛けがついてない椅子が売ってないか、ググって探しているところ。しかし、全然見つからない…。

肘掛け有りで考え直したほうがいいのかな…。肘掛けを回転させて背もたれに揃えることができる機能がついていれば、まだどうにかなるのだろうか。

2022/08/14() [n年前の日記]

#1 [python] Pythonスクリプトの多重起動を抑止したい

Windows10 x64 21H2 + Python 3.8.10、3.9.13 上で、Pythonスクリプトの多重起動を抑止したい。

参考ページ。 :

以下のページを参考にして試してみた。

_Creating a single instance application < Python recipes < ActiveState Code
_Ptyhonでプロセス間排他を試す(Windows限定) | The only neEt thing to do.
_windowsで実行中のプロセスのフルパスを、pythonから調べたい
_多重起動禁止処理 for Windows
_benhoyt/namedmutex: namedmutex.py, a simple ctypes wrapper for Win32 named mutexes
_Windows上で多重起動を防止する方法
_Module win32event

Windowsの場合、Mutex なるものを使うと多重起動してるかどうかを判別することができる模様。キーワードとして「python CreateMutex」でググれば情報に辿り着けそう。

その Mutex を利用する方法として、以下の2つがあるようで。
  • win32event、win32api、winerror等を経由して呼び出す。
  • ctypes モジュールで呼び出す。

ソースその1。win32event版。 :

まずは win32event等を経由して使う方法を試してみた。動作には pywin32 のインストールが必要。今回は pywin32 304 がインストールされた。

pip install pywin32

_01_mutex.py
import win32event
import win32api
import winerror
import win32security
import time
import sys

MUTEXNAME = "python_mutex_sample_01"


def main():
    sa = win32security.SECURITY_ATTRIBUTES()
    sa.SECURITY_DESCRIPTOR.SetSecurityDescriptorDacl(True, None, False)

    mtx = win32event.CreateMutex(sa, False, MUTEXNAME)
    err = win32api.GetLastError()
    if not mtx or err == winerror.ERROR_ALREADY_EXISTS:
        # Process exists
        print("%s already exists" % MUTEXNAME)
        sys.exit(0)
    else:
        # New process
        print("New process.")
        for i in range(10):
            print(i)
            time.sleep(1)

    if mtx:
        # win32event.ReleaseMutex(mtx)
        # win32api.CloseHandle(mtx)
        mtx.Close()


if __name__ == '__main__':
    main()
  • Mutex を作る際は、他のプロセスと被らないような独自の文字列を渡す。
  • CreateMutex() を呼んだ直後にエラー情報を調べることで、その Mutex が既にあるかどうかが分かる模様。
  • 処理が終わったら、mtx.Close() を呼んでハンドルをクローズする。

python 01_mutex.py で実行すると、1秒毎に、0 から 9 までの数字を出す。

DOS窓を複数開いておいて、どこかのDOS窓でスクリプトを動かしてから、すかさず別のDOS窓で同じスクリプトを動かしてみると、後から実行したほうは「〜 already exists」と出力して即座に終了してくれた。たしかに、多重起動を禁止するスクリプトになってくれた模様。

ちょっとよく分からなかったのが、win32event.ReleaseMutex(mtx) を呼ぶと必ずエラーになること。これは呼ばなくてもいいのだろうか…? クローズ処理として win32api.CloseHandle(mtx) か mtx.Close() は呼んでおくらしいけど…。巷のサンプルを眺めても、win32event.ReleaseMutex(mtx) を呼んでる事例は見かけなかったので、呼ばなくてもいいのかもしれない。

ソースその2。ctypes版。 :

ctypesを使って呼び出す方法も試してみた。

_02_mutex_ctypes.py
import ctypes
import time

MUTEXNAME = "python_mutex_sample_02"


def main():
    knl32 = ctypes.windll.Kernel32
    mtx = knl32.CreateMutexA(0, 1, MUTEXNAME)
    result = knl32.WaitForSingleObject(mtx, 0)
    if result != 0:
        print("%s already exists" % MUTEXNAME)
    else:
        print("New process.")
        for i in range(10):
            print(i)
            time.sleep(1)

    knl32.ReleaseMutex(mtx)
    knl32.CloseHandle(mtx)


if __name__ == '__main__':
    main()

インポートするモジュール数は少なくなってくれた気がする。ただ、ソースが少し分かりづらく…。いや、あまり違いはないか…。

ctypes 経由で呼び出す版は、最後に .ReleaseMutex() と .CloseHandle() を呼び出してもエラーにならなかった。

#2 [python][ptgame][windows] pygameでWindows用スクリーンセーバを作る

Windows10 x64 21H2 + Python 3.8.10 64bit + pygame 1.9.6 を使って、Windows用のスクリーンセーバが作れそうかどうか試してみた。

動作画面は以下のような感じ。解像度が低過ぎてアレだけど、雰囲気ぐらいは分かるかなと。また、かなり後で話が出てくるけれど、プレビューが表示されるまで妙に待たされてることも分かるかと思う。

制限事項。 :

pygame でWindows用スクリーンセーバを作成するにあたって、いくつか制限事項(?)がある。
  • pygame は 1.9.x であること。pygame 2.x.x は、環境変数 SDL_WINDOWID が反映されないので作れない。(pygame 1.x.x はSDL1.xを、pygame 2.x.x はSDL2を使っていて、SLD2 は件の環境変数が反映されない。)
  • pygame 1.9.x の最終バージョン、pygame 1.9.6 は、Python 3.8 までの対応なので、pygame 1.9.6 を使いたいなら、Python 2.7 - 3.8 のどれかで作ることになる。

Windows用スクリーンセーバについてのおさらい。 :

Windows用スクリーンセーバ(.scr)はどんな仕様を要求されるのか、念のために再度列挙してみる。

  • Windows用スクリーンセーバは、.exe を .scr にリネームしたもの。

コマンドラインオプションについて。
  • .scr は、3種類のコマンドラインオプション、「/s」「/c:xxxx」「/p xxxx」のどれかが渡されて実行される。
  • .scrファイルを右クリックして出てくるメニューから、「テスト」「構成」等を選んだ場合、コマンドラインオプションがつかない状態で実行される場合もある。
  • /s、/c、/p は、大文字だったり小文字だったりするので、プログラム側で大文字化、または小文字化をしてから判別したほうが良い。
  • /s はフルスクリーン表示モード。キーボード操作やマウス操作を検出して、操作があったら自分で終了するように作っておく。
  • /c:xxxx は、そのスクリーンセーバの設定ダイアログ表示モード。本来は設定内容を .ini やレジストリ等に記録することになるけれど、特に設定項目が無いなら、スクリーンセーバ名を表示するダイアログが出るだけで十分。
  • /p xxxx は、スクリーンセーバ設定画面のプレビュー窓の中に表示するモード。xxxx はプレビュー窓のウインドウハンドル。

「/p xxxx」にも対応させることを考えると、以下の条件を満たすプログラミング言語/ライブラリ/フレームワークなら、Windows用スクリーンセーバを作れることになる。
  • 与えられたウインドウハンドルからウインドウサイズを取得できて、
  • そのウインドウハンドルのウインドウに対して描画ができる。

多重起動禁止処理について。
  • スクリーンセーバ設定画面で何かしら操作をすると、その都度 /p xxxx つきでスクリーンセーバが何度も何度も実行されるので、特に何もしないと同じ処理をするプロセスが2つも3つも走ってしまう。多重起動を抑止する処理が必要になる。
  • スクリーンセーバが実行されるまでの時間の間隔で、スクリーンセーバが何度も実行される可能性がある。フルスクリーン表示時も、一応、多重起動の禁止処理を入れておいたほうが安心。

インストール場所について。
  • Windows が64bit版、スクリーンセーバが32bit版のプログラムなら、C:\Windows\SysWOW64\ 以下に .scr をコピーする。
  • Windows が64bit版、スクリーンセーバが64bit版のプログラムなら、C:\Windows\System32\ 以下に .scr をコピーする。
  • Windows が32bit版なら、C:\Windows\System32\ 以下に .scr をコピーする。

開発環境。 :

今回は、Windows10 x64 21H2上で Python 3.9.13 64bit版や 3.8.10 64bit版をインストールしてある状態で、virtualenv を使って Python 3.8 64bit の開発環境を用意してから作業した。

後々、PyInstaller や Nuitka を使って、.py ファイルをexe化するわけだけど。不要なモジュールまで exe に含められるのは困るので、必要最低限のモジュールしか入っていないクリーン(?)な環境を用意できたほうが exe化するには都合がいい。まあ、virtualenv ではなく、venv 等を使っても同じことはできると思うけど…。

virtualenv のインストールと、Python 3.8 の開発環境を作成。
python -m pip install -U setuptools virtualenv
virtualenv -p python3.8 venv38

開発環境の有効化。
.\env38\Scripts\activate

Pythonのバージョンを確認。
python -V
(venv38) ... > python -V
Python 3.8.10

ちなみに、開発環境の無効化は以下。
deactivate

必要なモジュールをインストール。 :

スクリーンセーバを作る際に必要になるモジュールをインストール。pygame、pywin32 と、exe化するための何かしらが入っていれば済む。
python -m pip install pygame==1.9.6
python -m pip install pywin32
python -m pip install pyinstaller
python -m pip install nuitka zstandard orderedset

手元の開発環境では、以下が入っている。余計なモジュールも入ってるけど…。(Pythonスクリプトの整形ツール、autopep8 とか…。)
(venv38) ... > python -m pip list

Package                   Version
------------------------- ---------
altgraph                  0.17.2
autopep8                  1.7.0
cachetools                5.2.0
future                    0.18.2
Nuitka                    1.0.3
orderedset                2.0.3
pefile                    2022.5.30
pip                       22.2.2
pycodestyle               2.9.1
pygame                    1.9.6
pyinstaller               5.3
pyinstaller-hooks-contrib 2022.8
pywin32                   304
pywin32-ctypes            0.2.0
setuptools                63.4.1
toml                      0.10.2
wheel                     0.37.1
zstandard                 0.18.0

ソース。 :

Python 3.8 + pygame 1.9.6 + pywin32 で作成した、Windows用スクリーンセーバのソースは以下。画面の中を赤いボールが跳ね回るだけの、いつもの処理内容。

_scrsavpygame.py
import ctypes
import datetime
import math
import os
import sys
import time
import win32api
import win32event
import win32gui
import win32security
import winerror

DBG = False

IMG_NAME = "resources/ball_64x64.png"

PREVIEW_BG_IMG = "resources/preview_bg.png"
PREVIEW_LOGO_IMG = "resources/preview_logo.png"

APPLI_NAME = "screensaver sample by using pygame"
VER_NUM = "0.0.1"

MUTEX_NAME_FILLSCR = "screensaver_pygame_fullscr"
MUTEX_NAME_CONFIG = "screensaver_pygame_config"
MUTEX_NAME_PREVIEW = "screensaver_pygame_preview"


def resource_path(filename):
    """Get resource file path."""
    if hasattr(sys, "_MEIPASS"):
        # use PyInstaller
        base_dir = sys._MEIPASS
    else:
        base_dir = os.path.abspath(".")

    return os.path.join(base_dir, filename)


def full_screen(screen):
    """drawing pygame window."""

    # invisivle mouse cursor
    pygame.mouse.set_visible(False)

    # load image
    img = pygame.image.load(resource_path(IMG_NAME)).convert()
    img.set_colorkey(img.get_at((0, 0)), pygame.RLEACCEL)

    # initialize work
    scrw, scrh = screen.get_width(), screen.get_height()
    x, y = scrw / 2, scrh / 2
    dx = float(scrw) / (60 * 2)
    dy = float(scrh) / (60 * 3)

    clock = pygame.time.Clock()
    counter = 0
    looping = True

    # main loop
    while looping:

        # check key, mouse
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                looping = False
            if event.type == pygame.KEYUP:
                # any key up
                looping = False
            if event.type == pygame.MOUSEMOTION:
                # move mouse
                if counter >= 120:
                    looping = False

        if not looping:
            break

        # update sprite position
        w, h = img.get_width(), img.get_height()
        x += dx
        y += dy
        if x <= (w / 2) or x >= scrw - (w / 2):
            dx *= -1
        if y <= (h / 2) or y >= scrh - (h / 2):
            dy *= -1

        # clear bg
        screen.fill((16, 16, 16))

        # draw sprite
        px, py = int(x - (w / 2)), int(y - (h / 2))
        screen.blit(img, (px, py))

        counter += 1

        pygame.display.flip()
        clock.tick(60)

    # visible mouse cursor
    pygame.mouse.set_visible(True)


def preview(screen):
    frames = 360 * 2

    bgimg = pygame.image.load(resource_path(PREVIEW_BG_IMG)).convert()
    logoimg = pygame.image.load(resource_path(PREVIEW_LOGO_IMG)).convert()
    logoimg.set_colorkey(logoimg.get_at((0, 0)), pygame.RLEACCEL)

    clock = pygame.time.Clock()
    ang = 0
    looping = True
    for i in range(frames):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                looping = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    looping = False

        if not looping:
            break

        scrw, scrh = screen.get_width(), screen.get_height()

        screen.fill((100, 150, 200))
        iw, ih = bgimg.get_width(), bgimg.get_height()
        px = int((scrw - iw) / 2)
        py = int((scrh - ih) / 2)
        screen.blit(bgimg, (px, py))

        iw, ih = logoimg.get_width(), logoimg.get_height()
        px = int((scrw - iw) / 2)
        py = int((scrh * 0.15) * math.sin(math.radians(ang)) + (scrh / 2) - (ih / 2))
        screen.blit(logoimg, (px, py))

        ang += 3

        pygame.display.flip()
        clock.tick(60)


def get_window_size(hwnd):
    """Get window size."""
    rect = win32gui.GetWindowRect(hwnd)
    x0, y0, x1, y1 = rect[0], rect[1], rect[2], rect[3]
    return ((x1 - x0), (y1 - y0))


def msg_box(msg, title):
    """Display MessageBox by Windows API."""
    user32 = ctypes.WinDLL("user32")

    # user32.MessageBoxW.restype = ctypes.c_int32
    # user32.MessageBoxW.argtypes = (ctypes.c_void_p, ctypes.c_wchar_p,
    #                                ctypes.c_wchar_p, ctypes.c_uint32)

    user32.MessageBoxW(0, msg, title, 0x00000040)


def write_log(s):
    global DBG
    if DBG:
        desktop_dir = os.path.expanduser('~/Desktop')
        log_file = os.path.join(desktop_dir, "temp.log.txt")
        dt_now = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
        with open(log_file, 'a') as f:
            f.write("[%s] %s\n" % (dt_now, s))


def get_mutex(name):
    sa = win32security.SECURITY_ATTRIBUTES()
    sa.SECURITY_DESCRIPTOR.SetSecurityDescriptorDacl(True, None, False)
    mtx = win32event.CreateMutex(sa, False, name)
    err = win32api.GetLastError()
    if not mtx or err == winerror.ERROR_ALREADY_EXISTS:
        return (mtx, False)
    return (mtx, True)


def close_mutex(mtx):
    global cmdopt
    if mtx:
        # win32event.ReleaseMutex(mtx)
        # win32api.CloseHandle(mtx)
        mtx.Close()
        write_log("%s : Close mutex. Exit." % cmdopt)


# ----------------------------------------
# parse commandline option
kind = "None"
hwnd = 0
if len(sys.argv) >= 2:
    s = sys.argv[1][0:2].lower()
    if s == "/p":
        kind = "preview"
        hwnd = int(sys.argv[2])
    elif s == "/c":
        kind = "config"
    elif s == "/s":
        kind = "fullscreen"

cmdopt = " ".join(sys.argv)

if kind == "config":
    # ----------------------------------------
    # config / setting
    mtx, success = get_mutex(MUTEX_NAME_CONFIG)
    if not success:
        # Process exists
        write_log("%s : %s already exists. Exit." % (cmdopt, MUTEX_NAME_CONFIG))
        sys.exit(0)

    # new process
    write_log("%s : New process." % cmdopt)
    msg_box("%s\nver.%s" % (APPLI_NAME, VER_NUM), "Information")
    close_mutex(mtx)
    sys.exit()

if kind == "preview":
    # ----------------------------------------
    # preview
    mtx, success = get_mutex(MUTEX_NAME_PREVIEW)
    if not success:
        write_log("%s : %s already exists. Exit." % (cmdopt, MUTEX_NAME_PREVIEW))
        sys.exit(0)

    os.environ['SDL_VIDEODRIVER'] = 'windib'

    if hwnd != 0:
        # set SDL_WINDOWID
        os.environ['SDL_WINDOWID'] = str(hwnd)
        wdw_size = get_window_size(hwnd)
        write_log("Windows size: %d x %d" % (wdw_size))
    else:
        wdw_size = (152, 112)

    write_log("%s : New process. hwnd = %d , Wdw size = %d x %d" %
              (cmdopt, hwnd, wdw_size[0], wdw_size[1]))

    import pygame  # nopep8

    pygame.init()
    screen = pygame.display.set_mode(wdw_size)
    preview(screen)
    pygame.quit()
    close_mutex(mtx)
    sys.exit()

# ----------------------------------------
# full screen
mtx, success = get_mutex(MUTEX_NAME_FILLSCR)
if not success:
    # Process exists
    write_log("%s : %s already exists. Exit." % (cmdopt, MUTEX_NAME_FILLSCR))
    sys.exit(0)

# New process
write_log("%s : New process." % cmdopt)

import pygame  # nopep8

pygame.init()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
full_screen(screen)
pygame.quit()
close_mutex(mtx)
sys.exit()

使用画像は以下。scrsavpygame.py と同階層に、resources というディレクトリを作成して、その中に入れておく。

_ball_64x64.png
_preview_bg.png
_preview_logo.png
(venv38) ... > tree /A /f

D:.
|   scrsavpygame.py
|
+---resources
        ball_64x64.png
        preview_bg.png
        preview_logo.png

ソースについて少し説明。 :

/p xxxx を渡して実行した時(プレビューモード)の動作は、一定時間アニメーションを表示して、その後終了する作りにしてみた。

当初、与えられたウインドウハンドルに対して何かを描画して即座に終了する処理で十分だろうと思っていたのだけど。その方法を実際に試してみたら、描画内容が全く反映されず。どうやら数秒ほど延々と描画を続けてみないと、見た目が反映されないようだなと…。何故かは分からないけれど…。

しかし、そのままいつまでもアニメーションを描画し続けるわけにもいかなくて。スクリーンセーバ設定画面が閉じられた際、スクリーンセーバも終了しなければいけないはずだけど、どうすればスクリーンセーバ設定画面の終了を検出できるのか、そこが分からない。仕方なく、一定時間が経過したら問答無用で終了してしまうことにしてお茶を濁した。このあたり、解決策はあるのだろうか…?


多重起動抑止については、以下を参照のこと。

_Pythonスクリプトの多重起動を抑止したい


環境変数 SDL_WINDOWID を使って、pygame のウインドウを埋め込む処理については、以下を参照のこと。

_tkinterの中にpygameを埋め込む

Pythonスクリプトとして動作確認。 :

動作確認は以下。
python scrsavpygame.py /s
python scrsavpygame.py /c
python scrsavpygame.py /p 0
python scrsavpygame.py

「/p 0」を渡したときは、仮で小さなウインドウを生成して、その中にプレビュー窓用の内容をテスト描画するようにしてみた。本番では、例えば「/p 1049354」のように、何かしらの大きな数値(実在するウインドウハンドル)が渡されるはず。

exeに変換。 :

Windows用スクリーンセーバとして利用するためには、ファイルの拡張子が .scr でなければならず、その .scr は .exe をリネームして作られるわけで…。つまり、この Pythonスクリプトをexe化しないと、スクリーンセーバとして利用できない。

今回は PyInstaller 5.3 を使ってexe化してみた。
python -m pip install pyinstaller -U

まずは、以下を打って変換する。
pyinstaller --onefile --noconsole --noupx scrsavpygame.py

distディレクトリが作られて、その中に scrsavpygame.exe というファイルが出来上がった。また、scrsavpygame.spec というファイルも生成された。

ただ、この状態では、動作に必要な画像ファイル群が ―― resources/*.png が同梱されていない。

scrsavpygame.spec を編集して、画像ファイル群も同梱させる指定をする。

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,

↓

exe = EXE(
    pyz,
    Tree('resources',prefix='resources'),
    a.scripts,
    a.binaries,

「Tree('resources',prefix='resources'),」という行を挿入することで、「resourcesディレクトリも同梱せよ」と指示してる。

今度は、.specファイルを指定してexe化する。
pyinstaller scrsavpygame.spec

dist/scrsavpygame.exe を実行して動作確認をしておく。
scrsavpygame.exe /s
scrsavpygame.exe /c
scrsavpygame.exe /p 0
scrsavpygame.exe

動作したら、.scr にリネームコピー。
copy scrsavpygame.exe scrsavpygame.scr

出来上がった .scr を、既定の場所にコピーしてインストールする。
  • Windows が64bit版、スクリーンセーバが32bit版のプログラムなら、C:\Windows\SysWOW64\ 以下に .scr をコピーする。
  • Windows が64bit版、スクリーンセーバが64bit版のプログラムなら、C:\Windows\System32\ 以下に .scr をコピーする。
  • Windows が32bit版なら、C:\Windows\System32\ 以下に .scr をコピーする。

スクリーンセーバとして動作確認。 :

スクリーンセーバの設定画面を呼び出して、「scrsavpygame」が増えているか確認する。Windows10における、スクリーンセーバ設定画面の呼び出し方は以下。
  • デスクトップの何もないところを右クリック → 個人用設定 → ロック画面 → スクリーンセーバー設定。
  • あるいは、Windows10の左下の検索欄に「スクリーンセーバー」と打てば、「スクリーンセーバーの変更」という項目が出てくるので、それを選んでもいい。

スクリーンセーバ設定画面が表示されるまで、妙に待たされた気もするけれど、それでも一応動作してくれた。

そんなわけで、Python 3.8 + pygame 1.9.6 + pywin32 を使ってWindows用スクリーンセーバを作れそうだ、と分かった。

問題点。 :

一応それらしく動いたものの。現状では、ちょっと問題が…。

スクリーンセーバの設定画面で「scrsavpygame」を選ぶと、プレビュー窓の中に何かが表示されるまで随分待たされる…。おそらくだけど、以下が原因なのではなかろうか。
  • PyInstaller で作成された .exe は、毎回一時フォルダに解凍する処理が走るので、起動がとにかく遅い。
  • 毎回、Windows Defender によるウイルスチェックで時間がかかっているのかもしれない。

更に、出来上がった .scr に対して、Windows Defender が「これはウイルスだ!」と誤判定してきた。

PyInstaller を使って生成した .exe はウイルスとして誤判定されやすいらしい。巷のウイルスが PyInstaller等を使って作られているせいで、ウイルス対策ソフトが「PyInstaller で作られた .exe はウイルス」と決めつけてる節があるそうで。

もちろん、こうして自分で作ったプログラムだから、ウイルスなわけもなく…。Windows Defender に「このファイルはウイルス判定を除外せよ」と設定して使うしかなさそう。

ただ、出来上がった .scr を配布したいと思った場合はフツーに困る…。ダウンロードした人達が「これ、ウイルスじゃん!」と慌てちゃうだろうな…。

Nuitkaでexe化してみる。 :

Pythonスクリプトをexe化するツールは、PyInstaller、py2exe、cx_Freeze など色々あるけれど。Pythonスクリプトを一旦C言語のソースに変換して、gccでコンパイルしてexeを作ってくれる Nuitka なるツールがあるそうで。PyInstaller で作ったexeより起動が速く、ファイルサイズも小さくなる傾向があるとのこと。興味が湧いた。試してみる。

インストールは以下。
python -m pip install nuitka zstandard orderedset

自分の環境では、orderedset というモジュールもインストールしないと、処理が先に進まなかった。

Nuitka用に修正したソースは以下。

_scrsavpygame.py

変更点は2ヵ所。
  • 一行目のシバン(shebang)を、「#!python」から「#!/usr/bin/python3.8」に変更。この変更をしないと、「Pythonのバージョンが違う」と文句を言ってきて処理が進まなかった。
  • 画像ファイル(リソースファイル)を読み込む際の、ファイルパスの求め方を修正。

リソースファイルパスを求める部分は以下になる。
def resource_path(filename):
    """Get resource file path."""
    if False:
        if hasattr(sys, "_MEIPASS"):
            # use PyInstaller
            base_dir = sys._MEIPASS
        else:
            base_dir = os.path.abspath(".")
    else:
        base_dir = os.path.dirname(__file__)
    return os.path.join(base_dir, filename)
「if False:」で無効化してあるところが、PyInstaller、あるいは通常のPythonスクリプトとして実行する際の処理。Nuitka用は、os.path.dirname(__file__) で基準ディレクトリ(?)を求めることになる模様。

exeへの変換は以下。
python -m nuitka --mingw64 --windows-disable-console --include-data-file=".\\resources\\*.png=.\\resources\\" --onefile scrsavpygame.py
  • python -m nuika : nuika の呼び出し。
  • --mingw64 : mingw64 (gcc) を使うことを指定。
  • --windows-disable-console : exe実行時にコンソールを非表示にする。
  • --include-data-file=".\\resources\\*.png=.\\resources\\" : リソースファイル(*.png)を同梱させる。
  • --onefile : リソースファイルも含めて1つのexeファイルにする。
  • scrsavpygame.py : exe化したいPythonスクリプト名。
ちなみに、リソースファイルは、--include-data-file=".\\resources\\*.png=.\\resources\\" で指定しているけれど。最初、パス区切り文字を「/」にしたら上手く行かなくて、試行錯誤中に「\\」にしたら何故か上手く行った。ただ、これは、スクリプト側の、リソースファイルパスを求める処理がおかしかった可能性がある。

上記を実行したところ、途中で「gccその他が見つからないがダウンロードするか?」と尋ねてきた。「Yes」を入力してダウンロードすることにした。それぞれ、 C:\Users\(USERNAME)\AppData\Local\Nuitka\ 以下にキャッシュとしてダウンロードされる模様。ファイル数を調べてみたら、7923ファイル、全体で1.14GBが入っていた。まあ、Nuitka が要求する gccのバージョン等が固定されている可能性もあるので、このくらいは目を瞑ったほうが面倒臭くないのかもしれない。

数分かかって、.py と同階層に scrsavpygame.exe が作成された。ファイルサイズは 8.59MB。PyInstaller で生成した .exe は 13.06MB だったので、若干ファイルサイズも小さくなっている。

別ディレクトリに .exe をコピーして実行してみたところ、動作してくれた。
scrsavpygame.exe /s
scrsavpygame.exe /c
scrsavpygame.exe /p 0
scrsavpygame.exe

なんとなくだけど、PyInstaller で作った .exe より起動がちょっと速いような気もする。

スクリーンセーバとして利用できるか動作確認。.exe を .scr にリネームコピーして、スクリーンセーバの既定の置き場所にコピー。スクリーンセーバ設定画面を出してリストから選んだ。これも一応動いてくれた。

ただ、相変わらず、プレビュー窓内が表示されるまで結構待たされる…。こうなると、一時ディレクトリを作成して、動作に必要なファイルを全て展開してから実行するという、その仕組み自体が厳しいのかもしれない…。

ちなみに、--onefile ではなく --standalone を指定すれば、1つのファイルにまとめずに、*.dist というディレクトリに動作に必要なファイルを全てコピーした状態で .exe を生成してくれる。ファイル数は106ファイル、27.52MB だった。

つまり、1つの .exe にした場合、実行時は毎回106ファイルを一時ディレクトリに展開しているわけで…。それなりに起動が遅くて当然ですよね、という気もしてきた。

参考ページ。 :


2021/08/14() [n年前の日記]

#1 [ruby][dxruby] Rubyのfiddleを勉強中

bassrb (Bass.rb) を fiddle を使って動くように修正しようとしているけれど、そもそも Ruby の fiddle の使い方だの、C言語のデータ型がよく分からないので、そのあたりを勉強しつつ作業中。

Ruby の fiddle は、.dll, .so 等のダイナミックリンクライブラリを扱うためのライブラリ、だそうで。

_library fiddle (Ruby 3.0.0 リファレンスマニュアル)

とりあえず分かってきたことをメモ。

boolとBOOLは違う。bool はC言語(?)のデータ型、boolean型で、BOOL は Visual C++ で使うデータ型だそうで。実際には BOOL は int で、false が 0、true が 1 になっているっぽい。bass.h の中で、戻り値が BOOL の関数? メソッド? がたくさんあるけれど、その場合戻り値は int として扱っていいらしいなと…。

DWORD は int か uint32_t で置き換えることができる。

QWORD というデータ型が bass.h に出てきたけど、uint64_t で置き換えればいいらしい。

fiddle/types を使えば、BOOL や DWORD をそのまま記述できるようになるっぽい。ただ、dlload をした後で include Fiddle::Win32Types を記述しないとダメらしい。
module M
  extend Fiddle::Importer
  dlload "bass.dll"
  include Fiddle::Win32Types
  ...

fiddle の dlload "bass.dll" で .dll をロードできるはずが、Ruby のバージョンによっては「そんなファイルは見当たらない」とエラーになってしまう。Ruby のバージョンによっては、.dll を探す場所が違うという話を見かけた。とりあえず、以下のような書き方をして、「スクリプトファイルのある場所に .dll もあるはず」という前提で絶対パスを渡して誤魔化してみたけど、これで合ってるのかどうか…。
  module Bass
    bassdllpath = format("%s/%s", File.expand_path("..", __FILE__), "bass.dll")

    extend Fiddle::Importer
    dlload bassdllpath
    ...

bass.h の中で float が出現するけれど、C言語の float と Ruby の float は違うようで…。 オリジナル版 Bass.rb では、ひとまず引数として int を受け取るという記述をしておいて、以下のような書き方をして引数を渡していたけれど。
    BASS_ChannelSetAttribute = Win32API.new("bass", "BASS_ChannelSetAttribute", "III", "I")

    ...

        ::Bass.err if BASS_ChannelSetAttribute.call(@ch, 2, [v].pack("f").unpack("I")[0]) == -1
fiddle の場合はどう記述するのが妥当なのだろう…。とりあえず、以下のような書き方をしてみたけど…。
    extern "int BASS_ChannelSetAttribute(int, int, float)"

    ....

        ::Bass.err if ::Bass.BASS_ChannelSetAttribute(@ch, 2, [v].pack("f").unpack("f")[0]) == 0

Bass.rb の中に出現する「::」が分からない…。何だコレ…。ググってみたら「トップレベル」云々という言葉が出てきたけど…。よく分からないけど、module Bass の中のメソッドを呼びたい時は、::Bass.hoge() と書けば呼べる、ということでいいのだろうか。

参考ページ。 :


2020/08/14(金) [n年前の日記]

#1 [windows][hns] Windows10上でIISを有効化した

Windows10 x64 2004上で、IIS(Internet Information Services)を有効化した。IISというのは、Microsoft製のWebサーバ、という説明でいいのだろうか。

この日記ページがどんな見え方になるのかをローカルで確認するために使用。設定手順は以前メモしてあったので、それに従った。

_mieki256's diary - Windows10上のIISを設定していたり
_mieki256's diary - Windows10 + IIS上で日記ページのプレビューができるか試したり

本来ルートフォルダは、C:\inetpub\wwwroot\ になるけれど、今回は D:\inetpub\wwwroot\ にコピーして、そちらをルートフォルダとして設定しておいた。

hnsの記述が古くてちょっと困った。 :

今回、日記ページがすんなり表示できなくて悩んでしまった。cgi が動くと、「defined(@Array) や defined(%Hash) は非推奨やで」てな警告が真っ先に出力されてしまって、IISが「ちゃんとしたHTMLヘッダが返ってこないぞ」とエラーを出す。

Strawberry Perl 5.18.4.1-x64 を使うように設定していたのがアレだったらしい。Perl 5.16 から、defined(@Array)、defined(%Hash) は使わないことになってしまったのだとか。単に、「(@Array)」「(%Hash)」と書けば同じ意味として動作するそうで。以前は ActivePerl 5.8.9 build 827 を使っていたから警告が出なかったのだな…。

_jcode.plでdefined(%hash) is deprecated at ../perllib/jcode.pl line 684.のエラー: アイスポテト - C#|Tex|Perl|東京凰籃学院
_警告 "defined(@array) is deprecated" を解消する - Issue #1 - issm/Hoya
_perldiag - various Perl diagnostics - metacpan.org
_Perlの組み込み関数 defined の翻訳 - perldoc.jp
_サーバーでの主要ソフトウェア更新作業後のFAQ - アイネットディー

仕方ないので、とりあえず hns の *.pm 内の該当箇所を書き直してみた。警告が出なくなって動くようになった。

Perlには、昔の仕様で動かすための環境変数等があったりはしないのだろうか…。

画像サイズが取得できない。 :

ローカルのHDD内では、日記ページ中で表示される画像が入ったフォルダだけがちょっと離れた場所に置いてあるので、IISマネージャ上で仮想ディレクトリとして追加してみたのだけど、そのせいか画像サイズが取得できず、元画像のサイズそのままで表示される奇妙な状態になってしまった。

仮想ディレクトリではなくて、Windows10 のシンボリックリンクで、画像フォルダがそこにあるように見せかけてみた。この設定なら画像サイズが取得できた。

参考ページ。 :


2019/08/14(水) [n年前の日記]

#1 [pc] AMD A6-3500機をメンテナンス中

手元にある、AMD A6-3500 CPUが載ってるPC上で、各種 Ubuntu系OSをインストール中。

各種動作確認用として使おうかなと思っていた、Core2Duo機の調子が悪いので、だったら動作確認用としては A6-3500機を使ったほうがまだマシかもしれないなと思えてきたわけで。一応、Ubuntu 14.04 LTS、16.04LTS、18.04LTS をインストールしておこうかと。

まあ、14.04 LTS はサポート期間が過ぎているので本来は不要だろうけど、昔の環境では動いていたのかどうか、みたいなことを確認したいときもあるわけで。

単なる動作確認なら、仮想PCを使えば済んでしまう場合も多いのだけど、たまに実機じゃないと動かない時もあるわけで。例えば、Python + Pyxel とか。仮想PC上では画面がグチャグチャになるけど、実機ならちゃんと描画されたりするし。

エラーが出てハマった。 :

Ubuntuインストール用の ISO を、UNetbootin を使ってUSBメモリにコピーして、そのUSBメモリから起動してインストールしようとしたのだけど。インストール処理の途中で、Error 5 Input / output error なるエラーが出てきて困ったり。何度やってもエラーが出る。USBメモリにISOを書き込み直しても出る…。

原因についてググってたら、USB接続の外部機器が悪さをしている場合もある、という話を見かけて。試しに、USBハブ上に、無線LAN子機、ワイヤレスキーボード子機、USBメモリ、を全部繋いでいたけれど、USBメモリだけPC本体のUSBポートに差してみたところ、その手のエラーが全く出ずに、すんなりインストール処理が終わった。

そういうこともあるのか…。いやまあ、バスパワーのUSBハブに、無線子機を2つも差してるから、電流が足りてなかったのかもしれん…。

Linux Mint もインストールし直し。 :

Ubuntu のインストールで散々エラーが出て、その都度電源OFFと再起動を繰り返していたので、元々入っていた Linux Mint が壊れてそうで怖いなと。

面倒臭くなったので、最初から Linux Mint 19.2 をインストールし直し。

このPC、毎回OSをクリーンインストールする羽目になっている気がする…。

Ubuntu 14.04 と 16.04 もインストール。 :

一応、Linux Mint 19.2 とは別に、Ubuntu 14.04 と 16.04 もインストールしておいた。

2TB の HDD を積んであるけど、パーティション構成は以下のような感じに。
  • /dev/sda1, 基本領域, 120GB, ext4, Linux Mint 19.2
  • /dev/sda2, 基本領域, 16GB, Linux Swap
  • /dev/sda3, 基本領域, 1.x TB
  • /dev/sda4, 拡張領域
  • /dev/sda5, 論理領域, 54GB, ext4, Ubuntu 14.04 LTS
  • /dev/sda6, 論理領域, 54GB, ext4, Ubuntu 16.04 LTS
  • /dev/sda7, 論理領域, 54GB, ext4

物理セクタ境界について。 :

sudo fdisk /dev/sda -l をしたら、「パーティション 4 は物理セクタ境界で始まっていません」と警告が出てしまった。以下を参考にして、各OSをインストールする前に、GParted で調整。

_Ubuntu GParted その22 - パーティションの開始位置を再調整する・パーティションの開始位置が物理セクターの境界になっているか確認する - kledgeb
* 「開始セクター」が8で割り切れるなら問題なし
* 「開始セクター」が8で割り切れないなら、再調整が必要(しなくてもいいけど、パフォーマンスが落ちる)

Ubuntu GParted その22 - パーティションの開始位置を再調整する・パーティションの開始位置が物理セクターの境界になっているか確認する - kledgeb より


2018/08/14(火) [n年前の日記]

#1 [moho] Mohoを触ってるところ

ちょっと試してみたい処理があって、Moho Pro 12 を触っているところ。

Moho ってレイヤーの色調補正機能を持ってなかったっけ…。探しても見当たらないけど…。

#2 [nitijyou] 弟が仙台に戻った

PM03:00頃に出発して、PM06:00頃には戻ったらしい。

2017/08/14(月) [n年前の日記]

#1 [comic] 「ダンジョン飯」5巻を読んだ

妹から以下略。

そう来るか…。やっぱりこの作家さんは天才じゃないかなあ…。いや、個人的には、あまり「天才」という単語を安易に使いたくないのだけど。 *1 これはやっぱり天才としか言いようが…。発想からして非凡というか…。

東洋のキャラが出てきたあたりや、その呼び方について、なるほどと。昔のTRPGのアレコレを視覚化するとこうなるのか、みたいな。ていうか、こういうノリを知ってて漫画作品に盛り込めるあたり、この作家さんは一体何者なんだ…。世代が分からん…。
*1: 世間で「天才」と呼ばれてる人達のほとんどは、えてして努力で能力を獲得してたりするわけで…。世間様の「天才」呼ばわりは、彼等の努力を一切評価せず、まるで最初から能力を持って生まれてきたソレ、ある種のチート野郎、的な扱いをどこか感じてしまうので、ちょっとしっくりこない。

2016/08/14() [n年前の日記]

#1 [windows] Windows 10 Anniversary Updateとやらにアップデートしてみたり

Windows 10 Anniversary Update とやらが気になってきたのだけど、自動アップデートされる気配がないので、手動でアップデートしてみたり。Microsoft公式サイトから「Windows 10 更新アシスタント」とやらをDLして実行。

3〜4時間ほどかかった、ような気がする。ちゃんと時間を測定しておくべきだったかな…。

Windows10のバージョン情報は1607に、ビルド番号は14393.51になった。

パッと見はそれほど変わってない印象。今のところ、ログイン画面の背景が他の画面の背景と共通になってるとか、スタートボタンの「設定」等のメニュー項目がアイコンになった、ぐらいしか気づいてないけど。

まあ、そのうち、何か不具合に気づくのかもしれない…。

Bash on Ubuntu on Windowsをインストール。 :

このバージョンでは、Windows上で Ubuntu Linux版のbashが使えるらしい。要するに、Windowsの上でLinux用のコンソールアプリがそこそこ動作するかもよ、ということで。

_Bash on Ubuntu on Windowsの設定 - Qiita
_Bash on Ubuntu on Windows を使ってみた - Qiita
_Bash on Ubuntu on Windowsをインストールしてみよう! - Qiita
_【シェル芸人への道】Bash on Windowsを探検する - Qiita
_Windowsに採用されたBash (Ubuntu)を試してみる

少し試してみたところ、vim も python も perl も入ってるっぽい。試しに vim-nox を sudo apt-get install vim-nox でインストールしてみたら、ruby もインストールされた。

MobaXtermと組み合わせて使うことで、X11アプリまで動いてしまった。例えば xeyes や xclock も動いたし、FontForgeまで起動してしまったり。スゲエ…。今まで VMware や VirtualBox でどうにかしてたけど、ある程度はコレで事足りるかも…。

2016/08/15追記。 :

Bash on Ubuntu on Windows は、現状ではセキュリティ面がちょっとアレらしい。

_Windows10 Anniversary updateで知らぬ間にSSHdが起動している : やすひでぶろぐ
_Windows 10のLinuxサブシステムは新たな攻撃経路となるか | スラド セキュリティ

開発者モードにしないと使えないから、フツーのWindowsユーザさんは関係ないだろうけど…。まあ、使う時は注意ってことで…。

2015/08/14(金) [n年前の日記]

#1 [firefox] Firefox40に更新したら拡張がいくつか動かなくなってしまって困ったり

_RSS Ticker が動かなくなってしまった…。地味に困る。

仕方ないので、 _Feed Sidebar をインストール。これでしばらくしのごうかと。

Webページの見た目が若干おかしくなった気がする。 :

いつからそうなってたのか分からないけど、自分の日記ページを表示したら、検索文字列入力用の、テキスト入力ボックスの幅が大きくなって、サイドバー部分からはみ出してる状態になっていて。inputタグのレイアウト計算が変わったのだろうか。これがまた、Google Chrome で表示すると、ちゃんと期待通りの幅になってくれちゃうわけで。

仕方ないので、inputタグにidをつけて、CSSで width を指定して幅を決め打ちするように修正。

#2 [pc] Gateway M-2408jを工場出荷時に戻すことにした

DVD-Rドライブ、TSSTcorp CDDVDW TS-L633P ATA Device のドライバが見つからない状態で。ググっても、ドライバの入手ページが見つからない。

その他にも、Microsoft Security Essentials のデータベースが更新できなくなってたりとか。更新ボタンを押しても、ネットワークに異常があるとエラーメッセージが表示されるだけで。 _日々パソコンと Microsoft Security Essentialsが更新できない? を参考に、C:\Program Files\microsoft security essentials の中で mpcmdrun -removedefinitions -all を実行してみたところ、最初の1回はデータベースをDLできたけど、その後更新ボタンを押しても、またしてもエラーがどうこうと言われる。

面倒臭くなってきた。OS再インストール・工場出荷時に戻すことにする…。

一応、HDDの中に入ってた各種ファイルをバックアップしておいた。

スタートボタン → すべてのプログラム → Gateway Recovery Center → Gateway Recovery Center、を選んで、「リカバリ」をクリック。PCが再起動してシステム回復なんたらが出てきて、キーボードレイアウトを選んだり、管理者権限を持ったユーザアカウントを選んだり。

一番下の Recover Manager 32bit、とやらを選択。Widnows Vista が入っていたパーティションの中身が全部消えて、リカバリー用パーティションの中身を使って工場出荷時のHDD状態になってくれる。はず。

フツーにVistaが起動する状態になるまで、2時間ぐらいかかった…。更に、そこから始まる Windows Update地獄…。115ファイル、500MBほどをDLしてインストール…。

2014/08/14(木) [n年前の日記]

#1 [prog] CakePHPを勉強中

_CakePHP入門 (全32回) - プログラミングならドットインストール があることに気付いて、視聴&写経して勉強中。

#2 [anime][neta] AIが撮影した写真

夢の中で、AI(人工知能)を積んだオートバイが撮影した写真、てな設定が出てきてなんだか面白いなと思ったのでメモ。変身ヒーローが乗ってるオートバイが、ゲストキャラの幼女を和ませようと、旅の途中で自分(=オートバイ)が撮影した紅葉だの海だのの写真を見せる、みたいな状況で。最初は液晶画面に写真を表示してたのだけど、ガレージ内に360度プロジェクションマッピングをして幼女を喜ばせる、みたいな光景で。

ナイトライダーやボーグマン等で、そういうシーン・設定がありそうな気もする。

#3 [anime][neta] アニメと喫煙

ここ最近、複数のTVアニメ作品の中で、何故か立て続けに、「煙草を口にくわえたまま喋っているキャラ」のカットを見かけたのですけど。

なんだか気になるのです。喫煙者の感覚からすると、煙草を口にくわえたままベラベラ喋るなんて、フツーやらないわけで。 要するに、一応できなくはないけど事故が起きやすいのでフツーそんな吸い方しねえよ、と。その、滅多にやらないはずの喫煙スタイル(?)が、どうしてアニメの中では頻繁に登場するのかなあ、と気になったわけで。

以下のような理由でもあるのかしらと勝手に想像。
なんだか、カリ城あたりをチェックしてみたい気分にもなってきたり。ヘビースモーカーの宮崎駿監督はどういう見せ方をしていたのだろう。なんとなくだけど、ルパンや次元が、煙草を口にくわえたまま喋ってたような気もする…。仮にそうだとすれば、何か狙いがあって、わざとそういう見せ方をしたのだろうけど、その狙いとは何だろう。それとも、カリ城の中では、そういう吸い方を全くしてなかったりして? 記憶が怪しいなあ…。

それにしても、この御時世、アニメの中で煙草を描くだけでも随分頑張ってるような気もしたり。アレなプロデューサーだったら、クレームがつくから煙草を絶対に描くな、などと言い出しそうだよなと。

む。もしかすると、アレは煙草じゃなくて、チョコレートやキャンディーだったのかも。そういえば、煙が出ていたのか、そこまで確認してないや。煙が出てないのだから、口にくわえたまま喋れて当然だよな。「喫煙シーンを描くな」と怒られた時、「いやいや、これは煙草じゃないですから。煙草をくわえたまま喋ることなんかできないでしょ? 煙も出てないでしょ?」と誤魔化せるように、わざとそういう吸い方を描いてるのかも。なんちてぽっくん。

まあ、たぶん、動画枚数を増やさないために、アニメの中ではそういう見せ方が普及しちゃったのかなと思うんですけど。どうなんですかね。

考えてみれば、時代劇で煙管を「パカン」と打ちつけるアクションに近いのかもしれないか。現実には、煙管を勢いよく打ち付けたりはしないわけですよ。単純に、煙管が壊れる・痛む・傷つくので、やりません。実際に煙管で吸い始めて、「ああ、あのアクションは嘘だわ。この強度で、やれるわけないわ」と知りましたが。煙草をくわえたまま喋るソレも、そういった、ドラマや映画の中でしかやらないアクションの一つ、だったりするのかもしれないなと。

喫煙に限らず、そういうのってたくさんありそうですな。例えば、食パンを口にくわえて「遅刻遅刻〜」とか。ねえよ。リアルワールドで絶対ソレやらねえよ。そんなアレコレをリストアップしてみたら、なんだか面白いかも。

「現実にはやらないけど映像作品中ではお約束になってるアクション」を駆使して事件を解決しちゃうヒーロー、とか。映像作品中のキャラクターが現実世界に飛び出してきたら何が起きるか、とか。そういうアレはどうだろう。と思ったけど、アキバレンジャーがソレか…。

2013/08/14(水) [n年前の日記]

#1 [windows] Windows XPってsleepコマンドは標準で無かったのか

VMware Player + Windows XP 上でバッチファイルを動かしたら、「sleep? そんなコマンドはねえよ」と言われて、「アレ?」と。知らんかった。入っているものとばかり。

というか、Windows には入ってないんだな…。あちこちから集めてきたコマンドを入れてあるフォルダに、自分でパスを通してたから使えてただけで。そうか…入ってないのか…。すると、その手のプログラムを配布する時には同梱しておかないといかんのだな…。

_Windows Vista 以降は timeout というコマンドが使える らしい。Vista 以降か…。

_WindowsXP標準機能だけでスリープ(コマンド)の実装 | trash-area.com_どーでもえぐぜ に、batファイルの中にwshまで書いてしまう事例が。こんな書き方があるとは…。

#2 [prog] Gitについて調べてたり

Gitというか、TortoiseGit なんだけど。自分、使い方を完全に忘れてるわけで。

とりあえずGitで管理したいなら、管理したいフォルダを右クリックして、「ここにリポジトリを作成」を選ぶだけで良かったらしい。Bareを作成するか聞かれるけど、管理したいフォルダとは別のフォルダに関連情報?を記録しておきたい場合は、そのBareとやらが必要になる・別フォルダがBareになるそうで。だから、そういう管理の仕方をしないのであれば、チェックを外しておいてOK、みたいな。

あとは、管理したいファイルを「追加」して、その後、「コミット」。おそらく…。 じゃないのかなと。どのファイルを管理するかの情報や、ファイルの中身自体は、たぶんリポジトリの中に入っていく・記録されているのでは、と思ってるんだけど。

GitHub にもリポジトリを作って、アップロードしてみたり。いや、アップロードと呼ばずに、「プッシュ」と呼ぶらしいけど。

GitHubにログインして、自分のアカウントページ上で、「New Repository」をクリック、すればリポジトリを作成できる…のだったかなあ…。もう覚えてないや。あとは、リポジトリ名の入力をするぐらい。

リポジトリを作成できたら、「コマンドラインのgitを使ってるなら、こう打てばプルやプッシュができるよ」とGitHubが説明ページを表示してくれる。一応手元にメモっておいたり。

その後の操作は、今一つ内容がよく分かってないのだけど。とりあえず巷の解説ページを頼りにしつつ。TortoiseGit に同梱されてる Puttygen を使って、「公開鍵」(public key)と「秘密鍵」(private key)なる2つのファイルを作成。その鍵を使ってリポジトリにアクセスする、のかな。たぶん。公開鍵が、サーバに置いとく文字列。秘密鍵が、自分のPCだけで持っておくファイル。

ひとまず、解説ページの通りに、 というファイル名で保存しておいたけど。安全面を考えたら、他者が容易に推測できないファイル名にしたほうが良かったりしなのだろうか? でも、侵入されて、*.ppk で検索されたらどうせすぐに見つかるから、意味はないのかな?

公開鍵をGitHub側に登録。公開鍵となる文字列を貼り付け。TortoiseGit からサーバにプッシュする設定をする際には、秘密鍵のファイルを指定。

どこに向けて ―― どのURL?URI?に対してプッシュするのかは、GitHubが表示してくれた説明ページに書いてあった気がする。git@github.com:アカウント名/リポジトリ名.git、だったかな…。

次回も、絶対に手順を忘れそうな気がするなあ…。

2012/08/14(火) [n年前の日記]

#1 [anime][neta] 学生運動とロボットを組み合わせた設定ってどうかな

と何故か唐突に思ったのだけど。直後、ソレって _RIDEBACK じゃないか、と思い出した。

ロボットではなくて戦闘スーツだけど。押井守監督の赤い眼鏡シリーズも、もしかしたらソレなのかな。見たことないから分からないけど、なんだかそんなイメージ。

学生運動じゃなくて労働組合活動、かつ、ロボットモノじゃなくてファンタジー(?)だけど。高畑勲監督の _太陽の王子 ホルスの大冒険 も、もしかしたらソレなのか。

押井監督と高畑監督のソレは、その時代を当人が体験している、という共通項があるのだろうけど。やはり、「その時代」を体験しているということは、創作をする上で強みになったりするのだろうかと思えてきたり。水木しげる先生が戦争漫画を描くと、そのほとんどが創作だとしても、妙にリアリティのある作品になる、みたいなもんで。

となると、仮に自分達の世代が、学生運動なり労働組合なりを描写しようとしても、それはなんだか絵空事というか、リアリティに欠ける描写になってしまうのかな、という不安も。何せ、デモに参加なんてしたことない・団結して権力側に異を唱えてみることを一度もしたことがない人がほとんどだったりする世代なわけだし。活動者側を嘲笑する描写はリアリティを持って描けても、活動者側のリアリティは描けない予感。

ならば、自分達の世代は、自分達の世代が体験したことを描写したほうがいい…のかもしれないけれど、さて、自分達の世代が体験した「時代」って、一体何があるんだろうなと悩んでしまったり。学生運動や労働組合活動が盛んだった時代にどこかしら似ている、ある種の熱気・狂乱とも言えそうな何かを、自分達の世代は体験したことがあるのだろうか? 体験しているとしたら、それは一体何だろう?

コミケかなあ…? って飛躍し過ぎか。しかし、熱気とか狂乱とか言い出したら、それぐらいしか思いつかない。学生運動や労働組合に比べたらシリアスさが欠片も無いけど。でも、「その熱気なら知ってる! 体験した!」という人も多い予感。

とすれば、主人公はコミケ参加者で、そこに権力側が不当な弾圧を実力行使でかけてきて、それに対抗してロボットに乗って戦う、みたいな設定になるんだろうか。自分で書いててイメージがさっぱり湧かないけど。

もしかすると、ソレって図書館戦争じゃないのか。あるいは、AKB0048じゃないのか。創作、あるいは文化に対して、不当な弾圧を行う権力側。それに反抗する主人公側。そういう図式。なるほど、自分達の世代にとっては、図書館戦争やAKB0048が、赤い眼鏡シリーズやホルスに相当していたのか。…ってそんな結論でいいの?

それはともかく。自分達の世代が体験したであろう「時代」を認知できれば、そこから何か、設定なり企画なりを生み出せそうな予感も。自分はちょっと思いつかないけど。自分達の世代が体験した「時代」。そんなもの、あるのかなあ…?

#2 [anime][neta] 男性主人公が剣・刀になる設定について馬鹿妄想

しばらく前に、 _C3 -シーキューブ- とか、ギルティクラウンとかで、美少女キャラが日本刀になったり、美少女キャラから剣を取り出したりする設定があって。「なんだか似た設定が同時期に出てきたなあ。『今、アニメ業界は、美少女を刀にするのがアツイ!』…のかな?」てなことをチラリと思ったのだけど。

先日、 _だから僕は、Hができない。 というアニメで、男性主人公の胸から剣が出てくる映像を見て。あるいは、 _カンピオーネ! というアニメで、男性主人公が山ほど剣を出現させる映像を見て。「これは C3-シーキューブやギルティクラウンの逆設定かも。『今、アニメ業界は、男性キャラを刀にするのがアツイ!』…のかねえ?」と。

で。せっかく男性キャラが刀を出すのであれば、股間から出せないものかなあ、てな妄想を。

カッコイイOP曲が流れる中で、苦悶の表情を浮かべながら咆哮する男性主人公。ドッギャーン。光り輝きながら、そそり立つ武器。

なんか色々とゴメンナサイ。

全然関係ないけど、股間と言えば。 :

先日、 _はぐれ勇者の鬼畜美学 というアニメで、全裸イケメン男性主人公の股間で魔法陣がグルグルと回る映像があって。その映像に、いたく感銘を受けてしまったり。

つまるところ、ソレは規制表現ではあるのだけど。お上から強制されたソレを必ずやるしかないのだから、どうせならソレを使って遊んじまえ! という、ある種のしたたかさがそこにあるように感じたり。 *1 自分は江戸っ子じゃないのだけれど、その映像を目にして、「なるほど、こいつあ粋だねえ」と称賛したい気分に。…現代のアニメの中にだって、「粋」の精神が、こうして見て取れたりするのだと。考え過ぎかな。

ボカシやモザイク等の規制表現も、一手間・一工夫を惜しまなければ、エンターテイメントのレベルに高めることができる。そんな可能性が残っている。件の魔法陣は、その見事な実証例ではあるまいか。そしてソレは、創作者が、「どうせコレはこういうもんだから」と諦めてしまった途端、辿り着けなくなることが間違いなく確定する。諦めずに意識し続けた者だけが発見できる領域なのだろう、と。

てなことを思い、笑った直後、そこにあるのであろう作り手の表現に対する熱い想い、魂、諦めていない姿勢を想像して、なんとなく胸が熱くなったりもして。例えば、京アニ作品も色々と諦めずに高みへと登り続けているけれど。この作品のスタッフも、同じように諦めていないのだなと。…どこを諦めていないのかは、それぞれ全く異なっているけれど。

それはそれとして。そのあたりの表現の面白さは、ふたばの金田コラ(?)画像にも、その萌芽が見えていたような気もしたり。日本国内においては、こういった表現も、より洗練・進化していくのだろうか。また、海外の作品は規制内容が異なるだろうけど、それを回避すべく模索する中から生まれるであろう特徴としては何があるか。てなあたりも気になり始めたりもして。

*1: と言ってもこの場合、お上と言っても身内のソレ、BDを売るための手段、かなと邪推もするのだけど。

#3 [digital] 東芝RD-BZ710がガンダムAGEを録画し損ねてたっぽい

なんかプロレス?レスリング?映像が録画されてた…。追跡録画をしてくれなかったんだな…。先日、BSで放送してたアニメ番組に対しては、ギリギリで延長放送による放送時間変更に対応してくれたので、実は意外と出来る子なのかと思ってしまったけれど。やっぱり、ダメな子だったのだな。

そもそも地上波放送は、放送時間変更云々のデータが電波に載ってない可能性もありそう、という気もする。どこらへんを見れば、そのあたりのスペックだか仕様だか規格だかが分かるのだろうか…。

そもそも放送休止だったっぽい? :

何話を見逃したんだろうと思って検索したのだけど、ひょっとしてそもそも放送休止だった? だとしたら、RD-BZ710 が、またミスをしたというわけではなかったのか…。ゴメンよ、RD-BZ710。ちょくちょく妙な動作を見せるから、またお前かと決めつけてしまった。疑ってスマンカッタ。

アナログビデオ時代に比べたら、放送時間変更等にも(ほとんどの場合は)追従してくれる等、便利になったところもあるのだけど。時々録画できてない・冒頭が録画失敗する不具合が多発してるから、どうにも…。今の東芝製HDDレコーダは、アニメオタクが買ってはいけないHDDレコーダ、なんだろうな。アナログ放送時代は、そうじゃなかったのだけどなあ…。

#4 [nitijyou] 弟が規制

渋滞を避けて、夜中の12:00ちょっと前に到着。お疲れ様…。

2011/08/14() [n年前の日記]

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴り始めたので、21:00-23:30まで自宅サーバを止めてました。申し訳ないです。

2010/08/14() [n年前の日記]

#1 [nitijyou] ヘッドフォンのコードが溶けてた

机の引出しからヘッドフォン(インナーイヤータイプ)を発掘したのだが、コードがベトベトになっていた。ビニール部分が溶けてしまっていたらしい。石油から作られてるから、なのだろうか。テイッシュで何度も拭いてみたけど、ベトベトも取れないし、ティッシュは茶色くなるし。捨てるしかないな…。

夜中のTV視聴時に、SONY MDR-G64 を使っているのだけど。自分はメガネ者なので、長時間使っていると眼鏡のつる?がヘッドフォンで挟まれて耳の付け根が痛くなってくる。故に、そういう時だけでもヘッドフォンを別のものにしようかと思って引出しの中を漁ったのだけど。何か新しいのを買ってこないといかんなあ…。

2009/08/14(金) [n年前の日記]

#1 [nitijyou] 弟が仙台に戻った

PM08:00頃に出発。2時間ぐらいで仙台についたらしい。電話連絡によると、帰りはそれほど混んでなかったとの話。

2008/08/14(木) [n年前の日記]

#1 [neta][game] ゲームにおける回想シーンの演出案

ポリゴン表示のゲーム内において回想シーンが出てきたときに「これは回想シーンですよ」と明確にできそうな演出を脈絡なく思いついたのでメモ。

なんだかメタな見せ方のような気もする。でも、既に何かのタイトルで絶対やってる見せ方なんだろうな、という予感も。

回想シーンになると2Dドット絵になる、のはさすがにやり過ぎか。「スプライトに1色しか使ってない、てことはMSX版で活躍してたという設定なのか!」とか「色数が少ない上に画面がボケボケしてる、てことはMD版を回想してるシーンかよ!」とか。

…まあ、シリーズモノで、OPデモの中に、過去の作品のスクリーンショットが次々に現れる、なんてのは昔からやってる手法なので、珍しくもないというか、実にありがちな見せ方のような気もしてきた。

#2 [prog][neta] oldtypeとかmodernとか

_Perl 5 今昔 - Perl-users.jp
_正直、Mooooooose 溺愛のPerlコミュニティにはついていけない
_「正直、Mooooooose 溺愛のPerlコミュニティにはついていけない」を読んで

oldtypeは仕事でいやいやPerl触ってる人達の流儀で、modernは仕事なのに趣味のつもりでPerl触ってる人達の流儀、という印象を受けた。実際はどうなのかは知らない。 *1

全然関係ないけど二言目にはCPANが出てくる現状もちょっと困る感じもしていて。 :

非プログラマーのクライアント様の手元のWindows環境にActivePerlをインストールしてもらえそうなだけでも胸をほっと撫で下ろしたりする状態なのにこの上CPANからモジュールをどうこうなんて勘弁していただけないものか。という感じの場面も無きにしも非ずなために、車輪の再発明の可能性もあるができるだけActivePerlの*.msiにも入ってる程度の標準的というかそこそこ普及はしてるのであろうモジュールのみを使って書かないとダメだよねと思ったりすることも多いのだけど。

待てよ? エクスプローラ上でダブルクリックするだけでCPANから勝手に自動でガンガン落としてくる何かが存在すれば問題解決なのか? そういうモジュールがCPANにないかしら。<オイ。

*1: まあ、どっちで書いたって動くんだからどうでもいいじゃんと思わないでもないけど、考えてみれば昔風の書き方のほうがよく知られてるならメンテナンス性が高いのはoldtypeじゃないのかという気もしたり。まあ、少しずつ、全体的にmodernに移行していくのだろうし、その頃には「流行」と「標準」も選別・自然淘汰されてるだろうから、そうなるまではoldtypeで書いててもいいよな、動くんだし。という気もしたけどそれでいいのかどうかはよく判らない。

#3 [nitijou] 弟の車で午前中移動

郵便局、スーパー(カワチ)、銀行に運んでもらったり。車高が低いマニュアル車のせいなのか、乗っててちょっと怖い。マニュアル車は運転が過激になるのだろうか。

#4 [nitijyou][pc] ノートPC gateway M-2408jを購入

午後、親父さんの車に弟と一緒に同乗させてもらって、ケーズデンキまで。ノートPC Gateway M-2408j を購入。本体+5年保証で、80,640円。かつ、無線LANルータ NEC Aterm WR6670S も一緒に購入。6,770円。

選択理由。 :

  • CPUがデュアルコアであること。Windows Vistaは重いらしいし、できればDoJaエミュレータ画面のキャプチャがまともにできると嬉しい。新しいメインPCを買わずに済むので。
  • メモリが2GB以上積んであること。eclipseその他を動かす可能性を考えると、そのくらいは欲しい。(Vistaとオンボードビデオチップにメモリを取られることを考えると2GBでも少ないのかも…?)
  • 無線LAN内蔵であること。階下に持っていったり、2階に持っていったりするたびにケーブルを外す・繋ぎ直すのは面倒なので。
  • USB端子が(いくらなんでも)ついてること。Thinkpad 760ELは、USB端子すらついてないことで、本当になんにもできなかったので。
  • 新品であること。中古や展示処分品は液晶が死にかけてるからダメ。もう黄色い画面は見たくない。(逆に言うと、液晶さえ状態がよければ、中古で充分過ぎるのだけど…。)
  • 安いこと。メインPCとして使わないので、高級なものは要らない。
  • 不具合報告が比較的少ないこと。→これでAcer製・SONY製の選択肢は消えた。
  • ケースを開けて自分で弄ることが比較的できなくもないもの。(実際弄るかどうかは別として、HDD交換すらままならない日本製ノートPCはちょっと怖い)
そのへんを考えていったら Gateway製ノートPCの安いラインナップしか浮かんでこなかった。

無線ルータに関しては、
  • 動作が安定してること。
  • ルータ機能を無効にしてアクセスポイントとして扱えるもの。
  • 今使ってるルータが破損した場合に代替になりえる程度のスペックを持っているもの。
で調べたら、NEC製品が良さそうだなと。転送速度はちょっと遅いし、通信時に使う作業メモリ?も少なくてちょっとアレなことになる場面があるとも聞くけれど。CoregaやBUFFALOあたりよりは、まだマシらしいので…。

購入理由。 :

今まで、ノートPCが必要そうな場面では、中古の Thinkpad 760EL を持ち出していたのだけど。さすがに Pentium 133MHz では一切何もできない時代になってしまってるわけで。先日階下に持っていった時も、親父さんから「これはダメだ」「遅すぎて使えない」と文句を言われていたので、そろそろ真っ当なノートPCを1台持っておいたほうがいいのかなと。

使用目的は以下のとおり。
  1. お袋さんが「インターネットを見たい」と言った時に使う。
  2. 親父さんが、写真同好の集まりに出るときにノートPCがあると便利だから欲しい欲しい、と以前から言ってたのでそれに使う。
  3. 自分のメインPCが、万が一正常動作しなくなったとき、仕事(?)・作業が一切出来なくなると困るときもあるので、そういったときの緊急時用・バックアップ用に使う。
  4. 弟が帰省した際に使わせる。
常時電源を入れておくわけではないけれど、必要になったときはさっと持ち出して、といった感じで使えればと。…そういう使い方だと、バッテリの扱いで失敗しそう・無意味に寿命を短くしそうではあるけれど。

帰宅後セットアップ。 :

メーカ製PC(?)を買ったのは、NEC PC-9821 Canbe以来だったり。プリインストールその他がされているのは、実に楽で良いなと、つくづく…。

ただ、無線LAN機器の扱いは初めてなのでハマった。3回ぐらい、親機の設定をリセットする羽目に。ルータの添付CD-ROMに入ってる、ユーティリティ(WinXP SP2 or Vista にのみ対応)を動かせば、自動で設定してくれる、と判るまでが長かった。…Linuxでこれをやろうとしたら大変なことになりそうな予感。

少し触ってみた感想。 :

  • 液晶は問題なし。詳しい人が見たら全然ダメなのかもしれんけど、ウチでは、中古の Thinkpad 760EL の死にかけのバックライトによる黄色い画面を見続けてきたので、色が判るだけでも十分すぎる、というレベルだったり。表面がテカテカしてるのも、家の中で眺めてみたらそんなに気にならなかった。
  • キーボードの配置はちょっと「?」状態。Enterキーの右横にあるPage Up、Page Down をうっかり押してしまう。でも、カーソルキーが逆T字になってるのは助かった。
  • 端子の配置は特に問題なさげ。LAN端子は左奥。USB端子等は左奥と右奥。左前はカードスロット。右前はドライブ。弟から聞いて「なるほど」と思ったけれど、マウスを置くかもしれない右側手前にLAN端子やUSB端子を配してるものは使いづらいらしく。そういった酷い製品ではないように思える。
  • 思っていたより大きい。ワイド液晶なので、横幅を取るのだなと。持ち運びが楽、とは到底言えないかもしれず。デスクトップよりはマシ、ぐらいの感じ。
  • タッチパネルはほとんど触ったことがないのだけれど。こんなに使いづらいものとは思わなかった。ウチでは、マウスの増設が必須な予感。
  • 初めて Windows Vista を触ったけれど。巷の評判通り、重いような気がする。起動時間も長いようだし。でも、画面エフェクトの数々はゲーム画面のようにも思えて好印象。

2007/08/14(火) [n年前の日記]

#1 [zatta] _自分が幸せかどうかと、好む作品の内容がハッピーかどうか

なるほど…。

#2 [game][movie] _世界で1億人以上が遊んだ名作ゲームがついに映画化!

_その映像。

最初、映像だけ見ても何のゲームだかさっぱりわからなかったが、途中で気づいて衝撃を受けた。そんな手があったのか…。

#3 [anime] BLUE DRAGON、御夫婦の回を鑑賞

この作品中に登場する影は、えてしてモンスターの姿をしてるわけだけど。それを逆手に取った設定で、見た瞬間、これはやられたなと…。ネタバレだけど、 影が人間体になると、これだけ話が膨らむとは。しかし考えてみれば、影=JoJoのスタンドみたいなものだろうし…。影がモンスターの姿をしてるほうが、どちらかというと珍しいのか。

#4 [neta][anime] キャラをサポートする役どころの姿形が異なるだけで一風違った話が作れるのであらうか

であれば…。 …「○○が女性の姿だったら」てのが多いな。男性の姿じゃダメなんだろうか。

たとえば、仮面ライダーに変身する人が女性で、ライダーベルトがイケメン男性とかはどうか。ライダーベルトと会話する仮面ライダーって時点で、なんか戦隊シリーズっぽいけど。…複数のベルトをとっかえひっかえする女性仮面ライダーってのもよさそうな。傍から見ると、イケメン男性をとっかえひっかえしてるようにしか見えない。事情を知らない友人キャラに「乱れてる! 不潔よ!」と言われてしまったり。イケメン男性ライダーベルトから、「最近お前太り過ぎ。お前の腹に巻きついたとき、俺が千切れてしまいそうだ」と苦情が出てショックを受けたり。…既存作品でありそうだな。そういう設定。

人間であるべきキャラが、人間以外の形をしてるというのはどうか。たとえば、先生が畜生モドキ。ってそれはゲキレンジャーか。

この記事へのツッコミ

Re: キャラをサポートする役どころの姿形が異なるだけで一風違った話が作れるのであらうか by けいと    2007/08/17 00:40
仮面ライダーの変身ベルトのようなアイテムと
プリキュア5のココナッツミルクのような付属マスコットを
交換するって言うような話は
持ち味そのものが変わってしまうので「一風違った」ではすまなくなりそうな…

変えるならここ一連の平成ライダーシリーズや
今話題?のトランスフォーマーのような変え方じゃないと成り立たないんじゃないでしょうかね。

そういう意味では

> 巨大ロボットが
世界遺産だったら

とか

> パイロットが
昆虫だったら

とか

> コンピュータが
天体だったら

とか

> 出てくるモンスターが全部
お笑い芸人だったら

とか

> 仮面ライダーに変身する人が
かぐや姫だった

とか

> ライダーベルトが
「仏の御石の鉢」「蓬莱の玉の枝」「火鼠の皮衣」「竜の首の玉」「燕の子安貝」

とか(笑)
世界遺産の巨大ロボット by mieki256    2007/08/19 20:52
> 巨大ロボットが世界遺産だったら

おおお! たった一文なれど、なんだか色々妄想してしまいますな…。
世界遺産のロボットってどんなロボットなんや! から始まって、
ロボットを世界遺産にするってどんな世界なんじゃ! とか、
世界遺産と言うからにはロボットを壊したらいかんのだろうけど
万が一バトルして壊しちゃったらどうなるんや! とか…
夢が広がりんぐ! な一文であります。

#5 [comic] _腐女子の先生

それで、この夏コミで参加用紙もらって、冬コミに俺と相原くんその他で「やおい同人誌」を出そうという計画も考えているんですけど、

たけくまメモ : 腐女子の先生 より

光景を想像しただけで笑ってしまった。

周辺ブースのサークルが、竹熊×相原の突発コピー本でも作って祭りを盛り上げたりしないかしら。ちょこんと座ってるオヤジ(<失礼)二人の前後左右で、二人があんなことやこんなことをしてるやおい本がズラリと並ぶの図は、壮観というか、もはやカオス。冗談ですが。

コメント欄で、拒否反応がポロポロ出てるのがちょっと気になる。上手く盛り上げることができれば、それぞれにとって、楽しい思い出の1ページになりそうだけど。

#6 [tv] 「はだしのゲン」実写ドラマ版の原爆投下シーンをコマ送りで鑑賞

どうやって作ってるんだろう…。想像がつかない。

遠景から迫ってくる土煙。プラグインとやらで作れるものなんだろうか。それとも、実写素材を撮影 or 入手して合成したり…? 海外の映画作品等では、天井に沿って広がっていく煙を実写で撮影して、それを上下さかさまにして地面を這う土煙として合成したりする、てな話をどこかで見かけたのだけど。実はそういうこともやってたりするのかしら。いや、TV放送用の映像に、そんな手間暇かけてる時間はないよな。

なんとなくだけど、煙が手前に来た時に、コマを抜いて、スピード感を出してるようにも見える。どことなくアニメ的な映像の作り方。…いや、自分の気のせい・思いすごしかもしれんけど。>コマを抜いてるか否か。

爆風で家屋が吹き飛ぶカット。道を歩いてる人間が、途中から切り替わってる ―― おそらくはCGの人体モデル?に切り替わってるのであろうとは思うのだけど。そのまま映像を流してる分にはまったく判らない。実写の人間と、CG人体モデルは、静止画で比較するとかなりの差異があるのだけど。つーかぶっちゃけCGのソレは、TVゲームに出てくるローポリモデル程度にも見えるのだけど。 といった状態なので上手く行ってるのかなと想像。また、わずか数コマとはいえ、爆風で人間の体が不自然にねじ曲がっていくあたりまで描写していて、かなり感心。

にしても、MPEG2のビットレートが足りてなくて、破片が飛び散るコマはとんでもないことになってた…。もしかすると、地デジ放送もブロックノイズだらけになってたりするのだろうか。

VFXは西遊記の担当者と同じみたい。 :

高野善政、高橋美香、という名前が。

名前で検索したら、「とにかくスピードが求められる」的な話が。時間優先で作業して、この映像か…。スゲエ。

全然関係ないけど「ギギギ」。 :

柱に挟まれた中井貴一と子役が、実は「ギギギ」と言ってたりしないかなと思って再度確認したのだけど。やっぱり言ってないな。さすがにそこまでは映像化せんわな。ただ、その前のシーンで、柱を持ち上げようとした時に、木がこすれるSEがやたらと入ってるので、もしかするとスタッフは、「ギギギ」=「木の軋む音」として認識したのかも、などと何ら根拠のない勝手な想像をしてみたり。

#7 [anime] 「銀河鉄道物語 永遠への分岐点」をずっと見てるのだけど

夏休みということで、1日1話、月〜金に放映されているらしく。録画して、BGVとして流していたり。

1話完結タイプなので、見ていて気が楽。また、列車がCGで描かれていたり、キャラの顔・体の線が妙に多かったりするあたり、技術の進歩を感じたりもする。

松本零士ワールドのお約束が気になる。 :

自分が以前書いたことと矛盾するのだけど、宇宙に上下があるっぽいのがどうにも気になってしまう。さすがに空気は無いようだけど。…いや、判ってますけど。松本零士ワールドですから、宇宙に上下はあるし、下手すると空気もあるし、旗だってなびく。松本零士が絡む時点で、大体はそういう世界になってしまう。しかし…。物理法則(でいいのか?)すら都合のいいように捻じ曲げてしまう、そんな作家・スタッフが提示してきたものに対して、見る側は一体何を楽しんだらいいのか。なんだか考え込んでしまう。

物理法則すら捻じ曲げるぐらいだから、ストーリー上の整合性だって軽々と捻じ曲げられるわけで。本編冒頭でシチュエーションが提示された時点で、えてして結末は想像がつくし、キャラクターが登場した時点で、落ち着く人間関係も想像がつく。ここに落とすと決めた結末に向けて、いくらでも都合のいいように流れは改変される。となると、何を楽しめばいいのか。

捻じ曲げ方、なのかなぁ。楽しむとしたら。そういう意味では、松本零士作品は寅さんシリーズに近いのかもしれない。「寅さんがマドンナにふられる」という結末は、まず間違いなく決まってる。結末が判ってるのに、観客は作品を見て楽しんでる。「ふられる」という結末に向けて、どのように捻じ曲げていくのか、そこを観客は楽しんでいるのかもしれない。つまるところ、松本零士作品というものは、往々にして「松本メーターに囲まれてるだけの寅さん」に相違ないのだ。

「松本メーターに囲まれてるだけの寅さん」というフレーズをどうにか書きたくて、ここまで捻じ曲げてみましたが、さて。

松本零士ワールドはどこで作られているのかが気になる。 :

松本零士が松本零士ワールドを作ってるのだろうか。それとも、アニメスタッフが脚本やコンテを書く段階で松本零士ワールドになってしまうのか。

後者であれば、ちと問題かも。意識的に松本零士ワールドにしてるならいいのだけど、単に無知故に松本零士ワールドになってるとしたら、ちょっとなぁ…。そもそも、意図してやってるとしても、法則を捻じ曲げることで何を得ようとしてるのかが気になったりもする。万が一、読者・視聴者は上下のない空間が理解できない、とでも思われてたらなんだかマズいような気も。幼児が犬を「わんわん」と呼び続けてるから、大人も犬を「わんわん」と呼び続ける必要があるのだ、てのは何かが違うんじゃないか。…飛躍しすぎか。

100人中99人が「わんわん」と呼んでたら、残りの1人も「わんわん」と呼ばないといかんのだろうし。うーん。

2006/08/14(月) [n年前の日記]

#1 [web] _男性差別 - Wikipedia

_女性差別 - Wikipedia

男はつらいよ。

そういえば、ガンダムの世界では女性兵士も当たり前だったりするか。…ガンダムの世界は、徴兵制ではなかったような。いや、ジオン軍は徴兵制だったかしら。よく覚えてない。でも、ゲルググに乗ってる女性兵士とか居たかな。どうだったろう。

_wikipediaにおける禁句 :

興味深い話。

#2 [zatta] _色んな人が歌ってる君が代

いくつか聞いてみたけど。アレンジ、かなり難しそう。

#3 [anime] _「多くの人が宮崎駿のアニメもいつかは終わると思っているだろうが、ご安心下さい、ということです」

鈴木Pは、宮崎吾郎監督を宮崎駿の代用品として見てるのだな。

記事中には「一子相伝」なる言葉が出てるけど。そもそも、宮崎駿は、息子に自分の手法を、手取り足取り伝えてないだろうし。一子相伝なんてものから程遠い状況であろう予感も。それっぽい言葉を持ってきて聞き手をその気にさせる天才、かもしれぬ。>鈴木P。

む。もしかして、鈴木Pの言う「多くの人」ってのは、制作費を出してくれる人たちを指してたりするのかしら。そりゃまあ、そういう人たちに、「宮崎アニメは駿監督が居なくなっても作れますよ」と宣伝したほうがいいか。ジブリ存続のための嘘・方便、なのだろうなぁ。

_だから、“workmanship”“働きがい”は親から子に伝えられることが多いんです。 :

ちょっと関係ありそうな気がしたのでメモ。

#4 [zatta] _「右の頬を打たれたら…」の謎 - 利き手の不思議から解き明かされる、「言葉の真意」

手の甲で叩くのと掌で叩くのは意味が違うので、左の頬を差し出すことで相手にジレンマを抱えさせる、という話。コメント欄では、「目には目を 歯に歯を」の解釈についても載っている。

「情けは人のためならず」が誤解されて伝わっている状況と似たようなものかもしれない。てなことを思ったり。

#5 [anime] _(ある意味)リアル電D

_GS2音声収録裏(でも無いかも知れない)話の2

収録して売ってくれないものだろうか。無理か。原作者が怒るわな。たぶん。

2005/08/14() [n年前の日記]

#1 [linux] 自宅サーバにphpをインストール

Vine を使ってるので、apt で。
apt-get install php

_PHP( RPM 版)の導入 - Linux で自宅サーバ :

参考にしつつ作業。/etc/http/conf/httpd.conf の中で関係があるのは下の部分らしい…。引用させてもらうであります。
<IfDefine HAVE_PHP4>
LoadModule php4_module        modules/libphp4.so
</IfDefine>

<IfDefine HAVE_PHP4>
AddModule mod_php4.c
</IfDefine>

# The following is for PHP4 (conficts with PHP/FI, below):
<IfModule mod_php4.c>
  AddType application/x-httpd-php .php4 .php3 .phtml .php
  AddType application/x-httpd-php-source .phps
</IfModule>

httpd が起動しない… :

/etc/rc.d/init/httpd restart しても、httpd が動いてない。何かがおかしい…。

もしかして、httpd を停止してからやらないとマズかったのだろうか。

サーバ自体を再起動。…返事が返ってこない。

#2 [linux] 自宅サーバのHDDがヤバそう

階下の自宅サーバを見にいったら、BIOS起動時にS.M.A.R.Tがどうとか表示されて止まってた。HDDが死にかけてる予感。しかも /home を割り当ててあるHDD。

ということで、 HDDを交換したいと思います。その間、この日記やその他のコンテンツが見れなくなりますが、ご容赦ください。…ってコレ書いてる現在、外部からこの文を閲覧しようもないのだけど。geocities に置いてあるページに書いておかないと…。

この際だからOSもアップデートしてしまおう :

Vine Linux 2.6r4 → 3.1 に。

とりあえず掃除 :

部屋に持ち込んでケースを開けて掃除。

蜘蛛の巣だらけです。しかもケースの底面には、蜘蛛の糞なのか、虫の残骸なのか、謎の黒い物体が一面に散乱。

部屋に置けません :

前々から自室に持ってこようと思ってたのだけど、いざ、予定してた場所に置こうとしたら、ケースが大きすぎて入らない。フルタワーケースはこれだから困る…。ミドルタワーケースを買ってこないとダメか…。

とりあえず、あくまで仮で、パソコンデスクの横にどうにかして置いたけど、ぶっちゃけ邪魔…。本来2/3の大きさで充分なんだよな…。

自室にサーバを置くと100BASE-TX SW HUB のポート数が足りなくなる :

4ポートのHUBだけど、
  • 階下のルータから →
  • → 妹の部屋
  • → 自分のメインPC
  • → サーバ
  • → PC-9821
という感じで。もう1つ、K6-200MHz のPCがあって…。

PC-9821 にしろ、K6-200MHz マシンにしろ、ほとんど使ってないからどうにでもなるか。

HUB じゃなくて、LANケーブル切替、みたいな機器はないのかしら。

#3 [pc] _スイッチングハブの利点

「HUBは多段接続に制限があるもの」と思い込んでたけど、SW HUB(スイッチングハブ)にはその制限はなかったのか。あるのはリピータハブなのだな。であれば、8ポートの SW HUB に買い替える必要もないか。いざとなれば4ポートの安い SW HUB を追加購入すればいい。

つーか今なら8ポートHUBからして安いやん。ヨドバシカメラのサイトを眺めたら、2,000円台からある…。昔、10BASE-T の4ポートリピータハブを4,980円で買ったっけなぁ…。

各商品を眺めていて感じたり。今はもう、1000BASE-T の時代なのだな。

_@IT : 特集 : 1000BASE-Tへの移行で気になるコストと性能 1000BASE-Tへの移行の是非を考える (1) :

_(2) _(3) _(3)

2003年の記事。1000BASE-T HUB が、3万円とか書いてある。今なら…例えばヨドバシカメラのネット通販だと5,000円からあるみたい。もっとも、企業用のソレと家庭用のソレでは信頼性が違うだろうけど。とはいえ大昔の100BASE-TX関連の値段に全体的になってるような感も。安くなったなぁ。

_1000BASE-Tで900Mbps超が出た! - [LAN]All About :

なるほど。条件が揃っていればちゃんと速度は出るらしい。

#4 [vine] Vine Linux 2.6r4 を 3.1 に upgrade

2.6.99 にしてから 3.1 にするらしい。

_Vine Linux aptによる 2.x → 3.0へのアップグレード
_Vine Linux 2.6を3.1にapt-get dist-upgradeする
_[vine-users:066774] upgrade to 3.0 from 2.6 by apt <なんだか文字化けしてる…
_[vine-users:066903] Re: upgrade to 3.0 from 2.6 by apt
_[vine-users:066927] Re: upgrade to 3.0 from 2.6 by apt
_Vine Linux 2.6r1 から 3.1 に更新する
_Vine Linux 2.6から3.0へのバージョンアップに伴う設定の変更 - Googleキャッシュ
_Vine Linux 2.6 から 3.X へのアップグレード

参考にさせてもらいつつ作業したり。ありがたや。

「トランザクション処理中にエラーが発生しました」と出て、止まってしまった :

うーむ。

とりあえずログを見て、Error が出てるらしきパッケージを、apt-get --reinstall install hoggehoge で再インストール。なんだか、XOrg-libs がちゃんと入ってなくて、あちこちでErrorが出ていたみたいではある。

必ずdb3がどうとかErrorが出るなぁ :

error: cannot open Installtid index using db3 - そのようなファイルやディレクトリはありません (2)
error: cannot open Sigmd5 index using db3 - そのようなファイルやディレクトリはありません (2)
だそうで。こりゃ一体なんだ?

_[vine-users:066906] Re: upgrade to 3.0 from 2.6 by apt
aptでupgradeした後で、私もこれが出るようになったのですが、
$ rpm --rebuilddb
と、おまじないを唱えたら、直ったような記憶があります。
なるほど。出なくなった。ありがたや。

#5 [vine][linux] _@IT:ハードディスクのS.M.A.R.T.情報を表示するには

_hddの状態を監視する - ShibaPuki

気になる話。メモ。

#6 [linux] _ルートファイルシステムをチェックするには

# shutdown -F -r now
メモ。

#7 [linux] _teeで操作ログを記録 - ITmediaエンタープライズ : Linux Tips

「tee」なるコマンドをどこかで見かけて気になったり。

#8 [vine] 自宅サーバのkernelをアップデート

2.4.22-0vl2.14 → 2.4.27-0vl7.6 に。
apt-get install kernel
でインストールできるkernelの一覧が表示されるので、その中から選ぶ。

kernel-doc、kernel-headers、kernel-source も入れた。

liloに反映させるのを忘れずに。
vi /etc/lilo.conf
で修正。
/sbin/lilo
で、MBRだかに書き込み?

#9 [vine] task-xfce をインストール

軽そうなので。

_Xのウィンドウマネージャを変えるには :

Vine Linuxの場合は、setwmコマンドを使用する。オプションなしでsetwmコマンドを実行すると、オプションの一覧が表示される。

何故かマウスが動かない :

サーバ機に取り付けたマウスが動いてくれない。…中国製の500円ぐらいの有線・ボール式だけど。いつのまにか壊れてしまったんだろうか。

2004/08/14() [n年前の日記]

#1 [zatta] 日記を読んだ妹から指摘されたデスよ

「お前はツールを使いこなせていない! 言及してる対象が変わってるのに、なぜ別記事にして書かんのだ! だから誤解を招くのだ! 記事を分けられるツールの利点を活かしてないぞ!」と。ガーン。そのとおりであります… orz

オイラの文章は話が飛ぶんですよね :

ある事象をきっかけに、考えを書き始めるんですけど。途中から、より広範囲な対象に向けた内容に、変化していったり。あるいは、そこから連想される、まったく異なることについて言及し始めたり。かと思いきや、いつのまにか元々の事象へと、対象範囲を狭めて言及していたり。…とにかく、話が飛ぶ。読んでるほうはわけがわかんないだろうと想像。書いてるときはOKと思っても、数日経って読むと、あっちこっちに話がピョンピョン飛んでる事に気づく。ガックリでゲスよ。

まあ、その日はそういう風に考えてたという記録 ―― まさに、「日記」なのかも。(;´Д`)

#2 [hns] ツッコミ機能の本文投稿可能量を増やした

「長過ぎます」と文句を言われてしまった(爆)

修正箇所 :

lib/Board.pm 中の、$BodyMaxLen を増やした。問題出るかな、出ないかな。

ついでに注意書きを追加 :

投稿しても、日記ページに反映されないときがほとんどで。日記ページのURLの後ろに「?」を追加してるけど、何故か効果なし。IEとNNの完全リロードの方法を、掲示板(=ツッコミ機能)の上部に明記。

ホントは「長い」と文句を言われる時点でマズイ気も :

長文カキコは、それだけで読まれないからなぁ…。 _「ツッコミは短く鋭く愛を込めて」 でしたか。ウチの場合は、日記を書いてる、このオイラからして、守れていないデスヨ… orz

#3 [tv] オロナミンC・韓国の王子様に会いにいく編を見て

王子様は、なぜ、必ず、ピアノなんだろう? アニョハセヨー。

王子様に全然似合わない楽器はなんだろうね :

リコーダー、カスタネット、タンバリン…そのへんか。む? 打楽器系は、あまりウケがよくなさそう。予感がします。

道に迷った娘さんが :

不思議なしらべを耳にする。あら、何かしら、この音楽は…。なんて不思議で、なんて切ない音楽。まるで胸を締めつけられるよう…。音のするほうへと足を運ぶ。どうやらこの部屋から音がするみたい。そっと覗いてみると、まるでモデルと見紛うばかりの美しい青年が、一人、曲を奏でていた。一心不乱に和太鼓を叩くその姿。ドンドコドコ、ドンドコドン。カカッ、カッ、カッ、カッ。飛び散る汗がキラキラと舞う。頬を赤らめ見入ってしまう娘。…娘の姿に気づいた王子様。バチを振るう、白魚のようなその手を止め、問いかける。「…おや? 道に迷ったのかな? 子猫ちゃん」 嗚呼、浪漫チック… <お前ちょっと病院行ってこい。

真面目な話 :

フルートやバイオリンは、王子様に似合うな。たぶん。

ギターはどうだろう。フォークギターは結構いいかも。エレキギターは、ちょっと微妙。でも、エレキギターを激しくかき鳴らしてた男が、いきなりピアノを弾き始めると、ヤンキー効果でたちまち王子様に見えてきそうですよ。

オカリナや、ハーモニカも、結構似合うかも。ポケットからこっそり出して吹きはじめたら、「ほほぅ」って感じ。

同じ鍵盤系でも、キーボードは微妙。特に、DTM関係が関わってくると、なんだかビルゲイツみたいな顔立ちが脳裏に浮かびます。<スゲー偏見。

#4 [anime] 鋼の錬金術師、休みだったのね

ワクワクしてTVをつけたら、個人的にはかなり嫌いなスポーツマンの姿が画面に写ってダメージ大。orz

2003/08/14(木) [n年前の日記]

#1

室温20℃。急に寒くなった。

#2 停電かと思ったら

各種電気機器の電源が突然落ちたので、停電か、雷かとマジで焦ったら。お袋さんが掃除中にブレーカーのスイッチを引っ掛けて電気が途切れたという…。またやられたら怖いんで、サーバを数時間落としておいたり。

#3 [pc] MaxtorのHDDを選んだわけだけど

選択を失敗した可能性が。ネットで関連情報を探して愕然。最近のMaxtorはすぐ壊れるのだそうで。今回購入してきた型番もかなり酷いらしく、熱量が凄い、2ヶ月持たなかった、Smoothなるチップから実際に火を吹いたとか色々怖い話が。HDDにヒートシンクや冷却ファンをつけてるなんて話も見かけ、かなりドキドキ。今までMaxtorの製品を選んで外れた事がなかった、そして5400rpm製品は滅多に見かけないので仕方なく、といった理由でMaxtorの7200rpm製品を選んだのだけど、まさかそこまで悲惨な状況だったとはなぁ。…そこそこの価格でまともな品質のHDDを生産してるメーカは、既にこの地球上には存在しないということだろうか。

とりあえず、PowerMaxとやらでチェックして、amsetで静音モードにして、とかやってみないと…。それと、UDMA133,100,66→UDMA33に切換えるユーティリティを探したけど今現在はそういうものは無いみたい。やはり自動で検出・設定する事になってるのだろうか。

それにしてもどうしよう。メインで使っても大丈夫なHDDなんだろうか。不安。

#4 [pc][web] フリー写真素材のページを追加

というより、PowerShot A300 のサンプル画像ページというか。A300の画像を置いてるサイトは少ないようなので、多少は存在意義もあるのではないかと予想。そのうちあちこち撮ってきて多少は増やす予定。

リンク修正のついでに孤島発見器でチェックしたら :

ボロボロとエラーが。こんなにマズイ状態になってたのか…。

2002/08/14(水) [n年前の日記]

#1 配線

配線見直したらますます遅くなりました。500kbps→300kbps _
助けて…

どういう見直しをしたかは、言えない。
生命にかかわることなので(違


ここんとこ、毎日雷が鳴るんです。
今日のは特にヒドイ。
夜中も鳴ってますよ。電灯が点いたり消えたりしてますよ。

怖いんで、サーバ落としました。

2001/08/14(火) [n年前の日記]

#1 特になし

ムリョウ、面白いなぁ。

2000/08/14(月) [n年前の日記]

#1 PS2のDVD再生とタスクバー

妹がPS2を買ってきました。
DVD再生の画面を見せてもらったんですが、予想以上に綺麗。
なんだかPCでDVDを見てるのがバカバカしくなりました。
CPUスペックが、ドライブのDMAが、熱暴走が、などと思考錯誤しながらのDVD再生…
ホント、バカバカしくなります。

Win98のタスクバーにデスクトップ等のツールバーを付加して使用してるのですが。
位置や表示するモノを変更しても、再起動すると元に戻っちゃう。なぜだ!?
半日近く色々調べたところ、レジストリ中の「設定を変更させない」フラグが、何時の間にかONになってた模様。なぜ…?
あやうく再インストールするところでしたよ。トホホ

ついでにデスクトップのアイコンを全て非表示に設定。
タスクバー上の「デスクトップ」ツールバーからアクセスすることにしました。
画面にはタスクバーのみ。とてもすっきり。気持ちいい。
…でもうっかりデスクトップのアイコンを探してしまう。慣れが必要だなぁ。

1999/08/14() [n年前の日記]

#1 (NoTitle)寝ないで銀行へ。少し...

寝ないで銀行へ。少しでも寝るとヤバイ。
PM0:00頃帰ってきてからバタンキュー。PM9:30起床。

てなわけで明日ビックサイト行きます。雨が心配だけど。大変なことになってるよね。神話は崩れた。<コミケは必ず晴れ、ってやつ。
明日行ってホテルで一泊して16日に帰ってくる予定。

さて。寝なきゃ。
寝れるのかな…。

以上、25 日分です。

過去ログ表示

Prev - 2024/04 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project