mieki256's diary



2023/10/19(木) [n年前の日記]

#1 [ruby] Ruby/GTK3を使ってるスクリプトをexe化したかったけどできなかった

Windows10 x64 22H2上で、gtk3 (Ruby/GTK3, ruby-gtk3) を使っているRubyスクリプトをexe化できるのか気になったので試してみた。

結論を先に書くと、gtk3 を使ったRubyスクリプトは、exe化できなかった。ちなみに、FXRuby や LibUI を使ったRubyスクリプトならexe化できた。

RubyバージョンGUIライブラリ日本語入力画像表示exe化exe化ツール
Ruby 2.6.10 x86LibUI 0.0.15YesNoYesocra 1.3.11
Ruby 3.2.2 x86LibUI 0.0.15YesNoYesocran 1.3.14
Ruby 2.6.10 x86FXRuby 1.6.46 x86-mingw32NoYesYesocra 1.3.11
Ruby 3.2.2 x86FXRuby 1.6.46 x86-mingw32NoYesYesocran 1.3.14
Ruby 2.6.10 x86gtk3 4.2.0YesYesNoocra 1.3.11
Ruby 3.2.2 x86gtk3 4.2.0YesYesNoocran 1.3.14

「Windows上でRubyを使ってGUIアプリを作りたいなら ruby-gtk3 一択かもしれない」と書いてしまったけれど、それは間違いだった模様。exe化できないのではなあ…。

_GitHub - kojix2/LibUI: A portable GUI library for Ruby
_libui | RubyGems.org | コミュニティのgemホスティングサービス

_GitHub - larskanis/fxruby: FXRuby is an extension module for Ruby that provides an interface to the FOX GUI toolkit.
_fxruby | RubyGems.org | コミュニティのgemホスティングサービス

_gtk3 | RubyGems.org | コミュニティのgemホスティングサービス
_The source of https://ruby-gnome.github.io/ | ruby-gnome.github.io

Ruby 3.2.2 x86 の場合 :

Ruby 3.2.2 x86 (RubyInstaller2) を使って試してみた。ocra を使えばexe化できるかなと思ったけれど…。
> ruby --version
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [i386-mingw32]

> ocra 08_image2.rb
=== Loading script to check dependencies
=== Attempting to trigger autoload of Matrix::EigenvalueDecomposition
=== Attempting to trigger autoload of Matrix::LUPDecomposition
=== Detected gem error_highlight-0.5.1 (loaded, files)
===     0 files, 0 bytes
=== Detected gem did_you_mean-1.6.3 (loaded, files)
===     0 files, 0 bytes
=== Detected gem syntax_suggest-1.0.2 (loaded, files)
===     0 files, 0 bytes
=== Detected gem ocra-1.3.11 (loaded, files)
===     5 files, 271800 bytes
=== Detected gem pkg-config-1.5.5 (loaded, files)
===     3 files, 34908 bytes
=== Detected gem native-package-installer-1.1.8 (loaded, files)
===     0 files, 0 bytes
=== Detected gem glib2-4.2.0 (loaded, files)
===     21 files, 858833 bytes
=== Detected gem atk-4.2.0 (loaded, files)
===     5 files, 31420 bytes
=== Detected gem matrix-0.4.2 (loaded, files)
===     4 files, 92057 bytes
=== Detected gem red-colors-0.3.0 (loaded, files)
===     44 files, 295060 bytes
=== Detected gem cairo-1.17.12 (loaded, files)
===     27 files, 759830 bytes
=== Detected gem cairo-gobject-4.2.0 (loaded, files)
===     6 files, 76283 bytes
=== Detected gem gobject-introspection-4.2.0 (loaded, files)
===     22 files, 360545 bytes
=== Detected gem pango-4.2.0 (loaded, files)
===     24 files, 119909 bytes
=== Detected gem fiddle-1.1.1 (loaded, files)
===     0 files, 0 bytes
=== Detected gem gio2-4.2.0 (loaded, files)
===     28 files, 111052 bytes
=== Detected gem gdk_pixbuf2-4.2.0 (loaded, files)
===     12 files, 63139 bytes
=== Detected gem gdk3-4.2.0 (loaded, files)
===     19 files, 73561 bytes
=== Detected gem gtk3-4.2.0 (loaded, files)
===     254 files, 1427401 bytes
=== Detected gem pathname-0.2.1 (loaded, files)
===     0 files, 0 bytes
=== Detected gem english-0.7.2 (loaded, files)
===     0 files, 0 bytes
=== Detected gem date-3.3.3 (loaded, files)
===     0 files, 0 bytes
=== Detected gem time-0.2.2 (loaded, files)
===     0 files, 0 bytes
=== Detected gem json-2.6.3 (loaded, files)
===     0 files, 0 bytes
=== Detected gem ostruct-0.5.5 (loaded, files)
===     0 files, 0 bytes
=== Detected gem forwardable-1.3.3 (loaded, files)
===     0 files, 0 bytes
=== Including 61 encoding support files (3706880 bytes, use --no-enc to exclude)
=== Building 08_image2.exe
=== Adding user-supplied source files
D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:1188:in `initialize': No such file or directory @ rb_sysopen - D:/home/prg/ruby/_work_sample/gtk3/fiber.so (Errno::ENOENT)
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:1188:in `open'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:1188:in `createfile'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:898:in `block (2 levels) in build_exe'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:882:in `each'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:882:in `block in build_exe'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:1087:in `block in initialize'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:1071:in `open'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:1071:in `initialize'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:879:in `new'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:879:in `build_exe'
        from D:/Ruby/Ruby32-x86/lib/ruby/gems/3.2.0/gems/ocra-1.3.11/bin/ocra:1231:in `block in <top (required)>'

エラーが出てしまった。fiber.so が見つからないと言っているのだろうか。fiber って何だろう。"ruby fiber" でググってみたら組み込みライブラリと出てきたけど…。

Ruby 2.6.10 x86 の場合 :

Ruby 2.6.10 x86 で試してみた。これも ocra でexe化できないか試した。
> ruby --version
ruby 2.6.10p210 (2022-04-12 revision 67958) [i386-mingw32]

> ocra 08_image2.rb images
=== Loading script to check dependencies
=== Attempting to trigger autoload of Matrix::EigenvalueDecomposition
=== Attempting to trigger autoload of Matrix::LUPDecomposition
=== Detected gem did_you_mean-1.5.0 (loaded, files)
===     25 files, 31813 bytes
=== Detected gem ocra-1.3.11 (loaded, files)
===     5 files, 271800 bytes
=== Detected gem pkg-config-1.5.5 (loaded, files)
===     3 files, 34908 bytes
=== Detected gem native-package-installer-1.1.5 (loaded, files)
===     0 files, 0 bytes
=== Detected gem glib2-4.2.0 (loaded, files)
===     21 files, 887505 bytes
=== Detected gem atk-4.2.0 (loaded, files)
===     5 files, 31420 bytes
=== Detected gem red-colors-0.3.0 (loaded, files)
===     44 files, 295060 bytes
=== Detected gem cairo-1.17.12 (loaded, files)
===     27 files, 759830 bytes
=== Detected gem cairo-gobject-4.2.0 (loaded, files)
===     6 files, 75259 bytes
=== Detected gem gobject-introspection-4.2.0 (loaded, files)
===     22 files, 361569 bytes
=== Detected gem pango-4.2.0 (loaded, files)
===     24 files, 117861 bytes
=== Detected gem gio2-4.2.0 (loaded, files)
===     28 files, 109004 bytes
=== Detected gem gdk_pixbuf2-4.2.0 (loaded, files)
===     12 files, 63139 bytes
=== Detected gem gdk3-4.2.0 (loaded, files)
===     19 files, 73561 bytes
=== Detected gem gtk3-4.2.0 (loaded, files)
===     254 files, 1428425 bytes
=== Detected gem date-3.1.1 (loaded, files)
===     4 files, 481268 bytes
=== Detected gem matrix-0.4.2 (loaded, files)
===     5 files, 92981 bytes
=== Detected gem json-2.5.1 (loaded, files)
===     14 files, 208760 bytes
=== Detected gem ostruct-0.4.0 (loaded, files)
===     6 files, 15432 bytes
=== Detected gem forwardable-1.3.2 (loaded, files)
===     3 files, 10555 bytes
=== Detected gem fiddle-1.0.9 (loaded, files)
===     8 files, 165712 bytes
=== Including 59 encoding support files (3672064 bytes, use --no-enc to exclude)
=== Building 08_image2.exe
=== Adding user-supplied source files
=== Adding ruby executable ruby.exe
=== Adding detected DLL D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/libssp-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/libgmp-10.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/libgcc_s_dw2-1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/libwinpthread-1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/libintl-8.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libgobject-2.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/libiconv-2.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libglib-2.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/libffi-7.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libpcre-1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libgirepository-1.0-1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libgmodule-2.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libgio-2.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/zlib1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libatk-1.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libfreetype-6.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libcairo-2.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libbz2-1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libbrotlidec.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libharfbuzz-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libpng16-16.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libstdc++-6.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libfontconfig-1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libpixman-1-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libbrotlicommon.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libgraphite2.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libexpat-1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libcairo-gobject-2.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libpango-1.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libthai-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libfribidi-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libdatrie-1.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libpangocairo-1.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libpangoft2-1.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libpangowin32-1.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libgdk_pixbuf-2.0-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libgdk-3-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libepoxy-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/bin/libgtk-3-0.dll
=== Adding detected DLL D:/Ruby/Ruby26-x86/msys32/mingw32/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.dll
=== Adding external manifest D:/Ruby/Ruby26-x86/bin/ruby_builtin_dlls/ruby_builtin_dlls.manifest
=== Adding external manifest D:/Ruby/Ruby26-x86/msys32/mingw32/bin/mako-render.exe.manifest
=== Adding external manifest D:/Ruby/Ruby26-x86/msys32/mingw32/bin/update-mime-database.exe.manifest
=== Adding library files
=== Compressing 41277968 bytes

LZMA 19.00 (x86) : Igor Pavlov : Public domain : 2019-02-21

Input size:  41277968 (39 MiB)
Output size: 10519402 (10 MiB)
=== Finished building 08_image2.exe (10570110 bytes)

一見すると exe が作れたように見えたけれど、実行してみると動作しない。
> 08_image2.exe
C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require': 126: 指定されたモジュールが見つかりません。   - C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/gems/2.6.0/gems/gobject-int
rospection-4.2.0/lib/gobject_introspection.so (LoadError)
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/gems/2.6.0/gems/gobject-introspection-4.2.0/lib/gobject-introspection.rb:34:in `<top (required)>'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/gems/2.6.0/gems/atk-4.2.0/lib/atk.rb:17:in `<top (required)>'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/gems/2.6.0/gems/gtk3-4.2.0/lib/gtk3.rb:17:in `<top (required)>'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:160:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:160:in `rescue in require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:149:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/src/08_image2.rb:14:in `<main>'
C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require': cannot load such file -- gtk3 (LoadError)
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrA5C9.tmp/src/08_image2.rb:14:in `<main>'

gobject_introspection.so が見つからないし、gtk3 もロードできないと言っているように見える。

Ruby 3.0.4 x86 の場合 :

Ruby 3.0.4 x86 + ocra で試してみた。

.exe は作成できたけど、実行してみるとエラーになった。エラーメッセージの量からすると、Ruby 2.6.10 x86 より酷い状態になった…。
> 08_image2.exe
C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1406:in `rescue in block in activate_dependencies': Could not find 'pkg-config' (>= 1.3.5) among 23 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/gemhome;C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/gems/3.0.0' at: C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/gems/3.0.0/specifications/glib2-4.2.0.gemspec, execute `gem env` for more information
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1403:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1410:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1410:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems.rb:221:in `rescue in try_activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems.rb:214:in `try_activate'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:153:in `rescue in require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/src/08_image2.rb:14:in `<main>'
C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/dependency.rb:311:in `to_specs': Could not find 'pkg-config' (>= 1.3.5) among 23 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/gemhome;C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/gems/3.0.0' , execute `gem env` for more information
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1404:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1410:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1410:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems.rb:221:in `rescue in try_activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems.rb:214:in `try_activate'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:153:in `rescue in require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/src/08_image2.rb:14:in `<main>'
C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1406:in `rescue in block in activate_dependencies': Could not find 'pkg-config' (>= 1.3.5) among 23 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/gemhome;C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/gems/3.0.0' at: C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/gems/3.0.0/specifications/glib2-4.2.0.gemspec, execute `gem env` for more information
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1403:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1410:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1410:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems.rb:215:in `try_activate'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:153:in `rescue in require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/src/08_image2.rb:14:in `<main>'
C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/dependency.rb:311:in `to_specs': Could not find 'pkg-config' (>= 1.3.5) among 23 total gem(s) (Gem::MissingSpecError)
Checked in 'GEM_PATH=C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/gemhome;C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/gems/3.0.0' , execute `gem env` for more information
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1404:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1410:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1410:in `block in activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `each'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1392:in `activate_dependencies'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/specification.rb:1374:in `activate'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems.rb:215:in `try_activate'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:153:in `rescue in require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/src/08_image2.rb:14:in `<main>'
<internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- gtk3 (LoadError)
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr5D57.tmp/src/08_image2.rb:14:in `<main>'

ocraのバグらしい :

fiber.so が見つからないと言ってくる件は、Ruby 3.1 以降の仕様変更によるもので、ocra が対応できてない状態らしい。

_Ruby 3.1 doesn't bring fiber.so and crashes Ocra - Issue #179 - larsch/ocra - GitHub
_Possible error: No such file or directory @ rb_sysopen - C:/home/x/programming/ruby/src/roebe/bin/fiber.so (Errno::ENOENT) - Issue #186 - larsch/ocra - GitHub


パッチはあるらしいけど反映されてないっぽい。

_Ignore fiber.so by sk757a - Pull Request #189 - larsch/ocra - GitHub


上記の修正を、Ruby 3.2.2 x86 にインストールした ocra に対してやってみた。以下のファイルを修正する。
(Ruby 3.2.2 x86インストールフォルダ)\lib\ruby\gems\3.2.0\gems\ocra-1.3.11\bin\ocra

