<?xml version="1.0" encoding="utf-8" ?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" 
			xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" 
			xmlns:cc="http://web.resource.org/cc/" xml:lang="ja">
<channel rdf:about="http://detaramedia.blog95.fc2.com/?xml">
<title>Double-talk Publisher</title>
<link>http://detaramedia.blog95.fc2.com/</link>
<description>デザイン・DTPのニッチで泡沫的知識を集積</description>
<dc:language>ja</dc:language>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://detaramedia.blog95.fc2.com/blog-entry-79.html" />
<rdf:li rdf:resource="http://detaramedia.blog95.fc2.com/blog-entry-78.html" />
<rdf:li rdf:resource="http://detaramedia.blog95.fc2.com/blog-entry-77.html" />
<rdf:li rdf:resource="http://detaramedia.blog95.fc2.com/blog-entry-76.html" />
<rdf:li rdf:resource="http://detaramedia.blog95.fc2.com/blog-entry-75.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://detaramedia.blog95.fc2.com/blog-entry-79.html">
<link>http://detaramedia.blog95.fc2.com/blog-entry-79.html</link>
<title>BridgeTalk考</title>
<description> 「う～む、これはちょっと違うな」

前回までのあらすじ：
「ガイド屋 mini」のリリースでJavaScript童貞を卒業したばかりだというのに、いきなり「FlashUI」というムリ目狙いを「情報屋」で成し遂げたナカトジ。その様はイケイケ時代を生きた80'sオヤジにふさわしいものと言えよう。しかし、彼の「企て」の前には、まだまだ超えなければならない壁があるのだった……


FlashUIのドタバタ以来、すっかり参考にさせていただい
 </description>
