武装神姫(10)「クリスマスソングを君に」

このアニメって全何話なんだろう?

一話完結だから何話でも大丈夫な気はするけど、劇中の季節は冬となり実放送時の12月と同じ時期となりました。この速度だと次は追い越してしまいそう。この流れだと一年間を全13話で描くのかな…と、前にも書いたかも。

 

劇中でツガルが脚部を損傷した際に、神姫ショップで修理してもらうという会話がありましたけど、神姫だけで訪れてもアフターサービスを受けられるって事???(年間保守契約を結んでおけば、神姫自体の製造番号で照合すればいいのかもしれないけど…)

それにしても神姫程度の大きさだと、確かに動物に戯れ付かれたりした際に損傷しちゃうというのはありそう。レーネは犬に咥えられていたし、 Moon Angel ではカグヤがカラスに咥えられちゃってたし。

 

次回はヴァローナが登場するみたい。

武装神姫(9)「レーネの地下帝国ウォーズ」

今回の話を見ると、アニメ版の武装神姫では、野良神姫というが結構存在しているように描かれています。

劇中でも触れられているように、不要になった神姫はメーカーに回収する事になっているようだけど、実際には様々な理由によって野良神姫は増え続けていそう。

例えば、

  • 所有者が引越した際に、置いてけぼりになった。
  • 所有者に捨てられた。
  • 神姫が所有者から逃走した。
  • 所有者と死別した。

と、ちょっと考えただけでも色々な状況が考えられます。

