.NET Conf 2019 meetup in AICHIでLTしてきました

.NET Conf 2019 meetup in AICHI 10/5に行われた “.NET Conf 2019” のローカルイベントです。 今回はそれに参加してLTさせて頂いてきました。 発表内容 今回は.NET Core 3.0のイベントのため、Core 3に絡んだ内容の方がいいよねっと思い、.NET Core 3.0で追加されたWPFについてお話させていただきました。 今回発表した内容の資料は以下になります。 Net core3.0とWPF from AyumaKaminosono www.slideshare.net あと当日の発表内容を動画にしていただけました。 @kekyo2さんありがとうございます。 www.youtube.com 自分の発表の反省をしようと思い、公開していただいた動画を見てみたのですが、自分のしゃべっている動画を見るのってメチャクチャ恥ずかしいですね!! あまりの恥ずかしさにまだ全部見れていません。 また後日気持ちを整えて見たいと思います。 テーマ選定について 自分はそこまで.NETの深いところの話ができるほど知識がないので、言語仕様などを語るよりは実践した体験を展開するような方式にしようと思ってました。 それでどうしようかと考えていて、今年のゴールデンウィーク当たりに.NET Core 3のプレビューを使ってWPFを試していたのを思い出し、ちょうどいい発表材料になるな!と思いテーマはWPFにしました。 {{< x user=“ayuma_x” id=“1125397415937208321” >}} そこでこのテーマで話す内容をまずは箇条書きで書き出してみて、資料作成の土台を作っていきました。 そうするとある1つの重大なことに気づきました。 面白くない。。。 今回.NET Core 3.0でWPFが使えるようになった事をツラツラと書いてみたのですが、中身が薄く面白くありません。 ここで「テーマまずかったかな??」、「同時に試してたC#8の話の方が書くことあるかな??」と悩んだのですが、やはり普段から使っているWPFの方がなんかあった時も答えられるしここは崩さず行こうと決めました。 そこでWPF固有の話ではないですが、関連度が高そうなRuntimeをアプリケーションに含められる話や単一実行ファイルを作成できる話を追加して、あとその様子を動画にして実際にどんな感じで動くのかを見てもらえる構成にしました。 全部書いてみて、発表の練習を数回してみたところ、だいたい13~14分くらいになったのでこれで行くことにしました。 まだ少し内容薄いような気もしたけど、今更追加できんし腹をくくろうと。 (イベント終了してから数日経った今ならもう少しCore3 + WPFでネタができました。まあそんなもんです) 発表当日 自分の順番は終盤で、それまでは他の登壇される方の話を興味深く聞かせていただきました。 @kekyo2さんの非同期の話は、ちょうどこの日のちょっと前に昔書いたコードのTask.Wait撲滅活動をしていたこともあり個人的にHitしました。 非同期イテレーター凄く関心があるので、是非近いうちに書いてみよーっと。 私は発表は昨年のLTに続き2回目だったのですが、今日は前回よりは気持ち的に落ち着いていて「今日はテンパらないかなー」と楽観視してました。 ところが自分の番はちょうど休憩後で少し待ち時間があり、PCの準備をして時間まで待っていると段々緊張してきてお腹痛くなってきましたwww でも今日は「早口にならずゆっくりしゃべる」「聞いてくれる人の顔を見て話す」というのを目標にしていたのでそれだけは守れるように、なるべく落ち着いてちょっとずつしゃべりました。 ...

2019-10-10 · 1 分 · 80 文字 · ayumax

アンリアルフェス 2019に参加しました

