Dec 26, 2009

[Cloud] "Cloud Computing" の定義

NIST(アメリカ国立標準技術研究所) による Cloud Computing の定義をメモ。 下記はかなり端折った意訳なので、必要に応じて原文を参照のこと。

NIST - cloud computing
http://www.csrc.nist.gov/groups/SNS/cloud-computing/index.html

"Cloud Computing" の特徴

On-demand self-service
コンシューマは必要なときに必要なだけのコンピュータ資源を人を介した申込み無しでサービスの提供を受けることができる
Broad network access
様々なプラットフォーム(携帯電話、ラップトップ、PDA 等)からネットワークを介して利用できる
Resource pooling
サービス提供者のコンピュータ資源は複数の利用者による使用に備えてプールされ、要望に応じて動的に利用者へアサインされる。
Rapid elasticity
コンピュータ資源は柔軟に提供され、スケールアウト・スケールインを容易に実現できる
Measured Service
クラウドシステムは自身の監視により自動的に制御・最適化される。

サービス形態

Cloud Software as a Service (SaaS)
サービス提供者の資源上で実行されるサービス提供者のアプリケーションを利用者が利用する形態。
Cloud Platform as a Service (PaaS)
サービス提供者の提供する開発言語・ツールを使用して利用者が開発したアプリケーションをサービス提供者の資源上で実行する形態。
Cloud Intrastructure as a Service (IaaS)
利用者が OS を含む任意のソフトウェアをサービス提供者の資源上で実行可能な形態。

運用形態

Private cloud
クラウド基盤は特定の組織専用として運用される。
Community cloud
クラウド基盤は複数の組織共用として運用され、これら組織に共通の目標を持つコミュニティをサポートする。
Public cloud
クラウド基盤はクラウドサービス提供者により運用され、様々な利用者により利用される。
Hybrid cloud
Private cloud, Community cloud, Public cloud の複合。

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

Dec 25, 2009

Dec 24, 2009

[Maven] Maven 2.x をオフラインで利用する方法

Maven 2.x をオフラインで利用する方法をメモ。

オフライン作業の準備

Maven は基本的にオンラインが前提なので、処理に必要なプラグインや依存するライブラリは必要になった都度ダウンロードを行う。 当然オフライン状態ではダウンロードは無理なので、オンライン状態で一度も実行していない処理をオフラインで実行すると必要なプラグインや依存するライブラリをダウンロードできず処理に失敗する可能性がある。 これを回避するため、Maven Dependency Plugin を使用して必要なプラグインや依存するライブラリを事前に全てダウンロードしておくと良い。

Maven Dependency Plugin - dependency:go-offline
http://maven.apache.org/plugins/maven-dependency-plugin/go-offline-mojo.html
$ mvn dependency:go-offline

一時的にオフラインモードにする

Maven を一時的にオフラインモードで使用する場合は起動時引数でオフラインモードを指定する。

$ mvn --offline package
もしくは
$ mvn -o package

永続的にオフラインモードにする

settings.xml でオフラインモードを指定すると、永続的にオフラインモードとすることができる。

Settings Reference
http://maven.apache.org/settings.html#Simple_Values
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <offline/>
</settings>

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

Dec 23, 2009

[Apple] Mac OS X の JDK

2009/12/22 現在で最新のもの。

for Mac OS X 10.6 (1.6.0_17)
http://support.apple.com/downloads/Java_for_Mac_OS_X_10_6_Update_1
for Mac OS X 10.5 (1.6.0_17, 1.5.0_22)
http://support.apple.com/downloads/Java_for_Mac_OS_X_10_5_Update_6
for Mac OS X 10.4 (1.5.0_07, 1.4.2_12)
http://support.apple.com/kb/DL281

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

[Apple] Mac OS X の JDK1.5, 1.6 におけるデフォルト文字エンコーディング

Mac OS X の JDK 1.5 から 1.6 でデフォルト文字エンコーディングが変わっている様なので調べてみた。

実験に使用したコード

$ vi ./Hoge.java
$ cat ./Hoge.java 
public class Hoge {
  public static void main(final String[] args) {
    System.out.println("" + System.getProperty("file.encoding"));
  }
}
$ 

JDK 1.5 の場合

$ /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Commands/javac -version
javac 1.5.0_22
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Commands/javac ./Hoge.java 
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Commands/java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03-333-10M3025)
Java HotSpot(TM) Client VM (build 1.5.0_22-147, mixed mode)
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Commands/java Hoge
UTF8
$ 

JDK 1.6 の場合

$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/javac -version
javac 1.6.0_17
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/javac ./Hoge.java
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04-248-10M3025)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01-101, mixed mode)
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Commands/java Hoge
SJIS
$ 

結論

Mac OS X では、JDK1.5 と 1.6 でデフォルト文字エンコーディングが下記の通り変更されている。

1.5.0_22 UTF8
1.6.0_17 SJIS

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

[Apple] Snow Leopard に JDK 1.5 をインストールする方法

Mac OS X 10.6 (Snow Leopard) には JDK 1.6 しか用意されていない。 必要があって JDK 1.5 をインストールしたので、その時の手順をメモしておく。

JDK 1.5 のインストール手順

基本的には Snow LeopardのJava環境に手を入れる(2) の手順通り進めれば良い様だ。 但し、xar では Snow Leopard 上で Leopard 用 JDK の pkg を解凍出来ない(下記のエラーが発生)ので、Pacifist を使用する必要がある。

$ xar -zxvf ./JavaForMacOSX10.5Update6.pkg 
Distribution
JavaForMacOSX10.5Update6.pkg/Bom
Error while extracting archive:(JavaForMacOSX10.5Update6.pkg/Bom): io: Could not create file (Not a directory) - ignored
JavaForMacOSX10.5Update6.pkg/PackageInfo
Error while extracting archive:(JavaForMacOSX10.5Update6.pkg/PackageInfo): io: Could not create file (Not a directory) - ignored
JavaForMacOSX10.5Update6.pkg/Payload
Error while extracting archive:(JavaForMacOSX10.5Update6.pkg/Payload): io: Could not create file (Not a directory) - ignored
JavaForMacOSX10.5Update6.pkg/Scripts
Error while extracting archive:(JavaForMacOSX10.5Update6.pkg/Scripts): io: Could not create file (Not a directory) - ignored
Resources/background.tif
Resources/da.lproj/License.rtf
Resources/da.lproj/Localizable.strings

    (SNIP)

Resources/English.lproj
Resources/Dutch.lproj
Resources/da.lproj
Resources
JavaForMacOSX10.5Update6.pkg
$

Pacifist で解凍した後は、以下の通りインストール作業を行う。 ここでは pkg の解凍先を ./JavaForMacOSX10.5Update6 としている。

$ cd ./JavaForMacOSX10.5Update6/System/Library/Frameworks/JavaVM.framework/Versions/
$ ls -al
total 40
drwxr-xr-x  12 root  wheel  408 10 14 09:40 .
drwxr-xr-x  12 root  wheel  408 10 14 09:40 ..
lrwxr-xr-x   1 root  wheel    5 12 22 23:57 1.3 -> 1.3.1
drwxr-xr-x   3 root  wheel  102 11  9 08:08 1.3.1
drwxr-xr-x   3 root  wheel  102 10 14 09:40 1.4.2
lrwxr-xr-x   1 root  wheel    5 12 22 23:57 1.5 -> 1.5.0
drwxr-xr-x   7 root  wheel  238 11  7 03:27 1.5.0
lrwxr-xr-x   1 root  wheel    5 12 22 23:57 1.6 -> 1.6.0
drwxr-xr-x   7 root  wheel  238 11  7 03:27 1.6.0
drwxr-xr-x   8 root  wheel  272 11  9 08:08 A
lrwxr-xr-x   1 root  wheel    1 12 22 23:57 Current -> A
lrwxr-xr-x   1 root  wheel    3 12 22 23:57 CurrentJDK -> 1.5

$ sudo mv ./1.5.0 ./1.5.0_for_Mac_OS_X_10_5
$ sudo mv ./1.5.0_for_Mac_OS_X_10_5 /System/Library/Frameworks/JavaVM.framework/Versions/
$ cd /System/Library/Frameworks/JavaVM.framework/Versions/
$ sudo rm ./1.5.0
$ sudo ln -s ./1.5.0_for_Mac_OS_X_10_5 ./1.5.0
$ sudo chown -R root:wheel ./1.5.0_for_Mac_OS_X_10_5
$ /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Commands/java -version
Shared archive: uninstalled generation
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03-333-10M3025)
Java HotSpot(TM) Client VM (build 1.5.0_22-147, mixed mode)
$ 

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

Dec 22, 2009

[Cloud] Google App Engine 関連情報

よく参照するページをメモ。

Google App Engine
http://code.google.com/intl/ja/appengine/
Google App Engine Admin Console
https://appengine.google.com/
Google App Engine System Status
http://code.google.com/status/appengine
Google App Engine Blog
http://googleappengine.blogspot.com/
Google Cookbook - Google App Engine
http://appengine-cookbook.appspot.com/
Google App Engine コミュニティ
http://code.google.com/intl/ja/appengine/community.html
App Engine Community FAQ
http://knol.google.com/k/marce/app-engine-community-faqs
Google App Engine Issues
http://code.google.com/p/googleappengine/issues/list
リソースの課金と予算設定
http://code.google.com/intl/ja/appengine/docs/billing.html
Google App Engine Java SDK Release Notes
http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes
GAE/J Javadoc リファレンス
http://code.google.com/intl/ja/appengine/docs/java/javadoc/
GAE/J JRE クラスのホワイト リスト
http://code.google.com/intl/ja/appengine/docs/java/jrewhitelist.html

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

Dec 21, 2009

[WebService] Google Code Playground

Google Code Playground が面白い。 コードを見たり編集したりしながら様々な API を試してみることができる。

Google Code Playground
http://code.google.com/apis/ajax/playground/

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

Dec 20, 2009

[Apple] プロジェクト毎に Mac OS X Terminal を初期化する方法

  • Terminal をプロジェクト専用に初期化したい
  • プロジェクト専用 Terminal を QuickSilver から簡単に起動したい
を実現する方法。 AppleScript を使って Terminal を起動するだけなので至極簡単。

AppleScript エディタに Terminal を登録

まず AppleScript エディタのライブラリに Terminal を登録する。 既に登録済の場合はこの作業は不要。

  1. AppleScript エディタを起動する

  2. ウィンドウ > ライブラリ を選択。
    [AppleScriptEditor01]

  3. ライブラリウィンドウ左上の "+" ボタンをクリック。Terminal を選択して "開く" ボタンをクリック。
    [AppleScriptEditor02]

  4. ライブラリに Terminal が登録されたことを確認。
    [AppleScriptEditor03]

  5. Terminal 初期化用 AppleScript

    下記の様な AppleScript で Terminal を起動してプロジェクト専用の初期化を行う。 初期化内容は適宜変更のこと。 AppleScript を書き終えたらファイルフォーマットを "アプリケーション" で /Applications に保存。 最後に QuickSilver で Rescan をかけて完了。

    on createTerminalWindow()
      tell application "System Events"
        tell process "Terminal"
          tell menu bar 1
            tell menu bar item "シェル"
              tell menu "シェル"
                tell menu item "新規ウインドウ"
                  tell menu "新規ウインドウ"
                    pick menu item "Mine"
                  end tell
                end tell
              end tell
            end tell
          end tell
        end tell
      end tell
    end createWindow
    
    tell application "Terminal"
      activate
      if not (exists front window) then do script ""
    
      my createTerminalWindow()
    
      do script "cd /Users/me/Projects/001-hogeproject" in front window of application "Terminal"
      do script "export PS1='\\W@\\u\\$'" in front window of application "Terminal"
      do script ". ./projectrc.sh" in front window of application "Terminal"
      do script "clear;pwd" in front window of application "Terminal"
    end tell
    

    Terminal でタブを利用したい場合

    Terminal のタブを作成したい場合は下記の関数を利用する。

    on createTerminalTab()
      tell application "System Events"
        tell process "Terminal"
          tell menu bar 1
            tell menu bar item "シェル"
              tell menu "シェル"
                tell menu item "新規タブ"
                  tell menu "新規タブ"
                    pick menu item "Mine"
                  end tell
                end tell
              end tell
            end tell
          end tell
        end tell
      end tell
    end createTab
    


    後はタブ毎に適宜初期化などを行う。 残念なことにタブ名の編集がうまく行かない。 何かテクニックが必要なのだろうか??
    my createTerminalTab()
    
    set custom title in tab 1 of front window of application "Terminal" to "hogeproject"
    do script "cd /Users/me/Projects/001-hogeproject" in tab 1 of front window of application "Terminal"
    do script "export PS1='\\W@\\u\\$'" in tab 1 of front window of application "Terminal"
    do script ". ./projectrc2.sh" in tab 1 of front window of application "Terminal"
    do script "clear;pwd" in tab 1 of front window of application "Terminal"
    

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

Dec 19, 2009

[Apple] Mac OS X 起動時に使えるショートカットキー

パワーボタン押下直後に "T" を押すとターゲットモードで起動とか、"C" を押すと DVD から起動とか、 Mac OS X には起動時に使えるショートカットキーがいくつも用意されている。 Apple 公式ドキュメントに一覧を見つけたのでメモしておく。

Mac OS X 10.6 Help - Shortcuts for starting up
http://docs.info.apple.com/article.html?path=Mac/10.6/en/cdb_strtup.html

自動ログインの禁止 起動直後のプログレスインジケータ(くるくる回るヤツ)表示中に「左の Shift」キーを押しっぱなしにする。
ログイン時アプリケーション自動起動の禁止 ログインウィンドウの「ログイン」ボタンをクリックした後「Shift」キーを押しっぱなしにする。
CD/DVD から起動 "C"キー押下
NetBoot ディスクイメージから起動 "N"キー押下
ターゲットディスクモードで起動 "T"キー押下
起動ディスクを選択 Option キー押下
CD/DVD の排出 マウスのボタンを押す
パラメータ RAM のリセット Command (⌘)-Option-P-R キーを同時に押下
詳細なステータスメッセージの表示 (verbose モード) Command (⌘)-V キーを同時に押下
シングルユーザモードで起動 Command (⌘)-S キーを同時に押下
セーフモードで起動 起動音が聞こえた直後に「Shift」キーを押す。プログレスインジケータ(くるくる回るヤツ)が表示されたら「Shift」キーを放す。

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

Dec 18, 2009

[Misc] 脅威の分類 / Threat Classification

Web サイトのセキュリティに対する脅威を体系化した資料。 WASC (Web Application Security Consortium) によるもの。 Version 1.00 が公開中、Version 2 が現在(2009/12/18) 作業中。

Threat Classification
http://www.webappsec.org/projects/threat/
WASC Threat Classification V2.0
http://projects.webappsec.org/Threat-Classification-Working

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

Dec 17, 2009

[Flash] Flash Cookie に関するメモ

SharedObject、いわゆる Flash Cookie の関連情報をメモ。

Flash CS3 ドキュメンテーション - 共有オブジェクト
http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000361.html
Flash CS3 ドキュメンテーション - ローカルデータの保存
http://livedocs.adobe.com/flash/9.0_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000319.html
Flex ドキュメンテーション - Flex におけるローカル SharedObject の使用
http://www.adobe.com/support/documentation/jp/flex/1/lsos/index.html
Wikipedia - Local Shared Object
http://ja.wikipedia.org/wiki/Local_Shared_Object

ローカルに保存されている Shared Object の設定、削除は以下のページで可能。

Flash Player ヘルプ - 設定マネージャ
http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager.html

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

Dec 10, 2009

[Cloud] Salesforce.com で遊ぶ方法

Salesforce.com には Developer Edition や Free Edition というエディションが用意されており、無料で遊ぶことができる。 とりあえず Developer Edition に登録してみるのが一番手っ取り早い。 Free Edition はストレージ容量は大きいが使えない機能がかなりあるので遊ぶには適さないと思う。 Developer Edition と Free Edition の違いは下記の "Force.com Free Edition FAQ" で詳しく解説されている。

About the Force.com Developer Edition and Force.com Free Edition Environments
http://wiki.developerforce.com/index.php/Developer_Edition
Force.com Free Edition FAQ
https://www.salesforce.com/platform/freeforce/free_force_faqs.jsp
Sign up for a Force.com Developer Edition
http://www.developerforce.com/events/regular/registration.php?d=70130000000EjH
Sign up for a Force.com Free Edition
https://www.salesforce.com/form/signup/freeforce-platform.jsp?d=70130000000EoUN

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

Dec 02, 2009

[Apple] Mac OS X でログイン履歴を取得する方法

Mac OS X でログイン履歴を取得する方法をメモ。

ここ 1 週間の履歴を取得する場合

system.log からログイン履歴を取得できる。 但し、system.log は daily rotate で 7 世代まで保持なので、取得できるのは最大 1 週間程度。 何故か私の環境では rotate が止まっていたが・・・。何故??

$ sudo bzip2 -d /var/log/system.log.*.bz2
$ grep "launchd\[1\] has started up" /var/log/system.log*

ログインフック を利用してログイン履歴を保存

Mac OS X のログインフックを利用して自前でログイン履歴を保存することで 1 週間以上のログイン履歴を保持できる。

