mieki256's diary



2024/11/16() [n年前の日記]

#1 [blender] blenderでアニメ風の木を作る手順について勉強中。その4

_昨日 に続いて、blenderでアニメ風の木を作る手順を勉強中。

_Anime Tree Tutorial | Blender (include Project Files) - YouTube
_Tutorial - Blender - Anime Foliage Pipeline

環境は Windows10 x64 22H2 + blender 4.2.3 x64 LTS。

ステップ4まで再現できたので、ステップ5にチャレンジ。茂みの数を増やして、木に見える形に整える。

茂みの数を増やす :

平面ポリゴンを選択して、「オブジェクトを複製」で増やしていく。
  • オブジェクト → オブジェクト複製、で複製できる。
  • もしくは Shift + Dキー。

05_shape_tree_ss01.png

05_shape_tree_ss02.png


大量に増やして、それぞれを、それらしい位置に配置する。

05_shape_tree_ss03.png


そのままだと、どの茂みも同じ見た目なので、それぞれが違う見た目になるように調整する。
  • モディファイアー設定 → パーティクルインスタンスの「量」を変更して、平面ポリゴンの発生個数を変更。
  • 回転して見た目を変更。Rキー → Zキー → マウスを動かして左クリックで決定。
  • 奥行きを変更。Gキー → Yキー → マウスを動かして左クリックで決定。

05_shape_tree_ss04.png

05_shape_tree_ss05.png

05_shape_tree_ss06.png

木の幹を用意する :

木の幹を用意する。動画では事前に作った幹モデルを持ってきてどうにかしていたけれど、今回は木を作れるアドオン Sapling Tree Gen を使って幹だけを仮作成してみた。

Sapling Tree Gen のインストール方法は以下が参考になるかと。

_【Blender】初心者でも簡単に木をモデリングする方法 | Vook(ヴック)
_無料の3DCG統合環境「Blender 4.2」の新しい拡張機能は導入・管理が簡単! - Blender ウォッチング - 窓の杜

アドオンを追加できたら、カーブ → Sapling Tree Gen を選べば、木のモデルデータを追加できる。

05_shape_tree_ss07.png


生成直後はウインドウの左下のほうに設定ウインドウがあるので、そこで形を調整。Load Preset でざっくりとした木の種類を選んで、他のパラメータを弄れば形を変えられる。

05_shape_tree_ss08.png

ライトの位置を調整 :

ライトの位置や角度で木の見た目も変わってくるので、イイ感じの位置や角度に調整する。

05_shape_tree_ss20.gif

出来上がり :

これでアニメ風の木が作成できた。レンダリングした結果は以下。

05_shape_tree_ss21_result.png


_このテクスチャ画像1枚 から、こういう見た目のモノを作れるなんて、blenderってスゴイなと…。チュートリアルを作成してくれた方もスゴイ。ありがたや。

さて、これを風でサワサワさせたいわけで…。

見落としがあった :

ライトの位置や角度を変更した際に、変なところにグラデーションがつくなと首を捻っていたけれど、動画を確認してみたらマテリアル設定のグラデーション部分でパラメータを変更していることを見落としていたことに気づいた。

正解(?)は以下。マッピングノードで、回転やスケールの値を変更しておく。
  • 回転 X,Y,Z が、4.7, 104, 0 に。
  • スケール X,Y,Z が、1.0, 1.0, 0.6 に。

05_shape_tree_ss22.png

これで、ライトの位置や角度と、グラデーションの付き方が、それらしく対応している感じになった。

風でサワサワさせる。その1 :

風で木がサワサワしている感じのアニメを追加したい。

動画によると、ジオメトリノードを使って、大きい動き(枝の動きに相当)と小さい動き(葉の動きに相当)を作って、それを組み合わせて動きを作るらしい。

ひとまず、大きい動きだけを先につけてみる。

平面ポリゴンを選択して、モディファイアー設定で、「モディファイアーを追加」。「ジオメトリノード」を選ぶ。

06_add_wind_ss01.png


ジオメトリノードエディターにして、「新規」をクリックして、ジオメトリノードグループを作成。名前をつけておく。今回は「GN_AddWind」にしてみた。

06_add_wind_ss02.png


以下のノードが必要になるので追加していく。
  • 位置設定 (Set Position) : 追加 → ジオメトリ → 書込 → 位置設定
  • ベクトル演算 x 2 (乗算 (Multiply)、スケール (Scale)): 追加 → ユーティリティ → ベクトル → ベクトル演算
  • 値 x 3 : 追加 → 入力 → 定数 → 値
  • シーンタイム (Scene Time) : 追加 → 入力 → シーン → シーンタイム
  • 数式 x 2 (乗算 (Multiply)、減算 (Subtract)) : 追加 → ユーティリティ → 数式 → 数式
  • ノイズテクスチャ (Noise Texture) : 追加 → テクスチャ → ノイズテクスチャ

06_add_wind_ss03.png

06_add_wind_ss04.png

06_add_wind_ss05.png

06_add_wind_ss06.png

06_add_wind_ss07.png

06_add_wind_ss08.png


値ノードには、分かりやすくするために名前をつけることができる。
  • ノードを選択して、右クリックするとメニューが表示されるので、名前を変更。
  • もしくは、ノードを選択して、F2キーで名前を変更。
動画では以下の3つの名前をつけていた。
  • Large - Wind Speed
  • Large - Wind Scale
  • Large - Wind Intensity

06_add_wind_ss09.png

06_add_wind_ss10.png


以下のような配置、パラメータにする。上が日本語表示で、下が英語表示。水色の点線で囲んだところが、動きを出力してくれるノード群。

06_add_wind_ss11.png

06_add_wind_ss12.png


この状態で再生してみれば、大雑把ではあるけど平面ポリゴンがもわもわと動いてくれる。

06_add_wind_ss12_result.gif

風でサワサワさせる。その2 :

ジオメトリノードを使って、大きい動き(枝の動きに相当)を再現することができたので、小さい動きも追加していく。

水色の点線で囲んだ部分のノード達を選択して、コピー、貼り付けをして、動きを出力してくれるノード群をもう一つ増やす。それを小さい動きとして利用する。

06_add_wind_ss11.png


二つの動きを混ぜるためのノード群を追加していく。
  • ベクトル回転 (Vector Rotate) : 追加 → ユーティリティ → ベクトル → ベクトル回転
  • 位置 (Position) x 2 : 追加 → ジオメトリ → 読込 → 位置
  • ノーマル (Normal) : 追加 → ジオメトリ → 読込 → ノーマル
  • ドメインでの評価 (Evaluate on Domain) : 追加 → ユーティリティ → フィールド → ドメインでの評価

06_add_wind_ss13.png

06_add_wind_ss14.png

06_add_wind_ss15.png

06_add_wind_ss16.png


以下のように配置する。文字が小さくて見辛いけれど、全部のノードを収めようとするとこんなサイズになってしまう…。何か良い手は無いものか…。

06_add_wind_ss17.png

06_add_wind_ss18.png


これで、大きい動きと小さい動きが組み合わされた動きになる。

06_add_wind_ss18_result.gif

全ての茂みに反映させる :

茂み1つ分を動かせたので、これを他の茂みにも適用したい。

動きを設定してない茂み達を、Shift + 左クリックで複数選択する。モディファイアー設定で、モディファイアーが4つ並んでることに注意。

06_add_wind_ss19.png


動きを設定している茂みを、Ctrl + 左クリックで追加選択する。モディファイアー設定で、モディファイアーが5つ並んでることに注意。5つ目がさわさわ動きのためのモディファイアー。

06_add_wind_ss20.png


5つ目のモディファイアーの、右上の下向き三角をクリックしてメニューを表示。「選択にコピー」を選ぶ。これで、動きが設定されてなかった茂み達にも動き(モディファイアー)がコピーされた。

06_add_wind_ss21.png


この状態で再生してみると、全ての茂みがさわさわと動いてくれる。

結果 :

連番png画像としてアニメーションレンダリングをして、AviUtl + 拡張編集プラグインで他の素材と合成してみた。




これで、blender を使ってアニメ風の木を作ってさわさわさせる動画を作れることが分かった。

念のために再度書いておくけれど、以下が参考になったチュートリアル動画。ありがたや。

_Anime Tree Tutorial | Blender (include Project Files) - YouTube
_Tutorial - Blender - Anime Foliage Pipeline

件のチュートリアル動画のページにはプロジェクトファイルへのリンクもあるので、ダウンロードして内容を確認してみるのも良さそう。ただ、試しに入手して開いてみたら、Pythonスクリプトを実行できない云々とメッセージが表示されたけど…。

#2 [zatta] マンガン乾電池が売ってない

台所に設置してある、ワイヤレスチャイムの送信機の電池が弱まってしまったようで、代わりの電池を ―― 9Vの角型乾電池を入手しないといけなくなった。

乾電池は使ってる材料で種類が分かれる。 今回はどう考えてもマンガン乾電池が向いている。実際、送信機の中に入っていたのもマンガン角型乾電池だった。

しかし、ケーズデンキに行って探してみたけれど、マンガン角型乾電池が置いてない。アルカリ角型乾電池しかない…。

いやまあ、事前にケーズデンキの通販サイトで調べて、マンガン角型乾電池は扱ってなさそうと分かってたのでやっぱりかという感じだけど。これは困る…。アルカリ乾電池は何度も液漏れしてるので選びたくない…。でもコレしかないのでは…。

一応、できる対策として、パッケージに液漏れ防止云々が書いてあるものを選んで購入した。しかし、お値段も高い。800円ぐらいする…。

帰宅後ググってみたら、ヨドバシカメラならマンガン角型乾電池が178円で売ってたようで…。でも、在庫は僅かとも書いてある…。もうどこでも売ってないんだな…。

そもそも今時、ワイヤレスチャイムの送信機なら、コイン型電池(ボタン型電池)を使うものがほとんどだよな…。角型乾電池を使うぐらいに古い送信機を使い続けてることが、そもそもの問題なのかもしれない…。

2023/11/16(木) [n年前の日記]

#1 [windows] Windows10が起動しなくなってしまった

Windows10 x64 22H2 をインストールしてあるメインPCが、またブルースクリーン(BSOD)に。

bsod_ss.jpg

今月の Windows Update が降りてきて、そのインストール処理を試みるたびに、BSODになっている模様。

先日 Npcap をアンインストールしたので状況が変わるかと期待していたけれど、またBSODになったということは、Npcap が原因でBSODになってたわけではなさそうだなと…。

ちなみに、メインPCのハードウェアスペックは以下。

BSODになるたびに、chkdsk C: /offlinescanandfix /f と chkdsk D: /offlinescanandfix /f を走らせていたのだけど、そのうち再起動時に修復云々のメッセージが出て「winload.exeが見つからないから修復できない」みたいなことを言ってきた。

winload_botfound_ss.jpg

Windows ブート マネージャー

windowsを開始できませんでした。最近のハードウェアまたはソフトウェアの変更が原因の可能性があります。問題を修正するには次の方法があります:

1. Windowsインストールディスクを挿入してコンピュータを再起動します。
2. 言語の設定を選んでから、「次へ」をクリックします。
3. 「コンピューターの修復」をクリックします。

このディスクが無い場合は、システム管理者またはコンピューターの製造元にお問い合わせください。

ファイル: \Windiws\system32\winload.exe
状態: 0xc0000225
情報: 必要なファイルが見つからないか、ファイルにエラーがあるため、アプリケーションまたはオペレーティングシステムをロードできませんでした。

Enter=OS選択

Enterを叩くと一応 Windows10 が選択肢に出てきたのだけど、それを選ぶと必ずブルースクリーンになる。困った。どうしたものか。

巷の解説記事によると、bootrec なるツールを使って、ブート関連情報を再設定してやると改善される場合もあるらしいのだけど…。なんか色々やってるうちにコマンドプロンプトが表示されるところまでは行ったけど、bootrec と打っても「そんなプログラムは無い」と言われてしまう。後になって知ったけど、WinRE なる環境で起動してないと、bootrec は使えないらしい。

Windows10のインストールディスクを入手 :

Ubuntu Linux 22.04 LTS をインストールしてあるサブPCを使って、Windows10のセットアップディスクをUSBメモリ上に作れないか試した。以下のページを参考にしつつ作業。

_UbuntuでWindows 10インストールメディアを作成する | 竹のしんのテック日記

「Windows10 iso」でググったら、Microsoft の iso 配布ページが出てきたので、そこから iso を入手。ファイル名は Win10_22H2_Japanese_x64v1.iso だった。入手には数時間かかった気がする。

Ubuntu LinuxでUSBメモリにWindows10インストールディスクを書き込む :

32GBのUSBメモリを発掘してきて、その中に Windows10 のセットアップディスクを入れることにした。

Ubuntu 機にUSBメモリを差してから、「disk」と打って「ディスク」を探して起動。USBメモリを選んで、右上の縦の「・・・」を選んで、「ディスクを初期化」。

Ubuntu Linux の場合、WoeUSB なるツールを使えば、ブート可能なUSBメモリを作れるらしい。

前述の解説記事を見習って、以下を入力してインストール、かつ、起動。
sudo apt update
sudo apt upgrade
sudo add-apt-repository ppa:tomtomtom/woeusb
sudo apt update
sudo apt install woeusb woeusb-frontend-wxgtk

woeusbgui

手元のサブPC上でも、昔 woeusb をインストールして使ってたらしいのだけど、バージョンが古いせいか途中で何度もエラーが出て処理がまったく先に進まなかった。一度アンインストールして、現行版を再インストールしたら、処理が進むようになった。

書きこむ際のファイルシステムは FAT ではなく NTFS を選んだ。

USBメモリをUSB2.0ポートに差して作業したせいか、途中で止まってるのではないかと不安になったぐらいに、かなり時間がかかった。それでも一応ブート可能なUSBメモリが出来た。たぶん。

メインPC上でセットアップディスクから起動 :

メインPCにUSBメモリを差して、USBメモリから起動。

最初は「コンピューターの修復」→「スタートアップ修復」を選んだけれど効果無し。

「詳細オプション」を選んで、コマンドプロンプトを起動して、以下の3つを打ち込んだ。

bootrec /fixmbr
bootrec /fixboot
bootrec /rebuildbcd 

「要素が無い」等、不安になることも言ってきたけれど、多少は効果があったようで、次回からはWindows10が起動してくれるようになった。

セーフモード上でWindows Updateできるようにする :

Windows10が起動するようになったものの、また Windows Update が走ってしまってBSODになる…。どうにかして、Windows Update を終わらせないといけない…。

セーフモード+ネットワークの状態で、Windows Update を実行できるように設定を変更してみた。本来、セーフモードの時は、Windows Update は動かないのだけど、いくつかのサービスが動いてる状態にできれば、Windows Update も動くらしい。

_Windows 10 をセーフモードで起動して Windows Update を実行できるようにする | 雑廉堂の雑記帳

上記ページによると、レジストリに以下を追加することで、セーフモード+ネットワークの際にサービスが動くようになるらしい。
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\MSIServer /ve /d Service
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\wuauserv /ve /d Service
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\BITS /ve /d Service
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\EventSystem /ve /d Service
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\UsoSvc /ve /d Service
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\DoSvc /ve /d Service
REG ADD で、レジストリに項目を追加している。

