mieki256's diary



2024/02/27(火) [n年前の日記]

#1 [prog] GLFWを使ったC言語のソースをコンパイルしようとして少しハマった

OpenGLの学習をする際に、ウインドウの生成処理その他を簡単にしてくれる GLFW というライブラリ(ツールキット?)があって、少し勉強しようとしていたのだけど。C言語で使おうとしたところコンパイル時にリンクエラーが出て少しハマってしまった。

環境は Windows10 x64 22H2 + MinGW gcc 6.3.0。

エラー内容は以下と同じ。

_c++ - "undefined reference to __mingw_free" when linking GLFW - Stack Overflow _c - GLFW with GCC Mingw flags for static doesn't work as documented - Stack Overflow

gcc 6.3.0利用時の注意点 :

一般的には、gcc で glfw3 を使ったソースをコンパイルする場合、-lglfw3 を指定すればリンクができるはずなのだけど…。

SourceForge から入手できる MinGW gcc 6.3.0 を使って、GLFW を利用しているC言語のソースをコンパイルする場合は、以下のように `-lglfw3dll` を指定しないとリンクエラーが出てしまう。

gcc 01_helloglfw.c -o 01_helloglfw.exe -static -lglfw3dll -lopengl32 -lwinmm -lgdi32 -mwindows

この場合、生成した .exe を動作させるためには、別途 glfw3.dll が必要になる。objdump を使って、生成された exe が要求するdllの一覧を出してみると、glfw3.dll が入ってることが分かる。
> objdump -p 01_helloglfw.exe | grep dll
        DLL Name: glfw3.dll
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: msvcrt.dll

gcc 9.2.0なら問題は起きない :

SourceForge から入手できる MinGW gcc 6.3.0 ではなく、OSDN から入手できる MinGW gcc 9.2.0 を使えば、-static -lglfw3 を指定することで、glfw3.dll を必要としない実行形式を作れる。

そもそも、GLFWの公式配布版バイナリに同梱されている README.md には、「MinGW (built with GCC 9.2.0)」という記述があった。gcc 6.3.0 ではなく gcc 9.2.0 の利用を前提としたバイナリだったらしい…。

しかし、MinGW gcc 9.2.0 が入手可能な OSDN は、サービス終了するという話があったはずで…。サービス終了が中止になったという報道も見かけたけれど、今までの不安定な状況を鑑みれば、今後どうなるのか予測がつかない。将来的には Windows上で動作する MinGW gcc 9.2.0 が入手できなくなる可能性が高いだろうなと。

MSYS2を使えばハマらずに済む :

GLFW を使って実験するなら、MSYS2 + gcc 13.2.0 を使ったほうがいいのかもしれない。そちらなら、-static -lglfw3 の指定で、glfw3.dll を必要としない実行形式を生成できる。
$ objdump -p 01_helloglfw.exe | grep dll
        DLL Name: GDI32.dll
        DLL Name: KERNEL32.dll
        DLL Name: msvcrt.dll
        DLL Name: OPENGL32.dll
        DLL Name: SHELL32.dll
        DLL Name: USER32.dll

また、MSYS2用パッケージとして GLFW も用意されているので、公式サイトからバイナリをDLして手作業でコピーして、といったこともしなくて済む。
$ pacman -Ss glfw
...
mingw32/mingw-w64-i686-glfw 3.3.9-2 [インストール済み]
    A free, open source, portable framework for OpenGL application development (mingw-w64)
mingw64/mingw-w64-x86_64-glfw 3.3.9-2 [インストール済み]
    A free, open source, portable framework for OpenGL application development (mingw-w64)
...

公式配布版 GLFW のバイナリについて :

glfw-3.3.9.bin.WIN32.zip までは MinGW 9.2.0 用のライブラリファイル (lib-mingw/) が入っているが、glfw-3.3.10.bin.WIN32.zip 以降は、lib-mingw-w64 しか入っていない。

テクスチャ画像読み込み機能が無くなっていた :

GLFWはテクスチャ画像の読み込み機能があるという話を見かけて気になっていたのだけど、ググってみたらそれは昔の話のようで、glfw3 では削除されていたらしい。

_GLFW: Moving from GLFW 2 to 3
Removed functions
glfwReadImage, glfwReadMemoryImage, glfwFreeImage, glfwLoadTexture2D, glfwLoadMemoryTexture2D and glfwLoadTextureImage2D.

GLFW: Moving from GLFW 2 to 3 より


ごっそり無くなってるなあ…。

2023/02/27(月) [n年前の日記]

#1 [pc][linux] GParted liveを使ってHDDのパーティションを移動

_昨日、 無料で利用できるパーティション管理ツール GParetd live を使って、Gateway M-2408j のHDDパーティションをリサイズ(縮小)したけれど。ついでにパーティションの移動もやってみたので手順をメモ。昨日のメモとダブってしまう部分もあるけれど…。

ちなみに、Gateway M-2408j のHDDには、Windows Vista と Linux Mint 21.1 64bit版がインストールされていて、デュアルブートできるようにしてある。OSの選択は、Linux Mint インストール時にインストールされた grub (grub2) を使って行う。

GPartedをUSBメモリにインストール。 :

GParted live (gparted-live-1.5.0-1-i686.iso) を、32GBのUSBメモリに、Rufus 3.1 Portabl で書き込んだ。書き込む際にISOモードとDDモードのどちらかを選択するけど、今回はISOモードを選んだ。

_GParted -- Download
_Rufus - 起動可能なUSBドライブを簡単に作成できます

USBメモリから起動。Gateway M-2408j の場合、起動ロゴが出ているタイミングでF10キーを叩けばブートメニューが表示されるので、そこから起動デバイスを選ぶ。

途中でアレコレ尋ねてくるあたりは、 _昨日 のメモを参考に。

作業前のパーティション構成は以下。
  • /dev/sda1 Windows Vista用の何か
  • /dev/sda2 Windows Vista 約160GB
  • /dev/sda3 拡張パーティション
  • /dev/sda5 Linux Mint 約50GB
  • /dev/sda6 Linux swap

作業内容は以下。
  • Windows Vista用のパーティションを160GBから120GBにリサイズ(縮小)。
  • 40GBほど空き領域ができるので、拡張パーティションの先端を前にずらす。
  • Linux Mint 用パーティションと Linux swap も前に移動した。移動する際、「この処理をするとOSがブートできなくなるよ」と警告が出てきたけど、そのまま作業を進めた。

GParted の画面で、パーティションを右クリックするとメニューが開くので、「リサイズ/移動」を選べば、縮小、拡張、移動を指定できる。指定が終わったら「適用」相当のアイコンをクリック。今までの指定が順次行われていく。

grub2の再インストール :

OSのブート領域が入ってるパーティションを移動してしまうと、grub2 の起動時におかしくなって Linuxなどが起動しないので、grub2 の再インストールが必要になるらしい。

再インストールの手順は以下に書いてあった。

_GParted -- GParted Manual

Gparted live の入ったUSBメモリで起動して、GParted を閉じてから、デスクトップ上の Terminal をダブルクリックして端末を開いて、コマンドを打ち込んでいく。

ちなみに、Gparted live で起動した際、ユーザ名は user、パスワードは live になってるらしい。root のパスワードは設定されてない模様。sudo を使って管理者権限でコマンド実行ができる。

_GParted -- Live CD/USB/PXE/HD

今回、Linux Mint の入ってるパーティションは /dev/sda5。

Linuxがインストールされているパーティションをマウントするためのディレクトリを作成。ディレクトリ名は何でもいい。たぶん。
sudo mkdir /tmp/linuxmint

パーティションをマウント。
sudo mount /dev/sda5 /tmp/linuxmint

もし、/boot を / と別パーティションにインストールしてある場合なら、以下の指定も必要になるらしい。今回は / の中に /boot が入っていたので、この指定はしなかった。
sudo mount /dev/sda3 /tmp/linuxmint/boot

他の重要らしいディレクトリを割り当て。
sudo mount --bind /dev /tmp/linuxmint/dev
sudo mount --bind /proc /tmp/linuxmint/proc
sudo mount --bind /sys /tmp/linuxmint/sys

マウントしたパーティションをルート(「/」)にする…らしい。たぶん。ここでエラーが出たけど、それについては後述する。
sudo chroot /tmp/linuxmint

grub (grub2) のインストール。Debian や ubuntu は grub-install で良い、と書いてあるように見える。
# grub-install /dev/sda
or
# grub2-install /dev/sda

chrootでエラー :

chroot を実行したところでエラーが出た。
chroot: cannot run command '/usr/bin/bash': Exec format error

エラーメッセージでググると…。

_chroot - ArchWiki
chroot: cannot run command '/usr/bin/bash': Exec format error というエラーが表示される場合、ホスト環境と chroot 環境のアーキテクチャが一致していません。

アーキテクチャって何ぞや。要するに、HDDにインストールされているLinux Mint は64bit版だったのに、GParted live は32bit版(i686)を使ってしまったので、「32bit版と64bit版ではアーキテクチャが違うで」となってしまったらしい。たぶん。つまり今回は、GParted live も、HDD内にインストールされてるOSに合わせて64bit版(amd64)を使わないといけなかった模様。

どうせなら、HDDにインストールされている Linux Mint 21.1 のライブCD(DVD?)を使って作業してみることにした。そのほうが確実に作業できるだろう…。

linuxmint-21.1-cinnamon-64bit.iso を入手。Rufus でUSBメモリに書き込み。USBメモリから起動した後の作業手順は前述の通り。

ちなみに、Linux Mint のライブCDで起動した際、ユーザのパスワードは設定されてないらしいので、sudo を使って管理者権限でコマンドを実行する際にパスワードの入力は求められない。

_Linux Mint のデフォルトパスワード(live session password) - simotin13's message

これで、HDDから Linux Mint 21.1 64bit版が起動してくれる状態になった。一応念のために、HDDから Linux Mint が起動した状態で、grub の再インストールと更新をしておいた。
sudo grub-install /dev/sda
sudo update-grub

この状態なら、Windows Vista + Linux Mint が240GB未満に収まってくれたはずだから、240GBのSSDにも換装できるんじゃないか…。と思ったけれど調べてみたら HDD から SSD に換装する場合、dd なるコマンドを使って中身を転送することになるようで。となると、HDDの最後のあたりを転送する際にSSD側の容量が足りなくてエラーが発生しそうな気がする…。

#2 [linux] swapパーティションを設定

ふとなんとなく、Gateway M-2408j + Linux Mint 21.1上で、swap のサイズを増やしたいなと思い立ってしまって。

GParted live を使って swapパーティションのサイズを 1.7GBから4GBに増やしてから、linux swap としてフォーマットをかけたところ、Linux Mint 21.1 が起動する際に swapパーティションを見つけられず、起動が随分と待たされる状態になってしまった。やっちまった。

以下を参考にして修復作業。

_Linux | SWAP領域の確認と作成 - わくわくBank
_/etc/fstabのデバイス名が変化し起動失敗した時の対処法【UUIDで解決!】|株式会社ネットアシスト

以下でswapの状態を確認できる。実行してみたら何も出てこなかったので、swapが有効になってない状態なのだろう…。
sudo swapon -s

swap領域を作成。今回 swapとして使いたいパーティションは /dev/sda6。
$ sudo mkswap /dev/sda6
mkswap: /dev/sda6: 警告: 古い swap 署名を消去しています。
スワップ空間バージョン 1 を設定します。サイズ = 4.1 GiB (4399820800 バイト)
ラベルはありません, UUID=1e053734-5db9-46ee-b790-93fd19d29eca

swapとして指定。
$ sudo swapon /dev/sda6

$ sudo swapon -s
Filename                                Type            Size            Used            Priority
/dev/sda6                               partition       4296700         0               -2
swapが有効になった。

ところで、mkswap を使った時に出てきたUUIDとはなんぞや。

_UUIDとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
_UUID - Wikipedia
_UUID

ユニークなIDをHDDのパーティションにつけることで今後の管理を楽にしよう、ということなのかな。たぶん。

blkid というコマンドを使って、UUID を確認できる。
$ sudo blkid
/dev/sda2: LABEL="Partition_1" BLOCK_SIZE="512" UUID="3CF00E26F00DE74C" TYPE="ntfs" PARTUUID="2bab359d-02"
/dev/sda5: UUID="55c2b3ae-1716-4184-b19c-05a1f97c36fc" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="2bab359d-05"
/dev/sda1: LABEL="Recovery" BLOCK_SIZE="512" UUID="4252930E529305B7" TYPE="ntfs" PARTUUID="2bab359d-01"
/dev/sda6: UUID="1e053734-5db9-46ee-b790-93fd19d29eca" TYPE="swap" PARTUUID="2bab359d-06"

今回は以下のような構成だから…。Linux swap の UUID は、"1e053734-5db9-46ee-b790-93fd19d29eca" ということらしい。
/etc/fstab を修正してswapを永続化してみる。おそらく、/etc/fstab 内で今まで指定してたUUIDと、今現在のUUIDが違ってしまったので、swapパーティションを見つけられない状態になったのだろう…。
sudo vi /etc/fstab
# swap was on /dev/sda6 during installation
UUID=1e053734-5db9-46ee-b790-93fd19d29eca none            swap    sw              0       0

ただ、巷の解説記事を眺めた感じでは…。昨今は linux swap のパーティションを作らずに、swapファイルを作ってどうにかする場合が多そうに見えた。わざわざswap用のパーティションを作るのは時代遅れなのだろうか?

まだ時間がかかる。 :

Linux Mint 21.1 起動時に、swapパーティションを見つけてくれるようになったけど、まだ何かをチェックするところで時間がかかる。"scanning for btrfs file systems" と表示されたところで、十数秒待たされてしまう。

