mieki256's diary



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

#1 [windows] SignalNow Xを試用

Windows上で緊急地震速報を表示できる、SignalNow X というソフトをインストールして試用してみたり。

_緊急地震速報を受信・通知する「SignalNow Express」の後継「SignalNow X」が無償公開 - 窓の杜

ああ…これは…ダメかも…。現在地を、県庁所在地でしか設定できない。これは厳しい。福島市と須賀川市は53kmも離れてるので、かなり違う予想が出てくるはず。

ソフトを作ってるストラテジーという会社は、今現在は東京にある会社のようで。東京に居ると、このあたりの距離感覚がおかしくなるんだろうな…。

まあ、有償版の SignalNow Professional なら現在地を自由に登録できるっぽいので、文句があるやつは金払え、ということなのかも。しかし、そういう話であれば、このソフトは要らんよな。有償版は体験版もあるみたいだから、「使い勝手を知りたければ体験版使え」で済むわけで。このソフトの存在意義は一体…。県庁所在地在住者限定ソフト、ではなあ…。

税金で作ったりしないものかな。 :

緊急地震速報って日本国民の生命を守ることにかなり直接的に繋がってくる情報だろうから、税金を投入してクライアントソフトを作って公開して、PC使ってる人なら誰でも緊急地震速報を取得できるようになっててもいいんじゃないの、という気もするのだけど。

でも、そうなると、Windows版しか用意されてません、てな状態では文句が出てきそうだな…。企業なら特定OSに特化してサービス提供しても商売なんだから仕方ないといえるのかもしれんけど、国がやるとなったらMacやLinux上でも動かさないと、てな話に。となるとJavaあたりを使って実装されちゃったりして、するとセキュリティホールがどうとかになって…。ああ、面倒臭い。

かといって、県庁所在地に住んでる人は無料で情報を取得できるけどそれ以外の人は、という状況もなんだか気になる。過疎地にバスを通せ、てな感じの話と違って、回線さえ繋がってればどこに居てもほぼ同じようなサービスを受けられなくもない、というのがWebの利点だろうけど、その利点がこうして踏みにじられてしまうのも…。

まあ、情報を収集するシステムや、提示するサーバまでは税金で用意したのだから、後は自分達でどうにかせい、ということなのかな…。

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

#1 [windows] SignalNow Xがちょっとよろしくない気がする

今朝、というかAM02:00頃、茨城県北部でちと大きな地震があって、昨日インストールした SignalNow X が一応反応したことはしたのだけど。揺れが収まり始めてから、「今から8秒後に揺れが来るよ!」と表示されてしまって…。あー。ダメだこりゃ。このソフトはダメだあ…。

想像だけど、これ、現在地に県庁所在地しか設定できないから、こんなことになったのかなと…。マズイよなあ…。この仕様はマズイ…。この仕様のせいで、このソフト、まるでフェイクニュース発信ソフトに変貌してしまっている…。これはマズイだろう…。

緊急地震速報って、できるだけ速く、そこそこある程度は正確に、てな方向で関係者が今までずっと努力してきたのだろうと想像するのだけど。しかし、このソフトの、この仕様のせいで、そのあたりの努力、全部台無し。マズイなあ…。

いやまあ、Webページを開いたら勝手にインストールされるとか、PCにプリインストールされてるとかそういうソフトじゃなくて、ユーザが意図的に作業しないとインストールできないソフトだから、「嫌なら使うな」で済むあたりがまだ救いではあるけれど。

有償版の体験版もなんだかアレだなと。 :

有償版の体験版は7日間使えますよ、という仕様らしいけど。その7日間、緊急地震速報が来なかったらどうなるんだろう…。何も体験できないのでは…。

ソフトの性質から考えて、何日間利用できます、ではなく、緊急地震速報を〇回まで受信できますよ、それ以後は買ってね、みたいな仕様じゃないと体験版を公開してる意味がないのでは。

もしかして、自分達が作ったソフトはどういう種類のソフトなのか、そこからして分かってないから、そんな珍妙な仕様になるのではないかなあ…。

もっともそのあたり、ソフト電池なる仕組みの制限なのかもしれない。が、こういうソフトにそういう制限がついてくる仕組みを採用しちゃう時点で、やっぱり分かってないんじゃないかと…。たぶん、そのソフト電池って、導入がまだ比較的楽、等のメリットがあって採用してるのだろうけど。それが合うソフトジャンルと、合わないソフトジャンルってありそうな。

#2 [zatta] ワンコインの魔力ってあるよなと

SignalNow Professional なるソフトの料金を眺めているうちに思ったのだけど…。いや、他人様の商売に言及するのもアレではあるけど、自分だったらちょっと無理してでも年500円に設定するか、あるいは月100円 x 12ヶ月 = 1,200円で価格設定して月額100円を強調するかもな、と、なんとなく妄想したり。

と言うのも、「ワンコインの魔力」ってあるよなと思えてきたからで。

例えば、100円ショップ。どうしてこんなに100円ショップが普及したかといえば、そこにワンコインの魔力があるからで。「どうせ100円だから」とアレもコレもと買い物かごに入れてるうちに、気が付くとうっかり千円ぐらい散財してたり。

例えば、昔のアーケードゲーム。1回100円だったよなと。今は違うだろうけど。例えば、昔の自動販売機。缶ジュース1本100円だったよなと。今は違うけど。

お金を払う側からすれば、「ワンコインで済む」てのは、出費に関して心理的ハードルをグンと下げてしまうところがあるのだろうなと。であれば、もし商売する側なら、そこを利用しない手はない。ていうかこの御時勢に既に実際利用して伸びてきたのが100円ショップですけど。

500円も一応ワンコインではあるので…。期間の分割の仕方を工夫するなりして、500円もしくは100円で金額を提示、てのは客数を増やすことに多少は貢献、するのかな。どうなんだ。さて。

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

#1 [zatta] NTTの料金を確認するソレ

NTTの料金は、@ビリングなるサービスを使うとWeb上で確認できるのだけど。しばらく前に親父さんがサービスを使おうとしたら、「アカウントロックしました」と表示されて。

おそらく、ユーザID、パスワード、お客様番号のどれかを間違って入力したか、もしくは長い間ログインしてなかったものだから、コイツはパスワードを長期間変えてないから問答無用でアカウントロック、みたいな仕組みになってたのかなと。

アカウントをロックされたときは、IDとパスワードの再発行が必要らしい。Web上から申し込んで、今日、ハガキで届いた。…申し込んでから届くまで結構かかったような。これ本当に届くのかと、親父さんと二人で不安になる程度の日数がかかった、ような気がする。

再発行されたソレでログインはできた。が、ログイン直後に「パスワードを変更しろ。今すぐこの場で変更しろ。じゃないとサービスは使わせねえ」と表示されて。どうやらセキュリティ的には、最初に渡されたパスワードを使い続けるのは完全アウトな仕組みになってるっぽい。

ちとよくわからんのが、@ビリングとは別にWebビリングというサービスが存在するらしいこと。@ビリングで確認できるのはあくまでNTT東日本・西日本の料金だけで、その他のNTT関連サービスはNTTファイナンスが一括して請求するけどそれについてはWebビリングを使って確認しろや、ということになってるっぽい。そっちのほうもちょっと調べてみないと…。

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

#1 [raspberrypi] Raspberry Pi A+ 用のケースについてググっていたり

ここ最近、Raspberry Pi A+ がちょっと気になっていて。

いやまあ、本当は、Raspberry Pi Zero W が気になっているのだけど、Zero はGPIOのピンを自分ではんだ付けしないといけないあたりが面倒臭そうで、だったら A+ にすればはんだ付けしなくて済むよな、A+ のほうがいいのかな、てな流れで気になってるというか。や、はんだ付け、できますけど。工業高校の電子科に通ってたからできますけど。でも、ブレッドボード使い始めちゃったら、あまりに楽で。これはもうはんだ付けとかそんなの面倒臭くてやってられないわ、てな気分になってしまって。あの時代には戻れない。ねこの森には帰れない。

で、仮に入手したとしても、基板むき出しで使うわけにもいかんだろ、ケースがあったほうがいいのかな、と思えてきたわけだけど。ググってみても、A+ 用のケースはほとんど種類がないらしくて。

いやまあ、あることはあるのだけど、例えば KSY あたりで扱ってるケースは値段が高くて、そこまでゴイスなケースが欲しいわけでもないんだけどなあ、みたいな。千石電商で扱ってるケースはイイ感じだけど、送料まで考えると…。

無いなら自分で作るしかないのだろう、でも作れるのかな、と思って「raspberry pi a+ case diy」等の単語で画像検索して参考にしようとしたわけだけど。これもまた、あまり制作事例は多くないようで。

いやまあ、3Dプリンタで作ってる事例は多数見かけたのだけど、3Dプリンタなんて持ってないし、近隣にその手の機器を使える店舗だかサービスだかがあるわけでもなく。

そんな感じで、画像群を眺めながらぼんやりと悩んでるという。

3Dプリンタ、いいよなあ。 :

3Dプリンタ、便利そうだよなあ…。

ググった感じでは、3Dプリンタを使った制作事例を紹介するページに、おそらくは3Dプリンタ用のデータファイルがえてして置いてあるっぽいので、ソレをDLすれば同じようなものが目の前で作れてしまう予感。業者さんにお願いして遠方から届けてもらう必要無し。地球の裏側に住んでる人が作った物体も、ネット経由で設計データだけ入手して、目の前で寸分違わず再現できる。どう考えても便利。

ホームセンターで3Dプリンタを置いてそれっぽいサービスを始めたりしないものかなあ。木工ブースの片隅にでも置いといて「3Dプリンタも使えます!」とか。3Dプリンタじゃなくて、コンピュータで制御してMDFをレーザーで切っていく機器でもいいけど。

まあ、利用者数を考えたら儲けが出ないか…。お店の宣伝の一環、程度の扱いになりそうな。

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

#1 [raspberrypi] 電動雲台にギヤボックスをつけた

木材で組んだ電動雲台の接着剤が固まっただろう、ということでギヤボックスをつけてみたり。

回らない…。途中で引っ掛かって止まってしまう。軸がずれた状態で固定してしまったらしい…。

仕方ないので、ギヤボックスを固定してる木ネジを、長めのネジと交換。あえてキッチリ固定せず、わざとグラグラするようにしてみたり。ギヤボックスを回して軸が傾いてくるとギヤボックスも微妙に傾いて、一番回りやすい位置・抵抗が少ない位置に移動することでどうにか回り続ける、みたいな。

後は、電池ボックスやバッテリー等を乗せてみて回るかどうか…。さて。

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

#1 [raspberrypi] 電動雲台に色々乗せた

電動雲台に、電池ボックス、モバイルバッテリー、Raspberry Pi3、ブレッドボード等を乗せてみた。

それぞれをどうやって固定するかで悩んだり。とりあえず、電池ボックスとモバイルバッテリーは、支柱に木ネジをつけて、そこに輪ゴムを引っ掛けて、その輪ゴムが電池ボックス等を軽く抑え込む形でどうにか。もっと奇麗な見た目にしたいけど…雲台が回った時に落ちなければそれでいいか…。

なんだか電動雲台が歪んでいる、ような気がする。バッテリー等の重さで歪んでるわけではなくて、どうも支柱をネジ止めした段階で形が歪んでいたらしい。木棒を鋸で切る際に斜めになっていた可能性も。きっちり水平に切る・垂直に立てるのって、難しいな…。

面積というか重心の問題で、Raspberry Pi3 とブレッドボードを立てて固定したいのだけど、何を使って固定するかで悩んだり。ひとまず Raspberry Pi3 は、Seriaで買ってきたミニL型金具でケースを挟む形で立ててみたけど。問題はブレッドボード。どうやって固定すればいいのやら。

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

#1 [raspberrypi] どうしてブレッドボードにはネジ穴が無いのだろう

電動雲台にブレッドボードを固定する方法で悩んでいたり。立てて固定したいのだけど、当然グラグラするわけで。

裏面の両面テープを剥がしてくっつけてしまえばマシになるのかもしれんけど、そうしてしまうと再利用が難しくなるし。再利用できないのでは何のためのブレッドボードか、みたいな。

今現在、とりあえず、養生テープでブレッドボードを Raspberry Pi3 のケースに貼り付けて、気持ち的には固定してるつもりでいるけれど。養生テープは接着力が弱いので時間が経つと剥がれてしまう。かといって強力なテープで貼り付けてしまうと、これまた再利用が難しくなる。

これがもし、ブレッドボードにネジ穴がついていれば、ネジでしっかり固定できるし、ネジを外せば再利用もできるのだけど…。手持ちのブレッドボードにはネジ穴が無い。というかブレッドボードの類は基本的にネジ穴がついてない製品が多いようで。いや、ついてる製品もあることはあるけど、電源ラインが1系統とかちょっと物足りなさが。

