groovyのAntBuilderをJavaから使ってみた

groovyのAntBuilderをJavaから使ったらどうなるか試してみました。

groovyのこのコードを

def ant = new AntBuilder()
ant.echo "hello"
ant.copy( todir: "target" ){
    fileset( dir: "src" ) {
        include( name: "**/*.java" )
    }
}

Javaで書き直したらこうなりました。

import groovy.lang.Closure;
import groovy.util.AntBuilder;

import java.util.HashMap;

@SuppressWarnings("serial")
public class AntBuilderSample {

    public static void main(String[] args) {
        final AntBuilder ant = new AntBuilder();
        ant.invokeMethod("echo", "hello");

        ant.invokeMethod("copy", new Object[] { new HashMap<String, String>() {
            {
                this.put("todir", "target");
            }
        }, new Closure<Object>(null) {
            public Object call(Object... args) {
                ant.invokeMethod("fileset", new Object[] {
                        new HashMap<String, String>() {
                            {
                                this.put("dir", "src");
                            }
                        }, new Closure<Object>(null) {
                            public Object call(Object... args) {
                                ant.invokeMethod("include",
                                        new HashMap<String, String>() {
                                            {
                                                this.put("name", "**/*.java");
                                            }
                                        });
                                return null;
                            }
                        } });
                return null;
            }
        } });
    }
}

groovyが文法上、もっとも力を入れている部分を無効化しているのでこうなりますね。
さすがにこれでは使うのはつらいな。
せめてMapリテラルがあればな。

cygwinのemacsのラッパーをwshを使って書いてみました。

cygwinemacsのラッパーをwshを使って書いてみました。

emacs-w32.exeを直接使うと、dos窓が出てしまったり、
ドラッグ&ドロップでwindowsのパスが渡されてきて読めなかったりするので
wshでそのあたりを解決してみました。

このスクリプトのファイル名は、emacs.wsfとしています。
ダブルクリックやドラッグ&ドロップで起動することを考えると
.jsよりも、多少ゴミがついても.wsfの方がよさそうです。

<job id="main">
<script language="JavaScript">

var ws = WScript.CreateObject("Wscript.Shell");

var cmd = "C:/cygwin64/bin/emacs-w32.exe";
run(cmd, args2Cygpath());

function args2Cygpath() {
    var files = [];
    for(var i = 0, n = WScript.Arguments.Count(); i < n; i++) {
        files.push(cygpath(WScript.Arguments(i)));
    }
    return files;
}

function cygpath(winpath) {
    return execute("C:/cygwin64/bin/cygpath.exe " + winpath);
}

function run(cmd, args) {
    var cmdLine = cmd + " " + args.join(" ");
    ws.Run(cmdLine, 0);
}

function execute(cmdLine) {
    var proc = ws.Exec(cmdLine);
    var result = "";
    
    while(!proc.StdOut.AtEndOfStream) {
        result += proc.StdOut.Read(1);
    }

    while(proc.Status === 0) {
        WScript.Sleep(100);
    }
    
    if(proc.ExitCode !== 0) {
        throw new Error("fail: " + cmdLine);
    }

    return result;
}

</script>
</job>

windows7(64bit)でepson lp-800

3年以上、書いてなかったか。

windows7 64bitマシンを購入しました。

今までエプソンのLP-800というとても古いプリンタを使っていて壊れてもいないので、わざわざパラレルポートのPCIカードを付けて使おうと思いました。

ところがエプソンの公式サイトを見てみると、vista64まではサポートがあるけど、7の64bitはサポートがない。ネットを調べて見ると、質問サイトはあるけどどうも使えていない様子。

が、動きました。公式のvistaとほぼ同じです。
http://faq.epson.jp/faq/01/app/servlet/qadoc?003314
ここの「 2.プラグアンドプレイ以外のインストール方法」で、プリンタ一覧でwindows updateボタンを押せばLP-800が出てきました。

これで印刷ダイアログにLP-800が出てきて印刷も出来るようになりましたが、「デバイスとプリンタ」の画面にアイコンがなぜか出てきません。「印刷の管理」には出てくるので、まぁいいかと。

これで年賀状が印刷できる。

Xperiaレビュー その3 電池対策

ちょっと検索してもらえれば分かるかと思いますが、Xperiaの電池対策についてすでに多くのページで述べられています。ですので、なるべく他のページにはあまり書かれていないこと書くようにがんばってみます。

