無いものねだり…ではなかったという話

昔から、自分が入れ込んでるゲーム機(MDとかXboxとか)に比してSFCやらPS系はなんて多様なゲームが出てるんだろう、とキラキラ眩しく感じていたのだけど、いざ自分でそっちも手に入れてみると、結局好みのゲームしか買わないからキラキラ感がないキラキラが無いのは私自身だった…

 

ゴジラ-1.0 感想書き散らかし

実を言うと、山崎監督と言うとユアストーリーの件を聞いていたので、まったく期待していませんでした。むしろ、なんでそんなヒトに撮らせるんだよ、もしかしてシン・ゴジラの後は作りづらいから彼を起用することで一旦期待値を下げて、以降撮りやすくするつもりなんだろうか、などと全方位に向かって失礼なことまで考えていました。
が、試写会の評判は良さげ、先に公開初日の早い回で見たヒト達の評判も悪くないと聞いては居ても立っても居られず、バレが流れる前にと、同じく初日の最終回を見てきました。
感想は…一言で言って「山崎監督、申し訳ありませんでした!」と土下座したくなるほどのものでしたw

(以下バレだらけ感想。見てないヒト、これから見るヒトは回れ右)

参りました

元々、ゴジラ反戦映画とは言われるものの、初代作は終戦後わずか9年後に作られたこともあり、その辺りは観客共々共通の体験としてある為か、戦争の影響の描写は薄めで、むしろ人間ドラマは芹沢・恵美子・萩原の三角関係が主軸に見えます*1

ですが今回の話は敷島、典子、澄子が終戦直後の食うや食わずの世情を反映した、ささくれ立った人間関係から描かれます。
敷島は大戸島で頼まれた役目を果たせなかったことで多数の死者を出してしまったことを悔やみPTSD状態。
かつての敷島家の隣人であった澄子は、敷島の声のかけ方から察するにかつては気のいいおばさんであったことが推測されますが、彼女は空襲で3人の子供を失っており、特攻隊員として送り出されていながら生きて帰ってきた敷島をなじります。
典子は、空襲で亡くなった赤の他人の夫婦から託された赤子と共に生きるのに必死ですが、それに対して敷島はパンパン(米兵相手の娼婦)でもやればいい、と返します。しかし彼女は赤子(明子)を置いていかなかった彼の人の良さを気に入ったのか彼の家に居つき、奇妙な男女と赤子一人の生活が始まります。澄子もまた、そんな危なっかしい若い二人の子育てに不安を抱いたのか、かいがいしく面倒を見るようになります。
この後、敷島は掃海任務の仕事*2に就き収入を得て生活を向上させますが依然としてPTSDは治らないまま。とは言え平和と生活の向上は3人の関係を改善していきます。
戦争という死が無作為に投げつけられる時代が終わり、廃墟になった東京で、生き残った者達で生きて行こうという姿が克明に描かれていました。

ここまで見て、私は先に書いたように既存のゴジラ映画に足りなかったのはこれだと思い至りました。いつの間にか私は彼らのドラマに夢中になり、途中で犬かきゴジラに襲われる話があったにも関わらず、銀座のゴジラ襲撃時にゴジラのテーマがかかるまで、これがゴジラ映画であることを忘れていましたw


問答無用の暴力、怪「獣」ゴジラ

豆知識)
今回のゴジラは「水爆怪獣」ではありません。彼が変質したのは1946年7月のクロスロード作戦によるものなので「原爆怪獣」になります。

それはともかく今回のゴジラは船を見かければ立ちどころに襲い掛かってくるほどに人間に敵意を剥きだしにしてきます。オマケに、機銃や重巡の大砲、機雷でも「死なない」。正確には傷はつくものの、驚異の再生能力で立ちどころに回復してしまう。
更には青白い熱線を吐き、重巡ですら一撃で破壊してしまいます。
既存のゴジラ達を知っていればちょっと首を傾げる部分がありますが、この作品のリアリティラインではありえない理不尽でデタラメな生物です。
そのゴジラが遂に銀座に上陸しますが*3、ここでも人間やその所産に対する敵意がこれでもかというほど発露されます。崩された建物の下敷きになり、あるいはゴジラに直接踏みつぶされて殺されていく人々。その混乱の中で典子はゴジラに咥えられた電車の中で宙づりになったり川に落っこちたりします。生命力強すぎじゃね?と思いたくもなりますが、トドメのように危ないところで敷島との合流を果たします。まあこの辺りはアレです、「考えるな感じるんだ」

 