どうしてブレッドボードにはネジ穴が無いのだろうか。あれば便利だろうに…。いや、ついてる製品も(以下略。

まあ、ブレッドボードは、電子回路を試しに作ってみるのが目的のアイテムなので、何かにカッチリ固定して、と考え始めたらそれはもうブレッドボードの出番じゃない、ユニバーサル基板にでも電子部品を乗せてはんだ付けしてユニバーサル基板にスペーサーでもつけてどうにかする段階、みたいな前提がおそらくあるのだろうけど。

とは言え、以前も書いたけど、ブレッドボードを使ってしまったら、はんだ付けなんて面倒臭くてやってられない…。や、昔は、電子回路を作る=はんだ付けだったのだから、甘えたこと言ってんじゃねえとなじられるだろうけど。この楽ちんさを知ってしまうと…もう…。

解決策がありそうな。 :

Google画像検索でブレッドボード関係の画像を眺めているうちに、100円ショップで売ってるプラケースの蓋にブレッドボードを貼り付けて、プラケースの蓋のほうをどこかしらに固定、という事例を見かけた。なるほど…その手があったか…。探してくるか…。

TAMIYA ユニバーサルプレートにブレッドボードを貼り付けて、ユニバーサルプレート側でどこかしらに固定、という方法も思いついたけど。ユニバーサルプレートは穴がたくさん開いてるからよろしくないかもしれないなと。接着面の広さが、穴が開いてる分狭くなるはず。ということは接着力が弱くなるはず。というか、穴が開いてる部分に埃やゴミ等がくっついてしまうか…。

#2 [raspberrypi] HiLetgoに注文していた品が届いた

Amazon経由で HiLetgo に注文した品が届いた。2017/07/29頃に注文したらしい。届くまで2週間かからなかった。意外と早かった…。

届いた品は以下。
購入時は気にしてなかったけど、ミニブレッドボードにはネジ穴が開いてた。ありがたい。コレを使えば固定も楽になるだろうか…。

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

#1 [raspberrypi] Raspberry Piのケース画像を眺めてたり

ケースを紙で作れないかな、と思ってGoogle画像検索をして眺めてるところ。いやまあ、紙は燃えるので、一時的なソレならともかく、ずっと使い続けることは絶対考えちゃいかんのだけど。

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

#1 [anime] HDDレコーダで録画してたアレコレを少し消化

HDDレコーダの空き容量が厳しいので、録画したまま見れてなかったアニメ等を少し消化。鉄血のオルフェンズ最終回とか、リトルウィッチアカデミアの最終回とか、進撃のバハムート2期とか。

鉄血の感想をメモ。 :

鉄血のオルフェンズの感想ってメモしてたっけか…。どうだったかな…。覚えてないからメモしておこう…。

敵から悪魔呼ばわりされるガンダムの図とか、頭部をアレされる展開とか、なんとなく1stとの共通点を感じたりして。もちろん、1stではあんな見せ方だったのに、こっちではこんな扱いに、てなあたりの違いがなんだか面白いわけだけど。

ガンダムというタイトルを使って任侠モノ(?)っぽいソレをやってみた点も面白かったなと。考えてみれば、1stはロボットアニメで戦争モノをやったところが新しかったわけで。ガンダムに限らずサンライズのロボットアニメは、「ロボットアニメで○○モノ」という点が当時としての新規性だったのだろうと。そういう意味では、このガンダムも、「ロボットアニメで○○モノ」を踏襲してるわけだから、ガンダムらしいというか、サンライズのロボットアニメらしいというか、これまでの系譜の中に組み込まれても何らおかしくない企画、だったような気もするわけで。

昨今は、というより随分前から、不殺を唱える主人公が漫画やアニメの中では大流行してるわけだけど。このガンダムの主人公はそこらへん真逆な点も興味深かった。SEEDの主人公が「やめろおお!」と叫びそうなぐらいにバンバン殺しまくり。同時に、コイツラ絶対まともな死に方しねえな…と予想できたわけで。ハッピーエンドはあり得ないし、どういう死に様を見せてくれるのか、そこが最初からある種の見どころとして設定されてたというか。で、ラストを見て、なるほど、悪くないですね、みたいな。それなりに納得できる展開だったのではあるまいかと。

作画に関しては、恐ろしいことになってた気もする。TVアニメでここまで力を入れちゃって大丈夫なのか、みたいな。ビームを撃ってドカーン、じゃないからなあ…。鉄塊を振り回してグシャッが基本、てな設定だもんな…。アニメーターさん達、大変だったろうなあ…。

リトアカの感想をメモ。 :

トリガー作品というとどうしても今石監督+中島かずき脚本の作品を連想してしまうのだけど。監督と脚本家が違うと、全然違う雰囲気になるのだなと。ってそんなの当たり前だけど。

トリガー作品なのにこんなに大人しくていいのかな、とすら思ったけど、子供さんにも見せられる作品を意識した、てな話をどこかで見かけた記憶もあるし、であれば、これはこれで、みたいな。ただ、いかにもトリガーらしいめちゃくちゃなノリを期待してた層には肩透かしだったかもしれないなと。いや、これもこれで結構色々とめちゃくちゃだったと思うけど。

このアニメ、NHKあたりで放送しないものか…。とにかく元気一杯な作画を、子供さんに見せてみたいというか。幼児が見てくれそうな時間帯に全国放送、とかそんな形がピッタリ合いそうな気もするわけで。NHKで放送しないものかなあ。

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

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

Windows10機上のビデオカード交換作業をしに、某所まで電動自転車で。15:50-16:50まで作業。

ビデオカードの交換作業自体はメモを公開しても問題ないはず…。その他の詳細はGRPでメモ。

交換したビデオカードについて。 :

今まで使っていたビデオカードは、RADEON HD 4850使用のビデオカード。
  • ASUS EAH4850/HTDI/512M/R2。ATI RADEON HD 4850, DDR3/512MB, DVI-I x 2, PCI Express 2.0 x16, 消費電力:110W, 補助電源必要, 付属品:DVI→VGA変換コネクタ、DVI→HDMI変換コネクタ、S端子→コンポジット変換コネクタ。
_EAH4850/HTDI/512M R2 株式会社ユニティ

新規購入のビデオカードは、RADEON HD 6450使用のビデオカード。
  • 玄人志向 RH6450-LE1GB。AMD/ATI RADEON HD 6450, DDR3/1GB, D-SUB x 1 / HDMI x 1 / DVI-D x 1, PCI Express 2.1 x16, ロープロファイル対応, 補助電源不要, 空冷FAN x 1。
_玄人志向 | RH6450-LE1GB:AMD Radeon HD 6450搭載 PCI-Express グラフィックボード

スペック面では1/2〜1/20程度まで下がるけど、最大消費電力は 110W から 18W まで減ってくれるはず。もっとも、3Dゲームをプレイするならともかく、Web巡回やOfficeソフト使用等なら、普段の消費電力はどちらもさほど変わらんだろうし、性能が下がったように感じないのではないか、と。

手順メモ。 :

DDU (Display Driver Uninstaller) 17.0.7.2 と amd-catalyst-15.7.1-win10-64bit.exe を事前にDL。今回は自分のPCでDLしてUSBメモリに入れて持って行った。

DDU を使ってドライバをアンインストールする。
  1. DDUを実行。セーフモードで再起動するように要求されたので従ったが、何故か画面が映らなくなった。リセットスイッチを押して再起動。
  2. ログイン画面が出たところで電源アイコンをクリックして Shiftキーを押しながら再起動を選択。色々選んでセーフモードで起動するモードを選んで再起動。
  3. 次回起動時に4キーを押してセーフモードで起動したところ、自動でDDUが起動してくれた。
  4. ビデオカード交換用の、ドライバ削除とシャットダウン、を選択。ドライバが削除されてシャットダウンした。

ケースを開けてビデオカードを交換。ディスプレイはVGA端子(D-SUB端子)に接続。

電源投入したら、BIOS画面も映ったしWindowsのデスクトップも表示された。

Windows10 用の RADEON HD 6450 のドライバはレガシードライバ扱いになってるらしい。amd-catalyst-15.7.1-win10-64bit.exe を実行。幸い、すんなりインストールできた。

もし、ドライバのインストール途中でブルースクリーンになる場合は、設定ファイルを書き換えてインストール作業をしないといかんらしい。まあ、2010〜2012年頃の話だから、さすがに今はそこまでせんでもいいのだろう…。

AMD/ATIのGPUを使ってるビデオカードだからどこかでトラブルが起きてハマるかなと不安だったけど、特にコレといった問題も起きずに作業が終わったのでホッとした。

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

#1 [nitijyou] 奥歯のあたりが痛い

昨晩から左上の奥歯のあたりが痛い、ような気がする。上の前歯の左側も痛いし…歯医者に行かないとマズイのだろうけど…。

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

#1 [nitijyou] 最近のMMD動画は凄いのだな

たまたま何かの拍子に今時のMMD動画を目にしてちょっとビックリ。質感が昔のソレと全然違う…。どうやら外部レンダラーを使ったり等色々できるようになってるらしい…。凄いことになってるなあ…。

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

#1 [nitijyou] ボイスレコーダーが見つからない

お袋さんがあれこれ録音したいと言ってたので階下に置きっぱなしにしてあるはずの OLYMPUS製ボイスレコーダー、というかICレコーダを探したのだけど、これが見つからない。

親父さんに渡してMP3プレイヤーとしても使えますよと説明した記憶があるので親父さんのPCデスクの周辺に置きっぱなしの可能性もあるけど、何かの講演会を聞きに行くから録音したいとお袋さんが言い出してその際渡したような記憶もあるようなないような。あるいは、階下に置いていても存在すら忘れ去られてしまったその様子を見て部屋に持って帰った、てな展開もあり得そうだし。記憶がはっきりしない…。

ひとまず、親父さんやお袋さんが無意識に置いてそのまま忘れてしまいそうな場所や、自分の部屋の中を探してみたけど、どうにも見つからない。どこにあるんだ…。

#2 [nitijyou] お墓参りをしてきた

夕方、犬の散歩をしながら、母方の祖父母の墓参りをしてきた。

が、お墓の前で犬は興奮して暴れるし、お子さん連れの他の方々と遭遇して「あ、犬だ!犬だ!」と騒がれるし、やぶ蚊に襲われるしで、早々に退散することに。数秒しか手を合わせられなかった気がする…。これで墓参りと言えるのだろうか…。

#3 [nitijyou] サイレンが聞こえる

夜、消防車のサイレンがずっと鳴っていて。Webで確認したところ、どうも滑川のあたりで火事が発生してしまったらしい。どういう状況になっているのだろう…。

まさかとは思うけど、お盆の迎え火の不始末、だったりしないだろうな…。お墓参りした時も、あちこちで迎え火を焚いてたけど…。

#4 [anime] 終物語アニメ版を視聴

終物語は、西尾維新原作の、物語シリーズの一編、という説明でいいのだろうか。昨日今日とBS11で2夜連続放送されてたので見てみたり。

面白かった…。いや、予想通りの展開ではあるけど、このキャラは何者なんだろう、と思わせていく過程が上手かった印象が。更に正体が分かった後も、まあそうなるよな、あのキャラだもんな、などと納得できるというか。

本編が始まる前に、30分〜45分ほど、今までの話を総集編っぽく解説してくれたので、かなり助かった。どんな話があったのか、今ではもうほとんど忘れてしまっていたので…。あー、ここであのキャラの名前が出てたのかー、等々、本放送時は完全スルーしちゃってたシーンや台詞の存在に気づかせてもらえたおかげで、なんとか本編を楽しむことができたというか。「これまでのあらすじ」を見ないで、いきなり本編を見始めても、おそらくピンとこなかったであろう予感。

映像は相変わらず独特で、個人的に好み。にしても、川原泉先生風の絵柄が出てきた時は驚いた…。そこを出してくるか…。

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

#1 [comic] 「ダンジョン飯」5巻を読んだ

妹から以下略。

そう来るか…。やっぱりこの作家さんは天才じゃないかなあ…。いや、個人的には、あまり「天才」という単語を安易に使いたくないのだけど。 *1 これはやっぱり天才としか言いようが…。発想からして非凡というか…。

東洋のキャラが出てきたあたりや、その呼び方について、なるほどと。昔のTRPGのアレコレを視覚化するとこうなるのか、みたいな。ていうか、こういうノリを知ってて漫画作品に盛り込めるあたり、この作家さんは一体何者なんだ…。世代が分からん…。
*1: 世間で「天才」と呼ばれてる人達のほとんどは、えてして努力で能力を獲得してたりするわけで…。世間様の「天才」呼ばわりは、彼等の努力を一切評価せず、まるで最初から能力を持って生まれてきたソレ、ある種のチート野郎、的な扱いをどこか感じてしまうので、ちょっとしっくりこない。

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

#1 [pc] Core 2 Duo と Atom の性能差が気になる

_MinifreeのLibreboot T400は無料ではなく自由の意味でfreeなコンピューター | TechCrunch Japan という記事を眺めてたら、はてブで「Atomより劣ってる」と言ってる人が居て、その発言が妙に気になってしまったり。

いくら Core 2 Duo が数世代前のCPUとは言え、さすがに が Atom に劣るってのはないだろう…。Core 2 Duo を舐め過ぎでは…。それとも今のAtomはそこまで言わせてしまうほどに凄いのか? てな感じで、性能差が気になってきて、少しググってしまったり。

今時のAtomを積んでるノートPCは、どの Atom を載せてるのか、価格.comを眺めて把握。…まあ、 _IntelはAtomシリーズを終了させた はずなので、今時のAtomって言い方もおかしいけど。

_価格.com - ノートパソコン スペック検索・性能比較

どうやら Atom Z8300 とか Z8350 を載せてる製品が多いっぽい。であれば、そのあたりと比較するのが妥当かな。

Core 2 Duo P8400 との性能差はどのくらいだろう。

_Intel x5-Z8350 vs Core2 Duo P8400

ベンチマークから見る処理速度は、Core 2 Duo P8400 のほうが上。Atom Z8350 もかなり迫ってはいるけど全体的には力及ばず、って感じ。ここだけ見ると、「Core 2 Duo のほうが Atom より劣ってる」とは、とても言えない。

ただ、省電力性に注目すると、唸ってしまう。

_Intel Atom - Wikipedia

Core 2 Duo P8400 は20〜25Wほど食うけど、Atom Z8350 は、たったの 2W。消費電力が一桁違う…。一桁少ない消費電力で処理速度的に迫ってるのだから、それはそれで凄い。

コア数・スレッド数も違う。Core 2 Duo は名前からしてコアが2つだけど、Atom Z8350 は4コア入ってるし、4スレッド動かせる。

更に Atom は、CPU に GPU まで内蔵されている…。Core 2 Duo世代のチップセットの内蔵GPUって何だっけ? たしか性能低かったよな…。

なので、省電力性、コア数・スレッド数、GPU内蔵か否か、等を見れば、「Core 2 Duo は Atom に劣ってる」と言えなくもない。が、処理速度だけ見たら「劣ってる」とは言えないわけで。…てな状況なのかなと。

まあ、Wikipedia のソレを見ると Celeron もAtomに分類されてるっぽいけど。

_Intel N3450 vs Core2 Duo P8400

今時の Celeron と比べると Core 2 Duo はちょっと負ける。けど、Atom って名前をつけずに Celeron 扱いになってるし…。そこと比較していいものかどうか…。

雑感。 :

ということで個人的には、「Atomより劣ってる」と言われると異を唱えたくなるけど、これがもし「Atom並み」てな言い方だったら「ですよね」という感想になりそうだなと。こういうのって「〜並み」「〜程度」という言い方でビミョーにぼかしとけば角は立たない(?)よなあ、みたいな。

というか、「数世代前のCPUはべらぼうに遅いのだ。話にならないのだ」的な変な思い込みを持ってる人が世の中にはちょこちょこ居るんじゃないかと邪推してしまったりもして。

傾向として、当時そこそこ使えてたCPUなら今でもそれほど遅くはないはずで。Core 2 Duo って、シングルコアの性能向上が頭打ちになってきたから複数コアを入れて性能向上を模索し始めた時期のCPUで。つまりそのあたりから劇的な速度向上は期待できなくなっていて。ということは、数世代前のCPUなら、まだなんとか使えなくもないでしょ、みたいなところが。でも、今のCPUと比べたら電気食うから、ちと割に合わないよね、ぐらいの認識が妥当じゃないのかなあ、と自分は思ってるのですが、どうなんですかね。

まあ、CPUだけ見てもな…。HDD、SSD、eMMC、どれを載せてるかでも、体感で随分違ってくるだろうし。

_同一機によるHDD, eMMC, SSDの速度比較: 私のこころグ

自分はずっとHDD使ってるけど、さすがに体感速度的に厳しくなってきた…。MsMpEng.exe とか CompatTelRunner.exe とかコイツラが動き始めると、HDD載せてるPCでは何の作業もできなくなる…。Windows10の開発陣はどう考えてもSSD載せたPCで作ってるだろ、HDD環境を無視してるだろ、みたいな。CPUがそこそこの速度で動いてても、ストレージが全体の足を引っ張るよなと。

#2 [web][neta] MMDのあのジャンルは新しい映像ジャンルのような気がする

思考メモ。

MMD関連についてググっているうちに、極一部で奇妙なジャンルが人気を博しているらしいことを今頃知ったというか。どういうジャンルかというと…音楽のリズムに合わせてキャラがあられもない姿でひたすら卑猥な動きを繰り返す、みたいな、人によっては見た瞬間絶句するであろう、なんともアレなソレで…。

それらのジャンルは人体モデルの表面をテカテカさせたりする関係でセルルックを使ってない作品が多いようで、MMD=セルルックと思い込んでた自分は、こんな映像がMMDでも作れるのか、フィギュアが動いてるようにしか見えないなあ、恐ろしいなあ、的に眺めてしまったのだけど。いくつか目にしているうちに、もしかしてこれは新しい映像ジャンルが誕生してしまったのではないのかなあ、てな気分になってきたり。いやまあ、そんな発言をすると「お前脳みそに蛆でも沸いてるのか」と冷たい目で見られそうだけど、一応そう思ってしまった理由があって…。

まず、昔だったら、そういう映像を作ろうとしてもほぼ不可能だったわけですよ。

せいぜい、実写かアニメで映像を作るしか無かっただろうけど…。実写となると撮影するモデルさんが絶対必要なので、「こういう映像を作りたいんです。モデルになってください」と言った瞬間、「死ね! 変態!」「警察呼びますよ」と罵倒されて終わりだよなと。おそらくAVメーカぐらいしか、こういう映像を作れなかったはず。どう考えてもハードルが高い。素人は手が出せない。

かといってアニメで作るとなると昔は手描きアニメで作るしかなかったから、作業量を考えたら個人がおいそれと手を出せるものではなく。途中でちゃぶ台ならぬトレス台でもひっくり返しながら「やってられるか! バカヤロー!」となるのがオチ。

つまり昔だったら、脳内でああいう馬鹿げた映像が浮かんでも、個人レベルでは映像化できなかった。しかし今はPCがある。3DCGがある。ネットがある。人体モデルも(利用制限はあるけど)ネット経由で入手できる。高額な3DCGソフトを買わなくてもフリーソフトで3DCGが作れる。人体モデルのモーションだって作れる。

逆に言うと(?)、こういった頭痛がしてくる映像を作るためには…。 他にも色々あるだろうけど、多種多様な条件が整っていなければそれら映像イメージを具現化することなど到底できないわけで。

8bitPC時代から3DCGに少々興味があった自分からしてみれば、膨大な数の必須条件が全て満たされたが故に、ようやくここにきて誰でもこういう映像制作にチャレンジできるようになったのだなあ、こんな映像が出てくるぐらいに裾野が広がったのだなあ、と、なんだかしみじみしてしまうところがあるわけで。

いや、ホント。映像見て「アホか」という人がほとんどだろうけど、これはスゴイことで…。 _MZ-700版野球拳 とか _JELDA とか _X68K版STAR WARS とか _プラズマライン を思い返せば、なんだか目頭が熱く…。あの頃にこういう映像を作ろうとしても、きっとワイヤーフレームでどう見ても人間に見えないけどコレは美少女ですと言い張る謎物体が1秒に2〜3コマで動くだけだったろうからLOADしてRUNした数分後にブラウン管ディスプレイに右ストレートですよ。この期待に膨らんだ 股間 気持ちをどうしてくれる! でももったいないから一応アレしておこうかな…などとやってるうちにワイヤーフレームにしか反応しない性癖に到達したりして、これはもう危険極まりない。相手の方に「ゴメン。ちょっとワイヤーフレームになってくれない?」なんて言えないじゃないですか。そんな時代が存在しなくてよかった。少子化問題を加速させるところだった。

閑話休題。まあ、音楽に合わせてそういう動きを、という発想自体は別に新規性があるわけでもなく。外国ではその手のショーがあったわけだし、そもそも発端となったのは外国のビデオ作品、という話をどこかで見かけた記憶もあるし。日本でも、天岩戸の前で踊るアメノウズメの話が存在してるのだから、それこそ大昔から発想自体はあったと言える。しかし、発想はあるのだから実演もできるかというと話はまた別で。リアルにやってみせるのは難しい。

でも、3DCGキャラならそういう動きをさせても文句を言わない。「死ね! 変態!」と罵倒されずに映像を作れる。また、実写では不可能なモーションやシチュエーションを映像化することもできるわけで…。これは恐ろしい道具が手に入ったもんだよなと。

今はまだ「コイツラ頭おかしいんじゃないの」と言われそうなソレだけど。コレが妙な方向に発展していけば、何かトンデモな映像ジャンル・映像コンテンツになっていく可能性はありそうだよなと。だって、 _コレ の延長線上にそれら映像があるわけで、アレからココまでの道のりを思い返せば、更にこの先一体どこらへんに辿り着いちゃうのか、これはもう誰も予想できないだろうと。

などと説明してみたところで、現状では「キモイ」と言われて終わってしまうソレだよな…。

でもまあ、漫画やアニメ等も、昔は馬鹿にされてたけど今では、てな感じだし。アニメではヤマトやガンダムやEVAの登場で流れが変わったところがあるけど、こういうジャンルもソレに相当する作品が出てくれば、などと夢想したりもして。「そんな展開ねーよ!」と言われそうだけど…。 _日本の刀剣アニメ だって、今では _このレベル ですよ。当時の人がここまで変わると予測できてたかというとソレはないだろうと。なので、何がどうなるかなんて、これはもう分からんですよ…。

てな感じのくだらないことをもやもや考えてしまったのでメモ。思考メモ。

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

#1 [windows] Intel RSTを再インストール

メインPCのWindows10を、Windows10 Creators Update にしてみたものの、どうもHDDのアクセス速度が遅くなってしまったような気がしていて。

もしかして、Windows10 Creators Update にした際に、Intel RST(Rapid Storage Technology)が削除されてしまったのではあるまいか。いや、一応タスクトレイにはアイコンがあるんだけど…。一応再インストールしてみるかと。

ちなみに Intel RST てのは、Intel製チップセットが載ってるM/Bにおいて、SATA接続されたHDDへのアクセスを高速化できるソレ、という認識でいいのかな。基本的には RAID構成の時に入れるものらしいけど、RAIDじゃない環境でもMicrosoftの標準ドライバより高速になる、ことが多いらしい。と言ってもそのあたり Windows7 時代の話だから今はどうなのか分からんけど。

自分が使ってるM/Bは、Intel DH67BL。Intel H67チップセット、いわゆる、6シリーズを載せてるM/B。

Intel RST は、バージョンによってサポートしてるチップセットが違うそうで…。6シリーズや7シリーズを使ってる場合は、12.9.0.1001 が最終版になるらしい。13.x になると6/7シリーズはサポート外になる・インストーラが文句を言ってくるそうで。

ということで、 _インテル ラピッド・ストレージ・テクノロジー (インテル RST) 用のダウンロード から、12.9.0.1001 をDL。ちなみに、DH67BL用のドライバをDLできるページでは、11.7.0.1013 が最終版で、自分の手元でも 11.7.0.1013 をインストールしていた。

復元ポイントを作成後、上書きインストールできるかなと試してみたら、最後のあたりで「致命的なエラー」と表示されてしまった…。どうやら一旦アンインストールする必要があったらしい…。

再起動後、再度インストールしてみたら、今度はインストールできた。おそらく前回の作業時に前バージョンがアンインストールされて、それでスンナリ入るようになったのかなと勝手に想像。

CrystalDiskMark を使って速度を測定してみた。

rst_bench_01.png

rst_bench_02.png

以前と比べて、逆に微妙に遅くなってしまった…。いやまあ、誤差みたいなものかな、という気もするけど。

何にせよ、自分の環境の場合、Windows10 Creators Update によって RST が削除されてしまった、というわけではなさそうだなと。

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

#1 [neta] 巨大な何かの視線から逃れるゲームってどうだろう

寝る前にアニメ版ゴジラのPVを見たせいか、ゴジラや恐竜に追いかけられる夢を見てしまって。夢の中で、それら巨大生物の視線から逃れるように、木の陰に隠れたり等しながら逃げ回ってたあたりで目が覚めて。

寝ぼけた頭で、なんだか恐竜の全盛期に隠れるようにして暮らしてた哺乳類のご先祖様気分を味わってしまったなと思いつつ。ふと、コレってゲームにならんかなと。

その手のゲームって、えてして等身大キャラの視線を逃れながら移動して、てな仕様・シチュエーションが多いけど。巨大な何かの視線を逃れながら移動して、みたいなソレもアリなんじゃないのか…。昆虫というか、ぶっちゃけゴキブリにでもなったような感覚を味わいつつ、みたいな。

などと妄想したものの、そこでまた気が付いた。ソレって「ワンダと巨像」じゃないですか。

自分如きが思いつくようなことは、必ず誰かが既に思いついて実現してるんだよなーと再認識。

広げ方としてはアリかも。 :

とは言え、敵とプレイヤーキャラのスケール感を変えて一度考えてみる、という手はアリのような気もする。

例えば格ゲーは、自分も敵もどちらも同じぐらいのスケール感だけど、そこで差をつければ…。いや、ソレ、たぶんあのへんのタイトルになるんじゃないかな。

恋愛シミュゲーはどうだろう。ヒロインのサイズが巨大だったり、逆に極小だったり…。いや、ソレ、感情移入できるのかね。どうなのよ。

シューティングゲームではどうか。RPGではどうか。ADVゲームではどうか。「え。そこのスケール変えちゃうの?」的部分がどこかに無いか…。

#2 [nitijyou] Webビリングの登録情報が届いた

NTTファイナンスに請求していた、Webビリングの登録情報がハガキで届いた。ちなみにWebビリングってのは、NTTファイナンスからの料金請求の詳細をWeb上で確認できるサービス。

親父さんと一緒に、親父さんPCを使って作業。ハガキに書いてあるログインIDとパスワードでログインしてから、ログインIDとパスワードを変更する。滞りなく初期設定は済んだし、変更後の情報でログインもできた。

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

#1 [python] pipが警告を出してることに気づいた

Pythonのパッケージ管理ツール、pip を使ったら、警告が表示されてることに気づいた。pip list と打ち込むと、赤い文字で何か言ってきてる。--format の legacy がどうとか…。

ググってみたところ、どうやら pip 9.x から表示形式を指定することができるようになって、その設定について警告が出る、ということらしい。

_[小ネタ] pip 9 系にしたら pip list で警告出るようになったので止めたい | Developers.IO
_pip listでwarningメッセージが表示されたときの対処 - Qiita
_pip listコマンドを実行すると非推奨(DEPRECATION)が表示される | Hornet|静岡拠点のWeb、ホームページ制作
_User Guide - pip 9.0.1 documentation

設定ファイルに表示形式の指定を付け加えれば警告は出なくなるそうで。

自分は Windows10 を使ってるので…。Windowsの場合、設定ファイルは以下のどちらかになる模様。
%APPDATA%\pip\pip.ini
%HOME%\pip\pip.ini
もしくは、環境変数 PIP_CONFIG_FILE で、設定ファイルの場所を指定することもできるっぽい。

自分の場合、環境変数 HOME を設定してあるので、%HOME%/pip/pip.ini を新規作成して、その中に設定を記述することにした。
[list]
format = legacy
これで警告は出なくなった。

表示形式は、legacy、columns、freeze、json が指定できる、との話。最初は columns を指定したものの、なんだかパッと見で分かりづらくて、結局今まで同様の legacy を指定することに。

#2 [python][cocos2d] cocos2dを少し触ってみた

cocos2dは、Pythonを使って2Dゲームを作れるライブラリ。pygletを使ってOpenGLで描画するので、SDLを使う pygame と違って高速に描画できるらしい。「Pythonで2Dゲームを作りたい」と質問すると十中八九「pygame使え」と返されるけど、「pygameは遅いんじゃい」と抗議すると「じゃあ pyglet や cocos2d でも使えば」と言われる、そんな雰囲気があるというか。

もっとも、cocos2d はあまり人気がないようで…。どちらかというと cocos2d を参考にして作られた cocos2d-x や、iPhone対応の Cocos2d-Swift のほうが人気者っぽい。

_cocos2dの歴史をまとめてみた。cocos2d-x と cocos2d-iphoneと cocos2d-swift と cocos2d-html5 と cocos3d の違い | miyahiraブログ

とは言え、スクリプト言語で2Dゲームを作れるなら気軽に始められそうだよな、という気もするわけで。ちょっと試しに触ってみようかなと。

インストール方法。 :

自分の環境は Windows10 x64 + Python 2.7.13 32bit。とりあえず cocos2d をインストール。DOS窓を開いて以下を打つ。
pip install cocos2d
cocos2d の動作には、six、pyglet が必要なので、それらも一緒にインストールされるかもしれない。自分の場合は six も pyglet もインストール済みだったので、cocos2d だけインストールされた。

また、音を鳴らすためには SDL が必要になるらしいので、SDL を使えるようにしてくれる pygame もインストールする。
pip install pygame

ちなみに、cocos2d が要求する six てのは、Python2 と Python3 の両方で動くソースを書けるようにするパッケージ。その手のパッケージは他にもあるらしいけど。future (python-future) とか。cocos2d は six を使ってるよ、ということなのだろう…。

_Python でバージョンニュートラルなコードを書くためのライブラリ Six | CUBE SUGAR STORAGE
_Python のバージョン毎の違いとその吸収方法について - CUBE SUGAR CONTAINER

pyglet てのは、Python から OpenGL を使えるようにしてくれるパッケージ。OpenGL を使って描画すると高速に描画できるのだ、ぐらいに思っておけばいいかなと。

他にも、
  • パーティクルを使いたければ numpy が必要とか。
  • 動画を再生したかったら AVbin も必要とか。
やりたいことによって他のパッケージも必要になってくるらしいけど、そのあたりは以下のページで説明されてるっぽい。

_Installation, Dependencies and Compatibility - cocos v0.6.4 documentation

ハローワールド。 :

とりあえずウインドウを表示しないと話にならないので、以下のチュートリアルに従ってソースを打って、というかコピペして実行してみたり。

_Writing a cocos2d application - cocos v0.6.4 documentation

_hello_world.py
import cocos


class HelloWorld(cocos.layer.Layer):

    def __init__(self):
        super(HelloWorld, self).__init__()
        label = cocos.text.Label(
            'Hello, world !!',
            font_name='Times New Roman',
            font_size=64,
            anchor_x='center', anchor_y='center'
        )
        label.position = 320, 240
        self.add(label)


cocos.director.director.init()
cocos.director.director.run(cocos.scene.Scene(HelloWorld()))

python hello_world.py で実行。チュートリアル記事に載ってるソレと同様のウインドウが表示された。どうやら問題なくインストールできたっぽい。

サンプルソースは無いのかな? 以下のページから cocos2d-0.6.4.zip をDLして解凍すれば、その中にサンプルソース群が入ってる模様。上記のソースも入ってた。また、ドキュメントも(全部英文だけど)入ってた。

_cocos2d 0.6.4 : Python Package Index

とりあえず、samples/hello_world_actions.py を実行したら画像が回転拡大縮小しながら表示されたし、samples/handling_events.py を実行したらマウスのカーソル座標やキーボード入力を検出できたので、ちゃんと動いてるっぽいなと。

ググってみたら、以下でもサンプルソースが公開されてた。

_liamrahav/cocos2d-python-tutorials - github

AVbinも一応インストール。 :

オーディオと動画関係を扱える AVbin なるものもインストールしておいたほうがいいのかなと思えてきたので、一応インストールしてみたり。

_AVbin Downloads から、Windows版のインストーラを入手。AVbin10-win32.exe と AVbin10-win64.exe をDLした。

それぞれ実行したところ、C:\WINDOWS\system32\ 以下に、avbin.dll と avbin64.dll がコピーされた。

32bit版のほうはアンインストーラもインストールしてくれたけど、64bit版のほうはアンインストーラのインストールに失敗してる模様。

_Downloads - AVbin/AVbin で、Ver.11 等があるらしいので、試しに AVbin11alpha4-win32.exe , AVbin11alpha4-win64.exe をDLして実行、インストールしてみたら、この版は 32bit も 64bit もアンインストーラのインストールに成功した模様。

解説記事がほとんど無い。 :

ググっても、cocos2d-x 等の記事しか出てこないな…。かろうじて見かけたのは以下ぐらい。ありがたや。

_続cocos2d事始 - スコトプリゴニエフスク通信
_続cocos2d事始 - Menuを作る - スコトプリゴニエフスク通信

#3 [pc] 親父さんPCのWindows10をアップデート

親父さんPCのWindows10を、Windows10 Creators Update にした。本来ならWindows10が「更新できるよ」と言ってくるらしいのだけど、どうも親父さんの使い方は、電源ON→OFFの時間が短いようで、いつまで経っても「更新できるよ」と言ってこなくて…。仕方なく、更新アシスタントをDL・実行して作業することに。

ちなみに親父さん用PCは以下のスペック。
セットアップファイルのDLに1時間ほど。アップデートに1〜2時間ほど。処理中はずっとCPUファンが全開で回ってた。標準のCPUファンを使ってるので、かなりの騒音。

アップデート後、特に問題なく使えてる気配。ただ、CPUファンが以前と比べてうるさい感じで回ってるのが気になる。電力関係の何かをインストールしないといかんのだろうか…。昔のAMD製CPUはそういうツールだかユーティリティをインストールした記憶も…。しかし、ググってもソレらしい情報は出てこない…。

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

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴ったので、12:20-13:30の間、自宅サーバを止めてました。申し訳ないです。

ベンジャミン・フランクリンが雷は電気であることを証明してから約250年ほど経ったけど。未だ人類は、雷を有効活用する術を見つけられていない…。

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

#1 [python][cocos2d] cocos2d + python を勉強中

せっかくだから、cocos2d のドキュメントを眺めつつ少しだけ勉強中。ちなみに環境は、Windows10 x64 + Python 2.7.13 + cocos2d 0.6.4。

今のところ分かってきた範囲の内容を一応メモ。

おまじない。 :

cocos2d を使うときは、スクリプトソースの最初のあたりに以下を書く。
import cocos
「cocos2d」じゃなくて「cocos」をインポートする。最初うっかり cocos2d と書いてエラーが出て「アレ?」となった…。

座標系。 :

座標系は、+X が右、+Y が上、+Z が手前。

cocos2d_axis.png

この手のソレってフツーは +Y が下じゃねえのと思うのだけど、cocos2d が使っているOpenGLは上が +Y なので、cocos2d もこういう座標系になってるのかなと。いわゆる _右手系 ってヤツ。

クラスの構成。 :

cocos2d の概念(?)として…以下のようになってるっぽい。たぶん。おそらく。ちょっと自信ないけど。
  • レイヤー(layer)、シーン(scene)、ディレクター(director。監督)という概念(クラス)がある。
  • レイヤーには、スプライト(sprite)だの、テキストラベル(label)だのを複数登録できる。
  • シーンには、レイヤーを複数登録できる。
  • ディレクターは、複数のシーンを登録して管理できる。

director_scene.png

なので、メイン処理部分は、以下のような感じになる。
  1. director に初期化処理をさせて、
  2. layer を新規作成して、
  3. layer を登録したsceneを新規作成して、
  4. director に「この scene の実行を開始しろ」と指示する。
cocos.director.director.init()
layer = MyLayer()
main_scene = cocos.scene.Scene(layer)
cocos.director.director.run(main_scene)

「なんだかめんどくせーな」と思わないでもないけど…。まあ、実際ゲームを作るとなれば、タイトル画面、ステージ開始デモ、ゲーム本編、ゲームオーバー画面等々、各「シーン」は必要になってくるし、それぞれのシーン内では、背景レイヤー、キャラが動くレイヤー、スコア表示レイヤー等々が必要になってくるわけで。「どうせ後で必要になってくるだろうから大枠を用意しといたよ」てのはフツーと言えばフツーかな、という気もする。

とは言え、画像を一つだけ表示して動かしてみて何か簡単に実験したい、なんて時はやっぱり面倒臭い…。が、おまじないみたいなものと思ってしまえば、まあ…どうにか…。

画像の表示。 :

画像の表示は… sprite でも表示すればいいんじゃないかな…。たぶん…。

_cocos2d_sprite_b.py
_enemy_ball.png
        # spriteを生成
        self.sprite = cocos.sprite.Sprite('enemy_ball.png')

        # スプライト表示位置を指定。デフォルトは (0, 0) の位置。
        self.sprite.position = 320, 340

        # 生成したスプライトをレイヤーに追加
        self.add(self.sprite)

ただ、OpenGLで描画すると、拡大縮小時に画像がぼやけたり、画像の境界が微妙に表示されて汚く見えたりする時があって。

そんな時は、クッキリした感じで描画するように、画像に対してフィルタの種類を指定するという策があるらしい。ただし、cocos2d ではなく、cocos2d がベースとしてる pyglet を使って画像の読み込みと指定をする羽目になるようで。

_cocos2d/pyglet でぼやけないスプライトを描画する - Qiita

_cocos2d_sprite.py
# pyglet も使う
import pyglet

# (中略)

        # pygletで画像を読み込み
        image = pyglet.image.load('enemy_ball.png')

        # 拡大縮小時にボケないようにフィルタを指定。
        pyglet.gl.glBindTexture(image.texture.target, image.texture.id)
        pyglet.gl.glTexParameteri(image.texture.target,
                                  pyglet.gl.GL_TEXTURE_MIN_FILTER,
                                  pyglet.gl.GL_NEAREST)
        pyglet.gl.glTexParameteri(image.texture.target,
                                  pyglet.gl.GL_TEXTURE_MAG_FILTER,
                                  pyglet.gl.GL_NEAREST)

        # spriteを生成
        self.sprite = cocos.sprite.Sprite(image.texture)

2Dゲームと言えば、昔のスーファミやアーケードゲームの画面を連想するわけで…。当時の拡大縮小処理はドットがジャギジャギしてたよなと。なので、個人的にはクッキリジャギジャギのほうが好み…。

ショートカットキー。 :

cocos2dのウインドウが表示された状態で、以下のキーを押すと、各機能が働く。
  • Ctrl + F : フルスクリーン表示の切り替え。
  • Ctrl + P : ポーズ機能。
  • Ctrl + X : FPS表示/非表示の切り替え。
  • Ctrl + I : 内蔵インタプリタの起動/非表示の切り替え。

他のショートカットキーは以下を参考に。Ctrl + S や Ctrl + W があるっぽい。

_Default Handlers - cocos v0.6.4 documentation

余談だけど。FPSを表示しても、自分の環境では何故か60FPSにならなくて、55〜56FPSのあたりをフラフラしてるのが気になる…。どういう計算・仕組みになってるんだろ?

内蔵インタプリタによる動作確認作業。 :

cocos2dのウインドウが表示された状態で Ctrl + I を押すと、内蔵のPythonインタプリタが起動する。

_Built-in Python Interpreter - cocos v0.6.4 documentation

コレを使うと、以下の動画のようなことができるっぽい。

_cocos2d basic actions - YouTube

例えばだけど、下のような感じで打っていけば、一つずつ動作を確認できたりする。
director.scene.get_children()
layer = director.scene.get_children()[0]
layer
layer.get_children()
sprite = layer.get_children()[0]
sprite
sprite.position
sprite.position = (200, 200)
sprite.position = (300, 300)
from cocos.actions import *
sprite.do(MoveTo((400, 400), 2))
sprite.do(RotateBy(360, 3))
sprite.do(ScaleeBy(3, 1))
sprite.do(Reverse(ScaleeBy(3, 1)))

built_in_python_interpreter_ss.png

少しだけ説明しておくと…。
  • 「.get_children()」は、ソイツに登録されてる子供達の一覧を取得するメソッド。
  • 「.get_children()[0]」で、ソイツの子供達の中から、一番最初の子供を取得してる。
  • 「.position」は、表示座標を保持してる変数。
  • 「.do()」でアクション(移動、回転、拡大縮小等)を指定できる。

#2 [python][cocos2d] Python + cocos2d のアクションについて

cocos2d のアクションについては、ちょっと記述が長くなりそうなので、別記事にしてメモ。

アクションについて。 :

スプライトやレイヤーを、移動、回転、拡大縮小したい時には、アクション(actions)てのが使えるらしい。例えば以下のような感じの指定ができる。
  • 「(x, y) の位置まで○秒かけて移動しろ」
  • 「xxx度まで、○秒かけて回転しろ」
  • 「xxx倍まで、○秒かけて拡大または縮小しろ」
コレ、便利なのか不便なのか、ちょっとよくわからん…。

下準備。 :

アクションを使いたいときは、スクリプトソースの最初のほうに、以下のような行を書くと記述が楽になるらしい。
from cocos.actions import *

アクションの指定の仕方。 :

アクションは、「.do()」で指定する。
# (400, 300) の座標まで3秒かけて移動しろ、というアクション
move = MoveTo((400, 300), 3)

# スプライトにアクションを指示
sprite.do( move )

移動、回転、拡大縮小のアクションは以下のような感じ。
  • 移動 : MoveTo((x, y), 秒)
  • 回転 : RotateBy(角度, 秒)
  • 拡大縮小 : ScaleBy(倍率, 秒)

更に、以下で囲むことで、動作の様子を変える(?)ことができる。
  • 逆の動作 : Reverse() で囲む
  • 永久に繰り返し : Repeat() で囲む。

「〜To()」は絶対値の指定で、「〜By()」は相対値の指定、らしい。
  • 「最終的に、この座標値/角度/倍率にしろ」てな時は、「〜To()」で指示。
  • 「今現在の座標値/角度/倍率から、これぐらい変化させろ」てな時は、「〜By()」で指示。
てな感じの認識で合ってるのだろうか…? よくわからんですが。

アクションの複数指定。 :

各アクションは、繋げて(連続して?)指示したり、同時に指示したりできる。

繋げる時は、「+」を使う。
scale = ScaleBy(3, 2)   # 3倍まで2秒かけて拡大

sprite.do(scale + Reverse(scale))
この例だと、2秒かけて3倍拡大した後、2秒かけて1/3に縮小する。( Reverse() で囲んでるので、逆の動きをする。つまり元の大きさに戻る)。

同時に指示する時は「|」を使う。
scale = ScaleBy(3, 2)         # 3倍まで2秒かけて拡大
move = MoveTo((400, 100), 2)  # (400,100)の位置に2秒かけて移動

sprite.do(scale | move)
この例だと、2秒かけて3倍拡大しつつ、同時に、(400,100)の位置まで移動する。

サンプルソース。 :

_Writing a cocos2d application - cocos v0.6.4 documentation の内容に細かく日本語コメントをつけたソースを一応置いときます。というか貼っときます。

_cocos2d_actions.py
_enemy_ball.png
"""
cocos2d : actions sample.

http://python.cocos2d.org
"""

# cocos2D を使うときは import cocos を最初のあたりに書く
import cocos
from cocos.actions import *

# pygletも使う
import pyglet


class MyLayer(cocos.layer.ColorLayer):
    u"""メインのレイヤー.

    カラーレイヤー(cocos.layer.ColorLayer)のサブクラス.
    """

    def __init__(self):
        u"""初期化処理."""
        # カラーレイヤーを青色で初期化
        super(MyLayer, self).__init__(64, 64, 224, 255)

        # labeを作成。
        # cocos.text.Label は pyglet.text.Label のラッパー。
        # CocosNode の利点を持つ。
        label = cocos.text.Label(
            'cocos.text.Label',
            font_name='Times New Roman',
            font_size=24,
            anchor_x='center', anchor_y='center',
            position=(400, 200)
        )

        # ラベルをレイヤーに登録。デフォルトのz値は0
        self.add(label)

        # pygletを使って画像を読み込み
        image = pyglet.image.load('./enemy_ball.png')

        # 拡大縮小時にボケないようフィルタを指定。
        pyglet.gl.glBindTexture(image.texture.target, image.texture.id)
        pyglet.gl.glTexParameteri(image.texture.target,
                                  pyglet.gl.GL_TEXTURE_MIN_FILTER,
                                  pyglet.gl.GL_NEAREST)
        pyglet.gl.glTexParameteri(image.texture.target,
                                  pyglet.gl.GL_TEXTURE_MAG_FILTER,
                                  pyglet.gl.GL_NEAREST)

        # spriteを生成
        # cocos.sprite.Sprite は pyglet.sprite.Sprite のラッパー
        sprite = cocos.sprite.Sprite(image.texture, position=(400, 400))

        # スプライトのスケール(拡大縮小率)を指定。デフォルトは1
        sprite.scale = 6

        # スプライトをレイヤーに登録。z値を1に
        self.add(sprite, z=1)

        # スケール変化のアクションを用意する。6倍まで1.5秒かけて変化
        scale = ScaleBy(6, duration=1.5)

        # ラベルにアクションを指定。スケール変化(拡大→縮小)を繰り返す
        label.do(Repeat(scale + Reverse(scale)))

        # スプライトにアクションを指定。スケール変化(縮小→拡大)を繰り返す
        sprite.do(Repeat(Reverse(scale) + scale))


if __name__ == "__main__":
    # directorの初期化は pyglet.window と同じ引数を取る
    cocos.director.director.init(width=800, height=600)

    # レイヤーを作成
    layer = MyLayer()

    # 回転アクションをレイヤーに対して指定
    layer.do(RotateBy(360, duration=4))

    # hello_layer レイヤーを含んだシーンを作成
    scene = cocos.scene.Scene(layer)

    # メインシーンを director に渡して実行
    cocos.director.director.run(scene)
実行すると、レイヤーがぐるりと回りつつ、レイヤーに登録されたスプライトとラベルが拡大縮小を繰り返す、みたいな。

#3 [zatta][python][cocos2d] cocos2dって名前が良くない気がする

「python cocos2d」でググってみても関連記事がなかなか出てこなくて困るなと。というのも、cocos2d-x の記事ばかり出てくるわけで。マズイことに、cocos2d-x も開発ツールの関係で Python を使うようで。そりゃリストアップされるわな…。困る…。

もはや cocos2d という名前がよろしくないのだろうなと。例えばだけど、pycocos2d みたいな名前に途中で変更していたら、こういう場面でも少しは違う結果に…。

などと思いつつ、ふとググってみたら、既に _pycocos2d という名前を使った別パッケージが存在するようで。cocos2d-x のPythonバインディング、とな…。cocos2d を参考にして作られた cocos2d-x を Python で使えるように、てな展開に首を捻ったり。cocos2d-x の成果を元々の cocos2d に反映させる流れにはならなかったのだろうか…。 _seewindcn/pycocos2d: cocos2d-x python binding を眺めた感じでは4年前に開発停止状態。作者さんのリポジトリを眺めたらどうやら Unity に移行しちゃったようで。cocos2d系には見切りをつけたということかな…。

Python + cocos2d を試してるのは、Raspberry Pi上で動くゲーム制作ライブラリとしては使えるのかなと気になってるからで。Unity は Raspberry Pi上で動かないのだよなあ…。Scratch は1フレーム1命令っぽいからリアルタイムゲームの作成なんかほぼ無理だし。

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

#1 [python][cocos2d] Python + cocos2dでアクションを自作

Python + cocos2d をまだ勉強中。cocos2d はアクションという機能(?)を使ってスプライト等の動きを指定できるけど、既に用意されたアクションではなく、自作のアクションを使ってスプライトを動かす方法を試したり。

サンプルソース。 :

試しに書いてみたソースは以下。大量の玉モドキが違う方向に直線移動して、画面外まで行くと方向を変える、いつものソレ。

_cocos2d_myaction.py
_enemy_ball.png
u"""
cocos2d : sprite and action sample.

アクションを自作して大量にスプライトを表示してみる版.
"""

import cocos
from cocos.director import director
import math
import pyglet
from pyglet import gl


class MyAction(cocos.actions.Action):
    u"""スプライトに与えるアクション.

    画面外に出たら速度を反転する。
    """

    def init(self, vec):
        u"""初期化処理. 速度をタプルで渡す."""
        self.vec = vec

    def step(self, dt):
        u"""毎フレーム呼ばれる処理."""
        wdw_w, wdw_h = director.get_window_size()
        wh = self.target.image.width / 2
        hh = self.target.image.height / 2
        x, y = self.target.position
        dx, dy = self.vec

        # 本来はdtを使って計算したほうがいいが
        # 処理落ち時に動作がおかしくなるのでdtは使ってない
        x += dx
        y += dy

        # 画面外にぶつかったら速度を反転
        if x <= wh or x >= wdw_w - wh:
            dx *= -1
        if y <= hh or y >= wdw_h - hh:
            dy *= -1

        # 座標と速度を更新
        self.target.position = (x, y)
        self.vec = (dx, dy)


class MyLayer(cocos.layer.Layer):
    u"""メインとなるレイヤー. cocos.layer.Layerのサブクラス."""

    def __init__(self):
        u"""初期化処理."""
        super(MyLayer, self).__init__()

        # pygletで画像を読み込み
        image = pyglet.image.load('enemy_ball.png')

        # 拡大縮小時にボケないようにフィルタを指定。
        gl.glBindTexture(image.texture.target, image.texture.id)
        gl.glTexParameteri(image.texture.target,
                           gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST)
        gl.glTexParameteri(image.texture.target,
                           gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST)

        # batchノードを生成登録
        self.batchnode = cocos.batch.BatchNode()
        self.add(self.batchnode)

        # sprite群を生成してbatchノードに登録
        num = 160
        spd = 3.0
        a = 360.0 / num
        wdw_w, wdw_h = director.get_window_size()
        cx, cy = wdw_w / 2, wdw_h / 2
        for i in range(num):
            sprite = cocos.sprite.Sprite(image.texture)
            sprite.position = (cx, cy)
            rad = math.radians(a * i)
            dx = spd * math.cos(rad)
            dy = spd * math.sin(rad)
            sprite.do(MyAction((dx, dy)))
            self.batchnode.add(sprite)


def main():
    u"""メイン処理."""
    director.init()
    layer = MyLayer()
    scene = cocos.scene.Scene(layer)
    director.show_FPS = True
    director.run(scene)


if __name__ == "__main__":
    main()

動かすとこんな感じに。



一応動いてくれたっぽい。

少し解説。 :

アクションを自作する場合は、cocos.actions.Action を継承したクラスを作ればいいらしい。上記ソースでは MyAction がソレ。その場合、init() が初期化時(?)に呼ばれる関数のようで。引数は…自分で勝手に増やしていい、のかな。たぶん。

step() が毎フレーム呼ばれる関数。通常は def step(self, dt): みたいな感じに書いて、dt に、前回呼ばれてからの経過時間が入ってくるものと思われる。なので、x += dx * dt みたいな感じで書けば、処理落ち時も速度がおかしくなったりはしないはず。

ではあるのだけど、例えば Ctrl + X を押してFPS表示を有効にした際などは数秒ほど画面が止まったりして、そんな時はとんでもない大きさの変化量になってしまって動作がおかしくなったりして。なので今回は dt を無視することにした。…いや、本来であれば、画面外判定と移動量計算等をもっとちゃんとやればおかしくならないはずだけど、所詮サンプルだし、面倒臭くて…。

自作アクションの中では、self.target に、アクションを割り当てた何か、が入ってる。上記ソースの場合、self.target は玉モドキのスプライトを示してるので、self.target.position を変更すればスプライトの表示位置も変わる。

BatchNodeについて。 :

アクションとはまた別の話だけど。今回は BatchNode てのを使った。

通常は、レイヤーにスプライトを次々に登録していけばそれで済むのだけど。大量に同じ画像を描画しようとした場合は意外と処理時間がかかってしまうようで。そんな時は、BatchNode てのを使って、スプライト群を BatchNode に登録、かつ、BatchNode をレイヤーに登録すれば高速化ができる。

_CocosNodes - cocos v0.6.4 documentation によると…。スプライトを25枚ぐらい描画するとかだったらフツーにスプライトを登録していく感じでもまあいいんだけど、25〜100枚ぐらい描画するぜ、みたいな時はBatchNodeを使うと4倍ぐらい高速に描画できると思うよ、みたいなことが書かれてるっぽい。たぶん。おそらく。自分は英語赤点野郎なので全然違うことが書いてあるかもしれんけど。

スプライトの枚数。 :

古の2Dゲーム機、メガドライブは、QVGA程度(320x224)の画面で32x32のスプライトを80枚表示できたので…。VGA(640x480)の画面だったら64x64のスプライトを80枚表示できればメガドライブ程度の見た目のゲームをおそらくは作れるだろうと。仮に、メガドラのソレがスプライトダブラーで枚数を倍近く増やしていたとしても、160枚。

ということで、上記ソースでは、640x480の画面で、64x64のスプライトを160枚描画してみたのだけど。Core i5-2500 + GeForce GTX 750 Ti の環境では60FPSに近い値で動いてくれているようなので、これなら2Dゲームも作れそうかなと。…まあ、スプライトしか使わないなら、だけど。

問題は、メガドラ同様にBGを2枚描画するとどうなるか…。この手のソレで、BG x 2枚を描画すると、ライブラリによっては結構遅くなる可能性も…。

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

#1 [nitijyou] タイルマップを作製してたのだけど

マップエディタの _Tiled Map Editor と、ドットエディタの _EDGE2 を使って、タイルを敷き詰める感じの背景データを作成しようとしていたのだけど。ビル街を上空から眺めた感じのソレを作っていたつもりが、どうもしっくりこなくて。

「イメージファイト」や「ソニックウィングス2」の動画を探して眺めてみたけど。あー。自分の描いたソレとは、描き方が全然違うのだな…。こういう風に描かないとしっくりこないのか…。こりゃもう一度描き直しだ…。

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

#1 [cg_tools] Tiledのタイルセットファイルについて

タイルマップエディタの Tiled 1.0.0 を触っていたのだけど、以前と違ってタイルセットが .tsx という別ファイルで保存されるあたりが気になって。昔は .tmx の中にタイルセット情報も含まれていて、別途ファイルを作らなかったよな…。.tmx だけで済むようにするにはどうしたらええのや。

弄ってたら、ちょっと分かってきた。タイルセットの下のほうにツールバー?があるけど、その中の「Embed Tileset」というボタンを押して有効にすると、タイルセット情報が .tmx の中に含まれる状態になって、.tsx は作らずに済むらしい。

tiled_102_ss.png

逆に、.tsx で保存したい場合は、「Embed Tileset」の右横に「タイルセットに名前をつけてエクスポート」というボタンがあるので、ソレをクリックして .tsx で保存すればいいらしい。

あるいは、タイルセットを新規作成する際に、「Embed in Map」にチェックを入れておけば .tsx を作らずに済む模様。

話は全然変わるけど、今現在は Tiled 1.0.2 が公開されてるっぽいな…。試しにアップデートしてみたり。

#2 [anime][neta] 逆に感心してしまった話

思考メモ。

ちょっと気になるニュースを見かけて。

_アニメ「活撃 刀剣乱舞」に性的な演出とスタッフがTwitterで発言 制作会社が謝罪 - ねとらぼ
_アニメ『活撃 刀剣乱舞』スタッフが性的演出アピール「男性器みたいで面白かった?」⇒制作会社が謝罪文で釈明
_活撃刀剣乱舞アニメ8話の演出家 高橋タクロヲさんが薬研が馬に舐められる演出をわざと性的にして大炎上 - NAVER まとめ

女性ファンから嫌悪される結果になったようではあるけど…。自分はちょっと違った印象を受けてしまって。「たかだか動物がキャラを舐めるだけの、通常なら単なる記号カットとして扱われる場面ですら、そんな演出意図を込めて、こだわりを持って作っていたのか…」と、逆にある意味感心してしまったというか。

言われてみれば、キャプチャ画像をざっくり眺めただけでも、作画の仕方、尺の取り方からして、フツーのアニメとは明らかに一線を画すシーンになってるよなと…。件の作品はあらゆる箇所で異様なまでのこだわりを持って作ってる、という話は聞いてたけど…。たしかにガチだ…。ufotable、恐ろしいなあ。こんなカットすらここまでやってたんかい。みたいな。放送に間に合わせることだけを最優先で作ってるアニメもまだチラホラあるこんな状況下で、気合入れまくってるなあ、と。

とは言え、こだわる方向性がアレだったというか、ちとマニアック(?)過ぎて、メインの視聴者層には「違う。そうじゃない」「コレジャナイ」と思われてしまったのだろうけど…。なんというか、方向性って大事ですね、とも。ただ、そこにあったこだわりだけは、ファンの方々は否定しないであげてほしいものだよなと…。「わかったわかった。スタッフがこだわって作ってることは痛いほどわかった。そこは認めよう。だが…そっちじゃないんだよおお! 違うんだよおお!」みたいなノリで一つ、と願ってしまったりもして。 *1

まあ、思考メモです。そんなことを思ってしまいました、てなだけの話です。

女性向けのアレコレについてなんとなく連想。 :

たしか昔、腐女子を自称してる方が、「私達は石ころの裏にひっそり身を隠してるダンゴ虫やナメクジ」「わざわざ石ころをひっくり返してお天道様に晒さないでくれ」とどこかでつぶやいてた、そんな記憶が。自分は男ではあるけど、「あー、その感覚ちょっとわかる…」「上手い喩えをするもんだなあ」と思ってしまったもので。

その喩えからすれば、今回の件のつぶやきは、石ころをひっくり返しながら、「お前たちってさあ、これが好物なんだろ?」とビールをジャバジャバかけられた状態、みたいなソレだったのかなと…。

そこに居るのはちゃんと分ってるけど、あえて見てみぬふりをして、しかし石ころの周りには、腐った落ち葉や野菜くずを、そっと、びっしりと敷き詰めてやる、みたいなソレが繁栄の秘訣、だったりするのだろうか…。「お前ら! エサ置いといたぞ! 食えよな!」と大声で知らせたりしない。ダンゴ虫達が驚いて逃げるから。なんとなくここに置いただけなんだよねー、君達が居るなんて、いやー知らなっかたなー、的な白々しいすっとぼけ演技をしながら御馳走をそっと置く。みたいな。

他にも、これもまた腐女子を自称する方が、「公式がそこまでやるな! 私達の仕事が無くなる!」とつぶやいてるソレを見た記憶もあって。ネタは公式が提供するけど、醸すのはファンの仕事、てのはたしかにそうで、公式が醸すところまでやってはいかんのだろうなと…。でも、下ごしらえはしとかないとファンの側で醸せないし。「これじゃまだ足りないかな?」「むむっ。やり過ぎたか?」のジャッジが難しそう。

どういう方向でこだわればよかったんだろう。 :

こだわる方向が適切ではなかったらしい、とは思うけど、であれば、どういう方向でこだわれば良かったんだろう…。

例えばだけど、リアクションかな…。いや、本編ちゃんと見てないから、実はリアクションもちゃんと見せてたのかもしれんけど。

馬にベロンと舐められた後、キャラによっては…。
  • 無言で刀を一閃して馬の首を切り落とすキャラ。
  • 「ハハハ、こやつめー!」と笑顔なんだけど本気で馬の首を絞めてくるキャラ。
  • 「コラ、ダメだろ」と馬の頭を拳でコツンと軽く小突くキャラ。
  • ほっぺたをプクーと膨らませて「めっ!」をするキャラ。
  • 突然のことで棒立ちのまま固まってしまうキャラ。
  • 無表情で馬の顔を睨むキャラ。馬もキャラを見つめる。キャラのアップ。馬のアップ。キャラのアップ。馬のアップ。馬が察してシュンとなってキャラが「よし」で終わるキャラ。…枚数節約できるなコレ。
等々、キャラによって様々なリアクションが思いつくし、普段はあんなキャラなのにこんな場面ではそんな表情見せるんだ、てなところを描きやすいシーン、ではあるよなと。舐められ方に対しての反応で、キャラが馬を普段どのように扱ってるのか、馬はキャラに対してどの程度親愛の情を持ってるか、お互いの関係性もうっすらと見えてくるはずで。

で、視聴者に、「うわあ。こんな舐められ方をしたら俺だったら即グーパンだわ。なのにこの反応…。さすが○○」と思ってもらうためには、聞いただけで「うへえ」と思えるぐらいのSEや、見るからに「ちょ、馬、待てよ。やめろよー」と思える濃い目の作画も必要になる。

「…と考えてココは生々しいSEやねっとりした作画にこだわってみました!」という話だったら女性ファンも「お、おう…」となった可能性は、などと妄想を。

でもそこで「馬の首を男性器に」とか言い出したら、そりゃあ…浅いよなと。いや、浅くはないのか。明後日の方向で深いというか。しかしそっちじゃないらしい。じゃあどっちなんだ。どっちなんでしょう。せっかくの機会だから、「そうかー、そっちじゃなくてこっちかー」的に気付いて次回作の演出で活かして欲しいものだよなと…。

まあ、そんな妄想をしました、とメモ。

*1: まあ、ufotable作品って、まるでufoのように妙な方向に飛んでく(力を入れる)時があって。今回も「えっ? ああ…そっちに向かって飛んでしまったのか…」と思ってしまったところも…。

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

#1 [python][cocos2d] Python + cocos2d で Tiled の tmx を表示

Python + cocos2d で、タイルマップエディタ _Tiled の .tmx ファイルを表示できるか動作確認中。

サンプルその1。 :

とりあえず表示はできた。ソースを貼ってみたり。

_cocos2d_tmx.py
_city_bg2.png
_city_bg2.tmx
_enemy_ball.png

u"""
Tiledで作った.tmxファイルを読み込んで表示してみるテスト.

BGを立てスクロール、かつ、sin値で横にもスクロールさせてみる.

Windows10 x64 + Python 2.7.13 32bit + cocos2d 0.6.4
"""

import cocos
from cocos.director import director
import math


class MyAction(cocos.actions.Action):
    u"""スプライトに与えるアクション."""

    def init(self):
        u"""初期化処理."""
        self.count = 0
        self.scrl_y = 0

    def step(self, dt):
        u"""毎フレーム呼ばれる処理. BGをスクロールさせる."""
        wdw_w, wdw_h = director.get_window_size()
        self.count = (self.count + 45.0 * dt) % 360.0
        self.scrl_y = (self.scrl_y + 256.0 * dt) % 1024
        rad = math.radians(self.count)
        x = int(384 * math.sin(rad) + 1024)
        y = int(self.scrl_y + (wdw_h / 2))

        # スクロール座標を指定
        # 指定座標が画面中央にくるようにスクロールする
        scroller.set_focus(x, y)


class MyLayer(cocos.layer.Layer):
    u"""キャラを乗せるレイヤー. BGスクロールには追従しない."""

    def __init__(self):
        u"""初期化処理."""
        super(MyLayer, self).__init__()
        wdw_w, wdw_h = director.get_window_size()
        sprite = cocos.sprite.Sprite("enemy_ball.png")
        sprite.position = (wdw_w / 2, wdw_h / 2)
        self.add(sprite)
        sprite.do(MyAction())


def main():
    u"""メイン処理."""
    global scroller

    director.init(width=640, height=480,
                  autoscale=True, resizable=False)
    director.show_FPS = True

    # スクロールマネージャを生成
    scroller = cocos.layer.ScrollingManager()

    # .tmxファイルを読み込み
    map_res = cocos.tiles.load('city_bg2.tmx')

    # タイルレイヤー情報を取得。レイヤー名でアクセスできる
    bg_city_layer = map_res['bg_city']
    bg_cloud_layer = map_res['bg_cloud']

    # パララックス(視差)を指定
    # 奥のBGのスクロール量を少なくしてる
    bg_city_layer.parallax = 0.5

    # ScrollingManagerに登録
    scroller.add(bg_city_layer)
    scroller.add(bg_cloud_layer)

    # スクロール座標を指定
    scroller.set_focus(512, 0)

    # シーン生成。ScrollingManagerを登録
    scene = cocos.scene.Scene(scroller)

    # キャラを乗せるレイヤーを生成してシーンに追加登録
    chara_layer = MyLayer()
    scene.add(chara_layer)

    director.run(scene)


if __name__ == '__main__':
    main()

実行するとこんな感じに。



一応描画できてる、ようではあるなと。

ただ、フレームレートが安定してないあたりが、なんだかちょっと気になるけど。もしかして、描画が間に合ってない…?

少し説明。 :

.tmx ファイルを読み込む際は、cocos.tiles.load('tmxファイル名') を使う。map_res = cocos.tiles.load('tmxファイル名') みたいな感じ。

.tmxファイル内に含まれてるタイルマップレイヤーの情報は、レイヤー名で取得できる。layer_a = map_res['layer0'] とかそんな感じで。上記ソースの場合、「bg_city」レイヤーと、「bg_cloud」レイヤーが tmx内に含まれてるので、map_res['bg_city'] みたいな感じで取り出せる。

タイルマップレイヤーにはパララックス情報を指定することができる。パララックスってのは…視差とでも思っておけばいいのだろうか? 手前のBG( = BackGround、背景のこと)と、奥のBGのスクロール速度が違うことで、そこに奥行きがあるように感じたりするけど、そういう効果を巷では「パララックス」と呼んでるっぽい。昔風に言えば「多重スクロール」だろうか。

パララックスは、bg_city_layer.parallax = 0.5 みたいな感じで指定する。この場合、他のレイヤーと比べて0.5倍、つまりは半分のスクロール量にせよ、という指定。

BGの範囲外が表示されそうな時は、範囲内に収まるように補正してくれるっぽい。逆に言えば、ScrollingManager を使うとBGの範囲外を画面に描画できない。

タイルマップレイヤーをスクロールさせるには、cocos.layer.ScrollingManager() を使うと楽、らしい。set_focus(x, y) を使うと、x,y座標の位置が画面の中央にくるようなスクロール座標にしてくれる模様。

注意点というか不満点。 :

cocos2d のタイルマップは、ラップアラウンドをサポートしてないっぽい。ラップアラウンドってのは、右端と左端が繋がってるというか、上端と下端が繋がってるというか…。コレ、どう説明すればいいのだろう。

個人的には、2Dゲーム制作が前提のライブラリなのにタイルマップのBGがラップアラウンドになってないなんて、ちょっと信じられない仕様なのだけど。昔のPCにしろゲーム機にしろ、ハードウェア構成からしてラップアラウンドは当たり前だった印象があるのだけど…。スクロール値に応じでVRAMの一部を書き換える処理を入れるほうがちょっとビミョーに面倒臭いよね、みたいな。まあ、cocos2dの作者さんは、ちょっとずれた文化圏で育った人なんだろう…。

サンプルその2。 :

カーソルキーの入力でスプライトを動かして、そのスプライトの位置に応じたスクロールをするようなサンプルソースを書いてみたり。

_cocos2d_tmx2.py

u"""
Tiledで作った.tmxファイルを読み込んで表示してみるテスト.

カーソルキーでスプライトを移動しつつスクロール。
Zキーで75%と100%表示を切り替え。
Dキーでデバッグ情報表示。

Windows10 x64 + Python 2.7.13 32bit + cocos2d 0.6.4
"""

import cocos
from cocos import actions
from cocos.director import director
import pyglet
from pyglet import gl
from pyglet.window import key


class MyAction(cocos.actions.Action):
    u"""スプライトに与えるアクション."""

    def step(self, dt):
        u"""毎フレーム呼ばれる処理. カーソルキーの入力で移動."""
        x, y = self.target.position

        # キー入力で座標を変更
        # keyboard[key.HOGE] は、ON/OFF が 1/0 で入るっぽい?
        spd = 512.0 * dt
        x += (keyboard[key.RIGHT] - keyboard[key.LEFT]) * spd
        y += (keyboard[key.UP] - keyboard[key.DOWN]) * spd

        # 画面外に出ないように補正
        if x <= 32:
            x = 32
        if x >= 2048 - 32:
            x = 2048 - 32
        if y <= 32:
            y = 32
        if y >= 2048 - 32:
            y = 2048 - 32

        # スプライトの座標を更新
        self.target.position = (x, y)

        # 指定座標が画面中央にくるようにスクロール
        scroller.set_focus(x, y)


def main():
    u"""メイン処理."""
    global keyboard, scroller

    director.init(width=640, height=480,
                  autoscale=False,  # 自動拡大縮小
                  resizable=True    # ウインドウサイズ変更可・不可
                  )

    director.show_FPS = True        # FPS表示

    # スクロールマネージャを生成
    scroller = cocos.layer.ScrollingManager()

    # キャラが乗るスクロールレイヤーを生成
    chara_layer = cocos.layer.ScrollableLayer()

    # スプライトを生成して、スクロールレイヤーに登録
    sprite = cocos.sprite.Sprite("enemy_ball.png")
    sprite.position = (320, 240)
    chara_layer.add(sprite)
    sprite.do(MyAction())

    # .tmxファイルを読み込み
    map_resource = cocos.tiles.load('city_bg2.tmx')

    # タイルマップ用画像がぼやけないようにフィルタを設定
    for res in map_resource.contents.values():
        if isinstance(res, cocos.tiles.TileSet):  # タイルセットだけを対象に
            for tile in res.values():
                gl.glBindTexture(tile.image.texture.target,
                                 tile.image.texture.id)
                gl.glTexParameteri(tile.image.texture.target,
                                   gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST)
                gl.glTexParameteri(tile.image.texture.target,
                                   gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST)

    # タイルレイヤー情報を取得。レイヤー名でアクセスできる
    bg_city_layer = map_resource['bg_city']
    bg_cloud_layer = map_resource['bg_cloud']

    # パララックス(視差)を設定。奥のBGのスクロール量を少なくしている
    bg_city_layer.parallax = 0.25

    # スクロールマネージャに登録
    scroller.add(bg_city_layer)
    scroller.add(bg_cloud_layer)

    # キャラが載るレイヤーもスクロールマネージャに登録
    scroller.add(chara_layer)

    scene = cocos.scene.Scene(scroller)

    # pygletのキーボード入力関係をdirectorに渡してるっぽい
    keyboard = key.KeyStateHandler()
    director.window.push_handlers(keyboard)

    # ウインドウにキーボード入力があった際の処理を関数として記述
    def on_key_press(key, modifier):
        if key == pyglet.window.key.Z:
            # Zキーで拡大縮小
            if scroller.scale == .75:
                scroller.do(actions.ScaleTo(1, 0.5))
            else:
                scroller.do(actions.ScaleTo(.75, 0.5))
        elif key == pyglet.window.key.D:
            # Dキーでデバッグ情報表示
            bg_city_layer.set_debug(True)

    director.window.push_handlers(on_key_press)

    director.run(scene)


if __name__ == '__main__':
    main()

_cocos2d/pyglet でぼやけないスプライトを描画する - Qiita を参考に、タイルマップ用画像がぼやけないようなフィルタ設定も入れてみた。

スプライトをBGスクロールと関連付けたいときは、フツーのレイヤーではなくて、cocos.layer.ScrollableLayer() を生成してそこにスプライトを登録してやる。更に、その ScrollableLayer は、タイルマップと同様に ScrollingManager に登録する、みたいな。

directorの初期化時に、autoscale と resizable を与えることで、サンプルその1とは少し動作が違ってくる。
  • resizable を True にすると、ウインドウサイズを変更することが可能になる。
  • autoscale を False にすることで、ウインドウサイズを変更したり、フルスクリーン表示(Ctrl+F)にした際に、画面内が拡大縮小しない状態になる。

疑問点。 :

マップレイヤーは set_view(x, y, w, h) なるメソッドも持つらしいけど、使い方が分からん…。ScrollingManager() を使って set_focus(x, y) でスクロール値を指定しないといかんのだろうか。しかしそれでは、ビミョーに自由度が足りないような。

set_focus(x, y) ではなく、force_focus(x, y) を使えば、画面端の補正をしないようではあるな…。BGの範囲外(真っ暗な領域)も表示される模様。

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

#1 [nitijyou] 調子が悪い

腹痛で目が覚めた。調子がよくない…。

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

#1 [python] pygletを1.3.0rc1にしてみたら遅くなった

Python から OpenGL を利用できる pyglet というパッケージがあって、cocos2d もその pyglet を使ってたりするのだけど。

手元の環境では、今まで pyglet 1.2.4 を使ってたけど、気づいたら 1.3.0rc1 があるっぽいので、試しに差し替えてみたりして。また、pyglet が 1.3.x になるのと同時に、cocos2d も 0.6.4 から 0.6.5 になったらしいので、そちらもインストール。ちなみに環境は、Windows10 x64 + Python 2.7.13 32bit。
pip uninstall cocos2d
pip uninstall pyglet
pip install pyglet==1.3.0rc1
pip install cocos2d

cocos2d を使うスクリプトを動かしてみたら、FPSが 55 → 40 まで低くなってしまった。うーん。

タイルマップのBGを2枚表示してるところを1枚にしてみたら FPSが55ぐらいに戻ったので、どうもタイルマップの描画で遅くなってるっぽいなと…。

#2 [python][cocos2d] Ubuntu Linux上にcocos2dをインストールしてみたり

VMware上の Ubuntu Linux 16.04 LTS 上で、Python用のcocos2d をインストールしてみたり。
sudo -H install pyglet
sudo -H install cocos2d
sudo -H install numpy
sudo -H install pygame

AVbin のインストール方法は、ちょっとよく分からず…。

_AVbin Downloads
_Downloads - AVbin/AVbin

cd ~/Downloads
wget https://github.com/downloads/AVbin/AVbin/install-avbin-linux-x86-64-v11alpha4
chmod +x install-avbin-linux-x86-64-v11alpha4
sudo ./install-avbin-linux-x86-64-v11alpha4
これで合ってるのかな…? どうなんだろう。

cocos2dのスクリプトを動かしてみた。 :

Windows上で書いていたスクリプトを動かしてみた。

FPS が数百FPSになった。どうやら VMware、もしくは Ubuntu上で動かすと、VSyncを見ないらしい…。dt を使って計算するように修正しないと…。

cocos.director.dircetor.init() を呼ぶ際に vsync=True を入れてみたけど、反映されないな…。仮想PCじゃなくて実機で動かすとまた違ってくるのかな。どうなんだろう。

#3 [firefox] Firefox を 54.x から 55.x にアップグレードしてみたり

Windows10 x64 上で、Firefox 54.x が「55.0.3に更新できるよ」と言ってきたのでアップグレードしてみたのだけど。

アドオン(拡張)が…動かない…。
_The Addon Bar (Restored) :: Add-ons for Firefox
_Feed Sidebar :: Add-ons for Firefox
_Hatena Bookmark :: Add-ons for Firefox
_FindBar Tweak :: Add-ons for Firefox

たぶん他にも正常動作してないアドオンがありそう。

アドオンバーについては、 _Status-4-Evar もしくは _New Add-on Bar を導入することでなんとかなるのかもしれない。ただ、New Add-on Bar を導入しても _Cache Status がステータスバーだかアドオンバー上に表示されない。Status-4-Evar なら Cache Status のアイコンが表示されるけど、こちらはこちらで、一々URLだの「完了」だのが表示されるあたりが鬱陶しい…。

まあ、Firefox 57 になったら、今までアドオンを動かしてた仕組み、XPCOM/XULを全て切り捨てる計画らしいので…。

_デスクトップ版Firefox 57で拡張機能はWebExtensionsベースに限定化 - Mozilla Flux
_2017年11月リリースのFirefox 57より、拡張機能をWebExtensionsベースに一本化 -INTERNET Watch
_MozillaはXUL廃止を本当に実行に移すのだろうか - Schuzak’s Blog
_有名拡張機能や「Cyberfox」が終了 〜「Firefox」のレガシー排除といかに向き合うか - やじうまの杜 - 窓の杜

このままだとほとんどのアドオンが一斉に使えなくなるはずで。下手すると Firefox とはお別れになりそうな気配も…。拡張が使えない Firefox に存在価値なんて無いだろう…。 *1
*1: WebExtensionsベースで作り直せばいい、とMozilla側は主張してるようだけど、今まで公開されてた拡張を再現できるほどに機能が揃ってないという話だし。しかも各拡張の作者に作り直しを要求するとか…。

#4 [nitijyou] 花火大会だった

今日は須賀川市の花火大会だった。夕方、犬の散歩をしたけれど、その時点で周辺道路は結構な混雑ぶりに。

花火が鳴り始めたら、犬が怖がって大騒ぎ…。

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

#1 [python][cocos2d] Ubuntu実機上でPython + cocos2d を動かしてみたけれど

仮想PCの VMware + Ubuntu 16.04 上で Python + cocos2d を動かした際はFPSがなんだか妙なことになっていたので、試しに足元のサブPC、Ubuntu 16.04 をインストールしてある実機上で試してみたり。ハードウェアスペックは以下。
遅すぎる…。スプライト群を BatchNode で動かした場合は数百FPSの表示になったけど、BGを2枚表示すると10FPS前後の表示に。1枚だけ表示しても20FPSとかそんな感じで。これでは話にならない…。メガドラどころかPCエンジンにも、いや、ファミコンにすら劣る…。

AMD/ATIのGPUはOpenGLドライバが腐ってるのでそのせいかなとも思ったけど、Windows上でも仮想PC上でもタイルマップBGを描画するとFPSが落ち込むので、どうも cocos2d のタイルマップ関係の実装がアレなのかな、と邪推したりもして。一応表示・描画はできるけどパフォーマンスは期待するなよ、みたいな状況なのかも。

#2 [python][cocos2d][raspberrypi] Raspberry Pi3上でPython + cocos2d を動かしてみたけれど

Raspberry Pi3上で、Python + cocos2d のスクリプトを動かしてみたり。 まったく話にならない。ダメだこりゃ。どうやら、Python + cocos2d は使い物にならないみたいだなと。

もっともこれは当然らしく。Raspberry Pi3 はデフォルト状態だとOpenGLをハードウェアで処理せず、ソフトウェアで処理しちゃうのだとか。そりゃ遅くて当然。

ただ、開発中の OpenGLドライバもあるそうで、sudo raspi-config で設定を変更すると、まだ不安定ながらOpenGLドライバが使えるようになる模様。と言っても、ディスプレイをHDMIで接続してない環境では画面が映らなくなったり等、なんだか怖いことが起きるらしいけど…。

GLドライバを有効化。 :

以下を参考に作業。

_Raspberry Pi2 の X11 で OpenGL のハードウェアアクセラレート - その1- | Raspberry Pi
_Raspberry Pi メモ (48) Raspberry Pi2 で Blender を使う
_Raspberry Connect - Trying out OpenGL on Raspberry Pi 3

sudo raspi-config
Advanced Options → GL Driver を選んで、
G1 GL (Full KMS) OpenGL desktop driver with full KMS
G2 GL (Fake KMS) OpenGL desktop driver with fake KMS
G3 Legacy        Original non-GL desktop driver
G1 か G2 を選べば有効になるっぽい。Full と Fake の違いは今一つ分からず…。以下の違いぐらいしか把握してないけど。
  • Full を選ぶと解像度を選べない。また、HDMI接続されたディスプレイから音が出ない。
  • Fake を選ぶと解像度を選べる。また、HDMI接続されたディスプレイから音が出せる。(スピーカがついてるなら、だけど。)

G3 Legacy を選べば、元々の OpenGLダメダメ状態(ソフトウェアで処理する状態)に戻る。

OpenGL でギアを表示して描画パフォーマンス等を確認できる模様。
sudo apt-get install mesa-utils
glxgears
glxgears を動かしたら60FPS前後が表示された。

OpenGLドライバを有効にした状態で Python + cocos2d を試してみたら、5〜6 FPSになった。1〜2FPS と比べたら少しは改善したけれど、やっぱり話にならない…。しかもなんだかエラーが出てる…。libGL error とか、MESA-LOADER: failed to retrieve device information とか…。

Raspberry Pi上で、60FPSで動く2Dゲームを気軽に作れる環境がないものかと期待して触り始めたけど。どうやら Python + cocos2d ではダメっぽいな…。

#3 [firefox] Firefoxのタブ復元でちょっとハマったり

Firefox を使って調べ物をしていたら、怪しい感じのページが表示されて。他のブラウザで電話番号をググってみたら、やっぱり詐欺ページ。どうやらWeb広告に混じって詐欺ページが配信されてしまう時があるようで。これだから…広告の類は極力無効にしておきたいんだよな…。

_「Security Error 0x00759B」というフィッシングサイトの注意喚起について
_【詐欺】Zeusウイルス検出? 偽警告の消し方 Security Error 0x00759B WBCKL457に注意 ( その他コンピュータ ) - 無題な濃いログ - Yahoo!ブログ
_こんなに簡単にだまされるとは〜ウイルス感染詐称詐欺 - Let's enjoy bowling with miku! ver.2.0
_Microsoft Edgeを使用中に以下の?〜?のメッセージが重ねて表示されて、次の画面... - Yahoo!知恵袋
_【これは怖い】いきなりPCに謎の警告音声が流れる現象が!その正体と対策 - NAVER まとめ

さておき、いくらウインドウを閉じようとしても、無限ループで表示を試みる作りらしく、閉じることができなくて。仕方ないからタスクマネージャからFirefoxを終了させたのだけど、再起動したらまた詐欺ページが表示されて困り果てたり。

と言うのも、Firefox は不正終了した際、次回の起動時にタブを復元する設定になってるわけで…。タスクマネージャから強制終了させたから、次回起動時に詐欺ページまで丁寧に復元してくれるという…。

かといって、タブを復元しない設定にしておくと、実際に不正終了した時に困るわけで…。以前はどのタブを復元するか選べた気もするのだけど…。

#4 [nitijyou] 花火大会の後片付けはまだ済んでないっぽい

夕方、犬の散歩をしながら花火大会の後がどうなってるか眺めてたのだけど。まだ全然片付いてないのだな…。歩道にはロープが張られてたり、障害物が置きっぱなしだったりで。

田舎は車が主役なので、車道は片付いているけれど。歩行者や自転車は邪魔者扱いだから、そっちの片づけはおろそかに。でもまあ、歩道に置かれてた簡易トイレ群は片付けられていたから、それだけでもマシ、だろうか…。

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

#1 [raspberrypi][ruby][gosu] Raspberry Pi3上にgosuをインストールしてみた

Raspberry Pi3上に、gosuをインストールしてみた。gosuってのは、Rubyを使って2Dゲームを制作できるライブラリ。

sudo raspi-config で、OpenGLドライバ(Fake KMS版)を有効、かつ、Memory Split でGPUに256MBを渡した状態に設定してから、動作確認。

BG x 2枚 + スプライト512枚を描画してみたら40FPSしか出なかったけど、スプライトを160枚に減らしてみたら60FPSで動いてくれた。これならどうにかメガドラ相当のゲーム画面も作れそう。しかも OpenGLを使えば背景だけでも3DCGにできたりするから、セガサターンっぽいゲーム画面だって不可能ではない、かもしれない。

Python + cocos2d がスプライト80枚を描画するだけでも40FPS前後しか出なかったことを考えると、速度面では Ruby + gosu のほうが優秀というか、まだ使い物になりそうな雰囲気。

もっとも、Raspberry Piシリーズは、Pi1、Pi2、Pi3、Zero、それぞれCPU性能が違うわけで…。Raspberry Pi3上なら使い物になりそうでも、Zeroあたりで動かしたら話にならない可能性も。各環境で試してみないと分からんところがあるなと。

gosuのインストール。 :

一応、gosu の wiki に、Raspberry Pi用のインストール方法が書いてあるのだけど。

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

記事の冒頭に、

「ここに書いてあるのは Pi1 用のやり方だよ」
「Pi2 や Pi3 は、 _OpenGLを有効にした状態 で、Ubuntu/Debian Linuxと同じやり方でインストールしてくれ」
「gosuの現行版は動かんので、sudo gem install gosu --pre で最新版をインストールしてみて」

…と書いてある。ので、Linux版の記事のほうを参考にしつつ作業。

_Getting Started on Linux - gosu/gosu Wiki

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

sudo gem install gosu --pre
Rubyのモジュールは gem を使うとネットワーク経由でインストールできる。--pre は、現行版(安定版?)じゃなくて最新版(開発版?)をインストールせよ、という指定らしい。

gem でインストールすると、Rubyから呼び出せるバイナリを作るために、コンパイルだかビルドだかが走る。結構時間がかかるので、気長に待つ。体感で10分以上かかったような…。

gosu以外にも、chipmunk、opengl、rmagick もあったほうがいいらしいので、それもインストール。これもビルドされるので、やっぱり気長に待つ。
sudo gem install chipmunk
sudo gem install opengl
sudo gem install glu
sudo gem install glut

sudo apt install ruby-rmagick
sudo apt install libmagickcore-dev libmagickwand-dev
sudo gem install rmagick
_How to install the RMagick gem on a Raspberry Pi :: Andrew Havens, Ruby Developer

gosu-examples をインストールすると、gosuのサンプルを動かせる。

_Ruby - Gosu
sudo gem install gosu-examples
gosu-examples
gosu-examples と打って実行。右側のスクリプト名?をマウスでクリックするとサンプルを切り替えられる。chipmunk、opengl、rmagick もインストールしてあると、選べるスクリプトが増える模様。

もしかしたら、音を鳴らすために pulseaudio とやらも必要なのだろうか…。自分の環境では既に入ってたけど…。
sudo apt install pulseaudio
_OF 0.9.0 Rasberry Pi B+ sound problem - bugs, errors - openFrameworks

また、ひょっとすると、freeglut3 関係も必要だったりするのかな。要らないのかな。どうなんだろう。
sudo apt install freeglut3 freeglut3-dev
_OpenGL (GLUT) で正方形が動くだけのアニメーション - Qiita

問題点。 :

Ruby + gosu を使うスクリプトを実行すると、相変わらずエラーメッセージが表示される…。
libGL error
MESA-LOADER: failed to retrieve device information
MESA-LOADER: failed to retrieve device information
_Raspberry Pi 2/3 Model B(Raspbian Jessie with PIXEL)でRStudioを使う
_Bug #1656930 " OpenGL applications warns “MESA-LOADER: failed to...” : Bugs : Raspbian
_98629 - OpenGL applications warns "MESA-LOADER: failed to retrieve device information"

また、サウンド関係を使うと、これまた警告が。

_OpenAL warning on Ubuntu - Issue #292 - gosu/gosu

#2 [raspberrypi] Raspberry Pi3のOSをアップグレードしてみた

今まで、Raspberry Pi3に raspbian jessie(Debian 8) をインストールしていたけど。なんでも最近、raspbian stretch (Debian 9)という新しい版が公開されたらしいので、試しにアップグレードしてみたり。

本当はクリーンインストールがいいらしいけど…。面倒臭いので、試しにそのままアップグレード。以下を参考に作業してみたり。

_[メモ] (らずぱい) Raspbian: Jessie から Stretchへアップグレード - Qiita

パッケージレポジトリを jessie から stretch へ変更。
sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list
sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list.d/raspi.list
sudo apt update

何が更新されそうか確認。
sudo apt --simulate upgrade

実際に更新。
sudo apt upgrade
sudo apt dist-upgrade
sudo reboot

更新できたか少し確認。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.1 (stretch)
Release:        9.1
Codename:       stretch
一見すると更新できたっぽい。

書き換えられた設定ファイルについて。 :

気が付いた範囲では、以下のファイルが書き換えられた。
/etc/sysctl.conf
/etc/dhcpcd.conf
/etc/ntp.conf
/etc/lightdm/lightdm-gtk-greeter.conf
/etc/lightdm/lightdm.conf
まあ、どれも、自分の環境では修正したファイルなのでアレだけど。

自動ログインするユーザを変更。 :

デフォルトではpiユーザで自動ログインするようになってた。別のユーザで自動ログインするように変更。

_Debian Jessie Wheezy 自動ログイン lightdm系 Linux. リナックス. ヒト ノ タメ ノ.

sudo vi /etc/lightdm/lightdm.conf
autologin-user=pi を変更。

chromiumをインストール。 :

デフォルトブラウザが、Epiphany から chromium になったらしい。インストールしておく。
sudo apt install chromium-browser

OpenGLで問題発生。 :

アップグレード後、sudo raspi-config でOpenGLドライバを有効にしてみても、設定が反映されないことに気づいた。glxgears を実行すると激しく点滅するギアが表示されてしまう…。

やっぱりクリーンインストールしないとダメなのかな。知識がある人ならどこが怪しいのか調べて修正できるのだろうけど。…面倒臭い。クリーンインストールしてしまおう。

ということで、 _Raspberry Pi Downloads - Software for the Raspberry Pi から NOOBS をDLしようとしているのだけど、なんだか接続がブチブチ切れる…。18時間ぐらいかかる、と予想時間が出てる…。

要は NOOBS_v2_4_3.zip をDLできればいいのだよな。ミラーサーバは無いのかね。

_Raspbianのインストールと初期設定 | 純規の暇人趣味ブログ_raspbian日本のミラーサイト - Qiita で紹介されてた。 _http://ftp.jaist.ac.jp/pub/raspberrypi/NOOBS/ がソレっぽい。ここからDLさせてもらおう…。

_SDメモリカードフォーマッター - SD Association を入手して、Windows10 x64上にインストール。

Raspberry Pi3 から microSD を抜いて、Windows10 x64 に。SDメモリカードフォーマッターで、microSDをフォーマット。NOOBS 2.4.3 を解凍して、中に入ってるファイルとフォルダを microSD にコピー。Raspberry Pi3 に差し直し。

Raspberry Pi3 に、HDMI接続ディスプレイとUSBキーボードやマウスを繋いで、電源投入。raspbian をインストール。

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

#1 [raspberrypi] Raspberry Pi3にraspbian stretchをクリーンインストール

昨日の作業に続けて、raspbian stretch の設定作業を継続中。

ちなみに、OpenGLドライバは、sudo raspi-config で有効にしたら、ちゃんと働いてくれた。glxgears の表示も問題無し。jessieからアップグレードした際には正常動作しなかったのだけど、一体どのあたりに原因があったのだろう…。分からん…。

設定作業としては…。

pigpiodについて。 :

以下の記事が参考になった。

_Raspberry Pi 3でpigpioの使用 | TomoSoft
_[Raspbian] Raspberry Pi 3のGPIOを制御するpigpioライブラリ導入手順 - Life with IT

/lib/systemd/system/pigpiod.service は既に存在していた。後はサービスの有効化と実行をすればOKらしい。
sudo systemctl enable pigpiod
sudo systemctl start pigpiod
sudo systemctl status pigpiod
enable で有効化。startで開始。statusで状態を確認。

端末の背景が半透明にできない。 :

普段、端末エミュレータは xfce4-terminal を使っていて、jessie の頃は背景を半透明に設定できたような記憶があるのだけど。stretch になったら設定できなくなってるな…。なんでだろ。

_Debian User Forums - View topic - Transparent background not working anymore in XFC4-terminal
_Transparent background not working anymore in xfce4-terminal / General discussion / Xfce Forums
_http://i.imgur.com/eMJPptX.png

そうそう。こんな感じのメッセージが。

ググってたら、raspbian のウインドウマネージャ? デスクトップ環境? は、少し前に LXDE から PIXEL なるものに変わってる、という話を見かけた。そのせいかな…。

_【Pixel】Raspberry Piのための新デスクトップ

Python2をサポートしてるvimが無い。 :

vimの設定をしようとして、困ってしまった。

Linux の場合、vim-nox だの vim-gtk だの、どの機能をサポートしてるかで vim のパッケージが異なるのだけど。Python3をサポートしてる vim は存在するものの、Python2についてサポートしてるvimが見つからず。jessie の頃は vim-gnome が Python2 をサポートしてたんだけど…。stretch になったら vim-gnome も Python3をサポートして、Python2は切り捨てになってしまったようで。

この状態で、jedi-vim って使えるんですかね? 編集しようとしてるPythonスクリプトは、Python2向けなんだけど。

#2 [raspberrypi][python][ruby] Raspberry Pi3上でPython + cocos2d と Ruby + gosu を動かしてみた結果

一応、デジカメ(Canon PowerShot A3300 IS)で撮影してアップロードしてみたり。撮影時のフォーマットが、1280x720, 30FPSだから、ちょっと動きがアレだけど。




結果としては…。
Python + cocos2d が、どんだけ遅いかが分かるかなと…。

どうにも不思議なんだけど…。Python は人気があるよ、という割に、この手のライブラリは何故か今一つというか。pygame は遅いし、OpenGL (pyglet) を使ってるはずの cocos2d も、この通り遅かったし。まあ、pygame の使い勝手が良かったことで、この手のソレは pygame 一択になったものの、普及後、パフォーマンスに関してはさほど意識が払われないまま、ここまできちゃったのかな、などと想像してたりもするのだけど。 *1

Processing あたりはどの程度の速度で動くんだろうなあ…。アレも学習用としては悪くない印象が。

ググってみたら、 _HSP3 for Linux/Raspberry Pi なるものもあるらしい。昔 HSP について確認した際は、ネットブック上でも結構そこそこの速度で動いて感心した記憶があるけれど。この版は、どの程度の速度で動くのだろう…。
*1: そもそもリアルタイムゲームの類を Python や Ruby で書くんじゃねえ、と言い出す人が出てきそうだけど、プログラミング入門にも使える言語でこの手のソレがそこそこの速度で動いたら学習モチベーションも維持できるんじゃないの、などと考えちゃうわけで。Scratch でガクガク動くソレを作ってたお子さん達が、もうちょっとぬるぬる動く何かを作ってみたい、と思ったときに、いきなりC++で書いてコンパイル、とかさせちゃうのかよ、みたいな。間を埋める何かがあったほうがいいのではないかと。8bit PCの時代だってBASICがあったわけだから、今もBASICに相当する何かが存在してるほうが…。

#3 [nitijyou] 日記ページを更新

気が付いたら、2017/06/16にアップしてからその後ずっとアップロードしてなかった…。ということで、今日の分までアップロード。

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

#1 [raspberrypi] Raspberry Pi3 に mesa-utils-extraをインストールしてみた

Linux の場合、OpenGLの動作確認ができるパッケージとして mesa-utils があって。

例えば Raspberry Pi3 (Raspbian)の場合、以下でインストールができる。というか最初から入ってる。
sudo apt install mesa-utils

実行は以下。
glxgears
glxinfo
glxgears で、ギアが3つ表示されてFPSが出力される。glxinfo で、OpenGL の実装状況(?)が確認できる。

それらと似た感じで、 _OpenGL ES について動作確認できる、mesa-utils-extra というパッケージがあるようで。OpenGL ES てのは…OpenGLから機能を削って組み込み用途向けにしたもの、という説明でいいのだろうか。スマートフォン等で使われてるらしいけど。

インストールは以下。
sudo apt install mesa-utils-extra
es2gears
es2_info
es2gears で、ギアが3つ表示されてFPSが出力される。es2_info で、OpenGL ES の実装状況が確認できる。

ということで Raspberry Pi3上で mesa-utils-extra をインストールして動作確認してみたのだけど。

どうやら OpenGL と同様に、sudo raspi-config で OpenGLを有効(GL driverを有効)にしないと、正常表示されないようで。デフォルト状態では色がおかしかったり、形がおかしかったり。OpenGL ES ならすんなり描画できるのかなと期待したけど、甘かった…。

#2 [raspberrypi] Raspberry Pi3上でpygameのスクリプトを動かしてみた

Raspberry Pi3上でpygameを動かしたら、実はそこそこの速度で動いちゃったりしないのかな、と疑問が湧いてきたので試しに動かしてみたり。

スクリプトソースや画像は以下。

_pygame_fullscreen_py.zip

処理内容は…。640x480の画面で、64x64ドットのスプライト x 160枚 + BG x 2枚を描画しつつ、ogg再生をするスクリプト。

結果は…。OpenGLドライバを無効化した状態で40FPS前後、OpenGLドライバを有効化した状態で17FPS前後しか出なかった。やっぱり pygame は遅い。

いやまあ、何もしなくても ―― ソフトウェアによる描画処理だけでも40FPSも出るのか、という捉え方もありそうだけど…。60FPSなんて贅沢(?)を言わず30FPS決め打ちで動かせばそこそこソレっぽくはなるかも、てな気持ちになろうと思えばなれなくもないというか。

ホントか嘘かは知らないけど昔のSEGAのゲームは30FPSで動かしてたという話をどこかで聞いた記憶もあるし。PS1のリッジレーサーだって最初は30FPSだったし。自分がガラケー用のゲームを作ってた頃は10FPS程度で動かしていたしで。30FPSでも一応リアルタイム2Dゲームっぽいものを作れなくはないかもな、みたいな。

でも、Ruby + gosu なら60FPSで動くのだから、わざわざ Python + ○○を使って描画が遅いソレを作る意味は無いよな…。

#3 [raspberrypi] Raspberry PiでOpenGLはあてにしないほうがいいのではないか

ふと気が付いたけど、Raspberry PiでOpenGLはあてにしないほうがいいのではないかと今頃になって思えてきたりもして。

と言うのも、メモリ容量の関係で、OpenGL を有効にできるのは Pi2 や Pi3 のみ、だったことを思い出したからで。Pi1 や Zero は、OpenGL を有効にできない…。

安いし小さいということで、お子さんに Raspberry Pi Zero を買い与えたご家庭があるかもしれんけど、そういう環境ではOpenGLを使ったアレコレは動かせないのだよな…。その場合は pygame のソフトウェア描画で作るのが精一杯、かなあ…。うーん。

_Raspberry Pi2 の X11 で OpenGL のハードウェアアクセラレート ・ その2 ・ | Raspberry Pi によると、OpenGLを有効にした場合、
Minecraft も動作しません。Minecraft は X11 上で動作するアプリケーションですが、実際にはコンソールの OpenGL ES 描画結果を X11 上にレイヤ合成しているので、OpenGL ES/OpenVG アプリケーションが動作しないのと同じ理由でしょう。

Raspberry Pi2 の X11 で OpenGL のハードウェアアクセラレート ・ その2 ・ | Raspberry Pi より

とあるから…。逆に考えると OpenGL を有効にできなくても、Minecraft と同様のやり方 ―― OpenGL ES をアレすれば、ぬるぬる動かせる、ということなのかしら。いや、Pi1 や Zero 上では Minecraft がどの程度の速度で動いてるのか分からんけど。

このあたりが参考に…なりそうな予感…。

_Raspberry Pi メモ (7) OpenGL ES2(1) - Jun's homepage
_Raspberry Pi メモ (8) OpenGL ES2(2) - Jun's homepage
_Raspberry Pi メモ (19) - Jun's homepage

でも、40FPSしか出ない、という話も書いてあるな…。うーん。

#4 [raspberrypi] Raspberry Pi3に繋いだカメラで撮影できない

raspistill -o 01.jpg と打って撮影しようとしたら、以下のエラーが。
* failed to open vchiq instance
パーミッションの問題という話が。

_Raspberry Pi カメラモジュール | an10.info
_ラズパイのカメラモジュールで[failed to open vchiq instance]エラー - Qiita
_Omxplayer - Page 2 - Raspberry Pi Forums

sudo vi /etc/udev/rules.d/10-vchiq-permissions.rules
以下を追加。
SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"

sudo gpasswd -a ユーザ名 video
または、
usermod -a -G video ユーザ名

あるいはパーミッションを変更。
$ ls -l /dev/ | grep vch
crw------- 1 root video   246,   0 11月  4  2016 vchiq
sudo chmod a+rw /dev/vchiq
$ ls -l /dev/ | grep vch
crw-rw-rw- 1 root video   246,   0 11月  4  2016 vchiq

コレで撮影できるようになった。

#5 [raspberrypi] Raspberry Pi3にVNCでアクセス

raspbian stretch は RealVNC が標準でインストールされているらしい。アクセスできるか動作確認。
sudo apt install realvnc-vnc-server realvnc-vnc-viewer

設定を変更してvncを有効にする。
sudo raspi-config

再起動。
sudo reboot

デスクトップ画面のタスクバー?のあたりにVNCのアイコンが表示された。

Windows10 x64 からアクセス。…今までは Raspberry Pi3 + tightvncserver に、Windows10 x64 + UltraVNC の VNC Viewer でアクセスしてたけど、何故かソレではアクセスできず。仕方ないので、RealVNC系の Viewer もインストールすることに。

_VNC (Virtual Network Computing) - Raspberry Pi Documentation
_Download VNC Viewer | RealVNC

VNC-Viewer-6.17.731-Windows.exe をDLしてインストール。

VNC Viewer を起動して、Raspberry Pi3 のIPアドレスにアクセス。Raspberry Pi3 のデスクトップ画面が表示された。

#6 [raspberrypi] Raspberry Pi3でOpenGL ES関係のデモプログラムを動かしてみたり

/opt/vc/src/hello_pi/ 以下に、OpenGL ES 関係のデモが入ってるらしい。

_デモプログラム − Raspberry Pi公式ドキュメントを日本語訳
_OpenGL ES on RaspberryPi | Shinya Matsuyama

cd /opt/vc/src/hello_pi/
ls -al

各プログラムはCで書かれてるっぽい。ソースしか存在しないので、ビルドする。
sudo ./rebuild.sh

各フォルダ内に、*.bin というファイルが作成された。それぞれを実行すれば色々なデモが見れる。
cd hello_triangle
./hello_triangle.bin
cd ../hello_teapot
./hello_teapot.bin

Raspberry Pi3 上では、どちらもかなり滑らかに動いた。しかも全画面表示。これが…Raspberry Pi3の実力…。Cで書いてOpenGL ESを使えばこのくらいの速度で動かせるよ、ということか…。

ちなみに、RealVNC Viewer でアクセスしても各デモの結果を見ることができた。RealVNC なら OpenGL ES の描画結果を表示できる、ということなのだな…。 *1
*1: RealVNC ではなく tightvncserver を使った場合、OpenGL関係の結果は見れない、という話をどこかで見かけた記憶があるような。

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

#1 [raspberrypi] Raspberry Pi3上でHSP3を動かそうとしてみたけれど

先日、Linux や Raspberry Pi上でも動かせる HSP を開発中、という話を見かけたわけで。興味が湧いたので試してみようかなと。環境は、Raspberry Pi3 + raspbian stretch。

_HSP3 for Linux/Raspberry Pi に従ってインストール作業。
mkdir ~/hsp
cd ~/hsp
wget http://www.onionsoft.net/hsp/file/hsplinux35b5.tgz
tar zxvf hsplinux35b5.tgz
cd hsplinux35b5
これで hsplinux*.tgz のDLと解凍が済んだ。

ビルドに必要なパッケージをインストール。
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

ビルドしてみる。
sudo make -f makefile.raspbian
g++ -Wall -fpermissive --exec-charset=UTF-8 -DHSPDISH -DHSPLINUX -DHSPRASPBIAN -DHSPDEBUG -DUSE_OBAQ -I /opt/vc/include -c src/hsp3dish/emscripten/hgiox.cpp -o src/hsp3dish/emscripten/hgiox.do
src/hsp3dish/emscripten/hgiox.cpp:120:1: error: narrowing conversion of ‘255’ from ‘int’ to ‘GLbyte {aka signed char}’ inside { } [-Wnarrowing]
 };
 ^