fiber.so 云々のエラーは出なくなって exe も生成できるようになった。しかし、出来上がった exe を実行するとエラーになる。
> 08_image2.exe
C:/Users/(USERNAME)/AppData/Local/Temp/ocrDFB4.tmp/lib/ruby/site_ruby/3.2.0/rubygems.rb:1366:in `read': No such file or directory @ rb_sysopen - C:/Users/(USERNAME)/AppData/Local/Temp/ocrDFB4.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb (Errno::ENOENT)
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrDFB4.tmp/lib/ruby/site_ruby/3.2.0/rubygems.rb:1366:in `<top (required)>'
        from <internal:gem_prelude>:2:in `require'
        from <internal:gem_prelude>:2:in `<internal:gem_prelude>'

ruby-gtk3以外で試してみた :

ruby-gtk3 で試してるからいかんのだろうか。別のGUIライブラリならどうなるのだろう。

まず、Ruby 2.6.10 x86 + ocra 1.3.11 を使って試してみる。
  • libui 0.0.15 を使ってるRubyスクリプトは、exe も生成できたし、exe を実行することもできた。
  • fxruby 1.6.46 x86-mingw32 を使ってるRubyスクリプトも、exe を生成できたし、exe を実行することもできた。

次に、Ruby 3.2.2 x86 + ocra 1.3.11 を使って試してみた。尚、ocra は、fiber.so を除外するように修正した版を使用。

libui 0.0.15 を使ってるRubyスクリプトをexe化してみた。exe は生成できたけど、実行するとエラーになる。
> 01_hello_libui.exe
C:/Users/(USERNAME)/AppData/Local/Temp/ocr92BE.tmp/lib/ruby/site_ruby/3.2.0/rubygems.rb:1366:in `read': No such file or directory @ rb_sysopen - C:/Users/(USERNAME)/AppData/Local/Temp/ocr92BE.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb (Errno::ENOENT)
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocr92BE.tmp/lib/ruby/site_ruby/3.2.0/rubygems.rb:1366:in `<top (required)>'
        from <internal:gem_prelude>:2:in `require'
        from <internal:gem_prelude>:2:in `<internal:gem_prelude>'

gtk3 ではなく、LibUI を使っているにも関わらず、gtk3 を利用したスクリプトをexe化した場合と同じエラーが出ているように見える。

どうやら、「ocra は Ruby 3.x 以降に対応していない」と思っておいたほうがいいのかもしれない。

ocraのfork版のocranを導入してみる :

Ruby 3.x 以降で ocra が使えない問題は、一応、issue で報告済みではある模様。放置されてるようにも見えるけど…。

_Executable created with Ocra and Ruby 3.2.2 throw an error - Issue #193 - larsch/ocra - GitHub

そして、この報告に関するやり取りの中で、このあたりのバグを修正した、ocran というfork版が存在すると知った。

_GitHub - Largo/ocran: One-Click Ruby Application Builder
_ocran | RubyGems.org | コミュニティのgemホスティングサービス

ちなみに、過去には ocra2 という fork版もあったらしいけど、それは消滅したらしい。

_ocra2 | RubyGems.org | コミュニティのgemホスティングサービス

ocran なら違った結果になるのだろうか? ocran を Ruby 3.2.2 x86 でインストールしてみた。
gem install ocran
ocran 1.3.14 がインストールされた。

LibUI を使った Rubyスクリプトを ocran でexe化してみた。
ocran 01_hello_libui.rb
01_hello_libui.exe が生成できた。実行したところ動いてくれた。

FXRuby を使った Rubyスクリプトはどうだろう。
ocran 01_hellofxruby.rb
これもexeが生成できたし、実行することもできた。

つまり、LibUI、FXRuby に関しては、ocran を使うことで、Ruby 3.2.2 x86 でもexe化できると分かった。

では、gtk3 を使ったRubyスクリプトはどうだろう。試してみた。
ocran 08_image2.rb images

exeは生成できたが…。
> 08_image2.exe
<internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require': 126: 指定されたモジュールが見つかりません。   - C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/gems/3.2.0/gems/
glib2-4.2.0/lib/glib2.so (LoadError)
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/gems/3.2.0/gems/glib2-4.2.0/lib/glib2.rb:117:in `<top (required)>'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/gems/3.2.0/gems/gobject-introspection-4.2.0/lib/gobject-introspection.rb:17:in `<top (required)>'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/gems/3.2.0/gems/atk-4.2.0/lib/atk.rb:17:in `<top (required)>'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/gems/3.2.0/gems/gtk3-4.2.0/lib/gtk3.rb:17:in `<top (required)>'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:160:in `require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:160:in `rescue in require'
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:40:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/src/08_image2.rb:14:in `<main>'
<internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require': cannot load such file -- gtk3 (LoadError)
        from <internal:C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/lib/ruby/site_ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:86:in `require'
        from C:/Users/(USERNAME)/AppData/Local/Temp/ocrC540.tmp/src/08_image2.rb:14:in `<main>'

glib2.so が見つからないし gtk3 も使えないと言ってきた。残念。

それでも、Ruby 3.x 以降は、ocra ではなく fork版の ocran を使えばexe化できる可能性があると分かった。

ただし、ocran を使えばあらゆるRubyスクリプトがexe化できるわけでもなく…。FXRuby や LibUI を使ったスクリプトはexe化できても、gtk3 を使ったスクリプトはexe化できない、ということも分かった。

結論としては…。Ruby なんて窓から投げ捨てろ。Python 使おうぜ。いや、日本語とオサラバさえすれば Ruby + FXRuby が使えると思うし、画像表示を諦めれば Ruby + LibUI も使えると思うけど…。

Ruby が Tk を切り捨ててしまったのが結構痛い気がする。もっとも、Windows上で Ruby + Tk が動くようにするのって一苦労だし。というか現状ではもう動かし方すら分らんし。

2023/10/20追記 :

現状の Ruby + Windows で Ruby/Tk を動かす方法が分からないと書いてしまったけど、DevKit付のRubyをインストールしてあるなら、gem install tk で利用できるようになるらしいと分かった。そのあたりは別記事でメモ。

#2 [ruby] Ruby 1.9.3 x86 でruby-gtk2を動かしてみたい

Windows10 x64 22H2上の Ruby 1.9.3 x86 で、gtk2(Ruby/GTK2, ruby-gtk2) を動かせるのか気になったので、動作するバージョンがどれなのか試して確認してみた。

手元で試した限りでは、Windows10 x64 22H2 + Ruby 1.9.3 x86 で利用できる gtk2関連パッケージの最終バージョンは 2.0.0 以下に見えた。これより上のバージョンでは動かない。また、インストールする順番も重要。cairo, glib2, pango, atk, gdk_pixbuf2, gtk2 の順でインストールすること。


> gem list | grep -E "cairo|atk|glib2|pango|gdk_pixbuf2|gtk2"
atk (2.0.0 x86-mingw32)
cairo (1.12.4 x86-mingw32)
gdk_pixbuf2 (2.0.0 x86-mingw32)
glib2 (2.0.0 x86-mingw32)
gtk2 (2.0.0 x86-mingw32)
pango (2.0.0 x86-mingw32)

Ruby 1.9.3 x86上では、cairo 1.12.4 までは動くが、cairo 1.12.5以上は動かないので、そのことで他のパッケージの依存関係的に制限が出てきて、gtk2 2.0.0 より上のバージョンは選べなくなる。

_mieki256's diary - cairo + Ruby Windows版が使えない

更に、gem を使ってネットワーク経由でインストールすると、最後の gtk2 のインストール時に、--platform=x86-mingw32 を指定していても、何故かソース(?)をダウンロードしてビルドが始まってしまう。
gem install gtk2 -v=2.0.0 --platform=x86-mingw32

ビルドを回避するには、必要になる gemファイルを全部Webブラウザ等で別途ダウンロードして、ローカルからインストールしたほうが良さそう。
gem install -l cairo-1.12.4-x86-mingw32.gem
gem install -l glib2-2.0.0-x86-mingw32.gem
gem install -l pango-2.0.0-x86-mingw32.gem
gem install -l atk-2.0.0-x86-mingw32.gem
gem install -l gdk_pixbuf2-2.0.0-x86-mingw32.gem
gem install -l gtk2-2.0.0-x86-mingw32.gem

ちなみに、Rubygemsサイトの各ページの、「ダウンロード」をクリックすれば、.gem がダウンロードできる。

_glib2 | RubyGems.org | コミュニティのgemホスティングサービス
_pango | RubyGems.org | コミュニティのgemホスティングサービス
_atk | RubyGems.org | コミュニティのgemホスティングサービス
_gdk_pixbuf2 | RubyGems.org | コミュニティのgemホスティングサービス
_gtk2 | RubyGems.org | コミュニティのgemホスティングサービス

余談。各パッケージのバージョンが 1.2.6 でも動くことを確認した。2.x.x 以降は対応する Ruby のバージョンが引き上げられたりしていたので、gtk2関連パッケージの内部でも何か大きな変化があったのかもしれない。だとすると、1.2.x系を利用したほうがまだ安定して動く可能性もある…?

ただ、glib2 1.2.2 は gem内の構成がバグっていて、修正した 1.2.3 を出したという話もあったので、1.2.3 以降を利用したほうがいいのかもしれない。

_Thread: [ruby-gnome2-devel-ja] Windowsへのinstallでエラー | Ruby-GNOME 2

exe化について :

Ruby 1.9.3 x86上では、ocra 1.3.10 なら使える。ocra 1.3.11 はエラーを出して動かない。
gem install ocra -v=1.3.10
ocra 01_hellogtk2.rb

ruby-gtk2 を使ったRubyスクリプトも、ocra 1.3.10 を使えばexe化できるが、スクリプト内に日本語文字列(UTF-8文字列)が入っていると、そこでエラーが出て処理が止まってしまった。ただ、ファイルの最初のあたりに以下の指定があればexe化できる時もある模様。
# -*- mode: ruby; coding: utf-8 -*-

とりあえず、Ruby 1.9.3 x86 + ruby-gtk2 2.0.0 を使えば exe化できる可能性もある、と分かった。とはいえ、Ruby 1.9 まで戻って使うというのも…。なんだかな。

#3 [python] Pythonで使えるGUIライブラリについて

Python で使えるGUIライブラリってどのくらいあるのかなとググってみたら…。

_GuiProgramming - Python Wiki

改めて、選び放題だなと感心してしまった。

個人的には、tkinter のラッパーの PySimpleGUI がイイ感じに思えた記憶がある。配列(?)を使ってウィジェット(部品)を配置していくあたりが分かりやすかった。日本ではなんでもかんでもExcelを使って表を埋めるように文書を作ってしまう文化があるらしいけど、PySimpleGUI も表を埋めていく形で配置するので日本人にピンとくる仕様なのではないかと。 *1

あるいは、RaspberryPi上で動かすことを念頭に置いて、初心者の学習用を意識したらしい guizero もイイ感じに思えた記憶がある。これなら子供さんでも全然使えそうだなと…。
*1: もっとも、表っぽく配置するレイアウト機能は、大体どのGUIライブラリもサポートしてたりするのだけど。それをどれだけ簡単に指定できるようにするか、という部分が PySimpleGUI はよく出来ている気がする。

#4 [ruby] Rubyというプログラミング言語に対する個人的な印象

ポエムです。感想には個人差があります。

Ruby が Tk を殺さなければ、いや、別に Tk に拘らなくてもいいのだけど、標準状態で何かしらのGUIライブラリが使える状態が実現していれば、Python の PySimpleGUI のように、ラッパーを書いて簡単にGUIアプリを作れるようにする試みが出てきていたのかなと夢想しないでもない…。標準でソレが使えるか使えないかは大きいよなあ…。 *1

もっとも、GUIライブラリはプログラミング言語本体とは明らかに別部分だから、言語本体の開発者にとって、そんな”どうでもいい”部分にリソースを割くより言語本体に集中を、と考えるのは至極当然な気もする。

結局、言語本体だけに注目して開発リソースの配分をするか、それとも言語を取り巻く全体を眺めてリソース配分するか、視点の違いの話なのだろうか。極端なことを言えば、言語を芸術品の類として見ているのか、それとも言語を道具として見ているのか、その違いかもしれない。

Rubyは元々、便利な道具が欲しくて作られたわけではなく、美しいプログラミング言語とはどうあるべきか、その探求心から誕生した言語と聞いているので、出自からして道具としてはなんだかイマイチになってしまう点は避けられなかったのかもしれないなと。

喩えるなら、毎日食卓に並べて使われる食器の類ではなく、床の間に飾ってある焼き物のような、そんなポジションなのだろうか。そして床の間で、ゆっくりと埃をかぶっていくのだろう…。しかし、日常的に使われる食器を作ってる人達は、その焼き物の美しさに魅かれて、せめてこの部分だけでもウチの製品に取り込めないかと試みてみたり…。色んな言語がRubyから影響を受けたと言及していたりするあたり、お手本になる部分が多いのだろう。でも、お手本にはなるけれどソレ自体は道具にならない。Ruby はそういう言語、だったのかもしれない(過去形)。

などと書いたところで思い出した。名前からして宝石だもんな…。宝石は奇麗だけど実用性は無いもんな…。自分達は宝石を、火打石や石刀として使えないものかと苦心してる状態なのでは…?

ポエムです。感想には個人差があります。
*1: でも、どうしてそういうアプローチが、元々の Tcl/Tk で出てこなかったのだろうという疑問も…。利用ユーザ数の違いが関係してるのだろうか。それとも言語仕様によるところが大きいのか。

2022/10/19(水) [n年前の日記]

#1 [z80] MZやX1のBASICについて調べてる

MZ-2000、あるいは X1 で使われていたBASICについて調べてる。それぞれ、モニタと呼ばれるプログラムが含まれているらしいけど、それらの互換プログラムって無いのかなと。まあ、ググった感じでは存在してないみたいだけど…。

各サブルーチンのアドレス一覧や機能一覧は無いのかなとググってみたけど、それも見当たらず。MZ-2000 にはマニュアルが2つあって、OWNER'S MANUAL は見かけたのだけど、もう一つのマニュアルは見かけなかった。その、見つからないもう一つのほうに BASIC やモニタの情報が載っているらしい。

2021/10/19(火) [n年前の日記]

#1 [gimp] GIMP用の矢印ブラシを作ってみた

GIMP 2.10上で利用できる矢印ブラシを作ってみた。環境はWindows10 x64 21H1 + GIMP 2.10.28 x64 Portable samj版。

形状に関して参考にした矢印ブラシ群は以下。

_GIMP Arrow Brush set by Banekai on DeviantArt
_arrow brushes BW 2

どれもブラシ画像が小さ目なのでブラシサイズを大きくするとぼやけてしまうこと、また、描画色が反映されずに必ず黒一色で描画されてしまうことが気になっていたわけで。