Mac OS X: ログインフックを作成する
http://support.apple.com/kb/HT2420?viewlocale=ja_JP&locale=ja_JP

まずログインフック用のシェルスクリプトを作成する。 ここでは /usr/share/login-history/login-history.sh というファイルとする。

#!/bin/sh

HISTORY_FILE=/usr/share/login-history/login-history.log
DATE=`date +'%Y/%m/%d %H:%M:%S'`
echo "$DATE" >> $HISTORY_FILE
作成したシェルスクリプトをログインフックとして登録する。
$sudo chmod 755 ./login-history/login-history.sh 
$sudo defaults write com.apple.loginwindow LoginHook /usr/

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

Dec 01, 2009

[Maven] Maven 3.0 リリース前情報まとめ

Maven 3.0-alpha がすごい勢いでリリースされている。 2009/11/13 に alpha-3、11/17 には alpha-4、11/27 には alpha-5 と立て続けに alpha 版が更新されている。 beta、正式リリースに備えてそろそろ情報をまとめておこう。

Maven 3.x 公式情報

Maven 3.0 では内部モジュール構成の見直し、依存性解決システムの刷新、IDE サポートの強化などが謳われている。 Apache Maven の WIKI に詳細情報がある。

Maven 3.x
http://cwiki.apache.org/MAVEN/maven-3x.html
Maven 3.x Plan
http://cwiki.apache.org/MAVEN/maven-3x-plan.html
Maven 3.x Compatibility Notes
http://cwiki.apache.org/MAVEN/maven-3x-compatibility-notes.html
Maven 3.x Features
http://cwiki.apache.org/MAVEN/maven-3x-features.html
Maven 3.x and site plugin
http://cwiki.apache.org/MAVEN/maven-3x-and-site-plugin.html
Maven 3.x Class Loading
http://cwiki.apache.org/MAVEN/maven-3x-class-loading.html

Maven 3.x ダウンロード

2009/12/01 現在、3.0-alpha-5 が下記よりダウンロード可能。

Download Maven 3.0
http://maven.apache.org/download.html#Maven_3.0-alpha-5

Maven 3.x コードリポジトリ

Maven 3.x の最新のコードはこちら。

/maven/maven-3/trunk
https://svn.apache.org/repos/asf/maven/maven-3/trunk/

その他

Maven の主要開発者である Jason van Zyl 氏によるプレゼン資料。 Maven 3.0 の全体像を俯瞰するのにとても良い情報。

Jason's Maven 3 Presentation
http://www.scribd.com/doc/14458957/Jasons-Maven-3-Presentation


Groovy との連携。
Writing your pom files in Groovy - a sneek preview of Maven 3's polyglot features
http://www.wakaleo.com/blog/236-writing-your-pom-files-in-groovy-a-sneek-preview-of-maven-3s-polyglot-features

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

[Library] Lucene 3.0.0 Released!!

Java による全文検索エンジン Lucene がメジャーバージョンアップ。 今回はクリーンアップリリースと銘打っており、機能追加はせず内部のリファクタや JavaSE 5.0 への対応をメインとしているとのこと。

25 November 2009 - Lucene Java 3.0.0 available
http://lucene.apache.org/#25+November+2009+-+Lucene+Java+3.0.0+available
Lucene Change Log
http://lucene.apache.org/java/3_0_0/changes/Changes.html

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

[Maven] Maven 3.0-alpha-5 で package にチャレンジ

試しに Maven 2.1 系で管理しているプロジェクトを Maven 3.0-alpha-5 で clean package してみた。

Maven 3.0-alpha-5 を Mac OS X Snow Leopard にインストール

$ wget http://ftp.riken.jp/net/apache/maven/binaries/apache-maven-3.0-alpha-5-bin.tar.gz
$ tar zxvf ./apache-maven-3.0-alpha-5-bin.tar.gz 
$ sudo mv ./apache-maven-3.0-alpha-5 /usr/share/java/
$ sudo chown -R root:wheel ./apache-maven-3.0-alpha-5
$ export MAVEN_HOME=/usr/share/java/apache-maven-3.0-alpha-5
$ export PATH=$MAVEN_HOME/bin:$PATH
$ mvn --version
Apache Maven 3.0-alpha-5 (r883378; 2009-11-24 00:53:41+0900)
Java version: 1.6.0_15
Java home: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
Default locale: ja_JP, platform encoding: SJIS
OS name: "mac os x" version: "10.6.2" arch: "x86_64" Family: "mac"
$ 

プロジェクトの clean package

全く何事もなく正常終了。 正直驚いた。 3.0 の売り文句通り、plugin 周りの後方互換性はかなり高そうだ。

