groovy
選択中のテキストフレームに文字列をセットするExtendScript, InDesign + JavaScript
毎回書くコードなのでメモ。 選択中のオブジェクトからテキストフレームだけをえり分ける function は、 カネムーメモ を参考にさせていただきました。
eps2png した後のエラーチェックの話,変換失敗したファイルを列挙
Cygwin上で EPSをPNGに変換する DPIを指定 のエントリーにある方法を使って、 カレントディレクトリにある eps ファイルを png に変換したはいいが、 途中でいくつかはエラーが発生した場合、 どのファイルがうまくpng 変換できなかったかをチェックする groovy コード。
json-lib を使うときに必要となる jar
JSON-libを groovy 使うときのメモ。
MacでExtendScript, AppleScript から InDesignを起動して "こんにちは" な話 (Groovyからの起動おまけ付き)
最終目標は、Mac上のGroovyからInDesignのExtendScript(JavaScript)を 起動すること。
考え方としては、
- GroovyからAppleScriptを起動
- AppleScriptからInDesignを起動
- AppleScript内から do script を使ってJavaScriptを実行
という手順。
groovy と java を混ぜた状態でビルドする build.xml の記述方法(Ant)
GroovyとJavaを混ぜて使うときに常々ビルドが面倒だと思っていたのですが、 groovyc には -j ( ジョイントコンパイラフラグ ) オプションがあり これを使えば、groovy と java が混じっていても問題なくコンパイルできる。
いままでは、ベースクラスは java で書いて、派生クラスは groovy で 実装して・・・みたいなことを律儀にやって、javac してから groovyc するように していたのだが、そういう細かいことを一切考える必要がないことが判明。
GroovyからInDesignを叩く(Windows限定) 〜 Groovy から InDesign CS3 のJavaScriptを実行する方法
ExtendScript Toolkit を使わないで、 直接InDesignのCOMを経由してExtendScript(JavaScript,VBScript)を実行する方法。
自動組版の一連の流れの中でInDesignをスクリプト経由で使う場合に いままでそこだけ手動で、InDesign起動してスクリプト実行、という手作業が入らざる得なかったわけですが、 make 一発ですべての処理を一括で行うことができそうです。
MacOSXユーザの方は、 わたしがいつもお世話になっている カネムーメモ GroovyからInDesignを叩く(Mac限定) が参考になります。
MIFから段落スタイル名を抽出する (FrameMakerの話)
RoboHelpでFrameMakerデータをリンクさせると、 RoboHelp側でFrameMakerに存在している段落タグの一覧が確認できる。 便利だなと思ったが、その一覧をテキストデータ化する方法は RoboHelp上では提供されていないようなので、自分でMIFから抽出するコードを書いた。(groovyで)
アタリ画像の作成( groovy )
アタリ画像を groovy で作成するコードメモ。 簡単なコードですが...
JSONに関する基本認識,リストの処理
Groovyを使うようになってから、 XMLよりJSONで済ませてしまう機会が増えてきたのだが、いまいちよくわかっていない。 とりあえず現状で得たJSONに関する基本認識のメモ。(間違いもあるかもしれませんので注意)
ここではすべて json-lib を使ってテストしています。
参考リンク
EDDでテキスト範囲に指定したフォントが反映されない問題を MIF上で解決する
構造化FrameMaker8の話。 EDD上でテキスト範囲指定している要素に対して、合成フォントやフォントファミリを指定しても 有効にならない。合成フォントでは、EDDの指定自体が反映されないようだ。 (再度構造化ツールでEDD書き出ししたときに指定が無効になっていないかで確認)
以前の自分の調査によれば...
継承元の段落書式に合成フォントを指定するとNG になるらしい。 逆に合成フォントを継承元の段落書式に設定していなければ、 EDDでテキスト範囲に対して行った書式設定は有効かされると...
というメモを見つけた。(この内容が真実かどうかは現時点では未確認です。)
ただFrameMaker GUI上で直接該当要素(この例では markup)に対して 合成フォントを指定してやればきちんと有効になる。
そこで、今回はMIF上でこのGUIで行ったのと同じ操作を行うことにした、という話。
こんな対処をしなければならないのはレアケースだとは思いますが、 EDD+テキスト範囲指定にはいままでもいろいろ苦しめられてきたので、メモとして残します。
Groovy でファイルを読む/書く、文字エンコーディングを指定して...
GDK(Groovy-JDK)を使ってファイルからテキストを読む方法のメモ。 Groovy In Action にも詳しく書いていなかったのだが、 単にこのページ のJavaDocを見ればよいことがわかった。
json-lib のテスト, groovy
couchdb のクライアント用コードをgroovyで書いていると、JSONを使いこなす 必要が生じたので作動確認用テストコードをメモ。
基本的には、http://json-lib.sourceforge.net/usage.html を見れば 使い方はわかると思いますが。
Groovyコードを書くためのテキストエディタを速攻でつくる
groovyConsole コマンドでGroovyコードを書くためのテキストエディタが起動しますが、 あれを自分でも使えないか、という話。 実際にやってみると簡単に使うことができました。