src/hsp3dish/emscripten/hgiox.cpp:120:1: error: narrowing conversion of ‘255’ from ‘int’ to ‘GLbyte {aka signed char}’ inside { } [-Wnarrowing]
src/hsp3dish/emscripten/hgiox.cpp:120:1: error: narrowing conversion of ‘255’ from ‘int’ to ‘GLbyte {aka signed char}’ inside { } [-Wnarrowing]
...
中略
...
makefile.raspbian:105: ターゲット 'src/hsp3dish/emscripten/hgiox.do' のレシピで失敗しました
make: *** [src/hsp3dish/emscripten/hgiox.do] エラー 1

エラーが出てビルドできなかった。残念。

もっとも、件のソース群は raspbian jessie 用らしいので、stretch 上ではエラーが出るのも仕方ないのかも。

#2 [raspberrypi][python][pi3d] pi3dをインストール

Raspberry Pi の OpenGL ES を Python から使える、pi3d というモジュールが存在するらしい。

_tipam/pi3d: Simple, yet powerful, 3D Python graphics library for beginners and school children running on the Raspberry Pi.
_Pi3D Tutorial #1: Installation and Getting Started - YouTube
_pi3d/pi3d_demos: Demos and support files for pi3d (3D graphics python package for the raspberry pi)
_Welcome to pi3d’s documentation! - pi3d 2.20 documentation

