チラ裏 Edit

node.js テーブル編集モジュール 18-07-21 Edit


高機能なモジュール。触ってみようと思います。

https://www.npmjs.com/package/editable-grid

Confluence UserMacro から Manager 系オブジェクトにアクセスする方法 18-06-21 Edit


例えば LikeManager ならこんな感じ。
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
#spanend
#spanadd
#set($containerManagerClass = $content.class.forName('com.atlassian.spring.container.ContainerManager'))
#spanend
#spanadd
#set($getInstanceMethod = $containerManagerClass.getDeclaredMethod('getInstance',null))
#spanend
#spanadd
#set($containerManager = $getInstanceMethod.invoke(null,null))
#spanend
#spanadd
#set($containerContext = $containerManager.containerContext)
#spanend
#spanadd
#set($likeManager= $containerContext.getComponent('likeManager'))
#spanend
#spanadd

参考元:

https://www.ricksoft.jp/qa/questions/19529917/answers/19529930

C#Script #load はスクリプトファイルの相対パスで指定 18-05-26 Edit

csi dir/Hoge.csx

とし,その Hoge.csx の中で
#load "./Other.csx"

と書いた場合, dir/Other.csx がロードされるようです。あくまでそのスクリプトファイルからの相対パスで検索されるみたいです。あまり情報なかったので書き残しておきます。

PowerShell class から別ファイルの class にアクセスできない 18-05-26 Edit


かなり厳しい仕様…。

http://www.vwnet.jp/windows/PowerShell/2017082402/ClassInClass.htm

New-Object して使用する分にはOKなのですが,別ファイルの class を継承元に指定したり,その class の static method を呼ぶこともできないようです。ひー。

C# mono(mac環境) でシャドーコピー実行に失敗する 18-05-25 Edit


こんなエラーが出ました。

シャドーコピー実行する exe が参照する dll がどうやらコピーされていない模様。
#spanend
#spanadd
$ mono ./../AdelCommand.exe
#spanend
#spanadd

#spanend
#spanadd
Unhandled Exception:
#spanend
#spanadd
System.IO.FileNotFoundException: Could not load file or assembly 'AdelDevKit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
#spanend
#spanadd
File name: 'AdelDevKit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
#spanend
#spanadd

#spanend
#spanadd

#spanend
#spanadd
Server stack trace: 
#spanend
  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[])
#spanadd

#spanend
#spanadd
Exception rethrown at [0]: 
#spanend
  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 
#spanadd

ApplicationBase を指定するようにしたら動くようになりました。
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 
 
 
 
 
 
 
-
|
|
!
 
 
#spanend
            // 本体を実行
            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);
#spanadd

bash 標準出力かエラー出力か確認する 18-05-23 Edit


それぞれ出力をオフにして実行してどちらかでているか確認するようにしてます。
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
#spanend
# 標準出力をオフにして実行
#spanadd
$ (command) 1>/dev/null
#spanend
#spanadd
 
#spanend
# 標準エラーをオフにして実行
#spanadd
$ (command) 2>/dev/null
#spanend
#spanadd

参考:

https://qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc

PowerShell クラス内で Invoke-Expression したときに標準出力とエラー出力をターミナルに出力させる方法 18-05-23 Edit

