本当に信頼できる相手にしか、本物の魔法は見せてはならない―無数の解釈を許す、あの日の思い出:うらら迷路帖 第07話 「祝詞と魔女、時々覚悟」

Posted on

日本人読者の皆様におかれましては、「現代文の試験」の洗礼を受けたことかと思います。小説として商業出版されている日本語の文章の一部が、まるでまとめサイトのスレ抜粋みたいに切り貼りされた状態で印刷されてて、Togetterで赤字にするようなノリで傍線部が引かれてて、「これはどういう意味か4択の中から答えろ」ってクイズが始まるとか、そんなやつです。アレですよ、アレ。

あの「問題」が成り立つ裏には、1つの暗黙の了解、「公理」が流れています。つまり、「物語の読み方と解釈には一意性と正解があり、それがわからないお前はカスであり、知的動物ではなく、人間が食料としても何ら道徳的問題がない」ということです。

今日は、その了解が成り立たないか、あるいは成り立たなくてもよいことにした瞬間に突然面白くなる、魔女の女の子と、もっともっと小さな女の子の、魔法の秘密の物語についてお話しましょう。

物語の流れはおおよそコミックス版と同じですが、物語の主題が1つに整理されて、効果的な映像演出などが加わってより抒情的になってる(とわたしは思う)アニメ版をベースとします。

あらすじ

小さいころから、ほしいものは何でも簡単に手に入った。

「アンシャンテ、お嬢さん!」

そんなあたしが、唯一手に入れられなかったもの。

世界で一番憎らしくて、世界で一番大好きな人。

小梅の回想

主要キャラの1人、「小梅」の、今よりずっと昔、彼女がもっと幼かった頃のお話です。

小梅は巨大財閥「雪見家」の1人娘。親におねだりすれば、何でも簡単に手に入る。

そんな何一つ不自由ない暮らしをする彼女の元に、ある日「マリ・キスピルクエット」というフランスからの留学生がやってきます。

初めて出会った異国の少女。そして、魔女。

そんな彼女は、さっそく小梅をフランス語の「梅=プリュネ」から取って「プー」と呼び、そして、いきなり、おでこに、ちゅ!

「今のは呪いのキスよ!魔女流の、あいさつなの!」

「ななな、な、なにそれ!『呪い』って、わたし、どうなっちゃうの!?」

「あたしと、とっても仲良くなれちゃうのっ!」

「!?」

自由奔放ですね。そんなマリが繰り出すたくさんの「魔法」に、小梅は驚きます。

「マリって…何者なの…?」

「言ったでしょ、魔女だ、って。
 こう見えても、300歳よ!魔女は長生きなの!」

「すごい!…30歳くらいかと思ってた…」

「失礼ね!! こう見えてもまだ18歳よ!!

「なんでそんな嘘ついたの…!?」

小さな小梅は、突然やってきた「魔女」に、興味津々です。

「ねぇ、どうしたら魔女になれるの…?」

「うふふ!わたしは魔力を得るために、人魚をフライにして食べたのよ」

そんなマリとの日々が、小梅は楽しくてしょうがないご様子。

マリは悪戯好きで、いじわるで、嘘つきで、天下無敵。

物知りで、お茶目。可愛くて、お洒落。

ちいさなわたしは、マリの全部に夢中になった。

そんな不思議な力を小梅に見せてくれるマリですが、小梅のパパやママは全く信じていません。

「マリってすごいんだよ!魔術が使えるの!」

「マリは手品が上手なんだなぁ」

「ほ、ほんとだもん!」

「小梅をからかってるのよ」

「マリは本物の魔女だよっ!」

マリのすごいすごい「本物の魔法」を一切信じてくれないことに、小梅はいら立ちます。でも、マリは気にしていない様子。

「もう、頭に来ちゃう。お父さまも、お母さまも、信じてくれないの」

「いいのよ、そういうもんだし」

「えぇ!?」

「それより、わたしは勉強しないと。そのために、この国に来たんだもの」

「お勉強って、何の?」

「東洋の魔術よ」

マリは何のためにこの国に来たのか。それは勉強。では、それは何のため?

「わたしは箒で世界中を旅して、魔術を学んで、世界で一番の魔女になるの。それが、あたしの夢なのよ」

「世界で、一番の魔女…」

「でも、これは秘密事項よ!魔女はミステリアスじゃなきゃお洒落じゃないもの!
 口封じのおまじないよ!」

「世界で一番の魔女になる」という彼女の夢をかなえるため。それが目的ですから、魔法がインチキだと他人に思われたところで、彼女は一切意に介しません。

一方の小梅は、それでもやっぱり、マリが本物の魔女だと信じてもらえないことがどうしてもご不満です。あんなにすごいのに!

そこで小梅は、マリが昼寝している間に、彼女の箒を盗んで、屋敷の一番高い窓から飛び立つことで、みんなに魔術を見せて信じてもらおうと画策します。

みんなに魔術を見せれば信じてもらえるよ、マリは本物の魔女だって。

(窓の前に立つ小梅)

マリの箒があれば、飛べるはず…。

(二階から下を見下ろし、思わず震える)

マリのためだもん!絶対飛べる…

かくして覚悟を決め、箒にまたがって飛び降りる小梅。

…しかし、あれれー!?

本物の魔法の箒のはずなのに、まったく飛べません。このままでは、地面に激突してしまいます!

「マリー!助けてー!」

ぱちん!と指がはじける音がすると、箒は空を飛ぶようになり、小梅は難を逃れます。

そこに現れたのは、もちろんマリでした。

「意外と勇気があるじゃない。
 でも、ちょっとオイタが過ぎるわね、プー」

そのマリは、まったく仕方がないわね、と言わんばかりの、ちょっぴりあきれたような、でも優しい、そんな顔をしていました。

そうして「勇気」を認めてもらった小梅は、「本物の魔法の箒」に2人でまたがり、夕焼け空を散歩します。

「すごい!やっぱり飛べたね!」

「あったりまえでしょ!魔女だもの。
 …でも、魔術は本当に信頼できる人にしか見せちゃダメなの。
 だから、内緒にしておいて。じゃないと、色々厄介だから」

「なんで?すごく、かっこいいのに」

「それがわかんないなら、プーはまだまだ『プチプチプリュネ』ってことよ」

そんな楽しい毎日に、突然終わりが訪れます。

それからしばらくして、マリの言葉の意味が分かったの。

冬。原因不明で医者も匙を投げる疫病が、町で蔓延してしまいます。新聞の1面も、感染者が急増したことを危機感を持って伝えています。なお、この作品は2017年放映ですので、そこんとこはよろしく。

雪見家の主とその妻に、メイドが震える声で報告します。

「あの…奥様…。町で噂になっているんです。
 病を呼び寄せたのは、雪見家に居候している魔女じゃないか、って」

「何を、バカバカしい」

「ですが、雪見家の信用にかかわります!
 小梅お嬢様にも、悪影響があるかもしれません…」

マリはその様子を、陰からこっそり、これまでで一番真剣なまなざしで見つめます。

「わたしたちは、君のことを疑ったりはしない。だけど、このまま町に留まるのは君のためにも…」

「ええ、分かっています、旦那様。プリュネのためにも、フランスへ帰ります」

「…すまない…」

「そんな顔をなさらないで。厄介者扱いには、慣れっこですわ」

達観したような笑顔で帰国を決めたマリ。

ですが!

小梅はもちろん!

そんなの嫌に決まっています!

「やだ やだ やだ やだ!
 なんで!?
 マリは悪い事してないのに!
 マリが帰るなら、小梅も一緒に仏蘭西に行く!
 マリの弟子になって、魔女になる!!
 …お願いだから、小梅も連れてって…!」

「あのねぇ、魔女になるってそんなに簡単じゃないのよ?
 プーみたいな泣き虫は、弟子にだってなれないわ」

「なれるもん!魔女になって、マリをいじめる人の事を全員呪ってやる!」

「うっふふふ!なっかなかいい事言うじゃない!ちょっとは素質、あるかもね」

「…ほんと!?」

「そうね…じゃあ…」

あの「箒」を、小梅に渡すマリ。

「この国で一番の魔女になること。
 それができたら、あたしの弟子にしてあげる。
 …これは呪いのキスよ。小さな魔女に、試練と困難を。
 元気でね、マドモアゼル・プリュネ。」

そして意地悪で素敵な魔女は、フランスへと帰っていきましたとさ。

今ならわかるの。マリはきっと、魔女になんかなるなって、言いたかったんだって。

だから、「この国で一番」なんて無理難題を吹っ掛けたのよ。

だけど、思い通りにあきらめてなんか、やらないわ!

だから、わたしは迷路町に来たの!

マリとの出会いと別れ、そしてマリとの約束が、小梅が「うらら」と呼ばれる占い師、しかもその中での最高位である「一番占」になるために、何不自由のない自分の家を離れ、「迷路町」で厳しい修行の道を歩むようになった、決定的なきっかけだったのでした。

「秘密にしてたのに…」

「別に隠さなくていいじゃない?」

「それじゃお洒落じゃないもん!」

そうだよね、マリが言ってたとおり、魔女はミステリアスじゃなきゃあ、いけないもんね!

魔女の秘密を根掘り葉掘り