興味が湧いたので、試しに Raspberry Pi3 + raspbian stretch にインストール。

インストール手順。 :

以下でインストールできるらしい。
sudo pip install pi3d
sudo pip3 install pi3d
Python 2.7 にインストールするなら pip を、Python 3.x にインストールするなら pip3 を使う。

pi3d_demos に、デモスクリプトがまとめてある。git を使って github から入手。
git clone https://github.com/pi3d/pi3d_demos.git

地球が表示されるはずのスクリプトを動かしてみる。
$ cd pi3d_demos
$ python Earth.py

libEGL warning: DRI2: failed to authenticate

警告が出て、何も表示されなかった…。Ctrl+C でスクリプトを強制終了。

「libEGL warning: DRI2: failed to authenticate」への対処。 :

(※ 2017/09/01追記。sudo rpi-update をすれば、問題は修正される模様。)

ググったら、以下のページが見つかった。

_libEGL warning: DRI2: failed to authenticate - Issue #177 - tipam/pi3d
_Frequently Asked Questions - pi3d 2.20 documentation
_Raspberry Pi 2/3 Model B(Raspbian Jessie with PIXEL)でRStudioを使う

pi3d のバグ報告や、FAQページによると、pi3d を動かす際には、
/usr/lib/arm-linux-gnueabihf/
に入ってる、以下の4つのファイルが絡んでくるらしい。
libEGL.so
libEGL.so.1
libGLESv2.so
libGLESv2.so.2