<content:encoded>
<![CDATA[ 「う～む、これはちょっと違うな」<br/>
<br/>
<blockquote><p>前回までのあらすじ：<br/>
「ガイド屋 mini」のリリースでJavaScript童貞を卒業したばかりだというのに、いきなり「FlashUI」というムリ目狙いを「情報屋」で成し遂げたナカトジ。その様はイケイケ時代を生きた80'sオヤジにふさわしいものと言えよう。しかし、彼の「企て」の前には、まだまだ超えなければならない壁があるのだった……
</p></blockquote>
<br/>
FlashUIのドタバタ以来、すっかり参考にさせていただいているkamisetoさんのページなのですが、少々気になるくだりがありました。<br/>
<br/>
<blockquote><p><a href="http://d.hatena.ne.jp/kamiseto/20090721/1246622746" target="_blank" title="BridgeTalkは同期も非同期もいける">BridgeTalkは同期も非同期もいける</a>
<br/>
BridgeTalkは非同期なのかと勘違いしていたんだけど、<br/>
onResultに無名関数でもいいのでonResultに関数を設定すれば、<br/>
処理が終わるまで待ってくれるみたい。</p></blockquote>
<br/>
BridgeTalkにたどりつくまではそれほど気にとめていなかったのですが、いよいよ自らがそれを実践しようというときになって、ふとプログラマー的なカンから「？」と思ったのです。<br/>
<br/>
イベントドブリン的な考え方から推測すると、onResultは多分、何時も非同期。あくまでイベントループにフックを掛けているに過ぎない。つまり、BridgeTalkに対して「返事があったら教えてね」と伝えただけであって、「ここで待ってるから戻ってきてね」ということ「ではない」……はず。<br/>
<br/>
「だとしたら何か違うっていうのさ？」<br/>
<br/>
それが大違いなんだな。よーし、オジサンが自分で実験してみよう。<br/>
<br/>
まずは単純に「onResult」にイベント処理を書いてみます。うまくいけばInDesignで選択した画像がPhotoshopで開かれるはず……<br/>
<br/>
<pre><textarea name="code" class="js" cols="60" rows="5" id="code">
//BridgeTalk送受信部
var sendPSD = function(FN, obj) {
	var btObj=new BridgeTalk();
	btObj.target = 'photoshop' ;
	btObj.body = uneval (FN)+'('+uneval(obj)+')';
	btObj.onResult= function(resObj) {
		alert ( eval(resObj.body) );
	}
	btObj.send();
}

//Photoshopで実行する関数
//単にファイルパスに従って開くだけ
//ソースコードにコメントを含めてはいけない
function openPsd(obj) {
	app.open ( File(obj) );
	var dummy = 'opened' ;
	return uneval (dummy);
}

//InDesign側
var selObj = app.selection[0].allGraphics[0]; //選択したオブジェクトから
var testObj = selObj.itemLink.filePath; //ファイルパスを取得
sendPSD (openPsd, testObj); //BridgeTalk送信部へ
</textarea></pre>
<br/>
うまくいきました。しかし、この結果から「onResult」は同期すると思い込んでしまうと痛い目に遭います。おそらく、そのままここに関数を書き連ねてソースコードを見づらくしてしまうか、サジを投げるかのどちらかでしょう。それは次の実験を見れば分かります。<br/>
<br/>
<pre><textarea name="code" class="js" cols="60" rows="5" id="code">
//BridgeTalk送受信部
var sendPSD = function(FN, obj) {
	var btObj=new BridgeTalk();
	btObj.target = 'photoshop' ;
	btObj.body = uneval (FN)+'('+uneval(obj)+')';
	btObj.onResult= function(resObj) {
		var r= eval(resObj.body);
		return r; //ここに処理を書かずに別なところで...
	}
	btObj.send();
}

//Photoshopで実行する関数
function openPsd(obj) {
	app.open ( File(obj) );
	var dummy = 'opened';
	return uneval (dummy);
}

//InDesign側
var selObj = app.selection[0].allGraphics[0]; //選択したオブジェクトから
var testObj = selObj.itemLink.filePath; //ファイルパスを取得し、プロパティとする
var rest = sendPSD (openPsd, testObj); //BridgeTalk送信部へ
alert( rest ); //さて返り値はと...
</textarea></pre>
<br/>
お～っと、最終行での返り値が「undefined」です。ソースコードを見直しても、最初の実験と比べても、構文チェックしてみてもどこもおかしいと思えるところがないように思えます。しょうがない、うまくいったコードに付け足して書いていくか。それともあきらめようか……<br/>
<br/>
その前にオジサンの言葉をもう一度思い出してください。<br/>
<br/>
<blockquote><p>BridgeTalkに対して「返事があったら教えてね」と伝えただけ</p></blockquote>
<br/>
ここです。そう、彼（コード）は「～教えてね」と言い残し、さっさと次の場所に行ってしまったのです。つまり、その次の「btObj.send();」を実行し、すぐに（代入後）「alert( rest );」を実行しているのです。よほどこの間の実効速度が遅くなければ「onResult」より先にこちらが実行されるはずです。返り値が「undefined」なのは当然の結果と言えるでしょう。<br/>
<br/>
オブジェクトのやりとりの何かで空っぽなんじゃないの～？<br/>
<br/>
まだ信じられない向きにはトドメをさしておきましょう。<br/>
<br/>
<pre><textarea name="code" class="js" cols="60" rows="5" id="code">
//BridgeTalk送受信部
var sendPSD = function(FN, obj) {
	var btObj=new BridgeTalk();
	btObj.target = 'photoshop' ;
	btObj.body = uneval (FN)+'('+uneval(obj)+')';
	btObj.onResult= function(resObj) {
		alert ( eval(resObj.body) );
	}
	btObj.send();
}

//Photoshopで実行する関数
function openPsd(obj) {
	app.open ( File(obj) );
	var dummy = 'opened' ;
	return uneval (dummy);
}

//InDesign側
var selObj = app.selection[0].allGraphics[0]; //選択したオブジェクトから
var testObj = selObj.itemLink.filePath; //ファイルパスを取得
sendPSD (openPsd, testObj); //BridgeTalk送信部へ
alert ( 'sended !' ); //先に表示される
</textarea></pre>
<br/>
先ほどの理屈を証明するように、最終行のアラートが先に表示されるはずです（よほど……でなければ）。<br/>
<br/>
かといって、このまま「onResult」にイベント処理を書き連ねるのはスマートではありませんし、特に長い処理になる場合は問題（バグ）の切り分けがしづらくなってしまいます。できればほかの部分で処理したい（書きたい）ものです。ここまで理解できればあえてソースコードを書くまでもありませんが、以下のような感じで処理すればよいでしょう<br/>
<br/>
<pre><textarea name="code" class="js" cols="60" rows="5" id="code">
//イベント処理部
function eventHandler(hoge) {
	alert ( hoge );
}

//BridgeTalk送受信部
var sendPSD = function(FN, obj) {
	var btObj=new BridgeTalk();
	btObj.target = 'photoshop' ;
	btObj.body = uneval (FN)+'('+uneval(obj)+')';
	btObj.onResult= function(resObj) {
		eventHandler( eval(resObj.body) );
	}
	btObj.send();
}

//Photoshopで実行する関数
function openPsd(obj) {
	app.open ( File(obj) );
	var dummy = 'opened' ;
	return uneval (dummy);
}

//InDesign側
var selObj = app.selection[0].allGraphics[0]; //選択したオブジェクトから
var testObj = selObj.itemLink.filePath; //ファイルパスを取得
sendPSD (openPsd, testObj); //BridgeTalk送信部へ
//この場合もここに書くとこっちが先に実行されるよ～
</textarea></pre>
<br/>
というわけで「相手のレスポンスを捕まえてから処理することが可能」ですが、それが「同期がとれている」とは思い込まないようにしましょう。いつか間違いなくハマリます。<br/>
<br/>
さて、BredgeTalkの挙動がスッキリしたところでさらに一考。<br/>
<br/>
実際のところ「BridgeTalk送受信部」はプロトタイプで実装するのがスマートなのでしょうが、私はまだ使いこなせておりません。それはいずれ実装するとして、このままでもBridgeTalk送受信部を使い回すアプローチはあります。<br/>
<br/>
<pre><textarea name="code" class="js" cols="60" rows="5" id="code">
//イベント処理部
function eventHandler(hoge) {
	alert ( hoge );
}

//BridgeTalk送受信部
var sendPSD = function(FN, obj) {
	var btObj=new BridgeTalk();
	btObj.target = 'photoshop' ;
	btObj.body = uneval (FN)+'('+uneval(obj)+')';
	btObj.onResult= function(resObj) {
		eventHandler( eval(resObj.body) );
	}
	btObj.send();
}

//Photoshopで実行する関数
//メッセージ（返り値）もメソッドもobjから取り出している
function openPsd(obj) {
	obj.start();
	app.open ( File(obj.fDir) );
	var dummy = obj.mes;
	return uneval (dummy);
}

//InDesign側
var selObj = app.selection[0].allGraphics[0]; //選択したオブジェクトから
//ファイルパスに加え、もう１つプロパティを挿入
var testObj = {fDir : selObj.itemLink.filePath, mes : 'opened'};
//さらにメソッドも追加する（このくらいなら上の行と一緒に書いてもOK）
testObj.start = function() { alert ( 'open now!' ); };
sendPSD (openPsd, testObj); //BridgeTalk送信部へ
</textarea></pre>
<br/>
最終的には送信部そのものをその時の仕様にあわせて最適化してしまえばよいわけですが、開発中はこのような作りが有用だったりします。 ]]>
</content:encoded>
<dc:subject>プログラミング</dc:subject>
<dc:date>2009-11-25T19:03:00+09:00</dc:date>
<dc:creator>中綴千頁</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://detaramedia.blog95.fc2.com/blog-entry-78.html">
<link>http://detaramedia.blog95.fc2.com/blog-entry-78.html</link>
<title>情報屋1.0b2アップデート</title>
<description> いくつかの有益な情報をいただいたのでそれを反映させました。本日になってダウンロードが増えているようですが、このアップデートは全ユーザーが対象です。ごめんなさい。