削れる台詞が中々無くて、長くなってしまいました。演技も映像もよいので、ぜひ実際に見て・聞いてみてくださいね。

ここからはこのエピソードを「解釈」していきます。

マリは誰にも心を開いていない、ただ一人小梅を除いては

このエピソードは、メタに言えば、まぁよくある、各キャラクターの自己紹介やキャラ付け、バックグラウンドの紹介のための、いわゆる「キャラ個別回」というやつになります。このエピソードを入れることでキャラクターの行動に説得力を持たせたり、キャラに深みを与えて小梅のことを好きになってもらおう、みたいな。そのためのエピソードです。

ですが、ですが!

この話は意図してか偶然か、そんな「お約束の枠組み」を超えた、それ単体で非常に面白いお話になってしまっています。

そうなってしまっている鍵を確認しましょう。

それは、もちろん。

小梅が箒で無謀にも空を飛ぼうとし、マリがその勇気を認めてくれた時の、この言葉です。

…でも、魔術は本当に信頼できる人にしか見せちゃダメなの。
だから、内緒にしておいて。じゃないと、色々厄介だから

このセリフから、マリのすごいすごい魔法を、どうして小梅以外、だれも信じてないのかの理由がはっきりと明らかになります。

そう。

そもそも単に、本物の魔法を、小梅以外の誰にも、見せていないから、です。

見せてないんだから、信じるわけないじゃないですか。とっても簡単な話ですよね?

そして、彼女はいくらこの国で社交的に、笑顔を振りまきながら、非常にうまくふるまっているように見えても、実は、小梅以外、だれも心からは信頼なんかしていないし、逆に小梅のことだけは心から信頼している事もわかります。

では、小梅が今まで見ていたものは?

ここで止めてはもったいない。さらに問いをつづけましょう。

マリは本物の魔法を、小梅以外には見せていない。

マリは本物の魔法を、小梅だけには見せている。

では、その小梅に、本物の魔法を見せるようになったのは、いつからでしょうか?

言い換えれば、小梅がこのシーンに至るまでに見ていたものは、本物の魔法だったのでしょうか

それとも、実はここまでのものは全部、ただの手品だったのでしょうか

すべての解釈を楽しんでしまえ

さて、日本の現代文の試験であれば、きっと「傍線部Ⅲ『魔術は本当に信頼できる人にしか見せちゃダメなの』とあるが、マリが小梅を『本当に信頼できる』と判断したのはいつか、50文字程度で説明せよ」といったクイズが始まり、そのクイズの出題者の解釈をくみ取って答えられるかどうかで、この世界の「うらら」、つまり「大学生」という「学者のたまご」にするかどうかの選抜を行うのでしょう。

ですが、今回は大学入試ではありませんから、その問いを立てるのはともかく、その正解を1つに決めるのをやめましょう

その代わりに、マリが小梅と出会ってからこのセリフが発される瞬間のすべて、それのどれもが正解でありうるとしてみましょう

すると、それぞれの解釈はどれもそれぞれに「美味しい」事に気づきます。これに気づいちゃったら、人間が求めて限りない、「唯一無二の絶対の真実」なんか、どうでもよくなっちゃいますよ?

可能性1:勇気ある行動を見て、信頼するようになった

比較的素直な解釈の1つです。「意外と勇気があるじゃない。」という言葉通り、この小梅の勇気ある行動を見て、「ふむ、こいつなら信頼できるな」と小梅のことをマリは認めて箒に乗せてくれた、とする解釈です。素直ですね。

この可能性をとると、実は小梅が今まで魔法だと思っていた数々の行為は、実は全部ただの手品だったことになります。漫画版には、この解釈を採用すると意味が文字通りになる、「マリが来てから毎日手品みたいに不思議で楽しくて」という独白もあります(p.87)。小梅と仲良くなろうとしていたのも、「留学先の子供を懐柔しとけば親の機嫌も同時に取れるし、雪見家とご令嬢経由でコネが作れれば、この先いろいろ好都合よね~」という程度の話であって、いままでのは全部ただの「ご機嫌取り」、「仲良しごっこ」、「処世術」でしかなく、小梅のことなんか、な~んとも思ってなかった、極論すれば、「留学先の大財閥のご子息」という「ラベルの貼られた人間」「社会的ロール」を通してでしか認知していなかった、という極端な解釈だってできます。

この可能性を採用してエピソードを見返してみてください。完全に違って見えるはずです。

可能性2:最初から信頼していた(少なくとも、ある程度は)

可能性1はいくらなんでも無理があるんじゃない?留学先の子供をあしらって機嫌を取るにしてもサービスしすぎじゃない?そこまでドライでは、流石になかったんじゃないの?

そういう意見も、もちろん妥当だと思います。