削除する時は以下らしい。試してないけど…。
REG DELETE HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\MSIServer /f
REG DELETE HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\wuauserv /f
REG DELETE HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\BITS /f
REG DELETE HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\EventSystem /f
REG DELETE HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\UsoSvc /f
REG DELETE HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\DoSvc /f

上記のソレは「Network」を指定しているので、セーフモード+ネットワークの時の指定になっているけれど、「Network」を「Minimal」にすれば、セーフモードオンリーで起動した際の指定になる模様。

この状態で、セーフモード+ネットワークで立ち上げて、Windows Update をしてみたところ、BSODにならずに処理が終わってくれた。

BIOSやオーディオドライバをアップデート :

GIGABYTE B450M S2H のページに行って、BIOS やドライバの新版が無いかチェック。

BIOSを、f63(2022/11/17, mb_bios_b450m-s2h_f63.zip)から、f65b(2023/09/21, mb_bios_b450m-s2h_8a16bg0c_f65b.zip)にアップデートした。ちなみに GIGABYTE製M/Bの場合、USBメモリのルートに B450MS2H.F64 や B450MS2H.F65b というBIOSのファイルを入れて、BIOS設定画面で Q-Flash という機能を呼び出せば更新できる。

オーディオドライバを、6.0.9225.1 (2021/10/05, mb_driver_realtekdch_6.0.9225.1.zip) から、6.0.9373.1 (2022/07/25, mb_driver_audio_realtek_6.0.9373.1.zip) にアップデートした。一旦セーフモード+ネットワークで起動して、コントロールパネル経由で、Realtek Audio Driver をアンインストールしてから、そのままオーディオドライバの新版をインストールしてみた。

たしか Realtek のオーディオドライバは、インストール時に古いドライバをアンインストールして、直後にOS再起動を要求して、再起動後に新版をインストールする作りになっていたと思うけど。OSを再起動する際に Windowsがあらかじめ持ってるドライバをインストールされてしまって、再起動後にまた古いドライバが入ってるから Realtek のインストーラが古いドライバをアンインストールしようとして…。延々と同じ処理を繰り返して先に進まなかった記憶がある。今回はセーフモードで無理矢理作業してしまったけれど、本来はどうやって解決すべきなんだろう…。

スリープ復帰時にBSODが出るようになった :

BIOSとオーディオドライバを更新して何か変わるかなと思ったけれど、スリープから復帰する際にBSODになった。コレ、悪化してないか…。

アプリをアンインストール :

セーフモード+ネットワークで、システムに食い込んでそうなアプリをいくつかアンインストールしてみた。

  • ImgDrive 2.0.6 : isoを仮想ドライブにマウントできるツール。2.0.6 をアンインストールした直後に 2.1.2 を再インストール。
  • ORAKUIN : キー入力・マウス操作を画面上で視覚化してくれるツール
  • ELECOMらくちんプリント3.0 : ラベル印刷用ソフト。OSのstartup時に何かしてるので…。
  • SVG See 1.1.0 ... エクスプローラ上でSVGのサムネイル表示をしてくれるツール。PowerToysが同機能を持ったので、こちらは開発停止状態になってる。
  • Defraggler 2.22 : デフラグソフト
  • UltraDefrag (Ultra Defragmenter) 7.1.4 : デフラグソフト
  • iTunes : Apple のアレ。

ImgDrive だけ、アンインストール後に現行版の 2.1.2 をインストールし直した。

他に怪しいのは…。Alcohol 52% 2.1.1 Build 2201 だろうか…。でもコレが無いと iso の類が作れないし…。

ELECOMらくちんプリント3.0 をアンインストールしたのに、C:\Program Files (x86)\ELECOM\ELECOM PrintServer\rakuchinprintsub.exe が、まだスタートアップに残っている。これは一体何なんだろう…。ググっても情報が出てこない。

グラフィックドライバをインストール :

NVIDIA グラフィックドライバを再インストールしてみた。もしかして、ここしばらくクリーンインストールをしていないことで不具合が起きてるんじゃないかと疑ったので…。

546.17-desktop-win10-win11-64bit-international-dch-whql.exe を入手。セーフモード+ネットワークで起動してから実行。カスタムインストールを選んで、クリーンインストールにチェックを入れてインストール。NVIDIA GeForce Experience はインストールしない。というか、セーフモード上では項目として出てこなかった。

グラフィックドライバとオーディオドライバのインストール項目しか無かったのが気になる。本来もうちょっと項目が多かったような…。OSを通常起動してから、再度インストーラを実行したら、PhysX と GeForce Experience のインストール項目が増えた。BSOD になることを覚悟しつつ再インストール。幸い BSOD にはならなかった。

#2 [digital] NASが届いた

数日前(2023/11/14の夜)、EC-CURRENT に注文していた、DTCP-IP、DLNA対応のNASが届いた。BUFFALO LinkStation LS210D0201G。2TB。税込11,704円。

経緯 :

使っているHDDレコーダ、TOSHIBA RD-BZ710の空き容量が厳しくなってきた。しかし、このHDDレコーダ、BDドライブが故障してしまっているので、BD-Rに焼いて番組データを逃がすことすらできない。

USB接続の外付けHDDをつけてそちらに録画ファイルを逃がすことも考えたけど、もしHDDレコーダ本体が故障したら、外付けHDDに保存したファイル群は全て再生不可能な状態になってしまう…。まあ、今時のHDDレコーダなら、SeeQVault なる規格に対応していればそういった不安はないらしいけど、このHDDレコーダは古いから、そんな規格には未対応。HDDレコーダ本体と外付けHDDは一蓮托生。

どうしたものかと悩んだけれど、ここは DTCP-IP対応のNASを購入するしかないのかなと…。そういったNASに番組ファイルをムーブできれば、他の環境からファイルを再生することもできなくはないだろうし…。仮にHDDレコーダ本体が故障してもどうにかなりそう。いや、NAS本体が故障したら、その時は泣くしかないんだけど。

ということで、NASを購入した次第。

2TBでは足りないのではないかとも思ったけれど、どうせこのHDDレコーダ、扱えるタイトル数の制限があるので、2TBも使えないかもしれない…。

感想 :

とりあえず箱から出した。この手のNASは初めて購入したけれど、結構小さいのだな…。フツーのUSB接続外付けHDDと大して変わらない大きさ。

まだセットアップは全然できてない。メインPCの不調をどうにかするのが先なので…。

2022/11/16(水) [n年前の日記]

#1 [povray] Bishop3Dを試用中

Bishop3D は、POV-Ray専用のモデリングソフト。Windows上で動作する。

_Bishop3D - POV-Ray Modeler and Animation System (WebArchive)

blender 3.3.1 LTS + POV@Ble を触っているうちに、POV-Ray専用ツール群の操作感覚ってどうだったかなと気になってきて、Bishop3D 1.0.5.2 を触り始めたのだけど、新規に作成したデータを POV-Ray 3.7 でレンダリングしても真っ暗なレンダリング結果しか出てこなくて悩んでしまった。カメラとライトがあれば何かしら出てくるものと思ったのだけど…。

以前試用した際に作成したテストデータはちゃんとレンダリングできるのに…。新規作成したデータと何が違うのか…。

数時間悩み続けたけれど、原因はプリミティブに Texture (マテリアル)を指定してなかったせいだった。トホ。以前試用した際に使い方を全くメモしてなかったから、こういうしょーもないところでハマったのかもしれない。自分用に使い方をまとめておいたほうがいいのかも…。

2021/11/16(火) [n年前の日記]

#1 [nitijyou] 金網を購入

電動自転車で外出。100円ショップのダイソーに寄って30x45cm相当の金網が無いか探してみたところ、バーベキュー用の金網で、30x50cm や 35x45cmの金網を見つけた。30x50cmのソレを2枚購入。これを家の裏の排水溝に設置できればいいのだけど、さてどうなるか…。

#2 [anime] 「ルパン三世 PART6」4話を視聴

ルパン三世PART6の、押井守脚本回を視聴。いよいよ、あの押井守監督が、ルパン三世シリーズの制作に参加…。これは期待大…。

視聴直後は、正直なところ何が何だか分からない…てな感じの感想だったのだけど。ググって解説記事を眺めてみて、なるほどそういう作りの脚本だったのかと感心してしまった。よくまあこんなに引用/羅列したもんだなあ…。その物量に圧倒される…。

_『ルパン三世 PART6』第4話感想: 押井守脚本。ヘミングウェイ。 - 映画の後には紅茶とお菓子を
_「ルパン三世 PART6 第4話」オマージュ元|bird|note
_【考察】ルパン三世PART6 #4「ダイナーの殺し屋たち」 - ルパン達が名作を再演!?コードブックを手に入れろ!

自分は文学や映画に全く詳しくないのでアレだったけれど、そっち方面に詳しい人は終始ニヤニヤしてしまう脚本だったのだろうなと。「知識があれば楽しめる作り」としては代表事例のような回だったのかもしれない。

考えてみれば…。そもそも押井守監督は、かつてルパン三世の映画を作る予定だったけどその企画が流れてしまって、てな経緯があった監督さんなわけで。故に押井守監督がルパンの脚本を書くと聞いて、過去の経緯を知っているアニメオタクは期待してしまったわけだけど、もうこの時点で、その手の知識がある人達にとっては楽しめる状況、という構図(?)になっていて…。そしてそこに、知識があれば楽しめるはずの脚本がポンと出てきたわけだから…。起用にしろ、脚本内容にしろ、知っている人だけが楽しめるというソレで一貫しているのだよな…。ただ、知っておくべきジャンルが違ってただけの話で…。

もちろん、知識のない人達にとっては ―― 押井守監督がどういう監督さんなのか知らない人や、自分のように文学や映画に詳しくない人にとっては、何が面白いのか分からない回になるわけだけど。まあ、知識が無くても楽しめる作り、知識が無いと楽しめない作り、知識が無くても楽しめるけど知識があれば更に楽しめる作り、色々あるわなと…。

2020/11/16(月) [n年前の日記]

#1 [godot] Godot EngineでHUDシーンを作成

Godot Engine 3.2.3 x64 を使って3D表示の簡単なシューティングゲームっぽいものを作る。

今回はプレイヤーや敵のHPを表示するためのHUDシーンを作成する。そのついでに、プレイヤーや敵に弾が当たったらHPが減るような処理も追加する。

フォントファイルをインポート。 :

画面に文字情報を表示するためには何かしらのフォントファイルが必要になる。Godot Engine はフォントファイルとして ttf や otf が使えるので、それらファイルをプロジェクトフォルダにインポートしてやればフォントが使えるようになる。

今回は、ドットコロンさん(?)がCC0で公開している Vegurフォント Version 0.701 を利用させてもらうことにした。ありがたや。

_Vegur | ドットコロン

vegur_0701.zip をDLして解凍すると、Vegur-Bold.otf, Vegur-Light.otf, Vegur-Regular.otf の3ファイルが得られる。太字の Vegur-Bold.otf を使うことにする。

ファイル一覧ウインドウに、Vegur-Bold.otf をドラッグアンドドロップ。これでファイルがコピーされてインポートされる。

3d_tuto11_create_hud_ss01.png


件のフォントファイルを res://imports/ 以下に置くことにした。違う場所にコピーされてしまった時は、ファイル一覧ウインドウ内でファイルをドラッグすれば置き場所を変更できる。

3d_tuto11_create_hud_ss02.png

HUD用のシーンを作成。 :

シーンを新規作成して以下のような構成でノードを追加。HUDのようなものは、ルートノードを Control にしておけばいいのだろうか。ちょっと自信無し。

3d_tuto11_create_hud_ss03.png


ノードをリネーム。

3d_tuto11_create_hud_ss04.png

Hud (Control)
  │
  ├─ PlayerHp (Label)
  │
  └─ EnemyHp (Label)

Labelのプロパティを変更していく。 :

Labelノードを設定して文字表示をする。PlayerHp (Label) を選択して、Textプロパティに「Player: 50/50」を入力。これは画面の左上に表示する予定。

3d_tuto11_create_hud_ss05.png


EnemyHp (Label) を選択して、Textプロパティに「Enemy: 990/990」を入力。これは画面の右上に表示したいので、Align を Right にしておく。これで右詰め表示されるはず。

3d_tuto11_create_hud_ss06.png


フォントを設定する。Custom Fonts → Font の横の「空」をクリックして「新規 DynamicFont」を選択。「DynamicFont」をクリックすればプロパティが表示されるので、Font Data に Vegur-Bold.otf を指定すれば Vegurフォントが使われるようになる。
  • Size で文字サイズを指定。
  • Use Filter を有効にすれば文字が少し滑らかになって表示される。
  • Font Color Shadow を有効にすれば文字に影がつく。
  • Shadow Offset X, Y で影のオフセット位置を変更できる。

3d_tuto11_create_hud_ss07.png


表示位置を調整。それらしい感じになった。

3d_tuto11_create_hud_ss08.png

Hudシーンを保存。 :

res://assets/ の下に Hud.tscn としてシーンを保存。

3d_tuto11_create_hud_ss09.png

スクリプトを書く。 :

Hudに、スクリプトファイルもアタッチする。res://scripts/ の下に Hud.gd として保存。

3d_tuto11_create_hud_ss10.png


Hud.gd にスクリプトを記述していく。

3d_tuto11_create_hud_ss11.png

スクリプトの内容は以下。とりあえず、PlayerHp、EnemyHp の表示を更新するためのメソッドだけ用意しておく。

_Hud.gd
extends Control

func _ready():
    pass # Replace with function body.

#func _process(delta):
#   pass

func update_player_hp(hp, hpmax):
    $PlayerHp.text = "Player: %d/%d" % [hp, hpmax]
    
func update_enemy_hp(hp, hpmax):
    $EnemyHp.text = "Enemy: %d/%d" % [hp, hpmax]

MainシーンにHudシーンを追加。 :

MainシーンにHudシーンのインスタンスを追加する。Main.tscn を開いて、Mainノードを選択。上のほうにあるインスタンス追加ボタンをクリックして、res://assets/Hud.tscn を選べば Hud が追加される。

3d_tuto11_create_hud_ss12.png

Mainシーンにスクリプトを用意。 :

Mainシーンにもスクリプトファイルを用意する。Mainを選んでスクリプトをアタッチ。res://scripts/Main.gd として保存した。

3d_tuto11_create_hud_ss13.png


スクリプトを記述する。

3d_tuto11_create_hud_ss14.png

内容は以下。

_Main.gd
extends Node

var player_hp_max = 0
var enemy_hp_max = 0

func _ready():
    player_hp_max = $Player.hp
    enemy_hp_max = $EnemyZako.hp

#func _process(delta):
#   pass

func damage_player():
    var hp = $Player.hp
    $Hud.update_player_hp(hp, player_hp_max)

func damage_enemy():
    var hp = $EnemyZako.hp
    $Hud.update_enemy_hp(hp, enemy_hp_max)

  • 初期化時に Player や Enemy のHPを取得して変数に記録。
  • Player 又は Enemy がダメージを受けた際、現在のHPを使ってHP表示を更新するメソッドを用意。

