読者です 読者をやめる 読者になる 読者になる

orz.conf

技術メモ✍

Ajax 初めの一歩

Ajax php

非常にいまさらなんですが、Ajaxの基礎の基礎について書きたいと思います。

使用言語はPHPにします。

値を入力して送信、サーバで計算してローカルに値を戻します。
必要なファイルはtest.htmlとtest.phpです。
test.htmlにアクセスして送信ボタンを押すとtest.phpにデータが送信され
結果をtest.htmlに戻して値を表示します。

f:id:toshtone:20150913234014p:plain

f:id:toshtone:20150913234439p:plain

htmlはこんな感じ

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function func() {
    $.ajax({ type: "POST", url: "./test.php",
        data: {
            num1 : $(val1).val(),
            num2 : $(val2).val()
        },
        dataType: 'json',
        success: function(data) {
            target = document.getElementById("output");
            target.innerHTML = data.msg;
        }
    });
}
</script>
</head>

<body>
    <center>
    <label>値1<input type="text" name="val1" id="val1" size="3" maxlength="3"> X </label>
    <label>値2<input type="text" name="val2" id="val2" size="3" maxlength="3"></label>
    <input type="button" value="送信" onclick="func();" />
    <div style="text-align:center" id="output"></div>
    </center>
</body>

</html>

続いてphp

<?PHP
$num1 = (int)$_POST['num1'];
$num2 = (int)$_POST['num2'];
$rtnVal = $num1 * $num2;
header("Content-Type: application/json; charset=utf-8");
echo json_encode( array( 'msg' => $rtnVal ) );
?>

シンプルな例ということで。

エクセルで各値の個数の集計

Excel

エクセルでこういったデータの個数の集計をしたい時
どうやるんだったかよく忘れてしまうので、手順をまとめます。

こういったデータを・・・
f:id:toshtone:20150905204107p:plain

こんな感じに集計したい
f:id:toshtone:20150905204122p:plain

まずはソートします。
f:id:toshtone:20150905204110p:plain

そのままね
f:id:toshtone:20150905204112p:plain

ソートされました。
f:id:toshtone:20150905204115p:plain

次に集計
f:id:toshtone:20150905204117p:plain

ここで個数の集計
f:id:toshtone:20150905204120p:plain

そうすると完成
f:id:toshtone:20150905204122p:plain

Linuxサーバに公開鍵認証でsshログイン

linux

クライアントからLinuxサーバにSSHアクセスする方法の一つに鍵認証を用いる方法があります。

vZdtj6o6EMc/TV+u4UEQXoK69yT3ITfxJvflpkKBxkJJqU/76XcKUwVds3tzj8dEHP6t0zq/maESf1mfflO0rf6UORPEc/IT8VfE81wnXMCHUc6DsvDiQSgVz3HSVdjwd2a/ieqe56ybTNRSCs3bqZjJpmGZnmiFFNMlWlpa91dhk1Fxr/7Lc12hGuFejP6D8bLCZTwHBzp9ti5yVtC90C+9BGNmuKbWFc4/OeggHO7P9v6yUDOZ/y5lPREU6y6RQqng0x/f0MNkfCtVztREErzZjaPor4GkkhIcGas+LZkwNC2oIMpz381zGlPHmRfey+Dn9bvTL+FVrMHN/l+XGOEDFXsMB1n7JPJI8tobPkliq8ytMczxSeqjEUV3HHnd50pa6VqA4oKJ0orXJexQ8C1cM8HbN6q0MWXd7jVTHdh/Mb2VcvfmetEJ3rO2KY0vqfi7bDS1HgXdMvG37Ljm0hDPIC6GUXpgSnPIyz9uJmjZwigVvPx0eoIDW6m1yZgUowPDzFbkNxhckwHKmsmaaXU2WYtJihWNBT3HZDpeCyZGqRrVitUoJlx58XvFDQYS/yZ9/xH9NLCIl2jY9X8a4g1TENcbwk8H2rU04035j/naCrqGFVKcsAqeRd29wR7cYXdtz346d9zKhHtAooAkgDsmcUii1BjRymTCLfeuoq0x61NpnlmzjHeZnNVwne3YGfaZTpMip13FzFZMvAsuxFIKOXRS3/HDKF4YDlrJHRuNFP3rMmKfJxDih8lwoXyLf8iSAlrHeOn+9SzcAfpA3K5zz3uOzXeMO3wGbuzOE9wLkixIHBnu0Oqj8Gvcn5T753H+Ek/vKena4bxhENi+UWltziWJ+a3QLvLGn3E4mRS8gWfvDNoHqDnVFD6MbvpIve90RQ8MTOgjcP2dnbGb/Ergtp4tb1vLI97B/J538AzeLv6cEfDN5gdZQ1mvSQKtfUHSkMQQ5Qeoc7nfCpYoJY8QrmPFNdtAnzRDRyj5aRKYKOO50zXVue0Xve+0D3vyz2r6vxK3e9POQ6yxcTu3p9sxb5sm/4E33F7PlP3Y6K+Cv/4A

