PHPでcsvを読み込むときに先頭1文字だけ、文字化けする

2012/03/29

どういう条件かわかりませんが、PHP5で、Centosのかんきょうで、FGetCsvを使って、SJISのcsvを読み込むと行の頭の1文字だけ文字化けするようだ。

どうやら最初の1バイトがムシられるらしい。

そういう場合は、

setlocale(LC_ALL, 'ja_JP');
をFGetCsvの前のどっかに入れといてやると、直る場合もある。
まぁ自分の場合はばっちり直りました。
広告

javascriptのArrayオブジェクトのindexOfを使う時

2012/03/28

IE8以下は、配列にindeOfが未実装なのでエラーが出ます。

ちなみに、IE9だとちゃんと実装済みです。

使いたいときは、手動で追加します。

if(!Array.indexOf){
  Array.prototype.indexOf = function(target){
    for(var i = 0; i < this.length; i++){
      if(this[i] === target){
        return i;
      }
    }
    return -1;
   }
}

									

perlのテキストファイルの読み込み

2012/03/19

逐次処理する場合はまた違うっぽいが、一括読み込みなら、$inがファイルハンドラとすると、下記が早い

my $code = do { local $/; <$in>}

よくありそうな記述だと

my $code;
while(my $line = <$in>)
$code .= $line;
}

これの動作速度を比較する場合は、Benchmark ライブラリのcmptheseを使うのは間違い。


perlで実行時間を比較

2012/03/19

標準ライブラリのBenchmark を使うのが手っ取り早いみたい

use Benchmark qw(cmpthese);
cmpthese( 実行回数, {
    'ラベル1' => \&関数名1 ,
    'ラベル2' => \&関数名2
});

関数自体はブラックボックスだが、具体例でいけば

use Benchmark qw(cmpthese);
cmpthese( 100, {
    'read_data' => \&read_data1 ,
    'read_data2' => \&read_data2
});

を実行すると、下記のような実行結果が表示される

Rate read_data read_data2
read_data 17.5/s — -88%
read_data2 143/s 714% —

1点、注意点がある。
プロセスのCPU使用時間を計測しているので、プロセス間通信やI/O待ちを含むベンチマークについては、cmptheseは正しい結果が出ないかもしれない。


perlで配列のシャッフルする方法

2012/03/19

配列のシャッフル。shuffleとshuffle2と2例。

2の方が、10倍処理が早いけど、ランダムさがあやしい。shuffleの方は、同様に確からしい結果になります。

sub shuffle{
my @new = ();
foreach (0..$#topics) {
my $rand = int(rand(@new + 1));
push(@new, $new[$rand]);
$new[$rand] = $topics[$_];

}
return @new;
}

 

 

sub shuffle2 {
my @list =@_;

for my $i ( 0..$#list ) {
my $rand=int(rand(@list));
my $tmp=$list[$i];
$list[$i]=$list[$rand];
$list[$rand]=$tmp;
}
@list
}


jQueryでのonload処理

2012/03/18

jQueryで、onload的処理をさせる場合は、通常は、

$(function(){
    // ここに処理内容
});
または、
$(document).ready(function(){
    // ここに処理内容
});
と書くことが多いです。
これは、DOM構築後に動作を行うので、実際には、onloadより早いタイミングで処理されます。 
完全にonload と同じタイミングで、処理を実行させるには、
jQuery.event.add(window, "load", function(){
    // ここに処理内容
});
とかけば、OK。onloadは、画像等も完全にロード終わってから実行です。

apacheのモジュールの確認方法

2012/03/15

まずは、apacheのパスを知る必要がある。

$ ps aux

で、起動中のプロセスをみると、httpdが立ち上がってるので、そのパスをコピる。

$ /○×/△□/httpd -V

と打つと、コンパイル時のオプションがでるので、rootとconfig fileを探す

HTTPD_ROOT=”○×/httpd”
SERVER_CONFIG_FILE=”○×httpd.conf”

見つけたら、コンフィグファイルを開いて、モジュールのロードを確認します。