「お約束は守らないとなー」

 

当時最新鋭?である4式中戦車による攻撃を加えるも、ゴジラは遂に原爆の起動のようなモーションで熱線を吐き、一帯は破壊の渦に包まれます。人々が何が起きているのかわからずに呆けているところ、すんでのところで典子は敷島を建物の隙間に突き飛ばしますが、哀れ彼女は爆風の中に姿を消します。

 

ゴジラを知らないヒトがアレ見たら、そりゃー棒立ちになるよね

 

あの爆風では五体は切り刻まれ、見つけることはできないだろうと判断したのか、彼女の葬式を挙げる敷島ですが、ここで彼はゴジラの位置づけを恐怖の対象から倒すべき仇敵に変更します。それも、強烈な憎しみと共に。
ゴジラを倒すべき仇敵として憎む主人公! 今までそんなキャラクターがいたでしょうか。勿論、任務として倒さねば、とゴジラに立ち向かって行ったキャラクターは沢山いたわけですが、彼は背景が強烈です。
かつて怯え竦みあがってしまったが為に大戸島の整備員達を見殺しにしてしまったという負い目、その仇。
そしてこの瞬間からは、あるいは妻にと考えていた女性を奪った仇として憎み始めたわけです。
怪獣映画に人間ドラマは要らない? ええ、そう思っていた時期が私にもありました。この瞬間までは。要らないのはデキの悪いドラマであって、人間ドラマそのものではなかったんです。


ミリ者趣味というなかれ

物語は、元海軍技師である野田の提案した「海神(わだつみ)作戦」が提案されますが、囮が必要だと考えた敷島は、戦闘機の調達を依頼します。そこで登場するのが局地戦闘機震電です。

撮影用の作られた1/1モデルは、福岡県筑前町立大刀洗平和記念館にあるそうです

 

物語中の歴史ではどうやら数機が完成していたようで戦線に投入された様ですが、史実では完成が間に合わず試作で終わった機体。かつてこの国を守る為に作られたものの間に合わなかった機体がゴジラから日本を守る為に投入される…ロマンですよね…すみません、ここでも私は泣きましたw

まあその後、なんやかんやあってゴジラは倒されたし、典子さんは生きていたしめでたしめでたし…なわけですが、はて、本当にそうなんでしょうか。

ゴジラ驚異の再生能力はラストに復活を予見させましたが、それだけではなく…あの爆風…人間は切り刻まれて助かるハズがない…銀座には4式の攻撃や爆風で削がれたゴジラの細胞が大量に残されていた…爆風で皆中心に集められて…いや、あるいは、電車ごと咥えられていた時、既に?…典子さんの首の模様、あれは…


というラストも含めて、最高のゴジラ映画でした!まる!

 

なお、近所の模型店からは震電、高雄、雪風、響のキットが綺麗に消えていたことをご報告致します。再販よろしくお願いしますね>模型メーカーさん各位

 

 

 

 

 

 

*1:長いこと見てないから今は違って見えるかも知れない。この辺りは後で確認する。どのみち、私はこの認識でいました

*2:ああやってやるんですね、知りませんでした

*3:ここツッコミどころですよね。もうちょっと前に発見できるだろうし、もっと早く警報出すこともできただろと

もうどうにも取返しがつかないこと

しばらく前の話。

 

夜明けごろ、夢を見た。ああ、でもこれはかつてあった出来事だとわかった。

幼い頃、地元の肉屋の前に、誰かが仕留めたイノシシが置かれていることが度々あった。当時の私はそれに妙に惹かれて、ぼうっとそれを眺めていることが多かった。そんなある日、とある男性に声をかけられた。

「私が誰かわかるかい?」

見知らぬ老人。私は「わからない」と答える。その応えに、彼は苦笑していたのかも知れない。飴をくれたような記憶がある。

「そうか、わからないか」

「わからないよ」

そんな言葉を交わした後、イノシシを触る私をしばらく眺めた後、彼を待っていたと思しき女性と寂しげにその場を離れていった。そういう記憶だ。

唐突に目が醒めた。記憶のピースが嵌っていく感触。

…私の父母は私の幼い頃に離婚していた。2、3歳の頃の遠く、色褪せた記憶だ。母と再会できたのは30も半ばになってからだ。既に祖父は他界し、祖母は…父方の祖母との約束だからと、私と親交を深めることを良しとしてはくれなかった。