$ mvn clean package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building MyApp 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.4.1/maven-resources-plugin-2.4.1.jar
24 KB downloaded at 13.8 KB/sec
[INFO] 
[INFO] --- maven-clean-plugin:2.3:clean (default-clean) @ myapp ---
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.3/maven-clean-plugin-2.3.pom
5 KB downloaded at 24.6 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.2.1/file-management-1.2.1.pom
4 KB downloaded at 21.4 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/file-management/1.2.1/file-management-1.2.1.jar
37 KB downloaded at 14.0 KB/sec
[INFO] Deleting file set: /Users/me/Workspace/MyApp/target (included: [**], excluded: [])
[INFO] 
[INFO] --- maven-resources-plugin:2.4.1:resources (default-resources) @ myapp ---
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.4.1/maven-resources-plugin-2.4.1.pom
6 KB downloaded at 29.3 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-filtering/1.0-beta-3/maven-filtering-1.0-beta-3.pom
6 KB downloaded at 30.6 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.12/plexus-interpolation-1.12.pom
889 B downloaded at 5.0 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.14/plexus-components-1.1.14.pom
6 KB downloaded at 32.8 KB/sec
Downloading: http://repo1.maven.org/maven2/org/sonatype/plexus/plexus-build-api/0.0.4/plexus-build-api-0.0.4.pom
3 KB downloaded at 16.1 KB/sec
Downloading: http://repo1.maven.org/maven2/org/sonatype/spice/spice-parent/10/spice-parent-10.pom
3 KB downloaded at 16.9 KB/sec
Downloading: http://repo1.maven.org/maven2/org/sonatype/forge/forge-parent/3/forge-parent-3.pom
5 KB downloaded at 28.2 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.8/plexus-utils-1.5.8.pom
8 KB downloaded at 45.3 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.13/plexus-interpolation-1.13.pom
890 B downloaded at 1.5 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.15/plexus-components-1.1.15.pom
3 KB downloaded at 4.8 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus/2.0.3/plexus-2.0.3.pom
16 KB downloaded at 16.6 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-filtering/1.0-beta-3/maven-filtering-1.0-beta-3.jar
34 KB downloaded at 22.8 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.jar
10 KB downloaded at 10.3 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-2/wagon-http-lightweight-1.0-beta-2.jar
13 KB downloaded at 11.4 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-2/wagon-http-shared-1.0-beta-2.jar
10 KB downloaded at 12.5 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-interpolation/1.13/plexus-interpolation-1.13.jar
60 KB downloaded at 9.7 KB/sec
Downloading: http://repo1.maven.org/maven2/org/sonatype/plexus/plexus-build-api/0.0.4/plexus-build-api-0.0.4.jar
7 KB downloaded at 10.4 KB/sec
[WARNING] Using platform encoding (SJIS actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 4 resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.0.2:compile (default-compile) @ myapp ---
[INFO] Compiling 151 source files to /Users/me/Workspace/MyApp/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.4.1:testResources (default-testResources) @ myapp ---
[WARNING] Using platform encoding (SJIS actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/me/Workspace/MyApp/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.0.2:testCompile (default-testCompile) @ myapp ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.4.3:test (default-test) @ myapp ---
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/2.4.3/maven-surefire-plugin-2.4.3.pom
7 KB downloaded at 20.1 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire/2.4.3/surefire-2.4.3.pom
8 KB downloaded at 41.4 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.pom
2 KB downloaded at 11.4 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.pom
3 KB downloaded at 2.5 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.pom
3 KB downloaded at 5.5 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/maven-toolchain/1.0/maven-toolchain-1.0.pom
4 KB downloaded at 19.3 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.4.3/surefire-booter-2.4.3.jar
262 KB downloaded at 28.0 KB/sec
Downloading: http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-api/2.4.3/surefire-api-2.4.3.jar
504 KB downloaded at 20.7 KB/sec
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.jar
206 KB downloaded at 27.7 KB/sec
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.2:jar (default-jar) @ myapp ---
[INFO] Building jar: /Users/me/Workspace/MyApp/target/MyApp-1.0.0-SNAPSHOT.jar
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:30.739s
[INFO] Finished at: Tue Dec 01 06:37:14 JST 2009
[INFO] Final Memory: 11M/79M
[INFO] ------------------------------------------------------------------------
$ 

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

Nov 30, 2009

[Maven] Maven2 で依存するライブラリも jar に格納する方法

通常 Java のアプリケーションは複数の jar で構成されることが多い。 log4j、Jakarta Commons、・・・といったライブラリを普通に使うと数十の jar になってしまうこともしばしば。 Java Web Start を使わずに、jar を Web サーバ上に設置してダウンロード→ダブルクリックで実行、としたい場合など複数の jar に分かれていると困ることもある。 Maven2 では maven-shade-plugin を利用することで依存するライブラリも含んだ jar を作成することができる。

Maven Shade Plugin
http://maven.apache.org/plugins/maven-shade-plugin/index.html

maven-shade-plugin の使い方

pom.xml に下記を追記する。 <finalName> には生成する jar のファイル名を、<mainClass> には実行可能なクラスを指定する。

<project>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <finalName>myapp</finalName>
              <transformers>
                <transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>jp.in_vitro.myapp.Main</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

package goal を指定して Maven2 を起動すると、指定したファイル名で dependencies を全て含んだ jar が生成される。

$ mvn clean package

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

Nov 29, 2009

[Apple] Mac OS X でスクリーンセーバを起動するアプリケーションを作成する方法

Mac OS X では スクリーンセーバの起動に画面コーナーへの機能割り当てを利用するのが一般的の様だが、出来れば QuickSilver から一発でスクリーンセーバを起動してシステムをロックしたい。 そこでスクリーンセーバを起動するだけのアプリケーションを作成してみた。

スクリーンセーバ起動用アプリケーションの作成方法

アプリケーションは Mac OS X 付属の Automator で簡単に作成できる。

まず Automator を起動して、テンプレートに「アプリケーション」を選択する。
[Automator の起動]

アクションに「シェルスクリプトを実行」を選択し、以下のスクリプトを指定する。

open '/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app'
[スクリプトの指定]

Lock.app という名前で /Applications に保存する。
[保存]

QuickSilver から起動できる様になった!!
[QuickSilver から起動]

余談

上記の様な面倒をしなくても下記のコマンドでいけるかと思ったのだが、QuickSilver はシンボリックリンクの .app を起動してくれなかったので断念。 シンボリックリンクに対応したランチャーを使用する場合や直接 .app を起動する場合は下記で十分。

$ln -s /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app /Applications/Lock.app

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

Oct 30, 2009

[Apple] Snow Leopard で Expose、Dashboard に対するファンクションキー割り当てが不安定になる

Snow Leopard を使い始めてからファンクションキーによる Expose、Dashboard の呼び出しが極めて不安定になってしまった。 起動直後に多少まともに動作する時もあるのだけれど、しばらく使用しているとほぼ間違いなく動作しなくなってしまう。 自宅用でも会社用でも同じ症状が出ているので、多分 OS の問題だろう。 何だかよく分からないが、 Dock を再起動すると改善する(ことが多い)。 とても不便なので早く直して欲しい。> Apple

$ killall Dock

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

Oct 28, 2009

[WebService] 怪しげな短縮 URL の遷移先を調べる方法

Twitter 界隈では短縮 URL が頻繁に利用されている。 短縮 URL は文字数を減らすには便利だけれど、どこに飛ばされるか分からないやっかいな代物。 Web ブラウザで表示する前に、実際の飛び先を確認しておきたいことも間々ある。 短縮 URL サービスの伸長機能はサービス毎に方法が異なったり、そもそも提供されていなかったりするので利便性に欠ける。 そこで便利なのが wget。 以下の方法で大抵の短縮 URL サービスの短縮 URL を伸長できる(はず)。

GNU Wget 1.12 Manual
http://www.gnu.org/software/wget/manual/wget.html

例えば、tinyurl.com、bit.ly の場合。

$ wget --max-redirect=0 --debug -O - http://tinyurl.com/2zpt2m 2>&1 | grep Location:
Location: http://www.in-vitro.jp/blog/index.cgi
$ wget --max-redirect=0 --debug -O - http://bit.ly/2EbhQe 2>&1 | grep Location:
Location: http://www.in-vitro.jp/blog/index.cgi
3.ly の様に max-redirect を変更する必要があるサービスもある。
$ wget --max-redirect=1 --debug -O - http://3.ly/g5b 2>&1 | grep Location:
Location: http://3.ly/g5b/
Location: http://www.in-vitro.jp/blog/index.cgi

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

Oct 27, 2009

[Apple] 覚えておきたい Mac OS X Terminal のショートカットキー

Mac OS X Snow Leopard の Terminal を使うときに便利なショートカットキーをリストアップしておく。 これを覚えるだけで随分省力化できる。

CMD + T
新規タブ
CMD + W
タブを閉じる
CMD + K
スクロールバッファを消去
CMD + {
Shift + CMD + ←
前のタブを選択
CMD + }
Shift + CMD + →
次のタブを選択
Shift + CMD + I
タイトルを編集
CMD + N
新規ウィンドウ
CMD + →
次のウィンドウを選択
CMD + ←
前のウィンドウを選択

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

Oct 20, 2009

[Cloud] Salesforce API Request Limits

Salesforce Web Services API の制限(Concurrent API Request Limits、Total API Request Limits) に関する資料をメモ。

Implementation Considerations
http://www.salesforce.com/us/developer/docs/api/Content/implementation_considerations.htm

API 使用状況の確認方法

上記資料によると、

You can monitor the number of API requests generated by your organization in two ways:
  • Any user can see the number of API requests sent in the last 24 hours. To view the information, click Setup | Company Profile | Company Information. Look for the “API Requests, Last 24 Hours” field in the right column.
  • If a user has the “Modify All Data” permission, the user can view a report of the API requests sent for the last seven days. To view the information, click the Reports tab, scroll to the Administrative Reports section and click the API Usage Last 7 Days link. Users can sort the report by any of the fields listed in the Summarize Information by: drop-down list. For more information about sorting, filtering, or customizing reports, see the Salesforce.com online help for reports.
とのこと。

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

Oct 19, 2009

Oct 18, 2009

Oct 17, 2009

Oct 16, 2009

[Cloud] クラウドサービスの稼働状況

大手クラウドサービスの稼働状況をモニタできるページをメモ。

Google - Apps ステータスダッシュボード
http://www.google.com/appsstatus#hl=ja
Amazon - Service Health Dashboard
http://status.aws.amazon.com/
Salesforce - Trust.salesforce.com
http://trust.salesforce.com/

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

Oct 15, 2009

[Maven] 続・Maven2 で JAR の Manifest ファイルを設定する方法をメモ

以前書いた「Maven2 で JAR の Manifest ファイルを設定する方法をメモ」というエントリの続き。 いつの間にやら 3.5 年も経過していたわけだが、その間に maven-archiver-plugin が MANIFEST.MF を更に柔軟に扱える様に進化していた様だ。

Maven Archiver
http://maven.apache.org/shared/maven-archiver/index.html

manifestEntries を使うことで、Implementation-Version、Implementation-Vendor 等を自由に指定できる。 これは嬉しい。

<archive>
  <addMavenDescriptor/>
  <compress/>
  <forced/>
  <index/>
  <manifest>
    <addClasspath/>
    <addDefaultImplementationEntries/>
    <addDefaultSpecificationEntries/>
    <addExtensions/>
    <classpathMavenRepositoryLayout/>
    <classpathPrefix/>
    <mainClass/>
    <packageName/>
  </manifest>
  <manifestEntries>
    <key>value</key>
  </manifestEntries>
  <manifestFile/>
  <manifestSections>
    <manifestSection>
      <name/>
      <manifestEntries>
        <key>value</key>
      </manifestEntries>
    <manifestSection/>
  </manifestSections>
  <pomPropertiesFile/>
</archive>

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

Oct 14, 2009

[Maven] Maven2 管理のプロジェクトで依存するライブラリを集める方法

Maven2 で管理しているプロジェクトでは、Maven2 の機能で依存するライブラリを集めることができる。 war でパッケージングしているプロジェクトであれば maven-war-plugin が集めてくれるが、jar や pom の場合はアーカイブ作成時には集めてくれないので必要に応じて別途集めないといけない。 maven-dependency-plugin を使うと簡単に依存するライブラリを集めることができる。

Maven Dependency Plugin
http://maven.apache.org/plugins/maven-dependency-plugin/
dependency:copy-dependencies
http://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html

依存するライブラリの集め方

$ mvn dependency:copy-dependencies
上記コマンドを実行すると $PROJECT_JHOME/target/dependency に依存するライブラリがコピーされる。
その後、クラスパスを作りたければ
for i in `ls ./target/dependency/`; do printf ":./target/dependency/$i"; done; printf "\n"
といった感じで簡単に作成できる。

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

Sep 13, 2009

[PostgreSQL] Ludia 1.5.2 を PostgreSQL 8.3 or later にインストールする

Ludia 1.5.2 を PostgreSQL 8.3 以降にインストールする際の注意事項をメモ。

PostgreSQL 8.4.x にインストールする場合

Ludia 1.5.2 は PostgreSQL 8.4.x には対応していない。 make をしようとすると下記の様なエラーが出る。

$ cd ./ludia-1.5.2
$ make
make  all-am
if /bin/sh ./libtool --mode=compile --tag=CC gcc -D_REENTRANT -I. -I. -I.   -DPOSTGRES84=1 -I/opt/local/include/postgresql84 -I/opt/local/include/postgresql84/server -I/opt/local/include/senna  -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF ".deps/pgsenna2.Tpo" -c -o pgsenna2.lo pgsenna2.c; \
	then mv -f ".deps/pgsenna2.Tpo" ".deps/pgsenna2.Plo"; else rm -f ".deps/pgsenna2.Tpo"; exit 1; fi
mkdir .libs
 gcc -D_REENTRANT -I. -I. -I. -DPOSTGRES84=1 -I/opt/local/include/postgresql84 -I/opt/local/include/postgresql84/server -I/opt/local/include/senna -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF .deps/pgsenna2.Tpo -c pgsenna2.c  -fno-common -DPIC -o .libs/pgsenna2.o
pgsenna2.c: In function 'index_info_open':
pgsenna2.c:366: error: dereferencing pointer to incomplete type
pgsenna2.c:367: error: dereferencing pointer to incomplete type
pgsenna2.c:368: error: dereferencing pointer to incomplete type
pgsenna2.c:378: error: too few arguments to function 'relpath'
pgsenna2.c:400: warning: implicit declaration of function 'smgrGetPendingDeletes'
pgsenna2.c: In function 'scan_stat_close_all':
pgsenna2.c:502: error: dereferencing pointer to incomplete type
pgsenna2.c:503: error: dereferencing pointer to incomplete type
pgsenna2.c:504: error: dereferencing pointer to incomplete type
pgsenna2.c: In function 'pgs2build0':
pgsenna2.c:613: warning: passing argument 4 of 'IndexBuildHeapScan' makes integer from pointer without a cast
pgsenna2.c:613: error: too few arguments to function 'IndexBuildHeapScan'
pgsenna2.c:621: warning: implicit declaration of function 'IndexCloseAndUpdateStats'
pgsenna2.c: In function 'pgs2bulkdelete0':
pgsenna2.c:809: error: 'SnapshotAny' undeclared (first use in this function)
pgsenna2.c:809: error: (Each undeclared identifier is reported only once
pgsenna2.c:809: error: for each function it appears in.)
pgsenna2.c: In function 'pgs2gettuple':
pgsenna2.c:940: error: dereferencing pointer to incomplete type
pgsenna2.c:951: error: dereferencing pointer to incomplete type
pgsenna2.c:951: error: dereferencing pointer to incomplete type
pgsenna2.c:965: error: dereferencing pointer to incomplete type
pgsenna2.c:967: error: dereferencing pointer to incomplete type
pgsenna2.c:973: error: dereferencing pointer to incomplete type
pgsenna2.c:975: error: dereferencing pointer to incomplete type
pgsenna2.c:975: error: dereferencing pointer to incomplete type
pgsenna2.c:975: error: dereferencing pointer to incomplete type
pgsenna2.c:975: error: dereferencing pointer to incomplete type
pgsenna2.c:975: error: dereferencing pointer to incomplete type
pgsenna2.c:975: error: dereferencing pointer to incomplete type
pgsenna2.c: In function 'pgs2getmulti':
pgsenna2.c:994: error: dereferencing pointer to incomplete type
pgsenna2.c:1004: error: dereferencing pointer to incomplete type
pgsenna2.c:1004: error: dereferencing pointer to incomplete type
pgsenna2.c:1020: error: dereferencing pointer to incomplete type
pgsenna2.c:1020: error: dereferencing pointer to incomplete type
pgsenna2.c:1020: error: dereferencing pointer to incomplete type
pgsenna2.c:1020: error: dereferencing pointer to incomplete type
pgsenna2.c: In function 'pgs2rescan':
pgsenna2.c:1048: error: dereferencing pointer to incomplete type
pgsenna2.c:1048: error: dereferencing pointer to incomplete type
pgsenna2.c:1048: warning: left-hand operand of comma expression has no effect
pgsenna2.c:1048: error: dereferencing pointer to incomplete type
pgsenna2.c:1048: warning: left-hand operand of comma expression has no effect
pgsenna2.c:1049: error: dereferencing pointer to incomplete type
pgsenna2.c:1049: error: dereferencing pointer to incomplete type
pgsenna2.c:1049: warning: left-hand operand of comma expression has no effect
pgsenna2.c:1049: error: dereferencing pointer to incomplete type
pgsenna2.c:1049: warning: left-hand operand of comma expression has no effect
pgsenna2.c:1051: error: dereferencing pointer to incomplete type
pgsenna2.c:1052: error: dereferencing pointer to incomplete type
pgsenna2.c:1053: error: dereferencing pointer to incomplete type
pgsenna2.c:1053: error: dereferencing pointer to incomplete type
pgsenna2.c:1054: error: dereferencing pointer to incomplete type
pgsenna2.c:1055: error: dereferencing pointer to incomplete type
pgsenna2.c:1055: error: dereferencing pointer to incomplete type
pgsenna2.c:1055: error: dereferencing pointer to incomplete type
pgsenna2.c:1055: error: dereferencing pointer to incomplete type
pgsenna2.c:1055: error: dereferencing pointer to incomplete type
pgsenna2.c:1055: error: dereferencing pointer to incomplete type
pgsenna2.c:1064: error: dereferencing pointer to incomplete type
pgsenna2.c:1067: error: dereferencing pointer to incomplete type
pgsenna2.c:1068: error: dereferencing pointer to incomplete type
pgsenna2.c:1069: error: dereferencing pointer to incomplete type
pgsenna2.c:1070: error: dereferencing pointer to incomplete type
pgsenna2.c:1071: error: dereferencing pointer to incomplete type
pgsenna2.c:1072: error: dereferencing pointer to incomplete type
pgsenna2.c:1074: error: dereferencing pointer to incomplete type
pgsenna2.c:1076: error: dereferencing pointer to incomplete type
pgsenna2.c:1083: error: dereferencing pointer to incomplete type
pgsenna2.c:1086: error: dereferencing pointer to incomplete type
pgsenna2.c:1117: error: dereferencing pointer to incomplete type
pgsenna2.c: In function 'pgs2endscan':
pgsenna2.c:1130: error: dereferencing pointer to incomplete type
pgsenna2.c: In function 'pgs2costestimate':
pgsenna2.c:1241: error: 'indrel' undeclared (first use in this function)
pgsenna2.c:1275: error: 'indexSelectivity' undeclared (first use in this function)
pgsenna2.c:1277: error: too few arguments to function 'clauselist_selectivity'
pgsenna2.c:1283: error: 'indexTotalCost' undeclared (first use in this function)
pgsenna2.c:1287: error: too few arguments to function 'cost_qual_eval'
pgsenna2.c:1292: error: 'indexStartupCost' undeclared (first use in this function)
pgsenna2.c:1302: error: 'indexCorrelation' undeclared (first use in this function)
pgsenna2.c: In function 'pgs2getscore':
pgsenna2.c:1475: error: dereferencing pointer to incomplete type
make[1]: *** [pgsenna2.lo] Error 1
make: *** [all] Error 2
$
解決策は Ludia が PostgreSQL 8.4 に対応されるのを待つことくらい?? よろしくお願い致しますm(_ _)m > NTT データの中の方々

PostgreSQL 8.3.5 以降にインストールする場合

configure は通るが、make で落ちる。

$ make
make  all-am
if /bin/sh ./libtool --mode=compile --tag=CC gcc -D_REENTRANT -I. -I. -I.   -DPOSTGRES83=1 -I/opt/local/include/postgresql83 -I/opt/local/include/postgresql83/server -I/opt/local/include/senna  -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF ".deps/pgsenna2.Tpo" -c -o pgsenna2.lo pgsenna2.c; \
	then mv -f ".deps/pgsenna2.Tpo" ".deps/pgsenna2.Plo"; else rm -f ".deps/pgsenna2.Tpo"; exit 1; fi
mkdir .libs
 gcc -D_REENTRANT -I. -I. -I. -DPOSTGRES83=1 -I/opt/local/include/postgresql83 -I/opt/local/include/postgresql83/server -I/opt/local/include/senna -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF .deps/pgsenna2.Tpo -c pgsenna2.c  -fno-common -DPIC -o .libs/pgsenna2.o
pgsenna2.c: In function 'pgs2build0':
pgsenna2.c:613: warning: passing argument 4 of 'IndexBuildHeapScan' makes integer from pointer without a cast
pgsenna2.c:613: error: too few arguments to function 'IndexBuildHeapScan'
make[1]: *** [pgsenna2.lo] Error 1
make: *** [all] Error 2
$
PostgreSQL 8.3.5 以降に対応した Ludia が出るのが一番なのだけれど、 matsuou1の日記さんの「PostgreSQL8.3.7にLudia1.5.2をインストールする」に対応方法が記載されている。多謝!!

PostgreSQL 8.3.4 以前にインストールする場合

普通に Ludia 1.5.2 をインストールできる。

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

Aug 25, 2009

[Merlin] JDK 1.4.x 環境で HMAC with the SHA256 を使用する方法

JavaSE 5 以降の環境では HMAC with the SHA256 が標準機能としてサポートされているので、JRE さえあれば簡単に実現できる。 JavaSE 1.4 以前の環境では HMAC with the SHA256 は標準でサポートされていないので、サードパーティーのライブラリを導入する等の工夫が必要となる。 JavaSE 1.4 で HMAC with the SHA256 を使用する方法をメモしておく。

GNU Crypt の導入

今回は JavaSE 1.4 環境に GNU Crypt を導入する。 GNU Crypt とは

GNU Crypto, part of the GNU project, released under the aegis of GNU, aims at providing free, versatile, high-quality, and provably correct implementations of cryptographic primitives and tools in the Java programming language for use by programmers and end-users.
というもの。
導入する環境は以下の通り。
$ java -version
java version "1.4.2_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_08-b03)
Java HotSpot(TM) Client VM (build 1.4.2_08-b03, mixed mode)
GNU Crypt
http://www.gnu.org/software/gnu-crypto/

GNU Crypt のインストール

GNU Crypt のバイナリをダウンロード、解凍し、JRE に登録する。

$ wget ftp://ftp.gnu.org/gnu/gnu-crypto/binaries/gnu-crypto-2.0.1-bin-r1.tar.gz
$ tar zxvf ./gnu-crypto-2.0.1-bin-r1.tar.gz
$ cp ./gnu-crypto-2.0.1-bin/lib/javax-crypto.jar $JAVA_HOME/jre/lib/ext
$ cp ./gnu-crypto-2.0.1-bin/lib/javax-security.jar $JAVA_HOME/jre/lib/ext
$ cp ./gnu-crypto-2.0.1-bin/lib/gnu-crypto.jar $JAVA_HOME/jre/lib/ext


JRE の java.security を編集する。
$ cd $JAVA_HOME/jre/lib/security/
$ cp ./java.security ./java.security.original
$ vi ./java.security
$ diff ./java.security.original ./java.security
51a52
> security.provider.6=gnu.crypto.jce.GnuCrypto
"security.provider.6" の "6" は他の設定と被らない値を指定する。

最後に JRE に同梱されている jce.jar を外しておく。
$ mv $JAVA_HOME/jre/lib/jce.jar /home
同梱されている jce.jar を外す理由は以下の通り。
Installing the JCE Classes

Java runtimes such as those based around Classpath, Kaffe, and JREs from Sun and IBM up to version 1.4 do not include the JCE classes, encompassed by the javax.crypto package and its subpackages. Furthermore, many commercial Java 1.4 and later runtime environments do not allow providers to be installed if they are not digitally signed by an authority. The GNU Crypto developers do not agree with this practice and are not seeking to have GNU Crypto's provider signed.

To overcome this GNU Crypto includes a clean-room implementation of the javax.crypto packages, which is a modified version of the clean-room JCE distributed by the Legion of the Bouncy Castle . If building these classes is enabled at compile-time, a Java archive file javax-crypto.jar will be built, along with the appropriate shared native libraries if you are using GCJ. Simply adding it to your system classpath should suffice, possibly replacing or superceding the jce.jar file that came with your virtual machine.

GNU Crypt で HMAC with the SHA256

GNU Crypt で HMAC with the SHA256 を行うコード例は以下の通り。 JavaSE 5.0 以降のコードと異なるのは

  • アルゴリズム名を "HMAC-SHA256" とすること(JavaSE 5.0 以降では "HmacSHA256")
  • Mac#getInstance に GNU Crypt の Provider を渡すこと
の 2 点。
String plain = "foo";
String key = "bar";
byte[] keyAsBytes = key.getBytes("UTF-8");
SecretKeySpec secretKeySpec = new SecretKeySpec(keyAsBytes,"HMAC-SHA256");
Mac mac = Mac.getInstance("HMAC-SHA256", Security.getProvider("GNU-CRYPTO"));
mac.init(secretKeySpec);

byte[] data = plain.getBytes("UTF-8");
byte[] hashAsBytes = mac.doFinal(data);

String hash = new BASE64Encoder().encode(hashAsBytes);

トラブルシューティング

トラブルシューティングというか失敗記録というか・・・。
javax.crypt の置き換えを忘れると GNU Crypt の jar が未署名というエラーで正常に動作しないので注意。

Exception in thread "main" java.security.NoSuchProviderException: JCE cannot authenticate the provider GNU-CRYPTO
        at javax.crypto.SunJCE_b.a(DashoA6275)
        at javax.crypto.SunJCE_b.a(DashoA6275)
        at javax.crypto.Mac.getInstance(DashoA6275)
        at Temp.main(Temp.java:17)
Caused by: java.util.jar.JarException: file:j2sdk1.4.2_08/jre/lib/ext/gnu-crypto.jar has unsigned entries - gnu/crypto/Properties$1.class
        at javax.crypto.SunJCE_d.b(DashoA6275)
        at javax.crypto.SunJCE_d.a(DashoA6275)
        at javax.crypto.SunJCE_d.a(DashoA6275)
        at javax.crypto.SunJCE_b.b(DashoA6275)

だとか、
java.lang.SecurityException: The provider GNU-CRYPTO may not be signed by a trusted party
        at javax.crypto.SunJCE_b.a(DashoA6275)
        at javax.crypto.Mac.getInstance(DashoA6275)

だとかの例外が出たら、javax.crypt の置き換え忘れを疑ってみると良い。

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

Jul 03, 2009

[WebService] Twitter で短縮 URL と上手く付き合う方法

Twitter の 140 文字という制約と付き合っていくにはどうしても避けて通れない短縮 URL サービス。 ただ、この短縮 URL には色々問題もある。

  1. 実際に飛んでみないとリンク先が分からない
  2. Twitter Web UI では、短縮前の URL の文字数が 140 文字制約の対象となってしまう
特に 1 はかなり危険度の高い問題だ。
Yahoo! ニュース - リニア始発駅 品川駅の直下に。http://bit.ly/4rQcxo
なんてことが出来てしまう。 ちなみに、上記短縮 URL はこのブログに飛ぶ。
当然、こんな問題は以前から認識され、議論の対象となっているが、なかなかサービス側では対処が進んでいないのが現状だ。 しばらくはユーザが自衛するしかないだろう。
2 は Twitter 専用クライアントを使用すれば済む話だが、個人的には Web UI でもなんとかしてもらいたいところ。

Firefox + Grease Monkey でこの 2 つを解決しよう、というのが今回の趣旨。

まず

Firefox はインストールされていることを前提とする。 まず、Firefox に Grease Monkey をインストールする。 Firefox でリンク先に飛んで、「Firefox へインストールする」 をクリックするだけで OK。

TinyURL Decoder

上記 1 の問題を解決するために TinyURL Decoder を利用する。 TinyURL Decoder は、Twitter 上の短縮 URL を自動的に元に戻して、短縮 URL と差し替えて表示してくれる Grease Monkey スクリプト。 パフォーマンスを考慮してキャッシングまでしてくれる逸品。

TinyURL Decoder for Greasemonkey

Twitter を安全に利用するため、必ず用意しておきたい。

[TinyURL Decoder 使用前] [TinyURL Decoder 使用後]

bittwit

Twitter Web UI に bit.ly 連携用のインタフェースを追加する拙作 Grease Monkey スクリプト。 以下のリンクをクリックするとインストールされる。

bittwit

〜使い方〜

  • 普通につぶやきを入力。URL 部分を選択し、"shorten selected" ボタンをクリック。選択された部分が bit.ly で短縮される。
  • 普通につぶやきを入力。"shorten selected" ボタンをクリック。URL (と思わしき箇所) が bit.ly で短縮される。
  • 短縮 URL の前にリンク先のタイトルを挿入したい場合は、"shorten selected" ボタン右のチェックボックスをチェックしてからボタンを押す。


[bittwit]

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

Jul 02, 2009

[WebService] bit.ly API にチャレンジ

bit.ly は URL 短縮サービス。 最近 Twitter の標準 URL 短縮サービスに採用された。 bit.ly は API を提供しているので、ちょっと利用してみた。

bit.ly
http://bit.ly/

bit.ly アカウント作成 & API Key 取得

API を使う前に、まず bit.ly のアカウントを作成する。 big.ly Sign upより、アカウントを作成する。

次に bit.ly にログインし、アカウント情報より API Key を取得する。 これで API を使用する準備は完了。

bit.ly API の利用

bit.ly API の詳細は以下のドキュメントを参照。

bitly-api
http://code.google.com/p/bitly-api/wiki/ApiDocumentation

詳細はドキュメントに譲ることにして、ここでは URL 短縮 API を試してみる。
まずは http://www.yahoo.co.jp/ を短縮してみる(短縮する必要無い長さだな・・・)。

http://api.bit.ly/shorten?version=2.0.1&login=[my bitly user name]&apiKey=[my bitly API Key]&longUrl=http://www.yahoo.co.jp/
上記リクエストを GET で送出すると、以下の様なレスポンスが得られる。
{ "errorCode": 0, "errorMessage": "", "results": { "http://www.yahoo.co.jp/": { "hash": "INPsu", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/8jyvv", "userHash": "8jyvv" } }, "statusCode": "OK" }

JavaScript から利用する場合は callback を利用する。

http://api.bit.ly/shorten?version=2.0.1&login=[my bitly user name]&apiKey=[my bitly API Key]&longUrl=http://www.yahoo.co.jp/&callback=callback
上記リクエストを GET で送出すると、以下の様なレスポンスが得られる。
callback({ "errorCode": 0, "errorMessage": "", "results": { "http://www.yahoo.co.jp/": { "hash": "INPsu", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/8jyvv", "userHash": "8jyvv" } }, "statusCode": "OK" })
callback はこういう様に利用する。
<script type="text/javascript" 
           src="http://api.bit.ly/shorten?version=2.0.1&login=[my bitly user name]&apiKey=[my bitly API Key]&longUrl=http://www.yahoo.co.jp/&callback=callback" />
<script type="text/javascript">
function callback(bitlyResponse){
  var json = eval(bitlyResponse);
  alert(json.statusCode);
}
<script type="text/javascript">

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

Jul 01, 2009

[Misc] Eclipse 3.5 Galileo は Mac OS X 10.4 (Tiger) では動作しない

Eclipse 3.5 Calileo を Mac OS X 10.4 (Tiger) 上で起動しようとすると、下記の様なエラーダイアログが出て強制終了される。

This application requires Mac OS X 10.5 (Leopard) or greater.

[エラーダイアログ]

Eclipse Project Release Notes 3.5 を確認したところ、Mac OS X 10.4 (Tiger) はやはり動作環境に含まれていなかった。

確かに Leopard が出てからかなり経つが、これは厳しい。 Mac OS X で Java を使うと色々起きるな・・・。

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

[Maven] Maven 2.2.0 リリース!!

Maven 2.2.0 がリリースされた。動作環境を JDK 1.4 から 1.5 に引き上げたので、 2.1.1 というバージョンにならず 2.2.0 となった模様。 変更内容はバグフィックスがメイン。

Maven - Release Notes - Maven 2.2.0
http://maven.apache.org/release-notes.html
Maven - Download
http://maven.apache.org/download.html

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

Jun 26, 2009

Jun 23, 2009

[Maven] Maven Resource Plugin のワーニング

Maven 2.1.0 にしたら、Maven Resource Plugin でリソースのフィルタリングを行う際に以下のワーニングが出る様になった。

[INFO] [resources:resources]
[WARNING] File encoding has not been set, using platform encoding SJIS, i.e. build is platform dependent!
[WARNING] Using platform encoding (SJIS actually) to copy filtered resources, i.e. build is platform dependent!
対処方法は以下の 2 通り。

maven-resource-plugin の encoding を設定する方法

1 つ目の対処方法は maven-resource-plugin の encoding を設定するというもの。

<project>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <configuration>
            <encoding>UTF-8</encoding>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
詳細は Maven Resource Plugin - resources:resources を参照のこと。

"project.build.sourceEncoding" プロパティを設定する方法

2 つ目の対処方法は pom.xml に "project.build.sourceEncoding" プロパティを設定するというもの。

<project>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>
"project.build.sourceEncoding" は多くのプラグインで参照されているので、設定する場合は多少注意が必要。 ちなみに、 "project.build.sourceEncoding" を参照するプラグインは以下の通り(全部ではない可能性大)。

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

Jun 18, 2009

[WebService] Google Maps API version 3

Google Maps API の version 3 がいつの間にか公開されていた。 Google Maps API は少し触れた程度なので、何がどう変わっているのかは分からないが、ドキュメントによると実行速度の改善(特に、Android 端末、iPhone)がポイントらしい。 2009/06/18 現在、日本語版ドキュメントには version 3 の記述はない。

Google Maps API Concepts
http://code.google.com/apis/maps/documentation/

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

Jun 17, 2009

[WebService] シェルスクリプト + cron で実現するお気軽 Twitter bot

Twitter で何が出来るのか試行錯誤中。 大規模なアプリケーションを構築するつもりは無いので、数行〜数十行程度のシェルスクリプト + cron で実現できる bot を作って実験中。

trend_history
Twitter のトレンドを定期的に Tweet。
world_clock
世界各地の時刻を定期的に Tweet。
jcp_news
JCP 関連ニュースを Tweet。
maven_news
Maven 関連ニュースを Tweet。
eclipse_newz
Eclipse 関連ニュースを Tweet。
pgsql_news
PostgreSQL 関連ニュースを Tweet。
aozora_news
青空文庫の新着情報を定期的に Tweet
jpy_usd
円・米ドルの為替相場を定期的に Tweet。
jpy_eur
円・ユーロの為替相場を定期的に Tweet。
wikipedia_rnd
Wikipediaの記事をランダムに紹介。

元々は欲しい情報を Twitter に集約したい、という意図だったのでニュース系はやはり便利。 為替相場は試しにやってみたものの余り意味はなかった。外貨預金も FX もやっていないし。 Twitter では海外の人を follow したり、されたりが結構あるので world_clock が意外と便利。

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

Jun 10, 2009

[Misc] TLD "ru" からのコメントスパムが酷い

TLD "ru" からのコメントスパムが酷いので、"ru" 圏内からのアクセスを全てフィルタリングしておくことにする。 方法は以下のサイトを参照のこと。多謝。

krfilter - deny accesses from .kr
http://www.hakusan.tsg.ne.jp/tjkawa/lib/krfilter/index.jsp
― 世界の国別 IPv4 アドレス割り当てリスト ―
http://nami.jp/ipv4bycc/
さて、効果は上がるだろうか。

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

Jun 09, 2009

[AS] Apache Tomcat で gzip 圧縮を有効にする方法

Apache Tomcat で gzip 圧縮を有効にする方法をメモ。

Apache Tomcat Configuration Reference - The HTTP Connector
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
compression
The Connector may use HTTP/1.1 GZIP compression in an attempt to save server bandwidth. The acceptable values for the parameter is "off" (disable compression), "on" (allow compression, which causes text data to be compressed), "force" (forces compression in all cases), or a numerical integer value (which is equivalent to "on", but specifies the minimum amount of data before the output is compressed). If the content-length is not known and compression is set to "on" or more aggressive, the output will also be compressed. If not specified, this attribute is set to "off".
$CATALINA_HOME/conf/server.xml を以下の様に設定する。
<Server port="8005" shutdown="SHUTDOWN">
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" 
               useBodyEncodingForURI="true" 
               compression="on"/>
</Server>

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

Jun 08, 2009

[Misc] アンチウィルスのテスト用ダミーファイル

アンチウィルスのテストに使用できるダミーファイル。 アンチマルウェア用のものもある。

This test file has been provided to EICAR for distribution as the "EICAR Standard Anti-Virus Test File", and it satisfies all the criteria listed above. It is safe to pass around, because it is not a virus, and does not include any fragments of viral code. Most products react to it as if it were a virus (though they typically report it with an obvious name, such as "EICAR-AV-Test"). The file is a legitimate DOS program, and produces sensible results when run (it prints the message "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!").
The Anti-Virus or Anti-Malware test file
http://www.eicar.org/anti_virus_test_file.htm

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

Jun 07, 2009

[Misc] Load Average の判断基準

Load Average の判断基準について調べてみた。 結論から言うと、

  1. Load average は CPU 数(CPU コア数) で割って 1 を超えないことを目安とする。
  2. Load average の最大値は CPU 数(CPU コア数) + 1 を超えないことを目安とする。
  3. 但し、上記 1 & 2 はケース・バイ・ケースで柔軟な判断が必要。
ということになりそうだ。ただ、見付かった情報がかなり少ないので少々心許ないが。

System Administration Toolkit: Monitoring a slow system
http://www.ibm.com/developerworks/aix/library/au-satslowsys.html
In a multi-CPU (or multi-core) system, divide the load average by the number of CPUs. To determine if the machine is over stressed, use the same principles as above. An alternative way of looking at the figures is to treat them as a percentage; in other words, if the figures above were from a single-CPU system, then the machine would be able to cope with the load if it was 224 percent faster. Within a multi-CPU system, you should use the number of CPUs plus one to determine the maximum load. For example, a four-CPU system would have a maximum load average of 5.

Examining Load Average
http://www.linuxjournal.com/article/9001
The point of perfect utilization, meaning that the CPUs are always busy and, yet, no process ever waits for one, is the average matching the number of CPUs.If there are four CPUs on a machine and the reported one-minute load average is 4.00, the machine has been utilizing its processors perfectly for the last 60 seconds.

naoya のはてなダイアリー - マルチコア時代のロードアベレージの見方
http://d.hatena.ne.jp/naoya/20070518/1179492085
4CPU ならロードアベレージ 4.00 まで OK、は鵜呑みにしないほうがよさそう。状況によって異なるのでその他の指標も使って細かく統計を分析したほうがよい。 * nr_running > 1 のときはロードバランスが適切に働く。そのため 4CPU なら 4.00 で割れ、というのは負荷があるときはそれなりに正しい。

livedoor Knowledge の 「複数CPUで稼動するlinuxのload averageの目安に関する信頼できるソース」 が参考になった。多謝。

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

Jun 06, 2009

[Misc] Capacity Planning に関するメモ

Capacity Planning に関する資料をメモ。

Carpe Diem - The Art of Capacity Plaining
http://www.sssg.org/blogs/naoya/archives/996
Wikipedia - Capacity planning
http://en.wikipedia.org/wiki/Capacity_planning
capacity planning for LAMP
http://www.kitchensoap.com/talks/MySQLConf2007-Capacity.pdf
Capacity Planning for Web Operations - Web20 Expo 2008
http://www.slideshare.net/jallspaw/capacity-planning-for-web-operations-web20-expo-2008
Performance Management with Free and Bundled Tools
http://www.slideshare.net/adrianco/capacity-planning-with-free-tools
Tomcat Capacity Planning
http://www.devshed.com/c/a/BrainDump/Tomcat-Capacity-Planning/
Tomcat Tuning
http://oreilly.com/catalog/9780596101060/chapter/ch04.pdf

今度この書籍を買っておかないと。 翻訳版は出ていないのかな??
The Art of Capacity Planning (ペーパーバック)

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

Jun 05, 2009

[Misc] Google の検索結果画面に Wolfram Alpha 検索フォームを追加する GreaseMonkey スクリプト

Wolfram Alpha が OpenSearch に対応していないので、Google の検索画面に検索フォームを追加する Grease Monkey スクリプトをでっち上げてみた。これで Wolfram Alpha が少し楽に使える様になった。早く OpenSearch に対応してくれないものか。

waog.user.js


[Google 検索画面]

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

[Misc] Google Chrome for Mac リリース!!

ようやく Google Chrome for Mac がリリースされた。 正式リリースではなく Developer Release なので制約やバグ有り状態だけれども。

・・・ Tiger では動かない orz 自宅の Leopard 環境でないと試せないか。無念。 帰宅後の楽しみに取っておこう。

Google Chrome for Mac Developer Release
http://www.google.com/chrome/intl/en/eula_dev.html?dl=mac

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

Jun 03, 2009

[Misc] コードサイニング証明書に関するメモ

Java で利用可能なコードサイニング証明書を入手できる業者をメモ。

商用利用の場合(有償)

業者 製品 価格
VeriSign Object Signing対応Digital ID ¥ 94,500(1年間有効)
グローバルサイン(旧日本ジオトラスト株式会社) Object signing 対応コードサイニング証明書 Java 対応バージョン ¥ 59,850(1年間有効)
¥ 113,400(2年間有効)
¥ 163,800(3年間有効)
ChosenSecurity Sun Java Signing Degital ID $ 399.00(1年間有効)
thawte JavaSoft Developer Certificate $ 299.00(1年間有効)
$ 549.00(2年間有効)
ソートジャパン株式会社 コードサイニング証明書 JavaSoft デベロッパーサート ¥ 94,500(1年間有効)
※ 価格は 2009/06/03 時点でサイトに掲載されていた金額。

個人利用の場合(無償)

個人利用の場合、無償でコードサイニング証明書を入手することができるらしい。 提供してくれるのは 上記でも触れた thawte。

thawte - Personal E-mail Certificates
http://www.thawte.com/secure-email/personal-email-certificates/index.html
Convert the Java JKS key - store to Microsoft PFX format
http://www.crionics.com/products/opensource/faq/signFree.htm
日々是開発:SQS Development さんの 無償で正統的なコードサイニング証明書を入手する方法 にあった情報。多謝。

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

Jun 02, 2009

[Mustang] Java 配備ツールキットに関するメモ

JavaSE 6u10 で Java 配備ツールキット という機能が追加された。 Java 配備ツールキットを利用することで、クライアントにインストールされている JavaSE 環境の取得や、クライアントへの JavaSE 環境のインストールなどを行うことができる。 この機能は JavaScript ファイル(deployJava.js) で提供されている。 Applet や Java Web Start によるスマートクライアントなどを実装するときに是非活用したい機能だ。 関連情報をメモしておく。

Java 配備ツールキット
http://java.sun.com/javase/ja/6/ea/6u10/deploymentToolkit.html
Java Web App Deployment Advice for JavaSE 6u10
http://java.sun.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html

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

Jun 01, 2009

[Misc] Clickjacking に関するメモ

Clickjacking に関してメモ。 完全ではないにせよ、Web アプリケーションでは下記の Framekiller に対応しておきたい。

Clickjacking
http://en.wikipedia.org/wiki/Clickjacking
Framekiller
http://en.wikipedia.org/wiki/Framekiller
ちなみに、Twitter は Clickjacking に対応している。 iframe や frame 内に Twitter を表示しようとすると書き込み内容が表示されなくなる。

(2009/12/21 追記) Twitter の Clickjacking 対策が変更された模様。コンテンツの非表示ではなく親フレームの URL 差し替えになっている。Twitter に飛ばされてしまうのでサンプルは削除。

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

May 31, 2009

[Maven] Continuum と Apache HTTP Server + AJP 経由で呼び出す

Continuum は Jetty を内包しており、自前で Web サーバ機能を提供している。 今回は Apache HTTP Server から AJP 経由で Jetty を呼び出す方法をメモ。 使用した Continuum のバージョンは 1.2.3 で、同梱の Jetty は 6.1.11。

Continuum
http://continuum.apache.org/
Jetty
http://jetty.mortbay.com/jetty/

設定方法

既に Continuum 1.2.3 がインストールされており、起動可能な状態になっていることが前提。 Continuum がインストールされているディレクトリを $CONTINUUM_HOME と記述する。 実際に設定した環境は Debian Etch + JDK 1.5.0。

Continuum に Jetty の AJP モジュールを組み込む

Continuum に同梱されている Jetty には AJP 用のモジュールが含まれていない。 そのため、別途 Jetty をダウンロードしてモジュールを入手し、組み込む必要がある。

Jetty 6.1.11
http://dist.codehaus.org/jetty/jetty-6.1.11/
ダウンロードした ZIP に含まれている jetty-ajp-6.1.11.jar を $CONTINUUM_HOME/lib にコピーする。

Jetty の設定変更

$CONTINUUM_HOME/conf/jetty.xml の以下の 2 箇所を変更する。

以下の <Call name="addConnector"> をコメントアウト。

<!-- Use this connector for many frequently idle connections
     and for threadless continuations.
-->   
<!-- START SNIPPET: jetty_port -->
<!--
<Call name="addConnector">
  <Arg>
      <New class="org.mortbay.jetty.nio.SelectChannelConnector">
        <Set name="host"><SystemProperty name="jetty.host" /></Set>
        <Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
        <Set name="maxIdleTime">30000</Set>
        <Set name="Acceptors">2</Set>
        <Set name="statsOn">false</Set>
        <Set name="confidentialPort">8443</Set>
        <Set name="lowResourcesConnections">5000</Set>
        <Set name="lowResourcesMaxIdleTime">5000</Set>
      </New>
  </Arg>
</Call>
-->
<!-- END SNIPPET: jetty_port -->

以下を追記。

<Call name="addConnector">
  <Arg>
    <New class="org.mortbay.jetty.ajp.Ajp13SocketConnector">
      <Set name="port">8009</Set>
    </New>
  </Arg>
</Call>
変更完了後に Continuum を再起動する。

Apache HTTP Server の設定変更

httpd.conf に以下を追記(実際には、各環境に合わせた /etc/apache2/sites-available 内のファイル)。

<Location "/continuum">
  ProxyPass ajp://localhost:8009/continuum

  Order allow,deny
  allow from all
</Location>
変更完了後に Apache HTTP Server を再起動する。

設定変更の確認

http://example.com/continuum に Web ブラウザで接続する。

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

May 30, 2009

[Misc] Sender Policy Framework メモ

Wikipedia によると、SPF(Sender Policy Framework) というのは

Sender Policy Framework(センダー・ポリシー・フレームワーク)とは、電子メールにおける送信ドメイン認証のひとつ。差出人のメールアドレスが他のドメインになりすましていないかどうかを検出することができる。 SPF もしくは SPF認証 とも呼ばれる。
というものらしい。 稼働中のメールサーバが SPF に対応したメールサーバにメールを転送しようとしてエラーメールを返してきたのでメモ。 Wikipedia の記載にある通り、DNS に txt レコードを追加すれば対応できる様だ。 DNS の設定はしたが、故あって未テスト。 なので、本当に DNS の設定だけで大丈夫なのかは現時点では未検証。
Sender Policy Framework
http://ja.wikipedia.org/wiki/Sender_Policy_Framework
Sender Policy Framework
http://www.openspf.org/
ちなみに、Apache James が SPF で転送を拒否された時に送信してきたエラーメールはこんな感じ。
Hi. This is the James mail server at example.co.jp.
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.  Below
I include the list of recipients and the reason why I was unable to deliver
your message.

hoge@example.co.jp
Remote mail server told me: 550 See http://spf.pobox.com/why.html?sender=me%40example.com&ip=192.168.1.1&receiver=example.co.jp (#5.7.1)

The original message is attached.

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

May 29, 2009

[Linux] rkhunter を試してみた。

rkhunter は rootkit を検出してくれるツール。 chkrootkit に引き続きこちらも試してみた。 rkhunter の方がより詳細な情報を出してくれて楽しい。

The Rootkit Hunter project
http://rkhunter.sourceforge.net/

rkhunter のインストール

Debian Etch に rkhunter 1.2.9 をインストールした。 apt でインストール出来るので非常に楽。

# apt-get install rkhunter
Reading package lists... Done
Building dependency tree... Done
Recommended packages:
  libmd5-perl
The following NEW packages will be installed:
  rkhunter

  (SNIP)

Unpacking rkhunter (from .../rkhunter_1.2.9-2_all.deb) ...
Setting up rkhunter (1.2.9-2) ...
# rkhunter --version
Rootkit Hunter 1.2.9
#

rkhunter の実行

# rkhunter -c


Rootkit Hunter 1.2.9 is running

Determining OS... Unknown
Warning: This operating system is not fully supported!
All MD5 checks will be skipped!


Checking binaries
* Selftests
     Strings (command)                                        [ OK ]


* System tools
     Skipped!


Check rootkits
* Default files and directories
   Rootkit '55808 Trojan - Variant A'...                      [ OK ]
   ADM Worm...                                                [ OK ]
   Rootkit 'AjaKit'...                                        [ OK ]
   Rootkit 'aPa Kit'...                                       [ OK ]
   Rootkit 'Apache Worm'...                                   [ OK ]
   Rootkit 'Ambient (ark) Rootkit'...                         [ OK ]
   Rootkit 'Balaur Rootkit'...                                [ OK ]
   Rootkit 'BeastKit'...                                      [ OK ]
   Rootkit 'beX2'...                                          [ OK ]
   Rootkit 'BOBKit'...                                        [ OK ]
   Rootkit 'CiNIK Worm (Slapper.B variant)'...                [ OK ]
   Rootkit 'Danny-Boy's Abuse Kit'...                         [ OK ]
   Rootkit 'Devil RootKit'...                                 [ OK ]
   Rootkit 'Dica'...                                          [ OK ]
   Rootkit 'Dreams Rootkit'...                                [ OK ]
   Rootkit 'Duarawkz'...                                      [ OK ]
   Rootkit 'Flea Linux Rootkit'...                            [ OK ]
   Rootkit 'FreeBSD Rootkit'...                               [ OK ]
   Rootkit 'Fuck`it Rootkit'...                               [ OK ]
   Rootkit 'GasKit'...                                        [ OK ]
   Rootkit 'Heroin LKM'...                                    [ OK ]
   Rootkit 'HjC Kit'...                                       [ OK ]
   Rootkit 'ignoKit'...                                       [ OK ]
   Rootkit 'ImperalsS-FBRK'...                                [ OK ]
   Rootkit 'Irix Rootkit'...                                  [ OK ]
   Rootkit 'Kitko'...                                         [ OK ]
   Rootkit 'Knark'...                                         [ OK ]
   Rootkit 'Li0n Worm'...                                     [ OK ]
   Rootkit 'Lockit / LJK2'...                                 [ OK ]
   Rootkit 'MRK'...                                           [ OK ]
   Rootkit 'Ni0 Rootkit'...                                   [ OK ]
   Rootkit 'RootKit for SunOS / NSDAP'...                     [ OK ]
   Rootkit 'Optic Kit (Tux)'...                               [ OK ]
   Rootkit 'Oz Rootkit'...                                    [ OK ]
   Rootkit 'Portacelo'...                                     [ OK ]
   Rootkit 'R3dstorm Toolkit'...                              [ OK ]
   Rootkit 'RH-Sharpe's rootkit'...                           [ OK ]
   Rootkit 'RSHA's rootkit'...                                [ OK ]
   Sebek LKM...                                               [ OK ]
   Rootkit 'Scalper Worm'...                                  [ OK ]
   Rootkit 'Shutdown'...                                      [ OK ]
   Rootkit 'SHV4'...                                          [ OK ]
   Rootkit 'SHV5'...                                          [ OK ]
   Rootkit 'Sin Rootkit'...                                   [ OK ]
   Rootkit 'Slapper'...                                       [ OK ]
   Rootkit 'Sneakin Rootkit'...                               [ OK ]
   Rootkit 'Suckit Rootkit'...                                [ OK ]
   Rootkit 'SunOS Rootkit'...                                 [ OK ]
   Rootkit 'Superkit'...                                      [ OK ]
   Rootkit 'TBD (Telnet BackDoor)'...                         [ OK ]
   Rootkit 'TeLeKiT'...                                       [ OK ]
   Rootkit 'T0rn Rootkit'...                                  [ OK ]
   Rootkit 'Trojanit Kit'...                                  [ OK ]
   Rootkit 'Tuxtendo'...                                      [ OK ]
   Rootkit 'URK'...                                           [ OK ]
   Rootkit 'VcKit'...                                         [ OK ]
   Rootkit 'Volc Rootkit'...                                  [ OK ]
   Rootkit 'X-Org SunOS Rootkit'...                           [ OK ]
   Rootkit 'zaRwT.KiT Rootkit'...                             [ OK ]

* Suspicious files and malware
   Scanning for known rootkit strings                         [ OK ]
   Scanning for known rootkit files                           [ OK ]
   Testing running processes...                               [ Skipped ]
   Miscellaneous Login backdoors                              [ OK ]
   Miscellaneous directories                                  [ OK ]
   Software related files                                     [ OK ]
   Sniffer logs                                               [ OK ]

[Press  to continue]


* Trojan specific characteristics
   shv4
     Checking /etc/rc.d/rc.sysinit                            [ Not found ]
     Checking /etc/inetd.conf                                 [ Clean ]
     Checking /etc/xinetd.conf                                [ Skipped ]

* Suspicious file properties
   chmod properties
     Checking /bin/ps                                         [ Clean ]
     Checking /bin/ls                                         [ Clean ]
     Checking /usr/bin/w                                      [ Clean ]
     Checking /usr/bin/who                                    [ Clean ]
     Checking /bin/netstat                                    [ Clean ]
     Checking /bin/login                                      [ Clean ]
   Script replacements
     Checking /bin/ps                                         [ Clean ]
     Checking /bin/ls                                         [ Clean ]
     Checking /usr/bin/w                                      [ Clean ]
     Checking /usr/bin/who                                    [ Clean ]
     Checking /bin/netstat                                    [ Clean ]
     Checking /bin/login                                      [ Clean ]

* OS dependant tests

   Linux
     Checking loaded kernel modules...                        [ OK ]
     Checking file attributes                                 [ OK ]
     Checking LKM module path                                 [ OK ]


Networking
* Check: frequently used backdoors
  Port 2001: Scalper Rootkit                                  [ OK ]
  Port 2006: CB Rootkit                                       [ OK ]
  Port 2128: MRK                                              [ OK ]
  Port 14856: Optic Kit (Tux)                                 [ OK ]
  Port 47107: T0rn Rootkit                                    [ OK ]
  Port 60922: zaRwT.KiT                                       [ OK ]

* Interfaces
     Scanning for promiscuous interfaces...                   [ OK ]

[Press  to continue]



System checks
* Allround tests
   Checking hostname... Found. Hostname is Ouverture
   Checking for passwordless user accounts... OK
   Checking for differences in user accounts...                    [ NA ]
   Checking for differences in user groups... Creating file It seems this is your first time.
   Checking boot.local/rc.local file... 
     - /etc/rc.local                                          [ OK ]
     - /etc/rc.d/rc.local                                     [ Not found ]
     - /usr/local/etc/rc.local                                [ Not found ]
     - /usr/local/etc/rc.d/rc.local                           [ Not found ]
     - /etc/conf.d/local.start                                [ Not found ]
     - /etc/init.d/boot.local                                 [ Not found ]
   Checking rc.d files...                                     [ Not found ]
   Checking history files
     Bourne Shell                                             [ OK ]

* Filesystem checks
   Checking /dev for suspicious files...                      [ OK ]
   Scanning for hidden files...                               [ Warning! ]
---------------
/etc/.java
/etc/.pwd.lock /dev/.static
/dev/.udev
/dev/.initramfs
/dev/.initramfs-tools 
---------------
Please inspect:  /etc/.java (directory)  /dev/.static (directory)  /dev/.udev (directory)  /dev/.initramfs (directory) 

[Press  to continue]



Application advisories
* Application scan
   Checking Apache2 modules ...                               [ OK ]
   Checking Apache configuration ...                          [ OK ]

* Application version scan
   - Exim MTA 4.63                                            [ Unknown ]
   - GnuPG 1.4.6                                              [ Unknown ]
   - Bind DNS 9.3.4-P1.1                                      [ Unknown ]
   - OpenSSL 0.9.8c                                           [ Unknown ]
   - OpenSSH 4.3p2                                            [ Unknown ]

Your system contains some unknown version numbers. Please run Rootkit Hunter
with the --update parameter or contact us through the Rootkit Hunter mailinglist
at rkhunter-users@lists.sourceforge.net.


Security advisories
* Check: Groups and Accounts
   Searching for /etc/passwd...                               [ Found ]
   Checking users with UID '0' (root)...                      [ OK ]

* Check: SSH
   Searching for sshd_config... 
   Found /etc/ssh/sshd_config
   Checking for allowed root login... Watch out Root login possible. Possible risk!
    info: "PermitRootLogin yes" found in file /etc/ssh/sshd_config
    Hint: See logfile for more information about this issue
   Checking for allowed protocols...                          [ OK (Only SSH2 allowed) ]

* Check: Events and Logging
   Search for syslog configuration...                         [ OK ]
   Checking for running syslog slave...                       [ OK ]
   Checking for logging to remote system...                   [ OK (no remote logging) ]

[Press  to continue]



---------------------------- Scan results ----------------------------

MD5 scan
Skipped

File scan
Scanned files: 342
Possible infected files: 0

Application scan
Vulnerable applications: 0

Scanning took 66 seconds

-----------------------------------------------------------------------

Do you have some problems, undetected rootkits, false positives, ideas
or suggestions? Please e-mail us through the Rootkit Hunter mailinglist
at rkhunter-users@lists.sourceforge.net.

-----------------------------------------------------------------------
#
"hidden files" で chkrootkit とは異なるファイルが指摘された。 こちらも特に問題は無い様だ。 chkrootkit に引き続き rkhunter も恙なく終了して何より。

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

May 28, 2009

[Linux] chkrootkit を試してみた。

chkrootkit は rootkit を検出してくれるツール。 面白そうなので試してみた。

chkrootkit
http://www.chkrootkit.org/

chkrootkit のインストール

chkrootkit 0.47 を Debian Etch にインストールした。 apt でインストール出来るので非常に楽。

# apt-get install chkrootkit
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  chkrootkit

  (SNIP)

Unpacking chkrootkit (from .../chkrootkit_0.47-2_i386.deb) ...
Setting up chkrootkit (0.47-2) ...
# chkrootkit -V       
chkrootkit version 0.47

chkrootkit の実行

# chkrootkit 
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected
Checking `fingerd'... not found
Checking `gpm'... not found
Checking `grep'... not infected
Checking `hdparm'... not found
Checking `su'... not infected
Checking `ifconfig'... not infected
Checking `inetd'... not infected
Checking `inetdconf'... not infected
Checking `identd'... not found
Checking `init'... not infected
Checking `killall'... not found
Checking `ldsopreload'... not infected
Checking `login'... not infected
Checking `ls'... not infected
Checking `lsof'... not found
Checking `mail'... not infected
Checking `mingetty'... not found
Checking `netstat'... not infected
Checking `named'... not infected
Checking `passwd'... not infected
Checking `pidof'... not infected
Checking `pop2'... not found
Checking `pop3'... not found
Checking `ps'... not infected
Checking `pstree'... not found
Checking `rpcinfo'... not infected
Checking `rlogind'... not found
Checking `rshd'... not found
Checking `slogin'... not infected
Checking `sendmail'... not infected
Checking `sshd'... not infected
Checking `syslogd'... not infected
Checking `tar'... not infected
Checking `tcpd'... not infected
Checking `tcpdump'... not infected
Checking `top'... not infected
Checking `telnetd'... not found
Checking `timed'... not found
Checking `traceroute'... not infected
Checking `vdir'... not infected
Checking `w'... not infected
Checking `write'... not infected
Checking `aliens'... no suspect files
Searching for sniffer's logs, it may take a while... nothing found
Searching for HiDrootkit's default dir... nothing found
Searching for t0rn's default files and dirs... nothing found
Searching for t0rn's v8 defaults... nothing found
Searching for Lion Worm default files and dirs... nothing found
Searching for RSHA's default files and dir... nothing found
Searching for RH-Sharpe's default files... nothing found
Searching for Ambient's rootkit (ark) default files and dirs... nothing found
Searching for suspicious files and dirs, it may take a while... 
/usr/lib/iceape/.autoreg
/lib/init/rw/.ramfs

Searching for LPD Worm files and dirs... nothing found
Searching for Ramen Worm files and dirs... nothing found
Searching for Maniac files and dirs... nothing found
Searching for RK17 files and dirs... nothing found
Searching for Ducoci rootkit... nothing found
Searching for Adore Worm... nothing found
Searching for ShitC Worm... nothing found
Searching for Omega Worm... nothing found
Searching for Sadmind/IIS Worm... nothing found
Searching for MonKit... nothing found
Searching for Showtee... nothing found
Searching for OpticKit... nothing found
Searching for T.R.K... nothing found
Searching for Mithra... nothing found
Searching for OBSD rk v1... nothing found
Searching for LOC rootkit... nothing found
Searching for Romanian rootkit... nothing found
Searching for Suckit rootkit... nothing found
Searching for Volc rootkit... nothing found
Searching for Gold2 rootkit... nothing found
Searching for TC2 Worm default files and dirs... nothing found
Searching for Anonoying rootkit default files and dirs... nothing found
Searching for ZK rootkit default files and dirs... nothing found
Searching for ShKit rootkit default files and dirs... nothing found
Searching for AjaKit rootkit default files and dirs... nothing found
Searching for zaRwT rootkit default files and dirs... nothing found
Searching for Madalin rootkit default files... nothing found
Searching for Fu rootkit default files... nothing found
Searching for ESRK rootkit default files... nothing found
Searching for rootedoor... nothing found
Searching for ENYELKM rootkit default files... nothing found
Searching for anomalies in shell history files... nothing found
Checking `asp'... not infected
Checking `bindshell'... not infected
Checking `lkm'... chkproc: nothing detected
Checking `rexedcs'... not found
Checking `sniffer'... lo: not promisc and no packet sniffer sockets
eth0: PACKET SNIFFER(/usr/sbin/snort[647])
Checking `w55808'... not infected
Checking `wted'... chkwtmp: nothing deleted
Checking `scalper'... not infected
Checking `slapper'... not infected
Checking `z2'... chklastlog: nothing deleted
# 
"suspicious file" で指摘されたファイルは調べてみたところ特に危険では無い様だ。 特に問題は無くて何より。

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

May 27, 2009

[Misc] SnortAlog で snort のレポート出力

Snort を入れてはあるものの。 レポートはデイリーでメールされてくるものの。 最近は全く見ていなかったりする。 Snort を入れてある意味が全然無いので、Snort のレポートに目を通す気になるようにすべく SnortAlog を入れてみた。

SnortAlog : IDS/IPS and Firewall log Analyzer
http://jeremy.chartier.free.fr/snortalog/

SnortAlog のインストール

Debian にインストールしたときのログ。 HTML 形式のレポート作成には GD Graph が必要なので、予め apt でインストールしておく。

$ apt-get install libgd-graph-perl
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
  libgd-gd2-noxpm-perl libgd-text-perl libgd2-noxpm
Suggested packages:
  ttf-dustin libgd-tools
The following NEW packages will be installed:
  libgd-gd2-noxpm-perl libgd-graph-perl libgd-text-perl libgd2-noxpm
0 upgraded, 4 newly installed, 0 to remove and 3 not upgraded.
Need to get 835kB of archives.
After unpacking 2232kB of additional disk space will be used.
Do you want to continue [Y/n]? y

  (SNIP)

Setting up libgd-text-perl (0.86-3.1) ...
Setting up libgd-graph-perl (1.43.08-2.1) ...
$ wget http://jeremy.chartier.free.fr/snortalog/downloads/snortalog/snortalog_v2.4.2.tgz
--23:38:54--  http://jeremy.chartier.free.fr/snortalog/downloads/snortalog/snortalog_v2.4.2.tgz
           => `snortalog_v2.4.2.tgz'

  (SNIP)

23:38:59 (165.67 KB/s) - `snortalog_v2.4.2.tgz' saved [795050/795050]

$ tar zxvf ./snortalog_v2.4.2.tgz 
snortalog/CHANGES
snortalog/conf/

  (SNIP)

snortalog/picts/p_27.gif
snortalog/snortalog.pl
$ mv ./snortalog ./snortalog-2.4.2
$ mv ./snortalog-2.4.2 /opt
$ ln -s /opt/snortalog-2.4.2 /opt/snortalog
$ 

デイリー HTML レポートの作成

以下の様なシェルスクリプトをでっち上げてデイリーで HTML レポートを作成する。

$ cat /etc/cron.daily/snortalog
#!/bin/sh

SNORTLOG_DIR=/var/log/snort
SNORTALOG_HOME=/opt/snortalog
OUTPUT_DIR=/var/www/html/snort
REPORT_HTML=index.html

DATE=`date --date 'yesterday' +'%Y%m%d'`

mkdir -p ${OUTPUT_DIR}/${DATE}/picts

cd ${SNORTLOG_DIR}
gzip -d ./alert.1.gz

cd ${SNORTALOG_HOME}
./snortalog.pl -file ${SNORTLOG_DIR}/alert.1 -3 -r -pictsdir ../picts -g gif -report -o ${OUTPUT_DIR}/${DATE}/${REPORT_HTML}
mv ./*.gif ${OUTPUT_DIR}/${DATE} 

cd ${SNORTLOG_DIR}
gzip ./alert.1

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

May 26, 2009

[Library] iCal4j にチャレンジ

iCal4j とは

iCal4j は iCalendar を Java で扱うライブラリ。 公式サイトによると

iCal4j is a Java API that provides support for the iCalendar specification as defined in RFC2445. This support includes a Parser, Object Model and Generator for iCalendar data streams.
というものらしい。
iCal4j
http://ical4j.sourceforge.net/
iCal4j - API Documents
http://m2.modularity.net.au/projects/ical4j/apidocs/
iCal4j - Download
http://sourceforge.net/project/showfiles.php?group_id=107024
iCal4j - Source Repository
http://ical4j.cvs.sourceforge.net/viewvc/ical4j/iCal4j/

Maven2 での iCal4j の利用

iCal4j は Maven Central Repository に登録されている。便利。場所は こちら。 Maven2 で管理しているプロジェクトであれば pom.xml に

<project>
  <dependencies>
    <dependency>
      <groupId>ical4j</groupId>
      <artifactId>ical4j</artifactId>
      <version>0.9.20</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>
を追記するだけで利用出来るようになる。

サンプルコード

イベントを作成し、文字列として書き出すコードのサンプルはこちら。

// イベントの生成
VEvent event = new VEvent();
// UID
event.getProperties().add(new Uid("id"));
// タイムゾーン
TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance()
        .createRegistry();
net.fortuna.ical4j.model.TimeZone timezoneAsIcalTimeZone = registry
        .getTimeZone(this.timeZone.getValue());
VTimeZone tz = timezoneAsIcalTimeZone.getVTimeZone();
event.getProperties().add(tz.getTimeZoneId());
// サマリ
event.getProperties().add(new Summary("サマリ"));
// 詳細
event.getProperties().add(new Description("詳細"));
// 場所
event.getProperties().add(new Location("場所"));
// 最終更新日時
event.getProperties().add(
new LastModified(new DateTime(System.currentTimeMillis())));
// 開始日時
event.getProperties().add(
        new DtStart(new DateTime(System.currentTimeMillis())));
// 終了日時
event.getProperties().add(
        new DtEnd(new DateTime(System.currentTimeMillis() + 60 * 60 * 1000)));

// カレンダの生成
Calendar calendar = new Calendar();
calendar.getProperties().add(new ProdId("productId"));
calendar.getProperties().add(CalScale.GREGORIAN);
calendar.getProperties().add(Version.VERSION_2_0);

// カレンダにイベントを追加
calendar.getComponents().add(event);

// カレンダを文字列として書き出す
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CalendarOutputter outputter = new CalendarOutputter();
outputter.output(calendar, baos);
String calendarAsString = baos.toString("UTF-8");

公式サイトに様々なサンプルコードが紹介されている。

iCal4j - Examples
http://wiki.modularity.net.au/ical4j/index.php?title=Examples

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

May 25, 2009

[Misc] IE6, IE7, IE8 の共存方法メモ

Microsoft 謹製の比較ツール。

Microsoft Expression Web SuperPreview for Windows Internet Explorer
http://www.microsoft.com/downloads/details.aspx?FamilyID=8e6ac106-525d-45d0-84db-dccff3fae677&displaylang=en

おなじみ IETester。

IETester
http://www.my-debugbar.com/wiki/IETester/HomePage

それぞれインストールする方法も。こちらは IT戦記さんの 「IE6 と IE7 と IE8 を同じマシンで共存させる方法」 からの情報。多謝。ただ、残念なことに Windows XP Professional (on Parallels) + IE8 環境で試してみたら IE6 のテキストボックスがキー入力を受け付けなかった orz

Internet Explorer 7 running side by side with IE6.
http://tredosoft.com/IE7_standalone
Install multiple versions of IE on your PC
http://tredosoft.com/Multiple_IE

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

May 24, 2009

[Subversion] Subversion サーバの移行

Subversion のサーバを移行した。 新しいサーバから全プロジェクトをチェックアウトし直すのは面倒だし時間がかかるので、svn switch でリポジトリの移動をすることに。 異なるサーバ間のワーキングコピー移動は svn switch に --relocate オプションを指定する必要がある。 ちなみに、Subclipse では --relocate オプションを付ける方法が見つからなかった。

異なるサーバ間のワーキングコピー移動方法

$ cd workspace/MyProject
$ svn switch --relocate https://oldsvn.example.com/repos/MyProject/trunk https://newsvn.example.com/repos/MyProject/trunk

Subclipse が Subvesion ver.1.4 ベースで、コマンドラインの svn が ver.1.5 以上の環境(要は私の環境)では、svn 実行後にワーキングコピーをダウングレードする必要がある。

$ cd workspace
$ ./change-svn-wc-format.py ./MyProject 1.4
詳細は Subversion で削除したファイルをリポジトリから復元する方法と・・・ を参照。

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

May 22, 2009

[Linux] 古い Fedora Core における yum のエラー

Fedora Core 5, 6 辺りで 2009/05 現在 yum を実行すると以下の様なエラーが発生することがある。

# yum check-update
Loading "installonlyn" plugin
Setting up repositories
Error: Cannot find a valid baseurl for repo: updates
#
# yum check-update
Loading "installonlyn" plugin
Setting up repositories
Error: Cannot find a valid baseurl for repo: extras
#
昔は動いていたはずなので、どうも yum リポジトリのミラーリスト取得方法が変更された様だ。 対応方法をメモしておく。

yum リポジトリの設定変更方法

# cp /etc/yum.repos.d/fedora-updates.repo /etc/yum.repos.d/fedora-updates.repo.original
# vi /etc/yum.repos.d/fedora-updates.repo
# diff /etc/yum.repos.d/fedora-updates.repo.original /etc/yum.repos.d/fedora-updates.repo
4c4
< mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-fc$releasever&arch=$basearch
---
> mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f$releasever&arch=$basearch
12c12
< mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-debug-fc$releasever&arch=$basearch
---
> mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-debug-f$releasever&arch=$basearch
20c20
< mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-source-fc$releasever&arch=$basearch
---
> mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-source-f$releasever&arch=$basearch
# cp /etc/yum.repos.d/fedora-extras.repo /etc/yum.repos.d/fedora-extras.repo.original
# vi /etc/yum.repos.d/fedora-extras.repo
# diff /etc/yum.repos.d/fedora-extras.repo.original /etc/yum.repos.d/fedora-extras.repo
5c5
< enabled=1
---
> enabled=0
#
・・・Fedora 5 か。懐かしい響きだ。

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

May 21, 2009

[Misc] iCalendar メモ

iCalendar とはスケジュールや TODO, イベントといったカレンダーで扱われるデータを相互交換するための標準フォーマット。RFC にて仕様が規定されている。

RFC2445 Internet Calendaring and Scheduling Core Object Specification (iCalendar)
http://www.ietf.org/rfc/rfc2445.txt
RFC2446 iCalendar Transport-Independent Interoperability Protocol (iTIP)
http://www.ietf.org/rfc/rfc2446.txt
RFC2447 iCalendar Message-Based Interoperability Protocol (iMIP)
http://www.ietf.org/rfc/rfc2447.txt
Wikipedia - iCalendar
http://ja.wikipedia.org/wiki/ICalendar
iCalendar を扱う Java 用のライブラリも公開されている。
iCal4j
http://ical4j.sourceforge.net/

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

May 11, 2009

[WebService] 「Amazon アソシエイト Web サービス」改め「Product Advertising API」メモ

Amazon アソシエイト Web サービスが Product Advertising API という名称に変更されるそうだ。 それに伴い、API に対する全てのリクエストで認証が必要となるとのこと。 移行期間は 2009/05/11 から 2009/08/14 の 3 ヶ月間で、2009/08/15 以降は認証が必須になるそうな。 結構オオゴトだ。

Secret Access Key の取得

今までは Access Key ID で呼び出し元を識別していたが、新仕様では Access Key ID に加えて Secret Access Key というものが必要となる。 Secret Access Key は既に Access Key ID を持っているのであれば、http://aws.amazon.com/から Your Account > Access Identifiers で取得できる(要ログイン)。

リクエストの組み立て

次にリクエストを組み立てる。現行仕様での以下のリクエストを認証に対応させてみる。

http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=*********************&Operation=ItemLookup&ItemId=4101162069&ResponseGroup=ItemAttributes,Offers,Images,Reviews&Version=2009-01-06
まずはパラメータ部分のみをリスト化する。
Service=AWSECommerceService
AWSAccessKeyId=*********************
Operation=ItemLookup
ItemId=4101162069
ResponseGroup=ItemAttributes,Offers,Images,Reviews
Version=2009-01-06
これに Timestamp を付加する。amazon.co.jp の場合、Timestamp は JST を使用(amazon.com の場合は GMT)し、フォーマットは yyyy-MM-dd'T'HH:mm:ss'Z' とする。
Service=AWSECommerceService
AWSAccessKeyId=*********************
Operation=ItemLookup
ItemId=4101162069
ResponseGroup=ItemAttributes,Offers,Images,Reviews
Version=2009-01-06
Timestamp=2009-05-011T12:00:00Z
パラメータをソートする。
AWSAccessKeyId=*********************
ItemId=4101162069
Operation=ItemLookup
ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews
Service=AWSECommerceService
Timestamp=2009-05-011T12%3A00%3A00Z
Version=2009-01-06
パラメータを '&' で繋げる。
AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06
'&' で繋げたパラメータの前に以下の 3 行を付加する。
GET
webservices.amazon.co.jp
/onca/xml
AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews
&Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06

※AWSAccessKeyID 〜 Version=2009-01-06 は一行。
この 4 行のデータを Secret Access Key をキーとして RFC 2104-compliant HMAC with the SHA256 でハッシュ化する。 Java の場合、以下のロジックでハッシュ化できる。
Java Sample Code for Calculating Signature Version 2 Signatures
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AuthJavaSampleSig2.html
で、得られたハッシュ値がこちら。
uIwCHHLMsvxxUmd+IX+KqNh9/+eNXlUB2X+L21woSZE=
ハッシュ値を URL Encode する。
uIwCHHLMsvxxUmd%2BIX%2BKqNh9%2F%2BeNXlUB2X%2BL21woSZE%3D
URL Encode されたハッシュ値をパラメータの最後に付加する。
http://webservices.amazon.co.jp/onca/xml?AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06&Signature=uIwCHHLMsvxxUmd%2BIX%2BKqNh9%2F%2BeNXlUB2X%2BL21woSZE%3D
これでリクエストは完成。

上記手順のより詳細な情報はこちら
Example REST Requests
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/rest-signature.html

API にアクセス

上で組み立てたリクエストで API にアクセスして正常応答があれば成功。

参考

より詳細な情報は Amazon Product Advertising API のドキュメントを参照のこと。

Product Advertising API - Request Authentication
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/RequestAuthenticationArticle.html

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

Apr 27, 2009

[Linux] iptables -F に気をつけよう

iptables -F はルールのクリアを行うが、ポリシーのクリアは行わない。 例えば

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http state NEW 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh state NEW 

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
という設定の時に iptables -F を実行しようものなら
Chain INPUT (policy DROP)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
という状態になってしまい、全てのパケットが DROP されて頭を抱えることに。 必ず iptables -F の前にポリシーを確認しよう、という教訓。

iptables の設定を大きく変更するときに少しでも不安があったら

(sleep 60; /etc/init.d/iptables restart) &
を予め仕込んでおくことを忘れない様にしたい。

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

Apr 06, 2009

[Apple] iPhone アプリ開発のとっかかりメモ

Apple Developer Connection - iPhone Developer Program
http://developer.apple.com/jp/iphone/program/
Apple Developer Connection - iPhone Dev Center
http://developer.apple.com/iphone/
Apple Developer Connection - iPhone Reference Library - Sample Code
http://developer.apple.com/iphone/library/navigation/SampleCode.html
技術評論社 - 目指せ!iPhone アプリ開発エキスパート
http://gihyo.jp/dev/serial/01/iphone
iPhone-dev
http://iphone-dev.jp/
c/fe - iPhone実機に自作プログラムを転送するまでの手順
http://d.hatena.ne.jp/uzulla/20080911

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

Mar 26, 2009

[Maven] Apache Maven 2.1.0 がリリースされた!!

2009/03/21 に Apache Maven 2.1.0 がリリースされていた。 暇を見つけて早速入れ替えてみよう。 リリースノートをざっと見た感じでは関係ありそうなのはバグ FIX くらいで、嬉しい新機能はなさそう。

Apache Maven Project
http://maven.apache.org/
Maven 2.1.0
http://maven.apache.org/release-notes.html
Release Notes - Maven 2 - Version 2.1.0 - HTML format
http://jira.codehaus.org/secure/ReleaseNote.jspa?version=14587&styleName=Html&projectId=10500

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

Mar 25, 2009

[Apple] Parallels のイメージサイズを最適化する方法

Parallels も長く使っていると、ゲスト OS 上でのファイルの作成・削除の繰り返しでイメージが肥大化してくる。 そうした時に有効なのが、"Parallels Compressor"。 不要なデータを削除し、イメージを最適なサイズまで縮小してくれる。 多少時間はかかるものの(MacBook Pro 2GHz で 3 〜 4 時間程度かかった)、かなりディスクスペースの節約になる。

[Parallels Compressor]

[最適化前]
最適化前
[最適化後]
最適化後

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

Mar 19, 2009

[Misc] OpenSearch に対応する方法

OpenSearch とは

OpenSearch.org によると、OpenSearch とは

OpenSearch is a collection of simple formats for the sharing of search results.
You can use OpenSearch formats to help people discover and use your search engine and to syndicate search results across the web.
というものらしい。 対応すると Firefox の検索バーに Google や Yahoo と並んで自分のサイトを表示できる様だ。 早速遊んでみることに。
OpenSearch.org
http://www.opensearch.org/Home
Creating OpenSearch plugins for Firefox
https://developer.mozilla.org/ja/Creating_OpenSearch_plugins_for_Firefox

OpenSearch description document の作成

まずは OpenSearch description document を作成する。 詳細は OpenSearch description document に譲ることにして、ここではこのブログ用の内容をメモしておく。

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
                       xmlns:moz="http://www.mozilla.org/2006/browser/search/">
  <ShortName>in-vitro.jp blog search</ShortName>
  <Description>in-vitro.jp blog search</Description>
  <InputEncoding>UTF-8</InputEncoding>
  <Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAPSGlDQ1BJQ0...(略)</Image>
  <Url type="text/html" method="GET" template="http://www.in-vitro.jp/blog/google.cgi">
    <Param name="key" value="site:www.in-vitro.jp/blog/"/>
    <Param name="q" value="{searchTerms}"/>
  </Url>
  <moz:SearchForm>http://www.in-vitro.jp/blog/</moz:SearchForm>
</OpenSearchDescription>
以下の 2 点だけ気をつければ作成自体は特に難しいことではない。
  1. 検索のクエリ文字列は {searchTerms} で置換される。
  2. アイコン 16 x 16 で作成し、Base64 でエンコードして <Image> 内に埋め込む。サーバに置いて参照することもできる様だ(上の例では埋め込んでいる)。アイコンを Base64 でエンコードするのは The data: URI kitchen を使うと楽。
作成できたら適当なファイル名でサーバ上に設置する。

HTML ヘッダにリンクを設定

HTML ヘッダに OpenSearch description document へのリンクを設定する。

<html>
  <head>
    ...
    <link rel="search" type="application/opensearchdescription+xml" title="in-vitro.jp blog" href="/blog/opensearch.xml" />
  </head>
  ...
</html>

Firefox で検索

OpenSearch に対応したサイトを開き、Firefox 検索バーのプルダウンを開くと

[Firefox検索バー]

の様に検索バーへの登録メニューが表示される。登録を行い、検索をしてみると・・・

[検索を実行]

検索できた。

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

Mar 18, 2009

[Misc] P3P に関するメモ

The Platform for Privacy Preferences 1.0 (P3P1.0) Specification
http://www.w3.org/TR/P3P/
P3P 1.0 の公開について (W3C 勧告)
http://www.w3.org/2002/04/p3p-pressrelease.html.ja
P3P Validator
http://www.w3.org/P3P/validator.html
P3P 1.0 Implementations
http://www.w3.org/P3P/implementations
【絵で分かるキーワード】P3P(The Platform for Privacy Preferences Project、ぴーすりーぴー)
http://review.ascii24.com/db/review/soft/web/2003/06/01/643973-000.html

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

Mar 16, 2009

[Misc] CentOS 5 に memcached をインストール

CentOS 5 に memcached をインストールしたときのメモ。 ・・・メモと言っても yum を流しただけ。

# yum search memcached
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile

  (略)

python-memcached.noarch : A Python memcached client library
memcached.i386 : High Performance, Distributed Memory Object Cache
memcached-selinux.i386 : SELinux policy module supporting memcached

# yum install memcached.i386
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * epel: ftp.jaist.ac.jp
 * extras: ftp.nara.wide.ad.jp

  (略)

Running Transaction
  Installing: memcached                    ######################### [1/1] 

Installed: memcached.i386 0:1.2.5-2.el5
Complete!

# /etc/init.d/memcached start
Starting memcached:                                        [  OK  ]
#

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

Mar 15, 2009

[Tiger] RSA 暗号の鍵を DB に格納する方法

RSA 暗号の公開鍵を DB に格納しようと苦心惨憺したときのメモ。 以下のサイトが非常に参考になった。多謝。

Java Cryptgraphy
http://tokyo.cool.ne.jp/hharuki/java/81crypt.html
@//メモ - JavaSE RSA暗号
http://hondou.homedns.org/pukiwiki/index.php?cmd=read&page=JavaSE%20RSA%B0%C5%B9%E6

コード

ここではテストのためファイルから公開鍵、秘密鍵を取得している。

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.mail.internet.MimeUtility;

...

public void test() throws Exception {

  String data = "hogehogehogehoge";

  // 公開鍵の読み込み
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  InputStream is = null;
  try {
    is = new FileInputStream(new File("./mykey.x509"));
    int ch = 0;
    while ((ch = is.read()) >= 0) {
      baos.write(ch);
    }
  } finally {
    if(is != null) {
      is.close();
    }
  }
  // 暗号化。
  byte[] encrypted = this.encrypt(data.getBytes(), baos.toByteArray());
  System.out.println("" + new String(encrypted));

  // 秘密鍵の読み込み
  baos = new ByteArrayOutputStream();
  try {
    is = new FileInputStream(new File("./mykey.pkcs8"));
    ch = 0;
    while ((ch = is.read()) >= 0) {
      baos.write(ch);
    }
  } finally {
    if(is != null) {
      is.close();
    }
  }
  // 復号化。
  byte[] decrypted = this.decrypt(encrypted, baos.toByteArray());
  System.out.println("" + new String(decrypted));
}

public byte[] encrypt(final byte[] text, final byte[] publicKey)
        throws Exception {
  PublicKey key = KeyFactory.getInstance("RSA").generatePublic(
         new X509EncodedKeySpec(this.decodeBase64(publicKey)));

  Cipher cipher = Cipher.getInstance("RSA");
  cipher.init(Cipher.ENCRYPT_MODE, key);

  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  CipherOutputStream cos = new CipherOutputStream(baos, cipher);
  cos.write(text);
  cos.close();

  return baos.toByteArray();
}

public byte[] decrypt(final byte[] text, final byte[] privateKey)
        throws Exception {
  PrivateKey key = KeyFactory.getInstance("RSA").generatePrivate(
         new PKCS8EncodedKeySpec(this.decodeBase64(privateKey)));

  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  Cipher cipher = Cipher.getInstance("RSA");
  cipher.init(Cipher.DECRYPT_MODE, key);
  CipherOutputStream cos = new CipherOutputStream(baos, cipher);
  cos.write(text);
  cos.close();

  return baos.toByteArray();
}

protected byte[] decodeBase64(final byte[] text) throws MessagingException,
        IOException {
  InputStream is = MimeUtility.decode(new ByteArrayInputStream(text), "base64");

  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  int ch = 0;
  while ((ch = is.read()) >= 0) {
    baos.write(ch);
  }
  return baos.toByteArray();
}

鍵の作成

下記で作成した mykey.x509, mykey.pkcs8 がそれぞれ公開鍵、秘密鍵になる。

$ openssl genrsa -des 1024 > ./mykey.pem
Generating RSA private key, 1024 bit long modulus
...............++++++
............++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
$ openssl pkcs8 -topk8 -in ./mykey.pem -out ./mykey.pkcs8 -nocrypt
Enter pass phrase for ./mykey.pem:
$ openssl rsa -in ./mykey.pem -pubout -out ./mykey.x509
Enter pass phrase for ./mykey.pem:
writing RSA key
$ cp ./mykey.pkcs8 ./mykey.pkcs8.original
$ vi ./mykey.pkcs8
$ diff ./mykey.pkcs8.original ./mykey.pkcs8
1d0
< -----BEGIN PRIVATE KEY-----
16d14
< -----END PRIVATE KEY-----
$ cp ./mykey.x509 ./mykey.x509.original
$ vi ./mykey.x509
$ diff ./mykey.x509.original ./mykey.x509
1d0
< -----BEGIN PUBLIC KEY-----
6d4
< -----END PUBLIC KEY-----
$ 

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

Mar 10, 2009

[Maven] 何かに依存するライブラリを使用する

たまに「何かに依存するライブラリ」というものがある。 例えば、JDK のバージョンに依存する json-lib。 例えば、OS に依存する Eclipse SWT。
この様なライブラリは groupId, artifactId, version 以外の属性で jar を切り替えるものと考えることができる。 素晴らしいことに Maven2 ではこの様な状況も想定し、classifier という属性が用意されている。 pom.xml に classifier を指定することで「依存する何か」で jar を切り替えることができる。

Maven Documentation - Technical Project Descriptor
http://maven.apache.org/ref/current/maven-model/maven.html#class_dependency

pom.xml の記述方法

pom.xml の dependency に classifier を指定するだけで良い。 OS 毎に Eclipse SWT を切り替える場合は以下の様になる。 ちなみに、http://repo1.maven.org/maven2/ にはこの例の jar は登録されていない。

  <project>
    <dependencies>
      <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>swt</artifactId>
        <version>3.4</version>
        <classifier>carbon-macosx</classifier>
        <scope>compile</scope>
      </dependency>
    </dependencies>
  </project>


properties を使用すると設定が楽になる。
  <project>
    <properties>
      <swt-classifier>carbon-macosx</swt-classifier>
    </properties>
    <dependencies>
      <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>swt</artifactId>
        <version>3.4</version>
        <classifier>${swt-classifier}</classifier>
        <scope>compile</scope>
      </dependency>
    </dependencies>
  </project>

リモートリポジトリの構成

リモートリポジトリのディレクトリ構成、pom.xml は classifier 無しのものと同じ。 異なるのは jar ファイルが classifier 毎に複数用意されるというところ。 jar ファイル名は <artifactId>-<version>-<classifier>.jar となる。 上の Eclipse SWT の例の jar を登録する場合、下記の様な構成となる。

  $REPOSITORY_HOME
    └ org
       └ eclipse
           └ swt
              └ swt
                 └ 3.4
                    ├ swt-3.4.pom
                    ├ swt-3.4-carbon-macosx.jar
                    └ swt-3.4-gtk-linux-x86.jar

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

Mar 09, 2009

[Misc] Eclipse 3.5 M5 の更新内容が素晴らしい。

2009/02/03 に Eclipse 3.5 M5 がリリースされていた。 今更更新内容を確認してみて驚いた。 素晴らしすぎる。

Eclipse 3.5 M5 - New and Noteworthy
http://download.eclipse.org/eclipse/downloads/drops/S-3.5M5-200902021535/eclipse-news-M5.html

テキストエディタのブロック選択サポート

Platform Text - Block selection mode in textual editors
    Textual editors now support block (aka column or rectangular) selection mode:
テキストエディタでブロック選択がサポートされた。 Java エディタでも当然ブロック選択できる。 Mac OS X の場合、alt + command + a でブロック選択モードに入る。解除も同じ。
これでわざわざ Windows と秀丸を立ち上げて、という作業から少し解放される。 次はキーボードマクロを是非!! (Emacs 覚えろよ、という提案は聞こえないふりで・・・)

[Block Selection]

コンペアエディタで文字エンコーディング指定をサポート

Compare - Set encoding in Compare Editor
    The Set Encoding... action has been added to the Compare Editor context menu. This allows you to change the encoding of each side of the comparison.
コンペアエディタで文字エンコーディングを指定出来るようになった。

[Compare(0)]
UTF-8 と Windows-31J のファイルを比較してみる。片方が化けている。
[Compare(1)]
化けている方のコンテクストメニューから "Set Encoding..." を選択して・・・
[Compare(2)]
正しい文字エンコーディングを指定。
[Compare(3)]
比較できた!!

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

Mar 08, 2009

[JSR] JCP の更新情報を Twitter で確認する

JCP-INTEREST というメーリングリスト で JCP の最新情報を受け取ることができる。 メーリングリストも良いが、Twitterで更新情報を逐次確認できると個人的には非常に便利。 ということで、Twitter に JCP-INTEREST の情報を自動配信してみた。

jcp_unofficial
http://twitter.com/jcp_unofficial

個人的な利用を目的としたものではあるけれど、もし Twitter を利用していて JCP に興味のある方がいたらどうぞ(そんな人居るのか??)。

    follow me on Twitter

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

    Mar 06, 2009

    [WebService] API 経由で Google からウェブページを検索する。

    一昔前には API 経由でウェブページの検索ができる Google Web APIs というものがあった。 ・・・のだけれど、久しぶりに検索しようと思ったら無くなっている。 どうやらサービスの改変やら何やらでサービス名が変わったり無くなったり新設されたり、と色々あった模様。

    『Google Web APIs』
        |
    (サービス名変更)
        ↓
    Google SOAP Search API
        ↓
    (Google SOAP Search API 新規登録停止。)
        ↓
    Google AJAX Search API』 提供開始


    結局現時点(2009/03/06)では Google AJAX Search API の一部に Google WEB APIs の機能制限版に近いものが提供されている。

    Developer's Guide - Google AJAX Search API - Flash やその他 JavaScript を使用しない環境
    http://code.google.com/intl/ja/apis/ajaxsearch/documentation/#fonje


    Google というと、既に Web サービスのインフラに近い位置にあると思うので、Web 検索 API はまともなものを提供して欲しいと切に思う。

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

    Mar 03, 2009

    [WebService] Skittles.com が面白いことになっている

    Skittles.com が面白いことになっている。 サイト更改後、Skittles.com 内コンテンツのほとんどをインターネット上にある CGM のデータで構成しているのだ。 利用している CGM サービスは、Twitter(ミニブログ), Wikipedia(百科事典), YouTube(動画共有), Flickr(写真共有), Facebook(SNS)。 自社サイト内のコンテンツを顧客(というか、不特定多数?)に委ねてしまおうという何とも極端な試み。

    [Skittles Home]
    Skittles.com Home - Twitter

    [Skittles Home]
    Skittles.com Products - Wikipedia

    [Skittles Home]
    Skittles.com Media(Videos) - YouTube

    [Skittles Home]
    Skittles.com Media(Pics) - Flickr

    [Skittles Home]
    Skittles.com Friends - Facebook


    Skittles.com は CGM 上の情報を一切フィルタリングせずに表示する、という極めてオープンな構成になっている。 グランズウェルを味方に付けるため情報操作を行っていないということを前面に押し出したかったのだろう。 営利企業がここまで思い切ったことをするのは評価に値する。 流石米国企業、といったところか(いや、米国企業でもここまで思い切ったことをするのは珍しいのかも)。

    Skittles.com はオープンであることを選択したわけだけれど、その代償も当然払うことになる。 早速 Skittles.com ホームの Twitter 上にはネガティブな書き込みや不適切なサイトへのリンクが表示され始めている。

    [I hate Skittles]
    Skittles に対するネガティブな書き込み。
    [Adult link]
    アダルトサイトへのリンク(リンク先に飛ばない様に(w)。

    自分たちでは制御できないものを取り込んだサイトはこの先どうなって行くのだろう。 グランズウェルの最先端を行く取り組みがどうなっていくのか注視したい。

    参考資料

    グランズウェルについて詳しく知りたい方はこちらの書籍がお薦め。というか、今のところこれしかない??


    グランズウェル ソーシャルテクノロジーによる企業戦略

    (Amazon.co.jp の商品紹介より)

    米国ベストセラーの待望の邦訳! “Business Week”のベストセラーにも堂々ランクイン! ソーシャルテクノロジーが生みだすグランズウェル(大きなうねり)の正体をつかみ、 戦略的に使いこなせ!

    ソニー・エレクトロニクスの広報責任者リック・クランシーは、ある「力」に悩まされていた。 その力は、とどまるところを知らずに成長していたが、正体がわからない。ブロガー。 ディスカッショングループ。ユーチューブ。会ったこともない消費者たちが、誰もが 閲覧できるフォーラムで製品を格付けしていた。会社が大切に育ててきたブランドを、 あらゆるものが攻撃していた。従来の広報ツールは何の役にも立たなかった。そう、 本書で「グランズウェル(大きなうねり)」と呼ぶトレンドと格闘しているのであった。

    本書は著者らと数百人のクライアントとのやり取りと、数千時間に及ぶコラボレーションや 分析作業から生まれた。その目的はただひとつ---あなたが、テクノロジーの変化の波に 圧倒されることなく、ソーシャルテクノロジーが生みだす世界を航海できるよう支援する ことだ。どのようにビジネスに活かせるか、収益を上げ、あるいはコスト削減を実現し、 そして顧客とのエンゲージメントを強めているのか、事例に基づいて解説する。さらに、 実用可能なROI(費用対効果)のモデルも提供している。

    企業がコントロールできない状況で個人がよりパワーを持つことを脅威と捉える企業も 少なくない。しかし、企業にとって、本当は個人と深い関係を築くための絶好の機会に なるのだ!さあ、グランズウェルの世界にようこそ。

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

    Feb 26, 2009

    [PostgreSQL] Ludia にチャレンジ

    Ludia とは

    Ludiaは高速かつ高精度な全文検索インデックス機能をオープンソースのデータベース管理システムであるPostgreSQLに提供します。Ludia は株式会社NTTデータにより開発され、2006年10月11日にLGPLライセンスのオープンソースソフトウェアとして公開されました。
    ということで、PostgreSQLに全文検索機能付加するソフトウェア。 Senna, MeCab との連携機能を PostgreSQL に追加してくれる。 全文検索エンジン(Lucene とか Hyper Estraier とか)を管理する手間が省けるので、中小規模の全文検索が必要な場合にはとても便利そうだ。
    Ludia
    http://sourceforge.jp/projects/ludia/
    Senna
    http://qwik.jp/senna/FrontPageJ.html
    MeCab
    http://mecab.sourceforge.net/

    Ludia のインストール

    Ludia 1.5.1 を Mac OS X (Leopard) + PostgreSQL 8.3 にインストールしてみた。

    Senna のインストール

    まずは Ludia の動作に必要な Senna をインストール。 今回は MeCab は使用しない (Ludia で わかち書き に対応しない) ので、いきなり Senna をインストールする。 MeCab を使用する場合は先に MeCab をインストールする。

    $ wget http://osdn.dl.sourceforge.jp/senna/33763/senna-1.1.4.tar.gz
    --2009-02-26 00:00:48--  http://osdn.dl.sourceforge.jp/senna/33763/senna-1.1.4.tar.gz
      (SNIP)
    2009-02-26 00:00:48 (2.59 MB/s) - `senna-1.1.4.tar.gz.1' へ保存完了 [1121030/1121030]
    
    $ tar zxvf ./senna-1.1.4.tar.gz 
    senna-1.1.4/
    senna-1.1.4/lib/
    senna-1.1.4/lib/nfkc.h
      (SNIP)
    
    $ cd ./senna-1.1.4
    $ ./configure --without-mecab
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... ./install-sh -c -d
    checking for gawk... no
      (SNIP)
      Install path prefix:   /usr/local
    
    Now type 'make' to build senna 1.1.4!
    
    $ make
    make  all-recursive
    Making all in lib
      (SNIP)
    creating hatenapo
    make[2]: Nothing to be done for `all-am'.
    
    $ sudo make install | tee ./install.log
    Password:
    Making install in lib
    test -z "/usr/local/lib" || .././install-sh -c -d "/usr/local/lib"
     /bin/sh ../libtool   --mode=install /usr/bin/install -c  'libsenna.la' '/usr/local/lib/libsenna.la'
      (SNIP)
     /usr/bin/install -c -m 644 'senna.pc' '/usr/local/lib/pkgconfig/senna.pc'
    test -z "/usr/local/include/senna" || ./install-sh -c -d "/usr/local/include/senna"
     /usr/bin/install -c -m 644 'senna.h' '/usr/local/include/senna/senna.h'
    $ 
    

    Ludia のインストール

    Senna がインストール出来たら、次に Ludia をインストール。 MacPorts を使用して PostgreSQL をインストールしている場合は、PostgreSQL のパスを指定する必要がある。

    $ wget http://globalbase.dl.sourceforge.jp/ludia/32461/ludia-1.5.1.tar.gz
    --2009-02-26 00:21:24--  http://globalbase.dl.sourceforge.jp/ludia/32461/ludia-1.5.1.tar.gz
      (SNIP)
    2009-02-26 00:21:25 (1.37 MB/s) - `ludia-1.5.1.tar.gz' へ保存完了 [421128/421128]
    
    $ tar zxvf ./ludia-1.5.1.tar.gz 
    ludia-1.5.1/
    ludia-1.5.1/ltmain.sh
    ludia-1.5.1/README.advanced
      (SNIP)
    ludia-1.5.1/README
    ludia-1.5.1/Makefile.in
    
    $ ./configure --with-pg-config=/opt/local/lib/postgresql83/bin/pg_config --with-senna-cfg=/usr/local/bin/senna-cfg 
    checking build system type... i686-apple-darwin9.6.0
    checking host system type... i686-apple-darwin9.6.0
    checking for gcc... gcc
    checking for C compiler default output file name... a.out
      (SNIP)
    config.status: creating pgsenna2.h
    config.status: creating config.h
    config.status: executing depfiles commands
    
    $ make
    make  all-am
    if /bin/sh ./libtool --mode=compile --tag=CC gcc -D_REENTRANT -I. -I. -I.   -DPOSTGRES83=1 
    -I/opt/local/include/postgresql83 -I/opt/local/include/postgresql83/server -I/usr/local/
    include/senna  -Wall -fno-strict-aliasing -g -O2 -MT pgsenna2.lo -MD -MP -MF ".deps/
    pgsenna2.Tpo" -c -o pgsenna2.lo pgsenna2.c;  
      (SNIP)
    	elif [ `expr -- "-DPOSTGRES83=1 -I/opt/local/include/postgresql83 -I/opt/local/include/
    postgresql83/server -I/usr/local/include/senna " : .*POSTGRES81.*` -gt 0 ]; then 
    	  cp -f ./uninstall_pgsenna2_81.sql.in ./uninstall_pgsenna2.sql; 
    	fi
    $ sudo make install | tee ./install.log
    Password:
    test -z "/opt/local/lib/postgresql83" || /Users/me/Desktop/ludiawork/ludia-1.5.1/install-sh 
    -d "/opt/local/lib/postgresql83"
     /bin/sh ./libtool --mode=install /usr/bin/install -c  'pgsenna2.la' '/opt/local/lib/
    postgresql83/pgsenna2.la'
    /usr/bin/install -c .libs/pgsenna2.0.0.0.so /opt/local/lib/postgresql83/pgsenna2.0.0.0.so
    (cd /opt/local/lib/postgresql83 && rm -f pgsenna2.0.so && ln -s pgsenna2.0.0.0.so pgsenna2.0.so)
    (cd /opt/local/lib/postgresql83 && rm -f pgsenna2.so && ln -s pgsenna2.0.0.0.so pgsenna2.so)
    /usr/bin/install -c .libs/pgsenna2.lai /opt/local/lib/postgresql83/pgsenna2.la
    /usr/bin/install -c .libs/pgsenna2.a /opt/local/lib/postgresql83/pgsenna2.a
    ranlib /opt/local/lib/postgresql83/pgsenna2.a
    ranlib: file: /opt/local/lib/postgresql83/pgsenna2.a(pgs2_tp.o) has no symbols
    ranlib: file: /opt/local/lib/postgresql83/pgsenna2.a(pgs2_recovery.o) has no symbols
    chmod 644 /opt/local/lib/postgresql83/pgsenna2.a
    ----------------------------------------------------------------------
    Libraries have been installed in:
       /opt/local/lib/postgresql83
    
    If you ever happen to want to link against installed libraries
    in a given directory, LIBDIR, you must either use libtool, and
    specify the full pathname of the library, or use the `-LLIBDIR'
    flag during linking and do at least one of the following:
       - add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable
         during execution
    
    See any operating system documentation about shared libraries for
    more information, such as the ld(1) and ld.so(8) manual pages.
    ----------------------------------------------------------------------
    test -z "/opt/local/share/postgresql83" || /Users/me/Desktop/ludiawork/ludia-1.5.1/install-sh -d "/opt/local/share/postgresql83"
     /usr/bin/install -c -m 644 'pgsenna2.sql' '/opt/local/share/postgresql83/pgsenna2.sql'
     /usr/bin/install -c -m 644 'uninstall_pgsenna2.sql' '/opt/local/share/postgresql83/uninstall_pgsenna2.sql'
    
    $ /opt/local/lib/postgresql83/bin/psql -U me -f ./pgsenna2.sql mydb
    CREATE FUNCTION
    CREATE FUNCTION
    CREATE FUNCTION
      (SNIP)
    CREATE OPERATOR CLASS
    CREATE OPERATOR CLASS
    CREATE OPERATOR CLASS
    $ 
    
    これで Ludia のインストールは全て完了。次は設定。

    Ludia の設定

    Ludia の初期設定を行う。 Ludia の設定は postgresql.conf に記述する。

    $ sudo cp /opt/local/var/db/postgresql83/mydb/postgresql.conf /opt/local/var/db/postgresql83/mydb/postgresql.conf.original
    $ sudo vi /opt/local/var/db/postgresql83/mydb/postgresql.confPassword:
    
    $ sudo diff /opt/local/var/db/postgresql83/mydb/postgresql.conf.original /opt/local/var/db/postgresql83/mydb/postgresql.conf
    493a494,508
    > 
    > #------------------------------------------------------------------------------
    > # LUDIA OPTIONS
    > #------------------------------------------------------------------------------
    > 
    > custom_variable_classes = 'ludia'
    > ludia.max_n_sort_result = 10000
    > ludia.enable_seqscan = on
    > ludia.seqscan_flags = 1
    > ludia.sen_index_flags = 3
    > ludia.max_n_index_cache = 16
    > ludia.initial_n_segments = 512
    $ 
    

    postgresql.conf の編集が完了したら、PostgreSQL を再起動する。

    $ sudo -u postgres /opt/local/lib/postgresql83/bin/pg_ctl -D /opt/local/var/db/postgresql83/mydb restart
    waiting for server to shut down.... done
    server stopped
    server starting
    $ 
    

    Ludia の動作確認

    PostgreSQL に組み込まれた Ludia と Senna のバージョンを確認する。

    $ /opt/local/lib/postgresql83/bin/psql -U me mydb
    Welcome to psql 8.3.0, the PostgreSQL interactive terminal.
      (SNIP)
    mydb=# SELECT pgs2version();
     pgs2version 
    -------------
     ludia 1.5.1
    (1 row)
    
    mydb=# SELECT version, configure_option FROM pgs2seninfo();
     version |  configure_option  
    ---------+--------------------
     1.1.4   |  '--without-mecab'
    (1 row)
    
    mydb=#
    

    テストに使用するテーブルと Ludia 用のインデックスを作成する。

    mydb=# create table LUDIA_TEST (ID bigint primary key, VALUE text);
    CREATE TABLE
    
    mydb=# create index LUDIA_TEST on DATA using fulltext(VALUE);
    CREATE INDEX
    
    インデックス作成で指定している "using fulltext(VALUE)" は、"カラム VALUE を形態素解析でインデクシングする"という意味。 形態素解析以外にも、N-gram や空白区切りも使用可能。

    Ludia を使って全文検索を行ってみる。 PostgreSQL 8.2 以前を使用している場合はクエリの記法が異なるので注意(下のクエリでは '%%' を '@@' に置き換える)。

    mydb=# insert into LUDIA_TEST (ID, VALUE) values (1, 'トタンがセンベイ食べて 春の日の夕暮は穏かです アンダースローされた灰が蒼ざめて 春の日の夕暮は静かです');
    
    mydb=# select * from LUDIA_TEST where VALUE %% '夕暮';
     id | value 
    ----+----------------------------------------------------------------------------------------
     1  | トタンがセンベイ食べて 春の日の夕暮は穏かです アンダースローされた灰が蒼ざめて 春の日の夕暮は静かです
    (1 row)
    
    mydb=# 
    

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

    Feb 19, 2009

    [WebService] 実は怖い(かもしれない) Twitter。

    Twitter では位置情報によるエントリ検索ができる。 と同時に、日付指定(例えば、2009/01/01以降 2009/02/19以前)によるエントリ検索もできる。

    さて、この 2 つを組み合わせると・・・!?



    このマップには以下の条件に合致した Twitter エントリが表示されます。
    1. システム日付の前日以降に書き込まれたもの。
    2. 地図の中心付近の位置情報を持つもの。
    とは言うものの、この位置情報って何の位置なんだろう?? 本当にこの位置で書き込んだものなのだろうか??

    ■ 2009/02/20 追記
    geocode の検索対象はプロフィールの現在地の様だ。 ここを実際にいる場所に合わせて頻繁に更新しなければ問題無いのか。 ・・・携帯端末用 Twitter クライアントが GPS 情報を流し込んだりする可能性はあるのかな??

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

    Feb 15, 2009

    [Linux] Debian GNU/Linux 5.0 "lenny" リリース

    Debian GNU/Linux 5.0 "lenny" がリリースされた。 Java 関連が大幅に改善されている様で期待大!!

    Debian GNU/Linux 5.0 がリリース
    http://www.debian.org/News/2009/20090214

    何となく過去のリリース

    Debian GNU/Linux 4.0 がリリース(Etch)
    http://www.debian.org/News/2007/20070408
    Debian GNU/Linux 3.0 リリース(Woody)
    http://www.debian.org/News/2002/20020719
    Debian GNU/Linux 2.0 'Hamm' リリース(Hamm)
    http://www.debian.org/News/1998/19980724

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

    Feb 10, 2009

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

    Mac OS X に MySQL をインストールしたときの手順をメモ。 参考にさせていただいたサイトは以下の通り。感謝!!

    forever 5 years old blog - MacPorts で MySQL をインストールしてみる
    http://www.forever5yearsold.net/archives/72
    setup_osx - bear-project - PHP5環境構築(OSX macports)
    http://code.google.com/p/bear-project/wiki/setup_osx
    F.Ko-Ji の「一秒後は未来」 - MacPortsでのMySQLインストールで初歩的ミス
    http://blog.fkoji.com/2008/05041648.html

    MacPorts で MySQL をインストール

    $ sudo port install mysql5 +server
    --->  Fetching mysql5
    --->  Verifying checksum(s) for mysql5
    --->  Extracting mysql5
    --->  Configuring mysql5
    --->  Building mysql5 with target all
    --->  Staging mysql5 into destroot
    --->  Creating launchd control script
    ###########################################################
    # A startup item has been generated that will aid in
    # starting mysql5 with launchd. It is disabled
    # by default. Execute the following command to start it,
    # and to cause it to launch at startup:
    #
    # sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist
    ###########################################################
    --->  Installing mysql5 5.0.67_0+server
    ******************************************************
    * In order to setup the database, you might want to run
    * sudo -u mysql mysql_install_db5
    * if this is a new install
    ******************************************************
    --->  Activating mysql5 5.0.67_0+server
    --->  Cleaning mysql5
    $ 
    

    MySQL の初期化

    $ sudo -u mysql mysql_install_db5
    Password:
    Installing MySQL system tables...
    090210 13:45:50 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
    090210 13:45:50 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
    090210 13:45:50 [Warning] option 'thread_stack': unsigned value 65536 adjusted to 131072
    090210 13:45:50 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive
    OK
    Filling help tables...
    090210 13:45:50 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
    090210 13:45:50 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
    090210 13:45:50 [Warning] option 'thread_stack': unsigned value 65536 adjusted to 131072
    090210 13:45:50 [Warning] Setting lower_case_table_names=2 because file system for /opt/local/var/db/mysql5/ is case insensitive
    OK
    
    To start mysqld at boot time you have to copy
    support-files/mysql.server to the right place for your system
    
    PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
    To do so, start the server, then issue the following commands:
    /opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password'
    /opt/local/lib/mysql5/bin/mysqladmin -u root -h watashi-nokonpyuta.local password 'new-password'
    
    Alternatively you can run:
    /opt/local/lib/mysql5/bin/mysql_secure_installation
    
    which will also give you the option of removing the test
    databases and anonymous user created by default.  This is
    strongly recommended for production servers.
    
    See the manual for more instructions.
    
    You can start the MySQL daemon with:
    cd /opt/local ; /opt/local/lib/mysql5/bin/mysqld_safe &
    
    You can test the MySQL daemon with mysql-test-run.pl
    cd mysql-test ; perl mysql-test-run.pl
    
    Please report any problems with the /opt/local/lib/mysql5/bin/mysqlbug script!
    
    The latest information about MySQL is available on the web at
    http://www.mysql.com
    Support MySQL by buying support/licenses at http://shop.mysql.com
    $ 
    

    MySQL の設定

    $ sudo cp /opt/local/share/mysql5/mysql/my-small.cnf /etc/my.cnf
    $ sudo vi /etc/my.cnf 
    $ sudo diff /opt/local/share/mysql5/mysql/my-small.cnf /etc/my.cnf
    21a22
    > default-character-set = utf8
    71a73,74
    > default-character-set = utf8
    > 
    74a78
    > default-character-set = utf8
    $ sudo mkdir /opt/local/var/run/mysql5 
    $ sudo chown mysql:mysql /opt/local/var/run/mysql5/
    $ sudo chmod 755 /opt/local/var/run/mysql5 
    

    MySQL の起動

    $ sudo /opt/local/share/mysql5/mysql/mysql.server start
    Starting MySQL.. SUCCESS! 
    

    DB、ユーザの作成

    $ mysql5 -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or ¥g.
    Your MySQL connection id is 7
    Server version: 5.0.67 Source distribution
    
    Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.
    
    mysql> create database mydb;
    Query OK, 1 row affected (0.01 sec)
    
    mysql> grant all privileges on *.* to me@localhost identified by 'mypass' with grant option;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> ¥q
    Bye
    

    MySQL のアンインストール

    $ sudo port uninstall mysql5
    $ sudo rm -rf /opt/local/var/db/mysql5
    

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

    Jan 20, 2009

    [Subversion] Subversion で削除したファイルをリポジトリから復元する方法と・・・

    Subversion で削除したファイルを復元する方法をメモ。 ついでに復元後に発生した "This client is too old" エラーの対応方法もメモ。

    Subversion で削除したファイルを復元する方法

    まず、削除したリビジョンを "svn log" で調べる。 下記の例では 10137 が removedfile を削除したリビジョンとなる。

    $ svn log --verbose
    ------------------------------------------------------------------------
    r10137 | me | 2009-01-06 10:25:35 +0900 (Thu, 06 Jan 2009) | 1 line
    Changed paths:
       M /path/to/my/project/modifiedfile
       D /path/to/my/project/removedfile
       ...
    $
    
    10137 が削除したリビジョンであるということは、当然その一つ前の 10136 には removedfile は存在しているということ。 "svn cp" でリビジョン 10136 の removedfile を取得する。
    $ svn cp -r 10136 ./removedfile ./removedfile2
    A    removedfile2
    $
    

    "This client is too old to work with working copy"エラーの対処方法

    Eclipse (+ subclipse) で使用しているワーキングコピーに対して上記の作業を行ったら、subclipse で下記のエラーが発生する様になった。

    svn: This client is too old to work with working copy '/path/to/my/project'; please get a newer Subversion client
    
    調べてみたら、yummy-yummyさんの「TortoiseSVNでコミットしたあとにSubclipseで同期とるとエラーになるのですが」というエントリに対応方法があった。感謝!
    $ wget http://svn.collab.net/repos/svn/trunk/tools/client-side/change-svn-wc-format.py
    $ chmod 755 ./change-svn-wc-format.py
    $ ./change-svn-wc-format.py . 1.4
    Converted WC at '.' into format 8 for Subversion 1.4
    $
    

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