UNREAL FEST WEST 2019 Epic Games Japanが主催するオフィシャルの大型勉強会です。 Unreal Engine 4 が一般開放された2014年から毎年、関東と関西にて開催しています。 ※公式サイトより 参加前 2018年も申し込みはしていたのですが、当日別の予定が入ってしまい行けなくて、今回が初めての参加です。 大型の勉強会という事なので、どのくらいの人が来るのかと思ってましたが、最終の参加予定人数は600人オーバーというのを見て本当に大型だなと感じました。 参加するに当たってノートPCを持っていくかどうか悩んだのですが重いし電源がないと1日持たないしなと思ったので持っていくのはやめました。 ただ会場は京都コンピュータ学園というところの、ホールみたいな所だったのですが、席にテーブルと電源があったので持っていっても使えそうでした。 結果的に講演中は結局TwitterとメモくらいしかしてなかったのでノートPCはなくてもOKでした。 会場到着から開始まで 事前に公式サイトでフェスの後に懇親会があるといことが書いてあり、面白そうだからぜひ参加したいなと思ってました。 参加するには当日チケットを買う必要があるとのこと。 チケットは枚数制限があるらしいとの情報を見たため、早めに着いた方が良いかなと思って30分前の9時半くらいに到着しました。(10時から受付開始) 行ってみると大体20から30番目くらいで既に行列ができてました。 その後もドンドン列は後方に伸びていて人気の高さを伺えます。 10時になり受付が開始され入場。 受付でスマホのPeatixのアプリの画面を見せて受付完了。 来場者プレゼントのトートバッグを貰いました。 このバッグ無料プレゼントなのに、しっかりとした作りでカッコいいです。 受付完了後は隣の物販コーナーに行きました。 アフターパーティの参加チケットであるピンクバンドが見えたので間に合った模様。 5000円を支払い無事ゲット。 #ue4fest pic.twitter.com/s7sEBeWAq3— ayuma (@ayuma_x) 2019年4月20日 ただし売り場に「限定25」の文字が見えて、エッ、600人もくるのに25しかないの?本当にレアやん。もう少し遅くきてたら確実に売り切れてた。。 あと個人的にステッカーとかTシャツ買いたいなと思ってたのですが今回はアフターパーティのチケットのみしか販売してなくちょっと残念。 UE4のステッカーをノートPCに貼りたかった。。 受付周辺には企業の展示ともあったのですが、その中にすごーく気になる物を見つけてしまい、受付完了後にさっそく見に行きました。 これに関しては別途記事を書きます。 その後他の展示も少し周った後に、会場に行き開始を待ちました。 1) Unreal Engine Roadmap 1発目はEpicのAxelさんの講演。 UE4の最新機能について興味深いお話がたくさん聞けました。 最初フランス語から始まりちょっとびっくり。その後は流暢な日本語で説明していただき分かりやすかった。 以下は気になった内容たち。 Epic Online Service Epic Online Services | Services オンラインサービスの機能を提供してくれるsdkを公開してくれる。 UE4 ももちろんですがUnity向けにも公開してくれるのには驚きました! Cのapiもあるので、やろうとすれば色んなプラットフォームで対応できるらしい。 「無料です。裏はありません」という言葉に感動しました。 Quixelのムービー www.youtube.com めちゃくちゃ綺麗な UE4 を使ったムービーを見せてもらった。 本当に実写にしか見えなくリアルタイムレンダリングということに驚きを隠せませんでした。 ...

2019-04-22 · 1 分 · 178 文字 · ayumax

Center CLR Try!開発 #2に参加した

Center CLR Try!開発 #2に参加 先日行われた「Center CLR Try!開発 #2」に参加してきました。 場所は#1とは違う場所で金山駅の目の前でアクセスしやすかったです。 ただし目指すビルが工事中で入り口が見つけづらく数分迷いました。。。(方向音痴なので最初違うビルに行ってしまった) 当日の参加者は3名(MatsuiさんとMatsuokaさんと私)とすごい方お二人とご一緒で少し、いやかなり緊張しましたが、人数が少ないおかげで色々とお話もでき有意義な1日でした。 自分のやったこと この日はもともと1日Unityで開発中のアプリ制作をやる予定でしたので、それをやりました。 自分の会社の部署の忘年会で使うための景品抽選アプリを作っています。 今までゲーム開発ツールはUnreal Engineをずっと使っていますが、Unityは未経験だったためUnityで今月始めからTryしてみました。 (* Unreal Engineはものすごーく使ってますが、ゲームは作ったことはありません) ちなみに自分で設定した納期は11月末なので、期間は1ヶ月です。 もうちょっと詳細 UnityのUI機能(UnrealでいうところのUMG)を使って、忘年会参加者登録画面を作っていて、そこにスマホのカメラで撮った写真を登録する機能を作っていました。 カメラ撮影はOS依存のAPI使わなきゃいけなかったらイヤだなあと思っていたのですが、Unityの機能だけであっさりと実現可能! (事前にアプリにカメラ使用のための許可確認をやってます) // 実行デバイスに付属のカメラ(最初に複数ある場合は1個め)を取得 var cameraDevice = WebCamTexture.devices[0]; // カメラ映像を投影するテクスチャを作成 cameraTexture = new WebCamTexture(cameraDevice .name, 1280, 720); // 撮影スタート cameraTexture.Play(); // カメラ映像をUIに表示(taregetImageはUI上のRawImageの参照) taregetImage.texture = cameraTexture; 上のコードを実行すると、UI上のRawImageにカメラ映像がリアルタイムで表示されます。 多分カメラ映像を毎フレームRawImageのテクスチャに転送してくれているのだと思います。 今回は静止画を保存したいので、UIのボタンが押されたタイミングで以下のコードを実行して画像データを保存しました。 // その時点でのカメラ画像のピクセルバッファを取得 Color32[] color32 = cameraTexture.GetPixels32(); // カメラ画像を表示するためのテクスチャを作成 var cameraImage = new Texture2D(cameraTexture.width, cameraTexture.height); // テクスチャにピクセルバッファをコピー cameraImage .SetPixels32(color32); cameraImage .Apply(); // カメラの撮影を止める cameraTexture.Stop(); これでcameraImageにカメラで撮影された画像がテクスチャとして入っているので、これをUIのRawImageに差し込むことで目的の機能が実現できました。 ...

