* チラ裏 [#o5b8ddb3] ** Confluence UserMacro から Manager 系オブジェクトにアクセスする方法 18-06-21 [#re847730] 例えば LikeManager ならこんな感じ。 #code(){{ #set($containerManagerClass = $content.class.forName('com.atlassian.spring.container.ContainerManager')) #set($getInstanceMethod = $containerManagerClass.getDeclaredMethod('getInstance',null)) #set($containerManager = $getInstanceMethod.invoke(null,null)) #set($containerContext = $containerManager.containerContext) #set($likeManager= $containerContext.getComponent('likeManager')) }} 参考元: https://www.ricksoft.jp/qa/questions/19529917/answers/19529930 ** C#Script #load はスクリプトファイルの相対パスで指定 18-05-26 [#a7af8bb4] csi dir/Hoge.csx とし,その Hoge.csx の中で #load "./Other.csx" と書いた場合, dir/Other.csx がロードされるようです。あくまでそのスクリプトファイルからの相対パスで検索されるみたいです。あまり情報なかったので書き残しておきます。 ** PowerShell class から別ファイルの class にアクセスできない 18-05-26 [#k9a1565f] かなり厳しい仕様…。 http://www.vwnet.jp/windows/PowerShell/2017082402/ClassInClass.htm New-Object して使用する分にはOKなのですが,別ファイルの class を継承元に指定したり,その class の static method を呼ぶこともできないようです。ひー。 ** C# mono(mac環境) でシャドーコピー実行に失敗する 18-05-25 [#y5cac08a] こんなエラーが出ました。 シャドーコピー実行する exe が参照する dll がどうやらコピーされていない模様。 #pre(){{ $ mono ./../AdelCommand.exe Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'AdelDevKit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. File name: 'AdelDevKit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' Server stack trace: at (wrapper managed-to-native) System.AppDomain.ExecuteAssembly(System.AppDomain,System.Reflection.Assembly,string[]) at System.AppDomain.ExecuteAssemblyInternal (System.Reflection.Assembly a, System.String[] args) [0x00029] in <bb7b695b8c6246b3ac1646577aea7650>:0 at System.AppDomain.ExecuteAssembly (System.String assemblyFile, System.String[] args) [0x00008] in <bb7b695b8c6246b3ac1646577aea7650>:0 at (wrapper remoting-invoke-with-check) System.AppDomain.ExecuteAssembly(string,string[]) at (wrapper xdomain-dispatch) System.AppDomain.ExecuteAssembly(object,byte[]&,byte[]&,string,string[]) Exception rethrown at [0]: at (wrapper xdomain-invoke) System.AppDomain.ExecuteAssembly(string,string[]) at (wrapper remoting-invoke-with-check) System.AppDomain.ExecuteAssembly(string,string[]) at AdelCommand.Program.Main (System.String[] args) [0x00071] in <e800117528bb4c58a0bba7a8c56c52d9>:0 }} ApplicationBase を指定するようにしたら動くようになりました。 #code(csharp){{ // 本体を実行 var dllDir = new FileInfo(Assembly.GetExecutingAssembly().Location).Directory.FullName + Path.DirectorySeparatorChar + @"Dll"; var setup = new AppDomainSetup() { ShadowCopyFiles = "true", ApplicationBase = dllDir, }; var appDomain = AppDomain.CreateDomain("AdelCommand_Host", AppDomain.CurrentDomain.Evidence, setup); var executablePath = dllDir + Path.DirectorySeparatorChar + @"AdelCommandMain.exe"; if (!File.Exists(executablePath)) { Console.Error.WriteLine("指定のファイルが見つかりません。'{0}'", executablePath); return 1; } return appDomain.ExecuteAssembly(executablePath, args); }} ** bash 標準出力かエラー出力か確認する 18-05-23 [#t49ca3ca] それぞれ出力をオフにして実行してどちらかでているか確認するようにしてます。 #code(bash){{ # 標準出力をオフにして実行 $ (command) 1>/dev/null # 標準エラーをオフにして実行 $ (command) 2>/dev/null }} 参考: https://qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc ** PowerShell クラス内で Invoke-Expression したときに標準出力とエラー出力をターミナルに出力させる方法 18-05-23 [#ed085346] Invoke-Expression "& `"$exePath`" $aArg" | Out-Host 色々試してこれにたどりつきました。 pwsh 6.0 macos 環境で確認したところ,この書き方をすると一定時間か改行を検知されたら出力されるようでした。 標準出力は標準出力に,エラー出力はエラー出力に出力されます。 実行時間が長いコマンドだったとしてもターミナルが止まって見えないので安心! ** PowerShell クラスのコンストラクタやメソッドの中で Write-Output してもターミナルに出力されない 18-05-23 [#s20b7412] そういう仕様っぽいです。これは分かりにくい…。 https://stackoverflow.com/questions/39413401/powershell-5-class-write-debug-or-write-verbose-output-in-constructor-or-method とりあえず標準出力するなら Write-Host を使う。デバッグ用途ならこれが手軽。 こんな記事もありました。 https://stackoverflow.com/questions/4998173/how-do-i-write-to-standard-error-in-powershell ** 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 さんでも戻る方法ってあるんですかね? |