mieki256's diary



2019/03/12(火) [n年前の日記]

#1 [linux] 手持ちのLinux機をいくつか起動してメンテナンス

手持ちのLinux機をいくつか起動してパッケージを最新に。

結構大量のパッケージが更新された。つまりはそれだけ使ってなかったわけで。

2018/03/12(月) [n年前の日記]

#1 [windows][mruby] Visual Studio上でデバッグウインドウに何かメッセージを出す

昨日、Visual Studio 2015 Community上で、C++ で書いたプログラム内から何かメッセージをどこかしらに出力したいけど出力されなくて悩んでたのだけど。

その後ググってたら、#include <Windows.h> をして、OutputDebugString() を使えば、デバッグウインドウにメッセージを出せるらしい、と分かった。

_その3 デバッグウィンドウを知らないと大変です
_Win32アプリケーションのデバッグ方法 [VC++の使い方]

ただ、tchar.h もインクルードして、出力したい文字列は _T("hoge") と囲まないといかんようだなと…。
#include <Windows.h>
#include <tchar.h>

...

        OutputDebugString(_T("# MSG: Load Image\n"));

...

もっとも、コレ、Windows + Visual Studio でしか使えない気がするわけで。MinGW用や、*NIX上でも使えるソースを書きたい場合は、何かもうちょっと工夫が必要になるのだろうなと。

まあ、動作確認が終わったら、該当行をコメントアウトしちゃうだけでもいいのかもしれんけど。

#2 [ruby][mruby] MinGWでSDL2関係のビルドができるか実験

Windows10 x64 上で、mruby-sdl2 をビルドしたい。が、どうも sdl2-config を呼び出してるように見える。

_crimsonwoods/mruby-sdl2: mrbgem to use SDL2.0
_mruby-sdl2/mrbgem.rake at master - crimsonwoods/mruby-sdl2

sdl2-config の中身はシェルスクリプトなので、bash だの sh だのが用意されてる環境が前提のような気がする。となると、Visual Studio (Visual C++) を使ったビルドはできない予感。

しかし、もしかしたら MinGW + MSYS ならビルドできるのだろうか…? 実験してみないと分からんな…。実験しよう…。

SDL2関係のインストール。 :

以下の記事を参考にして、MinGW + MSYS で、SDL2関係が使えるように環境を整える。

_MinGW 用の SDL2 インストール手順 メモ
_MinGW (32bit) 開発環境 インストール手順 メモ

自分の環境には MinGW + MSYS がインストールしてあるので、足りてなかった mingw32-libz dev (v1.2.8-1) だけ、MinGW Installer を使って、追加インストールした。