この図のように、クライアントに秘密鍵を配布しサーバに公開鍵を配置します。

秘密鍵と公開鍵を作成します。
作成するサーバはどのサーバでも構いません。
(teratermの機能を用いても同様のことが出来ますが今回は割愛します。)

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|     NYAN        |
|*_*     :o       |
|        . + =    |
|      :)S= = o   |
|      o.+ .^o^   |
|     +.+ + . .   |
|    . o.= = .    |
|      .+.+ .     |
+-----------------+

Enter passphrase (empty for no passphrase):の箇所で入力するパスワードを
空にすると、ログイン時にパスワードを入力する必要がなくなります。
今回は空にしました。

ここまで終わるとid_rsaとid_rsa.pubの2つのファイルが作成されます。

リナックスサーバに公開鍵を設定します。

# mv id_rsa.pub authorized_keys
# chmod 600 authorized_keys
# rm rsa.pub

既にauthorized_keysが存在するようならcatします。

# cat rsa.pub >> authorized_keys

続いて秘密鍵をクライアントに渡してやります。
一度権限をrw-r--r--くらいにしてやります。

# chmod 644 id_rsa

これでファイルをクライアントに渡してください。
(2017/03/26 追記 権限設定700だったような。。。ちょっと確認が必要)

そのファイルをTeraTermでこのように設定すれば、ログイン出来るかと思います。

f:id:toshtone:20150808132140p:plain

クライアントがCentOSなどのLinuxの場合は、
~/.ssh/の下にid_rsaを配置。

複数id_rsaがある場合は任意の名前に変更する。
その場合~/.ssh/configファイルを作成し

IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/任意の名前

↑のように列挙していく。

Host test
  HostName サーバの名前あるいはアドレス
  User ユーザ名

とするとssh testで接続出来ます。

もしログイン出来ないようなら、サーバの/etc/ssh/sshd_configの
設定を見直します。
下記3行のコメントブロックが外れているかどうか確認してください。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

下記のようにしたい場合について
rootユーザのパスワード認証でのログインは拒否
rootユーザの鍵認証でのログインを許可

PermitRootLogin without-password

普段はNoにしているかと思いますがwithout-passwordを指定することで
パスワード以外での認証を許可します。

CentOS7とCentOS6までの違い

linux

今更ながらCentOS7の操作に戸惑っています。
CentOS6までと違うとこを記載していきたいと思います。

ipconfig

ip addr

service XXX start

systemctl start XXX

chkconfig XXX on (off)

systemctl enable(disable) XXX
※chkconfigコマンドはまだ使用することができます。

・サービス名の変更
iptables

firewalld

Firewalldは/etc/firewalld/zones/public.xmlが設定ファイルです。


みたいな感じに追加してsystemctl restart firewalld


まだ随時追記していきます。

Excelでスケジュール

Excel

たまにこのような表を作成する機会があります。

f:id:toshtone:20150802104301j:plain


土日と祝日の色を青や赤に自動で変える方法どうだったかなと
毎回忘れてしまうのでここで整理したいと思います。

まずはこのように手動で入力

f:id:toshtone:20150802104313j:plain

次に日付の入力です。

1日(月の初日)を表示させるセルに下記を入力します。
=DATE(B2,D2,1)

f:id:toshtone:20150802104325j:plain

その次の日からは+1で対応していきます。
31日までコピーしてこうなります。

f:id:toshtone:20150802104334j:plain

続いて、日付の隣に曜日を表示させます。

曜日のセルにこのように記載します。

=CHOOSE(WEEKDAY(F4,1),"日","月","火","水","木","金","土")

f:id:toshtone:20150802104343j:plain

