2007年12月21日金曜日

Perl-DBIのfinishのタイミング

my $sth=$dbh->prepare('SELECT * FROM hoge WHERE id=?');
foreach my $id( @id_list ){
$sth->bind_param(1, $id, 3);
$sth->execute();
my $data=$sth->fetchrow_hashref('NAME_lc');
A.$sth->finish();
}

B.$sth->finish();

上記の様な場合、finish()の位置ってAとBどっちがいいんだろうか。
同じSQLを使い回してるのであれば、Bでいいような気もするが・・・。ググっても巧く出てこない。
調べるか   λ....

追記。
どうやらBの位置で大丈夫そう。
prepareとfinishが同ランクみたい。

2007年12月20日木曜日

青天の霹靂。ってか晴天の天変地異

■IE8がAcid2に合格。2008年前半にIE8β
( ゚д゚)

(つд⊂)ゴシゴシ

(;゚д゚)

(つд⊂)ゴシゴシ
  _, ._
(;゚ Д゚) …?!

(つд⊂)ゴシゴシゴシゴシゴシゴシゴシゴシ

(  д )

(; Д ) !!

2007年12月19日水曜日

IE7 X-day

IE7のWindowsUpdate経由での配布日が決定。
中途半端にバレンタイン前日の2008年2月13日との事。
■配布日は2008年2月13日:Internet Watch

なおIE7の適用を拒否する方法もあるので、それは下記の通り
■IE7の自動更新をブロック:@IT