なんでも、sudo apt install xxxx をしていく際に、それらのファイルが不適切なファイルで上書きされてしまう…時があって、そうなると正常動作しなくなるのだとか。

ストレージ(microSD)内には、色んな種類の libEGL.so、libGLESv2.so が存在してるようで。 _find という、ファイル検索をするコマンドを使ってリストアップしてみる。

sudo find / -name libEGL*
sudo find / -name libGLESv2*

自分が使ってる raspbian stretch 上では以下の結果になった。
$ sudo find / -name libEGL*
find: ‘/run/user/1001/gvfs’: 許可がありません
/usr/lib/arm-linux-gnueabihf/libEGL.so.1
/usr/lib/arm-linux-gnueabihf/libEGL.so
/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
/usr/lib/chromium-browser/libEGL.so
/opt/vc/lib/libEGL_static.a
/opt/minecraft-pi/lib/mesa/libEGL.so
/opt/minecraft-pi/lib/brcm/libEGL.so
$ sudo find / -name libGLESv2*
find: ‘/run/user/1001/gvfs’: 許可がありません
/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
/usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
/usr/lib/arm-linux-gnueabihf/libGLESv2.so
/usr/lib/chromium-browser/libGLESv2.so
/opt/vc/lib/libGLESv2_static.a
/opt/minecraft-pi/lib/mesa/libGLESv2.so
/opt/minecraft-pi/lib/brcm/libGLESv2.so
chromium-browser や minecraft-pi も、それらのファイルを持ってると分かった。