_[SOLVED] Very Slow boot time on Mint-19.3
_ubuntu - How to get rid of the “scanning for btrfs file systems” at start-up? - Unix & Linux Stack Exchange
_resume - Swap: From partition to file, now get "no matching swap device is available" - Ask Ubuntu
_Ubuntu18.04でハイバネート(休止状態)ができない

上記のやり取りで、「btrfs はそもそも使ってない環境が多いだろうからアンインストールしてみたらどうか」という話があったので試してみる。

sudo apt purge btrfs-tools btrfs-progs
sudo update-initramfs -ukall
ちなみに、上記を実行したら、Linux Mint に標準でインストールされているバックアップツール、timeshift もアンインストールされた。

$ sudo update-initramfs -ukall
update-initramfs: Generating /boot/initrd.img-5.15.0-60-generic
W: initramfs-tools configuration sets RESUME=UUID=8f8f3f59-dd26-4779-b96a-2d6d75a3d620
W: but no matching swap device is available.
I: The initramfs will attempt to resume from /dev/sda6
I: (UUID=1e053734-5db9-46ee-b790-93fd19d29eca)
I: Set the RESUME variable to override this.
...

update-initramfs とやらを実行した際に、警告が表示されていることに気づいた。ひょっとして、RESUMEとやらの指定で、古いswapパーティションのUUIDが記述されたままなのでは…? そこも修正しないといかんのではないか。

sudo vi /etc/initramfs-tools/conf.d/resume
RESUME=UUID=1e053734-5db9-46ee-b790-93fd19d29eca

変更してから、再度 sudo update-initramfs -ukall を実行。警告が出てこない状態になった。この状態で再起動をかけたら、起動時に待たされる症状は無くなった。

おそらく、btrfs云々は関係なくて、initramfs云々で存在しないUUIDが指定されてたのが問題だった気がしてきた。

2022/02/27() [n年前の日記]

#1 [pc] LEDについて調べてる

本当にLEDって削って好きな形にできないのかなとググって調べていたのだけど。まあ…フツーはそんなことをしないみたいだな、と…。

大量のLEDを使って何か作れないか、みたいなアレコレもついつい眺めてしまった。3次元的にLEDを配置して光らせる作例などは面白そうだなと。Raspberry Pi を使って制御したりするっぽい。

2021/02/27() [n年前の日記]

#1 [hsp][raspberrypi][linux] HSPと/dev/input/についてまだ調べてる

HSP3.6beta を Raspberry Pi Zero W + Raspberry Pi OS buster 上で動かした際に、キーボードやマウスの入力が取得できない件について、まだ調べてる。

_HSP と /dev/input/by-id について調べてる
_HSP と /dev/input/by-id についてもう少し調べてる

/dev/input/by-id/ 以下に出現する文字列を頼りにして、どれがキーボードでどれがマウスかを判別するのはどうやら難しそう、という気配を感じているのだけど。

では、どうすれば、どれがキーボードでどれがマウスかを判別できるのだろうか?

Linux は、/proc/bus/input/devices を見れば、どんな入力機器が接続されているのか情報を得ることができる。cat /proc/bus/input/devices と打ってみれば、入力機器の名前だの、どの event番号に何が割り当てられているのか等々を取得できるわけで。

ならば、その /proc/bus/input/devices を読んで、これがキーボードでこれがマウス、と当たりをつけることができるのではないか。

と思って、Raspberry Pi Zero W上でそのあたりを確認してみたのだけど。こうすればいいのでは、という方法が見えてこなくて…。以下に、調べてみた結果を挙げておくけれど…。

_BUFFALO BSKBW03WH + Logicool VX Nano (キーボードは反応するけどマウスは無反応)
_Logicool K400r (キーボードもタッチパッドも無反応)
_Lenovo KU-1255 (キーボードもトラックポイントも反応)

/proc/bus/input/devices を眺めてみても、ココを頼りに判断すればいいのだ、という部分が見つからない…。

ちなみに、確認した機器は以下。
Linuxのデスクトップ画面上でキーボードもマウスも使えているのだから、これがキーボードでこれがマウスだと判別する方法が絶対必ずあるはずだけど。ググってみても、作法に遭遇しない…。それぞれどうやって実現しているのやら…。

EV値は今一つだった。 :

/proc/bus/input/devices の中に「B: EV=xxxxxx」という部分があって、その機器がどういう信号を出してくるのか、ビット単位のフラグで列挙されているのだけど。

もしかして、その値を見れば、どれがキーボードでどれがマウスか分かるのでは? と思ったものの…。同じ値が並ぶ場合が多くて、これだけでは判別できそうにないなと…。

ちなみに、16進数を眺めても何がなんだか分からんので、EV値がどういう内容なのか確認するための Pythonスクリプトを書いてしまった。

_evdump.py
"""
EV値が何を示しているかを表示

Windows10 x64 20H2 + Python 3.8.7 64bit
"""

# reference material
#
# Programming for a Touchscreen on the Raspberry Pi | ozzmaker.com
# https://ozzmaker.com/programming-a-touchscreen-on-the-raspberry-pi/
#
# linux/input.h at master - spotify/linux
# https://github.com/spotify/linux/blob/master/include/linux/input.h

# (   0    0    0    0    0    0)H
# (7654 .21. .... .... ..54 3210)B
#  ||||  ||              || ||||
#  ||||  ||              || |||+- EV_SYN
#  ||||  ||              || ||+-- EV_KEY
#  ||||  ||              || |+--- EV_REL
#  ||||  ||              || +---- EV_ABS
#  ||||  ||              |+------ EV_MSC
#  ||||  ||              +------- EV_SW
#  ||||  |+---------------------- EV_LED
#  ||||  +----------------------- EV_SND
#  |||+-------------------------- EV_REP
#  ||+--------------------------- EV_FF
#  |+---------------------------- EV_PWR
#  +----------------------------- EV_FF_STATUS

ev_list = {
    0x00:"EV_SYN",
    0x01:"EV_KEY",
    0x02:"EV_REL",
    0x03:"EV_ABS",
    0x04:"EV_MSC",
    0x05:"EV_SW",
    0x11:"EV_LED",
    0x12:"EV_SND",
    0x14:"EV_REP",
    0x15:"EV_FF",
    0x16:"EV_PWR",
    0x17:"EV_FF_STATUS",
    0x1f:"EV_MAX"
    }

def main():
    allmask = 0
    for k, v in ev_list.items():
        allmask = allmask | (1 << k)

    print("Please input, hexadecimal or 'exit'")
        
    while True:
        s = input("EV=")
        if s == "" or s == "bye" or s == "quit" or s == "exit":
            break
        val = int(s, 16)

        result = " -> "
        for k, v in ev_list.items():
            # print("0x%02x : %s" % (k, v))
            mask = 1 << k
            if (val & mask) != 0:
                result = result + v + " "
                
        print(result)

        if (val & ~allmask) != 0:
            v = val & ~allmask
            print("Unknown : 0x%x" % v)

        print()


if __name__ == '__main__':
    main()

動作させると以下のような感じになる。EV値(16進数)を打ち込むとフラグ内容を表示してくれる。exit と打ち込むと終了。
> python evdump.py
Please input, hexadecimal or 'exit'
EV=120013
 -> EV_SYN EV_KEY EV_MSC EV_LED EV_REP

EV=17
 -> EV_SYN EV_KEY EV_REL EV_MSC

EV=1f
 -> EV_SYN EV_KEY EV_REL EV_ABS EV_MSC

EV=

ちなみに、lsinput の出力結果と照らし合わせてみたけど、結果は一致した。処理は合ってるっぽい。というか、Raspberry Pi OS上では lsinput を使ったほうが楽。

ところで、lsinput を、PC + Ubuntu Linux 20.04 LTS で動作させたら、フラグ文字列が全部「(null)」になってしまった。何故? Raspberry Pi OS buster 上で lsinput を動かすと、ちゃんと表示されているのだけど…。

2021/02/28追記。 :

Ubuntu Linux 20.04 LTS + lsinput が「(null)」を表示する件。ビルドし直せば治るらしい…?

_Why is "bits ev" of mouse input device null? - Unix & Linux Stack Exchange
$ wget https://www.kraxel.org/releases/input/input-1.3.tar.gz
$ tar xf input-1.3.tar.gz
$ cd input-1.3
$ make
$ ./lsinput -v

ビルドして、/usr/local/bin/ 以下に lsinput だけ置いてみた。これならそれらしく表示された。ただ、以前の版とは表示フォーマットが随分違うようだけど…。

2020/02/27(木) [n年前の日記]

#1 [nitijyou] 犬が餌を食べてくれない

飼い犬の体調が悪い件。昨日は水だけを与えて、今日からはドッグフードを ―― 病院から購入した缶入りのドッグフードを食べさせてもよい、という話だったけど。犬がドッグフードを食べてくれない…。薬を飲ませるためにも、食べてくれないと困るのだけど。

まだ食べられるだけの体調が戻ってきていないということだろうか。それとも、普段は食べてないソレだから、不安に感じて口にできないのだろうか…。鼻先でクンクンして「なんやコレ。こんなん怖いから食えんわ」的態度をとっているようにも見える…。

2019/02/27(水) [n年前の日記]

#1 [nitijyou] 朝から頭痛

朝から頭痛。頭の右上のあたりが時々ふっと痛くなる。寝れば治るかなと思ったけれど、夜中まで改善せず。何だろうな…。

2018/02/27(火) [n年前の日記]

#1 [ruby] FXRubyを勉強中

RubyでGUIアプリが作れる、FXRubyというライブラリについて勉強中。環境は、Window10 x64 + Ruby 2.2.6 p396 mingw32 + fxruby 1.6.39 x86-mingw32。

全然関係ないけど、FXRuby の公式サイトが消滅してるような…?

ハローワールド。 :

まずは、Hello World。

_hellofxruby.rb
require "fox16"
include Fox

class MyHello < FXMainWindow

  def initialize(app, title = "Hello World FXRuby")
    # main is window class
    mw = super(app, title, :width => 320, :height => 240)

    # create layout
    pack = FXPacker.new(mw)

    # create label
    lbl = FXLabel.new(pack, "Hello World !")

    # create button
    btn = FXButton.new(pack, "Click !")

    # set button push event
    btn.connect(SEL_COMMAND) do |sender, sel, data|
      # show message box
      msg = FXMessageBox.new(btn, "Message", "Hello World in FXRuby", :opts => MBOX_OK)
      msg.execute
    end
  end

  def create
    super
    show(PLACEMENT_SCREEN)
  end
end

if __FILE__ == $0
  FXApp.new do |app|
    mw = MyHello.new(app)
    app.create
    app.run
  end
end

実行すると以下のようなウインドウが開く。

fxruby_ss01.png

ボタンをクリックするとダイアログが表示される。

fxruby_ss02.png

少し解説。 :

FXRuby を使うときは、最初のあたりに、以下の行を書く。
require "fox16"
include Fox

FXMainWindow というクラスが、おそらくはメインウインドウを担当するクラスなのだろう…。継承して、自分用のクラスを作成して、それを使うのが一般的っぽい。
class MyMainWindow < FXMainWindow

  def initialize(app, title = "Hello World FXRuby")
    mw = super(app, title, :width => 320, :height => 240)

    # 部品を生成したりイベントを設定したり色々初期化
  end

  def create
    super
    show(PLACEMENT_SCREEN)
  end
end

クラスを作ったら、以下のようにして呼び出す…のかな。
FXApp.new do |app|
  mw = MyMainWindow.new(app)
  app.create
  app.run
end

メインウインドウに登録できる部品は色々ある。例えば、以下のような感じ。
  • FXLabel ... ラベル。文字列を表示できる
  • FXButton ... ボタン
  • FXTextField ... テキストフィールド。入力欄。
_File: README - Documentation for fxruby (1.6.39) の左の一覧を眺めると、色んな種類があるようで。

ただ、各部品をメインウインドウにそのまま登録していくと、縦にずらずら並んでいってしまう。部品のレイアウトには FXPacker を使うらしい…が、それについては後述。

ボタンを押したら何か処理をさせたい、てな場合は、以下のように書けば設定できる模様。
    btn = FXButton.new(pack, "Click !")

    btn.connect(SEL_COMMAND) do |sender, sel, data|
      # show message box
      msg = FXMessageBox.new(btn, "Message", "Hello World in FXRuby", :opts => MBOX_OK)
      msg.execute
    end
まだ意味は分かってないけど、とにかくこう書いとけば動くらしい…。ちなみに、上記の例では、ボタンを押すとメッセージボックスが表示される。

少し複雑なレイアウトをしてみる。 :

各部品を、横方向に並べたり等、それなりにレイアウトしたい。

部品のレイアウトには FXPacker、FXHorizontalFrame、FXVerticalFrame を使う。
  1. まずは FXPacker をメインウインドウに登録。
  2. その FXPacker に、FXHorizontalFrame (部品を横並びにしてくれる) や FXVerticalFrame (部品を縦並びにしてくれる) 等のフレームを登録。
  3. それらフレームに、各部品を登録。

ということで、試してみた。

_fileselect_sample.rb
require "fox16"
include Fox