さて、マリは魔女ですよね。魔女は、この作品において「西洋のうらら(占い師)」とも呼ばれる存在です。ですから、小梅と出会った瞬間に、直感的に、呪術的に、あるいは「運命」や「星の巡り」のようなものを感じて、「この子は信用できるわね」と判断して、最初から完全に、あるいは「ある程度」は信用していた、そういう可能性もありましょう。

途中で「世界で一番の魔女になるのが夢なの」「でもこれは秘密事項よ」と夢を語るシーンに関しては、こちらのほうが素直に読むことができます。

この場合、今まで小梅が見てきた「魔法」は全部ほんもので、小梅以外からは見えないよう、魔法陣や結界を張って他の人からは隠していたのでしょう。しかし、それでも一部の『魔法』は「そこまでは見せられない(信頼できない)」ということで、やっぱり手品か何かだったのかもしれません。

そして、その「信頼度」も、ずっと同じだったわけではなく、この物語を通じて、上がったり下がったりしていたことでしょう。

この「最初はどれほど信用していたのか」「この時点ではどれほど信用していたのか」はいくらでも可能性が考えられますので、色々レベルを変えて見返してみてください。その「すべて」でエピソードの印象はそれぞれ変わって見えるはずです。

可能性その3:描かれてないだけで、小梅が覚えていない何かがあった(そうだ、二次創作しよう!)

このエピソードは、小梅の回想です。ですから、当たり前ですが、小梅が覚えていることしか(基本的には)登場しません。ですが、もちろんマリにはマリの意思があり、記憶があります。

ですから、「マリが小梅を信頼するようになった」のは、「実は小梅が記憶していない、この小梅の物語には出てこない、マリにとっては特別に感じられた、別のエピソードがあったからだ」、と解釈することだって可能です。ええ、一番現代文の教師が嫌いそうな解釈ですけどね。

この解釈を採用してもアニメ本編の解釈には直接の影響はありません(だって描かれてないんだから)が、二次創作してみるのにはぴったりな解釈・題材だと思います。

ぜひみなさんがその「エピソード」を紡いだら、ぜひわたしに教えてください。わたしも形にできたら、ひっそり公開しようかと思います。

もちろん、物語も魔法の1つ!、ということで、本当に信頼できる人にしか見せないのもアリかと思います。UGC 全盛で忘れ去られてる気がしますが、二次創作に限らず、べつに作ったものをみんなに公開しないといけないわけじゃ、無いんですよ?

うーん、小梅とマリの間に、何があったんでしょうね。とっても気になります。今日は寝れるかな?

アニメ版と漫画版、それぞれのアートワーク

本題とは一切関係ないのですが、この話は先述したとおり、おおむね原作漫画をなぞったうえで一部演出やセリフをカットしたり追加したものです。その中でも、とくにビジュアルや演出が光ったアニメ化になっていると感じました。

なかでもわたしのお気に入りは、最後に小梅が「困難と試練」を授けられるシーンです。

原作漫画はこんな感じです:

フランスへ帰る準備をするマリを止めようとするシーンになっています。

これが、アニメ版では別れ際に、雪が降り積もる中でのシーンに変わっています。

これがまたとても抒情的で、印象的な、小梅が大きくなっても忘れられないのも納得してしまう、そんな、幼い日の回想の〆にふさわしいシーンに仕上がっていると思います。

一方、漫画版だって負けてません。扉絵の次の1枚は、イラストレーターとしての「はりかも」の実力が存分に発揮された、想像を掻き立てられる、とてもすてきな一枚だと思います。単行本だと白黒なのが、本当にもったいない。

一応画集にはカラー版もあったり(セリフとの相乗効果はこれでは見れませんが…)

マリと小梅の毎日はきっとこんな感じだったんだろうな、とあれこれ想像させてくれる、落ち着いてるけど、にぎやか。言葉で表現すれば、そんな絵でしょうか。

一方で、アニメ版の冒頭に追加されているこのカットは、光の使い方も含めて、「あぁ、小梅にとってマリはそれほど特別な存在なのだな」と、初見ではなく、改めて見返した時にはじめて意味がわかる、とても印象的な一枚になっています。

いやしかし、ほんと、ここの光の使い方は本当に…とってもきれい。

アニメはいつ見ても面白いし発見がある

「今期何見てる?」もいいけどさ、好きな時に好きなようにアニメ見ようぜ。そして好きに語ろうぜ!流行りなんか気にせず、二次創作しようぜ!

蛇足:すこぶる正しい「5歳児から見た18歳」像

これどこに書くかなやんで思いつかなかったのでここにぶちこむんですが、このエピソードの「5歳から見た18歳」というものが、すこぶる正しく描写されてる感じがして、そこも好きです。そうそう、18歳と30歳の区別は、付かないですよねぇ(笑)。

