2009年4月30日木曜日

InDesign Scriptでアラートダイアログを出さないようにする。

ちょっと嵌ったのでメモ。
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;

これをスクリプトの最初に宣言する。
app.scriptPreferences.userInteractionLevelで宣言することができるのは、以下の3種類。

  • UserInteractionLevels.INTERACT_WITH_ALERTS
    警告のダイアログのみ表示する。

  • UserInteractionLevels.INTERACT_WITH_ALL
    全てのダイアログを表示する。

  • UserInteractionLevels.NEVER_INTERACT
    全てのダイアログを表示しない。


使った後は、スクリプトの最後に
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
を書いて元に戻しておかないと、他でアラートを使うスクリプトを走らせた時に、アラートが出なくなってしまうので注意。

ちなみにPhotoshopだと
app.displayDialogs = DialogModes.NO;
を使う。
Illustratorの場合はこちら

replaceの検索結果をさらにreplaceする。

JavaScriptのreplaceの置換文字列のところにfunctionを書けるよ、という話。
replace - MDC

例えば、テキスト内の「1000円」「2000円」といった数字全てにカンマを入れたいという場合
function plusCamma(str){
str = str.replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,');
return str;
};

var text="2009年お正月セール、当店平日価格23000円の品、特価9999円!";
text=text.replace(/[0-9]+(?=円)/g, plusCamma);
alert(text);
と書ける。


置換文字列のfunctionに引数の()は入れない。
でもそれだと、検索結果全体にしか変換をかけられない。
キャプチャした$1、$2なんかを利用したい時はどうすればいいんだろう?

そう思って調べてみた。
ExtendScript Toolkitで、$.writelnを使ってコンソールに出してみる。
function test(str){
var ary=[];
for(var i=0;i<arguments.length;i++) ary.push(arguments[i])
$.writeln("数:"+arguments.length+"、引数:"+ary.join(" || "));
return "<変換済み>";
};

var text="2009年お正月セール、当店平日価格23000円の品、特価9999円!";
text=text.replace(/([0-9]+)(円)/g, test);
$.writeln(text);

結果はこんな風。
数:5、引数:23000円 || 23000 || 円 || 18 || 2009年お正月セール、当店平日価格23000円の品、特価9999円!
数:5、引数:9999円 || 9999 || 円 || 29 || 2009年お正月セール、当店平日価格<変換済み>の品、特価9999円!
2009年お正月セール、当店平日価格<変換済み>の品、特価<変換済み>!
undefined


argumentsの中に順番に、$0、$1、$2、検索された文字の位置、置換される前のテキスト全体が入って来てる。
なので$1を使いたい場合は、arguments[1]を拾えば良い。

function plusCamma2(str){
var str=arguments[1];
str = str.replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,')
+arguments[2];
return str;
};
var text="2009年お正月セール、当店平日価格23000円の品、特価9999円!";
text=text.replace(/([0-9]+)(円)/g, plusCamma2);
alert(text);
のように書いても良い。という事。

2009年4月24日金曜日

InDesignのスクリプトをキーボードショートカットで使う。

今日初めて知ったのですが、InDesignのスクリプトにキーボードショートカットを割り当てられるんですね。
「編集→キーボードショートカット」を開いてみると…

ほら、インストールしてあるスクリプトがずらーーーっと出る。
よく使うスクリプトにショートカットを割り当てて、バリバリ仕事をこなしましょう!

2009年4月19日日曜日

InDesignCS4でライブラリに登録すると画像のタグが消える?

メモ、というかヘルプ!
InDesign CS4でライブラリに登録した画像フレームの、XMLタグが飛んでしまう…。

具体的には次の通り。InDesign、バージョン6.0.1。
まず、たくさんの画像フレームを作り、それぞれに別々のタグを設定する。

それをライブラリに登録する。

元のドキュメントに戻すと…

左1行目、下4つの画像からタグが飛んでしまっている!
抜ける部分は同じライブラリのアセットなら同じだけれど、何度も登録するとその度にいくつかタグが飛ぶ。
これはXMLで自動組してる会社にとっては死活問題なのでは…???

追記0420:コメントにて、せうぞー様より再現しないというご報告をいただきました。個人の設定に依存する現象かも知れません。

追記0424:すいません、忙しくて追記遅れました。
匿名様より再現したとのコメントを頂きました。
原因はわかりませんが自分だけの現象ではないようですので、ブログのエントリは残しておこうと思います。何かわかりましたらまたエントリを書くつもりです。

追記20100108:Adobeのいわもとさんが自ブログでCS4の問題として紹介されてました。
ライブラリに登録するとグラフィックフレームからタグが無くなる - いわもとぶろぐ

追記20110205:一度、解消したというエントリを書いたのですが、間違っていました。
その後検証しないまま、そちらのエントリに打ち消し線と注意書きをして残していたのですが、誤解されるかもしれないのでエントリ削除しました。

2009年4月16日木曜日