2018-11-12 · 1 分 · 79 文字 · ayumax

Qt勉強会の成果 Qt3Dを使ってみた

Qt3D StudioとQt3D 以前Qt3D Studioを使って3Dの表現を試したことはあったのですが、今日はQtCreatorでQt3Dを使ってみました。 Qt3D Studioはタイムラインを使って3Dモデルを動かすシーケンサーのような印象を持ちましたが、Qt3Dはもっとプラグラマがゴリゴリ実装する感じ。 サッと3Dを使った表現を作るにはQt3D Studioは向いてそうですが、1個のアプリとして色々やるにはQMLでQt3Dを使ったほうが良いのかなと今は思ってます。 実装したプロジェクトはこちら できたもの 自分ではモデリングできないので、フリー素材を利用させていただきました。 雰囲気をだすために建物を置いて、道路を車が直進していくというものです。 ただ真っ直ぐ走るだけでは面白くないので、マウスクリックすると車がジャンプするアニメーションを追加してみました。 {{< x user=“ayuma_x” id=“1033362618197524480” >}} 実装の中身 今回はC++は使わず全てQMLで書いてます。 車や建物の3Dモデル やっている事はSceneLoaderのsourceにファイルを指定するだけで、あとはQtが勝手に読み込んでくれてます。便利! 車については、移動させたいのでTransformのtranslationの値を外から触れるようにプロパティにしてます。 rotationも指定してるのは、3Dモデルを普通に読みこむと横を向いちゃったので90度回転させてます。BlenderなどのモデリングツールでちゃんとQtと座標系をあわせてあげれば、これは必要ないとは思います。 余談ですが、普段Unreal Engine触っているのでX, Y, Zの座標系がいつもと違い戸惑いました。YとZがUnrealとQtでは逆でした。 車の3Dモデルを読み込む部分 Entity { components: [ SceneLoader { source : "/model3d/track.obj" }, Transform { id: myCarTransform property real locationX: 0.0 property real locationY: 0.0 rotation: fromAxisAndAngle(Qt.vector3d(0, 1, 0), 90) translation : Qt.vector3d(locationX, locationY, 0) } ] } 道路 地面と道路と白線は板ポリに色付きのマテリアルを貼って表現してます。 ...

2018-08-26 · 1 分 · 180 文字 · ayumax

CenterCLR勉強会でLTしてきた

勉強会参加 8/11にCenterCLRの勉強会に参加してきました LTに申し込み 今回は最初は通常枠で申し込んでいたのだけど、ある日ふと確認したらLT枠が空いていたので申し込み。 この時点ではまだ何を話そうか決めてなかったけど、とりあえず題材決めと当日の資料作りを開始した。(ここの時点で2週間前くらい) 勉強会当日 スポンサーセッションがあった後、登壇者のセッションが開始されました。 植田さんのHoloLensを使った授業の紹介は、凄く楽しみにしていて、すごいなあと思ったし一番感じたのが、自分が中高生の頃にこういったモノがあったらよかったなーと思いました。 松井さんのお話も、今自分が始めてみようと思っていた者に関してだったので興味深く聞いてました。 自分の番 勉強会の間に1回休憩を挟んで、休憩後がLTの時間でした。 ちょっと直前になって緊張が高まり過ぎてしまい、休憩時間にHoloLens見せていただこうと思っていたけど無理でした。。。 はじめてのLTということで、事前に練習したとおりやって5分という時間も守ることができました。 ただ緊張しすぎてて、喋りはじめのころカミカミでやばいって思ったのと、デモやったときに、手が震えてマウスがうまく使えなくてちょっと焦りました。 あとはずっとディスプレイみたまま喋ってしまったので、もう少し余裕が自分にできたら、聞いていただける方を見て喋れるようにしないかんなと思いました。 今日喋らせてもらったスライドはこちら Markdownでパワポ資料を作る from AyumaKaminosono www.slideshare.net 懇親会 勉強会終了後の懇親会に参加させてもらって、いろんな話をお聞きできました。 自分には理解できないハイレベルな話もありましたが、楽しい1日になりました。