WEEKDAY("2015/8/1",1)で、日曜日なら1、月曜日なら2、~~、土曜日なら7を取得できます。
CHOOSE(1,"日","月","火","水","木","金","土")としてやると"日"が取得できます。
一番目の引数が5なら"木"になります。
(セルの書式をaaaとしても同じことが可能です。)

作成したものを31日目までコピーするとこんな感じ

f:id:toshtone:20150802104350j:plain

続いて土日に色を付けます。
条件付き書式を使います。

f:id:toshtone:20150802104357j:plain

土曜日の色を水色にします。
=$G4="土"

f:id:toshtone:20150802104404j:plain

適用範囲を日付と曜日の表示セル全てにします。

f:id:toshtone:20150802104409j:plain
f:id:toshtone:20150802104416j:plain


そうするとこんな感じ。

f:id:toshtone:20150802104422j:plain

日曜日も同様に設定してやりましょう。

f:id:toshtone:20150802104431j:plain

次は祝日設定です。
祝日を定義してやりましょう。
邪魔にならないセルに移動します。

f:id:toshtone:20150802104445j:plain

お盆の週は全て休みという設定にします。
そして定義したセルに名前をつけてやります。

f:id:toshtone:20150802104452j:plain

セルにつけた名前の管理は数式バーの名前の管理から行うことが出来ます。

f:id:toshtone:20150802104526j:plain

それでは設定です。
条件式は下記です。

=NOT(ISNA(MATCH($F4,Holidays,0)))

まずMATCH($F4,Holidays,0)ですが
F4のセルがHolidaysにマッチすると2015/8/10なら1が、2015/8/14なら5が返ります。
もし存在しなかったら#N/Aが返ります。

次にISNA("")ですが括弧内の値が#N/Aであればtrue、そうでなければfalseが返ります。

NOTは否定ですね。

つまり=NOT(ISNA(MATCH("2015/8/1",Holidays,0)))の場合はfalseとなるわけです。
=NOT(ISNA(MATCH("2015/8/10",Holidays,0)))はtrueですね。

反映するとこうなります。

f:id:toshtone:20150802104555j:plain

日付のフォーマットを変更しましょう。
dにするだけです。

f:id:toshtone:20150802104605j:plain

31日が無い月の判定対応をしていきます。
まず邪魔にならないセルに先ほどおこなった日付出力を行います。

f:id:toshtone:20150802104613j:plain

元々の日付のセルの式を修正します。
=IF(MONTH(AZ4)<>MONTH(DATE($B$2,$D$2,1)),"",AZ4)
これで、指定した月でない値が入っている場合表示されないことになります。

f:id:toshtone:20150802104622j:plain

これを31日まで反映させると、うるう年にも対応したものになります。

曜日のほうもちょっと直せばすぐ対応できると思います。
日付が空であれば曜日を空にする条件を追加するだけですね。

以上で完成です。

f:id:toshtone:20150802104631j:plain

MyDNS.JP

mydnsに登録しました。
が、しばらくたつとこんなメールが届きます。


IPアドレスの通知が9日間確認できません。


通知って、誰もこのアドレスを検索しなかったのかなとか思ったんですが、
そんなことMyDNS.JPのサービス運営しているところが把握できるはずもないなあなんて
思ってMyDNSのサイトにログインしてよく見てみると、IP ADDR DIRECT
ページのcheckボタンを定期的に押さないといけないみたい。

いちいちログインしてだなんて面倒だと思って色々検索するとそこはやはり自動化できる手段がありました。

CentOS6.6では以下の通りで自動化できます。

$ cd /etc/cron.daily/

$ touch mydns
$ chmod 775 mydns

$ vim mydns
wget http://www.mydns.jp/login.html --http-user=[mydnsXXX] --http-passwd=[XXXXX] -O /dev/null

ネットを見回ってみるとcron.hourlyで指定させていたりするようですが、そんなに頻繁にする必要はないのでdailyくらいで設定させてやりましょう。

正規表現(その3)

正規表現

前回の答えです。

正規表現のこの機能を使用します。
(?<=XXX) 肯定戻り読み
(?=XXX)  肯定先読み

(?<=test1\=).*(?=,)

一つ目の括弧の中のtest1\=が肯定戻り読みの文字列に当たります。
二つ目の括弧の中の,が肯定先読みの文字列に当たります。

今回の問題はまた考えたらここに追記します。