とりあえずダウンロードはこちらから

１）自ら気がついた基本機能に関するとんまなバグ

デフォルトでベクター系のリンク画像を表示させない仕様にしていたつもりでしたが、それがうまく機能していませんでしたので、それを修正しました。もう、PDF
 </description>
<content:encoded>
<![CDATA[ いくつかの有益な情報をいただいたのでそれを反映させました。本日になってダウンロードが増えているようですが、このアップデートは全ユーザーが対象です。ごめんなさい。<br/>
<br/>
とりあえず<a href="http://firestorage.jp/download/18d8b204429d7038246bd46556ac97a95aca8e49" target="_blank" title="ダウンロードはこちらから">ダウンロードはこちらから</a><br/>
<br/>
１）自ら気がついた基本機能に関するとんまなバグ<br/>
<br/>
デフォルトでベクター系のリンク画像を表示させない仕様にしていたつもりでしたが、それがうまく機能していませんでしたので、それを修正しました。もう、PDFやらWMFやらAIのEPSファイルは表示されません。もちろん前回同様、ちょっとしたソースコードの書き換えで「すべてのリンク画像」を表示させることが可能です。<br/><br/>
オプションはこの部分を変更（ソースコード）：<br/>
<pre><textarea name="code" class="js" cols="60" rows="5" id="code">
//オプション（ベクトル系画像を除くオプション）
var gb_vectorOut = true; //falseで全てのリンク画像が対象になります
</textarea></pre>
<br/>
２）Windowsで動作するようになった<br/>
<br/>
Kamisetoさんからの情報により、該当箇所を修正したのでWindowsでも動作することを確認しました。情報提供ありがとうございました。<br/>
<a href="http://blog-imgs-38.fc2.com/d/e/t/detaramedia/0066b.png" target="_blank"><img src="http://blog-imgs-38.fc2.com/d/e/t/detaramedia/0066bs.png" alt="0066b.png" border="0" width="120" height="90" /></a>Windowsでも<br/>
<a href="http://blog-imgs-38.fc2.com/d/e/t/detaramedia/0066a.png" target="_blank"><img src="http://blog-imgs-38.fc2.com/d/e/t/detaramedia/0066as.png" alt="0066a.png" border="0" width="120" height="89" /></a>もちろんMacでも<br/>

<br/>
３）出力ファイル名についての変更<br/>
<br>
mgさんのご進言（感謝！）により、ファイル出力時、同じファイル名をつけると上書きされてしまう仕様を変更しました。ただし、この仕様変更よって、出力時にファイル名を任意に付けることができなくなりました。<br/>
<blockquote><p>出力ファイル名の挙動：<br/>
まずは「（InDesignドキュメント名＋）_List.txt」というものになります。これがバッティングする場合は「（InDesignドキュメント名＋）_List_1.txt」、それでもダメなら「（InDesignドキュメント名＋）_List_2.txt」というようになります（数字が増えていく）。</p></blockquote>
<br/>
コメントを頂いたみなさん、ありがとうございます。 ]]>
</content:encoded>
<dc:subject>自作ソフト</dc:subject>
<dc:date>2009-11-24T19:00:00+09:00</dc:date>
<dc:creator>中綴千頁</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://detaramedia.blog95.fc2.com/blog-entry-77.html">
<link>http://detaramedia.blog95.fc2.com/blog-entry-77.html</link>
<title>UIの精神？</title>
<description> 気がつけばもう年末。気の早い田舎モノ（新東京人）が、この地での潜伏先を探し始めたりする時期です。あー、ダメダメ。東日本人（東北など）がいきなり自由が丘とかで探しちゃ。甲州街道からアッチは東日本人の住む所じゃないんだから。悪いこと言わないから杉並・中野近辺で探しなさい。特に野方なんかがいいゾ。しかも２丁目の中野寄りあたりね。４駅使えるし（それぞれ15～20分）「中野に住んでる」とか「高円寺の先に住んでる
 </description>
