.NETのHttpClientの取り扱いには要注意という話

HTTPアクセスのたびにnewして使うと大量アクセス時にボトルネックになるらしい。

staticで宣言して、使いまわすのがよいそうです。

1ホストにつき1HttpClientオブジェクトがルール。

使いまわすとなると同時アクセスの心配がでるけど、それはHttpClient的には想定済なのだそうです。 どこまで大丈夫なんだろうか・・・?

javascriptでGETパラメータを取得する

function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

例えば http://www.example.com/?me=myValue&name2=SomeOtherValue なら

//最初のパラメータ(me)
var first = getUrlVars()["me"];
 
//2つ目のパラメータ(name2)
var second = getUrlVars()["name2"];

javascriptで選択肢によってドロップダウンのメニュー項目を変える

javascript部

<script type = "text/javascript">
<!--
function functionName()
{
var select1 = document.forms.formName.selectName1; //変数select1を宣言
var select2 = document.forms.formName.selectName2; //変数select2を宣言

select2.options.length = 0; // 選択肢の数がそれぞれに異なる場合、これが重要

if (select1.options[select1.selectedIndex].value == "果物")
{
select2.options[0] = new Option("りんご");
select2.options[1] = new Option("みかん");
select2.options[2] = new Option("オレンジ");
}

else if (select1.options[select1.selectedIndex].value == "野菜")
{
select2.options[0] = new Option("キャベツ");
select2.options[1] = new Option("きゅうり");
select2.options[2] = new Option("にんんじん");
select2.options[3] = new Option("たまねぎ");
}

else if (select1.options[select1.selectedIndex].value == "肉類")
{
select2.options[0] = new Option("豚肉");
select2.options[1] = new Option("牛肉");
}
} 
//-->
</script>

HTML部

<body bgcolor onLoad="functionName()">
<form name="formName" method="post" action="./pathToProgramFile">
<!--選択肢その1-->
<select name = "selectName1" onChange="functionName()">
<option value = "果物">くだもの</option>
<option value = "野菜">やさい</option>
<option value = "肉類">にくるい</option>
</select>

<!--選択肢その2(選択肢その1の項目によって変化)-->
<select name = "selectName2">
</select>

</body>

PHPでデータをCSV出力する

<?php
    if ( $_POST['mode'] === 'download' ) {
            //仮のデータ
            $data[0]['fruit'] = "オレンジ";
            $data[0]['price'] = "100円";
            $data[1]['fruit'] = "グレープ";
            $data[1]['price'] = "200円";
            $data[2]['fruit'] = "桃";
            $data[2]['price'] = "300円";
              
            //配列にデータが入っている場合は1行の文字列にしてカンマ区切りのデータにしましょう
            //末尾は改行コードで。''じゃなく、""でくくりましょう。
            for ( $i = 0 ; $i < count ( $data ) ; $i ++ ) {
                $csv_data.= $data[$i]['fruit'].','.$data[$i]['price']."\n";
            }
            //出力ファイル名の作成
            $csv_file = "csv_". date ( "Ymd" ) .'.csv';
          
            //文字化けを防ぐ
            $csv_data = mb_convert_encoding ( $csv_data , "sjis-win" , 'utf-8' );
              
            //MIMEタイプの設定
            header("Content-Type: application/octet-stream");
            //名前を付けて保存のダイアログボックスのファイル名の初期値
            header("Content-Disposition: attachment; filename={$csv_file}");
          
            // データの出力
            echo($csv_data);
            exit();
    }
?>
<html>
<body>
    <form action="" method="post">
        <input type="submit" value="csvダウンロード"><br />
        <input type="hidden" name="mode" value="download">
    </form>
</body>
</html>

google cloud Platform(GCP)のbitnamiサイトをLet's encryptでSSL化する手順

SSHで接続

Letsencryptスクリプトをインストールする

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly -w / home / bitnami / htdocs -d ses.rosacea-support.org -d sandbox.pascoe.biz

 -wはウェブルートがある場所で、複数の-dで保護したいドメイン指定。

証明書ファイルは次の場所に書き込まれます。 /etc/letsencypt/live

新しい証明書を使用するようにApacheを更新する

sudo vim /home/bitnami/stack/apache2/conf/bitnami/bitnami.conf

デフォルトのSSL証明書行をコメントアウトして、次の3行を残します。

SSLCertificateFile "/etc/letsencrypt/live/ドメイン/cert.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/ドメイン/privkey.pem"
SSLCertificateChainFile "/etc/letsencrypt/live/ドメイン/fullchain.pem"

LAMPスタックを再起動します。

sudo /opt/bitnami/ctlscript.sh restart

これでSSL化完了!

3ヶ月に一回証明書の更新は必要だよ。