
はてなキーワード:DMDとは
昨日、Middleman'sLoveの変更後の新キャストが発表された。DomundiとしてMii2の後輩におけるTutorYim。
役を降りるといってから覚悟をしていたつもりだったけども、正直心の整理は今でもまだついてない。新しいキャストを探す、と言っているのを見て「まぁそう言いながら良くてもDMDと縁があるところからくるんだろうな」「DMD内でくるとしたらTutorYimしかいないけど、年齢設定がな…」とは前々から思っていた。
作品が再び動き出すのは本当に良いことだ。TutorYimの責任はとても重たいし、頑張って欲しいとは思う。でも応援はしばらくの間出来そうもない。恐る恐る写真を見てみたけど、何を言っても嫌味になってしまいそうだからすぐ見るのをやめた。キャスティングされた本人達には本当に一切悪意なんて一欠片もないのだけど。一瞬見ただけでも「Mii2の時は撮影開始するのにあんなにかかって、撮影時にアップされる写真も少なかったのにもうそんなに撮ってるんだへーそう」とか「Mii2の時は全然宣伝する気なさそうだったのに、なんか急にやる気だして頑張ってるね?あれはなんだったの?」とか呟いてしまいそうだから、ここで吐き出す。ただ昔からMii2の売り出し方や扱いに不満が積もりに積もってるから、ちょっとした公式の態度の変化にすら腹が立ってしまうんだ。本当にTutorYimには頑張って欲しいし、今は見れないけど応援はしてる。
でも、Middleman'sLoveという作品は本当にYahomにとって特別な作品で希望だったから、気持ちを切り替えるのは思いが深ければ深いほど難しい。私にとっては発表を知ってから、この世で一番楽しみなシリーズだった。キャスト降板発表があった時より前から昨日キャスト発表があった間までもスマホの壁紙はTommyくんのP'Jadeだった(あまりに辛いから見てすぐに変更した)。
そもそもMiddleman'sLoveは、YahomがP'Aofに「Mii2にぴったりな原作があるの!」と話をしてきた経緯があると、噂に聞いている。その方にとって、キャスト降板と変更はどれだけショックなんだろうなと思うと想像すら難しい。
でも多分、Mii2が解散するのではと思うくらいもう一緒にいることもなくSNSで絡んで楽しい姿見せることもなくなったことが、よりYahomの辛い気持ちを助長させてる気がする。多分JimmyくんのメンタルがどうとかTommyくんの仕事がどうだとか、Mii2が表向きでも順調に、一緒に笑い合うイメージが残っていたらキャスト変更で現実を見ても多分ダメージは少なかった。本人達が「新しいキャストを応援して欲しい」と言っても素直に全部飲み込めることができた。
Tommyくんの仕事情報が全然更新されないことやMii2の今後についてしっかり知らせてほしいと、皆常に思っている。Jimmyくんの病状に関しては知らせて欲しいけども難しいことだと思うから、それに関しては個人的にはいい。
ただ、本当に苦しいんだ。どこに感情を持っていけばいいか分からない。ポジティブな気持ちを保ってられなくて、波のように悲しさ辛い気持ちがきて引いてまたきての繰り返し。良い意味でも悪い意味でも早くこのただぐるぐる考えながら黒い感情に囚われて待つだけの時間を終わらせてくれと願っている。
読めば分かる通り私は生粋のYahomだけども、前のままソウルメイトと言えるような仲に完全に戻って欲しいとは言わない。カップルとしてじゃなく、友達としてただ2人一緒に笑い合う姿や微笑ましいSNSのやり取りが見れたら本当にそれで良い。前のようにずっと一緒に隣にいてくれとは言わない。DMDボーイズの仲間としてだけでも、普通に接してくれたらそれだけでこの苦しい数ヶ月間(特に苦しくなったのは9月からだけども)が少しは報われるし、これからもポジティブな感情を持てる気がする。まぁ、もう苦しい辛いとファンをやめていった方々を結構見てきたけれど…。
昨日これをまとめている間に、JimmyくんがTommyくんの呟きをいいねしているのを見て、また泣いている。実に何ヶ月ぶりか分からないほどの「いいね」。これだけでも泣けるぐらい、もうとっくに限界迎えてるんだな。
いまさらだがFizzBuzz。
1から100まで、3の倍数5の倍数云々って、全部定数の計算じゃね?
というところに気付き、自称メタプログラマー(略してメタグラマー)俺の血が騒いだ。
定数計算なら、それは実行時ではなくコンパイル時に行なわれるべきだ……。
#include<iostream>constint FIZZ_NUM =3;constint BUZZ_NUM =5;constint BEGIN_NUM =1;constint END_NUM =101;template<int N>struct Fizz {enum {PRINT =0,NEXT = N +1};staticvoidprint() {}};template<int N>structBuzz {enum {PRINT =0,NEXT = N +1};staticvoidprint() {}};template<int N,bool ForB>structNumber {staticvoidprint() {std::cout << N;}};template<>struct Fizz<FIZZ_NUM> {enum {PRINT =1,NEXT =1};staticvoidprint() {std::cout <<"Fizz";}};template<>structBuzz<BUZZ_NUM> {enum {PRINT =1,NEXT =1};staticvoidprint() {std::cout <<"Buzz";}};template<int N>structNumber<N,true> {staticvoidprint() {}};template<int N,int F,int B>structFizzBuzz {staticvoidprint() {typedef ::Fizz<F> Fizz;typedef ::Buzz<B>Buzz; Fizz::print();Buzz::print();Number<N, Fizz::PRINT ||Buzz::PRINT>::print(); std::cout << std::endl;FizzBuzz<N +1, Fizz::NEXT,Buzz::NEXT>::print(); }};template<int F,int B>structFizzBuzz<END_NUM, F, B> {staticvoidprint() {}};int main(int argc,char **argv){FizzBuzz<BEGIN_NUM,1,1>::print();return0;}
ifなし%なしループ系なし、しかも実行時オーバーヘッドなし!(多分)
ああ、久しぶりにC++を触ったけど、やっぱC++のテンプレートってダメダメだな。20世紀の遺物といわざるを得ない。
君がもし21世紀のモテ系イケメンメタグラマーなら、21世紀のプログラミング言語、D言語を使うべきだ!
驚くべきことに、D言語はコンパイル時に関数が実行でき、その結果をソースコードとして取り込める!
ただし実行できるのは簡単な関数だけだけど……。
import std.stdio;// これでFizzBuzzを全部出力するコードを作るぜ!string makeFizzBuzzCode() {string code;for(int i =1; i <=100; ++i) {// 効率? コンパイル時にそんな配慮は要らん!if(i %3 ==0 && i %5 ==0) { code ~="writefln(\"FizzBuzz\");\n"; }elseif(i %3 ==0) { code ~="writefln(\"Fizz\");\n"; }elseif(i %5 ==0) { code ~="writefln(\"Buzz\");\n"; }else { code ~="writefln(" ~ static_itoa(i) ~");\n"; } }return code;}int main(string[] args) {// おまけで生成されたコードも見せるよ。pragma(msg, makeFizzBuzzCode());// 生成したコードを埋め込む。コピペみたいな感覚。mixin(makeFizzBuzzCode);return0;}// 以下ユーティリティ。このぐらい標準で欲しいな……。///整数→文字列変換(コンパイル時)string static_itoa(int n) {if(n ==0) {return"0"; }// 10で割りながら余りを文字にして追加。桁が逆転した文字列になる。string s;for(; n; n /=10) { s ~= ("0123456789")[n %10]; }// 桁位置を正常にする。相変わらず効率無視。return static_reverse(s);}///配列リバース(コンパイル時)/// 実行時ならarray.reverseが使えるんだけどね……。T[] static_reverse(T)(T[] s) { T[] result; foreach_reverse(c; s) { result ~= c; }return result;}// 心配なので静的ユニットテスト(笑)unittest {staticassert(static_itoa(0) =="0");staticassert(static_itoa(10) =="10");staticassert(static_itoa(999) =="999");staticassert(static_itoa(9999) =="9999");staticassert(static_itoa(12345) =="12345");staticassert(static_itoa(314159265) =="314159265");}
コンパイル結果
$dmd -unittest fizz_buzz.dwritefln(1);writefln(2);writefln("Fizz");writefln(4);writefln("Buzz");writefln("Fizz");writefln(7);writefln(8);writefln("Fizz");writefln("Buzz");writefln(11);writefln("Fizz");writefln(13);writefln(14);writefln("FizzBu(ry
出力結果は略。
さすがD言語!C++やJavaやC#にできない事を平然とやってのけるッ
そこにシビれる!あこがれるゥ!
というか、
writefln(1);writefln(2);writefln("Fizz");writefln(4);もうwritefln(出力関数)要らなくね?
修正。
// これでFizzBuzzを全部出力するぜ!string makeFizzBuzzCode() {string code;for(int i =1; i <=100; ++i) {// 効率? コンパイル時にそんな配慮は要らん!if(i %3 ==0 && i %5 ==0) { code ~="FizzBuzz\n"; }elseif(i %3 ==0) { code ~="Fizz\n"; }elseif(i %5 ==0) { code ~="Buzz\n"; }else { code ~= static_itoa(i) ~"\n"; } }return code;}int main(string[] args) {// もうコンパイル時のメッセージしか出さない。(笑)pragma(msg, makeFizzBuzzCode());return0;}
コンパイル結果。
$dmd -unittest fizz_buzz.d12Fizz4BuzzFizz78FizzBuzz11Fizz1314FizzBu(ry
実行するまでもなく結果が出力された。つまり実行時間ゼロ、ということは……
世 界 最 速
みんな使おうD言語!
http://www.kmonos.net/alang/d/1.0/index.html(1.0。こっちの方が安定してる?)
http://www.kmonos.net/alang/d/2.0/index.html(もっと凄い2.0)