また、/usr/lib/arm-linux-gnueabihf/ 内の各ファイルについても状況を確認してみる。
$ ls -al /usr/lib/arm-linux-gnueabihf/libEGL*
lrwxrwxrwx 1 root root     15  8月  4 21:41 /usr/lib/arm-linux-gnueabihf/libEGL.so -> libEGL.so.1.0.0
lrwxrwxrwx 1 root root     15  8月  4 21:41 /usr/lib/arm-linux-gnueabihf/libEGL.so.1 -> libEGL.so.1.0.0
-rw-r--r-- 1 root root 175516  8月  4 21:41 /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0
 $ ls -al /usr/lib/arm-linux-gnueabihf/libGLESv2*
lrwxrwxrwx 1 root root    18  8月  4 21:41 /usr/lib/arm-linux-gnueabihf/libGLESv2.so -> libGLESv2.so.2.0.0
lrwxrwxrwx 1 root root    18  8月  4 21:41 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2 -> libGLESv2.so.2.0.0
-rw-r--r-- 1 root root 38184  8月  4 21:41 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0
  • libEGL.so と libEGL.so.1 は、libEGL.so.1.0.0 からリンクが張られていた。
  • libGLESv2.so と libGLESv2.so.2 は、libGLESv2.so.2.0.0 からリンクが張られていた。

