mieki256's diary



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

#1 [pc] AmazonからmicorSDHCその他が届いた

Amazonに注文していた microSDHC や USB3.0カードリーダが届いた。

microSDHCが偽物かどうかをテスト。 :

microSD は結構偽物・容量詐欺が横行してるようなので、一応調べておこうかと。特に TOSHIBA製やSanDisk製が多い印象。つまりはそれだけ、それらのメーカ製の正規品は信頼されてるということだろうけど。

_偽物っぽいmicroSDを手に入れたので、パッケージから容量・速度までチェックしてみました(ウェブ情報実験室) - Engadget 日本版
_MicroSDカード容量詐欺!容量偽装を検証する方法 - まず分解。

まあ、その手の詐欺って、容量がめちゃくちゃ大きい商品に見せかけて売られてるだろうから、たかだか16GB程度の microSDHC の偽物なんか作らないのでは、という気もするけど…。

h2testwなるツールを使うと、容量詐欺かどうかを調べられるらしい。

_h2testwの使用方法|偽造SDカードをチェック | SDカード博士のSDカードナビ

ということで、 _SDメモリカードフォーマッタ でフォーマットしてから、h2testw で書き込んでみた。
Warning: Only 14823 of 14824 MByte tested.
Test finished without errors.
You can now delete the test files *.h2w or verify them again.
Writing speed: 13.8 MByte/s
Reading speed: 31.5 MByte/s
H2testw v1.4
エラーは出てない。大丈夫っぽい。

速度を測定。 :

CrystalDiskMarkでアクセス速度を測ってみたり。

