[VBA] 動的配列の初期化判定

VBAで動的配列を使うときに自分で変数を宣言した場合は初期化のタイミングがわかるけど、共通に使う関数の場合は引数の配列が初期化済みかどうか判定したい場合がある。

Not Not

こんなときに使われるイディオムとして Not Not で比較するというものがある。
    Dim arr() As String
    ReDim arr(0)
    If Not Not arr Then
        Debug.Print "arr is ReDim."
    End If

[Salesforce]Force.com Security Source Scanner の誤検知

ソースコードのセキュリティをチェックすることができる、Force.com Security Source Scanner というサイトを利用してみました。

今回スキャンしたのは、以下のようにApexでレコードのdeleteをしているものを含むソースです。

【レコードをdeleteするApexコード】
  1. List<ScanTest__c> scanTestList = [SELECT Id, Name FROM ScanTest__c];
  2. delete scanTestList;

すると、delete文に対して以下のようなエラーが出ました。

[JavaScript] 配列のようなものって?

arguments変数を本物の配列に変換する方法ではArray.applyを使ってarguments変数を配列に変換した。
でも、Function.applyメソッドの第2引数は基本的には配列ってことになってる。
配列を作るために配列を渡すってのは変だね。applyメソッドって、配列じゃなくても受け取れるようだ。

Function.prototype.apply() JavaScript MDN

うーん、どうやらプロパティとしてlengthを持っていて、0以上、length未満の数字を名称としたプロパティを持ったオブジェクトであればいいみたい。
var arr = Array.apply(null, { length : 3,
                              0 : 'orange', 
                              1 : 'banana', 
                              2 : 'grape' 
                            });
console.log(arr);
// orange,banana,grape

[JavaScript] arguments変数を本物の配列に変換する方法

JavaScriptで任意の関数の戻り値の真偽を逆転するような関数を生成するには以下のようになる。
function not(pred) {
  return function(args) {
    return !pred.apply(null, arguments);
  }
}

var p = not(function () { return true; });
console.log(p());
// false

p = not(function (x) { return x; });
console.log(p(false));
// true

arguments変数はすべての関数で特別に用意されるローカル変数で、lengthプロパティを持っているし、一見配列のように振る舞う。
例えば、渡されたすべての引数をconsoleに出力したければ、こうなる。

[unix,perl,正規表現] perlでsed,grep,awkライクに

sedでダブルクォートで括られてる("ABC")ような文字列の置換をしようとしていたんだけど、うまくいかなかった。

$ sed -e 's/"[^"]+"/"xxx"/g'
"foo"
"foo"
"f+"
"xxx"

これだと、ダブルクォートの中が以外の任意の1文字と"+"の場合しかマッチない。
ダブルクォートの中には必ず1文字以上ある事を意図して"+"記号を使っていたんだけど、どうもsedではこれを特殊記号として扱ってくれないらしい。
なので、以下だとうまくいく。

$ sed -e 's/"[^"][^"]*"/"xxx"/g'
""
""
"foo"
"xxx"

どうしてこんなことになるかというと。。。

[Java]System propertiesとOutputStreamからの文字列取得

Javaを使ったプログラムででエラーが起こった時に使っていたJavaのバージョンやOSの環境が知りたいことはよくある。
その度に確認するのも大変だよね。
なので、プログラムの起動時にSystem propertiesの値をログなんかに出力しておくといいかもしれない。

単純に標準出力に出力するのであれば、以下のようにすればいい。

PropertiesSample.java
class PropertiesSample {
    public static void main(String ...  args) {
        System.getProperties().list(System.out);
    }
}