つよつよにあこがれるプログラマの日記

子育てとかプログラムとか日々の事をここに残します。ぼちぼちやってます。

【.Net Core】.Net Core webapi でindex.htmlが表示できないよ!できなかった!

最近開発をサボって映画と本を消化しまくってました。
このAmazonPrimeすごいよー!!さすがAmazonのお兄さん!

開発を再開し、.NET WEB APIのプロジェクトをつくってみたものの、
Index.htmlが動かない…なぜ…インターネットで調べると、
APP_Startディレクトリに入っている「WebApiConfig.cs」を動かせとか出てくる。
お前はMVCのやつちゃうんか、何なのもう。

直し方の正解は、
以下2行をConfigureに追加するだけ、

app.UseDefaultFiles();
app.UseStaticFiles();

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseDefaultFiles();
            app.UseStaticFiles();
            app.UseHttpsRedirection();
            app.UseMvc();
        }


■今日の失敗
「.NET WEBAPI index.htmlが表示されない」だの、
英語で「How do I display index.html on .NET WEBAPI」だの、
いろいろ調べたりブログみたのに、最終的にたどり着いたのは

docs.microsoft.com

Microsoftの.NET WEB APIチュートリアルだっていう…

神様、僕らどうしてすれ違ったり離れたり繰り返して、公式ドキュメントから遠ざかってしまうんだろう。ほしいものは僕たちのすぐ側にあったのに…

今後参考にさせていただく(予定)ページ
.NET Core 2 でLiteDBを試す | DevelopersIO

【Unity】【Firebase】System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Google.VersionHandlerImpl,"

FirebaseをUnityで使おうとしたら瞬速で躓いた。クイックスタートで躓くってなんなの?俺にはプログラマの才能がないの?ということで今日の日記スタート

子供が寝た後の時間でゴリゴリプログラム書くはずがエラーの解決で終わってしまった…。あるあるなんかな。

 

さて、1年以上病んでる間にプライベートプロジェクトが止まってしまいました。
これまでは、漫画をダラダラ読んだり、自己啓発読んだりしてコンディションを整えていました。

自己啓発本侮るなかれ、落ち込んでるときにはとことんやる気にさせてくれる。プロジェクトを再開だ!

 

久々にいじるとテーブルの中身とかも覚えてなくて、
必要な情報をどういうAPIで返せばいいかわからんくなってクソってなったり、
DBの中身入れ替えようとすると列が一個思ってたより足りなくてデータが上手く入らなくってクソってなったり、
Herokuにアップしてみたらバイナリが壊れてて動かなくてクソってなるので、Firebaseを使ってみようと思いたちました。

ていうか、俺みたいな初心者が作ったバックエンドとか信用ならないし、
どっかにミスがありそうだし、スケールとかでき無さそうですし、こういう発明があるなら使わないといけないですよね。

 

SDKを入れてすごく簡単にできるみたいだったので「ヘッヘー楽勝だぜ」とか思ったらUnityにエラーが出ている。

えぇー、クイックスタートでこれって、なんなの?こんなので躓くの全世界で俺だけじゃないの?

絶望しながら内容を見てみる。
む?なになに?

"System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Google.VersionHandlerImpl,"

ポンコツ訳:リフレクションでエラーがスローされました。Mono.Cecilアセンブリを解決できません。


Mono.Cecil?なにそれ?
Visualstudioで開いてみるも、参照設定にいない。
誰こいつ?

Monoってあれだよね、もともとUnityで使ってた.NETだよね?
Mono.Cecilについて調べてみる


"Mono.Cecilは.NETアセンブリを解析したり、書き換えたりするための便利なライブラリです。このライブラリを使うことで既存のコードを書き換えて新しいアセンブリを出力できます。"


https://www.misuzilla.org/Blog/2017/10/16/InjectILToAssemblyUsingCecilより引用

うーん、コンパイルされたあとのものをいじれるのかな?それをリフレクションというのか?すごいね、でもこれがエラーはいてるんだ?
Firebase SDKの中で使ってんのかな?

 

ネットで解決方法調べてもよくわからない。みんな、僕よりもっと深いなにかにハマっている
https://github.com/lucaslorentz/minicover/issues/43
https://github.com/lucaslorentz/minicover/issues/6

↑の中にあった「2.0.0-ci-20180517205544」という単語、きっとバージョンだろう。
あぁ、そうかNugetで更新すれば良いんだな。
でもこのサンプルプロジェクトにはNugetの設定ファイルがない…じゃあこいつはどっから読み込んでるの????

 