Invoke-Expression "& `"$exePath`" $aArg" | Out-Host

色々試してこれにたどりつきました。

pwsh 6.0 macos 環境で確認したところ,この書き方をすると一定時間か改行を検知されたら出力されるようでした。

標準出力は標準出力に,エラー出力はエラー出力に出力されます。

実行時間が長いコマンドだったとしてもターミナルが止まって見えないので安心!

PowerShell クラスのコンストラクタやメソッドの中で Write-Output してもターミナルに出力されない 18-05-23 Edit


そういう仕様っぽいです。これは分かりにくい…。

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 Edit


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 Edit


CIL レベルではどういう実装になるのかなぁと調べていたところ、ほぼ答えとなる情報がこちらに!

クラスを自動生成してたんですね。納得!

http://blog.xin9le.net/entry/2012/08/06/123916

C++ マクロをインクルードパスの一部に使用する 17-10-05 Edit


できたー!
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 
 
 
 
 
 
 
 
 
 
 
#spanend
#spanadd
#define HEADER_DIR foo
#spanend
#spanadd
#define AE_INCLUDE_PATH(x) <x>
#spanend
#spanadd
#include AE_INCLUDE_PATH(HEADER_DIR/hoge.hpp)
#spanend
#spanadd

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


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

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

Xcode プロパティリストファイルの解析 17-09-26 Edit


pbxproj はプロパティリスト(リンク先:wikipedia)

これをC#で読み書きするライブラリがあるみたいです。ありがたや!

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

Xcode pbxproj の仕様 17-09-26 Edit


自動生成するために仕様を知りたくて調査。

公式のドキュメントは見つからず、以下のサイトを参考にします。ありがたや!

http://www.monobjc.net/xcode-project-file-format.html

https://qiita.com/yokomotod/items/02e395e99bb891d27f67

Xcode pbxproj の中にあるハッシュ値(UUID) 17-09-25 Edit


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

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

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


よく勘違いしがちで自分も忘れがち。

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

http://blog.imple.co.jp/archives/103

PowerShell 空白を含む実行ファイルを引数有りで実行する方法 17-09-22 Edit


自力で分からず、検索するもなかなか見つからず。やっとようやく見つけました。
  0
  1
  2
  3
#spanend
#spanadd
Invoke-Expression "& `"$scriptPath`" $argumentList"
#spanend
#spanadd

Powershell: how to invoke a second script with arguments from a script

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


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

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 Edit


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

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

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


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 を使わない場合はこんな感じ。
すべてを展開すべてを収束
  1
  2
  3
  4
  5
 
 
 
 
 
#spanend
#spanadd
var plugins = container.GetExportedValues<IPlugin>().ToArray();
#spanend
#spanadd

C# の DLL をファイルロックせずに読み込む 17-09-12 Edit


シャドウコピーという機能を使えばいけるみたい。いちいちコピーしなくてもいいんですね!

http://d.hatena.ne.jp/akiramei/20071111/1194786373

高速なハッシュ関数 17-08-20 Edit


まとめページ。ありがたや!

http://www.yosbits.com/wordpress/?p=1442

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


キャッシュにのりやすくすると消費電力が減る、あまり考えてなかったなぁ。参考になりました!

http://www.jp.square-enix.com/info/images/image_technical_seminar2014_06/pdf/SQEX_DevCon_sugimoto.pdf

シフト演算の"31" 17-07-12 Edit


シフト演算を使うC#からはき出されたILコード。

突如出てくる31に最初はてなマークだったんですが、これは32以上シフトさせないようにしてるんですね。

std::max(val, 2の累乗-1) は and でできるってことなんですね。はー!知らなかった!
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 
 
 
 
 
-
|
!
 
#spanend
#spanadd
// 元コード(C#)
#spanend
        public static uint ShiftRight(uint aA0, int aA1)
        {
            return aA0 >> aA1;
        }
#spanadd
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
#spanend
#spanadd
// IL
#spanend
#spanadd
.method public hidebysig static uint32  ShiftRight(uint32 aA0,
#spanend
                                                   int32 aA1) cil managed
#spanadd
{
#spanend
  // コード サイズ       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
#spanadd
} // end of method BinaryOpExpression::ShiftRight
#spanend
#spanadd
 
#spanend
#spanadd

CILをC#から読み込む 17-07-06 Edit


CILバイトコードを解析してC#で扱いやすい形にする方法。とても丁寧なサンプル!

http://badamczewski.blogspot.jp/2011/02/il-reading.html

CILでGeneric 17-07-06 Edit


びっくりマークの意味は分かった。ILのGeneric表現もっと知りたいー!

https://stackoverflow.com/questions/9811456/generics-with-il

CIL命令一覧その2 17-07-06 Edit


自動翻訳だけど日本語!ありがたい!

https://msdn.microsoft.com/ja-jp/library/system.reflection.emit.opcodes(v=vs.110).aspx

CIL命令一覧 17-07-04 Edit


wikipediaさん。pdfより軽いのでありがたい!

https://en.wikipedia.org/wiki/List_of_CIL_instructions

ノイズ関数 17-07-04 Edit


シェーダー上で時々使うノイズ関数。シンプル&便利ー!

https://www.shadertoy.com/view/4lf3DH