プレイヤーのスクリプトを修正。 :

Mainシーンのスクリプト内で、Player や Enemy は HP を持っていることを前提にした記述を追加したけれど、まだ Player側ではそんな変数を持たせてないのでそのあたりを追加する。

プレイヤーのスクリプトファイル、res://scripts/Player.gd を編集。内容は以下。

_Player.gd
extends KinematicBody

signal player_damaged
signal player_died

# export (PackedScene) var PlayerBullet
var PlayerBullet = preload("res://assets/PlayerBullet.tscn")

const SPEED = 32
var velocity = Vector3()
var bullets

var hp = 50
var damage = 0

func _ready():
    hp = 50
    # bullets = get_tree().root.get_node("Main/PlayerBullets")
    bullets = $"/root/Main/PlayerBullets"

#func _process(delta):
#   pass

func _physics_process(delta):
    # move
    velocity = Vector3()
    if Input.is_action_pressed("ui_right"):
        velocity.x = 1
    elif Input.is_action_pressed("ui_left"):
        velocity.x = -1
    if Input.is_action_pressed("ui_down"):
        velocity.z = 1
    elif Input.is_action_pressed("ui_up"):
        velocity.z = -1
    
    # Do not multiply by delta when using move_and_slide()
    velocity = velocity.normalized() * SPEED
    move_and_slide(velocity)
    
    if damage > 0:
        hp -= damage
        damage = 0
        if hp <= 0:
            hp = 0
            emit_signal("player_died")
        emit_signal("player_damaged")

func _on_ShotTimer_timeout():
    var bullet = PlayerBullet.instance()
    var pos = Vector3(translation.x, translation.y, translation.z - 1.5)
    bullet.translation = pos
    bullets.add_child(bullet)

  • 最初のあたりで、カスタムシグナルとして signal player_damaged と signal player_died を用意した。
  • hp という変数を用意した。
  • damage という変数を用意した。
  • 別の何かが damage に 0以外の値を入れたら、自分はその分ダメージを受けたのだ、ということにする。
  • hp から damage 分を引いて、hp が 0 になってなければ自分はまだ生きてる。0なら死んでる。
  • ダメージを受けた時は emit_signal("player_damaged") を呼んで player_damaged シグナルを発行する。
  • 死んだ時は emit_signal("player_died") を呼んで player_died シグナルを発行する。

プレイヤーがダメージを受けた時に発行されるカスタムシグナル、player_damaged にメソッドを接続する。Player を選択して、ノードタブをクリック → シグナルをクリック → player_damaged() を右クリックして「接続」。

3d_tuto11_create_hud_ss15.png


Main を選択して、メソッド名の欄に「damage_player」と入力して「接続」。メソッド名に括弧はつけなくていい。

3d_tuto11_create_hud_ss16.png

これで、プレイヤーがダメージを受けると Main.gd の damage_player() が呼ばれる状態になった。

敵のスクリプトを修正。 :

敵シーンにもプレイヤーシーンと同様の修正を施していく。

res://scripts/EnemyZako.gd を開いて修正。内容は以下。

_EnemyZako.gd
extends Area

signal enemy_damaged
signal enemy_died

export (PackedScene) var enemybullet

var base_pos = Vector3()
var angle = 0
export var move_w = 22
export var move_h = 12
var bullets

var hp = 990
var damage = 0
var attack_point = 10

func _ready():
    base_pos = translation
    angle = 0
    bullets = get_tree().root.get_node("Main/EnemyBullets")

#func _process(delta):
#   pass

func _physics_process(delta):
    move(delta)
    
func move(delta):
    angle += delta
    translation.x = base_pos.x + move_w * cos(deg2rad(angle * 90))
    translation.z = base_pos.z + move_h * sin(deg2rad(angle * 70))
    
func _on_ShotTimer_timeout():
    var angle_add = 12
    var angle = 90 - angle_add * 3
    var spd = 0.2
    for i in range(7):
        _shot(translation, angle, spd)
        _shot(translation, angle, spd * 0.8)
        angle += angle_add
    
func _shot(pos, angle, spd):
    var bullet = enemybullet.instance()
    bullet.translation = pos
    bullet.set_dir_and_speed(angle, spd)
    bullets.add_child(bullet)

func _on_EnemyZako_area_entered(area):
    if is_queued_for_deletion():
        return
    # print("playerbullet hit the enemy")
    if area.is_in_group("playerbullets"):
        hp -= area.attack_point
        if hp <= 0:
            hp = 0
            emit_signal("enemy_died")
        emit_signal("enemy_damaged")

func _on_EnemyZako_body_entered(body):
    if is_queued_for_deletion():
        return
    # print("player hit the enemy")
    if body.is_in_group("player"):
        body.damage = attack_point

修正内容は、Player.gd に対して行ったこととほとんど同じで、カスタムシグナル名が違う程度。

ただ、Enemy は自分でプレイヤーの弾(Areaノード)と当たったかどうかを調べるので、プレイヤーの弾が attack_point という変数を持っていることを前提にして、その値で hp を減らす処理をしている。

敵がダメージを受けた時に発行されるカスタムシグナル、enemy_damaged にメソッドを接続する。EnemyZako を選択して、ノードタブをクリック → シグナルをクリック → enemy_damaged() を右クリックして「接続」。

3d_tuto11_create_hud_ss17.png


Main を選択して、メソッド名の入力欄に「damage_enemy」と入力して「接続」。

3d_tuto11_create_hud_ss18.png

これで、敵がダメージを受けると Main.gd の damage_enemy() が呼ばれる状態になった。

敵弾のスクリプトを修正。 :

敵弾のスクリプト res://scripts/EnemyBullet.gd を修正する。内容は以下。

_EnemyBullet.gd
extends Area

var velocity = Vector3()
var direction = 0
var speed = 3
var attack_point = 10

func _ready():
    pass # Replace with function body.

#func _process(delta):
#   pass

func _physics_process(delta):
    translate(velocity * speed * 60 * delta)

func set_dir_and_speed(angle, spd):
    direction = angle
    speed = spd
    var x = cos(deg2rad(angle))
    var z = sin(deg2rad(angle))
    velocity = Vector3(x, 0, z)
    
func _on_KillTimer_timeout():
    queue_free()

func _on_EnemyBullet_body_entered(body):
    if is_queued_for_deletion():
        return
    # print("EnemyBullet Hit!")
    if body.is_in_group("player"):
        body.damage = attack_point
    queue_free()

  • 変数 attack_point を追加して、プレイヤーへの攻撃力を入れておく。
  • プレイヤーと当たった時は、プレイヤーが変数 damage を持っているはずだから、damage に自分の攻撃力を入れてやる。
  • プレイヤー側は、damage が0以外なら何かが当たってダメージを受けたという処理をする。

プレイヤーの弾のスクリプトを修正。 :

プレイヤーの弾のスクリプト res://scripts/PlayerBullet.gd を修正する。内容は以下。

_PlayerBullet.gd
extends Area

var velocity = Vector3()
var speed = 90

var attack_point = 10

func _ready():
    velocity = Vector3(0, 0, -1)

#func _process(delta):
#   pass

func _physics_process(delta):
    translate(velocity * speed * delta)

func _on_Timer_timeout():
    queue_free()

func _on_PlayerBullet_area_entered(area):
    if is_queued_for_deletion():
        return
    # print("PlayerBullet Hit!")
    queue_free()

  • 変数 attack_point を追加して、敵への攻撃力を入れておく。
  • 敵と当たった時は、敵側でこの attack_point を参照して処理をする。


これで、プレイヤーの弾が敵に当たったり、敵弾がプレイヤーに当たったりすると、それぞれのHPが減って、HUD上の表示が更新される状態になった。

しかし、このままだとプレイヤーに敵弾に当たったことが分かりづらい。次回はプレイヤーや敵がダメージを受けた時の簡単なエフェクト(?)をつけてみる。

#2 [nitijyou] 浴室のミニクリプトン電球を交換

朝、親父さんから、浴室(風呂場)に2つある照明の向かって右側がつかなくなったからチェックしてくれ、と頼まれた。確認した感じでは電球が切れてたようで。予備のミニクリプトン電球は親父さんが既に買っていた。親父さん用の押し入れの上のほうの黄色いプラスチック製の箱の中に2個セットの封を切ってない製品があったので1個を使用。まだ1個残ってるので次回電球が切れた時はソレを使えばよい。と、こうしてメモしておくけれど自分のことだからきっと絶対に忘れてしまうだろうなコレ…。

おそらくだけど、交換に使った製品は LDS100V54W・W・K・2P だと思う。100V、60W型(54W)、E17口金35mm径、ではなかろうか。パッケージがそんな感じの見た目だし。今回使ったのはホワイトだけど、クリアの製品もあるらしい。型番は LDS100V54W・C・K になる模様。

考えてみたらLED電球に交換するのもアリだったのかもしれない。ググったところ、E17口金、60W相当、密閉器具対応のLED電球は既にあるようだし。LED電球にすれば電球色以外にも昼白色や昼光色を選べるので、浴室内の雰囲気が結構変わるかもしれない。ただ、まだ値段が高目ではあるけれど…。

2019/11/16() [n年前の日記]

#1 [gimp] texturizeプラグインのソースを眺めてる

せっかく Windows10 上で、gimp-texturize プラグインをビルド可能な環境を整えたことだし。ここは一つ、実行すると謎のエラーを出してクラッシュしてしまう原因を調べてみようかと思い立った。

_lmanul/gimp-texturize: Texturize plugin for the GIMP

ということで、チマチマと、printfデバッグ。ソースのあちこちに printf("hoge"); を追記して、ビルドして、GIMP から実行して。どこで不正終了するのか、場所だけでも突き止めようと。

offset.c が怪しい。 :

調べた範囲では、どうやら src/offset.c の、offset_optimal() が呼ばれてからクラッシュしているらしい…。 *1

_gimp-texturize/offset.c at master - lmanul/gimp-texturize

てっきり、calloc や malloc を呼んでいる部分で問題が起きているのではないか、返り値のNULLチェックもしてないし、と予想していたのだけど。

_gimp-texturize/graphcut.cpp at master - lmanul/gimp-texturize
_gimp-texturize/initialiser.c at master - lmanul/gimp-texturize

どうやらそこではなさそうだなと。というのも、NULL が返ってきたらエラーメッセージを出すように修正しても、該当メッセージが全く出てこなかったので。

さておき、offset_optimal() は、difference() という関数を呼び出しているのだけど、この difference() が怪しい。

中では、以下の2つのポインタを使っているのだけど…。
  • patch : 元画像バッファへのポインタ。
  • image : 新先作成画像バッファへのポインタ。
この2つのポインタが、確保されたバッファイサイズを超えて参照されてしまう瞬間がある、ような気がする。特に patch がヤバイ。与えられたアドレス初期値+バッファサイズより、前にも、後ろにも、盛大に飛び出して、全然関係ないメモリ領域の値をせっせと参照している場面があるように思える…。

それとも、patchバッファは元画像サイズ (= width_p * height_p * channels) を持つはずだ、という認識が、そもそも間違っているのだろうか…。

どうしてそれっぽく動く時もあるのか。 :

しかし、全然関係ない領域を参照しているのに、どうしてそれっぽい画像が出来上がっていたのだろう。

どうやら、difference() は、元画像を配置するのに適した場所を探し出すため、元画像と生成画像のピクセル情報を総当たりで取得して差にして返す関数のようで。たまたま偶然、頓珍漢な領域の情報と差を取ってみたら、それらしい差が得られてしまって、ベストポジションを見つけたつもりになっていた…のではないかと。

しかし、稀に、ユーザプログラムが読んではいけないアドレスから値を読もうとしてしまって、その際には不正終了する…ということではないのかなと。

実行するたびに、生成できたり、不正終了したりと、同じ動作にはならなかったけど。その時々で、周辺のメモリ領域に違う値が入ってたから、動作結果も毎回異なっていたのだな…。たぶん。

飛び出さないようにしてみた。 :

バッファサイズを超えずに値を参照するように修正して動作確認してみた。

落ちない。何度実行しても落ちない。ということは、予想は当たってたようだな…。たぶん。

その代わり、4重ループ内で、1ドット参照するたびに、剰余を使ってアドレスを求め直すようにしてしまったので、処理がとんでもなく遅くなった…。まあ、落ちるよりはマシだろうけど…。

生成画像が正しいかどうかはよく分からず。もっとも、自分の予想が当たっていたとしたら、今までも頓珍漢な画像を作っていたはずで。しかし見ていて特におかしいとは思わなかったのだから、生成結果が正しいかどうかなんて目視で判別はできないだろうなと。

*1: DOS窓に printf で文字列が表示されるタイミングがずれてなければの話だけど。

#2 [anime] リュウソウジャー、ガイソーグ活躍回を視聴

録画してたソレを視聴。

凄かった…。とにかく凄かった…。カメラワークは異様に凝ってるし。演技は熱いし。なんだかスゴイ場所で戦ってるし。VFXもカッコイイ。SEもカッコイイ。どのカットもカッコイイ。

こんな マスク割れのさせ方があったとは…。こんな見せ方、思いもつかなかった。

そして、あの台詞を、あそこであんな風に使うとは…。これは燃える。いや、泣く。こんなの見せられたら、ちょっと泣きそう…。

戦隊シリーズと言えばサクサクと話が進む印象があるけれど。今回は役者さんの各演技をじっくり見せようと、ちゃんと尺を使ってみせていた感じで。話の内容と相俟って、若干失礼ながら戦隊とは思えないしっとりした印象に。

最後に メッセージを残してあるあたりにも唸ってしまった。例えば「北の国から」でも何度も使っていたぐらいに、この手のソレは、使い方次第ではあるけれどかなり美味しい手口だろうと思うわけで。上手いな…。ココで使いますか…。やるなあ…。しかも演技が…。この役者さん、やはり間の取り方が本当に上手いなと…。

いやはや、この回は名作なのではあるまいか…。脚本、演出、演技、VFX、どれもこれも良かった。この回は良い。素晴らしい。

2018/11/16(金) [n年前の日記]

#1 [tic80] TIC-80でシューティングゲームっぽいものを書いてみる。その2

先日、TIC-80上で動く横スクロールシューティングっぽいモノを書き始めたけれど、アタリ判定もつけてみた。

stgsample5_ss1_opt.gif

ブラウザ上で動かしたいなら以下。

_stgsample5.tic.html

操作方法。

ソース。 :

ソースは以下。長くなり始めたので Gist にアップロードしてみた。

_TIC-80 shoot 'em up sample

スプライト画像は以下。

sprites.gif

_sprites.gif

ソースも画像も、CC0 / Public Domain ってことで。

ちなみに。
  • export sprites で、スプライト画像のエクスポート。
  • import sprites で、スプライト画像のインポート。
以下が参考になった。ありがたや。

_TIC-80 初心者講座: マップ・スプライト画像を画像ソフトで描いて取り込もう - Qiita

ソースの簡単な解説。 :