よし、こういうときはとりあえずリビルドしよう。男は黙ってリビルド。
ということでVisualStudioを開いてそちらでリビルド。
Unityの画面に戻ってきたらエラーが消えてる・・・・うーん、こんなのっていいの?
解決したのはすげー嬉しいけど、釈然としない。

もしかして、Unityの中は、Monoが嘘の.NET風ビルドしてて、
VisualStudioは本家ビルドなの?俺、何を言ってるんだろう。よくわかんなくなってきた。

おやすみなさい。

 

■今日のまとめ

・問題:

 Firebase SDKを試そうとしたら、CustomAssetをインポートした時点で以下のエラーとなった。

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Google.VersionHandlerImpl,"

 ・原因:

 Mono.Cecilがリフレクションに失敗する。

・解決方法:

 VisualStudioでプロジェクト開いて、リビルド

・備忘メモ:

 Mono.Cecilは正しくはこうやって使うらしい。

 この人は、あとから実行ファイルにログを埋め込む実装をしてる。

 http://king-of-nowhere.hatenablog.com/entry/2014/02/04/002817

「死にたい」ってググったことありますか?(Have you googled the words "I want to die."?)

死にたいってググったことありますか?

ググるとこんなんが出てくるんですよ。

f:id:GooglePro:20190201212823j:plain
「死にたい」ってググった結果

私は心を病んで休職中です。 休職してからは、急速に家庭での立場が弱くなったので専業主夫をやっています。 ただでさえ毎日きついのに、妻とか姑に非難されて「ケッやってらんねーぜ」となってググったらこんな結果が出ました。 面白いですよね。なんか、Googleの優しさを感じてちょっとバカバカしくなってまたちょっと頑張れそうです。

うちには7歳と3歳の子供がいますが、 一言に主夫って言うけど、主夫っていうのは大変なものですね。

朝はやく起きて、皆のお弁当を作って、御飯作って、食べさせて、洗濯をして、ゴミ集めて、 布団干して、上の子を学校に見送って、自分の朝ごはん食べて、掃除して… 一息入れようと思って紅茶のティーバッグにお湯を入れると、 「お父さん鼻水~」と子供が寄ってきて、鼻水かんで、チューブで吸ってやって、 砂糖とミルク入れ終わったら、今度は「お父さんうんち出たーー!」とか言われて うんちをふいて、パンツをはかせて、洗面所で台に載せて手を洗ってあげて…

そんなことしてると紅茶が冷めてしまう。 ここ1年、1回も暖かい紅茶を飲めた試しがないですよ。

その後、10時くらいから寒さ対策して、公園に遊びに行って、 帰りにベビーカーで寝そうな子供を必死に起こしながら家にダッシュで帰って、 泥だらけの足洗って、昼ごはんの準備して、食べさせて、自分のご飯は冷めてて… って、気づくと上の子が返ってきてしまう。

今度は夕方 おやつ食べて宿題見て、風呂掃除して…御飯作って、 風呂順番に入れて、拭いて髪乾かして、ご飯よそって、食べさせて、 自分のご飯は冷めてて…デザートにヨーグルト出してジャム入れて、 りんごを剥いてつまようじさして、みんなに配給。

食べてる間に一息入れようと思ってインスタントコーヒーにお湯を入れると、 「お父さん鼻水~」と子供が寄ってきて、鼻水かんで、チューブで吸ってやって、 砂糖とミルク入れ終わったら、今度は「お父さんうんち出たーー!」とか言われて うんちをふいて、パンツをはかせて、洗面所で台に載せて手を洗ってあげて… アレぇーーー!!これってデジャビュじゃない!!!???

うちの子は長女に持病があり、決まった時間にいくつか薬を服用している。 何種類かある薬飲ませるのは結構めんどい。 それらを飲ませて、歯ブラシ配って、自分も磨いて、子どもたちの仕上げして、 布団に入って寝かしつけるとそのまま寝てしまう。。。。

多分、世の中の多くのお母さん方がこんなライフスタイルなんじゃないだろうか。 いやー、きつい。本当にきつい。

会社員やってた時のほうが楽。何倍も楽。自分の時間(自分でコントロールできる)があるもの。 電車の中で本読んだり、ケータイいじったり、帰ったら子供寝てるから映画見たりして、邪魔されないもの。 最近のお父さんなんかはジムだって行っちゃうでしょ?俺だって行きたいぜ? ずっと子供についていくだけだから、鉄棒とかで懸垂はできても、有酸素運動はできないんだよね。 ランニングできないからお腹の肉がたるんじゃうよね。