神姫にロボット工学三原則が適用されるかわかりませんけど、自己保存のために[1. 野良神姫同士で助け合ってコロニーを作るというのはありえそうです。

ただ、そうなってくると「人間がいなくてもかまわない」という状況になってしまうような。

…とか考える様なアニメじゃないのでしょうけど。

ジールベルンとオールベルン

 以前にも貼付けたオールベルンさん

今回は、ジールベルンとオールベルンが登場しました。

自分はオールベルンしか持っていないのですが、今思えばジールベルンも買えばよかったかも。(買った当時は、デザインに共通部分が多い為、どちらか片方でいいかなと思っていました。)

この二体は剣士タイプで、劇中でもサーベルで戦っていましたけど、銃器を使用する神姫が相手だとちょっと辛そうかも。

 

あちこちで書かれている事ですけど、武装神姫のアニメをやっていても本物の武装神姫が買えないというのは、ちょっと悲しいですね。

いまから手に入れようとしたら、オークションかまんだらけあたりを探すしかないかな。

 

D3.js の動作確認が手軽に出来るサイト

D3.js の動作を比較的簡単に確認出来るサイトを見つけたので、覚え書きとしてリンク。

Tributary

D3.js に特化した jsdo.it といったところでしょうか。

Rickshaw

時系列で並んだデータをプロットするのに適したライブラリです。 D3.js を直接使用するよりも容易に利用する事が出来ます。

Nvd3

こちらも D3.js を使用したライブラリです。

D3.js でここ10年間のアニメ放送日をプロット

今日も D3.js で遊んでみました。

前回と同じく Example に掲載されている CalenderView そのままです。

 今回は動かないデモ

上図の様な表示は、数年間分の情報をまとめて表示するのに便利ですので、

一年間をプロットするカレンダー表示を使用して

  • TV放送開始(赤)
  • 映画(緑)
  • OVA等の発売

を10年分表示させています。(データは .lain を参考にしました。カテゴリ分類はちょっと適当かもしれません。)

こうやってみると、やはり番組改編期に集中しているのがよくわかります。

前述したページでは、 2000年(74本)から2010年(187本)に増えているのですが、CalenderView をそのまま使用しただけでは、アニメの放映数をうまく表現出来ていないですね。今回の様な場合は、同日に放送する番組数に応じて色を濃くする、といった処理をするのが良さそうです。

D3.js を使ってみる。

データを視覚化すると、よりわかりやすい説明が出来るようになったり、いままで見えなかったものがより見えるようになります。

そういった用途に便利なライブラリのひとつに Data-Driven Documents というものがあります。D3.js は JavaScript ライブラリとして提供されていて、様々なデータを視覚化する際の手助けをしてくれます。

描画ライブラリですので、JSONを渡すだけで奇麗なチャートを描画してくれるわけではなく、どんな図を描くかはSVG等を使用して自前で行う必要があります。

使えると便利だと思うのですが、使えるようになるまではかなり時間がかかりそうです。そんなわけで、まずは既存のコードをいじってみる事にして Les Misérables Co-occurrence のデモを使って遊んでみました。

 実際に動くデモ

上の図は、魔法少女リリカルなのは A’s -THE GEARS OF DESTINY- の対戦カードを表示させてみたものです。左上のリストボックスを使用する事で「名前」「対戦数」「グループ」で並び替える事が出来ます。

ちなみにグループは以下の様にしてみました。

  • 時空管理局
  • フローリアン姉妹
  • 王様とその仲間
  • 八神家
  • 別シリーズ[1. Vivid, Force]の登場人物
  • その他[2. リニスとプレシア]

データ入力に間違っていなければ、八神家同士(ユーリを除くと王様たちも)では戦ってないんですね。

さすが仲良し家族?

武装神姫(8)「ある日どこかで」

前回が夏だったけど、作中では秋。もしかして作中で四季全てやるのかな。

今回の話だけを観るとなら「もしアンが人間だったら…」というもしも話、という面からは楽しめると思うのですけど、武装神姫のエピソードとして見るとなんともコメントしづらい内容でした。

元々武装神姫はフィギュアから始まったので、ストーリーや設定といったものはあんまり決められているわけではないため、今回の話も「武装神姫のひとつ」なのかもしれません。

ただ個人的には、神姫は「小さな相棒」と考えていたので、なんか違う様な気がしてしまいました。(アンの夢でした、ってオチなのかもしれませんけど、そう考えると機械も夢をみるのかどうかって話になって…)

それにしても、アイネスはわりと損な役回りをしている様な気がして、ちょっとかわいそうに見えてきました。

武装神姫(7)「訪問者は雨音と共に…」

今回は怪談風味の話でした。

話の中では季節が夏なのですけど、放送しているのが秋(これを書いているのは2012-11-23)。ですので観ている側としてはちょっと違和感があるような。

幽霊がマスターの神姫という設定はどうなんだろう?

それにどうやって登録したんだろう…等と、色々とツッコミどころがあるような気がするのですけど、もしかしたらこの話全体で一つの怪談話だったのかもしれない。

でも、ゼルルっち(ゼルノグラード型)が登場していたし…あんまり考えない方がいいかな。

フブキ型神姫

今回登場したフブキ型は、かつて存在していた武装神姫のオンラインサービス「ジオラマスタジオ」「バトルロンド」において、初期添付されている神姫だったそうです。(残念ながら私は利用した事がありません。)

バトルマスターズにおいても、捨てられていたのを拾うエピソードがありますので、デジタルデータとしての神姫ではおなじみの神姫かもしれません。

CherryPy を CGI として実行する方法

Python でウェブアプリケーションを作成する方法というのはたくさんあります。

私が好んで使用しているのは Pyramid(Pylons) や Zope なのですが、もっと小さなアプリケーションを作成、言ってしまえば1ファイルで完結してしまう様なものを作るにはちょっと大げさすぎる気もしています。

CGI として Python スクリプトに実行権限を与えてやるのが最も簡易的な方法なのですが、 Python の場合は WSGI という機能があり CGI で直接呼び出すよりも、より良い方法が存在しています。

CGIでの呼び出し
print "Content-type: text/plain"
print
print "Hello World!"
 wsgiでの呼び出し
#!/usr/bin/env python
import wsgiref.handlers

def application( environ, start_response ):
  start_response( "200 OK", [ ( "Content-Type", "text/plain" ) ] )
  return [ "Hello World!\n" ]

if( __name__ == "__main__" ):
  wsgiref.handlers.CGIHandler().run( application )

コードは長くなっていますが、 wsgi の方が単純な標準入出力を返すよりもプログラミングらしいかと思います。

CherryPy

と、前置きが長くなってしまいましたが、 CherryPy という Python モジュールで作成したアプリケーションを CGI で実行したい、という話です。

CherryPyの例
#!/usr/bin/env	python
# -*- coding: utf-8 -*-
#
# ------------------------------------------------------------------ import(s)
import	sys
sys.path.append( "./eggs/CherryPy-3.2.2-py2.7.egg" )
sys.path.append( "./eggs/Jinja2-2.7_devdev_20121117-py2.7.egg" )

import	wsgiref.handlers
import	cherrypy
import	jinja2

# ------------------------------------------------------------------ global(s)
oCJinja2Env	= None

# ------------------------------------------------------------------- class(s)

# ----------------------------------------------------------------------------
##
#
class Test( object ):

	@cherrypy.expose
	def index( self ):
		oCTemplate	= oCJinja2Env.get_template( "index.jinja2" )
		return( oCTemplate.render() )

if( __name__ == "__main__" ):
	global	oCJinja2Env

	oCJinja2Env	= jinja2.Environment( loader = jinja2.FileSystemLoader( "res/templates" ) )

	wsgiref.handlers.CGIHandler().run(
		cherrypy.Application( Test(), script_name = None, config = None )
	)

# ---------------------------------------------------------------------- [EOF]

上記のようにすると、 CherryPy を使用したウェブアプリケーションを CGI として実行する事が可能になります。

でも今は Amazon Web Services や Windows Azure などを利用するのが一般的かもしれませんので「CGI だけでなんとかしなければ…」といった場面は少ないかもしれません。

なのはDAYS’ に参加してきました。

以前の投稿にありますように、なのはDAYS’に参加してきました。

なのはDAYS’は京都のイベントですので、関東に住んでいる自分にとって遠いイベントではあるのですけど、京都旅行を兼ねて行ってみようかな?という思いから今回の参加となりました。

京都には全く土地勘がないのですけど、なんとか迷わずにみやこめっせにたどり着く事が出来ました。

一番の心配は迷う事よりも、朝早く起きれるかどうかだったのですが、そちらは大丈夫でした。

勧業祭

自分が参加した事があるイベントは、リリカルマジカルとコミックマーケットだけなので、他のイベントは実感がないのですけど、勧業祭は机と机の間が広くとってあって、開放感を感じました。

それから京都だからでしょうか、外国人観光客らしき方も何名か訪れていたようで、当サークルのグッズも幾つか手に取って頂けました。

水凪工房のブースに足を運んで頂いた方、どうもありがとうございました。

おまけの旅行

イベントの後は京都を散策…したかったのですけど、結構な雨に降られてしまいました。カメラも持っていったのに結局使わずじまいでした。(太秦萌も見つけられなかったな。)

 

武装神姫(6)「アテンションプリーズ! 当機は地獄へ参ります」

今回のエピソードは、神姫は「機械、あるいは量産品」というのを改めて感じさせる内容でした。

劇中にアンと同じ姿の神姫(アーンヴァル型)が数多く登場する場面等や全員同じ声でしゃべっている、といったシーンで表現されているんだな、と感じました。

最後の場面でアーンヴァル型が並んでいても、ちゃんと主人公は見分ける事が出来たというのも、現実世界ではありそうですしね。(アニメだとまったく同じように描かれていましたけど、第三話ではヒナの塗装もしていた事からも、細かい傷がついていたり修復したりした後なんかがついているのかも。)

 

でも実際に自分の神姫が並んでいたら、見分けられる自信はちょっとないかもしれない。手持ちだとアーティルとシュメッターリングなら見分けられるかな…(アニメと違って自分で動いたりしないから、箱からあまり出していない神姫だとなおさら。)

 

次回はフブキ型神姫が登場。

一話完結型だと続きが気にならないのがうれしいところ。

なのはDAYS’ に参加します。

2012年11月11日に京都市勧業館(みやこめっせ)で開催される「なのは DAYS’」に参加します。

  • 日時 2012年11月11日(日) 11:00〜14:30
  • 場所 京都市勧業館(みやこめっせ)
  • 主催 なのはParty開催委員会
  • 協賛 なのはFestival実行委員会

水凪工房の場所は Vd32 となります。

遠隔地なので持ち込めるグッズは少なくなってしまいそうですけど、リリカルマジカル #14 に持ち込んだグッズはなるべく持ってくる予定です。(以下確定しました)

もしかしたら終了まで居ないかもしれませんので、そのときは申し訳ありません。

取り扱いグッズ

  • はやてとリインのめがねふき [¥300]
  • デバイスカードケースA(レイジングハート) [¥800]
  • デバイスカードケースB(バルディッシュ) [¥800]
  • デバイスカードケースC(グラーフアイゼン) [¥800]
  • メディカルシャマルボックス [¥500]
  • リリカルスポーツタオルA(なのは・フェイト・はやて) [¥600]
  • リリカルスポーツタオルB(ヴィータ・シグナム・シャマル・ザフィーラ) [¥600]
どのようなグッズなのかは制作物一覧をどうぞ。

取り扱いグッズ(委託)

お買い上げ頂いた方には、ブックマーカー(リリカルトリオかヴォルケンリッターのどちらか)を差し上げます。

それでは当日よろしくお願いします。

武装神姫(5)「渚の水着アーマー」

ゼルルっち(ゼルノグラード型)が登場しました。

バトルマスターズ2では、ゼルノグラード型をちょうど育てている途中で中断してしまっていたため、ちょっとゲームを再開したくなってきました。

前々から気になっていたけど、個人的には止め金具が肌色で埋めてあるような表現が気になってます。(実際のところ金属パーツの色していたら見苦しいから、肌色なのでしょうけど)

 参考画像のオールベルンさん

でも武装神姫って後ろはねじが結構ある[1. 武装をつけると見えなくなるけど]から忠実に再現しない方が幸せかな。

それにしても、神姫だけで勝手に行動するのはアニメの話づくりとして仕方がないけど、アニメの世界だと知らないうちに無くなっているとかって状態が結構ありそう。

もちろん、携帯電話を探すサービスの様に基地局と定期的に交信しているのならおおよその所在地を確認できそうですけど、圏外でバッテリーが切れてしまったら二度と神姫に会えなくなってしまいそう。

次回も楽しみです。

今日のマミさん

 作成中のイラスト

マミさんといえば紅茶とケーキ。というわけでティーカップとマミさん。

最初ティーカップを適当に描いていたのですけど、ティーカップってコーヒーカップと形が違う、というより形状に意味があるんですね。(単なるデザインだけかと思っていました)

ここから引用

ところで、紅茶は高温の水で抽出しないと良い味にはならないとされるため、紅茶は基本的に非常に熱い状態で出来上がる。そのためカップの口径を大きくし、紅茶の液面付近の温度が下がりやすいようにした。ただ、あまりに重いカップを指で持ち上げるのは困難でカップの高さを低くすることで容量を減らした。そのため紅茶用のカップは、一般的にコーヒー用のカップよりも扁平になっていった。

wikipedia より引用 )

