Oct 30, 2008

[Linux] apt-get で Debian Unofficial からパッケージを取得する

"apt-cache search" で欲しいパッケージが見つからない。 そんなときに重宝するのが Debian Unofficial だそうだ。 Debian Unofficial では公式サイトにはないパッケージを多数用意してくれているということで "make" が面倒なものぐさ人間には非常に有り難い。

Debian Unofficial is a repository for packages not available within the official Debian repository. It contains packages which are not distributable within Debian due to special license terms as well as packages which are not included in Debian due to political reasons (e.g. alleged possible patent infrigement, binary-only/no sources, or special too restrictive licenses).
Debian Unofficial
http://www.debian-unofficial.org/

Debian Unofficial の設定

/etc/apt/sources.list に以下を追記する。

deb http://ftp.debian-unofficial.org/debian etch main contrib non-free restricted
deb-src http://ftp.debian-unofficial.org/debian etch main contrib non-free restricted

"GPG error" の対処

上記設定を行い、"apt-get update" を行うと、下記の様なエラーが出る。

# apt-get update
    (略)
Fetched 7605kB in 6s (1167kB/s)
Reading package lists... Done
W: GPG error: http://ftp.debian-unofficial.org etch Release: The following signatures
couldn't be verified because the public key is not available: NO_PUBKEY 394D199524C52AC3
W: You may want to run apt-get update to correct these problems
#
このエラーの対処方法は Debian Unofficial の FAQ に記載されている。
Debian Unofficial - 5. Frequently Asked Questions (FAQ)
http://www.debian-unofficial.org/faq.html
・・・が、この FAQ の通りに実行しても直らなかった。 エラーが直った対処方法は以下の通り。

まず、エラーメッセージにある PUBKEY から gpg コマンドを使用してキーを取得する。

# gpg --keyserver subkeys.pgp.net --recv-keys 394D199524C52AC3
gpg: requesting key 24C52AC3 from hkp server subkeys.pgp.net
gpg: key 24C52AC3: public key "Debian Unofficial Archive Automatic Signing Key (2007) " imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1
#
次に取得したキーを apt に登録する。
# gpg --armor --export 394D199524C52AC3 | apt-key add -
OK
#
これで OK。
# apt-get update
    (略)
Ign http://ftp.debian-unofficial.org etch/main Sources/DiffIndex
Ign http://ftp.debian-unofficial.org etch/contrib Sources/DiffIndex
Ign http://ftp.debian-unofficial.org etch/non-free Sources/DiffIndex
Ign http://ftp.debian-unofficial.org etch/restricted Sources/DiffIndex
Hit http://ftp.debian-unofficial.org etch/main Packages
Hit http://ftp.debian-unofficial.org etch/contrib Packages
Hit http://ftp.debian-unofficial.org etch/non-free Packages
Hit http://ftp.debian-unofficial.org etch/restricted Packages
Hit http://ftp.debian-unofficial.org etch/main Sources
Hit http://ftp.debian-unofficial.org etch/contrib Sources
Hit http://ftp.debian-unofficial.org etch/non-free Sources
Hit http://ftp.debian-unofficial.org etch/restricted Sources
Fetched 191B in 2s (82B/s)
Reading package lists... Done
#
ちなみに、apt に登録されたキーは以下で確認できる。
# apt-key list
/etc/apt/trusted.gpg
--------------------
    (略)
pub   1024D/24C52AC3 2007-01-24 [expired: 2008-02-01]
uid                  Debian Unofficial Archive Automatic Signing Key (2007) 
#
それにしても、既に失効済みの 2007 年のキーが必要なのは何故だろう? FAQ では 2008 年のキーをインストールする手順が記載されているのに。

Posted in Linux | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 25, 2008

[PostgreSQL] PostgreSQL の varchar, char は文字数か? バイト数か?

という論争が起きたので(笑)、公式のドキュメントで裏を取ってみた。