そんなわけで、大き目のブラシ画像(512 x 512ドット)を作成し直して、かつ、描画色が反映されるように、グレースケール画像としてGIMP用ブラシファイル(.gbr)を保存(エクスポート)してみた。

尚、前述のブラシ群の中から、自分が利用しそうな形状のブラシだけを自作した。

種類の一覧は以下。

m256_arrow_01_14_sample.png

ファイルは以下。

_arrow_m256_20211019.zip

GIMP用のブラシファイル、.gbr の他に、.svg と .png も同梱しておいた。
ライセンスは…。arrow brushes BW 2 は Public Domain らしいので、今回作成したブラシもそれと同様に Public Domain ってことで。GIMP Arrow Brush set by Banekai はライセンスが不明だけど、「自由に使ってくれ」「使ったら報告が欲しいけど別に報告しなくてもいいよ」と書いてあるように見えるので、今回作成したブラシもソレに従って、自由に使ってくれ、ってことで。

「右向きしかないんだけど?」「大き過ぎるんだけど?」 :

Q. 「コレ、右向き矢印しかないんだけど? 左、下、上は?」
Q. 「コレ、ブラシとして大き過ぎるんだけど?」

A. GIMP 2.10 はブラシのオプションに「角度」という項目があるので、角度に、90度、180度、-90度、等を指定すれば、下、左、上向きになります。また、「サイズ」という項目もあるので、好きなサイズを指定すれば小さいブラシとして使えます。と一応メモ。

ss_20211019_195421.png

余談。テキストツールを使ったほうが早い。 :

余談。GIMPには矢印を描画する機能が無いので、矢印ブラシを新規追加しようだの、矢印描画スクリプトを新規導入しようだの、そういうアレな話になるけれど。

日本語環境でGIMPを使ってるユーザなら、テキストツールを使えば矢印を簡単に描画できますよ、と一応メモしておくのです。

_Gimp: 手っ取り早くシンプルな矢印を描く方法 | anobota

日本語フォントを選べば、「みぎ」「ひだり」「うえ」「した」「やじるし」で矢印記号を打ち込めるので…。
  • テキストだからサイズを大きくしても画像が荒れない。
  • テキストレイヤーからパスを生成すれば回転拡大縮小も自由自在。画像も荒れない。
  • 標準機能で使える。
矢印の形状にこだわらないなら、かなりオススメです。

余談。水平反転や垂直反転。 :

余談。GIMPのブラシのオプションには「角度」という項目があるので、任意の向きに回転させれば事足りる、そんな形状のブラシであれば、全方向分を持たずに、一方向分だけのブラシを持っておくだけで済むのだけど。

場合によっては、ブラシ形状を水平反転、垂直反転して使いたい時もあるわけで…。でも、GIMP のブラシオプションに、「xx反転」なる項目は無いわけで…。

そういう時はどうすればいいのか、少しググってみたのだけど、どうやらクリップボードブラシを利用することでなんとかなりそうだと分かったので一応手順をメモ。

まずは、ブラシを画像として開く。ブラシを選択 → 右クリック → 画像として開く、を選ぶ。

gimp_brush_flip_ss01.png


ブラシ画像が開かれた。

gimp_brush_flip_ss02.png


画像を変形させる。画像 → 変形 → 水平反転 or 垂直反転 or etc.

gimp_brush_flip_ss03.png


変形させた画像をクリップボードにコピーする。Ctrl + A。もしくは、選択 → すべて選択。

gimp_brush_flip_ss04.png


コピーする。Ctrl + C。もしくは、編集 → コピー。

gimp_brush_flip_ss05.png


これで、クリップボードに、変形したブラシ画像がコピーされた状態になった。

ブラシ一覧ウインドウの一番左上に、「Clipboard Image」という名前のブラシがあるはずなので選択。これが、クリップボードに入っている画像をブラシ画像として利用できるGIMPの機能、とでもいうか…。

gimp_brush_flip_ss06.png


ということで、元のブラシ画像を水平反転した状態でブラシ描画ができた。

gimp_brush_flip_ss07.png


手順が多くて面倒臭いけど、それでも一応、一つのブラシを水平反転や垂直反転して使うことができると分かった。

でもまあ、利用頻度が多いなら、その画像を .gbr としてエクスポートして、新規ブラシとして追加したほうがいいですわな…。

ていうか、どうして GIMP のブラシには水平/垂直反転が無いんだろう…。もっとも、反転した状態からサイズ変更や回転をさせると、ブラシ描画の処理内容が更に面倒なことになりそうではあるか…。

#2 [nitijyou] 日記をアップロード

2021/09/22を最後に日記をアップロードしてなかったのでアップロード。

2020/10/19(月) [n年前の日記]

#1 [godot] Godot Enigne で音を鳴らす方法について調べていたり

Godot Engine でBGMや効果音を鳴らしたい。どうすればいいのだろう。

ググってみたら、どうやら AudioStreamPlayer なるノードをシーンに追加してやれば鳴らすことができる模様。

_AudioStreamPlayer - Godot Engine (stable)の日本語のドキュメント

鳴らせるのは wav か ogg で、プロジェクトフォルダ内に置いてやればインポートしてくれるっぽい。インポート時にループするかしないのかの設定もされる模様。

BGM相当のoggを入れて試してみたけど、シーンがウインドウ表示されると同時にBGMが再生されて、ループ再生もしてくれた。

2019/10/19() [n年前の日記]

#1 [nitijyou] 腹痛は治りかけてきた

腹痛は午前中あたりから無くなってきた。痛みを感じる場所が移動してたので、何か妙なモノでも食べて、というアレなのかな…。

2018/10/19(金) [n年前の日記]

#1 [tic80] TIC-80のスプライトの拡大縮小について確認

TIC-80 において、スプライト相当の描画時に拡大縮小率を指定できるのだけど、実数が指定できるのか、それとも整数しか指定できないのか気になったので試したり。

tic80_spr_scale_ss01.gif

整数倍で拡大することしかできないようだなと…。これでは…できることが少なくなるな…。まあ、もうちょっと色々やりたいなら love2d を使おう、という話になるのかも。

ソースは以下。
-- title:  game title
-- author: game developer
-- desc:   short description
-- script: lua

scale = 0.1
x=96
y=24

function TIC()

 cls(13)
 spr(1,x,y,14,scale,0,0,2,2)
 print("scale : "..scale,84,84)
 scale = scale + 0.05
 if scale >= 5.0 then scale = 0.1 end
end

#2 [pc] マウスパッドを購入

マウスカーソルの動きがなんだか妙な感じになったので少し調べてみたら、どうやら今まで使ってたマウスパッドがかなり削れてしまって、一部がツルツルになっていたようで…。光学マウスが表面の模様を読み取れなくてマウスカーソルの動きがおかしくなるのか、あるいはマウスがその部分で滑らなくて違和感があるのかは分からんけど、とにかくこれはマウスパッドのせいじゃないかな、と。

ということで、ケーズデンキでマウスパッドを買ってきた。 _サンワサプライ MPD-NS1BL 。税込1,005円。正直高い。でも、このぐらいの価格帯の商品しかケーズデンキには売ってなくて…。

今まで使ってた製品、おそらくは _サンワサプライ MPD-OP16BL は、もう店頭に無かった。残念。

今回購入したソレを使ってみたけど、マウスカーソルの動きはまともになった。やはりマウスパッドのせいだったらしい。

しかし、マウスそのものを動かした時の引っ掛かりは、ビミョーに増したような気もする。もっとも、今まではつるつるに削れたマウスパッドで動かしていたのだから、新品なら当然抵抗も増えるはずで。

ちなみに、使ってるマウスは、ELECOM M-XG1UBSV。BlueLEDがどうとか謳ってる光学マウス。光学マウス、特に BlueLEDを使った製品は、マウスパッドの種類によっては正しく動かない時もあるらしいけど、少なくとも今回購入したマウスパッドは特に問題は無さそう。

#3 [web][neta] TV感覚でインターネットを利用する人達が増えてきたのかもしれない

思考メモ。

たまたまあちこちで、「技術系ゴミ記事を書くな」的文句を言ってる人達を見かけて、もしかすると時代は変わったのかなと思ったりもして。

ゴミ記事が多いなと思ったら、自分でゴミじゃない記事を書いてネットにアップロードすればいいだけの話なのに…。それが本当に良記事なら、じわじわとリンクも増えて、検索サイトでも自然と上位にリストアップされるのではないのかな、と。

だけど、その手の文句を言ってる人達は、おそらくは自分で記事を書かない・書いたことがほとんどない人種、なのだろうなと想像したりもするわけで。ただ口をぽかんと開けて、「誰かが俺にとってためになる記事を、タダ働きで書いてくれねえかなあ」と思い続けてる、みたいな。雛鳥が巣の中から口だけ突き出して狂ったようにピーピー鳴いてる、そんな光景が思い浮かんでしまったり。俺達は、お前の親鳥じゃねえんだけどなあ…。

要するに、TVの視聴者のような感覚でインターネットを眺めているのだろうなと。自分は受け手オンリーなのだ、お客様扱いされて当然なのだ、的感覚。何かを見て文句を言う事ぐらいはできるけど、その何かを作る側にはなろうと思わない人達。情報はどこかから自然と湧いてくるもので、誰かが苦労して作った何かに対しても「拾ってきた」と平然と言っちゃう、そんな感覚。

少しでも記事を書いてみれば、「記事を書くのって結構大変なんだな」「こんなの無償で書いて公開するなんて…聖人か」みたいな印象になってくるだろうし、となれば、「せっかく苦労して書いてるだろうに、出てくる記事は今一つなんだよな…」「なら、良記事を書くにはどうしたらいいのだろう?」という思考になって、「どうせ書くならこういうことを意識して書いてほしい」みたいな話になっていきそうだけど。彼等はそもそも記事を書いたことがないから、「(ゴミ)記事を書くな」と根底から否定するようなことしか言えない。非建設的だなと。

大昔のインターネットは何も無かったので、そこに集まった一人一人が、知ってることを何でもいいから少しずつ持ち寄って情報を増やしていくしか無かったわけだけど。そうやって集まった情報がそろそろ結構な量になってきたので、後から使い始めた人はそのへんすっかり勘違いしてるのだろうなと。もっとも、どのサイトを開いても広告ベタベタなこの状況で、牧歌的な昔のソレを思い返してみてもアレなんだけど。

昔は、コミケのノリに近かったのかもしれないな…。参加者一人一人がどんなアクションを取るかで、イベントが成功するか失敗するかが決まる。売り手が買い手にもなるし、買い手が売り手にもなる。みたいな。まあ、コミケだって昔と比べたら随分違っているのだろうけど。

何でもそうだけど、規模が大きくなれば色々な歪みが出てくる、みたいな話だったりもするのだろうか。これもまた、あるある話の一つ、なのかなあ。

#4 [web][neta] 日付と環境さえ書いてあれば技術系記事としては合格点

技術系の記事に関しては、日付と環境さえ書いてあればそれだけで合格点じゃないのかなと個人的には思っていたり。

まず、日付があれば、読み手としては、「これは古い記事だから今も通用するか分からんな」と事前に察しがつくわけで。「古いけど、まあ、ダメ元で」な感覚で記事内容を試すから、残念な結果でも「やっぱりね」で済むし。あるいは最初から見切りをつけて、もっと新しい記事が無いか探し始めることだってできる。…日付さえ書いてあれば。

そして、環境が書いてあれば、Mac or Linux 向けのインストール手順をWindows環境で途中まで試してしまってなんだか様子がおかしいことに気づいてガッカリ、なんて事態も避けられる。「おかしいな…動かんぞ…。さてはこれってもしかして Mac or Linux 向けの記事じゃねえの? ああ、もう、これだからMacユーザは! どうしてアイツラ『Macで試した』の一言すら書けねえんだよ! 『世界にはMacしか存在しない』と思い込んでんじゃねえよ!」と無駄にイライラしなくて済むわけで。

また、「ゴミ記事を書くな」的主張のやり玉にあがってる、初心者向けのアプリインストール手順記事の類だって、日付と環境さえ書いてあれば、「この時期に、この環境・このバージョンでは、どうやらそれなりに動いていたらしい」という、動作実績のログとしての価値が付加される。動いていたことがあるのかないのか、動いていたとしたらどんな環境でどのバージョンが動いていたのか、そういった情報が残ってることで助かる場面は山ほどある、なんてことはPC使って作業してる人なら何度も体験しているはずで。

ところが、日付も環境も書いてなければ…。

「今年の話なのか、あるいは10年前の話なのか、
一体いつの時代の話なのかは分からんが、
とにかくいつかどこかの時代に、
私達がよく知るシステムなのか、あるいは珍しいシステムなのか、
一体どの環境なのか分からんが、
とにかく謎の環境の上で…このソフトウェアが動いていた…そんな事例もあるらしい」

これでは、まるで長老の口伝の昔話。もしくは神話の類。どれだけ詳細な内容を記しても、日付と環境が書いてないだけで、かなりゴミ記事に近づいてしまうわけで…。

ということで、「ゴミ記事を書くな」的主張より、
「せめて日付と環境ぐらいは書こうぜ」
「記事にはならなくてもログにはなるからさ」
と主張したほうが、まだ建設的じゃないのかなあ、と…。

とは言え、自分も時々うっかり環境を書き忘れてる時がありそうなのでアレなのだけど…。まあ、できる範囲で気づいた時には一応書いておく、ぐらいの軽い話ということで…。

#5 [web][neta] 記事とログは違うのかもしれない

ふと思ったけど、記事とログは違うのかもしれないな、と…。

考えてみたら、自分、そのあたり意識してなかったかも。Web上で、ログの類を記事と思い込んで眺めていた場面が多々あったような、そんな気もしてきた。マズいな…。

記事はログにもなるのだろうけど。逆に、ログは記事になるのだろうか。…ならないよな。たぶん。

かといって、ログはゴミかというとそうでもない。分かってる人がログを見れば、それだけで何かのヒントが得られることもある。しかし、分かってない人がログを見ても、ゴミかノイズにしか見えないだろう…。

ブクマ数が多いページを眺めて「なんだこりゃ。ゴミじゃねえのか」と思ってしまった時も、「待てよ? これは記事じゃなくて、ログじゃないか?」と思い直してみるのもアリかもしれないなと。自分はログを見て何かを察するほどの知識はないけれど、そっち系の人には有意義なログ、だったりするのかも。みたいな。

ログは、楽譜みたいなものかもしれない。