class MyMainWindow < FXMainWindow

  def initialize(app, title = "Generate Tilemap collision data")
    # main is window class
    # mw = super(app, title, :width => 480, :height => 360)
    mw = super(app, title)

    # create layout
    # pack = FXPacker.new(mw, :opts => LAYOUT_FILL)
    pack = FXPacker.new(mw)

    @frms = []
    tbls = [
      { :label => "Source Tiled JSON", :type => 0, :len => 50 },
      { :label => "Source PNG Image", :type => 0, :len => 50 },
      { :label => "Collision layer name", :type => 1, :len => 20 },
      { :label => "layer name (overwrite)", :type => 1, :len => 20 },
      { :label => "Null code", :type => 1, :len => 5 },
      { :label => "Output JSON", :type => 0, :len => 50 },
    ]

    tbls.each_with_index do |dt, i|
      s = dt[:label]
      kind = dt[:type]
      l = dt[:len]

      # create frame
      frm = FXHorizontalFrame.new(
        pack,
        # :opts => LAYOUT_SIDE_LEFT|LAYOUT_SIDE_TOP|LAYOUT_FIX_WIDTH,
        #:padLeft=>0,:padRight=>0,:padTop=>0,:padBottom=>0,
        # :width=>300
      )

      # create label
      FXLabel.new(frm, s)

      # create textfield
      tf = FXTextField.new(frm, l)

      case kind
      when 0
        # create button
        btn = FXButton.new(frm, "...")

        # set button event
        btn.connect(SEL_COMMAND) do |sender, sel, data|
          # show File dialog
          dialog = FXFileDialog.new(self, "Select file.")
          dialog.patternList = [
            "All Files (*)",
            "JSON (*.json)",
            "PNG Image (*.png)",
          ]
          dialog.selectMode = SELECTFILE_ANY
          if dialog.execute != 0
            tf.text = dialog.filename
          end
        end

        @frms.push( { :type => kind, :textfield => tf, :button => btn } )

      when 1
        @frms.push( {:type => kind, :textfield => tf } )
      end
    end

    @frms[2][:textfield].text = "layer0"
    @frms[4][:textfield].text = "0"

    frm = FXHorizontalFrame.new(
      pack,
      :opts => LAYOUT_SIDE_RIGHT|LAYOUT_SIDE_TOP,
      :width => 300,
    )
    sx, sy = 32, 8
    btn = FXButton.new(frm, "Check",
                       :padLeft => sx, :padRight => sx,
                       :padTop => sy, :padBottom => sy)

    btn.connect(SEL_COMMAND) do |sender, sel, data|
      # dump input string
      jsonfile = @frms[0][:textfield].text
      pngfile = @frms[1][:textfield].text
      layername = @frms[2][:textfield].text
      layername_s = @frms[3][:textfield].text
      nullcode = @frms[4][:textfield].text.to_i
      outfile = @frms[5][:textfield]
      s = [
        "json file : #{jsonfile}",
        "png file : #{pngfile}",
        "layer name : #{layername}",
        "layer name sub : #{layername_s}",
        "null code : #{nullcode}",
        "output file : #{outfile}",
      ].join("\n")
      msgBox = FXMessageBox.new(btn, "Result", s, :opts => MBOX_OK)
      msgBox.execute
    end
  end

  def create
    super
    show(PLACEMENT_SCREEN)
  end
end

if __FILE__ == $0
  FXApp.new do |app|
    mw = MyMainWindow.new(app)
    app.create
    # mw.show(PLACEMENT_SCREEN)
    app.run
  end
end

fxruby_ss03.png

それらしくレイアウトできた。

ファイル選択ダイアログについて。 :

上記ソースは、ボタンを押すと、ファイル選択ダイアログボックスを表示するようになっている。呼び出してる部分は以下。
          # show File dialog
          dialog = FXFileDialog.new(self, "Select file.")
          dialog.patternList = [
            "All Files (*)",
            "JSON (*.json)",
            "PNG Image (*.png)",
          ]
          dialog.selectMode = SELECTFILE_ANY
          if dialog.execute != 0
            tf.text = dialog.filename
          end

FXFileDialog がソレ。拡張子のリストを作成して .patternList に設定したり、選択モードを .selectMode に設定したりしている。

dialog.execute を呼ぶとダイアログが表示されて、選択されたファイルの数が返ってくるのだろう…。0が返ってきたら、何も選択していないか、キャンセルされた、ということではないかと。

.selectMode には、 _Class: Fox::FXFileSelector からすると、以下が指定できる模様。
  • SELECTFILE_ANY ... 1ファイルを選択。もしくはファイル名を指定。ファイルセーブ時に使える。
  • SELECTFILE_EXISTING ... 既に存在する1ファイルを選択。ファイルロード時に使える。
  • SELECTFILE_MULTIPLE ... 既に存在する複数ファイルを選択。
  • SELECTFILE_MULTIPLE_ALL ... 既に存在する複数ファイル、または複数ディレクトリを選択。
  • SELECTFILE_DIRECTORY ... 既に存在するディレクトリを選択。

余談。FXRuby のファイル選択ダイアログを使うと、以下のようなダイアログが表示されるのだけど。

fxruby_ss04.png

普段見ているダイアログとは、見た目がちょっと違う。

FXRuby が使っている FOX Toolkit は、OSのネイティブのGUI部品やダイアログを使わずに、それぞれを独自実装しているらしいので、こういった部分で違いが出てくるのだろう…。逆に考えると、Windows でも Linux でも似たような見た目になってくれる…はず。

ドラッグアンドドロップはどうやるのだろう。 :

エクスプローラ等でファイルを選択して、FXRuby で表示したウインドウにドラッグアンドドロップ(Drag and drop, DND, D&D)することでファイルのパスを取得する、といった処理をしたい。しかし、そんなことできるのだろうか…。*NIX上ではできるけど、Windows上ではできないよ、という話を以前見かけたけれど…。

以下で紹介されてるサンプルを、Windows上で動かしてみた。

_Drag and Drop in Windows with Explorer - Ruby

残念ながら、D&Dしてもマウスカーソルは×マークのままだった。

コレ、Linux上なら動くのかな…? どうなんだろう…?

Ubuntu16.04上でFXRubyのインストールと動作確認。 :

FXRuby を使ったソースが、VMware + Ubuntu 16.04 LTS上でも動作するのか確認してみたい。

Ubuntu上での FXRuby インストール手順を調べたが、パッケージをいくつかインストール後、FOX Toolkit の現行版をDL・ビルドして、最後に sudo gem instal fxruby をしないといかんらしい。

gem install fxruby だけで動いてしまうWindows版と比べると、導入が面倒なのだな…。

必要になるらしいパッケージを apt でインストール。
sudo apt install g++
sudo apt install libfox-1.6-dev lxrandr libxext-dev libgl1-mesa-dev libglademm-2.4-dev freeglut3-dev libglew1.5-dev

FOX Toolkit の現行版をDL・ビルド・インストール。
mkdir ~/package
cd ~/package
wget ftp://ftp.fox-toolkit.org/pub/fox-1.6.56.tar.gz
tar xvzf fox-1.6.56.tar.gz
cd fox-1.6.56
./configure
make
sudo make install

Rubyをインストール。sudo apt install ruby だけでは済まなくて、ruby-full をインストールしないといけない。ruby-full を入れると、Rubyのライブラリをビルドできるようになる模様。
sudo apt install ruby-full
sudo gem install fxruby --no-ti --no-rdoc

fxruby がビルドされた。ちなみに、何故かドキュメントの生成で異様に時間がかかったので、--no-ri --no-rdoc をつけてドキュメントの生成はスキップさせた。

irb を起動して、require 'fox16' と打ってエラーが出なければ、インストールはできている。

さておき、前述の、 _FXRubyを使ったドラッグアンドドロップのサンプル を、Ubuntu 16.04上で動かしてみたところ、ファイラーからファイルをD&Dすることでファイル群のパスが取得できた。

つまり、*NIX + FXRuby ならドラッグアンドドロップが働くけど、Windows上では働かない模様。不便だ…。

参考ページ。 :

#2 [ruby] Ruby-GNOME2を試用

Window + FXRuby ではファイルのドラッグアンドドロップが働かないと分かったので、別のGUIライブラリならどうかなと。例えば Ruby/GTK2 だか Ruby-GNOME2 ならどうだろうと。

このライブラリ、正式名称が分からんのだけど…。公式サイトでは「Ruby-GNOME2」と書いてあるから、それが正しいのだろうか?

_Ruby-GNOME2 Project Website - Ruby-GNOME2 Project Website

インストール。 :

Windows10 x64 + Ruby 2.3.3 p222 mingw32版でインストールしてみた。

gem install gtk2
> gem install gtk2
Fetching: pkg-config-1.2.9.gem (100%)
Successfully installed pkg-config-1.2.9
Fetching: native-package-installer-1.0.6.gem (100%)
Successfully installed native-package-installer-1.0.6
Fetching: cairo-1.15.11-x86-mingw32.gem (100%)
Successfully installed cairo-1.15.11-x86-mingw32
Fetching: glib2-3.2.1-x86-mingw32.gem (100%)
Successfully installed glib2-3.2.1-x86-mingw32
Fetching: atk-3.2.1-x86-mingw32.gem (100%)
Successfully installed atk-3.2.1-x86-mingw32
Fetching: cairo-gobject-3.2.1-x86-mingw32.gem (100%)
Successfully installed cairo-gobject-3.2.1-x86-mingw32
Fetching: gobject-introspection-3.2.1-x86-mingw32.gem (100%)
Successfully installed gobject-introspection-3.2.1-x86-mingw32
Fetching: pango-3.2.1-x86-mingw32.gem (100%)
Successfully installed pango-3.2.1-x86-mingw32
Fetching: gio2-3.2.1-x86-mingw32.gem (100%)
Successfully installed gio2-3.2.1-x86-mingw32
Fetching: gdk_pixbuf2-3.2.1-x86-mingw32.gem (100%)
Successfully installed gdk_pixbuf2-3.2.1-x86-mingw32
Fetching: gtk2-3.2.1-x86-mingw32.gem (100%)
Successfully installed gtk2-3.2.1-x86-mingw32
Parsing documentation for pkg-config-1.2.9
Installing ri documentation for pkg-config-1.2.9
Parsing documentation for native-package-installer-1.0.6
Installing ri documentation for native-package-installer-1.0.6
Parsing documentation for cairo-1.15.11-x86-mingw32
Installing ri documentation for cairo-1.15.11-x86-mingw32
Parsing documentation for glib2-3.2.1-x86-mingw32
Installing ri documentation for glib2-3.2.1-x86-mingw32
Parsing documentation for atk-3.2.1-x86-mingw32
Installing ri documentation for atk-3.2.1-x86-mingw32
Parsing documentation for cairo-gobject-3.2.1-x86-mingw32
Installing ri documentation for cairo-gobject-3.2.1-x86-mingw32
Parsing documentation for gobject-introspection-3.2.1-x86-mingw32
Installing ri documentation for gobject-introspection-3.2.1-x86-mingw32
Parsing documentation for pango-3.2.1-x86-mingw32
Installing ri documentation for pango-3.2.1-x86-mingw32
Parsing documentation for gio2-3.2.1-x86-mingw32
Installing ri documentation for gio2-3.2.1-x86-mingw32
Parsing documentation for gdk_pixbuf2-3.2.1-x86-mingw32
Installing ri documentation for gdk_pixbuf2-3.2.1-x86-mingw32
Parsing documentation for gtk2-3.2.1-x86-mingw32
Installing ri documentation for gtk2-3.2.1-x86-mingw32
Done installing documentation for pkg-config, native-package-installer, cairo, glib2, atk, cairo-gobject, gobject-introspection, pango, gio2, gdk_pixbuf2, gtk2 after 11 seconds
11 gems installed
gtk2 3.2.1 x86-mingw32 がインストールされた。

動作には、以下も必要らしい。自動でインストールしてくれる。
  • pkg-config
  • native-package-installer
  • cairo
  • glib2
  • atk
  • cairo-gobject
  • gobject-introspection
  • pango
  • gio2
  • gdk_pixbuf2

ファイルのドラッグアンドドロップ。 :

以下の記事で、ドラッグアンドドロップを使った事例が紹介されてる。

_Ruby Window Drop: いち雑記

ソースをコピペして、Windows10 x64 + Ruby 2.3.3 p222 mingw32 上で動作確認。エクスプローラから、ウインドウにD&Dしたところ…ファイルのパスが表示された。素晴らしい。

つまり、Ruby-GNOME2 なら、Windows上でもファイルのD&Dでファイルパスを取得できるようだなと。

FXRuby と比べると、ウインドウが表示されるまで結構待たされる印象を受けたけど。しかし、その分、高機能、ということになるのだろう…。たぶん。

2017/02/27(月) [n年前の日記]

#1 [autohotkey] AutoHotkeyをまだ勉強中

AutoHotkeyでマウスボタンの状態やキー入力を表示できないか動作確認中。

ホイール回転を検出する方法は、以下のやり取りが参考になった。

_getkeystate wheel (Getkeystate not wheely good!) - Ask for Help - AutoHotkey Community

全然関係ないけど、何故か上記サイトにアクセスすると、「俺はロボットじゃないよ」の確認を求められる…。しかも表示が結構遅い。サーバが非力なのか回線が細いのか。 *1

If文の書き方がよく分からず。 :

AutoHotkeyは、スクリプトの書き方がどうも分かりづらい…。If 変数<>変数、でいいのか、それとも If 変数<>%変数% と書くべきなのか、そんなしょーもないところで頻繁にハマったり。
; variable compare

a := 1
b := 1

; OK
If a=%b%
  MsgBox, %a% = %b%     ;=> 1 = 1
Else
  MsgBox, %a% <> %b%

; NG
If a=b
  MsgBox, %a% = %b%
Else
  MsgBox, %a% <> %b%    ;=> 1 <> 1

; ----------------------------------------

c := Object("Apple", 0, "Ball", 0, "Cat", 0)
d := Object("Apple", 0, "Ball", 0, "Cat", 0)
k := 2

; NG : Error
; If c[k]=%d[k]%
;   MsgBox % c[k] . "=" . d[k]
; Else
;   MsgBox % c[k] . "<>" . d[k]

; OK, but ...
If c[k]=d[k]
  MsgBox, c[k] = d[k]    ;=> c[k] = d[k]
Else
  MsgBox, c[k] <> d[k]
わからん…。Object() が絡んでくるとますますわからん…。

コンソール出力は無いのだろうか。 :

一々、MsgBox で printfデバッグをするのが面倒。コンソール出力だの標準出力だのにメッセージを出せたりしないのだろうか。

