mieki256's diary



2023/05/31(水) [n年前の日記]

#1 [cg_tools][blender] デプスマップで人物画像を動かしてみたい

ここ数日、画像生成AI Stable Diffusion web UIで生成した風景画像から、デプスマップを推測・生成して、blender で立体化して動画を作成する実験をしていたけれど。

これを人物画像でやったらどんな感じになるのか気になってきた。結構印象は変わってくるのだろうか。試してみたい。

環境は以下。
先に成果物を提示しておきます。こんな感じになりました。

元画像を生成 :

Stable Diffusion web UIで以下のような画像を生成。画像サイズは512x512。

00056-3036143978.i2i.03.png
_00056-3036143978.i2i.03.png
parameters

1 girl, solo, beautiful, japanese, idol, actress, photo realistic, masterpiece, best quality, school uniform, standing against the wall,
Negative prompt: EasyNegative, painting, sketches, (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, (monochrome), (grayscale), text, logo, watermark, message, bad anatomy, bad arms, bad legs, bad hans,
Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 2713881344, Face restoration: CodeFormer, Size: 512x512, Model hash: ac68270450, Model: braBeautifulRealistic_brav5, Denoising strength: 0.6, Clip skip: 2, Version: v1.2.1


このままだと画像が小さ過ぎる気がしたので、Upscayl 2.5.1を使って、2048x2048に拡大。アルゴリズムは Ultramix balanced を選択。

_GitHub - upscayl/upscayl
_Releases - upscayl/upscayl

_00056-3036143978.i2i.03_upscayl_4x_ultramix_balanced.jpg

デプスマップを作成 :

Stable Diffusion web UI の拡張機能、ControlNet のプリプロセッサで、デプスマップを作成。種類は zoe を選んだ。

00056-3036143978.i2i.03-depth_zoe.png
_00056-3036143978.i2i.03-depth_zoe.png


一応、leres や MiDaS も使ってデプスマップを作ってみたのだけど。御覧の通り、結果がマチマチで…。

00056-3036143978.i2i.03-depth_leres.png
_00056-3036143978.i2i.03-depth_leres.png

00056-3036143978.i2i.03-dpt_beit_large_512.png
_00056-3036143978.i2i.03-dpt_beit_large_512.png

00056-3036143978.i2i.03-dpt_hybrid_384.png
_00056-3036143978.i2i.03-dpt_hybrid_384.png

対象物が近距離に収まってる場合は zoe のデプスマップが一番それっぽい気がする。上記の例では、髪、鼻、襟元が違うというか…。

blenderで読み込み :

blender 3.3.7 x64 LTS + ImportDepthMapアドオンで、元画像とデプスマップをインポートして、2.5D的な立体形状を作成。

そのままでは、遠方が小さくなってしまうので、ラティス変形を使って形を歪ませた。以下のような状態になった。

depthmap_take03_01_ss02.png


ちなみに、MiDaSで作ったデプスマップを使って同じことをしてみたのだけど…。

depthmap_take03_01_ss01.png

まだ zoe のデプスマップを使ったほうがマシかなあ、と…。

カメラにモーションをつけてレンダリング。512x288、24fps、120フレームで連番pngを作成して、ffmpeg で mp4 に変換。
ffmpeg -framerate 24 -i render\%04d.png -vcodec libx264 -crf 18 -pix_fmt yuv420p -r 24 out.mp4 -y

成果物 :

そんな感じで作業をして、以下のような動画ができました。

雑感 :

2D画像を単にPANする動画よりは多少それっぽくなった気もするけど、所詮は2.5D的な見せ方と言うか…。ううーん。

デプスマップに顔のパーツの凸凹も含まれるかなと期待したのだけど、そのあたりの情報はほとんど含まれない状態で出力されてしまって…。鼻の高さが微妙に含まれているかな、どうかな、というレベルで…。結果、作った動画も、なんともビミョーな出来になってしまった。

以前、カメラマップ(カメラマッピング)の実験をした時も思ったけれど、こういった流れで動画を作るとしたら、モデルデータをどれだけ精巧に作れるかがポイントになるのかもしれない。少なくとも、静止画の人物画像からデプスマップを推測して云々というやり方では、人物部分の奥行き情報がざっくりとしたものになってしまうので、期待した結果から程遠いものになってしまうなあ、と…。

余談 :

人物が映った動画を眺める際、見ている側は、おそらく顔周辺を最も注目して視聴しそうな気がするので…。そこだけでも精密なモデルデータを作れたら結構違うのかもしれない。

であれば…。あらかじめテンプレートになりそうな顔モデルデータを用意して、画像を顔認識させて、目・鼻・口・耳などの位置にアタリをつけて、それらの位置に沿うように顔モデルデータを変形させて、そこに元画像をテクスチャとして貼り込めば、などと妄想したりもして。

もっとも、たしかそういった方法で、動画内の顔部分を差し替えていた技術が既にあったような気がする。

ただ、動画内の顔を差し替えるソレは、元になる動画が存在しないと作業できないデメリットはありそうだなと。一枚の画像さえあれば少しは動かせますよ、というソレとは、ちょっと方向性が違ってくるような気もする。既に存在する動画を改変してしまう技術と、ほとんど何もない状態から動画を作るソレは、ジャンルが違うのでは…。まあ、どちらでも共通して使える技術もありそうだけど。

そういえば、一枚の人物写真を渡すだけで口パク動画を作れてしまうアニメーション作成ソフトがあったような…。CrazyTalk、だったっけ? ググってみたら、Character Creator + HeadShotプラグインに変わってた。

_画像から 3D 頭部モデルを生成 | Headshot | Character Creator
_Generate Faces from Photos in Minutes | Headshot Plug-in for Character Creator - YouTube

というわけで、顔だけでもそれっぽく、という技術やソフトなら既に色々ありますなと。

2022/05/31(火) [n年前の日記]

#1 [xscreensaver] xscreensaver用のスクリーンセーバを作りたい。その4

_昨日 に続いて、xscreensaver用のスクリーンセーバを自分で作れないか実験中。 _README.hacking に新しいスクリーンセーバを作る際に意識することが書かれてあるので眺めながら作業。

環境は Ubuntu Linxu 20.04 LTS。Windows10 x64 21H2 + VMware Player 上で動かしてる。

円だの線だの四角だのを描画するだけではなくて、画像を描画するスクリーンセーバを作りたい。noseguy.(c|man|xml) と deluxe.(c|man|xml) を参考にして実験をした。

とりあえず、一応、画像描画できてるような感じにはなった。

ソース。 :

ソースは以下。

_helloimgdraw.c

相変わらず長い。長いけど、「obj」で検索すれば、肝心の処理部分だけを追えるかなと。

.man と .xml は以下。

_helloimgdraw.man
_helloimgdraw.xml

  • .c と .man は、hacks/ 以下に置く。
  • .xml は、hacks/config/ 以下に置く。


一応簡単に解説。

「#include "ximage-loader.h"」と書いて、ximage-loader.h をインクルードすれば、画像バイナリを Pixmap や XImage に変換する関数が使えるようになる。

ソースの最初のあたりに、「#include "images/gen/ufoimage256c_png.h"」を記述しているけれど、これで、ufoimage256c.png のバイナリに、ufoimage256c_png という変数を通じてアクセスできるようになる。

ちなみに images/gen/*.h は、make をすると自動生成される。そのあたりのルール(?)は、 _2022/05/29の日記 にメモしてある。

画像バイナリから Pixmap への変換は、image_data_to_pixmap() で行うことができる。

Makefile.in を修正。 :

hacks/Makefile.in を書き換えて、helloimgdraw.c もコンパイルできるようにする。

_Makefile.in.patch
_Makefile.in

「noseguy」で検索して、その周辺に helloimgdraw.* を追加していけばいい。具体的には…。
  1. SRCS に helloimgdraw.c を追記。
  2. OBJS に helloimgdraw.o を追記。
  3. EXES に helloimgdraw を追記。
  4. MEN に helloimgdraw.man を追記。

他に、以下の行を、noseguy 関係の記述行のすぐ下のあたりに追加。
helloimgdraw:	helloimgdraw.o	$(HACK_OBJS) $(COL) $(PNG) $(DBE)
	$(CC_HACK) -o $@ $@.o	$(HACK_OBJS) $(COL) $(PNG) $(PNG_LIBS) $(DBE) $(HACK_LIBS)
helloimgdraw.o: ../config.h
helloimgdraw.o: $(srcdir)/fps.h
helloimgdraw.o: images/gen/ufoimage256c_png.h
helloimgdraw.o: $(srcdir)/recanim.h
helloimgdraw.o: $(srcdir)/screenhackI.h
helloimgdraw.o: $(srcdir)/screenhack.h
helloimgdraw.o: $(UTILS_SRC)/colors.h
helloimgdraw.o: $(UTILS_SRC)/font-retry.h
helloimgdraw.o: $(UTILS_SRC)/grabscreen.h
helloimgdraw.o: $(UTILS_SRC)/hsv.h
helloimgdraw.o: $(UTILS_SRC)/resources.h
helloimgdraw.o: $(UTILS_SRC)/textclient.h
helloimgdraw.o: $(UTILS_SRC)/usleep.h
helloimgdraw.o: $(UTILS_SRC)/visual.h
helloimgdraw.o: $(UTILS_SRC)/xdbe.h
helloimgdraw.o: $(UTILS_SRC)/xft.h
helloimgdraw.o: $(UTILS_SRC)/yarandom.h
helloimgdraw.o: $(srcdir)/ximage-loader.h

注意点。noseguyの指定と比べて、一部、必要になるライブラリ(?)が違ってる。
noseguy:	noseguy.o	$(HACK_OBJS) $(PNG) $(TEXT)
	$(CC_HACK) -o $@ $@.o	$(HACK_OBJS) $(PNG) $(TEXT) $(PNG_LIBS) $(TEXT_LIBS)

helloimgdraw:	helloimgdraw.o	$(HACK_OBJS) $(COL) $(PNG) $(DBE)
	$(CC_HACK) -o $@ $@.o	$(HACK_OBJS) $(COL) $(PNG) $(PNG_LIBS) $(DBE) $(HACK_LIBS)

noseguy はテキストメッセージを表示する処理が入っているので、$(TEXT) や $(TEXT_LIBS) が必要になるけれど、今回のソースはテキストメッセージを表示しないので、そのあたりの記述は無くていいはず。また、deluxe.c の中身をコピペしていたりもするので、deluxe.c が必要としていた $(COL) や $(DBE) や $(HACK_LIBS) も追加してみた。

XScreenSaver.ad.in を修正。 :

スクリーンセーバのリストに、Helloimgdraw も追加したい。driver/XScreenSaver.ad.in も修正する。

_XScreenSaver.ad.in.patch
_XScreenSaver.ad.in

「 deluxe -root \n\」と書かれた行のすぐ下にでも、「 helloimgdraw -root \n\」を追加しておけばいいのではないかと思う。

make等を実行。 :

ここまでできたら、Makefile 等を自動生成し直し。
./configure --prefix=/usr --libexecdir=/usr/lib

そして、make してビルド。エラーが出ずにビルドができたら、インストール。
make
sudo make install

xscreensaver の設定ファイルを削除してから、設定画面を表示して動作確認。
rm ~/.xscreensaver
xscreensaver-settings &

問題点。 :

一見すると、画像が描画できてるように見えるし、透過部分もちゃんと透過になっているので、これで目的は果たせたぞ、と思ったのだけど。設定ダイアログを出して、オブジェクトの数を増やしてみたところ、画面がやたらとちらつくことに気づいてしまった。




どう見ても、どこかで何かがバグってる。

もしかすると、ダブルバッファ描画処理のあたりで頓珍漢なことをしている予感。仕組みも分からないまま deluxe.c からコピペしてきたけど、その際、妙なところを書き換えてしまったのかもしれない…。

仮想PC (VMware Player) 上で動かしてるからこうなるのだろうか、実機で動かしたら違う見た目になるのかなと、Core2Duo E8400(2コア2スレッド、3.0GHz) + Ubuntu Linux 20.04 LTS上でも動かしてみたけれど、そちらでも同様に画面がちらついた。やはりプログラムがバグってるな…。

バグを修正できた。 :

ダブルバッファを使っているらしい、deluxe.c や anemone.c を眺めながらコピペを繰り返していたら、画面のちらつきは治った模様。やはりダブルバッファ関連がおかしかったらしい。




_helloimgdraw.c
_helloimgdraw.man
_helloimgdraw.xml

どこらへんがおかしかったのかはさっぱり分かってない…。まだバグがあるかも…。でもまあ、ダブルバッファで処理すればちらつかない状態が実現できるし、ちらついたらどこかでバグってる、ということだけは分かった。

xscreensaverのビルドに必要なパッケージについて。 :

OSインストール直後の状態に比較的近い Ubuntu Linxu 20.04 LTS上で、xscreensaver 6.03 をソースからビルドしようとして以下を打ってみたら、警告がたくさん出てきてしまった。

./configure --prefix=/usr --libexecdir=/usr/lib
Warning: The GTK libraries do not seem to be available; the `xscreensaver-settings' program requires them.
Warning: The Xt library was not found.  It is required.
Warning: The XFreeType library was not found.  It is required.
Warning: The systemd library was not found. This means that xscreensaver-systemd won't be built. Without that, xscreensaver will not be able to auto-lock before the system is suspended (e.g., closing laptop lid) and might activate while video playback is in progress.
Note: The OpenGL 3D library was not found. Those demos which use 3D will not be built or installed. That is most of them.
Warning: Your system seems to have PAM, but PAM is not being used. That is probably not going to work out well.

Gtk、Xt、XFreeType、OpenGL等々が見つからねえぞと言われてしまっている…。今ままでは色々なパッケージをインストールした環境で試してたから、こういう状況に遭遇しなかったのだな…。

解消できないものかと、関係がありそうな気配がするパッケージを片っ端からインストールしていったら、警告数は少なくなった。

ただ、どのパッケージが何と関係しているのか、そのあたりが分かってない。でもまあ、とりあえず、インストールしたパッケージを一応メモしておく。不要なパッケージもインストールしちゃってるはずだけど、気にしないことにする。

intltool libsdl2-dev libgimp2.0-dev libxml2-dev
libgtkextra-dev libgtkmm-2.4-dev libgtkmm-3.0-dev
python3-dev python3-setuptools libjpeg-dev zlib1g-dev libfreetype6-dev
python-pygame python3-pygame
libgles2-mesa-dev mesa-utils
libgdk-pixbuf2.0-dev

それでもまだ、以下の警告が出てるけど…。

    #################################################################

    Warning: The systemd library was not found.

             This means that xscreensaver-systemd won't be built.
             Without that, xscreensaver will not be able to auto-lock
             before the system is suspended (e.g., closing laptop lid)
             and might activate while video playback is in progress.

    Warning: Your system seems to have PAM, but PAM is not being used.
             That is probably not going to work out well.

    #################################################################

    Warning: There is already an installed package of xscreensaver
             version "5.42+dfsg1-1ubuntu1", in these directories:

             User programs: /usr/bin/
             Screen savers: /usr/lib/xscreensaver/
             Configuration: /usr/share/xscreensaver/config/
             Extra fonts:   none
             App Defaults:  /etc/X11/app-defaults/

    #################################################################

    XScreenSaver will be installed in these directories:

             User programs: /usr/bin/
             Screen savers: /usr/lib/xscreensaver/
             Configuration: /usr/share/xscreensaver/config/
             Extra Fonts:   /usr/share/fonts/xscreensaver/
             App Defaults:  /etc/X11/app-defaults/


ここまでメモしてから気が付いたけど、README の最初のあたりで、必要なパッケージについて書いてあった…。そっちを見てから試せば良かった。

===============================================================================
To compile for a Unix system with X11:
===============================================================================

    ./configure --help

    ./configure --prefix=/usr
    make
    sudo make install
    make clean

    xscreensaver &
    xscreensaver-settings

  There are many compilation dependencies.
  The configure script will tell you what is missing.
  At the least, you will need development versions of these libraries:

    perl pkg-config gettext intltool libx11 libxext libxi libxt
    libxft libxinerama libxrandr libxxf86vm libgl libglu libgle
    libgtk2 gdk-pixbuf-2.0 gdk-pixbuf-xlib-2.0 libxml2 libpam
    dbus libsystemd elogind

  BSD systems might need gmake instead of make.


もっとも、README には、Ubuntu (Debian) には存在していないパッケージ名ばかりが書かれているようで…。

E: パッケージ libx11 が見つかりません
E: パッケージ libxext が見つかりません
E: パッケージ libxi が見つかりません
E: パッケージ libxt が見つかりません
E: パッケージ libxft が見つかりません
E: パッケージ libxinerama が見つかりません
E: パッケージ libxrandr が見つかりません
E: パッケージ libxxf86vm が見つかりません
E: パッケージ libgl が見つかりません
E: パッケージ libglu が見つかりません
E: パッケージ libgle が見つかりません
E: パッケージ libgtk2 が見つかりません
E: パッケージ gdk-pixbuf-2.0 が見つかりません
E: パッケージ gdk-pixbuf-xlib-2.0 が見つかりません
E: パッケージ libpam が見つかりません
E: パッケージ libsystemd が見つかりません
E: パッケージ 'elogind' にはインストール候補がありません
パッケージ elogind は使用できませんが、別のパッケージから参照されます。これは、パッケージが欠落しているか、廃止されたか、または別のソースからのみ利用可能であることを意味します。

README に従ったら、ほとんど全滅。

「Debian は古いバージョンの xscreensaver を配布しているから警告メッセージ出して嫌がらせしてやる!」とかやっておきながら、その Debian でビルドするための情報をまとめておかないあたり、なんだかちょっと引っ掛かるなあ…。

_Debian 8 jessie + xfce 4 で xscreensaver から light-locker に移行する方法 - 怠惰の形而上学

ちなみに、(Ubuntu|Debian) の場合、おそらく上記のパッケージ名の後ろに「-dev」とつければ、それっぽいパッケージが見つかりそうな気配はあるなと…。

sudo apt install libx11-dev libxext-dev libxi-dev libxt-dev libxft-dev libxinerama-dev
sudo apt install libxrandr-dev libxxf86vm-dev libgl-dev libglu-dev libgle-dev libgtk2.0-dev
sudo apt install libgdk-pixbuf2.0-dev 
sudo apt install libpam-dev

ただ、これで本当にビルドできる状態になるのか分からない。別途、Ubuntu をインストールし直して、ほとんどの素の状態から試さないと分からんなと…。そりゃまあ、xscreensaver の作者様も、一々そんな検証作業をやってられないよな…。

Debian や Ubuntu の xscreensaver パッケージ説明に、ビルド時に必要になる依存パッケージが書かれてたりしないのだろうか。自分、そのあたりの取り決めが分かってないので、なんとも…。

_Debian -- bullseye の xscreensaver パッケージに関する詳細
_Ubuntu - focal の xscreensaver パッケージに関する詳細

ここで出現するパッケージ名の後ろに「-dev」をつけて探してみればいいのだろうか。

2022/06/01追記。 :

VMware Player上で Ubuntu Linux 20.04 LTS を新規にインストールして、xscreensaver 6.04 のビルドに必要になるパッケージを確認してみた。

ちなみに、公式サイトからソース群をDLしようとしたら、6.03 が 6.04 に更新されてた。

_jwz: XScreenSaver 6.04 out now

さておき。Ubuntu Linux 20.04 LTS の場合、xscreensaver 6.04 のビルドに必要になりそうなパッケージは以下の模様。これで全部の警告が消えるわけではないけれど、ある程度は消えてくれた。

sudo apt install build-essential make git wget intltool
sudo apt install libx11-dev libxext-dev libxi-dev libxt-dev libxft-dev libxinerama-dev
sudo apt install libxrandr-dev libxxf86vm-dev libgl-dev libglu-dev libgle-dev
sudo apt install libgtk2.0-dev libgdk-pixbuf2.0-dev libpam-dev libxml2-dev libjpeg-dev

ソース群を入手。
wget https://www.jwz.org/xscreensaver/xscreensaver-6.04.tar.gz
tar zxvf xscreensaver-6.04.tar.gz
cd xscreensaver-6.04

以下を打って、Makefile を自動生成。ビルド。インストール。設定画面を表示して動作確認。
./configure --prefix=/usr --libexecdir=/usr/lib
make
sudo make install
xscreensaver-settings &

2021/05/31(月) [n年前の日記]

#1 [digital] 手持ちのスマホのカメラ性能を確認

先日 iPhone5 を譲ってもらったことで、手持ちのスマホは HUAWEI P9 lite、iPhone5 の2台という状態になっているけれど。それぞれカメラ性能がどれだけ違うのか気になってきた。iPhoneのカメラは凄い、と昔は言われてたようだけど、どのくらいの画質なんだろうと。もっとも、どちらのスマホも古いので、今頃比較してみてどうすると言われそうだけど…。

とりあえず、福島県須賀川市内のあちこちで写真を撮って、画像を眺めてみたり。せっかくだから、コンパクトデジカメ Canon PowerShot A3300 IS も一緒に持ち歩いて、そちらでも撮影してみたりして。

機材(?)は以下。
  1. Canon PowerShot A3300 IS : コンパクトデジカメ。約1600万画素。
  2. Apple iPhone 5 : 背面カメラ 約800万画素。HDR撮影機能有。
  3. HUAWEI P9 lite : Androidスマートフォン。背面カメラ 約1300万画素。HDR撮影機能有。
どの写真も手持ち撮影。三脚を持って行って撮影すればよかった…かな…。でもまあ、スマホで写真を撮る時って、フツーは三脚なんて使わないだろうし、手持ち撮影のほうが現実的(?)な気も。

以下のサムネイル画像をクリックすればオリジナル画像が開ける。1枚あたり2〜5MByteと重いけど…。

その1。 :

未来大橋から釈迦堂川と阿武隈川の合流地点を撮影。A3300 IS、iPhone5、P9 lite の順で列挙。iPhone5 と P9 lite はHDR撮影機能をONにして撮影。

PowerShot A3300 IS
iPhone 5
HUAWEI P9 lite

P9 lite だけ、ビミョーに紫が入ってる気がする。

その2。 :

未来大橋からヤマダ電機に行く途中で撮影。A3300 IS、iPhone5、P9 lite の順で列挙。iPhone5 と P9 lite はHDR撮影機能をONにして撮影。

PowerShot A3300 IS
iPhone 5
HUAWEI P9 lite

A3300 IS は空が白飛びしちゃってる。HDR撮影機能を使った iPhone5 と P9 lite は空の雲の明暗も撮れている。P9 lite は地面側の明るさに引っ張られて空の明暗が弱くなってしまった模様。

その3。 :

未来大橋から須賀川駅方向を撮影。A3300 IS、iPhone5、P9 lite の順で列挙。iPhone5 と P9 lite はHDR撮影機能をONにして撮影。

PowerShot A3300 IS
iPhone 5
HUAWEI P9 lite

これも、A3300 IS は空の一番明るいところが白飛び。HDR撮影機能を使った iPhone5 と P9 lite は、A3300 IS で白飛びしてる部分も撮れている。

感想。 :

HDR撮影機能の有無は大きいなと…。Canon PowerShot A3300 IS はコンパクトデジカメ・カメラ専用機で、画素数も一番多いのに、HDR撮影機能が無いものだからスマホより残念な写真になりがちな感も…。まあ、かなり古いデジカメだから仕方ない。

Canon と iPhone5 はイイ感じの色になってるけど、P9 lite は色がくすんでる気がする。iPhone5 は、とにかくパッと見で奇麗な写真画像を出してくる印象。緑や青を撮影後の画像処理で強調してそう。ただ、どれが正確な色なのかは、ちょっと分からないなと。

以前持ち歩いてたガラケーのN905iは、カメラ機能(約500万画素)が実にションボリな感じで、あまりに画質が悪いものだからメモ代わり以外で使う気分にならなかったのだけど。それと比べると、iPhone5 も、P9 lite も、昔のコンパクトデジカメ並みの写真が撮れるように見える。随分進歩したなと…。

余談。最近のコンパクトデジカメならHDR撮影ができるのではとググってみたら、そもそも低価格コンデジという市場が数年前には消滅していたようで…。高価格なコンデジはまだ残ってるようではあるけど…。そりゃそうか…。スマホのカメラ機能で済むもんな…。なんとなく、オーディオステレオ機器の衰退ぶりを連想したりもして。

#2 [digital] スマホケースを探してみたけど

歯医者からの帰りに、iPhone5用ケースが店頭に置いてないかと、100円ショップのシルク、ヤマダ電機近くのダイソー、ヤマダ電機、ドン・キホーテに寄って探してみたけど、やはりどこにも置いてなかった。…いや、ヤマダ電機には2〜3点置いてあったっけ。ただし、税抜き1,480円とかそんな感じで。さすがにその値段は…。最新スマホに使うケースならともかく…。

ドン・キホーテでは、iPhone7用ケースがダンボール箱に無造作に入っていて、在庫限りの処分価格と称して200円で売られていた。iPhone7用ですらそんな扱いなのだから、iPhone5用なんて置いてあるはずもないよなと…。

どんなスマホでも使えますよ、四隅を挟み込めば/貼り付ければそれだけでも本体破損が結構防げます、みたいなケース? スマホハンガー? をどこかしらで作ってたりしないのかなあ…。

このあたり、なんだかもったいない気もする。iPhoneXX専用ケースの金型を作って、製造して、しかし本体が型落ちになったら、関連アクセサリーもお払い箱…。毎回、新しいスマホが出るたびに、専用ケースを製造して店頭に置くという、そのこと自体がもったいないというか、どこか馬鹿馬鹿しい感じもするなと。ある程度共通化できないのかな…。

#3 [nitijyou] 歯医者に行ってきた

電動自転車でS歯科まで。歯茎のメンテナンスとやらを。PM02:20から…終了時刻をメモするのを忘れたけど、たぶん5分もかからずに終わったような気がする。

2020/05/31() [n年前の日記]

#1 [nitijyou] xxxキャッチャーを作成

犬のアレを回収する際、今までは Seria で売ってた犬用のビニール袋(45枚入り、色は茶)を使ってたのだけど。どうやら売り切れてしまった上に、商品が置いてあった列に別の商品が置かれてしまって、もはや入荷する予定も無さそうで困っていたり。

一応、親父さんが、ホーマックで別商品を買ってきたけど、袋のサイズが小さくて、今まで使ってたxxxキャッチャーには装着できず。

ちなみに、xxxキャッチャーは、100円ショップで買った湯舟のゴミ掬いを改造して作った。袋を固定するためのクリップも接着済み。持ち手の隙間に予備の袋を数枚巻き付けておけば、キャッチャーを持ち歩くだけで犬の散歩ができるので結構便利。まあ、傍から見ると、「あの人一体何を持ち歩いてるんだ…」と思われそうでもあるけれど。

さておき。そんなわけで、新兵器を開発。ダイソーで買った針金で、新ビニール袋のサイズに合う感じのキャッチャーを作ってみたり。ただ、袋を固定するための何かしらは思いつかず…。もしかすると、網目の袋でも貼り付けておいて、そこから下にはビニール袋が落ちないようにする、等の工夫が必要かもしれない。まあ、現状のまま試してみて、問題があれば改めて対処しよう…。

余談。ウチの犬は、大小で、予備動作と尻の角度が違うので、出しそうなタイミングを見計らって落下地点にキャッチャーをスッと差し出せば、手を汚さずに回収できるので助かるなと。もっとも、極稀にタイミングが読めなくて、ビニール袋+手掴みで回収する羽目になったりもするけれど…。予測が外れると少々精神的ダメージが発生する…。

2019/05/31(金) [n年前の日記]

#1 [zatta] 人感センサ付きLEDライトを購入

電動自転車でホームセンターサンデーまで。人感センサ付きLEDライト、ムサシ RITEX GS-150を購入。税抜きで1,280円、前後だった気がする。

ウチには6個ぐらい、人感センサ付きLEDライトが設置してあるのだけど、いかんせんほとんどが古い製品だからとにかく暗くて。ただ、以前 Amazon経由で購入した、ムサシ RITEX ASL-015 だけはかなりの明るさ。単4電池 x 3本のせいか、すぐに電池が切れて電池を交換しなきゃいけないのが若干アレではあるけれど。

_LEDセンサーmini(ASL-015) センサーライト|高枝切鋏のムサシ - musashi

さておき、数日前に親父さんから、トイレ前のライトが暗いと不満が出たので、せめてそこだけも件の製品と交換してみようと今回購入してみた次第。しかし、型番が違う…。スペック面では何が違うのか…。

ググってみたら、日本語向けページには型番が無いけど、英語ページなら型番があるように見える。もしかして、海外向け製品なのかな。

_Portable Sensor Light Mini(GS-150)

乾電池を購入。 :

親父さんから乾電池を買ってきてほしいと頼まれたので、ケーズデンキで MITSUBISHIブランドの単3乾電池 x 20本、maxellブランドの単4電池 x 10本を購入。値段が安いからすぐに切れるだろうけど、一応日本メーカのブランドで売ってるから液漏れ等はしないんじゃないかと期待。

#2 [nitijyou] 親父さんの体調についてメモ

詳細はGRPでメモ。

2018/05/31(木) [n年前の日記]

#1 [anime] 「LOST SONG」、8話を視聴

「LOST SONG」というアニメを一応見ていたり。歌うと超常現象を起こせる2人の少女を軸にして話が進む、てな感じの作品で。見た目はちょっと昔のRPGっぽくて正直なんというか…。喩えとしてはちょっとアレだけど、「天空の城ラピュタ」に対する「バルテュス ティアの輝き」とか、「風の谷のナウシカ」に対する「サンゴ礁伝説 青い海のエルフィ」とか、そういう雰囲気を感じちゃうアニメと言えば大体の雰囲気が伝わる…のかな…。いや、伝わらんか…。

「こういうアニメはNHKあたりで放送してたら良かったりしないかな」などと思いながら眺めてたけど、8話を見てビックリ。これはやられた。参りました。前回の最後のあたりが妙な繋がりになっていて、「ん? どういうこと?」と思ったけれど。なるほど、そういう設定・構成か…。全てが繋がった…。「NHKあたりで放送したら」なんて実に頓珍漢な感想だった。今までまんまと騙されました。そういう仕掛けか…。

こういう設定も、こういう構成も、自分は好きですわ。 火の鳥とか まどマギとか バルディオス等の設定が好きな人だったりするし、脚本の段階で仕掛けられたトリックも好きだったりするので。

さておき。昔のRPGでよく出てきそうな「伝説」に対して、「伝説は伝説なんだから」で思考停止せず、「その伝説を作ったのは一体どういう人物だったのだろう…?」などと考え始めたら、もしかするとこういう設定に辿り着けそうな気もしてきたわけで。TVゲームやアニメでよくありそうな「○○は○○だから」で済ませずに、そこをもう一歩踏み込んで考えてみるだけでも、他作品との差別化ができる可能性って高まるのかな、みたいなことをぼんやり思ったりもして。

2017/05/31(水) [n年前の日記]

#1 [blender] blenderで2Dカットアウトアニメを作成できるCOA Toolsを導入

blender で2Dカットアウトアニメ(切り絵アニメ)を作れるようになる、COA Tools (Cutout Animation Tools) というアドオンがあるらしくて。

_ndee85/coa_tools

前々からちょっと気になってたので、試しに導入。

インストールの仕方。 :

公式ページにもインストールの仕方が書いてあるけど、一応メモ。

_ndee85/coa_tools の右上のあたりに、「Clone or download」というリンクがあるので、クリックして coa_tools-master.zip をダウンロードして解凍する。

中を覗くと、Blender というフォルダがあるので、その中の coa_tools というフォルダを、フォルダごと zip 圧縮。coa_tools.zip を作る。

blender を起動して、ファイル → ユーザー設定 → アドオン → ファイルからインストール。先ほど作成した coa_tools.zip を読み込む。

「Ndee Tools: Cutout Animation Tools」というアドオン名がリストアップされるので、チェックを入れて有効化する。下のほうにある「ユーザー設定の保存」をクリックして設定を保存。

blender を終了して再起動すると、左のほうに「Cutout A」というタブが増えてる。ここで機能を使うらしい。

サンプルファイルを開いてみる。 :

先ほど GitHub からDLして解凍したファイル群の中に、Sample Files/stip.blend というファイルがあるので開いてみる。狼男が表示された。Alt+A を叩けばアニメーションするので、雰囲気は掴めるかなと。

GIMPで画像リソースファイルを作成。 :

GitHub からDL・解凍したファイル群の中に、Photoshop用スクリプト(Photoshop/BlenderExporter.jsx)や GIMP用スクリプト(GIMP/coatools_exporter.py)が入ってる。導入すれば、Photoshop や GIMP で、CoaTools が使う画像リソースの情報を、.json ファイルとして出力できるようになるらしい。や、まだ試してないので、本当に動くのか分からんけど。

とりあえず GIMP 2.8.20 に導入してみたら、ファイル → Export to CoaTools... というメニューが増えていた。コレを呼び出せば使えるらしい。試してないけど。

GIMP用スクリプトの README.md に、使用時の注意点が書いてあった。各レイヤーを画像としてエクスポートする際、自動でクロップ(レイヤーの自動切り抜き)をしているので、画像部分よりレイヤーサイズが少し大きくなってないと画像部分まで切り落とされてしまうから気をつけろ、とのこと。

例えばこういうレイヤーがあったとして。
gimp_layer_crop_01.png

レイヤーの自動切り抜きをすると、こうなってしまう。
gimp_layer_crop_02.png

じゃあどうすればいいの? …エクスポートする前に、全レイヤーをキャンバスサイズにでもしておけばいいのかな。以下で紹介されてるスクリプトを使えば解決しそう。

_全レイヤーを画像サイズに合わせる&自動切り抜きするスクリプト

#2 [cg_tools] Moho Pro 12体験版を試用

なんとなく Moho という2Dアニメーション制作ソフトが気になって、公式サイトから体験版をDLして試用してみたり。本来なら5万円近い価格のはずだけど、ソースネクストが何故か税抜き6,780円でセールをしてたので、一体どういうソフトなんだろうと思ったわけで。 *1

ちなみに、体験版のDL時にはメールアドレスの登録が必要な模様。 *2

Mohoについて簡単に説明。 :

一応 Moho というソフトについて簡単に説明しておくと、Adobe Flash よりもアニメ制作を明確に意識して作られたソフトらしくて。ボーンを仕込んで動かせたり、レイヤーを3Dで管理できたり、カメラという概念が入っていたりするらしい。

最初の頃は「Moho」というソフト名で売ってたのだけど、ある時期から「Anime Studio」「Anime Creater」てなソフト名に改名して売り始めたそうで。

しかし、去年(2016年)になってから、「Anime Studio」という名前は色々マズイことにようやく気づいたそうで、元々の「Moho」にまた改名して売ることになったのだとか。 *3

触ってみた感想。 :

少し触ってみたけど、絵描きさんにちゃんと歩み寄ったFlash、てな印象を受けた。UIが真っ当、とでも言うか…。

Adobe Flash はアニメ制作ツールとしての側面を忘れて、やれ ActionScript がどうとか RIA がどうとか、そういう方向にばかり進んでしまって自滅しちゃったけど。Moho は「あくまでアニメ制作ツール」という意識を忘れてなかったソフトのようだなと。今まで触ったことなかったけど、アニメを作ることを目的とするなら、Flash より Moho を選ぶべきだったかもなと…。Flash より若干値段が安いあたりもメリットだろうし。

少し前のバージョンはメニュー等が全部英語だったそうで、使うには若干ハードルが高かったらしいのだけど。今回試用した Moho Pro 12 体験版は、メニュー等がちゃんと日本語化されていて、敷居が結構下がってるような気もしたり。ただ、マニュアルやチュートリアルは全て英語だった。ページ数が膨大なので、コレを翻訳するのは厳しいのだろう…。

起動直後にサンプルデモが読み込まれていたけど、動かしてみたら床や背景が3D的に動いてちょっと感心。

各フレームでレイヤーを移動してキーフレームを設定すると、どのように動くのかパスが表示されるあたりもイイ感じ。

ちょっと触った程度なので、何か不具合等が隠れてる可能性はあるけど、総じてかなり好印象。これは便利そう。ゲーム用画像を作成する際に重宝しそうな予感。定価で売られていたらスルーするけど、安く売られているのであれば…買ってしまおうか…。

*1: ただ、セールの期限は今日まで…。
*2: どうしてどの企業もこういう場面で無意味に個人情報を集めようとするかなあ…。流出時のダメージを予想したら集めないほうがいいだろうに…。
*3: _Moho (Anime Studio) - Wikipedia に、アプリ名変更の顛末について記述があった。これは想像だけど、日本のアニメスタジオと混同されたり、前々から「AnimeStudio」という名前のアプリが複数存在していたのでそれらと混同されていることに気づいたのかなと。

この記事へのツッコミ

Re: Moho Pro 12体験版を試用 by 名無しさん    2018/05/14 11:34
参考になりました、ありがとうございます^^

2016/05/31(火) [n年前の日記]

#1 [nitijyou] 某所に行ってきた

ノートPCの動作がおかしいとの相談で、某所まで行ってきた。09:00-17:00まで作業。

HDDにエラーがあったのと、Windows8のアカウントプロファイル?がおかしくなってたせいで、一時プロファイルとやらで起動してしまって色々と怪しくなっていた模様。chkdsk c: /f と、最終的にはシステムの復元で元通りに。ただ、いくつか問題が残ってるようで、それはこれから対処方法を調べる予定。

詳細はGRPでメモ。

2015/05/31() [n年前の日記]

#1 [cg_tools] 夜景のビルのテクスチャの作り方を調べていたり

CC0の夜景写真を加工して横スクロールできる背景画像を作ろうとしていたけれど、カメラのレンズの関係でビル群が湾曲してる写真が大半なので、横スクロールさせると妙なことになって困ったなと。自分でビルっぽく見える画像を作らんとダメかもしれん。てなわけで、夜景のビルのテクスチャを作る方法がないものかググってるところ。

参考になりそうな解説記事がいくつか見つかった。

_「お手軽ド手抜き夜景ビルの描き方講座」/「あなろぐ餅米」のイラスト [pixiv]
_Procedural City, Part 2: Building Textures - Twenty Sided
_Procedural City, Part 11: Demonstration Video - Twenty Sided

特に、下の解説記事はプログラムでビルのテクスチャ相当を自動生成する解説記事なので、かなり参考になりそう。

2014/05/31() [n年前の日記]

#1 [dxruby][cg_tools] DXRubyでswfアニメを再生する

DXRubyでswf(Flashアニメ)を再生してみたり。ビットマップ画像を表示するswfしか再生できないけど、ある程度動いてるので一応アップロード。

スクリーンショット。 :

以下が、 _元swf を、DXRuby上で再生した際のスクリーンショット。(GIFアニメにするために、減色・フレームレート・画像サイズを落としてあります)

swfparse_demo.gif
雰囲気ぐらいは伝わるかな…。

実験の動機。 :

「DXRubyに動画再生機能をつけてほしい」という要望をどこかで目にして、「動画ファイル再生は無理でも、swf再生ならできるんじゃないかな…。60FPSで画像をグリグリ動かせるんだし…」と思ったのがキッカケ。

実際使うかどうかは別にして、自分の思いつきが、本当に実現可能かどうか、なんだか気になったわけで。

処理の概要。 :

  • swfmill で swf を xml に変換。
  • Ruby + Nokogiri を使って xml を解析しつつ、DXRuby で描画。

制限事項。 :

以下は対応済み。
  • ビットマップ画像の移動・拡大縮小・回転・傾斜・半透明表示
  • 輝度変更 (明度変更)、色変更
  • 簡素な階層のスプライト (MovieClip)
  • 静止テキスト (デバイスフォント "_ゴシック", "_明朝", "_等幅" 等を指定していて、入れ子になってない簡素なもの)

以下は未対応。
  • シェイプ(ベクターデータ)
  • サウンド
  • ActionScript
  • 複雑な階層のスプライト(MovieClip)
  • テキストの拡大縮小・回転・傾斜、入れ子構造

ソースやサンプルデータ一式。ライセンス。 :

zip にして置いときます。 swfや画像のファイルサイズが大き過ぎたので、Dropbox に置いてみました。 Dropboxのサービス内容が一部変わったので自宅サーバに置き直しました。(2017/03/19)


_swf_parse_20140531.zip (67MB)

自分が書いたソースに関しては、Public Domain ってことでよろしくです。

ソース。 :

_playxmlmovie.rb
require "nokogiri"
require "dxruby"
require "find"
require 'benchmark'

# swfから変換したxmlを読み込んでDXRubyで再生するクラス
#
# @note swf から xml への変換は、swfmill を利用。
# @note DXRuby、Nokogiri が必要。
# @note License : Public domain
#
# @example
#   require "playxmlmove"
#   m = PlayXmlMovie.new("hoge.xml")
#   m.init
#   Window.loop do
#     break unless m.play
#   end
#
class PlayXmlMovie
  DBG = false
  TMDBG = false
  BMDBG = false

  # 論理ピクセル値
  TWIP = 20.0

  # ----------------------------------------
  # 色変更をするためのShader
  #
  class SpriteShader < Shader

    hlsl = <<EOS
  float4 g_mul;
  float4 g_ofs;
  texture tex0;

  sampler Samp0 = sampler_state
  {
   Texture =<tex0>;
  };

  float4 PS(float2 input : TEXCOORD0) : COLOR0
  {
    float4 output;

    output = tex2D( Samp0, input );
    output.r = (output.r * g_mul[0]) + g_ofs[0];
    output.g = (output.g * g_mul[1]) + g_ofs[1];
    output.b = (output.b * g_mul[2]) + g_ofs[2];
    output.a = (output.a * g_mul[3]) + g_ofs[3];
    return output;
  }

  technique
  {
   pass
   {
    PixelShader = compile ps_2_0 PS();
   }
  }
EOS

    @@core = Shader::Core.new(hlsl, {:g_mul => :float, :g_ofs => :float})

    def initialize
      super(@@core, "TShader")
      self.g_mul = [1.0, 1.0, 1.0, 1.0]
      self.g_ofs = [0.0, 0.0, 0.0, 0.0]
      @col = [1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0]
      class << self
        protected :g_mul, :g_mul=, :g_ofs, :g_ofs=
      end
    end

    def set_color(a)
      v = 256.0
      self.g_mul = [ a[0] / v, a[1] / v, a[2] / v, a[3] / v]
      v = 255.0
      self.g_ofs = [ a[4] / v, a[5] / v, a[6] / v, a[7] / v]
      @col = a
    end
  end

  # ----------------------------------------
  # MATRIX情報格納用クラス
  #
  class TMatrix
    attr_accessor :trans_x, :trans_y
    attr_accessor :scale_x, :scale_y
    attr_accessor :skew_x, :skew_y
    attr_accessor :color

    def initialize(trans_x = 0, trans_y = 0,
                   scale_x = 1, scale_y = 1,
                   skew_x = 0, skew_y = 0,
                   mul_r = 256, mul_g = 256, mul_b = 256, mul_a = 256,
                   ofs_r = 0, ofs_g = 0, ofs_b = 0, ofs_a = 0)
      self.trans_x, self.trans_y = trans_x,trans_y
      self.scale_x, self.scale_y = scale_x, scale_y
      self.skew_x, self.skew_y = skew_x, skew_y
      self.color = [ mul_r, mul_g, mul_b, mul_a, ofs_r, ofs_g, ofs_b, ofs_a]
    end

    #
    # 属性値を更新
    #
    # @param [Hash] v 属性と値のハッシュ
    #
    def set_value(v)
      self.trans_x = v["transX"].to_f if v.has_key?("transX")
      self.trans_y = v["transY"].to_f if v.has_key?("transY")
      self.scale_x = v["scaleX"].to_f if v.has_key?("scaleX")
      self.scale_y = v["scaleY"].to_f if v.has_key?("scaleY")
      self.skew_x = (v.has_key?("skewX"))? v["skewX"].to_f : 0
      self.skew_y = (v.has_key?("skewY"))? v["skewY"].to_f : 0

      [
        "factorRed", "factorGreen", "factorBlue", "factorAlpha",
        "offsetRed", "offsetGreen", "offsetBlue", "offsetAlpha"
      ].each_with_index do |s, i|
        self.color[i] = v[s].to_f if v.has_key?(s)
      end
    end

    #
    # 座標変換
    #
    # @param [Number] x x座標
    # @param [Number] y y座標
    # @return [Array] 座標変換後のx,y座標
    #
    def trans(x, y)
      nx = (x * self.scale_x) + (y * self.skew_y) + self.trans_x
      ny = (x * self.skew_x) + (y * self.scale_y) + self.trans_y
      return nx, ny
    end

    #
    # 色変換パラメータを更新
    #
    # @param [Array] c 色変更情報の配列
    # @return [Array] 変更後の色変更情報配列
    #
    def trans_color(c)
      nc = Array.new(8)
      for i in 0..3 do
        nc[i] = c[i] * self.color[i] / 256.0
        nc[i] = 512 if nc[i] > 512
        nc[i] = -512 if nc[i] < -512
      end
      for i in 4..7 do
        nc[i] = c[i] + self.color[i]
        nc[i] = 255 if nc[i] > 255
        nc[i] = -256 if nc[i] < -256
      end
      return nc
    end

    #
    # 色変換が必要かどうかを返す
    #
    # @param [Array] c 色変換情報配列
    # @return [Boolean] trueなら色変換が必要。falseなら色変換は不要。
    #
    def TMatrix.trans_color?(c)
      [
        [0, 256.0], [1, 256.0], [2, 256.0],
        [4, 0.0], [5, 0.0], [6, 0.0]
      ].each do |n|
        return true if c[n[0]] != n[1]
      end
      return false
    end

    #
    # 色変換情報を格納するハッシュを初期化する
    #
    # @param [Hash] v 色変換情報格納用ハッシュ
    # @return [Hash] 初期化したハッシュを返す
    #
    def TMatrix.init_color(v)
      v.merge!({ "factorRed" => 256, "factorGreen" => 256,
          "factorBlue" => 256, "factorAlpha" => 256,
          "offsetRed" => 0, "offsetGreen" => 0,
          "offsetBlue" => 0, "offsetAlpha" => 0 })
      return v
    end
  end

  # ----------------------------------------
  # 画像を格納するキャラobjクラス
  #
  class CharaObjImage
    attr_accessor :id, :src, :image

    def initialize(id, fname)
      self.id = id
      self.src = fname
      self.image = Image.load(fname)
      # puts "id[#{id}] Load Image ok #{fname}"
    end
  end

  # ----------------------------------------
  # シェイプを格納するクラス
  #
  class CharaObjShape
    attr_accessor :id, :imgs

    def initialize(id, imgs)
      self.id = id
      self.imgs = imgs
    end
  end

  # ----------------------------------------
  # スプライト(MovieClip)を格納するクラス
  #
  class CharaObjSprite
    attr_accessor :id
    attr_accessor :start_node

    def initialize(id, start_node)
      self.id = id
      self.start_node = start_node
    end
  end

  # ----------------------------------------
  # フォント名を格納するクラス
  #
  class CharaObjFont
    attr_accessor :id, :fontname

    def initialize(id, fontname)
      self.id = id
      self.fontname = fontname
      puts "id[#{id}] font [#{fontname}]" if PlayXmlMovie::DBG
    end
  end

  # ----------------------------------------
  # テキストを格納するクラス
  #
  class CharaObjText
    attr_accessor :id, :font, :text, :size, :fontname, :col

    def initialize(id, text, size, fontname, col = [0, 0, 0, 255])
      self.id = id
      self.text = text
      self.size = size
      self.fontname = fontname
      self.font = Font.new(self.size, fontname)
      self.col = col
      if PlayXmlMovie::DBG
        puts "id[#{id}] DefineEditText \"#{text}\",#{size},\"#{fontname}\""
      end
    end
  end

  # ----------------------------------------
  # 描画用クラス
  #
  class MySprite

    attr_accessor :objs
    attr_accessor :cobj
    attr_accessor :pobj
    attr_accessor :z
    attr_accessor :mat
    attr_accessor :sprs
    attr_accessor :rt
    attr_accessor :shader
    attr_accessor :enable_loop

    # コンストラクタ
    #
    # @param [Hash] objs キャラobj情報が入ったハッシュ
    # @param [Number] cid 発生させたいキャラobjのID
    # @param [Object] pobj 親スプライト。nilなら親は居ない
    # @param [Number] depth 描画深度
    # @param [Hash] v MATRIX情報+半透明度を格納したハッシュ
    #
    def initialize(objs, cid, pobj, depth, v)
      self.objs = objs
      self.cobj = self.objs[cid]
      self.pobj = pobj
      self.z = depth
      self.mat = TMatrix.new
      self.sprs = Hash.new
      self.rt = nil
      self.shader = nil
      update(depth, v)
    end

    # 描画に必要な値を設定
    #
    # @param [depth] depth 描画深度
    # @param [Hash] v MATRIX情報と半透明度情報を格納したハッシュ
    #
    def update(depth, v)
      self.z = depth
      self.mat.set_value(v)
    end

    # RenderTargetを解放
    #
    def dispose
      if self.sprs != nil
        self.sprs.keys {|k| self.sprs[k].dispose }
      end

      if self.rt != nil
        self.rt.dispose unless self.rt.disposed?
      end
    end

    # 拡大縮小、半透明、回転描画
    #
    # @param [Object] img Imageクラス
    # @param [Object] im_mat TMatrixクラス
    #
    def draw_image(img, img_mat)
      pobj = self.pobj

      # 矩形の4点を配列にする
      w = img.width
      h = img.height
      p = [0, 0, w, 0, w, h, 0, h]

      c = Marshal.load(Marshal.dump(self.mat.color))

      # Shapeに割り当てられたMATRIXで変形
      4.times do |i|
        p[i * 2], p[i * 2 + 1] = img_mat.trans(p[i * 2], p[i * 2 + 1])
      end

      # 自身のMATRIXで変形
      4.times do |i|
        p[i * 2], p[i * 2 + 1] = self.mat.trans(p[i * 2], p[i * 2 + 1])
      end

      # 親スプライトのMATRIXで変形
      while pobj != nil
        4.times do |i|
          p[i * 2], p[i * 2 + 1] = pobj.mat.trans(p[i * 2], p[i * 2 + 1])
        end
        c = pobj.mat.trans_color(c)
        pobj = pobj.pobj
      end

      # 論理ピクセル値から画面座標に変換
      8.times {|i| p[i] /= PlayXmlMovie::TWIP }

      if TMatrix.trans_color?(c)
        # 色変換が必要
        # 色変更用のShaderはアルファチャンネル付き画像描画がおかしいので、
        # 色変更が必要な時だけ使うことにする。
        self.rt = RenderTarget.new(Window.width, Window.height) if self.rt == nil
        self.shader = SpriteShader.new if self.shader == nil
        self.rt.drawMorph(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
                          img, :dividex => 3, :dividey => 3)
        self.rt.update
        self.shader.set_color(c)
        Window.drawEx(0, 0, self.rt, :shader => self.shader)
      else
        # 色変換は不要
        a = (255 * c[3] / 256.0).to_i
        if a != 255
          # 半透明描画
          Window.drawMorph(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
                           img, :dividex => 3, :dividey => 3,
                           :alpha => a, :blend => :alpha)
        else
          # 不透明描画
          Window.drawMorph(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
                           img, :dividex => 3, :dividey => 3)
        end
      end
    end

    # フォントを描画
    #
    # @param [String] text 描画文字列
    # @param [Object] font Fontオブジェクト
    # @param [Array] c RGBA配列
    #
    def draw_font(text, font, c)
      x = self.mat.trans_x / PlayXmlMovie::TWIP
      y = self.mat.trans_y / PlayXmlMovie::TWIP
      Window.drawFontEx(x, y, text, font,
                        :color => [c[0], c[1], c[2]],
                        :alpha => c[3], :blend => :alpha, :aa => true)
    end

    # 再生描画処理
    #
    # @param [Hash] objs キャラobj情報が入ったハッシュ
    # @return [Boolean] trueなら再生中, falseなら再生終了
    #
    def play
      return true
    end
  end

  # ----------------------------------------
  # 画像描画obj
  #
  class ImageObj < MySprite

    # コンストラクタ
    #
    # @param [Hash] objs キャラobj情報が入ったハッシュ
    # @param [Number] cid 発生させたいキャラobjのID
    # @param [Object] pobj 親スプライト。nilなら親は居ない
    # @param [Number] depth 描画深度
    # @param [Hash] v MATRIX情報+半透明度を格納したハッシュ
    #
    def initialize(objs, cid, pobj, depth, v)
      super(objs, cid, pobj, depth, v)
    end

    # 再生描画処理
    #
    # @return [Boolean] trueなら再生中, falseなら再生終了
    #
    def play
      draw_image(self.cobj.image, TMatrix.new)
      return true
    end
  end

  # ----------------------------------------
  # シェイプ描画obj
  #
  class ShapeObj < MySprite

    # コンストラクタ
    #
    # @param [Hash] objs キャラobj情報が入ったハッシュ
    # @param [Number] cid 発生させたいキャラobjのID
    # @param [Object] pobj 親スプライト。nilなら親は居ない
    # @param [Number] depth 描画深度
    # @param [Hash] v MATRIX情報+半透明度を格納したハッシュ
    #
    def initialize(objs, cid, pobj, depth, v)
      super(objs, cid, pobj, depth, v)
    end

    # 再生描画処理
    #
    # @return [Boolean] trueなら再生中, falseなら再生終了
    #
    def play
      self.cobj.imgs.each do |v|
        draw_image(v[0].image, v[1])
      end
      return true
    end
  end

  # ----------------------------------------
  # スプライト描画obj
  #
  class SpriteObj < MySprite
    attr_accessor :node
    attr_accessor :now_frame
    attr_accessor :enable_loop

    # コンストラクタ
    #
    # @param [Hash] objs キャラobj情報が入ったハッシュ
    # @param [Number] cid 発生させたいキャラobjのID
    # @param [Object] cobj 発生させたいキャラobj
    # @param [Object] pobj 親スプライト。nilなら親は居ない
    # @param [Number] depth 描画深度
    # @param [Hash] v MATRIX情報+半透明度を格納したハッシュ
    # @param [Boolean] looped trueならループ再生
    #
    def initialize(objs, cid, pobj, depth, v, looped = true)
      super(objs, cid, pobj, depth, v)
      self.node = cobj.start_node
      self.now_frame = 0
      self.enable_loop = looped
    end

    # 再生描画処理
    #
    # @return [Boolean] trueなら再生中, falseなら再生終了
    #
    def play
      pobj = self
      endfg = false

      until endfg

        case self.node.name
        when "PlaceObject2"
          # シェイプやスプライトを配置、もしくは移動
          nn = self.node
          rn = nn["replace"].to_i
          depth = nn["depth"].to_i
          id = nn["objectID"]
          id = id.to_i if id != nil

          # 属性を取り出す
          v = {}
          nn.children.each do |n|
            n.children.each do |m|
              if m.name == "Transform"
                # 変形情報
                m.keys.each do |k|
                  a = m.attribute(k)
                  v[a.name] = a.value.to_f
                end
              elsif m.name == "ColorTransform2"
                # 色変換情報
                v = TMatrix.init_color(v)
                m.keys.each do |k|
                  a = m.attribute(k)
                  v[a.name] = a.value.to_f
                end
              end
            end
          end

          if id != nil
            abort "Error: Not found ChrObj[#{id}]" unless self.objs.has_key?(id)

            case self.objs[id]
            when PlayXmlMovie::CharaObjImage
              self.sprs[depth] = ImageObj.new(self.objs, id, pobj, depth, v)
            when PlayXmlMovie::CharaObjShape
              self.sprs[depth] = ShapeObj.new(self.objs, id, pobj, depth, v)
            when PlayXmlMovie::CharaObjSprite
              self.sprs[depth] = SpriteObj.new(self.objs, id, pobj, depth, v)
            when PlayXmlMovie::CharaObjText
              self.sprs[depth] = TextObj.new(self.objs, id, pobj, depth, v)
            end
          elsif rn == 1
            self.sprs[depth].update(depth, v) if self.sprs.has_key?(depth)
          end

          if TMDBG
            s = "PLACE, replace=#{rn}, depth=#{depth}, id=#{id}, {"
            v.each_key {|k| s += "#{k} => #{v[k]}, "}
            s += "}"
            puts s
          end

        when "RemoveObject2"
          # シェイプやスプライトを削除
          depth = node["depth"].to_i
          if self.sprs.has_key?(depth)
            self.sprs[depth].dispose
            self.sprs.delete(depth)
          end
          puts "REMOVE, depth=#{depth}" if TMDBG

        when "ShowFrame"
          # 現在フレームを描画
          self.now_frame += 1
          puts "ShowFrame #{now_frame}" if TMDBG
          endfg = true

        when "End"
          # タグが無くなった
          endfg = true
          puts "End" if TMDBG
          break

        else
          # puts node_name
        end

        # 次のノードを読む
        self.node = self.node.next
      end

      # ウインドウに描画
      key_list = self.sprs.keys.sort # depthでソート
      key_list.each {|k| self.sprs[k].play }

      return true if self.node.name != "End"

      # 再生終了
      sprs = Hash.new
      if self.enable_loop
        self.node = self.cobj.start_node
        self.now_frame = 0
      end
      return false
    end
  end

  # ----------------------------------------
  # テキスト描画obj
  #
  class TextObj < MySprite

    # コンストラクタ
    #
    # @param [Hash] objs キャラobj情報が入ったハッシュ
    # @param [Number] cid 発生させたいキャラobjのID
    # @param [Object] pobj 親スプライト。nilなら親は居ない
    # @param [Number] depth 描画深度
    # @param [Hash] v MATRIX情報+半透明度を格納したハッシュ
    #
    def initialize(objs, cid, pobj, depth, v)
      super(objs, cid, pobj, depth, v)
    end

    # 再生描画処理
    #
    # @return [Boolean] trueなら再生中, falseなら再生終了
    #
    def play
      o = self.cobj
      draw_font(o.text, o.font, o.col)
      return true
    end
  end

  # ----------------------------------------
  # コンストラクタ
  #
  # @param [String] infile xmlファイルのパス
  #
  def initialize(infile)
    @infile = infile
    abort "Error : Not found #{infile}" unless File.exist?(infile)

    if BMDBG
      Benchmark.bm(15) do |x|
        x.report("xml parse:") {
          @doc = Nokogiri::XML(File.open(infile)) {|config| config.noblanks}
        }

        x.report("get fps") {
          @framerate, @frames = get_framerate(@doc)
          @wdw_w, @wdw_h = get_widnow_size(@doc)
          @bgcol = get_bgcolor(@doc)
        }

        @objs = Hash.new

        x.report("load image:") { load_image(@doc, infile) }
        x.report("load font:") { load_font(@doc) }
        x.report("load shape:") { load_shape(@doc) }

        x.report("load sprite:") {
          load_sprite(@doc)
          n = @doc.at("//swf/Header/tags/PlaceObject2")
          @objs[0] = CharaObjSprite.new(0, n)
        }

      end
    else
      # xmlを解析
      @doc = Nokogiri::XML(File.open(infile)) {|config| config.noblanks}
      @framerate, @frames = get_framerate(@doc)
      @wdw_w, @wdw_h = get_widnow_size(@doc)
      @bgcol = get_bgcolor(@doc)

      # 画像、シェイプ、スプライトを登録
      @objs = Hash.new
      load_image(@doc, infile)
      load_font(@doc)
      load_shape(@doc)
      load_sprite(@doc)

      # rootスプライトを登録
      puts "\nid[0] DefineSprite" if DBG
      n = @doc.at("//swf/Header/tags/PlaceObject2")
      @objs[0] = CharaObjSprite.new(0, n)
    end

  end

  #
  # フレームレート、フレーム数を取得
  #
  # @param [Object] doc xmlノード情報
  # @return [Array] フレームレート, フレーム数を配列で返す
  #
  def get_framerate(doc)
    n = doc.at("//Header")
    fpsv = n["framerate"].to_i
    frms = n["frames"].to_i
    puts "framerate=#{fpsv} , frames=#{frms}" if DBG
    return fpsv, frms
  end

  #
  # 画面サイズを取得
  #
  # @param [Object] doc xmlノード情報
  # @return [Array] 画面横幅, 画面縦幅を配列で返す
  #
  def get_widnow_size(doc)
    n = doc.at("//Header/size/Rectangle")
    # x = n["left"].to_i / TWIP
    # y = n["top"].to_i / TWIP
    w = n["right"].to_i / TWIP
    h = n["bottom"].to_i / TWIP
    puts "Window size : #{w}, #{h}" if DBG
    return w, h
  end

  #
  # 背景色を取得
  #
  # @param [Object] doc xmlノード情報
  # @return [Array] 背景色red, green, blueを配列で返す
  #
  def get_bgcolor(doc)
    n = doc.at("//SetBackgroundColor/color/Color")
    c = []
    ["red", "green", "blue"].each {|k| c.push(n[k].to_i)}
    return c
  end

  #
  # 画像をロード
  #
  # @param [Object] doc xmlノード情報
  # @param [String] infile xmlファイルパス
  #
  def load_image(doc, infile)
    imglist = get_img_file_list(infile) # 画像ファイルパスの一覧を取得

    # 検索するタグ名を列挙
    taglst = "//DefineBitsJPEG2|//DefineBitsLossless2|//DefineBitsLossless"

    doc.xpath(taglst).each do |n|
      id = n["objectID"].to_i
      n.content = ""

      unless imglist.has_key?(id)
        # IDと一致する画像ファイルパスが存在しない
        puts "Not found image file : id = #{id}"
        next
      end

      # IDと一致する画像ファイルパスが存在する
      fn = imglist[id]
      n["src"] = fn
      @objs[id] = CharaObjImage.new(id, fn)
      puts "id[#{id}] Load Image : #{fn}" if DBG
    end
  end

  #
  # xmlファイルパスを元にして、全画像ファイルのパス一覧を取得
  #
  # @param [String] xmlファイルパス
  # @return [Hash] 画像ファイルパスを格納したハッシュ
  #
  def get_img_file_list(infile)
    bsn = File.basename(infile, ".xml") # ファイルの拡張子を取り除いた文字列を取得
    dir = File::dirname(infile) # ファイルのフォルダパスを取得
    imglist = {}

    # サブフォルダ以下も探索して、拡張子が画像ファイル形式なら記録していく
    Find.find(dir) do |f|
      next unless FileTest.file?(f)
      imglist[$1.to_i] = f if /#{bsn}\[(\d+)\]\.(png|jpg|bmp|gif)/ =~ f
    end

    return imglist
  end

  #
  # フォント情報やテキスト情報を読み込み
  #
  # @param [Object] doc xmlノード情報
  #
  def load_font(doc)
    lst = Hash.new
    lst.merge!(
      {
        "_ゴシック" => "MS UI Gothic",
        "_明朝" => "MS P明朝",
        "_等幅" => "MS ゴシック",
        "_sans" => "Arial",
        "_serif" => "Times New Roman",
        "_typewriter" => "Courier"
      })

    # 使用している全フォント名を取得
    doc.xpath("//DefineFont2|//DefineFont3").each do |n|
      id = n["objectID"].to_i
      fnt = n["name"].encode("Windows-31J") # xmlはutf-8なのでsjisに変換
      if lst.has_key?(fnt)
        fnt = lst[fnt]
        @objs[id] = CharaObjFont.new(id, fnt)
      else
        @objs[id] = CharaObjFont.new(id, fnt)
      end
    end

    # 使用している静止テキスト情報を取得
    doc.xpath("//DefineEditText").each do |n|
      id = n["objectID"].to_i
      fid = n["fontRef"].to_i # フォント種類ID
      abort "Error: Not found font [#{fid}]" unless @objs.has_key?(fid)

      size = n["fontHeight"].to_f / PlayXmlMovie::TWIP

      # Flash CS5で作成したswfは、initialText に html が入っている。
      # htmlタグを除去して描画文字列を取得する
      nm = Nokogiri::HTML(n["initialText"])
      text = nm.content.encode("Windows-31J")

      col = [0, 0, 0, 255]
      c = n.at(".//color/Color")
      if c != nil
        col[0] = c["red"].to_i
        col[1] = c["green"].to_i
        col[2] = c["blue"].to_i
        col[3] = c["alpha"].to_i
      end
      fontname = @objs[fid].fontname
      @objs[id] = CharaObjText.new(id, text, size, fontname, col)
    end
  end

  #
  # 画像を内包するShapeを生成
  #
  # @param [Object] doc xmlノード情報
  #
  def load_shape(doc)
    doc.xpath("//DefineShape|//DefineShape2").each do |n|
      id = n["objectID"].to_i
      sn = n.xpath(".//bounds/Rectangle")[0]
      # x = sn["left"].to_i / TWIP
      # y = sn["top"].to_i / TWIP
      w = sn["right"].to_i / TWIP
      h = sn["bottom"].to_i / TWIP

      imgs = []
      bn = n.xpath(".//styles/StyleList/fillStyles")
      bn.xpath(".//ClippedBitmap|.//ClippedBitmap2").each do |m|
        img_id = m["objectID"].to_i
        if img_id == 65535
          # objectID が 65535 の時がある。正体不明
          puts "id[#{id}] Unknown Image [#{img_id}]" if DBG
          next
        end

        unless @objs.has_key?(img_id)
          # 画像が存在しない
          abort "Error : id[#{id}] Not found Image [#{img_id}] #{w} x #{h}"
        end

        # 画像が存在するので、シェイプに割り当てる
        # MATRXI情報も反映させる
        puts "id[#{id}] Shape = bitmap[#{img_id}]" if DBG

        dic = {}
        mn = m.at(".//matrix/Transform")
        mn.keys.each do |k|
          atr = mn.attribute(k)
          dic[atr.name] = atr.value.to_f
        end
        v = TMatrix.new
        v.set_value(dic)
        imgs.push([@objs[img_id], v])
      end
      @objs[id] = CharaObjShape.new(id, imgs)
    end
  end

  #
  # スプライトを登録
  #
  def load_sprite(doc)
    doc.xpath("//DefineSprite").each do |n|
      id = n["objectID"].to_i
      frames = n["frames"].to_i
      puts "\nid[#{id}] DefineSprite, frames=#{frames}" if DBG
      node = n.at(".//PlaceObject2")
      @objs[id] = CharaObjSprite.new(id, node)
    end
  end

  # 再生開始のための初期化処理
  #
  # @note fpsや背景色が変更されるので、再生が終わったら本来のfps・背景色に戻すこと
  #
  # @param [Boolean] init_size ウインドウサイズをxmlに従って変更するかどうか
  # @param [Boolean] init_fps フレームレートをxmlに従って変更するかどうか
  # @param [Boolean] init_bgcol 背景色をxmlに従って変更するかどうか
  #
  def init(init_size = false, init_fps = true, init_bgcol = true)
    @now_frame = 0
    @root_sprite = SpriteObj.new(@objs, 0, nil, 0, {})

    Window.resize(@wdw_w, @wdw_h) if init_size
    Window.fps = @framerate if init_fps
    Window.bgcolor = [@bgcol[0], @bgcol[1], @bgcol[2]] if init_bgcol
  end

  # 再生描画処理
  #
  # @note メインループから毎フレーム呼ぶこと
  #
  # @return [Boolean] trueなら再生中, falseなら再生終了
  #
  def play
    return @root_sprite.play
  end

  #
  # 多少整理したxmlを標準出力にダンプする
  #
  def dump
    puts @doc.to_xml
  end

end

if $0 == __FILE__
  # ----------------------------------------
  # 使い方の例

  m = PlayXmlMovie.new("swfdata/movie0.xml")
  # m = PlayXmlMovie.new("swfdata/movie1.xml")
  # m = PlayXmlMovie.new("swfdata/movie2.xml")
  # m = PlayXmlMovie.new("swfdata/movie3.xml")
  # m = PlayXmlMovie.new("swfdata/movie4.xml")

  # 再生開始のための初期化
  # fpsや背景色が変更されるので、
  # 再生が終わったら本来のfps・背景色に戻すこと
  m.init

  # メインループ
  Window.loop do
    break if Input.keyPush?(K_ESCAPE) # ESCキーで終了

    # 1フレーム分描画
    unless m.play
      m.init # 再生が終了したら、再度頭から再生
    end

  end
end

使い方の例。
require_relative "playxmlmovie"

m = PlayXmlMovie.new("hoge.xml")
m.init

Window.loop do
    break unless m.play
end

その他詳細は、 _readme.html を読んでください。

備考。 :

サンプルswf内の静止画像作成については、 _マウスコンピューター G-Tuneシリーズ公式キャラクター G-Tuneちゃん (Tuneちゃん?) を使わせてもらいました。…と書いておけばいいのかな? リンクも貼ってあるから、これで利用条件は満たしてるはず。たぶん。

ここまで書いといてアレだけど。 :

自分でコレを使うかというと、たぶん使わないような気がする…。たしかにグリグリ動いたけど…。

ただ、コレを書いてみたことで、巷で見かける swf → HTML5 + JavaScript 変換ツールが、大体どんな感じのことをしているのか、そのあたりぼんやり分かってきたように思います。結構勉強になったというか。

Ruby でSWFバイナリを直接扱える、 _SwfRuby なるライブラリも使えたら、swfmill で一旦xmlに変換しなくてもいいのかもしれんですけど。
  • SwfRuby は RMagick が必要。
  • しかし、Windows で RMagick を導入するのは面倒。ImageMagick の特定バージョンを要求される。
という問題があるので…。そう考えると、xml に変換しといてソレを渡す、こういうやり方もアリかなと。xmlをエディタで開けば、どこで何の指定がされてるか調べられるというメリットもありますし。

2017/03/19追記。 :

DropboxのPublicフォルダが死んだのでファイルを置き直し。

#2 [flash][neta] Flashについて(余計な)一言言っとくか

「今頃Flashかよwww」と言い出す人が居そうな気もするので、一応、今の自分の考えをメモ。

Flashにも色々あって。 :

Flashにも色々あって。
  • 最終的な再生ファイル形式としての Flash (swf)
  • 中間ファイルとしての Flash (swf)
  • アニメ制作アプリとしての Flash
  • デスクトップアプリを作成できる基幹技術としての Flash (Adobe AIR)
  • その他色々。
複数の定義があり得るので、分けて考えないといかんよなと。

Webブラウザ上で再生するための Flash (swf) は、たしかに死滅寸前だと自分も思っているのですが。
  • 皆が持ってるスマホのブラウザ上で再生できないってのは、やっぱり痛い。
  • アニメを再生したいなら、そもそも動画ファイルを再生しちゃえばいい。
だから、そういう定義の Flash なら、たしかに「今頃」だよなと。

しかし、「簡易アニメ制作ソフト」としての Flash や、別の最終フォーマットに変換するための「中間ファイル」としての Flash (swf)は、今でも使えるわけで。

例えばの話。psdファイルはブラウザで開けないけど。だからと言って「Photoshopは死んだ」と口走ってたら馬鹿丸出し。同様に、制作環境としての Flash は、今後も(しばらくは)選択肢としてフツーにアリで。Webブラウザで開けないからソレは死んだ、てな結論は、あまりに視野が狭過ぎる。

それに、昔は Adobe製の有償製品しか無かったですけど、今はフリーで使えるFlash制作ソフトも存在してますから、お金の無い学生さんにも優しいし。これがもし、HTML5 + JavaScript用の何かを吐き出してくれる簡易アニメ制作ソフトだったら、Flash と比べたら、まだちょっと弱いよなと。

とは言え、ならばFlashがアニメ制作ツールとして至高の存在かと問われたら、自分は首を捻ってしまうのですけど。どうしてあんなに使いづらいのですかね…。たぶん、絵描きさんの視点で作ってないよな…。古い版しか触ったことないけど、最新版は改良されてるのだろうか…。

何が作れるか云々。 :

「Flashでろくなアニメなんか作れるわけねえだろwww」とdisる人も居るかもしれないなと。そういう人は、URA氏がディレクターをした「猫物語」OPや「ニセコイ」の2番目のOPを見るべき。 *1 有名アニメーターのりょーちも氏の仕事ぶりも確認すべき。

「Flashでろくなアニメなんか」発言は、「Photoshopを買えばボクもイラストレーターになれる」発言と大差ないよなと。どのツールを使うかで作品の中身が劇的に変わるようなら誰も苦労しねえんだよクソが! と思うわけですよ。ツールの選択で変わってくるのは、作業効率ぐらいなもんでして。

これがもし、「Flashでアニメ作るの結構シンドイよ」という発言だったら、自分もちょっと同意するかも。なんだかサクサクと作業できないというか、トライ&エラーが面倒臭いUI仕様があちこちに点在していて…。

JavaScriptも死にかけてましたな。 :

JavaScript の歴史を思い返せば、「今頃Flashかよ」発言って危ないよなと。一時期、JavaScript って死滅寸前でしたよ。まさかこういう使い方もできたとは。当時 JavaScript をdisってた人達って、一体何なんだろうと…。自分もその中に含まれてますけど。

なので、Flash も、「え? そんな場所で、そんな使い方が?」てな展開があるかもしれないなと。そもそも、最初はアニメ制作ソフトだったはずが、どうして ActionScript が云々、てな話に…。既に現状ですら、俺の知ってる Flash と違う…。

それにしても、HTML5 + JavaScript で書いた何かしらが、ブラウザの互換性の問題で大変なことになってる話を見かけるたびに、「Flash が使えたら、こんなことにはならなかったのに…」と思えてしまって。Adobeだけが互換性問題で苦労して、こっちは楽ができたのになあ。ジョブズを筆頭に、無意味に Flash をdisってた人達のせいで、より多くのプログラマー・デザイナーが地獄を見る展開に。

*1: 今もFlash使ってるか分からんし、もしかするとAEなのかなと思わないでもないけど、動かし方やシルエットで見せていくソレはどう見てもFlashアニメ文化だよなと。

この記事へのツッコミ

はじめまして by hoshi    2014/06/04 13:54
hoshi(またはhoshi-sano)と申します。
「DXRubyで動画が再生できたら云々」などとこっそり発言していた一人です。
いつも日記の更新を楽しみにさせていただいています。

Flashは一時期結構使っていただけに、衰退しつつあるのは私も残念に思います。
はやりの「艦これ」がFlashで動作したりとまだ完全に死に向かっているわけではなさそうですが、
だからといって第一線に戻れそうな空気でもないですよね。

DXRubyでのswf再生の一連の日記、まだ細部は読めていませんがすごくワクワクしました。
特に何か意見があるというわけでないのですが、この一連の日記ですごい喜んだ奴がいるということをお伝えしたかった次第でした。

#3 [cg_tools] Google Web Designer、Adobe Edge Animate を試用

前々からどういうツールか気になってたので試用してみようかなと。ちなみに環境は、Windows7 x64。

結論から先に書く。 :

個人的に、この手のツールは以下の2点が気になっていて。
  • 連番画像をレンダリングできるか。これができれば、動画編集ソフト等に渡す素材や、スプライトシートが作れる。
  • 出力したファイルを、Webブラウザ以外でも再生することができそうか。
要するに、他の何かと連携できるかどうかが気になるわけで。

連番画像を出力する機能はどちらも持ってなかった。しかしこれは、ツールの性質からして仕方ないのかも。

これらのツールは、Flashと違って、タイムラインには時間しか表示されてなくて。つまり、「フレーム」「コマ」という概念が無い。フレームが無いのだから、フレームを連番画像として出力できるはずもなく。 *1 なので、現状では本質的に、既存のアニメ制作ツールと異なる存在かもしれないなと。「アニメ制作ツール」として紹介されることが多いけど、コレは、アニメ映像ではないアニメを作るツールではないかと。

また、出力ファイルは html だったり js だったりするのだけど…。出力ファイルは難読化がされていたりして、さっぱり読めないのだけど。作業ファイル自体は難読化がされてないので、まだなんとか頑張れば解析できそうな気もしたり。

Google Web Designerを試用した際のメモ。 :

_Google Web Designer から、googlewebdesigner_win.exe をDL。897KBのファイルなので、たぶんダウンローダーなのだと思う。実行したら、おそらくは本体のダウンロードとインストールが行われた。

インストール直後の現在のバージョンは、1.0.6.0428。

アニメ作成作業は簡単。
  • 下のサムネイル横の「+」ボタンを押していけばキーフレームを増やせる。
  • そのキーフレームでオブジェクトの位置変更等をすれば、その間の位置移動等を補間してくれる。
  • サムネイルとサムネイルの間のボタンを押せば、何秒間、どんな動きをさせるのかグラフ表示してくれる。
  • 秒数の変更もできるし、グラフ部分をマウスでクリックすれば動きの種類も順々に変わっていく。
最初はクイックモード?とやらで作業してたけど、下の方に小さく「詳細」と書かれたボタンをクリックしたら、クイックモードが解除されてタイムライン表示がされるようになった。各オブジェクトがレイヤーのような状態でタイムラインに表示されてるので、このほうが分かりやすいような気もする。
  • タイムライン上で右クリックすれば、キーフレームの挿入、動きの種類の変更などができる。
  • タイムライン上でキーフレームのマークをドラッグすれば、キーフレーム位置を変更できる。

ファイル → 公開を選べば、htmlファイルとして保存できる。何を出力してくれるのか、そこがそもそも分かってなかったのだけど。どうやらhtmlファイルを1つ出力するツールだった模様。

出力されたhtmlを眺めてゲロを吐きそうに。チンプンカンプン。

作業用に保存される html ファイルをぼんやり眺めていたら、なんだかちょっと分かってきた。
  • @-webkit-keyframes なる記述がキーフレームの情報だと予想。
  • キーフレームに、12.7451% とか 49.0196% とか書いてあるのは、全体時間に対してどこにキーフレームがあるのかを割合で示しているのではないか。
  • html本体部分の canvas てのがシェイプに相当するらしい。シェイプの形状はcssで定義。
よくよく見てみると、「公開」で出力されたhtmlファイルも、css部分に、アニメをするために必要な情報が列挙されているように思えてきた。css内がデータみたいなものなのかな…。

解析してどうにかしようという気にはならないけれど、やろうと思えばどうにかできるのかもしれない。バイナリファイルではなくテキストファイルで保存されてると、こういう時にありがたい。今時、バイナリファイルで出力することは極力避けるべきなのだと再認識しました。

連番画像の出力機能は無し。

現状、広告制作ツールのベータ版として公開されているのだし、CGツールとして捉えるほうが間違ってる気もしてきたり。見た目それっぽいけど、ヨチヨチ歩きみたいなものだよな…。どこかのまとめサイトで、「GoogleがAdobeとWebデザイナー殺しに来た」なんて煽りタイトル記事を見かけたけど。仮にそうだとしても、幼児が水鉄砲でピュピュッと撃ってる段階のような…。今後の成長に期待、みたいな。

Adobe Edge Animate を試用した際のメモ。 :

最新版の Adobe Edge Animate CC はおそらく有償ソフトらしいのだけど。Adobe Edge Animate 1.5 までは、Adobe ID を持ってる人なら無料で使えるらしいので、試しにDLしてインストールしてみたり。ちなみに、そのうちDLできなくなるという話も見かけました。

インストール時に、「PCの再起動が要求されてる」云々のエラーメッセージが表示されて。OS再起動しないとダメなのかなと再起動してから試したけれど、やはり同じメッセージが。とりあえず「無視」ボタンを押したら、インストールが先に進んだ。何だったんだろう…。まあ、以前 Flash CS5 をインストールした時も、謎のエラーが出てなかなか解決できなかったし。 *2 Adobe製だから、どうせこんなもんだろう…。

Google Web Designer に比べると、さすがに随分作り込んである印象。操作方法は Flash のノリに近いので、戸惑う部分はほとんど無かった。

こちらも、連番画像の出力機能は無し。

パブリッシュされたファイルを確認したら、1つの html と、複数のjsになっていた。jsファイルは難読化されていて何が何だか。

作業用ファイルは難読化がされてなかったので、なんとか理解できそう。hoge_edge.js を開くと、timelines なる記述が見えたので、たぶんこのファイルにアニメさせるための情報が入っているのではないかなと。もしかして、これって json だったりするのかな?

今思い出したけど、もしかして Adobe は、この手のファイルフォーマットの解析作業を禁止してたりしないかな…。禁止してるのだとしたら、そういう面から、他のソフトとの連携は無理ってことになりそうな。

*1: 別途フレームレートを指定して書き出すことは可能だろうけど。それは、数式によってオブジェクトが連続で動いてる光景を、フレームレートに従ってサンプリングすることになるので、アニメ映像じゃなくて実写映像に近いはず。
*2: Flash CS5のインストール時にエラーが出る問題は、Flash Player の古いセットアッププログラムがテンポラリフォルダに残ってると発生、したようなおぼろげな記憶が。

#4 [anime] ライダー鎧武を視聴

今日も何話か消化。

ドリアンライダーの人が生身で変なポーズを取りながらジャンプして出現したり、弟子の人が気をつけポーズで放物線を描いていく図の突飛さに笑いました。どうしてこんな光景を思いついたのか…。素晴らしい。子供さんの反応が気になるところ。

森について解説する回で、それぞれ別の場所に居るはずのキャラクター達が、謎についての説明を繋げていくあたりに感心。こういう見せ方は、自分、なんだか好きでして。たしかコードギアスでもやっていて当時感心した記憶が。こういうことができるあたりが ―― 場所も時間も跳躍して一つに繋げることができてしまうのが映像作品の持つ面白さ、のような気がしたり。…まあ、映像作品において、あらゆるシーンは、異なるカットの繋がりで構成されているわけで。それを脚本レベルでもやってみた事例の一つ、かもしれないのですが。

2013/05/31(金) [n年前の日記]

#1 [cg_tools] XnViewを2.03にアップデートした

full版をインストールすれば XnView Shell Extension (XnShell) も入ってくれるかと思ったけど、そうではなかったようで。Windows7 x64 上では、XnView をインストールする際に XnShell のチェックは外しておいて、後から XnShell x64版を別途インストールする必要があったらしい。とメモ。

#2 [cg_tools] blenderでIBLレンダリングの実験中

blender 2.67.1 で、IBLレンダリングを試しているのだけど。オブジェクトの影だけを落とす床、のマテリアル設定がどうも上手く行かない。

床のマテリアルを作って、Material設定 → Shadow → Shadows Only にチェックを入れて、その下の選択で Shadow only (「影のみ」)を選べば、影だけが描画される床になるはず、らしい、のだけど…しかし、影がついてるように見えなくて。

Shadow and Distance を選べば黒々とした影が、Shadow and Shading を選べばかすかな影がついてくれるのだけど。Shadow Only では、全然つかないのはなんでだろ。
Shadows Only 無効
Shadows Only 有効 - Shadow and Distance
Shadows Only 有効 - Shadow Only
Shadows Only 有効 - Shadow and Shading
ひょっとして、点光源その他を置いとかないとダメなのかな。環境照明だけでは、影が落ちてくれない…? 考えてみれば、Shadeでも、全体光源を設定しないと影が落ちないもんな…。

光源を置くと言っても、HDRIから向きを算出してやらないとおかしなことになるのでは。まあ、HDRI中の影を参考にして、テキトーな向きにしてしまってもいいのかもしれないけど。

Shade なら、自動算出できるスクリプトがあったりするのですが。 _Shade 13 公式サイト | 第9回 HDR画像を使ったレンダリングの初歩(2) | イーフロンティア 中の、「背景から無限遠光源を設定.py」を時々使わせてもらってます。ありがたや。

それはともかく。2.67.1 はバグ持ちで、それ故に影が落ちないのかな? と思って、2.66.1 や 2.64 で試してみたけど結果は変わらず。2.64 に至っては背景にHDRIが表示すらされず。2.64 は、このあたり、もっとバグ持ちだったのかな…。

ちなみに、以下のような設定で、IBLレンダリングが使えるらしい…。
Sceneパネルでの設定

Textureパネルでの設定
World設定で、環境照明(Environment Lighting)にチェックを入れて、Sky Texture を選んで。Texture - World設定で、HDRI等を指定して、Horizon にチェックを入れる、のかな。たぶん。

Cyclesレンダラーでも同じことをしたいと思ったのだけど。解説記事を探してみたら、どうもノードとやらを大活用しないといかんようで。まるで蜘蛛の巣のように張り巡らされたソレを眺めて、なんだか諦めモードに。ノードは、まだ全然触ったことないからさっぱり分からない…。

参考記事。 :

#3 [zatta] コシアブラだけ異常にベクレル値が高いのはどうしてなんだろう

恥ずかしながら今頃知ったのですけど。全国各地で、コシアブラの放射線測定結果が、 _ドコーンと突出して基準値超えになってる そうで。まあ、タラノメだの、ワラビだの、タケノコだの、山菜類はかなり超えちゃってるようですけど。

「基準値ってあてになるの?」「甘い見通しの数値じゃねえの?」と元々言われちゃってた「基準値」なわけですけど。それを軽々と飛び越えていくんだから、かなり酷い状態、なのだろうなと。「アムロがガンダムで空中戦をしてる!」状態かも。どこまでジャンプするんだ、コシアブラ。

浜通りや中通りと違って結構大丈夫だろう、と思ってた会津地方でも、フツーに基準値超えちゃってるし。八重の桜どころじゃねえよコレ…。まあ、宮城県、岩手県、山形県、栃木県、その他でも超えちゃって出荷制限がされてるようですけど。

こないだ、コシアブラ、食べちゃいましたよ…。「山形県産だから大丈夫だ」って言われて、いくらなんでもあっちは大丈夫だろう、と思ってしまったけど、実は全然大丈夫じゃなかったのだなと。まあ、自分はおじさんだからアレですけど。うっかり子供に食べさせてる御家庭もあるのだろうなあ…と思ったけど子供が山菜をガツガツ食べてる図ってあまりイメージできないな。基本的に苦いし。

他の農作物が、10〜20ベクレルとかなのに、コシアブラは、最大12,000ベクレルですからねえ…。スカウター使って戦闘力を見たベジータが絶句するレベルじゃないですかね? DB読んだことないから知らないけど。進撃の巨人で言えば、コシアブラは、赤くて一番でっかい巨人なのかなあ。鎧の巨人は、タラノメ?

コシアブラはカレーのルーみたいに元々そういうの高いんじゃないの? とも思ったのですが。測定結果の表をじっくり眺めたら、低い測定結果もあるようだし、カリウムじゃなくてちゃんとセシウムを測ってるみたいだし。てことは、コレはどう考えても汚染、なのでしょうな。

にしても、どうしてコシアブラだけ、そんなに高いんだろう…。山菜は数値が高くなるぞー、チェルノブイリではそうだったからなー、とは予想されてたけど、ここまで違うとは。

もしかして日本人は、放射性物質の測定に利用できる、優秀な植物を発見できたのではあるまいか? これを利用すれば事故時のデータ収集にも役立つのでは? …などと夢想したのですけど、どこでも栽培できる植物でもないのでしょうから、過敏に反応する植物だと仮に判明しても利用は難しいのでしょうな。でもまあ、それでも、何かしらの研究材料にはなりそうな気もしますけど。どうなのかな。

事故から2年経って、セシウム134君の半減期ぐらいは過ぎつつあるわけですけど。それでもこうして出るんだなあ、と。まあ、今までは「ヤバイ」と言われてたから積極的に採ってなかっただけで、そろそろ大丈夫かなー、と思って採ってみたら全然大丈夫じゃなかったYO! という展開じゃないかと勝手に想像してますが。

何にせよ、東日本においては、山の幸とは数十年ほどオサラバ、ってことでしょうな…。自分達が生きてる間は食えないッスよ。こんなに値が高かったら。

海原雄山に怒ってもらいたいですな。「原発のせいで山菜が食えなくなった! どうしてくれる!」って。でも海原雄山のことだから、「西日本の山菜を食べればいい。そもそも東日本の山菜などマズくて食えたもんじゃない」と平気で言い出しそうな印象も。いや、そういうこと言い出しそうなのは山岡さんのほうか。

でもまあ、フグを食べて死んじゃう人も居るし。自分の尿を飲んだり、ウンコ食べてる人も居るし。そういうのに比べたら、食えなくはない、という気もしてきたり。食べたその晩にコロリと逝くわけでもないし…。「このセシウム成分がホメオパシー的には健康にいいンだ。はふぅ、はふぅ」「うおォン 俺はまるで人間原子力発電所だ」と食べちゃうのもアリなのですかねえ。

でもなあ。山菜食べるたびに、「ウンコ食うより…マシだ…ッ!」と自分に言い聞かせながら食べるってのも…どうなんだろ。そうまでして食べなきゃいかんものかな。まあ、好きな人は好きなんでしょうけど。自分はあんまり…。基本的に苦いし。って子供かよ。おそらくは、珍しいものを食べているというプレミアム(?)感で好まれてるところもあるんじゃないかな、と思っていたり。

あ。そうか。プレミアム感だけで好まれてるなら…。検査・選別して、大丈夫そうなのを10〜100倍ぐらいの値段にして出荷すれば、出荷量が少なくなっても商売になるかもしれないか。希少性をさらに煽って、海原雄山レベルしか食べられない食材にしちゃえばいいのだな。東電や国が補償してくれないなら、そういう方針もアリかも。

記事タイトルと全く関係ない話になってますね。

#4 [neta] ちんこ事業

ちょっと前にゲーム業界の決算について解説してる記事を見かけまして。とある企業について解説してる項の中で、「ちんこ事業」という文字列を見かけたのです。

「なんだソレ…どういう事業だよ…。待てよ? そういやこの会社、トイレで遊べるゲームを出してたな。事業と称せるほどに売り上げ出してるのか。いやはや凄いな。まだまだ探せば、ヒット商品を産み出せる隙間はあるのかもしれない…!」

と感心したのですけど。御察しの通り、よくよく読んでみたら、「ぱちんこ事業」と書いてありました。自分の脳はもうダメだ。

コレ、前にもメモしたっけ? 思い出せないや…。そういう意味でも、もうダメかも。

というかなんで「ぱちんこ事業」なんだよ。「パチンコ事業」と書いてあれば読み間違えせずに…いや…どうだろう…。ゴメン。なんだか自信無くなってきた…。

それにしても、仮に実在するとしたら、どういう事業なんでしょうね。「ちんこ事業」って。…エロマンガやエロゲのネタしか思いつかないや。やっぱりこの脳はダメだ。

2012/05/31(木) [n年前の日記]

#1 [prog] githubのアカウントを取ってみた

github for Windows が公開されたという記事を見かけたので、せっかくの機会だから使い方を少し勉強してみようかと。

元々、Git for Windows (msysGit?)をインストールしてあったのだけど。github for Windows をインストールすればそちらにも入っているのかな、と思ってアンインストールしたものの、github for Windows のインストール場所からしてよく分からず。結局、github for Windows インストール後に、Git for Windows、Git-1.7.10-preview20120409.exe も再インストールすることに。なんだか無駄なことをしている気がしないでもない。

#2 [nitijyou] 自転車で買い物に

某所からの帰りに、ダイユーエイト、ヤマダ電機、ダイソー、ヨークベニマルに寄った。

自転車のバックミラーを探したのだけど良さそうなものが見当たらず。ハンドルに固定できて、軸が金属製の棒状のものが欲しいのだけど…。ダイユーエイトには、軸が針金式でくねくね曲がるタイプしか置いてなくて、仕方なく今はそのタイプをつけているけれど。走っていると振動でミラーがぶらぶらと上下に揺れる上、次第に向きが変わってしまうので視認性が極めて悪く。やはりまともなバックミラーが欲しい。命に係わることだし。

今時自転車にバックミラーをつける人間なんてほとんど居ないと誰もが思い込んでいるから品揃えが悪いのだろうか。例えば、バイクや自動車からバックミラーを無くしたらどれだけ心許無いかを想像すれば、自転車にバックミラーをつけないなんておかしいと容易に分かるはず。と思うのだけど現実はそうなってない。おかしな世の中だなと思う。

ヤマダ電機でキーボードを探したが、全部箱の中に入っていて、その箱もビニールが巻かれていて開けることができない状態なので、キータッチが一切確認できず。…これでは、Amazonで中身も見ずにカタログスペックだけを頼りに一か八かで買うのと全く変わらない。しかもAmazonのほうが多少安いうえに買った人のレビューまで読めて判断材料が少し多い。ますます負け確定じゃないか、何を考えているんだろうと思ったけれど、何かしら急を要する状況では店頭で買うしかないわけで、そういうお客さんだけ相手にしてます、それでウチは十分商売になってますからこれでいいんです、という状況なのかもと勝手に想像。

ヨークベニマルで夕食のおかずを購入して帰宅。

#3 [zatta] 本屋さんの手書きPOPって凄いなと思えてきた

本が好きなのか、仕事熱心なのか分からないけど。いや、たぶん前者のような気がする。基本的には本を愛している人達がそこに居るから、そういう工夫や努力をするのかなと思える。

それに比べると、家電店でそういうものをほとんど見かけた記憶がなくて。店長も、店員さんも、家電なんかちっとも愛していないのかもしれない。

と思ったが、ケータイ売り場では手書きPOPを結構見かける気がする。…この温度差はどうして生まれてくるのだろう。商品の大きさ? 価格? そこで働いてる女性の数? 客の男女比?

考えてみたら、家電は値引き等があるのか。そのへんも関係してるんだろうか。よく分からん…。

#4 [nitijyou] 洋間の床の工事は終わったらしい

夕方には綺麗なフローリングになっていた。

2011/05/31(火) [n年前の日記]

#1 [nitijyou] 屋根の状況

午前中業者さんが見に来てくれた。板も交換しないといけないらしいが、どの業者さんもスケジュールが入っていてすぐに工事できないそうで。作業は数ヶ月後になるらしい。それまでは今の応急処置でも持たせるしかない。

2010/05/31(月) [n年前の日記]

#1 [nitijyou] HDDレコーダに録画していたアレコレを消化

アニメのフォルダは空にした。まだ特撮のフォルダが残ってる…。

2009/05/31() [n年前の日記]

#1 [perl] 親父さんのサイト用のPerlスクリプトを修正中

ホームページビルダーで作成された画像一覧htmlを読み込んで、列挙されてるリンクと画像からスライドショー用swfが読み込むxmlファイルを作成してるのだけど。画像へのリンク以外も拾ってしまうバグを発見。とりあえず、/\.(jpg|png|gif)$/ でリンク先ファイル名をチェックする方向で。

HTML::TreeBuilderの使い方が今一つ判らず。tdタグでfindすると、tableの中に入ったtable全体も取得してしまう。うーん。…parentなるメソッド?プロパティ?が使えることが判った。aタグで検索してから、一階層上にtdタグがあるかどうかを判定すればどうにかなるかしら。

取得した画像ファイル一覧に対して個別に削除等が出来る仕様を追加する方向でもどうにかなるだろうか。でもUIにボタンを付け足すのが面倒。

2008/05/31() [n年前の日記]

#1 [iappli] N903iの白ロムとやらを注文してみた

検索してるうちに、 _白ロム.com で N903i の在庫がありそうに見えたので、試しに代金引換で注文してみたり。在庫がちゃんとあれば・本当に届けば、これでアプリの動作確認ができるようになるかもしれず。…それにしても、どうしてNシリーズだけ、画面がガクつくのだろう。

#2 [iappli] マスターアップしたらしい

メールで連絡が届いた。良かったー。これで一息つける。

#3 [iappli][cg_tools] blenderで仮地形モデルを作成したりGIMPでテクスチャを作ったり

Google Earth の航空・衛星写真を参考にしつつ、blender で下絵として読み込んでポリゴンモデルを作成。

下絵表示。
3D View の「表示」メニュー → Background Image → Use background Image → Load。消す時は、ファイル名横の×ボタン。
点を打つ。
Edit Mode (頂点編集モード)で Ctrl + 左クリック。
面を張る。
右クリックで頂点を選択して、Fキー。
四角形ポリゴンを三角形にする。
3D View の「メッシュ」メニュー → Faces → Convert Quads to Triangles。もしくは Ctrl + T。
四角形ポリゴンの、三角形ポリゴン分割の仕方を変更。
3D View の「メッシュ」メニュー → Faces → Flip Triangle Edges。もしくは、Ctrl + Shift + F。
とかそんな感じに。

しかし、1つのオブジェクトに複数のマテリアルをつけていく方法がよくわからん…。F9を押してEditingにして、Link and Materials で、Material の「新規作成」(「New」)「Assign」を押していけばつけていけるみたいだけど、F5を押して Shading にして、Links and Pipiline で、Link to Object を弄ってしまうと何か変わってしまう。うーん。

GIMPの遠近法→逆変換が上手く使えない。 :

思ったような結果が得られるときもあるけど、結果画像が真白 or 透明になってしまうときがあって。GIMP 2.4.5 のバグかと思い、GIMP 2.2.17 でも試してみたけど、どちらも同じ。結果画像が得られる時と得られないときがある。検索してみてもそのあたりの情報は見当たらず。何かの条件を満たしてないと正常動作しない・欲しい結果が得られない機能、なのだろうけど…。

それはさておき。地面のテクスチャと木のテクスチャを作成。

芝のテクスチャを作ってみたりしていたけど、本来、ポリゴンが遠くにあるときと近くにあるときでテクスチャを変更したほうが良さそうな感も。いや、そもそも、遠くにあるときはテクスチャが要らないのでは、という気もする。特に芝なんてのは、遠景ではただの緑にしか見えないよな…。

木のテクスチャを作りながら悩む。何本かまとめて配置するわけにはいかんかな…。

2007/05/31(木) [n年前の日記]

#1 [jiji] _ベビーカー事故、あわや… ホーム端フェンスに衝突

また、男児の救助の様子も判明。発車直後、34歳と41歳の男性会社員2人、さらに会社役員の男性(48)が次々にベビーカーに飛びついて助けようとしたが、男児がベルトで固定されていたため、3人ともベビーカーに引きずられて転倒。ところが、3人が次々にベビーカーを揺さぶったおかげで、電車が約20メートル走ったあたりで、男児がホームの上に転がり落ちてきたという。男児はこの時、頭に軽傷を負った。

asahi.com:ベビーカー事故、あわや… ホーム端フェンスに衝突 - 社会 より

いくつかの問題点が明らかになった事件・事故ではあるのだろうけど。その場に居た男性3人が、赤ちゃんを助けるべく行動を起こしたらしいという話に、なんだか目頭が…。自分の子供をバイクのヘルメット置き場に押し込む親も居れば、他人の子供なのに咄嗟に助けようとする大人も居る…。

#2 [cg_tools] _Photoshopの無料シェイプを使って簡単にアイコンを作る方法 - DesignWalker

記事とは無関係なことを思ったけど。GIMPでPhotoshopのシェイプデータって使えないのかな。それが使えれば矢印等を描くのもかなり楽になりそうだけど。…フォーマットが判らなかったりするのかもしれんか。

#3 [anime] _『電脳コイル』の第1話〜第5話までが一挙放送決定!

この好評を受け、NHK教育は同作の第1話〜第5話までの一挙放送を決定したぞ! 放送日時は、2007年6月16日(土)15時00分〜17時00分となっている。「これまでの物語を見逃してしまった!」という人は、この機会にぜひ、その内容を確認してくれ!!

また、一挙放送の当日は第6話”赤いオートマトン”の放送日。つまり、1日でなんと『電脳コイル』を6話分観られちゃうわけだ!!

『電脳コイル』の第1話〜第5話までが一挙放送決定! / ファミ通.com より

メモ。

#4 [cg_tools] _[225322]16 bit の扱いについて (Photoshop Elemetns 3.0)

読み込みのみ対応。8bit→16bit変更や、新規に16bitを作成するのはできない、ということらしい…。

#5 [anime] やさいのようせい、音楽会とピーナッツの回を見た

音楽会のノリノリ具合もさることながら、チーズの中の断面図、モグラ叩き的光景に感心。素晴らしい。

#6 [prog] _Python Imaging Library(PIL) について

_Python Imaging Library (PIL)

インストールした。自分の環境は Python 2.4 なので、PIL-1.1.6.win32-py2.4.exe をDLして実行。

PyOpenGL もインストールしておこうかと思ったけど。 :

どれをインストールしたらいいのかがわからない。拡張子 .egg って何? OpenGLContext と PyOpenGL てのがあるみたいだけど。どっちも必要なのか片方だけでいいのかソレすら判らず。

#7 [prog] PyGame入門のページ、最後まで目は通したけど

_Pygame入門

途中で、共通ライブラリ? モジュール? が更新されなくなって、サンプルスクリプトが動かせない状態に…。まあ、概略だけ判ったら、後は自分で実装せよ、ということなのかもしれんか。

と思ったら、 _一つ上の階層 で配布されてた。ぎゃふん。検索で本文?ページに辿りついたものだから気づきませんでした。スイマセン。

2006/05/31(水) [n年前の日記]

#1 [iappli] 敵のアタリを変更

自機の座標を補正するだけに留めるように。

変な補正がされて、首を捻る。デバッグ用にアタリ表示と中心点を表示する仕様を追加。…敵のアタリ範囲が頓珍漢なところに設定されてた。画像を差し替えた際のアタリ範囲テーブル記述を間違えたらしい。静止画から2パターンでアニメする画像に差し替えたのだけど、オフセット(?)が違うほうの画像を頼りに取得してたようで。ツールの必要性を再確認。

つーか、皆、このへんどうしてるんだろう。アタリ範囲を見た目で調整できるツールが必須になるよなぁ…。実機 or エミュレータで調整・数字だけ表示してメモしてるんだろうか。それとも、超大昔のゲームよろしく、画像サイズ=アタリ範囲、でやってるんだろうか。しかし、後者はいくらなんでも大味過ぎる。AC版の悪魔城ドラキュラじゃあるまいし。 *1 …まあ、自分が気づいてない、上手い方法がきっとあるのであらう。

補正は出来たので、敵を動かそうとしたけど。悩む。どう考えても足場objとのアタリ判定・補正をしないといかん。のだが。考えてみれば進行方向を加味したアタリ判定も必要になるから、判定回数が2倍になりそうなんだよな…。判定回数減少 or 処理軽減に繋がる、いい手はないものか…。
*1: いや、いくら最悪な作りのAC版でも、スプライト範囲とアタリ範囲は別に管理してるだろう…。ホントにそうかしら。ドットがないところもアタリがあるあたり、なんか怪しい。それとも当時のファミコン版・MSX版あたりも同様だったんだろうか。

#2 [nitijyou][web] 自宅サーバのトップページから辿れる画像掲示板のcgiを入れ替え

親父さんから「自宅サーバの画像掲示板、凄いことになってるぞ」と報告が。一瞬、「画像掲示板…って?」と返してしまった。自分で設置してたことをすっかり忘れてた。 _このページ から辿れるようにしてたのだった。

英文SPAM書き込みで覆いつくされてた。たしかに、凄いことになってる。

_imgboard.cgi の配布サイトを見たら、英文SPAM対策版が公開されてた。ので、それと差し替え。ありがたや。とりあえずこれで様子を見てみよう。

外観を少しだけ調整しようと試みてたはずがどんどん cgi 中の html タグを削除していく羽目に。 :

なんていうか、見た目を css で調整することを皆が嫌ってた時代の cgi だから…。無意味な table とか、無意味な font 指定とか、とにかく中が凄いことに。いや、無意味なわけではなくて、それらは全部、cssを真っ当に解釈してくれないダメダメブラウザでも同じような見た目にするために存在してるわけだけど。

全世界に存在する、「html でグジグジと見た目を調整してしまう労力」の全てを、真っ当に css を解釈するブラウザの開発に当てられたら、皆が楽になる時代はもうちょっと早く到来してたのだらうか。…いや、今尚、そういう部分がどこかにあるのかもしれない。付け焼刃的な対処・バッドノウハウを蓄積して駆使するより、根源的な部分に改良を加えることができたら…。まあ、その「根源的な部分」ってのは、html や css を記述するのとは次元が違う難解さが存在するのでアレだろうけど。 CAt pc

#3 タブレットの調子が悪い

WACOM UD-0608-R シリアル接続を使ってるのだけど。いざ利用しようとすると、筆圧が取得できない状態になる。

タブレット読み取り面の「設定モード」をペンで押しながらタブレットの電源を入れると設定モードになるので、色々変えてみたり。…もしかして、設定を記録するためのメモリ等の寿命が切れてしまったとかそういうこともあるのであらうか。そもそも、何byte程度のデータを、どこの何に記録してるのかもよくわからんけれど。

シリアル接続というのもなんだか面倒な。気楽に抜き差しできる、USB接続のタブレットが欲しいところ。ではあるけれど。以前、初代 Intuos を購入したら、CRTの電磁波の影響を受けてポインタがぶるぶる震えるという症状に遭遇してしまったこともあり。 *1 そのへんの情報を集めておかないと迂闊に手が出せない製品ジャンルなわけで。最近は液晶環境が多いだろうから、WACOM がちゃんとそのへんまで動作チェックしてるかどうか、なんだか怪しい予感も。Intuos 2 は CRT環境でも改善されたという話を聞いてるけど。現行製品はどうなんだろうなぁ。
*1: 結局、ノートPC(=液晶画面)を利用してる妹に譲ってしまった。>初代 Intuos。

2005/05/31(火) [n年前の日記]

#1 [css] 日記ページがぐしゃぐしゃに

サイドバー部分に、 をまとめようとしたのだけど。失敗しました…。

ローカルで実験してからやればよかったのに、いきなり本番用ファイルを弄り始めてしまってこのていたらく。cssの段組について判るまでこのグチャグチャ状態のままですが、勘弁してください…。

アレなときはcss切って閲覧してもらえればと…うう…。

順番が異なるdivブロックを任意の配置にするってできるのだろうか :

今のところ、
  • ヘッダー
  • 本文
  • 記事タイトルリスト(height不定)
  • 検索欄
  • カレンダー(テーブル)
  • カレンダー(メニュー選択)
  • カテゴリーリスト (height不定)
  • フッター
の順に、htmlでは書かれてるのだけど。

これを、「左=サイドバー」、「右=ヘッダー、本文、フッター」にして…。サイドバーの中には、
  • 検索欄
  • カレンダー(テーブル)
  • カレンダー(メニュー選択)
  • 記事タイトルリスト (height不定)
  • カテゴリーリスト (height不定)
の順に並べたいわけで…。

htmlでは、本文の次にきている「記事タイトルリスト」を、下から2番目に、cssで持っていきたいというのが、うーん…。position:absolute とか使ってみたけど、height不定の場合はどうすれば…。float を使うしかないのか、って floatは並ぶ順番を変えられる気がしない…。

#2 [hns] hnsと1470.netのスクリーンショット

1470.netなる、おそらくはアンテナっぽい処理をするサイト(?)があるらしいと知ったのだけど。<まだ、よく知らない。どうやら、各サイトのスクリーンショット? サムネイル? も取ってくれるらしく。

で、そこに自分の日記ページがメモ(?)されてたのだけど。そのサムネイルが、hnsの、「Cookieを設定しました。再読込してください」画面なわけで…。ヤバイ。寂し過ぎる。なんとかせねば。しかしどうしたら…。

ロボット(?)に対してそういう画面が出るのは、hns の動作として正解なわけだけど。しかし、件のサイトでそのサムネイルを見る人は、「なんだこりゃ」と思ってしまうだろうし。何か対策が必要な気もする…。

アレかな。「Cookieを設定しました〜」画面を、いかにもそれっぽいデザインのページにしてしまえばいいのかな。でもアレって、lib/以下のファイルで処理をしてたっけか。一々書き直すの面倒だな…。「デザインを変えたい」と思うたびに、スクリプト部分を書き換えるというのも、なんかアレな気もする。別に記述した htmlファイルを読み取って、それを出力するように、とかしたほうがいいかしら…。

あるいは、1470netからのアクセスは、Cookie云々の処理をスルーするように、とか…。<ってどうやって。

この記事へのツッコミ

Re: hnsと1470.netのスクリーンショット by otsune    2005/06/01 22:31
"blogmap crawler(http://1470.net/)"とかBATTAに登録するとか。
私のところではdiary/conf/robotlist.txtに
blogmap
crawler
という行を追加しています。
Re: hnsと1470.netのスクリーンショット by mieki256    2005/06/02 21:47
> robotlist.txt に追加

なんと! そんな機能が! 知らなかった…。
ありがとうございます。早速自分も追加するです。感謝であります!

#3 [css] _NN4、IE4にCSSを読み込ませない

まずmedia属性に複数の値をscreen以外の値も指定してやり、CSSファイルを読み込む。

<link rel="stylesheet" href="import.css" type="text/css" media="screen, projection" />

まずこの段階でNN4を除外することに成功。しかしここでは実際にレイアウト情報が記述されているstyle.cssを読み込むのではなく、import.cssと名づけられた別のCSSファイルを読み込んでいる。このimport.cssには

@import "style.css";

とだけ記述し、import.cssからさらにstyle.cssを読み込ませる。つまりワンクッションおいてあげるわけだ。これでIE4もレイアウト情報をもったstyle.cssには到達せず、結果的にNN4とIE4を両方とも除外することができる。
なるほど…。早速試してみたり。

#4 [jiji] _JR西日本の脱線事故後、工場の操業停止を決め従業員の半数が救助に向かった会社

考え込んでしまった。上に立つ人次第で、人は天使にも悪魔にもなるということなんだろうか。あるいは、製造業の中には「良き人間」として振舞えるだけの余裕を、まだかろうじて残してる人達が居るということなんだろうか。

#5 [zatta] _もし、投稿の文章が「私、女30歳〜」だったらどう答えるんだ?

だよなぁ…。何故、男になると途端に…。まあ、余ってるほうだから、しゃーないか。

#6 [tv] 『水曜どうでしょうclassic』が福島で放送開始

ミスターも、大泉さんも、若いなぁ…。<オイ。

プロ野球中継延長による放映時間変更情報を各局のWebサイトに載せてもらえないものか :

『水曜どうでしょうclassic』が予定時間に始まってなくて、不安に。おそらくプロ野球中継の延長で時間が遅れたのではなかろうか。一体いつ始まるのだ。それとも実は既に放送が終わっているのか。…ということで放送局のサイトを覗いてみたり。

「新番組!! 『水曜どうでしょうclassic』」とTOPページに書いている、 _KFB 福島放送 のサイトにはそういった情報が載ってない。ように見える。少なくともパッと見て「ココにある」と判断できる状態ではなさげ。

ついでに他の民放サイトもチェック。 _FTV 福島テレビ_TUF テレビユー福島 も同じ。かも。

唯一、 _FCT 福島中央テレビ のみが、TOPページに放送時間変更情報へのリンクをしっかり載せている。素晴らしい。さらに、自局でわざわざページを作る等、無駄なことはせず、キー局(?)のページへリンクを張ることでちゃんと目的を果たすあたり、ネットの特性を見事に活用してるわけで、そこもまた素晴らしい。

つーかキー局の関連ページをブックマークしとけばいいのか :

_FCT 福島中央テレビ は、 _日テレ へリンクが張ってあるから、FCTのTOPページをブックマークしとけば問題無しとして。他局はどこがキー局なのやら。

_FTV 福島テレビ は、 _フジテレビ か。一応、フジテレビには、 _放送時間変更情報のページもある みたいなので、そこをブックマークしとけばいいか。

_KFB 福島放送 は、 _テレビ朝日 かな。しかし、テレビ朝日自体に、放送時間変更情報を載せてるページが見当たらない。うーむ。

_TUF テレビユー福島 は…判らん。もしかして、キー局(?)が無い? サイトを眺めた限りでは、それらしい情報に辿りつけなかった。身元不明、謎の地方局、TUF。

2005/06/02追加 :

TUFの正体(?)を教えてもらいました。感謝であります。他にも覚えておいたほうが便利そうな情報があったので、せっかくだから引用させてもらおうかと。
もうキー局は実質1つしか残ってないから分かりそうなもんですが〜^^;
TUFのキー局はTBSですね。

ニュースソースとか新聞のからみと対比させると覚えやすいかも。

日テレ−読売−FCT−民友
TBS−毎日−TUF
フジ−産経−FTV−民報(ちょっとちがうかも)
テレ朝−朝日−KFB
テレ東−日経
ウチ、福島民放新聞も取ってるけど、あれって産経系列だったのか。そのへん意識して眺めてみやうかしら。

この記事へのツッコミ

Re: 『水曜どうでしょうclassic』が福島で放送開始 by けいと    2005/06/01 23:27
> _TUF テレビユー福島 は…判らん。もしかして、キー局(?)が無い?

もうキー局は実質1つしか残ってないから分かりそうなもんですが〜^^;
TUFのキー局はTBSですね。

ニュースソースとか新聞のからみと対比させると覚えやすいかも。

日テレ−読売−FCT−民友
TBS−毎日−TUF
フジ−産経−FTV−民報(ちょっとちがうかも)
テレ朝−朝日−KFB
テレ東−日経



キー局がないいわゆる独立U局はほとんどが大都市圏にしかないです。
この辺のページが良くまとまってます。
http://www.tv-wakayama.co.jp/link/dokuritu.html
Re: 『水曜どうでしょうclassic』が福島で放送開始 by mieki256    2005/06/02 21:49
> TUFのキー局はTBS

おお! 情報thxです。なるほど、TBSでしたか…。

> ニュースソースとか新聞のからみと対比

なるほどなるほど…。
これはメモっておかないと… φ(..)メモメモ

#7 [nitjyou] 外食してきた

家族で外食。なんでも、親父さんが持ってる、株主優待券を使ってしまわないと云々とかで。隣の市まで、家族4人、お袋さんの車に乗って…。

行こうとしてた店が潰れてた。ぎゃふん。株主優待券なんか配ってる場合じゃないような… >某企業。いや、逆か。だからこそ、なのか? うーむ。 まあ、同じ系列の別の種類の店がたくさんあるので問題ないんだけど。そちらに行くことに。

食べ始めは美味しいと思ったけど、だんだんツラくなってくる味。量も多すぎて…。家で食べるのが一番かもしれないな。味も、自分の好きなように調整できるし。

帰り、ダイユーエイトに寄った :

いわゆるホームセンター系の店。

プリンタ用の、リサイクルインクカートリッジとやらを見かけた。メーカー純正品の半分の価格。うーむ。インクの性能はどうなんだろう。…親父さんが、試しに一つ購入。吉とでるか凶とでるか。結果が楽しみ。

2004/05/31(月) [n年前の日記]

#1 [nitijyou] 雨に降られる

買い物に出かけたら、雨に降られる。ズボンが泥だらけ。…それでも、自転車で出かけなくて良かった。いや、そもそも車で出かければ良かったのか。

自宅サーバを静音化すべく囲える材料を探したのだけど :

ブロック積み重ねでは崩れそうだし。板は結構値段が高いし。布では遮音効果が期待できないし。…やっぱり、元々の音を小さくする方向で考えたほうがいいのか。それが確実だよなぁ。

#2 [pc] 自宅サーバが呼吸をしてる

昨日、今日と、気温が高い。自宅サーバの電源ファンの音が大→小の変化を繰り返してる。まるで呼吸をしてるのかのよう。こんな状態では、ケースファンを静音ファンに取り替えるのは危険かもしれず。静音ファンの方が風量は少ないであろうし。それとも、複数つけて風量を稼ぐか。何にせよ、このへんの店頭で静音ファンは入手できないので、通販で注文するしかない。マンドクサ。

#3 [vine] chkrootkitをインストール

apt-get update の apt-get install chkrootkit の cd /usr/sbin の ./chkrootkit あるいは ./chkrootkit -q で。

#4 [windwos] テキストビュアーを導入してみた

28日に導入してたのに、メモするのを忘れてた。

「あふ」を使うと、テキストファイルを連続で見れない。流れとしては、『簡易ビュアーに入る』→『簡易ビュアーを終了する』→『次のファイルにカーソルを合わせる』→『簡易ビュアーに入る』となるので、面倒臭い。

ということで、以下の点に注目して、テキストビュアーを探したり。

IrfanViewでもテキストを連続閲覧できるのだけど :

フォント指定ができない。残念。

_Fumy Sequential Text Viewer :

画面構成や機能面は良かったのだけど、キーボード主体の操作はあまり意識されてないようで。ファイル選択とテキスト閲覧ウインドウを行き来するのに数回TABを叩くのはツライなと思った。いや、そもそも、ファイル選択操作(せめて前後ファイルへの変更)と、テキスト閲覧ウインドウのスクロール操作は、同時にできたほうがよくないか。 *1 それと、テキスト閲覧ウインドウの周囲に余白がないのがちょっと気になった。余白の指定・調整ができたほうが、読みやすい気もする。

_ViewLines :

Fumy Sequential Text Viewer で不満を持った点が解消。テキスト閲覧ウインドウのスクロールは、カーソルキーの上下、あるいはPageUp/Downでできるし、同時に、カーソルキーの左右で前後のファイルも選択できる。 *2 ヨサゲ。しばらくこれを使ってみやう。ただ、欲を言えば、ファイル一覧が上部じゃなくてサイドにも移動できたら嬉しかったかもしれず。最も上下に広げたいのはテキスト閲覧ウインドウなので。それと、もしかすると行間が広いような気がしないでもない。気のせいだろうか。

ファイルを表示するとき、毎回、最下行を表示するよう、事前に指定できたら便利かもしれないとも思ったり。tailコマンドみたいな感じで。フッターだけ次々と確認したい場合もあるナリ。いや、今回がそれだったんだけど。

他のツールも触ってみたが :

コマンドラインからファイルを渡せなかったり、キーボード操作ができなかったり。なんとなくそのあたり、現代のアプリ・ツールにはあまり求められていない仕様なのかな、などと感じたりもする。…デジタルな操作(=キーボード操作)とアナログな操作(=マウス操作)。それぞれ得意な作業があるような気もする。全てをアナログな操作で無頓着に統一してしまうのもどうかと思うのだけど。とは言うものの、実装が大変だったり、制作者には需要が見えなかったりするのかもしれない。

「あふ」の簡易テキストビュアーで連続閲覧できればいいのに :

画像は連続で閲覧できてるのに。不思議。もっとも、簡易ビュアーだから仕方ないという話も。それに、テキストを連続で閲覧するという作業が、そもそも一般的には求められていない可能性も。求められていたとしても、マウス操作を望む人が多いのだろうし。…「あふ」から別のツールを呼び出すと、その後もキーボード操作主体を望んでしまうので、難しいところ。

*1: もっとも、件のツールは、テキスト閲覧ウインドウがエディタのようになってるため、ファイル選択操作とテキスト閲覧ウインドウのスクロール操作を同時に行うのは難しいのかもしれず。ファイル選択操作も可能にしてしまうと、エディタのキーボード操作に制限が出てくるのかもしれんし。
*2: 閲覧モードと編集モードが存在していて、起動時は閲覧モードになっている。故に、カーソルキーの左右をファイル選択に割り当てる事ができている、のだと思う。

#5 [pc] _勝手に評価・郡山のお店

おお。こんなコンテンツが。素晴らしい。と思いきや、情報が古い。ちと残念。TWOTOPも、J-ZONEも、ソフトアイランドも、今では撤退しましたよ。 *1 残ってるのはパソコン工房だけ。元J-ZONEの場所に引っ越しました。しかしそれもいつまで持つか。行くたびに思うのですが、店内が閑散としてます。店舗の賃貸分(?)、稼げているのかしら。不安。<余計なお世話だ。

こういうコンテンツにこそ、wikiのような仕組みが向いてるのかもしれないな。もっとも、wikiって、テキスト情報のみならず、地図のような画像情報も編集可能なのか、自分は知らないのだけど。…地図に特化したwikiってどうだろう。各人が良く行くお店について、情報を集結させると、結構便利になったりして。などと電波が。
*1: TWOTOPは、ソフトアイランドを潰すためだけに進出したようなもんだ。(;´Д`)

この記事へのツッコミ

Re: 勝手に評価・郡山のお店 by けいと    2004/06/02 21:13
郡山を離れてしまったので、限りなく更新できないですm(__)m

それでも郡山には年に3回ぐらいは遊びに行ってますが、
とても全部をチェックできる余裕がなく、
コンテンツの身売り先を探しております。
Re: 勝手に評価・郡山のお店 by mieki256    2004/06/03 13:42
>けいと様

おお! 管理人様ですか。はじめましてー。

> 郡山を離れてしまったので、限りなく更新できないですm(__)m

なるほど。そういう事情があったのですか。
それはたしかに、更新は難しい…。

> コンテンツの身売り先を探しております。

む。

書店・本屋編のページは、全然興味がないのでアレですが(爆)、
パソコンショップ編のページは、ちょっと興味がありまする。

…実はこういうcgi↓を先ほど見つけまして。
http://www.csmoon.com/prog/mapbbs.html

コレを使ったら、放置しっぱなしでも、
閲覧者が、コンテンツを編集できるようにならないかと妄想中…
そうなれば管理も楽かもしれないなぁ、と。
もっとも、まだ試用してないので、たしかなことは言えないのですが。

もし、件のcgiが使えそうなら、
その時は、パソコンショップ編だけでも、当方が引き受けましょうか?
(や、そちらのサイトで件のcgiを導入してしまう、
 という選択肢もありそうではありますが… (^^; )
Re: 勝手に評価・郡山のお店 by けいと    2004/06/04 22:24
おお、面白そうなCGIですね。

サンプルをいじってみましたが、なかなか楽しいです。

だけど、これは登録した人じゃないと消せないだろうから、
やっぱり基本は管理者がメンテナンスし続ける必要があるよなぁ、と。

んなわけで、もしよければ、全面移管をお願いしたいなぁヽ(´−`)ノ
Re: 勝手に評価・郡山のお店 by mieki256    2004/06/05 06:53
> だけど、これは登録した人じゃないと消せないだろうから、
> やっぱり基本は管理者がメンテナンスし続ける必要があるよなぁ、と。

あっ! …たしかに。そうか。そんな罠が。<いや、罠じゃないだろう…
目論見が露と消えました… (つД`)

> んなわけで、もしよければ、全面移管をお願いしたいなぁヽ(´−`)ノ

「全面移管」の範囲がちょっと判りませんが…
パソコンショップ編だけなら、引き受けますが、どうでしょう?

ただ、それでもやはり、
件のcgiを使ったほうが、まだ良さそうな気もしていますので…
(閲覧者が情報を追加できるだけでも違う感じがしますし。
 削除・修正の時だけ管理者が作業を行えばいいのだろうから。)

そちらのページは、しばらくは今のまま、放置(?)を続けていただいて…
私のほうで、そちらのページを参考にしながら、
件のcgiでデータを打ち込んで…

内容・情報が、ある程度そちらのページと等しくなったあたりで、
該当ページへのリンク先だけ修正してもらう…

…と、そんな感じではどうでしょうか? (^^;
Re: 勝手に評価・郡山のお店 by けいと    2004/06/05 13:08
> パソコンショップ編だけなら、引き受けますが、どうでしょう?

パソコンショップ編だけでもOKです〜
陰に隠れたコンテンツなんてなくて、
まったく静的なhtmlだけでできてますので、
素材はそのままうちのHPからパクってもいいですよ
後は煮るなり焼くなりお好きにどうぞ(^^;

> 件のcgiを使ったほうが、まだ良さそうな気もしていますので…

ですね。使いやすいように改変してください。
うちのHPの情報は元ネタ程度に使っていただければ…


それはそうと、mieki256さんは、郡山の方なんですか?
もしそうなら、私が郡山行ったときにでも
お礼がてらお茶でもどうですか?
(3ヶ月〜半年ぐらい先になると思いますが)
Re: 勝手に評価・郡山のお店 by mieki256    2004/06/06 04:55
> パソコンショップ編だけでもOKです〜

おお。ですか。
では、そのへんポチョポチョと、設置やデータコピペを始めてみますです。
ある程度まとまったら、そちらのサイトの掲示板あたりに、
その旨カキコしようかと。

> それはそうと、mieki256さんは、郡山の方なんですか?

いえ。須賀川ですー。
なもんで、書店関係はあまり興味が無かったという… (^^;
(書籍は、まだ須賀川市内でも、そこそこ入手できますし。
 無い場合は、郡山の東北書店か、アニメイトに行けば…
 もっとも昨今はネット注文が早いし確実っぽい感もありますが。)

自作PC関係は、さすがに須賀川には全く存在しないので、
どうしても郡山に出向くしかなく。
それで、件のコンテンツには感動した、というわけであります。
Re: 勝手に評価・郡山のお店 by けいと    2004/06/06 21:08
> その旨カキコしようかと。

了解です〜

> 自作PC関係は、さすがに須賀川には全く存在しないので、
> どうしても郡山に出向くしかなく。

確かに須賀川はちょっと大変ですね〜

#6 [game] _サーフィンの“トリック”を完成させて得点を稼ぐゲーム「Surf's Up」

サーフィンゲームって、えてしてこんな感じになるのかしら。この遊びなら、3Dは必要無いよなぁ。いや、キャラクタのグラフィックは、3DCGで作ったものを使ってるみたいだけど。…PC-FXの方法論って実は結構当たってたのかな。<話が飛躍し過ぎ。

#7 [blog] 巡回してたサイトがblogを導入してた

読みやすい。元々、日記ページが、月別、かつ、上・中・下旬別のhtmlに分かれていたサイトだったので、一定期間毎にリンク先を変更するのがマンドクサかったわけで。これからは同じURLを開くだけで最新の日記が読める。ありがたい。…やっぱり便利なツールだなと再認識。>blogツール。

#8 [mixi] 何度か自己紹介文を書き直してくれたみたいで

もうしわけねえッス(笑)>k氏。うーむ。恥のかき方が足りないように見えるのか。たしかに、元々はガンガン恥部を曝け出すためにこの日記ページを書いていたはずが。ふと気がつくと、つい、カッコをつけてばかり。初心忘れるべからず。もっとかかねばならぬな。

ホーレホレ。おじさんのバナナをみておくれー。<や、そういうことじゃないだろ。

360度、グルグル回るよー。<お前はポコイダーか!

スイマセン。本当は回らないんです… <わざわざ訂正することでもないだろ…。

_へんちんポコイダーが実写で作られていたらしい :

マジすか。(;´Д`)

1600rpm、騒音17dbの静音へんちんポコイダー :

スイマセン。言ってみたかっただけです。

この記事、mixiでカテゴリ分けするのは :

ふさわしくないのでは。今頃気づくな>俺。

この記事へのツッコミ

Re: ありゃ? by mieki256    2004/06/02 14:09
> k氏とはオレのことだよね?

です。あちらでは頭文字がkなので。…不安にさせたみたいですな。ゴメソ (^^;

> 書き直すたびに通知がいくんかいな?

それがSNSの魅力。らしいですよ。たぶん。自分に関わりのある、あらゆる情報を、逐一知らせる・確認できるあたりが魅力。なのでしょう。たぶん。知らんけど。<オイ。


他の内容についても、レスを打とうと思ったんだけど。うーん。長くなってしまった…。g氏のカキコには、興味深い、考えさせられる内容が、多々混ざってたので、ついつい。これは、本記事でレスしたほうがヨサゲかも。ということで、後でアプするですー。 (^^;
Re: ありゃ? by 風太郎    2004/06/03 23:05
腕はいいがDQNなヤツ=アナキン
とは、流石ゲーム業界の人の洒落は切れ味が違いますな〜^^
そこだけでかなり笑わせてもらいました。
本筋と違うコメント失礼。
いや、あんまりにもオモロかったもので・・・

#9 [pc] _C3の新モデル1.2GHz

ウェブブラウザもメーラーもワープロも、2GHz以上のペンティアム4で動かすMSwindowsXPよりもきびきび動くはず。
マジすか。何故。…つまりはそれだけPen4がウンコなのかしら。うーん。

#10 [anime] 日経の土曜版に「萌え単」の記事が載ってた

今頃読んだ。署名は無かった。アレを読んで知識の無いおじさん達がどこまで理解できるのだろうか。読者おいてけぼり。たぶん。

_webにあった :

土曜版はwebで公開されるのか。知らなかった。と思ったけど一部のみ公開なのね。 _(via カトゆー家断絶)

関係ないけど「電脳生活:中山家の〜」のコーナが終了ですにょ :

ツインテール小学生娘のあゆみたんともお別れですよ。いや、別に萌えキャラじゃないですけどね。個人的には、さっぱりカッチリした挿絵が好みでしたわ。誰にでも安心して見せられるタイプの絵柄。そういう絵柄で描ける人が羨ましい。

#11 [zatta] _なぜハトは前後に首を振るのか

視覚が関係していたのか。…ということは、視覚関連技術が発展途上なロボットを作った場合、ハトのように頭を動かせばそれら技術の不十分さをカバーすることができ…いや、そもそも、そんなハトみたいに首を動かすロボット、誰も作らないから。たぶん。

#12 [blog] TrackBack SPAM

こちらの記事 tp://kiri.jblog.org/archives/000736.html を読んだ後、 TB(TrackBack)してる記事 tp://jitsuro.cocolog-nifty.com/real_mans_blog/2004/05/post_2.html *1 をクリックしてみて首を捻った。全然関連性のない記事じゃないか。なぜこんなものを。まさかこの人、知的障g(検閲削除)。

と思ったら理由が書いてあった。要するに、とにかくこの件を多くの人に知ってもらいたくて、更にgoogleでも上位にしたいから、相手先の記事内容に関係あろうがなかろうがお構いなく、有名らしきblogにTBしてみました、と仰ってる。

なるほど。これが TrackBack SPAM というやつですか。…たしかにこんなTBだったら削除したくなりますね。理由・事情・内容の如何に関わらず、なんたる無礼な振る舞いであろうか。 *2

(´-`).oO( …自分のサイトの話じゃないからどうでもいいか… )

TB SPAMを発射しまくるスクリプトを作ったらどうなるだろう :

世界中のblogがTB SPAMで埋め尽くされれば、フィルタリング技術の向上が急務になるだろうから、結果的には良い方向に働くのではないか。などと電波が。もっとも、TB SPAMで埋め尽くされる状況は、同時に、コメントSPAMで埋め尽くされる状況でもありそう。となると、国産の日記自動生成ツールのツッコミ機能も、同様にSPAMに晒される可能性が。それらツールにおいてもフィルタリング技術の導入が急務に。…ツールによっては、それら技術の実装を、ユーザ自身が独自に試みなければならない状況もあり得るだろうな。うう、マンドクサ。しかしいつかは必要になりそうな予感も。でもマンドクサ ('A`)

コメントやTBをフィルタリングできるのかしら :

そもそも、元記事と関連性のあるコメント・TBであると、コンピュータ如きが判断できるのだろうか。そんな技術の実現が可能なのか。文字数で判断するのか。それは非現実的だろう。短文であっても、関連性があり、質の高い(?)反応はあるはずだし。利用単語で判断するのか。でも、商品の宣伝文ならともかく、真面目な内容で関連性のないことを書かれてたら、やはり漏れてしまいそう。関連性の有無なんて、人間でなければ判断できないのではないか。…となると、目視で削除していくか、面倒臭いからひとまず全部残しておくか、ぐらいしか手はないような。それにしたって前者では、TB数が膨大になれば人間の手によって対処できるわけもなく。うーん。…先輩方が語ってる、TBの情報を流用して関連ページを一望できる技術が普及すれば、それを応用することでTBの削除作業が多少は楽になったりしないだろうか。などと電波が。

双方向リンクで何が生まれるのだろう :

記事と記事の双方向リンクを達成するはずの機能が、それを超えて宣伝道具になってしまったあたりからして、どうも元々問題があるような気も。もしかすると、TBの存在自体が誤りではないのか。双方向リンク情報に、付加価値を持たせようと欲張り過ぎたんじゃないのか。いわば仕様レベルでのセキュリティホール。<お前何言ってんだ? …そのあたり、ハイパーテキスト・ハイパーリンクの歴史を勉強しないと正確なことがいえない気もしてきた。爺ちゃん達は、情報と情報の双方向リンクで、どんな効能が生まれると考えていたのだろう。単なる宣伝で埋め尽くされ、情報の関連性が失われていく可能性について予見していたのだろうか。予見していたとして、解決策についても考案していたのだろうか。何にせよ、爺ちゃん達や先輩方の書き残したものを、そのうち真面目に読んでみないと。…でも、マンドクサ ('A`) ワシ、面倒臭いのはとにかくキライやねん。

*1: なんて呼べばいいんだろう。TB先? TBしてきた記事?
*2: 通常なら、リンクしてその感想を記録するのが常なのだけど。こんな自己中な人間の目論みに加担してしまうのも腹立たしい。故にリンクはせずURLのみ記することに。しかしもしかするとURLを書いた時点でgoogleのページランクに影響が出てしまう可能性も。うっ。ええいチクショウ。だったらhttpを削って書いてやる。<意味あるのか? …それにしても、この人、自分は正しい事をしてると信じ込んでるのだろうなぁ。SPAMを送りつけるというその行為によって、主張内容までもが色眼鏡・フィルターをかけられてしまう危険性を、果たしてどこまで認識できているのだろう。…僅かでも認識できてたら、こんな愚かしいTBを送れるわけないか。なんだかなぁ。

2003/05/31() [n年前の日記]

#1 腹の調子が悪い上に眠い

けど、今日は外出する予定が。どうにもタイミングが悪い。

#2 [pc] PC設定のヘルプ?に行ってきた

某氏の家に出向きWinXP導入後の各種設定について説明?をしてきた。スキャナ、プリンタにWinXP用のドライバを入れたり、アプリをXP対応にするパッチを当てたり、WinXPにSP1や修正パッチを当てたり、アクティベーションしたり。一通り疑問点・問題点は解消したので良かった。後はホームページ作成作業についてだけど、IBMホームページビルダーを購入すればウイザード形式で雛型が作成できるのでソレを薦めてきた。 *1

ネットに繋がる環境であればアクティベーション作業は簡単だった :

たしかにこれなら、顧客に受け入れられるはず、とMSが考えるのもわかる。だが、MSがアクティベーションに対する応答処理を行わなくなったら一体どうなるのだろう。

*1: ウイザード形式による雛型作成機能があることをすっかり忘れてた。普段使ってないもんで。失敗。

#3 [pc] 帰りにあちこち眺めてきた

J-ZONEに寄ってデジカメの陳列棚を眺めてきた。相変らず値段設定が高目。しかし、HARD-OFFはもっと高い。デジカメの中古品を眺めてきたが、新品が買えてしまう値段設定に呆れた。ていうか、太古のメルコ製品キャプチャボードにMTVシリーズ並みの値段をつけてるけど一体誰が買うんだろう。

この記事へのツッコミ

Re: HARD-OFFはもっと高い。 by がんした    2003/06/01 06:25
そうそう、ハードオフの中古品は、量産店の新品より高い。

が、しかし、中古パーツを売るには便利。以前、仕事で図面打ち出し用に使っていた
A3モノクロレーザープリンタ(キャノン製で5年前に13万で購入、
現在でも後継機種が9万ぐらいします)を売ろうとして、地元のジャンパラで
見積もってもらったら3千円でしたが、ハードオフなら5千円で引き取ってくれました。

こんな値段設定で儲けが出てるのか不思議です。同じグループのブックオフは、
あんなに買い取り値シビアなのに。逆に言えば出版業界が、そんだけ暴利を貪ってるって事かも。
Re: HARD-OFFはもっと高い。 by mieki256    2003/06/02 01:07
A3のモノクロレーザープリンタ…
漫画描いてる人だと買いそうですね。
投稿用原稿サイズ(B4)でも高速印刷できそうだし。
同様に、A3サイズ読み取り可能なスキャナなんかもすぐに買い手がつきそう…

5千円で買ったものを、店がいくらで売ったか、そのへん気になります。
差額が大きければ、後は売れさえすれば儲かるわけで…
一応は、しっかり儲かる程度の差額なんでしょうね。
ソレを考えると、店を介さずに、
売り手と買い手が直接やり取りできれば双方助かる…
オークションの類が大人気なわけだな…
Re: HARD-OFFはもっと高い。 by がんした    2003/06/02 07:38
オイラも A3 スキャナーは欲しかったが、 20万以上したので、とても手が出ず。
あれがあれば、手書き図面の取り込みが随分楽になっただろうに。

ハードオフはマジめに赤字ではないかなと思う。どうかんがえても、中古商品が
新品より高いのは異常。元々他業種から参入したリサイクル店なので、
値踏みが甘いんじゃあないかと。それにしても同業のブックオフは稼いでいるので、
よっぽど出版業界は非効率な運営体質なんだろなと。
Re: HARD-OFFはもっと高い。 by mieki256    2003/06/03 00:14
今だと新品でも\150,000ぐらいですかね>A3スキャナ
http://www.i-love-epson.co.jp/products/scanner/es6000hs/es6000hs.htm
と思ったけど、価格comで見たら\83,330だった。安くなったなぁ…
http://www.kakaku.com/prdsearch/detail.asp?ItemCD=004010&MakerCD=26&Product=ES%2D6000HS

デジタル関係・電気製品関係は値段設定が難しいですな。
時間が経過すると、性能の良い製品が更に安い値段で買えてしまう。

本は価格が比較的安いほうだからなんとかなってるんでしょうかね。
数百円なら、客も金を出しやすいというか。
これがハード関係になると、数千円〜数万円とかになる。迂闊に手が出せない。
当然吟味するようになり、中古は売れにくくなる…

ハード関係も、数十円で買って、数百円で売ればいいような。
そのくらいの価格なら、多少性能が悪くてもバンバンはけそう。
でもハード関係は売り場面積を取るから難しいか…

#4 枕が高い

値段が。布団専門店で枕を眺めてたら、店員さんが寄ってきた。肩こり云々の話をしたら、1万いくらの低反発ウレタン枕を薦められた。今の自分にはそんなん買えませんがな。別の店に入ったら\1,700の低反発ウレタン枕を発見。触ってみたけど1万いくらの製品との違いがわからない。何が違うんだろう。

#5 台風が近づいてたなんて知らなかった

世間と断絶してるなぁ>俺。帰りは、道路の白線が見えなくてちとヤバかったス。小降りにならないかと店をウロウロして時間潰してたのが裏目に。

#6 [pc] PCにもボリュームが欲しい

汎用的に使えるボリュームが欲しい。マウスホイールのようにスイッチのON/OFFで誤魔化すタイプではなく、アナログ値をA/D変換で瞬時に取得できるタイプのものがあれば色々使えるのではないかと思うのだけど。ソレ系の店を覗くたびに探してみるのだけど見つからない。

_Windowsでもコレって使えたのか :

てっきりMac専用だと思ってた。要するに、こういうのが欲しい。こんなに高くてゴージャス感出てなくていいから。キーボードの脇にでもペタリと張り付けて「クイッ」と回せるようなものがあればなぁ。ていうか、USB利用で汎用性のあるセンサがあれば、後はパーツ屋でボリューム買ってきてつけるだけで済みそう。USB周辺機器を自作する為の雛型キットとか無いものだろうか。

サウンド入力は使えないか :

PCにおけるA/D変換と言えばサウンド入力関連。MIC端子でお手軽に出来ないかな。

2002/05/31(金) [n年前の日記]

#1 OCRその2

結局〆切守れなかった…ガックリ
自分はやっぱりダメ人間です…
でも、あとほんのちょっとで終わる。それはもう見えてる。

ひとまず、指示待ちだな。
それとも…
メンドクサイから2つとも作ってしまおうか…


他のOCRソフトも試してみた。

「e.Typist」は、本文の認識ならバッチリ。
でも修正操作が「読んでココ」に負ける。
リストに出てくる文字の数が少ない上、2文字を1文字、あるいはその逆で誤認識した際、修正・認識させる方法が無い。
「読んでココ」なら、誤認識した文字画像に対し、手動で境界を設定したり、文字画像を結合して再認識させたりできる。

ただ、どちらのソフトも、修正作業時にマウスとキーボードを行き来しなきゃならない。それがツライ。
キーボード操作のみで修正できれば作業軽減に繋がりそう。
誤認識などするはずがないと思ってるから、そういうところに手を入れないのだろうか。

OKREADERも試してみたけど。これは論外。
修正する気も起きないほど誤認識だらけ。話にならない。


最近サッカーの話をよくみかけるけど。
何かイベントでもあるの? (・_・?)

なんちてぽっくん

2001/05/31(木) [n年前の日記]

#1 ペンの持ち方

らくがきしてると小指が痛くなるんです。
ペンの持ち方おかしいのかな。
それとも力の入れ方が変なのか。

タブレットの上にケント紙を両面テープで貼りつけてるんですが。
なんかすぐ剥がれるんですよね。
何か手は無いものか。

ケント紙貼らないと、表面の透明なシートに傷がついちゃって…
タブレットペンのペン先は交換できるけど、シートは交換できないし。
まあ、ペンの滑りが紙の上で描く感覚に近くなるってのもありますが。

2000/05/31(水) [n年前の日記]

#1 ユーザのアクセス制限その1

足痛い。
昨日の犬の散歩が効いてる。
運動不足ですね。

VineLinux2.0のDLはテレホタイム中に引き続き行っているのですが。
それはともかく、今のうちに勉強できることは勉強しておこうかと。

先日の、「ftpアクセス時にpublic_htmlの中が見えない」の件ですが。
これもまたパーミッションが原因。トホホ。
とりあえず、ディレクトリィのパーミッションを色々変更してたら覗けるようになったので、たぶんソレが原因。
どういう設定をして上手くいったのかは忘れてしまいました。メモしながら作業すれば良かった…
そういえば、ディレクトリィに実行属性が無いと、cd(カレントディレクトリィ変更)すらできないという情報も目にしたり。なるほど。そういうものなのか…

ftpでアクセスしてくるユーザに、アクセス制限をつけたかったのですが。
一応、簡単なやり方はわかりました。
/etc/ftpaccess というファイルに
  guestgroup グループ名
と追加するといいようで。
これで、記述したグループに属するユーザはゲスト扱いになり、そのユーザのホームディレクトリィ以外にはftpでアクセスできなくなります。上のディレクトリィ階層を覗くこともできません。

が。
どうも問題が。
WinのDOS窓から、コマンドラインベースのftpを使ってアクセスした場合、上記の制限が確かに働くのですが。
一般的なGUIのftpソフトでアクセスした場合、そもそもユーザのホームディレクトリィの中自体が見れないという…
なんでやねん。

それはそうと、上記の対処だけではまだ足りない。
もし仮にWeb用のサーバとして公開するとしたら、ユーザのホームディレクトリィではなく、その下の、public_html以下しか、覗けない・アクセスできないようにしないと。上記の対応では、ユーザのホームディレクトリィ自体が覗けてしまい、.xxxxx 等の環境設定ファイルまで見えてよろしくない。
それと、ftpでのアクセス制限が出来たとしても、telnetでアクセスできてしまったら無意味。こちらも利用できなくする必要が。

もっと勉強しないとなぁ… (´Д`;)

アレ?
自分、元々何をしようとしてたんだっけ (・_・?) ハテ

1999/05/31(月) [n年前の日記]

#1 (NoTitle)自転車で隣りの市の病...

自転車で隣りの市の病院へ。先生に教習所へ行ってる事を話したら、「薬で注意力散漫になるのは良くなさそうですね」と、朝と夕方の2回の薬を、夕方1回に減らしてくれました。ラッキー。…でもちょっとだけ不安だったりもしてー (^^;

(以降、ほんのり爆笑問題風のノリで)病院へ行く途中に小学校があるのですが、私が通過する時間帯はどうやら放課後のクラブ活動の時間帯らしく、体操服姿の小学生の姿を見かけます。しかし、男子が校舎の周りをランニングする姿はイヤというほど見かけるのですが、女子が走っている姿を見かけることは決してありません。どうも女子は体育館の中にしかいないようです。これはやはり、近年多発している女子児童を対象としたその手の犯罪を防止する為、なのでしょうか。チェッ、楽しみが無くなっちゃったゼ。(オイオイ「楽しみ」って何だよ!危ねえよ!)
ってのはウソです。というのも、もし仮に思わず振り向いてしまうぐらいに可愛い女の子がそこにいたとして、アナタ。3Dじゃ(…えっ?)、すりいでぃいじゃあああ! やっぱり2Dでなきゃ、ネ?(もしもーし。「ネ?」って同意を求めるなよ同意を)
しかし私、かなりマジにそんな感じなんで(どんな感じだよ)、正直言いましてその手の犯罪を絶対に起こさない自身があります。エヘン。(いばってどうする。大体まともなヤツならそんな事これっっぽっちも考えたりしねーよ)
これはなんといいますか、世間一般には同じと見られていたとしても、その筋の人々の間では全く異なる、そう例えるならホモ・ゲイ・オカマ・ニューハーフの違いとでもいいましょうか。(全ッ然違うよ! …いや、結構合ってるのか?)
さて。一体どれが冗談でどれが本気の発言なのでしょうか。ウフフ。(って、少しでも本気だったらヤバイんだよ! なんて書いたら、まるで私が少しも本気じゃないように誤解されてしまいますか。 ………アレ?)

帰りにソフトアイランド郡山店でパソコンパーツを買いました。
1つはメモリ。PC100対応 SD-RAM 128MB CL2 x 2 。1本 12800 円ナリ。2本で 25600 円。アキバ価格で1本1万円を割ろうかというこの時期に、12800 円は高いかなーとも思いましたが、通販と違って即入手可能だし、送料考えたら…ということで購入しました。
しかし。購入後に J-ZONE に寄ったら、さらに 2000 円安く売られていたのをしっかり発見。う、う、うわ〜〜〜〜ん! ダーリンのバカ〜〜〜〜!!(ToT) (号泣、しかも意味不明)
だって普通、 T-ZONE 系列の店の方が値段が安いなんて想像しますか? (昔 T-ZONE で WACOM のタブレットを相場より 5000 円高い値で買ってしまった経験あり。) あーくそー失敗したぁ。

サウンドボードも買いました。X-WAVE5000(値札には (J81)って書いてあったけど?)ってヤツ。 YAMAHA YMF724Fチップ使用 PCI サウンドボード。3980円ナリ。なんか SPDIF-OUT 端子もついてるみたいヨ。
なんで今頃サウンドボードなのか? 実は今まで MIDI再生には Roland SC-88VL という外部MIDI音源を使ってたんですが、コレを階下の Canbe に繋いでしまったのです。 で、ここ数日、メインマシンに内蔵してるサウンドボード Creative SOUND BLASTER PCI128 のMIDIシンセでMIDIを再生していたのですが…コレがヒドイ。純粋にハードで128音出せるのはいいんですが、肝心の音色が…。MYホムペで流しているMIDIを聞くと、「これデータ壊れてないか?」と思っちゃうぐらい良くない。ということで、安価にそこそこのMIDI再生が出来ると言う、YMF724Fチップ使用サウンドボードに白羽の矢を立てたわけです。
で、結果ですが、デモ曲を聴いている限りは中々イイ感じ。ソフトウェアMIDIのS-YXG50も付属してるし値段の割にグーです。ただ、CPU負荷がねぇ…。(ひょっとして S-YXG50で鳴らしてないか?と思うぐらい厳しい) それと、GS音源とXG音源の差が想像以上だったのもちとアレです。全然音が違うんでやんの。
にしても、今回もCDケーブルの端子が違っててあせりました。なんで統一してくんないのかな。大体一番メジャーと思われる Creative の製品自体、てんで形状がバラバラなのが納得できないよなぁ。

CPUクーラーも買いました。DRACO Special とかいうヤツ。Socket7 , 370 用。昔どこかで「良く冷える」なんてカキコを見たような気がして。
で、気になる冷却効果ですが…良くわかんないッス。あんまり変わってないかも。まあ、とりあえずはファンの回転数が検出できるようになっただけでも良しとしましょうか。(今まで使用してたセレロンのリテールファンは回転数が検出できなかったのです。)

あちゃ。文章量が多すぎますね。調子に乗りすぎました。m(_ _)m

以上、25 日分です。

過去ログ表示

Prev - 2024/03 - 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