VirtualBox上のCentOSに接続するにはブリッジにすれば良いのでした。

前の記事を読んだ会社の先輩(php師匠)から一言
「kanemuの記事わけわかんない。なんでブリッジでやんないの?」
と言われる。???

先輩、僕が使ってたMacBookProのVirtualBoxを立ち上げさせて、キーを叩きはじめる。

1. CentOSのバーチャルマシンを選択し、設定→ネットワーク→設定 から
割当てを「ブリッジ ネットワーク」にする。

2. マシンを起動し、rootでログイン。
# ifconfig
を入力してIPアドレスを確認。「192.168.2.4」になっていた。

3. Macのターミナルから
$ ssh <ユーザ名>@192.168.2.4
でログインして普通に入れた。
http://192.168.2.4/を開けば、apacheへも難なく繋がる…。

?????
「仮想マシンへのログインで苦労した事ないからさ、
 むしろこの方法でログインできるのを見つけてくる方が関心するわ」
だそうです。
というわけで、無駄な苦労をしていたというオチでした。はぁ。

2009年4月13日月曜日

VirtualBoxにCentOS 5.3をインストールして、ローカルからsshでアクセスできるようになるまで

MacBook Pro、MacOS X 10.5.6のVirtualBox2.2にCentOS 5.3をインストールしました。
走り書きなので完全にメモ用です。いずれ分かりやすくまとめ直すかも……。

VirtualBox
CentOS

ふつうにDVDイメージをダウンロードするとかなり重いので、BitTrrentクライアントをインストール。
自分はTransmissionというのを入れた。
Transmission

http://isoredirect.centos.org/centos/5/isos/x86_64/
から適当なミラーに入り、CentOS-5.3-x86_64-bin-DVD.torrentをダウンロード。
それをTransmissionのウィンドウにドラッグ。addを押すとダウンロードが始まる。
たぶん普通にDVDイメージを落とすより速い。

VirtualBoxの新規仮想マシンを作成。
オペレーティングシステムはLinux、バージョンはLinux 2.6にする。(RedHatのがいいかも)
設定→ストレージ→CD/DVD-ROM を開き、「CD/DVDドライブのマウント」にチェック。
ISOイメージファイルを選び、先にダウンロードしたDVDイメージを選択する。
これでDVDを焼かずにインストールできる。

ITPro/インストール完全ガイド:CentOS 5.3
CentOSで自宅サーバー構築
等を見ながらインストール。
ブログでは、林檎生活100: CentOS 5でつくるPHP開発サーバ.#1,#2,#3,#4,#5
がとても役に立った。
デフォルトでも良いけれど、たぶん開発環境(gcc)だけは入れておいた方が良い。

httpを起動する
# yum -y install httpd
# /sbin/chkconfig httpd on
# /etc/rc.d/init.d/httpd start

ドキュメントディレクトリのオーナーを変更
# chown -R <ユーザ名> /var/www/html

この状態でゲストOSから
http://localhost/
でcentOSのapacheページが見られる。

ホストOS側からssh接続できるようにする。
VirtualBox on Mac OS X で、ゲスト OS に ssh/http アクセスするまで - 腹八分目
を参考にしました。
ゲストのCentOSを終了して、Macのターミナルから次を設定。
$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/
e1000/0/LUN#0/Config/guestssh/Protocol" TCP
$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/
e1000/0/LUN#0/Config/guestssh/GuestPort" 22
$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/
e1000/0/LUN#0/Config/guestssh/HostPort" 50022
$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/
e1000/0/LUN#0/Config/guesthttp/Protocol" TCP
$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/
e1000/0/LUN#0/Config/guesthttp/GuestPort" 80
$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/
e1000/0/LUN#0/Config/guesthttp/HostPort" 50080

ここでハマったのが、「e1000」の部分。ここはVirtualBox側から見るネットワークアダプタの名前。参考ブログ側だと「pcnet」となっているけれど、自分の環境ではアダプタタイプがIntel PRO/1000 MT Desktop (82540EM) となっていて、この場合は「e1000」と書かなきゃいけない。
「"CentOS"」は自分の仮想マシンの名前。
※もっと簡単な方法もあります!

これで、Macのターミナルからssh接続で
$ ssh -p 50022 -l <ユーザ名>localhost

でアクセスできる。

CyberduckでファイルをUPする場合は、
プロトコル:SFTP
サーバ:localhost
ポート:50022
で接続できる。

http://localhost:50080/
をブラウザで開けば、さっきのapacheのページが…開かない。
これはCentOS側のファイヤーウォールの問題だった。CentOSのシステム→管理→セキュリティレベルとファイヤーウォールの設定 から、ファイヤーウォールを無効にする。

ログイン時にxWindowを立ち上げないようにする。
viで/etc/inittab を編集。
# vi /etc/inittab
id:5:initdefault の行を、id:3:initdefaultにして保存。
xWindowを立ち上げたいときは、
$ startx
を入力する。
仮想マシンの電源を落とす。
# shutdown -h now