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

Javascript でチェックボックスの状態を操作して、phpで受けとる

javascript php
function AllCheck(){
    "use strict";
    var checked = document.formnm.chkall.checked;
    for (var i=0, len=document.formnm.elements['chkbx[]'].length;i<len;i++ ){
        document.formnm.elements['chkbx[]'][i].checked = checked;
    }
}
<form name="formnm" action="" method="POST">
<input type="checkbox" name="chkall"  onclick="AllCheck()" />全てにチェック
<input type="checkbox" name="chkbx[]" value="1">1
<input type="checkbox" name="chkbx[]" value="2">2
<input type="checkbox" name="chkbx[]" value="3">3
<input type="submit">
</form>

Javascript でチェックボックスの状態を操作して、phpで受けとる

javascript php
function AllCheck(){
    "use strict";
    var checked = document.formnm.chkall.checked;
    for (var i=0, len=document.formnm.elements['chkbx[]'].length;i<len;i++ ){
        document.formnm.elements['chkbx[]'][i].checked = checked;
    }
}
<form name="formnm" action="" method="POST">
<input type="checkbox" name="chkall"  onclick="AllCheck()" />全てにチェック
<input type="checkbox" name="chkbx[]" value="1">1
<input type="checkbox" name="chkbx[]" value="2">2
<input type="checkbox" name="chkbx[]" value="3">3
<input type="submit">
</form>

ssh の話

server

リモート作業に使用する ssh の使い方をあらためてまとめてみた。

鍵の作成

鍵ファイルは公開鍵ファイルと、秘密鍵ファイルの二つが生成される。
公開鍵ファイルを他のサーバなどに登録し、秘密鍵ファイルは他の人に見られないようにしておく。

# ssh-keygen -t rsa -b 2048 -C "hoge@fuga.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): "保存場所の指定"
Enter passphrase (empty for no passphrase):  "パスフレーズの入力"
Enter same passphrase again:

 -t rsa、証明書に使用する暗号化方式の指定、だいたい rsa でいいんではないでしょうか。 楕円曲線暗号の ecdsa などもつかえる。


 -b 4096、暗号化のビット数、最低でも2048以上を指定しましょう。 8196 だと計算負荷があるけど、最近のマシンなら大丈夫でしょう


 -C、証明書につけるコメント、メールアドレスやサーバ名など必要に応じて


上記のコマンドで、通常は ~.ssh ディレクトリ以下に id_rsa と、id_rsa.pub が作成される。

パスフレーズについては入力しないというのもあり。 ssh を使った自動ログインを設定したいのなら、パスフレーズは入力しない。

パスフレーズを設定することにより、秘密鍵を盗まれても簡単には解読されないので安全になるが、不要という意見もある。

http://freak-da.hatenablog.com/entry/20100901/p1:SSH秘密鍵のパスフレーズは(つけるなら)11文字以上にしましょうねという話

個人的にはパスフレーズは設定して、ssh-agent(後述) を使用するほうがいいかなと思う。

鍵の確認

作成した証明書のビット数やコメントを確認するには ssh-keygen コマンドに -l オプションを付けて -f で公開鍵ファイルを指定する。

# ssh-keygen -lf id_rsa.pub
4096 SHA256:Z+3xx/WxWwxMxxxxxxxxxxxxxxxxxxxbMIug hoge@fuga.com

パスフレーズの変更

作成した証明書のパスフレーズを変更するには ssh-keygen に -p オプションを付ける。

# ssh-keygen -pf id_rsa
Enter old passphrase:"古いパスフレーズ"
Enter new passphrase (empty for no passphrase):"新しいパスフレーズ"
Enter same passphrase again:"新しいパスフレーズの再入力"
Your identification has been saved with the new passphrase.

鍵のコピー

作成した公開鍵、id_rsa.pub をリモートサーバにコピーする。

簡単なのは ssh-copy-id コマンドを使用する

# ssh-copy-id age.fuga.com
hoge@age's password:
Now try logging into the machine, with "ssh 'age'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

ログインしているマシンとアカウント名が違うなら、hoge@age.fuga.com で指定する。



よく使われているのは scp コマンドを使用する。

# scp ~/.ssh/id_rsa.pub hoge@age.fuga.com:
# ssh hoge@age.fuga.com
hoge@age's password:
Last login: Thu Feb 1 20:57:41 2017 from sage.fuga.com
$ mkdir .ssh
$ chmod 700 .ssh
$ cat id_rsa.pub >> .ssh/authorized_keys
$ chmod 700 .ssh/authorized_keys
$ rm id_rsa.pub

scp コマンドでコピーした場合には、.ssh ディレクトリがなればそれの作成や、authorized_keys ファイルへの追加などが必要になる。


これでリモートマシンに ssh でログインができるようになる。


sshd の設定

ssh の証明書ログインができるようになったら、証明書を使用しないログインを禁止しましょう。

/etc/sshd/sshd_config で sshd の設定をします。

PubkeyAuthentication yes # 公開鍵認証を有効にする
AuthorizedKeysFile   .ssh/authorized_keys # 公開鍵ファイルの場所
PasswordAuthentication no # パスワードログインの禁止