引用ここまで

コーヒー派だったからというのもありますけど、そんな理由があったなんて知りませんでした。

…と、ティーカップを慌てて描き直しました(と思ったらソーサー側はいまいちな感じ…)

AppStore で購入してみたもの

持っていたら便利かもしれないな…と AppStore で購入してみました。

 

Patterno と Fumy

どちらも PhotoShop に慣れている人には、わざわざ買うほどのものじゃないのかもしれませんけどね。

Patterno

チェック模様みたいな連続パターンを生成するのも得意なので、使いどこはあるんじゃないかな…と思っています。

Fumy

効果が面白そうなので買ってみたものの…使うとき場面がいまのところちょっと思いつきません。

今日の一枚「ほむほむ(元ネタは二次小説です)」

R.U.K.A.R.I.R.I さんのウェブサイトに掲載されている二次小説[1. ほむらの見る夢~儚~]の絵を描いてみました。ゴシックドレスっぽいものを描いてみたのですけど、なんだかメイド服みたいになってしまいました。

 

いつも通り紙に描いたのですけど、 iMac が戻ってきたので撮影したものを ArtRage 上でトレースしました。めがねをかけたキャラクターを描いたのは久しぶりな気がします。

こうやって並べると、一番変化しているのは電柱っていうのが…

今日の NodeBox