例えば、自分は楽器が弾けないから楽譜を見てもチンプンカンプンなのだけど。だからと言って、「自分が読めないから楽譜はゴミだ! ノイズだ!」と叫ぶかと言えばそんなことはしない。音楽やってる人なら「ほほう。なるほど」な情報だったりするわけで。

楽譜が読めない自分は、楽譜が読めるように勉強しなきゃいかんのだろうか。…別に勉強しなくていいんじゃないか。読めないことで困ってるわけでもないし。

楽譜が読めないことを恥ずかしいと思わなければいけないのだろうか。…そんな必要も無いよな。楽譜が読めない代わりに、プログラムのソースコードは読めたりするし。人それぞれ能力は違うし、興味が湧く分野も違うのだから。

「俺には読めない楽譜が、何かの拍子にたまたま目に入ってしまった! 許せない! 一体誰だ!? こんなゴミをアップしたヤツは!」と憤る必要なんて、どこにも無いよな…。

もっともこのあたり、TV感覚でネットを眺めてる人なら憤慨しそうな気はする。例えば、TV番組を見て、「なんだこの番組は!? 内容が分からない! こんなものを公共の電波で流すな!」と憤慨する場面はありそうだし。同じ感覚で、ネット上で見かけた何かしらに文句を言ってしまう…場面だってあるのかもしれない。

それはおそらく、ログなのだ。記事じゃないのだ。「ああ、これはログだな。俺に分かるわけない」とスルーしとけばいいのだ。たぶん。

2017/10/19(木) [n年前の日記]

#1 [raspberrypi] Raspberry Pi Zero WでOpenGLが使えそうかテスト

Raspberry Pi Zero 関係の記事をググって眺めてたら、以下の記事を見かけて。ちなみに、2016年頃の記事。

_OpenGL Drivers on Raspberry Pi B/B+/Zero - Raspberry Pi Forums

一応公式としては、

「Raspberry Pi で OpenGL を有効にできるのは Pi2/Pi3だけ」
「Pi1やPi Zeroはサポート外。メモリが少ないからな」
「しかも GL driver は鋭意開発中のソレだから安定動作は期待するなよ?」

と言うことになってるけど。上記の記事を眺めた感じでは、どうやら Pi Zero でも GL driver が動かせそうか試してみた人が居るらしい。

これはもしかすると、Pi Zero でも、OpenGL ES ではなく、 OpenGLを使える可能性があるということだろうか…。であれば自分も試してみたいところだなと。

有効にする方法。 :

とりあえず、有効にする方法としては、/boot/config.txt に
dtoverlay=vc4-kms-v3d,cma-128
を追加するだけ、らしい。もしかすると sudo raspi-config で GL driver (Full KMS) を有効にしてから修正したほうがいいのかもしれないけど。

ちなみに手元の環境(Raspberry Pi Zero W + raspbian stretch)で試した感じでは、
  • hdmi_drive=2
  • gpu_mem=128
等の行が有効になってると、デスクトップ画面が表示されなかったり、使ってるうちにどんどん動作が重くなって固まったりするようで。それぞれをコメントアウトしておいたほうがいいのかもしれないけど自信無し。このあたりは環境によるのかもしれない。
#hdmi_drive=2
#gpu_mem=128

また、GL driver は2種類あって…。Full KMS は動いたけど、Fake KMS は画面が表示されなかった。

前述の記事では、/usr/bin/raspi-config を編集して、do_gldriver() 内の Pi Zero 用の処理を削除 or コメントアウト、と書いてあったけど。raspbian stretch では、該当する処理は見当たらず。現行版では、修正は不要なのかもしれない。

動作確認。 :

glxgears は、60FPS前後で動いてくれた。ちなみに、GL driver を有効にしてない状態では、色がめちゃくちゃな上に、7FPSしか出ない。

neverball というゲームアプリも動いてくれた。ただ、しばらくプレイしていると、どんどん処理が重くなって画面は紙芝居状態に。1FPSも出ない状態がしばらく続いたりして。

元々公式がサポートしてないことをやってるので、まあ、仕方ないよな…。

公式が「サポートしないよ」と言ってるのも分かる気がする。設定を少し間違えると画面が表示されなくなるのは厳しい。Raspberry Pi しか持ってない人がうっかりやってそういう状態になったら手詰まりになる。なので、非サポートも仕方ないのかも。

証拠画面。 :

OpenGL が動いてる様子を、デジカメで撮影してアップロードしてみたり。



画面がボケボケでちょっと分かりづらいけど…。一応、ギヤが回ったり、3DCGっぽいゲーム画面が動いてることぐらいは分かるかなと。ちなみに、液晶ディスプレイの下に居るのが、Pi Zero W。

クッキリ状態でキャプチャできる何かしらが欲しくなってくるな…。でも、Raspberry Piの動作画面をキャプチャするためだけに、その手の機器を購入するのもアホらしいな…。

#2 [raspberrypi] Raspberry Piって学校等ではどの程度使われているのだろう

たまたまNHKをつけていたら、どこかの小学校の1年生のクラスで、プログラミング教育をしている映像が紹介されていたのだけど。

ぼんやり眺めていたら、小学生達が使ってるPCが、タッチパネル付きのノートPCばかりなことに気づいたり。キーボードもちゃんとついてるし、画面も結構大きいな…。

その映像を見ていて、なんとなく思ったのだけど。もしかして、小中学校でプログラミング教育を、となった場合、大半はちゃんとしたノートPCを使うことになって、Raspberry Pi のような非力な機器はほとんど使われなかったりするのではないか、などと思えてきたわけで。Raspberry Pi は元々教育用途を想定して作られたPCのはずだけど、日本国内においてはそういう使われ方はしないのかもしれんよなと。

いやまあ、電子工作も含めた何かしらであれば、Raspberry Pi が使われることもあるだろうけど。フツーのノートPCにはGPIOなんてついてないから、その手のアレコレをやりたくてもできないし。

しかし、ハードウェアについては全く触れませんよ、ソフトウェアしか教えませんよ、ということなら…。何かしらの操作をしてみてもなかなか反応が返ってこない Raspberry Pi なんか使わずに、比較的すぐに反応が返ってくるフツーのノートPCを使うわなと。

