2011年6月26日日曜日

Office2007セキュリティの警告 マクロが無効にされました

セキュリティの警告 このファイルには暗号化されたマクロが含まれていますが、マクロを検査するウイルス対策プログラムがインストールされていないため無効にされています。マクロを実行するには、暗号化を解除するか、ファイルのアクセス制限を解除してください。


1.2007 Office プログラムを終了します。
2.[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、regedit と入力して [OK] をクリックします。
3.次のレジストリ サブキーを見つけて、クリックします。Excel以外なら対象するキーがある
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security
4.[編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。ExcelBypassEncryptedMacroScanをキーの名前にする
5.作成した DWORD 値を右クリックし、[修正] をクリックし、[値のデータ] ボックスに 1 と入力し、[OK] をクリックします。

以上

2011年6月23日木曜日

shellのいろいろ基礎

常識かもしれないが、知らないと大変

変数とコマンド

#!/bin/bash
#変数に値を入れるとき=の前後スペースあってはならない
NAME="jacky"

#変数に値を入れるとき、$はいらない、変数を参照するときは$をつく
echo $NAME

#こういう書き方もあり
echo ${NAME}

#コマンドを使うときは`command`、または$(command)
echo `date "+%Y/%m/%d %H:%M:%S"` hello! $NAME


配列

#配列の一括定義
TODO=( lunch work milk walk )

#配列の個別定義
TODO[4]=5

#配列要素のfor..in..do
echo ${TODO[@]}
for o in ${TODO[@]}
do
echo $o
done


if文、case文、比較

#文字列の比較には、=の前後スペース無くてはならない
#また""を付けた方がいいです。unary operator expectedというエラーがでるので
if [ "${TODO[1]}" = "work" ]; then
echo "have to work"
elif [ "${TODO[1]}" = "play" ]; then
echo "can go play"
else
echo "have a rest"
fi

#数値の比較は=ではない
if [ ${TODO[4]} -gt 3 ]; then
echo "5 is greater then 3"
else
echo "unpossible"
fi

#ORなど論理計算
if [ "a" = "b" -o 1 -lt 2 ];
then
echo "ok"
else
echo "ng"
fi

#case文、第一引数
case $1 in
"help")
echo "help me!"
;;
"bye")
echo "byebye!"
;;
"")
echo "enter something!"
;;
*)
echo "anything else"
;;
esac


SQL実行

MYSQL_USER="user"
MYSQL_PASS="pass"
MYSQL_DB="test"
MYSQL_HOST="localhost"

#select * from...にすると、*がカレントディレクトリのファイル名になってしまうのでご注意
RUNME="select id,name from funds limit 10"
echo $RUNME|mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB


実行後結果

# ./test.sh help
jacky
jacky
2011/06/23 10:59:48 hello! jacky
lunch work milk walk 5
lunch
work
milk
walk
5
have to work
5 is greater then 3
ok
help me!
id name
1 ?????????
2 ?????????
3 ?????????
4 ?????????
5 ?????????
6 ?????????
7 ?????????
8 ?????????
9 ?????????
10 ?????????

2011年6月22日水曜日

shellのYYYYMMフォマットチェック、正確性はチェックしないよ!

もし第4引数がYYYYMMの形、且つ先月末以降に指定した場合はエラー
指定してなければ、先月末をデフォルトに設定

if [[ $4 =~ "^(19|20)[0-9]{2}(0[1-9]|1[0-2])$" ]]; then
YYYYMM=$4
if [[ $YYYYMM -ge $(date '+%Y%m') ]]; then
echo "先月以前の日付で指定してください。"
exit
fi
else
YYYYMM=$(date -d"1 month ago" "+%Y%m")
fi

2011年6月15日水曜日

javaのビルド 1.6.0_10以降のcrossdomain問題

JAVAのバージョンを1.6.0_7から1.6.0_10にアップデートしたら、java appletに怒られた。

java.security.AccessControlException: access denied (java.net.SocketPermission 123.124.125.126:80 connect,resolve)

いろいろ調べた結果、DNSの逆引き設定で解決できそうです。
とりあえずhostsファイルで試してみました、下記を追加してうまく行った:

123.124.125.126 www.youtsite.com.auth.126.125.124.123.in-addr.arpa


DNSの設定が難しい場合、crossdomain.xmlを追加する手もあります
ファイルの中身はこれ

<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

このファイルの置場所は基本DocumentRootで良いが、applet側で指定することも一応できるらしい

<applet id="app"
code="TestAppletCD.class"
codebase="./applet/classes"
width=200 height=200>
<PARAM name="java_arguments" value="-Djnlp.altCrossDomainXMLFiles=http://xxx.xxx.xxx.xxx/applet/crossdomain.xml">
</applet>