プログラミング

Jeans & Development 電子ブロック工房 三日坊主 フロントページ

DNAフラグメントの制限酵素地図から、ゲノム上での位置と塩基配列を求める [プログラミング]

2010年8月12日

生物学の少し古い文献では、遺伝子のクローニングの後に制限酵素地図(restriction enzyme map)を論文に載せてはいるが、最終的に塩基配列(DNA sequence)まで発表していないケースがまれにある。一部でも塩基配列が載せられていれば、全ゲノム配列のどの部分に相当するかを調べるだけで、クローニングされたものがどの遺伝子でどんな塩基配列なのかが分かるのだが、制限酵素地図だけが載せられているようなケースでは、そういった調べ方はできない。

昨日、調べていた文献の中に、上記事項に相当するものが出てきた。数年前にも同じようなことがあって、あるプログラムを書いて、調べ上げたことがある。当時は、こんなことは一回こっきりだろうと思い、作ったプログラムをちゃんと保存していなかったので、一回使ったきり、無くしてしまった。今回は後でまた使えるように、ここにメモをしておく。

JScriptで、InputBoxとMsgBoxを使う。 [プログラミング]

2010年7月19日

一つ前の記事で、「VBScriptのInputBoxは便利」と書いたが、改めてJScriptにはこれ相当の機能が無いことを思い出した。MsgBox相当は、WScript.Echo()である程度の代用が効くが、InputBoxに似た機能は無い。しかし、以前書いたように、ScriptControlを使えばVBScriptの関数をJScriptから呼び出すことができる。

以前書いたコードはInputBoxに特化したもので、しかも汎用性が無かった。汎用性を持たせたのが、次のスクリプト。

var VbsFunction=function(func){
	return function(){
		var args=Array();
		args[0]=func;
		for (var i=0;i<arguments.length;i++) args[i+1]=arguments[i];
		return VbsFunction.run.apply(null,args);
	};
}
VbsFunction.run=function(){
	var script="VbsFunction.sc.run('func"+(arguments.length-1)+"'";
	for (var i=0;i<arguments.length;i++) script+=",arguments["+i+"]";
	return eval(script+");");
}
VbsFunction.sc=WScript.CreateObject("MSScriptControl.ScriptControl");
VbsFunction.sc.language="vbscript";
for (var i=0;i<10;i++) {
	var script=" function func"+i+"(p0";
	for (var j=1;j<=i;j++) script+=",p"+j;
	script+=")\r\n  func"+i+'=eval(p0+"(';
	for (var j=1;j<=i;j++) {
		if (1<j) script+=",";
		script+="p"+j;
	}
	VbsFunction.sc.addcode(script+")\")\r\n end function\r\n");
}

var InputBox=VbsFunction("InputBox");
var MsgBox=VbsFunction("MsgBox");
(10/07/20 改定)
この20行ほどのコードで定義されたVbsFunction()を使えば、VBScriptのすべての関数を、JScriptから利用することができる。利用方法は、最後の2行を参照。InputBoxとMsgBoxの2つが使えるように、記述してある。

PHPのソースを色分けするスクリプト [プログラミング]

2010年7月11日

jp_SearchJeansTagsで使った、PHPコードを色分けする部分のコードは、次の通り。他でも使えそうなので、メモをかねてここにアップしておくことにする。

MakeExeはコンパイラではありません [プログラミング]

2010年6月25日

Vectorから配布されているMakeExeについてE-mailで質問がありましたので、こちらにも載せておきます。

MakeExeは、速度を上げるためのものではありません。処理としては、

1)vbsファイルをテンポラリフォルダに展開
2)作成したvbsファイルを、wscript.exeもしくはcscript.exeで実行
3)スクリプトの処理終了後、vbsファイルを削除

といったことをしています。なので、単にvbsファイルを実行するだけよりも速度が遅くなります。いわゆる、コンパイラとは異なる動作です。

WindowsのVBScriptは、実行のたびに中間コードにコンパイルしているはずで、素のままでもかなり速いです(Oyagameに同梱のサンプルを参照)。もしこれ以上の速度を求めるのであれば、C++などを用いるべきだと思います。

async_socketクラス [プログラミング]

2010年4月27日

少し思うところあって、非同期のソケットクラスをPHPで書いてみた。

たぶん、こういった用途のライブラリは色々とあるのだろうけど、スクラッチから書くのが好きなので…。

ファイル検索VBScript [プログラミング]

2010年1月8日

あるディレクトリにあるすべてのファイルの内容を、正規表現で検索するVBScript。

VBScriptにスクリプト実行の進行度を表示させる [プログラミング]

2009年10月22日

SFC miniと関連して、e-mailで問い合わせを頂いた。『SFC miniを使って、VBScriptでプログレスバーを表示することが出来ないか』とのこと。

SFC miniではGUIプログラミングが一応可能なので、多分出来る。でも、簡単ではない。

そこで、実用性だけ考えて、もう少し簡単にこういったことが実現できないかを考えてみた。

円周率の計算 [プログラミング]

2009年6月21日

ちょっと訳有って、円周率(π、パイ、pi)を、コンピューターに計算させてみた。とりあえず、例によって、PHPで。

円周率の計算は、手作りコンピューターでやろうとしていることなので、アルゴリズムとしては最も簡単なものを利用した。最初に作成したスクリプトは、以下のとおり。

for ($max=1;$max<=8192;$max=$max*2) {
    $t=time();
    echo "$max: ".calc_pi($max)."  (".(time()-$t).")\n";
}

function calc_pi($max) {
    $total=0;
    for ($x=0;$x<$max;$x++) {
        for ($y=0;$y<$max;$y++) {
            if ($x*$x + $y*$y < $max * $max) $total++;
        }
    }
    $pi=4 * ( $total/($max*$max) );
    return $pi;
}

正方形の内部にまんべんなく点を打ったとき、その点から一つの頂点までの距離が正方形の辺の長さより短いかどうかをピタゴラスの定理を用いて判断することで、円の内部かどうかを調べ、円の面積から円周率を計算している。

実行結果は、以下のようになった。
1: 4  (0)
2: 4  (0)
4: 3.75  (0)
8: 3.5  (0)
16: 3.34375  (0)
32: 3.25390625  (0)
64: 3.19921875  (0)
128: 3.170166015625  (0)
256: 3.15673828125  (0)
512: 3.1490936279297  (0)
1024: 3.1453971862793  (1)
2048: 3.1435289382935  (2)
4096: 3.1425535678864  (10)
8192: 3.1420764327049  (40)

VBScriptで、クリップボードに文字列をコピーする [プログラミング]

2009年6月7日

Windows NTのcmd.exeでは、ファイルをcmdのウインドウにdrag&dropすることで、ファイルのフルパスを入力することができた。これは、XP以降ではできなくなったようで(もしかしたら、Vista以降かな?)、不便を感じたので、SendToからファイルパスをクリップボードにコピーするスクリプトを書いてみた。

PHP 5.3 RC1 [プログラミング]

2009年4月2日

PHP 5.3 RC1が出たらしい。主な新しい機能は、次の通りだそうだ。

php.netより
<<前の記事   後の記事>>