環境変数PATHの最初のほうに、以下を追加した状態で…。つまり、MinGW の bin/* と、MSYS の bin/* が呼び出せるようにしておいてから…。
C:\mingw\MinGW\bin;C:\mingw\MinGW\msys\1.0\bin

C:\mingw\MinGW\msys\1.0\msys.bat を実行。bash が起動する。

MinGW 用の SDL2関係ファイルを入手。

_Simple DirectMedia Layer - SDL version 2.0.8 (stable)
_https://www.libsdl.org/release/SDL2-devel-2.0.8-mingw.tar.gz

SDL2-devel-2.0.8-mingw.tar.gz をDL・解凍して、出てきたディレクトリをカレントディレクトリにする。今回は、D:\sdl2\dev\mingw\ というフォルダを作成して、その中に入れておいた。

以下を実行。
make install-package arch=i686-w64-mingw32 prefix=/mingw

これで、MinGWインストールフォルダ内の bin/ , include/ , lib/ ディレクトリ等の中に、SDL2関係のファイル(*.dll , *.h , *.a 等)がコピーされた。ちなみに、sdl2-config も bin/ にコピーされて、実行権限もついている。

この make install-package、今まで知らなかった…。これでサクッと下準備ができたのか…。

ビルドしてみる。 :

以下を参考にして、サンプルがビルドできるかどうか確認。

_MSYS2 + MinGW 環境に SDL2 をインストール - takaya030の備忘録

適当なフォルダを作成して、sdl2_sample.cpp を作成。sdl2_sample.cpp の内容は、上記ページのソレを使わせてもらったり。ちなみに、return (TRUE); でエラーが出たので、return (true); に変更。

Makefile を作成。上記ページのソレを参考にして、内容は以下にした。SDL_PREFIX を /mingw にしてるところが違い、だろうか。
TARGETS = sdl2_sample

all: $(TARGETS)

SDL_PREFIX  = /mingw
SDL_CONFIG  = $(SDL_PREFIX)/bin/sdl2-config
CG_LIBS     =

CROSS_COMPILE   = /mingw/bin/
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++

CFLAGS = -g -Wall `/bin/sh $(SDL_CONFIG) --cflags`
CXXFLAGS = -g -Wall `/bin/sh $(SDL_CONFIG) --cflags`
LDFLAGS = `/bin/sh $(SDL_CONFIG) --libs`    -Wl,-rpath,$(SDL_PREFIX)/lib
LIBS = -lopengl32 -lglu32 -lm

clean:
    rm -f *.o *.a *~ $(TARGETS)

sdl2_sample: sdl2_sample.o
    $(CXX) -o $@ $^ $(LDFLAGS) $(LIBS)
clean: だの sdl2_sample: だのの次の行の先頭のスペースは、タブ文字を入れておかないといかんらしい。空白スペース4つにしたら、「区切り文字がおかしいぞ」と怒られた。

make を実行。sdl2_sample.o と sdl2_sample.exe ができた。

sdl2_sample.exe を実行。ウインドウが開いて何か描画された。

とりあえずここまでの作業で、MinGW + MSYS を利用すれば SDL2 を使った何かしらをビルドすることはできる、と分かった。

mruby-sdl2 をビルドしようとするが失敗。 :

以下の mrbgem をビルドできるのか実験。

_crimsonwoods/mruby-sdl2: mrbgem to use SDL2.0

mruby のファイル一式が入ってるディレクトリをカレントディレクトリにして、build_config.rb を編集。以下を最初のほうに追加。
conf.gem :github => 'crimsonwoods/mruby-sdl2', :branch => 'master'

make を実行。エラーが出た。
$ make
ruby ./minirake
(in d:/Ruby/mruby/mruby)
CC build/mrbgems/mruby-sdl2/src/misc.c -> build/host/mrbgems/mruby-sdl2/src/misc.o
gcc: error: `sdl2-config: No such file or directory
gcc: error: unrecognized command line option '--cflags`'
gcc: error: `sdl2-config: No such file or directory
gcc: error: unrecognized command line option '--cflags`'
rake aborted!
Command Failed: [gcc -g -std=gnu99 -O3 -Wall -Werror-implicit-function-declaration -Wdeclaration-after-statement -Wwrite-strings -g3 -O0 `sdl2-config --cflags` -DMRB_DEBUG -DMRBGEM_MRUBY_SDL2_VERSION=0.0.0 -I"d:/Ruby/mruby/mruby/include" -MMD -o "d:/Ruby/mruby/mruby/build/host/mrbgems/mruby-sdl2/src/misc.o" -c "d:/Ruby/mruby/mruby/build/mrbgems/mruby-sdl2/src/misc.c"]
make: *** [all] Error 1

sdl2-config が無いと言われてるような気がする…。でも、変だな。sdl2-config は、PATHが通った場所に、ちゃんとあるように見えるけど。
$ which sdl2-config
/mingw/bin/sdl2-config
あるよなあ。おかしいな。

Windowsの場合はshebangが使えないのではないかという疑惑。 :

*NIXの世界では、shebang というものがあって。

_シバン (Unix) - Wikipedia

テキストファイルの一行目に、
#!/bin/sh
とか
#!/usr/bin/ebv ruby
と書いておくと、

「このテキストファイルは /bin/sh で動かすファイルだよ」
「このテキストファイルは /usr/bin/env ruby で見つかったファイルで動かすファイルだよ」

という指定になって、それぞれを動かすことができる ―― てな仕組みを shebang と呼ぶらしい。

sdl2-config も、一番最初の行に、
#!/bin/sh
と書いてある。だから、bash上で、いきなり sdl2-config と打っても、実行することができる。

しかし、Windows上で動く Ruby は、shebang は見てないような気がするわけで。
mieki256@hogefuga: MINGW32: ~$ ruby -v
ruby 2.2.6p396 (2016-11-15 revision 56800) [i386-mingw32]

mieki256@hogefuga: MINGW32: ~$ irb

irb(main):001:0> `echo "hoge"`
=> "\"hoge\"\n"

irb(main):002:0> `which sdl2-config`
=> "\"C:\\mingw\\MinGW\\bin\\sdl2-config\"\n"

irb(main):003:0> `sdl2-config`
Errno::ENOENT: No such file or directory - sdl2-config
        from (irb):3:in ``'
        from (irb):3
        from c:/Ruby/Ruby22/bin/irb:11:in `<main>'

irb(main):004:0> `sh sdl2-config`
Usage: sdl2-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs] [--static-libs]
=> ""

irb(main):005:0> exit

MinGW + MSYS 上で、Ruby mingw版 の irb を実行すると…。
  • `which sdl2-config` で、sdl2-config が置いてある場所を把握できていることは分かる。
  • しかし、`sdl2-config` をしても、実行できない。
  • `sh sdl2-config` なら、実行できる。
ということで、どうも shebang は見てないのではないか、そのファイルを何を使って動かすか、そこまで指定しないといかんのではないかなあ、という気がしてきたわけで。

ならば、mruby-sdl2 の、mrbgem.rake を修正して、sdl2-config の前に sh をつければ動くのだろうか。以下のように修正してみた。
MRuby::Gem::Specification.new('mruby-sdl2') do |spec|
  spec.license = 'MIT'
  spec.authors = 'crimsonwoods'

  spec.cc.flags << '`sh sdl2-config --cflags`'
  spec.linker.flags_before_libraries << '`sh sdl2-config --libs`'
end

mieki256@dorobune: MINGW32: /d/Ruby/mruby/mruby$ make
ruby ./minirake
(in d:/Ruby/mruby/mruby)
CC build/mrbgems/mruby-sdl2/src/misc.c -> build/host/mrbgems/mruby-sdl2/src/misc.o
gcc: error: `sh: No such file or directory
gcc: error: sdl2-config: No such file or directory
gcc: error: unrecognized command line option '--cflags`'
gcc: error: `sh: No such file or directory
gcc: error: sdl2-config: No such file or directory
gcc: error: unrecognized command line option '--cflags`'
rake aborted!
Command Failed: [gcc -g -std=gnu99 -O3 -Wall -Werror-implicit-function-declaration -Wdeclaration-after-statement -Wwrite-strings -g3 -O0 `sh sdl2-config --cflags` -DMRB_DEBUG -DMRBGEM_MRUBY_SDL2_VERSION=0.0.0 -I"d:/Ruby/mruby/mruby/include" -MMD -o "d:/Ruby/mruby/mruby/build/host/mrbgems/mruby-sdl2/src/misc.o" -c "d:/Ruby/mruby/mruby/build/mrbgems/mruby-sdl2/src/misc.c"]

make: *** [all] Error 1

sdl2-config のみならず、sh すら見つからないと言ってきた。うーん。

もしかして、rake だか minirake だか分からんけど、どうもソレが動いてるときは、MinGW の bin/ や MSYS の bin/ を検索できないPATH状態になっているのかな…。

直接書いてみる。 :

このあたり、要するに、sdl2-config が出力した文字列を、コンパイラだかリンカだかのオプションとして指定してる、ということだよなと。

だったら、sdl2-config を介さずに、sdl2-config が出力した文字列を、mrbgem.rake に直接書いちゃえば、ひとまずビルドが通ったりしないかと思えてきたわけで。
$ sdl2-config --cflags
-I/mingw/include/SDL2 -Dmain=SDL_main

$ sdl2-config --libs
-L/mingw/lib -lmingw32 -lSDL2main -lSDL2 -mwindows

上の出力結果を参考にして、mrbgem.rake を以下のように修正。
MRuby::Gem::Specification.new('mruby-sdl2') do |spec|
  spec.license = 'MIT'
  spec.authors = 'crimsonwoods'

  # spec.cc.flags << '`sh sdl2-config --cflags`'
  # spec.linker.flags_before_libraries << '`sh sdl2-config --libs`'
  spec.cc.flags << '-I"d:/mingw/MinGW/include/SDL2" -Dmain=SDL_main'
  spec.linker.flags_before_libraries << '-L"d:/mingw/MinGW/lib" -lmingw32 -lSDL2main -lSDL2 -mwindows'
end

これで make したら…。
mieki256@dorobune: MINGW32: /d/Ruby/mruby/mruby$ make
ruby ./minirake
(in d:/Ruby/mruby/mruby)
CC build/mrbgems/mruby-sdl2/src/misc.c -> build/host/mrbgems/mruby-sdl2/src/misc.o
d:/Ruby/mruby/mruby/build/mrbgems/mruby-sdl2/src/misc.c: In function 'mrb_sdl2_misc_buffer_initialize':
d:/Ruby/mruby/mruby/build/mrbgems/mruby-sdl2/src/misc.c:37:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
   mrb_sdl2_misc_buffer_data_t *data =
   ^~~~~~~~~~~~~~~~~~~~~~~~~~
d:/Ruby/mruby/mruby/build/mrbgems/mruby-sdl2/src/misc.c:49:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] enum mrb_vtype const arg_type = mrb_type(arg); ^~~
d:/Ruby/mruby/mruby/build/mrbgems/mruby-sdl2/src/misc.c:62:25: error: implicit declaration of function 'mrb_ary_len' [-Werror=implicit-function-declaration] mrb_int const n = mrb_ary_len(mrb, arg); ^~~~~~~~~~
... d:/Ruby/mruby/mruby/build/mrbgems/mruby-sdl2/src/misc.c:446:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] mrb_sdl2_misc_buffer_data_t *data = ^~~~~~~~~~~~~~~~~~~~~~~~~~
cc1.exe: some warnings being treated as errors rake aborted! Command Failed: [gcc -g -std=gnu99 -O3 -Wall -Werror-implicit-function-declaration -Wdeclaration-after-statement -Wwrite-strings -g3 -O0 -I"d:/mingw/MinGW/include/SDL2" -Dmain=SDL_main -DMRB_DEBUG -DMRBGEM_MRUBY_SDL2_VERSION=0.0.0 -I"d:/Ruby/mruby/mruby/include" -MMD -o "d:/Ruby/mruby/mruby/build/host/mrbgems/mruby-sdl2/src/misc.o" -c "d:/Ruby/mruby/mruby/build/mrbgems/mruby-sdl2/src/misc.c"] make: *** [all] Error 1
今までと違って、sdl2-config が見つからない等の文句は出なくなった。しかし、それでもエラーが。「mrb_ary_len なんて知らんわい」と怒られてる。

ググってみたら、mrb_ary_len は、 _mruby 1.3.0 まではあった けど、 _mruby 1.4.0 では無くなった ように見える。

ということは、mrb_ary_len() を別の何かで代替すればビルドできるようになるのかな。と思ってググってみたけど、「代わりにコレを使えや」という話は見つからず。そもそもどうして無くなったんだろう…。神様の気分かな。

ならば、mruby 1.3.0 のファイル一式を使えばビルドできるんじゃないか。 _Releases - mruby/mruby から 1.3.0 のzip をDL・解凍して、それらのファイル群を使って試してみた。

今度は「strlen なんて知らねえよ」とエラーが出た。

おかしいな…。mruby のソースの中でも strlen() って結構使われてるのに…。

mruby-sdl2 の sdl2.h に #include <string.h> を追加してみた。一応ビルドは通ったように見えた。

ビルドは通ったけど、実行してもうんともすんとも言わない mruby.exe や mirb.exe が出来上がってしまった…。なんだこりゃ…。

mruby-sdl2 を追加すると、文字の出力ができない mruby, mirb が出来上がるっぽいな…。外してビルドすると各種メッセージがちゃんと表示される…。何故。

余談。 :

mruby関係の記事をググって眺めていた際、「mruby のライブラリ作者は mruby 本体のアップデートに追従していくのが大変」という話を見かけたけれど。なるほど、こんな感じで、今までビルドできていたものがビルドできなくなっていくのかと、たかだか一例ではあるけれど、素人なりになんとなく分かったつもりになったりもして。

また、Ruby関係は、「タダ乗りさせないために積極的に改変していく」「タダ乗り連中は置いてけぼりにする」というポリシーで開発をしていると神様自ら発言しているわけで…。

_今日現在のmrubyについて雑想 - もなもなもなかのページ
_参加しないと見せないよ.を作った罪 - もなもなもなかのページ

「コレどうしてビルドできないんだ」と仮に問うてみても、「俺達についてこないライブラリ作者が悪い」と返されるのがRubyの文化、なのだろうと。

mruby + SDL2 で、love2d みたいな形でアプリを作っておけば、CRuby のバージョンが上がるたびにライブラリ側も更新する苦労を味合わなくて済むのだろうか、などと素人考えで夢想していたのだけど。mruby も mruby で、コレを使うのはなんだか大変そうだなという印象になってきたりもして。だったら、まだ、古い CRuby + ライブラリで作業してたほうがいいのかもしれないよな…。

いやまあ、love2d みたいなのが欲しければ love2d 使えばいいじゃん、lua も比較的習得しやすい言語だし、という話にもなりそうだけど。

2017/03/12() [n年前の日記]

#1 [ruby] Ruby + gosu + opengl で頂点配列とかVBOとか

_Ruby + _gosu + _opengl で、OpenGL の glBegin, glEnd を使ってポリゴンを描画する書き方は分かったけれど。頂点配列とかVBOとかを使う際の書き方が分からなかったので、そのあたりを実験。

以下の記事が分かりやすくて、とても参考になった。OpenGL って、どんどん面倒臭くなっていったのだな…。

_算譜記録帳: OpenGLでの頂点データの扱いの変化

とりあえず、結果はこんな感じに。



一応描画できてるっぽい。

頂点配列を渡すやり方。 :

前述の記事によると OpenGL 1.1 で頂点配列を渡せるようになったらしいので、まずはそこから試してみたり。以下のようなソースになった。

_gosu_opengl_11.rb

ソース中で、UVグリッドのテクスチャ画像を使ってるけど、以下で公開されてる画像を使わせてもらったり。Public Domainらしいので安心して使えます。ありがたや。

_Arahnoid/UVChecker-map: A collection of free images what can be used during unwrapping of 3D models

ちなみに、他にもヨサゲなUVグリッド画像があったりしないかとWeb上で結構探してみたものの、えてしてどれもライセンスが CC-BY だったりして。サンプルソース等に同梱したい、てな時は CC-BY は不便ではないのかと思うのだけど…。その点、上記の画像群は実にありがたい。作者様にはひたすら感謝。

さておき。とりあえず、ソース中のポイントになる部分だけメモ。「Ruby + opengl ではこう書く」みたいなところだけでも伝わればいいかなと…。

頂点配列をそのまま渡して描画する例。glDrawArrays を使う。
  # 頂点配列を渡して三角形を描画する例
  def draw_triangle
    glEnableClientState(GL_VERTEX_ARRAY)  # 頂点配列を有効化
    glEnableClientState(GL_NORMAL_ARRAY)  # 法線配列を有効化

    # 頂点配列の指定
    glVertexPointer(
                    3,  # size. 1頂点に値をいくつ使うか。x,yなら2 x,y,zなら3
                    GL_FLOAT,    # 値の型
                    0,           # stride. データの間隔。詰まってるなら0
                    @vertexs_a   # 頂点データが入った配列
                    )

    # 法線配列の指定
    # 法線は1頂点につき必ずx,y,zの3値を持っているのでsize指定は不要
    glNormalPointer(
                    GL_FLOAT,    # 値の型
                    0,           # stride
                    @normals_a   # 法線データが入った配列
                    )

    # 頂点群を渡して描画. glDrawArrays を使う
    glDrawArrays(
                 GL_TRIANGLE_STRIP,  # プリミティブの種類
                 0,                  # スタート地点
                 3                   # 頂点数
                 )

    glDisableClientState(GL_VERTEX_ARRAY)  # 頂点配列を無効化
    glDisableClientState(GL_NORMAL_ARRAY)  # 法線配列を無効化
  end

頂点配列と、頂点インデックス番号の配列を渡して描画する例。glDrawElements を使う。
  # 頂点配列とインデックス配列を渡してcubeを描画する例
  def draw_cube
    glEnableClientState(GL_VERTEX_ARRAY)         # 頂点配列を有効化
    glEnableClientState(GL_NORMAL_ARRAY)         # 法線配列を有効化
    glEnableClientState(GL_TEXTURE_COORD_ARRAY)  # uv配列を有効化

    glVertexPointer(3, GL_FLOAT, 0, @vertexs_b)  # 頂点配列の指定
    glNormalPointer(GL_FLOAT, 0, @normals_b)     # 法線配列の指定
    glTexCoordPointer(2, GL_FLOAT, 0, @uvs_b)    # uv配列の指定

    glEnable(GL_TEXTURE_2D)            # テクスチャ有効化
    id = @texinfo.tex_name
    glBindTexture(GL_TEXTURE_2D, id)   # テクスチャ割り当て

    # インデックス配列を渡して描画. glDrawElements を使う
    glDrawElements(
                   GL_QUADS,           # プリミティブ種類
                   @indices_b.size,    # インデックス数
                   GL_UNSIGNED_SHORT,  # インデックスの型
                   @indices_b          # 頂点インデックスの配列
                   )

    glDisable(GL_TEXTURE_2D)           # テクスチャ無効化

    # 頂点配列、法線配列、uv配列を無効化
    glDisableClientState(GL_VERTEX_ARRAY)
    glDisableClientState(GL_NORMAL_ARRAY)
    glDisableClientState(GL_TEXTURE_COORD_ARRAY)
  end

ところで。頂点インデックス配列、法線インデックス配列、uvインデックス配列を別々に渡せないっぽいあたりで首を捻ったり。

頂点を共有できれば扱うデータ数は少なくなるわけだけど…。頂点座標、法線ベクトル、uv座標の全てが他の頂点とピッタリ一致することってまず無いので、つまり各頂点が共有される場面なんてほとんどあり得なくて、結局はずらずらと重複値を並べていくことになるわけで。これじゃわざわざインデックスを使う意味ねえなと思いました。

いや、待て。自分の書いたソースは四角形で描画してるからそうなっちゃうのか。これがもし、全部三角形で描画するとなれば、一つの四角形を二つの三角形で表現することになるから、共有可能な頂点が結構出てくる、のかな。であれば、インデックスを使う意味があるか…。

VBOを使うやり方。 :

前述の、頂点配列を渡して描画するやり方は、頂点データがメインメモリ上に載ってるので、ちと処理が遅いらしくて。

GPUが管理してるメモリ(VRAM?)上にそれらデータを置けたら処理を速くできるんじゃね? そっちにデータを置いちゃおうぜ! てのがVBO(Vertex Buffer Object)、らしいです。それが OpenGL 1.5 あたりから使えるようになった、と。

ということで、ソースは以下。

_gosu_opengl_15.rb

ポイントになるところをメモ。
    # VBOを作成

    # 頂点、法線、uv、インデックス用に、4つのバッファを生成
    @buffers = glGenBuffers(4)

    # 頂点群
    glBindBuffer(GL_ARRAY_BUFFER, @buffers[0])  # バッファの種類を設定
    vtx = @vtx_b.pack("f*")
    glBufferData(GL_ARRAY_BUFFER, vtx.size, vtx, GL_STATIC_DRAW)

    # 法線群
    glBindBuffer(GL_ARRAY_BUFFER, @buffers[1])
    nml = @nml_b.pack("f*")
    glBufferData(GL_ARRAY_BUFFER, nml.size, nml, GL_STATIC_DRAW)

    # uv群
    glBindBuffer(GL_ARRAY_BUFFER, @buffers[2])
    uv = @uvs_b.pack("f*")
    glBufferData(GL_ARRAY_BUFFER, uv.size, uv, GL_STATIC_DRAW)

    # インデックス群。他と違って GL_ELEMENT_ARRAY_BUFFER を指定してることに注意
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, @buffers[3])
    face = @face_b.pack("S*")
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, face.size, face, GL_STATIC_DRAW)
  • Ruby上では、配列を作って、ソレを pack して渡すことで VBO が作れるらしい。
  • 頂点群、法線群、uv群は GL_ARRAY_BUFFER を指定するけど、インデックス群は他と違って GL_ELEMENT_ARRAY_BUFFER を指定する。
  • VBOは毎フレーム作らなくてもいいらしい。初期化処理時に一度作って、毎フレーム使い回す模様。
ちなみに、2番目の、GL_ELEMENT_ARRAY_BUFFER を指定するあたりに気づかなくてハマりました…。

描画は以下のような感じ。
  # VBOを使ってcubeを描画
  def draw_cube
    # バッファのデータと関連付け
    glEnableClientState(GL_VERTEX_ARRAY)         # 頂点配列を有効化
    glEnableClientState(GL_NORMAL_ARRAY)         # 法線配列を有効化
    glEnableClientState(GL_TEXTURE_COORD_ARRAY)  # uv配列を有効化

    # 頂点配列を関連付け
    glBindBuffer(GL_ARRAY_BUFFER, @buffers[0])
    glVertexPointer(3, GL_FLOAT, 0, 0)

    # 法線配列を関連付け
    glBindBuffer(GL_ARRAY_BUFFER, @buffers[1])
    glNormalPointer(GL_FLOAT, 0, 0)

    # uv配列を関連付け
    glBindBuffer(GL_ARRAY_BUFFER, @buffers[2])
    glTexCoordPointer(2, GL_FLOAT, 0, 0)

    # インデックス配列を関連付け
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, @buffers[3])

    glEnable(GL_TEXTURE_2D)                          # テクスチャ有効化
    glBindTexture(GL_TEXTURE_2D, @texinfo.tex_name)  # テクスチャ割り当て

    # 描画
    glDrawElements(
                   GL_QUADS,              # プリミティブ種類
                   @face_b.size,          # インデックスの個数
                   GL_UNSIGNED_SHORT,     # インデックスの型
                   0                      # バッファオフセット
                   )

    glDisable(GL_TEXTURE_2D)  # テクスチャ無効化

    # 頂点配列、法線配列、uv配列を無効化
    glDisableClientState(GL_VERTEX_ARRAY)
    glDisableClientState(GL_NORMAL_ARRAY)
    glDisableClientState(GL_TEXTURE_COORD_ARRAY)

    # バッファを削除
    # glDeleteBuffers(@buffers)
  end

「使い終わったらバッファを削除せよ」と、その手の説明ページには書いてあったのだけど。C++での書き方は載ってるものの、Ruby でどう書けばいいのかが分からなくて。こういう書き方でいいのだろうか…?

「使い終わったら」の意味もちょっと不明で。毎フレーム、描画が終わったタイミングで削除しないといかんのかなと試してみたら異常終了するようになってしまって。いや、次回のフレームでも描画に使うんだから当たり前だろうけど。「もう、このデータを使って描画する機会は今後無い」という状態ならバッファを削除せよ、という話なのかも。

参考ページ。 :

#2 [ruby] Rubyでsizeofを得るのってどうやるんだろう

C言語系ではsizeofてのがあって、型や変数のメモリサイズを取得することができるのだけど。

_sizeof演算子
_sizeof演算子について - Qiita

Ruby でそういうことをしたいなら、何を使えばいいのだろう…。OpenGL でオフセット等を指定したい時に、float(C言語で言うところのfloat) はバイトサイズで何バイトか、てなあたりを知りたいわけですよ。バイナリデータにするのは pack を使えばいいらしいけど…。

例えばだけど。
  nf = [0.0].pack("f*").size
こういうことをして調べられなくはない。けど、他にもっとスッキリした書き方がありそうな。

2016/03/12() [n年前の日記]

#1 [prog][cg_tools] タータン模様のパターン画像を生成するツールをProcessingで書いてみた

タータン模様のパターン画像を生成するツールを _Processing で作成してみたり。こんな感じ。

m256_tartan_image_maker_ss.gif
単純計算で、(640/2)^2 = 102400通りのパターンが生成できる…はず。

ちょっとマウスカーソルを動かしただけでパターンが変わってしまうので、なんというか…「一期一会」ライクなツールになったというか。

試しに _JavaScript版 も置いてみます。激重、かつ、画像保存はできませんが。ちなみにJava版は比較的軽いです。

ソースとバイナリ。 :

ソースは以下。

_m256_tartan_image_maker.pde

Windows用の実行バイナリは以下。解凍して application.windows32\m256_tartan_image_maker.exe を実行すれば動くはず。

_m256_tartan_image_maker_20160313.zip (67MB)
_m256_tartan_image_maker_20160312.zip (67MB)

その他。 :

  • ライセンスは CC0 / Public Domain ってことで。
  • Windows10 + Processing 3.0.2 で動作確認しました。

課題。 :

できればハッチング・斜め線で塗り潰すように線を描きたいけれど、縦と横の線が重なったところを濃くするためのドットパターンをどうしたものかと。市松模様なら簡単だけど、それではハッチングに見えないだろうし。

余談。 :

IIS経由でProcessing.jsが動かなくて首を捻ったり。

「MIMEの種類」で、.pde に text/plain を割り当てたら動いてくれた。とメモ。

2016/03/13追記。 :

ハッチングで線を塗り潰す処理を追加できたのでソースとバイナリを更新してみたり。

#2 [prog] Processingで反転描画

Processing で画像を反転描画する方法を調べてたり。scale()を使えばできるらしいけど…。

こんな感じかな…。

sketch_image_flip_ss.png

_sketch_image_flip.pde
// 反転描画のテスト

PGraphics pg;

void setup() {
  size(256, 256);
  
  // 元画像作成
  pg = createGraphics(64, 64);
  
  pg.beginDraw();
  pg.background(128);
  pg.stroke(255);
  pg.line(48, 16, 48, 56);
  pg.line(16, 48, 56, 48);
  pg.endDraw();
}

void draw() {
  // 左上に元画像を描画
  image(pg, 0, 0);

  // 右上を描画。x方向を反転
  scale(-1, 1);
  image(pg, -pg.width * 2, 0);
  
  // 右下を描画。x方向に加えてy方向も反転
  scale(1, -1);
  image(pg, -pg.width * 2, -pg.height * 2);
  
  // 左下を描画。x方向を元に戻してy方向だけ反転してる状態に
  scale(-1, 1);
  image(pg, 0, -pg.height * 2);
  
  // y方向も元に戻す
  scale(1, -1);
  image(pg, pg.width * 2, pg.height * 2);
}

参考ページ。

_画像処理の原理 | Yasushi Noguchi Class
_画像の左右反転 | Codetter(こーどったー)β

これだけでは解決しなかった。 :

blend() という、乗算やスクリーンで描画する機能を使いながら反転表示したかったのだけど。どうやら blend() には、scale() 設定は反映されないようで。残念。

仕方ないので、手元で書いてるソースでは、元画像のピクセル値をコピーして反転描画する感じで解決したり。

#3 [anime][movie] 「モンスターズユニバーシティ」を視聴

TV放映されてたので見てみたり。おそらく初見、だったはず。

相変わらず、素晴らしいとしか…。これでハッピーエンドかなと思ったところからひっくり返すあたりで唸ってしまったり。そこに至るまでにちゃんと伏線を張ってあるあたりがさすがというか。そして、さらに落として、また盛り上げて、でも…と持ってきてそこから少しずつステップアップさせるあたりが…。

中盤、「共通点を探すんだ」のシーンの台詞・やり取りが、また上手い。要は「世界に一つだけの花」のソレを違うやり取りで伝えてるわけだけど。こういうシーンがあると、作品の印象が全然変わってくるよなと。

考えてみれば、「怖がらせる」とか「楽しませる」というのは映画の基本というか満たしてなければいけない部分なわけで。この作品に出てくるモンスター達は、娯楽コンテンツ制作に携わりたいと夢を持っている若者達の比喩としても捉えることができたりするのかもしれないよなと。

なんだか色々と考えてしまう場面がたくさん盛り込んである、面白い映画・脚本だなと…。素晴らしい。

#4 [anime][neta] 人類冬眠計画

夢の中でなんだか気になるキーワードを目にしたのでメモ。「人類冬ごもり計画」「人類越冬計画」「人類冬眠計画」とかなんとか。

目が覚めてから、もやもやと妄想。たぶん、こういう設定なんだろうと…。

近未来、人類が地球を汚染し過ぎて、地球上では人類が生きていけない状態になってしまった。しかし、コンピュータのシミュレーションで、何千年〜何十万年すれば環境が変わって、人類が生きていける状態に戻りそうだと分かる。

それまで人類はどうしたらいいのか。ここはコールドスリープ・冷凍睡眠をして、その時が来るまで待つことにしよう。これが「人類冬眠計画」の始まりである。

だが、地球上の全人口をコールドスリープさせる予算も時間もない。また、せっかく復活した環境に対して、再度やらかしてしまう連中まで眠らせてしまったら元の木阿弥。ここはやはり、未来を託すに値する、高度な意識を持った人々を選出せねばなるまい。「選ばれた民」だけを眠らせる必要があるのだ。

「選ばれなかった民」は…。もし、「選ばれなかった民」が、「選ばれた民」の眠りを妨害してしまったら、もはや人類の未来は無い。計画の障害となりそうな要因は、事前に排除せねばならぬ。つまり…。

彼等の死は無駄ではないのだ。人類が生き残るために必要な礎なのである。さあ、どんどん障害を消去しよう。人類の未来のためだ。

悪の組織、誕生。

と、ここまで書いて気づいたけど。これって ナウシカ(原作版)じゃないのか。パクリかよ。

つまり、あの作品のはるか昔を妄想すれば、そこにはおそらく「悪の組織」が存在しているはずだよなと。そして、「悪の組織」が存在していたということは、その計画に反抗する「正義のヒーロー」だって存在していた可能性が高いよなと。

要するに、「やめろ、ショッカー! 貴様等の悪行、許すわけにはいかん!」「ええい。おのれ、仮面ライダー! またしても我々の計画を邪魔しおって!」的な光景が、 ナウシカの大昔には存在していた可能性があるわけですよ。

逆に言うと、悪の組織が大勝利を収め、それから何千年〜何十万年経った未来において、正義のヒーローに守ってもらえるはずだったけど結局守ってもらえなかった人々は、こんな生活を送ってました、てなあたりを描いていたという点で、アレは結構変わった漫画作品だったと言えるのかもしれないよなと。フツーは「ヒーロー」と「悪の組織」がすったもんだするあたりを描きそうなものなのに、そこはスルーしちゃって、そこから遠い未来のすったもんだを描いてたわけで。

と言っても、悪の組織が勝利した世界を描いてる作品は、ちょこちょこあったりしますけど。仮面ライダー555劇場版とか。オリジナル版キャシャーンとか。レイズナーとか。記憶が定かじゃないけど、ザブングルもソレじゃないかしら。

ザブングルって、今になって考えてみると、 ナウシカの設定と似てますな…。いや、どちらも、宇宙戦艦ヤマト小説版のその後を描いてる感じの設定、と捉えることもできなくもないのかな。

それはさておき。メジャー作品の、はるか過去、もしくは遠い未来を妄想していくと、またちょっと変わった設定に辿り着けたりもするのかな、などと思えてきたりもして。 ナウシカに繋がる予定の仮面ライダーとか、ちょっと面白そうじゃないですか。でもないか。

国会中継も面白そう。 :

おそらくそういった計画になると、国が主導してやりそうな気もするわけで。となると、国会中継でそういうやり取りが見られるかもしれない。

野党議員 「選出されなかった有権者に対して、これはあまりに非人道的な対策ではないのですか! こんなことが許されていいのですか! そこのところどうお考えなのか総理の考えをお聞かせ願いたい。総理、お答えください」
議長 「ナイカクソーリダイジーン」
総理 「今の質問の中で非人道的という発言がありましたが、それは全くの誤解であります。そもそも我が国の憲法においては基本的人権の尊重を謳っておりまして(以下略)」
国会のヤジ 「詭弁だ!」「テキトーなこと言ってんじゃない!」

延々と国会の質疑応答だけでSF的シチュエーションが粛々と進んでいく漫画、とかどうかなと…。ダメか。台詞考えるのが大変そう。

こういう展開もあるよなと。 :

ちなみに、人類冬眠計画がすんなり進んでしまったとしても、別の展開もあり得るよなと。

「選ばれた民」が眠りに入ったその後、悪の組織の魔の手から命からがら逃げることができた「選ばれなかった民」は、細々と生き永らえていたのだけど。そのうち、コスモクリーナーDを発明しちゃう。地球、キレイキレイ。そして人類は、ますます文明を発展させて…。

「そういやさあ。ココに眠ってる人達居るけど、コレどうすべ? 起こしてやったほうがいいかな?」
「なんだか可哀想だから、そのまま寝かせといてやろうよ。別に寝たままでも俺達困らないし」
「それもそうか」

何十万年経って、目を覚ます「選ばれた民」。おそらく地球は、一面緑の惑星に戻ってるはずだ。そこで我々は人類文明を再構築していくのだ。我々が新世界のリーダーである。我々の働きに人類存亡の命運がかかっているのだ…。意気揚々と外に出てみる「選ばれた民」。しかし、そこには…。

てな感じの漫画を、藤子F先生やゆうきまさみ先生が描いてたような気がします。人類が移住できる惑星を探しに、コールドスリープで長い旅を続ける宇宙飛行士。家族、恋人、友人達と別れて、たった一人で遠い未来へと旅立たねばならない。しかし自分が、人類の未来を作るのだ…。などと思っていたのに、惑星に辿り着いてみると…。その時の宇宙飛行士の気持ちを想像すると、もうね…。

ついさっき、「コレ、 ナウシカじゃん」って気づいた時、その宇宙飛行士の気持ちが、ちょっと分かったような気分に…。何でもそうだけど、えてして必ず先行者が居るもので。 *1

先行者。 :

そういえば…。漫画家さんが「いいアイデア思いついた!」と喜んでからしばらくして、「アレ? コレって手塚作品のアレじゃん」「なんてこった。手塚先生が既に開拓していたじゃねえか」と気が付いてガックリ、なんて話をどこかで聞いた記憶があるのですけど。時空を超えてあなたは一体何度 ―― 我々の前に立ちはだかってくるというのだ!! 手塚先生!!! (ドン)、みたいな。まあ、手塚先生のことだから「君の漫画、僕にも描けますよ」「というか昔ソレ描きましたよ?」とか雲の上から笑顔で言ってきそうだけど。チクショウ。漫画の神様には敵わねえなあ。

開拓者になれそうと思ってたら、実は先行者が居た、なんてのはよくあることですが。そこから話が作れないかなと…。

図書館の本をひたすら読みまくるのが趣味の少女が、ある日、不思議なことに気が付く。本の貸し出しカードで、必ず見かける名前がある。コイツ、何者だ…。何故こうまで、自分の趣味と一致した本を、コイツも借りてやがるのだ…。ってソレ、 「耳すま」じゃねえか。またパクリか。

アレは少年が色々画策してそういう状況を作ってたけど。ナチュラルに、主人公にとっての先行者になってる人物が存在していたとしたら、ソイツは何者なんだろう、主人公とどういう関係が、てな話にもなるのかなと…。 「耳すま」とは全然似てないオカルト設定・ホラー作品が作れそうな気がしないでもないです。

手塚先生のソレも、少し捻ると…。実は手塚先生がタイムトラベラーで、未来の漫画からネタをバンバン拝借していたという設定は、ってソレ、ドラえもんであったな…。タイムマシンで未来の漫画を…。すると最初にネタを考え出したのは一体誰なんだという謎が…。

うむ。コールドスリープネタから随分遠いところに来てしまった。

*1: あらゆる妄想は、えてして無意識に元ネタをなぞってるだけ、だったりするんだよなあ…。

2015/03/12(木) [n年前の日記]

#1 [pc] 録画用PCの時刻が盛大にずれてた

ふと気が付いたら、録画用PCの時刻がかなり遅れていて。録画したファイルのほとんどが、冒頭が切れてる・録画できてない状態になってた。トホ。

録画用PCは自宅サーバのntpdにアクセスして時刻合わせをするようにしてあったけど。どうも長い間、自宅サーバの ntpd がクライアントと通信できない状態になってたようで。メインPCも自宅サーバにアクセスして時刻合わせをするようにしていたので、そちらも時間が合ってなかった。
自宅サーバ側(Vine Linux 6.x)を確認してみたところ、ntpd は起動してた。ただ、おそらくは /etc/ntp.conf の記述が、いつからか分からんけど、ずっと間違ってたらしい。ググってみたら、 _EndRun FAQ NTPサーバ タイムサーバ よくある質問と回答集 に、おそらく原因らしき指定の記述を発見。
notrust

暗号認証されない限り,指定したホストを時刻同期のためのサーバとして扱わず,またV2.6以降ではクライエントからの問い合わせにも答えません.
( RFS v2.6 以降に採用された ntpd Ver 4.2 以降と,それ以前のRFSが持つ ntpd Ver 4.1 では notrust の意味が異なります.
ntpd Ver 4.1 以前 notrust は "このホストなりサブネットの時刻は信用するな" の意味です.
ntpd Ver 4.2 以降 notrust は "暗号化認証されていないすべてのNTPパケットを無視しろ"です.これによりリモートなタイムサーバはこのクライエント側タイムサーバと認証を取ろうとします. )

EndRun FAQ NTPサーバ タイムサーバ よくある質問と回答集 より

なるほど、昔の設定をそのまま使ってたので、notrust を指定したままでしたわ…。

そのあたりを見直して、/etc/ntp.conf を修正・保存してから、ntpd を再起動。
/etc/rc.d/init.d/ntpd stop
/etc/rc.d/init.d/ntpd start
アクセスできるようになった。

#2 [linux] vimの色を変更

Linux機上で vi(vim) を使った際、ビジュアル選択(行選択? Shift + Vキーを押すと出来るヤツ)をすると、文字色と背景色がどちらも白になって書いてある文字が読めないことに気が付いた。colorscheme とやらを変更して対処。~/.vimrc に、colorscheme koehler を追加。

以下のページを参考にして指定しました。ありがたや。

_デフォルトでインストールされている ・ 名無しのvim使い
_Vim のカラースキーマを変更する | yuichon - WordPress Blog
_半透明でも見やすいかもしれないvim color scheme - Qiita

2014/03/12(水) [n年前の日記]

#1 [dxruby] DXRuby 1.4.1が公開されたらしい

_Project DXRuby

細かいバグが修正されてる+色々な機能が追加された、DXRuby 1.4.1安定版が公開されたらしいので、早速DLしてインストール。ありがたや。

DXRuby 1.4.0 で気になってた、フルスクリーン表示時のバグが ―― 一部のPC上ではフルスクリーン表示をすると画面が点滅してしまう問題が解決していて一安心。メインPC(NVIDIA GeForec 9800GT)でも、サブPC(AMD 785G)でも、フルスクリーン表示ができました。

ただ、フルスクリーン表示をすると、CPU使用率が100%以上になってしまう…。フルスクリーン表示時は Window.getLoad が変な値を返す、みたいな仕様だったかしら? 記憶が怪しい…。 *1

Sprite#offset_sync がありがたい気がしたり。これで一々、自分で draw 内を書かなくて済む…。ありがたや…。

3D Visionでちと悩んだり。 :

最初、NVIDIA GeForce 9800GT上でフルスクリーン表示にならなくて悩んだのだけど。3D Vision が有効になってたせいだと気づいて一安心。無効にしたらちゃんとフルスクリーン表示できました。

自分、偏光方式の3D対応ディスプレイを使ってるので、3D Vision 有効、かつ、フルスクリーン表示をしてしまうと、1ライン毎に偏光フィルタで左右に分けてる意味がなくなるわけで。その際の画面モード時は、わざわざ dot by dot 表示に設定していたことを忘れてました…。表示がおかしい時は 3D Vision 設定を確認すべし、と覚えておかないといかんなー、と。

*1: スプライト等の動きがガクガクしてるようには見えないので、CPU使用率だけが変な値になってるのではと想像してますが…。まあ、開発中以外はCPU使用率の表示なんてしないだろうから、若干気にはなるけど、致命的な問題にはならない予感も。

#2 [nitijyou] まだcssを弄ってたり

もっとガラリとレイアウトを変えたほうがいいのかな、とか思いながらチマチマ変更して、うーん、と唸ってる状態。

デザインに関する知識・手管が圧倒的に足りてないのだろうなと。興味はあっても、ソレを専門に勉強してきたわけでもないし。下手の横好き状態だし。

2013/03/12(火) [n年前の日記]

#1 [cg_tools] blender勉強中

勉強中。

ブーリアン。 :

ブーリアンの結果が期待したソレにならないと思って調べてたのだけど。単に順番を間違えてたっぽい。「○」から「□」を引いて、「()」を作りたかったわけだけど。「○」を選んだ状態で、モディファイア → ブーリアンを選んでたのがマズかった。「□」を選んで、モディファイア → ブーリアンをして、「○」を選択したらあっさり求めるソレが。そういうオチでしたか…。

「○」はスクリューモディファイアで作れるし、ベベルもモディファイアでかけられるし。実は blender で作業するのが一番簡単かも。いや、Metasequoia で作業するのも簡単だけど。一番面倒なのは Shade だったような印象が。

でもまあ、Shade の自由曲面は、後からポリゴンの分割数を変更できるというメリットが。と思ったが、ポリゴン系モデリングソフトも、サブディビジョンサーフェスを積極的に使えばそのへんどうにかなるのかな…?

IBL用HDRI画像。 :

自分で作れないかなと思って調べてたけど、どうもどこかで見た撮影方法だなと。

以前、 _Cubic VR に興味がわいて調べたことがあったけど。そのやり方が流用できそうな気がしてきたり。ミラーボール使ったり魚眼レンズ使ったりして撮影するところはたぶん同じだろうと。ただ、露出の異なる写真を複数枚撮影しないといかんのが面倒。なんでもイイ感じに自動でやってくるコンパクトデジカメでは、ちと難しい気がしてきた。

一発で、360度全方向を露出を変えてIBL用の画像を撮影できる機材、とかないのかな。そういうのがあったら、実写映像との合成が要求されるCG業界では重宝されると思うんだけど。いや、たぶんどこかで、結構なお値段で既に出てたりするんだろうけど。

Shadeも勉強中。 :

Shade で mqo をインポートできるプラグインに遭遇したので試してみたのだけど、さっぱり読み込んでくれなくて悩む。

mqo のバージョンが、2.2互換じゃないと読み込まないらしい。ずっと 3.x以降の mqo で読み込もうとしてた…。

2012/03/12(月) [n年前の日記]

#1 [javascript] enchant.jsを勉強中

勉強中というか、サンプルをコピペしてるだけのような気もするけど。

2011/03/12() [n年前の日記]

#1 [nitijyou] 地震後の片付け

この記事は2011/03/15に当時を思い出しつつ書き残しています。

余震が何度もあってほとんど眠れなかった。

とりあえず片付け。1階は、11日の時点で、夜11:00ぐらいまで作業してある程度は片付けできた。2階については、妹の部屋は被害がそれほどでもなかったが、とにかく自分の部屋が…。

親父さんとお袋さんに手伝ってもらって、本棚と洋服箪笥は立てた。手当たり次第に中身を突っ込んで空きスペースの確保を。21インチブラウン管の下にネットブックが転がっているのを発見。傷だらけだが、見た目は無事っぽいように見える。また余震が来て完全に破壊されないよう、階下に持っていった。後で電源を入れてみたが動いてくれた。

ブラウン管TVも、画面が割れてはいなかった。電源を入れたら映ってくれた。NHKのニュースを流しっぱなしにしながら作業。何度も緊急地震警報が流れたような気がする。その都度出口付近に逃げて様子見。

液晶ディスプレイはPCラックの向こう側に、スキャナと一緒に落ちていた。画面は、割れてはいなかったが、大きな傷はついているように見える。

2階の自室は布団を引ける状態ではないので、自分だけ茶の間で寝ることに。

2010/03/12(金) [n年前の日記]

#1 [prog] Microsoft Small Basicの補完機能は素晴らしい

以下の点で素晴らしい。 あらゆるエディタは、いや、Office製品の類も、この補完機能をパクるべきだと思えたり。

補完候補が自動で表示されることに対して、処理速度の低下、負荷増大を気にする人も居そうではあるけれど。GHzクラスのCPUにGB単位のメモリを積んでいる今時の環境で、人間様が逐一キーを押して「補完しろ」と指示を出すなど実に馬鹿げているなと。Small Basic のやり方のほうが正しい。このやり方のほうが便利で快適。全てのプログラマーは、一度でいいから Small Basic の補完機能を触ってみたほうがいいのではないかとすら思える。

#2 [prog] HSP3.2をインストールしてみたり

MS Small Basic は学習用の言語・環境ということだけど。そういう目的であれば、やはりHSPと比較せねばなるまいと思えてきた。試しにHSP3.2をインストール。

少し触ってみたけれど。サンプルの豊富さ、ドキュメントの多さ、パッと見で楽しそうに見えるかどうかという点では、HSPはさすがだなと。言語仕様がどうとか、そういう話じゃないんだよな…。

2009/03/12(木) [n年前の日記]

#1 [nitijyou] 出かけようと思ってたのだけど

なんだか面倒くさくなってきた。うーん。

Amazonにプリンタを注文してるので、お金を払ってこないといかんのだけど。

2008/03/12(水) [n年前の日記]

#1 [python] pythonのスレッド関係を調べてた

重い処理をしてる間にプログレスバーを表示して処理がどこまで進んだかを情報提示したい。

重い処理の中で、直接、 wxPythonのプログレスバーダイアログの描画アップデートを呼べれば表示は簡単なのだろうけど。元々該当処理はコマンドライン上で動かすスクリプトのソレだし、ファイルを別に分けて使い回しができるようにしたいので、該当処理の中に直接そういった処理を記述したくはないわけで。

つまりは、何か重い処理をひたすらやってる奴が居て、ソイツの作業の進み具合を別の何かが覗き見して画面表示する、ということにしたい。となると並列処理だよなと。スレッドを発生させて、そいつが重い処理をしてるのをメインのヤツがチェックして、という感じになるのかなと。わからんけど。

コマンドライン上で動くテストスクリプトを作成。ソイツからスレッド発生・重い処理をするクラスメソッドを呼ぶ、てな感じの動作を試してみたり。なんとかうまくいったように見える。重い処理をしてるソレが、ループを繰り返すべきかフラグをチェックして動くのが、どうも汚らしい感もあるけれど。

#2 [iappli] 修正要求が届いた

相手先の担当者が体調を崩して関連作業がストップしてたということらしく、画像、サウンドデータ、ヘルプ文章、仕様書を急いで送れとの話がきた。それと同時に、修正要求がまとめられたExcelファイルも届いた。

画像とサウンドデータとヘルプ文章をzipにして相手先サーバにアップロード。メールでその旨連絡。

仕様書も作成して送らないといけないのだろうけど、修正要求に対応したら仕様書の内容も変わるわけで、作業効率を考えたらプログラムや画像の修正をしてから仕様書を作成したほうがいいのだろうし。ということで、まずはプログラム修正にとりかかったり。

企画に携わってる各々が持つユーザ像が違ってる予感。 :

修正要求の中に、とあるキャラがとある画面で2人分表示されていて不自然だから修正しろ、という項目が。

うーん。オリジナル・原作となったコンテンツの映像自体にキャラが2人分表示されていて、それを忠実に、不自然さまで含めて、意図的に再現を試みたからこそ、そうなってるんだけどなあ。要求を出してきた相手は、原作の映像データ等、ちゃんとチェックした上で要求を出してるのだろうか。それとも、原作でそうなってることは把握してるけど、それはそれとして今企画を単独コンテンツとして扱ってるが故の修正要求なんだろうか。

自分は、プレイするユーザ像に関し、原作にハマった人じゃないとそもそもこういったアプリをプレイしないんじゃないか、という想像をしていて。であれば、原作のアレコレに似せられるところはできるだけ似せたほうがいいのでは、と思ってるのだけど。たぶん「うわ、こんなとこまで再現せんでもええやろ(笑)」と喜んでもらえるんじゃないの、みたいな。でも、相手先はまったく違うユーザ像を念頭においてるのかもしれない、という気がしてきた。

まあ、こういったことを相手先に説明するのも面倒なんで、というか自分が説明できる位置に居るわけでもないので、要求どおりにさっさとプログラムを修正。若干釈然としないところもあるけれど、考えてみれば、多数の関連商品を発表してきている相手先のほうが、正確なユーザ像を掴んでるはずだし。その相手先が「直せ」と言ってるんだから、そのとおりに直したほうがより良い状況に繋がっていくはずだわな。みたいな。ということで、言われたとおりにガンガン直すよー。

2007/03/12(月) [n年前の日記]

#1 [anime] _昭和40年代アニメ世界手塚治虫先生との思い出と - 虫プロのエピソード紹介blog

NHKで _ラストメッセージ - 「こどもたちへ 漫画家・手塚治虫」 の再放送が流れていて、興味が湧いてアレコレ検索していたら辿りついたわけでありまして。トイレ窓侵入事件のような小さな(?)事件から、全てのフィルム資産がフジテレビに持ってかれそうになった大きな事件まで、ありとあらゆる話が。素晴らしい。これは貴重な資料。

#2 [zatta] _Kojii.net - Opinion : "ライト" バージョンの誘惑と罠 (2004/12/20)

F-16の話を読んで、Firefoxが脳裏に。 _(via 家電のUIは時代遅れなのだろうか)

#3 [windows] _「MS Wordなかったら、パソコンの意味なーいじゃーん」っていう、アンガールズの発言

_アナウンサールーム - 小話。

まあ、Word Viewer (無料) とか OpenOffice (無料) とか _キングソフトオフィス (3,480円) とかあるから開くのはどうにでもなるんだが。ってそういう問題ではないのか。…とりあえず芸能界ではWord文書がデファクトスタンダードなのだな。たぶん。

脚本ってWordだと書きやすいのかしら。実はマクロ等使って整形が効率化されたりとか。脚本用テンプレートが普及してるとか。…アニメ業界もWordで脚本を書いたりしてるのだろうか。

#4 [pc] _HDTVと組み合わせて利用することを前提としたリビング向けPC - 富士通「FMV-TEO」

MSXの夢が再び。というわけでもないか。

この記事へのツッコミ

リビング向けPC - 富士通「FMV-TEO」 by がんした    2007/03/22 00:04
PC-9821シリーズの夢が再び。というわけでもないだろう。
http://121ware.com/navigate/learn/pcmuseum/97_c200.html
NECって意欲的だったのですな by mieki256    2007/03/24 14:03
> CEREB

なんか名前がアレですな…。

考えてみたら、TVとPCの組み合わせでリビングを狙うのは
ダメなんじゃないかという気がしてきました。
子供がONE PIECEを見たいとき、
お父さんが野球中継を見たいとき、
お母さんが韓国ドラマを見たいとき…PC使ったら顰蹙モノ。
リビングじゃなくて、子供部屋、書斎、台所を狙ったほうがまだ良さそう。
WORLD PC EXPO 98で「インターネット冷蔵庫」登場! by がんした    2007/03/24 23:39
シャープの夢が再び。というわけでもないだろう。
http://internet.watch.impress.co.jp/www/article/981001/wpce.htm

#5 [zatta] _「難しい本を読める」という文化資本を持った人は、本を読まない人、読む時間・理由・動機・習慣等々がない人、本を読めない人がいることを、しばしば視野の外に置く。

デジタルデバイドの件が脳裏に浮かんだ。 _(via あけてくれ)

#6 [jiji] _わずか2万人足らずの女性の強制連行ばかり話題になって、それよりはるかに多かった男性の強制労働がほとんど論じられないのは、この問題に関心が集まる原因が(正義を装った)性的好奇心であることを示しています。

なるほど、それもそうだよな…。

#7 [anime] _GyaO、森薫原作のテレビアニメ「英國戀物語 エマ」全12話を配信

_GyaO、CGアニメ「The World of GOLDEN EGGS シーズン1」を配信

メモ。

#8 [nitijyou] KTからチラシファイルが届いた

2ファイルほど。チラシページを作らないと。

2006/03/12() [n年前の日記]

#1 [iappli] アイテム作成中

敵OBJから、ポトンと真下に落とすようにしてみたけれど、もっとアグレッシブに動かしたほうがいいのかしら。画面の中でバウンドするとか。…それもそれで取りにくいよな。

NullPointerでハマる。 :

起動するとNullPointerがどうとか出て落ちてしまう。数時間ハマり。てっきりhttpアクセスのところでバグを入れたのかと思い込んでたけど、paint() の中に追加した処理が、初期化してない変数を参照してたのが原因だった。トホホ。予想と違う場所が原因だったりすると、なんだかガックリくるもので。

文字表示関係を作成。 :

文字用GIFの中から選んで表示する、ところで詰まる。String から Byte に、byte[] b = strring_text.getBytes() で変換して。byte[] list = {'D',0,0, 'G',1,0 } といったテーブルとループで比較。該当文字が見つかったら座標値を算出して、とやってたつもりが表示されない。

座標値算出時に、x と y に入れなきゃいけないところを、x に2回代入してた。行コピーを多用してるので、書き直すのを忘れたっぽい。>自分。

さておき、表示する文字列が決まってるなら、事前に変換して byte[] で持っておいたほうがいいんだよな。ゲーム中に、毎フレーム、ループで検索しなおす必要はない。けど、面倒だから、処理が重くなってきたら、そのとき対策することにしよう。<なんか忘れそうではあるが。

あるいは、A〜Z 分のテーブルを持ってしまえば、一々検索しなくても、ASCIIコードを使ってインデックス値を求められる。が、用意された文字自体は少ないので、それはそれでテーブルが無駄に容量を取りそうな予感も。といっても、26文字 x 2 = 52 byte か…。

#2 [digital][nitijyou] HDDレコーダを買うと、撮るだけ撮って見なくなりますな

今まではテープに毎週上書きしてたから、「消化しておかないと、テープを上書き利用できない」と思って毎週各番組を見てたのだけど。HDDレコーダ導入後、「容量的には数週間分入るから、後でそのうち見よう」と意識が変わってしまったかもしれず。…なんかそのうち、撮ったはいいけど見なくなりそうな予感。

自分の好きなときにいつでも見れるのはグッドなんだけどな。テープは、巻き戻しとか録画位置を意識しないといけないけど、HDDレコーダはそういうのがまったく無いし。画質に関しても、テープの3倍録画とは比較にならない画質なので、リアルタイム放送の視聴にはこだわらなくなってくる感じ。

この記事へのツッコミ

Re: HDDレコーダを買うと、撮るだけ撮って見なくなりますな by tnk#    2006/03/15 12:09
多分そのままHDDが満杯になって、見ずに消したり撮る事もあきらめたり
し始めるのですよ。と言うより私が今丁度そんな状態なだけなのですが。
都会に住んでる人は、地上波だけでもあっという間らしいですし。

2005/03/12() [n年前の日記]

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

ケーズデンキでDVD-Rを。三菱製の8倍速対応品と、maxellの4倍速対応品。後者は、前回購入して不安に思った(けど今のところ問題なく焼けてる)製品と同じもの。ロット(?)で違ったりするのかなと思ったので。

スーパー(カワチ、ヨークベニマル、グリーンモール)でジュース・お菓子・煙草等を購入。

風が強かった :

国道4号の交差点で信号を待ってたら、強風で帽子が吹き飛んで、車のタイヤで踏み潰されまくり。悲しい…。

単4の充電池を買いたかったのだけど :

店頭には置いてないみたいだなぁ…。需要が少ないのかしら。

手持ちのトイデジカメで使いたいのだけど。使えるかどうか怪しいところも。たぶん、トイデジカメは、フツーの乾電池 x 2 = 1.5 x 2 = 3Vを要求しそうな感もあって。充電池では、1.2 x 2 = 2.4Vにしかならないから、動くかどうか。うーん。

この記事へのツッコミ

Re: 自転車で買い物に by けいと    2005/03/13 23:01
> 充電池では、1.2 x 2 = 2.4Vにしかならないから、動くかどうか。

デジカメのような「瞬発的大飯ぐらい」は
電圧のほかに電流も要チェックですよ〜

ごくごく普通の充電池だと600mAぐらいしか流れないやつがいたりしますので、
デジタル信号のような俊敏な電流変化についてこれない場合があります。

デジカメ用とか書いてるやつだと1000mAとか1600mAとか書いてますね。
まぁ、30万画素程度のトイデジカメだと
そんなに気にしなくていいのかもしれませんけど…
Re: 自転車で買い物に by mieki256    2005/03/14 15:20
> 電流も要チェック

なるほど。つまりデジカメ用の充電池を購入しとけば安心と。
…と思ったけど、単4であるんだろうか。むぅ。
検索してみたけど、Typ.800mAh、min.750mAh とか
そういうのしか見つからないな…むむぅ。
単3に比べて小さいから、そのぐらいになっちゃうのかな。
Re: 自転車で買い物に by mieki256    2005/03/14 15:24
> トイデジカメ

考えてみれば、USB接続で動かすこともできるトイデジカメなので…
それほど電流は食わないのかもしれないです。
たしかUSB接続で流せる電流の量って決まってたはずだし…
(500mA?でしたっけか?
 あーでも、mA と mAh の違いがわからない…。後で調べてみないと…)

#2 [zatta] _一見美しい夫婦愛の話みたいに作られてるが、とんでもない

これは要するに、結婚前には、あなたがアニメ好きだということは理解してるわ、いいのよ、あなたはアニメを見ていて、私はあなたのそういうところが好きなの、とか言ってたので安心して結婚して、思う存分アニメを見てたら、いきなりあなたは全然私のことを見てくれないとか言い出して、当てつけに浮気したりしてあげくの果てに死んでしまうという嫁の話である(「アニメ」は「仕事」とか「SF」とかにも交換可)。だったら最初から理解してるふりなんかするな。
そこが一番のホラーかも。

#3 [pc] _話が違うぞ Mac mini、日本のユーザーは置いてけぼり?

Windows用の日本語キーボードを接続すると、英語キーボードとして認識されてしまうらしい。かつ、アップル側は取り急ぎ改善する意思がないとのこと。要するに「Mac用日本語キーボードを買え」ということなんだろう。 _(via Crohn Life : 2005/03/11の項)

#4 [pc] _PC向けCRT、2007年に“日本の絶滅危惧種”に

参ったなぁ…。液晶よりCRTのほうが性能は高いのに。とはいえ、重いし、場所とるし、電気も食うしで。この流れは仕方ないか。

#5 [anime] SEED、TMRの人喋りまくりの回

想像してたより上手い。にしても随分喋らせるなぁ。そのうえコレから艦に乗るとは…。更に喋るということですか。ひええ。

白痴美を描こうとしてるあたり、フォウ・ムラサメみたい。狙ってるのかな。…考えてみれば、前作のライバル役が名前を隠したり、前作の主人公は隠居生活を送ってたりで。やはりZのリメイクも意識してるのだろうか。

この記事へのツッコミ

Re: SEED、TMRの人喋りまくりの回 by tnk#    2005/03/14 12:16
ガンダム関係で洗脳美少女キャラって死ぬ程(文字通り)いた気もしますが
死ななかったのってGガンのアレンビーくらいしか記憶に無いんですよね。
今からあれこれ言うのも野暮ですが、生き残れるかが楽しみだったり。
Re: SEED、TMRの人喋りまくりの回 by mieki256    2005/03/14 15:29
> ガンダム関係で洗脳美少女キャラ

あー。言われてみれば、そんな気も。
ZZでも出てきてた記憶もあるなぁ…。(名前覚えてないけど)
そういや、Vガンダムのカテジナさんとかもそうなのか…。

> 生き残れるかが楽しみ

うーん。前作でも、アレだけナニをソレした監督ですしねぇ…
今の時点で、既にほとんどナニはソレでしょうなぁ… (;´ー`)

#6 [tv] ハードゲイとやらがTVに映ってた

SEEDの後、TVをつけっぱなしにしてたら。爆笑問題が司会をやってるお笑い番組?の中で、ハードゲイを自称する芸人さんが出てた。

大笑い。なんだこの人。素晴らしい動きを見せるなぁ。

どういう人なのか判らなかったので、検索。 _2chでスレを見つけた。
Q. レイザーラモン住谷君は、本当にハードゲイなの?
A. いいえ。彼はあの服を脱いだ途端彼は普通の男性に戻ります。「スパイダーマン」や「マスク」と一緒の現象だと考えましょう。一度サングラス・帽子・スーツを着用するとハードゲイ住谷は色んな男性に恋をしますが、普段の住谷は瀬戸朝香などの美しい女性に恋します。

Q. いずドンって何?
A. 『レイザーラモン』は芸名ではなくコンビ名であり、住谷君には相方がいます。それが『いずドン』です。

Q. いずドンって本名? なんでそんな名前なの?
A. いずドンの本名は『いずぶちまこと』です。「いずドン」は「欽ドン」のパロディーで、バッファロー吾郎の15周年記念ライブで生まれた伝説のキャラです。その寒さは前例が無く、現在も「色のない世界」と呼ばれ、トラウマに震える人が沢山いらっしゃいます。

Q. レイザーラモン住谷君って他の番組にも出てるの? いずドンはどこで見れる?
A. はい。関西では吉本新喜劇などに出ています。吉本運動会やオールザッツなどの特番にもチラリと現れている事があるので要チェキラ☆ 最近ではうめだ花月の出番も多く、現在も芝居もんに出演なさっています。
レイザーラモン住谷という芸人さんらしい。

2004/03/12(金) [n年前の日記]

#1 [windows] WinXPにしたらHDDへのアクセス速度がなんとなく遅くなった気がする

アプリの起動が遅かったり。ViXのカタログ作成が遅かったり。FireFileCopyの処理が遅かったり。気のせいだろうか。HDBENCHで測定してみた。
 ★ ★ ★  HDBENCH Ver 3.40 beta 6 (C)EP82改/かず ★ ★ ★ 
M/B Name    mieki256's Main PC  
Processor   Pentium III 1050.10MHz[GenuineIntel family 6 model B step 1]
Cache       L1_D:[16K]  L1_I:[16K]  L2:[256K]  
VideoCard   Matrox Graphics Millennium G400 AGP  
Resolution  1280x960 (32Bit color)  
Memory      392,688 KByte  
OS 5.1 (Build: 2600) Service Pack 1
Date        2004/03/13  02:30  

Intel(r) 82371AB/EB PCI Bus Master IDE Controller
プライマリ IDE チャネル
  Maxtor 6Y080L0
  Maxtor 33073H3

Intel(r) 82371AB/EB PCI Bus Master IDE Controller
セカンダリ IDE チャネル
  DVS DVD-ROM DSR-600H
  HL-DT-ST CD-RW GCE-8160B

Initio Ultra SCSI Host Adapter

   ALL  Integer   Float  MemoryR MemoryW MemoryRW  DirectDraw
 18857    48301   47616    11666    8237    15240          42

Rectangle   Text Ellipse  BitBlt    Read   Write   RRead  RWrite  Drive
    29535  26581    6655      10   26344   20992    8679   10033  M:\100MB
…特に遅いというわけでもないような。謎。

#2 [zatta] _車両用ステッカー

この手があったか。…何の手だかよく判らないけど。個人的には「追越上等」のステッカーに惹かれる。

#3 [web] 「from ○○○」じゃダメなの?

「情報元:○○○」のつもりで「from ○○○」と書いてたんだけど。ダメなの?

もしかすると、自分が知らないだけで、「from ○○○」には特別な意味があったんだろうか。 _「All your base are belong to us」 みたいな? それとも「オープンソース」=「OSD」的種類の定義が「from ○○○」にも実はあったのかな。

個人的には、記号をつけたかったのですが。マルシーとか。(株)とか。そういう感じで。「情報元:」では長すぎて嫌だし<わがまま。何もつけないと情報ソースであることが判らないし。勝手気ままに俺記号を作っても意味が無いし。一々「情報元」と書かれたアイコン画像を貼り付けたらページを開くのが重くなるから嫌だし。ということで5バイトの記述で済む「from ○○○」にしてたんですが。何か良い記号・表記はないものかと。

この記事へのツッコミ

Re: 「from ○○○」じゃダメなの? by otsune    2004/03/15 00:41
英語圏では「via」を良く見かけます。
Re: 「from ○○○」じゃダメなの? by mieki256    2004/03/16 03:33
> 英語圏では「via」を良く見かけます。

「via」ですか。その表記は知りませんでした。
3バイトか…ちょっとヨサゲな感じがしてきた…

2003/03/12(水) [n年前の日記]

#1 Widget配置

Perl/Tk勉強中。widget配置の記述が面倒臭い。統合環境までは欲しない。配置のみGUIで行えるスクリプトがあれば便利かも。

2002/03/12(火) [n年前の日記]

#1 Bt8x8 Tweaker

VortualDubでもキャプチャできるんですね。 _(以下略)

#2 [capture] VirtualDub勉強中

VortualDubでもキャプチャできるんですね。
ヒストグラムを見ながら画面調整できるのは便利。
ウチのキャプチャボードはデフォルト状態だと白飛びするので。
そのへんの調整は必須です。

で、他にもメニューを見てたら、BT8x8 Tweakerなる項目が。
なんでもBT8x8の隠された能力を発揮する機能…らしい?

コレを動かすためには、DScaler(旧名、dTV)内の、DTVdrv〜.〜ファイルが必要。
てことで、DScalerをDL。
…したのだけど、中に該当ファイルは入っておらず。
どうやら必要なのは、dTVと呼ばれてた頃のファイルの模様。

弄ってみたら、面白そうな項目がズラリ。
BT8x8って色々出来るんだなと。
…が、ゴチャゴチャやってるうちに、初期値を忘れてしまう(爆)
なんかキャプチャ画面が汚くなったような…あうう


おねティ8話をMJPEGでキャプしたものの、各種変換はできるだけ早く行いたい。
そこで、AviUtlより処理が早いらしい、VirtualDubの情報を一日中探しまくり。
VirtualDubでのノイズ除去は比較的効果があるらしい…
…のだけど、インターレース解除、24fps化までさせるのは不安が残る…
かといって、AviUtlから、一時的なVGAのhuffyuv保存aviを作るのは…容量が厳しい…
frame serverなるモノを使えば、中間ファイルを作らずに済むのかも。
少し調べてみないと…

2001/03/12(月) [n年前の日記]

#1 MagicalSketchその2

画像貼付け板にMagicalSketchのサンプル?をアップしておきました。
_ExpressionTools のサイトに、 _チュートリアル もあるみたい。

数日前に、妹がドリキャスを購入。ホント安くなりましたね。
購入動機は、部屋でネットがしたいからだそうで。
しかしどうやるんでしょうね >ドリキャスでネット接続
たぶんisao-netとやらを利用しないとイカンのでしょうな。
その場合、APとかどうなるんだろ。不安。
ちなみにPSO薦めてみたら「時間かかりそうだからヤだ」とのこと。
たぶん、久遠の絆(DC版)とサクラ大戦3専用機になりそうな雰囲気。

2000/03/12() [n年前の日記]

#1 (NoTitle)「ブギーポップ」のア...

「ブギーポップ」のアニメ、よーわかりません。
原作読んでないとツライ作品なのでしょうか。
音とかレイアウトはなんだか好きなんだけど。

雑誌の整理。
減りません… (/_;)

1999/03/12(金) [n年前の日記]

#1 (NoTitle)郵便局に行ったついで...

郵便局に行ったついでに足をのばして、ソフトアイランド郡山店へ。
とうとうSlot1のマザボを買ってしまいました。MSIのMS-6163です。
後は、CPUとドーターボードとメモリとHDがあれば…。
CPUとメモリは通販で注文済み。後はドーターボードとHDだけど…
MSIのドーターボードが欲しかったのですが、この辺の店頭では売ってないみたいです。
HDはFireball EX 12.7GBのが欲しいんですが…これも売ってなくて…。
通販かな、やっぱり。

以上、21 日分です。

過去ログ表示

Prev - 2019/05 - 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