単純に乱数をプロットしているだけのプログラムです。

自分が Python コードを記述するときは from を使用することがほとんどないのですけど nodebox.graphics とあちこちに記述するのはさすがに冗長すぎるかも。

#!/usr/bin/env	python
# ============================================================================
# ------------------------------------------------------------------ import(s)
import	sys
import	nodebox.graphics

# ------------------------------------------------------------------- param(s)

# ============================================================================
##
#
def draw( oCCanvas ):

	nodebox.graphics.background( 0, 0, 0, 0.1 )

	nodebox.graphics.stroke( 1, 1, 1, 1.0 )
	nodebox.graphics.strokewidth( 1 )
	nodebox.graphics.fill( 0, 0, 0, 0 )

	nodebox.graphics.rect( 160, 120, 320, 240 )

	nodebox.graphics.line(   0, 240, 640, 240 )
	nodebox.graphics.line( 320,   0, 320, 640 )

	nodebox.graphics.fill( 1, 1, 1, 1.0 )

	for n in range( 32 ):
		nX		= nodebox.graphics.random( 320.0 ) + 160
		nY		= nodebox.graphics.random( 240.0 ) + 120
		nSize	= nodebox.graphics.random(  32.0 )

		nodebox.graphics.push()
		nodebox.graphics.translate( nX, nY )
		nodebox.graphics.ellipse( 0, 0, nSize, nSize )
		nodebox.graphics.pop()

