• xmlhttprequest を使用してfileをuploadする。IE11

    2018-03-19 04:57
  • 広告
  • iptablesに関して

    2018-03-18 04:49

    iptablesの設定

    設定を確認する

    iptables -nL

    設定する

    初期化(全て破棄)

    iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD

    デフォルト指定

    受信を破棄 / 送信を許可 / 通過を拒否 iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP

    基本設定

    自ホストからのアクセスをすべて許可(内側は自由)
    iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
    内部から行ったアクセスに対する外部からの返答アクセス(既に設立、関連があるもの)を許可 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    ssh許可

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    ################################ ##### サービス設定ここから #####
    iptables -A INPUT -p tcp --sport 53 -j ACCEPT iptables -A INPUT -p udp --sport 53 -j ACCEPT iptables -A INPUT -p tcp --sport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 443 -j ACCEPT
    ##### サービス設定ここまで #####
    ################################

    上記のルールにマッチしなかったアクセスはログを記録して破棄

    iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
    iptables -A INPUT -j DROP
    iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
    iptables -A FORWARD -j DROP

    まで

    設定の保存実行に関して

    少し前までは、起動時に設定コマンドを記述したシェルスクリプトを実行する仕組みだったが、
    設定を保存する仕組みが出来たようです。
    設定の保存
    iptables-save | tee /etc/iptables.rules

    保存されたスクリプト(iptables復元用スクリプト)

    </etc/iptables.rules>
    #!/bin/sh /sbin/iptables-restore < /etc/iptables.rules exit 0

    最後に実行権限を付与
    chmod a+x /etc/network/if-pre-up.d/iptables_start

    設定の追加と削除

    例:
    外部からのPing要求(入力)に対して拒否する設定を追加
    iptables -A INPUT -p icmp --icmp-type 8 -j DROP
    外部からのPing要求(入力)に対して拒否する設定を削除
    iptables -D INPUT -p icmp --icmp-type 8 -j DROP

    削除は番号を指定可能。

    その他

    設定された順番が優先順位となる。

    LANを複数挿してLinuxをルーターにする場合、グローバル用のethに対してローカルIPに対するPingに要求応答を拒否する
    設定を行う必要がある。(ローカルIPが外に垂れ流される対策)

    既存のLinuxサーバーに対するパッチでiptablesのコマンドの挿入(-I)削除(-D)を行う場合は、設定順番の指定が必要な場合があるので
    設定確認時にオプション「--line-numbers」を付けて表示し、シェルスクリプト等で番号を取得する

    iptables -nL --line-numbers

    上記のサンプルでは上の方で-Pオプションでデフォルトの設定を行っているにも関わらず、末の方でも残りをDROPしている。これはどちらか一方が指定して有れば良い。
    (下記参考CentOSでは療法が既述されているが、参考Debianでは末のDROPは無い。)
    仕組みとしては先に設定されたコマンドルールの優先度が高いのでAcceptするものは先に宣言し、残りをDropする事になる。デフォルトの指定はデフォルトなので場所は関係無いかもしれないが、上で宣言可能。
    参考Debian
    参考CentOS

    参考:icmpのタイプ







  • 詰将棋の実装

    2017-12-31 02:57
    詰将棋の壁は一般的には、3手詰めと5手詰めの間にあるらしいです。

    詰将棋のコツを検索すると色々アドバイスが書いてあります。

    参考

    参考2

    詰将棋のコツは人それぞれらしいです。
    小さい頃から得意な人は難なく解けたりするそうです。

    ということで、詰将棋を解く処理の設計をします。

    詰将棋の設計


    全コマ検索します。
    まず、5手詰で検討。
    詰将棋を解く処理の単純化を検討。

    通常、人が詰将棋を解く時は、ボンヤリ詰将棋を眺めながら詰みの形が閃くの待ったり(人それぞれですが。)割りと混沌とした処理ではないかと思います。

    今回の設計では、1手目以降、王手する駒の順番を固定にします。
    成り駒も当然含まれるのですが、下記はイメージですね。

    <テーブルイメージ>
    koma={飛車、角、金、銀、桂、香、歩}

    上記のテーブルの順番に考慮します。

    実戦形式ではない通常の詰将棋では、1手目で大駒を捨てる事が多いのでこの順番にしています。

    テーブルの駒の順番に王手可能な箇所の和を数えます。

    例:1手目 飛車(4),金(5),桂馬(1)

    以下イメージ…

    飛車1で王手し、相手陣側を動かします。
    → 相手陣の移動可能な箇所を数えます。
    例:2パターン移動可能
    2パターンあるとするとどちらか一方が詰まなければ、検討を打ち切り可能です。
    1パターン目:
    テーブルの駒の順番に王手可能な箇所の和を数えます。(再帰的な処理になります。)

    例:3手目 飛車(2),角(3),金(1)

    人間の感性(第一感)では金が一番詰みが有りそうとか勘が働くんですが、
    テーブルの順番通り考慮します。

    飛車1-1で王手し、相手陣側を動かします。
    → 相手陣の移動可能な箇所を数えます。
    例:2パターン移動可能
    2パターンあるとしてどちらか一方が詰まなければ、検討を打ち切り可能です。
    1-1パターン目:
    5手目も同じように
    テーブルの駒の順番に王手可能な箇所の和を数えます。(再帰的な処理になります。)

    例:5手目 金(1)、歩(1)

    5手目で詰みが無い状況はハッキリしているので瞬時に判断可能です。
    5手目も両方詰みがないかどうかを見ます。

    以上を全パターンループします。

    テーブルの順番に考慮するメリットは、
    ・戻りが無い。(テーブルの順番に検討して最後(テーブル上では「歩」)まで行ったら終了)
    ・考慮漏れがない。

    5手詰めであれば、100パターン以下ではないかと思いますが実際はどうでしょうか。。

    ということで下記の詰め将棋を上記設計の処理で検討します。

    将棋タウン内、詰将棋専門学校さんの5手詰問題集の2番



    <テーブルイメージ>
    koma={飛車、角、と}

    手が進むと飛車角が成ったり駒が増えたりしますが、そこは更新していくイメージです。

    1手目
    飛車(2),角(1),と(1)
    2二飛車、1三飛車の2パターンの内、2二飛車から検討します。
    (1手目2二飛車から始まるような詰将棋はまぁ無い気がしますが、「戻りが無い」というテーブル順のメリットのために検討します。)

    2手目は1三玉の一択です。

    3手目
    第一感では3五角打ちですが、テーブル順に飛車での王手から検討します。
    2三竜、1二竜の2パターン。

    2三竜の検討。
    4手目同玉で5手詰み無し。

    1二竜の検討。
    同香か同玉の2パターン。(どちらかが詰まなければ、検討打ち切り可能。)
    同香は2二角打ちで詰みます。
    同玉は、飛車無しで問題の盤面に戻るだけですし5手詰みは無いです。

    拠って1手目2二飛車打ちのパターンは消化しました。

    次、

    1手目、1三飛車打ちの場合。。
    以下省略気味に
    同金だったら2一角打ちで詰みますが、同玉の場合は、3一角打ち→合駒or1二玉→2二馬で詰みます。

    ということで
    一応、
    1三飛車 → 同玉 → 3一角打ち → 2二金打ち(何をやっても) → 2二角成
    で詰みそうです。

    全パターン消化前に詰みがあると残りも一応確認したくなりますが、
    時間がある場合は、検討してみても良いのではないでしょうか。

    以上を自分に実装してみるのも有益ではないかと思います。

    for文等が詰みがあるパターンまで再帰的にループしているようなイメージですね。

    エンジニアであれば、脳内デバッグの精度上昇が見込めたりしないでしょうか。
    プロ棋士の様に脳内に盤面はなくてもソースコードのロジックは脳内でイメージ出来る人もいると思うので、このようなロジックを自分の脳内に実装するとまでは言いませんが、脳内デバッグする事でメリットがありそうな気がします。

    詰将棋得意な子供の頭がどうなっているのか気になりますね。
    上記のようなロジックを誰に教わるでもなく脳内に築き上げてしまったのか。
    全く別のロジックが高速に動いているのか。
    閃きなのか。

    上記のようなロジックでも詰将棋を大量に消化して行く内にひと目で解けるようになるんでしょうね。機械学習的な感じで。分かりませんが。

    以上。