対策

いきなり結論ですが色々試した結果、私のXperiaで一番効果があったのが
設定/位置情報/ワイヤレスネットワークをOFF
にすることでした。この結果、スクリーンをOFFにして待ち受けだけしていたときの電池消費率が5〜7%/Hから1%/Hくらいになりました。調子が良いときは0.5%/Hくらいの時もあります。
Xperiaはカタログスペックでは連続待ち受け時間300時間にも関わらず、待ち受けだけでも20時間もたない計算だったのでずっと悩んでいました。ワイヤレスネットワークに関しては、掲示板などの情報によるとこの機能そのものが電池を消費しているわけではなく、これをONにしておくと部分起動ロックというandroidがスリープに入れない状態になってしまうそうです。
ワイヤレスネットワーク以外の主だった設定は以下の通りです。

  • wifi: off
  • bluetooth: off
  • gps: off
  • 画面輝度: 自動
  • google同期: off
  • k-9 mail: プッシュ利用
  • imoni: 使用せず
  • Advanced Task Manager: 画面OFFでKILL実行
  • Screebl Lite: on

待ち受けで1%/Hくらいになったので、平日に会社の行き帰りに使うのがメインの場合は、帰宅時には60%くらいは電池が残るようになりました。

GPSはよく電池食いの元凶のように言われますが、単純にONにしているだけなら2%/Hくらいになっただけでした。もちろんGPSを積極的に使うアプリを動かしていれば状況はだいぶ変わってくるでしょう。

対策そのものはこの辺にして、ここからはどうやって対策を立てていくかや、注意が必要そうなことをまとめておきます。

電池消費量の計測

設定を色々いじることも必要だとは思いますが、何よりもまず己を知っておくことが大事だと思います。というわけで対策を考える上での第一歩は計測です。

Battery snap

http://jp.androlib.com/android.application.com-xelacorp-android-batsnaps-zwnD.aspx
バッテリの減り具合をグラフ化してくれるアプリです。特に待ち受け時間でどのくらい減っているのかから確認した方がよいでしょう

Spare Parts

http://jp.androlib.com/android.application.com-androidapps-spare_parts-qtm.aspx
android携帯の色々な情報を表示・設定してくれますが、電池に関して言えばBattery historyから得られる情報が重要です。

  • その他の使用状況/充電池使用時間
    • どのアプリがどれくらい充電池を消費しているのかが分かります。
  • 部分起動状況
    • スリープに入らせない状態がどれくらい続いたかを、アプリごとに表示します
    • 上記ワイヤレスネットワークがONの時は、androidシステムがかなり大きな値になっていました

掲示板で情報を集める

計測を元に対策をしてみても自分で解決できない場合は、掲示板にアクセスしてみるとよいと思います。Xperia関連ではしたらば掲示板のXperia板に多くの有益な情報がありますし、電池関連のスレッドもあります。
http://jbbs.livedoor.jp/computer/42652/
もともと2chにあったものが、荒らし対策でこちらに退避してきたそうです。質問などをする場合は、計測結果や最初の方に書いたような設定情報をつけておいた方が話は早いでしょう。

タスク管理アプリ

Xperiaの電池対策のページをみると、必須のように書かれていることもありますが、賛否両論あるのでメリット・デメリットは考えておいたほうが良いと思います。
メリット

  • 不要なアプリのメモリを開放する
    • 電池よりも他のアプリの動作を円滑にするのに効果がある
  • 不要なアプリの動作をとめる
    • 使っていないアプリがバックグラウンドで電池を食うのを止めることができる
    • 特に不具合により暴走したアプリに対しては効果がある

デメリット

  • 設定を誤ると、本来殺してはいけないアプリまで殺してしまう可能性がある
    • その結果は予測はできないが、場合によっては生きているアプリの暴走を引きおこし、電池を食ってしまうことがある

タスク管理アプリを使うことは実は結構難しいので、電池消費を計測するときなどはタスク管理アプリをはずしてどうなるのかも調べた方がよいでしょう。外して持ちがよくなったということも報告されることがありあす。

電池の活性化