アタリ判定は、hitcheck()、hitcheckCirc() で処理をしている。
function hitcheckCirc(e,b)
 if not next(b.collision) then
  return false
 end
 local x,y,r
 x=e.collision[1]-b.collision[1]
 y=e.collision[2]-b.collision[2]
 r=e.collision[3]+b.collision[3]
 if x*x+y*y <=r*r then return true end
 return false
end

function hitcheck()
 -- enemys vs bullet
 for i,e in ipairs(enemys) do
  if e.alive and next(e.collision) then
   for j,b in ipairs(bullets) do
    if b.alive and hitcheckCirc(e,b) then
     e:hit(b)
     b:shot(e)
     break
    end
   end
  end
 end

 if player.alive==false or
    not next(player.collision) then
  return
 end

 -- enemys vs player
 -- ...

 -- enemy bullets vs player
 -- ...
end

判定の仕方は色々あるけど、今回は、点と点の距離で判定。
 if x*x+y*y<=r*r then return true end
 return false
敵と弾、敵と自機、等、x座標とy座標の差が得られれば、 _三平方の定理 で距離は求められる。式に平方根が入ってくるけど、今回は正確な距離を求めたいわけじゃなく、任意の距離より近いか遠いかを知りたいだけなので、判定に使う距離を二乗して比較に使えば平方根を求めなくて済む。

アタリ判定用のデータは、 _DXRuby Sprite#collision= を参考に、{x,y,r} を各クラスで持つことにした。

ちなみに、Lua で、テーブルが空かどうかを判定する際は next(テーブル名) が使えるらしい。

_Lua ちょっとしたコードチューニング - Qiita

#2 [tic80] TIC-80用のソースコードを外部エディタで編集したい

TIC-80は、エディタ、スプライトエディタ(ドットエディタ)、マップエディタ、サウンドエディタ、ミュージックエディタ ―― 全部入っているので、気軽に触り始めることができて便利なのだけど。しかし、エディタが貧弱なので、せめてソースコードを外部エディタで編集出来たらな、と思う時があって。

まあ、お金を出してPro版を買えば、外部エディタで編集することもできるらしいのだけど。そこらへん、無料版でも、ちょっとはどうにかならんか…。

と思ってググっていたら、「ソースコードの一行目に dofile("game.lua") と書けば game.lua を読み込んで使えるよ」という話を見かけて。

_Add the ability to export/import the game code so it can be edited externally - Issue #85 - nesbox/TIC-80
_TIC-80さんのツイート: "TIC tip: if you place your game.lua file near TIC exe, add dofile('game.lua') to the code you can edit game in your favorite editor

なるほど…。その機能を使えば、.lua ファイルを外部エディタで編集できそうだなと。

注意点としては…。 そのあたりは気を付けないといかんらしい。

更に、以下によると「dofile() は非推奨」と書いてあるので、いつまでこの機能が使えるのかは不明。

_Time Tripper: TIC-80の新バージョン(0.50.0)がリリースされました。

試してみた。 :

とりあえず試してみた。環境は Windows10 x64 + TIC-80 0.70.6。