# ============================================================================
##
#
def main():

	nodebox.graphics.canvas.name	= "Demo02"
	nodebox.graphics.canvas.fps		= 60
	nodebox.graphics.canvas.size	= ( 640, 480 )
	nodebox.graphics.background( 1, 1, 1, 1 )

	nodebox.graphics.canvas.run( draw )

if( __name__ == "__main__" ):
	main()

# ---------------------------------------------------------------------- [EOF]

サークルと全く関係ない情報が増えてきたから、トップページからは外した方がよいかも…と思ったら、標準では記事のフィルタリングって出来なそう。

 

今日の NodeBox

NodeBox のチュートリアルを少しばかり書き換えただけなので、コード自体には面白みに欠けるかも。

#!/usr/bin/env	python
# ============================================================================
# ------------------------------------------------------------------ import(s)
import	sys
import	nodebox.graphics
import	nodebox.graphics.physics

# ------------------------------------------------------------------- param(s)
oCFlock			= None

# ============================================================================
##
#
def draw( oCCanvas ):
	global	oCFlock

	nodebox.graphics.background( 1, 1, 1, 0.25 )

	oCFlock.update( cohesion = 0.05 )

	nColor	= 0
	for boid in oCFlock:
		nodebox.graphics.push()
		nodebox.graphics.translate( boid.x, boid.y )

		fScale	= boid.depth * 2.0
		if( fScale < 0.75 ):
			fScale	= 0.75

		nodebox.graphics.scale( fScale )
		nodebox.graphics.rotate( boid.heading )

		nC	= nColor % 3
		if( nC == 0 ):
			nodebox.graphics.fill( 1, 0, 0, 0.25 )
		elif( nC == 1 ):
			nodebox.graphics.fill( 0, 1, 0, 0.25 )
		elif( nC == 2 ):
			nodebox.graphics.fill( 0, 0, 1, 0.25 )

		nodebox.graphics.ellipse( 0, 0, 16, 16 )
		nodebox.graphics.pop()

		nColor	+= 1

# ============================================================================
##
#
def main():
	global	oCFlock

	oCFlock				= nodebox.graphics.physics.Flock( 64, 0, 0, 640, 480 )
	oCFlock.sight	= 640

	nodebox.graphics.canvas.name	= "Demo01"
	nodebox.graphics.canvas.fps		= 20
	nodebox.graphics.canvas.size	= ( 640, 480 )
	nodebox.graphics.canvas.run( draw )

if( __name__ == "__main__" ):
	main()

# ---------------------------------------------------------------------- [EOF]

単純な描画を行うにはかなり適しているかも。

 