ホレンテ島の魔法使い:「きらら」というカネとユメの汽水域、そしてその可能性

Posted on

何もかもがインチキだらけの「誰でも(お金があれば)『魔法使い』になれる」観光島、見えるすべてが胡散臭い、「夢と現の汽水域」。その名は、ホレンテ島。

…しかし、どうやら不思議な力は、本当に存在するらしい…。と、匂わせての二巻目、最終巻です。

二巻で終わる尺のせいかおかげか、次々に畳み込むように物語は進行していきます。
ぐんぐんと「魔法」の正体がキャラクターどうしの駆け引きの果てに明らかにされていき、これまたきれいに決めたジャンプのようにオチへと着地して、終劇!見事です。

久しぶりに、漫画を読んでいて息をのみました。
この展開やオチは一巻冒頭の残念魔法観光島漫画からは正直まったく想像できないもので、いい意味で後頭部をぶん殴られました。これも「魔法」でしょうか。

オチを見終わった後の表紙と、よく見ると一巻の英語版タイトル「Witch dream would you buy?」と違う二巻の英訳タイトルもいい味出してます。せっかくだから、どんなタイトルかは最後まで読んでから確認してみてね!

中盤の魔法の「カラクリ」がどんどん明らかになっていく展開は、ゆるい「ごちうさ」リスペクトものかと思われた一巻冒頭からは想像もつきません。心理戦も含めた構成はまるで少年漫画のようで、どんどん引き込まれていきます。一巻を読んでいた1年前のわたしにタイムスリップしてこのことを言ったとして絶対に信じないでしょう。とはいえ、1巻を見返す限り、このオチは最初からほぼ決まっていたように読めます。うーん、よくできてんな。

「カネ」と「ユメ」の汽水域、「きらら」

さて、作中でもメタ発言があるので、このレビューでもメタな話をしましょう。

二巻で終わったという事はおそらく人気が出なかったのだとは思います。
人気が出なければ、商業漫画は続くことができませんし、
人気が出れば、人気が出なくなるまでシリーズは続く。

それが、商業漫画…いや、商業芸術、「コンテンツ」というものの宿命です

が、しかし。二巻で終わる不人気さは、思わず引き込まれる、そんなスピード感をこの漫画に与えてくれました。

商業雑誌で連載される漫画という「商売」と、そこで展開される物語という「夢」の難しいバランス。

そのバランスの元かろうじて成り立つ「きらら」という漫画雑誌。

その連載作品たちが、先輩作品をリスペクトしながら、後輩作品へと派生・発展していく、「きらら」という文化。

その構造そのものが、「魔法の夢」と「ざんねん坂」が隣り合わせするこの島や、この漫画における「魔法」の在り様と、意図してか偶然か、見事に一致してるのも面白いです。

これは、まちがいなく怪作です。

前述したとおり二巻で終わってしまったので、きっと、万人受けするものでは無かったのでしょう。
でも、わたしには飛んでもなく突き刺さりました。
わたしもカトリネルエのように、「ホレンテ島に心を奪われ」てしまいました。

ホレンテ島の「魔法」のように、この漫画が断片となってこの世界から発散して人々から忘れ去られてしまっても、きっとわたしにとっては作中のセリフ通り、「きっとお婆ちゃんになっても忘れない」、そんな作品になるでしょう。

作中で回収しきれなかった伏線はいくつかありますが、それも、わたしの心の中でたまに「連載が続く」、そのための「魔法」なんですよ、きっとね。

暇だから会社作った

Posted on

こんにちは、とある合同会社の主任院生 (社員を当社では院生と呼ぶ。代表社員ともいう) です。社名は伏せさせてくれ。住所が出てくる。

TL; DR:合同会社の作り方

その1:次の書類のPDFを用意する:

  • 定款
  • 払込みがあったことを証する書面
  • 代表社員の就任承諾書
  • 代表社員、本店所在地及び資本金決定書の例

司法書士に頼むとお金がかかるのでGoogle docsで2時間ぐらいで作りました。テンプレがその辺に転がってるのでググってね。

その2:カードリーダーを買う

PaSoRiが無難です。e-Tax用って書いてあるやつならたぶん大丈夫です。

その3:法務省の出してるカスソフトで申請する

基本的に書かれてる通りにやるだけです。

その4:マイナンバーカードのデジタル証明書が切れてないか確認

切れてたら役所に行くと更新できるよ。証明書は5年で切れるよ。

その5:だいたい怒られるので直す