再会した時、祖母は、祖父はよくイノシシを仕留めては街中の肉屋に卸ていたという話をしてくれた。その時は「ああ、あの肉屋の前にあったイノシシは彼が仕留めたものだったのか」という程度の認識だったのだが…

違う。

その言葉に込められた意味はそれだけじゃない。あの時、飴をくれた男性は、彼と一緒にした女性は、祖父と祖母だったのだ。

 

私には、昨年生まれた孫がいる。娘の息子だ。つまり、彼と私の関係に等しい。孫を抱いた時に感じる愛おしさは何物にも代えがたい。そんな感情が自分にも湧くのかと驚いたものだったが…そういう対象である孫の私に、「お前など知らない」と言われた祖父の心情は如何ばかりものであったのか。謝りたい。だが、それはもう叶わない。布団の中でひとしきり涙し…いつか私も「向こう」に行った時には真っ先に謝りに行こう、そんなことを心に決めた。

 

※この内容は11/18にJ-Waveau FG LIFETIME BLUESで「明け方の夢」として紹介されましたが…全面的に夢の話に改定されてしまいましたねw

超獣機神ダンクーガの打ち切りの原因を検証する

HAGANE WORKSダンクーガの発売日に向けて、個人的にダンクーガ熱が高まってきているのですが、

以前から気になっていることがあります。

それはWikipediaダンクーガの項目にある、打ち切りの原因の説明。

オモチャが売れまくって年末に売る物が無くなったからと書かれている一方で、もう片方では、オモチャが売れなかったからと書かれています。

正反対じゃないか。どっちなんだ。

 

と言うわけで実際の資料を手に入れて記載を確認した上で検証してみることにしました。

Wikipediaによると、それぞれの記載の元ネタは、

です。

まあムックの方は元から持ってたんですが

前者の奥田誠治氏の「アニメの仕事は面白すぎる」を確認すると、確かに85年のアメリカの超合金ブームに対してオモチャ(在庫)を全て送った結果、売る物が無くなったから、と書かれていました。

対して、後者のムックではプロデューサー氏が「オモチャが売れなかったのが打ち切りの理由です」と明言されていました。

わかってたけど、正反対です。

じゃあ当時の外野から見た印象はどうだったと言うと…これは当時の私の記憶になるんですが(つまり怪しい! 眉に唾をつけて読みましょう!)、ダンクーガのオモチャって、あまり店頭に並んでるところを見たことがなかったんですよね。

オマケに少々高価で、ガンプラとかを見た後だと不格好。

私にはちょっと手が出せなかったので、止む無く非変形版の安い方を買って溜飲を下したのですが、

こっちの方が安いし、スタイルもいい

それでも変形、合体というギミックは諦めきれず、どうせ年末を過ぎたら安くなるだろうから、それを買おうと目論んだのですが、結果的にそんなことは起きなかったんです。
まあ、この時の後悔が今も私を苛み、結果として30年経ってもトイが出ると買わずにはいられなくなってるわけですが…そう考えると、後者の証言はちょっとおかしい。

 

以上のことを踏まえて、

「そもそもあまり売れてなかった」

アメリカの超合金ブームを当てこんで(国内で売れてなかったから)、全部アメリカに送って売り切った」