充電池を何回か充放電させることによって、充電池が活性化して電池の持ちが良くなるという話があります。勝手からしばらく使っていたら急に電池の持ちが良くなったという話はよく目にするので、どうやらそういう事もあるようです。しかし、活性状態に持っていくまでの手段については、相容れない意見もあるので注意が必要です。私が今まで見てきた範囲では以下のような意見があります

  • 完全に放電しきってから完全充電するのを何回か繰り返すとよい
  • 完全放電は充電池の寿命を縮めるのでやめた方がよい
  • 残量10%くらいまで使ってから完全充電するのを何回か繰り返すとよい
  • 普通に使っていても、そのうち活性化するので何もしなくてよい
  • 活性化は都市伝説である

何を信じるかは自己責任になりますが、完全放電をするのはリスクがあるという意見もあるので個人的には避けたいかなと思います。10%->100%もやっても大丈夫だと思いますが、焦らないのであれば普通に使っていてもそういう状況になることは結構あるんじゃないでしょうか。

Xperiaレビュー その2 日本語入力

ちょっと前までフルキーボードのない携帯は買わないと思っていました。しかし、ある人からiPhoneandroidではフリック入力というのがあって、キーボードがなくても困らないという話を聞いて、実際に見せてもらったら確かに結構速い。Xperiaを買ってみて、自分でもフリックを使うようになって分かりました。
「フルキーボードなくても良し。」
そんなわけで今日はXperiaでの日本語入力についてのレビューです。
Xperiaには実は色々な日本語入力ソフトがあります。

  • POBox Touch
  • Simeji
  • OpenWnnフリック対応版
  • OpenWnn plus

などなどです。この他にもいくつかあるようです。

POBoxTouch

Xperia標準の日本語入力システムです。フリック入力はありませんが、よくできていると思います。QWERTYベースですが、日本語入力時には不要なキーが非表示になったりキーの大きさが変わったりして、使いやすくなっています。最初、このままこれを使ってても良いかなとも思ってしまいました。フリックがないので結局使うのをやめてしまいましたが、標準搭載としてはよい出来だと思います。

Simeji

Androidで日本語入力と言えばこれがもっとも有名だと思います。Androidで最初にフリックを導入したのはこのソフトらしいですし、Wnnの辞書+SocialIMEによる変換、極めつけはマッシュルームという独自の拡張メカニズムで、あとからプラグインを導入することで絵文字入力やメールアドレス入力用の機能を追加できます。新しい機能を導入するのが早い傾向があるようです。一方で不具合が多いといわれることもあるようです(実際どの程度かは分かりません)。私の場合、ブラウザで メニュー→移動 を使うときに通常はそのページのURLが全選択されている状態なのですが、なぜかSimejiを使っているときは何回かに一回は全選択が解除されてしまいます。そうすると検索が非常にやりずらいので結局使うのはやめてしまいました。

OpenWnnフリック対応版

Wnnをベースにフリック入力をできるようにしたものです。現時点では私をこれを使っています。理由としては、以下があげられます。

  • 安定している
    • 今のところ目立った不具合がないです
  • 感覚的にフィットする
    • フリックの感度や、予測変換などがなんとなく自分にあっている気がします。

使い勝手は良いのですが、Simejiのマッシュルームのような拡張機能がないのが寂しいところです。

OpenWnn plus

こちらもWnnベースで機能拡張したものです。OpenWnnフリック対応版と比較したときの最大のメリットはマッシュルームに対応しているので、Simeji用のマッシュルームアプリがそのまま使えるということです。UI操作性もOpenWnnフリック対応版に近いので一時これを使っていましたが、私の環境では結構な頻度で入力不能になってしまうことがあるので使うのをやめてしまいました。現在でもマッシュルーム機能を使いたいときはたまにこちらに切り替えることもあります。今後に期待しています。

メールアドレス入力に関して

Androidを使い始めてちょっと驚いたのが、メールアドレス入力です。通常の携帯のメールアプリでは、あて先入力時にアドレス帳を開いて送り先を選んで戻るというのが当たり前でした。ですが、私が試したAndroidのメールアプリ3つはどれもそのような機能がないのです。その代わりにできたのが、名前かメールアドレスの最初の2文字を入力すると残りを補完してくれるというものでした。これはウィジェットの機能なのか、IMEの機能なのかは調べていませんが、上記のIMEのどれも同じ振る舞いでした。
この辺がAndroidらしいところなのかも知れません。しかし、困ったことにフリガナ入力では補完はしてくれないので、漢字を2文字入れるか、メールアドレスの先頭2文字を入れるしかありません。欧米人ならこれでも良いのかも知れませんが、日本人にはちょっと辛い仕様です。そこで便利なのがマッシュルームアプリです。すでにアドレス帳からメールアドレスを選んでくるものもあるのでこの問題は解決できますし、他にも絵文字などさまざまな拡張が開発されているのでこの領域は予想以上に便利になっていくかもしれません。