仮に、お子さん達が、Raspberry Pi を持たされないのであれば…。自分も無理して Pi Zero でどこまでできるか、みたいなことを調べる意味も無さそうだなと。調べて公開したところで誰の役にも立たない情報にしかならんわけだし。自分、「非力なハードでもここまでできたで(ドヤァ」な趣味を持ってるわけでもないし。

まあ、実状が分からんので、そこらへんの判断はつかないわけだけど。現状では、どうなってるのだろうなあ…。

2016/10/19(水) [n年前の日記]

#1 [python] Python + PySideでお絵かきウインドウを作成

Python + PySide + Pillow(PIL) を使って、お絵かきウインドウモドキを作成。動作確認環境は、Windows10 x64 + Python 2.7.11 + PySide 1.2.4 + Pillow 3.4.2。

今のところこんな感じに。左側でブラシを選んで、右側でマウスをカチカチすれば描ける。

drawing_pyside_5_ss01.png


ソースが長くなってきたので、ちょっとココに貼りづらいな…。とりあえず、ファイルだけ置いておこう…。

_drawing_pyside_5.py

スクリプトと同じフォルダに、brushes というフォルダを作って、中に、 _default.png_extra.png を置いておくと、ブラシ画像を読み込んでくれる。
C:.
|   drawing_pyside_5.py
|
\---brushes
        default.png
        extra.png

ひとまず、ここまでできれば、Python + PySide (あるいは PyQt)を使ってお絵かきソフトやドットエディタの類を作れそうではあるなと。

スクリプトソースとブラシ画像は CC0 / Public Domain ってことで。

ライセンス問題についてメモ。 :

上記のソレは、スクリプトソースと画像を公開してるだけなので、ライセンスは自由に決められるだろうと思っているのだけど。これがもし、バイナリ化(exe化)して配布するという話になると、ライセンスがちと面倒臭くなる予感。

仮に、 _PyQt を使って実装した場合は、同梱するPyQtのライセンスがGPLと商用ライセンスしか許されてないので、個人が趣味で作るソレはGPLにせざるを得ない。GPLが嫌いな人、GPL汚染を嫌がる人達は、ちと手を出しにくい。

ただ、 _PySide を使えば、 PySide はLGPLで使えるので、自分で書いた部分についてはGPL以外のライセンスにもできるんじゃないかと。たぶん。

しかし、PySide は Qt4 までの対応で Qt5 に対応してなくて。PyQt は Qt5 にも対応してるらしい。「ワシは Qt5 を Python から使いたいんじゃ」という人は、PyQt を選択するしか無いんだろうなと。

PySide のインストール方法。 :

ネットに繋がってるWindows環境で、Python がインストール済みなら、DOS窓を開いて以下を打てば PySide がインストールできる。
pip install pyside

既に PySide がインストールされていて、アップデートしたい場合は、以下。
pip install -U pyside

アンインストールしたい場合は、以下。
pip uninstall pyside

しかし、Pillow (画像処理ライブラリ) のインストールは、pip を使ってネット経由でやるとエラーが出ちゃったので…。 _Python Extension Packages for Windows - Christoph Gohlke から、自分の環境にあった .whl を一旦ローカルにダウンロードして、以下のように指定してインストールしてやったらエラーが出なかった、とメモ。
pip install Pillow-3.4.2-cp27-cp27m-win32.whl
ちなみに上記の例では、cp27 = Python2.7用、win32 = 32bit版、というファイル名のルールになってる。

上記のサイトでは PySide の whlファイルも公開されてるけど、バージョンが 1.2.2 なのでちょっと古いみたい。PySide の現行版は 1.2.4 なので。

色を反映させる処理で悩んでたり。 :

ブラシ画像がグレースケール画像の場合は、色を簡単に反映させられることが分かったのだけど。処理としては、元画像の明度をアルファチャンネルとして使って、RGB値は選択色をそのまま使えばいいわけで。

ただ、RGBAフルカラー画像のブラシ画像に、色を反映させる処理で悩んでたり。元画像のRGB値が128の時に、現在の色がそのまま出るように、と考えて、今のところ2つの方法を試してるけど…。

about_color_change.png

ガンマ補正っぽい処理をしたほうがいいのか、それとも、RGBではなくて _HLS(色相、輝度、彩度) にして計算するべきか…。何にせよ今の処理では、結果が望んでるものとはビミョーに違う感じが。

#2 [cg_tools] JTrimはアルファチャンネルを扱えなかったのか

Inkscape でエクスポートしたpng画像をJTrimで読み込んでみたらなんだか妙な表示に。

ググってみたら…。

_JTrimは予めアルファチャンネルの設定された透過画像はきちんと読み込めないらしい(「透過色設定」はできるが) | さまようけんばん

なるほど。JTrim はアルファチャンネルを持った画像を開けないのか。起動が早くて便利そうと思ってたけど、ちと残念。

#3 [prog] マルチカーソルって便利そう

Windows10上で、Atomエディタを使ってPythonスクリプトを書いてるのだけど。マルチカーソルなる機能がなんだか便利そうだなと。

atom_multicursor_ss01.gif


文字列を選択すると「他にもこのあたりに同じ文字列があるよ」と点線で枠が表示されるので、Ctrl+D を押していくとどんどん選択されてマルチカーソルモードに入る。その状態で編集すると、複数の場所を一気に編集できる。ESCキーを押すとマルチカーソルモードから抜ける。

Ctrl+マウス操作でもマルチカーソルモードになるらしい。

2015/10/19(月) [n年前の日記]

#1 [anime][neta] ラノベ原作本の絵柄とラノベ原作アニメの絵柄

思考メモ。

_「ヘヴィーオブジェクト」 というラノベ原作アニメを一応毎週視聴しているのだけど。台詞回しが洋画ノリでなんだか面白いなと思いつつ、しかしキャラデザインが、ハーレムラノベ原作っぽい萌えキャラのソレなので違和感を覚えていたり。この組み合わせ、ちとクラクラするなと。

なんとなく思ったけれど、例えば、これがもし、 _「GANGSTA.」 のようなキャラデザとか、あるいはせめて _「鉄血のオルフェンズ」 のようなキャラデザだったら、しっくりきたんだろうなと。

もっとも、世の中には、「まどかマギカ」や「がっこうぐらし」のような、この内容をあえてこの絵柄で、という天邪鬼な作品もあるわけで。もし、「ヘヴィーオブジェクト」も、そんな天邪鬼な姿勢でああいったキャラデザにしたのであれば、それはそれで。

でも、たぶんそうじゃないような気もしていたり。原作者・イラストレーター・編集部からこういう路線のキャラデザを強要されたとか、原作ファンから叩かれるのを恐れたとか、そういった後ろ向きな理由でこうなってしまったのではないかなあ、などと邪推していたりしますが。

まあ、既に作ってしまったのだから、しょうがない。仮に後ろ向きな理由でこの絵柄になったのだとしても、「いや、俺達、天邪鬼ですよ? あえてこの絵柄にしたんですよ?」と嘯き続けるしか道はないよなと。

ラノベに求められる絵柄とアニメに求められる絵柄。 :

今更ではあるけれど、考えてみれば、ラノベ原作に求められる表紙・挿絵の絵柄と、アニメに求められる絵柄って、おそらくは違ってしかるべきで。

ラノベ原作本は、例えば書店で平積みされた時に、「おっ? なんだコレ?」とお客さんに思ってもらわないといけない。そのためには、キャッチーな絵柄で表紙を描いてもらうしかなくて。たとえソレが内容と著しく乖離した絵柄であっても、お客さんの足を止めて、手に取ってもらうためには仕方ない。

原作の内容を一切顧みることなく、そういう絵柄を持ってくるなんて、ある意味作品に対して大変失礼極まりない話ではあるのだけれど。しかし、売れなきゃ原作者も編集部も困り果てるわけだから、だったらもう諦めて、ズキューンと来そうな絵柄をひたすら追求していくしかないだろうなと。

だけどアニメの場合、その絵柄で、30分 x 13〜26話ほど、延々と映像を見せ続けなければいけない。内容から乖離した絵柄では、視聴者は「なんじゃこりゃ」状態になる。本来であれば内容と一致した絵柄・キャラデザを新規に考案しないといけないはずで。

だけど…。
  • ラノベ原作者はあくまで小説家だから、アニメのことなんてさっぱり分からんし。「俺はこの絵師さんの絵柄が好きだ。だから、この絵柄でやってほしい」と、自分が書いた作品の正体も分からずに平気で言ってくることもあるだろうなと。
  • 原作本の表紙を描いたイラストレーターさんは、自分の絵柄がそのままアニメ化されたら当然嬉しいから、「できれば俺の絵柄に近い感じで…」と言い出すよなと。
  • 編集部は、この絵柄を採用したことでこれだけ本が売れたという実績が既にあるわけだから、ここは同じように実績のある絵柄で、と要求するよなと。
  • 原作ファンは、原作本の絵柄を見て「これが正解」と思い込んでるから、当然原作本と同じ絵柄になることを期待してるし、アニメ版で別の絵柄になったら狂ったようにアニメスタッフを叩き始めるよなと。
  • アニメスタッフは、自分達のオリジナル作品ならともかく、他人の創作物を押し付けられてさあさあコレをアニメ化しろと言われてるだけなんだから、「この絵柄は、このアニメ向きではないですよ」等、親身になって教えてやる義理も道理もないわけで。原作サイドと喧々諤々して下手すりゃ険悪になるのは面倒臭いし。キャラデザ原案レベルから新規に考案・検討するとなれば時間も予算もかかるし。言われたとおりに、その絵柄にしちゃうのだろうなと。

かくして、原作者も、イラストレーターも、編集部も、原作ファンも喜んでいるけど、ソレ以外の視聴者は「なんじゃこりゃ」「内容と一致してねえ」と思ってしまう、そんな絵柄のアニメが次々に、ということがあるのかもしれないよなと。

でもまあ、アニメ化をキッカケにして、原作本に手を伸ばす人も居るかもしれないし。それはつまり、商売としてはちゃんと回るということだから、それもそれで別に問題はないのか。

アニメの作品数もべらぼうに増えてしまったので、「内容と乖離してるけどキャッチーな絵柄」がアニメ作品においてもメリットになる場合だってあるかもしれないし。だけど、それをずっと見続けるとなると、ちと厳しいものがあるんだよな…。何かいい手はないのかな。

昔の国際映画社作品のように、OP・EDだけ本編とは違う絵柄で、とかどうだろう。冗談ですけど。

スターザンスみたいに、カッコイイ台詞を吐くときだけ絵柄をガラリと変える、とか。…む。これは意外とイケるんじゃないか。ていうか監獄学園はちょっとそんな感じだったような。…考えてみたら物語シリーズはソレを多用してる気も。場面によって絵柄をバンバン変えたって構わないんだよな。

ラノベ原作アニメのキャラデザのバリエーションはどうして少ないのか。 :

ラノベ原作アニメを見てると、どのキャラも同じに見えて区別がつかないのだけど。顔のパーツが全部同じだし。違うのは色と髪型ぐらいだし。しかし、これもまた、原作の表紙絵に準じたキャラデザにする限り、仕方ないことなのだろうなと。

ラノベ原作本の表紙絵を見て、道行く人に「おっ」と思ってもらうためには、そのイラストレーターさんが習得している絵柄の中で、もっともベストな絵柄・キャラデザを繰り出していくしかなくて。

しかし、イラストレーターさんは、その「ベストな絵柄」とやらを何種類も持ってるわけもなく。大体は、自分が得意な絵柄なんて、一種類しかない。その最強の一種類の絵柄をひたすら繰り出して勝負するしかなくて。

だから複数のキャラを描く場合も、そのキャッチーな一種類の絵柄・キャラデザで描き上げるしかない。結果、キャラの判別が難しい状態の表紙・挿絵がずらりと並ぶ。

そんな状態で描かれた絵を元に、アニメ用のキャラデザを起こすのだから…。アニメ版も、誰が誰やら分からないキャラデザになってしまうのは、これはもう仕方ないことだよなと。

もっとも、そんなこと言い出したら、漫画作品はどうなるの、てな話にもなるのかな。例えば、車田正美作品とか、あだち充作品とか…。アレでもしっかり売れてるという事実を考えると…。「髪の色が違うだけでもラノベ原作アニメは恵まれてるだろ! 漫画なんて白黒だぞ?!」とか言われちゃいそう。

オチはないです。只の思考メモです。

#2 [anime][neta] 「GAMBA」のキャラデザが気になってたり

個人的に、 _「冒険者たち」 を原作として作られた3DCGアニメ、「GAMBA ガンバと仲間たち」のキャラデザが気になっているのです。いや、本編見てないし、見に行く予定もないけど。単にキャラデザが気になってる、ってだけの話で。

「冒険者たち」は、昭和時代に手描きアニメで映像化されたことがあって。 _「ガンバの冒険」 でしたっけか。 _Google画像検索 すれば、絵柄が分かるかしらん。

で、巷のアレコレを眺めてると、手描きアニメ版しか見てない人達が、3DCG版のキャラデザに対して、とにかくひたすら叩きまくりなわけですよ。アニメ版を見てたってことは、今では結構な御歳の分別のある大人ばかりだろうに、いい歳してオマエラそこまで叩くか、ってぐらいにボッコボコ。

ですが、幸い自分は子供時代に、アニメ → 原作の流れで、原作本を読んでまして。小学校の図書館に置いてあったんです。「あ! 『ガンバの冒険』の原作だ! 気になる!」と思って手に取って、「うわー、おもしれー、おもしれー」と読み耽ってました。

原作を読んだ立場からすれば、3DCG版のキャラデザって、全然アリというか、むしろ上手にキャラデザしたなあ、って感じなんですよね…。何せ、当時の原作本の挿絵は、ガチのドブネズミがリアルに描かれてましたから。要は、 _ピーターラビット みたいなノリ。たしかそのはず。

正直なところ、原作を読んだ直後、子供心に思ったのです。「アニメの絵は、どう考えてもおかしい…」。この原作を読んで、どうしてあんなアバンギャルドなキャラデザに辿り着いたのか。全く理解できない。作った人達は一体何を考えていたのか。みたいな。―― 当時は子供だったからキャラデザなんて言葉は当然知らなくて、とにかく「アニメの絵はおかしいぞ」「どうしてあんな絵になるんだ」と不思議でしょうがなかった、てなだけの話ですけど。

というわけで、おそらくはアニメ版しか知らない人達が、3DCG版のキャラデザを叩いている場面を目撃すると、自分はモヤモヤしてくるのです。君達が信奉してる手描きアニメ版のキャラデザは、原作から乖離してるほうなんだけどなあ…、みたいな。

せっかくの機会だから、原作を読んでみてほしいよなと。原作を読めば、「ああ…3DCG版も、これはこれでアリかも」と大体の人は思うんじゃないかなあ。同時に、手描きアニメ版の大胆さを再認識できて、「アニメ版、実は凄かったんだなあ」「スタッフが『冒険者たち』じゃねえか」とますます思えるのでは、と。

まあ、気持ちは分かるんですけど。子供の頃に目にした映像化バリエーションの一つが、その人の中では唯一無二の正解になってしまう、なんてのはよくある話で。

自分だって、子供時代、劇場公開時のカリ城のポスターを見て「絵が変だ」「これはルパンの偽物に違いない」と思い込んで眉をしかめてたので、そういう気持ちはよく分かってしまうのでした。…ルパン三世の1stシリーズに参加してた、宮崎駿氏+大塚康生氏が作ったルパンなんだから、カリ城のルパンだって「本物」だったのに。子供の頃って知識が無いから、「こういうデザインもアリなんだよ」ってことすら分かんないんですよね…。

それぞれのキャラデザに辿り着いた経緯を想像。 :

しかしどうしてアニメ版は、あんなキャラデザになったのだろうと。たぶん、こういう思考じゃあるまいか…。
  • リアルなネズミを描き続けられるほどの作画技術が、当時の日本のアニメ業界には無かった。描けないんだから仕方ない。リアル路線は無し。そんなの無理。
  • 当時、アニメは子供向けの映像作品と完全に思い込まれていた。子供を楽しませるには表情の豊かさが必要。故に、目と口は大きく。体の半分ぐらいのサイズまで顔を大きくしてアピールしないといけない。
そんな感じじゃないかなと。何せ主人公がドブネズミですから。見ただけで「ウゲエ」となるキャラデザは、ちょっと避けないといけませんわな。

同じように、3DCG版も想像してみると…。
  • 「冒険者たち」と言えば、手描きアニメ版「ガンバの冒険」だろう。しかし、あの手描き感全開のキャラデザを再現するなんて、今の3DCG技術では不可能。描けないんだから仕方ない。手描きアニメ版の路線は無し。そんなの無理。
  • リアルなネズミなら3DCGで描けなくもない。しかし、ファミリー向け作品として考えた場合、ガチでリアルなドブネズミを90〜120分見せ続けるのは、そりゃいかがなものか。一体どんなプレイやねん。故に、リアル路線も無し。マニアック過ぎる。
  • 3DCGアニメの成功事例として、ピクサー作品「レミーのおいしいレストラン」がある。大量のネズミが登場するけれど、ファミリー向け作品としてそれなりにヒットした。だとすれば、ああいったキャラデザが妥当なのではないか。少なくとも実績はある。
そんなところじゃないかなと…。

仮にそういう感じの思考でキャラデザが決まっていったのだとすれば、どちらも別におかしいキャラデザというわけではないよなと…。当時の、あるいは現在の選択肢の中では、比較的ベターな選択、だったのではないかしらん。

まあ、実際のところどうだったのかは分からんのですけれど。自分はそのように想像しました、ってだけの話です。

#3 [comic] 人生デザインU-29、Web漫画家さんの回を視聴

この回、かな…。たぶん。

_矢島 光(漫画家)| 人生デザインU-29 | NHK

番組表で「漫画」の文字を見かけて録画してたのだけど。IT企業を辞めてWeb漫画家さんになった事例を紹介していて、なんだか興味深かった。そんなルートもあるんか、みたいな。いやまあ、銀行員から漫画家になった先生も居るので、どんなルートもありえるのだろうけど。

使ってる道具が液晶タブレットで、最近の漫画家さんは液タブ使って描くのがもはや本当に当たり前なんだなと。いいなあ、液タブ。値段、高いんだよなあ…。

IT企業に勤めてたのだからIT業界を舞台にした漫画を描くべき、と編集者さんが言ってるのを見て、たしかにその通り、と思ったり。少女漫画の世界って、学生時代にデビューしてそのまま漫画家になって、というパターンがほとんどなので、学生が主人公の漫画や、絵空事のファンタジー漫画を描いてるうちはなんとか誤魔化せるけど、例えばレディースコミックにシフトして社会人が主人公の漫画を描くとなると、現実味が全く無い、悲しいくらいに箸にも棒にもかからない漫画になってフェードアウト、てな展開が。 *1 その点、社会人経験があるというのは基礎的なところで強いよなと。経験が無いと、感覚的な部分まで緻密な取材で補完しないといけないわけで、尋常ではない努力が…。努力家タイプの作家さんなら乗り越えていけるけど、そういう部分が努力家ではない作家さんがほとんどだったりするわけで…。とかどうでもいいことを思いつつ眺めたり。

「読者をイメージできないのがツライ」という漫画家さんの発言に、なんだか共感。自分も、ガラケー用ゲームを作ってた頃、そのへん全然見えなくて。お客さんの姿がイメージできないまま作り続けるのって、どっちに進んでいいのか、どこにこだわればいいのか、分からなくてツライんだよな…。けど、どうも世の中、そういう状態で作ってる方々が大多数、みたいな感じらしくて。ターゲット層がイメージできてたような気になった、そんな体験があるだけでも随分恵まれてる、らしいのだけど、逆にそんな時期があったが故に後々ツラく、みたいなところはあるよなと。

何はともあれ興味深い番組でした。録画しておいてよかった。
*1: 「コレ、“生徒会長”を“部長”に変えただけだろ! なめとんのか…」みたいな。いや、さすがに昔の話で、今はそんなの掲載されないと思うけど。

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

近所のスーパーに行って夜食を購入。

スーパー内のあちらこちらで、湿った感じのゲフゲフゲフ、ゴフゴフゴブッ、てな咳の音が。ヤバイ。これはヤバイ。絶対うつされる。しかもそういう人達って、何故かマスクをつけてない人がほとんどで。目の前でマスク売ってんだから、買ってつけようよ…。食品の前でゲフゲフゴフゴフして飛沫をふりかけてんじゃねえよ…。

もっとも自分だって他人の事は言えないのだけど。会社勤めしてた頃、職場でゲフゲフゴフゴフやってて、「他のチーム員にうつされたら迷惑だろ! 帰れ! 帰って休め!」とディレクターさんから叱られたことを思い出したりして。なので、そのへんあまり言えないのでした。

とりあえず、今度からマスクをつけていこう…。一応予防効果はあるらしいし。

飛沫がついた食品はどうなんだろうと思ったけど、ググってみたらその手のウイルスは短時間で死滅するそうで。でも、唾が飛んでくっついた食品だもんな。気分的には良くないよなあ…。

夜になったら咳が。 :

ゲフッ、ゲフッ、って感じの咳が止まらない状態に。うつされたんじゃないのか、コレ…。

2014/10/19() [n年前の日記]

#1 [nitijyou] 足場を外したらしい

家のペンキ塗り工事で使う足場を、今日片づけていたらしく。結構作業は進んだ、ということなのかな…。

#2 [anime][neta] コンテにちょっとプリプリ怒ってしまったのでメモ

某アニメを見ていたら、作画がかなり厳しくて。もうちょっとで「おっ、まぶしっ」になりそうな雰囲気で、ハラハラドキドキしつつ見てたのですけど。

そんな状況なのに、モブの振り向き動画カットが出てきて。自分、ソレを目にしてブッツンして、なんだか頭の中のモードが切り替わっちゃって。
「このモブ動かす必要あるか? ねえだろが」
「この頷く動画は要らん」
「この腕の振りも要らん」
「このカットも動かしてる。あっ、また動かした。どうして止め絵にしないんだ」
「キャラが台詞吐くたびに、律儀に画面にそのキャラ出さなくてええんやで」
「顔映すな。口パク描かなきゃいかんだろ」
「いっそコイツ人形にしろ」
「馬鹿正直に何人も歩かせんな。せっかくの夕焼けなんだから、出崎演出真似てハーモニーすれば台詞の3つや4つ消化できるだろ」
などと、自分は一体何を見て、どう楽しんでるのかさっぱりわからない状態に。

状況が厳しいのに、通常運転のコンテ描いてちゃいかんよな…。でも、コンテ描いてた時はそういう状況と知らなかったのかもしれないし。先輩達が生み出してきた色んな技を全く知らない人がコンテ描いてるとは思えないので、状況認識さえできてれば見事な省エネ作画追求コンテを描いてくれたはず…。

ド素人がこんな頓珍漢で生意気な感想持ってスミマセン。でもホント、あの状況でモブを動かすことを要求するコンテはあんまりだよ。と思ってしまったのでメモ。

2013/10/19() [n年前の日記]

#1 [unity][blender] blenderでアニメーションをさせる方法を勉強中

Unity上でいつまでも青い箱を動かしていても気分が乗らないなと。パッと見で、ちゃんとキャラクターに見えるモデルを動かしたいなと。てなわけで、blender上で人体モデルっぽいものを作ってモーションつけて、それをUnityで表示してみたいなと。

以下のページを参考しつつ勉強中。ありがたや。

_Blender - モデリング・アニメーション - なにげにぷろぐらまーWiki - Seesaa Wiki(ウィキ)
_Blenderでモデリング(人)
_Blenderのモデリングツール(アーマチュア)
_Blender編集モード(Pose Mode)
_Blenderで作ったモデルとアニメーションをUnityにインポートする - #junki::acoustic
_Blenderからの読み込み、座標軸 - tanaka's Programming Memo
_[Blender] [Unity]Amatureに複数のアニメーションをつける | つくりんぐ
_Blender 2.61からUnityへ一発でインポートする最強設定(ゲーム向け) - tuedaの日記
_Blender で複数のアニメーション(Action)を作ってUnityにインポート: みこさんちの開発日記

「blender上のドープシートの『F』のボタンは押しておけこれは罠だぞ」てな説明をあちこちで見かけたのだけど、本当に罠だった…。そのへん気にせず作業して、.blendファイルを保存後、blenderを再起動して.blend を読み込んだら、せっかく作ったモーションが全部消滅していて愕然というか呆然というか。「F」を押しておかないと、モーションを保存してくれないらしい。「F」は押しておけ。ここは罠ですぞ。マジで。

人体モデルモドキを作ってアーマチュアとやらを割り当てて動かしてみたものの、肩のあたりがよろしくなく。腕が下を向いてる時はまだいいのだけど、上に向くと ―― ラジオ体操みたいなポーズを取らせるとポリゴンが捻じれて見た目恐ろしいことになってしまって。動かすためのモデルを作成するコツが ―― 肩の部分はこういう構成にすると破綻しないぞ、みたいなノウハウがありそうな。MMDモデルとかそのへんどうやってるんだろう…。

#2 [anime] キルラキル1〜2話を視聴

今石監督+中島かずき脚本の作品だから相変わらずとんでもないんだろうなと予想してたけど、やっぱりとんでもなかった。ハジケてるというか、ぶっ飛んでいるというか、元気一杯というか、バイタリティに溢れてるというか。とにかく、やんちゃなアニメ、暴れ放題、って感じで。

作画についても、手描きならではというか、ある種Aプロっぽいというか、その場の雰囲気・キャラの表情がしっかり伝わってくるカットが目白押しで。3DCGでは、まだまだこの域にはいけないよなあ…。やっぱり手描きはこういう方向で活かさないと…。「ゼロ戦のラインを描くのは難しいんだ」とボヤいてた、先日引退表明した某監督みたいな、もったいない手描きの使い方をしてちゃダメだよなあ…。てなことを思ってしまったり。手描きでしか描けないものがあるし、3DCGが得意なものもあるし、それぞれの得意分野を活かしたほうが、と。そういう面でもイイ感じの画作りだなと思えたり。

生きている制服という設定の珍妙さに感心したのだけど。よくよく考えてみたら、ど根性ガエルなのだなと…。アレをここまでカッコよくアレンジしてしまうスタッフの手腕に脱帽。庵野監督がEVAのことを「要は鎧を着た『ウルトラマン』」と周囲に説明していたらしいけど。そういうノリで行けば、「要するに『ひろし』が美少女になって毎週バトルする『ど根性ガエル』だよ」という説明もできそうな。もちろん、もう全然何もかも別物だから、そういう冗談(?)も言えるわけだけど。

極太フォントでキャラ名その他がドコーンドコーンと出てくる演出にシビレた。文字を出すことでちゃんと説明も果たせているし、何よりスタイリッシュでカッコイイ。上手い見せ方を考えたものだなあ、と感銘を。まあ、海外に輸出しようとした際にはどうなんだろうと思わないでもないけど、売れるか売れないか全然読めない海外市場を念頭に置いて作るなんて馬鹿馬鹿しいし。まずはやりたいようにやっちゃうほうが、と。…新房総監督の物語シリーズもそうなのだけど、文字情報・フォントの使い方を色々工夫してる・画として取り込んでいる作品が一定数作られている印象があって、そのへんなんだかワクワクします。

考えてみたら、極太フォントって、もしかすると昨今流行りのフラットデザインと共通する部分がありそうな気も。

#3 [anime] ウルトラマンギンガの設定を見ていてなんだか感心

福島でもようやくウルトラマンの新作(?)が放送されたようで。ウルトラマンギンガとかなんとか。

今回の作品は、ウルトラマンに変身するという設定ではなくて、怪獣やウルトラマンに人間が乗り込んで戦う、という設定らしく。変身ヒーローだったウルトラマンが、マジンガーZみたいなウルトラマンになったわけですよ。シリーズ内ではおそらく大冒険じゃないのかなと。

まあ、比較的コミカルなノリで流れを見せてるので、そのあたりの設定がビンビンに異質な感じで伝わってくるわけではないのだけど。でも、仮にリアル寄りな見せ方をしたら、おそらくライディーンとかEVAとかあのへんの印象を受ける設定、ではないのかなと。てなわけで、面白い設定を考えた・持ってきたもんだなあ、と感心したことをメモ。

「いやいやいや、誤解だよ。アレは変身してるんだよ?」と言われそうな気もする。そっちの解釈が正しいならスイマセン。そのへんよくわからない、ぼんやりした見せ方をあえて選んでる印象もありますが。今までのウルトラマンシリーズの設定に拘ってる人達の拒否反応を避けようとしてるところもあるのかなと邪推したりもして。…昔の特撮ヒーロー番組は、もっと自由な発想が許されたんだけどなあ。

変身直後の ―― 変身なのかどうかわからんけど変身直後と言ったほうが通りが良さそうなのでそう言っちゃうけど ―― 地面に着地してドーンと土柱?が立った時にカメラがグルリと回り込んでいくカットがなんだか凄いなと。どうやって作ってるんだろう…。巨大感を出すために高速度撮影してるだろうから、実際には一瞬で動いてるところを撮っているはずで、当然、カメラが実際にグルリと動いていく時間なんてないよなと。マシンガン撮影でもしてるのかな…。特撮番組でもそんな撮影が許される時代になったのだろうか…。

#4 [anime][neta] 「俺の脳内選択肢〜」を見ていて妄想

「俺の脳内選択肢〜」というアニメがあって。タイトルは長過ぎて書く気もしないけど。何かの拍子に頭の中に選択肢が浮かんできて困っている少年が主人公のコメディアニメ、てな説明でいいのかな。

本編中では、その「脳内選択肢」とやらは何かの呪いらしくて、その呪いを解くために、神から与えられたミッションをこなすべし、という話の流れになってるのだけど。

そのあたりの設定を眺めていて、なんとなく妄想。というか寝ていたら夢の中でそういう設定が出てきたので、なんだかもったいないからメモ。
病室。少年と医者が居る。
医者が少年に説明してる。

人類が人造人間を作ろうとした際に、ネックになったのは脳を作ることだった。
生体部品としての脳を作り上げる技術が熟成しておらず、
通常の人間には到底及ばない、処理能力が低い脳しか作ることができなかった。
そこで、その不足分を補うため、既存のコンピュータを頭蓋に一緒に入れることにした。
脳が大量の情報を処理しきれなくなった時には、コンピュータで情報を整理して、
行動の選択肢をいくつか絞り、脳に選択させることで問題を解決しようとした ――。

医者「これはあくまで仮説だから、気を悪くしないでほしいのだが…君のその症状は…」
少年「とんでもない。その話を聞いてすっきりしました。
   …おかげで思い出すことができましたよ。
   僕は、○○社製、タイプ○○-○○、製造番号○○○の人造人間でした。」
医者「おお、思い出してくれたか。よかったよかった」

医者と少年を捉えていたカメラがどんどんT.Bしていく。
病室の窓、病院、病院がある区画、街全体、
よくわからないメカだらけの光景の隙間をくぐり抜け、
少年と、医者と、大勢の人間と、たくさんの人造人間が暮らす、
巨大宇宙船の全貌を捉えたところでカメラが止まる。

少年「するとおかしな選択肢が次々に出ていたのは、
   そのコンピュータが何かの理由で暴走してたから…ですか?」
医者「だろうね。私達の業界では冗談めかして、その症状を『呪い』と呼んでいるよ」
少年「では、『呪い』を解くミッションというのは?」
医者「そのコンピュータを工場出荷時に戻すための、メンテナンス用のコマンドなんだよ」
なんかそういう設定のSFアクション映画があったような気がする…。主人公が自分の属性を忘れてる、みたいな…。

2012/10/19(金) [n年前の日記]

#1 [nitijyou][pc] 某所のPCメンテナンスに行ってきた

昨日、PCが正常に動作しないので見てほしいという連絡を受けたので、ネットブックやUSB外付けHDDをバッグに詰め込んで、親父さんの電動自転車を借りて行ってきたり。走ってる時の振動で機器が壊れないかヒヤヒヤしながら移動。

AM09:00〜PM06:30ぐらいまで作業。

詳細はGRPでメモ。

2011/10/19(水) [n年前の日記]

#1 [windows] メインPCがすんなり起動するようになった

Windows7 Peo 64bit版を入れているメインPCが、昨日あたりから異様に動作が遅くなっていたのだけど。

どうも VMware Player が悪さをしていたのではないかという気がする。vmauthd とかそのへんが怪しい。アンインストールしたら以前の速度に近い感じで動くようになった。

しかし、CrystalDiskInfo で見る限り、HDDのリードエラーレートは変化しているようで、やっぱりなんだか不安。代替セクタ数は増えてないみたいだけど。それともリードエラーレートの変化は気にしなくてもいいのだろうか…?

何にしてもこの状態では不安すぎるので使い続けるわけにはいかない。ということで。HDDを通販で注文。今度は Hitchi、HGSTじゃないモノを購入することに。

2010/10/19(火) [n年前の日記]

#1 [pc] ドライバをアップデートした

WindowsXP + FirefoxでWebを見ていただけなのに、ブルースクリーンに。再起動がかかる前のほんの一瞬、nv_disp4.dllなる文字列が見えたので、もしかするとコレはドライバが悪いのかなと。試しに、関連ドライバをアップデートしてみようと。 Realtekのサウンドドライバと、NVIDIA GeForce を更新した。

Realtekのソレは、WDM_R253.exe を実行。…一旦アンインストールしてから作業したほうがいいのだろうか。よくわからない。

GeForce は、260.89_desktop_winxp_32bit_international_whql.exe をDLしておいてから、プログラムの追加と削除から関連プログラムをアンインストール。再起動して、画面解像度が低くなっていることを確認できてから、セーフモードで再起動。Driver Sweeper でNVIDIA関係のソレを検索して削除。通常モードで再起動して、先ほどDLした GeForce をインストール。

Driver Sweeper は、セーフモード時の解像度では、ボタンがすべて表示されなくて困ってしまった。勘で、TABキーを押していって、たぶんここらへんでボタンにフォーカスが合っているんじゃないか、と思われるところでEnterキーを押してなんとか実行。

2009/10/19(月) [n年前の日記]

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

煙草と夜食を買いに。

100円ショップでリストレストを買った。果たして効果はあるのかな。どうなんだろうな。

夜食を大量に購入。

#2 [nitijyou] モバゲーアプリとかmixiアプリとかについて少し検索

「作れないか?」みたいな話が来たので、実状はどうなんだろうと検索。

モバゲーは、よくわからない。Flash Lite で実装したアプリが多い、という話は見かけたが…。個人レベルで開発して儲けが出るのかどうかがよくわからない。そもそも個人で開発できるの? 最近オープン化したばかりらしいので、情報が出揃ってないのかな。

mixiアプリは、Javascriptで作るのかしら? 儲け云々は、基本的にWeb広告で稼ぐそうで、mixi側とアプリ開発側で決まった割合で分配するらしい。

2008/10/19() [n年前の日記]

#1 [iappli] 提出用バイナリ作成スクリプトを再修正

実機にDLして動作確認したら、サーバとの通信ができなかった。スクリプト中に記述するURLを間違えてたので修正。

サーバにアクセスする際のパラメータも外部ファイルに記述しておいて、プログラムを修正せずに仕様変更に対応できるようにしておきたいけど…。そもそもよくよく考えてみたら、プログラムを解析せずともパラメータ文字列が判ってしまうことはかえって問題になるのではという気もしてきたわけで。どうしたもんか。

それはともかく、仕様が届かない。土日に仕様を受け取って、それに対応させた状態で提出、という話ではなかったのかしら…。こちらで勝手に仕様を決めて実装できたらいいのだけど、どういう仕様が面白いのかがまったく判らないので手が出せず。というかこの手のジャンルの面白さがまったく判らないというか。UIを良くするとか、演出を良くするとか、そういうことならできるのだけど、骨の部分が…。うーん。

2007/10/19(金) [n年前の日記]

#1 [web][neta] _損害を受けたのは誰か。クリプトンでも初音ミクでもない。本日設立されたネット団体MIAUに他ならない。

反ネット利権体制の旗手として、本来ならば本日のトップニュースになるはずのMIAUの設立のニュースは、初音ミク消失騒動で完全に消し飛んでしまった。ネラーもはてなブックマーカーもGigazineもYahooNewsもまんまとこの策略に嵌り、議論も注目もしないままMIAUはスルーされてしまった。このMIAUの隠蔽こそが今回の騒動の真の目的であり本質なのだと思う。つまりそういうこと。今回の騒動は、マスコミ vs ネット創作なんかよりもっと大きい文脈での戦いを隠蔽する為の壮大な茶番だったのだろう。

fladdict.net blog: 初音ミク失踪騒動に騙されるな、あれは陽動作戦 より

僕たちはどうでもいい騒動に踊らされて、コンテンツ利権を巡る本丸の戦いから目をそらされてしまった。そんなちょと考えればわかるような陽動に引っかかってしまうから、はてブ衆愚とかいわれてしまうのだ。

fladdict.net blog: 初音ミク失踪騒動に騙されるな、あれは陽動作戦 より

なるほど、そういうことだったのか。と一瞬思ってしまったり。

#2 [web] _「ダウンロード違法化に反対」新団体MIAU設立で協力呼びかけ

#3 [jiji] _火星に到着したスピリッツの探索機が密かに仕組まれたバックドアのおかげで息を吹き返したオハナシ - 2007-10-18 - hoshikuzu | star_dust の書斎

面白い話だなぁ。

というわけで、開発者は必要かどうかわからなくても設計要件以上のマージンを確保しておきましょう。そして内緒にしておきましょう(嘘)

2007-10-18 - hoshikuzu | star_dust の書斎 より

内緒にしておくのが重要ポイント、なんだろうな。たぶん。

#4 [novel] 彩雲国物語の原作を読み返し

妹から借りて読んでたり。ひげ男登場の巻は読んでない…と思ってたのだけどなんだかイラストに見覚えが。たぶんコレ前に読んだな。

2006/10/19(木) [n年前の日記]

#1 [iappli] 細かいところの修正要求がきたので

対応して相手先に送ったり。10箇所ほど変更。送ったのは、20日のAM4:00頃。…本来20日の日記に書くべきだろうか。うーむ。

2005/10/19(水) [n年前の日記]

#1 [ntijyou] 自宅サーバに某掲示板バックアップ用のスクリプトを転送

呼び出すスクリプトを書いて、crontab -e で動かすようにした。

のだけど、print で出力した文字列がメールで送られてこない。perlスクリプトを直接呼び出さないとダメか。保存ディレクトリをスクリプト内部で指定して、直接perlスクリプトを呼べるように修正。

勘違いだった。以前のスクリプトでも、結果がメールで送られてきていた。別に修正する必要はなかったか。

ちなみに、 _ココに保存 していく予定。

この記事へのツッコミ

掲示板バックアップ用のスクリプト by がんした    2005/10/20 20:42
何か大事になってしまい、依頼者として申し訳ない。

バックアップログ見たよ。ああ、完璧だ。
これで、レス単位に最新更新時刻の新しい時刻順に上書きして、
一覧 .html が作れれば、もうスプリクトだけでログ更新が出来ちゃうな。
http://pureweb.jp/~big_08/data/data_oekaki/oekaki_0000.html
Re: 掲示板バックアップ用のスクリプト by mieki256    2005/10/21 09:18
> これで、レス単位に最新更新時刻の新しい時刻順に上書きして、
> 一覧 .html が作れれば、もうスプリクトだけでログ更新が出来ちゃうな。

おお。まだまだ自動化できそうな箇所が。
まあそのへんは、お帰りになってから、って感じで。(キラーン

#2 [jiji] _「分祀すればいい」とほとんどの人が思っているのに靖国問題はどうして解決しないのですか? できるだけ右左に偏ってない説明を御願いします。

色々と面倒なことになってるのだな。

#3 [zatta] _フロッピー麻生

_(via あさってのほう: 2005年10月 アーカイブ)
2003年の総務大臣就任記者会見の場で、ITの発達で役所から書類がなくなり、すべてフロッピーで済むようになるという要旨の発言を行い、「フロッピー」を連発した。ネット上では「いまどきフロッピーかよ」と大反響があった。

麻生太郎 - Wikipedia より

知らなかった。フロッピーが好きで好きでたまらない人なんだな。<違うと思う。

_デジタルデバイド って言葉があるけど。日本においては、ある階層から上は、ITを必要としない・知識がなくても問題がない・むしろ知識があるほうが下層、という逆転現象があるなぁ、てなことを再認識。かもしれず。

フロッピーではなくて、何で済むようになるんだろう :

サーバに置いとけば済むとか、そんな感じだらうか。

そのへん考えると…。「フロッピー」を連呼したほうが、デジタル化のイメージを掴んでもらいやすいと判断したのかも。でも、「フロッピー」しか知らない可能性もありそうな。さてはて。

_麻生太郎事務所 - 講演録 :

IT(情報通信技術)の発達で05年までに日本の役所から書類がなくなり、すべてはフロッピーで済むシステムになる。世界で最も電子化された政府が誕生する。国土が狭い日本が光ファイバーの整備で米国に負けることはない。

麻生太郎事務所 より

光ファイバーがどうとか言ってるから、フロッピーしか知らないということではないんだろうけど。聞き手のレベルに合わせて、フロッピーがどうとか言ったのかしら。仮にそうだとすると、この人に、そこまで低く見られてしまった聞き手が、どんな人達だったのかが気になってくる。

この記事へのツッコミ

フロッピー麻生 by がんした    2005/10/20 21:02
たぶん麻生先生は、「どんな大きなデータでもフロッピーサイズ( 1.44MB ?
)に収まる高圧縮技術」をプッシュしたかったんだろう。推測だが。

つーか、個人的に気になるのは、どのフロッピーを指しているのか?だ。
普通に 3.5in 2HD ?それとも 5 ?まさか 8 だったりして。
Re: フロッピー麻生 by けいと    2005/10/21 00:54
マジレスすると…

たぶん麻生先生は
「すべての書類が電子媒体になる」
といいたかったんだけど、
世の中、オンラインで全部済ませるところまで進んでいて
データを媒体に吐き出す必要が無いというところまでは
イメージできなかったんだと思う。

まぁ、法律が改正されないとお役所の文書は
「電子データのみの保存でよし!」
にはならないものが多数あるみたいなので、
紙保存の代わりにフロッピー保存、ということなんだと思います。

> 3.5in 2HD ?それとも 5 ?まさか 8 だったりして。

8インチ知ってる人はフロッピーを連呼しないでしょう(笑)

3.5インチ2EDだったりしてなー(ちょーマイナー)
Re: フロッピー麻生 by mieki256    2005/10/21 09:22
> 「どんな大きなデータでもフロッピーに収まる高圧縮技術」をプッシュ

それだ! そういうことだったのか! <えー

> 普通に 3.5in 2HD ?それとも 5 ?まさか 8 だったりして。

実は「MO」も「CD-R」も「DVD-R」も、
麻生先生には全部フロッピーに見えて…たらどうしよう。

なんとなく、昔、どこぞのおばさんが、
メガドライブを「黒いファミコン」と呼んでたことを思い出してしまった…
Re: フロッピー麻生 by mieki256    2005/10/21 09:26
> 紙保存の代わりにフロッピー保存

あー。なるほど。お役所だとそういうルールがありそうですな。
何かに保存しなきゃダメ、と。
いや、何かしらに保存してバックアップしとかなきゃいけないわけだけど。
実際の利用シーンと乖離したメディアに保存することを
強制させられそうなイメージがあるなぁ。

> 3.5インチ2EDだったりしてなー

そんなメディアがあったとは! 知らなかった…。
http://e-words.jp/p/r-fd.html
なるほど、「両面超高密度倍トラック」なるものなのですな…。
勉強になったであります。
フロッピー麻生 by がんした    2005/10/31 01:30
>なるほど、「両面超高密度倍トラック」なるものなのですな…。

5〜7年ぐらい昔のNEC製ノートPCには、3.5インチで
120MBのスーパーフロッピーディスクドライブを搭載してました。
2HDの普通のフロッピーも読める特殊なドライブだった。
あっという間に死滅しちゃったけど。
Re: フロッピー麻生 by mieki256    2005/11/03 09:15
> 5〜7年ぐらい昔のNEC製ノートPCには、3.5インチで
> 120MBのスーパーフロッピーディスクドライブを搭載してました。

なんと。メーカー製PCにも搭載されてた時期があったとは。

とはいえ、容量と、使えるハードの数を考えたらなぁ…
5〜7年ぐらい昔というと、
自分などは、CD-Rドライブを購入して喜んでた時期、だったかしら。
…厳しい。勝負としては厳しいなぁ。
せっかくの新技術が。もったいないなぁ。

#4 [digital] _Cagylogic: フィルムコンピュータ

壁紙がコンピュータだったり、ダンボールの芯がコンピュータだったり。

Cagylogic: フィルムコンピュータ より

この一文で、思わず夢が広がりんぐ。周囲のあらゆる紙がコンピュータ化可能な世界。素晴らしい。刺激に満ちた話。…もしかしたら式神が作れるんでは。<なんか話がズレてきた。

_Mobile:シャープ、ガラス基板上にCPU「Z80」の形成に成功〜CGシリコンで :

3年前の記事。これも夢が広が…いや、ちょっと微妙。想像力が足りてない・知識がない自分なので、何に使えるかイメージが湧かなかったり。

#5 [zatta] _心の物語 : ミルカさん 〜 数学なのにツンデレ

_高橋メソッドによる作品紹介 < 画面をクリックすると先に進む
_(via やねうらお−よっちゃんイカを買いに行ったついでに家を買う男 - ミルカさん)

ちょっと気になる作品。ツンデレらしいし。3作目に目を通したら、冒頭からいきなり。
後輩の女の子は「よくわかりました。先輩って説明がとっても上手なんですね」と言った。

そこへミルカさんが近づいてきて、後輩の椅子を思いっきり蹴飛ばした。ものすごい音がして、図書室にいた学生がみな顔を上げた。後輩はびっくりして立ち上がり、ミルカさんをにらんでから図書室を出て行った。僕はぽかんとして彼女を目で追いかけた。
ミルカさんは何事もなかったかのように僕の隣に座り、ノートを見て言った。

「式の展開?」

ミルカさんとフィボナッチ数列 より

…どうなってしまうんだ。

コレ、その回の数学的テーマと、キャラクターの感情変化・人間関係の変化を重ね合わせる・二重三重に意味を持つオチを持ってきたら、恐ろしい作品になりそうな気がする。…でも、そんなことできるんかいな。全然想像がつかない。

_ツンデレというより素直クール :

言われてみれば。それはそれとして、結局「クーデレ」なる呼び名は普及しなかったのであらうか。まあ、「素直クール」のほうが、意味が判りやすい気もするので仕方ない感も。 _(via 結城浩のはてな日記)

#6 [pc] _MOONGIFT - WP Clipart - オープンソースによるIT戦略支援

_Public Domain Clipart for optimized for word processors

クリップアートビューア、らしい。DL・インストールしてみたり。

Windows 版の zip を DL したけれど。解凍したら、いくつかのファイルが上書きされた。どういう zip になってるのやら。

112MBのクリップアート。どれもこれもいかにも海外製らしい絵柄ではあるけど、かなりのジャンル・量。しかし、本当にコレ、使ってもええのやろか。なんだか、日本製のギャルゲーに出てきそうなSDキャラまで入ってるんだけど…。

ビューア自体は、一つずつファイルを閲覧する形式で、使い勝手がいいとはお世辞にも言えない。サムネイルで大量に表示する別のビューアと組み合わせて、選択したほうがヨサゲではある。

#7 [anime][tv] _ガンダムアイドル・・・

グラビアアイドルじゃなきゃ、なんだろ?
オタドルっていうのもなんか・・・・。アングラドル?ううん、それも違う。
ガンダムアイドル・・・

ガンドル.。゚+.(・∀・)゚+.

泣く子もだまるちあきです-きゃんちあき☆おさとうとスパイスとすてきななにもかも より

ふと、「ガンダムガール」の略で、 _『ガンガル』 を名乗るのはダメだろうかと思ってしまったり。21世紀にもなって、あえて、よりにもよって、ガンガルの名を広めるのも一興とは思いつつ。…やっぱりダメだよな。サンライズやバンダイに目をつけられてしまう。 _(via 汚し飯 - soiled food -(2005-10-20))

_どっちのガンダムショー :

「量産型ズク」とか「ツァア・アジナブル」とか言われても困るよなぁ。空耳アワー。

いや、よくよく考えてみると、「ツァア」なんかは、ギャル語と似てるというか、2chでよく見かける文字の置き換えに似てるというか。図らずもガンガルのネーミングセンスに、やがて訪れる時代の変化を見出してしまった。プラモと言う形をとってはいるが、アレは予言書だったのか。<何の予言だ。

と思ったんだが、どうやら「ツァア」のほうは、 _後世の人が書いた小説 の中で _明らかにされた設定 らしい。つまり、今のネット世代による後付けの名前。たぶん。…予言でもなんでもなかったよ。

ところで、ガンガルは今も尚、商標として登録されているのであろうか。あるいは最初から登録されていないのだろうか。気になる。<気にしてどうする。

#8 [comic] _漫画家・末次由紀氏 盗用(盗作)検証

よくまあここまで検証したなぁ。 _(via オレンジニュース(2005-10-19))

そんなに騒ぐようなことなんだろうかと思ってしまった :

昔、「ファンロード」という雑誌の読者投稿ページで、ファンション雑誌の広告を元にしたであろうイラストハガキをちょくちょく見かけたことがあったり。そのときは「あちゃー。いいのかよ?」と思ったりもしたけど、基本的には上手い作家さん・常連さんがそういうことをしてたので、「まあ、こういうのもありかもなぁ」「最終的にこの人の絵になってりゃいいのかも」と後になって思い直した記憶も。

そういや自分も学生時代に、そういう描き方でたまに描いたりしてたっけ。やっぱり想像だけで描くとあっという間に限界がくるわけで。服の皺とか、体の曲がり方など、写真を参考にすると思いもかけない形状をしてることに気づいたりして。

と、そんなことを思ったりもしたので、これってそんなに大変なことなのだろうかと。漫画絵を描く人ならよくやることじゃないんか、とも思ったんだけど、アマとプロの意識の差はそのへんにあるってことなのかもしれんのか。

個人的には、各素材が既存作品から持ってきたものであっても、全体を見た場合に別作品にさえなっていれば別にええんとちゃうやろか、という気もしていたり。こういった話を無頓着に突き詰めていけば、瞳の描き方・鼻の描き方・髪の毛の線・ペンタッチに至るまで、パクリだなんだという話になるだろうし、となると、全ての作家は盗作をしているという結論しか導き出せないだろうし。それって、漫画家にとっても、読者にとっても、何かメリットがある話なんだろうかと。

いくつかの既存作品の絵を模写した経験から、なんとなく感じたりもしていたのだけど。漫画絵は、所詮記号化された図案の組み合わせでしかなく、何のパーツをどのように組み合わせるかでオリジナリティが生まれるもの、と思ったりもするわけで。もしくは、目標とする図案を作図する能力が足りなくて、歪んでしまったものがオリジナリティを持つ、とか。…まあ、話はまとまりませんが。そんなことを思ったりして。 *1

さておき、音楽業界のサンプリング云々と同様に、漫画の世界でも、何か取り決めを作れないものかなぁ。コマの枠外に、JASRAC使用許諾と同種の文言を入れればOK、とか。同じ出版社の刊行物なら利用もOK、とか。どうにかならんのか。

そのうちパーツ自体を手描きしない時代がくる予感も :

自分が、学生時代、趣味で漫画を描いてた頃。青空と雲を表現しようとしたら、網点スクリーントーンをカッターで削ったり、ペンで斜線を入れて描くしかなかったし、カケアミを使おうとしたら、自分で一本一本線を引いていくしかなかった。それが今では、青空も、カケアミも、スクリーントーンが存在する。それどころか、最初から建物が描かれた各種背景までもスクリーントーンになっている。当時、一本一本線を引いて描いてた自分にしてみれば、スクリーントーン一発でコマができてしまう、そんな時代に漫画を楽しむ人達が、パクリ云々を口にすることに違和感を覚えたりもする。あくまで勝手な想像だけど、漫画制作の現場は、そのような認識より、数歩先に行ってしまってないか。とかそんなことを。

それを踏まえたうえで。漫画制作にもPC・CGレタッチを用いる場面が多くなってきた現在であるけれど。これが更に進めば、各パーツはコピペで済むのが当たり前、な時代になるんだろうと夢想したりもして。何せ、PC利用が一般的ではなかった時代でも、コピー機を駆使したコマの複製などは、週間連載の漫画などではさほど珍しくない手法だったわけで。コピペが面倒・素材選択が面倒だから、まだ手で描いているけど。そのうち、マウスクリック数回で1コマ作れるようになったら、その手法に流れる人達も出てくるだろうと。

で、そういう時代がきたときに ―― 例えば、他人の作った3Dモデルを使ってPCにレンダリングさせて、それで1作品出来てしまう・自分は何一つ描いてないけど作品は出来ました、なんて時代がきたときに。あいかわらず、「盗作」「パクリ」云々と騒ぐのだろうか。てなことを妄想して考え込んでしまったり。「オリジナリティ」って、何だ? 何をもって「パクリ」と称するのか? みたいな。

まあ、このあたりは結論がでないのだろうなぁ。ただ、おそらくは商売上の理由からも、境界線・取り決めが必要ではあるのだろうなと思ったりもして。

CJとか出てこないかしら :

漫画業界における、DJとかVJに相当する職種(?) = CJ。全てのコマを既存作品の切り貼りで作り上げてしまう作家。…既に居たらどうしやう。どうもしないか。

それはそれで作業中はストレスが溜まりそうだなぁ。「ここで自分の線を入れたいが、CJたるもの自分の線を入れちゃいかん! 何が何でも適した素材をパクってこないと!」みたいな妙なこだわりを持ってしまってがんじがらめになってかえって制作が不自由になったり。とか。…なんとなく、島本和彦が描いた、パズラーと化した漫画家の話を思い出してしまった。 *2 もしくは、鉄腕アトム時代の富野氏とか。 *3

*1: 余談。仮に、漫画絵に真剣に向き合ってるつもりでありながら、「俺は誰の影響も受けてない」「既存作品の真似などしていない」と主張する人間が居たら、これほど傲慢で無自覚な大嘘つきは居ないだろうとすら。…あの手塚治虫ですらディズニーの影響を受けてるし、あの宮崎駿ですら手塚治虫から受けた影響を呪縛として悩んでた時期があるわけで。それを考えると、「既存の作家の影響を受けてない」と口走る人間は、「自分は神である」と図々しくも口走るぐらいに頭がどうかしてしまった人種か、あるいはそもそも漫画絵と真剣に向き合ったこともないのにいい加減なことを嘯いているか、そのどちらかではないのかと。いや、でも、本当に誰の影響も受けてなくて、既存作品の漫画絵とは乖離した、人の手によるものとは思えない異端(?)な漫画絵を描いてる人が居るかもしれんから、断言はできんわな…。
*2: アシスタントが描いたコマの大群を目の前にして、どうやって話をでっちあげるか悩んでしまう漫画家の図。だったかしら。
*3: たしか既存のフィルムを切り貼りして1本作ったとかなんとか。

この記事へのツッコミ

Re: 漫画家・末次由紀氏 盗用(盗作)検証 by けいと    2005/10/21 01:15
今流に言えば
「インスパイア」はOKでも「バクリ」はNGって言うことでしょう。
絵描きとしても、他人のトレースは駄目でしょう。

電子データにしても、
参考にして作ったのはいいけど、デッドコピーは駄目でしょ。

どうしてもコピーするなら、
「コピーライト表示を付けろ」とか
「ソースを示せ」とか
「金儲けに使うな」とか
それぞれの世界にそれぞれの仁義の切り方があるわけで。
Re: 漫画家・末次由紀氏 盗用(盗作)検証 by mieki256    2005/10/21 09:34
> 絵描きとしても、他人のトレースは駄目

いや、劇画じゃ当たり前の手法ですし… >トレス
故に、ややこしい。

あ、でも、「他人が描いた図案」をトレス、ってところが問題なのか。
トレスが問題ではなく、「誰のもの」をトレスするかが問題、と。

> それぞれの世界にそれぞれの仁義の切り方がある

ここが未整備故に、この手の話がたびたび出てくるのでしょうな。
そろそろ出版業界で「仁義の切り方」を決めてもいいような。
まあ、働きかけ自体が面倒臭いから、どこもやりたくないんだろうな。
かくして責任は漫画家個人に集約されていく…。

2004/10/19(火) [n年前の日記]

#1 [windows] _うさみみハリケーン

汎用プロセスメモリエディタ兼デバッガ/改造コード実行/各種サーチ機能/MDIダンプ表示ベースのGUI/LAN接続を用いたリモート解析

ということで :

ぎゃるぱにXをこれでどうにか(爆) …それでもクリアできない。むむぅ。恐るべし。

あちこち眺めてみたらクリアできてるという人がちらほら。コーディネイターがたくさん居るのだな。オイラはナチュラル也…。

2003/10/19() [n年前の日記]

#1 [pc][linux][debian] Boldが出ない

mozilla-firebird で日本語フォントの太字(Bold)が表示できない。解決策を昨晩からずっと探してるのだけど見つからず。ネット環境だけでも linux に移行できないかと考えてるのだけど、これじゃちょっと難しい。

そもそも、同様の症状で困ってる事例をなかなか見かけないのも謎。ウチでしか起きない症状なんだろうか。それとも sid 環境では太字の表示は不可能と決まっていて、だから誰も騒がないとか。…そもそも woody の時は太字が表示できてたのだろうか。と言っても、firebird はオフィシャルに入ってなかったから確認しようもなかったのだけど(爆)

#2 [pc][web] Windows 版の mozilla-firebird 0.7 を導入してみた

linux版とWindows版を比較してみれば何か判るかと思って導入。

debian 上で動くソレに比べ、Windows版はメチャクチャ軽い。ページがサクサク出てくる。自分は主に、Windows上で Sleipnir を使ってる人だけど、1ページ開いて眺める分には速度的に遜色無し。ということは OS が足を引っ張ってるのか。速さに関しては、Windows >>> Linux or xfree86 ですかな。

Windows版では日本語フォントの太字が表示されてる :

ということは、mozilla-firebird に問題があるというわけでは無さそう。彼自身は bold 表示が可能なだけの能力を本来持ってるのだろう。もちろん linux の kernel はそのへんに絡んでこないのだろうから、gnome2 とか xfree86 とかそのあたりに問題があるのだろうな。

検索バーは使いやすい :

_ googlebar_NeedleSearch を導入。単語別にボタンが出てきて、即座にページ内を検索できるのはかなり便利。Sleipnir にもこの機能があればいいのに。

大量にページを開いたら遅かった :

Sleipnir と同様に、ブックマークフォルダを一気に開いてみた。…なかなか帰ってこない。やっぱり重い。残念。

Sleipnir だって、一度に全ページをスパッと開けているわけではなく、出来たところから即座に表示してるに過ぎない気もする。それに対して firebird は、全員揃うまで表示するのを待ってる感じ。おそらく firebird の開発者達は、「大量のURLをガーッと開いて」「ザッと眺めて次々閉じていく」巡回作業をした事が無いのだろう。ていうかそんな事してる暇があったらソース弄ってるよな(爆)

マウスホイールが使えない :

ページによって、マウスホイールが使えたり使えなかったりする。謎。例えば、 _このページ ではホイールが効かない。Sleipnir、IE は同じページでもスルスル動く。ページのソースを見ても、何が関係してるのか、さっぱり判らない。

ツールバーのサイズが大きい :

_Breezeテーマ を使ってるので、標準ツールバーのサイズは Sleipnir と同サイズでいい感じなのだけど。

Sleipnir と mozilla-firebird

拡張した検索バーが一行(?)分まるまる領域を使ったり、標準ツールバー上に配置できる拡張機能ボタンのアイコンサイズが大きかったりで、ページの表示範囲が若干狭くなるあたりがちと気になる。せめて、メニューや標準ツールバー内に、それら検索バーも移動できれば助かるのだけどなぁ。

user.js の中身をメモ :

後で再インストールする時もあるだろうから、user.js の中身をメモっておこう…。
// Turn off Automatic Image Resizing:
// 画像の自動リサイズをoff
user_pref("browser.enable_automatic_image_resizing", false);

// Instead of annoying error dialog messages, display pages:
// エラーメッセージをダイアログではなくページ内に表示。
user_pref("browser.xul.error_pages.enabled", true);

// Instead of download progress windows, use the Sidebar:
user_pref("browser.download.openSidebar", true);
user_pref("browser.download.useProgressDialogs", false);

// Smooth Scrolling (true or false):
// スムーススクロール on
user_pref("general.smoothScroll", true);

// This one makes a huge difference. Last value in milliseconds (default is 250)
user_pref("nglayout.initialpaint.delay", 100);

// Enable pipelining:
user_pref("network.http.pipelining", true);
user_pref("network.http.proxy.pipelining", true);
user_pref("network.http.pipelining.maxrequests", 100);

// mouse wheel scroll line
// マウスホイールでのスクロール行数を指定
user_pref("mousewheel.withnokey.numlines", 20);
user_pref("mousewheel.withnokey.sysnumlines", false);

// auto scroll off
// マウス中ボタンでのオートスクロールを off
user_pref("general.autoScroll", false);

2002/10/19() [n年前の日記]

#1 SEED

なんてこった!
ガンダムSEED、福島でも放映してましたよ。土曜PM6:00から。
新聞のTV欄見て気付いたのがPM8:00。失敗した…


Windowsのインストールって、解説書のページ「だけ」を見てると、
「なんじゃこりゃ!? めんどくさそー!」
と思うんですが、実際やってみるとそうでもないですよね。
質問に答えてくだけで、スルスルとインストール出来ちゃう。

Linux(最近のメジャーなヤツ)も同様の気がします。
解説本だけ見ると「なんじゃこりゃ!?」なんだけど、
実際やってみると、「ありゃ…Windowsと変わらんじゃん」みたいな。

Windowsとデュアルブートにしようとかすると、
パーティションの切り方を工夫するとかで面倒臭いかもですが、
HDD全部にLinuxだけスポンと入れる分には苦労しないのではないかと。
(あと、少し枯れ気味、メジャーなパーツ使うとか。)

もっともWinNT系OS使ってる人が、
あえてLinuxを入れる必要性って、あまり無いといえば無いですよね(爆)
設定さえちゃんとしてればNT系は堅牢でしょうし。
ていうか、設定やセキュリティホール情報集めておかないとマズイのはLinuxも同じ。
なら、今利用してるOSの情報集めるほうが、効率はいいわけで…

自分は貧乏だし、MSのアクティベーション云々や、
サポート期限云々が凄く気になってるタチなので、
Linuxに肩入れしてますけど。

つか来年にはWin98はサポートされなくなる…さて、どうすべ。
ネット接続環境ぐらいはLinuxで置換えたいのですけど。

2001/10/19(金) [n年前の日記]

#1 うみゅー

・FTPでハマってます。嬉しい情報もあったけど、相変わらずのところもあり… _(詳細)

2000/10/19(木) [n年前の日記]

#1 お勉強

勉強してたッス。
と言いたいところなんですが、ほとんど寝てたッス。トホホ
これからちょっと頑張って、明日受けに行こうと思いますが…

2,3日前、牛乳に色々な味をつけるヤツを買ってきたんですわ。
結構おいしいので、ガブガブ牛乳飲んでたら…
腸内で何かが発酵でもし始めたのか、ガスが止まりません。
キン肉マンが空を飛ぶかのように凄いです。
どうしよう…困った… (´Д`;)

…全世界に「ガスが止まりません」とわざわざ情報発信せんでも… >自分

1999/10/19(火) [n年前の日記]

#1 (NoTitle)最近は飲んでいなかっ...

最近は飲んでいなかったのだけど、昨日の夜は薬を飲んで寝ました。そうでもしないとちょっとアレだったので。
PM2:00頃起床。しばらくボーッとしてました。

ここに書いていいことなのか悩むのだけど。
でも、今日一日ずっとそのことが頭から離れなかったし、何回か涙ぐんでしまったし。

今年に入って何回かメールをやり取りしていた友人(K社時代の後輩プログラマー)が亡くなっていた事を、彼の友人のメールで知りました。詳しい状況とかは何もわからないのですが、メールでやり取りしていた時の内容や、HPの日記に書かれている内容から、1年前のオイラと同じように…だと想像しています。
冗談であってほしいのですけどね。「みえき256ってウザイから縁を切っとこう。聞かれたらオレは死んだ事にしといてね」とか友人達に言っていて、今頃ゲーセンでSTGでも遊んでてくれればとても嬉しいのですけど。

色々言いたい事、書きたいことはあるのですが、それを書いても何も変わらないし、大体にして自分自身そうなった経験もあるからどうこう言える資格も無いし、そういう状態の時、周りの人間の言葉が本人に全く届かないことも痛いほどよく知っているので、書きません。
もう、あんな苦しい思いをしないで済む…休めない眠れないと言ってたけど、これからはゆっくり休めるんだろうな。そう考えてやるのがいいと思う事にしました。

明日か、十数年後か、数十年後か。いつになるかわからないけど、私もいつかは必ずそっちにいくことになるので、その時はゲームやSFの話でもしてお互い熱く盛り上がろうぜ>O氏

以上、25 日分です。

過去ログ表示

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

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project