2011年11月23日水曜日

IAサーバ直販サイトを利用した見積りのポイント

http://www.atmarkit.co.jp/fsys/kaisetsu/043server_bto/server_bto.html から抜粋

  • 用途を決めよう例えば、iDCにホスティングする会社紹介用のWebサーバという目的ならば、必然的にラックマウント型サーバから選択することになる。さらに想定されるアクセス数やコンテンツの内容から、求められるプロセッサ性能とディスク容量が決まる。例えば、1日1万アクセス程度の静的なWebページならば、経験的にCeleron-2GHzのシングルプロセッサ構成で十分対応できる。
    負荷テスト・ツールなどを利用して事前に検証しておく。IIS(Internet Information Services)向けにはマイクロソフトからWebサーバの負荷テスト・ツールが提供されている(マイクロソフト「サポート技術情報:Webサーバーの負荷テスト ツール」)。こうしたツールを利用すれば、想定するユーザー数のアクセスをシミュレートし、どの程度のプロセッサ能力が必要なのか判断することができる。
    デュアルプロセッサ構成を選択するのならば、プロセッサは最初から2個搭載することを前提に性能を検討することだ。サーバの性能が足りなくなったころには、ディスク容量なども足りなくなり、サーバを置き換えた方が安上がりという状態になる。つまり、性能の余力(マージン)としてデュアルプロセッサ構成のサーバを導入しても、その余力が使われることは少ない。むしろ、シングルプロセッサ構成で済むにもかかわらず、システム価格が高いデュアルプロセッサ構成を導入するのは、結果として無駄な出費に終わる可能性が高いわけだ。
  • 構成を変更しながら見積を作成する
    ・プロセッサーを選択する。
  • デュアルプロセッサ構成が可能なサーバの場合、1つ目のプロセッサを選択し、
     同じものを2つ目のプロセッサとして追加する。必ず同じ動作クロックである必要がある。

    ・メモリ容量を決める
     多少の価格差ならば必要な容量を最初から搭載して購入したい。(サーバ用メモリー) 

  • ハードディスクのRAID構成を決める
    RAID構成を選択した場合は、RAIDコントローラも選択する。オンボードでRAIDコントローラを搭載する機種が増えているが、選択するRAID構成によってはオプションのRAIDコントローラが必要になる場合がある。オプションのRAIDコントローラは、オンボードのRAIDコントローラに比べてキャッシュの容量が大きかったり、バックアップ・バッテリが装備されていたりと、性能や機能が強化されている(バックアップ・バッテリ機能があると、突然の電源ダウンの際にもしばらくはオンボード・キャッシュ内のデータが失われない)。オプションのRAIDコントローラも、SCSIのチャネル数などで複数用意されている場合があるので、用途に合わせて選択する必要がある。
    RAID 1とすることで、IDEディスクでも、SCSIのRAID 5と信頼性の面で遜色がない。ディスク単体での性能や信頼性の面ではSCSIディスクの方が高い傾向にあるが、価格もその分高い。ディスクの故障時に30分程度の停止が可能な社内のファイル・サーバ用途ならば、安価なIDE(シリアルATA)ディスクを検討してもいいだろう。
  • そのほかのポイント
    デュアルプロセッサ構成以上のサーバでは、冗長化電源に対応しているものが多い。冗長化電源は2つの電源ユニットを搭載し、1つの電源ユニットが故障した場合でも、もう1つの電源ユニットでサーバの稼働が継続できるというものだ。故障した電源ユニットは、稼働中でも交換可能になっているので、サーバのダウンタイムを大幅に減らすことが可能になる。
    保守サポートは、一種の保険なので、用途や許容できるダウンタイムによって、ベンダが用意したメニューから選択すればよい。

2011年11月11日金曜日

献立に困ったら

入力チェック、エラーはまとめて表示

<script src="formCheck.js" type="text/javascript"></script>
<script type="text/javascript">
 <!--
    fld = new Array();
    fld['zip'] = "required";
    fld['pref'] = "required";
    fld['addr'] = "required";
    fld['addr2'] = "required";
    fld['j_sei'] = "required";
    fld['j_mei'] = "required";
    fld['j_seikana'] = "required";
    fld['j_meikana'] = "required";
    fld['p_sei'] = "required";
    fld['p_mei'] = "required";
    fld['school'] = "required";
    fld['gakunen'] = "required";

    fld['mail'] = "mail";
    fld['tel'] = "tel";
    fld['mobile'] = "mobile";
    reqcolor = "#ffe5f2";
    encolor = "#ffffff";
 -->
</script>

●bodyタグ内

