Oct 22, 2010

[Apple] Apple が MacOS X での Java 提供の打ち切りを示唆

今までも Java に全く力を入れてこなかった Apple が遂に完全にやる気を無くした様だ。 Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notes によると、

As of the release of Java for Mac OS X 10.6 Update 3, the version of Java that is ported by Apple, and that ships with Mac OS X, is deprecated.

This means that the Apple-produced runtime will not be maintained at the same level, and may be removed from future versions of Mac OS X. The Java runtime shipping in Mac OS X 10.6 Snow Leopard, and Mac OS X 10.5 Leopard, will continue to be supported and maintained through the standard support cycles of those products.
願わくは、OS 同梱でなくても構わないので MacOS X 用 JDK を我に与え給へ。

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

Oct 17, 2010

[Library] Apache Axis2 で SOAP Request/Response を GZIP 圧縮する方法

Apache Axis2 で SOAP Request/Response を GZIP 圧縮する方法をメモ。

コード

Options を生成し、Stub (実際には WSDL から自動生成された Stub のサブクラス) にセットする。 MC_GZIP_REQUEST が SOAP Request の圧縮可否。 MC_ACCEPT_GZIP が SOAP Response の圧縮可否。 詳細は下記のリンクを参照のこと。

Stub stub = 
Options options = new Options();
options.setProperty(HTTPConstants.MC_GZIP_REQUEST, true);
options.setProperty(HTTPConstants.MC_ACCEPT_GZIP, true);
stub._getServiceClient().setOverrideOptions(options);
Options#setProperty
http://ws.apache.org/axis2/1_5_1/api/org/apache/axis2/client/Options.html#setProperty(java.lang.String,%20java.lang.Object)
HTTPConstants
http://ws.apache.org/axis2/1_5_1/api/org/apache/axis2/transport/http/HTTPConstants.html

動作確認

Apache Axis2 で HTTP Request/Response を確認する方法 でログを出力すると、以下のヘッダを確認できる。

2010-10-17 23:56:29,026 DEBUG [main] (Wire.java:70) - >> "Accept-Encoding: gzip[\r][\n]"
2010-10-17 23:56:29,026 DEBUG [main] (Wire.java:70) - >> "Content-Encoding: gzip[\r][\n]"
ちなみに、某サービスの軽量 SOAP 通信で GZIP 圧縮を ON にしてみたところ通信速度が 30% 速くなった。 サービスが GZIP 圧縮に対応しており、クライアントの CPU に余裕があれが是非 ON にしておきたい。
但し、GZIP 圧縮を ON にするとログに出力される SOAP Request/Response の目視での確認は困難になる。 デバッグの際には OFF にする必要がある。

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

Oct 09, 2010

[Library] Apache Axis2 で HTTP Request/Response を確認する方法

Axis2 は通信に Apache HttpComponents を使用しているので Log4j で HTTP Request/Response を確認することができる。 SOAP 通信の内容を見られるのでデバッグの際にとても便利。

log4j.xml の設定方法

"httpclient.wire" カテゴリのログレベルを "debug" にするだけ。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <!-- for Axis2 -->
  <category name="httpclient.wire">
    <priority value="debug" />
  </category>
  <!-- /for Axis2 -->

</log4j:configuration>

ログ出力例