*1: いやまあ、この日記ページもたぶん表示が遅いからアレなんだけど。

2016/02/27() [n年前の日記]

#1 [pc] LibreOfficeのオカルト現象に遭遇

親父さんから、LibreOffice Calc の操作について質問があって。環境は Windows10 + LibreOffice 5.1.0。

LibreOffice Calc のツールバー上の保存ボタンは以下のような仕様になっていて。

ところが、親父さんが保存ボタンをクリックすると、星マークがついてるから上書き保存になるはずが、必ず「名前を付けて保存」メニューが表示されてしまう。これでは上書き保存できないではないか…。や、ファイル → 保存、とか、Ctrl+Sを叩けば一応保存はできるけど…。

代わりに自分がマウス操作をしてみたら、フツーに上書き保存されてしまった。しかし親父さんがマウス操作すると、やっぱりメニューが表示される。おかしい。なんでや。5〜6分ほど、双方で交互に操作して確認してみたけれど、どうにも原因が掴めない。
とにかく、親父さんがマウスの左ボタンを押すと、その時だけ何故か本来の動作にならない。一体何が起きてるのか。わけがわからない…。これではオカルトではないか…。

原因判明。 :

何かの拍子に、気が付いた。LibreOfficeのツールバー上のボタン ―― 右側に小さい三角がついていてメニュー表示が可能なボタンは、マウスの左ボタンを長押しするとメニューが表示される、という仕様が入っていた模様。

つまり、自分がクリックしたときはクリックとして認識されていたけれど、親父さんがクリックしたときはマウスボタンを押してる時間が違うので、長押しされてると判定されてメニューが表示されていた、というオチだった…。

そんなにも親父さんはマウスボタンを押してる時間が長いのか、と思いきや、そういうわけではなさそうで。親父さんの操作をしばらく観察したけど、どう見てもクリックだろコレと思える押し時間としか…。

自分も何度か試してみたけど、ちょっとこれは長押し判定時間が短過ぎる気がしたり。

これはLibreOfficeの仕様バグじゃないかなあ…。ツールバー上のボタンってそんなに高速連打するものじゃないだろう。こんな判定時間にする理由が分からん。まるでアクションゲーか格ゲーの判定時間だ…。

どうしてもこういう仕様にしたいなら、せめてどこかに、何msで長押しと認識させるのか、設定項目ぐらいは用意しておかないと…。

あるいは、独立した「上書き保存ボタン」をツールバー上に表示・カスタマイズ可能にするとか。現状では、右側に小さな三角がついた保存ボタンしか存在しない・上書き保存のみを割り当てたボタンが無いので、カスタマイズしてトラブルを回避することもできないわけで。

長押しするとメニュー表示になる仕様について。 :

ひょっとして Microsoft Office も、ツールバー上のボタンを長押しするとメニューが表示されるのかな。LibreOffice はソレを真似したのだろうか。

疑問が湧いたので Excel 2007 で試してみたけど、別にそんな仕様は入ってないな…。ボタンと、その横の三角ボタンは、独立して動作してる。ボタンが、三角ボタンの機能まで勝手に兼ねたりはしない。それとも今時の Office なら、長押しでメニューが表示されるのだろうか。

それでなくても今時のGUIは、スマホの普及で「ワンタッチ」=「1機能の呼び出し」になってるのに…。1つのボタンに、現在状態、もしくは押し時間に応じて別機能を割り当てるのはおかしいだろう…。ユーザが混乱するだろ…。

と思ったけど、スマホも押してる時間で呼び出される機能が変わる時があるか。ソレを安易に真似したということなのかな。

個人的に、押し時間で機能が変わる仕様は混乱の元だと思ってるんだけど、どうなんだろ。実際こうして、「これどうなってるんだ? 動かないんだけど?」と質問されて、PC廃人の自分ですら原因が分かるまで手を焼いたわけで…。しかも解決策が、「『カチッ』じゃなくて、『カッ!』って感じでボタンを押すことを心掛けて」とお願いする以外にないとか…アホ過ぎる…。

アクションゲームや格ゲーだって、それこそ「溜めて、離す」等の操作を要求されるけど。それはユーザにとってハードルになっていて、操作を習得できた時の達成感を得られるから、あえてそういう仕様を盛り込んでたりするわけですよ。…Officeソフトにゲームの操作感覚を盛り込んでどうすんだ。ハードルを高くしてる自覚があるのか。「やった! 上書きボタンが上書きボタンとして機能するタイミングを掴んだぞ!」とユーザを喜ばせたいとでも思ってんのかと。そういうのはゲームでやれよゲームで。と、思うわけですよ。

「こういう仕様を入れたら便利になるんじゃないか」と作業効率の改善を期待して入れたであろうことは分るけど…。この仕様はちょっと失敗だったよなと…。

#2 [gimp] GIMPのパターンファイルを整理

GIMPのパターンファイルをググってDLして追加してたら、とんでもなく起動が遅くなってしまったので、少しでも減らそうと、ユーザフォルダ\.gimp-2.?\patterns\ フォルダの中身を整理。

GIMP上の表示一覧を使って整理していくのは大変なので、 _XnView を使って一覧表示して、フォルダを作ってまとめたり削除等をしてみたり。GIMP関連ファイルに対応してるビューワって少ないけれど、XnView はGIMP関連ファイルにも対応してるほうなのでありがたいです。

それにしても、GIMPのパターンファイルを眺めていると、似たような感じのパターンが結構あるような気がしてくるわけで。フィルタだかスクリプトだかでその都度生成できるほうが良さそうな気も。縞々模様やタータン模様はその都度生成できそうな。と思ったけど、GIMPの場合はプレビューできないのがネックになりそうな…。

2015/02/27(金) [n年前の日記]

#1 [firefox] Firefox 36.0がガンガン落ちる

Google画像検索で、「画像を表示」をクリックするだけで落ちる。環境は Windows7 x64。

_SlightlyEnhancedViewImage というアドオンが原因だった模様。該当アドオンの有効無効を切り替えて動作確認をしていたら、Firefoxの起動直後にすぐ落ちてしまう状態になって困った。セーフモードで起動して、件のアドオンを削除してどうにか復活。

Firefox をセーフモードで起動するには、FirefoxのアイコンをShiftキーを押しながらクリックして起動する。とメモ。

#2 [dxruby][cg_tools] 背景仮画像を作成し直し

仮画像とは言え、前々から角度がおかしいことが気になってたわけで。

昔のベルトスクロールアクションゲームの背景って45度の角度で傾いてるものと思い込んで仮画像を作成してたけど、後になってから、もうちょっと倒した角度で描かれてるものがほとんどだったことに気がついて。要するに、2ドット横に進んで1ドット下に、みたいな感じで。ということで、この際作り直そうと。

タイリングが可能な正方形のテクスチャを斜めにずらして背景画像に貼り付けようと思ったものの、GIMPのフィルタではそれらしいものが見当たらず。単に斜めにするだけなら剪断変形で済むのだけど、はみ出した部分については反対側から回り込んでほしいわけで。

やりたいことは、y座標が1つ進んだらx方向は n * y ドットシフト、かつ、画像幅内で回り込ませるだけ。なので、Python + PIL あたりでスクリプトを書いて済ませられそうな気もするのだけど。

誰かしらそういうフィルタ・プラグインを作ってるんじゃないか。と思って色々探してたら、Paint.NET の _Obliqueプラグイン の解説記事に遭遇。まさしくコレ。ありがたや。

GIMPのプラグイン or スクリプトでありそうな気もするのだけど、検索キーワードが思いつかず。Oblique で検索しても、テキストツール関係の記事が出てきてしまう。

久々にShadeを起動。 :

街灯っぽい画像が欲しいなと思ったので、久しぶりに Shade 12 を起動して、開いた線形状の回転体で街灯モドキを作成。

ただ、どう見ても3DCGソフトで作りました的な画像になってしまって、他の画像と合わないわけで…。12色程度に減色してから、あちこちにドットをポチポチ打って誤魔化したり。

Paint.NETのプラグインも色々あって面白そう。 :

_3D Object Plugin| プラグイン | Paint.NET不完全マニュアル 経由で _Make cool abstracts - Creations - Paint.NET Forum の作例を目にして、ヒットマークに使えないかなと。

2014/02/27(木) [n年前の日記]

#1 [ruby] Windows上でjekyllをインストール

某サイトのデザインを変更したいという話が来たのだけど。せっかくだから、この際サイト作成に便利なツールを導入できないものかと思い始めて。ただ、そのサイトは、cgiが動かせないサーバ上で公開されてるので、静的html生成機能が無いと困るわけで。てなわけで、以前からちょっと気になってた、jekyll を試用してみようかなと。

jekyllは、サイト作成ツール。以下の特長がある。
てなわけで、Windows7 x64 + _Ruby 2.0.0 p451 mingw32版 + Python 2.6.6 の環境で、以下の記事を参考にしてインストールしてみたり。

_Windows で Jekyll 1.3 を動かすまでの手順 - てっく煮ブログ
_Jekyll で Windows の UTF-8 - me-mo
_Fixing 'cannot load such file -- yajl' Windows 7 64bit, Rails, Ruby 2+
_Windows環境にJekyll 1.4を導入する(自家用メモ) - なか日記
_ruby - Jekyll - Error Running 'Jekyll Serve' - Stack Overflow
_Windows環境にjekyllをインストール | サイト運営の私的メモ

jekyllと、jekyllが要求するモジュール(?)は、以下でインストールできる。
gem install jekyll

ただし、pygments.rb 0.5.1 以降はWindows上で動作しないらしいので、ダウングレードする。
gem uninstall pygments.rb --version "=0.5.4"
gem install pygments.rb --version "=0.5.0"

UTF-8で書かれた文書を読み込ませるとエラーが出るときがあるらしいので、対策をする。Ruby 2.0.0インストールフォルダ\bin\jekyll.bat の2行目に、以下の一文を追加。
set RUBYOPT=-EUTF-8
「デフォルトの文字コードはUTF-8だよ」と指定しているらしい。

ただ、jekyllで作成したプロジェクトフォルダ(?)にファイルを置くことでも同様の指定できるらしくて。_plugins\utf-8.rb を作成して、以下の一行を記述。
Encoding.default_external = Encoding::UTF_8
こちらの指定でも問題が無いなら、環境を汚さなくて済むのでグッド、かもしれず。

pygments なる、Pythonモジュールをインストール。easy_install (setuptools?) が使える環境で以下を実行。
easy_install pygments

ここで一旦、テスト用のプロジェクトフォルダ? サイトの雛形? を作る。テキトーなフォルダを作って、そこをカレントフォルダにしてDOS窓を開いて、以下を入力。
> jekyll new jekyll-test
New jekyll site installed in C:/home/web/jk/jekyll-test.

> cd jekyll-test
この例では、jekyll-test というプロジェクトフォルダを作成してる。中には色々なファイルが作成される。

動作確認する。
> jekyll serve
しかし、エラーが出て動かないはず。

現時点では、yajl-ruby でエラーが出るようで。「yajlが見つからねえよ」とか「yajiがロードできねえよ」とか言われてしまう。色々試してみたけど、以下の指定でエラーが出なくなった。
gem install bundler
gem uninstall yajl-ruby
gem install yajl-ruby -v=1.1.0 --platform=ruby
現時点では yajl-ruby の 1.2.0 が最新版らしいけど、それでは動いてくれなかった。また、1.1.0 x86-mingw32 版もダメ。-v=1.1.0 --platform=ruby じゃないと動作しないらしい。

また、現在の jekyll 最新版は 1.4.3 だけど。それだと以下のようなエラーが出てしまう。
C:\home\web\jk\jekyll-test>jekyll serve
Configuration file: C:/home/web/jk/jekyll-test/_config.yml
            Source: C:/home/web/jk/jekyll-test
       Destination: C:/home/web/jk/jekyll-test/_site
      Generating... error: Invalid argument - C:/home/web/jk/jekyll-test/_site/C:. Use --trace to view backtrace
1.4.2 なら動くらしいので、ダウングレードする。
gem uninstall jekyll
gem install jekyll -v=1.4.2

Markdownパーサが誤動作する時もあるらしいので、パーサを kramdown に変更。デフォルトでは Maruku とやらを使うらしい。 *1
gem install kramdown
jekyllプロジェクトフォルダ\_config.yml を編集。以下の一行を最後に追加。
markdown: kramdown

今度こそ、動作確認。
> jekyll serve
Configuration file: C:/home/web/jk/jekyll-test/_config.yml
            Source: C:/home/web/jk/jekyll-test
       Destination: C:/home/web/jk/jekyll-test/_site
      Generating... done.
    Server address: http://0.0.0.0:4000
  Server running... press ctrl-c to stop.
_http://localhost:4000/ をブラウザで開いて、それっぽいページが表示されたらOK。

「Ctrl + C を押せばサーバは止まるよ」と言ってるので、Ctrl+Cを押してサーバを停止。

元文書は、_portsフォルダ以下に入っているらしい。*-welcome-to-jekyll.markdown というファイルが入ってたので、エディタで開いて日本語文字列を書いて utf8n で保存した。jekyll serve を実行して確認したら、ちゃんと日本語が表示された。

勘違いしてたことに気付いた。 :

jekyll をインストールして動作確認して、そこでようやく気づいたのだけど。これって、blog用のツールやん…。あかんわ…。

今回は、「半年に1回ぐらいの頻度で商品が差し替わる、お店のサイト」みたいなものを作りたいわけで。blogを作りたいわけじゃない。これはちょっと違うジャンルのツールに手を出しちゃったなと。

もちろん、「俺はblogを作りたいのだ」って場合には、jkeyll はヨサゲな選択肢だろうと思えたり。Markdown記法で書けるし、静的html生成だからサーバを選ばないってのはグッドだなと。この手のツールがもっと増えてくれたらいいのに…。