注意事項:

  • 申請だけでなくPDFにも署名が必要です
  • なぜか定款と同じことを記入させられますが、「.」の有無の表記まで一致させないと怒られます(人間に)

その6:カードリーダーが正しく認識するよう祈りをささげる

祈りながら「確定」をクリックする

「ICカードリーダの初期化に失敗しました」とほざく法務省の申請用総合ソフトの調教

その7:6万円払えと言われるので払う

ネットバンキングでオンラインでできます。ゆうちょでやりました。

その8:税理士事務所のDMが投函されたのを見て登記が完了したのを知る

法人番号はその数日後に法務局から届きます。

所感

ソフトの使い勝手はカス of カスだけど、一切紙を提出していないしマイナンバーカードの証明書の更新以外家でパソコンぽちぽちするだけで終わったので、そこはある程度「DX」ってやつは出来てると言ってよいのでは。

何するんですか

「富岳」をより簡単な申請ですぐに使える、試行課題のファーストタッチオプション開始 | 理化学研究所 計算科学研究センター(R-CCS)

これ使いたかったんですが、

 一般課題の課題代表者は、原則として法人(大学、研究機関、
 社団法人、企業等)に所属する方とさせていただいています。
 ※企業に所属される場合は、日本国内に登記された企業である
  必要がございます。

と言われてしまい、「所属」は同人サークルではダメだけど、適当に作った会社ならなんでもいいらしいので、これで富岳で遊ぼうと思います。

ちなみに、これが終わったらさっさと潰す予定です。めんどくさいね、人間社会。

まぁ、あれですよ、OS自作したりプログラミング言語自作したりレイトレーサー自作してみたりするのと一緒一緒。

維持費は?

年間7万円のサブスク代(法人住民税)が必要らしいので、とりあえずAdobeを解約しました。変な常駐ソフトが全部消えてパソコンが軽くなりました。Adobeの解約、おすすめです。

宗教法人にしなかったの?

すぐ「計算機を信仰する宗教法人にして非課税を狙おう」とかいう人居るんですけど、信者を集めて活動している実績をちゃんと証拠として求められるから、正直かなり大変だよ。大川隆法は5年麻原彰晃も4年ほど掛ってる。お前ら宗教なめてんだろ。

地方の後継者の居ない宗教法人を乗っ取るのが手っ取り速いかもしれないけど、それでもちゃんと宗教法人としての活動やってるかは継続的にチェックされるみたいだよ。

float32の中にNaNとかがいくつあるか数える

Posted on

お久ぶりでございます。最近はUnityでfloatと格闘しております(趣味で)。

ふと気になったのが、「ところで、floatの32ビットの中にNaNって何個ぐらいあるんだろう?」。

そんなわけで数えてみました。

ソースコード

#include <iostream>
#include <cmath>

