第2回 技術的ログ Twitterから
前回の記事はこちら。
blog.kazumalab.com
Twitterでの技術エントリー(?)をまとめただけになります。
技術本の大賞
ITエンジニアが投票した「ITエンジニア本大賞2017」ベスト10が発表。機械学習理論入門/SQLアンチパターン/達人プログラマー/ルビィのぼうけん、などランクイン - Publickey https://t.co/Oep2385661
— E. Nakai (@enakai00) 2017年1月18日
学生が作ったUE4の作品
おお遂に完成したか!僕が教えてるバンタン大阪1年の学生でUE4を使ったゲームです。彼らはプログラムは勿論、自分たちでモデルも作り、モーションも作り、エフェクトも作るとんでもないやつらです。今後も期待してる!#UE4 https://t.co/RH4NBkgS8k
— alwei (@aizen76) 2017年1月17日
【刹那を味わう"回避アクション"】
— KELu/しょーご@GFF参加 (@kerunaito) 2017年1月17日
《The Artificer》が完成しました!こちらはPVです!#UE4 pic.twitter.com/nIRCsyFSLL
めっちゃレベル高い。
ゲームの気持ちいい部分を抜き出しててすごくやりたい。
ねこが可愛い...
■アプリ開発:1月中リリース目標
— KTK_kumamoto (@KTK_kumamoto) 2017年1月15日
タイトル:ねこバスケ
ゴール回数のセーブ機能、UIとの連動を実装
明日は、LvUPエフェクトとLVアップのセーブ機能、UIとの連動を実装する。 pic.twitter.com/4CxoE8pYFi
たまには癒やしも必要ですよん。
RapidAPIを使えばすべて同一のコーディングで利用できるらしい。
有名WebサービスのAPIをすべて同じ書き方でプログラミング可能な「RapidAPI」は、検索・テストもブラウザ上で実行可能! https://t.co/kMesbKzDuv @appgigaさんから
— ochotech (@ochotech_jp) 2017年1月12日
Oculus TouchでもSteamVR Pluginが使えるらしい @Unity
唐突なSteamVR Pluginサンプル追加でUnityを使って誰でもVive・Oculus Touchで弓を撃てるようになった https://t.co/GhJGfAbdHq
— 野生の男 (@yasei_no_otoko) 2017年1月12日
The Labのやつができるみたい。
Steam強い。
写真から木を作成SpeedTree
自分で撮った素材からSpeedTreeでシダ作った
— はのば (@hannover_bloss) 2017年1月11日
これくらいは数分で終わっちゃうからほんとにスピード感ある
LODも風で揺らすのもボタン一発
そんでUE4に持ってくとまぁ綺麗なんだ・・・ #Speedtree pic.twitter.com/ZqVW3yBs6h
UE4でも動くのすごくいい。
コードの書く際に見直すべきサイト
RT コードを書く際の指針として見返すサイトまとめhttps://t.co/MAYkWJfQMG
— Shinji Kono (@shinji_kono) 2017年1月8日
Gitからコーディングスタイル、ガイドラインまで、幅広い。
UnityのResourcesからLoadする際のキャストの件
かずまです。
UnityでResourcesからLoadするときになにもキャストしない場合Object型で返ってきます。
ただそれではGameObjectとして使えないのでキャストする必要があります。
今回はas演算子もキャストとして扱っています。
どの方法が一番はやく処理ができるのか、気になったので今回はそれを計測してメモしておきたいと思います。
キャスト方法
現在僕が知っている限りResourcesからのGameObjectへの型の変換方法は3つです。
asを使う
GameObject obj = Resources.Load ("Prefabs/Box/Wood") as GameObject;
予想ではasは早いと聞いたのでこれが早いかと!
(GameObject) 対象物
GameObject obj = (GameObject) Resources.Load ("Prefabs/Box/Wood");
これだとInvalidCastExceptionが投げられる場合があるので2つめの引数として型を指定します。
(GameObject)対象物 + typeof(GameObject)
GameObject obj = (GameObject) Resources.Load ("Prefabs/Box/Wood", typeof(GameObject));
二段階で念入りではありますが、これ実は2回も型変換しているので遅いのでは?と思っています。
Genericで指定
GameObject obj = Resources.Load<GameObject> ("Prefabs/Box/Wood");
Genericはコードを書く文にはキャストし忘れ、ということは減るはずなのでいいのですが、はたしてas演算子とどう変わるかといったところですね。
速度計測方法
今回は上記コードを1万回Loadし、そのたびに速度(時間)を計測します。
それを100回試行し、平均を取ります。
計測に使うのは
C#のStopwatchです。
Stopwatch クラス (System.Diagnostics)
プログラムのサンプルはこちら。
// asでの型変換の計測 for(int count = 0; count < times; count++) { Stopwatch st = new Stopwatch (); st.Start (); for (int i = 0; i < 10000; i++) { GameObject obj = Resources.Load ("Prefabs/Box/Wood") as GameObject; } st.Stop (); total_as += st.Elapsed.TotalMilliseconds; }
計測結果
以下の結果になりました。
表に早い順番に並べるとこのような感じ。
方法 | 実行時間(100回平均) |
---|---|
as演算子 | 9.47781ms |
(GameObject)対象物 + typeof | 9.74216ms |
(GameObject)対象物 | 9.99564ms |
Generic | 10.02538ms |
予想ではas演算子が早いということでしたが、ほんとに早かったです。
as演算子を使う場合は少し制約があるのでそこも考えないと行けないです。
予想より早い(GameObject)対象物 + typeof(GameObject)
今回は早い結果となりましたが、何回か再生をポチポチした時にtypeofがない方が早いという結果になることも。
一概には早かったとはいえないけど、そこまで遅くないので使うのは良さそうですね。
Genericでは他に比べると遅いのかな、という印象でした。
高速に使うならas演算子、確実にキャストするなら(GameObject)対象物 + typeof(GameObject)を使うのが良さそうですね。
もし、もっとこうしたほうが良い、ホントはこうだと思うことがあればどんどんコメントでください。
絶賛C#マスター中ですのでご指摘、議論は嬉しいです。
よろしくお願いします。
初の学会発表に臨んだ件。
かずまです。
1/6 ~ 1/8まで静岡県伊東市にある、
ラフォーレ伊東にてプログラミングシンポジウムに参加、発表してきました。
これが人生初の学会というものです。
毎年この時期恒例だそうです。
発表のもろもろ
専門はデータベースを主としています。
今回の発表もデータベースについての内容でした。
結果としては
図が絶対パスになっていて表示されなかった
内容の良さがあまり伝わってなかった
質問の受け答えが微妙
でした。
発表の際に原稿を一応書いて練習してたはずですが、テンパったあまり真っ白に。
あちゃーです。
反省点
プロジェクターの端子を事前に確認しておく
これは発表前に「HDMIの端子がなくDVIしかない!」となってしまいました。
つまり、新しいMacを画面出力するのに変換ケーブルを持っていたのですがHDMIしか出力できず、あっけなく断念。
先輩のPCを使うことになり、Pathが違うので画像が表示されないという問題に。
相対パスにするべきだ...と反省、卒論は気をつけよう。
用語の意図をきちんと伝える
今回問題になったのはインピーダンスミスマッチ。
インピーダンスミスマッチに関してはここあたりの論文を参考にするのが良いかと。
ci.nii.ac.jp
次回こそはいい発表したいところですが今年3月で学生が終わるので
リベンジは社会人になってからですね。
ところで、こんなツイートが。
研究会とか学会とかの発表,ガチガチに緊張してまともにしゃべれないのが本当に悔しいし悲しい.ボスに発表へたくそみたいな人って印象を持たれたまま卒業しちゃうから,本当に卒研発表は失敗したくないなあーーーー
— かぴばら (@marin72_com) 2017年1月7日
いやー確かにこの通りめっちゃ緊張して、ガチガチでした!悔しい!
Lepton圧縮技術について
あけましておめでとうございます。
本年もよろしくお願いします。
正月ですが、気になったことがあったのでメモしておきます。
それがこちら。
2016/07/20にOSSになったということで少し前のお話ですが、
leptonという圧縮技術で、JPEGが平均で22パーセント圧縮できるそうです。
実際に使って見る
この記事同様、適当な場所でLeptonをクローンしてきて、/usr/local/binへシンボリックリンクを貼ってあげます。
$ cd ~/.local/ $ git clone https://github.com/dropbox/lepton.git $ cd lepton
ここからはREADMEに従ってmakeして行きます。
cmakeを使うのでいれてない場合はbrewでサクッといれておきます。
$ brew install cmake
次に./lepton以下にbuild用のフォルダを作成し、cmakeを実行します。
そのあとmakeします。
$ mkdir -p build $ cd build $ cmake .. $ make -j8
makeする際に -j8とあるのは並列化を行うための引数です。
-j [jobs], --jobs[=jobs]
Specifies the number of jobs (commands) to run simultaneously. If
there is more than one -j option, the last one is effective. If
the -j option is given without an argument, make will not limit
the number of jobs that can run simultaneously.
manで詳細を見て見ます。
引数に同時実行したい個数を指定すると並列実行してくれるそうです。
makeが終わるとこのような感じになってます。
[100%] Linking CXX executable lepton-avx
[100%] Built target lepton
[100%] Built target lepton-avx
シンボリックリンク
さてmakeが終わりました。
buildフォルダのleptonをusr/local/binへリンクを貼ります。
$ sudo ln -si ~/.local/lepton/build/lepton /usr/local/bin
これでどこでもleptonが使えるようになります。
$ lepton test.JPG com.lep
上記のように使います。
comは適当な名前を自分でつけます。
全天球写真で試す
Theta Sで撮った写真は4Mありました。
これをLeptonでどれぐらい変わるのか試します。
使う写真はこちら
sinariovr.com
[11:12:16] kazuma:images $ du test.JPG 7736[Kバイト] test.JPG [11:20:36] kazuma:images $ du com.lep 5768[Kバイト] com.lep
だいたい2Mぐらい圧縮されている計算になりますね。
JPGに戻す場合は1つ目の引数をlep、2つ目をJPGにします。
圧縮時間も仕様も難しくないのでいいですね。
第1回 技術的ログ Twitterから
[Unity] セキュリティ
かなりわかり易い。
— かずま (@kazumalab) 2016年12月22日
セキュリティエンジニアからみたUnityのこと https://t.co/JnBOGgwDQn
[Unity] Processing
Processingアドカレ、@niishi_8 さんの記事です。Processingを使って、テキストコードとビジュアルコードが連動するライブプログラミング環境を作成中とのことで、面白いですね https://t.co/cYfC8Dy6Zi
— n_ryota (@n_ryota) 2016年12月18日
[Unity] Video Player
Unity 5.6 BetaのVideo Player。
— Koji Okabe (@kojiokb) 2016年12月13日
透過使えるんだな。 pic.twitter.com/sXDn2JosYL
[Ruby on Rails]なんでView からControllerのインスタンス変数にアクセスできるの?
Advent Calendar 6日目の記事を書いた #okinawarb > https://t.co/BnzuwCqD10: 何故 Rails では View から Controller のインスタンス変数にアクセスできるのか https://t.co/A6hY0HNBXQ
— あっとん (@_atton) 2016年12月6日
[Unity] Virtual Desktop
uDesktopDuplication試してみてる。凹みさんのコードかっこいいなあ https://t.co/97If63B0GC
— こりん@VR (@k0rin) 2016年11月15日
[Unity] インスタンスした物をAddComponent
事前に生成したインスタンスをaddcomponentする場合これが最良なのかなぁ。https://t.co/8Uov0XQklS
— かずま (@kazumalab) 2016年12月19日
[ツール] Slackでアクションがあった時のTwitterへの通知
Twitterは見ていることが多い忙しい人物にSlackを確認してもらう方法を試してみた by @Somelu01 on @Qiita https://t.co/JzZPriDQsg
— Somelu (@Somelu01) 2016年12月22日