*1: ちなみに、kramdown は、全部 Ruby で書かれてるので処理が遅い、という話も見かけたような…。その分、ちゃんと処理が行われる、ということなのかな?

#2 [pc] Markdownについてぼんやり思ってることをメモ

思考メモです。

Markdownを知ってしまうと、はてな記法や、hnf等は、概念からして時代遅れだよなと ―― それら古い記法は比較の対象にすらならんのではと感じてしまうわけで。「この記号・省略語を使ってコンピュータに指示を出すのだ」「しかも極力タイプ数を減らすのだ」てなあたりで止まってる記法は、前世代っぽいというか。

以前、「Markdownは機能数が少ないからダメ」とdisってる人を見かけた記憶があるのだけど。機能数で見てるあたりが、全然分かってないなと。Markdownは、「パッと見でも人間がすらすら読める記法になっているか」「プログラムにとって優しい記法じゃなくて、人に優しい記法になっているか」を優先して考案したあたりが他の記法との違いだろうと。考えてる次元・階層が違うというか、もっと上のステージで考えた記法でしょうと。 *1

ただ、元々、はてな記法にしろ、hnfにしろ、出発点は同じだったはずで。
「htmlを直接打つとかやってられないよ。馬鹿馬鹿しい」
「普段使うタグなんて限られてるんだから、そこだけサポートして、入力を楽にしよう」
てなあたりは、Markdownとおそらくは同じ。しかし、「人間が見ても読みやすい」という視点が欠落していた or 煮詰め方が足りなかったのだろうなと。喩えるなら、ガラケーは作れたけどiPhoneは作れなかった、みたいなソレに近いかもしれず。機能は満たしてるけど、違うんだよ、そうじゃねえんだよ、みたいな。

どうしても大半のプログラマーは ―― もちろん自分も含めて ―― そのあたりの発想が弱い・視点を持ってないというか…。文書の見た目という、ある種の美的感覚・バランス感覚を持ってない。「一般人がこの文書を目にした時にどんな印象を受けるか」と想像する能力をどこかで失ってしまったというか。まあ、そのあたり、職業病かもしれないのですけど。「どんなプログラムを書いたらこれが実現できるだろう」と常に考えちゃうから、ついついコンピュータ側に思考が寄っていって、人間側のソレをおろそかにしちゃう、てなところがありそうな。 *2

何かの記法を考えるときに、「特殊記号や省略単語を打てば、タイプ数も少なくなるし、処理も楽になる。後から機能も増やせる」みたいなレベルで止まってたらマズイのだろうなと。その先に行かないと。いつまでも、Perlの変態特殊記号ノリモドキな仕様を重宝してるようではダメなのだろうと。

てなことを、Markdownで何かしら書いてる際には、チラチラ思ってしまうのでした。できる限り、Markdownのような方向を目指さないと、いかんのだろうなあ…。まあ、Markdown も、特殊記号がチョコチョコ混じってるので、もっとイケてる記法を生み出せる余地はありそうですけど。

なんとなく、そのあたり、漫符表現や顔文字と通じるところがありそうな気もしてきたり。見ただけで「ああ、こういう状態かな」と伝わる、みたいな。
*1: もっとも、Markdownは、「機能が欲しい? だったらそこだけ、htmlで書きなよ」と、html仕様に丸投げできちゃうので…。「機能数が少ない」という評価が、そもそもおかしい気もしていて。html仕様を全て満たせるあたり、実は最も強力なのではないかしらん。
*2: しかし、そのあたり、プログラマーに限った話じゃないのかもしれず。例えば、紙芝居ゲーム作成ツールのスクリプト記法も、ゲロ吐きそうな記法だけど。シナリオライターさんが苦情を言ってる場面を見た記憶がなくて。シナリオを書いてるってことは、おそらくは小説家寄りの思考ができる人達のはずで、つまりは「文書の見た目」という視点も持ってるだろうと。であれば、
「こんな呪文、一々書いてられんわ。馬鹿げてる」
「俺はシナリオを書きたいんだ。文章表現に注力したいんだ。コンピュータへの命令書を書きたいわけじゃない」
「小説原稿としての見た目も兼ね備えたスクリプト記法を考えよう」
等の意見が出てきてもおかしくないだろうに…。まあ、その手のマゾ仕様に耐えちゃう人が、作業を延々と続けていて。耐えられない人は「こりゃ馬鹿馬鹿しいわ」と、フツーに小説その他を書く作業に移行しちゃって。結果、文句が出てこないのかもしれないか…。

2013/02/27(水) [n年前の日記]

#1 [nitijyou] CD-RやDVD-Rを発掘中

昔、CD-RやDVD-Rにバックアップしたファイル群があるはず、と思ってまだ漁っていたり。

昔の日記を検索したら、やはり2006/01頃に、メインPCのHDDが壊れてたっぽい。無理矢理サルベージしたファイル群がDVD-Rにバックアップされてたので、それらを一旦HDDにコピーし直して中身を確認中。しかし、自分が作ったイラストのファイルは見つからず。一体どこに行ってしまったのか。消滅しちゃったのかなあ…。

2012/02/27(月) [n年前の日記]

#1 [ruby] Ruby勉強中

クラス配列のソートについては以下の記事が参考になりました。ありがたや。

_Knockin'on TechLog ≫ Blog Archive ≫ RubyのArrayクラスのsortメソッドに引数を渡す(1) 〜動作のおさらい〜
_rubyでsortするときに注意すること - (゚∀゚)o彡 sasata299's blog
_Ruby: pickup URL (Japanese)

複数の条件でソートするときは、こういう書き方ができる、らしく。勉強になりました。
#!/usr/bin/ruby

class C
  attr_accessor :v1, :v2
  def initialize(a, b)
    @v1 = a
    @v2 = b
  end
end

c1 = C.new(10, 5)
c2 = C.new(10, 3)
c3 = C.new(5, 8)
c = [c1, c2, c3]

c.each {|v| puts "#{v.v1} #{v.v2}"}

# 10 5
# 10 3
# 5 8

c.sort! {|a,b| (a.v1 <=> b.v1).nonzero? or a.v2 <=> b.v2 }

puts "sort"
c.each {|v| puts "#{v.v1} #{v.v2}"}

# 5 8
# 10 3
# 10 5


ディレクトリに対する操作は、以下を使用。

#2 [pc] vimはモードがあるからダメエディタ

てなことを、以下の記事を読みながら思った。

_パソコン教室でわかったシニアの「使いにくさ」を左右する要因 | マミオン有限会社
パソコンを苦も無く使える人と、苦戦する人との違いの一つは、この「モード」という概念を意識できているか否かが大きいのではと思っています。実は自然界や昔から使われているモノは、「モード」がないものの方が圧倒的に多いです。

パソコン教室でわかったシニアの「使いにくさ」を左右する要因 | マミオン有限会社 より

未だvimの操作に慣れることができない自分は、この説に同意してしまう。

とはいえ、モードを無くすことは、かなり難しい気もする。それは別に、vimに限った話ではなく。例えばGIMP等の画像編集ソフトは、筆ツールやら選択範囲ツールやらを切り替えて操作するけど、これ自体がモードであろうし。筆ツールと選択範囲ツールの統合!なんて課題を思い浮かべただけで、クラクラしてくる。実現できそうな予感がしない。仮に実現できたとしたら、コンピュータのUIが概念レベルで一段階進化したとき、なのだろうなあ。

いや待て。モードと道具は違うような気がしてきた。ハサミを使って文字を書こうとする人は居ないし、電気炊飯器でコンビニに出かけようと思う人は居ない。つまり、モードと道具は違うのかもしれない。モードを道具に置き換えることができれば、それだけで印象が随分変わるのかしら。分からないけど。

この記事へのツッコミ

Re: vimはモードがあるからダメエディタ by Write_Kakiko    2012/03/02 14:38
むしろモードがあったほうが良いよ。
昔からあるエディタは、(元の作成者と閲覧者が違ってたりで)
基本的に編集禁止で閲覧するだけ(ページャーLess,Lvみたいな使い方)と
編集する(Vimとか)の2段階のモードがあるって感じ。
Vimは、慣れると難しくないし 他の系列のプログラム コマンドに応用が利くよ。
:r!DOSのコマンド
とかで編集中ファイルの現在のカーソル位置に実行結果を反映するとかあるので それを覚えるとかなり考え方が変わる。
もともとラインエディタだから一行ごとに対しての編集が強いけど、
複数行を行中の中途半端な位置からカットやコピーとかは、苦手なエディタね。

#3 [neta][zatta] 寝る時の姿勢で夢の内容が変わるような気がしたり

体を右側に傾けて寝るか、左側に傾けて寝るかで、夢の内容が変わる、ような気がしてきた。右側に傾けて寝ると、夢の内容が比較的論理性を持った内容になり、左側に傾けて寝ると、論理性はないがバラエティに富んだ内容になる。ような気がする。単に気のせいかもしれないけど。

根拠のないオレオレトンデモ仮説だけど。右脳と左脳の違いに基づくのではないかと。 下側にある脳は、重力で圧されて、微妙に血流が悪くなり、上側に位置する脳の処理内容がより多く夢の内容にも反映されるのではないか。

このトンデモ仮説が当たっていたら、横になって何かを考える時、姿勢を活用できるかもしれない。論理的なことを考えるなら、右側に傾けて横になる。絵や音楽のイメージを出したいなら、左側に傾けて横になる。積極的に動かしたい脳が上になるような姿勢を取る。

こういうのって、どうしたら検証できるんだろう。

脳や体が疲れ切っていると悪夢を見る傾向があるような気もしたり。 :

回復するまでの間に、悪夢を見るような気がする。ある程度回復してしまえば状況は変わるだろうけど。

脳は肉体の影響を受けやすい。脳が肉体を制御する器官なのだから当たり前だけど。肉体の影響を脳がほんとど受けないとしたら、それはかえっておかしい。脳としての役目を果たしてない状態だから。脳の状態と体の状態を分離して考えてはいけない。…それを考えると、「気分が滅入った時はまず食事をとれ」「とにかく寝ろ」「話はそれからだ」という言説はたぶん正しい。

心配事、不安なことがあると悪夢を見るという話はよく聞くけれど。どちらかというと、肉体の影響を受ける場面のほうが多いような気もする。膀胱に尿が溜まってる状態だと、トイレに行く夢を見るようなもんで。

悪夢を見た時に、「なんでこんな夢を」と不安になるより、「脳が疲れているからだ」「体が意外と疲れているのだ」と思ったほうがいいような気がしたり。あるいは、「体が微小なストレスを受ける珍妙な寝相になっているのだ。枕の位置でも少し変えてみるか」とかそういう工夫のほうが効果が大きかったりするのではと。オレオレ仮説だけど。

2011/02/27() [n年前の日記]

#1 [anime] ハートキャッチプリキュアの最終回近くを鑑賞

HDDレコーダに録画したままだったソレをようやく消化。

うわ。燃える。何このアニメ。本当に幼女向け作品なんだろうか。熱い。これは熱いわ…。素晴らしい…。

と思ったら最終回で。なんじゃこりゃ。笑ってしまった。いやはや、素晴らしい。凄い作品だなあ。

2010/02/27() [n年前の日記]

#1 [anime] 戦隊シリーズを消化中

なんとか最終回1つ前まで消化。…最終回の録画はノイズだらけの映像になっているはずなので、見るのが怖い。

2009/02/27(金) [n年前の日記]

#1 [pc] ATXはでか過ぎるな

部屋の中にATX M/Bを入れたPC・ATX対応ミドルタワーケースが2個ほど転がってるわけだけど。邪魔だな…。せめてMicroATXだったら良かったのに…。

ATX M/B に、ビデオカード+サウンドカード+NIC+下手するとUSB増設ボードまでつけてるわけだけど。今だったら、MicroATX M/B、いや、Mini-ITX M/B ですら全部実装されているわけで。ATXミドルタワーケースの1/3〜1/4の大きさで同じことができてしまう。うーん。

2008/02/27(水) [n年前の日記]

#1 [nitijyou] ヘルプだったのか…

iアプリの新任デザイナーさん、と思っていた方から、「オラ、3日だけ手伝うという話だったはずだけど…?」的内容のメールが。ガーン。そうだったのか…。そうとは知らず、ガンガンあれこれ作業のお願いメールを送りつけてしまっていたわけで。>自分。しまった。そうと知ってれば、こんなにメールを送るんじゃなかった。うう…。

もっと作業内容を厳選してお願いすればよかった。失敗した。いや、期間が長かろうが短かろうが、厳選してお願いするのはやるべきことだったな。トホホ。

できれば自分一人でグラフィックもプログラムも担当したいなと思えてきた。 :

全部自分一人でやるのだと最初から判ってれば、何が必要で、どんな作業をして、といったことが把握しやすいし。「これはこうして」等の指示を出す・やりとりする必要もないし。上がってきた画像に対して「うーん…」とか「うわ勘弁して」となることもないし。もっとも、自分の作った画像が、客観的には使い物になるレベルに達してるかどうかはさっぱり判らんのだけど。たぶん、下手の横好きレベルな予感。

一人でやれば、プログラムとの兼ね合いを考えながら画像を作れるというメリットもあるし。容量が厳しいとなった場合も、どこをどうすれば削れそうなのか予想がつくし。これは画像じゃなくてプログラムでどうにかしよう、とか。その逆で、プログラムじゃ難しいから画像で解決しよう、という案も浮かぶし。そういうメリットはあるんだよな。

もっとも、並列して作業ができないから開発期間はどんどん延びてしまうデメリットがあるんだよな。とは言っても、画像がないとどんなソースを書けばいいのか見えにくいし、後で上がってきた画像を見て「あれー、こんなはずでは…」となってしまうこともよくあるから、結局は並列作業にならない場面が多いような気もしてきた。…いや待て。それは最初に、きっちり仕様を固めてから作業してないのがいかんのか。むぅ。