次のような簡単なコードで groovy.ui.ConsoleTextEditor をコンポジットした MyConsoleTextEditor をつくって使います。
as を使って Innerクラスの代わりに Closure を使って Innerクラスっぽく記述する方法, Groovy
Grails徹底入門を読んでいたら Innerクラスの代わりに AS を使うという説明が載っていた。
たとえば、RunnableインタフェースをClosureを使って記述するには...
def c = {
println 'Hello'
}
def c2 = c as Runnable
new Thread(c2).start()
というような例が出ていたような気がする。
PropertyMissing の利用 (Groovy)
Map で key,value を設定したり呼び出したりしたい。 このとき通常であれば、以下のように使う。
def map = [:]
map.put( 'foo','bar' )
assert map.get('foo') == 'bar'
しかし、Groovyではもっと直感的にコードが書ける。 以下のように...
def map = [:]
map.foo = 'bar'
assert map.foo == 'bar'
条件判定にクロージャを利用(改良版) groovy
昨日クロージャを使った条件判定についてエントリー書いたのですが、 その後、この方法より多少はよいと思われる別の書き方を思いついたのでメモ。
条件判定にクロージャを利用 groovy
たとえば、無数の点が平面上に存在していて、 その点と点の関係を調べてグループ分けしたい、という問題を解く場合。
考えられるグループは...
- 近くにある点のグループ
- 縦に揃っている点グループ
- 横に揃っている点グループ
- ある図形の上に存在している点のグループ(星座のように)
などが考えられます。
点に対するグループの分け方ルールは無数に存在するので、 思いつきでどんどんルールを追加・変更できるように設計しておきたい。
こういう場合に、普通のJava的発想では、 点同士の関係を解析する IAnalyzer インターフェスを定義して... という発想になってしまうのですが、 GroovyのClosureを使えばもっとスマートに速く問題を解決できそうです。
Groovy を使った設定ファイルの作成 (スタイル設定用 ミニDSL の自作)
Groovyのビルダを使うと、見かけ上設定ファイルのような記述ができるのですが、 それがそのまま実はGroovyのコードとして動かせるということができます。 これが便利なのは、単なる設定ファイルのように見えるものの、 実際はGroovyのコードなので、 変数やロジック等をそこに混ぜることができるという点です。
Groovy In Action の Chapter 8 "ビルダーの利用" では、 Lispの野望、実行可能な仕様に近づく というように表現されています。
Groovy流にXMLを扱う、XMLの読み書き変更
Groovyでは、JDOM等の既存ライブラリを使って XML を処理できますが、 Groovyに組み込まれた XmlSlurper クラスを等を使うと 非常に Groovy に処理できるようになります。
MIF 上で EPS 画像を PNG に置きかえる方法( Adobe FrameMaker の話 )
Adobe FrameMaker ドキュメント中に含まれる(参照で挿入している) EPS 画像を PNG 形式の画像に まとめて入れ替える方法。
単純に foo.eps を foo.png に置換すればOKと思ったのだが、そこまで簡単ではなかった。 (のでメモ)
SGGAEJ 勉強会の最後のLT発表資料です
LTを聞いていただいて感謝。 スピーカーの方々勉強になりました。
markdown 詳しくはこちらをご覧ください。
以下に、 今回のLTの発表スライドPDFとGAEサービス公開URLを載せておきます。
Google App Engine for Java (GAE/J)で Groovlet を使ってHTMLを出力する場合の文字化け対策
GAE/Jの勉強会に参加することになったので、GAE/J + Groovy (Groovlet)の勉強中。 非常に何もかもが順調にいったのだが、文字化けでちょっとはまったのでメモ。
gdata-java-client で blogger への投稿,取得,更新 ( groovy )
gdata-java-client を使えばJavaから簡単にBloggerを利用できる。
これを使って、
TwitterとBloggerを別々のツールではなく一つのツールから投稿・管理できるような
ツールを作れないかと検討中。(当然Twitter のAPIも調べなければならないが)
とりあえず、Bloggerに gdata-java-client経由で基本的な処理(投稿・取得・更新)
ができるかどうか試したのでメモ。
jmd のリリース ... ブログエントリ作成支援ツール(markdown+独自拡張マクロ)
jmd は、このサイト構築に使用しているツールです。 このサイトのエントリは、基本的には markdown で書いていて、 それら複数のエントリを Make を使ってあれこれして結果としてサイトの体裁に変換しています。
Google Code でオープンソースとしてリリースしたので、興味がある方はどうぞ。
groovyのIO処理が簡潔すぎる話、OSコマンドの実行の場合
ちょっとした作業スクリプトを書くときは、なるべくJythonで、無理な場合は一部Javaで記述、 というようにしてきたのだが、最近これをやめて groovy に全面移行しようとしている。
移行当初はJythonの方が楽な部分もあるかな、と思っていたが、 すべてにおいてgroovyの方が楽に書けるのがすごい。 といっても元がJavaプログラマなので、その辺は割り引いて。 (Pythonな人なら結論は違うだろうけど、でもPythonプログラマならわざわざJythonを使うことはないか。)
今回は diff で2つのファイルを比較して内容が同じでなければ○○する、 という実装をしようと思って、groovyでOSコマンド実行コードを書いたのだが、 簡潔すぎるのでびっくりしたのでメモ。
Ubuntu 8.04 への groovy手動インストール
Ubuntu 8.04 では、 apt-get で groovy をインストールできるのだが、最新バージョンではなかったので、 groovy本サイトより groovy-binary-1.6.4.zip をダウンロードして手動でセットアップした。
groovyのインストールは、
- 環境変数 JAVA_HOME を設定する
- groovy へパスを通す
という2つしポイントがないのだが、Ubuntu の場合 JAVA_HOME をどこに設定すればよいのか。 (結論: /usr/lib/jvm/java-6-sun でOK sunのjavaを使っている場合は)
Makefileでカレントディレクトリ内のディレクトリだけを抽出して使う(サブディレクトリのみ列挙)
ブログ管理用の Makefile を書いているのだが、カレントディレクトリ以下にあるサブディレクトリだけを列挙したい。 サブディレクトリは、時間とともに変化するので、 Makefileに直に書くのはやめたい。
2009-07-08 追記
Cygwinだけでなく、Ubuntu(Linux)でもこのMakefileを使ったところ、CygwinとUbuntu で ls の出力形式が異なるため ここで説明した方法では、うまくディレクトリをリストアップできなくなってしまった。
Jython を使った代替案