PostgreSQL : Documentation : Manuals : PostgreSQL 8.2 : Character Types
http://www.postgresql.org/docs/8.2/interactive/datatype-character.html
SQL defines two primary character types: character varying(n) and character(n), where n is a positive integer. Both of these types can store strings up to n characters in length.
ということで、varchar も char も文字数ということの様だ。 ・・・「バイト数でした」ということになっていたら大変なことになるところだった(^^;

Posted in PostgreSQL | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

[Subversion] Subversion の一日分の更新状況をメール通知する

Subversion の一日分の更新情報をメールで送信するシェルスクリプトを載せておく。

#!/bin/sh

REPOS="/my/svn/repos"
TMPFILE="./todayscommit.tmp"
DATE=`date +"%Y-%m-%d"`
DATE2=`date +"%Y/%m/%d"`
SVNLOOK="/usr/bin/svnlook"
YOUNGEST=`$SVNLOOK youngest "$REPOS"`
MAILADDRESS="me@example.com"
MAILSUBJECT="Today's COMMIT $REPOS ($DATE2)"

echo "Today's commit : $DATE2" > $TMPFILE
echo "" >> $TMPFILE

i=$YOUNGEST
while [ $i -ge 0 ];
do
  REVDATE=`$SVNLOOK date -r $i $REPOS | sed -e "s/[[:blank:]].*//g"`
  if [ $REVDATE = $DATE ];
  then
    echo "***** Revision $i ***************************************" >> $TMPFILE
    $SVNLOOK info -r $i $REPOS >> $TMPFILE
  else
    break 1 
  fi
  i=`expr $i - 1`
done

mail -s "$MAILSUBJECT" "$MAILADDRESS" < $TMPFILE

rm $TMPFILE

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 24, 2008

[Misc] Google, Yahoo からサイトを削除する方法

Google, Yahoo からとあるサイトを削除したので、関連ページをメモしておく。 個人情報が漏れた、とかではない。念のため。

Google のインデックスにコンテンツが登録されないようにする、またはインデックスからコンテンツを削除する方法を教えてください。
http://www.google.com/support/webmasters/bin/answer.py?answer=35301
robots.txt ファイルでサイトのアクセスを管理する
http://www.google.com/support/webmasters/bin/answer.py?answer=40360&cbid=-qq8531usfzqy&src=cb&lev=answer
インターネットからウェブページを削除せず、検索結果に表示されないようにする
http://info.search.yahoo.co.jp/archives/002869.php
サイト単位、ディレクトリ単位での巡回の拒否設定 1
http://info.search.yahoo.co.jp/archives/002849.php
検索結果から非表示にするには(インデックス操作)
http://help.yahoo.co.jp/help/jp/siteexplorer/siteexplorer-17.html

サイト側での対応

全検索エンジンに対してクロールを中止し、アーカイブを削除する様にする設定方法。

/robots.txt を作成する。全検索エンジンにサイト全体を disallow する。

User-agent: *
Disallow: /
HTML ヘッダ内にアーカイブ禁止のメタ情報を埋め込む。
<head>
  <meta name="robots" content="noarchive">
</head>

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 23, 2008

[Subversion] Subversion リポジトリの状態をメール通知する

私の環境で使用している Subversion リポジトリの状態をメールで通知するスクリプトを載せておく。 このスクリプトを cron で一週間に一回実行している。

#!/bin/sh

REPOS="/my/svn/repos"
LOCK="$REPOS/access.lock"
DATE=`date +"%Y/%m/%d %H:%M:%S"`
MAILSUBJECT="Today's SVN $REPOS ($DATE)"
MAILADDRESS="me@example.com"

touch $LOCK

SVNADMIN="/usr/bin/svnadmin"
SVNLOOK="/usr/bin/svnlook"
SVNADMIN_LSLOCKS=`$SVNADMIN lslocks $REPOS`
SVNADMIN_LSTXNS=`$SVNADMIN lstxns $REPOS`
SVNADMIN_VERIFY=`$SVNADMIN verify $REPOS 2>&1`
SVNLOOK_YOUNGEST=`$SVNLOOK youngest $REPOS`
REPOSSIZE=`du -s -k $REPOS | sed -e "s/[[:blank:]].*//"`
STORAGE=`df $REPOS`

mail -s "$MAILSUBJECT" "$MAILADDRESS" << EOF
*** Date ***********************************
$DATE

*** Path of Repository *********************
$REPOS

*** Size of Repository *********************
$REPOSSIZE kb

*** Storage ********************************
$STORAGE

*** Youngest revision **********************
$SVNLOOK_YOUNGEST

*** Locks **********************************
$SVNADMIN_LSLOCKS

*** Transactions ***************************
$SVNADMIN_LSTXNS

*** Verify *********************************
$SVNADMIN_VERIFY

EOF

rm $LOCK
スクリプトから届くメールはこんな感じ。
*** Date ***********************************
2008/10/23 00:00:00

*** Path of Repository *********************
/my/svn/repos

*** Size of Repository *********************
2837148 kb

*** Storage ********************************
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda1            12537386   6283742 126324102   3% /

*** Youngest revision **********************
3092

*** Locks **********************************


*** Transactions ***************************
2990-1
3024-1
3024-2

*** Verify *********************************
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.

  (略)

* Verified revision 3090.
* Verified revision 3091.
* Verified revision 3092.

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 22, 2008

[Subversion] Subversion リポジトリに対する commit を禁止する方法

Subversion のメンテナンスについて触れたので、 ついでに Subversion リポジトリのメンテナンスを実施する際に必要な commit 禁止の設定方法を書いておく。 Subversion リポジトリへの commit 禁止はリポジトリフックの start-commit を使用すると簡単に実現できる。

Version Control with Subversion - start-commit Repository Hooks
http://svnbook.red-bean.com/en/1.5/svn.ref.reposhooks.start-commit.html

start-commit フックの作成

Subversin リポジトリホーム($REPOS) に hooks というリポジトリフックをを格納する場所が用意されているので、その中に start-commit というファイルを作成する。 テンプレートが用意されているので、それをコピーしてもいい。 作成後は実行権限とアクセス権限を適切なものに変更すること。

$REPOS/hooks/start-commit

#!/bin/sh

REPOS="$1"
USER="$2"

if [ -e "$REPOS/commit.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi 
exit 0

commit の禁止方法

$REPOS/commit.lock というファイルを作成するとリポジトリに対する全ての commit が禁止される。

$ touch $REPOS/commit.lock
この状態でクライアントから commit を実行すると、クライアント側には "Service temporary unavailable." というメッセージが表示され commit が失敗する。 $REPOS/commit.lock を削除すれば再度 commit が可能になる。

commit 以外の更新処理

私のところでは commit 以外の更新系処理に関しても同様にリポジトリの保守前にアクセス制限をかけている。 それぞれのリポジトリフックは以下の通り。下記のリポジトリフックを使用した場合、

  • $REPOS/access.lock ・・・ commit, revporp, lock, unlock を全て禁止
  • $REPOS/commit.lock ・・・ commit を禁止
  • $REPOS/revporp.lock ・・・ revprop を禁止
  • $REPOS/lock.lock ・・・ lock を禁止
  • $REPOS/unlock.lock ・・・ unlock を禁止
となる。

$REPOS/hooks/start-commit

#!/bin/sh

REPOS="$1"
USER="$2"

if [ -e "$REPOS/access.lock" -o -e "$REPOS/commit.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi 
exit 0

$REPOS/hooks/pre-revprop-change

#!/bin/sh

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"

if [ -e "$REPOS/access.lock" -o -e "$REPOS/revprop.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi

if [ "$PROPNAME" = "svn:log" ]; then exit 0; fi
exit 1

$REPOS/hooks/pre-lock

#!/bin/sh

REPOS="$1"
FILE="$2"
USER="$3"

if [ -e "$REPOS/access.lock" -o -e "$REPOS/lock.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi

exit 0

$REPOS/hooks/pre-unlock

#!/bin/sh

REPOS="$1"
FILE="$2"
USER="$3"

if [ -e "$REPOS/access.lock" -o -e "$REPOS/unlock.lock" ];
then
  echo "Service temporary unavailable." 1>&2
  exit 1
fi

exit 0

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 21, 2008

[Subversion] Subversion リポジトリのお掃除

Subversion を長く使っていると、Subversion のトランザクションが走っている状態で Eclipse が落ちたりネットワークが切れたりして、トランザクションが未完の状態で切れてしまうことがある。 こういったトランザクションはクライアントからは分からないが、 サーバ側に「死んだトランザクション」として残っている。 「死んだトランザクション」が残っているからといって別段問題があるわけではないのだけれど、 不要なものがサーバに溜まっていくというのも気持ち悪いので、たまにチェックして要らないものを消している。

svnadmin lstxns
http://subversion.bluegate.org/doc/re40.html
リポジトリのお掃除
http://subversion.bluegate.org/doc/ch05s03.html#svn.reposadmin.maint.cleanup

「死んだトランザクション」の対応方法は以下の通り。

「死んだトランザクション」の確認

「死んだトランザクション」は "svnadmin lstxns" コマンドで確認することができる。 以下では Subversion リポジトリが "/my/svn/repos" にあることを前提とする。

まずは「死んだトランザクション」の一覧を取得する。

$ svnadmin lstxns /my/svn/repos
7867-1
5511-1
5511-2
5676-1
$
次に「死んだトランザクション」の内容を確認して削除しても良いものであるか否かを判断する。
$ svnlook info /my/svn/repos --transaction 7867-1
me
2008-09-19 20:14:39 +0900 (Fri, 19 Sep 2008)
0
commit comment
$
死んだトランザクションを一つずつ確認していくのが面倒なので、普通は for で一気に表示する。
$ for i in `svnadmin lstxns /my/svn/repos`; do echo "*** $i"; svnlook info /my/svn/repos --transaction $i; done
*** 7867-1 
me
2008-09-19 20:14:39 +0900 (Fri, 19 Sep 2008)
0
commit comment
*** 5511-1 
colleague
2008-09-04 16:35:53 +0900 (Tue, 04 Sep 2008)
0
commit comment
*** 5511-2 
colleague
2008-09-04 16:42:18 +0900 (Tue, 04 Sep 2008)
0
commit comment
*** 5676-1 
me
2008-09-12 14:29:26 +0900 (Fri, 12 Sep 2008)
61
commit comment

「死んだトランザクション」の削除

削除しても良い「死んだトランザクション」があったら、"svnadmin rmtxns" コマンドで削除する。 "svnadmin rmtxns" を実行する前に Subversion リポジトリに対する外部からのアクセスを禁止しておくこと。

# svnadmin rmtxns /my/svn/repos 5676-1
Transaction '5676-1' removed.
#
"svnadmin rmtxns" コマンドが正常終了したら、本当に削除されたか確認しておく。
$ svnadmin lstxns /my/svn/repos
7867-1
5511-1
5511-2
$

Posted in Subversion | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 20, 2008

[Misc] jQuery で "selected プロパティを設定できませんでした。未定義のエラーです。" エラー

Windows XP SP3 + IE6 の環境で、jQuery を使用して select タグ内の option を操作すると "selected プロパティを設定できませんでした。未定義のエラーです。" というエラーが発生する。 調べてみたところ、jQuery の既知のバグの様だ。 ちなみに、IE7 on Windows XP SP3 や Firefox on Mac OS X では発生しなかった。
この問題に関しては むつらつれづれさんの「jQueryでoption要素を追加した際の諸問題」というエントリに原因から解決策まで書いてある。多謝。

私は

option要素を増やした直後に
$('#target').width();
で回避した。

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 17, 2008

[Linux] GNU date コマンドで来月の日付を取得する方法をメモ

GNU date コマンドで来月の日付を取得する方法をメモしておく。 使用した GNU date コマンドのバージョンは以下の通り。

$ date --version
date (coreutils) 5.2.1
Written by David MacKenzie.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[参考訳]
これはフリーソフトウェアです. コピーの条件についてはソースをお読みください.
市場性及び特定目的適合性の如何によらず, いかなる保証もありません.

1 年後、1 年前などの日付を取得するには "year" もしくは "years" が使用できる。

$ date +"%Y%m%d" --date "1 year"
20091017
$ date +"%Y%m%d" --date "1 years"
20091017
$ date +"%Y%m%d" --date "10 years"
20181017
$ date +"%Y%m%d" --date "1 year ago"
20071017
$ date +"%Y%m%d" --date "1 years ago"
20071017
$ date +"%Y%m%d" --date "10 years ago"
19981017

1 ヶ月後、1 ヶ月前などの日付を取得するには "month" もしくは "months" が使用できる。

$ date +"%Y%m%d" --date "1 month"
20081117
$ date +"%Y%m%d" --date "1 months"
20081117
$ date +"%Y%m%d" --date "10 month"
20090817
$ date +"%Y%m%d" --date "1 month ago"
20080917
$ date +"%Y%m%d" --date "1 months ago"
20080917
$ date +"%Y%m%d" --date "10 month ago"
20071217

1 週間後、1 週間前などの日付を取得するには "week" もしくは "weeks" が使用できる。

$ date +"%Y%m%d" --date "1 week"
20081024
$ date +"%Y%m%d" --date "1 weeks"
20081024
$ date +"%Y%m%d" --date "10 weeks"
20081226
$ date +"%Y%m%d" --date "1 week ago"
20081010
$ date +"%Y%m%d" --date "1 weeks ago"
20081010
$ date +"%Y%m%d" --date "10 weeks ago"
20080808

1 日後、1 日前などの日付を取得するには "day" もしくは "days" が使用できる。

$ date +"%Y%m%d" --date "1 day"
20081018
$ date +"%Y%m%d" --date "1 days"
20081018
$ date +"%Y%m%d" --date "200 days"
20090505
$ date +"%Y%m%d" --date "1 day ago"
20081016
$ date +"%Y%m%d" --date "1 days ago"
20081016
$ date +"%Y%m%d" --date "300 days ago"
20071222

その他(時間、分、秒)

時間であれば "hour", "hours"、分であれば "minute", "minutes"、秒であれば "second", "seconds" で上記と同様のことができる。

`man date` より関連部分を抜粋

date(1)

名前
       date - システムの日付と時刻を表示・設定する

書式
       date  [-uR]  [-d  datestr]  [-f  datefile]  [-r file] [-s datestr] [-I
       [timespec]] [--date=datestr] [--file=datefile] [--iso-8601[=timespec]]
       [--reference=file]  [--set=datestr]  [--rfc-822] [--universal] [--utc]
       [+format] [MMDDhhmm[[CC]YY][.ss]]

       date [--help] [--version]

  (略)

   時刻フィールド
       %H     時 (00..23)
       %I     時 (01..12)
       %k     時 (0..23)
       %l     時 (1..12)
       %M     分 (00..59)
       %p     AM あるいは PM のロケール
       %r     時刻、12 時間 (hh:mm:ss [AP]M)
       %s     1970-01-01 00:00:00 UTC からの秒数 (標準外の拡張)
       %S     秒 (00..60)
       %T     時刻、24 時間 (hh:mm:ss)
       %X     ロケールによる時刻の表現 (%H:%M:%S)
       %Z     タイムゾーン (例 EDT)、あるいはタイムゾーンが決定できないならば
              無し

   日付フィールド
       %a     ロケールの省略形の曜日名 (Sun..Sat)
       %A     ロケールの完全表記の曜日名、可変長 (Sunday..Saturday)
       %b     ロケールの省略形の月名 (Jan..Dec)
       %B     ロケールの完全表記の月名、可変長 (January..December)
       %c     ロケールの日付と時刻 (Sat Nov 04 12:02:33 EST 1989)
       %d     月内通算日数 (01..31)
       %D     日付 (mm/dd/yy)
       %h     %b と同じ
       %j     年内通算日数 (001..366)
       %m     月 (01..12)
       %U     日曜日を週の最初の日とした年内通算週 (00..53)
       %w     週のうちの曜日 (0..6) (0 が日曜日)
       %W     月曜日を週の最初の日とした年内通算週 (00..53)
       %x     ロケールの日付表現 (mm/dd/yy)
       %y     年の最後の 2 つの数字 (00..99)
       %Y     年 (1970...)

  (略)

    -d datestr, --date datestr
              現在の時刻・日付の代わりに、 datestr で指定された時刻・日付を表
              示する。 datestr は普通のフォーマットならだいたいなんでも使うこ
              とができる。月名、タイムゾーン、‘am’ や ‘pm’ なども用いてよい。

  (略)

例
       一昨日の日付を表示するには:
              date --date ´2 days ago´

       3 ヶ月と 1 日後の日付を表示するには:
              date --date ´3 months 1 day´

       今年のクリスマスが年の初めから何日目かを表示するには:
              date --date ´25 Dec´ +%j
  (略)

Posted in Linux | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 14, 2008

[Misc] WEP の完全な終焉

WEP によるセキュリティが誰にでも簡単に破れてしまう時代がやって来た様だ。 一年程前に WEP を 1 分で破ることが出来るという論文が発表されていたが、今回は 10 秒程度で破ることが出来、しかもその作業に特殊な制約が要らないという恐ろしい論文が発表された。 とりあえず前回と今回の論文に関する情報を集めてみた。

2008 の論文 : "現実的なWEPの鍵導出法"

CSS2008において,WEPを一瞬にして解読する方法を提案しました.
http://srv.prof-morii.net/~morii/#CSS20081009
我々の方法を用いることによって,任意のIPパケットを1万パケットから2万パケット収集することによって,WEP鍵(104ビット)を導出することが可能です.数年前からWEPの危険性が指摘されているとはいえ,現在でも多くの組織,機関,企業,それに個人がWEPを利用しています. 無線LANを導入している企業の50%以上がWEPを利用しているという報告 もあります.現実にはWEPが今だ利用されているわけです.この主たる理由は,脆弱性があるとはいえ,実際には瞬時に解くことはできず,それなりの準備と不正アクセスを行う等の能動的な攻撃(行為)が必要であり,簡単には解けなかったのです.我々が提案した方法によって,安価なノートパソコンを用いて,簡単にWEP の104ビット鍵を導出することができるようになりました.

一般的な環境で10秒でWEPを解読できる手法が登場
http://slashdot.jp/security/08/10/14/0726252.shtml
一瞬にして無線LANのWEPを解読する方法がついに登場、まもなく解読プログラムを公開予定
http://gigazine.net/index.php?/news/comments/20081013_wep_morii/

2007 年の論文 : "Breaking 104 bit WEP in less than 60 seconds"

Breaking 104 bit WEP in less than 60 seconds
http://eprint.iacr.org/2007/120.pdf
We demonstrate an active attack on the WEP protocol that is able to recover a 104-bit WEP key using less than 40,000 frames with a success probability of 50%. In order to succeed in 95% of all cases, 85,000 packets are needed. The IV of these packets can be randomly chosen. This is an improvement in the number of required frames by more than an order of magnitude over the best known key-recovery attacks for WEP. On a IEEE 802.11g network, the number of frames required can be ob- tained by re-injection in less than a minute. The required computational effort is approximately 220 RC4 key setups, which on current desktop and laptop CPUs is negligible.

aircrack-ptw
http://www.cdc.informatik.tu-darmstadt.de/aircrack-ptw/
104ビットWEPは1分あれば破れる
http://slashdot.jp/security/07/04/03/2243222.shtml
「104ビットのWEPを60秒足らずで破る」論文が公開
http://www.atmarkit.co.jp/news/200704/05/wep.html
暗号化技術WEP、今度こそ最期を迎えるか
http://www.atmarkit.co.jp/news/200704/09/wep.html

WEP の危険性に関する情報

Stop using WEP encryption!
http://www.sophos.com/blogs/gc/g/2008/10/08/stop-using-wep-encryption/
Tips for securing your wireless connection
http://www.sophos.com/security/best-practice/wi-fi.html
英Sophos、WEPの利用禁止を呼びかけ
http://internet.watch.impress.co.jp/cda/news/2008/10/09/21123.html

さて、ではどうしようか

これで、Nindo DS が 2000 万台以上出荷されている我が国は、国内全土がフリースポット化されたわけだ。 便利な世の中と言えなくもないが、流石に見ず知らずの人間が自宅内 LAN にローカルアクセスしてくるのは避けたい。 とは言え、Nintendo DS、Wii のネットアクセスも捨てがたい、という場合にはどうしたら良いだろうか?

  • Mac アドレスフィルタリングを使う。
  • ルータを 3 台設置する。
    1. ISP に直接接続されるルータ (A)。無線 LAN は使用しない。
    2. 自宅内 LAN 環境を提供するルータ (B)。ルータ A にぶら下がる。無線 LAN は WPA2 などセキュアなものを使用。ルータ C からのパケットは受け付けない。
    3. WEP 環境を提供するルータ (C)。ルータ A にぶら下がる。セキュアではないという前提で利用。
Mac アドレスは詐称できるのでルータ C への侵入は防ぎようがないが、少なくともルータ B のセグメントはかなり安心して使用できる。 現実的にはこの程度が妥協点だろうか。 無線 LAN クライアント毎に接続方式を変えるルータも発売されている様なので、費用対効果を考えればこれを使用するという手もある。 「WEP接続子機からAES/TKIP接続子機にアクセスできないよう制限可能」と書いてあるし。 ただ、ソフトウェアレベルでの制限だろうからどこまで信用できるのか、というのは気になるところではある。 やはりルータを複数台設置する方が個人的には良さそうだ。

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 07, 2008

[Maven] Maven2 の release プラグインにチャレンジ

Maven2 では maven-release-plugin を使用することで簡単にリリース作業を行うことができる。 maven-release-plugin を使うことで、

  • SCM のタグ付け
  • pom.xml の <version> 更新
  • Maven リポジトリへのプロジェクト登録
  • Web サーバへのドキュメント登録

を簡単に行うことができる。

Maven Release Plugin
http://maven.apache.org/plugins/maven-release-plugin/
Technical Project Descriptor
http://maven.apache.org/ref/current/maven-model/maven.html
Technical Settings Descriptor
http://maven.apache.org/ref/current/maven-settings/settings.html

環境

サーバ環境

サーバは "dev.example.com" と表記し、以下の環境であることを前提とする。

  • http://dev.example.com/project/maven で WebDAV が利用可能。
  • http://dev.example.com/project/maven-snapshot で WebDAV が利用可能。
  • http://dev.example.com/project/dist で WebDAV が利用可能。
  • http://dev.example.com/project/svn で Subversion にアクセス可能。

クライアント環境

クライアントの環境はこんな感じ。Maven2 と svn コマンドが動作するだけで良いはず。

$ mvn --version
Maven version: 2.0.9
Java version: 1.5.0_13
OS name: "mac os x" version: "10.4.11" arch: "i386" Family: "unix"
$ svn --version
svn, version 1.5.1 (r32289)
   compiled Aug  6 2008, 13:59:27

Copyright (C) 2000-2008 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
  - handles 'http' scheme
  - handles 'https' scheme
$

設定

pom.xml

$PROJECT_HOME/pom.xml に release 用の設定を行う。

  • scm の設定
  • distributionManagement の設定
  • maven-release-plugin の組み込み
  • (Web DAV を利用する場合は) wagon-webdav の組み込み
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>jp.in-vitro.dummy</groupId>
  <artifactId>dummy</artifactId>
  <version>1.0.1-SNAPSHOT</version>
  <name>Dummy</name>
  <description>Dummy Project</description>
  <packaging>jar</packaging>

  <scm>
    <url>http://dev.example.com/project/svn/Dummy/tags/dummy-1.0.0</url>
    <connection>scm:svn:http://dev.example.com/project/svn/Dummy/tags/dummy-1.0.0</connection>
    <developerConnection>scm:svn:http://dev.example.com/project/svn/Dummy/tags/dummy-1.0.0</developerConnection>
  </scm>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <configuration>
          <username>${scm.username}</username>
          <password>${scm.password}</password>
        </configuration>
      </plugin>
    </plugins>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-webdav</artifactId>
      </extension>
    </extensions>
  </build>

  <distributionManagement>
    <repository>
      <id>project.repository.release</id>
      <name>Project Repository</name>
      <url>dav:http://dev.example.com/project/maven</url>
    </repository>
    <snapshotRepository>
      <id>project.repository.snapshots</id>
      <uniqueVersion>false</uniqueVersion>
      <name>Project Snapshots Repository</name>
      <url>dav:http://dev.example.com/project/maven-snapshot</url>
    </snapshotRepository>
    <site>
      <id>project.website</id>
      <url>dav:http://dev.example.com/project/dist/${pom.version}</url>
    </site>
  </distributionManagement>
</project>

settings.xml の設定

$USER_HOME/.m2/settings.xml に SCM や Web DAV のアカウント情報を記述する。

<?xml version="1.0" encoding="UTF-8" ?>

<settings xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <servers>
    <server>
      <id>project.repository.release</id>
      <username>me</username>
      <password>password</password>
    </server>
    <server>
      <id>project.repository.snapshots</id>
      <username>me</username>
      <password>password</password>
    </server>
    <server>
      <id>project.website</id>
      <username>me</username>
      <password>password</password>
    </server>
  </servers>

  <profiles>
    <profile>
      <id>project</id>
      <properties>
        <scm.username>me</scm.username>
        <scm.password>password</scm.password>
      </properties>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>project</activeProfile>
  </activeProfiles>
</settings>

maven-release-plugin の実行

release:prepare

まずはリリースの準備として release:prepare を実行する。 release:prepare では、"リリースするバージョン"、"SCM に付けるタグ", "次のバージョン" を質問されるので、それぞれ入力する。

$ mvn release:prepare
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'release'.
WAGON_VERSION: 1.0-beta-2
[INFO] ------------------------------------------------------------------------
[INFO] Building Dummy
[INFO]    task-segment: [release:prepare] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [release:prepare]
[INFO] Verifying that there are no local modifications...
[INFO] Executing: svn --username me --password ***** --non-interactive status
[INFO] Working directory: /Users/me/Documents/Private/000-workspace/Dummy
[INFO] Checking dependencies and plugins for snapshots ...
What is the release version for "Dummy"? (jp.in-vitro.dummy:dummy) 1.0.1: : 
What is SCM release tag or label for "Dummy"? (jp.in-vitro.dummy:dummy) dummy-1.0.1: : 
What is the new development version for "Dummy"? (jp.in-vitro.dummy:dummy) 1.0.2-SNAPSHOT: : 
[INFO] Transforming 'Dummy'...
[INFO] Not generating release POMs
[INFO] Executing goals 'clean verify'...
  (略)
[INFO] Release preparation complete.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17 seconds
[INFO] Finished at: Fri Oct 03 18:20:48 JST 2008
[INFO] Final Memory: 6M/12M
[INFO] ------------------------------------------------------------------------
$

release:perform

release:prepare が正常終了したら、release:perform を実行する。 release:perform を実行すると、SCM へのタグ付けやリポジトリへの登録、バージョンの更新などのリリース処理が行われる。

$ mvn release:perform
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'release'.
WAGON_VERSION: 1.0-beta-2
[INFO] ------------------------------------------------------------------------
[INFO] Building Dummy
[INFO]    task-segment: [release:perform] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [release:perform]
[INFO] Checking out the project to perform the release ...
[INFO] Executing: svn --username me --password ***** --non-interactive checkout http://dev.example.com/project/svn/Dummy/tags/dummy-1.0.1 checkout
[INFO] Working directory: /Users/me/Documents/Private/000-workspace/Dummy/target
[INFO] Executing goals 'deploy site-deploy'...
[INFO] Executing: mvn deploy site-deploy --no-plugin-updates -P project -DperformRelease=true -f pom.xml
[INFO] Scanning for projects...
        WAGON_VERSION: 1.0-beta-2
        [INFO] ------------------------------------------------------------------------
        [INFO] Building Dummy
        [INFO]    task-segment: [deploy, site-deploy]
        [INFO] ------------------------------------------------------------------------
        [INFO] [resources:resources]
        [INFO] Using default encoding to copy filtered resources.
        [INFO] [compiler:compile]
  (略)
        Transfer finished. 1687 bytes copied in 0.025 seconds
        http://dev.example.com/project/dist/1.0.1 - Session: Disconnecting  
        http://dev.example.com/project/dist/1.0.1 - Session: Disconnected
        [INFO] ------------------------------------------------------------------------
        [INFO] BUILD SUCCESSFUL
        [INFO] ------------------------------------------------------------------------
        [INFO] Total time: 1 minute 2 seconds
        [INFO] Finished at: Fri Oct 03 18:22:01 JST 2008
        [INFO] Final Memory: 39M/63M
        [INFO] ------------------------------------------------------------------------
        [INFO] Cleaning up after release...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 8 seconds
[INFO] Finished at: Fri Oct 03 18:22:02 JST 2008
[INFO] Final Memory: 6M/12M
[INFO] ------------------------------------------------------------------------
$ 

Posted in Maven | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 06, 2008

Oct 05, 2008

[Apple] JAD を Mac OS X にインストール

Mac OS X に JAD をインストールしたときのメモ。 ・・・解凍して移動するだけなのだけれど。

Jad - the fast JAva Decompiler
http://www.kpdus.com/jad.html

JAD のインストール

$ sudo mv ./jad /usr/bin/
Password:
$ sudo chmod 755 /usr/bin/jad
$ jad
Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov (jad@kpdus.com).
Usage:    jad [option(s)] 
Options: -a       - generate JVM instructions as comments (annotate)
         -af      - output fully qualified names when annotating
         -b       - generate redundant braces (braces)
  (略)
         -t       - use tabs instead of spaces for indentation
         -v       - show method names while decompiling
$ 

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 04, 2008

[Misc] Eclipse 3.5 メモ

気付いたら Eclipse 3.5 も既に M2 が出ていた。 M2 なので乗り換えるわけにはいかないが、とりあえずどういう機能が追加されているのか確認してみた。

eclipse project downloads
http://download.eclipse.org/eclipse/downloads/
Eclipse 3.5 M1 - New and Noteworthy
http://download.eclipse.org/eclipse/downloads/drops/S-3.5M1-200808071402/3.5M1/eclipse-news-M1.html
Eclipse 3.5 M2 - New and Noteworthy
http://download.eclipse.org/eclipse/downloads/drops/S-3.5M2-200809180100/eclipse-news-M2.html

今のところ、個人的に嬉しい機能は特に追加されていないな。

試しにダウンロードしてみたら、3.5M2 では Subclipse がインストールできなかった。

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 03, 2008

[Apple] Darwine メモ

Darwine は Wine を Mac OS X 用に port したもの。 いい加減秀丸エディタを使うためだけに Parallels & Windows XP を起動するのに疲れたので、Darwine で秀丸エディタが使えないか試してみた。

Darwine
http://darwine.sourceforge.net/
Darwine Builds for OS X
http://www.kronenberg.org/darwine/

Darwine のインストール

Sourceforge の Darwine より Darwine Builds for OS X の方がバージョンが新しいので、そちらを使ってみる。 今回使用したのは Darwine-x86-1.1.5.dmg。 インストール自体は非常に簡単。 dmg をマウントして Darwine と TRIX.app を /Applications にドラッグするだけ。
[Darwine 01]

フォントのインストール

Darwine で使用するフォントをインストールする。 TRIX を使うとフォントを簡単にインストールすることができる。
[TRIX]

フォントを手動でインストールする場合は /Applications/Darwine/Wine.bundle/Contents/share/wine/fonts/ にフォントをコピーすれば良い。

秀丸エディタの実行

/Applications/Darwine/WineHelper.app に hidemaru.exe をドロップすると秀丸エディタが起動する。
[秀丸エディタが起動した]

起動したのは良いのだけれど、日本語入力が出来ない。 どうやら Darwine ではことえりや ATOK での入力が出来ない様だ。 ・・・Darwine の今後のバージョンアップに期待しつつ Parallels を使うしかないな。 秀丸エディタの Mac OS X 版が出ないかな。

Posted in Apple | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 02, 2008

Oct 01, 2008

[Misc] FireFox のアドオンをメモ

FireFox で重宝しているアドオンをメモしておく。

Firebug
Web Development Evolved.
https://addons.mozilla.org/ja/firefox/addon/1843
Flashblock
Replaces Flash objects with a button you can click to view them.
https://addons.mozilla.org/ja/firefox/addon/433
Live HTTP headers
ウェブページとブラウジング中の HTTP ヘッダを表示します。
https://addons.mozilla.org/ja/firefox/addon/3829
NoScript
Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site).
https://addons.mozilla.org/ja/firefox/addon/722
SearchStatus
Display the Google PageRank and Alexa ranking with search-related tools.
https://addons.mozilla.org/ja/firefox/addon/321
Selenium IDE
Record, edit and play Selenium tests.
https://addons.mozilla.org/ja/firefox/addon/2079
Server Switcher
開発と本番のサーバを切り替えます。
https://addons.mozilla.org/ja/firefox/addon/2409
User Agent Switcher
Adds a menu and a toolbar button to switch the user agent of the browser.
https://addons.mozilla.org/ja/firefox/addon/59
Web Developer
Adds a menu and a toolbar with various web developer tools.
https://addons.mozilla.org/ja/firefox/addon/60

Posted in Misc | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |