2013-12-16
WEBのメールアドレスを一括で置換
grep -r "古いアドレス" ./public_html/*.htm*|sed 's/://'|awk '{ print $1 }'|sort -u|xargs sed -e 's/古いアドレス/新しいアドレス/g' -i
2013-11-22
ブログへソース等を張り付ける為に変換するやつ
要するに下のような感じに整形するものw
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>タグ変換</title>
<script src="http://www.google.com/jsapi"></script>
<script>google.load("jquery", "1.7.0");</script>
<script>
function onButtonClick()
{
ORGobj=document.getElementById('uSource');
if (ORGobj.value != "") {
obj=document.getElementById('uTags');
t=new String();
t=ORGobj.value;
t=t.replace(/\</g, '<');
t=t.replace(/\>/g, '>');
t=t.replace(/\n/g, '<br/>');
t="<!-- コード -->\n"
+"<div style=\"background: #e0e0e0; margin:5px 0 5px 10px; padding:0px 0px 0px 20px;\">"
+"\n<pre><code>\n"
+t+"\n"
+"</code></pre>\n</div>\n<!-- EOF コード -->\n";
obj.value=t;
} else {
window.alert('変換元のコードを左のボックスへ入力して下さい');
}
}
function onHenkanBtnClick()
{
onButtonClick();
t=new String();
t=document.getElementById('uTags').value;
document.open();
document.write(t);
document.close();
}
function onCopyBtnClick()
{
var obj=document.getElementById('uTags');
obj.select();
if (document.execCommand("copy") == false) {
window.alert("このブラウザではコピー出来ませんCtrl+Cキーでコピーして下さい");
}
}
</script>
</head>
<body>
<form>
<textarea id="uSource" rows="25" cols="40"></textarea>
<input type="button" value="変換" onclick="onButtonClick()"/>
<textarea id="uTags" rows="25" cols="40"></textarea>
<input type="button" value="CopyToClipboard" onclick="onCopyBtnClick()"/>
<input type="hidden" value="変換プレビュー" onclick="onHenkanBtnClick()"/>
</form>
</body>
</html>
2013-11-21
ubuntu nginx設定
インストール
# aptitude install nginx ホームディレクトリの設定はapache等と同じ感じで/etc/nginx/sites-available/ 以下に設定を記述又は変更して
/etc/nginx/sites-enabled/ 以下に シンボリックリンク(ln -s)を作成する
PHPを動かす
aptitude install php5-fpm nginxの設定(例えば/etc/nginx/sites-enabled/default)にて
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
}
2013-11-15
2013-11-11
2013-11-09
ログからホワイトリスト用のメールアドレス抽出
サーバのコマンドでログから2回以上送信したアドレスを抽出してみる
zcat -f /var/log/mail.info*|grep "to"|grep "queued"|grep -v "<|@"|grep -vE "(自ドメイン|複数あれば|複数あれば)"|awk '{ if(match($0, /<|>/)) print substr($7, 2, length($7)-6); }'|sort|uniq -c|awk '{ if($1 > 3) print $2}'
2013-10-01
LazarusでStringGridへデータを読み込んでみる
やってる事はDelphiとほとんど同じ
ただしDelphiだとある一定以上のエディションでなければ接続できないPostgreSQLへLazarusだと難なく接続可能
●コンポーネント配置
●ボタンのクリックイベントへ下記のコードを記述
DBGridを利用すればこういった記述すら不要になる
とは言いつつ実際にはコードが必要になる場合も多々あるので一応テストがてら書いてみた
ただしDelphiだとある一定以上のエディションでなければ接続できないPostgreSQLへLazarusだと難なく接続可能
●コンポーネント配置
- PQConnectionを配置、プロパティを適切に設定
- SQLQueryを配置、プロパティのSQLを記述
- Transactionを配置
- ロードアクション用のボタンを配置
- StringGridを配置
●ボタンのクリックイベントへ下記のコードを記述
procedure TForm1.Button1Click(Sender: TObject);
var
row:integer;
begin
// グリッド幅調整
self.StringGrid1.ColWidths[2]:=200;
self.StringGrid1.ColWidths[3]:=200;
// SQLを実行して結果を読み込みグリッドへ追加
try
self.SQLQuery1.Open;
// 件数を取得してグリッドを広げる
self.SQLQuery1.Last;
self.StringGrid1.RowCount:= self.SQLQuery1.RecordCount+1;
// 先頭に戻して読み込み開始
self.SQLQuery1.First;
row:=1;
while self.SQLQuery1.EOF=FALSE do
begin
self.StringGrid1.Cells[1,row]:=self.SQLQuery1.FieldByName('商品コード').AsString;
self.StringGrid1.Cells[2,row]:=self.SQLQuery1.FieldByName('商品名1').AsString;
self.StringGrid1.Cells[3,row]:=self.SQLQuery1.FieldByName('商品名2_1').AsString;
self.SQLQuery1.Next;
inc(row);
end;
finally
self.SQLQuery1.Close;
end;
end;
DBGridを利用すればこういった記述すら不要になる
とは言いつつ実際にはコードが必要になる場合も多々あるので一応テストがてら書いてみた
2013-09-24
RAD Studio 高い、貧乏なので買えません(´・ω・`) 仕方なくFreePascal(Lazarus)を使うの巻
年内に何度もアップグレードして毎回5万とか7万とか取られたらやってられん
って事で フリーで自由に使える FreePascalへGO!
前から存在も知ってたし時々インストールして使おうとしたけどどうもバギーで諦めてた
今回のエンバカデロの仕打ちにたまりかねて再びインストールしてみると・・・・
結構使える!w
メニュー等を日本語にするには Tool の Optionから Environment ツリーの下の Desktop の項目で Languageで Japanese [ja] を選択してIDEを再起動するとOK
取りあえず PostgreSQLへの接続をテストしてみた
PQConnection1を貼り付け
SQLQuery1を貼り付け Databaseに PQConnection1を設定
SQLTransaction1を貼り付け Databaseに PQConnection1を設定
Datasource1を張り付けて DataSetに SQLQuery1を設定
DBGrid1を張り付けてDatasourceに Datasource1を設定
PQConnection1のHostnameを指定(IP)ポートが変更してある場合は、Paramsに port=1115432 等とポート番号を指定、Connected を Trueにしてみる
SQLQuery1 SQL へ select 等の参照用SQLを記述して同ウインドウの 緑三角の再生ボタン?をクリックすると項目がツラツラと表示される(text=メモが (memo)と出るのは何とかしないと・・・、SQL側で varchar でキャストするか?) あと、取り合えずはActiveをTrueにしないとダメか
後は適当にゴニョゴニョすればOKなはず
それとバイナリ―にデバッグ情報が含まれてて超巨大なので stripコマンドで小さくすると良い
(C:\lazarus\fpc\2.6.2\bin\i386-win32\strip.exeのショートカットを作成しておいてexeをD&DでOK)
追記:
やはり(MEMO)の表示は select文の段階で varcharにキャストしてうまくいった
具体的には select code, itemname1::varchar , itemname2::varchar from hoge
といった感じで as で項目名の再定義は不要っぽい(逆にエラーになった)
select文でかなり制限があるか?
って事で フリーで自由に使える FreePascalへGO!
前から存在も知ってたし時々インストールして使おうとしたけどどうもバギーで諦めてた
今回のエンバカデロの仕打ちにたまりかねて再びインストールしてみると・・・・
結構使える!w
メニュー等を日本語にするには Tool の Optionから Environment ツリーの下の Desktop の項目で Languageで Japanese [ja] を選択してIDEを再起動するとOK
取りあえず PostgreSQLへの接続をテストしてみた
PQConnection1を貼り付け
SQLQuery1を貼り付け Databaseに PQConnection1を設定
SQLTransaction1を貼り付け Databaseに PQConnection1を設定
Datasource1を張り付けて DataSetに SQLQuery1を設定
DBGrid1を張り付けてDatasourceに Datasource1を設定
PQConnection1のHostnameを指定(IP)ポートが変更してある場合は、Paramsに port=1115432 等とポート番号を指定、Connected を Trueにしてみる
SQLQuery1 SQL へ select 等の参照用SQLを記述して同ウインドウの 緑三角の再生ボタン?をクリックすると項目がツラツラと表示される(text=メモが (memo)と出るのは何とかしないと・・・、SQL側で varchar でキャストするか?) あと、取り合えずはActiveをTrueにしないとダメか
後は適当にゴニョゴニョすればOKなはず
それとバイナリ―にデバッグ情報が含まれてて超巨大なので stripコマンドで小さくすると良い
(C:\lazarus\fpc\2.6.2\bin\i386-win32\strip.exeのショートカットを作成しておいてexeをD&DでOK)
追記:
やはり(MEMO)の表示は select文の段階で varcharにキャストしてうまくいった
具体的には select code, itemname1::varchar , itemname2::varchar from hoge
といった感じで as で項目名の再定義は不要っぽい(逆にエラーになった)
select文でかなり制限があるか?
2013-08-16
ベイカ爆釣中
夏のベイカ爆釣です
基本的に餌木は自分で作成したもので釣ってます
バルサだと量産体制が無理なのでバルサで作って良好だったものをシリコンで型取してレジンキャストを使って複製していますが比重の関係と言うかバランスがバルサと違い取りにくいです
基本的に餌木の頭部が前傾で沈み、カンナの部分が浮いた尻上がりなスタイルがベストだと思います、つまり、カンナ(針)で重くなった側が浮く必要があります。
餌木の構造上、浮かないといけない尻の部分が細くなっており全体の比重が軽いバルサ等で作った場合とレジンで型取りした場合では根本的な違いがあります
即ち、バルサで作ったものは、シンカーで無理やり沈めるようにする為に、逆に尻が浮き過ぎないように調整します、レジンで作る場合は逆に放っておくと沈むので如何に浮かせるかが重要となります。
根本的な解決方法は発泡ウレタンか何かを使えば良いのですが、安いものがネットで販売されていないので家にある材料でなんとかってます(普通は家に材料がないだろw)
ここ10年ほどの私の方法の主流は、
1の方法は運良く中心に空洞が来れば良いのですが、端に寄っていると失敗してしまいます
2の方法はタイ焼き方式の型だと餃子の耳のように最初からはみ出した状態を作ることでうまく作ることが出来ますが、強度の面で不安が残ります、特にアイやシンカーやカンナ部分が薄いとグラつき感があります。
3の方法は最近編み出した?方法で、流し込み式の型の出口部分に餌木の尻が来るようにしておき、後ろから注射器で空気を入れます、この注入時間が微妙で速すぎるとペラペラになり弱くなります
4の方法は水のみでも可能ですが、ポリウレタン系のレジンだと発泡します、但し強度がかなり下がります
最近、中空用のエポック 中空球体 Gバルーンなるものがある事を知り今度試してみようと思っています
基本的には2液混合の発泡ウレタンが良いのだと思いますが、今まで使った事もありませんしリーズナブルなものが何処で購入できるのかも分かりません
追記: ウレタン技研 GKキャストケミカルウッドタイプ 1kg GK1008 はどうか? タルク入りで比重1程度なのか?比重が0.8程度だとカンナ分を吸収できない可能性もあるし、作るモノが小さいだけに流し込みの流動性も気になる
基本的に餌木は自分で作成したもので釣ってます
バルサだと量産体制が無理なのでバルサで作って良好だったものをシリコンで型取してレジンキャストを使って複製していますが比重の関係と言うかバランスがバルサと違い取りにくいです
基本的に餌木の頭部が前傾で沈み、カンナの部分が浮いた尻上がりなスタイルがベストだと思います、つまり、カンナ(針)で重くなった側が浮く必要があります。
餌木の構造上、浮かないといけない尻の部分が細くなっており全体の比重が軽いバルサ等で作った場合とレジンで型取りした場合では根本的な違いがあります
即ち、バルサで作ったものは、シンカーで無理やり沈めるようにする為に、逆に尻が浮き過ぎないように調整します、レジンで作る場合は逆に放っておくと沈むので如何に浮かせるかが重要となります。
根本的な解決方法は発泡ウレタンか何かを使えば良いのですが、安いものがネットで販売されていないので家にある材料でなんとかってます(普通は家に材料がないだろw)
ここ10年ほどの私の方法の主流は、
- シリコン型に前もってウレタン等のフワフワを仕込んでおきレジンを流し込む方法
- 中空にする為にレジンを流した後で型を回転させて中を空洞にする
- レジンを流した後にほどよいタイミングで注射器を使って中に空気を入れる
- 水性アクリルニスを数滴混合
1の方法は運良く中心に空洞が来れば良いのですが、端に寄っていると失敗してしまいます
2の方法はタイ焼き方式の型だと餃子の耳のように最初からはみ出した状態を作ることでうまく作ることが出来ますが、強度の面で不安が残ります、特にアイやシンカーやカンナ部分が薄いとグラつき感があります。
3の方法は最近編み出した?方法で、流し込み式の型の出口部分に餌木の尻が来るようにしておき、後ろから注射器で空気を入れます、この注入時間が微妙で速すぎるとペラペラになり弱くなります
4の方法は水のみでも可能ですが、ポリウレタン系のレジンだと発泡します、但し強度がかなり下がります
最近、中空用のエポック 中空球体 Gバルーンなるものがある事を知り今度試してみようと思っています
基本的には2液混合の発泡ウレタンが良いのだと思いますが、今まで使った事もありませんしリーズナブルなものが何処で購入できるのかも分かりません
追記: ウレタン技研 GKキャストケミカルウッドタイプ 1kg GK1008 はどうか? タルク入りで比重1程度なのか?比重が0.8程度だとカンナ分を吸収できない可能性もあるし、作るモノが小さいだけに流し込みの流動性も気になる
2013-08-07
バックアップ用シェルの作成
AサーバのSAMBAディレクトリを旧サーバでるBサーバへ自動バックアップするシェル
WakeOnLANで夜間に旧サーバを自動起動しバックアップを行い
終了時にsshで相手へログインしてシャットダウンして終わる
スクリプトはAサーバ側で深夜にCRONで起動する
エラーが出たらメールで通知する(/script/ruby2mail.rb)
スクリプト中の 192.168.1.◆◆◆ はバックアップ先の旧サーバのIPアドレス
--------------------------------------------------------------------------------
#! /bin/bash
# 排他実行用ロック
LOCKED="/tmp/backup.lock"
#エラーメール送信先
address="****@gmail.com"
subject="[SERVER]ファイルサーバ"
cd /script/
YOUBI=$(date '+%w') # 曜日取得
#------------------------------------------------------------------------------#
# 実行前に排他処理を行う
#------------------------------------------------------------------------------#
trap 'echo "trapped."; rmdir $LOCKED; exit 1' 1 2 3 15
CNT=1
until mkdir $LOCKED 2> /dev/null; do
sleep 5
CNT=`expr $CNT + 1`
if [ $CNT -gt 3 ]
then
echo "LOCK!"
#メール送信
/script/ruby2mail.rb "バックアップ処理 二重起動ロックにて実行中止"
exit 0;
fi
done
# 土曜深夜(日曜)と日曜深夜(月曜)はネットワークバックアップは行いません
if [ $YOUBI -ge 2 ]; then
# 旧住宅部サーバの起動
# to 192.168.1.◆◆◆ backupfsへのバックアップ
wakeonlan -i 192.168.1.255 00:01:80:77:b3:5f
sleep 160
PINGCHK=$(ping -c 1 192.168.1.◆◆◆|grep "Unreachable")
for PINGS in $PINGCHK
do
echo $PINGS
if [ ${PINGS} = "Unreachable" ]
then
echo "バックアップサーバ起動を確認できませんでした"
#メール送信
/script/ruby2mail.rb "192.168.1.◆◆◆が起動していません(処理中断)"
rmdir $LOCKED
exit 0;
fi
done
echo "ネットワークバックアップ開始"
# ※昨日のバックアップを旧サーバへバックアップします
rsync -Hazrtpog --progress -delete -e ssh /samba/backup/ 192.168.1.◆◆◆:/samba/backup1/
echo "ネットワークバックアップ終了"
echo "旧サーバシャットダウン"
ssh 192.168.1.◆◆◆ "shutdown -h now"
fi
# 内部バックアップ
echo "内部バックアップ開始"
rsync -Ha --progress -delete /samba/share /samba/backup
echo "内部バックアップ終了"
# ロック解除
rmdir $LOCKED
# EOF
WakeOnLANで夜間に旧サーバを自動起動しバックアップを行い
終了時にsshで相手へログインしてシャットダウンして終わる
スクリプトはAサーバ側で深夜にCRONで起動する
エラーが出たらメールで通知する(/script/ruby2mail.rb)
スクリプト中の 192.168.1.◆◆◆ はバックアップ先の旧サーバのIPアドレス
--------------------------------------------------------------------------------
#! /bin/bash
# 排他実行用ロック
LOCKED="/tmp/backup.lock"
#エラーメール送信先
address="****@gmail.com"
subject="[SERVER]ファイルサーバ"
cd /script/
YOUBI=$(date '+%w') # 曜日取得
#------------------------------------------------------------------------------#
# 実行前に排他処理を行う
#------------------------------------------------------------------------------#
trap 'echo "trapped."; rmdir $LOCKED; exit 1' 1 2 3 15
CNT=1
until mkdir $LOCKED 2> /dev/null; do
sleep 5
CNT=`expr $CNT + 1`
if [ $CNT -gt 3 ]
then
echo "LOCK!"
#メール送信
/script/ruby2mail.rb "バックアップ処理 二重起動ロックにて実行中止"
exit 0;
fi
done
# 土曜深夜(日曜)と日曜深夜(月曜)はネットワークバックアップは行いません
if [ $YOUBI -ge 2 ]; then
# 旧住宅部サーバの起動
# to 192.168.1.◆◆◆ backupfsへのバックアップ
wakeonlan -i 192.168.1.255 00:01:80:77:b3:5f
sleep 160
PINGCHK=$(ping -c 1 192.168.1.◆◆◆|grep "Unreachable")
for PINGS in $PINGCHK
do
echo $PINGS
if [ ${PINGS} = "Unreachable" ]
then
echo "バックアップサーバ起動を確認できませんでした"
#メール送信
/script/ruby2mail.rb "192.168.1.◆◆◆が起動していません(処理中断)"
rmdir $LOCKED
exit 0;
fi
done
echo "ネットワークバックアップ開始"
# ※昨日のバックアップを旧サーバへバックアップします
rsync -Hazrtpog --progress -delete -e ssh /samba/backup/ 192.168.1.◆◆◆:/samba/backup1/
echo "ネットワークバックアップ終了"
echo "旧サーバシャットダウン"
ssh 192.168.1.◆◆◆ "shutdown -h now"
fi
# 内部バックアップ
echo "内部バックアップ開始"
rsync -Ha --progress -delete /samba/share /samba/backup
echo "内部バックアップ終了"
# ロック解除
rmdir $LOCKED
# EOF
2013-02-06
登録:
投稿 (Atom)