pi3dのFAQページには、「sudo _ln -fs リンク元 リンク先 を使って適切な .so を探して割り当ててみてくれ」と書いてあった。

chromium-browser のソレを割り当てて試してみる。
sudo ln -fs /usr/lib/chromium-browser/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so
sudo ln -fs /usr/lib/chromium-browser/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1
sudo ln -fs /usr/lib/chromium-browser/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so
sudo ln -fs /usr/lib/chromium-browser/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
sudo ldconfig
ldconfig は… _共有ライブラリの依存関係情報を更新する らしい。

_ldconfig【コマンド】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

python Earth.py を実行してみた。ダメだった。コレではないらしい。

minecraft-pi のソレを割り当てて試してみる。が、2種類あるな…。

/opt/minecraft-pi/lib/mesa/ 内のソレは、/usr/lib/arm-linux-gnueabihf/ 内のソレにリンクが張ってあった。これを指定しても意味はない。
$ ls -al /opt/minecraft-pi/lib/mesa/
合計 20
drwxr-xr-x 2 root root 4096  8月 16 10:02 .
drwxr-xr-x 4 root root 4096  8月 16 10:02 ..
lrwxrwxrwx 1 root root   40  7月  5 19:52 libEGL.so -> /usr/lib/arm-linux-gnueabihf/libEGL.so.1
lrwxrwxrwx 1 root root   43  7月  5 19:52 libGLESv2.so -> /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
-rw-r--r-- 1 root root 9588  7月  5 19:52 libbcm_host.so.1.0