<form id="sports" method="post" action="xxxxxx.asp" onsubmit="return FormCheck(fld,reqcolor,encolor)">
<table>
<tr>
<td>ご自宅の郵便番号</td>
<td colspan="2"><input type="text" name="zip" onkeyup="AjaxZip2.zip2addr(this,'pref','addr',null,'addr');" class="imeoff" title="郵便番号を入力してください" />&nbsp;半角、ハイフン不要</td>
</tr>
<tr>
<td rowspan="3" class="tate">ご自宅の住所</td>
<td>都道府県</td>
<td><input type="text" name="pref" size="8" title="都道府県を入力してください" /></td>
</tr>
<tr>
<td>市区町村</td>
<td><input type="text" name="addr" size="40" title="市区町村を入力してください" /></td>
</tr>
<tr>
<td>他住所</td>
<td><input type="text" name="addr2" size="60" title="他住所を入力してください" /></td>
</tr>
<tr>
<td class="tate">受験生のお名前</td>
<td>姓<br />姓(フリガナ)</td>
<td><input type="text" name="j_sei" size="20" class="imeon" title="姓を入力してください" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名<span class="white">(フリガナ)</span>&nbsp;<input type="text" name="j_mei" size="20" class="imeon" title="名を入力してください" /><br />
<input type="text" name="j_seikana" size="20" class="imeon" title="姓(カナ)を入力してください" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名(フリガナ)&nbsp;<input type="text" name="j_meikana" size="20" class="imeon" title="名(カナ)を入力してください" /></td>
</tr>
<tr>
<td>保護者のお名前</td>
<td>姓</td>
<td><input type="text" name="p_sei" size="20" class="imeon" title="保護者姓を入力してください" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名<span class="white">(フリガナ)</span>&nbsp;<input type="text" name="p_mei" size="20" class="imeon" title="保護者名を入力してください" /></td>
</tr>
<tr>
<td>電話番号</td>
<td colspan="2"><input type="text" name="tel" size="18" class="imeoff" title="電話番号を入力してください" />&nbsp;半角、例:06-xxxx-xxxx</td>
</tr>
<tr>
<td>携帯番号</td>
<td colspan="2"><input type="text" name="mobile" size="18" class="imeoff" title="携帯番号を入力してください" />&nbsp;半角、例:090-xxxx-xxxx</td>
</tr>
<tr>
<td class="tate">E-Mail アドレス</td>
<td colspan="2"><input type="text" name="mail" size="60" class="imeoff" title="PCメールアドレスを入力してください" /><br />
<span class="msg">半角、パソコンでご利用のアドレスをご記入ください。</span>
</td>
</tr>
<tr>
<td>在学校名</td>
<td colspan="2"><input type="text" name="school" size="60" title="在学校名を入力してください" /></td>
</tr>

<tr>
<td>学年</td>
<td><input type="text" name="gakunen" size="2" class="imeoff" title="学年を入力してください" />&nbsp;年</td>
<td>&nbsp;</td>
</tr>

</table>
<p class="waku1">
<input type="button" value="リセット" onclick="location.reload()" />
<input type="submit" name="kakunin" value="登録内容確認" /></p>
</form>

●参照するformCheck.jsの構文

//呼び出し用
function FormCheck(fld,reqcolor,encolor){
rcolor = reqcolor;
ecolor = encolor;
var msg = "";
for (key in fld){
if((fld[key] == "radio") || (fld[key] == "check_many")){
var tes = document.getElementsByName(key);
msg += Check(tes,key,fld[key],rcolor,encolor);
}else{
var tes = document.getElementsByName(key).item(0);
msg += Check(tes,key,fld[key],rcolor,encolor);
}
}
//msgが空白のままだったらすべて入力されている
if(msg == ""){
return true;
}else{
alert(msg);//未入力の項目を指摘するアラートを表示
return false;
}
}

//入力チェック
function Check(elm,name,func,rcolor,encolor){
var m = "";
//var i = 0;//ループ用変数(チェックボックスやラジオボタンを使う場合)
//文字数指定用
//var ary = func.split(",");
//func = ary[0];
//min  = ary[1];
//max  = ary[2];
//type = ary[3];
switch(func){
case "required":
if(elm.value == ""){//document.form.変数.valueにするとフォームの名前を探しにいくのでエラー
m = elm.getAttribute("title") + "\n";
ChengeColor(elm,rcolor);
}else{
ChengeColor(elm,encolor);
}
break;

case "mail":
if(!elm.value.match(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/)){//x@x.xx形式じゃなかったら matchが使えない
m = elm.getAttribute("title") + "\n";
ChengeColor(elm,rcolor);
}else{
ChengeColor(elm,ecolor);
}
break;

case "tel":
if(!elm.value.match(/[0-9]+-[0-9]+-+[0-9]+$/)){//xxx-xxx-xxx形式じゃなかったら
m = elm.getAttribute("title") + "\n";
ChengeColor(elm,rcolor);
}else{
ChengeColor(elm,ecolor);
}
break;
       case "mobile":
           if (!elm.value.match(/[0-9]+-[0-9]+-+[0-9]+$/)) {//xxx-xxx-xxx形式じゃなかったら
               m = elm.getAttribute("title") + "\n";
               ChengeColor(elm, rcolor);
           } else {
               ChengeColor(elm, ecolor);
           }
           break;

default: break;
}
return m;
}
//エラーが起こったテキストボックスの色を変える
function ChengeColor(name,color){
name.style.backgroundColor = color;
}

クリックで下欄情報表示/非表示

<script type="text/javascript">
    function entryChange1() {
        radio = document.getElementsByName('entryPlan')
        if (radio[0].checked) {
            //フォーム
            document.getElementById('firstBox').style.display = "";
            document.getElementById('secondBox').style.display = "none";
            //特典
            //document.getElementById('firstNotice').style.display = "";
        } else if (radio[1].checked) {
            //フォーム
            document.getElementById('firstBox').style.display = "none";
            document.getElementById('secondBox').style.display = "";
            //特典
            //document.getElementById('firstNotice').style.display = "none";
        }
    }
    //オンロードさせ、リロード時に選択を保持
    window.onload = entryChange1;
</script>
<body onload="entryChange1()">

<label><input type="radio" name="entryPlan" value="hoge1" onclick="entryChange1();" checked="checked" />同意しない</label> &nbsp;&nbsp;&nbsp;
<label><input type="radio" name="entryPlan" value="hoge2" onclick="entryChange1();" />同意する</label><br />

<!-- 表示非表示切り替え -->
<p id="firstBox">
[同意する]をクリックすると申込み用の画面が下欄に表示されます。
</p>
<p>
ご記入いただいた個人情報は、個人情報に関する法律に基づき、取扱い責任者が厳重に管理いたします。<br />
また、その情報は、○○業務目的にのみ使用いたします。
</p>

<div id="secondBox">
<h5>【同意する】をクリックしたときに表示される内容</h5>
</div>