何にせよ、自分の作業の進め方には、根本的な問題が多々あるような気がしてきた。うーん。

2007/02/27(火) [n年前の日記]

#1 [cg_tools] Intuos3フォトフィニッシュパックなるものが発売されるらしい

Photoshop Elements 5.0 がついてる。…失敗した! もう少し待てばよかった! ついこないだ普通の Intuos3 を買ってしまったばかりなのに。うわーん。

つーか、標準でついてる Photoshop Elements 3.0 を安くアップグレードできる特典とか用意してくれんだろうか。って「バンドルされてるだけでもありがたいと思いやがれ」って感じなのか。> wacom。

Adobe の正規アップグレード版も、DL版がパッケージ版と同じ価格になっちゃったしなぁ…。

#2 [digital] Canon PowerShot A300 を修理してもらうよう、電話連絡した

_キヤノン:サポート|デジタルビデオカメラ/デジタルカメラをご使用のお客さまへ のページに書いてある電話番号に連絡。

起動時の画面や、アイコン等は表示されているが、CCDから送られているのであろう画像だけがおかしくなってるか、確認するように言われた。なるほどたしかに、アイコン等は正常表示されている。ということで、やっぱりCCD不具合の可能性が高いだろうという話に。

Canon が宅配業者を手配して、取りに来てもらえるらしい。明日、14:00-16:00 の間で予約(?)した。ヤマト運輸さんが来るとのこと。梱包はしなくていいらしい。宅配業者のほうで梱包するとか。ただ、電池も、CFも、ストラップさえも外して、あくまで本体だけを渡すように、だそうで。

#3 [nitijyou] Adobeに、Adobe製品の譲渡申請書を送ってほしい旨を電話連絡

申請書はメールで届くらしい。…メールで送れるものなのか? と思って尋ねたら、pdfで送るのだとか。あー、なるほど。pdfって便利だな。

数時間後、メールが届いた。 :

たしかにpdfが添付されてる。とりあえず印刷。

#4 [nitijyou] 妹が通勤に使ってる中古のシビックがとうとう壊れた

半年おきの定期点検の際、オイルが漏れてるけど修理不可能・無理に蓋?をあけると周囲まで取れて戻せなくなる、という話で。もう廃車にするしかない、てなことを数日前まで話してたのだけど。

今朝、エンジン下部からオイルがぼとぼと漏れてることに親父さんが気づいて。ボンネットを開けたらオイルが入るのであろう箇所の蓋が消失・エンジンがかからなくなっていたらしい。親父さん曰く、おそらく走ってるうちにふっとんでどこかに落としてきてしまったんじゃないかとのこと。何にせよ、もう走らせるのは無理。

妹用の新車を購入する方向で話は進んでいたのだけど。まさかその前にシビックがダメになってしまうとは。妹の通勤途中に壊れなかったのはラッキーだった…。

短い間だったけど、ご苦労さん。>シビック。謎のエンジンが入ってると判明して恐怖したとか、前の持ち主が運転席横のドアに鼻くそをつけまくっていたみたいだとか、ハンドルが異様に重いとか、よそ見運転のおばさんに追突されちゃってトランクがペシャンコになったとか、自分も妹も運転に慣れてないから玄関にこすったり藪に突っ込んだりで満身創痍だったりとか。色々あったけど。最後の最後まで走ってくれてありがとう。って自分はほとんど乗ってないけど。運転、コワヒコワヒ。

HONDAの営業の人が来てくれた。 :

店自体は、今日は休みらしいのだけど。営業の人とは連絡が取れたらしい。休みのところスイマセン。

と思ったら。普通に走ってて蓋が取れることはないはずで、おそらく定期点検の際に作業員がちゃんと締めてなかったのだろうという話で。あちらの方が平謝り、だったらしい。まあ、何にせよ、走行不可能な状態であることは確定。

とりあえず、代車を手配してくれるらしい。購入予定の新車と同じ型らしいので、妹も慣れることができそう。

#5 [cg_tools][prog] 昔作った画像合成用のスクリプトが上手く動かなくなっていた。

_m256 Perlmagick Composite Utility ってのを大昔に作ったのだけど、動かしてみたらプレビュー画像表示の際にエラーが。
Tk::Error: PPM image file "C:\hoge\fuge\hage/____m256pmcu_tmp2.ppm" has bad maximum intensity value 65535 at C:/usr/local/Perl/lib/Tk/Image.pm line 21.
 Tk callback for image
 Tk::Image::new at C:/usr/local/Perl/lib/Tk/Image.pm line 21
 Tk::Image::__ANON__ at C:/usr/local/Perl/lib/Tk/Image.pm line 63
 main::PreviewImageWindowToCanvas at C:\hoge\fuge\hage\m256pmcu.pl line 367
 main::CompositePreview at C:\hoge\fuge\hage\m256pmcu.pl line 662
 Tk callback for .frame1.frame2.button
 Tk::__ANON__ at C:/usr/local/Perl/lib/Tk.pm line 252
 Tk::Button::butUp at C:/usr/local/Perl/lib/Tk/Button.pm line 111
 <ButtonRelease-1>
 (command bound to event)
合成結果プレビュー用 ppm ファイルの先頭のあたりをバイナリエディタで覗くと、「65535」なる値が ASCII で入ってる。なんだこりゃ。何にせよ、このスクリプトは、Active Perl 5.8.8 build 819 では問題があるみたいだな…。連番画像の合成処理自体は一応できるみたいなんだけど。

表示用の作業ファイルの拡張子を、ppm から xpm にすると、プレビュー画像が出ることは出るけど。処理が遅い。異様に遅い。

ppm への変換時に depth を指定したら動いてくれるようになった。 :

    $img[$kind]->Set(magick=>$ext);
    $img[$kind]->Set(depth=>'8');
みたいな。色深度を指定しないとゴイスなカラーモードで出力してしまう、のかもしれん。判らんけど。

とりあえず、一応修正してアップロードしておいた。 0.02 → 0.03 に修正。

Perl/Tk で扱える画像フォーマットって、本当に ppm/pgm/xpm/gif しかないのだろうか。 :

未だに他のフォーマットは扱えないのかしら…。せめて png とか使えんかな…。

そもそも、わざわざ Perl/Tk でやらなくたって、ImageMagick にファイル名を順々に渡していくスクリプトを作るだけでいいような気もする。まあ、当時は勉強も兼ねてやってたんだろうけど。>自分。

今は blender あたりで合成できるんじゃないのかな。オープンソース文化圏から、色々な動画編集ツールも出てきてるようでもあるし。GIMP + GAP でも出来たりするのかもしれん。メニュー等が英語だからさっぱり判らんけど。

#6 [cg_tools] GIMPの各レイヤーを連番画像として保存してくれるスクリプト continuous-save の動作確認

Windows版 GIMP もかなりバージョンが上がってきてるから、αチャンネルつきpngも問題なく出力される状態になったのかな、と期待したけれど。やはりゴミが入る…。連番画像の最初の数枚はそれらしいゴミが見えないのだけど、後のほうになるにしたがい、ポツリポツリと数ドットの大きさの謎ドットが。たぶん、その時のメモリの状況によって、何が入るのかは不定だったりするのだろうけど。

まあ、 _1行入れれば解決する けど。でも、今度は Linux 版で不具合が起きたりしたらどうしよう。

一応、テストに使った .xcf ファイルを置いておくかな…。 _zipに入れて置いときます。

確認作業時に、ツールによって見え方が異なることに気がついた。 :

あふで見ると、盛大なノイズが。あふというよりは、あふが呼び出してる susie プラグインの動作に起因するのだろうけど。プラグインの設定等も絡んでるのかしら。
あふで閲覧した際の見え方。

同じ画像を IrfanView で見ると、そんなにノイズは多くない。
IrfanViewで閲覧した際の見え方。
GIMP で開いた際にも、IrfanView と同じ見え方になる。

おそらく、Susie プラグインのほうは、αチャンネルの情報を、RGBチャンネルに反映させてない状態で表示してるのではないか、という気がする。IrfanView と GIMP は、αチャンネル情報を表示に反映させてるから、ノイズがグンと少なく見えるのでは。でも、どこかしら、RGBチャンネルも、αチャンネルも、謎の値が入る場面がある…のかなぁ。

RGBチャンネルを壊している・不定の値を入れてるのか、αチャンネルを壊している・不定の値を入れてるのか、よくわからんのだよなぁ。あふのソレを見ると、RGBチャンネルを盛大に壊してるようにも見えるし。

2007/03/04追記:修正版を公開してもらえた。 :

_たむぶん版 Continuous Save

対応ありがとうございます。>作者様。動作確認したところ、ゴミが入らなくなってる・不具合が解決されてました。感謝感激であります。

(gimp-edit-clear hoge) なるコマンド?関数?があったのですな。知らなかった…。

2019/12/30追記。 :

GIMP 2.10 に対応した Continuous Save を、たむぶん様が公開してくれているようです。公開ページのURLも変わっていたようなので追記しておきます。

_たむぶん版 Continuous Save

また、今時は、Python-Fu で実装された、更に高機能なプラグインがありますので、そちらも紹介しておきます。

_Home | Export Layers

この記事へのツッコミ

Re: GIMPの各レイヤーを連番画像として保存してくれるスクリプト continuous-save の動作確認 by たむぶん    2007/03/03 02:43
Windows版の Gimp 2.2.13 をインストールして、fb_layer.xcfで
continuous-saveを試してみたところ、確かにゴミが付いてました。

原因は土日にでも調べてみます。
Re: GIMPの各レイヤーを連番画像として保存してくれるスクリプト continuous-save の動作確認 by プラグイン利用側の作者    2007/03/03 11:40
Susie を起動して、メニューの「ファイル」-「設定...」を選択して、IFPNG.SPI の「設定」ボタンで設定ダイアログを出して、「背景色との合成」にチェックを入れて「背景色の規定色」をあふの背景色(黒)に指定してみて下さい。 んー、あふからもプラグインの設定画面は出せるようにした方が良いですかねぇ…。
Re: GIMPの各レイヤーを連番画像として保存してくれるスクリプト continuous-save の動作確認 by たむぶん    2007/03/03 16:06
(何度も削除してすいません)

原因が分かったので、修正版 ver 0.7を作りました。
http://club.pep.ne.jp/~tamubun/computer/continuous-save.html

少なくとも、fb_layer.xcfでは、Windows版、Linux版共に、私のPCではゴミが付かなくなったことを確認しています。

ところで、「あふ」ってソフトの名前だったのですね。趣味の関係で「あふる」という動詞はよく使うのですが、ソフトの方は今まで知りませんでした。
こちらでも動作確認してみました by mieki256    2007/03/05 00:43
> 原因が分かったので、修正版 ver 0.7を作りました。

ありがとうございます!
こちらでも動作確認してみましたが、ゴミが出なくなってるように見えます。
問題(?)解決、ですね。感謝であります。

> 趣味の関係で「あふる」という動詞はよく使う

そんな言葉があるのですか…。私はそちらのほうを知りませんでした。

なるほど、「あふ」と区切って書く、あるいは、「afx」と書かないと、
ソフト名であることすら伝わらないと気づき、反省であります。
…考えてみると、ちょっと変わったソフト名ですね。>「あふ」
どこか、PC-9801やX68Kの、時代の香りがする…。
「あふ」とsusieプラグインについて by mieki256    2007/03/05 00:49
> 「背景色との合成」にチェックを入れて

おお。わざわざ情報ありがとうございます。
該当オプションを設定することで、IrfanView と同じ見え方になりました。

それにしても、背景色と合成しないとゴミが見えるのが
なんだか不思議ではありますね…。
png内の、どのチャンネル(?)の値が参照されてるんだろう…。
それとも、チャンネルとは無関係な領域が参照されてるのかしら…。
Re: GIMPの各レイヤーを連番画像として保存してくれるスクリプト continuous-save の動作確認 by 佐々木和守    2019/12/30 22:43
continuous-saveがgimp2.10系ですと正常動作しないためアップデートをしていただけると嬉しいです。
Re: GIMPの各レイヤーを連番画像として保存してくれるスクリプト continuous-save の動作確認 by mieki256    2019/12/31 01:26
> continuous-saveがgimp2.10系ですと正常動作しない

たむぶん様が公開されてるスクリプトの最新版がGIMP 2.10に対応済みのようです。
記事の最後に追記しておきました。

#7 [flash] FreeMotionのスライドショー作成ウイザードを使ってみたが

本当にスライドショーなんだな…。ちょっと自分の求めてるものとは違ってた。

素材画像を眺めてるうちに、透視変換的表示にしたほうがよいかもしれんと夢想。

この記事へのツッコミ

Re: FreeMotionのスライドショー作成ウイザードを使ってみたが by あすか    2007/10/24 19:59
私もFreeMotionをもっているんですが、スライドショーを使ってガッカリしました。
できれば、次の写真に行くときにフェードアウトし、次の写真がフェードインするようにしたいのですが、なにか方法ありますでしょうか?
作成ウィザードを使わずに、ボタンで次の写真へ飛ぶようにして、写真にフェードのエフェクトをかけたのですが、一枚目のエフェクトだけがループしてしまい、できませんでした。
わかりにくい表現ですいませんが、教えていただけるとありがたいです。
FreeMotionのスライドショー作成ウイザード by mieki256    2007/10/30 15:26
> 次の写真に行くときにフェードアウトし、
> 次の写真がフェードインするようにしたい

FreeMotionを起動して試してみましたが、
スライドショーの作成ウイザードでも、そういう見せ方はできるようです。
記事として書いておきました。
http://blawat2015.no-ip.com/~mieki256/diary/200710272.html#200710272
参考になれば良いのですが。

2006/02/27(月) [n年前の日記]

#1 [nitijyou] 自転車で銀行まで行って

RD-H1とPCのお金を振り込んできた。…注文してから1週間以内に振り込まなきゃいけないはずだけど、時間的に大丈夫かな…。