<content:encoded>
<![CDATA[ 気がつけばもう年末。気の早い田舎モノ（新東京人）が、この地での潜伏先を探し始めたりする時期です。あー、ダメダメ。東日本人（東北など）がいきなり自由が丘とかで探しちゃ。甲州街道からアッチは東日本人の住む所じゃないんだから。悪いこと言わないから杉並・中野近辺で探しなさい。特に野方なんかがいいゾ。しかも２丁目の中野寄りあたりね。４駅使えるし（それぞれ15～20分）「中野に住んでる」とか「高円寺の先に住んでる」とかTPOに合わせて使い分けられるし。<br/>
<br/>
あ、いやね。ふと「永ちゃん」の話を思い出してさ。東京に出てくるつもりで「なんとなく横浜で降りてしまった」ってアレ。東日本人はさぁ、なんとなく手前で降りちゃうと「大宮」だったりすんのよね。絶対にあのサクセスストーリーはないな、と。大宮じゃねぇ……って言っても、オジサンの頃は東京までたどり着けても上野だからね。あ、寄ってくるなっ！　ジエタイ勧誘員（※）。田舎に逆戻りするために東京に出てきたんじゃないんだ！<br/>
<br/>
※昔はね。不景気な今は買い手市場だそうな。<br/>
<br/>
<blockquote><p>前回までのあらすじ；
「英検６級」「JavaScript童貞」「田舎者（東日本人）」。しかも、40過ぎのオッサンでニセ宇宙人というイイトコなしの人間であるにも関わらず、果敢にAdobe＋JavaScript＋FlashUIの開発を成功させる夢を見るナカトジ。そんな人間に朝日は昇るのか……
</p></blockquote>
<br/>
数少ないこのBlogの定期読者であればもうお気づきのことでしょう。タイトルがヘンテコリンで、なんだかんだともったいつけてなかなか本題が始まらないときは「何かある」。<br/>
<br/>
ついに「マイ・ファースト・FlashUIモノ」が完成しました！<br/>
<br/>
その名は「情報屋（1.0 beta）」。<br/>
<br/>
<s>とりあえずファイルはここから。</s><br/>
<span style="font-size:x-small;">※アップデートしました。以降のエントリ参照</span>
<br/><br/>
いわゆるリンク画像情報の書き出しです。誰だったかがそういうスクリプトを見つけたっていうエントリを上げていたのを見て、「これはFlushUI向きだな」と思い、手始めにこれを作ってみました。<br/>
<br/>
FlashUIについては、すでにkamisetoさんがいろいろとやっていらっしゃるので目新しい話題ではありませんが、いちおう実用的に機能するサンプルです。なお、使いたいだけの人にとってややこしくなるので、Flex側のソースコードは含めませんでした（＝１つじゃ済まない）。まぁ、すぐにFlexのソースを見られる人も少ないし。<br/>
<br/>
地味ではありますが、これはFlashUIを使う利点をうまく表せたような気がします。一覧機能はFlexBuilderの「DataGrid」というオブジェクトを利用しているのですが、すでに継承されまくっているので配置するだけでいろいろな機能を有しています。ソートや列の入れ替えなど、ギミックのためにソースコードを書く必要はありません。データバインディングも充実しています（まだ使えませんが……）。<br/>
<br/>
ん～、FlexBuilderって簡単なサンプルが少なくて初心者にはつらいな。そもそもSQLだののフロントエンドを作ったりするツールだもんね。いきなりHTTP通信でデータバインディングだからねぇ。いや、中間がないって感じかな。やさしいのは「オブジェクトを配置して～」ってとこから始まってるから。逆にそういう知識とFlex慣れしてしまえば、そういったツールを楽に開発できそうだというのは分かる。だって、圧倒的にソースコードが少なくて済むんだもん。なるほどね～。FlashUIがIDサーバとIDML云々って話になるのはうなずける。<br/>
<br/>
とりあえずサンプルってことで今回もドキュメントはつけていません。ということで以下参照。<br/>
<br/>
ちなみに。<br/>
<br/>
Windowsで動かないんですよ。というか、起動するとWindowがタイトルバーだけになっちゃうんです。仮想PCだからか？　でも.swfファイルを直にFlashプレーヤーで起動するとちゃんと見られるのよねー。ア～ンド、なぜかESTKがおかしい感じ。やっぱし仮想PCだからなのか？　Windowsでの確認情報求む（および耳寄りな情報）。<br/>
<br/>
情報屋 1.0(beta)：Indesign-Javascript版<br/>
<br/>
機能：リンク画像の情報を観覧、書き出す<br/>
<br/>
特徴：一覧機能では表計算ソフトのようにヘッダをクリックしてソートしたり、列の入れ替えができます。また、チェックボックスで任意の列を表示・非表示させることができます。なお、この「表示と非表示」は結果を書き出すときのフィルターにもなっています（表示項目だけが書き出される）。ただし、列の入れ替えやソートは書き出しに反映されません。<br/>
<br/>
一覧・出力できるもの：<br/>
・ページ<br/>
・ファイル名<br/>
・ファイル形式（EPS、PSDなど）<br/>
・カラースペース（RGB、CMYKなど）<br/>
・画像解像度（画像に設定されている解像度）<br/>
・出力解像度（スケーリングされた実質的な解像度）<br/>
・出力スケール（最終的・フレーム×コンテンツ）<br/>
・リンク先（ファイルパス）<br/>
なお、解像度とスケールは、水平垂直の比率が同じ場合は１つしか表示されません。<br/>
<br/>
インストール方法：解凍してできたフォルダを "そのまま" InDesignのスクリプトのフォルダに入れてください（下記注意参照）。<a href="http://d.hatena.ne.jp/seuzo/20081119" target="_blank" title="このページの最後が参考に">このページの最後が参考に</a>なります（今回も他力本願）<br/>
<br/>
起動方法：インストールされていればスクリプトパレットに表示されるはずです。<br/>
<br/>
動作環境：Indesign CS3以上（Windowsで確認とれず）<br/>
<br/>
小注意：本体（joho-ya_1.0b.jsx）とインターフェース（johoya_IF.swf）が入ったリソースフォルダ（resource）の関係は変えないでください（=同じ階層にあればOK）。<br/>
<br/>
大注意：書き出し時、保存ファイル名が同じ階層で重複しているかのチェックを行っておりません（※）。同じファイル名がある場合は上書き保存されてしまいますので、その点にくれぐれも注意してください。<br/>
<br/>
※OSが自動処理して戻ってくるとふんでいたので。かといって、SAVEダイアログで戻ってきたときじゃファイルが作られた後だから遅いしなぁ。どういう方法がよいのでしょう？<br/>
<br/>
それと。<br/>
<br/>
デフォルトでは「ベクトル系画像（AIのEPS、PDF、WMF）」が表示されないようにしてありますが、ソースコードの頭で設定している変数を変えると、全てのリンク画像を対象にすることができます。<br/>
<pre><textarea name="code" class="js" cols="60" rows="5" id="code">
//オプション（ベクトル系画像を除くオプション）
var gb_vectorOut = true; //falseで全てのリンク画像が対象になります
</textarea></pre>
ん～。振り分け条件が３つ４つ重なると、どの順番に振り分けたら効率が良いかを考えるのが面倒。さらに次で行う作業にも影響してくるとなると、なお大変。ちょっと半端なコーディングになっちゃったなー。 ]]>
</content:encoded>
<dc:subject>自作ソフト</dc:subject>
<dc:date>2009-11-22T23:50:00+09:00</dc:date>
<dc:creator>中綴千頁</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://detaramedia.blog95.fc2.com/blog-entry-76.html">
<link>http://detaramedia.blog95.fc2.com/blog-entry-76.html</link>
<title>エントリの表示が変な件について</title>
<description> 「ヘビメタ」っているだろ？　そうそう。あとさ「パンク」ってのもいるじゃねーか？　そう、なあ？　あれの違いがわかんねーんだよ。何が違うんだ？　俺もさ、ツェッペリンとかかじってきたクチだからさ、だいたいわかるんだよ。ハードロックじゃねーよな？　なっ？　あんなのと一緒にされたんじゃ、困るよな？　え？　俺が困るんだよ。そら、ツェッペリンも最後のほうはニューウェーブとかなんとかそういうファッションでよう、ア
 </description>
<content:encoded>
<![CDATA[ 「ヘビメタ」っているだろ？　そうそう。あとさ「パンク」ってのもいるじゃねーか？　そう、なあ？　あれの違いがわかんねーんだよ。何が違うんだ？　俺もさ、ツェッペリンとかかじってきたクチだからさ、だいたいわかるんだよ。ハードロックじゃねーよな？　なっ？　あんなのと一緒にされたんじゃ、困るよな？　え？　俺が困るんだよ。そら、ツェッペリンも最後のほうはニューウェーブとかなんとかそういうファッションでよう、アレだ、アレ。「オメガトライブ」みてぇなカッコしてたけどよ……<br /><br />そんなグチも今は昔。「当時のオジサンたち」には、黒デニムに革ジャン（場合によっては化粧）というイデタチの区別がつかなかったようです。もちろん、教えてあげましたよ。<br /><br />「足元を見てください。コンバースならヘビメタ。安全靴ならパンクです」とね。<br /><br />あ、そうそう。安全靴はね、かっこつけてヒモをルーズにしていると右足と左足のフック同士が引っかかって危ないんだゾ。ちゃんと履きなさい。ミドリでキメてたオジサンが言うんだから間違いない。そして「人にやさしく」。<br /><br />……と。<br /><br />そんな80'sオヤジが「どうなってんだ？度300%」でソースコードを公開していたりするのですが、にわかにソースコードハイライトライブラリを導入したもんだから、同じコードが２回だの３回だの出てきて見づらいと思います。<br /><br />原因はまだつかめていませんが、とりあえず「言いたいことはなくても」エントリ末にある「コメント」をクリックしてください。そうすると、コメント書き込み欄「の上」にあるエントリ内容は正しく表示されます（もしくは過去のエントリとして表示する）。<br /><br />ま、とりあえずそれでしのいでくださいってことで。 ]]>
</content:encoded>
<dc:subject>プログラミング</dc:subject>
<dc:date>2009-11-18T21:25:32+09:00</dc:date>
<dc:creator>中綴千頁</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://detaramedia.blog95.fc2.com/blog-entry-75.html">
<link>http://detaramedia.blog95.fc2.com/blog-entry-75.html</link>
<title>お手元系スクリプト考</title>
<description> InDesignでお手元系のスクリプトツールを作っているときは「#targetengine &quot;xxx&quot;」が必須になります。
スクリプトガイドを読むと、あたかも「#targetengine &quot;session&quot;」と書けば万事うまくいくような書きっぷりですが、このように書いただけではExtendScript Toolkit（ESTK）のターゲットから「session」を選ぶことはできませんので、そのまま実行することができません。
このような場合のセオリー……というより必然の手段は、InD
 </description>
<content:encoded>
<![CDATA[ InDesignでお手元系のスクリプトツールを作っているときは「#targetengine "xxx"」が必須になります。<br/>
スクリプトガイドを読むと、あたかも「#targetengine "session"」と書けば万事うまくいくような書きっぷりですが、このように書いただけではExtendScript Toolkit（ESTK）のターゲットから「session」を選ぶことはできませんので、そのまま実行することができません。<br/>
このような場合のセオリー……というより必然の手段は、InDesignのスクリプトフォルダに該当ファイルを入れ、そのファイルをデバッグしていくことになります。<br/>
これでも全く問題ありませんが、いちいち実行する度にInDesignのスクリプトパレットから呼び出し、ESTKでデバッグというのは作業効率が悪いように思えます。<br/>
こういった場合、一度、名前空間用のダミースクリプトをInDesignから起動しておけば、それ以降はESTKからその名前空間を指定できるようになります。<br/>
<pre><textarea name="code" class="js" cols="60" rows="5" id="code">
//デバッグ用ダミーエンジン
//Startup Scriptsに入れておく

#targetengine "nakatojiTest"

function dummyEngine(){}
dummyEngine();
</textarea></pre>

特に、頻繁にこのようなスクリプトを書く人は「Startup Scripts」に入れておけば利便性がよくなるでしょう。<br/>
なお、#targetengineを"session"にするとオブジェクト名のバッティングも予想され、予期せぬエラーに悩まされかねません。例えば、自分の汎用テスト用に「nakatojiTest」などとしておくとよいでしょう（サンプルコードもそうなっています）。<br/>
同じ理由により、本番配布ではなるべくユニーク（＝個性的な。別に笑いを取らなくてもよい）な名前をつけておくことをお勧めします。<br/>
追記：あ、また間違った。「function dummyEngine(){};」のセミコロンはいらないんだよな。どーもまだJavaScriptに慣れてなくて。元を修正しました。早くに見た人、ごめんなさい。 ]]>
</content:encoded>
<dc:subject>プログラミング</dc:subject>
<dc:date>2009-11-18T18:20:46+09:00</dc:date>
<dc:creator>中綴千頁</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
</rdf:RDF>