上記の変更をしたら、service sshd restart などで sshd の再起動をする。 念のため、現在のログインをそのままにして、新しく ssh ログインをして正常にログインできるか確認しましょう。

ssh config の設定

ssh でログインするときには、

# ssh hoge@age.fuga.com

としますが、~.ssh/config ファイルを設定しておくことで省略してログインすることができるようになる。

Host age
     HostName age.fuga.com
     User hoge
     IdentityFile ~.ssh/id_rsa # 標準の鍵ファイルなら必要ない

これで

# ssh age

でログインできるようになる。

ssh-agent の使用

秘密鍵にはパスフレーズを設定したほうがいいと思うが、それをすると毎回ログインするときにパスフレーズの入力が必要になり、面倒くさい。

ssh-agent を使用するとパスフレーズを覚えてくれるので毎回パスフレーズを入力する必要がなくなる。

まずは ssh-agent を起動。

# eval `ssh-agent`
Agent pid 25908

このコマンドを .bash_profile などに登録しておくとログイン時に自動的に実行される。


秘密鍵ファイルの登録。

# ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/hoge/.ssh/id_rsa:
Identity added: /home/hoge/.ssh/id_rsa (/home/hoge/.ssh/id_rsa)

これでログインしているシェルから抜けるまではパスフレーズを覚えていてくれる。

ssh-agent が覚えている鍵は ssh-add -l で表示できる。

# ssh-add -l                                                     *[~]
8192 SHA256:Z+3xx/WxWwxxxxxxxxxxxxxxxxxxxxxxxsPphbbMIug .ssh/id_rsa (RSA)
2048 SHA256:BPgh9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxuZ4 .ssh/id_rsa_nar (RSA)

javascript で特定の範囲だけ印刷

印刷したい部分をIDで指定して、その部分のHTMLを取得、印刷用のページを作って、印刷ダイアログを表示、その後HTMLテキストを元に戻す

 

function araeprint(area){
var areatext = document.getElementById(area);
var htmldoc = document.body.innerHTML;
window.document.body.innerHTML = areatext.innerHTML;
window.print();
document.body.innerHTML = htmldoc;

}

web-modeで、タグのオートクローズが効かない場合

emacs

ターミナル上のemacsではタグがオートクローズされないのが標準の動作

Autopairing, tag autoclosing does not trigger
This is the normal behavior when you run emacs in a terminal (tty). That’s because in text mode, pasting a long text is like inserting it one character at a time. Thus, the consequences can be bad e.g. many auto closing/pairing instead of one. If you wan’t to force autoclosing, autopairing even in a terminal, add (setq web-mode-enable-auto-closing t) and (setq web-mode-enable-auto-pairing t) in your .emacs 

web-mode.el - html template editing for emacs

init.elに(setq web-mode-enable-auto-closing t) を追加する (setq web-mode-enable-auto-pairing t)

 

オートクローズの振る舞いの設定

;; auto tag closing
;0=no auto-closing
;1=auto-close with </
;2=auto-close with > and </
(setq web-mode-auto-close-style 2)
(setq web-mode-tag-auto-close-style 2) 

tcpdf + PDFI + PHP によるPDFの出力

php

PDFで請求書を出力したかったのでやってみた

** Illsutratorを使用してPDFのテンプレートを作成する

Illustratorを使用して帳票のテンプレートを作成する。
保存するときに保存のオプションで、「互換性のある形式」を「Acrobat 5(PDF1.4)」にして保存する。

** tcpdf のインストール

https://github.com/tecnickcom/tcpdf

から zip をダウンロードするか clone して展開する。

** フォントのインストール

http://coliss.com/articles/freebies/best-of-free-japanese-fonts-for-2016.html

好きなフォントをダウンロードしてきて、.tff のフォントファイルを、tcpdf を展開したところに出来る fonts フォルダにコピーする。


fonts フォルダにフォントキャッシュが書き込まれるので、ウェブサーバプログラムのアカウントで読み書きできるようにする。


** FPDI のインストール

https://www.setasign.com/products/fpdi/downloads/

から FPDI のパッケージをダウンロードして、tcpdf とおなじところに展開しておく


** ライブラリの使用

>|
<?php
include 'tcpdf.php';
include 'fpdi.php';

$pdf = new FPDI(); // FPDI の呼出

$pdf->SetMargins(0,0,0); // 上左右マージンの設定
$pdf->SetCellPadding(0); // セルパディングの設定
$pdf->SetAutoPageBreak(false); // 自動改ページを無効
$pdf->setPrintHeader(false); // ページヘッダ無効
$pdf->setPrintFooter(false); // ページフッタ無効

$font_m = new TCPDF_FONTS(); // フォントクラスの呼出
$fontPathMintyo = './fonts/mintyo.ttf'; // 明朝フォントの設定
$MintyoFont = $font_m->addTTFfont($fontPathMintyo, '', '', 32);

$font_g = new TCPDF_FONTS(); // フォントクラスの呼出
$fontPathGothic = './fonts/gothic.ttf'; // ゴシックフォントの設定
$GothicFont = $font_g->addTTFfont($fontPathGothic, '', '', 32);