「全部アメリカに送った結果、年末商戦では売る物もないので打ち切りへ(在庫がなければ宣伝をする必要もない」

というのが本当のところなんじゃないかと私は結論しました。

勿論、「バンダイがプロデューサーに諦めさせる為に、細かい情報を与えていなかった」という可能性もありますが。

 

ちなみに奥田氏の本によると、超合金はアニメ番組が始まる以前には完成してたみたいです…凄いな、本当にオモチャを売る為の番組だったんだ…。

 

 

みな後悔は10年も前にすませた。あとはどうやって忘れるかだけだ。

久しぶりにTwitterの話。

www.itmedia.co.jp

マスク氏が買収して以来、伝え聞く財政状況から鑑みるに、例え創成期にTwitterの普及に役立ったとはいえ彼自身には恩恵の無いサードパーティークライアントはいつ切られても仕方ないな…と思っていたので、正直驚きはなかったですね。

まあ私自身は10年前に撤退して心情的には冷めてるものですから、残念な気持ちはあるものの、今更怒りとかはないです。

マスク氏には、サードパーティークライアント向けのAPIを有料化してそれで広告が流せない分を埋め合わせてはどうか、という意見をリプライで投げたこともあったのですが、まあ見てくれてるわけもなくw

何にしても、こういうのはこっそりではなく、ちゃんと予告をして、堂々と発表してからやって欲しいところでしたね。マスク氏も忙しいのは理解できるのですが、こんな騙し討ちのようなやり方では反感しか得られないですよ。

これまで長い間サードクライアントアプリを開発されてきた方々はお疲れ様でした。そのうちコロナが落ち着いたら、皆でお疲れ会とかやりましょう。

 

お疲れ様でした!

tkinterで、image付きListbox的なモノを実装してみた( tkinter Listbox with image and text

f:id:lynmock:20220214095512p:plain
初めてのPythonソフトとして、こんなのを作った、という話です

先日、Raspberry Pi4にSSDを奢ってみたので、せっかくだからPythonを使えるようになって積極的にオモチャにしてやろうと勉強することにしました。

f:id:lynmock:20220214140418j:plain

まずは軽くTwitterクライアント*1を作ってみようと考えたものの、Pythonの主流GUIライブラリであるtkinterには、画像の使えるListboxがない様子。
Stack Overflowを見ても「Listboxで画像を使う方法を教えて」「そんな機能はない」などというやり取りが見受けられ、軽く検索してみても、それを実現するコードは見つかりませんでした。なんか大昔にTwitterクライアントを作ろうとAWTの勉強をしてみたものの同様のことで躓き、Swingに転がったのを思い出しますね。
問題は今回はライセンスとか考えると、そういう都合のいい別のライブラリがないところですが。

てなわけで、先の3連休の最終日を潰して画像の使えるListbox的なモノを丁稚UPしてみました。まあ多分本格的にやってるヒト達はこんなのホイホイと作ってるのでしょうが、検索した時に何も出てこないのは初心者には辛かろう、という意味での公開です…。

import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image, ImageTk

class ScrollableFrame(ttk.Frame):
    # based https://daeudaeu.com/scrollbar/
    def __init__(self, container):
        super().__init__(container)
        self.canvas = tk.Canvas(self)
        self.scrollable_frame = ttk.Frame(self.canvas)
        self.scrollable_frame.bind(
            "<Configure>",
            lambda e: self.canvas.configure(
                scrollregion=self.canvas.bbox("all")
            )
        )
        self.canvas.bind("<MouseWheel>", self.mouse_y_scroll)
        self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")
        self.scrollbar_y = ttk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
        self.scrollbar_y.pack(side=tk.RIGHT, fill="y")
        self.canvas.configure(yscrollcommand=self.scrollbar_y.set)
        self.canvas.pack(side=tk.LEFT, fill="both", expand=True)
        self.canvas.focus_set()
    def mouse_y_scroll(self, event):
        unitCount = 0
        if event.delta > 0:
            unitCount = -1
        elif event.delta < 0:
            unitCount = 1
        self.canvas.yview_scroll(unitCount, 'units')

class WrappingLabel(ttk.Label):
    def __init__(self, master=None, **kwargs):
        ttk.Label.__init__(self, master, **kwargs)
        # -90 is a correction value to avoid overlapping Label and scrollbar.
        self.bind('<Configure>', lambda e: self.config(wraplength=frame.winfo_width() - 90))
        self.bind("<MouseWheel>", frame.mouse_y_scroll)
        self.bind("<Button-1>", self.click)
    def setIndex(self, i):
        self.rowIndex = i
    def click(self, event):
        global selectedIndex,label_list
        if selectedIndex == self.rowIndex:
            return
        set_list_background(0, self.rowIndex)            


def press_down_key(self):
    global selectedIndex,label_list
    if (selectedIndex < 0 or selectedIndex == len(label_list) -1):
        return
    set_list_background(1)
   
def press_up_key(self):
    global selectedIndex,label_list
    if (selectedIndex <= 0):
        return
    set_list_background(-1)

def set_list_background(indexCorrect, newIndex = -1):
    global selectedIndex, label_list
     # Return the selected label to the original background color
    selectedLabel = label_list[selectedIndex]
    selectedLabel.config(foreground = 'black', background = get_list_background(selectedIndex)) 
    # Change the background color of the newly selected label to blue
    if newIndex >= 0:
        selectedIndex = newIndex #click
    else:
        selectedIndex = selectedIndex + indexCorrect
    selectedLabel = label_list[selectedIndex]
    selectedLabel.config(foreground = 'white', background = '#2080ff')

def get_list_background(index):
    if  index%2 == 0:
        return "#FFFFFF"
    else:
        return "#DDDDDD"


root = tk.Tk()
root.geometry("500x700+0+0")
root.bind("<Down>", press_down_key)
root.bind("<Up>", press_up_key)

style = ttk.Style()
style.theme_use("classic")

frame = ScrollableFrame(root)
frame.pack(fill="both", expand=True)

image_list = []
label_list = []
selectedIndex = -1

for i in range(100):

    img = Image.open('icon.png')
    img = img.resize((48, 48))
    img = ImageTk.PhotoImage(img)
    image_list.append(img)

    label = WrappingLabel(
        frame.scrollable_frame, 
        text = str (i) +":Good morning. In less than an hour, aircraft from here will join others from around the world. And you will be launching the largest aerial battle in the history of mankind. Mankind. That word should have new meaning for all of us today. ", 
        image = image_list[i], 
        foreground = "black",
        background = get_list_background(i),
        compound = "left",
        padding = [10],
        wraplength = 100)
    label.pack(expand=True, fill=tk.X) 
    label.setIndex(i)
    label.bind("<MouseWheel>", frame.mouse_y_scroll)

    label_list.append(label)
    
root.mainloop()

Labelデザインやデータの構造の部分は都合のいいように変更して使ってください。挙動はこちらに動画を上げてみましたのでご確認ください。

www.youtube.com

開発&動作確認はMac OS Monterey、Python 3.10.2(2.7.18かも)で行いました(RaspberryPiじゃないのかよ)
何しろPythonについては素人なので、修正すべきところがあったら教えてくれると嬉しいです。

あ、あと、気に入ったヒトは、お財布が温かい時に気が向いたら、こちらの欲しい物リストから何かくれると私が超喜びますw

ほんじゃね。

ScrollableFrameの部分は https://daeudaeu.com/scrollbar/ に掲載されたコードを元にしています。


追伸
本当はカーソルの位置に追従してスクロールするのを実装していたのですが、スクロールバーをクリックした時にどうしたらいいのかわからんので諦めました

www.youtube.com
下に行く時だけできた…

考えてみたらコイツらを使えばスマートにできたんだ…

*1:Twitterクライアントって色々な機能が要求されるので、一つの言語やフレームワークを覚えるのに都合がいいのです

PCぱわーあっぷー(CV:美作いろり again

落ち込まなくても散財する時はするし、秋はPCを買う季節なのですわかれ。

現在ゲーム&開発用に使用しているWindows PC(TweetRecorderの開発はこれを使ってました)を組んだのは、はてダによると2009年10月31日。

lynmock.hatenadiary.org

構成はちょっと奮発して

Core i7 860

GeForce GTX 260

8GB メモリ

というモノでした。

その後、Twitterのログによると2011年7月7日頃にGPUGeForce GT 560Ti に更新、更に2016年7月1日頃に友人からGeForce GT 970を頂いて更新。

メモリは2016年9月10日頃に12GBにアップデート。以降今に至る、と。

つまりケース、電源(これも友人からの頂きものだったな)、HDD、DVDドライブ、マザーボード、CPUの部分は本日でめでたく10年選手になったわけです。10周年おめでとうぱちぱちぱち。


…とか言ってる場合じゃありません。現状特に不具合はなく、構成的にはXbox Play Anywhereに合ったモノにしてあるのでXboxOneと同じゲームはできるし、キョービはPS4/XboxOneに合わせたゲーム開発がされているので、先日発売されたCoD:MWだってバッチリ推奨環境設定を満たしています

しかし、やはり10年という期間から経年劣化が心配なのも事実。いい機会ですから、刷新することにしました。

モノはドスパラBTOGALLERIA XFです。

※以下は今後の為の記録です

OS: Windows 10 Pro 64bit

CPU:  Core i7-9700K (3.60GHz-4.90GHz/8コア/8スレッド)

GPU: NVIDIA GeForce RTX2070 SUPER 8GB (HDMI x1, DisplayPort x3)

電源 :  650W 静音電源 (80PLUS BRONZE)

メモリ: 16GB DDR4 SDRAM(PC4-21300/8GBx2/2チャネル)

SSD :  512GB NVMe SSD (M.2 2280, 読込速度 3370MB/s, 書込速度 2030MB/s)

HDD: 2TB 

現在絶賛組み立て中…届くのは来月ですかね。またこれで10年行こうと思います。まあメモリとGPUはアップデートするんだとは思いますが。