2018-08-13 · 1 分 · 23 文字 · ayumax

Qt勉強会の成果。TCP/IPのサンプル作った

Qt名古屋勉強会に参加 1週間過ぎてしまいましたが、先週名古屋のQt勉強会に参加してきました。 前回はQMLを中心に触っていたので、今回はC++中心に触る事にしました。 色々あとあと使えそうなTCP/IPで通信する機能を実装することに。 作ったソフト できたソフトがこんな感じ。 {{< x user=“ayuma_x” id=“1023149422077562880” >}} やっていることはシンプルで、Client側のViewをマウスでドラッグするとマウスの座標をServer側に飛ばしてServer側のViewに表示してます。 上記のプロジェクト一式はこちら 書いたコード抜粋 Webにもいくつかサンプルコードが載ってたので、あまり迷わず書けました。 ソケットの送信側はこんな感じ void TCPClientModel::SendMessage(QString message) { if (tcpClient == nullptr) return; QByteArray messageBytes = message.toUtf8(); int messageSize = messageBytes.length(); QByteArray sizeBytes; QDataStream stream(&amp;sizeBytes, QIODevice::WriteOnly); stream &lt;&lt; messageSize; tcpClient->write(sizeBytes, sizeBytes.length()); tcpClient->write(messageBytes, messageBytes.length()); tcpClient->flush(); } TCP/IPのデータ部分はシンプルにサイズ領域とメッセージ領域の2つに分けて、サイズ部分に格納されたバイト数分メッセージが続く感じに。 このサイズをbyte arrayに書き込む部分が地味に悩んで、結果QDataStreamっていうのを見つけてこれを使う事にした。 あとは通信時の遅延を減らすために、1回送信する度にflushしてる。ちょっと探した感じNoDelayオプションの設定方法が見つからなかった。。 今度ちゃんと探そう。 次に受信部分はこんな感じ void TCPClientModel::OnReceived() { while (tcpClient->bytesAvailable() > 0) { tempBuffer.append(tcpClient->readAll()); while ((bodySize == 0 &amp;&amp; tempBuffer.size() >= 4) || (bodySize > 0 &amp;&amp; tempBuffer.size() >= bodySize)) { if (bodySize == 0 &amp;&amp; tempBuffer.size() >= 4) { QByteArray numArray = tempBuffer.mid(0, 4); QDataStream stream(&amp;numArray, QIODevice::ReadOnly); stream >> bodySize; tempBuffer.remove(0, 4); } if (bodySize > 0 &amp;&amp; tempBuffer.size() >= bodySize) { QByteArray bodyArray = tempBuffer.mid(0, bodySize); tempBuffer.remove(0, bodySize); bodySize = 0; emit dataReceived(QString::fromUtf8(bodyArray)); } } } } TCP/IPは受信したときにデータが足りてなかったり、逆にデータと次のデータがくっついてるときとかあるので、送信するときよりは面倒。 ...

2018-07-28 · 1 分 · 134 文字 · ayumax

Qt勉強会いってきた

今日はQt名古屋の勉強会に参加してきた。 前回初参加で今日は2回目。 前回は[初参加]+[Qt初見(言い訳)]+[設定失敗してエラー多発]でほぼアワアワして終わったので、今日はちゃんとやりたい事を決めて参加した。 1日の成果がこれ。 今日のQt勉強会で作ったソフト。 C++使った開発環境でこんなにスムーズに作れるとは感動した。Qt Quickすげー。 pic.twitter.com/UpbV1nQKXx — ayuma (@ayuma_x) June 16, 2018 ちなみに動画に映っている画像はImageNetから拝借。 QtでWPFみたいにMVVMでやってみたくて、 リスト形式のモデルデータをViewにバインドする仕組みをやってみた。 C++側で任意のディレクトリ内の画像ファイルをかき集めて、QQmlListPropertyのリスト形式プロパティを作って、Viewにバインド。 Viewは画面左をListView, 右側をGridViewにして、それぞれのmodelに上記の同じQQmlListPropertyを差し込んでみました。 ListViewとGridViewの選択状態の同期も敢えてC++のプロパティを経由して実施。 見た目は置いといて、機能的には自分としてはいい感じに仕上がった。 試行錯誤を繰り返しているので、ソースは汚すぎて公開できないけど、そのうち全部書き直してGitHubにあげよう。 今日は楽しかった。

2018-06-16 · 1 分 · 24 文字 · ayumax