2010-10-08 23:02:45,670 DEBUG [main] (Wire.java:70) - >> "POST /services/Soap/u/20.0 HTTP/1.1[\r][\n]"
2010-10-08 23:02:45,682 DEBUG [main] (Wire.java:70) - >> "Content-Type: text/xml; charset=UTF-8[\r][\n]"
2010-10-08 23:02:45,682 DEBUG [main] (Wire.java:70) - >> "SOAPAction: "urn:partner.soap.sforce.com:Soap:loginRequest"[\r][\n]"
2010-10-08 23:02:45,682 DEBUG [main] (Wire.java:70) - >> "User-Agent: Axis2[\r][\n]"
2010-10-08 23:02:45,683 DEBUG [main] (Wire.java:70) - >> "Host: test.salesforce.com[\r][\n]"
2010-10-08 23:02:45,683 DEBUG [main] (Wire.java:70) - >> "Transfer-Encoding: chunked[\r][\n]"
2010-10-08 23:02:45,683 DEBUG [main] (Wire.java:70) - >> "[\r][\n]"
2010-10-08 23:02:46,146 DEBUG [main] (Wire.java:70) - >> "143[\r][\n]"
2010-10-08 23:02:46,146 DEBUG [main] (Wire.java:84) - >> "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>(略)</soapenv:Body></soapenv:Envelope>"
2010-10-08 23:02:46,147 DEBUG [main] (Wire.java:70) - >> "[\r][\n]"
2010-10-08 23:02:46,147 DEBUG [main] (Wire.java:84) - >> "0"
2010-10-08 23:02:46,147 DEBUG [main] (Wire.java:70) - >> "[\r][\n]"
2010-10-08 23:02:46,148 DEBUG [main] (Wire.java:70) - >> "[\r][\n]"
2010-10-08 23:02:46,488 DEBUG [main] (Wire.java:70) - << "HTTP/1.1 200 OK[\r][\n]"
2010-10-08 23:02:46,488 DEBUG [main] (Wire.java:70) - << "HTTP/1.1 200 OK[\r][\n]"
2010-10-08 23:02:46,490 DEBUG [main] (Wire.java:70) - << "Server: [\r][\n]"
2010-10-08 23:02:46,490 DEBUG [main] (Wire.java:70) - << "Content-Type: text/xml; charset=utf-8[\r][\n]"
2010-10-08 23:02:46,491 DEBUG [main] (Wire.java:70) - << "Content-Length: 1626[\r][\n]"
2010-10-08 23:02:46,491 DEBUG [main] (Wire.java:70) - << "Date: Fri, 08 Oct 2010 23:02:46 GMT[\r][\n]"
2010-10-08 23:02:46,491 DEBUG [main] (Wire.java:70) - << "[\r][\n]"
2010-10-08 23:02:46,499 DEBUG [main] (Wire.java:84) - << "<?xm"
2010-10-08 23:02:46,502 DEBUG [main] (Wire.java:84) - << "l version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body>(略)</soapenv:Body></soapenv:Envelope>"

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

Oct 08, 2010

Oct 07, 2010

[Apple] MacOS X でコマンドラインからクリップボードを利用する方法

MacOS X では pbcopy と pbpaster というコマンドが用意されており、コマンドラインから簡単にクリップボードにアクセスすることができる。

$ echo "hoge" | pbcopy
$ pbpaste
hoge
$

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

Oct 06, 2010

[Linux] bash で入力補完を設定する方法

シェルを使っていると必ずお世話になる入力補完。 ls と打って、tab を押さないことはまず無いくらい。 自作コマンドでも入力補完に対応したかったので、設定方法を調べてみた。

An introduction to bash completion: part 1
http://www.debian-administration.org/articles/316
An introduction to bash completion: part 2
http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2
Completion examples
http://bashcookbook.com/bashinfo/source/bash-3.0/examples/complete/complete-examples

設定の基本

コマンド毎に入力補完用の関数を用意し、complete コマンドでシェルに登録する。 例えば、mycmd コマンド用の入力補完関数はこんな感じで記述する。

_mycmd() {
  local cur prev
  cur=${COMP_WORDS[COMP_CWORD]}
  prev=${COMP_WORDS[COMP_CWORD-1]}
  COMPREPLY=()
  if (( $COMP_CWORD <= 1)) || [[ "$cur" == -* ]]; then
    COMPREPLY=( $(compgen -W '-f --file -h --help -v --version' -- $cur) );
    return 0;
  fi
  if [ "$prev" == '-f' -o "$prev" == '--file' ]; then
    COMPREPLY=( $(compgen -f -- $cur) )
    return 0;
  fi
}

入力中の値が COMP_WORDS から取得できるので、その値を基に補完情報を作成し COMPREPLY にセットする。 補完情報の作成をサポートしてくれる compgen が提供されているので、これを使うと便利。
シェルへの登録は前述の通り complete コマンドで行う。

complete -F _mycmd mycmd

ファイル名を補完する方法

compgen をパラメータ "f" で実行する。

    COMPREPLY=( $(compgen -f -- $cur) )

選択肢を補完する方法

compgen をパラメータ "W" で実行する。 "W" の後に選択肢をスペース区切りで指定し、"-- $cur" で入力中の文字とマッチするものだけを補完情報として使用する。

    COMPREPLY=( $(compgen -W '-f --file -h --help -v --version' -- $cur) );

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