武装神姫(4)「レースだョ! 公園一周」

今回は結構な数の神姫が登場していたけど、オフィシャルサイトにはマリーセレスとイーアネイラしか掲載されていないみたい。

アニメ版ではどの神姫も結構自由に動き回っていて、神姫同士の世界みたいなのが描かれているのはなかなか新鮮かもしれない。

それにしても劇中の季節は梅雨でこれから夏になるようだけど、実際に放映されている季節と違っているような…

来週はゼルノグラードが登場するみたいだけど、やっぱり死亡フラグみたいな台詞とか言っちゃうんだろうか。

 

NodeBox for OpenGL

pyglet について調べていたら NodeBox for OpenGL というライブラリがあるのを知りました。 NodeBox でやる事を Python ライブラリの形で実装しているようで、 pyglet を直接使うよりも便利そう。

ちなみに NodeBox というのは、ビジュアルプログラミング環境の一つで、データを可視化したり VJ 素材を作成したりするのに利用するソフトウェアです。(Mac でいうと Quartz Composer が近いかもしれません。)

というわけで、まずは pyglet と NodeBox for OpenGL による開発環境を用意することに。(ちなみに手元の環境は MacBookPro)

virtualenv, virtualenvwrapper

単純にモジュールをインストールしてしまっても良いのですけど、 easy_install や pip を行うと、 Python のライブラリフォルダにモジュールが入ってしまいます。

一時的な環境構築の場合は、環境を分離したいところ。

というわけで virtualenv を入れる事で環境を切り替えられるようにします。

easy_install virtualenv
easy_install virtualenvwrapper

インストール完了後は、.bash_profile あたりに以下の様な記述を追記します。

export WORKON_HOME=~/vEnv
source /usr/local/bin/virtualenvwrapper.sh

準備が出来たら、 新しくターミナルを開くか bash .bash_profile 等で設定を反映させて、作成した環境の名前を指定してやります。

Mizunagis-MacBook-Pro:~ mizunagi$ mkvirtualenv --system-site-packages NodeBox
New python executable in NodeBox/bin/python
Installing setuptools............done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /Users/mizunagi/vEnv/NodeBox/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/mizunagi/vEnv/NodeBox/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/mizunagi/vEnv/NodeBox/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/mizunagi/vEnv/NodeBox/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/mizunagi/vEnv/NodeBox/bin/get_env_details
(NodeBox)Mizunagis-MacBook-Pro:~ mizunagi$

次回の利用時からは、 workon NodeBox と入力する事で環境を切り替える事が出来ます。

pyglet

自分の環境 ( Mac OS X 10.7.5 ) では、easy_install pyglet でインストールを行っても OSError が発生してしまうため、手動でインストールする事にします。

以下のURLを参考にしたのですが、そのままだと setup.py になぜか cocoa が指定されていないため、インストールしても動作しません。( 2012-10-27現在)

ですので、 hg checkout cocoa-port を行った後に setup.py を開き、 pyglet.window.cocoa を Packages に追加しておきます。

そんなこんなでひとまず動作するようになりました。(GUIモジュールが正常に動作していないようにみえるけど…)

2012-10-28追記

NodeBox for OpenGL の GUI モジュールではなくて、 pyglet の input に問題があるみたい。

バックアップを兼ねて作成した egg ファイルはこちら。

nodebox_opengl-1.7-py2.7.egg

[wpdm_file id=1]

pyglet-1.2dev-py2.7.egg

[wpdm_file id=2]

 

ちょっとした描画を行うプログラム

簡単な描画を行えるプログラムを作る必要が出てきたので、以前使用したことがあるライブラリを調べなおしてみることにしました。

描画といっても線を引く程度ですので、 Windows であれば GDI を使用すれば(今だと Windows Presentation Foundationかも)済んでしまいそうですけど、使い慣れた言語を使用したいところ。

そんなわけで、使用経験があるのは PyGame と wxPython なのですが、今回の目的には pyglet も向いていそう…とかなんとか言っているうちに時間がなくなって、 OpenGL か Irrlicht というのがわりといつもの(ダメな)パターンだったり。