夜食を買いだめ。 :

ヨークベニマルで。…なんか自分、日本昔話によく出てくる、時々山から下りてきて、村で食料を買いだめして帰っていくお爺さんみたいだ。

#2 [nitijyou] パチンコ屋さんに入ってみた

事情があって、眺めてこないといけなかったので。…パチンコ屋に入ったのって、大学卒業間際に、「学生でありながらパチンコやったことがないのはマズイだろう」と、友人のg氏と一緒に突入して、30分後、「俺たち、向いてないね」とスゴスゴと引き返して以来だな…。

福島県須賀川市のパチンコ屋さんは、郊外型のでかい建物がほとんど。デザインは綺麗なんだけど、入り口がどこなのかわからなくて悩む。…道路の反対側がメインの入り口だったらしい。何故。

入ってみたら、ものスゴイ轟音だった。気が狂いそう。中に居る人は間違いなく難聴になるのでは…。それにしても、外部にまったく轟音が出てないことに驚いた。防音に気を配って建物を設計してるということだろうか。いや、主に鳴ってる音が、ガラス戸等で遮断しやすい種類なのだろうか。そのへんわからんけど。

お目当ての機種は見つからず。台数はたくさんあるんだけど機種は数種類しかない。…なんだか嫌な予感。

試しにプレイしてみようかとも思ったけど、何をどうしたらいいのかさっぱりわからない。どこでコイン?メダル?に変えられるのだろう。変えるための機械がありそうだけど、それすら見つけられなかった。…初心者向けに、手順を書いた紙とか張っておいてほしいな。あるいは入り口に、初めて遊ぶ人向けのチラシを用意しておくとか。…まあ、今時、パチンコその他をやったことのない人間なんて存在するわけがないと思ってるのかもしれない。どうせほっといても客は集まってくるだろうし。

ゲームセンターにも行ってみた。 :

最近はゲームセンターにも置かれてると聞いたので、ロックタウンのゲームセンターに足を伸ばした。

機種はパチンコ屋さんよりたくさんあった。が、お目当ての機種は見つからず。

全然関係ないけど。ゲームのほうは、コクピット型の筐体のゲームしか置いてなかった。レースゲームとかガンダムのゲームとか。あと競馬ゲーム。格闘ゲームは1つ2つ置いてあるだけ。後はUFOキャッチャー。ロックタウンのゲーセンが特殊なのか、それとも全体的にそういう流れなのか。

この記事へのツッコミ

Re: パチンコ屋さんに入ってみた by けいと    2006/02/28 19:17
> 格闘ゲームは1つ2つ置いてあるだけ。
> 全体的にそういう流れなのか。

勝手な妄想ですが、
ああいうゲーセンは「デートコース」になることを期待しているので
格ゲーのような
「男専用」「一人で長時間独占」「上級者以外お断りの雰囲気」を
醸し出してしまうゲームはノーサンキューなのでしょう。

ちょっと前だと格ゲーには、
こいついつ寝てるんだとか、いくら金持ってるんだよっていうような
ゲーマーが必ず一人二人いて
朝から晩までへばりついていたりするし、
そういう人が出てくるともう誰も勝てないし。

あと、男がそういうゲームに熱中しちゃうと
女の子が「つまんなーい」ってごねる姿が目に浮かびますし、
初心者がただタコ殴りされるためだけに数百円使うわけには
いかないですからねぇ。

UFOキャッチャーで彼女にプレゼントとか
メダルゲームで親子や恋人同士がわいわい、
っていう形を望んでいるのでしょう。

吉牛コピペのノリをゲーセンに求めてはいかんのです。
Re: パチンコ屋さんに入ってみた by がんした    2006/03/03 00:32
>デザインは綺麗なんだけど、入り口がどこなのかわからなくて悩む。…道路の反対側がメインの入り口だったらしい。何故。

駐車場と建屋と隣接道路の関係かも。客の車の出入りって頻繁だから、
下手に正面の道路に出入り口を作ると交通の流れが乱れるので、
あえて一本裏から入らないと入れれない駐車場とか、わりとあります。
そこらの絡みで、

裏に駐車場→正面に建屋→裏が正面出入り口

なのかも。
後は、景品交換所の絡みで防犯とか世間体を気にして裏に出入り口があるとか。


>吉牛コピペのノリをゲーセンに求めてはいかんのです。
あぁ、吉野家に今まで一度も入った事が無い女の子って結構いますからね。
女性には敷居が高いようです。逆に言えば、女性客をどうやって取り込むか?が
販売戦略上重要だとか。
後発の松屋やスキヤは、女性客にも利用しやすい店内内装とかに気を使ってるそうですね。

重箱の隅な話で失礼。
ゲーセンはデートコース by mieki256    2006/03/03 15:06
> ああいうゲーセンは「デートコース」になることを期待している

あー。そうか、そういうことか…。
考えてみれば、郊外型のスーパーに隣接してるゲーセンだから、
家族向けとか考慮してそうですな。当然品揃えもそういう方向になるわなぁ…
駐車場と建屋と隣接道路の関係 by mieki256    2006/03/03 16:20
> 下手に正面の道路に出入り口を作ると交通の流れが乱れるので、
> あえて一本裏から入らないと入れれない駐車場とか、わりとあります。

膝を叩きました。そういうことか。その可能性はありそうですな。
そのへんって、企業の持ってるノウハウっぽいなぁ…。

#3 [nitijyou] 携帯を撃ってる場所で店員さんに尋ねてみた

ロックタウンのデンコードーで、携帯を売ってるエリアがあったので、店員さんに、「今、DoCoMo の N505 ってありますか?」「新規契約はできますか?」と尋ねてみた。…無理だと言われた。既に市場に在庫はないのだとか。オークションで入手するしかないだろう、とも言われた。なるほど、そういう状況なのね…。

検証用に機種が入手できない状況では、iアプリを開発する人とかも困っちゃう予感。

#4 [digital] デンコードーのビデオデッキコーナーを眺めて、悩む

手元にあるビデオテープや、レンタルビデオ再生用に、1台確保しておいたほうがいいのかなと思いつつ眺めてみたり。今は1万前後の機種しか置いてない状況なのね…。

店員さんが話かけてきたので、試しに、「S-VHS機って今も売ってたりします?」と尋ねたら、首をブンブンと横に振りながら「完全に売ってません」との返事。だよねえ。 *1 さておき、SONYの機種を薦められた。端子が金メッキなのだとか。うわー。そういう次元になってるの? TBCとか3DNRとか、そういうのも無しか。本当に終わってしまったジャンルなんだな。 *2
*1: 通販なら、2〜3万円のS-VHS機が売ってたりはする。ただ、その上が、ン十万の機種になってしまうみたいで。
*2: でも、DVDプレーヤ/レコーダとセットになった機種のほうは、もうちょっと機能をつけて…あるんだろうか? どうなんだろう。調べてないのでわからない。

#5 [nitijyou] 疲れた。寝る。

自転車で2往復したら疲れた。体力落ちてる。寝ます。

2005/02/27() [n年前の日記]

#1 [digital] _失敗しない、液晶ディスプレイの選び方

記事によると、
輝度400cd/m2以上
コントラスト比400:1以上
応答速度16ms以下
入力系統アナログ+デジタル
は欲しいらしい。自分、液晶については無知なので、メモ。

#2 [digital] _傾向的な不具合ではないとされるVAIO LXと不可解な横線達。

SONY製PCの液晶で、不具合が多発してるらしい。設計ミスらしいのだけど、有償修理なのだそうで。…SONY様には逆らえませんな。 _(via Crohn Life - 2005/02/24の項)

_値動き激しい春モデルPC、9万9800円のVAIOは1週間で売り切れ! :

SONYのそういう姿勢を客が肯定してる、ということかもしれないな。サポートより、値段の安さ、と。

#3 [jiji] _森昭雄教授,講演で「ゲームが原因で自閉症になる」発言

自閉症は先天的なものなわけで…。なんつーか…。

#4 [anime] _劇場で一体何が起こっているのか!?

何が起こってるのだ。 _(via めっつぉ:スクウェア&デジタルニュース)

#5 [anime][neta] コマ数を表示できるストップウオッチについて妄想

1/60秒にも対応させて、ゲーム業界に売り込めないものかしら。一気に市場が広がったりしないかと。

ついでに、アニメオタク相手にも売り出さないかしら。そのままじゃ訴求力がないだろうから、金田伊功、板野一郎、あるいは、富野監督、押井監督、等、業界の有名人のサインを印刷 *1 してアニメイトとかコミケとかで売る。富野監督バージョンなんかは、サインと一緒に、「コンテ千本切り! 君は!」とか書いてあったりもして。ウホっ。カッコイイ!<えっ?

でも、さすがに1個2万円じゃアニオタ相手にも厳しい。ので、市場が拡大することを見込んで\2,980とか\3,980ぐらいで売ることにして。そのぐらいの価格なら、映像業界・アニメ業界・ゲーム業界・アニメオタクにも、どかんと普及するから元が取れる…。

無理があるか。
*1: サインを印刷したシールを張るだけ。

#6 [prog] LLで1秒未満を取得する方法

ちょっと気になったので検索。

Perlなら :

_Time::HiResモジュール で取得できる、のかな?

Pythonなら :

_『Windows 版の time.time() は精度が悪い』 なる記事が参考になりそうな。time.clock() とやらを使うらしい。が、なんか精度について色々と違いがあるらしく。よく読んでみないと。

Rubyなら :

_tv_usec とやらを使う…のかしら。

ちと気になるのは、Ruby のMLらしきところで、 _WinNTは10msでみな同じ精度 という話が出てること。 _Time::HiResから流用 とのことなので、Perl と Ruby は精度が10msになるのであらうか。となると、Windows版 *1 においては Python のほうが精度に関してはまだ期待できる、ということかしら。…や。まだ関連ページをちゃんと読んでないので誤解してる可能性も。

*1: linux のほうは、Windows と比べて、より精度の高い測定ができる(らしい)。

2004/02/27(金) [n年前の日記]

#1 [windows] ホームページビルダーの「リンクエラー」

親父さんからホームページ作成について相談を受けた。『ホームページビルダー(以下HPB)による自サイト管理が、さっぱりわけのわからない状態になったので、サーバ上から自サイト構成ファイルを全てDLして作業をやり直したい』との事。HPBのFTPツールを利用して、サーバから全ファイルを、ローカルの新規フォルダ内にDLするよう指示。DL後、HPBで新たなサイト設定作成を指示し、DLしたファイルによるサイト構成の状態を確認させたところ、1ファイル、リンクエラーとしてリストアップされた。該当ファイルの内容を確認したが、本来であれば必要ないファイル――誤って全く関係ないフォルダに保存されたファイルだと判った。だが、該当ファイルが、どこからもリンクされている様子がない。…おかしい。

リンクエラーファイルとして検出されたということは、HPBが、そのファイルを、「サイト構成に必要なファイル」として認識してるということで。そのように認識される為には、どこかのhtmlが該当ファイルをリンクしている必要がある。しかし、どのhtmlがリンクしてるのか、そこがさっぱりわからない。2時間ほど、親父さんと二人、エクスプローラの検索機能や、HPBのサイト/素材ビューで色々探してみたが、該当ファイルをリンクしてるhtmlの居場所は掴めず。もしやサイトが大きすぎて、 *1 HPBの管理できる限界を超え異常動作してるのでは。などと思い始めたところで、「転送対象ファイル」と「未使用ファイル」の一覧を眺めていて、ようやくミスに気付いた。

そもそも前提条件が間違っていた。リンクエラーチェックの対象となるファイルは、HPBが「サイトに必要なファイル」として認識したファイルではない。HPBは、サイト設定で指定されたフォルダ中の全てのhtmlに対して、リンクエラーがあるかどうかをチェックする。 *2 どこかのhtmlからリンクされているかどうか、つまり「必要なファイル」として認識されてるかどうかは、リンクエラーの検出処理には関係がなかった。

該当ファイルは孤立したファイルだった。リンクしてるhtmlが見つかるはずがない。該当ファイルを削除して問題は解決。

…要するに、誤った前提条件を事実だと思い込んでしまったことによって、しなくてもいい苦労をしてしまったわけで。思い込みの恐ろしさ(?)を再確認。
*1: 容量で180MB。ファイル数で7,000ファイルほど。
*2: 考えてみれば、当たり前の仕様。リンクエラーのチェックが、「必要なファイル」に対してのみ行われる仕様であったら、本来なら「必要なファイル」が、リンクエラーが元で「必要なファイル」として認識されなかった場合に問題が起きてしまう。そのような仕様では、リンクエラーによって「必要なファイル」が「必要ではないファイル」として扱われていることに、ユーザが気付く術が無くなってしまう。

#2 [zatta] 『ていうか』

_「DQN言葉と思考への影響」 を読んだら、最近の自分が『ていうか』を使いすぎてる事にふと気付いてしまった。マズイ。コレはマズイ。これではDQNではないか。

本当に使いすぎてるのだろうか :

単に気のせいだったりはしないか。と思ったので、試しに、今まで書いてきた*.hnfに対し、『ていうか』でgrepをかけてみた。320行がヒット。一行につき2〜4個は入ってるようなので大雑把に見積もって大体1000箇所ほど使ってることになる。つまり、気のせいではなくて、使い過ぎは事実だった。ガックリ。また、Webで日記を書き始めた当時から、頻繁に『ていうか』を用いていた事まで判明してしまった。DQN確定。ちなみに、『つーか』も『ていうか』の代わりによく使う。これもgrepをかけてみたら、85行がヒット。一行につき3個使ってるとすれば大体256箇所で使ってる。ますますDQN確定。

DQN文章度測定 :