脱線した。こんな毎日を送っていて、嫌な事件が起きた。 妻が胃腸炎で入院中に、上の子がインフルにかかってしまった。 インフルエンザがめっちゃ流行ってて、学校からもらってきたっぽい。 同じクラスでも10人くらい休んでて、別の2つの学年は学級閉鎖だそうだ。 実家の姑は親の介護で県外に行ってしまっている。

元気いっぱいでうるさい下の子を一緒につれていき、何時間も(自分も下の子もインフルにかかるのではないか、というストレスに)耐えて、病院に行った後はイナビルを吸入して自宅療養となった。 上の子は一度、タミフルを飲んだ時に異常行動を起こしたことがある。 ずーっと爆笑して独り言を言って、そのときは体温が34度まで下がってしまい、すぐに医者から服用中止の事を言われた。 なんでも、窓から飛び降りたり家から出ちゃったりするそうじゃないか。 危ないので、家の中に閉じこもるしかなくなってしまった。

上の子は何日も夜中うなされて起きて、苦しんで そのたびに体温はかったり、水飲ませたり、あとよく吐く子なのでえづいたらゴミ箱もっていって… そんな事をしながら夜を頑張って越した。

家の中に閉じこもっていると、下の子が上の子の部屋に行こうとする。止める。 家遊びも、すぐに飽きちゃって外に行けなくてストレスがたまるみたいで、わめくはわがまま言うわ。泣くわ。 買い物にも行けないのでネットスーパーで必要最低限の買い物だけして、静養に努めた。

ところが、5日経っても治らない。夜になると体温が上がってしまう。 入院中の妻曰く、水分不足が原因ではないかとのこと。

失敗した。ベッドの近くに水筒をおいたり、ジュースを飲ませるようにしていたが、 上の子は水筒を全く飲んでいなかったのだ。 この事を妻にも姑にもLINEで非難され、俺の心はどうにかなりそうだった。

二人の言い分はこうだ 『『飲むゼリーのQooを飲ませたり、アクエリアスを飲ませたり、なんでもいいから飲ませないと親失格、ありえない。 水筒おいても飲まないのは子供のせいじゃなくて親の管理不足。』』

いや、本当にごもっともなんだけど、 この地獄のような1週間を越しても、まだこの地獄が続くのか…?そんな事を考えていたところに、 畳み掛けるように怒らなくてもいいじゃないか。

言い訳させてもらうと、 そんなのいつもの風邪だったらやってたし、 今回みたいに誰も頼れる人がいない中、下の子見ながら家事もこなしてるんじゃん? こうやってワチャワチャになって外にも買いに行けないから、頭になかっただけじゃん? ていうか、俺が面倒見てるんだからお前ら文句言ってんじゃねーよ!!! クソが!!!

f:id:GooglePro:20190201212823j:plain
「死にたい」ってググった結果

そうしてお酒を大量にあおりながら、 あーあー、俺はどうせ何をやっても報われずに一生を終えるんだー。 俺が死ねばアイツラにも少しは人の痛みが分かるかな?とか、当てつけみたいなこと考えながら ググったら出てきたのがこれだったんだ。

これをみて、自分は電話するほどではないと思ったので、あきらめた。 ただ愚痴りたいだけだった。パパだけど、ママ友が欲しかった。 自分と同じ悩みを抱えている人と話がしたかった。

ちなみに、上から2番目のリンクはキリスト教のボランティアチャットだった。 ※僕は無神論者だけど、悩みを聞いてもらって助かる人がいるなら、宗教も良いんじゃないかと思った。やらないけど。

ロックンロール

こないだ、30代を過ぎると人は同じ音楽しか聞かなくなるというブログか何か記事を読んだ。

そういえば僕も30を過ぎてから何も新しい音楽と出会ってないなと思って、ブログのおすすめなんかを見て、新しいバンドをYouTube で聴いてみた。おいしくるメロンパングッドモーニングアメリカフレデリック、 KANA BOON、 ONE OK ROCK、 嘘とカメレオン、 ALEXANDROS、…etc