$pdf->AddPage(); // ページを追加

$pdf->setSourceFile('./template.pdf'); // テンプレートを読み込み
$tplIdx = $pdf->importPage(1); // 読み込んだPDFの1ページ目のインデックスを取得
$pdf->useTemplate($tplIdx, null, null, null, null, true); // 読み込んだPDFの1ページ目をテンプレートとして使用

$pdf->SetFont($MintyoFont, '', 12); // 書き込む文字列のフォント,サイズを指定
$pdf->SetTextColor(0, 0, 0); // 書き込む文字列の文字色をRGB指定

$pdf->SetXY(150, 20); // 左上から150mm右、20mm下の位置に
$pdf->Write(0, "ほげほげ" ); // 文字列を書き込む

$pdf->Output('testt.pdf', 'I'); // PDFとして表示

|<


以下を参考にした
http://qiita.com/emegane/items/486975a79ebb267c2b8e

http://cmf.ohtanz.com/blog/archives/2463

自分の ipfw.rule

server

なんだかんだで長年使い続けてる ipfw.rule 

 

#!/bin/sh

fw_cmd="/sbin/ipfw -q"
fw_add="${fw_cmd} add"
IIF="re0"
OIF="ng0"
my_net="192.168.0.0/24"


# flush old rules
${fw_cmd} -f flush

# Established、フラグメント化パケットは通過
${fw_add} 100 check-state
${fw_add} 110 allow tcp from any to any established
${fw_add} 120 allow all from any to any frag


# lo0用の設定
${fw_add} 200 allow all from any to any via lo0
${fw_add} 210 deny all from any to 127.0.0.0/8 via ${OIF}
${fw_add} 220 deny all from 127.0.0.0/8 to any via ${OIF}
${fw_add} 230 allow all from any to any via ${IIF}


# 外部からのPIP宛を拒否
${fw_add} 300 deny all from any to 10.0.0.0/8 via ${OIF}
${fw_add} 310 deny log all from any to 172.16.0/12 via ${OIF}
${fw_add} 320 deny log all from any to 192.168.0.0/16 via ${OIF}

# RESERVED-1, DHCP auto-config, NET-TEST, MULTICAST(Class D), Class E アドレスへのアクセス拒否
${fw_add} 330 deny all from any to 0.0.0.0/8 via ${OIF}
${fw_add} 340 deny all from any to 169.254.0.0/16 via ${OIF}
${fw_add} 350 deny all from any to 192.0.2.0/24 via ${OIF}
${fw_add} 360 deny all from any to 240.0.0.0/4 via ${OIF}

 

# deny rules
 ${fw_add} deny log tcp from any 137-139,445 to any via ${OIF}
 ${fw_add} deny log tcp from any to any 137-139,445 via ${OIF}
 ${fw_add} deny log udp from any 137-139,445 to any via ${OIF}
 ${fw_add} deny log udp from any to any 137-139,445 via ${OIF}

 

# my network
${fw_add} allow udp from ${my_net} to me 53 keep-state
${fw_add} allow udp from ${my_net} to me 123 keep-state
${fw_add} allow tcp from ${my_net} to me 137-139,445 keep-state
${fw_add} allow tcp from ${my_net} to me via setup
${fw_add} allow all from ${my_net} to me keep-state
${fw_add} allow all from me to ${my_net} keep-state

# outer network
${fw_add} allow tcp from any to me 20 keep-state
${fw_add} allow tcp from any to me 21 keep-state
${fw_add} allow tcp from any to me 22 keep-state
${fw_add} allow tcp from any to me 25 keep-state
${fw_add} allow tcp from any to me 53 keep-state
${fw_add} allow udp from any to me 53 keep-state
${fw_add} allow udp from me to any 53 keep-state
${fw_add} allow tcp from any to me 80 keep-state
${fw_add} allow tcp from any to me 110 keep-state
${fw_add} allow tcp from any to me 443 keep-state
${fw_add} allow tcp from any to me 587 keep-state
${fw_add} allow tcp from any to me 6667 keep-state

# icmp from/to outer network
${fw_add} allow icmp from any to any in icmptypes 0,3,4,8,11,12
${fw_add} allow icmp from any to any out icmptypes 0,3,4,8,11,12

 

# ntp
${fw_add} allow udp from ${my_net} to any 123 keep-state
${fw_add} allow tcp from ${my_net} to any 123 keep-state

# steam
${fw_add} allow tcp from ${my_net} to any 27015-27030 setup
${fw_add} allow udp from ${my_net} to any 27000-27037 keep-state
${fw_add} allow udp from ${my_net} to any 27014-27050 keep-state
${fw_add} allow udp from ${my_net} to any 4380 keep-state

# 許可されている以外の外部からの接続はログ撮って拒否
${fw_add} deny log all from any to any in via ${OIF} setup
# 上記以外の内部から外部へのTCPアクセスの許可
${fw_add} allow tcp from any to any out via ${OIF}
# それ以外は拒否
${fw_add} deny log udp from any to any