文章のDQNぶりを数値化できないか。自分がこの数年間で書いたWeb日記の文章量は、2,724,734 byte。その中にある『ていうか』(4x2byte=8byte)と『つーか』(3x2byte=6byte)の合計byte数は、8x1000 + 6x256 = 9,536 byte。つまり、出現割合は、0.350%。うむ。数値化の可能性が見えてきた。しかしそもそも何%以下ならDQNじゃないと判断すればいいのか。その基準がないと数値だけ出しても意味がないわけで(爆)

文章のヲタクぶりも数値化できるかもしれない。『(爆)』『(笑)』『(^^;』を使って計算すればいい。しかしその場合も、基準となる数値が存在しないから意味がないか。

どこかに、DQNデフォルト、ヲタクデフォルトな人間が居ないものだろうか。そういう人が居てくれたら基準値も計れそうなのだけど。…それじゃSFだ。昔、そういうSF話を聞いた記憶が。何から何まで完全に平均値の人間が居て、企業が商品企画開発のリサーチに使おうとして躍起になる、といった話。

『ていうか』も『つーか』も使う時には一応意識はしてるのですが :

直前まで書いていた文章から連想した内容で、それでいて直前の文章内容とは明確に繋がらない感のある内容を書こうとする際、『ていうか』『つーか』で繋げていたり<実質的には繋がってないけど。本来であれば、『そういえば』『それはさておき』『それはそれとして』等で繋ぐべきではないかと、書いてる際には常に思いつつも、『ていうか』の方が文字数が少ない事と、文を短くしようと心掛けてる事もあって、ついつい『ていうか』を使ってしまいがち。 *1

繋げる内容が長くなる時は、hnfフォーマットの『SUB』を使って、項目を分けるよう心掛けてはいるものの、しかし最近は、明確に区切りを入れず、どんな内容でも一緒くたにしてダラダラ繋いで一行にしてしまう形もなんとなく好きで、『ていうか』の多用を後押ししてる面もあり。

などと言い訳や分析の真似事をしてみたところで、眺めた際にDQNの文章に見えることに変わりはない。トホ。何にせよ、これからは気をつけねば。…いや。どうせ元々DQNだし。今更嘆いたり反省する必要もないか (;´Д`)

『ていうか』の代わりに改行を入れたほうがいいのかもしれないけど :

改行を入れるとページが上下に長くなるので、一記事あたりの量が多いような印象を画面から受けてしまい、読む気が失せるのではないかと想像したりもする。それもあって、極力、一記事が小さな1ブロックとして目に入るよう、改行を避け、文を詰めて記述していたりもするのだけど。しかし、文章がギッチリ詰まって書かれていると、今度は読みにくくなってしまう。難しい。

多くを語れば聞き流されるし、言葉が少なければ誤解される :

結局のところ、文字数やページ上下幅を意識しすぎるが故のこういった工夫・試みも、「誤解無く伝えようとして多くを語れば、相手に面倒臭がられてそもそも読まれない」 *2 「読んでもらおうとして言葉を少なくすれば、相手に誤解される」という、∀のOP収録の際に富野監督がヒデキから諭されたらしい言葉の問題にどこかで集約してしまうのかもしれない、などとぼんやり思ったりもする。 *3

*1: ちなみに昨今は、文字数の少なさを意識して、『…』を『ていうか』の代わりに使う事も。
*2: もしくは「多くを語れば、誤解される可能性を無意味に高める」なのだろうか。
*3: 監督はもっと深い意味で捉えてるのかもしれないけど、自分、恥ずかしながら、未だに監督の書いた∀の書籍を読んでないので、そのへん把握してなかったり。そのうち読んでみないとなぁ。とりあえず、件のエピソードが伝えてるのは、こういう事ではないのか、と今の自分は思っているのだけど。

#3 [ore_xxxxx] 夢で好みのタイプをようやく認識することもあるのだな

夢の中に出てきた女性に胸キュン<古。ゴツイ眼鏡かけて黒髪の長髪でジーンズ姿で男言葉と女言葉が半々ぐらいで寡黙な感じだけど飲み会でふと思いついたように大人数の後輩連中を前に難解な言葉も軽やかに操りつつ演説を振るい店内の全ての客から拍手と歓声でもって称えられたりその後あらかた酔い潰れてしまった後輩達をテキパキと人数分けして次々とタクシーに送り込む采配ぶりで普段は周囲から「イインチョ」 *1 と呼ばれて慕われて頼りにされてる、そんな女性だった。そうか。オイラはそういうタイプが好みだったのか。知らなかった。もっとも昔から「姐さん」タイプには弱い感も。…自分に画力があればぜひとも絵に残しておきたいところなのに。役に立たないこの右腕が疎ましい。

後から考えてみれば、このキャラ、フィー姉さんっぽいな。「…安西先生…フィー姉さんと一緒にツレモクしたいです…」「諦めなさい、もう試合終了だよ」 ガーン

何をイイ歳してくだらねえ寝言をダラダラと恥ずかしげもなく書いてますかねこの人は。
*1: ひらがなの「いいんちょ」でもなく、漢字の「委員長」でもなく、カタカナの「イインチョ」。

#4 [zatta] _あなたの「うつ度」を判定

診断の結果、あなたの得点は 63 ポイントでした。
すぐに自宅安静か入院が必要となる可能性があるレベルです。自分ひとりで抱えずに専門医に相談してください。医者を信じて頂ければきっと元の元気な先生に戻してあげられると思います。
ガーン。あ、安西先生… <それはもうええっちゅーに。もう少しいい結果が出る事を期待してたのだけどな。正直予想外。毎日しょーもないバカ話を書いて陽気に振舞ってみたところでこれですか。トホ。しかしこの結果は、普段の発言内容とこの手の症状の重さを分離して判断する必要がある事を示しているのかもしれない。真っ当な事を言えてたら問題ないとも限らないし、病気になったら真っ当な事を言えなくなるわけでもなく、個々の症例や別の事柄から判断していく必要があるということなのだろうな。しかし、ちんこだのペニスだの口にしてるこの状態が真っ当な事を言えてる状態と自ら称してしまうのはいかがなものか。…誤解なきよう言っておくけど「ちんこだのペニスだの口にしてる」というのはそういう意味じゃなく。自分は体硬いので無理です。…私は今何を喋ってますか。 _(from A Way Out)

2003/02/27(木) [n年前の日記]

#1 石田監督担当話の555

石田監督担当話の555におけるレーザーポインタ発射時直前のカット挿入に感心。 _

六角大王を起動したら調子が出てきてBlenderまで起動。フリー版六角大王は突然落ちて怖い。Blenderはポイント編集時の十字カーソル色が背景色と同じグレーなのでカーソル位置がわかりづらい。G400のせいかもしれないのだが。せめて各種編集時画面の背景色を自由に設定できないものか。

#2 [anime] 555のレーザーポインタ発射

555。石田監督担当話の戦闘シーンにおいてようやくソーセージCMよりカッコイイ555の映像を拝めた。これぞモンタージュ技法の活用。カメラ位置の工夫やカメラ移動の活用によるダイナミックなレイアウト。そしてなにより、ライダーキックにおけるレーザーポインタ発射時カット前の細かい工夫に感心。

555の戦闘方向やキックを打つ方向は「右→左」を基本としているが、レーザーポインタ発射時カットのみ、装置が右足についている関係上、向きが「左→右」と突然反転してしまう。田崎・長石監督担当の555においては無頓着に件のカットを挿入していたが故に状況説明としては観客を混乱させかねない致命的ミスを犯していたが、今回は発射時カット直前に空中で回転する555のカットを極めて短く、「正面」x2→「左→右」x2と挿入することでカットの繋がりの不自然さを解消。(発射カット直後、「右→左」「正面」「右→左」と向きが戻るが、それらカットにおいては、表示時間が比較的長い、構図が判り易い等、観客が状況を認識し易い性質のカットなので問題は無い。) 監督自身が戦闘シーンの演出までしているのかどうかは知らないが、とにかく今回の一連のシーンを作った方の手腕は見事。感服。

もっともそういった工夫に気づいたのは、以前の話数においてミスを犯していたから。田崎監督担当の第2話において最初からこの繋がりを見せられていたらそういう問題が内在していることにも気づかなかったはず。そしておそらく気づかずに眺めてしまっている様々な工夫が既に存在しているであろうことを想像するとそれら映像制作に携わる人々に対し尊敬の念を抱かずにはいられない。

とか書いたけど龍騎のように後から事実を思い知らされて悲しくなる可能性もあるのであらかじめ自分の中に予防線を引いておく。アレは工夫ではなくて偶然かもしれない。

2002/02/27(水) [n年前の日記]

#1 高機能

明日、NHK総合、PM11:00〜PM11:50、TRに、富野監督が出るのですね〜
楽しみ〜


案の定、親父さん、HPB v6.5を持て余してます。
HTMLを作るために、ソフトの使用法を再度勉強…
目的は、HTMLを作る事であって、特定ソフトの独自操作を習得することではないはずですが。
近道歩いたつもりが遠回りしてる気がする。

「どこでも配置モード」を「初心者向け」と称してるのが気になる>HPB
むしろ、「上級者向け」と称すべきではないかな。
なんでも出来る=初心者向けじゃないと思う。
制限を加え、意識する項目を少なくすることのほうが、初心者向けなのでは。


デジカメ話をだらだらだら _(以下略)

#2 [digital] デジカメ話だらだらだら

私のデジカメのCCD、ぶっ壊れたみたい(号泣

レンズに蓋をして光量を全く入れずに撮ると、変なところに白い点が。
しかも毎回同じ場所…
液晶のドット欠けかと思ったけど、PCで読み込んでも残ってるんで、CCDですわ。
過去の撮影画像を眺めてみたら、遅くとも去年の9月には、こういう状態になってたみたい。

CCD自体は、結構ノイズが出るもんらしいですね。
昔、DOS/Vマガジンあたりで読んだんですが、どこぞのメーカーのデジカメは、
「撮影する直前に光量無しで撮影」
→「CCDの出すノイズを検出」
→「実風景を撮影」
→「前述のノイズ情報を利用してノイズ削減」
という処理をしてるらしく。
これは「撮影するたびノイズの位置や量が変わる」からやってるわけで。

とすると、毎回必ず同じ場所にノイズが出てる当方のデジカメは…
既にある種の末期的状態なのではないのか。アハ〜ン
修理に出す気は…起きないなぁ。
修理費あったら、別のデジカメ(中古でも可)を買いたいものデス。

前述のノイズ削減方法…
Photoshopで、同様の処理ができないかな。


CCDに結構なノイズが乗るなら…
スキャナなんかでも乗るのかな?
とすれば、数回スキャンして、それらを加算して割れば…
ビデオ関係でよくある、時間軸方向を利用したノイズ除去みたいな…
それでノイズ削減ができるだろうか。


_松下からこんなの出てた のか…
昨日買ってきたのはなんだったんだ…ウエーン (;TДT)
充電池って、店頭での取り扱いに偏りがあって困る。
特定のメーカ品だけ置いてたり、古いのを置いてたり。

2001/02/27(火) [n年前の日記]

#1 物忘れ

日記に、「コレを書こう」と思ってたはずなんだけど。忘れた。
どうも最近、すぐ忘れてしまう。
まあ、忘れるぐらいだからたいした内容じゃないんだろう。
たぶん。

思い出した。
プロジェクトXが面白かった、ってことだ。
…やっぱりたいした内容じゃなかったか。

電気炊飯器の開発話だったんだけど。
ご飯がおいしく炊けるときの温度変化を最初に調査、ってのに感心。
まずはデータを集める、というモノの考え方が技術者らしい。

そういや、米をとぐ作業を自動化できないかな。
実現できたら売れそう。炊飯器と一体化してもいいかも。
と思ったら。
今、とがないでそのまま炊ける米って売ってるのね。値段高いらしいけど。
一攫千金のチャンスが潰えた。チッ

なんか他に書くことあったと思ったんだけどな。
なんだったかな。

2000/02/27() [n年前の日記]

#1 (NoTitle)Pixiaなるフリーソフ...

_Pixia なるフリーソフトのお絵描きツールを試用してみたり。雑誌「WinGraphic」での紹介記事を目にしてからというもの、ずっと気になっていたのです。
感想ですが、想像してた以上に使いやすいですね。各機能がそんなにわかりづらくないし、動作も重くない。Web用のイラストサイズ程度なら充分使えそう。
とりあえず試しに _こんなの 描いてみました。ちなみにマニュアルは読んでないです(つーかインストールしたらヘルプファイルが入って無かった…)。タブレットで下書きからいきあたりばったりで描いたせいか、線がへろへろ〜んの上に、背景と合成する際のジャギー(?)の消し方がわからず、かなり汚い仕上がりになってしまったのでここでのみ公開(後悔)デス。

1999/02/27() [n年前の日記]

#1 (NoTitle)従兄がパソコンを触り...


従兄がパソコンを触りに遊びにきました。
子供(3歳と2歳)と一緒に来たのですが、いやー、このくらいの年齢の子供って大変ッスね。
何をしでかすかわからなくて目が離せません。でも見てて飽きないなぁ。
ほほうそんな事をするとは、みたいな想像つかない事を色々やり始めるので面白いです。
(でも毎日コレじゃ疲れちゃうよな。)
で、従兄のほうはパソコンでネットサーフィンをして、やたら「凄い凄い」と感心してました。
そうゆう反応を見るのもなんだか新鮮な感じです。

キャプチャボードを組み込んで動かしてみました。
うわ〜、画質悪〜。
ゲロゲロ。しばらく使っているとWindowsが落ちるよ。
なんじゃ、この付属のムービーソフト。Win3.1のアプリですか。
げ、AVIファイルを読みこむと固まるよ。どひー。
…まあ、1万ちょっとの値段なので仕方ないところでしょう。
後はハードスペックを上げてけばもう少しはマシに動作するのかもしれません。


以上、26 日分です。

過去ログ表示

Prev - 2024/12 - 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 31

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project