/opt/minecraft-pi/lib/brcm/ 内のソレは…なんだかそれっぽいものにリンクされてる。こっちを試してみるべきかな…。
$ ls -al /opt/minecraft-pi/lib/brcm/
合計 8
drwxr-xr-x 2 root root 4096  8月 16 10:02 .
drwxr-xr-x 4 root root 4096  8月 16 10:02 ..
lrwxrwxrwx 1 root root   29  7月  5 19:52 libEGL.so -> ../../../vc/lib/libbrcmEGL.so
lrwxrwxrwx 1 root root   32  7月  5 19:52 libGLESv2.so -> ../../../vc/lib/libbrcmGLESv2.so

sudo ln -fs /opt/minecraft-pi/lib/brcm/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so
sudo ln -fs /opt/minecraft-pi/lib/brcm/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1
sudo ln -fs /opt/minecraft-pi/lib/brcm/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so
sudo ln -fs /opt/minecraft-pi/lib/brcm/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
sudo ldconfig

python Earth.py を実行。

…出た。なんか地球とか月っぽいものが出てクルクル回ってる。どうやらコレが合ってるらしい。ESCキーか、Ctrl+C を押して終了。

が、しかし、OpenGL ES が正常動作してるか確認できる、es2gears を実行してみたら、
EGLUT: failed to initialize EGL display
とエラーが表示されて何も出てこなくなった…。本当にこれでいいのだろうか…。

元に戻すときは…こうかな…?
sudo ln -fs /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libEGL.so
sudo ln -fs /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libEGL.so.1
sudo ln -fs /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so
sudo ln -fs /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
sudo ldconfig

動くものと動かないものがあるっぽい。 :

さておき、調子に乗って pi3d_demos 内のスクリプトをアレコレ動かそうとしてみたけれど。

_Introduction to pi3d - pi3d 2.20 documentation

動くものと、動かないものがあるな…。以下は動いたけど…。
Earth.py
Raspberry_Rain.py
Clouds3D.py
Shapes.py
SpriteBalls.py

MarsStation.py , TigerTank.py は、/dev/input/mice が Permission denied と言われて途中で落ちてしまった。後から追加したユーザアカウントで動かしてるので、マウス入力を取得するためのアクセス権限が無いらしい。

普段使ってるユーザも、ユーザ pi が所属してるグループ群と同じになるように設定してみた。これで、前述の2つのスクリプトも動くようになった。

グループに追加。 :

ユーザをグループに追加する方法も一応メモ。

ユーザpiがどのグループに所属しているか確認。
$ groups pi
pi : pi adm dialout cdrom audio video plugdev games users input netdev spi i2c gpio

ユーザ hoge が、どのグループに所属しているか確認。
$ groups hoge
hoge : hoge sudo video

usermod を使って、ユーザ hoge を各グループに登録。
sudo usermod -aG sudo,pi,adm,dialout,cdrom,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio hoge

登録できたか確認。
$ groups hoge
hoge : hoge adm dialout cdrom sudo audio video plugdev games users input netdev pi spi i2c gpio

一旦ログアウトして再度ログイン。

以下、参考ページ。

_raspberrypi3に独自のユーザを設定する | Hornet|静岡拠点のWeb、ホームページ制作
_usermodでグループを追加するのは危険 - Qiita

usermod を使う場合は、それまで登録されてたグループ名を“全て”列挙しなきゃいけない。記述漏れがあると大変なことになる。だから、usermod より gpasswd を使って登録作業をしていったほうが安全、という話もあるのだけど。上記の記事によると、usermod の -G オプション利用時は、-aG にすれば追加登録になるから、そういう指定をすれば gpasswd と同様の処理になるよ、ということらしい。

以上、31 日分です。

過去ログ表示

Prev - 2017/08 - 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