-----------------------------------------------------------------------
CrystalDiskMark 5.1.2 x64 (C) 2007-2016 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :    34.789 MB/s
  Sequential Write (Q= 32,T= 1) :    16.776 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     5.403 MB/s [  1319.1 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     0.739 MB/s [   180.4 IOPS]
         Sequential Read (T= 1) :    34.184 MB/s
        Sequential Write (T= 1) :    16.985 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     4.653 MB/s [  1136.0 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     0.617 MB/s [   150.6 IOPS]

  Test : 100 MiB [E: 0.0% (0.0/14.5 GiB)] (x3)  [Interval=5 sec]
  Date : 2017/10/01 20:22:18
    OS : Windows 10 Professional [10.0 Build 15063] (x64)
    microSDHC TOSHIBA 16GB CLASS10 UHS-I (MSDAR40N16G) + Transcend RDF5K(USB2.0接続)

microsdhc_toshiba_16gb_class10_uhs-i_20171001_201459.png

CLASS10だからシーケンシャルのアクセス速度はたしかに速いけど。4Kの書き込みは、えてして CLASS4 より遅いのだな…。OSを入れるメディアとして使うなら、どっちがいいのだろう…。

#2 [anime] タイニー番組ナビゲータの調子がおかしい

ここ最近、TV番組表を確認する際に使ってる、タイニー番組ナビゲータの調子がおかしくて。例えば、福島で放送されてるウルトラマンジードがいきなり13話放送とか表示されてかなりビビった。先週6話を放送したばかりなのに…。HDDレコーダの番組表を眺めたらちゃんと7話になってた。

どうやらGガイドなるサイトから情報を取得する段階でおかしくなってるっぽい。そもそも、福島のTV局の名前も取得できない…。

Dimoraなるサイトから取得するようにしてみたら正常な情報が表示されるようになった。が、今度は「BSイレブン」が「 BS11イレブン」と表示されてしまって、今まで登録した番組追跡情報と一致しない状態に…。

CHコンバート設定を変更して、放送局名が変わるようにしないといけないらしい。GUIで設定できる仕様は未実装らしいので、インストールフォルダ\env\ChannelConvert.dat をエディタで開いて、Dimora という文字列で検索。
" BS11イレブン"		,"BSイレブン"
を追加。この状態で起動したら、放送局名が「BSイレブン」に変わってくれた。

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

#1 [pc] DCプラグを探していたり

ここ数日、Rock64というワンボードPCが気になっていて。5V/3Aの電源を必要とするらしいけど、電源コネクタがちょっと特殊で。Raspberry Piのように microUSBで給電するのではなく、内径1.35mm/外径3.5mmのDCプラグが刺さるコネクタ経由で給電するらしい。

そんなDCプラグ、あるのかね…。ということで、仮に Rock64を入手した場合、どうやって給電すればいいのか、てなあたりで悩んでしまって、色々ググっている状態。

案としてはいくつか思いつくけど…。

A案。ACアダプタを探す。 :

内径1.35/外径3.5mmのDCプラグを使った5V/3AのACアダプタをなんとか探し出して、どうにかして入手する。

一応、そういう製品は存在するらしい。Amazonでも見かけた。が、Amazonで見かけた製品は、内径1.35/外径3.5mmと称して販売されてるけど、購入した人のレビューによると実際は内径1.2mmで刺さらねえ(ので自分で加工が必要)、てな話も。これはちょっと博打だな…。

B案。変換コネクタを探す。 :

内径2.1/外径5.5mmのよくあるタイプのDCプラグを使った5V/3AのACアダプタを入手しつつ、かつ、内径1.35/外径3.5mmに変換するコネクタも入手してどうにかする。

内径2.1/外径5.5mmで5V/3AのACアダプタならなら、 _秋月電子 で色々売ってる。後は変換コネクタだけど…。一応、楽天で売られてるのは見かけた。まあ、本当に刺さるのか、やっぱり博打だけど。

もし、問題があるとすれば、変換コネクタを経由することで抵抗値が増えて、そこで発熱したり、電流が減少する可能性があるかもなと。Raspberry Pi3 が発売された頃も、ケーブルによっては抵抗値が大きくて十分な電流が流せず、不安定な動作になりやすい、という話があったわけで。

C案。USB変換ケーブルを探す。 :

USBタイプAオスから内径1.35/外径3.5mmのDCプラグに変換するケーブルを探して入手して、USB出力のACアダプタに差してどうにかする。

Rock64を購入するような人なら、おそらくRaspberry Pi3 も持っているだろう。ということは、5V/3AをUSBで出力するACアダプタを持っていてもおかしくない。ACアダプタはソレを流用する。後は、変換ケーブルを入手すればいい。一応、Amazon や _aitendo で、そういう変換ケーブルは見かけた。

問題は、ケーブルの線の太さ。一般的なUSBケーブルは、AWG28相当の太さの線を使ってるらしいので、3Aもの電流を流せない。

_AWG 導線のサイズと許容電流について - バッテリースペース

上記ページの一覧によると、 AWG28 は1.7Aまで。もちろん、USB2.0の規格では、流せる電流は最大500mA(0.5A)ということになってるので、USB2.0の規格に従った使い方をするのであれば、AWG28で何ら問題は無い。しかし Rock64の給電時は最大3A流れるので、3.5Aまで流せるAWG24、7Aまで流せるAWG22等を使ったケーブルじゃないと…。

でもまあ、一応、AWG24 を使ってると称してる変換ケーブルも、Amazonや楽天で見かけたことは見かけた。

ソレとは別に。手持ちの、Raspberry Pi用のUSB出力ACアダプタを眺めてみたら、5V/2A と 5V/2.5A だった。3AのACアダプタ、持ってないや…。つまり、自分の場合、変換ケーブルだけではなく、ACアダプタも探して買わないといけないことに。

D案。GPIOから給電。 :

Rock64のGPIOの+5VとGNDに線を繋いでそこから給電する。

例えば、 _秋月電子で紹介されてる給電方法 では、Raspberry Pi用のユニバーサル基板を利用して、Rock64のGPIOの+5VとGNDに給電してどうにかしているように見える。

その方法でも給電できるのであれば…。ブレッドボードに差せる、 _電源用microUSBコネクタDIP化キット を入手して…。ACアダプタ → ブレッドボード上のmicroUSBコネクタ → コード → _QIコネクタ → GPIO、でも給電できるのではあるまいか。

問題は、やはりコードの太さ。AWG24 か AWG22が必要だろうなと。幸い、QIコネクタの端子は、前述のページによると最大3Aとなっているので、そこはクリアできそう。それに、Raspberry PiのGPIOを使って遊んでる人なら、QIコネクタ相当もブレッドボードも持ってるだろう。流用できるものが多いから、おそらくコスト的には一番安く済みそう。

E案。好きなコネクタをはんだ付け。 :

Rock64のDCジャックを外して、好きなコネクタをつける。

_ROCK64 is a Rockchip RK3328 Development Board with Up to 4GB RAM, 4K HDR, Gigabit Ethernet, and USB 3.0 を眺めると、DCジャックは3本の金属端子ではんだ付けされてるように見える。コレを外すなり、別の端子をつけるなりすればいいんじゃないかな…。電子工作的には、部品を外したりはんだ付けしたり、ってのが真っ先に思いつく策、だろうし…。ボールは友達、じゃなくて、はんだごては友達。

F案。Raspberry Pi3をもう一台買う。 :

そもそも Raspberry Pi3だったらこんなにグダグダと悩むずに済むわけで。
  • どうせどっちも似たような大きさだし。
  • ソフトウェア面は Raspberry Pi3 のほうが安心だし。
  • Raspberry Pi3ならWiFiだってついてるし。
  • Rock64が激安ならともかく、現状では値段も似たようなもんだし。
Raspberry Pi3でいいんじゃないかな。わざわざ余計な苦労しなくても。

F案。Tinker Boardを買う。 :

どうして Raspberry Pi3 ではなく Rock64 が欲しくなるかと言えば、Raspberry Pi3よりも、ちょっぴり性能が良さそうに見えるから、だろうと。

だったら…。とにかく性能が高くて、小さいワンボードPCが欲しいなら、ASUS が出してる Tinker Board を選んだほうがいいのではないか。

_Raspberry Pi3と同サイズで性能2倍のASUS製「Tinker Board」が国内発売 - PC Watch

  • 他のワンボードPCと違って、ちゃんと公式OSが今のところ更新されてるらしいし。
  • ケースだって売ってるし。Rock64はケース売ってないから自分で作るしかないよ?
  • 電源コネクタは、micoroUSBだし、Tinker Board用のACアダプタも売ってるし。
  • 何より、このあたりの製品群の中では一番高速だろう…。
お値段はちょっと高いけど、Tinker Board でいいんじゃないかな。

いやまあ、Rock64 は USB3.0コネクタを積んでるけど、Tinker Board はUSB2.0止まり、という違いもあるけれど。

5V/2Aでも十分かもしれない。 :

_ROCK64 Main Page - PINE64 には、5V/3Aが必要と書いてはあるものの、「USB3.0を使わないなら2Aでも動くよ」と書いてある。ように見える。
Input Power: +5V @3A with 3.5mm/1.35mm Type H Barrel type DC connector (@2A still work if no heavy loading on USB 3.0 port)

ROCK64 Main Page - PINE64 より


3A流せないとダメなのかと思い込んでたけど、そういうわけでもないみたいだな…。

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

#1 [ruby] Webサイトのスクリーンショットを取りたいのだけど

某所のWebサイトを更新していたのだけど、掲載すべきURLが複数あって、かつ、サムネイル画像も必要なので、URL先のスクリーンショットを撮ってGIMPでトリミングや加工や縮小を手作業で行うあたりが面倒臭いなと。URL先のスクリーンショットを撮れる何かは無いものだろうか…。

少しググったら、selenium なるものがあると知った。Ruby からも使えて、selenium-webdriver をインストールすればいいらしい。もうちょっと調べてみるか…。

まあ、今回は、時間がアレなので、手作業でコツコツと。

2017/10/04(水) [n年前の日記]

#1 [ruby] selenium-webdriverをインストール

Rubyを使ってWebブラウザを自動操作できるらしい selenium-webdriver をインストールして少しだけ試用してみたり。環境は Windows10 x64 + Ruby 2.2.6 p396 mingw32版。

以下、参考ページ。

_指定した複数ウェブサイトのスクリーンショットを自動で撮影(Ruby+Selenium) - Qiita
_Selenium 入門 - Qiita
_WindowsでRubyでSeleniumで自動テストをはじめてみました - YoshinoriN's Memento
_rubyからchrome操作してみた by selenium-webdriver - shoprevのブログ
_RubyでSeleniumを使ってスクレイピング - Qiita
_Webブラウザの自動操作 (Selenium with Rubyの実例集) - Qoosky

インストール。 :

DOS窓を開いて以下を打てばインストールされる。
gem install selenium-webdriver
rubyzip, childprocess, selenium-webdriver の3つがインストールされた。

Firefoxを操作する場合は、geckodriver なるものが必要らしい。

_mozilla/geckodriver: WebDriver <-> Marionette proxy
_Releases - mozilla/geckodriver

Releaseから geckodriver-v0.19.0-win64.zip をDLして解凍。中に入ってた geckodriver.exe を、パスが通った場所に置いた。今回は Ruby2.2インストールフォルダ\bin\ 以下に置いてみた。

Google Chrome を操作する場合は、chromedriver なるものが必要らしい。

_Downloads - ChromeDriver - WebDriver for Chrome

chromedriver_win32.zip をDLして解凍。chromedriver.exe を Ruby2.2インストールフォルダ\bin\ 以下に置いてみた。

irb を起動して動作確認。Firefoxを起動して、Googleを開いて、文字列を打ち込んで検索、を行ってみる。
> irb
irb(main):003:0> require "selenium-webdriver"
=> true
irb(main):004:0> driver = Selenium::WebDriver.for :firefox
=> #<Selenium::WebDriver::Firefox::Marionette::Driver:0x916535c browser=:firefox>
irb(main):005:0> driver.get "https://www.google.co.jp/";
=> {}
irb(main):006:0> driver.find_element(:class, "gsfi").send_key "selenium"
=> {}
irb(main):007:0> driver.find_element(:name, "btnK").submit
=> nil
irb(main):008:0> driver.quit
=> nil
irb(main):009:0> exit
たしかに Ruby からWebブラウザが操作できた。

Google Chrome でも同じことをしてみたけれど、エラーがずらずらと出る。Firefox を対象にして自動操作したほうがよさそう。

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

#1 [cg_tools] Asepriteのビルドを試したり

ドットエディタ Aseprite の 1.2.2 が最新版として公開されているらしいので、試しにビルドしてみたり。ちなみに自分の環境は、Windows10 x64 + Visual Studio 2015 Community。

_aseprite/aseprite: Animated sprite editor & pixel art tool (Windows, macOS, Linux)

基本的には、 _INSTALL.md で説明されてる通りに作業していけばビルドできるはずなのだけど、自分の環境ではビルドできなくて悩んだり。昔はスンナリできたような気がするのだけど…。

原因は、環境変数PATHに mingw 関係が列挙されていたからだった。そっちが列挙されてると、VS2015/VS2017ではなく mingw のアレコレを使ってしまってコンパイルできなくなるようで。一時的に mingw 関係のパスを除外してから試したら、大量の警告は出たものの一応ビルドが終わった。

ビルドに必要なのは…。
ちなみに、VS2015 や VS2017、Windows10 SDK を入れただけで、十数GBほどHDDが使われてしまうので…。どう考えてもバイナリを購入して使ったほうがいいと思います。実行バイナリ+ データなら112MB程度なので。

ただ、自分の場合、買い方が分からないという。Steamって何? _購入方法 - Aseprite JP Wiki* によると Steam以外でも買えるらしいけど…。

Asepriteの便利なところ。 :

水平反転や垂直反転、ミラー/対称/シンメトリーモードでドットを打てるところが便利だなと。それと、タイリング状態でドットを打てたりとか。

ただ、ソレ以外は EDGE2 のほうが高機能・便利なわけで…。

ちなみに、Aseprite 以外にも、シンメトリーモードを持ってるドットエディタ・お絵かきソフトはあるけれど。

_mieki256's diary - シンメトリーモードがあるドットエディタを探したり

#2 [zatta][neta] ドールとスマホの合体技が気になる

以下の記事を眺めていたら、ちょっと気になる話が出ていて。

_中国でラブドールシェアサービスが開始、数日で当局に取り締まられる | スラド

中国製ドールがAmazonでもチラホラ出ている、みたいな話で。

どんなクオリティなんだろうと気になって少し検索してみたら。なるほど、これは…。たしかにちょっとやばくね?って感じがしないでもないなと。

それはさておき。各商品群の中に、「専用アプリを使い会話も可能(ただし中国語のみ対応)」と称してるドールが存在することに気がついて。一体どういう製品なんだろう…。

考えてみれば…。実際の商品がどんなものかは分からないので、これは完全に想像だけど。スマホには加速度センサが入っているのだから、ユーザがドールをどのように動かしたのか検出することだって不可能ではないのだよなと。

例えばドールの胴体のあたりにスマホを入れておいて、ドールをあんな風やこんな風に動かせば、スマホ君が「むむっ。ワシは今このように動かされたぞ。ということは、おそらくユーザはこういう反応を期待しておるのではないかな」的に判断してソレに応じた音声を発する、てなだけでも妙な臨場感がそこで発生しそうな予感も。

もっとも、ユーザは胴体以外にも、頭だの腕だの足だのを動かしたくなるだろうから、よりそれらしいインタラクティブ性を実現しようとしたら、各部位に加速度センサ等を埋め込む形になって結構コスト増になるかもなという気もするのだけど。廃棄時も面倒臭そう。それでなくてもその手のソレを廃棄する際は大変、てな話もどこかで見たし。電子部品を容易に抜き差しできる構造にしておかないとよろしくないだろうなと。

にしても、中国でそのような商品が登場してるというのは…なんだか悔しいなと。そういうのって日本が得意な分野だったのではないのか。今からでも遅くないから日本国内の企業でもそういうソレを製品化しないものか。SONYあたりで出せばいいのに。そして最終的に、SONYは「ブレードランナー」のレプリカントみたいなのを作ってしまう企業にってソレどんな世界線やねん。

まあ、日本は _「昭和花子2」 が限界か…。

2017/10/06(金) [n年前の日記]

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

PCトラブルの相談を受けたので電動自転車で某所まで行ってきた。09:15-11:30まで作業。

結構前にビデオカードを交換したWindows10機の画面が映らない、という話だったのだけど…。ビデオカードの初期不良ならともかく、しばらくの間はちゃんと使えてた、比較的新し目のビデオカードが壊れてるってことは考えにくいよなと。するとディスプレイが壊れかけてるのかな、古い製品だったし。などと予想してたのだけど。

実際に症状を見てみたら、PC本体の電源投入 → 数秒後に勝手に電源が切れる → また勝手に電源が入る → 電源が切れる、を繰り返していて。その間、ディスプレイには何も映らず。こんな症状は見たことが無いぞ…。

持っていったネットブック機にディスプレイを繋げたらフツーに映った。ディスプレイとケーブルには問題無さそう。

なんとなくだけど、PC本体の電源が足りてないのではないか、と思えてきたので、BD-Rドライブ、USB3.0拡張ボード、HDDからケーブルを取り外して、M/B + ビデオカード + 電源のみにして、電源投入。…BIOS画面が出た。すると電源か。電源が弱まってきているのか。

HDDだけ追加で繋げたらWindows10も起動した。うーん。

とりあえず、BD-RドライブとUSB3.0拡張ボードを取り外した状態にして、これで様子を見てほしいと伝えてきたり。

おそらく光学ドライブは滅多に使わないだろうし、USB接続のDVD-Rドライブも別に持ってるそうだし、USB3.0接続機器が存在しない環境だから、USB3.0拡張ボードも今まで使っていないはず。M/BにはUSB2.0が10ポートもついてるし。であれば、当面、困る場面は無いだろう…。

すぐに電源が寿命を迎える可能性もありそうだけど、Antec TP-750 という、結構な容量の電源だし…。弱まっていたとしても、まだ最期を迎えるまで余裕がある、といいのだけどなあ…。

電源容量を計算。 :

帰宅後、必要になりそうな電源容量をざっくりと計算。

_電源容量 ☆ 皮算用 ☆ 計算機。

【CPU】 Core 2 Quad Q9550 2.83GHz 45nm 6MB×2 [95W]
【M/B】 50W − ヽ(´ー`)ノ [50W]
【VGA1】 ATI RADEON HD4850 [110W]
【HDD1】 WesternDigital WD1001FALS 1TB 32MB [27.4W]
【光学ドライブ1】 Pioneer BDR-203 ■BDR-S03J [19W]
【メモリ】 IO DATA DX800-2G (2320mA 1.8V) ×2 [8.35W]
【インターフェースカード1】 USB3.0■REX-PEU3 (RATOC) [0.86W]
【合計 ☆ 消費電力】  [ 310.61W(最大時) ]

玄人志向 KRPW-L5-500W
【ライン別】  ピーク    12V    5V    3V    アイドル
【電源容量】  500W    38A    16A    18A    500W
【消費電力】 310.61W   24.33A   3.57A   0.26A   90.81W
【運転出力】 62.12%   64.03%   22.32%   1.44%   18.16%

【12Vの内訳】 12V合計 12V1(CPU以外) 12V2(CPU)
【電源容量】  38A      38A      38A 
【消費電流】 24.33A     16.41A     7.92A 
【運転出力】 64.03%     43.19%     20.83%

■ 電源容量 ☆ 皮算用 ☆ 計算機。
http://www.cost-simulator.com/eco/eco3.html

+12Vが25A以上必要になるのか…。+12Vシングルレーンの電源ならなんとかなるかな。価格.comを眺めたら、値段も、5,000円前後からありそうな気配。

#2 [pc] ウイルス対策ソフトAVGのインストールでハマったり

某所でのPC関連動作確認のために、ネットブック機を持っていこうと考えたのだけど。

ついでだから、ネットブックに入ってるWindowsXPに、無料で使えてXPにもまだ対応してるらしいウイルス対策ソフトAVGの現行版をインストールしておこうと昨晩思いついたわけで。いやまあ、普段は、一緒に入れてある Lubuntu 16.04 を起動して使うので、XPが必要かというとそこまででもないのだけど、しかし時々何かしらの動作確認で稀にXP側を起動する時もあるわけで。であれば何かしらその手のソフトが入ってるほうがいいよなと。

てなわけで作業。今まで AVG 2015 free が入っていたので、まずはコントロールパネル経由でアンインストール。

_AVG AntiVirus - 窓の杜 から、Antivirus_Free_1817.exe をDLして実行。

ところが、インストールの途中でエラーが出る。進捗バーが97%まで進んで、100%になって、その直後に120%になって進捗バーが画面横幅をぶっちぎり、「一般的なエラー 0xE0010601 が出た」と表示されて終了。

avg_2017_free_install_error_ss01.png

avg_2017_free_install_error_ss02.png

avg_2017_free_install_error_ss03.png

avg_2017_free_install_error_ss04.png

お前は宇宙戦艦ヤマトの波動砲か。「エネルギー充填120%。対ショック、対閃光防御」か。こんな画面見せられてショック受けましたわ。

_【よくある質問】AVG 製品のインストール、アンインストール中にエラーが出る場合やアップデートが完了しない に掲載されてる AVG Remover をDLして、XPをセーフモードで起動して実行するも、「AVG製品は何も見つからなかったけど?」と言われてしまう。手作業でAVG関連フォルダやテンポラリフォルダの中身を削除してから再インストールしてもダメ。

結局、一晩中作業しても解決せず。仕方なく徹夜状態で某所に行くことに。

帰宅後、諦めきれずにググってたら、以下にヒントとなるやり取りがあった。

_0xE0010601: General error (0x0601) | AVG

要するに、公開されてるAVGのインストーラはダウンローダで、そのダウンローダが必要なファイルをダウンロードする段階でコケているらしい。 _https://www.avg.com/en-us/download.prd-gsr-free から入手できる、200〜300MBほどのフルパッケージインストーラをDLして実行すればエラーに遭遇せずに済む、という話で。

試したところ、今度はちゃんとエラーも出さずにインストールができた。

にしても、結構前からインストールすらできないインストーラを配布してる、てのは…。不具合報告の中には、「色々試したがクリーンインストールしたOS上ですらインストールできない。前のバージョンがどうとかは関係無いトラブルだぞコレ」てな話も出てるあたりがスゴイ。そこまでユーザに検証させといて、しかしそれでも修正しない・できない、とは…。AVG は Avast に買収されたらしいけど、その関係で、中で色々あるのかなあ。

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

#1 [cg_tools][grafx2] GrafX2を少し触っていたり

GrafX2という、 Windows、Linux、Mac等でも動くフリーの画像編集ソフト、というか、フリーのドットエディタがあるのだけど。

_GrafX2
_GrafX2 - Wikipedia

_GrafX2 Mirroring Full Length Drawing Video - YouTube を眺めていたら、どうもミラー状態で描画というか、シンメトリーモードで描画というか、そういうことができるっぽいように見えたわけで。Asepriteみたいなことができるのであれば、少し触ってみないと。

が、しかし、使い方が分からない。フツーにやるとタイリングモードっぽい描画になるな…。どうやったらミラーモードで描けるんだ…。いや、タイリングモードっぽい描画ができるだけでも「おおっ」って感じではあるけど。FXボタンを押して、Gridを指定したり、Tilemapを有効にしたりするとそういうモードで描けるっぽい。

_GrafX2の使い方を解説してる動画群 を眺めた感じでは、自動シェーディングモードとやらもあるみたいで、なんだか Aseprite に似てるなと。

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

#1 [cg_tools][grafx2] GrafX2の使い方をメモ

GrafX2 というドットエディタでシンメトリーモード(ミラーモード、左右対称モード)の使い方を調べたり。環境は Windows10 x64 + GrafX2 2.4.2035 win32版。

注意点。 _Downloads - GrafX2 から入手できるWindows向けの最新版は grafx2-2.5wip2082-win32.zip に見えるのだけど。手元の環境では、この版でファイル保存をしようとするとフリーズする。

_History - GrafX2 を眺めた感じでは、2.5版はまだリリースされてない扱いで、grafx2-2.4.2035-win32.zip が安定版のようだなと…。2012年に作られたバイナリなので古いのだけど、保存できないよりはマシかなと。

注意点その2。GrafX2 は256色を扱えるドットエディタ。フルカラーが扱えるわけではない。

キャンバスの指定。 :

ディスプレイっぽいアイコンをクリックするとキャンバスサイズを指定することができる。
  • Width で横幅、Height で縦幅を指定。
  • Pixle size で、等倍表示や2倍表示等を選べる。
grafx2_ss_01.png

ズーム表示。 :

虫眼鏡アイコンをクリックすると、ズーム表示ができる。ズームしたい場所をクリックして指定すると、右側に拡大表示される。拡大表示部分でマウスホイールを回転すると拡大率が変わる。
grafx2_ss_02.png

グリッドの指定。 :

FXアイコンをクリックすると色々な効果が選べるけれど、その中の「Grid」を右クリックすればグリッドサイズを変更できる。
grafx2_ss_03.png

x と y のサイズを指定して、「Show」にチェックを入れればグリッドが表示される。
grafx2_ss_04.png

ちなみにこのグリッドは、タイルマップ相当を描画する際のタイルサイズの指定も兼ねている。タイル1つが16x16ドットのタイルマップを描きたいなと思ったら、グリッドサイズを16x16にすればいい。

とりあえず今回は、左右対称で描画してみたかったので、キャンバスサイズ(=64x64)の横半分(=32)、縦全幅(=64)をグリッドサイズとして指定した。

シンメトリーモードの使い方。 :

シンメトリーモードの開始は…。おそらくこのソフトの独自の操作だろうけど、まずは、左右対称で描きたいのか、上下対象で描きたいのか、上下左右対称で描きたいのかが分かるようなドットを打つ。今回は左右対称で描きたいので、グリッドの境界線を跨ぐ形で、2つのドットを打った。
grafx2_ss_05.png

次に、FXアイコンをクリックして、Tilemap を右クリック。
grafx2_ss_06.png

左右対称で描きたいので、Horizontally にチェックを入れる。
grafx2_ss_07.png

これで何か描いてみると…左右対称で描画されるようになった。
grafx2_ss_08.png

もし、上下左右対称で描きたいなら、以下のように、グリッドの境界線を跨いで、ドットを4つ打つ。
grafx2_ss_09.png

上下左右対称で描きたいので、FXアイコン → Tilemap を右クリック → Horizontally と Vertically の両方にチェックを入れる。
grafx2_ss_10.png

上下左右対称で描けるようになった。
grafx2_ss_11.png

ファイルの読み込みと保存。 :

ファイルの読み込みと保存は、「S/L」と書いてあるアイコンをクリックする。
  • 「S」のほうを左クリック : 名前をつけて保存 (Save as)
  • 「S」のほうを右クリック : 上書き保存 (Save)
  • 「L」のほうを左クリック : 画像を開く (Load)
  • 「L」のほうを右クリック : 画像を再読み込み (Reload)
grafx2_ss_12.png

GrafX2 の特徴だろうけど…。アイコンボタンによっては、
  • 左上をクリックするか
  • 右下をクリックするか
で、それぞれ機能が変わったりする。

また、アイコンボタンを右クリックすれば、基本的には設定ダイアログが開く。

つまり、1つのボタンで、4つの機能が呼び出せる(時もある)。

透明色の設定。 :

透明色の設定は、レイヤー設定で行う。「LAYERS」と書かれたボタンをクリックすると、何番目の色を透明色として扱うか、背景を透明扱いにするか、が指定できる。
grafx2_ss_13.png

その他。 :

Undo は Uキー。DOS時代からあるソフトなので、Ctrl + Z ではないらしい…。

2017/10/09(月) [n年前の日記]

#1 [cg_tools][grafx2] GrafX2の使い方をメモその2

無料で利用できるドットエディタ GrafX2 について、カスタムブラシやグラデーション等の使い方も分かってきたので一応メモ。環境は Windows10 x64 + GrafX2 2.4.2035。

カスタムブラシについて。 :

カスタムブラシ、という呼び方で合ってるのか分からんけど…。既にキャンバス上に描かれてる一部分を取り込んで、ブラシ相当として利用できる機能、という説明で伝わるだろうか…。

FXアイコンの左にある選択範囲っぽいアイコン、の、左上、をクリック。
custom_brush_ss_01.png

マウス左ボタンでドラッグして、取り込みたい範囲を矩形で選択。
custom_brush_ss_02.png

これでカスタムブラシになった。ツールバーの一番左のアイコンが、「カスタムブラシだよ」的アイコンに変わってる。キャンバス上でクリックしてみれば、ブラシとして描画できることが分かる、かなと。
custom_brush_ss_03.png

このカスタムブラシは、左右反転や回転等、変形することができる。「選択範囲っぽいアイコンの中にFXと描かれてるアイコン」をクリックすると設定ダイアログが表示される。Xをクリックすれば左右反転、Yをクリックすれば上下反転、90、180 等をクリックすれば回転する。他にも色々変形できるっぽい。
custom_brush_ss_04.png

こんな感じで、一部分だけ描いたらカスタムブラシにして増殖、てなノリで作業ができる。
custom_brush_ss_05.png

ちなみに、EDGE2 にも同等の機能がある。EDGE2 の場合は「スタンプ」と呼んでいる…のかな。マウス右ボタンでドラッグするとドラッグした範囲がスタンプのソースとして一時的に利用できる。残念ながら、無償で利用できる EDGE には該当機能は無くて、有償版の EDGE2 しか実装されてない。

ブラシ種類を選択。 :

ブラシの種類を変更したい時は、ツールバーの一番左上にあるアイコンをクリック。
brush_change_ss.png

グラデーションの使い方。 :

グラデーションアイコンをクリックすると、グラデーション塗りが使えるようになる。

操作方法は…GIFアニメを眺めてもらったほうが早いかな…。
gradation_ss.gif
  • アイコンを右クリックすると、設定ダイアログが開く。
  • グラデーションに使いたい色の範囲を、マウス左ボタンのドラッグで指定できる。
  • 四角のグラデ塗りは、矩形で範囲を指定してから、グラデーションの向きを指定する。
  • 丸のグラデ塗りは、円の中心から半径の長さを指定する感じでドラッグして、最後にグラデの中心にしたい場所をクリック。

グラデーションは、ディザをかけて塗ることもできる。グラデアイコンを右クリックして表示されるダイアログの、左下のほうにあるアイコンが切り替えボタンになってる。以下の例は、ディザ無し。
grad_ss_01.png

以下の例は、微妙にディザ有り。市松模様のみを使用する状態。
grad_ss_02.png

以下の例は、そこそこディザ有り。
grad_ss_03.png

パレットのスクロールについて。 :

デフォルト状態だと 16x4 = 64色しか表示されてないので、それしか色は使えんのかなと思われそうだけど。パレット領域はスクロールさせることができますよ、とメモ。更に、PALと書かれたアイコンを左クリックすれば設定ダイアログが開くので、パレット内容も好きなように変更可能、とメモ。
palette_scroll_ss.gif

ちなみに、PALアイコンを右クリックすると、パレットを画面上で何色分表示するか、等の設定ができる模様。

タイルマップモードについて。 :

昨日メモした分では、フツーのタイルマップモードが使えることが分からないであろう気がしてきたので、そのあたりもキャプチャ画像を貼ってみたり。
tilemap_ss.gif

Grid や Tilemap の設定ダイアログは、各アイコンを右クリックすれば表示できる。

ツールバーについて。 :

一応、ツールバー上の各アイコンについて、説明も加えてみたり。描画関係のアイコンのみ、だけど…。まあ、実際触ってみれば、使い方はすぐに分かるはず。
toolbar_about_ss.png

Adjust / Transform は、ちと特殊。キャンバス内容をラップアラウンドでスクロールさせたり、キャンバスサイズを変更、というか画像解像度を変更できたりする。

昨日もメモしたけど、各アイコン、というかボタンによっては、
  • 左上をクリック。
  • 右下をクリック。
  • 左クリック。
  • 右クリック。
つまり4種類の機能が呼び出せるボタンもあったりするので、試しに一通りカチカチしてみることを推奨。

作例。 :

せっかくだから、弄ってるうちに出来上がったドット絵を置いときます。ライセンスは CC0 ってことで。

grafx2_02.png

grafx2_03.png

grafx2_04.png


_DXRuby で表示して、雰囲気を確認してみたり。

_draw_test.rb

draw_test_ss.png

#2 [web] Dropboxのクライアントアプリは出来が悪いなあ

Shotty という、DirectX の画面も取り込めるキャプチャソフトを利用しようとしたら、「何かのアプリが PrintScreenキーを既に占有しているから、俺、ホットキーでキャプチャできないんですけど?」と言ってきて。

一体何のアプリがそんなことを…。と思って PrintScreenキーを叩いてみたら、Dropboxのウインドウが表示されて。「キーを押すだけでDropboxにスクリーンショットを保存できるよ! どうだい、スゴイでしょ! さあ、どうする? 保存する?」と…。

Dropbox…てめえかああ! …正直、かなりイラッときましたよ。

うっかりインターネット上にスクリーンショットを送信して何かの拍子に共有・公開設定になってたら怖いから、Dropboxの該当機能は、あえてわざわざ意識的に無効にしてたはずなんですけど。それでも相変わらず、PrintScreenキーを奪い続けるのかコイツは。なんという糞仕様。フツー、該当機能が無効になってたら、PrintScreenキーは解放すべきじゃないの。そのキー押しても機能が呼び出されない状況にあえて設定してるのに、お前、なんで握り続けてんの。

どうも Dropbox のクライアントアプリは、出来が悪いなあ…。以前は、Windowsのログに大量にメッセージを吐き出して、重要なログを潰していった不具合があって、そのせいで一時期アンインストールしてたけど…。

まあ、Dropbox は、常駐させたらダメなアプリ、ってことなんだろう…。同期したいときだけ起動する、てな使い方を意識的にしていかないと…。不便というか、面倒くさいヤツだな…。

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

#1 [cg_tools][grafx2] GrafX2の使い方をメモその3

無料で利用できるドットエディタ GrafX2 について、スプレーの使い方が分かってきたので一応メモ。環境は Windows10 x64 + GrafX2 2.4.2035。

スプレーの使い方。 :

GrafX2 のスプレーには、複数の色をばら撒けるモードがあるようで。

スプレーのアイコンを右クリックすると、スプレーの設定ダイアログが表示される。そこで、複数の色を選択して、Mode を Multi にしておけばいいらしい。
spray_ss_01.png
  • 左クリックで、使用色を設定。
  • 右クリックで、未使用色に設定。
ちなみに、右側の「+1」「-1」等で指定できる数値は、その色がどの程度の割合で出現するかを示してる。数値を大きいとたくさん出て、数値が小さいと少ししか出てこない。

この状態で、キャンバスの上で左ボタンを押し続けると、以下のような描画ができる。
spray_ss.gif

この手のノイズっぽい画像を作成する時は便利そうな予感。

2017/10/11(水) [n年前の日記]

#1 [cg_tools][grafx2] GrafX2の使い方をメモその4

まだ GrafX2 について調べていたり。

GrafX2とLuaスクリプト。 :

GrafX2 は、どうやら Luaスクリプトで機能を増やすことができる模様。

例えば、 _Pixel Joint Forum: DB ToolBox - Grafx2 scripts UPDATED dec13 で公開されてるスクリプト群を導入すると色々機能が増える。…どういう機能が増えるのかはちょっとまだ分かってないけど。

上記のスクリプト群、Toolbox 1.3 の導入の仕方を一応メモ。環境は Windows10 x64 + GrafX2 2.4.2035。
  1. toolbox13.zip をDLして解凍。
  2. 中に dawn というフォルダが入ってるので、GrafX2インストールフォルダ\share\grafx2\scripts\ 以下にフォルダごとコピー。
  3. GrafX2 を起動したら、点線で「FX」が囲まれてるアイコンを右クリックして Brush factory を起動。
  4. GrafX2インストールフォルダ\share\grafx2\scripts\dawn\scripts\ を開いて、_DBTOOLBOX.lua を選択。
  5. 下に「Key:NONE」と表示されてるので、「NONE」をクリックして任意のキーをショートカットキーとして割り当て。ちなみに readme.txt には、「ワシは Alt+1 を割り当てとるぞ」と書いてあった。
  6. Runボタンを押せば実行できる。メニューが表示されて好きな機能を選べる。
  7. 作業中は、先ほど設定したショートカットキーで呼び出すこともできる。
とりあえず、SCENES の中に画像生成関係の機能が入ってるようなので、そのあたりを選べば動作確認できるかなと。

_A guide to analyze your color palettes with Grafx2 - English Amiga Board によると、パレット内容の分析もできるようだなと…。

ショートカットキー一覧。 :

以下のページでショートカットキーの一覧が公開されてたのでメモ。

_UserGuide/KeyboardShortcuts - GrafX2

拡大表示領域のスクロールはカーソルキーでできるっぽい。

「WIP」って何ですか? :

GrafX2関連のページを眺めてると、やたらと「WIP」という単語が出てくるのだけど。コレって何ですか?

_WIP(ワークインプログレス)とは - IT用語辞典
WIPとは、制作途上のもの、やりかけのもの、仕掛り品、進行中の作業、工事中、作業中、などの意味を持つ英語表現。

WIP(ワークインプログレス)とは - IT用語辞典 より

「現在鋭意制作中!」みたいなものか…。

#2 「デンジャラス・デイズ:メイキング・オブ・ブレードランナー」を視聴

NHK-BSで放送されてた、「デンジャラス・デイズ:メイキング・オブ・ブレードランナー」を視聴。録画したままずっと見れてなかったわけで。

_NHKネットクラブ 番組詳細(プレミアムシネマ「デンジャラス・デイズ:メイキング・オブ・ブレードランナー」)
_映画迷想「デンジャラス・デイズ メイキング・オブ・ブレードランナー : 迷想者の散策記
_2009-10-22 - THE KAWASAKI CHAINSAW MASSACRE

映画「ブレードランナー」の制作当時の話を、関係者へのインタビューや、当時の制作風景の写真・映像等で構成しつつ紹介していく内容だった。ちなみに「デンジャラス・デイズ」は、ブレードランナーの初期企画のタイトルらしい。

撮影当時は、次々に問題が起きてたようで…。 等々が紹介されてた。しかし、ビデオやケーブルTV(?)の普及で再評価されて、カルト映画として人気が出てきてどうにか…てな感じだったそうで。

なんとなくだけど、「ルパン三世 カリオストロの城」を思い出したりもして。アレもたしか成績はアレだったけど、TVで放送するたびに評価が高まって…だったような。

関係者の一人が、「なんだかんだあっても、それが本物の映画だったらちゃんと残るんスよ」てな感じの発言をしてたけど、たしかにそうかもしれないなと。「ブレードランナー」にしても「カリ城」にしても、ちゃんと残ったわけだから。

いやまあ、本物の映画であっても、見てもらえる機会がほとんどなくて埋もれていった、そんな作品もたくさんありそうではあるけど…。そもそも見せないと…残らない…。

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

#1 [cg_tools] D-Pixedを少し触ったり

256色画像に対応してるドットエディタ、GrafX2 の使い方を調べてるうちに、そういえば _D-Pixed という、256色画像対応のドットエディタがあったことを思い出して。何か便利な機能があるのではないかと気になり始めたので少し触ってみたり。環境は Windows10 x64。

ヨサゲな点は以下。
あまりヨサゲではなさそうな点は以下。
いきなりグラデーションで描けるあたりは、EDGE2 より快適。 EDGE2 の場合、一度何かの色で単色塗りをしてから、バケツツールでグラデーションを流し込まないと任意の形で塗れなかったはず。

ただ、ソレ以外は、EDGE2のほうが使い易い印象。

D-Pixed を GrafX2と比べると…。基本機能は似たり寄ったりだけど、GrafX2 は Tilemap 機能が便利なので、そこで印象が随分違う、ような。

2017/10/13(金) [n年前の日記]

#1 [cg_tools] GraphicsGaleがフリーウェアになっていたらしい

_GraphicsGale という、シェアウェアのドットエディタがあったのだけど。どうやら 2017/06/18にフリーウェア(フリーソフト)になっていたようで。知らなかった…。一体何があったんだ…。

もしかして開発停止になったからフリーソフトに、と思ったけれど、開発履歴を眺めたらむしろフリーソフト化してから開発ペースが上がってるように見えなくもないというか。何にせよ、ドットエディタの選択肢が増えるのは、ありがたいことだなと。

いやまあ、昨今はドットエディタってあまり使われてない印象もあるけど…。その手の企業が公開してるドット絵関連記事を眺めてると、Photoshop を使ってドット打ってる事例をよく見かけるような。フルカラーの画像編集ソフトは加工が楽だし、普段から慣れてるというのもあるのだろうか。いや、単に企業内ではAdobeアプリのシェアが圧倒的に強いだけかもしれんけど。

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

#1 [firefox] FirefoxでYouTubeを開くと「(1)」みたいな数字がついて悩んだり

ここ最近、FirefoxでYouTubeを開くと、タイトルに「(1) hoge fuga」みたいに謎の数字が追加されてしまって、首を捻っていたわけで。Google Chrome 等で開くとそんな数字はつかない、ということは Firefox だけが何かしているはずで。何だろう、コレ…。

ググったら原因が分かった。

_突然youtubeのタブのタイトル欄の頭に( )に囲まれた4桁の数字が表示されるようになった - Google プロダクト フォーラム
おそらく、YouTubeにログインした際に、右上の自分のアイコンの横のベルメークで通知される通知の数かと思われます。

突然youtubeのタブのタイトル欄の頭に( )に囲まれた4桁の数字が表示されるようになった - Google プロダクト フォーラム より

ああー。ホントだ。ベルっぽいマークに「1」とかついてる。コレが勝手に反映されちゃうのか…。

通知設定の「登録チャンネルの新しい動画やアクティビティに関する不定期の通知を受け取る」部分のチェックをはずしたら消えました

突然youtubeのタブのタイトル欄の頭に( )に囲まれた4桁の数字が表示されるようになった - Google プロダクト フォーラム より

自分も一応その設定をしておこう…。

#2 [anime] 「宝石の国」1話を視聴

BS-11で放送されてる、「宝石の国」というアニメの1話を視聴。

制作スタジオは、オレンジ。「ゾイド -ZOIDS-」のメカのセルルック3DCGを担当してた方が立ち上げた3DCGスタジオで、3DCGでロボットを動かすならオレンジ、てな感じで高く評価されてるらしいのだけど、そんなスタジオがキャラも含めてTVアニメを作るということで気になってたわけで。

映像を見て驚いた。コレ、本当に3DCGなんだろうか…。いや、髪の毛の透明感、肩に宝石の光が落ちる処理、戦闘シーンの立体的なカメラワーク等、3DCGじゃないと無理だよなコレ、てな映像が目白押しだから、やっぱり3DCGなのだろうけど。でも、なんだか手描きっぽくも見える…。後から手描きで修正してるのかなと思えてくるほどの自然な見た目。仮に手描きとのハイブリッドだとしても、ここまでそれらしく見せられるのはスゴイなと。3DCGオンリーだったらますますスゴイ。

監督は京極尚彦氏。 _京極尚彦 - Wikipedia によると、元々はサンライズでCGエフェクトを担当してた方で、そのせいか3DCGの使い方には定評があるらしい。更に、 _師匠の菱田正和監督へのインタビュー によると、女児向けアニメなのに「あいつは本当にお尻ばっかり……」と言われるほどに、ちょっと目を離すとすぐに尻を映し始める趣味があるそうで…。後に「ラブライブ」で、そのフェチが開花・昇華されたわけだけど、どうもこの「宝石の国」においても、そのあたりが功を奏してる気配が…。性別が無いキャラのはずなのに、しかも3DCGで描かれてるキャラなのに、妙な色気を感じるわけで。この監督さん、どうも油断ならねえぞ…。いいぞもっとやれ。

何にせよ、髪の毛を見てるだけでもボーッとしてしまうほどに奇麗な映像だなと。美しい。素晴らしい。さすがオレンジ…なのだろうか。

#3 [anime] 「DYNAMIC CHORD」1話を視聴

BS-TBSで放送されてる、「DYNAMIC CHORD」というアニメの1話を視聴。

このアニメ、なんだか映像が興味深いなと。音楽の演奏シーンが、どうやらカットアウトアニメーション(切り絵アニメ)っぽいのだけど…。

自分、デジタルツールを活用したカットアウトアニメーションの手法を使えば、結構そこそこそれっぽいアニメ映像を作ることも意外と可能ではないのかと、ここ数年夢想していたのだけど。いや、だって、その手のCM映像等を目にすると結構凄いことになってるわけで。ここまで動かせるなら、この手法でもイケるんじゃないの、と。

_【Shadowverse シャドウバース】第6弾カードパック「Starforged Legends/星神の伝説(せいしんのでんせつ)」 - YouTube
_【Shadowverse シャドウバース】第5弾カードパック Wonderland Dreams / ワンダーランド・ドリームズ - YouTube
_【Shadowverse シャドウバース】 第4弾カードパック Tempest of the Gods 神々の騒嵐 - YouTube

が、しかし、件のアニメの映像を眺めて、夢が打ち砕かれたというか。いかにもなTVアニメ風の素材では、カットアウトアニメーションってこんなことになるのか、これがカットアウトアニメーションの限界なのか、これでは蛙男商会のFLASHアニメだわ…みたいな。

また、PANやズームを駆使することで、同じカットでも違う見た目にできるんじゃないか、てなことも夢想してたのだけど。そのあたりも件のアニメで打ち砕かれたというか。カメラをどれほど工夫して動かしてみても、こりゃ限界あるわ…。

ということで、自分の夢想・妄想はどれもこれも全く甘かったと痛感させられたわけで。まあ、絶対に顔が崩れない映像にはなるのだけど。

アレかな。各パーツのテクスチャのリッチさと、立体的な動きを疑似的につけられるかどうか、てなあたりが必須になってくるのだろうか…。もっとも、そのあたりを考えていくと、3DCGのほうがいいじゃん、まだ見れるじゃん、てな話にもなってきそうな予感も。

何にせよ、このアニメの映像は色々と勉強になるなと。理想と現実のギャップを思い知らされるというか、実際に見える形にしてみないと分からないこともあるというか。

#4 [anime] J.C.STAFFとモブ3DCG

「食戟のソーマ 餐ノ皿」というアニメをぼんやり眺めていたら、ふと、モブが3DCGで描かれてることに気が付いて。よく注意して眺めればようやく気付けるけれど、しかし今まで全然気づかなかった…。J.C.STAFF、やるなあ…。

そういえば、「アリスと蔵六」でも、モブが3DCGだったのに全然気付かなかったけど。アレもJ.C.STAFFだったか…。もしかして、J.C.STAFFは、手描きに3DCGのモブを溶け込ませることに関してかなりのノウハウを持っているのではあるまいか…。

いやまあ、たぶんコレ、他のスタジオも「ウチだってノウハウ持ってるよ?」と言い出しそうな気がするけれど。ノウハウを駆使すると、そこで3DCGが使われてることに気づかれない映像が提示できるわけで、つまりノウハウを持っていればいるほど、ノウハウを駆使していることに視聴者が気づかない状態にどんどん近づいていくという、そういう種類の話なわけで。技を使ってることに誰も気づかないあたりが技アリなのだ、という。

そういうノウハウって一体どこに溜まるのだろう。スタジオ単位で溜まるのか、演出家に溜まるのか、3DCG監督等に溜まるのか…。今回のソレも、J.C.STAFFに溜まってるというより、各作品に参加してるどなたかがノウハウを持ってる、という状態だったりするのかな。

などと書いてはみたけれど。ここでもし、「変だな…あのアニメは3DCGなんか使ってないぞ…全部手描きですけど…」みたいな話が出てきたら、これまたちょっと違う展開に。

別の正解。 :

モブ3DCGと言えば…。「正解するカド」のモブはほとんど手描き、かつ、止め絵で作られてたけれど。個人的には、アレもまた正解の一つと思っていたり。
  • モブキャラは色んなカットで何度も繰り返し出てこない。1回しか出てこないキャラばかりなのだから、モデルデータを用意するより、その都度手で描いたほうが効率的。
  • モブが出てくるカットは「モブが居る」という情報以外提示しない場合がほとんど。モブが動いたところで意味なんてない。止め絵で十分。
  • モブカットは視聴者がさほど注目しないように仕向けるカットなのだから、不自然に見える3DCGより、自然に見える手描きで対応すべき。
等々、合理的な思考が想像できるわけで。

モブ3DCGは、「たくさん描くのは面倒だ」という、作業の都合から発した理由で使われるわけだけど。そういった、「作業が大変」云々から考えるのではなくて、「そもそもモブカットって、どういう種類のカットなんだろう?」「何を伝えられたら要求を満たせるのだろう?」というレベルから考えていくと、「正解するカド」のやり方も、また適切だよなと。たしかに正解の一つと思えるわけで。

いやまあ、正解は一つじゃなくて、たくさんあるわけですけど。スタジオやスタッフ毎に、色んな正解があるよなと…。

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

#1 [python][pi3d][raspberrypi] pi3dを勉強中

久々に pi3d を勉強中。先日書いた、STGっぽい画面を出すスクリプトに、弾を撃つ処理を追加していたり。

pi3d の描画オブジェクト(ImageSprite)の、表示・非表示を切り替えたいのだけど。関連するメソッド・変数が無いように見える。実はどこかにあるのだろうか。今現在は仕方ないので、フラグを見て draw() を呼ぶ呼ばないを決めてるけど…。

2017/10/16(月) [n年前の日記]

#1 [python][pi3d][raspberrypi] pi3dでSTGっぽい画面を表示するスクリプトに弾を撃つ処理を追加

スクリプトソース以外にも、モデルデータや画像データが必要になってきたので、まとめてアップロードしないとアレだなと。てなわけで、github にアップロードしてみたり。

_mieki256/pi3d_demo_stg_modoki: pi3d demo STG modoki

以下は、Windows10 x64 上で動かしてみた様子。

※ 2017/10/20追記。raspberry Pi Zero W 上で動かした場合の様子もアップロード。…画面下に自機が来ると処理落ちしてることが分かるだろうか?

ソースも画像もモデルデータも、ライセンスはCC0ってことで。

Raspberry Pi Zero W は遅い。 :

上記のスクリプトをWindows機上で実行すると60FPSで滑らかに動くのだけど。残念ながら Raspberry Pi Zero W + raspbian stretch 上では60FPSだと処理落ちする模様。画面の上のほうに自機を動かすと弾の数が減るので60FPSになるけれど、画面の下のほうに自機を動かすと弾の数が目一杯出るのでガクガクする。まあ、Raspberry Pi Zero W も、30FPSで動かせば処理落ちせずに動かせるようだけど。ソース中の MY_FPS の値で FPS を指定できるので試してもらえれば、と。

Environment60FPS30FPS
Windows10 x64 (Core i5-2500 + NVIDIA GeForce GTX 750 Ti)PASSPASS
Raspberry Pi Zero W + raspbian stretchFAILPASS

どうも pi3d は、1つオブジェクトを表示しようとすると、ただそれだけで処理が結構かかってしまうようで。オブジェクトを描画するための下準備が重いのだろうか。高速化する方法はないのかな。

同じ形状、かつ、必ず描画するのだと決まっているなら、merge とやらを使えるみたいだけど…。

_Pi3D Tutorial #2: Creating Multiple 3D Objects, Merging and Rotating the Camera - YouTube

STGの弾のようなオブジェクトは、確保した弾数を必ず毎フレーム描画するわけではなく、場面によって描画する個数が変化するし、位置もそれぞれ変わってしまうので、merge が使えないのではと思っているのだけど…。実際はどうなんだろう。

#2 [cg_tools] GIMP 2.8.22 Portable をインストール

気が付いたら GIMP 2.8.22 Portable が公開されていたようなので、Windows10 x64上で一応インストール。

プラグインその他の設定をし直すのが面倒臭い…。

2017/10/17(火) [n年前の日記]

#1 [pi3d] pi3dのソースやサンプルを眺めていたり

pi3d の ImageSprite を使うと、たった数枚のスプライトを表示しただけで処理落ちしてしまうのが気になるわけで。高速化できる方法は無いのかなと pi3dのソースを眺めていたり。

ImageSprite は Sprite を継承しているけれど、Sprite じゃなくて Plane を使ったら早くならないか。と思って Sprite.py や Plane.py を眺めてみたけど…。Sprite も Plane も Shape を継承していて、Sprite は片面、Plane は両面、ぐらいしか違いが無いなと…。

pi3d_demos/SpriteBalls.py を眺めた感じでは Points を使うと高速描画できそうな気配を感じたけれど、その場合 numpy を使って自分で座標計算をしないといけないようで、お手軽に描画、という感じから少し遠ざかるよなと…。

pi3d_demos/Raspberry_Rain.py を眺めると20FPSで決め打ちしてるようでもあるし。「60FPSで動かすとか無茶言うな!」てな話なのかな…。

2017/10/18(水) [n年前の日記]

#1 [raspberrypi] LuaでOpenGL ESを使えるらしいLjESを試用

Raspberry Pi上で Lua を使って OpenGL ES を制御する LjES なるライブラリがあるようで。

_jun-mizutani/ljes: LjES : 3D framework for LuaJIT on Raspberry Pi
_LuaJITでお手軽3Dプログラミング (1) (2013/03/29) - Raspberry Pi メモ (19) - Jun's homepage
_LuaJITでお手軽3Dプログラミング (2) (2013/04/14) - Raspberry Pi メモ (20) - Jun's homepage
_LuaJITでお手軽3Dプログラミング (3) (2013/06/23) - Raspberry Pi メモ (22) - Jun's homepage
_LuaJITでお手軽3Dプログラミング (4) (2013/12/23) - Raspberry Pi メモ (25) - Jun's homepage
_LuaJITでお手軽3Dプログラミング (5) (2014/03/31) - Raspberry Pi メモ (29) - LuaJITでお手軽3D (5)

Raspberry Pi Zero W上で試用してみたり。

インストールは…。件のライブラリは github でも公開されてるので、git でダウンロードできる。
mkdir ~/prg/lua
cd ~/prg/lua/
git clone https://github.com/jun-mizutani/ljes.git

以下でデモを動かせる。
cd ljes
cd examples
luajit demo_spheres.lua
たくさんの球がグルグル回りながら表示された。見た目は結構圧巻。

Lua が Python より軽ければいいな、60FPSが出たらありがたいな、などと期待しつつ動かしてみたけれど。Raspberry Pi Zero W、1280x720の画面解像度では、44FPS前後だった。60FPSは無理か…。

もちろん、Python + pi3d にしろ、Lua(LuaJIT) +LjES にしろ、比較的簡単な記述で3D描画が試せるのはありがたいわけで。

考えてみれば、大昔の3Dゲームは30FPSとか20FPSとかで動いてたから、そのぐらいの速度で動けばとりあえず御の字と捉えることができなくもない…かな。どうかな。どうなんだ。

#2 [raspberrypi] Raspberry Pi Zero WではFlashが動かないっぽい

ふと、もしかして Raspberry Pi Zero W上でFlash Playerが動くのであれば、ゲームの類はFlashで作ったほうが良かったりして、などと思えてきたわけで。

ということで、 Zero Wを起動して、Chromiumブラウザも起動して、Flash Player が動くのかどうか試してみたのだけど、色々やってみてもFlashが動く気配が無くて。

おかしいな。ググった感じでは、「昨今の raspbian なら Flash Player が動くよ」「最初から Flash Player が入ってるよ」と解説されてるページを見かけるのだけど。

_ラズベリーパイでFlash Playerを有効化にしてインタラクティブなコンテンツを楽しむ! - FABSHOP.JP -デジタルでものづくり! ファブショップ !
_【Raspberry Pi】Raspbian Jessie with PixelのChromiumにFlashを入れる

しつこくググっていたら、気になるページに遭遇。

_Flash Player now available for Chromium - Raspberry Pi Forums
_Flash Player on Debian - Raspberry Pi Forums

「Flash Player は Raspberry Pi2 や Pi3 なら動くけど Zero や Pi1 では動かんよ」
「Pi2 や Pi3は ARMv7 だけど、Zero や Pi1 は ARMv6 なんだよ」
「Adobe は ARMv6 で動く Flash Playerを出してないよ」
「だから、Zero や Pi1 上の Chromium は、Flash Player を動かさないフラグ設定にしてるよ」

と書いてあるように見える。

そういうオチか…。どうやら Zero系では Flash Player は動かせない、と思っておいたほうが良さそうだな…。

Scratchにも影響があるらしい。 :

更にググってるうちに、オンライン版 Scratch 2.x は動作に Flash Player が必要、という話を見かけた。

_ラズベリーパイの調理法 Raspbian アップデート - Scratch 2.0 および Thonny のサポート
なお、Pi 1 および Pi Zero はサポート対応外です。Chromium で Flash を動かすため Pepper Flash プラグインを使いますが、これは、Pi 1 および Pi Zero をサポートしていないためです。

ラズベリーパイの調理法 Raspbian アップデート - Scratch 2.0 および Thonny のサポート より


ということは、Zero上で Scratch を使おうとしたら、ちょっと困ったことになりそうな。

値段が安いからという理由で、学校等でお子さん達に Raspberry Pi Zero を配って、みたいな話をどこかで見かけた記憶があるけど。ソレ、本当に Zero で上手く回るのかしら。Scratch 2.x が動かないハードウェアを配ってしまうのは、プログラミング教育が目的ならマズい状況では。Pi2 か Pi3 を配ったほうが余計なトラブルを回避できそうな予感。

Zero系って、意外と制限があるなあ。「こんなに小さいのにLinuxが動くのか」と感心してたけど、こうもチラホラと問題があるとなると…。うーん。

#3 [raspberrypi] Raspberry PiでChumbyモドキを作れないかな

今から約10年ぐらい前に、Chumbyというガジェットが世に出ていたらしいのだけど。

3.5インチ320x240、タッチスクリーン付きの液晶を備えた小さなLinux機で、Wi-Fiでネット接続して色んな情報を取得して表示し続ける据え置き機、みたいなガジェットだったようで。ケースを、布製やビニール製の柔らかい何かでくるんでしまえるあたり、見た目もちょっとオシャレな感じで。

まあ、色々な事情があったようで、消滅しちゃったのだけど…。自分が Chumby の存在を知った時には、もう製造中止になってた記憶が。

_目覚まし、ゲーム機、YouTubeテレビ――多機能ネットガジェット「Chumby」日本上陸 - ITmedia NEWS
_チャンビー - Wikipedia
_chumbyとは (チャンビーとは) [単語記事] - ニコニコ大百科
_Chumby! | なべこら |株式会社ジークス(東京・大阪)

数年前に復活、という話も見かけたけど。今も販売されているのだろうか…。

_ASCII.jp:お帰りChumby、新モデルとともに復活
_Chumby が休止期間を経て復活、月額3ドルの課金制を導入。国内販売は未定 - Engadget 日本版

それはそれとして。Chumby っぽい何かしらを Raspberry Pi を使って作れないものかなあ、などと唐突に夢想してしまったわけで。まあ、ググってみると、英語圏では同じようなことをつぶやいてる人達をちょくちょく見かけたりもするのだけど。

Raspberry Pi Zero W なら基板が小さいから、作りやすいかな…。と思ったけれど、Chumby って Flash Lite 3 とやらが動いてたらしいから、そこまで再現するとなると Zero系ではダメだよな。Flashが動かないし。

Chumby は、サーバ上にユーザデータを保存とか、ウィジェットはサーバから入手するとか、そういう仕様になっていたから、公式サイトが消滅したら何も動かせなくなって只の時計と化してしまったらしいけど。そういった問題を回避しようとするなら、どういう仕様にしておくのが正解なんだろうと考え込んでしまったり。ユーザデータはどうにかして本体に保存しないといかんよなあ…。ウィジェットも、野良ウィジェットをインストールできるように、とか。今なら github あたりから入手可能に、てなことも検討するのだろうか。

アレかな。各ウィジェットを、Webブラウザ上で動く何かしらにしておいたほうがいいのかな。JavaScriptとHTML5のcanvasを使って描画して、Webブラウザをフルスクリーンで表示し続けておけば…。そういう仕様にしておけば、スマホやタブレットでも代替できそうな…。Chumby というガジェットを作るのではなくて、Chumby が提供していたアレコレを提供するサイトを作る、という形になるのかな。

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 でどこまでできるか、みたいなことを調べる意味も無さそうだなと。調べて公開したところで誰の役にも立たない情報にしかならんわけだし。自分、「非力なハードでもここまでできたで(ドヤァ」な趣味を持ってるわけでもないし。

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

2017/10/20(金) [n年前の日記]

#1 [anime] 「名探偵ホームズ」第3話を視聴

BS11で「名探偵ホームズ」が放送されているので視聴していたり。第3話は宮崎駿脚本・コンテ・演出回。

第3話は妙に映像が奇麗で。あの宮崎駿担当回ということで、DVDやブルーレイにする際の修復(?)作業で特別扱いを受けていたのだろうか。それとも初期の数話はフィルム自体が違うとか?

全般的に「スゲエ」「スゲエ」と思いながら視聴したけど。手紙の秘密が分かってホームズ側が汽車に乗るまでの流れ、および、汽車の中で警部が応援を要請するあたりの流れに、個人的にはかなり痺れたり。

汽車に乗るまで。 :

汽車に乗るまでは、こんな感じのカット割り。
  1. 猛スピードで車を走らせるホームズ。ワトソンの問いに答える形で、目的地を音声で解説。
  2. 奥から手前に走る車。道の真ん中に立ってる警官の制止も無視して、華麗なコーナリングで走り抜ける。
  3. 偽金関係のデスクワークに忙殺されている警部の姿。ホームズの「警部!」という声だけが入ってきて、警部や警官がそちらを向く。
  4. 奥のドアから手前に向かって険しい顔でノシノシ歩いてくるホームズ。カメラはホームズを真正面から捉える。
  5. 警察署の入り口。警部の腕を掴んでグイグイ引っ張っていくホームズ。警部は背広を小脇に抱えて困惑している。
  6. 猛スピードで車を走らせるホームズ。警部、ワトソンも同乗。ホームズ「汽車に乗ってから説明します」。
  7. 駅から出ていく汽車。走って追う3人。「最終便だ!」
  8. 汽車の最後尾に飛び乗る3人。警部だけ遅れてしまい、ホームズとワトソンが警部の腕を掴んで引っ張り上げる。例の宮崎駿の空中泳ぎが出現。
  9. 画面奥へと静かに走っていく汽車。手前でアップになってる木製の信号機がカキンと音を立てながら降りる。
ストップウォッチで測ってみたら22秒だった。

各カットは、映像が「今何をしてるか」を伝えつつ、音声は「何のためにソレをしているか」を伝達している。並列に情報を流してるので、かなりの密度を感じるというか。また、それぞれは断片的なカットだけれど、それらが繋がることで一つの展開として理解できるあたり、これぞモンタージュ手法。みたいな。

どのカットも何かしら語りたくなるところがあるというか…。例えば、ホームズがノシノシ歩いてくるカット。今は合成が楽になったから歩きをループにしてキャラをズームすれば作画が多少楽になりそうだけど、当時は合成が大変だったから最初から終わりまで作画でやるしかなくて。真横から捉えるカットにすれば節約できそうだけど、そこであえて真正面から捉えたのは何故か。警部の視点でホームズを捉えることで、ホームズがなんだかスゴイ迫力でこの場に登場したんですよ、と視聴者に伝えることができるからで、故にここは作画は大変だけど真正面から捉えないとダメだよ、というカットになってるよなと。

警部が背広を小脇に抱えたまま警察署の入り口に引っ張り出されるあたりも上手い。背広を着て出現しちゃったら、それだけの時間的余裕があったことになってしまう。まだ服をちゃんと着ていない状態で現れることで、一体どれだけホームズが急に連れ出したか、ホームズがどれほど急いでいるかが瞬時に伝わってくるわけで。背広を着てるか着てないか。ただそれだけのことなのに、そこを意識して描くだけでも、その場の状況が違ってくるという。

汽車が走り去っていく際に信号がカタンと落ちるのもなんだかスゴイ。こんなコンテを描ける人、今の作り手では居ないんじゃないか…。話の流れからするとそんな描写は要らないような気もしてくるのだけど、あの信号の動きが描かれてないカットを想像すると、あるとないとでは雲泥の差だよなと。これがまた、電球だかLEDだかが赤や緑に光る現代風の信号では印象が違うわけで。板がカタンと落ちる信号だから、作品世界の時代が瞬時に伝わる。所謂、風情が出てくるというか。

どのカットも作画は面倒臭そうだけど、どうしてその動きをそこで描かないといけないのか、納得できるコンテになってる、ような気がするわけで。

応援を要請するあたり。 :

汽車の中で状況を説明して、警部が「あとはお任せあれ。すぐに手配しますぞ」といったあたりからは、こんな感じで。
  1. 駅へ入ってくる汽車。煙をモクモクと出し続けてることで、止まる気配がないことが伝わる。プラットフォーム(?)には駅員が立ってる。
  2. 警部が汽車の窓から「頼む!」と叫びながら、筒状に縛った紙を投げる様子を、全部動画の Follow PAN で映す。
  3. 駅員が慌てて駆け寄って紙を拾う。
  4. 去っていく汽車。駅員が紙を読んで、「大変だ!」と叫びつつ画面外に走って消えていく。
  5. モールス信号を打ってるカット。電鍵(?)に少しずつズーム。音声で、「ツツーツツツー」的なモールス信号のみが流れる。
  6. モールス信号の音声を前のカットから繋げたまま流しながら、遠くまで伸びてる電線と電信柱を結構速いPANで映す。
測ってみたら14秒だった。

例えば、駅員が紙を読むカットは、駅員の後ろ姿がゴソゴソ→ピタリと制止しているだけ、だったりするのだけど。これだけの動きでも、駅員が紙を開いて読んでいるのだろうと視聴者は想像できちゃうわけで。前後の流れと後ろ姿だけで伝わると判断してコンテを描いてるあたりがスゴイ。コレ、下手なコンテマンなら、駅員の上半身を前から捉えて駅員が紙を開いて読む面倒臭い動きをアニメーターに平気で描かせるコンテを出してきそう。

電線と電信柱を高速にPANで映していくカットもさすが。高速なPANは、情報の高速伝達を映像で解説してるわけで。説明台詞なんてそこには無いのに、映像を見れば瞬時に分かる。電信とはなんぞや、てな知識を持たない幼児ですら、映像を見ればテクノロジーの存在が理解できるだろうと。

この一連のカットがあることで、駅に着いたホームズ達が大勢の警察官を従えて敵陣に乗り込むのは何らおかしくない、てな状況が整うわけで。

今では作れない気配がする。 :

もっとも今時の作り手なら、これらの一連のカットは全部バッサリ削除しちゃうかもしれない。今のアニメオタクなら、こういったシーンが無くても話の流れは理解できるだろうから。でも、それを幼児に見せた時にどうなるか。普段アニメなんか見てない一般人に見せたらどうなるか。…こういった描写を丁寧に入れるあたりに、宮崎駿という作家の、当時のバランス感覚があったのかもしれないし、それが、最終的には大衆に受け入れられる結果へと繋がっていった、そんな可能性もありそうな。

しかしコレ、テレコムだから作れたよな、てな感じも…。このコンテを、当時の別スタジオで映像化したら、各カットのドタバタした動きすらちゃんと描いてもらえなかったのでは…。「TVアニメでこんなコンテ描くな!」と怒られてたかもしれない…。宮崎駿も凄いけど、やっぱりテレコムも凄い。そりゃ劇場公開するわな…。これほどの出来なのにお蔵入りとかもったいない…。

手紙の謎を解いてるシーンで、突然のワトソンのアップに幼女が笑ってホームズの顔にすり寄った瞬間、ホームズが軽く驚きつつ幼女のほうを横目でチラッと見て、また視線を戻してニッコリするあたりとか…。たまらん…。コンテに描いてあったのか、アニメーターがそういう動きを描いたのか分からんけど。今、こんなコンテを描ける人って居そうにないし、アニメーターだって勝手にこんな動きを描いたりできないよな…。

ところで、今後、片渕脚本+宮崎駿コンテ回の放送も控えてるはず…。ググってみたら、4話、5話、9話、10話がソレらしい。

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

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

PCからFAX送信できないという不具合相談を受けて、16:00-18:00までお邪魔してきた。雨が降りそうだったので、あちらの車で送迎してもらったり。詳細はGRPでメモ。

#2 [dtm] Music Maker Premium Edition DL版を購入

ソースネクストで 2,980円で売られていたので、つい購入してしまった…。昔、Music Maker 2 Producer Edition を購入して、結構そこそこ使えることは分っていたので、アレがこの値段で入手できるなら、かなりお得な話だな、と。

とりあえずインストールして、ユーザ登録をして…。無料で入手できるらしいアレコレをDL+インストールしてみたけれど。MAGIXのサイトからのDL速度が遅いようで、数時間かかった…。

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

#1 [nitijyou] 投票してきた

衆議院選挙の投票日だったので投票してきた。雨だったので、親父さんの運転する車に同乗して集会所まで。

#2 [nitijyou] 台風が近づいてきているらしい

朝も、夕方も、そしておそらく明日の朝も雨。

2017/10/23(月) [n年前の日記]

#1 [raspberrypi] HSP3.5をRaspberry Pi Zero Wにインストールしようと試みたり

HSP3.5が公開されたという記事を見かけたわけで。

_3年ぶりのメジャーリリース「HSP 3.5」が登場、「HSP3Dish」はRaspberry Piにも対応 - 窓の杜
_HSP3.5を公開しました - おにたま(オニオンソフト)のおぼえがき

Linux / Raspberry Pi で動くHSPも存在するらしいので、試してみようかと。

_HSP3 for Linux/Raspberry Pi

以前 Raspberry Pi3 上で 3.5beta を試した時は make でエラーが出てダメだったけど、今回はどうだろうか…。

試した環境。 :

環境は、Raspberry Pi Zero W + raspbian stretch。kernel は… 4.9.56+ と出てる。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.1 (stretch)
Release:        9.1
Codename:       stretch
$ uname -a
Linux raspi0w 4.9.56+ #1044 Fri Oct 13 15:17:45 BST 2017 armv6l GNU/Linux

インストール手順。 :

ビルドに必要なパッケージをインストール。
sudo apt-get install libgtk2.0-dev
sudo apt-get install libglew-dev
sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev

適当なフォルダを作成して、ソースをダウンロードして、解凍して。
mkdir ~/hsp
cd ~/hsp
wget http://www.onionsoft.net/hsp/file/hsplinux35.tgz
tar zxvf hsplinux35.tgz
cd hsplinux35

make を実行。
make -f makefile.raspbian

エラーが出た…。

g++ -Wall -std=c++11 --exec-charset=UTF-8 -DHSPLINUX -DHSPDEBUG src/hspcmp/main.o src/hspcmp/token.o src/hspcmp/linux/supio_linux.o src/hspcmp/ahtmodel.o src/hspcmp/ahtobj.o src/hspcmp/codegen.o src/hspcmp/comutil.o src/hspcmp/errormsg.o src/hspcmp/hsc3.o src/hspcmp/hspcmd.o src/hspcmp/label.o src/hspcmp/localinfo.o src/hspcmp/membuf.o src/hspcmp/strnote.o src/hspcmp/tagstack.o -s -o hspcmp
/usr/bin/ld: src/hspcmp/ahtmodel.o: 一般的な ELF 内の再配置 (EM: 3)
/usr/bin/ld: src/hspcmp/ahtmodel.o: 一般的な ELF 内の再配置 (EM: 3)
/usr/bin/ld: src/hspcmp/ahtmodel.o: 一般的な ELF 内の再配置 (EM: 3)
src/hspcmp/ahtmodel.o: error adding symbols: 誤った形式のファイルです
collect2: error: ld returned 1 exit status
makefile.raspbian:108: ターゲット 'hspcmp' のレシピで失敗しました
make: *** [hspcmp] エラー 1

前回、Raspberry Pi3上で試した時とは、また違うエラーのようだけど…。残念。今回もビルドはできなかった。

ググってみたけど解決策が分からん…。以下のやり取りぐらいしか見つからない…。

_ld linking error - Raspberry Pi Forums

make clean してみたら通った。 :

make clean をしてから make してみたらビルドが通った。何故。
make -f makefile.raspbian clean
make -f makefile.raspbian

何にせよ、ビルドできたから、いいか…。

動作確認。 :

インストールを行なうと、以下のコマンドが生成されます。

hsed スクリプトエディタ(簡易版)
hspcmp HSP3コードコンパイラ
hsp3cl HSP3コマンドラインランタイム
hsp3dish HSP3Dishランタイム
hsp3gp HGIMG4ランタイム

HSP3 for Linux/Raspberry Pi より

ということらしい。./hsed を実行。メモ帳っぽい何かが表示された。

sampleフォルダの中にサンプルソースが入っているらしい。test1.hsp を hsed で開いて、F5キー押して実行してみた。

全画面表示、の真ん中にあたりに、スマホの縦画面っぽいノリで、画像や直線が描画された。動いてるっぽい。結構滑らかに動いてる。コレは今後に期待大。

しかし、終了のさせ方が分からん…。ESCキーもCtrl+Cも反応しない…。仕方ないので、Pi Zero W に、Windows上のPuttyからアクセスして、killall hsp3dish でプロセスを虐殺。

OpenGL ES を使うと全画面表示になる・デスクトップ画面上に別種のレイヤーが1枚置かれる感じになるので、キー入力が取得できないと終了させることもできないわけだけど。test1.hsp 内ではキー入力を取得してるように見えるのだけどなあ…。おかしいなあ…。本当にキー入力を取得できるのか、そこを確認してみないと分からんな…。

hsedにバグがあるような気がする。 :

現状では、簡易エディタ hsed にバグがあるように見えた。
  • Fileメニューの Open を選ぶと、ダイアログに「save」と表示されてる。
  • Save と Save As の機能が逆になってる。Save を選ぶと Save As になり、Save As を選ぶと Save になる。

バグではないけど、現時点では Undo も実装されてないっぽいので、なかなか厳しい。

他のエディタを使う道は無いのかなと、vi で編集後、hspcmp でコンパイルして hsp3cl で実行しようとしたものの。hsp3cl の実行時によく分からないエラーが出て実行できない…。何故。

#2 [prog] Microsoft Silverlightって今どうなってるんだろう

「Microsoft Small Basic が9周年!」てな記事がアップされてる、てな話を見かけたわけで。

_9th Anniversary of Small Basic - Small Basic
_Microsoft、「Windows 10 Fall Creators Update」での日本語入力システムの変更点を紹介 ほか - ダイジェストニュース - 窓の杜

件の記事内の「This program ID is SFF730-1.」のところをクリックすると、別ページが開いて、Small Basic で書かれた該当プログラムをブラウザ上で実行できる…はずなのだけど。

しかし、Firefox、Google Chrome、Microsoft Edge 上では「Microsoft Silverlight インストール」と表示されるだけで、プログラムの実行結果は表示されない。更に、該当バナーをクリックしてインストーラをDLして実行しても、相変わらず「Microsoft Silverlight インストール」としか表示されないわけで。

と言うのも、今時のブラウザはセキュリティの問題でプラグインを動かさない仕様になっているからで…。なので、Microsoft Silverlight を使った何かしらを実行したいなら、プラグインが動かせる状態のままになっている、IE(インターネットエクスプローラー)で開くしかないという。

Microsoft Silverlight って、一体何だったんだろうなあ…。Microsoft Edge 上ですら動かせないあたりが、なんというか…。いやまあ、切り捨てるとは言われてたけど…。

_マイクロソフト、新ブラウザ「Edge」で「Silverlight」をサポートせず - CNET Japan

Small Basic も一体何だったんだろう、と…。フツーに考えたら、Silverlight じゃなくて HTML5 + JavaScript で動かす形で書き出しができる、そんな仕様に変わってないとアレじゃないかなと。だけど、結構前からコレと言った変化が見られない。開発ペースが止まってるというか。

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

犬の散歩のついでに某所まで行ってきた。

brother MFC-J6970CDW からFAX送信ができない不具合を解決できないか、と、brotherが公開してる _アンインストールツール を実行してドライバをアンインストールしてから、ドライバを再インストールしよう…としたのだけど。

アンインストールツールが10分以上何かの処理をし続けてるというか、進捗バーが動きっぱなしで、終わる気配が見えず。HDDのアクセスLEDは点滅してるし、タスクマネージャで見ると該当プロセスのCPU使用率が変化してるので、フリーズしてるわけではなさそうだけど。

仕方なく、処理が終わったらOSを再起動してドライバを再インストールしてほしい、とお願いして帰宅することに。犬を待たせるわけにもいかんので…。

2017/10/24(火) [n年前の日記]

#1 [raspberrypi][ubuntu] HSP3.5を Ubuntu 16.04上で試用

HSP3.5を Raspberry Pi上で動かしてみた際、キー入力が取得できてる気配が無かったのだけど。同じことを Ubuntu Linux上でやったらどうなるのか気になったので、試してみようかと。環境は VMware + Ubuntu 16.04 LTS。

以下の動画がかなり参考になった。ありがたや。

_Linux(Ubuntu)でHSPを動かしてみよう - YouTube

インストール手順。 :

ビルドに必要なパッケージをインストールする。OpenGL ES, SDL1.2, SDL_image1.2, SDL_mixer1.2, gtk+-2が必要になるらしい。
sudo aptitude install libgles2-mesa-dev
sudo aptitude install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev
sudo aptitude install libgtk2.0-dev

HSP3.5のソースをDLして解凍。
mkdir ~/hsp
cd ~/hsp
wget http://www.onionsoft.net/hsp/file/hsplinux35.tgz
tar zxvf hsplinux35.tgz
cd hsplinux35

makeする。
make

これまたエラー。何故。

Raspberry Piの時と同様に、make clean をしてから make してみたら通った。
make clean
make

動作確認。 :

簡易エディタ head を起動して動作確認。
./head
ソースを書いてF5キーを押すと実行される。

ちなみに、Raspberry Pi上で動かした場合と同様に、Fileメニュー関係にバグがあるように見えた。
  • Open を選ぶと、「save」と書かれたダイアログが表示される。
  • Save と Save As が逆。

Linux版はキー入力を取得できてるっぽい。 :

Ubuntu上で sample/test1.hsp を動かしたところ、ESCキーを押したら終了してくれた。

Raspberry Pi上では、同じソースを動かしても終了できないのだけど…。どうやら Linux上で動かす分には、キー入力が取得できるようだなと。そして、Raspberry Pi上ではキー入力を取得できない模様。

ちなみに、キー入力を判別してる部分は以下。
stick key,15
if key&128 : end

_HSPリファレンス : HSPシステム制御
_暁のHSP講座 ★第16章★

「stick 変数, 非トリガータイプキー指定」で、変数にキー入力の状態が入る。ESCキーが押されると128が入るので、その次の行の if key & 128 が真になって、end(= プログラムの終了)が呼ばれるはずで。

getkey という命令でも、キーの状態をチェックできる。
getkey flag,27
if flag = 1 : end
「getkey 変数,キーコード」で、そのキーが押されてたら1が、押されてなかったら0が、変数に入る。次の行で、キーが押されてたら、つまり変数の値が1なら、end(プログラムの終了)が呼ばれるはず。

#2 [raspberrypi] HSPがRaspberry Pi Zero系上で動くことに期待

どうしてHSPに期待してるかというと…。Raspberry Pi Zero系上でもそれなりに滑らかに動いてくれて、かつ、高級言語(っぽい何か)から扱えるゲーム制作ライブラリの類が現状では存在してないからで。 *1

こういう状況なので、HSP が Raspberry Pi Zero系上で、OpenGL ES を使ってそこそこぬるぬるの描画速度で動いてくれるなら、例えば2Dアクションゲームの類を作りたいとなった際には唯一の選択肢になりそうだなと。故に、HSPの今後に期待してるという…。

いや、Cで書けばアレだけど、お子さん達にいきなりCを書かせるのかよ、って言う。せめて Python とか Ruby とか、百歩譲って HSP とか、そのあたりから始めるほうが、と思うんだけど…。

まあ、そもそも、Raspberry Piシリーズって、本当にお子さん達に買い与えられているのだろうか、触って喜んでるのはおじさんばかりじゃないの、てな不安もありますが。実態はどうなってるんだろう。 *2
*1: ブラウザ + JavaScript は、子供さんが作ったものを全世界に公開してドヤ顔できるあたり、モチベーションの維持という面では大変魅力的なのだけど…。
*2: 人によっては、「こんな低スペックなPCを渡してプログラミング教育なんて、ある意味児童虐待」と言い出しかねない気配も…。「PC初心者にこそ、それなりのスペックを」という意見にも一理あるというか。

#3 [xyzzy] xyzzyのneinstallerが動作しなくて悩んだり

Windows10 x64 + xyzzy 0.2.2.256 で、 _netinstaller - 世界の仕組み研究所 - アットウィキ の packages.l を登録しようとしたのですが、「URL解析不能」てなエラーが出るのです。何故。

もしかして、xyzzy は、https のURLにアクセスできないのだろうか…。

だとしたら…。
https://www7.atwiki.jp/knenet?cmd=upload&act=open&pageid=62&file=packages.l
http://www7.atwiki.jp/knenet?cmd=upload&act=open&pageid=62&file=packages.l
に変えて追加しようとしてみたり。追加は、netinstaller が起動した状態で、aキー。

すると今度は、URL解析不能とは言ってこないものの、301がどうのこうのとエラーが出る。

_HTTPステータスコード - Wikipedia
301 Moved Permanently

恒久的に移動した。リクエストしたリソースが恒久的に移動されているときに返される。Location:ヘッダに移動先のURLが示されている。

xyzzy って、リダイレクトには対応してないってことかな…。

昨今、あちこちのサイトが http から https に変わってるけど。こういうことが起きるとなると、困るなあ…。非常に困る…。今まで使えてたアレコレが使えなくなるではないか…。

#4 [xyzzy] xyzzyにhsp-modeを追加してみたり

ググったら xyzz 用の hsp-mode を公開されてる方がいらっしゃったので使わせてもらったり。ありがたや。

_hsp-mode - 世界の仕組み研究所 - アットウィキ
_netinstaller - 世界の仕組み研究所 - アットウィキ
_Windows用フリーウェア2 - cHspComp

netinstallerでインストールしようとしたが、エラーが出てインストールできなかった。仕方ないので、hsp-mode002.tar.gz を別途ダウンロード・解凍して、手作業でインストールした。

解凍すると、etc , site-lisp フォルダが出てくる。
~/.xyzzy に以下を追加。環境に合わせて、HSP3.5インストール場所の指定を変更する必要有り。
;; ----------------------------------------
;; hsp-mode
(require "hsp-mode")
(pushnew '("\\.hsp$" . hsp-mode) *auto-mode-alist*)
(setq hsp-mode-user-file "~/etc/hsp-mode-user.l")
(setq *hsp-root* "HSP3.5インストールフォルダ")
;; 例 : (setq *hsp-root* "C:/Prog/hsp35")

~/etc/hsp-mode-user.l を編集。自分の場合、F9 , C-F9 , S-F9 あたりを別のアレコレで使ってるのでコメントアウトした。どうせメニューに「HSP(P)」が追加されて、そちらを経由して利用できるので問題無し。

~/site-lisp/hsp-mode.l をバイトコンパイル。M-x byte-compile-file と打って、~/site-lisp/hsp-mode.l を指定。

cHspComp を、 _Windows用フリーウェア2 - cHspComp から入手。

chspcomp.zip をDLして解凍すると色々ファイルが入ってるので、以下の2つのファイルを、HSP3.5インストールフォルダにコピーしておく。
chspcomp.exe
chspcomp.ico

xyzzy を再起動すれば、hspファイルを開いた際に色付け表示されるようになっている、はず。

編集後、F5キーでコンパイル+実行ができる。

#5 [xyzzy] xyzzyってモード別にファンクションキーラベルを変更できないのだろうか

xyzzy 上で hsp-mode が動いてる際、ファンクションキーの F5等に実行機能が割り当てられるけど、ファンクションキーのラベルは変更されないあたりが気になったわけで。

フツーは、以下のような設定で、ラベルを指定できるわけだけど…。
(set-function-bar-label #\F5 "コンパイル+実行")

コレをやっちゃうと、どのモードでも、その表示になってしまうわけで。

機能の割り当て自体は、モード別に指定できる。例えば以下の場合だと、hsp-mode の時だけこの割り当てにするよ、と指定できる。
(define-key *hsp-mode-map* #\F5 'hsp-compile-and-run) ; コンパイル+実行

しかし、ラベル表示は追随しない…。不便だ…。

まあ、そもそも xyzzy のような Emacs系エディタを使う人は、ファンクションキーを極力使わない傾向があって困ってないのかもしれないけれど。Emacsってファンクションキーのラベル表示すら無いもんな…。

#6 [nitijyou] 某所からPC-FAXの件で連絡有り

某所からメールで連絡有り。brother製インクジェット複合機、brother MFC-J6970CDW のドライバを削除してくれるはずのアンインストールツールを一晩中動かしておいたけど、朝になっても処理が完了していない上に、キャンセルを押しても終了してくれない、という相談が。昨日アンインストールツールを実行した際に妙に時間がかかってたから「もしやコイツ…まさか…」とは思ってたけど。brotherさん、やってくれるぜ…。どんなツールやねん…。

とりあえずOS再起動をしちゃっていいです、と連絡。OSが終了する際にプロセスを強制終了してくれるだろう…。

その後、brother Utility → ツール → アンインストールで、ドライバの削除を試みてもらったり。そちらの操作なら、ドライバがアンインストールできたらしい。その状態から、フルパッケージ版のドライバを再インストールしてもらった。

が、しかし、相変わらずPCからFAX送信できないとの話で。電話番号を入力するウインドウが、一瞬表示されてすぐに消えてしまうという。正規の手順で、ドライバのアンインストール・再インストールをしても解決せず、か…。

これはもう brother に問い合わせするしかない、という話に。メールで問い合わせを受け付けてるようではあるけど、返事は来るのだろうか…。

不思議なことに、ハードウェア構成も同じだし、OSも同じ Windows8.1 x64 の別のPCでは、問題が起きてないわけで。Windows Update でおかしくなるなら、そっちでも同じ症状が出るはずだよなあ…。どこに原因があるのやら。

2017/10/25(水) [n年前の日記]

#1 [raspberrypi][ruby][gosu] Raspberry Pi Zero W に Ruby + gosu をインストールしようとしてハマっていたり

_Hello - Gosu を眺めたら、「powered by OpenGL or OpenGL ES」というテキストを見かけたわけで。

今までてっきり、gosu は OpenGL にしか対応してないと思い込んでたけど、OpenGL ES にも対応していたのか…。であれば、ひょっとして、Raspberry Pi Zero W 上でもそこそこの速度で動くのではあるまいか。

てなわけで、Pi Zero W 上で gosu がインストールできないか試していたのだけど。これがなかなか上手く行かず。何度試しても、gosu-example の画面が出てこない…。真っ暗なまま…。

未だに成功してないけど、試してみた作業についてメモ。ちなみに環境は、Raspberry Pi Zero W + raspbian stretch。

OpenGLを有効にすればインストールできなくもない。 :

Pi Zero W 上でも、GL driver を有効にして、Pi2 / Pi3 と同様のインストール手順を踏めば、一応は gosu をインストールできるし、gosu-example の画面も表示されることは確認できた。

_Getting Started on Linux - gosu/gosu Wiki

sudo apt install build-essential libsdl2-dev libsdl2-ttf-dev libpango1.0-dev libgl1-mesa-dev libopenal-dev libsndfile-dev libmpg123-dev libgmp-dev
sudo apt install ruby-dev

sudo gem install gosu --pre

sudo apt install ruby-rmagick libmagickcore-dev libmagickwand-dev pulseaudio freeglut3 freeglut3-dev
sudo gem install chipmunk opengl glu glut rmagick

sudo gem install gosu-examples
gosu-examples

ただ、Zero W 上では、良くて20FPS前後しか出ない。これでは話にならない。Pi3 上なら、もうちょっと滑らかに動いたのだけどなあ…。

OpenGLを有効にしないでインストールしたい。 :

Pi Zero系は、公式にはOpenGLをサポートしてないので、できれば OpenGL を使わない形でインストールしたい。以下のページに従ってインストールすれば動くのかな、と思ったのだけど…上手く行かない…。

_Getting Started on Raspbian (Raspberry Pi) - gosu/gosu Wiki

とりあえず、失敗事例としてメモ。

ビルドに必要なパッケージをインストール。
sudo apt-get install ruby ruby-dev build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libasound2-dev
「注意、'libsndfile-dev' の代わりに 'libsndfile1-dev' を選択します」と言われてしまったが、一応インストールできた。

後になって分かったけど、どうやら libmpg123-dev も必要らしい。
sudo apt-get install libmpg123-dev

SDL2をビルド。失敗事例その1。 :

SDL2 をビルドする。まずは、SDL2関係を入れておくためのディレクトリを作っておいて。
mkdir ~/Package
cd ~/Package
mkdir gosu
cd gosu

SDL2関係のソースをDL。現行版は 2.0.7 だった。また、SDL_ttf 2.0 もDLしておく。

_Simple DirectMedia Layer - SDL version 2.0.7 (stable)
_SDL_ttf 2.0

wget https://www.libsdl.org/release/SDL2-2.0.7.tar.gz
wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz

SDL2のソースを解凍してmakeする。1時間以上かかる、と件の説明ページには書かれてたけど、Zero W では30分ぐらいで済んだ。
tar zxvf SDL2-2.0.7.tar.gz
cd SDL2-2.0.7/
./configure --prefix=/opt/SDL2 --disable-video-x11
make
  • configure に指定してる --prefix=/opt/SDL2 は「ビルド後のファイルのインストール場所を /opt/SDL2 にしろ」てな指定。この指定が無い場合、 /usr/local/ 以下にビルドしたファイルがインストールされる模様。
  • --disable-video-x11 は、動作に X を必要としない設定にしろ、という指定じゃないかな。たぶん。

ビルドできたようなら root権限でインストール。
sudo make install

SDL_ttfのソースも解凍してmakeする。これは1分もかからなかった。
cd ..
tar zxvf SDL2_ttf-2.0.14.tar.gz
cd SDL2_ttf-2.0.14
./configure --prefix=/opt/SDL2
make
sudo make install

何か言ってきた。「/opt/SDL2/lib にインストールしたぞ」「共有ライブラリとして使えるようにするには以下を参考にしろ」と言ってるのかな。
----------------------------------------------------------------------
Libraries have been installed in:
   /opt/SDL2/lib
If you ever happen to want to link against installed libraries in a given directory,
LIBDIR, you must either use libtool,
and specify the full pathname of the library,
or use the `-LLIBDIR' flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for more information,
such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

これでSDL2関係はインストールできたはず。なのだけど…。

gosuをビルド。失敗事例。 :

gosu をインストール、というかビルド。
sudo gem install gosu -- --with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags=\"/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a\"

エラーが出た。
$ sudo gem install gosu -- --with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags=\"/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a\"

Fetching: gosu-0.12.1.gem (100%)
Building native extensions with: '--with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags="/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a"'
This could take a while...
ERROR:  Error installing gosu:
        ERROR: Failed to build gem native extension.
    current directory: /var/lib/gems/2.3.0/gems/gosu-0.12.1/ext/gosu
/usr/bin/ruby2.3 -r ./siteconf20171024-11477-11cwjm7.rb extconf.rb --with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags="/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a"
The Gosu gem requires some libraries to be installed system-wide.
See the following site for a list:
https://github.com/gosu/gosu/wiki/Getting-Started-on-Linux
checking for TTF_RenderUTF8_Blended() in -lSDL2_ttf... no
checking for main() in -lopenal... yes
checking for AL/al.h... yes
creating Makefile
To see why this extension failed to compile, please check the mkmf.log which can be found here:
  /var/lib/gems/2.3.0/extensions/arm-linux/2.3.0/gosu-0.12.1/mkmf.log
current directory: /var/lib/gems/2.3.0/gems/gosu-0.12.1/ext/gosu
make "DESTDIR=" clean
current directory: /var/lib/gems/2.3.0/gems/gosu-0.12.1/ext/gosu
make "DESTDIR="
compiling ../../src/Audio.cpp
In file included from ../../src/Audio.cpp:24:0:
../../src/MPEGFile.hpp:9:20: fatal error: mpg123.h: そのようなファイルやディレクトリはありません
#include <mpg123.h>
                    ^
compilation terminated.
Makefile:231: ターゲット 'Audio.o' のレシピで失敗しました
make: *** [Audio.o] エラー 1
make failed, exit code 2
Gem files will remain installed in /var/lib/gems/2.3.0/gems/gosu-0.12.1 for inspection.
Results logged to /var/lib/gems/2.3.0/extensions/arm-linux/2.3.0/gosu-0.12.1/gem_make.out

ひょっとすると、SDL2をビルドする際の configure のオプションが違うのかもしれない。 _Getting Started on Raspbian (Raspberry Pi) - gosu/gosu Wiki には、
If you are already using Raspbian Jessie,
try this variant of the ./configure command instead:
とか書いてあるし…。オプションを変えて、SDL2をビルドし直してみる。
cd ..
cd SDL2-2.0.7
make clean
./configure --host=armv7l-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
make
sudo make install
  • --host=armv7l-raspberry-linux-gnueabihf は、Pi2 / Pi3 の場合に渡すオプションだった。この時点では意味が分からず指定しちゃってる。
  • Pi1 や Zero 系は ARMv6 なので、--host=arm-raspberry-linux-gnueabihf を指定するのだろうか? それとも、そこは何も指定しなくてもいいのだろうか?
  • --disable-* で色々な機能を無効化してる。--disable-video-opengl で OpenGL を無効にすることで、OpenGL ES が使われるようになる、のかな。自信無し。

この状態で、もう一度 gosu をインストール。…さっきと同じエラーが出た。

エラーメッセージには、「mpg123.h が見つからねえよ」と書いてあるようにも見える。ググってみたら、以下のやり取りに遭遇。「mpg123.h が欲しいなら libmpg123-dev を apt でインストールしてみろや」と言ってるのかな。

_Play mp3 on raspberry with mpg123 and c++ - Stack Overflow

libmpg123-dev とやらをインストールしてみる。
sudo apt install ilbmpg123-dev

もう一度 gosu をインストール。15分以上時間がかかったけど、ビルドが通ってインストールできたっぽい。

ということは、libmpg123-dev が足りてなかっただけか…。であれば、最初の configure オプションで SDL2 を make し直して、gosu もアンインストール・再インストールしてみよう…。

gosuをアンインストール。
sudo gem uninstall gosu

その後、SDL2を、オプションを変えてビルドし直して、インストール。gosu も再インストール。

gosu-examples をインストールして動作確認。
sudo gem install gosu-examples
gosu-examples --fullscreen

画面が出ない…。すると、たくさんオプションがついてるほうの configure で SDL2 をビルドしないとダメってことかな。

たくさんオプションがついてるほうで試してみたけど、やっぱり画面が出ない。うーん。

gosuに必要なgemをインストール。 :

そういえば、gosu-examples を実行した際、「○○がねえよ」と怒られた。他にも、rmagick、chipmunk、gl 等が必要らしい。そのあたりも全部インストールしておく。
sudo apt install ruby-rmagick libmagickcore-dev libmagickwand-dev pulseaudio freeglut3 freeglut3-dev

sudo gem install chipmunk opengl glu glut rmagick

SDL2をまたビルド。 :

以下のページで、Raspberry Pi に SDL2 をインストールする方法について説明されてた。今度は、この内容に従ってビルドしてみよう…。

_Raspberry Pi - Building SDL 2 on Raspbian | Solarian Programmer

sudo apt-get install build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libasound2-dev libtiff5-dev libwebp-dev automake
前述のページの説明では libjpeg8-dev もインストールしてるけど、試してみたら、libjpeg8-dev が、libjpeg-dev、libjpeg62-turbo-dev と競合すると言ってきたので、そこだけは除外した。

make clean を実行してビルドしたファイルを消去してから、configure を実行。
cd ~/Package/gosu/SDL2-2.0.7
make clean
mkdir build && cd build
../configure --prefix=/opt/SDL2 --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
件のページによると、「--host=armv7l-raspberry-linux-gnueabihf の指定は Raspberry Pi2用」と書いてあるな…。そこだけ除外しておけばいいのかな?

もう一度 make して、sudo make install をする。
make
sudo make install

gosu をアンインストールして、再インストール。
sudo gem uninstall gosu
sudo gem install gosu -- --with-cflags=-I/opt/SDL2/include/SDL2 --with-cppflags=-I/opt/SDL2/include/SDL2 --with-ldflags=\"/opt/SDL2/lib/libSDL2.a /opt/SDL2/lib/libSDL2_ttf.a\"

gosu-example を実行してみた。ダメだった。

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

SDL_image 2.0 等も必要になるのだろうか。そっちもインストールしてみるか…。

_SDL_image 2.0
_SDL_mixer 2.0

cd ~/Package/gosu
wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.2.tar.gz
wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.2.zip
tar zxvf SDL2_image-2.0.2.tar.gz
cd SDL2_image-2.0.2/
mkdir build
cd build
../configure --prefix=/opt/SDL2
make
sudo make install
cd ../../SDL2_ttf-2.0.14
../configure --prefix=/opt/SDL2
make
sudo make install

SDL2インストールの別記事を参考にして作業。 :

別記事も見かけたので、そちらに従ってインストールもしてみたり。この場合、/usr/local/ にインストールされる模様。

_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob

sudo apt-get install libfontconfig-dev qt5-default automake mercurial libtool libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libtiff5-dev libwebp-dev libasound2-dev libaudio-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxss-dev libesd0-dev freeglut3-dev libmodplug-dev libsmpeg-dev libgmp-dev

この例では、hg (Mercurial) を使って、SDL2 の最新版のソースをクローンしてる模様。
hg clone http://hg.libsdl.org/SDL
cd SDL

ビルドは以下。この例では、--host=arm-raspberry-linux-gnueabihf を指定してるな…。
./autogen.sh
./configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-opengl --host=arm-raspberry-linux-gnueabihf
makesudo make install
sudo make install

他の SDL関係をビルドしてインストール。
cd
cd code
wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.2.tar.gz
wget https://www.libsdl.org/projects/smpeg/release/smpeg2-2.0.0.tar.gz
wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.2.tar.gz
wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz
wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz
tar zxvf SDL2_image-2.0.2.tar.gz
tar zxvf smpeg2-2.0.0.tar.gz
tar zxvf SDL2_mixer-2.0.2.tar.gz
tar zxvf SDL2_net-2.0.1.tar.gz
tar zxvf SDL2_ttf-2.0.14.tar.gz
cd SDL2_image-2.0.1
./autogen.sh
./configure
make
sudo make install
cd ..
cd SDL2_ttf-2.0.14
./autogen.sh
./configure
make
sudo make install
cd ..

これでもダメだった。

ビルドしてインストールしたアレコレをアンインストール。 :

ビルドしてインストールしてしまったアレコレをアンインストールする時は、以下でいいらしい。たぶん。自信無いけど。
sudo make uninstall

ちなみに、make する際に作られたアレコレは以下で削除できる。のかな。たぶん。
make clean

libsdl2-dev等のパッケージを再インストール。 :

一応メモ。自分でSDL2 をビルドせずに、公式リポジトリから再インストールする際は以下。
sudo aptitude reinstall libsdl2-2.0-0 libsdl2-dev
sudo aptitude reinstall libsdl2-image-2.0-0 libsdl2-image-dev
sudo aptitude reinstall libsdl2-mixer-2.0-0 libsdl2-mixer-dev
sudo aptitude reinstall libsdl2-ttf-2.0-0 libsdl2-ttf-dev libsdl-ttf2.0-0 libsdl-ttf2.0-dev

Raspberry Pi上でgosuを利用する際の注意点。 :

まだ動かせてないわけだけど、説明ページでは、以下の注意事項が書いてあるように見えた。一応メモ。
  • 「キー入力が端末に打ち込まれていくので危ないよ。知らない間にヤバイ系のコマンドを実行しちゃうかもしれないよ」
  • 「Raspberry Pi上で gosu を使うとフルスクリーンでしか描画できないよ」
前者はヤバイな…。一応、端末への入力を無視してくれるツールも存在するらしいけど。

_inoremap/shut-term-keys: Workaround for keystrokes leaking into terminal on Raspbian

関係ありそうなページをメモ。 :

要するに、Pi Zero上での SDL2 のビルドとインストールが鬼門なのだろうけど…。

_Golang と SDL2 でゲームを作る - KaoriYa
_Getting Started on Raspbian (Raspberry Pi) - gosu/gosu Wiki
_Getting Started on Linux - gosu/gosu Wiki
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
_Raspberry Pi - Building SDL 2 on Raspbian | Solarian Programmer
_Problems using SDL2 on raspberry pi without X11 running - SDL Development - Simple Directmedia Layer
_SDL2 version 2.0.4 package availability - Raspberry Pi Forums
_Installing SDL2 on Raspbian Jessie
_[SOLVED]Building/Installing SDL2 on RaspBerryPi - SDL Development - Simple Directmedia Layer
_Play mp3 on raspberry with mpg123 and c++ - Stack Overflow
_SDL2 hardware acceleration - Raspberry Pi Forums

「SDL_ttf 2.0 は OpenGLにしか対応してなくて、OpenGL ES には非対応」という話が気になる。そのせいで画面が出なかったのだろうか…?

しかし、gosu の起動時に、EGL display が get できなかった、というエラーメッセージが表示されてた時もあったし…。そもそも EGL が使えていない気配も…。

#2 [raspberrypi][python][pygame] Raspberry Pi Zero W上でpygameを動かしてみたけど

以前作成した、640x480 のウインドウ内で BG x 2 + スプライト160枚を pygame で描画するスクリプトを、Raspberry Pi Zero W + raspbian stretch 上で動かしてみたけれど。

8FPSしか出なかった…。

スプライトを非表示にしても17fpsとかそんな感じなので厳しいなと。やはり Zero系の非力なCPUで、ソフトウェア描画なんてするもんじゃない、ということかなと。

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

#1 [raspberrypi][golang] Raspberry Pi Zero WにSDL2 + golang + go-sdl2をインストール

以下のページで、golang(Go言語)から SDL2 を扱える、go-sdl2 なるライブラリがあると知ったわけで。

_Golang と SDL2 でゲームを作る - KaoriYa

これを動かしてみて、すんなり動くようであれば、少なくともSDL2はちゃんとビルドされてることが分かるかもしれないなと。

ということで、Raspberry Pi Zero W + raspbian stretch 上でインストールを試みたり。

前提条件。libSDL2*.soの在り処。 :

標準状態というか、公式リポジトリから libsdl2-dev をインストールすると…。
  • /usr/include/SDL2/ 以下に *.h が、
  • /usr/lib/arm-linux-gnueabihf/ 以下に libSDL2*.so が、
それぞれ入ってる状態になる。

_Debian -- stretch の libsdl2-dev パッケージに関する詳細
_Debian -- パッケージのファイル一覧: libsdl2-dev/stretch/armhf
$ cd /usr/lib/arm-linux-gnueabihf/
$ ll *SDL2*
lrwxrwxrwx 1 root root      20 12月 28  2016 libSDL2-2.0.so -> libSDL2-2.0.so.0.4.1
lrwxrwxrwx 1 root root      20 12月 28  2016 libSDL2-2.0.so.0 -> libSDL2-2.0.so.0.4.1
-rw-r--r-- 1 root root 1019424 12月 28  2016 libSDL2-2.0.so.0.4.1
-rw-r--r-- 1 root root 1512430 12月 28  2016 libSDL2.a
lrwxrwxrwx 1 root root      20 12月 28  2016 libSDL2.so -> libSDL2-2.0.so.0.4.1
lrwxrwxrwx 1 root root      26  1月 27  2016 libSDL2_image-2.0.so -> libSDL2_image-2.0.so.0.0.1
lrwxrwxrwx 1 root root      26  1月 27  2016 libSDL2_image-2.0.so.0 -> libSDL2_image-2.0.so.0.0.1
-rw-r--r-- 1 root root   67316  1月 27  2016 libSDL2_image-2.0.so.0.0.1
-rw-r--r-- 1 root root   83874  1月 27  2016 libSDL2_image.a
lrwxrwxrwx 1 root root      26  1月 27  2016 libSDL2_image.so -> libSDL2_image-2.0.so.0.0.1
lrwxrwxrwx 1 root root      26  2月  2  2016 libSDL2_mixer-2.0.so -> libSDL2_mixer-2.0.so.0.0.1
lrwxrwxrwx 1 root root      26  2月  2  2016 libSDL2_mixer-2.0.so.0 -> libSDL2_mixer-2.0.so.0.0.1
-rw-r--r-- 1 root root  168932  2月  2  2016 libSDL2_mixer-2.0.so.0.0.1
-rw-r--r-- 1 root root  221600  2月  2  2016 libSDL2_mixer.a
lrwxrwxrwx 1 root root      26  2月  2  2016 libSDL2_mixer.so -> libSDL2_mixer-2.0.so.0.0.1
lrwxrwxrwx 1 root root      24  2月  2  2016 libSDL2_net-2.0.so -> libSDL2_net-2.0.so.0.0.1
lrwxrwxrwx 1 root root      24  2月  2  2016 libSDL2_net-2.0.so.0 -> libSDL2_net-2.0.so.0.0.1
-rw-r--r-- 1 root root   13828  2月  2  2016 libSDL2_net-2.0.so.0.0.1
-rw-r--r-- 1 root root   14674  2月  2  2016 libSDL2_net.a
lrwxrwxrwx 1 root root      24  2月  2  2016 libSDL2_net.so -> libSDL2_net-2.0.so.0.0.1
-rw-r--r-- 1 root root  220602 12月 28  2016 libSDL2_test.a
lrwxrwxrwx 1 root root      20  2月  8  2016 libSDL2_ttf-2.0.so -> libSDL2_ttf-2.0.so.0
lrwxrwxrwx 1 root root      25  2月  8  2016 libSDL2_ttf-2.0.so.0 -> libSDL2_ttf-2.0.so.0.14.0
-rw-r--r-- 1 root root   26124  2月  8  2016 libSDL2_ttf-2.0.so.0.14.0
-rw-r--r-- 1 root root   23446  2月  8  2016 libSDL2_ttf.a
lrwxrwxrwx 1 root root      25  2月  8  2016 libSDL2_ttf.so -> libSDL2_ttf-2.0.so.0.14.0
-rw-r--r-- 1 root root     936 12月 28  2016 libSDL2main.a

独自にビルドした *.so を使うということは、上記の場所ではなく、別の場所にある *.so を呼び出せるようにする、ということ。

SDL2のビルドに必要なパッケージをインストール。 :

以下を参考にしてSDL2をビルドする。

_Golang と SDL2 でゲームを作る - KaoriYa
_Hardware Accelerated SDL 2 on Raspberry Pi | Life, The Universe and ... Everything!

公式リポジトリ版の libsdl2-dev をアンインストール。
sudo apt-get remove -y --force-yes libsdl2-dev
sudo apt-get autoremove -y

SDL2のビルドに必要になりそうなパッケージをインストール。
sudo apt install build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile1-dev libudev-dev libasound2-dev libjpeg-dev libtiff5-dev libwebp-dev libaudio-dev libdbus-1-dev automake libfontconfig-dev qt5-default mercurial libtool libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxss-dev libesd0-dev freeglut3-dev libmodplug-dev libsmpeg-dev libmpg123-dev

また、以下を眺めて、必要になりそうなパッケージがあったら追加インストールする。

_Debian -- stretch の libsdl2-dev パッケージに関する詳細
_Debian -- stretch の libsdl2-image-2.0-0 パッケージに関する詳細 _Debian -- stretch の libsdl2-ttf-2.0-0 パッケージに関する詳細

SDL2のソースを取得。 :

mkdir ~/sdl2
cd ~/sdl2

wget https://www.libsdl.org/release/SDL2-2.0.7.tar.gz
wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.2.tar.gz
wget https://www.libsdl.org/projects/smpeg/release/smpeg2-2.0.0.tar.gz
wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.2.tar.gz
wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz
wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz

_Simple DirectMedia Layer - SDL version 2.0.7 (stable)
_SDL_image 2.0
_smpeg2
_SDL_mixer 2.0
_SDL_net 2.0
_SDL_ttf 2.0

SDL2をビルド。 :

SDL2のソースを解凍して、configure して、make して、sudo make install する。
tar zxvf SDL2-2.0.7.tar.gz
cd SDL2-2.0.7
mkdir build
cd build

configure は、以下のようなオプションをつけるらしいけど…。
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl

Pi2 の場合は、configure に「--host=armv7l-raspberry-linux-gnueabihf」を追加するらしい。

Pi1 や Zero は…。巷のページを見ると何もつけなくてもいいのかな。どうなんだろ。「SDL 2.0.4 は --host=arm-raspberry-linux-gnueabihf を指定しろ」と書いてある事例も見かけたけど…。

_PiLove - LOVE on RaspberryPI

とりあえず指定しておくか…。
../configure --host=arm-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl

configure をすると、最後のあたりで以下のような表示になった。
SDL2 Configure Summary:
Building Shared Libraries
Building Static Libraries
Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly
Assembly Math   :
Audio drivers   : disk dummy oss alsa(dynamic) nas(dynamic)
Video drivers   : dummy rpi opengl_es1 opengl_es2 vulkan
Input drivers   : linuxev linuxkd
Using libsamplerate : NO
Using libudev       : YES
Using dbus          : NO
Using ime           : YES
Using ibus          : NO
Using fcitx         : NO
Video drivers に、rpi とか opengl_es2 があるから…これで合ってるのかな…?

makeしてインストールする。
make
sudo make install
  • /usr/local/include/SDL2/ 以下に *.h が、
  • /usr/local/lib/ 以下に libSDL2*.so が、
それぞれコピーされた。

他のSDL2関係もビルド。 :

SDL2_image, smpeg2. SDL2_mixer, SDL2_ttf もビルドする。
tar zxvf SDL2_image-2.0.2.tar.gz
cd SDL2_image-2.0.2 && mkdir build && cd build
../configure --host=arm-raspberry-linux-gnueabihf
make
sudo make install

インストール時、以下のようなメッセージが表示された。
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib
If you ever happen to want to link against installed libraries in a given directory,
LIBDIR, you must either use ibtool,
and specify the full pathname of the library,
or use the `-LLIBDIR' flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable during linking
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
「/usr/local/lib にインストールされたよ」と言ってるのだな…。

smpeg2をビルドしてインストール。
tar zxvf smpeg2-2.0.0.tar.gz
cd smpeg2-2.0.0 && mkdir build && cd build
../configure --host=arm-raspberry-linux-gnueabihf
make

エラーが出る。
$ make
/bin/bash ./libtool  --tag=CXX   --mode=compile g++ -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"smpeg2\" -DVERSION=\"2.0.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I..     -g -O2 -D_REENTRANT -I/usr/local/include/SDL2 -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -DTHREADED_AUDIO -DNDEBUG -Wall -I.. -DNOCONTROLS -I.. -I../audio -I../video -fno-exceptions -fno-rtti -MT hufftable.lo -MD -MP -MF .deps/hufftable.Tpo -c -o hufftable.lo `test -f 'audio/hufftable.cpp' || echo '../'`audio/hufftable.cpp
libtool: compile:  g++ -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"smpeg2\" -DVERSION=\"2.0.0\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I.. -g -O2 -D_REENTRANT -I/usr/local/include/SDL2 -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -DTHREADED_AUDIO -DNDEBUG -Wall -I.. -DNOCONTROLS -I.. -I../audio -I../video -fno-exceptions -fno-rtti -MT hufftable.lo -MD -MP -MF .deps/hufftable.Tpo -c ../audio/hufftable.cpp  -fPIC -DPIC -o .libs/hufftable.o
../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing]
};
^
../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing]
../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing]
../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing]
../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing]
../audio/hufftable.cpp:587:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘unsigned int’ inside { } [-Wnarrowing]
Makefile:778: ターゲット 'hufftable.lo' のレシピで失敗しました
make: *** [hufftable.lo] エラー 1

解決策を探したら、以下に、参考になりそうな patch があった。

_FS#51926 : [smpeg][smpeg2] Build failed with gcc 6

参考にして以下のように修正。
--- smpeg2-2.0.0/audio/hufftable.cpp.orig	2017-10-26 05:31:28.825871428 +0900
+++ smpeg2-2.0.0/audio/hufftable.cpp	2017-10-26 05:35:28.618167063 +0900
@@ -9,6 +9,7 @@
 #include "config.h"
 #endif
 
+#include <climits>
 #include "MPEGaudio.h"
 
 static const unsigned int
@@ -550,11 +551,11 @@ htd33[ 31][2]={{ 16,  1},{  8,  1},{  4,
 
 const HUFFMANCODETABLE MPEGaudio::ht[HTN]=
 {
-  { 0, 0-1, 0-1, 0,  0, htd33},
+  { 0, UINT_MAX, UINT_MAX, 0,  0, htd33},
   { 1, 2-1, 2-1, 0,  7,htd01},
   { 2, 3-1, 3-1, 0, 17,htd02},
   { 3, 3-1, 3-1, 0, 17,htd03},
-  { 4, 0-1, 0-1, 0,  0, htd33},
+  { 4, UINT_MAX, UINT_MAX, 0,  0, htd33},
   { 5, 4-1, 4-1, 0, 31,htd05},
   { 6, 4-1, 4-1, 0, 31,htd06},
   { 7, 6-1, 6-1, 0, 71,htd07},
@@ -564,7 +565,7 @@ const HUFFMANCODETABLE MPEGaudio::ht[HTN
   {11, 8-1, 8-1, 0,127,htd11},
   {12, 8-1, 8-1, 0,127,htd12},
   {13,16-1,16-1, 0,511,htd13},
-  {14, 0-1, 0-1, 0,  0, htd33},
+  {14, UINT_MAX, UINT_MAX, 0,  0, htd33},
   {15,16-1,16-1, 0,511,htd15},
   {16,16-1,16-1, 1,511,htd16},
   {17,16-1,16-1, 2,511,htd16},
  • #include "MPEGaudio.h" の前に、#include <climits> を追加。
  • 「0-1」と書かれてる部分を、「UINT_MAX」で置き換え。

なんでエラーが出るのかなと思ったら、Debian stretch (raspbian stretch)は gcc6 が標準になったらしい。そのせいでエラーが出るっぽい。

_第5章 stretch で注意すべき点
_2016年6月28日 Debian 9 "Stretch"のコンパイラはGCC 6オンリーで:Linux Daily Topics|gihyo.jp … 技術評論社

引き続き make とインストール。
make
sudo make install
今度は通った。

SDL2_mixer をビルドしてインストール。
cd ~/sdl2
tar zxvf SDL2_mixer-2.0.2.tar.gz
cd SDL2_mixer-2.0.2 && mkdir build && cd build
../configure --host=arm-raspberry-linux-gnueabihf
make
sudo make install

SDL2_net をビルドしてインストール。
cd ~/sdl2
tar zxvf SDL2_net-2.0.1.tar.gz
cd SDL2_net-2.0.1 && mkdir build && cd build
../configure --host=arm-raspberry-linux-gnueabihf
make
sudo make install

SDL2_ttf もビルドしてインストールするのだけど、少し修正。OpenGLを使わないように修正してからビルドするのだとか。
cd ~/sdl2
tar zxvf SDL2_ttf-2.0.14.tar.gz
cd SDL2_ttf-2.0.14 && mkdir build && cd build
sed -i -e 's/have_opengl=yes/have_opengl=no/' ../configure
../configure --host=arm-raspberry-linux-gnueabihf
make
sudo make install

共有ライブラリを探す順番を変更。 :

SDL2をビルドして共有ライブラリファイルを作ったわけだけど、公式リポジトリ版のファイルが使われてしまったら困るわけで。

_Raspberry Piに最新版の各種ツール・言語・ライブラリをインストールする - Qiita

/etc/ld.so.conf を修正して、一番最初の行に /usr/local/lib を追加。これで、「最初に /usr/local/lib 以下から探すように」と設定できるはず。

キャッシュを更新。
sudo ldconfig

順番を確認。
$ ldconfig -p | grep SDL
        libSDL2_ttf-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2_ttf-2.0.so.0
        libSDL2_ttf-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2_ttf-2.0.so.0
        libSDL2_net-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2_net-2.0.so.0
        libSDL2_mixer-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2_mixer-2.0.so.0
        libSDL2_image-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2_image-2.0.so.0
        libSDL2-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2-2.0.so.0
        libSDL2-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0
        libSDL_ttf-2.0.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_ttf-2.0.so.0
        libSDL_mixer-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_mixer-1.2.so.0
        libSDL_image-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL_image-1.2.so.0
        libSDL-1.2.so.0 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libSDL-1.2.so.0
/usr/local/lib 以下の *.so のほうが先に表示されてる、ように見えるので、コレで大丈夫なのではないかな…。たぶん。おそらく。自信無し。

SDL2のバージョンを確認してみる。
$ sdl2-config --version
2.0.7
公式リポジトリの libsdl2-dev をインストールした場合は 2.0.5 と表示されるはずなので、今回ビルドしたSDL2が使われている、のだと思う。

golangをインストール。 :

SDL2 が本当にビルドできているのか確認するために、go-sdl2 を動かしてみたい。そのためには、golang(Go言語) をインストールしないといけない。ということで、インストールしてみる。

環境は、Raspberry Pi Zero W + raspbian stretch。

_Raspberry PiでGo言語を動かす | Golang | kosakalab

golang の最新版を探す。以下から入手できる。

_Downloads - The Go Programming Language

golang 現行版 1.9.1 の ARMv6版は、
https://storage.googleapis.com/golang/go1.9.1.linux-armv6l.tar.gz
にあるらしい。ディレクトリを作ってダウンロード。
mkdir ~/golang
cd ~/golang
wget https://storage.googleapis.com/golang/go1.9.1.linux-armv6l.tar.gz

解凍する。
sudo tar -C /usr/local -xzf go1.9.1.linux-armv6l.tar.gz
/usr/local 以下に、go というディレクトリが作られる。はず。

/usr/local/go/bin に PATH を通す。また、環境変数 GOPATH も指定しておく。GOPATH の場所は…。今回は ~/go というディレクトリにしておく。
vi ~/.profile
# どこかに追加
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go

ログアウトして再度ログイン。これでgoが呼びされるようになってるはず。

golangの動作確認。 :

go のバージョンを確認。
$ go version
go version go1.9.1 linux/arm
インストールされてるっぽい。

巷のサンプル等を打ち込んで動作確認。

_GolangでHello World! - Qiita

go run hello.go
go build hello.go
動いてるっぽい。

go-sdl2をインストール。 :

go-sdl2は以下で公開されてる。

_veandco/go-sdl2: SDL2 binding for Go

goを使ってインストール。~/go/以下にインストールされるはず。
go get -v github.com/veandco/go-sdl2/sdl
go get -v github.com/veandco/go-sdl2/mix
go get -v github.com/veandco/go-sdl2/img
go get -v github.com/veandco/go-sdl2/ttf
あるいは以下。
go get -v github.com/veandco/go-sdl2/{sdl,mix,img,ttf}

随分時間がかかったけどインストールできたっぽい。たぶん。

go-sdl2の動作確認。 :

以下の記事の最後のほうで紹介されてるソースを、 gosdl2hello.go というファイル名で保存して実行。

_Golang と SDL2 でゲームを作る ・ KaoriYa
go run gosdl2hello.go

赤い四角が表示されて、一定時間が経過したら自動で終了した。

ということは、go-sdl2 もインストールできてるし、ビルドしたSDL2も動いてる、ということだろうか。すると、gosu がおかしいのか…?

gopherrunを試しに動かしたり。 :

以下で公開されてる gopherrun を動かしてみたり。

_koron/gopherrun
_Golang と SDL2 でゲームを作る ・ KaoriYa
go get -v -u -d github.com/koron/gopherrun
cd ~/go/src/github.com/koron/gopherrun
go build
./gopherrun

go build の段階でエラーが出た。どうも、go-sdl2 の構成が昔と今とでは変わってるっぽい。

game.go と gopherrun.go の最初のほうの、sdl_image や sdl_mixer を指定してるあたりを以下のように修正。
import (
        "log"

        "github.com/veandco/go-sdl2/sdl"
        "github.com/veandco/go-sdl2/img"
        "github.com/veandco/go-sdl2/mix"
)
import (
        "math/rand"
        "github.com/veandco/go-sdl2/sdl"
        "github.com/veandco/go-sdl2/mix"
        "golang.org/x/image/math/fixed"
)
これで go build が通るようになった。

go build で作成された、実行形式のファイル、./gopherrun を実行。

ゲーム画面っぽい画面がちゃんと出た。スペースキーでジャンプ。ESCキーで終了(のはず)。

ただ、不具合らしきもの出てる…。
  • 音楽だかSEだかが鳴らない…。コンソールには、「ALSA lib pcm.c: ???? :(snd_pcm_recover) underrun occurred」てなメッセージが残っている。
  • 処理が遅い…。かなりガクガクしてる…。まあ、遅いのは Raspberry Pi Zero で動かしてるから、かもしれず。
  • ESCキーを押すと終了するはずが、画面は消えても処理が戻ってこない。キーボードからの入力ができなくなる。Ctrl + C も受け付けない。

とはいえ、画面が出たのはありがたい。

画面が出た・画像が表示されたということは、SDL2関係はビルドできてる可能性が高いのだろう。となると、やはり gosu がおかしい…。

#2 [raspberrypi][linux] Raspberry Pi Zero W上にtmuxをインストールしてみたり

Pi Zero W に putty からアクセスした際に、何かの処理をしながら別の何かを確認したい、てな時があるわけで。たしかそういう時に使える、複数の画面を表示できるユーティリティがあったような…。GNU screen みたいな…。

ググってみて思い出した。tmux だ。

_tmuxを使い始めたので基本的な機能の使い方とかを整理してみた - 完熟トマト
_tmuxの使い方 - Qiita
_第127回 ターミナルマルチプレクサ tmuxを使ってみよう:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
_達人に学ぶ.tmux.confの基本設定 - Qiita
_tmuxが快適、かつ .tmux.conf の設定 - Qiita

ということで、Pi Zero W 上でインストール。
sudo apt install tmux
解説ページを見ながら設定していこう…。

2017/10/27(金) [n年前の日記]

#1 [love2d][windows] Windows10にlove2dをインストール

Lua言語を使って2Dゲームが作れる、love2dなるライブラリだか環境だかがあるらしい。

_LoVE - Free 2D Game Engine

「LOVE」という名前らしいけど、あまりに一般的な単語過ぎて検索時に困るので love2d と呼んでる場合が多いそうで。

SDL2 を使って描画するらしいので、昨日ビルドした SDL2 がちゃんとビルドできてるのか確認作業に使えるかもしれないなと。てなわけで少し触ってみようかと。

ただ、いきなり Raspberry Pi上で動かそうとしても勝手が分からんだろうから、まずは Windows10 x64上でインストールしてみたい。

Windows10 x64上にlove2dをインストール。 :

以下からダウンロード。

_LoVE - Free 2D Game Engine

love-0.10.2-win32.exe をDLして実行するとインストールできる。デフォルトでは、
C:\Program Files (x86)\LOVE\
もしくは、
C:\Program Files\LOVE\
にインストールされる。

環境変数 PATH に、love2d のインストール場所を追加。これで、DOS窓上で love.exe と打てば呼び出せるはず。

ちなみに、インストールフォルダには sdl2.dllも入ってた。Windows版は、Windows用のSDL2関連dllを集めてこなくても動くようになっているらしい。

動作確認。 :

以下を参考にして動作確認。

_1. Love2Dでゲーム作りを始めよう - おりんくうと学ぶ2Dゲー開発
_2. ハロー・ワールド - おりんくうと学ぶ2Dゲー開発
_Getting Started - LOVE

ちなみに、love2d の wiki は、ページの一番下の「日本語」をクリックすると日本語に翻訳されたページが表示される。ありがたや。翻訳してくれた方に感謝…。 *1

まずは love.exe をそのまま実行。カラフルなウインドウが表示された。

ウインドウ内には、たしかに「NO GAME」と表示されてる。スクリプトソースが指定されない状態で起動すると、この画面を表示するらしい。

バージョン確認は以下で…と思ったが。
love --version
Windows上では、何も表示されない。まあ、love.exe を起動すれば、ウインドウのタイトルにバージョンが表示されるから困らないけど…。

helloworld というフォルダを作成して、その中に main.lua というファイルを作成。以下を記述。
function love.draw()
  love.graphics.print('Hello World!', 400, 300)
end

以下で実行。
love.exe helloworld
ウインドウ内に「Hello World!」が表示された。

Ruby や Python 等は、ruby hoge.rb だの python hoge.py といった形でファイル名を渡して実行するけど。love2d の場合、
love "main.luaが入ったフォルダのパス"
を渡す点に注意。

*1: 件のwikiのトップページでは、翻訳してくれた方が疲れてしまったのでもう更新はしない、との記述があるけど。ここまで大量の文書を翻訳してくれただけでも、めちゃくちゃ御の字。ありがたや…。

#2 [raspberrypi][love2d] Raspberry Pi Zero Wにlove2dをインストール

Raspberry Pi Zero W + raspbian stretch 上で love2d をインストールしてみる。

一応、公式リポジトリにも love というパッケージが入っているのだけど、そちらの版は 0.9.x と古いようで。現行版の 0.10.x をインストールしたいなと。

_Building LoVE - LOVE

必要なパッケージをインストール。 :

SDL2関係(libsdl2-dev等)はビルド済み・インストール済みとして、ソレ以外でビルドに必要なパッケージをインストール。
sudo apt install build-essential autotools-dev automake libtool pkg-config
sudo apt install libdevil-dev libfreetype6-dev libluajit-5.1-dev libphysfs-dev
sudo apt install libopenal-dev libogg-dev libvorbis-dev libflac-dev libflac++-dev
sudo apt install libmodplug-dev libmpg123-dev libmng-dev libtheora-dev
sudo apt install libturbojpeg0-dev zlib1g-dev

ちなみに、SDL2(OpenGL無効版)のビルドは、 _2017/10/26の日記 を参考にして作業すればいい…はず。

もし、Pi2 / Pi3 を使っていて、GL driver を有効にしているなら、SDL2(OpenGL有効版)が使えるだろうから、ビルドなんかしなくても以下で済むのではないかなあ…。たぶん。
sudo apt install libsdl2-dev

ソースを入手してビルド。 :

love2d のLinux用ソースを入手してビルド。love-0.10.2-linux-src.tar.gz を入手する。

_rude / love / ダウンロード - Bitbucket
mkdir ~/love2d
cd ~/love2d
wget https://bitbucket.org/rude/love/downloads/love-0.10.2-linux-src.tar.gz
tar zxvf love-0.10.2-linux-src.tar.gz
cd love-0.10.2-linux-src
./configure
make

インストール。
sudo make install

loveの在り処を確認。
$ which love
/usr/bin/love
/usr/bin 以下に love がインストールされている。

共有ライブラリのキャッシュを更新。
sudo ldconfig

共有ライブラリがあるか確認。
$ ldconfig -p | grep love
        liblove.so.0 (libc6,hard-float) => /usr/lib/liblove.so.0
        liblove.so (libc6,hard-float) => /usr/lib/liblove.so
/usr/lib 以下に liblove.so がコピーされた模様。

動作確認。 :

端末から実行。
love
カラフルなウインドウが全画面で表示された。ちゃんと動いてるっぽい。

ESCキーを叩いたら終了できた。ただし、端末にちょっと妙な文字が残ってるけど…。

SDL2 を使って描画をするらしい love2d が動いたということは、SDL2関係はちゃんとビルドできたし、インストールできてるということだろうか。同じく SDL2 を使う、golang + go-sdl2 も動いたし…。

となると、やっぱり gosu がおかしい…。

余談。 :

hg clone を使ってリポジトリをクローンして、以下を打ってビルドしようとしたのだけど。
hg clone https://bitbucket.org/rude/love
cd love
/platform/unix/automagic
./configure
make

automagic とやらを動かした段階で、何か処理に失敗してるようで。
$ platform/unix/automagic -d

[automagic]  Copying files...
[automagic]  Running genmodules...
Generating src/Makefile.am ...
src/Makefile.am is updated! ^.^
Generating configure-modules.ac
configure-modules.ac is updated! ^.^
[automagic]  Running autoheader...
[automagic]  Running libtoolize...
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'platform/unix'.
libtoolize: linking file 'platform/unix/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'platform/unix/m4'.
libtoolize: linking file 'platform/unix/m4/libtool.m4'
libtoolize: linking file 'platform/unix/m4/ltoptions.m4'
libtoolize: linking file 'platform/unix/m4/ltsugar.m4'
libtoolize: linking file 'platform/unix/m4/ltversion.m4'
libtoolize: linking file 'platform/unix/m4/lt~obsolete.m4'
[automagic]  Running aclocal...
[automagic]  Running autoconf...
configure.ac:52: error: possibly undefined macro: AM_PATH_SDL2
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
[automagic]  Failed, sadface.
[automagic]  You can make this script more verbose running it in debug mode (-d)
[automagic]  This is generally a configuration error (I'm looking at you aclocal)

Raspberry Piの場合、Linux用のソースをダウンロードして、ソレを使ってビルドしたほうが良さそうだなと。

#3 [love2d][ubuntu] Ubuntu 16.04 LTS上にlove2dをインストール

VMware + Ubuntu 16.04 LTS上で love2d をインストールしてみる。Linux上での使い方が分かれば、Raspberry Pi上での使い方も、ぼんやり分かってくるだろう…。

一応公式リポジトリにもパッケージが登録されてるので、以下でインストールはできるのだけど。
sudo apt install love

ただ、この版は 0.9.x で、ちと古い。以下を登録すれば、比較的新しい版をインストールできる模様。

_love-stable : Bart van Strien

sudo add-apt-repository ppa:bartbes/love-stable
sudo apt-get update
sudo apt-get upgrade
sudo apt install love

インストール場所を確認。
$ which love
/usr/bin/love
/usr/bin 以下にインストールされてる。

端末から以下を実行。
love
カラフルなウインドウが表示された。ちゃんと動いてるっぽい。ESCキーで終了できる。

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

#1 [ubuntu][golang] Ubuntu 16.04にgolangとgo-sdl2をインストール

VMware + Ubuntu 16.04 LTS上で、Go言語(golang)からSDL2を使って画像等を描画できるらしい go-sdl2 を使ってみたい。

_veandco/go-sdl2: SDL2 binding for Go

golangをインストール。 :

まずは Ubuntu に golang をインストールしないと話にならない。以下でインストール。
sudo apt install golang

バージョンを確認。
$ go version
go version go1.6.2 linux/amd64
古いな…。まあ、いいか。

goのパッケージがインストールされる場所を作成。
mkdir ~/go

環境変数 GOPATH に、上記の場所を指定してやる。
vi ~/.bashrc
以下を追加。
export GOPATH=$HOME/go

~/.bashrc を再読み込み。
source ~/.bashrc

ただ、以下によると、比較的新しい版をインストールすることもできるらしい。

_Ubuntu - golang/go Wiki

Ubuntu 16.04 LTS なら、以下でイケる、と書いてある。試してみる。
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

$ go version
go version go1.8.3 linux/amd64
Go 1.8 がインストールされた模様。最新版の Go 1.9.x ではないけれど、比較的新しい。

公式リポジトリ版のSDL2をインストール。 :

Ubuntu公式リポジトリに置いてあるSDL2関係のファイルをインストール。
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev libsdl2-gfx-dev

go-sdl2をインストール。 :

go get -v github.com/veandco/go-sdl2/sdl
go get -v github.com/veandco/go-sdl2/mix
go get -v github.com/veandco/go-sdl2/img
go get -v github.com/veandco/go-sdl2/ttf

何か言ってきた。
$ go get -v github.com/veandco/go-sdl2/sdl
github.com/veandco/go-sdl2 (download)
github.com/veandco/go-sdl2/sdl
# github.com/veandco/go-sdl2/sdl
go/src/github.com/veandco/go-sdl2/sdl/audio.go:22:9: note: #pragma message: SDL_DequeueAudio is not supported before SDL 2.0.5
#pragma message("SDL_DequeueAudio is not supported before SDL 2.0.5")
         ^
# github.com/veandco/go-sdl2/sdl
go/src/github.com/veandco/go-sdl2/sdl/video.go:21:9: note: #pragma message: SDL_SetWindowResizable is not supported before SDL 2.0.5
#pragma message("SDL_SetWindowResizable is not supported before SDL 2.0.5")
         ^
「SDL 2.0.5 より前はサポートしてねえよ」と言ってるのかな?

Ubuntu公式リポジトリの SDL2 は、2.0.4 らしい…。となると…最新版をインストールしないとダメなのだろうか…。

SDL2をビルド。 :

公式リポジトリのパッケージをアンインストール。
sudo apt remove libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev libsdl2-gfx-dev
sudo apt autoremove

ビルドに必要になりそうなパッケージをインストール。他にも必要なパッケージがあるかもしれない。
sudo apt install build-essential automake mercurial libtool qt5-default libfontconfig-dev
sudo apt install freeglut3-dev libasound2-dev libaudio-dev libdbus-1-dev libegl1-mesa-dev libesd0-dev libflac-dev libfluidsynth-dev libfreeimage-dev libgles2-mesa-dev libglu1-mesa-dev libjpeg-dev libmirclient-dev libmircommon-dev libmircookie-dev libmircookie2 libmircore-dev libmodplug-dev libmpg123-dev libopenal-dev libpango1.0-dev libpng12-dev libprotobuf-dev libpulse-dev libsndfile1-dev libsndio-dev libtiff-dev libtiff5-dev libudev-dev libvorbis-dev libwayland-bin libwayland-dev libwebp-dev libxcursor-dev libxi-dev libxinerama-dev libxkbcommon-dev libxrandr-dev libxss-dev libxt-dev libxv-dev x11proto-video-dev zlib1g libsamplerate0-dev

SDL2のソースをDLしてくる。

_Index of /release
_Index of /projects
_SDL_gfx / SDL2_gfx - ferzkopp.net

mkdir ~/sdl2
cd ~/sdl2
wget https://www.libsdl.org/release/SDL2-2.0.7.tar.gz
wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.2.tar.gz
wget https://www.libsdl.org/projects/smpeg/release/smpeg2-2.0.0.tar.gz
wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.2.tar.gz
wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz
wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz
wget http://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-1.0.3.tar.gz

SDL2をビルドする。のだけど、このバージョンの組み合わせでは問題があるのでやらないほうがいい…。
tar zxvf SDL2-2.0.7.tar.gz
cd SDL2-2.0.7
mkdir build && cd build
../configure
make
sudo make install
cd ../..

SDL2-2.0.7 は一応ビルドできた。
  • /usr/local/include/SDL2/ 以下に *.h が、
  • /usr/local/lib/ 以下に libSDL2*.so が、
それぞれコピーされた。

しかし、SDL2_image でちょっと問題が。
tar zxvf SDL2_image-2.0.2.tar.gz
cd SDL2_image-2.0.2
mkdir build && cd build
../configure
make
sudo make install
cd ../..

make をしたら、エラーが。
../IMG_png.c:578:16: error: ‘struct <anonymous>’ has no member named ‘png_write_png’
             lib.png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL);
                ^
Makefile:591: ターゲット 'IMG_png.lo' のレシピで失敗しました
make: *** [IMG_png.lo] エラー 1
どうすりゃいいんだ。

SDL2のバージョンを変えてビルドする。 :

それぞれのバージョンを変えてみたらどうだろう。
  • SDL2 を 2.0.6 に、
  • SDL2_image を 2.0.1 に、
  • SDL2_mixer を 2.0.1 に、
  • SDL2_gfx を 1.0.1 に。
と言うのも。以下を見ると、Ubuntu 17.10 (artful) ではそういう組み合わせらしいので…。

_Ubuntu - パッケージ検索結果 -- sdl2

wget https://www.libsdl.org/release/SDL2-2.0.6.tar.gz
wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.tar.gz
wget https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.tar.gz
wget http://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-1.0.1.tar.gz
wget https://www.libsdl.org/projects/smpeg/release/smpeg2-2.0.0.tar.gz
wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz
wget https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz

一々コピペで入力するのは面倒臭いので、download.lst というファイルを作成して以下を記述。

download.lst
https://www.libsdl.org/release/SDL2-2.0.6.tar.gz
https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.tar.gz
https://www.libsdl.org/projects/smpeg/release/smpeg2-2.0.0.tar.gz
https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.tar.gz
https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz
https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz
http://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-1.0.1.tar.gz

以下のように wget を使うことで、一括でダウンロードできる。
wget -i download.lst

で。試してみたところ、この組み合わせなら make 時にエラーが出なかった。 どうやら Ubuntu 16.04 で SDL2 を使うなら、この組み合わせにしておくほうが無難っぽい。

既にインストールしてしまった SDL2-2.0.7 をアンインストール。
cd ~/sdl2
cd SDL2-2.0.7/build
sudo make uninstall
make clean
cd ../..

SDL2-2.0.6 等を解凍、ビルド、インストール。
tar zxvf SDL2-2.0.6.tar.gz
cd SDL2-2.0.6
mkdir build && cd build
../configure
make
sudo make install
cd ../..

tar zxvf SDL2_image-2.0.1.tar.gz
cd SDL2_image-2.0.1
mkdir build && cd build
../configure
make
sudo make install
cd ../..

tar zxvf smpeg2-2.0.0.tar.gz
cd smpeg2-2.0.0
mkdir build && cd build
../configure
make
sudo make install
cd ../..

tar zxvf SDL2_mixer-2.0.1.tar.gz
cd SDL2_mixer-2.0.1
mkdir build && cd build
../configure
make
sudo make install
cd ../..

tar zxvf SDL2_net-2.0.1.tar.gz
cd SDL2_net-2.0.1
mkdir build && cd build
../configure
make
sudo make install
cd ../..

tar zxvf SDL2_ttf-2.0.14.tar.gz
cd SDL2_ttf-2.0.14
mkdir build && cd build
../configure
make
sudo make install
cd ../..

tar zxvf SDL2_gfx-1.0.1.tar.gz
cd SDL2_gfx-1.0.1
mkdir build && cd build
../configure
make
sudo make install
cd ../..

共有ライブラリのキャッシュを更新。
sudo ldconfig

この状態なら、go-sdl2 のインストール時も文句を言ってこなかった。

ちなみに、go-sdl2 を再インストールしたいときは…。
  • ~/go/pkg/linux_amd64/github.com/ 以下の veandco を削除。
  • ~/go/src/github.com/ 以下の veandco を削除。
  • go get -v github.com/veandco/go-sdl2/{sdl,mix,img,ttf} を実行。

動作確認は、Raspberry Pi Zero W + raspbian stretch + golang + go-sdl2 で行った手順と同じ。

一応love2dも動くか動作確認。 :

love を実行したが、そちらも描画は問題無さそう。

VMware上で動かす際の問題。 :

VMware + Ubuntu 16.04 LTS上で動かすと、gopherrun が物凄い速度で動く。おそらく VMware は Vsync を見てないというか、妙な値を返している気配が。それで速度がおかしくなるのかなと邪推。

実機上でも動かしてみた。 :

足元で埃を被ってたサブPC(Ubuntu 16.04 LTS機)でも試してみた。

ちゃんと動いてくれた。速度もそれほどおかしくない。ジャンプSEも鳴ってる。

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

#1 [prog][windows] Windows10 x64にMSYS2を再インストール

Windows10 x64上で go-sdl2 を使えないものかと思ったわけで。

go-sdl2 の README.md を眺めると、mingw-w64 だか MSYS2 が必要と書いてあるように見えたのと、golang 64bit版との兼ね合いで MSYS2 64bit版が必要になりそうな雰囲気を感じたので、今までインストールしてあった MSYS2 32bit版をアンインストールして、MSYS2 64bit版をインストールすることにした。

_MSYS2 homepage

参考ページ。 :

MSYS2 64bit版をインストール。 :

msys2-x86_64-20161025.exe をDLして実行。今回は D:\msys64 にインストールした。

スタートメニュー → MSYS2 64bit → MSYS2 MSYS を実行。mintty が起動する。試しに uname -a と打つと、i686 (32bit) なのか、それとも x86_64 (64bit) なのか、等の情報が表示される。

pacman -Syu と打ってパッケージを更新。最初の1回目はbashを更新するので処理終了後無反応になる。ウインドウを無理矢理閉じる。その後、また MSYS2 MSYS を実行して、pacman -Syu でパッケージを更新。exit で終了。

世の中には問答無用で C:\msys64 が存在するものとして処理をしてしまうアプリが存在するので、今回インストールした D:\msys64 から C:\msys64 にシンボリックリンクを作成。

MSYS2 32bit版をインストール。 :

Rubyinstaller2 の関係で、MSYS2 32bit版も必要になりそうな気がする。MSYS2 32bit版もインストールしておく。

msys2-i686-20161025.exe をDLして実行。D:\msys32 にインストール。

スタートメニュー → MSYS2 32bit → MSYS2 MSYS を実行。mintty が起動する。64bit版と同様に pacman -Syu を繰り返してパッケージを更新。1回目は強制終了。2回目はexitで終了。

問答無用で C:\msys32 があるものとして処理するアプリが存在するので、D:\msys32 から C:\msys32 にシンボリックリンクを作成。

MSYS2上でmingw等をインストール。 :

スタートメニュー → MSYS2 MSYS を起動。

pacman -S パッケージ、でインストールができる。以下をインストール。
pacman -S git base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain

それぞれ、どのパッケージをインストールしてくるか尋ねてくる。
  • base-devel は Enter を叩いて全部入れた。
  • mingw-w64-i686-toolchain と mingw-w64-x86_64-toolchain は、ada、fortran 関係は除外してインストールした。入力値としては「1 2 3 7 8 9 10 11 12 13 14 15 16 17」を打った。
  • 後になって気づいたけど、objc は Objective-C のことだったのだな…。自分は使わないから、ソレも除外しておけばよかった…。

~/.bashrcを変更。 :

環境変数 HOME が示すディレクトリ内に、~/.bashrc 等を作成した。おそらく標準では、C:\msys64\home\ 内にその手のファイルが作られるのだろうとは思うけど…。

mintty 起動時に ~/.bash_profile が読まれるので、その中で「 ~/.bashrc が存在するなら読んどけ」と指示。

.bash_profile
# base-files version 3.1-4

# ~/.bash_profile: executed by bash for login shells.
if [ -e /etc/bash.bashrc ] ; then
  source /etc/bash.bashrc
fi

if [ -e ${HOME}/.bashrc ] ; then
  source ${HOME}/.bashrc
fi

# Set PATH so it includes user's private bin if it exists
if [ -d ${HOME}/bin ] ; then
  PATH=${HOME}/bin:${PATH}
fi

# Set MANPATH so it includes users' private man if it exists
# if [ -d ${HOME}/man ]; then
#   MANPATH=${HOME}/man:${MANPATH}
# fi

# Set INFOPATH so it includes users' private info if it exists
# if [ -d ${HOME}/info ]; then
#   INFOPATH=${HOME}/info:${INFOPATH}
# fi

~/.bash_aliases に alias を列挙。

.bash_aliases
alias ls='ls --show-control-chars --color=auto'
alias ll='ls -al'

~/.bashrc の中で「 ~/.bash_aliases があるなら読んどけ」と指定。それと、プロンプトを変更。

.bashrc
# export TERM=msys
# export OUTPUT_CHARSET=UTF-8
# export TZ=JST-9
export LANG=ja_JP.UTF-8
# export LC_ALL='C'
# export TPUT_COLORS=256

if [ -f "${HOME}/.bash_aliases" ]; then
  source "${HOME}/.bash_aliases"
fi

# PS1='\[\e]0;\w\a\]\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w \[\e[0m\]\$ '
PS1='\[\e]0;\u@\h: $MSYSTEM: \w\a\]\[\e[01;32m\]\u@\h\[\e[00m\]: \[\e[35m\]$MSYSTEM\[\e[00m\]: \[\e[01;34m\]\w\[\e[00m\]\$ '

case "${MSYSTEM}" in
MINGW32)
  GOROOT=/mingw32/lib/go
  GOPATH=$HOME/gocode
  GOOS=windows
  GOARCH=386
  ;;
MINGW64)
  ;;
*)
esac

#2 [prog][windows] Windows10 x64 + MSYS2上でgo-sdl2をインストール

Windows10 x64 + MSYS2上で go-sdl2 をインストールしようと試みたり。ただ、ちょっとコレ、自分の環境では問題があって解決できてない点があるけど…。

MSYS2上でgolang 32bit版をインストール。 :

Windows10 x64上に golang 64bit版はインストール済みなのだけど、MSYS2上で go version と打っても「そんなのねえよ」と言ってくる。別途インストールしないとダメなのかなあ、と思えてきたので試しにインストール。既にインストール済みの golang にPATHを通すだけではいかんのだろうか?

スタートメニュー → MSYS2 MinGW 32-bit を実行。

pacman -Ss パッケージ名の一部、でパッケージを検索。
$ pacman -Ss i686-go

mingw32/mingw-w64-i686-go 1.9.1-1 [インストール済み]
    Go Lang (mingw-w64)
mingw32/mingw-w64-i686-gobject-introspection 1.54.1-1
    Introspection system for GObject-based libraries (mingw-w64)
mingw32/mingw-w64-i686-gobject-introspection-runtime 1.54.1-1
    Introspection system for GObject-based libraries - runtime files (mingw-w64)
mingw32/mingw-w64-i686-goocanvas 2.0.2-5
    Canvas widget for GTK+ that uses the Cairo 2D library (mingw-w64)
mingw32/mingw-w64-i686-googletest-git r975.aa148eb-1
    Google Test (mingw-w64)
mingw-w64-i686-go てのが golang 32bit版っぽいなと。ちなみに、pacman -Ss x86_64-go で検索すれば64bit版がリストアップされるはず。

ちなみに、後になって気づいたけど、
pacman -Ss go lang
なら、golang関係のものだけリストアップされる模様。

pacman -S パッケージ名、でインストール。
pacman -S mingw-w64-i686-go

golang関係の環境変数を設定。~/.bashrc に以下を追加。要するに、MSYSTEM という環境変数が MINGW32 の時だけ、GOROOT、GOPATH、GOOS、GOARCH を設定する。
case "${MSYSTEM}" in
MINGW32)
  GOROOT=/mingw32/lib/go
  GOPATH=$HOME/gocode
  GOOS=windows
  GOARCH=386
  ;;
MINGW64)
  ;;
*)
esac
ちなみに、golang は、GOOS、GOARCH を変更することで、別の環境用のビルドができるらしい。

修正した ~/.bashrc の内容を反映。
source ~/.bashrc

go の環境変数を確認。
go env

go のバージョンを確認。
go version

以下、参考ページ。

_pacman - Use Go lang with MSYS2 - Stack Overflow

MSYS2 MinGW 32-bit上でSDL2関係をインストール。 :

go-sdl2 の README.md には「MSYS2を使ってもSDL2はインストールできるよ」と書いてあるように見えなくもないので、SDL2関係のインストールをしてみる。

_veandco/go-sdl2: SDL2 binding for Go

スタートメニュー → MSYS2 MinGW 32-bitを実行。

SDL2関係のパッケージを検索。
$ pacman -Ss SDL2 i686

mingw32/mingw-w64-i686-SDL2 2.0.6-1
    A library for portable low-level access to a video framebuffer, audio output, mouse, and
    keyboard (Version 2) (mingw-w64)
mingw32/mingw-w64-i686-SDL2_gfx 1.0.1-2
    SDL graphics drawing primitives and other support functions wrapped up in an addon library for
    the Simple Direct Media (SDL) cross-platform API layer
mingw32/mingw-w64-i686-SDL2_image 2.0.1-2
    A simple library to load images of various formats as SDL surfaces (Version 2)
mingw32/mingw-w64-i686-SDL2_mixer 2.0.1-3
    A simple multi-channel audio mixer (Version 2) (mingw-w64)
mingw32/mingw-w64-i686-SDL2_net 2.0.1-1
    A small sample cross-platform networking library (Version 2) (mingw-w64)
mingw32/mingw-w64-i686-SDL2_ttf 2.0.14-1
    A library that allows you to use TrueType fonts in your SDL applications (Version 2) (mingw-w64)
mingw32/mingw-w64-i686-smpeg2 2.0.0-4
    SDL2 MPEG Player Library (mingw-w64)

以下でインストール。
pacman -S mingw-w64-i686-SDL2 mingw-w64-i686-SDL2_image mingw-w64-i686-smpeg2 mingw-w64-i686-SDL2_mixer mingw-w64-i686-SDL2_net mingw-w64-i686-SDL2_ttf mingw-w64-i686-SDL2_gfx

SDL2のバージョンを確認。
$ sdl2-config --version
2.0.6

MSYS2上でgo-sdl2をインストール。 :

スタートメニュー → MSYS2 MinGW 32-bitを実行。

go-sdl2 をインストール。
go get -v github.com/veandco/go-sdl2/{sdl,mix,img,ttf}

環境変数 GOPATH で指定された場所に、go-sdl2 がインストールされた。

動作確認。 :

hellogosdl2.go というファイル名で、以下を作成。

hellogosdl2.go
package main

import "github.com/veandco/go-sdl2/sdl"

func main() {
    if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil {
        panic(err)
    }
    defer sdl.Quit()

    window, err := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED,
        800, 600, sdl.WINDOW_SHOWN)
    if err != nil {
        panic(err)
    }
    defer window.Destroy()

    surface, err := window.GetSurface()
    if err != nil {
        panic(err)
    }

    rect := sdl.Rect{0, 0, 200, 200}
    surface.FillRect(&rect, 0xffff0000)
    window.UpdateSurface()

    sdl.Delay(2500)
}

実行してみる。
go run hellogosdl2.go
ウインドウが開いて、赤い四角が表示され、数秒経ったらウインドウが閉じられた。

この状態なら、go-sdl2 を使ったソースも動く模様。

gopherrun も動かしてみた…が、こちらは終了時にエラーが…。
go get -v -u -d github.com/koron/gopherrun
cd $GOPATH/src/github.com/koron/gopherrun
(ソースを修正)
go build
$ ./gopherrun.exe

Exception 0xc0000005 0x0 0x0 0x772e1161
PC=0x772e1161
signal arrived during external code execution

github.com/veandco/go-sdl2/mix._Cfunc_Mix_FreeMusic(0x337534f0)
        github.com/veandco/go-sdl2/mix/_obj/_cgo_gotypes.go:355 +0x33
github.com/veandco/go-sdl2/mix.(*Music).Free.func1(0x337534f0)
        D:/home/mieki256/gocode/src/github.com/veandco/go-sdl2/mix/sdl_mixer.go:236 +0x4f
github.com/veandco/go-sdl2/mix.(*Music).Free(0x337534f0)
        D:/home/mieki256/gocode/src/github.com/veandco/go-sdl2/mix/sdl_mixer.go:236 +0x21
main.runGame(0x0, 0x0)
        D:/home/mieki256/gocode/src/github.com/koron/gopherrun/gopherrun.go:92 +0x360
main.main()
        D:/home/mieki256/gocode/src/github.com/koron/gopherrun/gopherrun.go:96 +0x1a
eax     0x0
ebx     0x398b89b0
ecx     0x398ca2d8
edx     0x0
edi     0x10d0000
esi     0x398ca2d0
ebp     0x8afd08
esp     0x8afba8
eip     0x772e1161
eflags  0x210246
cs      0x23
fs      0x53
gs      0x2b
起動直後にいきなりESCキーを押して終了した場合は、エラーを出さずに終了するのだけど。少し動かすとエラーが出るようで。

問題点。 :

MSYS2を動かしてない状態で、出来上がった .exe を実行しても、起動すらしない…。

おそらくだけど、D:\msys64\mingw32\bin\ 以下の .dll を呼び出して動いてたりして、故に、そこに PATH が通ってない状態では動かない、のではないかなあ…。

ということで、MSYS2 が無くても動くようにするにはどうしたらいいんですか? てな疑問が残る結果に。

#3 [movie] 「アンドリューNDR114」を視聴

BS朝日で、「アンドリューNDR114」なる映画が流れてたので視聴。1999年に公開された、アイザック・アシモフ原作のSF映画、らしい。

_アンドリューNDR114 - Wikipedia

アシモフ原作ということでフツーに面白かった。まあ、ぶっちゃけ、内容は ピノキオなんだけど…。

最初のあたりは、ロボットの造形だの、未来世界のデザインだの、本で知識を吸収する設定だの、アレコレがちとダサイ感じがして不安になったけれど。作品内の時間経過に伴ってデザインが変化していったので、おそらくわざとそういうデザインにしてたのだろうなと。昔のSF映画風 → BTTFとかあのあたりのSF映画風 → 近年のSF映画風、みたいな。原作がそもそも古いので、レトロ風味を意識していた可能性がありそうな。

製作費に対して興行成績はボロボロだったらしいけど…。まあ、ロボットと人間がそうなっちゃうお話なんて、一般人は気持ち悪がって距離を置くんじゃないのかなと邪推したり。最後まで眺めれば気に入ってくれる人が結構出てきそうだけど。実際、評価は高いらしいし。

ロボットが主人公なので、そこで描かれるアレコレの純粋さが強調されるという効能があるなと感じたり。人間キャラで話を作ると生々しさが入ってきちゃうので、「そんなわけねえだろ」とつい思ってしまう場面が出てくるけれど。ロボットや人形なら、おとぎ話として成立しやすくなる、そんな面があるよなと。

それはともかく、ロボット三原則を逸脱してそうなシーンがちょこちょこあったような気がしたのだけど…。まあ、冒頭で、三原則をドーンと紹介したら「二度と見せるな」と言われてしまう、てなシーンがあったから…。そういうアレコレはあまり気にしないで見ていただきたい、てなことかもしれないなと。「CASSHERN」でヘルメットがアレしたのと似たようなもんで。 *1
*1: あのヘルメットの扱いは、「今回原作通りには作らないよ」という作り手の意思表示だろうと想像しながら見てたけど、実際はどうなんだろう…。

2017/10/30(月) [n年前の日記]

#1 [prog][golang] Windows10 x64上で Mingw-builds版を使って go-sdl2をインストール

go-sdl2 は、golang(Go言語)からSDL2を操って、画像描画等ができるライブラリ。

_veandco/go-sdl2: SDL2 binding for Go

昨日は、Windows10 x64 + MSYS2 で go-sdl2 をインストールしてみたけれど。go-sdl2 の README.md には、Mingw-builds とやらを使ってインストールする方法が書いてある。それに従ってインストール作業をしてみたり。

Mingw-builds版の mingw をインストール。 :

以下のページから辿って、mingw-w64-install.exe をDLして実行。

_Mingw-builds [mingw-w64]

インストールする mingw のタイプを尋ねてくるので…。

mingw_w64_install_ss01.png

以下を選んでNEXTボタンを押す。
  • Version : 7.2.0
  • Architecture : 64bit版なら x86_64 / 32bit版なら i686
  • Threads : win32
  • Exception : 64bit版なら seh / 32bit版なら dwarf
  • Build revision : 0

次にインストール場所を尋ねてくるけど。

mingw_w64_install_ss02.png

自分の場合は以下にした。
  • 64bit版インストール場所 : D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0
  • 32bit版インストール場所 : D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0

それぞれ、以下のような指定らしい。
  • Architecture : 32bit版 = i686 / 64bit版 = x86_64
  • Threads : win32 = 単独で動くバイナリを作れるけど一部機能が使えない。
  • Threads : posix = libwinpthread-1.dll を必要とするし遅いけど機能は網羅されてるらしい。
  • Exception : 例外関係。 seh > dwarf > sjlj の順で速いらしい?

_Qt で MinGW-w64 を使用する際に必要になるスレッドモデルと例外機構の選択について | cutlassfish

go-sdl2のビルドに必要なSDL2関連ファイルを入手。 :

以下を参考にして、SDL2関連ファイルを入手する。

_go-sdl2-tut/windows.md at master - vinzBad/go-sdl2-tut

必要なのは、ランタイムバイナリと、Developmentライブラリ。32bit版なら x86 を、64bit版なら x64 をDLする。

_Simple DirectMedia Layer - SDL version 2.0.7 (stable)
SDL2-2.0.7-win32-x64.zip
SDL2-2.0.7-win32-x86.zip
SDL2-devel-2.0.7-mingw.tar.gz

_SDL_image 2.0
SDL2_image-2.0.2-win32-x64.zip
SDL2_image-2.0.2-win32-x86.zip
SDL2_image-devel-2.0.2-mingw.tar.gz

_SDL_mixer 2.0
SDL2_mixer-2.0.2-win32-x64.zip
SDL2_mixer-2.0.2-win32-x86.zip
SDL2_mixer-devel-2.0.2-mingw.tar.gz

_SDL_ttf 2.0
SDL2_ttf-2.0.14-win32-x64.zip
SDL2_ttf-2.0.14-win32-x86.zip
SDL2_ttf-devel-2.0.14-mingw.tar.gz

SDL2関連ファイルを所定の場所にコピー。 :

ランタイムバイナリを解凍する。中に .dll が入っているので、以下にコピーする。
64bit版 : D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64\bin
32bit版 : D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0\mingw32\bin

Developmentライブラリ(*-devel-*とついてるファイル)を解凍する。それぞれ、中に、以下のフォルダがあるので…。
x86_64-w64-mingw32
i686-w64-mingw32
  • 64bit版なら、x86_64 とついてるほうの中身(bin, include, lib, share等)を、
  • 32bit版なら、i686 とついてるほうの中身(bin, include, lib, share等)を、
それぞれ以下にコピー。
64bit版 : D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64\x86_64-w64-mingw32
32bit版 : D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0\mingw32\i686-w64-mingw32
上記フォルダ内にも、bin, include, lib があるので、フォルダ名が一致するようにコピーしていけばいい。

環境変数PATHを設定。 :

Windowsの環境変数PATHに、mingw-w64関係のPATHを2つ追加して、gcc等が使える状態にする。
64bit版
D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64\bin
D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64\x86_64-w64-mingw32\bin

32bit版
D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0\mingw32\bin
D:\mingw-w64\i686-7.2.0-win32-dwarf-rt_v5-rev0\mingw32\i686-w64-mingw32\bin

PATHの先頭に追加しておいたほうがいいけれど…。他のアレコレと衝突しそうなので、今回はbatファイルを作成して、mingw-w64関係を使いたいときだけDOS窓上でそのbatファイルを実行してから作業する、ということにした。

mingww64.bat
@echo # MinGW-w64 (Mingw-builds, MSYS, 64bit) enable

@set MINGW_PATH=D:\mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev0\mingw64
@set MINGW32_PATH=%MINGW_PATH%\x86_64-w64-mingw32

@set PATH=%MINGW_PATH%\bin;%MINGW32_PATH%\bin;%PATH%

@echo add path %MINGW_PATH%\bin
@echo add path %MINGW32_PATH%\bin

set GOOS=windows
set GOARCH=amd64

64bit版は、環境変数 GOARCH=amd64 のままでいいけど、32bit版は、環境変数 GOARCH=386 を指定したほうがいいのだろうか…? とりあえず、go env で、現在のgo関係の環境変数を確認できる。

go-sdl2 をインストール。 :

DOS窓を開いて、前述のbatファイルを実行。環境変数PATHに先ほどインストールした MinGW のソレが追加されたので、gcc 等が使えるようになってるはず。gcc -v でバージョン確認ができる。

これでようやく、go-sdl2 がインストールできるる。
go get -v github.com/veandco/go-sdl2/sdl
エラーが出なければインストールできてる。はず。

go-sdl2 がインストールされたフォルダに、examples というフォルダがあるから、その中の events/events.go を実行すると動作確認ができる。
cd %GOPATH%\src\github.com\veandco\go-sdl2\examples\events
go run events.go
マウスカーソルを動かしたら、座標値がずらずらと表示された。

同じように、go-sdl2 の他のアレコレもインストール。
go get -v github.com/veandco/go-sdl2/mix
go get -v github.com/veandco/go-sdl2/img
go get -v github.com/veandco/go-sdl2/ttf

この状態なら、golang でビルドした .exe が動いてくれた。まあ、SDL2関連のdllにPATHが通っていれば、だけど。

ちなみに .exe を作るのは…。go build hoge.go みたいな感じで打てばいい。

32bit版として go-sdl2 をインストール・利用する場合は…。手元の環境では、golang 64bit版を使って go-sdl2 をインストールすることはできなかったけれど、golang 32bit版を別途インストールして試してみたらインストールすることができた。

gopherrunが終了時にエラーを出す件。 :

以下で紹介・公開されてる gopherrun というソレをビルドして動作確認したものの、終了時にエラーが出て悩んでたのだけど。

_Golang と SDL2 でゲームを作る - KaoriYa
_koron/gopherrun

ジャンプSEとして使われてる jump07.mp3 を ogg に変換して使うようにしてみたら、終了時にエラーが出なくなった。どうやら go-sdl2 は、というより SDL2 は、ogg の使用が推奨っぽいなと…。

余談。mp3は筋が良くない。 :

余談だけど。そもそも mp3 をゲームの類で使うのは、あまり筋が良くないと自分は思っていたりして。

元々 mp3というフォーマットは、映像と一緒に使うことを前提にして作られた音声フォーマットだから、音声データがフレーム単位で記録されていて。故に、音声の実際の長さとフレーム単位のソレが合わなくてギャップ(無音部分)が含まれてしまうことが多いわけで。

そのあたりを解決すべく、例えば Adobe Flash などは、wav を放り込むと一見mp3に変換してるように見えながら独自情報もどこかに持っていてmp3をゴニョゴニョしながら再生してたので、何万円もする Adobe Flash CSx を買わなきゃループBGMを流すことすら難しかった(時期がある)し。 *1 lameなどは変換時にメタ情報としてギャップ情報を含めておくことで「再生側でイイ感じに処理してくれよな…後は…任せた…俺がやってやれるのはここまでだ…」というお約束にして誤魔化してたわけで。

しかも mp3 は、昔は特許が絡んできたので、使用にあたってはライセンス面でちと問題があったりして。いやまあ、 _ついこないだ特許が切れた ようではあるけれど。

それを考えると、後発故にフレーム単位などという縛りもなく、しかもライセンス面で問題ナサゲな ogg (Ogg Vorbis)を使ったほうがいいだろうと。てなわけで、ゲームの類で不可逆圧縮音声データを扱うなら、よほどの理由がない限りmp3よりoggだよなあ、と。しかしこれが、ブラウザの対応状況を鑑みたりすると、また面倒臭い状態に…。

*1: もっとも、後のほうになるとFlash Player側で改良されたのか、lameで変換したmp3もギャップレス再生できるようになっていた…ような記憶が。

2017/10/31(火) [n年前の日記]

#1 [love2d][lua] love2dを勉強中

とりあえず Windows10 x64上でlove2dを勉強中。

love2dは、lua言語からSDL2を利用して2Dゲームを制作できるライブラリ、という説明でいいのかな…?

_LOVE - Free 2D Game Engine

画像をキー入力で動かすサンプル。 :

以下の記事が参考になった。ありがたや。

_Love2D:ゲームエンジンその4 - Qiita

こんな感じの結果に。

love2d_move_sprite_ss.gif

ソースと画像。 :

使用画像は以下。License : CC0 ってことで。

_bg_1280x720.png
_spaceship_001_64x64.png

ソースは以下。

_main.lua
-- sprite move example

function love.load()
  -- init
  
  -- get window width and height
  scrw = love.graphics.getWidth()
  scrh = love.graphics.getHeight()
  
  -- load image
  bgimg = love.graphics.newImage("bg_1280x720.png")
  playerimg = love.graphics.newImage("spaceship_001_64x64.png")
  
  -- player work
  player = {}
  player.x = scrw / 2
  player.y = scrh / 2
  player.speed = 300
end

function love.update(dt)
  -- update
  
  -- key check
  if love.keyboard.isDown("left") then
    player.x = player.x - player.speed * dt
  elseif love.keyboard.isDown("right") then
    player.x = player.x + player.speed * dt
  end
  if love.keyboard.isDown("up") then
    player.y = player.y - player.speed * dt
  elseif love.keyboard.isDown("down") then
    player.y = player.y + player.speed * dt
  end
end

function love.draw()
  -- draw BG
  love.graphics.setColor(255, 255, 255, 255)
  love.graphics.draw(bgimg, 0, 0)
  -- love.graphics.rectangle("fill", 0, 465, scrw, 150)
  love.graphics.setColor(255, 255, 255, 255)
  
  -- draw player
  ofsx = playerimg:getWidth() / 2
  ofsy = playerimg:getHeight() / 2
  love.graphics.draw(playerimg, player.x - ofsx, player.y - ofsy)
  
  love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10)
end

function love.keypressed(key, isrepeat)
  -- ESC to exit
  if key == "escape" then
    love.event.quit()
  end
end

_conf.lua
function love.conf(t)
  t.window.width = 1280
  t.window.height = 720
  t.window.title = "Move Sprite Example"
  t.window.fullscreen = false
  -- t.window.fullscreentype = "exclusive"
  t.window.vsync = true
end

実行方法。 :

実行方法は、何か適当な名前でフォルダを作成して、上記の画像やソースを全部入れて…。以下で実行。
love フォルダ名

少し解説。 :

conf.lua というファイルを作って中に色々書いておくと、ウインドウサイズ、ウインドウタイトル、フルスクリーン表示等が指定できる。love.conf(t) という関数を作って…。
  • t.window.width で、ウインドウ横幅を、t.window.height で、ウインドウ縦幅を指定。
  • t.window.title で、ウインドウタイトルを指定。
  • t.window.fullscreen で、フルスクリーン表示にするかしないか。
  • t.window.fullscreentype で、フルスクリーン表示時の種類を指定。
  • t.window.vsync で、vsync を見る、のかな。

main.lua に、処理を書く。
  • 関数 love.load() に、初期化処理を書く。
  • 関数 love.update(dt) に、更新処理を書く。dt には、前回の更新処理からの時間が秒単位で入っている、らしい。
  • 関数 love.draw() に、描画処理を書く。
  • 関数 love.keypressed(key, isrepeat) を書くと、キーが押されるたびにその関数が呼ばれる。

  • 画像の読み込み : love.graphics.newImage("画像ファイル名")
  • キーの押し下げ判定 : love.keyboard.isDown("キー種類")
  • 画像の描画 : love.graphics.draw(画像が入ってる変数, 描画位置x, 描画位置y)
  • 文字列の描画 : love.graphics.print("文字列", 描画位置x, 描画位置y)
  • ウインドウサイズの取得 : love.graphics.getWidth()、love.graphics.getHeight()
  • 画像サイズの取得 : 画像の入った変数:getWitdh()、:getHeight()
  • FPSの取得 : love.timer.getFPS()

love.graphics.setColor(R, G, B, A) は…。それ以後に描画するアレコレの色を変化させることができるらしい。

気になる点。 :

love.timer.getFPS() でFPSが取得できるらしいのだけど、なんだかスゴイ値になってる…。何故。

#2 [anime][neta] 作品のシンボルをあえて破壊するソレってどうだろう

「CASSHERN」においてヘルメットがアレするのは、原作通りに作らないよという意思表示ではないか、などと自分は勝手に思い込んでるわけだけど。そういう見せ方ってどこかで使えるかもしれないなー、などと妄想を。

例えば、ガンダムシリーズの新作で、ガンダムが登場した直後に角がバキッと壊されて、ずっとそのまま本編が進んでいったら…とか。

「鉄血のオルフェンズ」あたりで、そういうことをやってたら面白かったかも。ガンダムが登場したと思ったら、バトルしてる最中に主人公が、「なんだこの角。結構邪魔だな」とかつぶやいて自分でバキバキッとむしり取ったら、勘のいい視聴者が「ハハーン。今回のガンダムは…」となったかもしれず。ならないか。どうなんだ。

まあ、ガンダムシリーズは作品毎に内容が違うからそんなことしなくてもアレだけど。今更、「こんなのガンダムじゃねえ」とか言い出す人は、まず居ないよな…。

#3 [anime][neta] 50ヶ国語を喋る怪獣ってどうだろう

昨晩、NHK-BSで、ハリウッド版ゴジラが放送されてたので、途中まで見てたのだけど。 *1

考えてみれば…。怪獣と言えば「ガオー」しか言わないものと自分達はすっかり思い込んでるけど。怪獣の頭ってあんなにデカいのだから、脳もきっとデカいはずだよなと。あれだけ脳がデカいなら、人間並み、あるいは人間以上の知能を持った怪獣が居ても設定としてはおかしくないのかもしれないなと。それこそ、50ヶ国語をマスターしちゃってベラベラ喋りまくる怪獣が出てきてもおかしくないだろうと。おそらく、「お前はルー大柴か!」と言いたくなる、そんな喋り方をする怪獣に…。 *2

てなバカ妄想をしたけれど、ふと気づいてしまった。それってファンタジー作品等に出てくるドラゴンの類じゃねえのか…。残念。新規性は無いな。既によくある設定だった。

知能を持たない方向ではどうだろう。 :

逆の方向ではどうだろう。

例えば、ウルトラマン。彼等は人間以上の科学技術を持ってるだろうし、人間以上の知能だって持ってるだろうと自分達は思い込んでるけど。あれだけ個体が居るのだから、中にはとんでもない落ちこぼれが居てもおかしくはないだろう…。

銀色の巨人が現れた! さあ、怪獣を倒してくれるはず…と思ったら怪獣そっちのけで高層ビルに登り出して実に楽し気に「ウッホウッホ!」と騒ぎ始めるウルトラマン。ってソレ見た目が違うだけのキングコングじゃん。新規性が無いな…。

光の国ってそのへんどうなってるんだろう。生まれてきた個体が「あっ。これは…」てな状態だった場合、何が行われるのだろう…。それはそれでなんだか怖い。

そもそもウルトラマンは何故喋らないのか。 :

考えてみたら、ウルトラマンって妙なヤツだな…。「シュワ!」「ヘアッ!」「ダアッ!」しか喋らないし。頭めちゃくちゃ良さそうなのに。怪しい…。

アイツら何故か、人間サイズの時はフツーに喋るイメージが。「私は命を2つ持ってきた」とかフツーに言いそう。そもそも人間に化けてるときは人語を話すし。でも、巨大化すると「ダアッ!」。なんだか怪しい…。

と思ったけど、最近のウルトラマンはそうでもないな…。ゼロとか結構ベラベラ喋ってる印象。あの目つきの悪い黒いヤツも、空にでっかい自撮り画像をプロジェクションしながら人類に向かってベラベラ喋りそうだし。

しかし、「何故ウルトラマンは巨大化すると喋らないのか」てなあたりは、妄想すると妙な設定が出てきそうではある…。
  • テレパシーで意思伝達することが当たり前になったほどに進化した存在だから、音声伝達なんてそもそも不慣れ。人間が尾骨を自らの意思で動かすぐらいに面倒臭い。
  • 巨大化すると自分のエネルギーの配分が色々と大変なので、真っ先に声の発生部位はリソースが節約されちゃう。「シュワ!」も、当人的には「お疲れ様でした!」と喋ってるつもりだったり。
  • 人類に対するイメージ戦略。プロデュースは大事。
  • 発展途上の惑星住民に過剰な科学技術を与えてはならない。そのためには極力接触を避けねばならない。会話するなんてとんでもない。と法律で決まってるから喋りたくても喋れない。
そのあたりを真面目に妄想していくと…。
  • 声を出す文化がないなら、ウルトラ一族は歌という概念を失ってる可能性が。「歌はいいねえ。リリンの生み出した文化の極みだよ」とか言い出しそう。
  • 巨大化するとオツムまで弱くなってる可能性が。ヤバイ。体のどこらへんにエネルギーを割り振ってるのか不安が残る。
  • 光の国には名の知られた名プロデューサーが居るのかも。たぶん太ってる。イメージ的には。
  • 科学技術をポンポン人類に与えちゃう妙な思想を持った個体が登場して面倒臭い事態に。人類は波動エンジンを手に入れた! 的展開も。
まあ、色々妄想できそうな。

*1: 最後まで見たかったけど、作業してたから途中で視聴を打ち切ってしまった…。
*2: いやまあ、「脳が大きければ知能があるのだ」なんてのは単純過ぎるし、お前は馬鹿か、無知にもほどがあるだろうと言われそうだけど。面白くなればなんでもオッケーじゃん、と…。

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

2017/09/26からアップロードしてなかった…のでアップロード。

以上、31 日分です。

過去ログ表示

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

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project