多分 ONE OK ROCK なんかは自分が高校生だったら絶対ハマっていたと思う。ハイスタ、エルレガーデン、その流れ。 若い頃だったら絶対にビビっときてしまうかっこいいバンドじゃないか。 全体的に、今のロックバンドはとっても演奏が上手で、おしゃれで洗練されている気がした。 でもなんだかぴんとこない。おしゃれな陽キャの人たちがやってるやなぁ、キラキラしているならと思うくらい眩しかった。

やばい、老害感がすごい。それでお前はどんなのが聞きたいかと言われると、もっと刹那的な、激しいオルタナティブロックとかなんだけど、うまく言葉にできない。

かくいう僕はむかーしむかし、BUMP OF CHICKEN(激しいオルタナティブロックじゃねえじゃん!)が好きだったけど、彼らはどんどん変わっていってしまった。 昔のバンプのファンはバンプのライブで手拍子なんてしたら藤くんに怒られると思って絶対にできなかった。ライブで手拍子が発生すると藤くんが演奏を止めて「ピアノの発表会じゃねえんだよ」とか大人気なくキレちゃうのがファンの間ではとても有名だった。そしてロック好きのファン的には、予定調和で手拍子したりライブ中に歌を歌ってるやつのことがムカつくので、黙って拳を上げるのが正しいんだ、これが正義なんだ。これを分かってくれるのは僕の大好きな藤君しかいないんだ!何ていう自分勝手な思い込みをしながらバンプにどんどんはまって言った。

今の BUMP OF CHICKEN は、ステージの上でメンバーがみんなで手拍子を煽ったりウェーブを促したりする。人は変わっていくものだということはおじさんなのでよく知っているけれども、何だかロックじゃないなあなんてバカバカしい事を思ってガッツリはまれなくなってしまった。

結局、ロックミュージックにめちゃくちゃハマる(ことができる)のはすごい卑屈な理由からだと思う。 何もできない無力な自分、それに似た(と、自分が思い込んでいる)人が世間や世界に対して思いを込めて吠えている姿。それに自己投影をしているだけに過ぎないんじゃないだろうか。 だから、おとなになってしまって自分のわがままを投影する先がなくなると文句を言う。なんだか嫌なおじさんになってしまった。

いじわるおじさんのわがままに付き合ってくれるバンドなんかいるもんかい。 自分で自分の道を生きなアカンね。ロックンロール。

www.youtube.com

調査の日

前回、いろいろ実装前に技術調査してみて発見があったので、
今日も技術調査。でもでも、オンラインゲーム関連は情報が少ない。
正確に言うと、情報は溢れているけど使える情報が少ない。

 

企業でやってるひとはノウハウを既に持ってる。
バリバリのゲーム企業でやってるひとは、サーバー側でゴリゴリロジックがあるようなもっと大規模なものを作ってて、素人のアプリには参考にならない。
そして、趣味でやってるひとは写経をただ載せているだけでPC上で(しかもLAN内で)動かして満足してしまっている…

というような印象をうけた。


※趣味でやってるゲーム開発者さんたちはLAN内だけで動くアプリをどうやってリリースするんだ…リリースしたのか、その後はどうなったんだ…
と、具体的な実装方法があまりみつからない。

 

引き続き調査してみてから実装します。

 

・チャットなどリアルタイム性の強いアプリの実装方法や調査
https://qiita.com/mono0926/items/bb7fdd912bc338096f57

 

・Nodejs:SocketIDが意図せず変わってしまう
http://blog.adjust-work.com/632/
http://blog.adjust-work.com/661/

 

・ホスト、クライアントの通信方式説明
http://motoyama.hateblo.jp/entry/unet-02

 

・ログを画面上に表示する
http://motoyama.hateblo.jp/entry/unet-03

 

P2P対戦について
http://3dgame.dip.jp/unity3D_22.html

 

■音楽のはなし
・類似のアーティストを探すWebサービス
http://musicroamer.com

 

久々にロック聞きながら作業した。
ロック大好きなんですが、久しく新しいバンドを発掘していないので、戒めのために…
※いつもは歌があると集中できないからアーマードコアのサントラとか聞いています。

 

www.libre-sound.com


最近のバンドってとっても演奏上手だしおしゃれだなぁと思いました。

でも、おじさんだからかぴんとこんなぁ


ハードよりのオルタナティブ・ロックが好きなんですが、なんかおすすめないですかねえ

www.youtube.com

ほそぼそとゲーム開発。P2P、Socekt通信、よくわからん

凄く詰まって、詰まって煮詰まってちょっと抜け出せそうなので一服。