CSSバグの宝庫IE6から離れられるのはうれしいけど、IE7もバグだらけだしなぁ('A`)

2007年12月10日月曜日

The Eraser

■Procrastination Logにあった、削除出来ないパーティションを含むHDDを、強制的に初期化する方法。
例えばThinkPadのHDDとか、MacのHDDとかを強制フォーマットする時に使う。

コマンドプロンプト立ち上げ
diskpart と打ち込むと、しばしロード。
「 DISKPART> 」とプロンプトが出てくる
「 list disk 」と入力するとHDD一覧が出てくる。
「 select disk 2 」で削除対象のHDDを選択。
「 clean 」と入力すると対象のHDDデータがあぼーん。
「 exit 」で終了

2007年11月30日金曜日

【CSS】神の一手、悪魔の3px

CSSをいぢくり回すwebデザイナ、webアプリ開発者にとって最も嫌われている、嫌うべき、むしろSupportを切るべきブラウザであるIE6。IE6が抱えるCSS周りのバグの真骨頂を見た。

バグの内容としては
floatを指定したObjectより、その隣にくるObjectの高さが低い時、後者のwidthに「3px」幅が追加される

という物。まぁ百聞は一見にしかず。見て貰う方が早い。ネットで探して見つけた、このバグに関するWebページ。
■IE6ボックスバグ
をIE6で開いてみてください。この問題で苦しんでいた方々には朗報だと思います。

向かって右側のdivタグ側に
zoom:1

というcssを付け加えれば直るみたいっすね。

2007年11月29日木曜日

cssによる透明度の設定

filter: alpha(opacity=60);
-moz-opacity:0.60;
opacity:0.60;

上から、IE、Firefox、Opera/safari用。
100で不透明。

2007年11月19日月曜日

AMDに救いの手か買収の手か。

http://japan.cnet.com/news/biz/story/0,2000056020,20361296,00.htm
http://www.nikkeibp.co.jp/news/flash/552206.html

アブダビの政府系企業が同国の先端技術産業界への足がかりとしてAMDに興味をしめした模様。
AMDの新規発行株4900万株(8.1%)を5億5000万ドル~7億ドル(日本円にして605億~770億円)で取得

2007年11月14日水曜日

第六次元軸

第一次元軸・・・幅
第二次元軸・・・高さ
第三次元軸・・・奥行き
第四次元軸・・・時間
第五次元軸・・・確率(可能性)
第六次元軸・・・規則

2007年11月13日火曜日

RadeonHD3870(RV670XT)

■発売日
2007年11月19日
■価格
21,890~25,190円($199〜$229 1$110円換算)

■スペック

  • DirecrX 10.1対応(Shader Model 4.1)

  • 55nmプロセス

  • トランジスタ数6億6600万

  • ダイサイズ192mm2

  • UVD搭載

  • PCI-Express 2.0-16x

  • 統合シェーダ320SP

  • 775Mhz/DDR4-512MB(256bit)-2.4Ghz

  • コア温度37-45℃

  • TDP105w

  • 性能的にはほぼHD2900XT(R600)、GeForce8800GT(G92)と同じ。


■その他

  • DirectX 10.1はWindows Vista SP1に初搭載

  • PowerPlay technology(コア、メモリクロック数、電圧を動的に調整)

  • 4つのVGAを使ったCrossFireに対応。最大8画面。CrossFire時のオーバードライブも可能

2007年11月8日木曜日

IE6でwidthを設定しても反映されない時

その問題が起きているタグのスタイルに
overflow:hidden;

を追加してみる。

2007年10月3日水曜日

タブキーを押したら半角Spaceでタブをとるようにする

eclipseでの設定です。
ウィンドウ -> 設定->
webおよびXML -> HTMLファイル -> htmlソース->
スペースを利用したインデント

にチェック。
その下にある「インデント・サイズ」でタブキーを押した際に入力される半角Spaceの数を決める。
私は4つ。

2007年9月13日木曜日

core dumpファイルを吐かせる

■設定確認編
Segmentation faultが起きていたLinuxでcoreファイルを検索。
非効率的だが何処にあるか解らんので、Linuxのディレクトリの一番上へ移動。でそこで「今いるディレクトリ以下にあるcoreという名前をファイルを探す」コマンドを実行
-find . -name core
が、dumpと思われるファイルは引っかからず。なぜだ・・・。

ちょっとLinuxに詳しい友人にメッセ経由で聞いてみると、「core dumpが出来過ぎてHDD圧迫する事があるから吐かない様にしてる事は多いよ。設定で変更出来るはず」というお言葉が。
そこでどこでその設定をしてるか調べてみた所IT Proの記事が見つかり、下記コマンドで出来る様だ。
ulimit -a
んで実行結果の中でcore dumpに関係してそうな値が
core file size (blocks, -c) 0

となっている。ゼロじゃそりゃ吐かないべ・・・。あともう一個コマンド発見
sbin/sysctl -a
実行結果の中で関係してると思われる場所
kernel.core_pattern = core
kernel.core_setuid_ok = 0
kernel.core_uses_pid = 1


これ記事書いてて気付いたけど以下のコマンドだと直に値を見られる見たい。
sysctl kernel.core_pattern
sysctl kernel.core_setuid_ok
sysctl kernel.core_uses_pid




■設定変更編
上記の結果を受けて設定変更をする。変更する場所は
1.kernel.core_setuid_okを1にする。
2.core file sizeを2048blockにする。(2048の値は適当に選んだ)

1を実行するコマンド
sysctl -w kernel.core_setuid_ok=1
2を実行するコマンド
ulimit -c 2048

これでいいはず。あとCoreファイルがはかれる場所も確認しないと。
てかたまたまこんなblogを発見。
ノウアスフィア探検隊:core解析メモ

初期設定ファイルが/etc/sysctl.conf

2007年9月12日水曜日

Segmentation faultが一杯。

最近エラーログに多い下記のerror文章
[Mon Sep 10 23:05:46 2007] [notice] child pid 19800 exit signal Segmentation fault (11)

まぁお約束というか差し当たりというかぐぐってみる。そうするとはてなのサイトが引っかかった。意味としては


  • Segmentation違反。メモリアクセス違反。アクセスが許可されていないメモリ領域を参照すると発生。

  • エラーログに上記のMessageを残し、coreを吐いて異常終了。

  • 原因としては、Nullポインター、未初期化ポインタでのアクセス、スタックオーバーフロー等。

  • 配列の範囲外アクセスでも発生。

  • 希だがOSレベルのバグ、メモリモジュールの不具合による場合もある。


で続いてhpの公式サイト

  • プログラムは起動時にメモリ領域を定義。その領域外のメモリ領域にアクセスしようとすると発生。

  • 宣言した配列の範囲を超えて添え字付けると発生。

  • カーネルの処理能力を超える局所変数、無限再起でも発生。



ぬぅ・・・無責任だがハードウェアの故障が原因だったら楽だなぁ・・・。
調査中に■Manpage of COPEにて以下の記述を発見。
どうやらSegmentation faultがSignal11で起きた際は「coreファイル」なるdumpが生成されている模様。これを解析する事でSegmentation faultが起きた原因は調査する事は出来そう・・・だが、どうやるんだコレ。

その前にまCoreファイルを探さないと。

2007年9月3日月曜日

PerlのWARNINGをなくす

perl -w hoge.pm

Perl開発者が死ぬまでに一番たたくコマンドじゃなかろうか('A`)
これでエラーを見つけて修正して、やっとこさ動くプログラムが完成する。しかし正常動作してもこのコマンドを叩くと警告とかが出てくる。

■警告内容
・その1.Use of uninitialized value in hash element at hoge.pm line 123
・その2.Use of uninitialized value in substitution (s///) at hoge.pm line 456

エラーじゃないしプログラムもちゃんと動くので今まで無視してきたけど、ちょっと気になってきたので直してみる。

■その1の警告の解決方法
その1の場合は「変数としては存在するけど、それに値が入ってるのか入ってないのか解らない。だから値を確認するか空の値を入れておけ」という旨なので、以下の赤い部分の様なモノを追加してあげる。そうすると値がNullでも確実値が入っているか入ってないかが解るので、警告文が消える。
意外と忘れがちなのが「$key」の部分。値がNullであればわざわざ入れる必要ないのだから、if文でチェックしてnextしておく。
$HOGE={};
foreach my ($key,$value)=split(/\=/,$line,2){
next if( !$key );
$HOGE->{$key}=$value || '';
}


■その2の警告の解決方法
ぱっと見で解る人がいると思うけどこれは正規表現関係。Perlで正規表現って結構強力で頼れるんですよね・・・。
問題となるのは正規表現を何個か連発した時。
エラーの内容としては
「正規表現って値をごちゃごちゃいじるけどいじった結果って解らないよね?値が消えちゃってる可能性ない?ひょっとしたら今行った正規表現で、値が空になってね?」
と言う警告。なのでコード上は余り綺麗じゃないが下記の様に修正。値が入っている事を確認してから処理。値が入ってなければ処理する必要もないんで問題なし。
$value=~s/ABC/xxx/g if( $value );
$value=~s/EFG/yyy/g if( $value );
$value=~s/DEF/zzz/g if( $value );

これで正規表現中の警告が消える。

警告なので直す直さないは個人の自由だけど、errorログが綺麗になるんで、暇とか余裕があったからやってみた

NFSのエラー「nfs_notify_change」

サーバが不安定な時、LinuxのOSログであるMessageログに出ているNFS関係と思われるエラー。
ネットで探してもいまいち解決策が解らず。取り敢えず関係の有りそうなサイトは幾つか見つけたので、それと併せて調査。
なお問題が起きてる環境は
NFSサーバ:Windows 2003 Server
NFSクライアント:Red Hat Linux ES 3

■問題のエラー
kernel: nfs_notify_change: revalidate failed, error=-116
kernel: nfs: server 123.156.789.012 not responding, still trying
123・・・の部分はIP。

■参考URL
http://search.luky.org/linux-kernel.2003/thrd73.html

■■■調査内容■■■
取り敢えず「error=-116」から調べてみる。エラー番号だからネットで探せば直ぐ解るだろうと思ったら中々出てこない。
仕方ないので上記URLのメーリスをじっくり読む事に。



以下は現在調査中につき鵜呑み禁止、突っ込み&助言大歓迎
何となくだが読んでいるとエラー番号166というのは「ESTALE」という事を意味している?
仮にそうだとしてこの「ESTALE」で検索してみると以下のURLがヒットした。

外部URL:[9454] Re^5: NFSのエラー
>「ユーザ資源の実体が存在するマシン側」のファイルシステムが
>再編成されたことにより、NFSで内部的な混乱(内部矛盾?)が発生

外部URL:nfs(7)
>クライアントがマウントすると各ファイル/ディレクトリ 用の ファイルハンドルをクライアントに発行
>サーバ側でファイルが消去されると、 そのファイルハンドルは失効 (既知のファイルとの関係を断たれる)
>サーバは errnoに [ESTALE] をセットしてエラーを返す。

最初のURLの情報と合わせて考えると「NFSサーバ側で、被mount領域にあるファイルに変更を加えるとエラー」って事なのか?

>サーバがダウンしている、あるいはアクセス不可能な状態にあると
>「not responding: still trying」のエラー

まぁ予想通り。肝心な「アクセス不可能な状態」に言及がない。

> nointr オプションでマウント・・・サーバが回復するまで シグナル受領可能状態で待機。
>softオプションでマウント・・・ クライアントプロセスは無限に待つことはなくエラーを返す

今確認してみたらNFSのmountに「nointr」って指定してる。でもこの部分は直接は関係なさそう。
softオプションを付加した際に返されるエラーて何だろう・・・。

2007年8月29日水曜日

Apacheのhttpd.confの設定

恐らくサーバ管理に初めて触れる人が最初に悩むであろうApacheの設定ファイル、httpd.confの中にある各項目の意味。正確な意味よりも現場的な意味を重視して書いてみた。

Timeout

■KeepAlive

Sessionを維持するか否か。
mod_perl環境ではoffにするらしいが理由不明。

MaxKeepAliveRequests
KeepAlive設定が無効であればこの設定も無効

KeepAliveTimeout
KeepAlive設定が無効であればこの設定も無効

StartServers
Apache起動時に立ち上がるApache子プロセス数。MinSpareServersと同じ値にするのが一般的。
「公開と同時にユーザがどかっと来るけどその後は落ち着く」的なサイト以外MinSpareServersと違う値を設定する理由が思いつかない。

MaxClients
Apacheプロセスが支える最大接続数(最大同時接続数)。Apache管理の最大のキモ。
この値の算出方法はApache MaxClientsの算出計算式を参照。
なお一般的なWeb(何を基準に一般的かは不明)では下記の比率を以下の様にするのがいいらしい
MaxClients : MinSpareServers : MaxSpareServers
10 : 1-3 : 3-5

MinSpareServers
待機Apache子プロセスの下限設定。
大気Apache子プロセスがこの数より少なくならない様にする。
待機Apache子プロセスがこれを下回るとこの数まで増やす。
基本的にあまり高い値を設定する意味がない項目。
急激なアクセスの増加や、常に高いアクセス数が予想されるのであれば少し多めの値にしておいた方が良い。

MaxSpareServers
待機Apache子プロセスの上限設定。待機Apache子プロセスがこれを上回ると、この数まで減らす。
減らすのは多分最終アクセスが古いモノから落としていくっぽい(未確認)。
想定されるアクセス数が大して多くなく、急激なアクセス数の変化が予想されないのであればここの値は余り大きくしない。無闇に待機プロセスを作成して無駄な負荷をサーバに掛けない方が良い。
なおこの上限は基本的にApacheが動作しているPCのメモリ量により左右される。
メモリからDataが溢れる程の値にするとHDDにスワップが発生し異常に重くなり、ユーザ側に反応が殆ど返らなくなる。
そんな位になるのであれば、多少サーバが重いなとユーザに感じさせてもいいからスワップが発生しない値まで下げた方がいい。


MaxRequestsPerChild
Apache子プロセス一個辺りの処理可能リクエスト数。別の言い方をするとRequestの数で数えたApache子プロセスの寿命。
ここで設定された値になるとそのApache子プロセスが終了する。
Apache、ライブラリ、モジュール等サーバで動作しているプログラムのバグなどによって発生するメモリリークへの対応策として、この値を小さくするという手段が用いられる。
メモリリークとは簡単に言えば時間に比例して使用メモリ量が増えていく事。そのメモリリークの影響を出来るだけ抑える為にある程度仕事をしたApache子プロセスを終了し、新しいApache子プロセスを生成する。色々問題が起きてるWindowsが再起動するとあっさり治ってるのと同じ感覚かもしれない。
動作しているプログラムのメモリリークバグの量にもよるが、バグが多ければ比較的少ない値を。バグが少なければ大きな値を。安定しているサーバであればこの部分を10000とかに設定している所もあるらしいが微妙に信じられん・・・。
なお無闇に小さい値を設定すると子プロセスの再起動が頻発し、その再起動がサーバ負荷になり逆に重くなってしまうので注意。
また値としてゼロを指定出来るが、その場合はそのプロセスが延々と動き続ける事となり、万が一メモリリークが発生した場合肥大化してサーバをダウンさせる事になる。
メモリリークの現象を確認したら適切な値を設定する。出来れば自分の鯖でApach子プロセス群の状態を見て、適正な値を設定すべし。当然メモリリークの原因を突き止めて対処もしましょう。


■■■参考URL■■■
http://www.mylab.jp/diary/20031205.html
http://hori-uchi.com/archives/000209.html
http://www.networkworld.jp/server/-/11189.html
http://www.atmarkit.co.jp/flinux/rensai/apache2_03/apache03a.html

まず最初に重要なのは搭載メモリ量に見合ったClient数を設定する事。
そして次にサイトの特性とユーザのアクセス形式(ユーザからのRequestが沢山短いか、少なく長いか)によってMinSpareとMaxSpareを調整。

Apache MaxClientsの算出計算式

Apacheの設定のキモであるMaxClientsの値を計算、概算、見積もりをする方法。

MaxClientsの値 = (サーバの総RAM量 - 親Apacheプロセス消費メモリ量) / 子Apacheプロセス一個の消費メモリ量

また同時に以下の計算式を満たしていた方が良い。

子Apacheプロセス一個の消費メモリ量 x MaxClientsの値 + 親Apacheプロセス消費メモリ量 < サーバの総RAM量

実際にはApache以外のプロセスも大量に動いているので多少余裕を持っていた方がいいかも。
因みに当然メモリからあふれたらSwapを使うけどApacheはSwapを利用すると一気に反応が悪くなり使っている側からすると明らかに違いが解るので、Swapに入ったらダメと思っていた方が吉。

Service for Linux(SFU)設定のキモ

SFUにおけるサーバ・・・mountされるディスクを持っている方。
SFUにおけるクライアント・・・mountする方。

基本的にサーバとクライアント間ではユーザとグループのマッチング設定が必要。Linuxであれば構造が近いので比較的設定は簡単だが、SFUを使ったWindowsとLinuxでやる場合はマッチングが結構面倒。
そこで一番重要なのは
LinuxユーザとマッチングさせるWindowsユーザアカウントには必ずパスワードが設定されて居なければならない。
という事

2007年8月6日月曜日

基本的なLinux-ping

ping -R -i 60 -v -w 86400 XXX.XXX.XXX.XXX >>/tmp/PingTest.log
  • XXX.XXX.XXX.XXXは対象のIP
  • 60秒間隔で24時間送り続ける
  • -R 経路を記録。
  • -i pingコマンドの送信インターバル(秒指定)。
  • -v 詳細な出力。
  • -W 設定した時間が経過したらpingを終了する(秒指定)。

■関連コマンド■
コマンドの末尾に&を着けるとバックグラウンド実行。
ping XXX.XXX.XXX.XXX>>/tmp/test.log &

jobs」コマンドで実行中のプロセスを表示。この時に各プロセスのIDも表示される

・「[1]+ Running ping XXX.XXX.XXX.XXX>>/tmp/test.log &
・「fg 1」と入力するとIDが1のバックグラウンドプロセスが表にでる。
・「bg 1」と入力するとIDが1のプロセスがバックグラウンドにいく。

2007年4月4日水曜日

読書の腕前

読書の腕前 (光文社新書)
読書の腕前 (光文社新書)岡崎 武志

光文社 2007-03
売り上げランキング : 262045

おすすめ平均 star
starよくある読書論です。
star小手先のテクニック論ではなくて、感動して泣いてしまう必読書
star読書好きには参考になる

Amazonで詳しく見る
by G-Tools


「自分は結構本を読んでいるぞ!」とか「本読みてー」と想っている人向けの本。
基本的には著者が「なぜ本の虫になったか」を自分の人生を振り返って語る内容だが、独りよがりになる訳でもなく、読書好きならば「あー分かる分かるその気持ち!」と思わず言いたくなるような文章が多数ある。

印象に残ったのは「良質の読書を経験する為にはツン読が必要」といった下り。「ツン読」とは別に今はやりのツンデレとは無関係。漢字で書けば「積ん読」。
つまりどんどん本を買い込んでどんどん積んでおけ。という意味。

ただし条件があり積んでおくのは自分の机で視界はいる場所。本棚や押し入れにしまってはいけない。山積みになった本を見ていれば読みたくなるし、タイトルを覚えておけばふとしたきっかけで読むようになるよ、という意味。

自分の読書方に不安がある方。最近おもしろい本をよんでないなぁと言う方。
本を読みすぎだと怒られている方は読むといいかも。