以下、コードの転載。
すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
!
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
 
 
-
|
|
|
|
|
!
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
 
 
#spanend
#spanadd
//note: normalized rand, [0;1[
#spanend
#spanadd
float nhash21( vec2 n )
#spanend
#spanadd
{
#spanend
  return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453);
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
vec2 nhash22( vec2 n )
#spanend
#spanadd
{
#spanend
  return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* vec2(43758.5453,35458.5734));
#spanadd
}
#spanend
#spanadd
vec2 shash22( vec2 p )
#spanend
#spanadd
{
#spanend
    return nhash22(p)*2.0-1.0;
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
//note: [-1;1]
#spanend
#spanadd
//note: honestly stolen from iq: https://www.shadertoy.com/view/Xsl3Dl
#spanend
#spanadd
vec3 nhash33( vec3 p )
#spanend
#spanadd
{
#spanend
#spanadd
    p = vec3( dot(p,vec3(127.1,311.7, 74.7)),
#spanend
#spanadd
              dot(p,vec3(269.5,183.3,246.1)),
#spanend
#spanadd
              dot(p,vec3(113.5,271.9,124.6)));
#spanend
#spanadd
    return fract(sin(p)*43758.5453123);
#spanend
#spanadd
}
#spanend
#spanadd
vec3 shash33( vec3 p )
#spanend
#spanadd
{
#spanend
    return -1.0+2.0*nhash33(p);
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
vec2 smootherstep( vec2 t )
#spanend
#spanadd
{
#spanend
    return t*t*t*(t*(t*6.0-15.0)+10.0);
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
//note: value noise
#spanend
#spanadd
float nhash11( float n )
#spanend
#spanadd
{
#spanend
    return fract(sin(n)*43758.5453);
#spanadd
}
#spanend
#spanadd
float nvnoise21( vec2 x )
#spanend
#spanadd
{
#spanend
    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;
#spanadd
}
#spanend
#spanadd
float nfbm21( vec2 p )
#spanend
#spanadd
{
#spanend
    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);
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
 
#spanend
#spanadd
//note: gradient noise
#spanend
#spanadd
float sgnoise21( vec2 p )
#spanend
#spanadd
{
#spanend
#spanadd
    vec2 i = floor( p );
#spanend
    vec2 f = fract( p );
    vec2 u = smoothstep( 0.0, 1.0, f );
    //vec2 u = smootherstep( f );
#spanadd
 
#spanend
    //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);
#spanadd
}
#spanend
#spanadd
float ngnoise21( vec2 p )
#spanend
#spanadd
{
#spanend
    return 0.5 + 0.5 * sgnoise21( p );
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
//note: [-1;1]
#spanend
#spanadd
float sgnoise31( in vec3 p )
#spanend
#spanadd
{
#spanend
   vec3 i = floor( p );
   vec3 f = fract( p );
#spanadd
 
#spanend
#spanadd
    vec3 u = f*f*(3.0-2.0*f);
#spanend
#spanadd
 
#spanend
   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 );
#spanadd
}
#spanend
#spanadd
float ngnoise31( in vec3 p )
#spanend
#spanadd
{
#spanend
#spanadd
    return 0.5 + 0.5 * sgnoise31( p );
#spanend
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd
float nfbm31( vec3 q )
#spanend
#spanadd
{
#spanend
    const mat3 m = mat3( 0.00,  0.80,  0.60,
                    -0.80,  0.36, -0.48,
                    -0.60, -0.48,  0.64 );
#spanadd
 
#spanend
#spanadd
    float f = 0.0;
#spanend
#spanadd
    f  = 0.5000*ngnoise31( q ); q = m*q*2.01;
#spanend
#spanadd
    f += 0.2500*ngnoise31( q ); q = m*q*2.02;
#spanend
#spanadd
    f += 0.1250*ngnoise31( q ); q = m*q*2.03;
#spanend
#spanadd
    f += 0.0625*ngnoise31( q ); q = m*q*2.01;
#spanend
#spanadd
    
#spanend
#spanadd
    return f;
#spanend
#spanadd
}
#spanend
#spanadd
 
#spanend
#spanadd

xenko さんを触ってみた 17-07-03 Edit


シリコンスタジオさん制作のオープンソースなゲームエンジン。

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

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

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


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