僕はモバイル用のゲームをいつかリリースすべく、ノロノロと休日プログラミングをしています。 普段はSierみたいなことをやってるので毎日Excelを開いたり閉じたりしているだけでゲームプログラミングとは無縁です。

今は「オンラインゲームのしくみ Unityで覚えるネットワークプログラミング」という本を使って写経しながら勉強してるんですが、ソケット通信でP2Pでチャットアプリを実装する所に来てピンとこなくなりました。
というのも、内容は実践的でわかりやすいんですが、肝心のチャットがPC上で実行しLocalhost内での通信になっているのでモバイル端末上で動くところがみられず、ゲーム開発初心者のよくわからなかったからです。

ソケット通信のサンプルアプリをいろいろなサイトで見てみたんですが、結構みんなLocalhost内での通信の話しかしていないので困りました。nodejsでSocket.ioを使うチャットアプリはいろいろ見たんですが、結局サーバー↔ブラウザ上の話なのでAndroidiPhone上でどうやってグローバルアドレスを取って、ポートを開けて待ち受けるのか、僕にはよくわかりませんでした。

「オンラインゲームの仕組み」とか、主語のでかいものをググると粒度の細かいものから荒いものまで色々な情報が出てきすぎて混乱しました。・・・絞って検索せねば・・・

そこで、まずはオンラインゲームの仕組みを絵に書いたりしてよく考えてみました。
P2Pで直接端末同士が通信すると、ハッキングされたり不正操作される。
・対戦中のプレイヤーの行動が取得できない(オンライン対戦でよく使われる技とかがわからない)

冷静に考えてみると、僕はPSPで実装できたとしても危ないし、不正防止のためにリレーサーバーが必要になるのではないかと思いました。 仮説が立てられたので、近しいことを書いているブログだけ見ていきました。

どうやら、やはりリレーサーバーが間にはいって対戦をさせるのが一般的なようです。

・UnityにおけるP2Pの実装
https://qiita.com/haminiku/items/ef80b6e8a4b4270efcd4

マルチプレイのサンプル
https://forum.unity.com/threads/unet-sample-projects.331978/?_ga=2.138374960.1808294958.1536805688-1235319137.153231507

・Socket.io 特定の誰かに送る
https://blog.mitsuto.com/nodejs-socketio-server-client

・Socket.io 特定の誰かに送る2
http://thr3a.hatenablog.com/entry/20141123/1416723018

・VisualStudioでデバッグ
https://docs.microsoft.com/ja-jp/visualstudio/ide/develop-code-in-visual-studio-without-projects-or-solutions?view=vs-2017

・おしえてGoo ※濃い事が書いてあってよく理解できないんだけど、なんとなくゲームの裏側で何をやっているのかわかった気がする
https://oshiete.goo.ne.jp/qa/8444808.html

今はNode.jsで対戦相手2名同士のデータを送り合うためのリレーサーバーを実装中です。 うまくいくといいなあ。

プレイヤーA ↔ サーバー ↔ プレイヤーB (お互いの行動をJsonで送り合い、クライアント側で処理)

しかし、リレーするサーバーを作ったとしていくつのコネクションまで貼れるのか、 コネクションが足りなくなったときに、マッチングサーバーを一つの世界で行いつつ並列して動けるようにサーバーを増やしていくのはどうやってやるのか。色々疑問はつきません。徐々に調べながら覚えていこうと思います。

【昨日の日記続き】Netlify!

静的サイトのホスティングサービス「Netlify」これすごい。

昨日、いろいろやった結果、たかだか静的サイトのデプロイすらちゃんとできず、無料のやりかたがわからず、 自分はWebの才能ないんだなーと思い、さくらのインターネットにでも金払おうかと思ってネット調べたらみつけた。

無料なのに、最近流行りのパイプライン的なのを持ってて、 Biubucketと連携するとGitpushのタイミングでプログラム(静的コンテンツ)をデプロイしてくれる。 URLも自分で決められえう(.netlify.comがURLの後ろについちゃうけど別にいいよね)

みんなちゃんとブログに書いてくれてありがとう。インターネットはいい人ばっか。

・Netlifyについて https://qiita.com/Keitaro/items/44cc974140a5b99fb6cc

・URL変更の方法 General -> Setting -> Site details -> Change site name http://magcho.hatenablog.jp/entry/2017/10/15/023440

Atomのキーバインディング(自分用メモ) http://pasolavo.com/web/atom-keybinding-for-windows.html