SoftBank 922SHからXperiaへメールの移し変え

苦労しましたが、なんとかできました。

rubyでの変換は、SMSをEmailに見せかけるためのものです。

#!/usr/bin/ruby
prevTel=nil
tel=nil
while gets
  if $_ =~ /^TEL:([[:digit:]]+)/
    prevTel = tel
    tel = $1
    print $_
  elsif $_ =~ /^ENCODING=QUOTED-PRINTABLE/
    print "From: "+prevTel+"<"+prevTel+ "@softbank.ne.jp>\r\n"
    print "To: "+tel+"\r\n"
    print "Subject: "+prevTel+ "\r\n"
    print "Content-Type: text/plain;charset=SHIFT_JIS\r\n"
    print "Content-Transfer-Encoding: quoted-printable\r\n"
  elsif $_ =~ /^CHARSET=/
  else
    print $_
  end
end

Fromのところで番号@softbank.ne.jpにしているのは、Gmailで絵文字を表示させるためです。

Xperiaレビュー

GW入ってすぐに今話題のXperiaを買いました。いままではSoftbank922shという、外見はスマートフォンっぽいけど実は普通の携帯を使っていました。スマートフォンに乗り換えてみての感想やレビューを書いてみます。

電池

いきなり面白くない話題ですが、非常に深刻です。Xperiaの電池は一日もたないという声が結構多いです。実際、使ってみて感じだと休日に出かけて、行く先々でWebなり地図なりを見ていると一日持たないと思います。色々使いたいときは予備電源を持っていないとつらいでしょう。

ブラウザ

いまさらですが、携帯のブラウザとは比較になりません。現時点ではスマートフォンを買う最大の理由と言ってもよいかも知れませんね。i-modeは見れません。

メール

今のところ電池とならぶ悩み事。いくつか選択肢はあるのですが、なかなか難しいところです。

i-modeメール

xperiai-modeメールを使うのはかなり厳しい状況です。

どんな感じかというと、

  • i-modeの見れる携帯電話が必要らしい(初期設定に必要みたいだけど、なんでかよく知りません)
  • i-mode用のメーラーは標準ではついてないので、ダウンロードする
  • プッシュメールにならないので、一定間隔でポーリングする設定にする(当然、電池くいます)
  • i-modeメールのために、i-modei-mode.netというサービスに加入しなければならない。

i-mode見れないのに毎月メールのために500円くらいかかるのはちょっとつらいので、この選択肢は諦めました(もともとi-mode携帯を使っていたなら多分継続していたと思いますが)。年内にはi-modeに正式に対応するみたいなのでそのときにまた考えようと思います。

moperaメール

xperia購入時にmopera Uスタンダードというサービス(毎月500円くらい)に加入すると、mopera.netドメインのメールが使えるようになります。xperia標準の「Eメール」というソフトを使うとプッシュメールが使えます(SMS経由でキックされているそうです)。しかし、、、

* i-modeメールではないので、フィルタされていれば蹴られます。
* フォルダ作れないなど機能ががあまりに貧弱

ということで、moperaメールは使うのはやめました。契約をメールなしのmopera Uライト(毎月300円)に切り替えようと思います。※ 事実上、mopera Uのライトかスタンダードのどちらかには加入する必要があります。

GMail

xperia標準でgmailアプリが付いているので、すぐに使えます。標準gmailアプリでも、それなりに使えるかも知れませんが、K9Mail(日本語版)というメーラーを使うようにしました。主な理由はマルチアカウント対応です。PCで使っているgmailアカウントと、携帯メール代わりのgmailアカウントを分けたかったのでこちらにしました。imap接続ならプロトコル自体にプッシュメールの機能があるそうで、携帯gmailアカウントの方だけプッシュされるようにしました。あとK9Mail(日本語版)は日本語版固有の機能でdocomo携帯からの絵文字メールもちゃんと表示してくれます。他のキャリアの絵文字にもそのうち対応するのではないでしょうか。

というわけで私はi-modeメールは諦めてgmailにしたわけですが、予想通り知り合いに送ったら拒否されたりしていて、この先が結構心配です。

長くなったので今日はこの辺で。次回は日本語入力や便利アプリなど。