任意のディレクトリを作って、以下のようなファイル構成にして。
.
|-- tic80.exe
|-- stgsample5.lua
`-- stgsample5.tic

DOS窓を開いて、そのディレクトリをカレントディレクトリにして。(cd C:\hoge\fuga)

コマンドラインオプションをつけて、TIC-80を起動。
tic80 .
「.」をつけて起動すると、いつもと違って、カレントディレクトリをストレージ場所にした状態で起動できるらしい。ちなみに、folder と打てばストレージ扱いの場所がエクスプローラで開かれるので、反映されてるかどうかも確認できる。

_Home - nesbox/TIC-80 Wiki
tic80 .                        will use current directory as storage
tic80 ../path/to/cart.tic      will use ../path/to/ as storage and load cart.tic
tic80 -code game.lua           load and run the code without startup animation
tic80 -code-watch game.lua     same as -code but also reload it when TIC is focused
tic80 game.tic -code game.lua  load cartridge, inject the code and run without startup animation

load stgsample5 で、カートリッジ(.tic)をロード。

F1キーを押してエディタに入って、ソースコードを全部消して(Ctrl+Aで全選択、Deleteで消去)、1行目に、dofile("stgsample5.lua") とだけ書いておく。

この状態で Ctrl+R を叩いて実行してみたら、.lua に書かれた内容で動いてくれた。

外部エディタで .lua を修正して、TIC-80上で ESCキー → run をしたら、修正内容が反映された動作になった。

つまり、無料版の TIC-80 0.70.6 でも、外部エディタを使って .lua を編集することが一応可能な状態にできるっぽいなと。

#3 [prog] Luaにcontinueが無いのがツライ

Lua というプログラミング言語には、ループを制御する continue文が無い。

_break文とcontinue文
_continue文 - Wikipedia
_Tips/continue - Lua Memo
_Luaには『continue』は存在しない | とど。

地味にツライ。ループ内の記述が結構グチャグチャになる…。

Lua でもどうにかして continue を使えないかという質問に対して、こういうやり方はどうかと提案してる事例を見かけた。

_loops - Why does Lua have no "continue" statement? - Stack Overflow

どれもなんだかしっくりこない…。

一般的には、continue を呼び出す条件判定に not をつけて、if文で処理を囲むというのが定番だろうけど。Lua 5.2 から goto文が追加されたので、continue というラベルを作ってどうにかする方法が提示されていた。
for i=1,10 do
  if i % 2 == 0 then goto continue end
  print(i)
  ::continue::
end
手元の環境、Windows10 x64 + Lua 5.3.4 で試してみたけど、たしかに動いた。

そういえば、love2d は Lua 5.1相当(LuaJIT)を内蔵してたはずなので、この記述はできないだろうな…。

_Lua 5.1.2 is goto statement possible? - LoVE
_Why isn't Love 0.8.0 on Lua 5.2? - LoVE
_Lua 5.2 released, is there a plan to use it? - LoVE

いや、どうかな。 _LuaJIT Change History を眺めると、LuaJIT 2.0.0-beta11 - 2012-10-16 の時点で Lua 5.2 の goto/labels を追加した、と書いてある。

Windows10 x64 + love2d 11.1 では、LuaJIT 2.0.5 が内蔵されてるっぽいので…。もしかすると goto も使えるのかな…。そのうち試してみよう…。

2017/11/16(木) [n年前の日記]

#1 [raspberrypi][love2d] love2dが音を鳴らしてくれない件でまだハマってる

raspbian jessie までは pulseaudio が標準で入ってたけど、raspbian stretch は pulseaudio を使わなくなった、という話が気になるわけで。そのあたりが絡んでいて、love2d の音が鳴らないのではないか、と。

Raspberry Pi Zero W + raspbian stretch 上で、pulseaudio関係のパッケージをアンインストールしてから love2d をビルドしてみた。これで音が鳴るだろうか…。

pulseaudio関係をアンインストール。 :

sudo aptitude purge pulseaudio libpulse-dev pulseaudio-utils libsox-fmt-pulse
sudo aptitude purge hoge で、設定も含めてパッケージをアンインストールできる。

残ってるのは以下。
$ sudo aptitude search pulse | grep -E '^i'

i A libpulse-mainloop-glib0   - PulseAudio client libraries (glib support)
i A libpulse0                 - PulseAudio client libraries
vlc等が libpulse0 を必要とするらしいので残しておいた。

love2dをビルド。1時間半かかった。

試してみたが、ダメだった。相変わらず音を出そうとすると「Illegal instruction」と表示される。

「Illegal instruction」が気になる。 :

「Illegal instruction」というメッセージでググってるうちに気になる話を見かけた。armv7l の命令を armv6l で実行しようとした場合、そういうエラーメッセージを出す場合もあるそうで。

_raspberry pi - Illegal instructionというエラーについて - スタック・オーバーフロー

もしかすると、raspbian stretch の SDL2 を作る際に必要になるパッケージの中に ―― それも音関係を処理するパッケージの中に、ARMv7 が載ってる Raspberry Pi2 / Pi3 を前提にして作られてしまったパッケージが存在していて、それを ARMv6 の Raspberry Pi Zero W 上で動かそうとした、からエラーが出る、という可能性はないだろうか。raspbian jessie の頃は ARMv6のことも考えて作られてたけど、raspbian stretch は、まだそこまで手が回ってない、とか。

だとすれば、ARMv7 が載ってる Raspberry Pi3上で同じ作業をすると、そちらではすんなり動く・音が鳴る、かもしれない。

Raspberry Pi3 で love2d の動作を試してみる。 :

手持ちの Raspberry Pi3 + raspbian stretch + love2d で、音が鳴るか試してみたり。

ますは公式リポジトリ版のパッケージをインストール。
$ sudo aptitude install love
以下の新規パッケージがインストールされます:
  binfmt-support{a} liballegro4.4{a} libdevil1c2{a} libluajit-5.1-2{a} love

GL Driver (Fake DKMS) を有効化。公式リポジトリ版の SDL2関係は OpenGL を使うオプションでビルドされているらしいので。

love2d で音が出るか試してみた。音が鳴った。相変わらず、jack server がどうこうとメッセージが出るし、なんだかワンテンポ遅れてから鳴ってるけど、それでも一応音は鳴った。

ということは、raspbian stretch の公式リポジトリにアップされてる SDL2 + love2d は、必ずしも音が鳴らない、というわけではないということかな…。

しかし、何故か途中で音が鳴らなくなる。

ふと、Raspberry Pi3 に、pulseaudio が入っていて、動いてることに気づいた。おそらく gosu を動かす際にインストールしたのではないかな…。
$ ps x | grep pulse
1536 ?        S<l    0:01 /usr/bin/pulseaudio --start --log-target=syslog

pulseaudio --kill としてから love2d を動かすと、音がずっと鳴ってくれるようになった。ただ、love2d を動かすと、その時点で pulseaudio が起動してしまう模様。love2d を終了させてから確認すると、また pulseaudio が復活してる。

現状、pulseaudio と jack 関係でインストールされていたのは以下。
$ sudo aptitude search pulse | grep -E '^i'
i A libpulse-dev             - PulseAudio client development headers and libraries
i A libpulse-mainloop-glib0  - PulseAudio client libraries (glib support)
i A libpulse0                - PulseAudio client libraries
i A libpulsedsp              - PulseAudio OSS pre-load library
i   pulseaudio               - PulseAudio sound server
i A pulseaudio-utils         - Command line tools for the PulseAudio sound server

$ sudo aptitude search jack | grep -E '^i'
i A jackd              - JACK Audio Connection Kit (default server package)
i A jackd2             - JACK Audio Connection Kit (server and example clients)
i A libjack-jackd2-0   - JACK Audio Connection Kit (libraries)
i A qjackctl           - User interface for controlling the JACK sound server

pulseaudio をアンインストールしてみる。設定まで含めて削除。
sudo aptitude purge pulseaudio
この状態でも love2d の音は鳴る。しかも、pulseaudio が入っていた時より音が鳴り始めるまでの反応が全然早い。

つまり、raspbian stretch + love2d だから音が鳴らない、というわけではないらしい。少なくとも、Raspberry Pi3 + raspbian stretch + love2d なら、音が鳴る。ただし、Raspberry Pi Zero W + raspbian stretch + love2d では、音が鳴らない。

となると…。これはもしかすると、raspbian stretch の公式リポジトリには、ARMv7を前提にしたパッケージが色々アップロードされていて、ARMv6の Raspberry Pi Zero W にインストールしてしまうと不具合が起きる、ということになるのだろうか。

本当にそうかな? 実は Raspberry Pi Zero W も、raspbian stretch を入れてすぐに love2d を動かせば、音が鳴ってくれたりしないだろうか。試してみるしかないかな…。

#2 [firefox] Firefox 57が出たらしい

今までの拡張(アドオン)が使えなくなる、Firefox 57 だか Firefox Quantum だかが、とうとう公開されてしまったらしい。

Firefoxにたくさん拡張を入れて便利に使ってるつもりになってた自分としては、コレは困った…。どうしよう…。拡張が使えない Firefox なんて、利用する意味が無い…。

いやまあ、Webなんたらで書き直された拡張なら動くらしいけど。現状ではほとんど書き直されてないし、「全部書き直せって? だったら拡張の開発なんてやめるわ」と言い出した作者さんもチラホラ居るし。

Firefox ESR版を使えば従来の拡張も動くらしいけど、半年後にはESR版も Firefox 57 と同じ状態になるらしいし。Pale Moon、Waterfoxという派生ブラウザなら従来の拡張も動くという話があるけど、完全に互換性があるわけでもなさそうで。困った。

どうせ使いづらくなるなら、別ブラウザへの移行を、例えば Google Chrome へ移行することをちゃんと検討し始めたほうがいいのだろうか。うーん。

ちなみにFirefox ESR ってのは、法人向けとして、最新版よりちょっと古いバージョンの、セキュリティ面だけを修正して公開していくスタンスの Firefox、という説明で合ってるのかな。ベースは古い版なので、従来の拡張もまだ動くわけで。

storageフォルダって何だろう。 :

とりあえず Firefox の Profilesフォルダをバックアップしておこう…と思ったら、1.38GBもある。なんでや。

中のファイルサイズを一つ一つ確認していったら、storageフォルダが1GBほどのサイズ。何だろう。このフォルダは…。

中身を眺めると…。どうも Unityで作成された何かしらをブラウザ上で動かそうとした場合に、件の場所にデータ等が格納されてるっぽいなと。ソレ以外にも色々入ってるけど。コレは勝手に削除してもいいのだろうか。ダメなのだろうか。ググってもそれらしい情報が見つからない…。

Firefox ESRをインストールしてみた。 :

とりあえず、Firefox ESR をインストールしてみたのだけど。

起動しようとしても、いつまで経ってもウインドウが表示されない。仕方ないのでタスクマネージャからプロセスを殺してみたけど…。再度起動させたら、ウインドウは表示されたものの、ブックマークが全部消えた…。

バックアップしておいたブックマークの .json を渡して復元しようとしてみたら、CPUを1コア全部使って何か処理をしてるものの、そこから先に進まない。もしかして、Firefox ESR は52ベースで、今まで使ってたのは56ベースだから、処理できない .json になっているのだろうか…。

htmlでもバックアップしておいたので、そちらからならインポートできた。

と思ったら Firefox Sync が動き始めたようで、ブックマークの中身がグチャグチャに。しかもおそらく Firefox Sync がツッコんできたブックマークの内容が妙に古い。拡張も少しずつ入り始めたけど、これまた内容が古い。

Firefox Sync…酷いな…。たぶんある時期から同期ができてなかったんだな…。ダメダメなサービスだ…。いや、もしかすると Firefox 52時点の内容を同期しようとしたのだろうか。

最初の起動で固まってたというか処理が戻ってこなかったのも、Firefox Sync が必死に処理をしていたから、だろうか。たぶんこの機能、大量のブックマークやアドオンは想定してないのではないかなあ…。いや、Firefoxのブックマーク機能自体が、大量のブックマーク数を想定してなさそうだけど。整理してるうちにどんどん重くなっていくし…。

2016/11/16(水) [n年前の日記]

#1 [cg_tools] Inkscape 0.91 x64をインストール

今まで、Windows10 x64上で Inkscape Portable 0.91 x86版を使ってたのだけど、どうも起動が遅くてツライわけで。ググってたら、「フツーにインストールする版は少しは起動が早い」という話を見かけたので、試しに入れてみたり。

入れた版は、Inkscape 0.91 x64版。 _Windows 版 | Inkscape から、inkscape-0.91-x64.msi をDLしてインストール。

起動時間は…。あまり変わらんような…。いや、たしかに少しは早くなってるけど。
ソフト名1回目2回目
Inkscape 0.91 x6410秒5秒
Inkscape 0.91 x86 Portable14秒5秒
インストール直後の、一番最初の起動時に、おそらくはフォントを探してどこかにフォント種類をキャッシュするのだろうけど、そこは体感で数分かかった。その後は上記の起動時間になるっぽい。

不具合メモ。 :

ちなみに、自分の環境では、Inkscape 0.91 x64 で「印刷」を選ぶとエラーが出たはず。 _2016/01/07の日記 にメモしてあった。
ソフト名数値入力欄印刷
Inkscape 0.91 x64OKNG
Inkscape 0.91 x86NGOK
Inkscape 0.91 x86 PortableOKOK
Inkscape 0.48.5 x86 PortableOKOK

アイコンバグを修正。 :

Inkscape 0.91 は、Undo や Redo のアイコンがバグってて「×」のアイコンになってしまう。

_萌える?インクスケープ!(Inkscape) 【0.91】現在判明している不具合(バグ) で、暫定処置扱いだけど修正方法が紹介されてた。 _Inkscape 0.91 - Missing icons. - InkscapeForum.com から、icon.svg を入手して、Inkscapeインストールフォルダ\share\icons\icons.svg と交換すればいいらしい。

試してみたところ、たしかに Undo や Redo のアイコンが表示された。

メニューフォントを変更。 :

以下の記事を参考に、メニューフォントを変更。

_0.91.1リリース - Inkscape@JP
_既知の不具合 - Inkscape@JP
_Inkscape Portable の日本語化とフォントを変更する - @mekemoke
_GTKを使用しているアプリ(GIMP・Inkscape)のUIのフォントを変更する - tk4168の日記

etc\pango\pango.aliases を作成して上記ページで紹介されてる内容をコピペして保存。かつ、etc\gtk-2.0\gtkrc の最後に、
style "my-font"
{
  font_name="Tahoma 9"
}
widget "*" style "my-font"
を追加してみたり。

#2 [cg_tools] svgのサムネイル一覧を綺麗に表示したい

Windows10 x64上で、svgファイルのサムネイル一覧を閲覧したい。

今までは _XnView を使って見ていたけど、大変失礼ながら XnView のソレは品質が酷過ぎて。以下の画像を見れば分かるけど…とにかく汚い。正確なレンダリング(?)ができていない。

xnview_ss.png

もっと綺麗に、というか正確に、svgのサムネイル一覧を表示できるビューワはないものか…。

ググってみたけど、そもそもsvgをサポートしてるビューワ自体が少ないようで。svgは、相変わらず人気が無いなあ…。

しつこくググっていたら、以下のユーティリティに遭遇。

_SVG Explorer Extension - Home

Windowsのエクスプローラに、svgのサムネイルを表示する機能を追加してくれるユーティリティらしい。

試しに導入。Windows10 x64 を使っているので、 _SVG Explorer Extension - Download: SVG Viewer Extension for Windows Explorer v0.1.1 から、64bit版 dssee_setup_x64_v011_signed.exe をDLしてインストールしてみた。

インストール直後は、今までキャッシュされたサムネイル(ファイルアイコン)がそのまま表示されてしまったけど、 _CCleaner でエクスプローラのサムネイルキャッシュを削除してから表示してみたら、以下のような見た目に。

explorer_ss.png

綺麗な表示が得られた。これならなんとかなりそう。

Susieプラグインを使う手もアリ。 :

_Bay-side で、SVG形式Susieプラグインが公開されてる。ありがたや。

_ViX +SVG形式Susieプラグインで表示してみた。

vix_and_susie_svg_plugin_ss.png

ここで表示しているsvg群は、それぞれ48x48ドットのページサイズで作られているけど、そのサイズが反映された状態で表示された。見た目も綺麗。

#3 [prog][cg_tools] アイコン作成中

自作アプリのツールバーに表示できそうなアイコンを作成中。今回は Inkscape で svg を作成してからビットマップにしていこうかと。

アイコン名、ファイル名、アイコン種類は、以下を参考に。

_ArtLibreSet - Tango Desktop Project
_Tango icons - Wikimedia Commons
_TangoifiedIcons - Inkscape Wiki
_New Icons for Inkscape | Logos By Nick Saporito
_Icon Metaphors - Tango Desktop Project

ArtLibreSetの入手先。 :

ArtLibreSet の svg を眺めたら参考になりそうだなと思ったけれど、どこで入手できるのかが分からず。 _Talk:ArtLibreSet - Tango Desktop Project によると、tango-art-libre という名前で、CVS なるものを使って公開されてるらしいが…。

ひょっとすると、コレだろうか。

_Index of /static/cvs/tango-art-libre

試しに wget でごっそりDL。

_Web上にフォルダがそのまま公開されているフォルダをwgetでまとめて取得する方法 - 強火で進め
_wget の使い方

wget -r -np http://hoge、みたいな感じで試してみたら、おそらくは Apache(Webサーバ) が生成したindex.html までファイル保存してしまった…。けど、ひとまず svg は入手できた。

svgからpngに変換する方法で悩む。 :

48x48ドットのページサイズで、複数のsvgを作ったはいいけれど、pngに変換するあたりで悩んでしまったり。数がちょっと多いので、Inkscape を手で操作して変換していくのはツライ。将来、数が増えてきた時も対応が大変だろうし。

Inkscape をコマンドラインで呼び出して、pngでエクスポートしていく手があるらしいけど、自分の手元の環境では Inkscape の起動時間が遅いので、そのやり方はちと厳しい気がする。

ImageMagick を使って svg から png に変換する手もあるけれど、ググってみたところ、どうも ImageMagick の svg → png変換は画質が悪いというかクオリティが低いともっぱらの噂で。

更にググってみたら、どうやら rsvg なるツールが存在していて、ソレを使うとイイ感じの変換ができるらしいと知ったけど。その rsvg なるツールの正体が分からない。ググっても、Perlのモジュールが出てきたり、Rubyの記事が出てきたり、GTKをインストールして云々の記事が出てきたり、R言語がどうとかの記事が出てきたり。どうも Windows上では使えないツールなのかな、という気がしてきた…。

Linuxなら、rsvg-convert なるツールが存在するようで。Linux上で作業したほうがいいのかな。

Windows版のrsvg-convertがあった。 :

_Open Source Software and Windows 32-bit: RSVG-Convert SVG image conversion tool で、Windows上で使える rsvg-convert が公開されてた。ありがたや。

rsvg-convert-2.40.10.7z が、exeファイル一つで変換できるタイプらしい。その変わり、おそらくフォント関係の変換ができないのではないかなと。他の2つは、fc-cache.exe が同梱されてたり、dllがたくさん入ってた。

まあ、自分の場合、svg上のテキストは、念のためにパスに変換しながら作ってるから、rsvg-convert-2.40.10.7z で済みそうかなと。

XnViewもrsvg-convertに対応してるらしいのだが。 :

XnViewも、2.36の時点で rsvg-convert.exeに対応したらしいのだけど。

_XnView Software - View topic - XnView 2.36
_XnView Software - View topic - SVG support via rsvg-convert.exe
_XnView Software - View topic - How do I open SVG files and convert to PNG

Pluginsフォルダに、dll版を丸々コピーしてみたけど、それらしい動きにならない…。ヘルプメニューから辿れるプラグイン情報にもリストアップされてないし…。どうやって導入するんだろう? libpng16-16.dll がダブってるあたりも気になるし。

一旦 XnView をアンインストール・再インストールしてみたら分かってきた。CAD plugin (shareware) をインストールしないでおいて、その後 rsvg-convert.exe 一式をコピーしてやれば動作するのだな…。libpng16-16.dll も、一度アンインストール・再インストールした状態なら入ってなかった。今までの XnView アップデート作業中に、どこかのタイミングで入ってしまったのだろう。

ただ、rsvg-convert を導入した状態だと、svgのサムネイルを作成する際にDOS窓が開いて閉じてを繰り返すのがちょっとアレだなと。

もう一つ。オプションを弄っていて気付いたけど、ツール → オプション → サムネイル、で、シャープサムネイルにチェックが入ってるとサムネイルが汚くなる時がある模様。

2015/11/16(月) [n年前の日記]

#1 [nitijyou] メモホルダーについて調べてる

メモホルダーというか、メモスタンドというか。今まで、メモをPCデスクの柱にペタペタ貼ってたけど。写真立て? メモホルダー? メモスタンド? とにかくそういう感じのものに挟んで立てといたほうが、あちこちにヒョイっと持っていって参照できるかなと思えてきたわけで。

Google画像検索で眺めてみたけど、昔のTVの形をしたメモホルダーとか面白そう。他にも、ノートPCの簡易モデリングっぽい写真立ても目にして、こういう方向も面白いなと感心。

#2 [zatta][neta] レトロPC風のメモスタンドとかどうだろう

PC-6001 や PC-8001、MZ-80K や MZ-1200、MZ-700、FM-8 や FM-7。そういった、昔のPCのミニチュアでありながら実はメモスタンド、みたいな商品はどうだろうと。一部の人にはウケるかもしれない。

しかし権利面で問題があるだろうか。と思ってググってみたら、どうやらそれらの形状は意匠権とやらで保護されるけど、申請してから20年で有効期間が切れるそうで。となれば、昔の8bit PCのミニチュアを作って商品化しても問題無さそうだなと。

まあ、元ネタ知ってる人にしかウケないだろうから、あまり売れないよな。仮に商品化するとしても、3Dプリンタで受注生産、みたいな形が関の山かも。当然コストは高くなるのでやっぱり売れないですね。

アニメキャラを差し替えられるメモスタンドとかどうだろう。 :

ググってたら、アニメキャラをプリントしたメモスタンドなどもあったりして、その方向も面白いなと。自分で印刷してアニメキャラ部分を差し替えてカスタマイズできれば面白かったりしないかと。

そういや昔、そういうPCケースがあったっけ。フロントパネルに好きな画像を貼れるPCケース。アレはどの程度売れたんだろう。そこそこ売れたのか、それともあまり売れなかったのか。

2014/11/16() [n年前の日記]

#1 [python] Python 2.7.7 を 2.7.8 にアップデート

一旦 2.7.7 をアンインストールしてから、2.7.8 をインストール。

インストールし直したモジュールは以下。

setuptools
pip
_PySide
_wheel
_comtypes
_cx_Freeze
_numpy
_Pillow
_py2exe
_py2exe(ver3)
_PyAudio
_pygame
_pyglet
_PyGTK
_PyOpenGL
_PyOpenGL-accelerate
_pywin32
_scipy
_wxPython
_wxPython Docs and Demos
_PyGTK
_pygubu
_blockdiag
_pyinstaller
pylint
pep8
autopep8
markdown
markdown2
logilab-astng
logilab-common

_PIL は、Pillow をインストールしたから今回はインストールしなくていいかなと。

#2 [pc] お袋さんのPCをメンテナンス

お袋さんが仕事で使ってるノートPCの調子が悪いので見てほしいとのこと。富士通 LIFEBOOK AH33/J FMVA33JW1。Windows8機。2012-1と書いてあったので、2012年1月に製造された個体だと思う。 *1

まず、デスクトップ上にアイコンが増えてしまってどうすればいいのか分からないとのことで。フォルダを作ってその中に移動して、後で必要になったらそのフォルダを開けばいいし、頻繁に使うアプリなら、そのフォルダからデスクトップにアイコンを移動すればいい、と教えておいた。

プリインストールされていたのであろう、期限切れのウイルス対策ソフト Norton Internet Security が動きっぱなしだったのでアンインストール。Windows8機だから、Windows Defender という、最低限のウイルス対策ソフトは入ってるはずだし、期限切れのウイルス対策ソフトに頼るよりはまだマシだろうと。

それはともかく、何をするにしても処理が遅い。タスクマネージャを眺めてたら、2GBのメモリをほとんど使い果たしてることに気付いたり。さてはメモリが足りてないのかな。

Windows Update で、Windows8 のメモリ使用量を改善するパッチが出てることに気付いた。試しにインストール。メモリ使用量は以前と比べて減ったけど、それでも動作が遅い。常時HDDにアクセスし続けている模様。もしかすると、バックグラウンドで何かのプログラムが、HDD内のファイルを全スキャンしてるのでは。

数時間ほどアレコレ作業をしていたら、いつの間にかHDDへのアクセスが静かになった。もしかすると、ウイルススキャンでも走ってたのだろうか…。動作もそこそこ軽くなった。

ただ、調べてみたら、Windows8 は起動時に2GB以上のメモリを使ってしまうそうで。となると、2GBのメモリしか載ってないのはやはり厳しい気がする。4GBは必要なんじゃないか?

さておき。FMV関係のサイトは、情報を探しづらいな…。型番でGoogle検索しても、スペック表すら出てこないあたり、サイトの作りがおかしいんじゃないか。

一応、スペック表は見つけたけど。

_今までに発表した主な製品(ノートブックPC LIFEBOOK(ライフブック) FMVA33JW1 製品情報) - FMVサポート : 富士通

「LIFEBOOK AH33/J」では出てこなくて、「FMVA33JW1」で検索したら、検索結果の真ん中あたりに出てきた。
*1: しかし、ネットで検索したところ、2012年10月に発表した機種と書いてあった。すると、「2012-1」の「-1」は何を示してるのだろう。

#3 [anime] Fate/stay night [Unlimited Blade Works] を視聴

最近のアニメは凄いなあ…。映像が凄いことになってる…。

アニメと言うと、大体は魔法云々が出てきてちょっとうんざりしちゃう時もあるのだけど。 *1 このくらいの映像を見せてくれるのであれば、よくある魔法云々設定も全然OKじゃないかと思えたり。

OP映像で、背景が3Dっぽく動いてるあたりがなんだかいいなと。デジタル制作移行の恩恵というか。
*1: まあ、昔から「魔法使いサリー」「魔女っ子メグちゃん」等があったので、アニメと言えば魔法使い、だろうとは思いますけど。

2013/11/16() [n年前の日記]

#1 [pc] PT1の映像をLAN内PCでも視聴できるようにしてみたり

東芝製HDDレコーダ RD-BZ710 が、HDMI接続先・ディスプレイを見失ったままになってしまいまして。画面が映りません。映像が流れてきません…。

電源を切って入れ直すまでは、TVチューナー代わりとして使えない状態に。またか。またしても、この症状か。いい加減にせい…。映像が出てこないHDDレコーダって、なんじゃそりゃ…。

最近はこの不具合に遭遇せずに済んでたから、油断してた。予約録画開始で電源ONになった状態で、ダブルチューナーを切り替えたり、チャンネルを変更すると、この不具合が起きやすいんだよなあ…。

仕方ないので、PT1を積んでるサブPCに _Brynhildr でアクセスして、TVTest を起動して眺めてたのだけど。やっぱり画面がガクガクしてしまう。一応見れてる状態と言えなくもないけど、結構厳しい。PT1を積んでるPCを、映像を送り出すサーバにして、LAN経由でTV視聴可能に、とかできんのかなと。

ググってみたら、Spinel なるソフトを使うと可能になるようで。ありがたや。これは試してみないと…。

サーバ側の導入作業。 :

環境は、Windows7 x64 + PT1。

あちらこちらの解説記事を頼りにして、以下のファイルをDLさせてもらったり。
  • Spinel_ver3.6.1.1.7z
  • BonDriver_Spinel_ver3.5.3.0.7z
  • TVTest_0.7.23.zip
  • TVTest_0.7.23fix.zip
  • BonDriver_PT-ST(人柱版3)
  • B25Decoder.dll (Multi2Dec に入ってるらしいけど、手元にあった EpgDataCap_Bon(人柱版9.34).zip にも入ってたのでソレを使った。タイムスタンプは 2008/11/23だった。ただ、もしかすると現行版の Spinel では不要だったりするのかな? という疑問も。)

まず、サーバ側に Spinel を導入…するのだけど。注意点として、サーバ側のPCは、LAN内のIPアドレスを固定しとかないといけない。クライアント側からアクセスする際に固定してないと面倒、なのだと思う。

Spinel_ver3.6.1.1.7z を解凍して任意のフォルダに Spinel3フォルダを移動。

B25Decoder.dll を Spinel3\ 以下にコピー。

Spinel3\BonDriver\ 以下に、BonDriver_PT-ST(人柱版3)を解凍して出てきた x86フォルダの中身を移動…すればいいらしいのだけど、サブPCには既に TVTest が入っていて動かせる状態だったので、そこから以下のファイルを Spinel3\BonDriver\ 以下にコピーした。
  • BonDriver_PT-S.ch2
  • BonDriver_PT-S.ChSet.txt
  • BonDriver_PT-S.dll
  • BonDriver_PT-ST.ini
  • BonDriver_PT-T.ch2
  • BonDriver_PT-T.ChSet.txt
  • BonDriver_PT-T.dll
  • PTCtrl.exe

BonDriver_PT-S.dll と BonDriver_PT-T.dll をコピー&貼り付けして、各2ファイル、計4ファイルに増やす。それをリネームして、以下のようなファイル名にした。
  • BonDriver_PT-S0.dll
  • BonDriver_PT-S1.dll
  • BonDriver_PT-T0.dll
  • BonDriver_PT-T1.dll

BonDriver_Spinel_ver3.5.3.0.7z を解凍して、BonDriver_Spinel.dll と BonDriver_Spinel.dll.ini を、Spinel3\BonDriver\ 以下にコピー。

BonDriver_Spinel.dll と BonDriver_Spinel.dll.ini をコピー&貼り付けして各2ファイル、計8ファイルに増やす。それをリネームして、以下のようなファイル名にした。
  • BonDriver_Spinel_PT1_0_S0.dll
  • BonDriver_Spinel_PT1_0_S0.dll.ini
  • BonDriver_Spinel_PT1_0_S1.dll
  • BonDriver_Spinel_PT1_0_S1.dll.ini
  • BonDriver_Spinel_PT1_0_T0.dll
  • BonDriver_Spinel_PT1_0_T0.dll.ini
  • BonDriver_Spinel_PT1_0_T1.dll
  • BonDriver_Spinel_PT1_0_T1.dll.ini

BonDriver_Spinel_PT1_0_*.dll.ini をエディタで開いて、TunerPath = "PT/0/S/0" の行を修正する。以下のように修正。
  • BonDriver_Spinel_PT1_0_S0.dll.ini ... TunerPath = "PT/0/S/0"
  • BonDriver_Spinel_PT1_0_S1.dll.ini ... TunerPath = "PT/0/S/1"
  • BonDriver_Spinel_PT1_0_T0.dll.ini ... TunerPath = "PT/0/T/0"
  • BonDriver_Spinel_PT1_0_T1.dll.ini ... TunerPath = "PT/0/T/1"

Spinel.exe を実行する。画面内に4つほどチューナー?の項目が表示される…はず。

Spinel.exe を終了する。Spinel.ini が出来ているのエディタで修正。DescrambleControl = 1 にする。解説記事によっては、= 3 にする場合もあるらしい。

これでサーバ側(?)の作業は済んだ…はず。

クライアント側の導入作業。 :

クライアント側に、TVTest を導入する。TVTest_0.7.23.zip を解凍後、そのフォルダ中に TVTest_0.7.23fix.zip を解凍して出てきた以下のファイルをコピー。
  • TVTest_0.7.23fix.exe
  • TVTest_0.7.23fix.patch
TVTest_0.7.23fix.exe を実行してパッチを当てる。

サーバ側から以下のファイルをコピーして、TVTest のフォルダに入れる。
  • BonDriver_Spinel_PT1_0_S0.dll
  • BonDriver_Spinel_PT1_0_S0.dll.ini
  • BonDriver_Spinel_PT1_0_S1.dll
  • BonDriver_Spinel_PT1_0_S1.dll.ini
  • BonDriver_Spinel_PT1_0_T0.dll
  • BonDriver_Spinel_PT1_0_T0.dll.ini
  • BonDriver_Spinel_PT1_0_T1.dll
  • BonDriver_Spinel_PT1_0_T1.dll.ini
  • Lapis.Spinel.SharedInterfaces.dll

BonDriver_Spinel_PT1_0_*.dll.ini の4ファイルをエディタで開いて修正。Address = "xxx.xxx.xxx.xxx:48083" の行に、サーバ側PCのIPアドレスを指定する。…自分、最初、この作業をしなかったもので、「接続先が見つからねえぞい」とエラーが出て悩んでました。

TVTest.exe を実行。どのdllを使うか聞いてくるので…とりあえず、BS放送用の BonDriver_Spinel_PT1_0_S0.dll を選んだ。カードリーダは「なし(スクランブル解除しない)」を選んでおく。

映像が出た! TVTest で設定画面を表示して、チャンネルのスキャンをする。画面を右クリック → 設定 → チャンネルスキャン、だったかな。もしかすると一番最初は、自動でチャンネルスキャン画面が出てきたような記憶もあり。

他のチューナーでもチャンネルスキャンをする。BonDriver_Spinel_PT1_0_*.dll を選んでいって、チャンネルスキャン。4つ分のチューナーに対して設定。

これで、RD-BZ710 が真っ黒画面になっても、一応TVを見れそう。

でも、PT1で録画中にコレを動かしたらどういう状態になるんだろうか…。

録画中でも問題無いようにしてみようと試みたり。 :

_PT2の新BS対応後のSpinel導入(覚え書き) | Tomba's Cooling を参考にアレコレ設定を。Spinel はOS起動と同時に起動させて、録画用ツール(らしい) TVRock が Spinel 経由で処理をするように。

サーバ側の BonDriver_Spinel_PT1_0_*.dll.ini 内の、
RequireExclusiveChannelControl = 1
の行で、排他的チャンネルコントロールとやらを有効にするのが肝、なのかしら。クライアント側は、
RequireExclusiveChannelControl = 0
にしておいて…。これで、クライアント側がそのチューナーを使ってても、サーバ側(録画PC)がそのチューナーを使おうとした場合はチューナーを持っていかれるよ、という状態になるのかもしれない。

件の記事では、録画用プログラムとして TVTest.exe を使ってるように見えたけど、自分の環境では RecTask.exe を使ってるように見えたので、そこの設定はちょっと違う記述にした。オプション内容は、視聴用も録画用も、
/d BonDriver_Spinel_PT1_0_T0.dll /DID A
/d BonDriver_Spinel_PT1_0_T1.dll /DID B
/d BonDriver_Spinel_PT1_0_S0.dll /DID C
/d BonDriver_Spinel_PT1_0_S1.dll /DID D
みたいな感じに。このあたりは弟が設定してくれたので、自分はよく分かってなかったり。

別のPCでも試してみた。 :

親父さんPCでも TVTest を動かしてみた。

自分のメインPCとPT1機は GbE? で繋がってるので帯域?は問題ないだろうけど、親父さんPCは無線LANなので、もしかすると画面がガクガクかも…。と思ったけどフツーに映ってくれてビックリ。意外とイケるんだなあ…。いや、考えてみたら、茶の間の REGZA が無線LAN経由で、自宅サーバに間違えて録画しちゃってた時もあるのだから、イケることは確認済み、だったのかな。

親父さんも喜んでたけど。問題は、PT1機は普段寝てる・スタンバイ状態な点。TVTest を起動してもPT1機が寝ていたら、当然映らない。親父さんPCからLAN経由で、PT1機を復帰できる何かを用意しないといけない。

自分は、「リモッチ」というツールを使って、PT1機を復帰させてるけど。複数のPCを管理できるツールなので、親父さんにとっては操作画面がよく分からないであろう予感。

2012/11/16(金) [n年前の日記]

#1 [windows] GeForce Driver をアップデートしたらWindows Aeroが無効になった

GeForce Driver を 306.97 にアップデートしたら、Windows7 の Aero が無効になってしまって首を捻る。ドライバ再インストールでクリーンインストールを選んでもダメ。

komado をアンインストールしたら Aero が有効になった。komado は、Android機の画面を、Windows機のサブディスプレイとして使えるソフト。

_Komado公式サイト の「よくある質問」に、ちゃんと書いてあった…。
Q: ディスプレイドライバの更新でAeroが無効となる。

Komadoをインストールした状態でディスプレイドライバを更新した際に、Aeroが無効となってします場合があります。この場合は、いったんKomadoをアンインストールし再起動をすることでAero表示が可能となります。再びKomadoのインストールを行うとAero表示を有効としたまま、Komadoがご利用頂けます。

Komado -よくある質問- より


2011/11/16(水) [n年前の日記]

#1 [nitijyou] メモするのを忘れた

この日は何をしてたんだろう…。どうせネット巡回ぐらいしかしてないだろうけど。

2010/11/16(火) [n年前の日記]

#1 [nitijyou] 煙草を買ってきた

朝方コンビニまで。

咳が出る。黄砂?

#2 [sound] ドラゴンの鳴き声を作りたいのだけど

自分の声を録音して、Audacityで弄ってみたけど、全然それっぽくならない。人の声ではダメなのか。

ドラゴンの鳴き声ってどんな音なんだろう…。怪獣っぽいソレだよな。怪獣と言えばゴジラだよな。ゴジラの鳴き声はどうやって作っているのだろう。検索してみた。諸説あるようだが、ネット上で一番広まっているのは、コントラバスの弦に松脂を塗って指で擦るというやり方らしい。もしかすると嘘情報なのかもしれない。当時、効果音を作った人にとっては飯の種だったろうから嘘八百を言って騙しているのかもしれない。が、しかし、仮に本当だとすれば、弦楽器の音から作れそうではある。

妹が壊れたバイオリンを持っていることを思い出した。コントラバスもバイオリンも弦楽器だから、そこそこ似た音が作れるかもしれない。帰宅した妹に頼んでバイオリンの音を録音させてもらった。これを素材にして試してみる予定。

2009/11/16(月) [n年前の日記]

#1 [pc] コンパクトでワイヤレスなキーボードについて物色したり

K340はなんだか使いづらい。キータッチは軽くて静かでグッドだし。左Altの位置がおかしいのも、まあ慣れてきたけど。とにかくカーソルキーその他が押しづらく…。

ということで、もちっとヨサゲなものがないかと探してみたけど。なかなか「これだ!」というものが無い。テンキーつきで、それでいて横幅が短くて、配列が変態ではなくて、できればキータッチが軽そうなモノが欲しい。あるいは、テンキーが無くて、配列が変態ではないものを…。

ワイヤレスタイプはどれも横幅が結構あるモノばかりで、なかなか厳しい。そもそも製品の選択肢が非常に少ない。うーん。

いっそCPU切替器を買って、有線で繋いでしまおうか。そうすれば選択肢はグンと増える。自宅サーバは独立したモニタ・キーボード・マウスを繋げてあるから、メインPC側でアレコレ試行錯誤して電源を落としたり等しても問題は無いわけだし。

が、今更CPU切替器を買うのも…。DVI-DとアナログRGBだから、手軽に切り替えできない・ディスプレイ側のボタンで「えいやっ」と切り替える操作が入ってしまうし。だったらキーボードやマウスは別々につけてあるほうが。とはいえ、キーボードが2つあると、操作に関してかなり混乱してしまうのもたしかで。どうしたものか。うーん。

2008/11/16() [n年前の日記]

#1 [prog] Python用のeclipseを用意した

今までPythonスクリプトは komodo edit で弄ってたのだけど。どうも使いづらいなと。

先日 NTEmacs を入れたことだし、そちらでどうにかできないものか。と色々調べてみたら M-x speedbar なるものがあるらしいと知った。実行してみたところクラス名も表示されて期待したものの、クラス名をダブルクリックもしくはEnterやeを押しても無反応。うーん。

_Emacs+Python (紫藤のWiki) というページを見つけ、emacsが今までPythonをかなり無視していた上に最新版では以前より不便になっている、と知る。emacsでPythonを勉強するのは諦めて、eclipse + PyDev でどうにかしようという気分に。

iアプリ開発用に使ってる eclipse に PyDev を入れてしまうと、問題が起きたときにiアプリ開発作業が止まってしまう。ので、別フォルダを用意して、その中に eclipse 3.4 を入れて、PyDev を入れた。

それにしても、相変わらず eclipse の起動は遅い…。あまりに遅すぎて、さあやるぞ、という気持ちが萎える…。

Pleiades All in One で入れ直してみた。 :

JDTが重いのだ、という話をどこかで目にして、最初から Python 用にした eclipse ならひょっとすると軽いのかなと想像。そのあたりの情報を探してるうちに、Pleiades All in One という、プラグインの日本語化も含めて必要そうなものが全部入ってる版もあると知り、pleiades-all-in-one-python-jre_20081014.zip をDL、解凍、インストール。

Aptana まで入ってるせいか、あまり変わらない…。

基本機能以外は何も入ってない状態らしい pleiades-all-in-one-platform-jre_20081014.zip をDLして入れ直してみた。そこに PyDev をインストール。起動時間はあまり変わらないけど、余計なものが入ってないはずだから、使用中は多少軽い…といいなあ…。

プラグインも少し入れた。 :

_AnyEdit tools プラグイン - EclipseWiki

_AnyEdit tools: download links によると、http://andrei.gmxhome.de/eclipse/ をソフトウェア更新で追加すればインストールできるらしい。

2007/11/16(金) [n年前の日記]

#1 [digital][iappli][cg_tools] 複数枚撮影して360度パノラマ画像を撮影するのは大変そう

Canon PowerShot A300 を、きっちり正確にぐるぐる回して360度のパノラマ画像を得ようとした場合、何度ずつ回せばいいのか計算してみたり。

まず、A300の画角(?)を実測。何かの対象物を映しながら、その対象物がギリギリ入る距離にカメラを動かして、対象物の幅と、対象物とカメラの距離を物差し等で測り、逆三角関数(アークタンジェント)で角度を推測した。
測定の仕方
たぶんこういう測り方で合ってるかな…。ちと自信なし。 *1 とりあえず、A300の場合、長辺(横)が50度。短辺(縦)が40度、な感じ。たぶん。

AR_CADで図を描いてシミュレーション。 _結果画像(pdf)。

A300を縦にして撮影した場合、上下方向について5回撮影しないと、180度を撮影できないっぽい。横方向は、12回でもなんとかなりそう。また、先日撮影した際は、A300を横にして撮影してたので、それも図にして検証。先日の撮影の仕方では、各画像が上下方向でほとんど重ならない。合成結果がいま一つよろしくなかったのは、もしかするとそのせいかしら…。

ていうか、5x12=60回、正確に角度を測りながら撮影しなきゃいけないのは、どう考えてもシンドイ…。しかもそれぞれ明るさが違う画像になってしまうわけで。無謀な作業。道理で皆さん魚眼レンズを導入するわけで…。
*1: 余談。アークタンジェントは、Windowsの電卓を関数電卓モードにすれば計算できる。表示→関数電卓、みたいな。Inv にチェックを入れてから、sin、cos、tan あたりを押せば、逆三角関数に。てなことを一応念のためにメモ。

#2 [windows] Windows Live Messengerを2008にアップグレードした

インストールを実行すれば古い版をアップグレードしてくれるようではある。デザイン以外で何が変わったのかはわからんけど。

Windows Live Photo Gallery もインストールしてみたのだけど。 :

My Pictures 中のあらゆる画像を登録されてしまうようで。登録してほしくないフォルダも入ってるんだけどな…。ということでアンインストール。

つーかコレ、Google の Picasa への対抗でしかないのではという気もする。いや、Windows に最初からコレが入ってたら、使われる場面も多いのかもしれんけど。

Windows Live Mail もインストールしてみたり。 :

Outlook Express を置き換えるはずのアプリ、らしい。オシャレな画面。ではあるけれど、Outlook Express から乗り換えるメリットが見えなかったので、アンインストール。

本当は Thunderbird を使いたいんだけど、Outlook Express に関して質問されることがちょこちょこあるのでそっちを常用していたり。Windows Live Mail について質問されるようになったらそっちに乗り換えようかしら。

IE7はWindows Updateで配信されないのかしら。 :

強制的にIE6→IE7にしてほしいのだけどな。ネット接続してるWindowsユーザが、全員IE7になれば、IE6に合わせたページ作り・IE6のバグ回避等をしなくて済むから楽なのだけど。

#3 [windows] _覚え書き@kazuhi.to: 続・スタンドアローン版IE7

_裏風ログ保管所  IE6&IE7共存!「IE7 Standalone」
_Internet Explorer 7 running side by side with IE6. (standalone) | TredoSoft

インストールしてみた。…IE7らしきブラウザが起動。上のほうに常時検索バーがあるあたり、Firefoxと似てるような感も。

_複数のIEを共存させる方法 - Go my way :

#4 [web] _ITmedia News:ヤフーがソーシャルブックマーク 登録記事を全文保存

知らなかった。てことはhnsで一々クリップしなくても済みそうな。

試用してみた。 :

タグを一つ一つ打ち込むのが面倒くさいなぁ…。英数字は履歴補完(?)をしてくれるからまだ楽なのだけど。日本語入力はちと面倒。後から、複数URLに対して、まとめて同じタグ列を指定できればまだ楽なのかもしれないけど。

このへん、他のサービスはどうやって解決してるんだろうな。最近打ち込んだタグ文字列をマウスクリックで入力できるようになってたり、前回の登録時のタグ文字列をそのまま残しつつ新規登録したり、とか?

#5 [iappli] 背景画像を作成中

GIMPで写真を合成しながら背景画像を作成。PanoSphere に渡して、6面分の画像を出力。藤-Resizerで縮小。BTJ32で一括jpeg保存。PanoCubeFlash_v10.swf で表示確認。AzJoinImageで連結。EDGE2で修正・256x256のbmpとして配置し直し。

結構時間をかけて弄ったつもりが、PanoSphereで表示してみると、想像していたよりも狭い空間に感じられたり、地平線がそもそも上下にずれてたりで、再度レタッチし直しになったり。

空の歪み具合は、Terragen で出力→DoGA背景コンバータで出力した画像をアタリにしながら再現。Photoshop Elements、あるいは、GIMP のフィルタの「極座標」「直交座標」あたりの使い方が判れば楽になるんだろうけど…。

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

Webページを作らないと。

2006/11/16(木) [n年前の日記]

#1 [windows] _Windows PowerShell 1.0 ローカライズ版インストール パッケージ

_(via P. Relations(2006-11-14))

気になる。…と思ったけれど、WinXP Home は動作環境に列挙されてないな。ショボン。これは「cygwin 使え」というMSからのメッセージなのかもしれん。

#2 [zatta][jiji][anime] _仮面ライダー響鬼と昨今のイジメによる自殺問題

武田鉄矢がここで言う「いじめられる奴を鍛えること」と、ヒビキが言う「心だけは強く鍛えてお」くこととは、同じ言葉を使ってはいても、かなり印象が異なる(少なくとも私はそうだ)。

どこがどう異なるのか。私の大雑把な『響鬼』紹介だけでは上手く伝えられないけれど、明日夢は単に「鍛えろ」と言われているだけではなくて、その一方で一時的な避難場所をも同時に提供されているのだ。

電網山賊 より

なるほど…。

ライダー響鬼の前半って、なかなか考えさせられる部分があるなと改めて感心。いや、後半も好きだけど。例えば犬小屋の話とか結構好きだったりする自分。

#3 [anime] _首藤剛志版 う○星やつら2 ビューティフルドリ○マー(?)のプロット

Webアニメスタイルでコラムを書いてたのは知ってたけど。blogをやっていたとは知らなかった…。さておき、他に箱書きとやらも公開されてて興味深い。

#4 [web][anime] _Flashアニメ「アニメーター対アニメーション」パート2

今回はついにデスクトップに侵略し、FirefoxやPhotoshop、AOLメッセンジャーとの激しいバトルを繰り広げ、手の付けられない状態になりますが……。

Flashアニメ「アニメーター対アニメーション」パート2 - GIGAZINE より

展開が凄すぎる…。

#5 [pc] _いないいないばぁっ! 3D塗り絵

おお。たしかに塗り絵。 _(via KYUCON*BLOG: 3D塗り絵)

#6 [windows] _VSTインストゥルメントに複数のVSTエフェクトを接続して演奏できる「VSTHost」

メモ。

#7 [windows] _PC作業での定期的な休憩を促す「VDTタイマー」

メモ。

#8 [comic] 「マリオネット」文庫版1-2巻 愛田真夕美著を読んだ

妹が買って(以下略。

未見だったのだけど、なるほどこういう作品だったのね。花ゆめ本誌に連載されてたらしき、比較的長めの話はともかく。短編についてはちょっと…。オチが「なんだそりゃ」な感じで。 雷が落ちてケリがついたり、屋敷が火事になってケリがついたりというのはちょっとなと。自然現象的要素でケリがつくのはどうもしっくりこない。もっとも、 火事になってケリがつくパターンは、エロゲ等が結構な頻度で使ってるような気はしたり。…まあ、雰囲気を楽しむ作品であろうから、オチをどうやってつけるかは、どうでもいいことではあるな。

#9 [comic] _訃報:ゲッターロボ原作の石川賢氏

絶句。

2005/11/16(水) [n年前の日記]

#1 [pc] メインPCの不調関係

青画面の英文メッセージを読むと「ビデオカードを変更してみろ」とか言われてるように思えるのだけど。うーむ。

_440BXで動作確認されたビデオカードまとめページ :

万が一、ビデオカードが壊れていたら、どれかと交換しなきゃいけないわけで。

が、しかし、今時 AGP 1.0(AGP 1x、AGP 2x)対応のカードなんて売ってない感も。となると、PCI接続のカードぐらい代替手段はないのか。… Socket7時代の性能に逆戻り。ちょっと悲しいかもしれず。

いきなりCPUファンのあたりが耳障りな音が聞こえてきた :

もしかして、ファンがちゃんと回らなくて熱暴走してるのかしら。あるいはファンからのノイズで、変な動作になってるとか。うーん。

_モニタソフト紹介 :

M/Bの温度センサその他を読み取るソフトの紹介。

LM78MON をインストールしてみた。CPU が37.0〜39.0℃あたり。ビデオカードが52℃あたり。…うーん。これは大丈夫な領域なのか、そうじゃないのか。よくわからん。

PL-iP3/T Ver.2.0に取り付け可能なCPUファンを検索 :

なんだか Socket370/SocketA 対応のCPUクーラー(CPUファン)自体がほとんど見当たらないのですが。状況的にマズイなあ。

PCパーツショップのページ _(A) _(B) によると、以下の型番のCPUクーラーならつけられそうな感じ。
Cool Jag WJAC334A
サイズ 63 x 62 x 24.5(mm) , 回転数 5300rpm , 騒音値 :38db
DRACO SLIMBIRD DP5-6G11
ファンサイズ 60 x 60 x 10 mm , 回転数 4200 RPM , ノイズレベル 34.5 dB(A) , 風量 21.16 CFM

FANだけ交換ってわけにはいかんのだろうか :

6cm角のFANならなんとかなるのかな。でも、CPUクーラーのファンって、形状が特殊な気もしてきた。ヒートシンクにどういう形で装着されてるかよくわからんものもあるし。端子だって、ケースファンなんかとは違うような。回転数とか検出できるしなぁ…。

#2 [nitijyou] 某サイトのPDFを差し替えた

書いておかないと忘れそうなのでメモ。とりあえずメールを送って知らせたり。

#3 [cg_tools] 数字の書かれた画像を大量に生成

数字の書かれた画像が欲しかったので、 _:: Cepheid :: - PerlMagickリファレンス_PerlMagick + CGI のページを参考に、Perlスクリプトを作成。
#!/usr/bin/perl
# Last updated: <2005/11/16 15:57:04 +0900>
#
# 100 x 2 枚の数値が書かれた画像を作る
# PerlMagick(ImageMagick)を使用

use strict;
use Image::Magick;

for ( my $i=0; $i<=100; $i++ ) {

    my $str = sprintf("%03d",$i);
    my $text = $str;
    my $fname_omote = "./".$str.'a.png';
    my $fname_ura   = "./".$str.'b.png';

    my $basefile = 't' . ($i % 3) . '.tif';     # 't1.tif' etc
    
    my $image = Image::Magick->new;
    
    $image->Set(size=>'120x120');
    $image->Read($basefile);
    # $image->ReadImage('xc:white');
    # $image->AddNoise('Impulse');
    # $image->Blur(radius=>5, sigma=>0.5);
    $image->Annotate(font=>'impact.ttf', pointsize=>48, stroke=>'white', strokewidth=>2, fill=>'black', antialias=>'true', text=>$text, gravity=>'Center');

    $image->Write($fname_omote);

    # $image->Colorize(fill=>'olive', opacity=>'128');
    $image->Negate();
    $image->Write($fname_ura);
    
    undef $image;

    print "make $fname_omote, $fname_ura\n";
}

exit;
t0.tif 〜 t2.tif を読み込んで、それら画像の上に順々に数字を書き込んで、別画像として出力。スクリプトのあるディレクトリに、利用するフォントファイル(.ttf) をコピーしてから使う。

要するに、
元画像
こういう画像から、

生成画像A

生成画像B
こういう画像を作る。

#4 [cg_tools] GIMP 2.2.9 でちょこちょこ作業中

色々とメモ。

_Resynthesizer - Gimp plug-in for texture synthesis :

画像の一部を使ってテクスチャを作れるらしい。 _(via 20th Century Boy's Programing Zone)

_GIMP - 未圧縮AVI入出力プラグイン :

GIMP だけで AVI入出力ができたのか。

GIMPのモーションぼかし「拡大」って :

Photoshop のソレと比べて、かなり品質が悪いような気がする。ノイズを加えたレイヤーに対して処理してみると、Photoshop のソレは結構滑らかにブラーをかけてくれるのに、GIMP のソレはボツボツと点が見える。とはいえ、ズームの中心点を指定できるのはイイ感じなのだけど。>GIMPのソレ。

#5 [xyzzy] _Landscape - エンジニアのメモ xyzzy 日付と時刻を挿入

参考にして、時刻だけ挿入する指定を .xyzzy に。
(defun insert-my-time-string()
  (interactive)
  (insert (format-date-string "%H:%M:%S")))

(global-set-key '(#\C-x #\t #\t) 'insert-my-time-string)
忘れそうなので、メモ。

#6 [prog] FLASH + actionscript 勉強中

loadMovie() の使い方がなんとなくわかったような。

_ローディングの表示(getBytesLoaded と getBytesTotal) FLASHRAVE FLASH 講座 :

getBytesLoaded() と getBytesTotal() を使うらしい。…昔は、「どこまでフレームを読んだか」で判定してたような気がする。それだと、特定のフレーム内に大量にデータがあった場合、そこでピタリと止まっちゃうわけで。関連バージョンが上がると共に、細かいところについても改善されていたことを今頃認識。

2004/11/16(火) [n年前の日記]

#1 [nitijyou] 写真をイラスト風に変換しやすいツールを探したり

Photoshopのフィルタ処理等でもできるけど、何か違う…。

#2 [cg_tools] GIMP 2.0.5 をインストールしてみた

_GIMP掲示板 や、 _GIMPスレ を参考にしつつ、WinXP Home (SP2) に GIMP 2.0.5 をインストールしてみた。 _ココ から、GTK+ 2 for Windows (version 2.4.10) と The Gimp for Windows (version 2.0.5) をDL。Simoncic版と呼ぶらしい。

起動してみたら、フォントの検索の段階で時間がかかる。以前、入れたときと同じ。 _GIMP掲示板 を参考にしつつ。
・起動時のフォント検索に時間がかかる(この症状は相変わらず)
 従来通り使用フォントを限定した
  GIMP で使用するフォントをユーザー用のフォントフォルダへコピー
  GTK\etc\fonts\fonts.conf をテキストエディタで開き…
  <dir>WINDOWSFONTDIR</dir> の部分を…
  <!-- <dir>WINDOWSFONTDIR</dir> --> に書き換え
フォントの検索で時間がかからないようになった。ありがたや…。

_Plug-In: Windows File Open :

_こちらで紹介されてた。 Windwosの標準的なファイルオープンダイアログで、ファイルを開くことができるプラグインらしい。一応入れてみたり。解凍してでてきた .exe を、gimpのインストールフォルダ\lib\gimp\2.0\plug-ins\ にコピー。ファイルメニューに、WinOpenなる項目が増えた。

_Plug-In: Focus Blur :

_GIMP for Windows 2.0 ja β :

_GIMP 1.2 plug-ins :

#3 [cg_tools] Sodipodi起動せず

GTK+ 2 for Windows を入れたので、Sodipodi *1 が起動するはずなのだけど。zlib-1.dll が見つからないと言われて、起動しない。 _こちら を参考に、Sodipodiインストールフォルダ中の zlib.dll を、同じフォルダに zlib-1.dll としてコピー。起動した。

_Sodipodiとは :


*1: フリーのドローツール。SVG 編集がメイン。

#4 [cg_tools] _グラフフィックス系フリーソフト紹介

_ポリゴン職人 :

#5 [cg_tools] _swf出力可能ソフトの機能比較

フリーのFLASHデータ作成ソフトが気になる。スクリプト関係のあたりが特に

#6 [cg_tools] _マイクロソフトが、Expression3.3eWindows版をフリーダウンロード!?

知らなかった…。

_Expressionの話をしよう part3 :

#7 [cg_tools] _DigitalScreenTone

PCでスクリーントーン。

#8 [anime] ライダー剣、主人公のサポート役の娘さんに父親がせまるの回

真横から捉えた変身シーンで驚いた。何度もコマ送りして確認してしまったり。おそらくは通り抜けるシーンでモーフィングも使ってるのだろうと想像したのだけど、さりげない使い方に感心。

#9 [windows] Trojan horse downloader agent AF

ネットサーフィンしていたら、AVG 6.0 が警告を。記事タイトルのウイルス?トロイの木馬?を見つけたらしい。検索してみたけど、どんなことをするのか今一つわからず。

とりあえず、AVG 6.0 が駆除?修復?してくれてるようだけど。念のため、 _ANTIDOTE for PC Viruses SuperLite_Spybot_CWShredder でも検索。見つからない。OS再起動後も検索。見つからない。たぶん、駆除できたんだろう…。

自分、普段は M: の WinXP を使ってるのだけど :

AVGのログを見る限り、ウイルスは C:\WINDOWS\Downloaded Program Files\TEInstallPlugin.ocx にあったらしく。うーむ。C: に決め打ちなのだろうか。それとも、実のところウイルスはそこにはなく、居るように見えていただけなのだろうか。

SleipnirでActiveXどころかJavaScriptまで無効にしてるのだけどなぁ :

それでもウイルスが侵入するのか。うーむ。IEコンポーネントだから仕方ないのかなぁ…。

#10 [tv] 三大怪獣・地球最大の決戦

NHK-BSで流れてたので見入ってしまった。ゴジラ vs ラドン vs モスラ vs キングギドラ。なんだかインドの大衆映画みたい。SFあり、オカルトあり、アクションあり、悲恋あり、漫才あり、プロレスあり。とにかくバラエティに富みすぎ。親父さんと一緒に見ていたのだけど、モスラの説得シーンで爆笑して、怪獣同士の戦いでまた爆笑して。

スタッフは最初から笑わせようとしていたのか。それとも笑わせるつもりは毛頭なかったのに、結果的に笑える内容になってしまったのか。そのへんがよく判らない。いや、前者であると思いたいけど。

2003/11/16() [n年前の日記]

#1 [anime] 海

プラネテス。前回とはうってかわって非常に真面目(?)な話。最後のあたり、なぜかわからないけどウルウルしてしまった。悲しい話というわけでもないのに。

ひょっとして、大橋誉志光氏がコンテ・演出をするとアタリ? 「マズー」のタイミングとかノイズとかブレーキを踏む様子とか、見ていてうわーっと思った。そういや2話も大橋氏だったか…。名前で検索してみたら、 _高千穂先生が褒めてるページ を見つけた。むむぅ。あの先生が褒めるとは只事じゃありませんよ!<失礼な事を。今後要チェック。

#2 [anime] OP曲、いいなぁ

スピカ。OP曲が好み。CDが発売されてたら買おうかな、と一瞬思ったけど今はどれもCCCDだろうか。自分の手持ちのプレイヤーはどれも古いので再生したら壊れかねない。気になったCD一つ安心して買えないとは不便な時代であります。

背の高い男の子と背の低い女の子が学生服姿で並ぶの図はおじさん的にはかなり萌え。メガネくん、想いが届くといいね。無理っぽいけど。

「おい、1人多いぞ!?」「4人だ!」「4人いる!」 <既出っぽい。

#3 [pc] 画面がグシャグシャになる

最近 Sleipnir でWebページを見てると、画面がグシャグシャ *1 になる事がある。Ctrl + Alt + Delete も効かなくてリセットするしかなく。

原因はなんだろう。 さてはて。
*1: ラスタースクロールがバグったような画面。

#4 [pc] 電源とケース

親父さんのPC用に、電源の値段を調べてたのだけど。電源付ケースを買ったほうが安上がりかも。ただ、IDEケーブルの他にSCSIケーブルも内部を走ってるので、ミドルタワーでは通気性に難ありの予感。かといって今更フルタワーではなぁ。

#5 日曜日の人生設計

日経新聞の日曜版に、「日曜日の人生設計」(橘玲氏連載)というコラムが掲載されてるのですが。これが面白い。それを言っちゃおしまいというか、身も蓋も無いというか、そんな話がズバズバと。毎週、「日経にこんなん載せてええのだろうか」「今すぐ打切りになってもおかしくないような」と妙な心配をしながら読んでたり。

_著作 はどれも評価が高いらしい。機会があったら読んでみたい気も。違う世界の話ばかりだろうけど。

#6 奥さん、デジタル放送には薄型TVが最適なんですってよ

日経の土曜版で薄型TV商品の特集。どこぞのAV評論家が「デジタル放送には薄型TVが最適」なる一文を書いてた。しかし「最適」である理由が一切書いてない。文字数制限等あるにしても杜撰過ぎやしないか。本当にAV評論家なんだろうか。あんないいかげんなコメント・記事で評論家を自称できるなんて羨ましい。

ブラウン管に比べ、消費電力の少なさ、省スペース性というメリットはあるだろうけど、表示品質・寿命・コスト面で、薄型TV *1 にはデメリットが残ってる気もするのだけど。それらデメリットを割り引いても「最適」と断言できるだけの理由があるのだろうか。その理由って何? 気になる。

ていうか、あの一文でポンポン製品を買っちゃう消費者って結構居るのかな。居るかもしれないな。みのもんたが喋るだけで商品が売り切れるらしいし。日本はカモばかり。経済的には良いことですかな。
*1: 液晶やプラズマ?

この記事へのツッコミ

Re: デジタル放送には薄型TVが最適 by がんした    2003/12/10 08:01
前にテレビ番組で、シャープの社長が「(液晶テレビは)1インチ1万円を
切る価格を目指してます」と言ってました。つまり、20インチ液晶テレビが
20万以下で販売出来れば、庶民にも手が届くよと。

だから、「最適」=「手が届く価格になりました」ぐらいの意味合いだと思われ。

Re: デジタル放送には薄型TVが最適 by mieki256    2003/12/12 17:51
>シャープの社長が「(液晶テレビは)1インチ1万円を
なるほど。業界全体が、今現在はそのへんにラインを設定してると。
であれば、それが満たされた段階で、
「とうとうここまで来ちゃったよ。スゲーよ。皆さん、これは注目ですぞ!」
とライターさんが意気込み過ぎてツッコミどころの残る記事を書くのも当然か…。

>「最適」=「手が届く価格になりました」ぐらいの意味合い
そういうことだったのか。なるほどであります。
「最適」=「他にも色々選択肢がある中でそれが一番ベスト」
という意味合いで使われるものと自分はつい思い込んでましたが、
その手の業界では、違う意味で使われる事もあると。
「最適」という言葉の使い方・使われ方に対して、ちと認識を改めねば… >自分。
Re: デジタル放送には薄型TVが最適 by がんした    2003/12/13 08:30
>ツッコミどころの残る記事
ここ↓の『日経を見てたら、「プラズマTVの価格が、1インチ=1万円をきったので、今が買い時」という記事』が
探したけど見つけれなかったので適当だけど、多分、提灯記事だったのでは?
http://blawat2015.no-ip.com/~mieki256/diary/?20031130#200311300

>「最適」=「他にも色々選択肢がある中でそれが一番ベスト」
それが普通の感覚だと思われ。ただ、個々によって「最適」って違うので
(価格重視、画質重視、設置スペース重視、デザイン重視、衝動買い重視など)、
一概にいえなく、人によって違うのは当たり前ではないかと。

この場合の「最適」ってのは、売る側の「平均的ユザーの要望に対して当社のオススメ」なんだろうと。
最近の国内メーカーはブラウン管の国内生産を止めて液晶とプラズマに移行しつつ
あるので、売る側のラインナップとして既にブラウン管は無いのかもしれない。
Re: デジタル放送には薄型TVが最適 by mieki256    2003/12/14 08:07
>売る側のラインナップとして既にブラウン管は無いのかもしれない。
なるほど。今現在はともかく、あと数年もすれば、
ブラウン管という選択肢が完全に市場から消滅することは確実ですな。
ていうかPCのディスプレイなんか現時点でもほとんど液晶に移行してしまったし。
今時のメーカ製PCだと、ブラウン管とセット販売されてるほうが珍しい…。
Re: デジタル放送には薄型TVが最適 by がんした    2003/12/15 08:11
翌々考えてみると、うちらが子供の頃に「21世紀のテレビは壁掛け式」
みたいな夢がありましたが、液晶とかプラズマテレビは正に、それなんだなぁと。
ならば、現段階で1インチ=1万円 も許せるかも。将来的にはもっと安くなるだろうし。
Re: デジタル放送には薄型TVが最適 by mieki256    2003/12/16 02:05
>「21世紀のテレビは壁掛け式」
あの当時、各ライターさんは、技術的可能性を見出した上で、
それら夢を語ってたのかがふと気になったり。
おそらくどうやって実現するかなんて考えてなかったと思うのだけど。
一見無責任な気もするけど、しかし、「こうだったらいいなー」という希望は
無責任でいいからどんどん語ってみるものですな。
当時、「そんな事、技術的にできるわけないじゃん」と
技術者達が頭ごなしに否定して回ってたら、今現在の薄型TVは無かった…。

>将来的にはもっと安くなるだろうし。
家電関係はいきなり普及する価格的な境界があるらしいですな。
なんとかそこまで安くなってほしいものであります。

2002/11/16() [n年前の日記]

#1 塗り

どうも最初の塗り分け作業が面倒臭い。もっと効率化出来ないかなぁ…
アニメ制作用の仕上げツールって、このへんどうやって解決してるんだろう。
色トレス線はどうやって処理(最終画像から削除)してるのか。


なんのかんの言いつつも毎週SEEDを楽しみにしてる自分に気がついて複雑な気分(爆)

2001/11/16(金) [n年前の日記]

#1 WSH

WSHと格闘しておりました。 _(以下略)


夕飯当番。カレー作りました。
人参が腐ってるぽかったので、人参抜き。
嘘。人参が嫌いなだけ。
本当は肉もキライだから入れたくないんですけど、それはさすがにマズそうなんで。

#2 [digital] WSH

WSHと格闘しておりました。
親父さんのHP作りに関連して、不整合性のあるHTMLをまともなモノに書換えるようなスクリプトを…
って肝心の処理を書く段階に到達する前に時間が〜
利用者が誤操作する様子が容易に想像できちゃうので、それに対する回避処理を入れてくだけで、もういっぱいいっぱい。

こんなのPerl使えばあっという間なのに。
でも家族用PCに一々Perlを入れてられない。
そもそもDOSプロンプト上での操作なんて強要できないし。

てことで、最近のフリーソフトを作ってる人達は大変そう。
肝心の処理以外に、UI仕様やら、ヘルプやら、サポートやら…
よほど心が広くて、他人のわがままに寛容な人じゃないと、フリーソフト公開なんて出来ないのではなかろうか。
だからシェアウェアが増えてるのかな <それは違う気が


ていうか。
勝手にスクリプトがHTMLを書換えることは親父さんにとってプラスに働くのか。むしろマイナスに働くのでは。
でも、何の迷いも無く手作業で数十ファイルを修正しようと試みそうになってる姿を見てしまうと…
それは絶対おかしいだろうと。何か対策を打たねばという気持ちに。
導入したソフトがマズイのが原因なんだから、もっとマトモなソフトを探してくればいいだけのような気もしつつ。
でも望む出力結果を得られるのがこれしか見つからなかったしなぁ。

出力HTMLの中身も確認せずに導入しちゃった自分の責任ぐらいは、せめて果たす事にしよう…
にしてもメンドクサイ。

2000/11/16(木) [n年前の日記]

#1 運転してきました

シビック、運転してきましたです〜 (^_^)

「ガソリン無いから入れとけ」との親父さんからの命令で、まずはガソリンスタンドへ。
初体験! ガソリンスタンド潜入! <潜入とちゃうやん
スタンドに入れたまではいいけど…

窓を開ける前にエンジン切ってしまい、
「しまった! コレ手動じゃ窓が開かないではないか!? ?堯福陰◆?;)!!
 しかしこれから給油するのにエンジンかけ直してもいいのか…? (-_-;) 」
…などと考え始め、手も足も出せなくなったり。

結果、ほんの少しの窓の隙間から、カード渡したり、現金やり取りしたり…(爆)
…今考えてみたら、ドア開ければ良かったんだよな…(核爆)

スタンドに入れることばかり考えてたもんで、入れたと同時に気が抜けてボヘ〜としてたら。
店員「すいません。給油口開けてもらえませんか?」
オイラ「あっ! す、すいません…
(え、えーと給油口のレバーってどこだっけ (T.T )( T.T)オロオロ )」
…なんてことも。


一旦家に戻って車庫入れ練習。
その後、また一走りしてきました。
水郡線を越えて49号線あたりで引き返して… <ローカルな説明…

どうもダメですね…
後続車があると、
「オ、オイラって今、邪魔になってる? 邪魔になってるんだね!?」
という強迫観念がふつふつと。
そのため未熟な腕でありながら、ついついアクセルを…
イカン。これはイカンのでは。
しかし実際のトコ、どうすればいいんだろう… (/_;)

帰り、少しでも車の無い道を走ろうと地図を頼りに脇道に進んだら。
途中から、山の中 & 車1台分の幅 & 砂利道に。
…ホントにこの道でいいのか…? (TДT;)
更に運悪く対向車が。
道を空けねば…と、脇の藪の中に車を突っ込んじゃったり。
たぶん前のほう、細かい傷だらけになっただろうな… (T_T)


帰ってきてからの車庫入れも大変。
いきなりやっちゃいました…
家の門の金具にボディを引っ掻けたらしく、突然、
『キギギイィ〜〜〜〜〜ッ!』
「あっ、あっ、あーっ!? ?堯?T□T;)!!」
暗くて傷の様子はわかりませんでしたが…
うう、明日見るのが怖い…
いきなり傷物にしちゃったよ。
ゴメン…ゴメンよぅ (ノo;) >家族の皆

と、こんな感じでパニックだらけ、心身どころか車までボロボロの初運転でした… (TДT;)
オイラに軽やかな走りが身につく日は来るのか?
その前に大変な事やらかしそうですよネ… (´Д`;)

1999/11/16(火) [n年前の日記]

#1 (NoTitle)寒いです。外は風がビ...

寒いです。外は風がビュービュー。
で、家にこもってネットしてました。いつもの事ではあるけど (^◇^;)
それ以外何もしてないなぁ。

以上、26 日分です。

過去ログ表示

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