int main() {
  uint64_t normal = 0;
  uint64_t subNormal = 0;
  uint64_t positiveZero = 0;
  uint64_t negativeZero = 0;
  uint64_t neutralZero = 0;
  uint64_t positiveInfinity = 0;
  uint64_t negativeInfinity = 0;
  uint64_t notANumber = 0;
  uint64_t unknown = 0;
  uint64_t total = 0;
  std::cerr << "Start" << std::endl;
  for (int64_t i = 0; i <= 0xffffffff; ++i) {
    total++;
    uint32_t const j = static_cast<uint32_t>(i);
    float const f = *reinterpret_cast<float const*>(&j);
    switch (std::fpclassify(f)) {
      case FP_INFINITE:
        if (f > 0) {
          positiveInfinity++;
        } else if(f < 0) {
          negativeInfinity++;
        } else {
          throw std::logic_error("Zero infinity?");
        }
        break;
      case FP_NAN:
        notANumber++;
        break;
      case FP_NORMAL:
        normal++;
        break;
      case FP_SUBNORMAL:
        subNormal++;
        break;
      case FP_ZERO:
        if (1/f > 0) {
          positiveZero++;
        } else if(1/f < 0) {
          negativeZero++;
        } else {
          neutralZero++;
        }
        break;
      default:
        unknown++;
        std::cerr << "Unknown: " << f << std::endl;
        break;
    }
  }
  std::cout << "Total: " << total << "(" << (((double)total)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "Normal: " << normal << "(" << (((double)normal)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "SubNormal: " << subNormal << "(" << (((double)subNormal)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "Positive zero: " << positiveZero << "(" << (((double)positiveZero)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "Negative zero: " << negativeZero << "(" << (((double)negativeZero)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "Neutral zero: " << neutralZero << "(" << (((double)neutralZero)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "Positive infinity: " << positiveInfinity << "(" << (((double)positiveInfinity)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "Negative infinity: " << negativeInfinity << "(" << (((double)negativeInfinity)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "Not A Number: " << notANumber << "(" << (((double)notANumber)/((double)total) * 100.0) << "%)" << std::endl;
  std::cout << "Unknown: " << unknown << "(" << (((double)unknown)/((double)total) * 100.0) << "%)" << std::endl;

  return 0;
}

かなり素直なコードです。40億回ループを回しても30秒もかかりません。最近のプロセッサすごい(5年前のモデルだけど)!

少しテクニックがあるとすれば…

  • std::fpclassify を使うと種類が返ってきます。知らんかった。
  • ゼロが正か負か判断するために(f == -0.0)を最初書いたのですが、これは必ずfalseらしい(CLion談)ので、1で割ることでプラスマイナスどちらかの無限大に飛んでいくことを利用して判断してます。
  • forでカウンターで回す限りはuint64_tを使わないとダメです。最初uint32_tにしたら0xfffffffの次が0になって無限ループになってしまいました。do while文ならuint32_tでも行けるかもしれない。
  • カテゴリ多すぎだろ気が狂うわ

結果

Total: 4294967296(100%)
Normal: 4261412864(99.2188%)
Sub Normal: 16777214(0.390625%)
Positive zero: 1(2.32831e-08%)
Negative zero: 1(2.32831e-08%)
Neutral zero: 0(0%)
Positive infinity: 1(2.32831e-08%)
Negative infinity: 1(2.32831e-08%)
Not A Number: 16777214(0.390625%)
Unknown: 0(0%)

使ってる環境は次の通り:

  • Ryzen Threadripper 1950x
  • Windows 10 64bit、よくしらんけどこの記事の時点で最新
  • コンパイラはVS2022、よくしらんけどこの記事の時点で最新

所感

ゼロと無限大はちょうど1つずつあるんだなぁというところに素直に関心しました。

非正規化数とnot a numberの数が等しいのも面白いです。なんでなのかは知らん。IEEE754の仕様書読んで教えてくれ。

IEE754はまぁまぁ複雑ですが、それでも変なケースを1%以下に抑えてるのはえらい…と言って良いのかな?

「ぼくのかんがえたさいきょうの浮動小数点フォーマット」を考えてみたくなりました。

まとめ

小学生の夏休みの自由研究でも許されなさそう

吉野家コピペ2022

Posted on

昨日、近所のCVE行ったんです。CVE
そしたらなんかGithub Issueに人がめちゃくちゃいっぱいで追いきれないんです。
で、よく見たらなんか垂れ幕下がってて、ロシアとベラルーシのIPアドレスだったらファイルの中身を片っ端から❤に置換、とか書いてあるんです。

もうね、アホかと。馬鹿かと。
お前らな、戦争如きで普段してないハッキングやってんじゃねーよ、ボケが。

戦争だよ、戦争。

なんかUnityHubとかもいるし。Vue.jsでデスクトップUI開発か。おめでてーな。
よーしパパ平和を祈っちゃうぞー、とか言ってるの。もう見てらんない。
お前らな、もっと純粋な悪意やるからその席空けろと。

OSSってのはな、もっと殺伐としてるべきなんだよ。
コードレビューの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。チームビルディングされてる職業プログラマは、すっこんでろ。

で、やっと座れたかと思ったら、隣の奴が、これが難読化を解いたコードです、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、こんな難読化は難読化とは言わねーんだよ。ボケが。

得意げな顔して何が、難読化、だ。
お前は本当にこのコードを読んでて難しいと思ったのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、Base64って言いたいだけちゃうんかと。

OSS通の俺から言わせてもらえば今、OSS通の間での最新流行はやっぱり、
突然AGPL化、これだね。
今日からAGPLで頒布します。これが通のリリースの仕方。
AGPLってのはサーバサイドで動かしてもソース開示要求できるそん代わりAWSには勝てない。これ。
で、それに突然のリリース。これ最強。

しかしこれを行うとコミュニティにforkされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。

まあお前らド素人は、上から降ってきた仕様書読んで書いてなさいってこった。


You may also see

Linuxが消えた:わたしのGithubのリポジトリには赤の他人の知らないコミットが含まれている

Posted on

さよならLinux

今日はびっくりしました。

毎日お世話になっているLinux。その作者がついに嫌気がさしてカーネルのリポジトリからファイルをすべて消去するという痛ましい事件があったからです。

まぁ30年書いてりゃ飽きるよね(?)

ドッキリでした

…というのはもちろん嘘で、これはLinuxの作者、Linus 本人によるものではありません。

では何なのか?といいますと、これは別人のforkされたリポジトリに書かれているものです。

でも、最初の画像はLinusのリポジトリのページだったはずです。おかしいですよね。

Githubはすべてのfork間でデータを共有している?

どうも、Githubでは

  • forkしたリポジトリすべてでデータを共有しており、かつ、
  • githubにはあるコミットIDが自分のリポジトリにあるかそうでないかの区別が付かない

ようなのです。

ブラウザだけでなく、gitを使っても、同じようにLinusのリポジトリからこのコミットを取り出すことができます。

# 初期化
% git init
Initialized empty Git repository in C:/Users/kaede/src/t/.git/

# Linusのリポジトリをoriginとして追加
% git remote add origin git@github.com:torvalds/linux.git

# 問題のコミットだけfetch
% git fetch --depth=1 origin 4fbc49920463c394fc2615f00ecc907a2ce943da
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 638 bytes | 70.00 KiB/s, done.
From github.com:torvalds/linux
 * branch            4fbc49920463c394fc2615f00ecc907a2ce943da -> FETCH_HEAD

# mainブランチにmerge
% git merge 4fbc49920463c394fc2615f00ecc907a2ce943da

# ファイルを確認すると…
% cat README
Hyy there. It's me, Linus Torvalds: See the URL, Where is says /torvals/linux/.

I have deleted my kernel because it is garbage. You should instead check out
this OS called Microsoft Windows Vista. It is much smaller and faster then linux
ever was.

...

いや…これ…シンプルに頭おかしい仕様だろ…

ジョークならいいけどさ

今回はジョークだから、いいですよ。でも、悪い大人が悪用したらどうなるんでしょうね?

Linusに限らず、自分のリポジトリのURLで自分の名前を騙って意見などを書くことができるわけです。フェイクニュースの情報源にぴったりです。今回の例なら、「Linux開発者がLinuxを削除!Linuxを利用しているIT企業への影響は…」みたいな「ニュース」を書いたら市場が動いたりすらするかもしれません。

フィッシングに使うこともできますね。「このコミットでセキュリティ問題を修正したらしい。詳しくはここのソースのn行目に書いてあるURLを見てくれ」と書いておけば、Linusのリポジトリなら信用できると思った人がリンクをクリックしてくれるかもしれません。

任意のソースコードを実行させることだってできるかもしれません。上記に書いた通り、gitのコマンドを通してコミットIDの時点のスナップショットが取得できます。「このリビジョンで問題が修正されてるらしいから、使ってみて。cloneは重いからこの方法でshallow fetchするといいよ」と言いながら複数行のコマンドを渡されたら、あなたは「Linusやその他有名な人・公式アカウントなどのURLなら大丈夫」と思ってターミナルにコピペしませんか?でもそのコミットは実はマルウェアが仕込まれてるバージョンかもしれません

最後に。オリジナルのリポジトリと同じSHA-1ハッシュのコミットが生成できれば、オリジナルのリポジトリを汚染することができるかもしれません。これはgithub側の実装次第なので、なんとも言えません。

ストレージが高いのは分かるけど…

なんでこんな事になってしまったのでしょう。

これは推測ですが、たぶんストレージを節約したかったからだと思います。Linuxのリポジトリは数GBありますが、それを4万回もForkされたときに実直にコピーしてたら数10TBになってしまいます。

悪意を抜きにすれば、forkしたリポジトリ間でデータを共有しても、とくに問題ありません。別人の書いたforkのコミットには、それぞれオリジナルの作者のものとは違うコミットIDが振られます。同じ根本から違う枝が生えるだけです。

しかし、セキュリティの面では悪手です。

今まで見た通りのことに加えて、最近信用性の下がってきたSHA-1が問題になってきます。SHA-1はGitでそれぞれのコミットを識別するために使われます。セキュリティ担保のためには使われれてません(本人談)。しかし、データを共有したとなると、これはセキュリティ問題になりえます。githubのgitの実装次第ですが、もし同じコミットIDをpushしたときに上書きされるような挙動になっていた場合、fork先がfork元のリポジトリを汚染できてしまうかもしれませんgithub社は内製のgitサーバを用いており、それを知るすべはありません。

どうすれば…

SHA-1はまだそこまで破られてはいないので気にする必要は今のところないかもしれません。ただ、コミットをgpgで署名してなりすましを防ぐのは有効かもしれません。まぁ、Gitの最初の開発者でもあるLinusは普段からしてないようですが…。

一応、githubには署名されていないコミットにフラグを立てる機能があるので、これを有効にするのもいいかもしれません。ただ、そのフラグを忙しい現代人(スマホを覗くとだいたい暇つぶししてますけど)が見てくれるかどうかは別問題です。

gitにもgithubにも飽きた

正直なところ、飽きた。もう14年?くらい使ってるよ。飽きたよ。githubも10年以上使ってるよ。飽きたよ。なんかない?