• 追加された行はこの色です。
  • 削除された行はこの色です。
* チラ裏 [#o5b8ddb3]

** C# .net core に移行するか検討 18-03-17 [#n43eb28c]

engineplan にて、せっかくだし勉強も込みで移行を検討。

https://docs.microsoft.com/ja-jp/dotnet/core/porting/libraries#net-framework-technologies-unavailable-on-net-core

AppDomain が使えないらしい。代わりの機能はあるらしいが検索するもまだまだ情報が少ない状況。
移行は見送ります。

** C# async/await のコンパイル結果 18-01-17 [#ge228ca8]

CIL レベルではどういう実装になるのかなぁと調べていたところ、ほぼ答えとなる情報がこちらに!
クラスを自動生成してたんですね。納得!

http://blog.xin9le.net/entry/2012/08/06/123916
** C++ マクロをインクルードパスの一部に使用する 17-10-05 [#of04f396]

できたー!

#code(c,){{
#define HEADER_DIR foo
#define AE_INCLUDE_PATH(x) <x>
#include AE_INCLUDE_PATH(HEADER_DIR/hoge.hpp)
}}


** Windows C++ 不正なメモリアクセス時にコールバック処理をする方法 17-10-04 [#a3008a34]

SetUnhandledExceptionFilter を使うと、NULLアクセス時の例外発生時など死ぬ直前に特定の処理を実行できるらしいです。

http://d.hatena.ne.jp/s-kita/20130502/1367497803

** Xcode プロパティリストファイルの解析 17-09-26 [#c6323299]

pbxproj は[[プロパティリスト(リンク先:wikipedia)>https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E3%83%AA%E3%82%B9%E3%83%88]]。
これをC#で読み書きするライブラリがあるみたいです。ありがたや!

https://github.com/claunia/plist-cil

** Xcode pbxproj の仕様 17-09-26 [#t9ee7a83]

自動生成するために仕様を知りたくて調査。
公式のドキュメントは見つからず、以下のサイトを参考にします。ありがたや!

http://www.monobjc.net/xcode-project-file-format.html
https://qiita.com/yokomotod/items/02e395e99bb891d27f67

** Xcode pbxproj の中にあるハッシュ値(UUID) 17-09-25 [#xbe29c84]

96bit の文字列。手動でいじる場合ランダムでいいのかなぁとネットの海をみていたらランダムでよさそう。

https://stackoverflow.com/questions/22648347/project-pbxproj-hashing-for-files-what-hash-is-used-and-how

** Xcode ビルドしたアプリのターゲットOSの指定方法 17-09-24 [#x810d5cf]

よく勘違いしがちで自分も忘れがち。
OSX SDK 10.11 でビルドしたアプリが 10.11 じゃないと動かない、というわけではなくビルドの設定で指定した OS 以上のバージョンで動きます。

http://blog.imple.co.jp/archives/103
** PowerShell 空白を含む実行ファイルを引数有りで実行する方法 17-09-22 [#p7043699]

自力で分からず、検索するもなかなか見つからず。やっとようやく見つけました。
#code(){{
Invoke-Expression "& `"$scriptPath`" $argumentList"
}}
[[Powershell: how to invoke a second script with arguments from a script>https://stackoverflow.com/questions/12850487/powershell-how-to-invoke-a-second-script-with-arguments-from-a-script]]

** C# コマンドライン引数を解析するライブラリ 17-09-17 [#c07d93c4]

こんなものがあるらしいです。

https://wiki.dobon.net/index.php?.NET%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%A6%B5%E6%2F108

(実際使ったら少し使い勝手が悪く、結局導入は見送り。)

** C# MEF と AppDomain でDLLをシャドウコピーする 17-09-13 [#w303e91c]

分かりやすいサンプル。ありがたや!

https://coderwall.com/p/fusuww/remove-mef-plugin-at-runtime

** C# で DLL を Assembly やら AppDomain を使わず簡単に読み込む 17-09-13 [#l49546e3]

MEF というものがあるらしいです。やってみたらめちゃんこ簡単でした。
そしてホットリロードにも対応しているっぽい?DLL のファイルロックを回避できるかどうかが気になります。
https://tocsworld.wordpress.com/2014/02/16/mef%E3%81%AB%E3%82%88%E3%82%8Bc%E3%82%A2%E3%83%89%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90/

ImportMany を使わない場合はこんな感じ。
#code(csharp){{
var plugins = container.GetExportedValues<IPlugin>().ToArray();
}}
** C# の DLL をファイルロックせずに読み込む 17-09-12 [#xce87f64]

シャドウコピーという機能を使えばいけるみたい。いちいちコピーしなくてもいいんですね!
http://d.hatena.ne.jp/akiramei/20071111/1194786373

** 高速なハッシュ関数 17-08-20 [#d1b3ed3c]

まとめページ。ありがたや!
http://www.yosbits.com/wordpress/?p=1442

** [スライド] スクールガールストライカーズの内製クライアントエンジン 17-08-20 [#q93a0ff3] 

キャッシュにのりやすくすると消費電力が減る、あまり考えてなかったなぁ。参考になりました!
http://www.jp.square-enix.com/info/images/image_technical_seminar2014_06/pdf/SQEX_DevCon_sugimoto.pdf
** シフト演算の"31" 17-07-12 [#zacfb9a0]
シフト演算を使うC#からはき出されたILコード。
突如出てくる31に最初はてなマークだったんですが、これは32以上シフトさせないようにしてるんですね。
std::max(val, 2の累乗-1) は and でできるってことなんですね。はー!知らなかった!
#code(csharp){{
// 元コード(C#)
        public static uint ShiftRight(uint aA0, int aA1)
        {
            return aA0 >> aA1;
        }
}}
#code(il){{
// IL
.method public hidebysig static uint32  ShiftRight(uint32 aA0,
                                                   int32 aA1) cil managed
{
  // コード サイズ       7 (0x7)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  ldarg.1
  IL_0002:  ldc.i4.s   31
  IL_0004:  and
  IL_0005:  shr.un
  IL_0006:  ret
} // end of method BinaryOpExpression::ShiftRight

}}
** CILをC#から読み込む 17-07-06 [#g510ea55]
CILバイトコードを解析してC#で扱いやすい形にする方法。とても丁寧なサンプル!
http://badamczewski.blogspot.jp/2011/02/il-reading.html

** CILでGeneric 17-07-06 [#ad681afd]

びっくりマークの意味は分かった。ILのGeneric表現もっと知りたいー!
https://stackoverflow.com/questions/9811456/generics-with-il

** CIL命令一覧その2 17-07-06 [#yaab6030]

自動翻訳だけど日本語!ありがたい!
https://msdn.microsoft.com/ja-jp/library/system.reflection.emit.opcodes(v=vs.110).aspx

** CIL命令一覧 17-07-04 [#c2de9d0c]

wikipediaさん。pdfより軽いのでありがたい!
https://en.wikipedia.org/wiki/List_of_CIL_instructions

** ノイズ関数 17-07-04 [#sd982ada]

シェーダー上で時々使うノイズ関数。シンプル&便利ー!
https://www.shadertoy.com/view/4lf3DH

以下、コードの転載。
#code(c){{
//note: normalized rand, [0;1[
float nhash21( vec2 n )
{
  return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453);
}

vec2 nhash22( vec2 n )
{
  return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* vec2(43758.5453,35458.5734));
}
vec2 shash22( vec2 p )
{
    return nhash22(p)*2.0-1.0;
}

//note: [-1;1]
//note: honestly stolen from iq: https://www.shadertoy.com/view/Xsl3Dl
vec3 nhash33( vec3 p )
{
	p = vec3( dot(p,vec3(127.1,311.7, 74.7)),
			  dot(p,vec3(269.5,183.3,246.1)),
			  dot(p,vec3(113.5,271.9,124.6)));
	return fract(sin(p)*43758.5453123);
}
vec3 shash33( vec3 p )
{
    return -1.0+2.0*nhash33(p);
}

vec2 smootherstep( vec2 t )
{
    return t*t*t*(t*(t*6.0-15.0)+10.0);
}

//note: value noise
float nhash11( float n )
{
    return fract(sin(n)*43758.5453);
}
float nvnoise21( vec2 x )
{
    vec2 p = floor(x);
    vec2 f = fract(x);
    f = smoothstep(0.0,1.0,f);
    float n = p.x + p.y*57.0;
    float res = mix( mix( nhash11(n+  0.0), nhash11(n+  1.0),f.x),
                     mix( nhash11(n+ 57.0), nhash11(n+ 58.0),f.x), f.y);
    return res;
}
float nfbm21( vec2 p )
{
    mat2 m = mat2( 0.80,  0.60, -0.60,  0.80 );
    float f = 0.0;
    f += 0.50000*nvnoise21( p ); p = m*p*2.02;
    f += 0.25000*nvnoise21( p ); p = m*p*2.03;
    f += 0.12500*nvnoise21( p ); p = m*p*2.01;
    f += 0.06250*nvnoise21( p ); p = m*p*2.04;
    f += 0.03125*nvnoise21( p );
    return f / (0.5+0.25+0.125+0.06250+0.03125);
}


//note: gradient noise
float sgnoise21( vec2 p )
{
	vec2 i = floor( p );
    vec2 f = fract( p );
    vec2 u = smoothstep( 0.0, 1.0, f );
    //vec2 u = smootherstep( f );

    //return dot( f-vec2(1.0,0.0), vec2(0.5,0.5) );
    //return dot( shash22( i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) );
    
   return mix( mix( dot( shash22( i + vec2(0.0,0.0) ), f - vec2(0.0,0.0) ),
                    dot( shash22( i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) ), u.x),
               mix( dot( shash22( i + vec2(0.0,1.0) ), f - vec2(0.0,1.0) ), 
                    dot( shash22( i + vec2(1.0,1.0) ), f - vec2(1.0,1.0) ), u.x), u.y);
}
float ngnoise21( vec2 p )
{
    return 0.5 + 0.5 * sgnoise21( p );
}

//note: [-1;1]
float sgnoise31( in vec3 p )
{
   vec3 i = floor( p );
   vec3 f = fract( p );

	vec3 u = f*f*(3.0-2.0*f);

   return mix( mix( mix( dot( shash33( i + vec3(0.0,0.0,0.0) ), f - vec3(0.0,0.0,0.0) ), 
                         dot( shash33( i + vec3(1.0,0.0,0.0) ), f - vec3(1.0,0.0,0.0) ), u.x),
                    mix( dot( shash33( i + vec3(0.0,1.0,0.0) ), f - vec3(0.0,1.0,0.0) ), 
                         dot( shash33( i + vec3(1.0,1.0,0.0) ), f - vec3(1.0,1.0,0.0) ), u.x), u.y),
               mix( mix( dot( shash33( i + vec3(0.0,0.0,1.0) ), f - vec3(0.0,0.0,1.0) ), 
                         dot( shash33( i + vec3(1.0,0.0,1.0) ), f - vec3(1.0,0.0,1.0) ), u.x),
                    mix( dot( shash33( i + vec3(0.0,1.0,1.0) ), f - vec3(0.0,1.0,1.0) ), 
                         dot( shash33( i + vec3(1.0,1.0,1.0) ), f - vec3(1.0,1.0,1.0) ), u.x), u.y), u.z );
}
float ngnoise31( in vec3 p )
{
	return 0.5 + 0.5 * sgnoise31( p );
}

float nfbm31( vec3 q )
{
    const mat3 m = mat3( 0.00,  0.80,  0.60,
                    -0.80,  0.36, -0.48,
                    -0.60, -0.48,  0.64 );

	float f = 0.0;
	f  = 0.5000*ngnoise31( q ); q = m*q*2.01;
	f += 0.2500*ngnoise31( q ); q = m*q*2.02;
	f += 0.1250*ngnoise31( q ); q = m*q*2.03;
	f += 0.0625*ngnoise31( q ); q = m*q*2.01;
	
	return f;
}

}}
** xenko さんを触ってみた 17-07-03 [#g31b024f]

シリコンスタジオさん制作のオープンソースなゲームエンジン。たぶん Made in Japan!わくわく!
https://xenko.com/

UIの参考にと思って触ってみました。

プロパティグリッドの戻るボタンはシンプルな解決法で良いなぁと思いました。
Unity さんだとアセットをドラッグしようとして誤ってシングルクリックしてプロパティウィンドウの内容が変わる事故が頻発する私。
Unity さんでも戻る方法ってあるんですかね?


    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS