<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4515362030076263722</id><updated>2012-01-23T09:44:16.404+09:00</updated><category term='Adobe'/><category term='flash'/><category term='wiki'/><category term='java'/><category term='php'/><category term='AppleScript'/><category term='CentOS'/><category term='VirtualBox'/><category term='perl'/><category term='studyroom'/><category term='InDesign'/><category term='XML'/><category term='event'/><category term='E4X'/><category term='font'/><category term='xalan'/><category term='flex'/><category term='pdf'/><category term='ebook'/><category term='Xindice'/><category term='Automator'/><category term='grails'/><category term='android'/><category term='Formatter'/><category term='terminal'/><category term='git'/><category term='XPath'/><category term='antbuilder'/><category term='InDeisgn'/><category term='groovy'/><category term='software'/><category term='ExtendScript'/><category term='Linux'/><category term='iTerm'/><category term='TextMate'/><category term='mac'/><category term='雑記'/><category term='Jsdoc-toolkit'/><category term='poi'/><category term='teckdtp'/><category term='eclipse'/><category term='正規表現'/><category term='JavaScript'/><category term='CS4'/><category term='Illustrator'/><title type='text'>カネムーメモ</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.kanemu.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default?start-index=101&amp;max-results=100'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>114</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1958401074152457068</id><published>2012-01-04T01:55:00.018+09:00</published><updated>2012-01-04T07:33:09.137+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebook'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android タブレットを手に入れた話。</title><content type='html'>大晦日に実家（同じ市区内なんだけど）に帰ったら、やっぱり帰っていた姉から一言。&lt;br /&gt;「あんた、iPadみたいなやついらん？会社から支給されたけどあたし使わんでさ。」&lt;br /&gt;是非にということで、元日の夜に姉夫婦のうちまで取りに行ってきた。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-zOJqrQJHcrU/TwMgJapQNBI/AAAAAAAAAcM/XOlnctKgUL0/s1600/ARCHOS01.jpg" imageanchor="1"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-zOJqrQJHcrU/TwMgJapQNBI/AAAAAAAAAcM/XOlnctKgUL0/s320/ARCHOS01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-nEg9g32376E/TwMgS8yTFOI/AAAAAAAAAcY/VRg5lVqeSzw/s1600/ARCHOS02.jpg" imageanchor="1"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-nEg9g32376E/TwMgS8yTFOI/AAAAAAAAAcY/VRg5lVqeSzw/s320/ARCHOS02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;もらったのは、「&lt;a href="http://www.archos.com/products/ta/archos_101it/index.html?lang=en"&gt;ARCHOS 101 Internet tablet&lt;/a&gt;」。&lt;br /&gt;フランスの会社らしい。もっとも、箱には Made in China と書いてある。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-US7EylhbpR8/TwMgyTqW6AI/AAAAAAAAAck/1qeaf1JCegw/s1600/ARCHOS03.jpg" imageanchor="1"&gt;&lt;img border="0" height="180" src="http://1.bp.blogspot.com/-US7EylhbpR8/TwMgyTqW6AI/AAAAAAAAAck/1qeaf1JCegw/s320/ARCHOS03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;開けてみるとこんな感じ。洋物だけに、電源アダプタはヨーロッパ用のコンセントも付属していた。&lt;br /&gt;&lt;br /&gt;開封して電源アダプタをつなぎ、起動。&lt;br /&gt;起動して最初の設定画面で、言語に日本語を選択することができた。&lt;br /&gt;とはいえ、説明書は英語、フランス語とかで日本語は無く、情報を求めてググっていると、2chのまとめサイトを発見！こういう時の2chはホント頼りになるなぁ。&lt;br /&gt;&lt;a href="http://www16.atwiki.jp/archos/"&gt;archosまとめwiki&lt;/a&gt;&lt;br /&gt;こちらを参考に、日本語入力は&lt;a href="http://sites.google.com/site/owplus/"&gt;OpenWnn plus&lt;/a&gt;というのを入れて設定した。&lt;br /&gt;&lt;br /&gt;特に困ったのは、Android Marketが入っていないこと。&lt;br /&gt;これは携帯電話会社とGoogleとの契約の関係らしくて、ARCHOSには代わりにAppsLibというマーケットアプリが入っているのだけど、Android Marketにしか無いアプリも多い。&lt;br /&gt;けれども裏技で、ArctoolsというアプリでAndroid Marketがインストールできる。（Arktools自体はAppsLibからインストールできる。）&lt;br /&gt;参考ページ：&lt;a href="http://blog.alphablend.jp/?p=73"&gt;ARCHOS 70 に ArcToolsで google Android Marketを&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;そんなわけで、Androidマーケットも入り、ほぼ問題ない環境が揃った。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-kn0OpPO27Gg/TwMkj-7QUTI/AAAAAAAAAcw/_V_Ac3BpS9A/s1600/ARCHOS04.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-kn0OpPO27Gg/TwMkj-7QUTI/AAAAAAAAAcw/_V_Ac3BpS9A/s320/ARCHOS04.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;ケースがないので、とりあえずダイソーでB5のメッシュ袋を買ってきて入れた。裸よりはいいかな？&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-cLtcm3rHPiQ/TwMk757a_EI/AAAAAAAAAc8/2qOWQYxRsAQ/s1600/ARCHOS05.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-cLtcm3rHPiQ/TwMk757a_EI/AAAAAAAAAc8/2qOWQYxRsAQ/s320/ARCHOS05.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;起動したところ。&lt;br /&gt;&lt;br /&gt;さて、早速eBookを見てみよう、ということで、適当にePubリーダを探す。&lt;br /&gt;ところがこれが以外と使えるリーダがない。&lt;br /&gt;定番ぽい、プリインストールされていた&lt;a href="https://market.android.com/details?id=com.aldiko.android&amp;amp;feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5hbGRpa28uYW5kcm9pZCJd"&gt;Aldiko Book Reader&lt;/a&gt;は、ePubファイルをmicrosdに入れて移動しなければならず、microsdはまだ購入していないので使用できず。&lt;br /&gt;&lt;a href="https://market.android.com/details?id=org.geometerplus.zlibrary.ui.android&amp;amp;feature=search_result#?t=W251bGwsMSwyLDEsIm9yZy5nZW9tZXRlcnBsdXMuemxpYnJhcnkudWkuYW5kcm9pZCJd"&gt;FBReader&lt;/a&gt;を入れてみたが、レイアウトがぐだぐだ。&lt;br /&gt;&lt;a href="https://market.android.com/details?id=jp.cssj.android&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImpwLmNzc2ouYW5kcm9pZCJd"&gt;CopperReader&lt;/a&gt;を入れて、ようやく本らしい表示になった。けれども文字はところどころスキマが空くし、目次は変な改行になるし、どうも見た目が良くない。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-m_iRlN2k94I/TwMoEo6HAQI/AAAAAAAAAdI/fpGCHVQVkJk/s1600/ARCHOS06.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-m_iRlN2k94I/TwMoEo6HAQI/AAAAAAAAAdI/fpGCHVQVkJk/s320/ARCHOS06.jpg" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;写真は、CopperReaderで技術評論社のeBook「&lt;a href="https://gihyo.jp/dp/ebook/2011/978-4-7741-4952-3"&gt;Jenk­insではじめるビルド職人入門&lt;/a&gt;」を見たところ。&lt;br /&gt;&lt;br /&gt;技術評論社の&lt;a href="https://gihyo.jp/dp/information/operation/201108/1501"&gt;提供するEPUBの概要&lt;/a&gt;のページを読むと、&lt;br /&gt;&lt;blockquote&gt;Android端末では準推奨とできる電子書籍リーダーは現時点でないのですが，Andorid OS 3端末のCuckooReaderがレイアウト再現力という意味ではお勧めです。&lt;/blockquote&gt;という風に、歯切れの悪い感じに書かれている。どうもAndroidには良いePubリーダが無いらしい……。&lt;br /&gt;上げられている&lt;a href="https://market.android.com/details?id=net.carleolee.reader&amp;amp;hl=ja"&gt;CuckooReader&lt;/a&gt;も試してみた。確かにレイアウトはきれいに出たけれど、自分の端末では縦スクロールで1章分つながって表示されてしまい、ページめくりもできなかった。こういうものなのか？？？&lt;br /&gt;&lt;br /&gt;最後に試してみたのが、&lt;a href="https://market.android.com/details?id=jp.green_fld.himawari&amp;hl=ja"&gt;Himawari Reader&lt;/a&gt;。これがいちばんレイアウトはきれいだった。ただ、1章分つながって表示されるのは同じ。ただしこちらは、めくりボタンで1ページ分スクロールするから、ストレス無く読める。これが現状一番良いリーダかも。&lt;br /&gt;でも本じゃなくて、巻物だよなこれって。&lt;br /&gt;&lt;br /&gt;対して、PDFはAdobe純正の&lt;a href="https://market.android.com/details?id=com.adobe.reader&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5hZG9iZS5yZWFkZXIiXQ.."&gt;Adobe Reader&lt;/a&gt;がAndroid対応してるだけに、特に問題もなく見ることができた。自炊したPDFの本は文字が小さくなると読みにくくなるけれど、文字がちゃんと埋め込まれたPDFなら文字がかなり細かくても読める。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-LbipnM1mB8I/TwMsTMPSvCI/AAAAAAAAAdU/ArZ_sud8O8Y/s1600/ARCHOS07.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-LbipnM1mB8I/TwMsTMPSvCI/AAAAAAAAAdU/ArZ_sud8O8Y/s320/ARCHOS07.jpg" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;写真は&lt;a href="http://grails.jp/g_mag_jp/"&gt;G*Magazine&lt;/a&gt;第4号を表示してみたところ。&lt;br /&gt;&lt;br /&gt;面白かったのは、Adobe Readerの表示設定から「テキストの折り返し」を選択すると、PDFがePubのような可変レイアウトのように表示できるところ。（段組みで、コード部分が固定になってるページは可変しなかった。作り方かな？）&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YBG6zhYUlII/TwMt5TlD-XI/AAAAAAAAAdg/xciyPyG2buU/s1600/ARCHOS08.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-YBG6zhYUlII/TwMt5TlD-XI/AAAAAAAAAdg/xciyPyG2buU/s320/ARCHOS08.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;メニューから「画面に合わせる」だったところを「テキストの折り返し」に変えると&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XAacB1_TGlc/TwMuVPiQ5nI/AAAAAAAAAds/540W4OFzCwg/s1600/ARCHOS09.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-XAacB1_TGlc/TwMuVPiQ5nI/AAAAAAAAAds/540W4OFzCwg/s320/ARCHOS09.jpg" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;表示が可変レイアウトになって、フォントも大きくできる。レイアウトは崩れるけど読みやすい。&lt;br /&gt;&lt;br /&gt;今まで、PDFは固定レイアウト、ePubは可変レイアウト、のように分けて考えていたけれど、PDFでもePubでも、文字の流れに沿って、ユーザ側で可変、固定とレイアウトを切り替えられると面白いのかな、と感じた。&lt;br /&gt;見やすい画面サイズを確保できる端末は固定レイアウトで、そうでない携帯端末や、目の悪い人は可変レイアウトで。そうすれば端末ごとの画面サイズで悩まされることもなく、本の体裁も保てるんじゃないかしら。どう作るのかは考えていないけど、CSSだってAbsoluteな位置指定もできるわけだし、案外無理じゃないのかも。&lt;br /&gt;&lt;br /&gt;というわけで、iPadもない自分が初めて手に入れたタブレット。これでしばらく遊んでみようと思う。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1958401074152457068?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1958401074152457068/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1958401074152457068' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1958401074152457068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1958401074152457068'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2012/01/android-tablet.html' title='Android タブレットを手に入れた話。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-zOJqrQJHcrU/TwMgJapQNBI/AAAAAAAAAcM/XOlnctKgUL0/s72-c/ARCHOS01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-15592797895684185</id><published>2011-11-12T18:34:00.001+09:00</published><updated>2011-11-12T18:35:21.085+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑記'/><title type='text'>Twitterやめました。</title><content type='html'>フォロワーの方が心配されるかもしれないので、お知らせ。&lt;br /&gt;&lt;br /&gt;Twitterを、もう2年近く使っていましたが、それに気を取られすぎて、仕事や生活に支障が出るようになったため、この際潔く削除することにしました。&lt;br /&gt;今はTwitterにリンクしたサービスも多くあり、不便になるのは残念ですが、しばらくこのままでやっていこうと思います。&lt;br /&gt;&lt;br /&gt;今後ともよろしくお願い致します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-15592797895684185?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/15592797895684185/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=15592797895684185' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/15592797895684185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/15592797895684185'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/11/twitter.html' title='Twitterやめました。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5747918930055388202</id><published>2011-11-09T09:51:00.002+09:00</published><updated>2011-11-09T09:53:03.126+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignで、ドキュメントのXMLタグを全部解除する。</title><content type='html'>いらなくなったよけいなタグがうっとおしい時に使うスクリプト。&lt;br /&gt;メモです。&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1349910.js?file=untag.jsx"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5747918930055388202?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5747918930055388202/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5747918930055388202' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5747918930055388202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5747918930055388202'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/11/indesignxml.html' title='InDesignで、ドキュメントのXMLタグを全部解除する。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4986278015649563462</id><published>2011-09-07T01:20:00.005+09:00</published><updated>2011-09-15T00:39:39.788+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>IllustratorCS4以降で、アートボードをクリッピングパスの大きさに合わせる。</title><content type='html'>&lt;a href="http://blog.kanemu.net/2011/08/illustrator.html"&gt;IllustratorのScriptで、アートボードをオブジェクト全体に合わせる&lt;/a&gt; の改良版です。&lt;br /&gt;（80%書き直しですが…）&lt;br /&gt;&lt;script src="https://gist.github.com/1136345.js?file=fitArtboard.jsx"&gt;&lt;/script&gt;&lt;br /&gt;Illustratorのスクリプトフォルダに入れて実行して下さい。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-YIu79XwdflQ/TmZGwwSCNMI/AAAAAAAAAbc/tea5N3ara_M/s1600/fitartboard01.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-YIu79XwdflQ/TmZGwwSCNMI/AAAAAAAAAbc/tea5N3ara_M/s320/fitartboard01.jpg" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;上のようなアートワークがあったとして、&lt;br /&gt;Illustratorのオブジェクトメニュー→アートボード→オブジェクト全体に合わせる&lt;br /&gt;を実行すると、&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-rULI1_k8OrU/TmZG02pJ59I/AAAAAAAAAbk/B9dJAqRBMKs/s1600/fitartboard02.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-rULI1_k8OrU/TmZG02pJ59I/AAAAAAAAAbk/B9dJAqRBMKs/s320/fitartboard02.jpg" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;上のように、アートボードの大きさがクリッピングパスで隠れた部分の大きさになってしまいます。&lt;br /&gt;&lt;br /&gt;このスクリプトを使う事で、&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-92S4KWyQ334/TmZG48vH-GI/AAAAAAAAAbs/Y29yZNG3_hU/s1600/fitartboard03.jpg" imageanchor="1"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-92S4KWyQ334/TmZG48vH-GI/AAAAAAAAAbs/Y29yZNG3_hU/s320/fitartboard03.jpg" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;このように、アートボードをクリッピングパスの大きさに合わせてくれます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4986278015649563462?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4986278015649563462/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4986278015649563462' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4986278015649563462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4986278015649563462'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/09/illustratorcs4.html' title='IllustratorCS4以降で、アートボードをクリッピングパスの大きさに合わせる。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-YIu79XwdflQ/TmZGwwSCNMI/AAAAAAAAAbc/tea5N3ara_M/s72-c/fitartboard01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4629581789120150896</id><published>2011-09-03T23:16:00.000+09:00</published><updated>2011-09-03T23:16:49.102+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InDeisgn'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignで保存毎に前回保存時のコピーを残す</title><content type='html'>今日、「InDesignの全ての作業ログを保存できないか？」ということを試していて、イベントリスナの使用法が分からずにtwitterでつぶやいていたところ、@kamisetoさんから意見を頂きました。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-xQs8jr2Q-34/TmIwiN8Ms9I/AAAAAAAAAas/A8hZoOB86lY/saved_with_timestamp_01.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="105" width="391" src="https://lh3.googleusercontent.com/-xQs8jr2Q-34/TmIwiN8Ms9I/AAAAAAAAAas/A8hZoOB86lY/saved_with_timestamp_01.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-JWeLp9lhj5g/TmIwsmwEawI/AAAAAAAAAa0/1vFmveTlVW4/saved_with_timestamp_02.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="122" width="396" src="https://lh5.googleusercontent.com/-JWeLp9lhj5g/TmIwsmwEawI/AAAAAAAAAa0/1vFmveTlVW4/saved_with_timestamp_02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;という流れで、最初に考えていたものと方向性は違いますが、保存時に前回保存時のコピーを残すスクリプトを書きました。&lt;br /&gt;EventListenerのサンプルのつもりで置いておきます。&lt;br /&gt;&lt;script src="https://gist.github.com/1191232.js?file=docSaveWithTimestamp.jsx"&gt;&lt;/script&gt;&lt;br /&gt;このスクリプトを、Scripts フォルダの startup scripts に入れて、InDesignを起動してください。&lt;br /&gt;ドキュメントを保存するたびに、前回保存時のドキュメントファイルを、タイムスタンプ付きで残すようになります。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VKjPgXv-Tk4/TmI2vLpgFLI/AAAAAAAAAbQ/GOy18w_EVMY/s1600/saved_with_timestamp_03.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="162" width="320" src="http://1.bp.blogspot.com/-VKjPgXv-Tk4/TmI2vLpgFLI/AAAAAAAAAbQ/GOy18w_EVMY/s320/saved_with_timestamp_03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4629581789120150896?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4629581789120150896/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4629581789120150896' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4629581789120150896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4629581789120150896'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/09/indesign.html' title='InDesignで保存毎に前回保存時のコピーを残す'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-xQs8jr2Q-34/TmIwiN8Ms9I/AAAAAAAAAas/A8hZoOB86lY/s72-c/saved_with_timestamp_01.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2423203415947523230</id><published>2011-08-10T19:57:00.003+09:00</published><updated>2011-09-07T01:22:31.115+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>IllustratorのScriptで、アートボードをオブジェクト全体に合わせる</title><content type='html'>割と困っている人がいるかもと思ったので……。&lt;br /&gt;CS4以降、AIでもEPSでもアートボードのサイズが貼付けたときのサイズになるので、&lt;br /&gt;CS3以前で作ったファイルをCS4で保存して、InDesignに貼ると位置がずれてしまったりする。&lt;br /&gt;&lt;br /&gt;そういうときはアートボードツールをダブルクリックして、プリセットの&lt;br /&gt;「アートボードをアートワークのバウンディングボックスに合わせる」（CS4）&lt;br /&gt;「オブジェクト全体に合わせる」（CS5）&lt;br /&gt;を選択するわけだけど、大量にあるとめんどくさい。なのでスクリプトを書く。&lt;br /&gt;&lt;br /&gt;スクリプトには、アートボードのサイズを合わせるオプションはないので、&lt;br /&gt;オブジェクト全体のvisibleBoundsを集めて、アートボードに設定することになる。&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1136345.js?file=fitToAllObject.jsx"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;2011年9月7日追記：&lt;br /&gt;改良版書きました。↓&lt;br /&gt;&lt;a href="http://blog.kanemu.net/2011/09/illustratorcs4.html"&gt;IllustratorCS4以降で、アートボードをクリッピングパスの大きさに合わせる。&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2423203415947523230?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2423203415947523230/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2423203415947523230' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2423203415947523230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2423203415947523230'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/08/illustrator.html' title='IllustratorのScriptで、アートボードをオブジェクト全体に合わせる'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7538772610925500025</id><published>2011-08-08T01:18:00.011+09:00</published><updated>2011-08-08T19:14:47.429+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='studyroom'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><title type='text'>DTPの勉強部屋 第21回勉強会に行ってきました。</title><content type='html'>夏らしい暑さになった2011年8月6日（土）、&lt;a href="http://study-room.info/dtp/dtp021/021-1.html"&gt;DTPの勉強部屋 第21回勉強会&lt;/a&gt;に行ってきました。&lt;br /&gt;&lt;br /&gt;勉強会会場はいつもの&lt;a href="http://www.winc-aichi.jp/access/"&gt;ウィンクあいち&lt;/a&gt;でしたが、今回は小ホール。&lt;br /&gt;開場1時間前に集まって椅子並べを手伝ったのですが、最初に入った印象は「ひろっ！」。&lt;br /&gt;ちょっとした小学校の体育館のような広さ。&lt;br /&gt;&lt;br /&gt;早く来たのを幸いに、先頭のいちばん右端を確保しました。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Session 1：覚えておこう！　InDesign使いこなし術&lt;/h4&gt;さいしょは、YUJIさんのセミナー。&lt;br /&gt;先に取っていたアンケートを元に、先に初心者向け、後にtipsという内容。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;4種類のフレームの違いの解説&lt;/li&gt;&lt;li&gt;テキストフレームとフレームグリッドの挙動の違い&lt;/li&gt;&lt;li&gt;インライングラフィックの合わせ方&lt;/li&gt;&lt;li&gt;段落スタイル・文字スタイル&lt;/li&gt;&lt;li&gt;段落スタイルの「次のスタイル」機能&lt;/li&gt;&lt;li&gt;オブジェクトスタイル、上記と併用する場合のtips&lt;/li&gt;&lt;li&gt;ドロップキャップと先頭文字スタイル、正規表現スタイル&lt;/li&gt;&lt;/ul&gt;と、特にハマりがちなところをピンポイントで解説。その内容のチョイスが絶妙でした。&lt;br /&gt;いつもながら話の上手さにも関心しきり。今回制作メンバーが来てないのがすごく残念……。&lt;br /&gt;&lt;h4&gt;Session 2：脱・食わず嫌い！　今こそ使い倒そう『レイアウト調整』機能&lt;/h4&gt;次は凸版印刷の紺野さんの、レイアウト調整の解説。&lt;br /&gt;最初に「レイアウト調整を使っていますか？」という質問に誰も手を挙げない。&lt;br /&gt;それほど知られていない機能だけれども、実は便利、という話を熱弁されました。&lt;br /&gt;&lt;br /&gt;レイアウト調整とは、マスターの段組み、半面に合わせて配置オブジェクトが可変する機能、というまとめでいいのかな？&lt;br /&gt;&lt;br /&gt;当然、可変しては困るオブジェクトもあるので、その機能を上手く使うコツの解説。&lt;br /&gt;動かしたくないものはあらかじめ、レイヤー分けをしてロックをしておくこと、後は「オブジェクトとレイヤーのロックを無視」チェックを上手く使って調整する。&lt;br /&gt;可変させるためにはガイドにスナップしていないといけない。そのためにInDesign付属のスクリプトでガイドが引ける。&lt;br /&gt;そこまではなんとか理解したのですが、段落書式（文字サイズや行幅など）の解説がノートをとりきれなくて、まだ理解できてません。資料公開待ちです。&lt;br /&gt;&lt;br /&gt;セッション最後にYUJIさんの補足で、「これからは電子書籍で、機種に合わせたサイズで書き出し直さなければならないので、この機能が重要になるかも」という話をされて、なるほどと思いました。&lt;br /&gt;&lt;h4&gt;Session 3：InDesign CS5.5の魅力！&lt;/h4&gt;次はいわもとさんのセッション。&lt;br /&gt;最初にInDesign10周年、同時にInDesignの勉強部屋も10周年、ということを紹介、会場全体で拍手！&lt;br /&gt;&lt;br /&gt;セッション内容はCS5.5の解説。主に電子書籍系、特にFolioの話でした。&lt;br /&gt;「紙では実現できないような体験を提供」、使用媒体は増えているそうで、いくつかの媒体の事例の紹介。&lt;br /&gt;ADPSは別契約になること、Acrobat.comでfolioのやりとりはできるとのこと。&lt;br /&gt;&lt;br /&gt;感想はちょっと歯切れが悪くなるんですが、やっぱり大手向きの規格だよなぁと。&lt;br /&gt;きちんとコンテンツを持ち、最初から最後まで目を通して見える状況で制作できればいいんですが、大手の子受け、孫受けの制作会社にとっては負担になるだけで、かといって同人や零細出版社みたいな小さいコンテンツを持っているところには、高すぎる。&lt;br /&gt;上から下までごっちゃにして再編成されるようなダイナミックさがない気がするんですよね。普及するのかなあ……。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;次はパネルディスカッションなんですが、準備する間に、InDesignの日本語組版エンジン開発者のひとり、ナット・マッカリーさんのビデオレターが流れました。&lt;br /&gt;かつて写真植字でしかできなかった組版をパソコンでできるようにしたが、時代が変わって、紙ベースからタブレットでの日本語組版が求められているとのこと。&lt;br /&gt;「最初に出てくるツールはわかりにくいところがありますが、幸い森YUJIさんがいますので」ってところで会場に笑いがw&lt;br /&gt;&lt;hr /&gt;&lt;h4&gt;パネルディスカッション&lt;/h4&gt;勉強部屋でははじめてのパネルディスカッション。メンバーはYUJIさん、凸版紺野さん、岩本さん、Adobeの中村美香さん。&lt;br /&gt;&lt;br /&gt;中村さんはかつてInDesignのテスターをしていたそうですが、最初のInDesignを見た時点で「これでは日本の市場には出せません、別プロジェクトにしましょう」ということでいったん止めたのだそうです。それがなければ今のInDesignの日本語組版エンジンはなかったとか。&lt;br /&gt;他にも、さまざまなInDesign開発の裏話が聞けました。&lt;br /&gt;&lt;br /&gt;それと、アンケートの質問から「これからInDesignはどうなっちゃうの？」という質問が多かった、という話から、今はEbookの市場はまだ全体の3%であること、印刷ではなくてデジパブに向かってしまうのか、という話は違う、印刷は重要だと考えている、という話をされました。&lt;br /&gt;あとバグがなかなか直らない、という件も、バージョンアップ毎にかなりの数のバグを直している、クラッシュレポートは「いいえ」を押さずにきちんと送信してほしい、Adobe側で常にモニタリングしているので数が多くなれば直る確立は増えるから、という話でした。きちんとフィードバックすれば直るよ、とのこと。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;セッションは全て終わり、恒例のプレゼントじゃんけん大会。&lt;br /&gt;今回は自分はなにも貰えませんでしたw&lt;br /&gt;（後でAdobe CreativeSuiteの体験版をもらえました）&lt;br /&gt;&lt;br /&gt;最後に、ソフトドリンクが配られて、1時間ほど会場での交流会。&lt;br /&gt;勉強部屋も参加者が増えるたび、だんだんとDTP関係者の社交会的なイベントになってきているようで、それを目的に来てる人も多いような気がしました。&lt;br /&gt;自分もtwitterのフォロワーさんに名刺を渡したり、いろいろな人の話を聞いたり、InDesign自動組みのデモを見せてもらって、うおぉおおん！となったり、楽しい時間を過ごせました。この交流会の時間についてはこれからもずっと維持してほしいです。&lt;br /&gt;&lt;br /&gt;これで会はすべて終了して、懇親会へ。&lt;br /&gt;自分はあまりしゃべれず食べてばかりいました。豚しゃぶの黒ごまソースおいしかったです。&lt;br /&gt;最後の方でいくらかお話ができてよかったです。&lt;br /&gt;&lt;br /&gt;あ、岩本さんに「Illustratorのスクリプト対応広げて下さい！」って言いたかったけれど言えなかった。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上、勉強部屋レポートでした。&lt;br /&gt;最後に、主催のYUJIさん、10年間お疲れさまでした。&lt;br /&gt;今後ともよろしくお願い致します！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7538772610925500025?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7538772610925500025/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7538772610925500025' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7538772610925500025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7538772610925500025'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/08/dtp-21.html' title='DTPの勉強部屋 第21回勉強会に行ってきました。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7820144301800257549</id><published>2011-07-13T01:21:00.001+09:00</published><updated>2011-07-13T01:23:47.335+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>開いているドキュメントをidmlかinxで保存する。</title><content type='html'>ちょっと使いスクリプトのお裾分け。&lt;br /&gt;開いているドキュメント全てを同名のinxもしくはidmlで、同じ場所に保存します。&lt;br /&gt;自分の場合、書いたスクリプトのエイリアスを作ってInDesignのそれぞれのバージョンのScriptsフォルダに入れてあるので、こういうことになります。&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1078304.js?file=exportIdmlOrInx.jsx"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7820144301800257549?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7820144301800257549/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7820144301800257549' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7820144301800257549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7820144301800257549'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/07/idmlinx.html' title='開いているドキュメントをidmlかinxで保存する。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6725751033701791628</id><published>2011-03-10T06:48:00.002+09:00</published><updated>2011-03-10T06:52:56.623+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignで、選択範囲内の行にハイパーリンク先があるかどうか調べる</title><content type='html'>相互参照のあるファイルを編集している時、うっかり「ハイパーリンク先」のある場所を編集してしまうと相互参照が外れてしまう。&lt;br /&gt;制御文字を表示していても、頭に「:」が付いてるだけで、ひどくわかりづらい。&lt;br /&gt;「なんとかならない？」と相談を受けたので、書いてみた。&lt;br /&gt;&lt;br /&gt;選択範囲の行に、「ハイパーリンク先」があるかどうか、アラートで表示します。&lt;br /&gt;&lt;script src="https://gist.github.com/863076.js?file=searchHyperLinkDest.jsx"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6725751033701791628?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6725751033701791628/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6725751033701791628' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6725751033701791628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6725751033701791628'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/03/indesign.html' title='InDesignで、選択範囲内の行にハイパーリンク先があるかどうか調べる'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6496823353545234486</id><published>2011-02-17T02:38:00.002+09:00</published><updated>2011-02-17T02:41:57.102+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='AppleScript'/><category scheme='http://www.blogger.com/atom/ns#' term='terminal'/><title type='text'>ターミナルのカレントをFinderで追ってみる。</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-FljSDb2JVxA/TVwMVu9y_jI/AAAAAAAAAV4/a8Y0WZAZqXM/s1600/cdf.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 269px;" src="http://3.bp.blogspot.com/-FljSDb2JVxA/TVwMVu9y_jI/AAAAAAAAAV4/a8Y0WZAZqXM/s320/cdf.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5574344006301842994" /&gt;&lt;/a&gt;&lt;br /&gt;ずっとGUIで育ってきた人、普通の人にとっては、CUIって使いづらいもんです。&lt;br /&gt;&lt;a href="http://fjord.jp/tag/dont-be-afraid-kuroigamen"&gt;Webデザイナーの為の「本当は怖くない」”黒い画面”入門シリーズ&lt;/a&gt;&lt;br /&gt;なんてエントリがあるぐらい。&lt;br /&gt;それは結局、文字列をファイルやディレクトリとしてイメージできないからだと思うんです。&lt;br /&gt;&lt;br /&gt;だったら見えてりゃいいんじゃね？と思い、あちこちGoogleりながら調べてるうちに、なんとなく理想に近い状態になりました。&lt;br /&gt;CUI初心者支援。Mac限定です。&lt;br /&gt;.bash_profile や、 .bashrc なんかに下記をペーストして下さい。&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/829783.js?file=gistfile1.eclass"&gt;&lt;/script&gt;&lt;br /&gt;ターミナルをcdで移動すると、Finderがその位置を追って行ってくれるので、ターミナルで今どこにいるのかを、見慣れたFinderで確認しながら作業できます。&lt;br /&gt;ターミナルとFinderが同期した状態になるので、ちょっとしたファイル削除処理なんかにターミナルを使うようになれば作業効率もアップ！&lt;br /&gt;完全に作業がCUIでイメージできるようになったらエイリアスを#でコメントアウトすれば、cdfコマンドで動くようになりますよ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6496823353545234486?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6496823353545234486/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6496823353545234486' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6496823353545234486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6496823353545234486'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/02/finder.html' title='ターミナルのカレントをFinderで追ってみる。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-FljSDb2JVxA/TVwMVu9y_jI/AAAAAAAAAV4/a8Y0WZAZqXM/s72-c/cdf.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8034088089984318599</id><published>2011-01-23T18:01:00.022+09:00</published><updated>2011-01-23T20:31:38.455+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>「InDesign Script勉強会／名古屋」フォローアップ、ライブコーディングの内容について。</title><content type='html'>さて、先日の&lt;a href="http://blog.kanemu.net/2011/01/indesign-script.html"&gt;「InDesign Script勉強会／名古屋」&lt;/a&gt;にて書いた、自分のスクリプトの解説です。&lt;br /&gt;もともと「お題」を準備して、その場でどう書いたらいいのか皆で検討して仕上げる、みたいな勉強会を想定していたため、自分の発表は自然とライブコーディングになりました。&lt;br /&gt;その場にいた人には楽しんでもらえたと思います。（楽しんでもらえましたよね？）&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;@mkawax @kanemu スクリプトお題① CSVをテキストフレームに入れる 〜ライブコーディング〜&lt;/h4&gt;これは@mkawax氏（うちの社長です）が出したお題で、「CSVの2列目と4列目をテキストフレームに入れて、それぞれに段落スタイルを設定してみて」という案件でした。&lt;br /&gt;&lt;br /&gt;CSVを読み込むスクリプトについては、@mkawax社長が自分でスクリプトを書いてブログ公開しています。&lt;br /&gt;&lt;a href="http://mkawablog.blogspot.com/2010/07/indesign.html"&gt;mkawa.xmldo: InDesignを「連続で開く」「何かする」「上書き保存して閉じる」スクリプト覚え書き&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;なので、「二次元配列でいいですか？」「いいよ」というやりとりの後、書いたのが下のコード。&lt;br /&gt;&lt;script src="https://gist.github.com/770965.js?file=listToFrame.jsx"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;ドキュメントを開き、a1、a2という段落スタイルを作り、それぞれC100、M100の色を当てます。&lt;br /&gt;そしてスクリプトを実行すると、画像のようになります。&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/TTvu_PyI1qI/AAAAAAAAAVM/HH1zWtY7hjg/s1600/listToFrame_1.jpg"&gt;&lt;img style="cursor:pointer; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 305px; height: 320px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/TTvu_PyI1qI/AAAAAAAAAVM/HH1zWtY7hjg/s320/listToFrame_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5565304534882375330" /&gt;&lt;/a&gt;&lt;br /&gt;問題は、上から２つ目のテキストフレームです。広げてみます。&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/TTvvKOjjMZI/AAAAAAAAAVU/7Ghhp_SPc1k/s1600/listToFrame_2.jpg"&gt;&lt;img style="cursor:pointer; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 305px; height: 320px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/TTvvKOjjMZI/AAAAAAAAAVU/7Ghhp_SPc1k/s320/listToFrame_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5565304723531313554" /&gt;&lt;/a&gt;&lt;br /&gt;この行にはあえて改行を加えてあるのですが、必要な部分を改行文字でjoinしてまとめてcontentsに入れ、その後で段落スタイルを設定してるため、スタイルがズレるのです。欲しい結果は、こうじゃない！bbb2には同じスタイルがかかってほしい。InDesignでparagraphはaddできないし、いったん改行でsplitして1行1行入れるような方策は考えつくのですが、いまいちスマートな方法が見つからないんですよね。&lt;br /&gt;&lt;br /&gt;InDesignのテキストまわりはややこしいです。どなたかこれが一番良い！って方法があったら教えて下さい。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;@kanemu スクリプトお題② グループじゃないグループ 〜ライブコーディング〜&lt;/h4&gt;このスクリプトは、例えばチラシ作成時にテキストフレームと画像がグループになっていて欲しいけれど、画像と文字でレイヤーが分かれていてほしいような場合。グループじゃないんだけどグループにはなっててほしいなーという場面を想定し、粗結合のグループを実現しようとしたスクリプトです。以下コード。&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/770972.js?file=kanemu_group_set.jsx"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/770972.js?file=kanemu_group_collect.jsx"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;まず、こんな感じのレイアウトを作り、「kanemu_group_set.jsx」を実行。&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/TTvvWSKevcI/AAAAAAAAAVc/LGarzlPITnU/s1600/kanemu_group_1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 301px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/TTvvWSKevcI/AAAAAAAAAVc/LGarzlPITnU/s320/kanemu_group_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5565304930658336194" /&gt;&lt;/a&gt;&lt;br /&gt;次に、いったん位置をバラバラにして、画像だけを選択。&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/TTvv0OUVDEI/AAAAAAAAAVk/001iZjBceZo/s1600/kanemu_group_2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 301px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/TTvv0OUVDEI/AAAAAAAAAVk/001iZjBceZo/s320/kanemu_group_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5565305445021977666" /&gt;&lt;/a&gt;&lt;br /&gt;「kanemu_group_collect.jsx」を実行すると、画像に合わせて位置関係が元に戻ります。レイヤーは変わりません。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/TTvv-P29rEI/AAAAAAAAAVs/IJJwCY1JxQA/s1600/kanemu_group_3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 301px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/TTvv-P29rEI/AAAAAAAAAVs/IJJwCY1JxQA/s320/kanemu_group_3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5565305617234373698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;選択したアイテムのextractLabelに一意のキー（実行時刻をキーにしています）と、その位置を保持して記憶しておき、移動した先で同じキーのアイテムを集め、位置を復帰できるようにしました。&lt;br /&gt;これを書くときは頭の中に構想はあったものの、計算はしてなかったので思った場所になかなか集まらず「そこは違う」「その位置じゃなくて」とかみんなが口を挟みながら直していきました。書き直すたび全然あさってな方向に飛んでくので笑ったw&lt;br /&gt;&lt;br /&gt;人前でスクリプトを書くのもなかなか面白いです。次の機会もまたやってみたいと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8034088089984318599?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8034088089984318599/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8034088089984318599' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8034088089984318599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8034088089984318599'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/01/indesign-script_23.html' title='「InDesign Script勉強会／名古屋」フォローアップ、ライブコーディングの内容について。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TTvu_PyI1qI/AAAAAAAAAVM/HH1zWtY7hjg/s72-c/listToFrame_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1606123612752116546</id><published>2011-01-23T15:51:00.015+09:00</published><updated>2011-08-29T00:20:06.875+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>「InDesign Script勉強会／名古屋」終了報告、今後の活動について。</title><content type='html'>たいへん遅くなりました。勉強会から既に半月経ってしまいましたが…。&lt;br /&gt;&lt;br /&gt;2011年1月8日、（株）ニューキャスト　セミナールームにて、「InDesign Script勉強会／名古屋」と称して勉強会を開催しました。&lt;br /&gt;告知は以下ATNDで行いました。&lt;br /&gt;&lt;a href="http://atnd.org/events/11191"&gt;http://atnd.org/events/11191&lt;/a&gt;&lt;br /&gt;開催告知が突然だったこと、方針がまとめきれなかったこともあり、参加者は自分含めて5人と少なめでしたが、東京から@milligrammeさんが参加して下さったこともあり、内容的にはかなり充実した勉強会になったと思います。&lt;br /&gt;&lt;br /&gt;既に@milligrammeさんが、勉強会のまとめレポートを上げてくれています。ありがとうございました！&lt;br /&gt;&lt;a href="http://www.milligramme.cc/wp/archives/3382"&gt;[Event]InDesign Script勉強会／名古屋に参加してきました | diary NET. 1.2mg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;というわけで、既に詳しく紹介していただいているのでこの辺で…というわけにもいかないのでw、自分の視点での進行過程と雑感です。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;h4&gt;@osimajpさん wiki書式からInDesignへのXML流し込みの運用実例&lt;/h4&gt;wiki書式から既存のライブラリを利用してXMLに変換し、それをInDesignに流し込むというデモ。&lt;br /&gt;属性値aid:pstyleで段落スタイルを指定できること、またタグが残るのでそこを狙ってスクリプトをかけられる等、かなり実践的な内容でした。&lt;br /&gt;@osimajp さんのブログはこちら。&lt;br /&gt;&lt;a href="http://www.my-notebook.net/"&gt;Object Design Blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;@tamatamatamataさん Socketを使ってオレオレ写真集&lt;/h4&gt;InDesignのSocketを使って、google画像検索から画像を取得、ダウンロードしてInDesignに張り込む、というデモ。&lt;br /&gt;Soketを使ってここまでできる、というのが印象的な内容でした。SKE（※AKBと同系列の名古屋のアイドルグループ）で一度失敗して、AKBで写真集を組み直したのにはちょっと笑った。&lt;br /&gt;サーバにスクリプトを置いておき、更新したらダウンロードさせるようにする話、そのサーバにGithub等が使えるか？などの議論もされました。近いうちに試してみようと思います。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;@makawax @kanemu スクリプトお題① CSVをテキストフレームに入れる 〜ライブコーディング〜&lt;/h4&gt;&lt;h4&gt;@kanemu スクリプトお題② グループじゃないグループ 〜ライブコーディング〜&lt;/h4&gt;この2つについては別エントリにて。&lt;br /&gt;&lt;a href="http://blog.kanemu.net/2011/01/indesign-script_23.html"&gt;「InDesign Script勉強会／名古屋」フォローアップ、ライブコーディングの内容について。&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;@milligramme さん、ぐるぐる系スクリプト解説、scriptUIについて&lt;/h4&gt;@milligrammeさんを象徴づけるような（と自分が勝手に思っている）ぐるぐる系スクリプトの解説と、自分が以前「UIが苦手」と発言したことを受けてのScriptUIの作り方講座、といった内容でした。ぐるぐる系のスクリプトは@milligrammeさん自身も書いて動かしてみるまで結果を予想できないそうです。へーと皆関心。またUIについては、&lt;a href="http://www.kahrel.plus.com/indesign/scriptui.html"&gt;ScriptUI for dummies&lt;/a&gt;というサンプル豊富なリファレンスPDFを紹介してくれました。これは自分も読み飛ばしていたので、とても参考になりました。&lt;br /&gt;@milligrammeさんのサイトはこちら。&lt;br /&gt;&lt;a href="http://www.milligramme.cc/"&gt;NET. 1.2mg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;その他に、自分の持ち出した&lt;br /&gt;&lt;ul&gt;&lt;li&gt;スクリプトを社内に普及させ、使ってもらうにはどうすればいいのか？&lt;/li&gt;&lt;li&gt;スクリプトの配布方法について&lt;/li&gt;&lt;li&gt;スクリプトは商売になるのか？&lt;/li&gt;&lt;/ul&gt;といった話題にも、皆盛んに議論を交していただけました。&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;さて、自分の雑感です。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;名古屋には「地の利」がない。最新技術や最先端の人に触れるには、東京のが有利。&lt;/li&gt;&lt;li&gt;ライブコーディングは、普段から常によい方法を取っていないとはずかしい。&lt;/li&gt;&lt;/ul&gt;今回来ていただいた@milligrammeさんが持ってきたのは、東京の風というか雰囲気のようなものでした。こんな勉強会に行ったとか、こういうことをやってる人に会ったとかそういう話しを聞いていると、技術系でも最新のものに触れられる機会はやっぱり東京の方が多いなと。&lt;br /&gt;また今回、自分の求めていたのは「他の会社の人との交流」であって、そこからスクリプトを浸透させる方法や、効率化のアイデアを交換したかったのが目標でした。&lt;br /&gt;しかし今回集まったのも基本的に社内の人で、人を集めるという意味では失敗でした。&lt;br /&gt;そういった意味で、やっぱり名古屋には地の利がないなと思うわけです。&lt;br /&gt;それを補うには、今回間に合わなかったUstreamでの公開やリモート参加など、もっと工夫していかないといけないなと感じました。&lt;br /&gt;&lt;br /&gt;あと、自分の持つものを使いこなせていないと、ライブコーディングは恥ずかしいというコト。自分は&lt;a href="http://macromates.com/"&gt;Textmate&lt;/a&gt;をスクリプト書くのに使用しているのですが、自分が薦めて使い始めたはずのmgさんがじぶんより使いこなせているのはかなり恥ずかしい。&lt;br /&gt;人に見せるとかそういう場面を持つようになると、より自分の技術に敏感になるな、と感じました。これは失敗ながらも良い教訓でした。&lt;br /&gt;「TextMateの良さをもっと宣伝すれば」と言われるのももっとも。使ってるものが良い事は知っているので、それを自慢できるぐらいにならないといけないなと思った次第です。&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;それと、今後のScript勉強会の方針ですが、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;年4回程度を目標に開催、次回は春頃を予定。&lt;/li&gt;&lt;li&gt;専用ページは無し。告知はTwitterで、受付はATNDかPARTAKEでして、終了報告はカネムーメモで。&lt;/li&gt;&lt;li&gt;ユーザグループ等は作らず、誰でも気楽に参加できるように。&lt;/li&gt;&lt;li&gt;名古屋開催で来れない人の為に、次はUstreamを準備して、リモート参加者を募集する計画。&lt;/li&gt;&lt;li&gt;初心者は歓迎、でも初心者入門的なことはしないので、ネット上で配布されているスクリプトを動かす程度の予習はしてきて下さい。&lt;/li&gt;&lt;/ul&gt;このような感じで続けられればと思っています。  以上です、参加者の皆様、お疲れ様でした。 今後ともよろしくお願い致します。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;b&gt;2011年8月28日追記：&lt;/b&gt; &lt;br /&gt;このエントリで語った計画について、8月28日現在、まだ1行も実行できていません。&lt;br /&gt;この後、自分はよりシステム開発側によった仕事が多くなり、制作の効率化にはあまり関われなくなりました。その分知識を補うのに必死で、Adobe系のスクリプトに関しては話せることが少なくなっています。もともと足りないリソースを勉強会に裂くことができないでいます。&lt;br /&gt;&lt;br /&gt;DTPのスクリプトは、本来はそれを使う本人が自分で書くべきものだと思います。&lt;br /&gt;人に頼んで書いてもらうのでは、自分で書き直すこともできないし、自分の書くスクリプトに思い入れがなければ「思っているのと違う」という理由で使わなくなってしまいます。&lt;br /&gt;自分でスクリプトを書ければ、それが自由にカスタマイズできるだけでなく、使える手のうちにスクリプトが加わる事で、ドキュメントの作り方自体も変わっていきます。&lt;br /&gt;&lt;br /&gt;上記の計画は当分、実行できそうにありません。申し訳ありません。&lt;br /&gt;もし我こそがと思う方がいらっしゃれば、どなたでもスクリプト勉強会を開いてください。&lt;br /&gt;その時には、きっと参加させていただきます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1606123612752116546?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1606123612752116546/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1606123612752116546' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1606123612752116546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1606123612752116546'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2011/01/indesign-script.html' title='「InDesign Script勉強会／名古屋」終了報告、今後の活動について。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7699733769600056586</id><published>2010-12-06T03:53:00.013+09:00</published><updated>2010-12-08T00:37:18.527+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='正規表現'/><title type='text'>JavaScriptで、タグの外側だけを置換する。</title><content type='html'>例えば、&lt;br /&gt;&lt;blockquote&gt;&amp;lt;p&amp;gt;あいうえおAAAかきくけこbbbさしすせそCCC&amp;lt;br/&amp;gt;たたたDDDちちちeeeつつつFFFてててててgとととと&amp;lt;/p&amp;gt;&lt;/blockquote&gt;というhtmlがあった場合に、これの英字の部分だけを太字にしようとしたとする。&lt;br /&gt;だけれど素直に&lt;br /&gt;&lt;pre class="prettyprint"&gt;var html="&amp;lt;p&amp;gt;あいうえおAAAかきくけこbbbさしすせそCCC&amp;lt;br/&amp;gt;たたたDDDちちちeeeつつつFFFてててててgとととと&amp;lt;/p&amp;gt;";&lt;br /&gt;html=html.replace(/(\w+)/g,"&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt;");&lt;/pre&gt;などとやると、&lt;br /&gt;&lt;blockquote&gt;&amp;lt;&amp;lt;b&amp;gt;p&amp;lt;/b&amp;gt;&amp;gt;あいうえお&amp;lt;b&amp;gt;AAA&amp;lt;/b&amp;gt;かきくけこ&amp;lt;b&amp;gt;bbb&amp;lt;/b&amp;gt;さしすせそ&amp;lt;b&amp;gt;CCC&amp;lt;/b&amp;gt;&amp;lt;&amp;lt;b&amp;gt;br&amp;lt;/b&amp;gt;/&amp;gt;たたた&amp;lt;b&amp;gt;DDD&amp;lt;/b&amp;gt;ちちち&amp;lt;b&amp;gt;eee&amp;lt;/b&amp;gt;つつつ&amp;lt;b&amp;gt;FFF&amp;lt;/b&amp;gt;ててててて&amp;lt;b&amp;gt;g&amp;lt;/b&amp;gt;とととと&amp;lt;/&amp;lt;b&amp;gt;p&amp;lt;/b&amp;gt;&amp;gt;&lt;/blockquote&gt;のようにタグ内の文字まで置換されてしまうわけで……。&lt;br /&gt;&lt;br /&gt;そこで、タグの外を置換する正規表現を調べると、やたらと難しい正規表現を書かなきゃいけない。自分は正規表現はわりと得意な方だと思ってるけれど、それでもかなり理解に苦しむ。書いてみても動かない。&lt;br /&gt;だいたい、タグ自体にマッチさせる正規表現は、ちょっと勉強すれば誰でもわかる。&amp;lt;[^&amp;gt;]*?&amp;gt;だ。&lt;br /&gt;&lt;br /&gt;ピンと来た！&lt;br /&gt;&lt;pre class="prettyprint"&gt;var html="&amp;lt;p&amp;gt;あいうえおAAAかきくけこbbbさしすせそCCC&amp;lt;br/&amp;gt;たたたDDDちちちeeeつつつFFFてててててgとととと&amp;lt;/p&amp;gt;";&lt;br /&gt;&lt;br /&gt;html=html.replace(/&amp;lt;[^&amp;gt;]*?&amp;gt;|(\w+)/g,&lt;br /&gt;function(s0,s1){&lt;br /&gt;  if(s1===undefined) return s0;&lt;br /&gt;  return '&amp;lt;b&amp;gt;'+s1+'&amp;lt;/b&amp;gt;';&lt;br /&gt;});&lt;/pre&gt;&lt;blockquote&gt;&amp;lt;p&amp;gt;あいうえお&amp;lt;b&amp;gt;AAA&amp;lt;/b&amp;gt;かきくけこ&amp;lt;b&amp;gt;bbb&amp;lt;/b&amp;gt;さしすせそ&amp;lt;b&amp;gt;CCC&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;たたた&amp;lt;b&amp;gt;DDD&amp;lt;/b&amp;gt;ちちち&amp;lt;b&amp;gt;eee&amp;lt;/b&amp;gt;つつつ&amp;lt;b&amp;gt;FFF&amp;lt;/b&amp;gt;ててててて&amp;lt;b&amp;gt;g&amp;lt;/b&amp;gt;とととと&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;これでいい。正規表現内では先にタグをひっかけ、キャプチャがなければ全体をそのまま返す。&lt;br /&gt;タグになった部分の文字は見なくなるから、あとはキャプチャ文字にbタグをかけて返せばいい。&lt;br /&gt;これかなり応用がききそう！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ついでに、Groovyならばこう。&lt;br /&gt;&lt;pre class="prettyprint"&gt;String html="&amp;lt;p&amp;gt;あいうえおAAAかきくけこbbbさしすせそCCC&amp;lt;br/&amp;gt;たたたDDDちちちeeeつつつFFFてててててgとととと&amp;lt;/p&amp;gt;";&lt;br /&gt;&lt;br /&gt;html=html.replaceAll(/&amp;lt;[^&amp;gt;]*?&amp;gt;|(\w+)/){s0,s1-&amp;gt;&lt;br /&gt;  if(s1==null) return s0&lt;br /&gt;  return "&amp;lt;b&amp;gt;$s1&amp;lt;/b&amp;gt;";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;println html&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2010.12.8追記：&lt;br /&gt;タグ外だけ置換を連続でやるならつまり、こういうこと。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var html="&amp;lt;p style=\"color:red;\"&amp;gt;あいうえおpAAAかきくけこ&amp;lt;br/&amp;gt;bbbさしすせそCCC&amp;lt;/p&amp;gt;\&lt;br /&gt;&amp;lt;p&amp;gt;たたたDDDちちちpeeeつつつF&amp;lt;br/&amp;gt;FFてててててgとととと&amp;lt;/p&amp;gt;";&lt;br /&gt;&lt;br /&gt;function replaceOutsideTags(str,reg,rep){&lt;br /&gt;  return str.replace(/&amp;lt;[^&amp;gt;]*?&amp;gt;|([^&amp;lt;]+)/g,&lt;br /&gt;    function(s0,s1){return (s1===undefined)?s0:s1.replace(reg,rep);&lt;br /&gt;  });&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;html = replaceOutsideTags(html,/(\w+)/g,"&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt;");&lt;br /&gt;html = replaceOutsideTags(html,/p/g,"ぴぃ");&lt;br /&gt;html = replaceOutsideTags(html,/b/g,"火");&lt;br /&gt;html = replaceOutsideTags(html,/ち/g,"血");&lt;br /&gt;$.writeln(html);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7699733769600056586?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7699733769600056586/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7699733769600056586' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7699733769600056586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7699733769600056586'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/12/javascript.html' title='JavaScriptで、タグの外側だけを置換する。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2005177086742520156</id><published>2010-11-21T16:50:00.006+09:00</published><updated>2010-11-21T22:06:20.696+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='font'/><title type='text'>異体字セレクタ検索を作った。</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/TOjQ4REza3I/AAAAAAAAAUM/2lpWrm__lW0/s1600/itaijisearch.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 149px; height: 320px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/TOjQ4REza3I/AAAAAAAAAUM/2lpWrm__lW0/s320/itaijisearch.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5541909006554196850" /&gt;&lt;/a&gt;&lt;br /&gt;異体字セレクタを検索できるガジェットを作ってみました。&lt;br /&gt;←左側のメニューの一番上に置いておきます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.unicode.org/ivd/"&gt;IDV&lt;/a&gt;は先日2010-11-14に更新されましたが、このガジェットは2007-12-14版をもとに作成されています。&lt;br /&gt;また字形は、MacOS X 付属の「小塚明朝 Pr6N M」を使用しています。&lt;br /&gt;&lt;br /&gt;読み込みがあきらかに遅くなった気がするので、いずれ外すか、どこか別のところに移動するかも。&lt;br /&gt;メイキングはそのうち書く予定…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2005177086742520156?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2005177086742520156/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2005177086742520156' title='12 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2005177086742520156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2005177086742520156'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/11/blog-post.html' title='異体字セレクタ検索を作った。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NsZ3kbgYLEw/TOjQ4REza3I/AAAAAAAAAUM/2lpWrm__lW0/s72-c/itaijisearch.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7772756890205995640</id><published>2010-09-03T03:49:00.009+09:00</published><updated>2010-09-03T09:46:31.366+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDeisgn'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesign CS5 の pageItems の並びが CS4 以前までと違っている件</title><content type='html'>昨日、今まで作ったスクリプトのCS5での動作検証をしていて、あることに気づいた。&lt;br /&gt;下のようなInDesignドキュメントを用意する。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/TH_yUIBntXI/AAAAAAAAATo/NlxrqpCBvF8/s1600/narabi.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 293px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/TH_yUIBntXI/AAAAAAAAATo/NlxrqpCBvF8/s320/narabi.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5512390896490362226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;レイヤーは3つ、下から順番にテキストフレームに数字を入れ、ところどころグループしてある。&lt;br /&gt;このドキュメントに対し、InDesignCS4で以下のスクリプトを実行する。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var doc = app.activeDocument;&lt;br /&gt;for(var l=0,lLength=doc.layers.length;l&amp;lt;lLength;l++){&lt;br /&gt; var layer = doc.layers[l];&lt;br /&gt; $.writeln('----↓Layer '+layer.name);&lt;br /&gt; var items = layer.pageItems.everyItem().getElements();&lt;br /&gt; (function(items){&lt;br /&gt;   for(var i=0,iLength=items.length;i&amp;lt;iLength;i++){&lt;br /&gt;     var item=items[i];&lt;br /&gt;     if(item.constructor.name==='Group'){&lt;br /&gt;       $.writeln('--↓Group '+item.id);&lt;br /&gt;       arguments.callee(item.pageItems.everyItem().getElements());&lt;br /&gt;       $.writeln('--↑Group '+item.id);&lt;br /&gt;     }else{&lt;br /&gt;       $.writeln(item.contents);&lt;br /&gt;     }&lt;br /&gt;   };&lt;br /&gt; })(items);&lt;br /&gt; $.writeln('----↑Layer '+layer.name);&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;すると、結果はこう出る。&lt;br /&gt;&lt;blockquote&gt;----↓Layer レイヤー 3&lt;br /&gt;12&lt;br /&gt;11&lt;br /&gt;10&lt;br /&gt;----↑Layer レイヤー 3&lt;br /&gt;----↓Layer レイヤー 2&lt;br /&gt;--↓Group 986&lt;br /&gt;9&lt;br /&gt;--↓Group 985&lt;br /&gt;8&lt;br /&gt;7&lt;br /&gt;--↑Group 985&lt;br /&gt;--↑Group 986&lt;br /&gt;----↑Layer レイヤー 2&lt;br /&gt;----↓Layer レイヤー 1&lt;br /&gt;--↓Group 987&lt;br /&gt;6&lt;br /&gt;5&lt;br /&gt;--↑Group 987&lt;br /&gt;4&lt;br /&gt;--↓Group 976&lt;br /&gt;3&lt;br /&gt;2&lt;br /&gt;--↑Group 976&lt;br /&gt;1&lt;br /&gt;----↑Layer レイヤー 1&lt;/blockquote&gt;&lt;br /&gt;これが今までの動き。pageItemsは、レイヤーごとに上から順に、グループ以下を含まずに「PageItem」オブジェクトを返す。&lt;br /&gt;それらはTextFrameやGroupではなく、一枚皮をかぶった状態なので、everyItem().getElements()で、PageItemの皮を剝いた配列を拾っていた。これは今まで自分が結構使っている手だった。&lt;br /&gt;&lt;br /&gt;さて、このスクリプトをCS5で走らせてみると、こうなった。&lt;br /&gt;&lt;blockquote&gt;----↓Layer レイヤー 3&lt;br /&gt;12&lt;br /&gt;11&lt;br /&gt;10&lt;br /&gt;----↑Layer レイヤー 3&lt;br /&gt;----↓Layer レイヤー 2&lt;br /&gt;--↓Group 986&lt;br /&gt;9&lt;br /&gt;--↓Group 985&lt;br /&gt;8&lt;br /&gt;7&lt;br /&gt;--↑Group 985&lt;br /&gt;--↑Group 986&lt;br /&gt;----↑Layer レイヤー 2&lt;br /&gt;----↓Layer レイヤー 1&lt;br /&gt;4&lt;br /&gt;1&lt;br /&gt;--↓Group 987&lt;br /&gt;6&lt;br /&gt;5&lt;br /&gt;--↑Group 987&lt;br /&gt;--↓Group 976&lt;br /&gt;3&lt;br /&gt;2&lt;br /&gt;--↑Group 976&lt;br /&gt;----↑Layer レイヤー 1&lt;/blockquote&gt;&lt;br /&gt;並び順が変わってしまっている！わかりにくいので、レイヤーを結合して、もう一度実行してみる。&lt;br /&gt;&lt;blockquote&gt;----↓Layer レイヤー 1&lt;br /&gt;12&lt;br /&gt;11&lt;br /&gt;10&lt;br /&gt;4&lt;br /&gt;1&lt;br /&gt;--↓Group 986&lt;br /&gt;9&lt;br /&gt;--↓Group 985&lt;br /&gt;8&lt;br /&gt;7&lt;br /&gt;--↑Group 985&lt;br /&gt;--↑Group 986&lt;br /&gt;--↓Group 987&lt;br /&gt;6&lt;br /&gt;5&lt;br /&gt;--↑Group 987&lt;br /&gt;--↓Group 976&lt;br /&gt;3&lt;br /&gt;2&lt;br /&gt;--↑Group 976&lt;br /&gt;----↑Layer レイヤー 1&lt;/blockquote&gt;&lt;br /&gt;再帰するのをやめて、contentsじゃなくそのまま出してみる。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var doc = app.activeDocument;&lt;br /&gt;for(var l=0,lLength=doc.layers.length;l&amp;lt;lLength;l++){&lt;br /&gt; var layer = doc.layers[l];&lt;br /&gt; var items = layer.pageItems.everyItem().getElements();&lt;br /&gt; for(var i=0,iLength=items.length;i&amp;lt;iLength;i++){&lt;br /&gt;   $.writeln(items[i]);&lt;br /&gt; };&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;結果は？こうなった。&lt;br /&gt;&lt;blockquote&gt;[object TextFrame]&lt;br /&gt;[object TextFrame]&lt;br /&gt;[object TextFrame]&lt;br /&gt;[object TextFrame]&lt;br /&gt;[object TextFrame]&lt;br /&gt;[object Group]&lt;br /&gt;[object Group]&lt;br /&gt;[object Group]&lt;/blockquote&gt;&lt;br /&gt;要するに、CS5のpageItemsは、上から順にアイテムを並べるのではなく、「テキストフレームのまとまり（textFrames）」、「グループのまとまり（groups）」といったまとまりごとに並べて来るようだ。&lt;br /&gt;ちなみに順番は、&lt;br /&gt;Oval→Rectangle→GraphicLine→Polygon→TextFrame→Group&lt;br /&gt;の順に来るみたい。&lt;br /&gt;&lt;br /&gt;これは……地味に困る。前後関係を取りたいスクリプトがいくつかあるんだ。&lt;br /&gt;pageItemsでは前後関係が正しく来ないものの、allPageItemsでは正しい前後関係で取れる（ただしグループ以下のアイテムもまとめて来てしまう）のを確認したので、以下のようなfunctionを書いてpageItems.everyItem().getElements()と置き換えることにした。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var getChildItems=function(item){&lt;br /&gt;  var allItems = item.allPageItems;&lt;br /&gt;  var max = allItems.length, i = 0, children = [];&lt;br /&gt;  while(i &amp;lt; max){&lt;br /&gt;    var child = allItems[i];&lt;br /&gt;    children.push(child);&lt;br /&gt;    i++;&lt;br /&gt;    if(child.constructor.name==='Group'){&lt;br /&gt;      i += child.allPageItems.length;&lt;br /&gt;    }&lt;br /&gt;  };&lt;br /&gt;  return children;&lt;br /&gt;};&lt;/pre&gt;とりあえずこれで何とか……。まいったよもう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7772756890205995640?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7772756890205995640/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7772756890205995640' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7772756890205995640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7772756890205995640'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/09/indesign-cs5-pageitems-cs4.html' title='InDesign CS5 の pageItems の並びが CS4 以前までと違っている件'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/TH_yUIBntXI/AAAAAAAAATo/NlxrqpCBvF8/s72-c/narabi.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5956391490919737209</id><published>2010-08-17T05:50:00.004+09:00</published><updated>2010-08-17T06:06:04.044+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><title type='text'>デジタル・パブリッシング・フェア2010に行った話。</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/TGmne7m7MmI/AAAAAAAAATU/yv9WnRkzbpQ/s1600/DSCN3852.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/TGmne7m7MmI/AAAAAAAAATU/yv9WnRkzbpQ/s320/DSCN3852.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5506116169276011106" /&gt;&lt;/a&gt;&lt;br /&gt;ずいぶん書くのが遅れてしまいましたが、先月7月9日（土）、東京ビッグサイトまで行ったのです。&lt;br /&gt;自分はPage2008の時以来なので、2年半ぶりの上京でした。会社の皆とレンタカーを乗り合わせて、社長の運転で行ったのでした。&lt;br /&gt;朝8時に待ち合わせて出発。昼は富士サービスエリアで桜えびかきあげ丼。美味しかった。&lt;br /&gt;&lt;br /&gt;ビッグサイトに着いたのは昼1時過ぎ。前の駐車場は空いてないので奥の駐車場に車を止めて、長い通路を歩いて会場へ。&lt;br /&gt;ビッグサイトの例の逆ピラミッドの下をくぐれなかったのは残念でした。&lt;br /&gt;&lt;br /&gt;今回のデジパブは、教育ITソリューションフェアと、東京国際ブックフェアとの合同開催で、教育IT系のエリアから順番に見て行きました。&lt;br /&gt;気になったものを箇条書きに。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;問題集データベースから、word組み、InDesign組版する会社があった。&lt;br /&gt;そんなに上手くいくのかな？というのが印象。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;iPadを教育に使う試み。iPadの習字ソフト、面白い！&lt;/li&gt;&lt;br /&gt;&lt;li&gt;プロジェクタに専用の指し棒でついた部分をカメラで探知し、クリックしたり○で囲んだりする電子黒板。面白い！&lt;/li&gt;&lt;br /&gt;&lt;li&gt;モリサワMcBook。&lt;br /&gt;MCB2はもともとテキスト流し込みで全部作るから、電子書籍と相性がいいのはわかるけど、独自形式なのはどうかなぁ…という感じ。&lt;br /&gt;現状で縦組ができる強みはあると思う。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;CMS入校から自動組、電子書籍にというソリューション。&lt;br /&gt;人が並んでいてちゃんと見られなかったのが残念。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;アンテナハウスのブースで「ページ組版のためのCSS指南」を購入してもらう。（がんばって変換書く！）&lt;br /&gt;ePubの仕様策定も応援してます。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;大日本スクリーンの人とのフォントの話。&lt;br /&gt;ヒラギノは中国語フォントがあり、日本語とデザインを合わせられる。SnowLeopardには既に乗ってる。&lt;br /&gt;ライセンスについては&lt;br /&gt;「フォントライセンスはApple内のフォントはAppleの規定に従っている」&lt;br /&gt;との事。&lt;br /&gt;※あとで調べてみると、商業利用（PDF埋め込み等）もフリーという話。MacOSX Server使えば帳票出し用フォントにヒラギノが使えるな……。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;フレキシブルに巻いて使えるキーボード。面白い。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;その他、いろいろ見ましたが、そこまで目新しいものは見当たらなかった印象でした。&lt;br /&gt;電子書籍系はまだ入り口で、紙系DTPは行き止まりという感じ。&lt;br /&gt;教育ITの方がアイデア豊富で面白かったです。&lt;br /&gt;&lt;br /&gt;たぶん「教育」は目的だから、ITに刺激されていろんなアイデアも出るのでしょうが、「出版」は手段なので……&lt;br /&gt;パブリッシングはデジタルに置いてかれてしまうんだろうか？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そして一通り見てから、ブックフェアを見学。&lt;br /&gt;蝶の図鑑を探していたのだけれど、安売り本にはめぼしいものがなく、専門書はあまりニッチなのは置いていない印象で、何も買わずにあれよあれよという間に時間。&lt;br /&gt;帰りは中央道経由で、渋滞に巻き込まれながら帰ったのでした。&lt;br /&gt;&lt;br /&gt;夜は諏訪湖サービスエリアでサーモンユッケ丼でした。&lt;br /&gt;美味しかった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5956391490919737209?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5956391490919737209/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5956391490919737209' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5956391490919737209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5956391490919737209'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/08/2010.html' title='デジタル・パブリッシング・フェア2010に行った話。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TGmne7m7MmI/AAAAAAAAATU/yv9WnRkzbpQ/s72-c/DSCN3852.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4173608422376410370</id><published>2010-08-17T04:44:00.003+09:00</published><updated>2010-08-17T04:47:09.952+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>文字から文字コードを得る、文字コードを文字に戻す（Groovy版）</title><content type='html'>&lt;a href="http://kanemu1117nc.blogspot.com/2009/05/blog-post.html"&gt;カネムーメモ: 文字から文字コードを得る、文字コードを文字に戻す&lt;/a&gt;&lt;br /&gt;のGroovy版。Javaなんだけど。&lt;br /&gt;もっと便利なメソッドもありそうと思うがよくわからない。&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/527602.js?file=asciicode.groovy"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4173608422376410370?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4173608422376410370/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4173608422376410370' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4173608422376410370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4173608422376410370'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/08/blog-post.html' title='文字から文字コードを得る、文字コードを文字に戻す（Groovy版）'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6426686429195877340</id><published>2010-07-30T05:06:00.003+09:00</published><updated>2010-07-30T05:14:24.189+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDeisgn'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>そのループ、InDesignのPageItemsに使っちゃだめだよ！</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/lesamoureuses/20100728/1280277572"&gt;for (var i = 0, elem; elem = elems[i]; i++) { doSomething(elem) }って書き方見やすくていいな - JavaScriptとかPerlとかPHPとかさくらとか勉強する&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上記のページで、こういう書き方が紹介されていた。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var paragraphs = document.getElementsByTagName('p');&lt;br /&gt;for (var i = 0, paragraph; paragraph = paragraphs[i]; i++) {&lt;br /&gt;  doSomething(paragraph);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;へーへーへー、さっそくやってみよう、ということで。&lt;br /&gt;InDesignで、てきとうに2つ3つオブジェクトを置いたドキュメントを作り&lt;br /&gt;&lt;pre class="prettyprint"&gt;var items = app.activeDocument.pageItems;&lt;br /&gt;for (var i = 0, item; item = items[i]; i++) {&lt;br /&gt;  $.writeln(item);&lt;br /&gt;}&lt;/pre&gt;と、やってみた。&lt;br /&gt;……無限ループ発生。&lt;br /&gt;&lt;br /&gt;なにが起こってるのか理解できなかったので、&lt;br /&gt;&lt;pre class="prettyprint"&gt;$.writeln(items[100])&lt;/pre&gt;とかやってみたら、falseもエラーも返さない。&lt;br /&gt;なるほど、pageItemsとか、InDesignのコレクションはただindexで引くだけじゃ、存在してなくてもfalseを返さないのか。pageItemsだけでなくtextFramesやpathItemsでも同じ。これじゃループ抜けられないわな……。&lt;br /&gt;&lt;br /&gt;あ、そうか、要は配列でくればいいのかな？と思い&lt;br /&gt;&lt;pre class="prettyprint"&gt;var items = app.activeDocument.pageItems.everyItem().getElements();&lt;br /&gt;for (var i = 0, item; item = items[i]; i++) {&lt;br /&gt;  $.writeln(item);&lt;br /&gt;}&lt;/pre&gt;これなら上手くいく。よし。&lt;br /&gt;&lt;br /&gt;どちらにしろpageItemsへのアクセスは遅いし、ループさせるならいったん配列にした方が無難みたいです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6426686429195877340?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6426686429195877340/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6426686429195877340' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6426686429195877340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6426686429195877340'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/07/indesignpageitems.html' title='そのループ、InDesignのPageItemsに使っちゃだめだよ！'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7949333085169318361</id><published>2010-07-28T22:25:00.008+09:00</published><updated>2010-07-29T06:47:31.243+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDeisgn'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignでそのアイテムを持つドキュメントを得る</title><content type='html'>以外とめんどくさいんですよねこれ。再帰してparentを上がっていったり……。&lt;br /&gt;と思っていたけどいい方法を思いついたのでメモ。&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/494486.js?file=parentDoc.jsx"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;2010.7.29追記：時間を計ってみた。&lt;br /&gt;&lt;script src="http://gist.github.com/496432.js?file=parentDocTest.jsx"&gt;&lt;/script&gt;&lt;br /&gt;再帰してdocumentを得る関数が、parentDoc2。&lt;br /&gt;新規のドキュメントにたくさんオブジェクトを作って、このスクリプトを実行した結果、&lt;br /&gt;&lt;blockquote&gt;アイテムの数 -&gt; 644&lt;br /&gt;------ parentDoc(obj) -&gt; 171&lt;br /&gt;------ parentDoc2(obj) -&gt; 724&lt;/blockquote&gt;&lt;br /&gt;と、こんな感じ。グループ多めにしたけど、4倍近く速い！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7949333085169318361?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7949333085169318361/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7949333085169318361' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7949333085169318361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7949333085169318361'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/07/indesign.html' title='InDesignでそのアイテムを持つドキュメントを得る'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4440788439771835701</id><published>2010-07-07T05:10:00.010+09:00</published><updated>2010-07-07T05:54:31.006+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>ExtendScriptで、for文のiを外に出すと速いのか？</title><content type='html'>たまに、for文の中の変数（よく使うのはi）を、for文の外に出すと速くなる、と聞く。&lt;br /&gt;本当かな？と思ったので試してみた。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var ary = new Array(999999);&lt;br /&gt;var start,end;&lt;br /&gt;&lt;br /&gt;//iを中で宣言、ary.lengthを変数に渡さない&lt;br /&gt;start = new Date().getTime();&lt;br /&gt;for(var i1=0;i1&amp;lt;ary.length;i1++){}; //test1&lt;br /&gt;end = new Date().getTime();&lt;br /&gt;$.writeln('test1 -&amp;gt; '+(end-start));&lt;br /&gt;&lt;br /&gt;//iを中で宣言、ary.lengthを中で変数に渡す&lt;br /&gt;start = new Date().getTime();&lt;br /&gt;for(var i2=0,len2=ary.length;i2&amp;lt;len2;i2++){}; //test2&lt;br /&gt;end = new Date().getTime();&lt;br /&gt;$.writeln('test2 -&amp;gt; '+(end-start));&lt;br /&gt;&lt;br /&gt;//i、ary.lengthをfor文の外で宣言&lt;br /&gt;start = new Date().getTime();&lt;br /&gt;var i3=0,len3=ary.length;&lt;br /&gt;for(;i3&amp;lt;len3;i3++){}; //test3&lt;br /&gt;end = new Date().getTime();&lt;br /&gt;$.writeln('test3 -&amp;gt; '+(end-start));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;結果は、&lt;br /&gt;&lt;blockquote&gt;test1 -&gt; 1293&lt;br /&gt;test2 -&gt; 726&lt;br /&gt;test3 -&gt; 730&lt;/blockquote&gt;ということになった。配列の数をfor文中の最初で変数に入れるのは明らかに効果があるけど、変数をfor文の外で宣言するのは、（少なくともExtendScriptでは）誤差の範囲内でしかなかった。&lt;br /&gt;&lt;br /&gt;じゃあオブジェクトでforinだったらどうか？&lt;br /&gt;&lt;pre class="prettyprint"&gt;//オブジェクトを作る&lt;br /&gt;var obj = {};&lt;br /&gt;var c = 'abcdefghijklmnopqrstuvwxyz'.split('');&lt;br /&gt;var clen = c.length;&lt;br /&gt;for(var i=0;i&amp;lt;99999;i++){&lt;br /&gt;  var key = [];&lt;br /&gt;  for(var ii=0;ii&amp;lt;10;ii++){key.push(c[Math.floor(Math.random()*clen)])};&lt;br /&gt;  obj[key.join('')]=i&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var start,end;&lt;br /&gt;&lt;br /&gt;//iを中で宣言&lt;br /&gt;start = new Date().getTime();&lt;br /&gt;for(var i1 in obj){}; //test1&lt;br /&gt;end = new Date().getTime();&lt;br /&gt;$.writeln('test1 -&amp;gt; '+(end-start));&lt;br /&gt;&lt;br /&gt;//iを外で宣言&lt;br /&gt;start = new Date().getTime();&lt;br /&gt;var i2;&lt;br /&gt;for(i2 in obj){}; //test2&lt;br /&gt;end = new Date().getTime();&lt;br /&gt;$.writeln('test2 -&amp;gt; '+(end-start));&lt;/pre&gt;オブジェクトを作るのにかなり時間がかかるけど気にしない。&lt;br /&gt;結果は……&lt;br /&gt;&lt;blockquote&gt;test1 -&gt; 19256&lt;br /&gt;test2 -&gt; 19200&lt;/blockquote&gt;というわけで、誤差の範囲だった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4440788439771835701?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4440788439771835701/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4440788439771835701' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4440788439771835701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4440788439771835701'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/07/extendscriptfori.html' title='ExtendScriptで、for文のiを外に出すと速いのか？'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3488792061720215821</id><published>2010-06-27T12:20:00.007+09:00</published><updated>2010-06-30T20:16:58.238+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teckdtp'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><category scheme='http://www.blogger.com/atom/ns#' term='Jsdoc-toolkit'/><title type='text'>「第二回テクニカルDTP勉強会」フォロー、スクリプト・プログラマー宣言</title><content type='html'>2010年6月26日「&lt;a href="http://mkawablog.blogspot.com/2010/06/2dtp.html"&gt;テクニカルDTP勉強会」第二回&lt;/a&gt;」が開催され、前回に引き続き、自分も発表させていただきました。&lt;br /&gt;発表スライドを&lt;a href="http://www.slideshare.net/"&gt;slideshare&lt;/a&gt;に置いてみました。&lt;br /&gt;&lt;div style="width: 425px;" id="__ss_4625248"&gt;&lt;strong style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/kanemu/tecdtp" title="スクリプト・プログラマー宣言"&gt;スクリプト・プログラマー宣言&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse4625248" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tecdtp-100626220047-phpapp01&amp;amp;stripped_title=tecdtp"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed name="__sse4625248" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tecdtp-100626220047-phpapp01&amp;amp;stripped_title=tecdtp" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/kanemu"&gt;kanemu&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;今回、プレゼン用のスライドを初めて書きました。OpenOffice.orgのImplessを使ったのですが、慣れてないのでなかなか上手くいきませんね。Keynote使えたら良かったなぁ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;話の流れですが、Adobe系アプリを操作するためのJavaScript、いわゆるExtendScriptを書く人たちは、自分の技術を割と過小評価してるんじゃないのかな？（書く人も、雇う人も！）と思う所があり、「スクリプト書きだって、プログラマーだ！」と宣言することで、ただスクリプトを書く便利なDTPオペではなく、その先に進もう、そのためには何をしたら良いのか？　といったところをまとめてみたつもりです。&lt;br /&gt;&lt;br /&gt;実際、スクリプトを書きたい、書こうと思ってる人は多くいるのに、実際に書けるようになる人ってやっぱり少ない。それができる人は自分で調べて学ぶことのできる貴重な人材なのです。もっと自信持って良いと思うのですよ。&lt;br /&gt;&lt;br /&gt;で、ExtendScriptに閉じこもるのではなく、もっとプログラマの使ういろいろなツールを使ってみようよ、と。&lt;br /&gt;今回のプレゼンでは、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;TextMate&lt;/li&gt;&lt;li&gt;JSDoc-toolkit&lt;/li&gt;&lt;li&gt;Git&lt;/li&gt;&lt;/ul&gt;この３つを紹介してみました。&lt;br /&gt;&lt;br /&gt;それともうひとつ、ExtendScriptから入った人は、もうひとつ別の言語を覚えると良いよ、という提案をさせていただきました。今回例として取り上げたのは、コンソールから動かせるスクリプト言語が良いだろうと思ったんで&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Perl&lt;/li&gt;&lt;li&gt;Ruby&lt;/li&gt;&lt;li&gt;Python&lt;/li&gt;&lt;li&gt;Groovy&lt;/li&gt;&lt;/ul&gt;の4つだったのですが、phpでも、あるいは今回の勉強会でも使われていたFlex(mxml+ActionScript)でも良いかと思います。別の言語をおぼえることで、利用範囲や考え方が大幅に広がります。おススメです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;最後に、勉強会で聞いてくださったみなさま、ありがとうございました。&lt;br /&gt;また機会がありましたらよろしくお願いします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3488792061720215821?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3488792061720215821/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3488792061720215821' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3488792061720215821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3488792061720215821'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/06/dtp.html' title='「第二回テクニカルDTP勉強会」フォロー、スクリプト・プログラマー宣言'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8307309267548662842</id><published>2010-06-09T04:24:00.017+09:00</published><updated>2010-06-17T22:52:40.386+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><title type='text'>ExtendScript TextMate Bundle を公開しました。</title><content type='html'>&lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;からショートカットでExtendScriptの.jsxを直接走らせるバンドルです。&lt;br /&gt;元々は自分の上司の&lt;a href="http://twitter.com/tyama"&gt;@tyama&lt;/a&gt;氏が作成し、それを自分が使いやすいように少しずつ直していたものです。このたび@tyama氏の許可が取れたので公開します。&lt;br /&gt;興味のある方は、使ってみて感想下さい。&lt;br /&gt;&lt;br /&gt;GitHubに置きました。&lt;br /&gt;&lt;a href="http://github.com/kanemu/extendscript-tmbundle"&gt;kanemu / extendscript-tmbundle - GitHub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;使い方：&lt;/span&gt;&lt;br /&gt;GitHubから落としてきたフォルダ名を[ExtendScript.tmbundle]として、 ~/Library/Application Support/TextMate/Bundles に入れて下さい。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cd ~/Library/Application\ Support/TextMate/Bundles/&lt;br /&gt;$ git clone git://github.com/kanemu/extendscript-tmbundle.git ExtendScript.tmbundle&lt;/pre&gt;&lt;br /&gt;インストールしたバンドルは、TextMateの「&lt;span style="font-weight:bold;"&gt;Bundles&lt;/span&gt;」メニューの、「&lt;span style="font-weight:bold;"&gt;Bundle Editor -&gt; Show Bundle Editor&lt;/span&gt;」から編集、カスタマイズすることができます。&lt;br /&gt;&lt;br /&gt;.jsxファイルを判別するための、Scope Selector の「source.js」は　JavaScript.tmbundle に依存しています。なので JavaScript.tmbundle が入ってなければ入れて下さい。&lt;br /&gt;JavaScript.tmbundle の　Language JavaScript の 3行目&lt;br /&gt;&lt;pre class="prettyprint"&gt;fileTypes = ( 'js', 'htc' );&lt;/pre&gt;を&lt;br /&gt;&lt;pre class="prettyprint"&gt;fileTypes = ( 'jsx', 'js', 'jsxinc', 'htc' );&lt;/pre&gt;に変更して下さい。&lt;br /&gt;&lt;br /&gt;コードを拡張子.jsxで保存し、ショートカットキーを叩くと実行されます。&lt;br /&gt;#target が設定してある場合、そのアプリが立ち上がって実行します。&lt;br /&gt;なければデフォルトで、InDesign上で実行されます。&lt;br /&gt;&lt;br /&gt;デフォルトのショートカットは、以下のように設定してあります。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Command + 4 -&gt; CS4で実行&lt;/li&gt;&lt;li&gt;Command + 3 -&gt; CS3で実行&lt;/li&gt;&lt;li&gt;Command + 2 -&gt; CS2で実行&lt;/li&gt;&lt;li&gt;Command + option + 4 -&gt; ExtendScript Toolkit CS4 で開く&lt;/li&gt;&lt;li&gt;Command + option + 3 -&gt; ExtendScript Toolkit 2 で開く&lt;/li&gt;&lt;/ul&gt;このキーはぶっちゃけ結構間違えるので（CS4で走らせたい場合にCS3をキックしてしまい、よけいなアプリが立ち上がったり……）、自分で適当に直して下さい。&lt;br /&gt;&lt;br /&gt;2010.06.16追記：&lt;br /&gt;TextMateは、&lt;span style="font-weight:bold;"&gt;標準では和文の入力と、2バイトフォントの表示ができません。&lt;/span&gt;&lt;br /&gt;※現時点で、Version 1.5.9 (1510)です。&lt;br /&gt;&lt;a href="http://hetima.com/textmate/index.html"&gt;日本語入力プラグインと見た目をまともにするためのフォント&lt;/a&gt;を入れる必要があります。&lt;br /&gt;詳しくは下記ページにて。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/hetima/20061102/1162435711"&gt;TextMate で日本語をわりとまともに表示する - d.hetima&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8307309267548662842?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8307309267548662842/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8307309267548662842' title='4 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8307309267548662842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8307309267548662842'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/06/extendscript-textmate-bundle.html' title='ExtendScript TextMate Bundle を公開しました。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8838235510079410825</id><published>2010-06-05T11:06:00.004+09:00</published><updated>2010-06-08T08:08:04.799+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignの字送りで囲み文字を作る。</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/TAmxsZAHX-I/AAAAAAAAASI/5ZZmOXQtkZ8/s1600/mojiGousei.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/TAmxsZAHX-I/AAAAAAAAASI/5ZZmOXQtkZ8/s320/mojiGousei.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5479105797856649186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;モリサワMC-B2やCANONのEdianにはデフォルトで、「文字合成」（合成文字じゃない）の機能があります。&lt;br /&gt;要は２つの文字を重ね合わせる機能。○囲みの文字なんかを作るのに便利。でもInDesignには文字合成はありません。&lt;br /&gt;&lt;br /&gt;○囲みの作り方は、ディザInDesignのお~まちさんが、圏点を使うやり方を紹介されています。&lt;br /&gt;&lt;a href="http://omachi.blog.ocn.ne.jp/preopen/2008/10/post_e212.html"&gt;ディザ InDesignブログ: 圏点を利用して囲み文字&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www15.ocn.ne.jp/~preopen/idjs/idjskakomimoji.html"&gt;囲み文字の作成をサポートする&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ですが、この方法だとテキスト書き出しした時やスクリプトでcontentsを呼び出した時に、肝心の文字が「○」で出てしまいます。文字の意味としては、「合」の方にあるわけで……&lt;br /&gt;素直に字送りで重ねる方法もあった方いいと思ったので、サンプルを書いてみました。InDesignCS3 v5.0.4、MacOSX 10.5.8にて動作確認。&lt;br /&gt;&lt;script src="http://gist.github.com/426197.js?file=mojiGousei.jsx"&gt;&lt;/script&gt;&lt;br /&gt;「○合」を重ね合わせたいならば、「○合」と入力した場所を選択して、スクリプトを実行してください。&lt;br /&gt;文字のサイズを変更したいならば、スクリプトの中を直接編集。&lt;br /&gt;&lt;br /&gt;20100608追記：&lt;br /&gt;いき♂さんのアドバイスを取り入れ、丸囲み文字の後ろに「結合なし」文字を挿入するようにしました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8838235510079410825?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8838235510079410825/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8838235510079410825' title='4 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8838235510079410825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8838235510079410825'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/06/indesign.html' title='InDesignの字送りで囲み文字を作る。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NsZ3kbgYLEw/TAmxsZAHX-I/AAAAAAAAASI/5ZZmOXQtkZ8/s72-c/mojiGousei.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5627149666796502212</id><published>2010-06-02T02:39:00.010+09:00</published><updated>2010-06-04T12:58:08.764+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>たけうちとおるさんの「DTP Booster 13のお題」をやってみた</title><content type='html'>たけうちとおるさんが、今度のDTP Booster 13用の例題を発表されていた。&lt;br /&gt;&lt;a href="http://www.adg7.com/takenote_b/2010/05/dtp-booster-13-1.html"&gt;DTP Booster 13のお題 - たけうちとおるのスクリプトノート&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;書き出されるPDFはドキュメントと同じファイル名で（拡張子が.pdfになる）同一階層に保存されるとします。&lt;/li&gt;&lt;li&gt;PDF書き出しプリセットは「PDFx/1-a」です。&lt;/li&gt;&lt;li&gt;PDFを書き出したドキュメントは保存せずに閉じます。&lt;/li&gt;&lt;li&gt;20行以内で出来ると思います。&lt;/li&gt;&lt;li&gt;多少のエラー処理はしなくて結構です。&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;そういうわけでやってみた。&lt;br /&gt;Mac OS X 10.5.8、InDesign 5.0.4にて動作確認。&lt;br /&gt;&lt;script src="http://gist.github.com/421213.js?file=exportPdfs.jsx"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;20100603追記：&lt;br /&gt;当日の&lt;a href="http://www.ustream.tv/recorded/7390200"&gt;DTPBoosterのたけうちとおるさんのUSTREAM&lt;/a&gt;にて&lt;br /&gt;「document.exportFile()の引数4つ目はPDFExportPresetオブジェクトを入れる」&lt;br /&gt;と話していて、自分はStringで名前を入れていたので、心配になって正しく動作しているか確認してみました。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;今度はInDesign CS4 6.0.5にて確認&lt;/li&gt;&lt;li&gt;'[PDF/X-1a:2001 (日本)]'を指定、Acrobatにてプリフライト→OK&lt;/li&gt;&lt;li&gt;'[PDF/X-3:2002 (日本)]'を指定、Acrobatにてプリフライト→OK&lt;/li&gt;&lt;li&gt;自前で作ったプロファイル'x1a-tombo'を指定→トンボ付きで生成される&lt;/li&gt;&lt;/ul&gt;というわけで、ちゃんと動いているようです。&lt;br /&gt;&lt;br /&gt;20100604追記：&lt;br /&gt;たけうちとおるさんに、解答編でとりあげていただきました。&lt;br /&gt;ありがとうございます！&lt;br /&gt;&lt;a href="http://www.adg7.com/takenote_b/2010/06/dtp-booster-13-2.html"&gt;DTP Booster 13のお題（解答編） - たけうちとおるのスクリプトノート&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5627149666796502212?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5627149666796502212/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5627149666796502212' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5627149666796502212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5627149666796502212'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/06/dtp-booster-13.html' title='たけうちとおるさんの「DTP Booster 13のお題」をやってみた'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4626984130894264602</id><published>2010-05-10T05:10:00.006+09:00</published><updated>2010-05-16T13:58:12.989+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Groovyでスクリプト自身の場所を確認する</title><content type='html'>Javaと全く同じ。（Groovyだし、もっといい方法もあるかも）&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/402664.js?file=urltest.groovy"&gt;&lt;/script&gt;&lt;br /&gt;実行。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovy urltest.groovy &lt;br /&gt;file:/Users/kanemu/Desktop/groovytest/urltest.groovy&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4626984130894264602?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4626984130894264602/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4626984130894264602' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4626984130894264602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4626984130894264602'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/05/groovy_10.html' title='Groovyでスクリプト自身の場所を確認する'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3031469338805236524</id><published>2010-05-10T04:22:00.005+09:00</published><updated>2010-05-10T05:04:22.295+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Groovyのファイル名ハマりどころメモ</title><content type='html'>ちょっと焦ったのでメモ。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;その1:&lt;/span&gt;&lt;br /&gt;groovyスクリプトを書くとき、たとえば&lt;br /&gt;&lt;pre class="prettyprint"&gt;println('Hello, World!')&lt;/pre&gt;とだけ書いて、ファイル名を「これは最初のスクリプトだから……」とか思って&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;01_println.groovy&lt;/span&gt;&lt;br /&gt;とつけて実行すると、&lt;br /&gt;&lt;blockquote&gt;Caught: java.lang.ClassFormatError: Illegal class name "01_println" in class file 01_println&lt;/blockquote&gt;というエラーが出て動かない。&lt;br /&gt;groovyはいったんJavaのクラスとしてコンパイルされてから実行される。その際ファイル名のクラスが作られるので、ファイル名の頭文字が数字だと動かない。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;その2:&lt;/span&gt;&lt;br /&gt;groovyスクリプト内にclassを書く時、&lt;br /&gt;&lt;pre class="prettyprint"&gt;class Test {&lt;br /&gt;  def name = 'kanemu'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;def test = new Test()&lt;br /&gt;println test.name&lt;/pre&gt;のようなスクリプトを書いたとして、ファイル名を&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Test.groovy&lt;/span&gt;&lt;br /&gt;にすると、&lt;br /&gt;&lt;blockquote&gt;org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:&lt;br /&gt;/Users/kanemu/Desktop/groovytest/Test.groovy: 1: Invalid duplicate class definition of class Test : The source /Users/kanemu/Desktop/groovytest/Test.groovy contains at least two definitions of the class Test.&lt;br /&gt;One of the classes is a explicit generated class using the class statement, the other is a class generated from the script body based on the file name. Solutions are to change the file name or to change the class name.&lt;br /&gt; @ line 1, column 1.&lt;br /&gt;   class Test {&lt;br /&gt;   ^&lt;br /&gt;&lt;br /&gt;1 error&lt;/blockquote&gt;のようなエラーが出て、動かない。&lt;br /&gt;これも上と同じ理由で、いったんJavaクラスとして実行される際、ファイル名をとってTest.classを作っているので、スクリプト内のTestクラスとかぶってエラーが出てる。&lt;br /&gt;中で使うクラス名と、ファイル名は別にしておかないといけない。&lt;br /&gt;&lt;br /&gt;うーん、これはちょっとどうかと思うよ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3031469338805236524?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3031469338805236524/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3031469338805236524' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3031469338805236524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3031469338805236524'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/05/groovy.html' title='Groovyのファイル名ハマりどころメモ'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3022229173217652033</id><published>2010-05-05T13:52:00.013+09:00</published><updated>2010-05-09T22:52:25.008+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><category scheme='http://www.blogger.com/atom/ns#' term='Jsdoc-toolkit'/><title type='text'>Jsdoc-ToolkitをExtendScriptで試す</title><content type='html'>Jsdoc-toolkitという、JavaDocのようなドキュメント生成ツールがある。&lt;br /&gt;それをExtendScriptで使えないか、ずっと試そうと思ってたんだけど、GW休みになってようやく試す事ができたのでメモ。&lt;br /&gt;&lt;br /&gt;Jsdoc-toolkitは、JavaDocと似た文法でJavaScriptのソースコードにコメントを書くと、それからHTMLのドキュメントを書き出してくれるフリーウェア。&lt;br /&gt;&lt;a href="http://www12.atwiki.jp/aias-jsdoctoolkit/"&gt;JsDoc Toolkitを使う！&lt;/a&gt;&lt;br /&gt;を参考にさせてもらう。上記ページにほとんどのことは書いてあるので、ドキュメントの記述方法など、詳しい事はそちらを参照して下さい。&lt;br /&gt;&lt;br /&gt;手順としては、&lt;br /&gt;1.Javaのインストール&lt;br /&gt;これはMacには標準で入っているのでOK。&lt;br /&gt;&lt;br /&gt;2.JsDoc-toolkitのインストール&lt;br /&gt;&lt;a href="http://code.google.com/p/jsdoc-toolkit/downloads/list"&gt;http://code.google.com/p/jsdoc-toolkit/downloads/list&lt;/a&gt;&lt;br /&gt;から最新のjsdoc_toolkit-x.x.x.zipを落として解凍し、任意の場所に置く。&lt;br /&gt;（自分の習慣として、こういうのは/optに置いています。）&lt;br /&gt;&lt;br /&gt;3.とりあえずドキュメントを用意&lt;br /&gt;&lt;a href="http://www12.atwiki.jp/aias-jsdoctoolkit/pages/13.html"&gt;http://www12.atwiki.jp/aias-jsdoctoolkit/pages/13.html&lt;/a&gt;&lt;br /&gt;のサンプルコードをテスト用に、そのままコピってくる。jsxなので#targetとか入れてみる。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;/**&lt;br /&gt; * 数値に1を加算して返す。&lt;br /&gt; * @param {Number} num 数値&lt;br /&gt; * @returns {Number} 引数で与えられた数値に1を加算した数値&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;function incrementNumber(num) {&lt;br /&gt;    return num + 1;&lt;br /&gt;}&lt;/pre&gt;これを&lt;br /&gt;~/Desktop/jsdoctest/jsdoctest.jsx&lt;br /&gt;に保存する。&lt;br /&gt;&lt;br /&gt;4.コマンド実行&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cd '/opt/jsdoc-toolkit/'&lt;br /&gt;$ java -jar jsrun.jar app/run.js /Users/kanemu/Desktop/jsdoctest -x=jsx&lt;br /&gt; -t=templates/jsdoc/ -d=/Users/kanemu/Desktop/jsdoctest/jsdoc&lt;/pre&gt;-xオプションは拡張子の指定。.jsならば入れなくても書き出すが、.jsxを書き出すためには-xオプションで指定しなければいけない。&lt;br /&gt;-tオプションはHTMLテンプレート。これはJsdoc-toolkitに付属しているものを使うが、カスタマイズもできるみたい。&lt;br /&gt;-dオプションは書き出し先の指定。&lt;br /&gt;&lt;br /&gt;これでターミナルから実行すると……&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/S-D7TAhJqjI/AAAAAAAAAR4/0GbDA5nuOzs/s1600/jsdoc1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 243px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/S-D7TAhJqjI/AAAAAAAAAR4/0GbDA5nuOzs/s320/jsdoc1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5467646251602913842" /&gt;&lt;/a&gt;&lt;br /&gt;できた！こんなふうに、ドキュメントが生成される。&lt;br /&gt;いくつか試したが、ExtendScriptだからってとくにエラーを出すでもなく、きれいに行った。いいんじゃないかな？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さて、いちいちコマンドを打つのは面倒なんで、もっと簡単な方法はないかと、Antを使った方法（&lt;a href="http://code.google.com/p/jsdoc-toolkit-ant-task/"&gt;jsdoctoolkit-ant-task&lt;/a&gt;）なんかをいろいろ試したが、あんまり上手くいかなかったので割愛。&lt;br /&gt;&lt;br /&gt;自分はスクリプトを書くのにTextMateを使っているので、それのバンドルがないかと思って探したら、見つけた。&lt;br /&gt;&lt;a href="http://github.com/choan/jsdoctoolkit-tmbundle"&gt;jsdoctoolkit-tmbundle&lt;/a&gt;&lt;br /&gt;これを試してみる。ターミナルから、&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cd ~/Library/Application\ Support/TextMate/Bundles/&lt;br /&gt;$ git clone http://github.com/choan/jsdoctoolkit-tmbundle.git Jsdoctoolkit.tmbundle&lt;/pre&gt;これでTextMateを立ち上げると、Bundleが入っている。Jsdoc-Toolkitも一緒に入るので、別にインストールしたものは削除してしまって良い。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/S-D8OcNoDRI/AAAAAAAAASA/1rVsAGdrkQ8/s1600/jsdoc2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/S-D8OcNoDRI/AAAAAAAAASA/1rVsAGdrkQ8/s320/jsdoc2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5467647272649493778" /&gt;&lt;/a&gt;&lt;br /&gt;ただ、このままだと.jsxの拡張子に対応しないので、Bundle EditorでJsdocToolkitバンドルの"Create Docs"の下の方にある&lt;br /&gt;&lt;pre class="prettyprint"&gt;java -jar "${JSDOC_DIR}/jsrun.jar" "${JSDOC_DIR}/app/run.js" -a&lt;br /&gt; -t="${JSDOC_DIR}/templates/jsdoc" -d="${DOCS_DIR}" -r .&lt;/pre&gt;の行を&lt;br /&gt;&lt;pre class="prettyprint"&gt;java -jar "${JSDOC_DIR}/jsrun.jar" "${JSDOC_DIR}/app/run.js" -a&lt;br /&gt; -x="js,jsx" -t="${JSDOC_DIR}/templates/jsdoc" -d="${DOCS_DIR}" -r .&lt;/pre&gt;に変更。&lt;br /&gt;&lt;br /&gt;あと、Scope Selectorの「source.js」はJavaScriptバンドルの方で記述されているので、&lt;br /&gt;JavaScriptバンドルの"JavaScript"の上の方の行&lt;br /&gt;&lt;pre class="prettyprint"&gt;fileTypes = ( 'js', 'htc' );&lt;/pre&gt;を&lt;br /&gt;&lt;pre class="prettyprint"&gt;fileTypes = ( 'js', 'jsx', 'jsxinc', 'htc' );&lt;/pre&gt;に変更。これで Bundles&gt;JsDoc Toolkit&gt;Cleate Docs を実行すれば、JsDocが生成される。&lt;br /&gt;&lt;br /&gt;満足！これからはがんばってドキュメント書くぞ！&lt;br /&gt;&lt;br /&gt;20100509追記：&lt;br /&gt;もう一つ。jsdoctoolkit-tmbundleを入れているとjsdocの&lt;br /&gt;&lt;pre class="prettyprint"&gt;/**&lt;br /&gt; *  &lt;br /&gt; */&lt;/pre&gt;が/*+tabで入力できるのだが、これの中でreturnを押すと行頭に * のついた行が1行増える。英語環境なら良いのだけど、&lt;a href="http://d.hatena.ne.jp/hetima/20061110/1163085746"&gt;CJK-Input.tmplugin&lt;/a&gt;を入れて日本語を使っていると、エンターで変換できなくなっちゃう……。&lt;br /&gt;なので、 jsdoctoolkit-tmbundleの "Newline"の、入力補完をreturnからshift+returnに変更。これでjsdocの中も日本語入力可能に。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3022229173217652033?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3022229173217652033/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3022229173217652033' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3022229173217652033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3022229173217652033'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/05/jsdoc-toolkitextendscript.html' title='Jsdoc-ToolkitをExtendScriptで試す'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NsZ3kbgYLEw/S-D7TAhJqjI/AAAAAAAAAR4/0GbDA5nuOzs/s72-c/jsdoc1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1665368044608213343</id><published>2010-05-03T18:57:00.001+09:00</published><updated>2010-05-03T18:57:54.833+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustrator EPSのみを.aiで別名保存する</title><content type='html'>EPSは、Illustratorで作成しても、Photoshopで作成してもどちらも拡張子は.eps。当然Windowsでは区別がつかないし、MacでもSnowLeopardからはクリエータが廃止されてしまった。&lt;br /&gt;今後は拡張子が違う形式で運用していく必要がある。&lt;br /&gt;なので、IllustratorEPSのみを.aiで再保存する方法を考えてみる。&lt;br /&gt;&lt;br /&gt;まず、普通に書いた変換スクリプト。Illustrator CS3、MacOSX 10.5.8にて検証。&lt;br /&gt;あまりテストしてないので、ファイルや環境によってはエラーを出すかもです。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;(function(){&lt;br /&gt; &lt;br /&gt;  var fol=Folder.selectDialog('フォルダを選択して下さい');&lt;br /&gt;  if(!fol) return;&lt;br /&gt;  &lt;br /&gt;  var mask=function(file){&lt;br /&gt;    return /^[^\.].*\.eps/i.test(file.name);&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;  var files=fol.getFiles(mask);&lt;br /&gt;  for(var i=0,len=files.length;i&amp;lt;len;i++){&lt;br /&gt;    var file=files[i];&lt;br /&gt;    var doc=app.open(file, DocumentColorSpace.CMYK);&lt;br /&gt;    var aiFile=new File(file.absoluteURI.replace(/eps$/i,'ai'));&lt;br /&gt;    doc.saveAs(aiFile, undefined);&lt;br /&gt;    doc.close(SaveOptions.DONOTSAVECHANGES);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  alert('処理を終わりました');&lt;br /&gt;  &lt;br /&gt;})();&lt;/pre&gt;これだと、maskフィルタでは.epsを判別しているだけなので、当然Photoshop EPSも全て.aiで再保存してしまう。&lt;br /&gt;&lt;br /&gt;まず案1。Macのクリエータを使う方法。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;(function(){&lt;br /&gt; &lt;br /&gt;  var fol=Folder.selectDialog('フォルダを選択して下さい');&lt;br /&gt;  if(!fol) return;&lt;br /&gt;  &lt;br /&gt;  var mask=function(file){&lt;br /&gt;    if(/^[^\.].*\.eps/i.test(file.name)){&lt;br /&gt;      if(file.creator==='ART5'){&lt;br /&gt;        return true;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    return false;&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;  var files=fol.getFiles(mask);&lt;br /&gt;  for(var i=0,len=files.length;i&amp;lt;len;i++){&lt;br /&gt;    var file=files[i];&lt;br /&gt;    var doc=app.open(file, DocumentColorSpace.CMYK);&lt;br /&gt;    var aiFile=new File(file.absoluteURI.replace(/eps$/i,'ai'));&lt;br /&gt;    doc.saveAs(aiFile, undefined);&lt;br /&gt;    doc.close(SaveOptions.DONOTSAVECHANGES);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  alert('処理を終わりました');&lt;br /&gt;  &lt;br /&gt;})();&lt;/pre&gt;maskフィルタ内で、.epsを拾った中でさらにクリエータがIllustrator形式のものだけにtrueを返している。&lt;br /&gt;問題点は、Macでないと使えない事。MacでもSnowLeopard以降では動くかどうかわからない。&lt;br /&gt;また、Macでもネットワークドライブ経由でコピーしたりして、クリエータを落としてしまったファイルの判別はできない。&lt;br /&gt;&lt;br /&gt;案2。ファイルのXMPから判別する方法。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;(function(){&lt;br /&gt; &lt;br /&gt;  var fol=Folder.selectDialog('フォルダを選択して下さい');&lt;br /&gt;  if(!fol) return;&lt;br /&gt;  &lt;br /&gt;  var mask=function(file){&lt;br /&gt;    return /^[^\.].*\.eps/i.test(file.name);&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;  var files=fol.getFiles(mask);&lt;br /&gt;  for(var i=0,len=files.length;i&amp;lt;len;i++){&lt;br /&gt;    var file=files[i];&lt;br /&gt;    var doc=app.open(file, DocumentColorSpace.CMYK);&lt;br /&gt;    &lt;br /&gt;    var xmpStr=doc.XMPString;&lt;br /&gt;   var xmp=new XML(xmpStr);&lt;br /&gt;   var creator=xmp.xpath('/rdf:RDF/rdf:Description/xmp:CreatorTool');&lt;br /&gt;   if(!/Illustrator/i.test(creator)){&lt;br /&gt;    doc.close(SaveOptions.DONOTSAVECHANGES);&lt;br /&gt;    continue;&lt;br /&gt;   }&lt;br /&gt;    &lt;br /&gt;    var aiFile=new File(file.absoluteURI.replace(/eps$/i,'ai'));&lt;br /&gt;    doc.saveAs(aiFile, undefined);&lt;br /&gt;    doc.close(SaveOptions.DONOTSAVECHANGES);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  alert('処理を終わりました');&lt;br /&gt;  &lt;br /&gt;})();&lt;/pre&gt;まず.epsを判別し、一度Illustratorで開いた後、ファイルのXMPを読み出して、CreatorToolに"Illustrator"という文字が含まれていなければ保存せずに閉じる。&lt;br /&gt;この方法ならWindows、Macともに使えるだろうが、ファイルにXMPを付加しない過去バージョンについては判別できない。&lt;br /&gt;たぶん今も大量にあるIllustrator8形式のファイルには対応しないと思う。&lt;br /&gt;&lt;br /&gt;案3。epsファイルのヘッダ部分を読み出す方法。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;(function(){&lt;br /&gt; &lt;br /&gt;  var fol=Folder.selectDialog('フォルダを選択して下さい');&lt;br /&gt;  if(!fol) return;&lt;br /&gt;  &lt;br /&gt;  var mask=function(file){&lt;br /&gt;    if(/^[^\.].*\.eps/i.test(file.name)){&lt;br /&gt;      if(file.open('r')){&lt;br /&gt;        var header=file.read(200);&lt;br /&gt;        if(/illustrator/i.test(header)){&lt;br /&gt;          return true;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    return false;&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;  var files=fol.getFiles(mask);&lt;br /&gt;  for(var i=0,len=files.length;i&amp;lt;len;i++){&lt;br /&gt;    var file=files[i];&lt;br /&gt;    var doc=app.open(file, DocumentColorSpace.CMYK);&lt;br /&gt;    var aiFile=new File(file.absoluteURI.replace(/eps$/i,'ai'));&lt;br /&gt;    doc.saveAs(aiFile, undefined);&lt;br /&gt;    doc.close(SaveOptions.DONOTSAVECHANGES);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  alert('処理を終わりました');&lt;br /&gt;  &lt;br /&gt;})();&lt;/pre&gt;&lt;br /&gt;maskフィルタ内で.epsを拾った後、まずファイルをテキストとして一定量読み出し、そこに"illustrator"の文字が含まれているかどうかを調べ、あればtrueを返している。&lt;br /&gt;これなら古いファイルにも対応するし、きっと上手くいく……と思うのだが、実際に運用してみると、ネットワークドライブのファイルを直接処理しようとするとひとつも処理できなかったり、他にも失敗する要素があるみたい。&lt;br /&gt;&lt;br /&gt;どれが一番良いだろう？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1665368044608213343?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1665368044608213343/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1665368044608213343' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1665368044608213343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1665368044608213343'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/05/illustrator-epsai.html' title='Illustrator EPSのみを.aiで別名保存する'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5022587306256513673</id><published>2010-04-26T23:42:00.013+09:00</published><updated>2010-05-16T14:08:08.657+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='antbuilder'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>パッケージしたFontsフォルダからフォントを収集するGroovyスクリプト</title><content type='html'>今日、上司から「AntBuilderを使うと便利だぜ」と教えてもらえたので、InDesignでパッケージしたフォントを一カ所に集めるスクリプトを書いてみた。&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/402674.js?file=collectFonts.groovy"&gt;&lt;/script&gt;&lt;br /&gt;とても簡単。&lt;br /&gt;ひとつのディレクトリに1媒体分全部のデータを集めて、ターミナルから&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovy collectFonts.groovy bookdir&lt;/pre&gt;みたいにすればFontsフォルダ内のフォントを全て、ディレクトリ直下に作ったFontsフォルダに集めてくれる。&lt;br /&gt;&lt;br /&gt;AntというのはJavaでは定番の、Cでいうmakeのようなビルドツール。&lt;br /&gt;でもそれだけでなく、ファイルをコピーしたりzipしたりしてくれる便利ツールらしい。&lt;br /&gt;そういえばmakeも、そういうふうに使うんだと言ってたっけ。&lt;br /&gt;&lt;br /&gt;20100513: Fontsフォルダの中にディレクトリがあっても収集できるように修正。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5022587306256513673?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5022587306256513673/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5022587306256513673' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5022587306256513673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5022587306256513673'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/04/fontsgroovy.html' title='パッケージしたFontsフォルダからフォントを収集するGroovyスクリプト'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7101185327695327499</id><published>2010-04-16T12:59:00.000+09:00</published><updated>2010-04-16T13:01:11.502+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignスクリプトで、アクセスするだけで落ちるオブジェクトの回避方法。</title><content type='html'>スクリプトを使っているとたまに、プロパティでアクセスするだけで落ちる（プロパティを持たない？）オブジェクトに出会うことがある。読み込んでプロパティを調べようとするだけで落ちるので，なんともしようがない。&lt;br /&gt;Try &amp; catchをうまく使って、それを回避してみる。&lt;br /&gt;&lt;pre class="prettyprint"&gt;function checkProp(obj){&lt;br /&gt;  try{&lt;br /&gt;   var p=obj.properties;&lt;br /&gt;   return true;&lt;br /&gt;  }catch(e){&lt;br /&gt;   return false;&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var obj=app.activeDocument.selection[0];&lt;br /&gt;if(checkProp(obj)){&lt;br /&gt;  //実際の処理&lt;br /&gt;}&lt;/pre&gt;こんな感じで，一回プロパティ（存在するはずのプロパティなら何でもよい）を調べて、エラーになるならfalseを返すようにしておく。&lt;br /&gt;それで一度アクセスして大丈夫ならtrue、だめならfalseを返す。これでいけるはず……。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7101185327695327499?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7101185327695327499/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7101185327695327499' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7101185327695327499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7101185327695327499'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/04/indesign.html' title='InDesignスクリプトで、アクセスするだけで落ちるオブジェクトの回避方法。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6676035481076713570</id><published>2010-03-24T06:07:00.020+09:00</published><updated>2010-05-05T16:19:00.822+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='TextMate'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>「第一回テクニカルDTP勉強会」フォロー、IllustratorのScript作成のTips</title><content type='html'>2010年3月20日&lt;a href="http://mkawablog.blogspot.com/2010/03/dtp1.html"&gt;「テクニカルDTP勉強会」第一回&lt;/a&gt;が開催され、自分も拙いながらも発表させていただきました。この記事はそのフォローアップです。&lt;br /&gt;&lt;br /&gt;まず、スクリプトの便利さを示すために、最近書いたIllustrator用のスクリプトのデモ。&lt;br /&gt;それから自分がどのようにスクリプトを書いているかを、実際に書きながら説明していきました。&lt;br /&gt;&lt;br /&gt;自分が普段使っているツールは、動作確認のためのIllustrator（主にCS3）、ExtendScript Toolkit2、それと&lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;を併用しています。&lt;br /&gt;&lt;br /&gt;まず、(function(){})()を書きます。&lt;br /&gt;&lt;pre class="prettyprint"&gt;(function(){&lt;br /&gt;&lt;br /&gt;})()&lt;/pre&gt;これは、&lt;a href="http://kanemu1117nc.blogspot.com/2009/12/return.html"&gt;「なるほどreturnすりゃ止まるんだ」&lt;/a&gt;に書いた通り、変数名が干渉しないようにと、スクリプトを抜けたいときreturnで抜けられるようにするためです。&lt;br /&gt;次に、自分のブログの&lt;a href="http://kanemu1117nc.blogspot.com/2008/12/illustrator.html"&gt;「Illustratorで、選択オブジェクトの持つプロパティと値をコンソールに書き出す」&lt;/a&gt;にある下の２行をコピペします。&lt;br /&gt;&lt;pre class="prettyprint"&gt;(function(){&lt;br /&gt;var o=app.activeDocument.selection[0];&lt;br /&gt;(function(o){for(var i in o){try{i+=':'+o[i]}catch(e){i+=':'+e}$.writeln(i)}})(o);&lt;br /&gt;})()&lt;/pre&gt;※InDesignで同じことをする場合は、$.writeln(obj.properties.toSource().replace(/,/g,",\n")); を使う事が多いです。&lt;br /&gt;&lt;br /&gt;Illustrator上の調べたいオブジェクトを選択して、スクリプトを実行。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S6k2FQh9nZI/AAAAAAAAAQs/N7ivBb9sMpU/s1600-h/estk1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 144px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S6k2FQh9nZI/AAAAAAAAAQs/N7ivBb9sMpU/s200/estk1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5451948287873359250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;すると、ExtendScript ToolkitのJavaScriptコンソールに、選択アイテムのプロパティが書き出されます。&lt;br /&gt;それらを全選択して、一旦TextMateへペーストしておきます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S6k2XoVoVeI/AAAAAAAAAQ0/BPN41MFzwfg/s1600-h/estk2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 158px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S6k2XoVoVeI/AAAAAAAAAQ0/BPN41MFzwfg/s200/estk2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5451948603501729250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;次に、「オブジェクトの位置を調べたい」とするなら、そのオブジェクトの位置を少し移動してみます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S6k23dEkTqI/AAAAAAAAAQ8/vlyPowBB2bw/s1600-h/estk3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 156px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S6k23dEkTqI/AAAAAAAAAQ8/vlyPowBB2bw/s200/estk3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5451949150233185954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;コンソールを一度クリアした上で、もう一度スクリプトを実行。コンソールに書き出された内容をコピーします。&lt;br /&gt;&lt;br /&gt;TextMateにはdiff（テキストの差分を比較する）機能が付いています。&lt;br /&gt;テキストがコピーされた状態で、Bundles→Diff→Document With Clipboard を実行します。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S6k37a9J9UI/AAAAAAAAARE/Jmef0XkRFM0/s1600-h/estk4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 106px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S6k37a9J9UI/AAAAAAAAARE/Jmef0XkRFM0/s200/estk4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5451950317896332610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;すると、ファイルの差分が別ウィンドウで表示されます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S6k4KkELiuI/AAAAAAAAARM/lcw_LJXA6H8/s1600-h/estk5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 306px; height: 320px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S6k4KkELiuI/AAAAAAAAARM/lcw_LJXA6H8/s320/estk5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5451950578039753442" /&gt;&lt;/a&gt;&lt;br /&gt;これで差が表示された部分、anchor, position, width, geometricBounds, visibleBounds, controlBounds, top, leftは位置に関係したプロパティであることがわかります。&lt;br /&gt;調べたいプロパティに目星がついたら、ExtendScriptのオブジェクトモデルビューアやPDFのリファレンス等で意味を調べ、スクリプトを書いて行きます。&lt;br /&gt;&lt;br /&gt;こうやって実際に動かしながらプロパティを調べていくことで、掘り進むようにスクリプトを完成させていくわけです。&lt;br /&gt;&lt;br /&gt;……以上が今回の勉強会で自分が発表した内容でした。&lt;br /&gt;参考になりましたでしょうか？&lt;br /&gt;ほぼ即興での発表になりましたので、いろいろたどたどしい、分かりにくい部分があったように思います。&lt;br /&gt;また機会がありましたら、よろしくお願いします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6676035481076713570?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6676035481076713570/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6676035481076713570' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6676035481076713570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6676035481076713570'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/03/dtpillustratorscripttips.html' title='「第一回テクニカルDTP勉強会」フォロー、IllustratorのScript作成のTips'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/S6k2FQh9nZI/AAAAAAAAAQs/N7ivBb9sMpU/s72-c/estk1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8499122849753924768</id><published>2010-03-05T03:17:00.021+09:00</published><updated>2010-05-25T09:54:42.673+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignでテキストフレームを連結するスクリプト</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S4_7NcozvBI/AAAAAAAAAPQ/Gbl8WNInhXI/s1600-h/tamagokake.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 174px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S4_7NcozvBI/AAAAAAAAAPQ/Gbl8WNInhXI/s200/tamagokake.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5444846682958445586" /&gt;&lt;/a&gt; → &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S5BCC_3koCI/AAAAAAAAAPs/tQjseL0sovs/s1600-h/tamagokake2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 174px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S5BCC_3koCI/AAAAAAAAAPs/tQjseL0sovs/s200/tamagokake2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5444924568762621986" /&gt;&lt;/a&gt;&lt;br /&gt;選択したテキストフレームを上から順に（タテ組みなら右から順に）連結するスクリプトのサンプル。&lt;br /&gt;写真のキャプションをまとめて作りたい時なんかに使えるかも。&lt;br /&gt;MacOSX 10.5.8、InDesignCS3 5.0.4にて動作。他バージョンの検証はしていません。&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/412620.js?file=threadingText.jsx"&gt;&lt;/script&gt;&lt;br /&gt;2010.4.9追記:&lt;br /&gt;@iki_osu さんに「タテ組の場合左から順になってしまう」との指摘をいただいたので、右からになるように修正しました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8499122849753924768?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8499122849753924768/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8499122849753924768' title='3 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8499122849753924768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8499122849753924768'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/03/indesign.html' title='InDesignでテキストフレームを連結するスクリプト'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/S4_7NcozvBI/AAAAAAAAAPQ/Gbl8WNInhXI/s72-c/tamagokake.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2352351417954914116</id><published>2010-02-22T03:04:00.005+09:00</published><updated>2010-02-22T03:31:49.454+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>GroovyからInDesignを叩く（Mac限定）</title><content type='html'>昔、&lt;a href="http://kanemu1117nc.blogspot.com/2008/02/adobejavascript.html"&gt;ターミナル、AutomatorからAdobeアプリ用JavaScriptを呼び出す&lt;/a&gt;というエントリを書いたことがあるんですが、Macならコマンドを叩ける言語であれば、基本的にどんな言語からでもAppleScriptを介してExtendScriptを呼べるはずです。&lt;br /&gt;&lt;br /&gt;なので、GroovyからInDesignを呼んでみます。&lt;br /&gt;&lt;pre class="prettyprint"&gt;String[] init = ["osascript", "-e",&lt;br /&gt;'''&lt;br /&gt;tell application "Adobe InDesign CS3"&lt;br /&gt;do script "&lt;br /&gt;&lt;br /&gt;#targetengine \\"groovy\\"&lt;br /&gt;$.evalFile(\\"~/Desktop/json2.js\\");&lt;br /&gt;&lt;br /&gt;" language javascript&lt;br /&gt;end tell&lt;br /&gt;'''&lt;br /&gt;]&lt;br /&gt;init.execute()&lt;br /&gt;&lt;br /&gt;String[] args = ["osascript", "-e",&lt;br /&gt; '''&lt;br /&gt; tell application "Adobe InDesign CS3"&lt;br /&gt; do script "&lt;br /&gt; #targetengine \\"groovy\\"&lt;br /&gt; (function(){&lt;br /&gt;  &lt;br /&gt;  var obj={};&lt;br /&gt;  var sels = app.activeDocument.selection;&lt;br /&gt;  for(var i=0;i&amp;lt;sels.length;i++){&lt;br /&gt;    if(sels[i].constructor.name === \\"TextFrame\\"){&lt;br /&gt;      var id = sels[i].id;&lt;br /&gt;      var cont = sels[i].contents;&lt;br /&gt;      obj[id] = cont;&lt;br /&gt;      alert(cont)&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return JSON.stringify(obj);&lt;br /&gt; })()&lt;br /&gt; &lt;br /&gt; " language javascript&lt;br /&gt; end tell&lt;br /&gt; '''&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;def ary = []&lt;br /&gt;def proc = args.execute().text.readLines().collect{ary.push(it)}&lt;br /&gt;def cont = ary.join('')&lt;br /&gt;println cont&lt;/pre&gt;&lt;br /&gt;実行結果。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S4F4stCUlUI/AAAAAAAAANc/5GDeqseWw8A/s1600-h/groovy_run.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 275px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S4F4stCUlUI/AAAAAAAAANc/5GDeqseWw8A/s320/groovy_run.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440762534239180098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;返り値。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S4F8A4SH0JI/AAAAAAAAANs/IwV8I-bUn30/s1600-h/groovy_return.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 210px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S4F8A4SH0JI/AAAAAAAAANs/IwV8I-bUn30/s320/groovy_return.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440766179390509202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;値のやりとりをどうするか考えたんですが、結局&lt;a href="http://kanemu1117nc.blogspot.com/2008/04/extendscriptjson.html"&gt;json2.js&lt;/a&gt;を使う事にしました。&lt;br /&gt;targetengineを指定することで、セッション間でも読み込んだライブラリを使い回すことができます。&lt;br /&gt;一度Javaのコンパイラを通るので、スクリプト内のバックスラッシュは2重にしないといけません。&lt;br /&gt;&lt;br /&gt;これでちょっとGroovyが流行るの希望。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2352351417954914116?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2352351417954914116/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2352351417954914116' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2352351417954914116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2352351417954914116'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/02/groovyindesignmac.html' title='GroovyからInDesignを叩く（Mac限定）'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/S4F4stCUlUI/AAAAAAAAANc/5GDeqseWw8A/s72-c/groovy_run.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-98094472534572314</id><published>2010-02-10T20:32:00.016+09:00</published><updated>2010-05-25T10:02:39.559+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='XPath'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>ExtendScript ToolKitのヘルプから、10桁数値→人間語のハッシュマップを生成する</title><content type='html'>&lt;a href="http://kanemu1117nc.blogspot.com/2010/02/indesign10_10.html"&gt;昨日のエントリ&lt;/a&gt;を読んで、milligrammeさんがEnumerationの値を列挙したハッシュマップを作ってくれました。ありがとうございます！&lt;br /&gt;なんと、ExtendScript Toolkitのヘルプ用のXMLファイルから、Enum値を抜き出す離れ業。&lt;br /&gt;&lt;a href="http://www.milligramme.cc/weblog/2010/02/indesign-10-1.html"&gt;InDesign_10桁数値→人間語のハッシュマップ - diary NET. 1mg&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;元ネタのExtendScript Tool Kit のInDesign用のヘルプのxmlファイルは&lt;br /&gt;/Users/xxxxxx/Library/Preferences/ExtendScript Toolkit/2.0/omv$indesign-5.0-ja_jp.xml（Mac CS3の場合）&lt;/blockquote&gt;&lt;br /&gt;自分はこれをスクリプトで抜き出してみます。（後出しジャンケンの強みで、オブジェクト名も入れてみます。）InDesignCS3、Macのみ対応。Windowsの場合のファイルパスは調べてません。また、CS4でもパスを書き換えて試したのですが動きませんでした。&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/412625.js?file=basedOnEnum.jsx"&gt;&lt;/script&gt;&lt;br /&gt;最後尾のテストの、コメントアウトを外して実行して下さい。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S3Kb8141hTI/AAAAAAAAANU/pOUf7nWf3KI/s1600-h/enum.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S3Kb8141hTI/AAAAAAAAANU/pOUf7nWf3KI/s320/enum.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5436579169749534002" /&gt;&lt;/a&gt;&lt;br /&gt;できた！&lt;br /&gt;使用する場合は、このスクリプトを basedOnEnum.jsx というファイル名で保存して、スクリプトの先頭に #include "basedOnEnum.jsx" を入れてもらえればOKです。&lt;br /&gt;正直、一人ではおそらくできませんでした。&lt;br /&gt;今更ながらインターネットってすごいや。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-98094472534572314?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/98094472534572314/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=98094472534572314' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/98094472534572314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/98094472534572314'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/02/extendscript-toolkit10.html' title='ExtendScript ToolKitのヘルプから、10桁数値→人間語のハッシュマップを生成する'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/S3Kb8141hTI/AAAAAAAAANU/pOUf7nWf3KI/s72-c/enum.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7990854180892332928</id><published>2010-02-10T01:10:00.013+09:00</published><updated>2010-02-11T15:24:59.567+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignの10桁数値から意味のあるプロパティ名を得たい</title><content type='html'>InDesignのプロパティを取ろうとすると、10桁の整数で返るものがある。&lt;br /&gt;たとえば、定規の単位を取ろうとして&lt;br /&gt;&lt;pre class="prettyprint"&gt;var vUnit=app.activeDocument.viewPreferences.verticalMeasurementUnits;&lt;br /&gt;alert(vUnit);&lt;/pre&gt;とやると&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S3GKRlOP1eI/AAAAAAAAAM8/SRR9rGYTciw/s1600-h/vunit1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S3GKRlOP1eI/AAAAAAAAAM8/SRR9rGYTciw/s320/vunit1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5436278259867178466" /&gt;&lt;/a&gt;&lt;br /&gt;と出る。ExtendScript ToolkitのInDesignCS3オブジェクトモデルを開き、この10桁を見ながらこれが何なのか探す。書き出して、開いて、探して…&lt;br /&gt;そんな風に探すのめんどくさい！意味のある言葉で返せないのか？&lt;br /&gt;&lt;br /&gt;まず、viewPreferencesの取る値「MeasurementUnits」を見てみると&lt;br /&gt;&lt;pre class="prettyprint"&gt;$.writeln(MeasurementUnits.toSource());&lt;/pre&gt;&lt;br /&gt;&lt;blockquote&gt;({POINTS:2054188905, PICAS:2054187363, INCHES:2053729891, INCHES_DECIMAL:2053729892, MILLIMETERS:2053991795, CENTIMETERS:2053336435, CICEROS:2053335395, Q:2054255973, HA:1516790048, AMERICAN_POINTS:1514238068, CUSTOM:1131639917, AGATES:2051106676})&lt;br /&gt;undefined&lt;/blockquote&gt;と出る。要するにこれは単なるハッシュマップで、意味のある文字を書くと数値として代入されてるだけ。&lt;br /&gt;だったらこれを逆マップにしてやれば…。&lt;br /&gt;試しに書いてみる。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var map=(function(o,m){for(var i in o){m[o[i]]=i}return m})(RulerOrigin,{});&lt;br /&gt;var map=(function(o,m){for(var i in o){m[o[i]]=i}return m})(MeasurementUnits,map);&lt;br /&gt;&lt;br /&gt;var v=app.activeDocument.viewPreferences;&lt;br /&gt;var rOrigin=v.rulerOrigin;&lt;br /&gt;var vUnit=v.verticalMeasurementUnits;&lt;br /&gt;var hUnit=v.horizontalMeasurementUnits;&lt;br /&gt;var kUnit=v.typographicMeasurementUnits;&lt;br /&gt;var tUnit=v.textSizeMeasurementUnits;&lt;br /&gt;var lUnit=v.lineMeasurementUnits;&lt;br /&gt;&lt;br /&gt;//ふつうに表示&lt;br /&gt;var text="定規の単位\n開始位置:\t\t\t"+rOrigin&lt;br /&gt;+"\n水平方向:\t\t\t"+vUnit&lt;br /&gt;+"\n垂直方向:\t\t\t"+hUnit&lt;br /&gt;+"\n組版:\t\t\t\t"+kUnit&lt;br /&gt;+"\nテキストサイズ:\t\t"+tUnit&lt;br /&gt;+"\n線幅:\t\t\t\t"+lUnit;&lt;br /&gt;alert(text);&lt;br /&gt;&lt;br /&gt;//意味のある&lt;br /&gt;var text2="定規の単位\n開始位置:\t\t\t"+map[rOrigin]&lt;br /&gt;+"\n水平方向:\t\t\t"+map[vUnit]&lt;br /&gt;+"\n垂直方向:\t\t\t"+map[hUnit]&lt;br /&gt;+"\n組版:\t\t\t\t"+map[kUnit]&lt;br /&gt;+"\nテキストサイズ:\t\t"+map[tUnit]&lt;br /&gt;+"\n線幅:\t\t\t\t"+map[lUnit];&lt;br /&gt;alert(text2);&lt;/pre&gt;&lt;br /&gt;これを走らせると、ひとつ目のアラートで10桁数字を表示。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/S3GONA6c5BI/AAAAAAAAANE/umVCrvYnK_I/s1600-h/vunit2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 141px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/S3GONA6c5BI/AAAAAAAAANE/umVCrvYnK_I/s320/vunit2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5436282579447505938" /&gt;&lt;/a&gt;&lt;br /&gt;ふたつ目のアラート。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/S3GOcpz9jcI/AAAAAAAAANM/b_q8XkZoY2g/s1600-h/vunit3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 141px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/S3GOcpz9jcI/AAAAAAAAANM/b_q8XkZoY2g/s320/vunit3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5436282848124177858" /&gt;&lt;/a&gt;&lt;br /&gt;これで、Enumerationな値を全部とって同じ逆マップに入れて代入できれば、どんな数値が来ても意味のある文字列として返せるじゃないか！と思ったけど、そこまで。スクリプトでそれを全部とってリストする方法は見つからなかった。&lt;br /&gt;オブジェクトモデルから全部名前ひろって、ひとつひとつ手書きで書くしかないかな…もし方法知っている人がいたら教えて下さい。&lt;br /&gt;&lt;br /&gt;20100211追記：&lt;br /&gt;milligrammeさんがEnumerationの値を列挙したハッシュマップを作ってくれました。&lt;br /&gt;&lt;a href="http://www.milligramme.cc/weblog/2010/02/indesign-10-1.html"&gt;InDesign_10桁数値→人間語のハッシュマップ - diary NET. 1mg&lt;/a&gt;&lt;br /&gt;それを受けて、自動でマップを生成するエントリを書きました。&lt;br /&gt;&lt;a href="http://kanemu1117nc.blogspot.com/2010/02/extendscript-toolkit10.html"&gt;ExtendScript ToolKitのヘルプから、10桁数値→人間語のハッシュマップを生成する&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7990854180892332928?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7990854180892332928/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7990854180892332928' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7990854180892332928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7990854180892332928'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/02/indesign10_10.html' title='InDesignの10桁数値から意味のあるプロパティ名を得たい'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/S3GKRlOP1eI/AAAAAAAAAM8/SRR9rGYTciw/s72-c/vunit1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3539927709597285213</id><published>2010-02-04T12:21:00.004+09:00</published><updated>2010-02-04T12:28:31.108+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>ExtendScriptでテキストに追記する。</title><content type='html'>ちょっと調べたメモ。&lt;br /&gt;普通に&lt;br /&gt;&lt;pre class="prettyprint"&gt;var file=new File("test.txt");&lt;br /&gt;file.encoding="UTF8";&lt;br /&gt;file.lineFeed="Unix";&lt;br /&gt;if(file.open('w')){&lt;br /&gt; file.writeln('これを\n追記\nするんだよ！');&lt;br /&gt; file.close();&lt;br /&gt;}&lt;/pre&gt;とやると、ファイルの内容が上書きされてしまう。&lt;br /&gt;ポイントは2つ。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;File.open('e')で開く&lt;/li&gt;&lt;li&gt;File.seek(0,2)でいちばん後ろにファイルポインタを移動させる&lt;/li&gt;&lt;/ol&gt;&lt;pre class="prettyprint"&gt;var file=new File("test.txt");&lt;br /&gt;file.encoding="UTF8";&lt;br /&gt;file.lineFeed="Unix";&lt;br /&gt;if(file.open('e')){&lt;br /&gt; file.seek(0,2);&lt;br /&gt; file.writeln('これを\n追記\nするんだよ！');&lt;br /&gt; file.close();&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3539927709597285213?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3539927709597285213/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3539927709597285213' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3539927709597285213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3539927709597285213'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/02/extendscript.html' title='ExtendScriptでテキストに追記する。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2027369195279395054</id><published>2010-01-30T09:12:00.005+09:00</published><updated>2010-01-30T11:40:51.420+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Groovyの型付け、型変換。</title><content type='html'>Groovyは単体で使うスクリプト言語ではなく、Javaのツールという扱いなので、「Groovyのためのライブラリ」というものはあまりない。なにか難しい事をするときはJavaのライブラリをそのまま使う。&lt;br /&gt;ただ、Groovyは動的型付けだけど、Javaは静的型付け。&lt;br /&gt;Javaに引数を渡す所で、型がそれに合ってないとエラーになる。&lt;br /&gt;&lt;br /&gt;以下は、JavaのCSV読み書きライブラリ、&lt;a href="http://opencsv.sourceforge.net/"&gt;opencsv&lt;/a&gt;を使った例。&lt;br /&gt;&lt;pre class="prettyprint"&gt;import au.com.bytecode.opencsv.*&lt;br /&gt;&lt;br /&gt;def myList = [&lt;br /&gt;["月曜日","火曜日","水曜日"],&lt;br /&gt;["モスバーガーSセット","250円弁当","ジューシーハムサンド"],&lt;br /&gt;[320,262,278]&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;def writer = new FileWriter(new File("/Users/kanemu/Desktop/myList.csv"))&lt;br /&gt;def cwriter = new CSVWriter(writer)&lt;br /&gt;cwriter.writeAll(myList)&lt;br /&gt;cwriter.flush()&lt;/pre&gt;&lt;br /&gt;これを実行すると、こんなエラーが出る。&lt;br /&gt;&lt;blockquote&gt;Exception thrown: java.util.ArrayList cannot be cast to [Ljava.lang.String;&lt;br /&gt;&lt;br /&gt;java.lang.ClassCastException: java.util.ArrayList cannot be cast to [Ljava.lang.String;&lt;br /&gt; at au.com.bytecode.opencsv.CSVWriter.writeAll(Unknown Source)&lt;br /&gt; at ConsoleScript2.run(ConsoleScript2:11)&lt;/blockquote&gt;&lt;br /&gt;これは、こうすると上手くいく。&lt;br /&gt;&lt;pre class="prettyprint"&gt;import au.com.bytecode.opencsv.*&lt;br /&gt;&lt;br /&gt;def myList = [&lt;br /&gt;["月曜日","火曜日","水曜日"],&lt;br /&gt;["モスバーガーSセット","250円弁当","ジューシーハムサンド"],&lt;br /&gt;[320,262,278]&lt;br /&gt;]&lt;br /&gt;myList2=[]&lt;br /&gt;myList.each{myList2.push(it as String[])}&lt;br /&gt;&lt;br /&gt;def writer = new FileWriter(new File("/Users/kanemu/Desktop/myList.csv"))&lt;br /&gt;def cwriter = new CSVWriter(writer)&lt;br /&gt;cwriter.writeAll(myList2)&lt;br /&gt;cwriter.flush()&lt;/pre&gt;&lt;br /&gt;きっちりとそのメソッドが受け取る型に変換してやらないといけない。&lt;br /&gt;とくに、Javaは配列とList（java.util.ArrayList、Groovyで使うList）の違いがはっきりしているので、そのへんスクリプト感覚で使っていると足をすくわれる。&lt;br /&gt;&lt;br /&gt;型変換の基本は「変数 as　型」。&lt;br /&gt;&lt;pre class="prettyprint"&gt;def a = 1&lt;br /&gt;assert a.class == java.lang.Integer&lt;br /&gt;//文字列にする&lt;br /&gt;a = a as String&lt;br /&gt;assert a.class == java.lang.String&lt;br /&gt;//数値にする&lt;br /&gt;a = a as Integer&lt;br /&gt;assert a.class == java.lang.Integer&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;配列とListの例。toList()、toArray()が使える。文字列をふつうにSplitするだけだとStringの配列になってしまうので注意。&lt;br /&gt;&lt;pre class="prettyprint"&gt;def str = "わたしは,24歳,です"&lt;br /&gt;&lt;br /&gt;//StringのArrayにする&lt;br /&gt;def strAry = str.split(/,/)&lt;br /&gt;//注意：SplitだけならStringのArrayになる。&lt;br /&gt;assert strAry.class == java.lang.String[]&lt;br /&gt;&lt;br /&gt;//Listに変換する&lt;br /&gt;def strList = strAry.toList()&lt;br /&gt;assert strList.class == java.util.ArrayList&lt;br /&gt;&lt;br /&gt;//Arrayにする&lt;br /&gt;def strAry2 = strList.toArray()&lt;br /&gt;assert strAry2.class == java.lang.Object[]&lt;br /&gt;&lt;br /&gt;//StringのArrayにもどす&lt;br /&gt;def strAry3 = strList as String[]&lt;br /&gt;assert strAry3.class == java.lang.String[]&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2027369195279395054?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2027369195279395054/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2027369195279395054' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2027369195279395054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2027369195279395054'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/01/groovy.html' title='Groovyの型付け、型変換。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-599026594878058267</id><published>2010-01-06T01:54:00.009+09:00</published><updated>2010-05-25T10:05:04.455+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustratorのパステキストをパスに戻すスクリプト</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S0Nvr4P44JI/AAAAAAAAAMQ/YWfxBbrlOZ8/s1600-h/pathText1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 262px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/S0Nvr4P44JI/AAAAAAAAAMQ/YWfxBbrlOZ8/s320/pathText1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423301175908294802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S0NvwP1cbUI/AAAAAAAAAMY/Y3jdHA9I8fQ/s1600-h/pathText2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 262px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/S0NvwP1cbUI/AAAAAAAAAMY/Y3jdHA9I8fQ/s320/pathText2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423301250959306050" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;選択したパステキストを、パスに戻すスクリプトです。&lt;br /&gt;IllustratorCS3、MacOSX10.5.8環境にて動作確認。&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/412629.js?file=pathText2Path.jsx"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-599026594878058267?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/599026594878058267/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=599026594878058267' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/599026594878058267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/599026594878058267'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2010/01/illustrator.html' title='Illustratorのパステキストをパスに戻すスクリプト'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/S0Nvr4P44JI/AAAAAAAAAMQ/YWfxBbrlOZ8/s72-c/pathText1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3717306968406363640</id><published>2009-12-31T21:02:00.011+09:00</published><updated>2009-12-31T21:43:21.958+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>SpringSource Tool Suite (Eclipse) でGrailsの.propertiesファイルの日本語が化ける件。</title><content type='html'>正月休みにGrailsを再勉強しようと思い、せっかくなので &lt;a href="http://www.springsource.com/products/eclipse-downloads"&gt;SpringSource Tool Suite&lt;/a&gt;（以下STS）を使ってみようと思った。&lt;br /&gt;&lt;br /&gt;STSの使い方、Groovy,Grails環境の設定については、tyama氏が詳しい説明を書いてくれています。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/mottsnite/20091022/1256214960"&gt;SpringSource Tool Suite 2.2.0でGrailsをためしてみた。 - leftovers...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ダウンロードしてインストールして、設定して、create-appして、順調に行っていたのだが、i18nの messeages_ja.properties の中にある日本語が、全部化けているのに気がつく。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SzyTjPGXwEI/AAAAAAAAALw/Wa1oc5mY5lo/s1600-h/prop1.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 176px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SzyTjPGXwEI/AAAAAAAAALw/Wa1oc5mY5lo/s200/prop1.jpg" alt="" id="BLOGGER_PHOTO_ID_5421370756758590402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;日本語の設定場所を探したが見つからない。そういえばこれもEclipseなんだから、と思ってEcripseをキーワードに検索したら、なんだかいろいろこみいった事情があることが分かった。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Javaでは、Propertiesクラスは7バイトまでしか対応していない（Java6でマルチバイトに対応）。&lt;/li&gt;&lt;li&gt;.propertiesのエンコーディングはISO 8859-1が使用される。&lt;/li&gt;&lt;li&gt;Javaの場合、.propertiesで日本語を使用する場合は、native2asciiを使って、Unicodeコードに変換する。&lt;/li&gt;&lt;/ul&gt;そんなわけで、Eclipse標準のProperties File EditorはUTF8の日本語を開けないのが仕様みたい。&lt;br /&gt;&lt;br /&gt;Grailsの.propertiesファイルには日本語をそのまま書いていいはず（create-appして生成されるファイルには日本語そのまま書いてある）ので、これでは困る。&lt;br /&gt;Eclipseのいろんなサイトに書いてあった&lt;a href="http://propedit.sourceforge.jp/"&gt;プロパティエディタ&lt;/a&gt;を入れることにした。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.jp/projects/propedit/"&gt;http://sourceforge.jp/projects/propedit/&lt;/a&gt;&lt;br /&gt;から、jp.gr.java_conf.ussiy.app.propedit_4.8.2_for_eclipse3.0.zip を落として解凍する。&lt;br /&gt;できたフォルダの、featuresの中身をspringsource/sts-2.3.0.RELEASE/features/、&lt;br /&gt;pluginsの中身をspringsource/sts-2.3.0.RELEASE/plugins/の中に入れる。&lt;br /&gt;STSを再起動し、環境設定の&lt;br /&gt;General &gt; Editors &gt; File Associations から *.properties のデフォルトエディタにする。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SzyT-shJU8I/AAAAAAAAAL4/mfF3VCdMTmQ/s1600-h/pref1.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 176px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SzyT-shJU8I/AAAAAAAAAL4/mfF3VCdMTmQ/s200/pref1.jpg" alt="" id="BLOGGER_PHOTO_ID_5421370756758590402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;プロパティエディタ から、変換オプションで"全てユニコード変換しない"にチェック。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SzyUntRjmjI/AAAAAAAAAMA/oOnu9Tu2JcE/s1600-h/pref2.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 185px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SzyUntRjmjI/AAAAAAAAAMA/oOnu9Tu2JcE/s200/pref2.jpg" alt="" id="BLOGGER_PHOTO_ID_5421371461336275506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;これで日本語が表示される。OK。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SzyVPmyhwLI/AAAAAAAAAMI/oZdF5sCxXcs/s1600-h/prop2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 136px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SzyVPmyhwLI/AAAAAAAAAMI/oZdF5sCxXcs/s200/prop2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5421372146790285490" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3717306968406363640?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3717306968406363640/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3717306968406363640' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3717306968406363640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3717306968406363640'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/12/springsource-tool-suite-eclipse.html' title='SpringSource Tool Suite (Eclipse) でGrailsの.propertiesファイルの日本語が化ける件。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/SzyTjPGXwEI/AAAAAAAAALw/Wa1oc5mY5lo/s72-c/prop1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-418559764498359570</id><published>2009-12-21T02:14:00.004+09:00</published><updated>2009-12-21T02:32:45.043+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>XmlSlurperで属性をそのままテキストだけを入れ替える。</title><content type='html'>GroovyではXML処理に、XmlPerserとXmlSlurper（他いろいろ……）が用意されてあって、ただ読み込む場合はXmlSlurper、編集するなり書き換える場合はXmlPerserを使うように、って棲み分けがされている。&lt;br /&gt;だけどSlurperでもいちおう簡単な編集機能は用意されてるみたいで、&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/fits/20090709/1247153619"&gt;XmlSlurper を使った XML の加工 - なんとなくな Developer のメモ&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;要素の追加: appendNode メソッドを使用&lt;/li&gt;&lt;li&gt;属性の追加: @属性名 に値を設定&lt;/li&gt;&lt;li&gt;要素の置換: replaceNode メソッドを使用&lt;/li&gt;&lt;li&gt;要素の削除: replaceNode メソッドを使用（実装を空にする）&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;となるらしい。なのでこれを使ってXMLのテキストを入れ替えようと思った。&lt;br /&gt;&lt;pre class="prettyprint"&gt;import groovy.xml.StreamingMarkupBuilder&lt;br /&gt;&lt;br /&gt;String myXml='''&amp;lt;root&amp;gt;&lt;br /&gt;  &amp;lt;species order="甲虫目" family="コガネムシ科"&amp;gt;カブトムシ&amp;lt;/species&amp;gt;&lt;br /&gt;  &amp;lt;species order="甲虫目" family="カミキリムシ科"&amp;gt;シロスジカミキリ&amp;lt;/species&amp;gt;&lt;br /&gt;  &amp;lt;species order="チョウ目" family="アゲハチョウ科"&amp;gt;アゲハチョウ&amp;lt;/species&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;'''&lt;br /&gt;&lt;br /&gt;def doc = new XmlSlurper().parseText(myXml)&lt;br /&gt;&lt;br /&gt;doc.species[0].replaceNode{species('クロカナブン')}&lt;br /&gt;&lt;br /&gt;//テキストに戻す&lt;br /&gt;StreamingMarkupBuilder builder = new StreamingMarkupBuilder()&lt;br /&gt;builder.encoding = "UTF8"&lt;br /&gt;def newXml = builder.bind{mkp.yield doc};&lt;br /&gt;&lt;br /&gt;println(newXml)&lt;/pre&gt;こうすると、当然「カブトムシ」の要素ごと書き変わってしまうので、クロカナブンの目と科がわからなくなってしまう。少し（かなり）考えて、属性を保存して、新しく入れ替える要素にコピーできるんじゃないかな？&lt;br /&gt;&lt;pre class="prettyprint"&gt;import groovy.xml.StreamingMarkupBuilder&lt;br /&gt;&lt;br /&gt;String myXml='''&amp;lt;root&amp;gt;&lt;br /&gt;  &amp;lt;species order="甲虫目" family="コガネムシ科"&amp;gt;カブトムシ&amp;lt;/species&amp;gt;&lt;br /&gt;  &amp;lt;species order="甲虫目" family="カミキリムシ科"&amp;gt;シロスジカミキリ&amp;lt;/species&amp;gt;&lt;br /&gt;  &amp;lt;species order="チョウ目" family="アゲハチョウ科"&amp;gt;アゲハチョウ&amp;lt;/species&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;'''&lt;br /&gt;&lt;br /&gt;def doc = new XmlSlurper().parseText(myXml)&lt;br /&gt;//assert doc.species[0] == 'カブトムシ'&lt;br /&gt;&lt;br /&gt;Map attr = doc.species[0].attributes();&lt;br /&gt;//assert attr == [family:'コガネムシ科', order:'甲虫目']&lt;br /&gt;&lt;br /&gt;//ノードを置き換える時に属性をそのままコピー&lt;br /&gt;doc.species[0].replaceNode{species('クロカナブン',attr)}&lt;br /&gt;&lt;br /&gt;//テキストに戻す&lt;br /&gt;StreamingMarkupBuilder builder = new StreamingMarkupBuilder()&lt;br /&gt;builder.encoding = "UTF8"&lt;br /&gt;def newXml = builder.bind{mkp.yield doc};&lt;br /&gt;&lt;br /&gt;println(newXml)&lt;/pre&gt;これでOK。属性のマップをそのまま後ろに入れるだけで属性になる。へー。&lt;br /&gt;結果はこう。&lt;br /&gt;&lt;blockquote&gt;&amp;lt;root&amp;gt;&amp;lt;species family='コガネムシ科' order='甲虫目'&amp;gt;クロカナブン&amp;lt;/species&amp;gt;&amp;lt;species family='カミキリムシ科' order='甲虫目'&amp;gt;シロスジカミキリ&amp;lt;/species&amp;gt;&amp;lt;species family='アゲハチョウ科' order='チョウ目'&amp;gt;アゲハチョウ&amp;lt;/species&amp;gt;&amp;lt;/root&amp;gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-418559764498359570?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/418559764498359570/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=418559764498359570' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/418559764498359570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/418559764498359570'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/12/xmlslurper.html' title='XmlSlurperで属性をそのままテキストだけを入れ替える。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4349330837812019005</id><published>2009-12-21T01:34:00.003+09:00</published><updated>2009-12-21T01:51:29.799+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>groovyでWikiTextを使ってみる</title><content type='html'>仕事が煮詰まって頭モウロウとしながらひたすら検索してると、ちょっと気になるブログ記事を見つけた。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/ikikko/20090807/1249667069"&gt;WikiTextことはじめ - Talking Nonstop&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;WikiTextとは、Javaで書かれたWikiパーサです。&lt;/blockquote&gt;&lt;br /&gt;なにこれ面白そう。Groovyから叩けるかな？そう思ってやってみた。&lt;br /&gt;まず、&lt;a href="http://www.eclipse.org/mylyn/downloads/"&gt;Mylynのページ&lt;/a&gt;からWikiTextスタンドアロン版（mylyn-wikitext-standalone-latest.zip）を落として解凍、中に入ってる.jarを全て~/.groovy/lib/につっこむ。&lt;br /&gt;&lt;pre class="prettyprint"&gt;import org.eclipse.mylyn.wikitext.core.parser.MarkupParser&lt;br /&gt;import org.eclipse.mylyn.wikitext.confluence.core.ConfluenceLanguage&lt;br /&gt;import org.eclipse.mylyn.wikitext.core.parser.builder.HtmlDocumentBuilder&lt;br /&gt;&lt;br /&gt;String markupContent='''h1. 見出し1&lt;br /&gt;ここは見出し1のテキスト部分&lt;br /&gt;&lt;br /&gt;h2. 見出し2&lt;br /&gt;ここは見出し2のテキスト部分&lt;br /&gt;&lt;br /&gt;h3. 見出し3&lt;br /&gt;ここは見出し3のテキスト部分&lt;br /&gt;* 箇条書き1行目&lt;br /&gt;* 箇条書き2行目&lt;br /&gt;* 箇条書き3行目&lt;br /&gt;** 3行目の1&lt;br /&gt;** 3行目の2&lt;br /&gt;&lt;br /&gt;# 番号つき1行目&lt;br /&gt;# 番号つき2行目&lt;br /&gt;# 番号つき3行目'''&lt;br /&gt;&lt;br /&gt;StringWriter writer = new StringWriter();&lt;br /&gt;HtmlDocumentBuilder builder = new HtmlDocumentBuilder(writer);&lt;br /&gt;&lt;br /&gt;MarkupParser parser = new MarkupParser(new ConfluenceLanguage());&lt;br /&gt;parser.setBuilder(builder);&lt;br /&gt;parser.parse(markupContent);&lt;br /&gt;&lt;br /&gt;String htmlContent = writer.toString();&lt;br /&gt;println(htmlContent)&lt;/pre&gt;それの結果。&lt;br /&gt;&lt;blockquote&gt;&amp;lt;?xml version='1.0' encoding='utf-8' ?&amp;gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1 id="a1"&amp;gt;見出し1&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;ここは見出し1のテキスト部分&amp;lt;/p&amp;gt;&amp;lt;h2 id="a2"&amp;gt;見出し2&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;ここは見出し2のテキスト部分&amp;lt;/p&amp;gt;&amp;lt;h3 id="a3"&amp;gt;見出し3&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;ここは見出し3のテキスト部分&amp;lt;/p&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;箇条書き1行目&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;箇条書き2行目&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;箇条書き3行目&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;3行目の1&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;3行目の2&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;番号つき1行目&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;番号つき2行目&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;番号つき3行目&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;楽しい！いつか何か作ろう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4349330837812019005?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4349330837812019005/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4349330837812019005' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4349330837812019005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4349330837812019005'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/12/groovywikitext.html' title='groovyでWikiTextを使ってみる'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7853086084916237309</id><published>2009-12-14T04:40:00.009+09:00</published><updated>2010-05-25T10:14:39.557+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignでガイド線に合わせて表を作成する。</title><content type='html'>何がやりたかったのかというと、これです。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SyVD6lBG6SI/AAAAAAAAALg/ZNNFJEGCYwY/s1600-h/youshiki1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 184px; height: 200px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SyVD6lBG6SI/AAAAAAAAALg/ZNNFJEGCYwY/s200/youshiki1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5414808800631122210" /&gt;&lt;/a&gt;様式のトレース。セルが複雑になってくると、意外と難しいんですよこれ。&lt;br /&gt;これの線に合わせてガイドを引いて、表を作成した後余分な線を抜こうという計画。&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/412639.js?file=DrawTableFitToGuide.jsx"&gt;&lt;/script&gt;&lt;br /&gt;ガイド線を引いた後、このスクリプトを実行すると&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SyVFQtmxgCI/AAAAAAAAALo/dTfsfmXcv1Y/s1600-h/youshiki2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 184px; height: 200px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SyVFQtmxgCI/AAAAAAAAALo/dTfsfmXcv1Y/s200/youshiki2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5414810280405336098" /&gt;&lt;/a&gt;こんな感じに。（見やすくなるように、バックを薄くして、線を太くしてあります。）&lt;br /&gt;InDesignCS3,MacOSX10.5.8上で動作確認。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7853086084916237309?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7853086084916237309/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7853086084916237309' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7853086084916237309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7853086084916237309'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/12/indesign.html' title='InDesignでガイド線に合わせて表を作成する。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NsZ3kbgYLEw/SyVD6lBG6SI/AAAAAAAAALg/ZNNFJEGCYwY/s72-c/youshiki1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5214279026295442164</id><published>2009-12-07T23:08:00.011+09:00</published><updated>2009-12-08T00:10:45.473+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>なるほどreturnすりゃ止まるんだ</title><content type='html'>たぶん、分かってる人から見れば今更なエントリ。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var fol=Folder.selectDialog("フォルダを選択");&lt;br /&gt;if(!fol){&lt;br /&gt;  alert("処理を中止しました。");&lt;br /&gt;}else{&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;        長&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        ｜&lt;br /&gt;        い&lt;br /&gt;        処&lt;br /&gt;        理&lt;br /&gt;               */&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;みたいなコードを書いた事ないだろうか。&lt;br /&gt;前に先輩から「こういう長いカッコ使うのやめなよ」と言われていたのだが、 そのときは実際どうすればいいのかは教わらなかったし、いままでどうするかも思いつかなかった。&lt;br /&gt;&lt;br /&gt;ところで、人の書いてるスクリプトを読んでいるとたまに&lt;br /&gt;&lt;pre class="prettyprint"&gt;(function(){&lt;br /&gt;  //処理&lt;br /&gt;})();&lt;/pre&gt;みたいな感じに、全体をfunctionでつつみこんでそのまま実行しているスクリプトを見る。&lt;br /&gt;この書き方については「&lt;a href="http://www.amazon.co.jp/gp/product/4774136875?ie=UTF8&amp;tag=kanemu1117nc-22&amp;linkCode=as2&amp;camp=247&amp;creative=1211&amp;creativeASIN=4774136875"&gt;組版時間を半減する! InDesign自動処理実例集&lt;/a&gt;&lt;img src="http://www.assoc-amazon.jp/e/ir?t=kanemu1117nc-22&amp;l=as2&amp;o=9&amp;a=4774136875" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;」の99ページにふれてあって&lt;br /&gt;&lt;blockquote&gt;　これは、各プログラム中で使用されている変数名などで共通のものがあるために、同時にサンプルプログラムを使用する際に干渉しないようにするためのものです。&lt;/blockquote&gt;&lt;br /&gt;ということで、functionの中で変数をvar宣言してあればその宣言はその中の範囲にしか適用されない。そういうもんなんだろなと思ってた。&lt;br /&gt;&lt;br /&gt;ところがAdobeのサンプルコードを読んでいて、別の効果があることに気づいた。&lt;br /&gt;&lt;pre class="prettyprint"&gt;(function(){&lt;br /&gt;　var fol=Folder.selectDialog("フォルダを選択");&lt;br /&gt;  if(!fol){&lt;br /&gt;    alert("処理を中止しました。");&lt;br /&gt;    return;&lt;br /&gt;  }&lt;br /&gt;  //処理&lt;br /&gt;})();&lt;/pre&gt;returnすればScriptを抜けられる！これで長い{}を書いて、カッコの閉じ忘れを気にしなくてすむ。&lt;br /&gt;なるほどーー、そうかー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5214279026295442164?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5214279026295442164/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5214279026295442164' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5214279026295442164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5214279026295442164'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/12/return.html' title='なるほどreturnすりゃ止まるんだ'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8277318930859385528</id><published>2009-11-13T22:59:00.009+09:00</published><updated>2009-12-08T00:28:08.369+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignのスクリプトでパスファインダを使う</title><content type='html'>ちょっと調べたことのメモ。&lt;br /&gt;InDesignにも、Illustratorと同じようにパスファインダがある。&lt;br /&gt;&lt;br /&gt;使用するには、オブジェクトのひとつを選択してメソッドを実行、引数に結合したいオブジェクトを配列で渡す。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var sels=app.activeDocument.selection;&lt;br /&gt;var sel=sels.shift();&lt;br /&gt;&lt;br /&gt;sel.addPath(sels);&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Sv1pL2j-2AI/AAAAAAAAAKA/8t6-sU7V-HI/s1600-h/addPath.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 161px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Sv1pL2j-2AI/AAAAAAAAAKA/8t6-sU7V-HI/s200/addPath.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5403590780260374530" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Sv1pRZvcpFI/AAAAAAAAAKI/DKMHbL1ehQQ/s1600-h/addPath2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 161px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Sv1pRZvcpFI/AAAAAAAAAKI/DKMHbL1ehQQ/s200/addPath2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5403590875603051602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;種類は次の通り&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PageItem.addPath (with:Array of PageItem )&lt;br /&gt;結合&lt;/li&gt;&lt;li&gt;PageItem.excludeOverlapPath (with:Array of PageItem )&lt;br /&gt;中マド&lt;/li&gt;&lt;li&gt;PageItem.intersectPath (with:Array of PageItem )&lt;br /&gt;交差&lt;/li&gt;&lt;li&gt;PageItem.minusBack (with:Array of PageItem )&lt;br /&gt;背面オブジェクトで型抜き&lt;/li&gt;&lt;li&gt;PageItem.subtractPath (with:Array of PageItem )&lt;br /&gt;前面オブジェクトで型抜き&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8277318930859385528?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8277318930859385528/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8277318930859385528' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8277318930859385528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8277318930859385528'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/11/indesign.html' title='InDesignのスクリプトでパスファインダを使う'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/Sv1pL2j-2AI/AAAAAAAAAKA/8t6-sU7V-HI/s72-c/addPath.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6452644158800612330</id><published>2009-11-11T02:58:00.009+09:00</published><updated>2009-12-08T00:28:29.118+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>if 文と switch 文の条件部分を関数で分ける。</title><content type='html'>Illustrator用のスクリプトを書いていて、if文の条件がやたらに長くなってしまい、どうしようかと思うことがあった。&lt;br /&gt;例として、「塗りがC10、またはM10、またはY10のときは塗りを白に、塗りがC100,M100のときは塗りを黒にする」という変換を書いていたとする。&lt;br /&gt;だいたいこんな感じになった。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;var objs=app.activeDocument.selection;&lt;br /&gt;&lt;br /&gt;for(var i=0;i&amp;lt;objs.length;i++){&lt;br /&gt;  var color=objs[i].fillColor;&lt;br /&gt;  &lt;br /&gt;  if((Math.round(color.cyan)==10 &amp;&amp; color.magenta==0 &lt;br /&gt;      &amp;&amp; color.yellow==0 &amp;&amp; color.black==0)&lt;br /&gt;    ||(color.cyan==0 &amp;&amp; Math.round(color.magenta)==10 &lt;br /&gt;      &amp;&amp; color.yellow==0 &amp;&amp; color.black==0)&lt;br /&gt;    ||(color.cyan==0 &amp;&amp; color.magenta==0 &lt;br /&gt;      &amp;&amp; Math.round(color.yellow)==10 &amp;&amp; color.black==0)){&lt;br /&gt;        &lt;br /&gt;    color.cyan=0;&lt;br /&gt;    color.magenta=0;&lt;br /&gt;    color.yellow=0;&lt;br /&gt;    color.black=0;&lt;br /&gt;    &lt;br /&gt;  }else if((color.cyan==100 &amp;&amp; color.magenta==0 &lt;br /&gt;      &amp;&amp; color.yellow==0 &amp;&amp; color.black==0)&lt;br /&gt;    ||(color.cyan==0 &amp;&amp; color.magenta==100 &lt;br /&gt;      &amp;&amp; color.yellow==0 &amp;&amp; color.black==0)){&lt;br /&gt;        &lt;br /&gt;    color.cyan=0;&lt;br /&gt;    color.magenta=0;&lt;br /&gt;    color.yellow=0;&lt;br /&gt;    color.black=100;&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;};&lt;/pre&gt;実際はもうちょっと複雑で、書きながらだからコードも汚い。見にくくてしょうがない。&lt;br /&gt;ふと、「if文の答えは結局trueかfalseなんだから、その部分を分けてやればいいのでは？」と思い立ち、書いてみた。&lt;br /&gt;下のような感じ。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;// ----------if条件の定義----------&lt;br /&gt;var check1=function(color){&lt;br /&gt;  var c=Math.round(color.cyan);&lt;br /&gt;  var m=Math.round(color.magenta);&lt;br /&gt;  var y=Math.round(color.yellow);&lt;br /&gt;  var k=Math.round(color.black);&lt;br /&gt;  var flag=false;&lt;br /&gt;  if(c==10 &amp;&amp; m==0 &amp;&amp; y==0 &amp;&amp; k==0){&lt;br /&gt;    flag=true;&lt;br /&gt;  }else if(c==0 &amp;&amp; m==10 &amp;&amp; y==0 &amp;&amp; k==0){&lt;br /&gt;    flag=true;&lt;br /&gt;  }else if(c==0 &amp;&amp; m==0 &amp;&amp; y==10 &amp;&amp; k==0){&lt;br /&gt;    flag=true;&lt;br /&gt;  };&lt;br /&gt;  return flag;&lt;br /&gt;};&lt;br /&gt;var check2=function(color){&lt;br /&gt;  var c=Math.round(color.cyan);&lt;br /&gt;  var m=Math.round(color.magenta);&lt;br /&gt;  var y=Math.round(color.yellow);&lt;br /&gt;  var k=Math.round(color.black);&lt;br /&gt;  var flag=false;&lt;br /&gt;  if(c==100 &amp;&amp; m==0 &amp;&amp; y==0 &amp;&amp; k==0){&lt;br /&gt;    flag=true;&lt;br /&gt;  }else if(c==0 &amp;&amp; m==100 &amp;&amp; y==0 &amp;&amp; k==0){&lt;br /&gt;    flag=true;&lt;br /&gt;  };&lt;br /&gt;  return flag;&lt;br /&gt;};&lt;br /&gt;// --------------------&lt;br /&gt;var objs=app.activeDocument.selection;&lt;br /&gt;for(var i=0;i&amp;lt;objs.length;i++){&lt;br /&gt;  var color=objs[i].fillColor;&lt;br /&gt;  &lt;br /&gt;  if(check1(color)){&lt;br /&gt;    color.cyan=0;&lt;br /&gt;    color.magenta=0;&lt;br /&gt;    color.yellow=0;&lt;br /&gt;    color.black=0;&lt;br /&gt;  }else if(check2(color)){&lt;br /&gt;    color.cyan=0;&lt;br /&gt;    color.magenta=0;&lt;br /&gt;    color.yellow=0;&lt;br /&gt;    color.black=100;&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;};&lt;/pre&gt;全体としては長くなったけれど、コードの役割がきちんと分割できて、ちょっと読みやすくなったと思う。&lt;br /&gt;そこで「if文でできるならswitch-caseでもできるんじゃ？」と思って試す。&lt;br /&gt;まずcaseの部分にfunctionを書き込んでみたが、上手くいかない。&lt;br /&gt;switch-caseの場合はswitch(〜)の部分とcase 〜:の部分が同じかどうかをチェックして、trueなら処理をするという形だから。&lt;br /&gt;ネットを探していると、phpの人がswitchに関数を使っているのを見つけた。&lt;br /&gt;&lt;a href="http://blog.zuzara.com/2006/06/14/85/"&gt;zuzara.com » PHPのswitchのcase文には関数が使える。&lt;/a&gt;&lt;br /&gt;&lt;a href="http://memo.xight.org/2006-06-15-6"&gt;memo.xight.org - switch ,case文を読みやすくする&lt;/a&gt;&lt;br /&gt;それで書いたのが以下のコード。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;&lt;br /&gt;//----- check1、check2 は同上 -----&lt;br /&gt;&lt;br /&gt;var objs=app.activeDocument.selection;&lt;br /&gt;for(var i=0;i&amp;lt;objs.length;i++){&lt;br /&gt;  var color=objs[i].fillColor;&lt;br /&gt;  &lt;br /&gt;  switch(true){ //trueで固定してしまう&lt;br /&gt;    case check1(color):&lt;br /&gt;      color.cyan=0;&lt;br /&gt;      color.magenta=0;&lt;br /&gt;      color.yellow=0;&lt;br /&gt;      color.black=0;&lt;br /&gt;      break;&lt;br /&gt;    case check2(color):&lt;br /&gt;      color.cyan=0;&lt;br /&gt;      color.magenta=0;&lt;br /&gt;      color.yellow=0;&lt;br /&gt;      color.black=100;&lt;br /&gt;      break;&lt;br /&gt;    default:&lt;br /&gt;      break;&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;};&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6452644158800612330?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6452644158800612330/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6452644158800612330' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6452644158800612330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6452644158800612330'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/11/if-switch.html' title='if 文と switch 文の条件部分を関数で分ける。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3518603723876076173</id><published>2009-11-09T08:31:00.007+09:00</published><updated>2010-05-10T04:35:56.082+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><title type='text'>InDesignを使ってPDFをページごとに分割</title><content type='html'>PDFをページごとに分割するのに、InDesignを使ってみる。&lt;br /&gt;こういうことにInDesignを使う事はまず無い。普通はAcrobatや、ほかの便利なフリーウェアとか使うよね？&lt;br /&gt;それでもInDesignでやりたいと思う事もあります。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "InDesign"&lt;br /&gt;&lt;br /&gt;var pdfFile=File.openDialog ("PDFを選択して下さい", pdfCheck, false);&lt;br /&gt;if(pdfFile){&lt;br /&gt; //pdfを分割&lt;br /&gt; var pageFileAry=burstPDF(pdfFile);&lt;br /&gt; alert(pageFileAry.length+"ページにpdfを分割しました。");&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;function burstPDF(pdfFile){&lt;br /&gt; //$.writeln(pdfFile);&lt;br /&gt; //PDF読み込み設定：メディアサイズ&lt;br /&gt; app.pdfPlacePreferences.pdfCrop=PDFCrop.CROP_MEDIA;&lt;br /&gt; var actDoc=app.documents.add();&lt;br /&gt; var imgObj= actDoc.textFrames.add();&lt;br /&gt; //1ページ目を取り込む&lt;br /&gt; var i=1&lt;br /&gt; app.pdfPlacePreferences.pageNumber = i;&lt;br /&gt; var ppdf=imgObj.place(pdfFile);&lt;br /&gt; //$.writeln(ppdf);&lt;br /&gt; //フィット&lt;br /&gt; imgObj.fit(FitOptions.FRAME_TO_CONTENT);&lt;br /&gt; //ページサイズを合わせる&lt;br /&gt; var bounds=imgObj.geometricBounds;&lt;br /&gt; actDoc.documentPreferences.pageWidth=bounds[3]-bounds[1];&lt;br /&gt;  actDoc.documentPreferences.pageHeight=bounds[2]-bounds[0];&lt;br /&gt; imgObj.move([0,0]);&lt;br /&gt; //pdf書き出し&lt;br /&gt; var ary=[];&lt;br /&gt; do{&lt;br /&gt;  var flag=true;&lt;br /&gt;  try{&lt;br /&gt;  var burstPdfPath=cutEx(pdfFile.fsName)[0]+"_"+i+".pdf";&lt;br /&gt;  var burstPdf=new File(burstPdfPath);&lt;br /&gt;  //$.writeln(burstPdfPath);&lt;br /&gt;  actDoc.exportFile(ExportFormat.pdfType, burstPdf, false, "PDFX1a 2001 JPN");&lt;br /&gt;  ary.push(burstPdfPath);&lt;br /&gt;  i++;&lt;br /&gt;  app.pdfPlacePreferences.pageNumber = i;&lt;br /&gt;  imgObj.place(pdfFile);&lt;br /&gt;  if(app.pdfPlacePreferences.pageNumber!=i){flag=false};&lt;br /&gt;  }catch(e){&lt;br /&gt;   //$.writeln(e);&lt;br /&gt;   flag=false&lt;br /&gt;  };&lt;br /&gt; }while(flag);&lt;br /&gt; actDoc.close(SaveOptions.NO);&lt;br /&gt; return ary;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;function pdfCheck(file){&lt;br /&gt; //PDFを選択するフィルタ&lt;br /&gt; var flag=false;&lt;br /&gt;  if(file.name.match(/\.pdf$/) || file instanceof Folder){flag=true};&lt;br /&gt;  return flag;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;function cutEx(path){&lt;br /&gt;  //拡張子を切る&lt;br /&gt; var pathTxt=path, exText="";&lt;br /&gt; var dirCutNo=( (/\//.test(path))? path.lastIndexOf("/") : 0 );&lt;br /&gt; if(/\./.test(path.slice(dirCutNo))){&lt;br /&gt;  pathTxt=path.slice(0, path.lastIndexOf("."));&lt;br /&gt;  exText=path.slice(path.lastIndexOf("."));&lt;br /&gt; };&lt;br /&gt;  return [pathTxt,exText];&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3518603723876076173?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3518603723876076173/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3518603723876076173' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3518603723876076173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3518603723876076173'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/11/indesignpdf.html' title='InDesignを使ってPDFをページごとに分割'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3112920205723772367</id><published>2009-10-20T22:38:00.010+09:00</published><updated>2010-05-10T04:39:35.373+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>JavaScript と、Perl と、Groovy の split</title><content type='html'>ある文字でデータを分けて配列にするsplit。例えば JavaScirpt で&lt;br /&gt;&lt;pre class="prettyprint"&gt;var text = "AAA&amp;lt;tag&amp;gt;BBB&amp;lt;/tag&amp;gt;CCC";&lt;br /&gt;var ary = text.split(/&amp;lt;.+?&amp;gt;/);&lt;br /&gt;$.writeln(ary.toSource());&lt;br /&gt;//ESTK の場合。 fireBug ならば console.log(ary);&lt;/pre&gt;で&lt;br /&gt;&lt;pre class="prettyprint"&gt;["AAA", "BBB", "CCC"]&lt;/pre&gt;と表示される。&lt;br /&gt;それが、splitの中で使う正規表現をキャプチャして&lt;br /&gt;&lt;pre class="prettyprint"&gt;var ary = text.split(/(&amp;lt;.+?&amp;gt;)/);&lt;/pre&gt;とすると結果が&lt;br /&gt;&lt;pre class="prettyprint"&gt;["AAA", "&amp;lt;tag&amp;gt;", "BBB", "&amp;lt;/tag&amp;gt;", "CCC"]&lt;/pre&gt;と返る！このことを自分は&lt;span style="font-weight: bold;"&gt;今日まで知らなかった。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;perlでも同じように返る。&lt;br /&gt;&lt;pre class="prettyprint"&gt;my $text = "AAA&amp;lt;tag&amp;gt;BBB&amp;lt;/tag&amp;gt;CCC";&lt;br /&gt;my @ary = split(/(&amp;lt;.+?&amp;gt;)/,$text);&lt;br /&gt;foreach $token(@ary){&lt;br /&gt;print $token . "\n";&lt;br /&gt;}&lt;/pre&gt;&lt;pre class="prettyprint"&gt;AAA&lt;br /&gt;&amp;lt;tag&amp;gt;&lt;br /&gt;BBB&lt;br /&gt;&amp;lt;/tag&amp;gt;&lt;br /&gt;CCC&lt;/pre&gt;&lt;br /&gt;Rubyでも同じらしい。じゃあGroovyだと思い、&lt;br /&gt;&lt;pre class="prettyprint"&gt;def text = "AAA&amp;lt;tag&amp;gt;BBB&amp;lt;/tag&amp;gt;CCC"&lt;br /&gt;def ary = text.split(/(&amp;lt;.+?&amp;gt;)/)&lt;br /&gt;println ary&lt;/pre&gt;とやってみたが、&lt;br /&gt;&lt;pre class="prettyprint"&gt;[AAA, BBB, CCC]&lt;/pre&gt;としか返らない。あれ？&lt;br /&gt;&lt;br /&gt;Groovy の split は Java の split で、そういう風には使わないっぽい。&lt;br /&gt;じゃあ tokenize では？&lt;br /&gt;&lt;pre class="prettyprint"&gt;def text = "AAA&amp;lt;tag&amp;gt;BBB&amp;lt;/tag&amp;gt;CCC"&lt;br /&gt;def ary = text.tokenize(/(&amp;lt;.+?&amp;gt;)/)&lt;br /&gt;println ary&lt;/pre&gt;&lt;pre class="prettyprint"&gt;[AAA, tag, BBB, /tag, CCC]&lt;/pre&gt;……。&lt;br /&gt;タグの&amp;lt;&amp;gt;がなぜか外れてしまう。むー、よくわからん……。&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;10月21日追記。&lt;br /&gt;Groovy の ソースの tokenize を読んでみた。DefaultGroovyMethods.java の 6627 行目あたりに&lt;br /&gt;&lt;pre class="prettyprint"&gt;public static List tokenize(String self, String token) {&lt;br /&gt;return InvokerHelper.asList(new StringTokenizer(self, token));&lt;br /&gt;}&lt;/pre&gt;つまり、渡された引数が String でも GString でも、そのまま StringTokenizer に渡して List で返しているわけか。（ただの区切り文字の集まりとして読んでいるから、&amp;lt; と &amp;gt; がひっかかって分割されて、&amp;lt; &amp;gt;  自体は消えている）&lt;br /&gt;GString でキャプチャされてた時にデリミタを返すのは難しいにしても、だったら tokenize(String, Boolean) でトークンを返すのは欲しいなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3112920205723772367?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3112920205723772367/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3112920205723772367' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3112920205723772367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3112920205723772367'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/10/javascript-perl-groovy-split.html' title='JavaScript と、Perl と、Groovy の split'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6261480311861757890</id><published>2009-10-17T15:31:00.008+09:00</published><updated>2010-05-10T04:45:31.908+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustratorのリンク画像を相対パスで使うスクリプト</title><content type='html'>Illstratorのリンク画像へのパスは絶対パスで保存されています（使っている人でも知らない人が多い！）。&lt;br /&gt;Illustratorで、貼り込み画像をリンクとして使いたい時、よく下の階層にフォルダを作ってまとめてあるのを見ますが、それだと上のフォルダ名が変わったり、ドライブを移動したりするとリンク切れするんですよね。&lt;br /&gt;それならまだいいんですが、フォルダごとコピーして、コピー側を開くと元のフォルダへのリンクが残っていて、画像を修正したと思ってても元に戻っちゃってたりとか……。&lt;br /&gt;&lt;br /&gt;それらを解消できないかと思ってちょっと書いてみました。相対パスを画像に保存しておくスクリプト。&lt;br /&gt;作業したあと、必ずこのスクリプトをかけておけば有効かもしれない。&lt;br /&gt;&lt;br /&gt;【相対パスを保存_再リンク.jsx】&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;if(app.documents.length&amp;gt;0){&lt;br /&gt;  var actDoc=app.activeDocument;&lt;br /&gt;  if(actDoc.path==""){&lt;br /&gt;   //未保存ならばpathがない&lt;br /&gt;   alert("ファイルを保存して下さい");&lt;br /&gt;  }else{&lt;br /&gt;   var reLinkLog="";&lt;br /&gt;   var saveLinkLog="";&lt;br /&gt;   //ドキュメントの親フォルダのパス&lt;br /&gt;   var docPath=File.decode(actDoc.path);&lt;br /&gt;   //アイテムをループ&lt;br /&gt;   for(var i=0;i&amp;lt;actDoc.pageItems.length;i++){&lt;br /&gt;     //もしリンク画像なら&lt;br /&gt;     if(actDoc.pageItems[i].constructor.name=="PlacedItem"){&lt;br /&gt;       var item=actDoc.pageItems[i];&lt;br /&gt;       //メイン処理を実行&lt;br /&gt;       var log=main(item,docPath);&lt;br /&gt;       if(log[0]){reLinkLog+=("\n"+log[0])};&lt;br /&gt;       if(log[1]){saveLinkLog+=("\n"+log[1])};&lt;br /&gt;     };&lt;br /&gt;   };&lt;br /&gt;   //リンク修正アラート&lt;br /&gt;   if(reLinkLog!=""){&lt;br /&gt;     app.redraw();&lt;br /&gt;     alert("以下のリンクを修正しました。"+reLinkLog);&lt;br /&gt;   };&lt;br /&gt;   //リンク保存アラート&lt;br /&gt;   if(saveLinkLog!=""){&lt;br /&gt;     alert("以下の相対パスを保存しました。"+saveLinkLog);&lt;br /&gt;   };&lt;br /&gt;  };&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;function main(item,docPath){&lt;br /&gt;  //メイン処理&lt;br /&gt;  var ary=[undefined,undefined];&lt;br /&gt;  //「name」の値があれば&lt;br /&gt;  if(item.name!=""){&lt;br /&gt;   var beforeFilePath=docPath+"/"+File.decode(item.name);&lt;br /&gt;   var beforeFile=new File(beforeFilePath);&lt;br /&gt;   if(beforeFile.exists){&lt;br /&gt;     var flag=false;&lt;br /&gt;     try{&lt;br /&gt;       //ファイルが相対パスの場所と違っていたら&lt;br /&gt;       var nowFilePath=File.decode(item.file);&lt;br /&gt;       if(nowFilePath!=beforeFilePath){&lt;br /&gt;         flag=true;&lt;br /&gt;       }else{};&lt;br /&gt;     }catch(e){&lt;br /&gt;       //ファイルがなければ&lt;br /&gt;       flag=true;&lt;br /&gt;     };&lt;br /&gt;     //flagがtrueならばリンク貼り直し&lt;br /&gt;     if(flag){&lt;br /&gt;       item.file=beforeFile;&lt;br /&gt;       ary[0]=beforeFilePath;&lt;br /&gt;     };&lt;br /&gt;   };&lt;br /&gt;  };&lt;br /&gt;  //nameにファイルの相対パスを入れる&lt;br /&gt;  try{&lt;br /&gt;   var relativePath=item.file.getRelativeURI(docPath);&lt;br /&gt;   item.name=relativePath;&lt;br /&gt;   ary[1]=File.decode(relativePath);&lt;br /&gt;  }catch(e){};&lt;br /&gt;  return ary;&lt;br /&gt;};&lt;/pre&gt;IllustratorのPlacedItemオブジェクトの、name属性に相対パスをそのまま保存しています。&lt;br /&gt;なので他のnameを使うスクリプトと併用はできません。&lt;br /&gt;MacOSX 10.5.8、 Illustrator CS3にて動作確認。&lt;br /&gt;&lt;br /&gt;【使い方】&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Illustratorを編集して、最後に保存する前に、あらかじめこのスクリプトをかけておきます。&lt;/li&gt;&lt;li&gt;ファイルを開いた時に『「〜」というリンクファイルが見つかりません』というダイアログが出た場合は、全て「無視」を選択します。&lt;/li&gt;&lt;li&gt;開いた後再びスクリプトを実行します。&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6261480311861757890?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6261480311861757890/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6261480311861757890' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6261480311861757890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6261480311861757890'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/10/illustrator.html' title='Illustratorのリンク画像を相対パスで使うスクリプト'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2782957020156563978</id><published>2009-10-15T20:57:00.003+09:00</published><updated>2009-10-15T21:02:56.235+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>XmlSlurperでどの階層にあるかわからない要素を取り出す。</title><content type='html'>ようやくわかったのでメモ。&lt;br /&gt;&lt;pre class="prettyprint"&gt;def myXml = '''&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;root&amp;gt;&lt;br /&gt;  &amp;lt;a&amp;gt;&lt;br /&gt;    &amp;lt;target&amp;gt;ここだよ！&amp;lt;/target&amp;gt;&lt;br /&gt;  &amp;lt;/a&amp;gt;&lt;br /&gt;  &amp;lt;a&amp;gt;&lt;br /&gt;    &amp;lt;b&amp;gt;&lt;br /&gt;      &amp;lt;target&amp;gt;ここよ！&amp;lt;/target&amp;gt;&lt;br /&gt;    &amp;lt;/b&amp;gt;&lt;br /&gt;  &amp;lt;/a&amp;gt;&lt;br /&gt;  &amp;lt;a&amp;gt;&lt;br /&gt;    &amp;lt;b&amp;gt;&lt;br /&gt;      &amp;lt;c&amp;gt;&lt;br /&gt;       &amp;lt;target&amp;gt;ここです！&amp;lt;/target&amp;gt;&lt;br /&gt;      &amp;lt;/c&amp;gt;&lt;br /&gt;    &amp;lt;/b&amp;gt;&lt;br /&gt;  &amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;'''&lt;br /&gt;&lt;br /&gt;def node = new XmlSlurper().parseText(myXml)&lt;br /&gt;node.'**'.grep{it.name() == 'target'}.each{&lt;br /&gt;  println it&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2782957020156563978?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2782957020156563978/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2782957020156563978' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2782957020156563978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2782957020156563978'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/10/xmlslurper_15.html' title='XmlSlurperでどの階層にあるかわからない要素を取り出す。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4356059994568157551</id><published>2009-10-12T01:38:00.007+09:00</published><updated>2010-05-10T04:48:03.880+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>JavaScriptの{}の使い方のこと。</title><content type='html'>この間スクリプトでひさしぶりにswitch文を書いていたとき、そういえばswitch文てあんまり使わないなと思った。&lt;br /&gt;それは、自分がいまの会社でスクリプトを書き始めたすごく最初の頃に、「ある変数が持つ数値に対して、ある文字を返す」処理、たとえばv=1ならばж、2ならばз、3ならばи…といったふうな処理を書こうとしていて、たしかこんな感じだったと思う。&lt;br /&gt;&lt;pre class="prettyprint"&gt;function test(v){&lt;br /&gt;  var cr;&lt;br /&gt;  if(v){&lt;br /&gt;    switch(v){&lt;br /&gt;      case 1:cr="ж";break;&lt;br /&gt;      case 2:cr="з";break;&lt;br /&gt;      case 3:cr="и";break;&lt;br /&gt;      case 4:cr="й";break;&lt;br /&gt;      case 5:cr="к";break;&lt;br /&gt;      case 6:cr="л";break;&lt;br /&gt;      case 7:cr="м";break;&lt;br /&gt;      case 8:cr="н";break;&lt;br /&gt;      case 9:cr="п";break;&lt;br /&gt;      default:cr="";&lt;br /&gt;    };&lt;br /&gt;  };&lt;br /&gt;  return cr;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var no=4;&lt;br /&gt;alert(test(no));&lt;/pre&gt;そのコードを見た先輩が、「それだとコードが長くなって見にくくなるから」と言って、こんな風に書き直した。&lt;br /&gt;&lt;pre class="prettyprint"&gt;function test(v){&lt;br /&gt;　var cr="";&lt;br /&gt;　var pat={1:"ж",2:"з",3:"и",4:"й",5:"к",6:"л",7:"м",8:"н",9:"п"};&lt;br /&gt;  if(v){cr=pat[v]};&lt;br /&gt;  return cr;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var no=4;&lt;br /&gt;alert(test(no));&lt;/pre&gt;???&lt;br /&gt;JavaScriptのオブジェクトは、&lt;br /&gt;&lt;pre class="prettyprint"&gt;var obj=new Object();&lt;/pre&gt;と作るけれど、単純にパラメータを保持するだけなら&lt;br /&gt;&lt;pre class="prettyprint"&gt;var obj={};&lt;/pre&gt;でよい。そして、JavaScriptのオブジェクトはほとんどハッシュマップなので、obj[key]で欲しい値が返るわけ。&lt;br /&gt;&lt;br /&gt;この件で、{}の使い方と「短いほうが良いコード」という考え方を教わってから、対応する値が1対1ならばほとんどswitch文は書かないようになった。&lt;br /&gt;そのせいで時々switch文を書かなきゃいけない時に、使い方を忘れてたりする。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4356059994568157551?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4356059994568157551/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4356059994568157551' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4356059994568157551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4356059994568157551'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/10/javascript.html' title='JavaScriptの{}の使い方のこと。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4461314532886073564</id><published>2009-10-11T23:35:00.009+09:00</published><updated>2009-10-11T23:54:32.190+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>ローカル上で、XmlSlurper で xhtml を読み込む時はフィーチャーを指定すること</title><content type='html'>Groovy で、xhtml を XmlSlurper で処理しようと思い、&lt;br /&gt;&lt;pre class="prettyprint"&gt;def src = args[0]&lt;br /&gt;def htmlFile=new File(src)&lt;br /&gt;String str = htmlFile.getText("UTF8")&lt;br /&gt;&lt;br /&gt;def node = new XmlSlurper().parseText(str)&lt;br /&gt;//以下略&lt;/pre&gt;のようにやってみたら&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;Caught: java.io.IOException: Server returned HTTP response code: 503 for URL:&lt;br /&gt; http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&lt;br /&gt;        at xmlSlurperTest.run(xmlSlurperTest_2.groovy:4)&lt;/pre&gt;というエラーが出て止まる。&lt;br /&gt;ローカル上でやっているので、xhtml の DTD を読みに行って503ってことらしい。&lt;br /&gt;隣に居たO部長に&lt;br /&gt;「〜となるんですけど、DTD を読みに行かずにする設定ってどうやるのか知りませんか？」&lt;br /&gt;「ヘッダ読み込まなきゃいいんじゃないの？」&lt;br /&gt;そうですけど…&lt;br /&gt;「もういいです自分で調べます」&lt;br /&gt;って言って Groovy の JavaDoc 見に行こうとしてたら方法をメッセンジャーで送ってもらえた。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;def src = args[0]&lt;br /&gt;def htmlFile=new File(src)&lt;br /&gt;String str = htmlFile.getText("UTF8")&lt;br /&gt;&lt;br /&gt;def parser = new XmlSlurper()&lt;br /&gt;//↓フィーチャーの指定。これを入れないと DTD を読みにいってエラーになる。&lt;br /&gt;parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)&lt;br /&gt;def node = parser.parseText(str)&lt;br /&gt;//以下略&lt;/pre&gt;フィーチャー？&lt;br /&gt;&lt;a href="http://msugai.fc2web.com/java/XML/DOM.html"&gt;Java 入門 | DOM (Document Object Model)&lt;/a&gt;&lt;br /&gt;groovy.util.XmlSlurper は org.xml.sax.helpers.DefaultHandler のサブクラスで、基本的にはSAXみたい。&lt;br /&gt;デフォルトで true なのか。ふむ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4461314532886073564?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4461314532886073564/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4461314532886073564' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4461314532886073564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4461314532886073564'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/10/xmlslurper.html' title='ローカル上で、XmlSlurper で xhtml を読み込む時はフィーチャーを指定すること'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1797407805112388937</id><published>2009-10-05T01:44:00.012+09:00</published><updated>2010-02-22T01:03:12.783+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><title type='text'>スクリプトでInDesignの文字組みアキ量設定を作る。</title><content type='html'>まず、自分の文字組みアキ量設定を作ります。&lt;br /&gt;※サンプルに、n-yujiさんの&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/n-yuji/20080703#p1"&gt;僕が勝手に考える理想の（というか妥当な）InDesign文字組版。 - 遠近法ノート&lt;/a&gt;&lt;br /&gt;の設定をお借りしました。&lt;br /&gt;&lt;br /&gt;文字組みを設定した .indd を開いた状態で、ExtendScript　Toolkit から、以下のスクリプトを実行。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var myMojikumi=app.activeDocument.mojikumiTables.itemByName("Y汎用括弧半角v2.0/0808");&lt;br /&gt;$.writeln(myMojikumi.basedOnMojikumiSet);&lt;br /&gt;$.writeln(myMojikumi.overrideMojikumiAkiList&lt;br /&gt;  .toSource().replace(/\], \[/g,"],\n ["));&lt;/pre&gt;&lt;br /&gt;すると、こんな感じでコンソールに表示されます。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SsjRsk6FvWI/AAAAAAAAAJ4/8fHDseRzOc4/s1600-h/mojikumi.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 178px; height: 320px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SsjRsk6FvWI/AAAAAAAAAJ4/8fHDseRzOc4/s320/mojikumi.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5388787517900569954" /&gt;&lt;/a&gt;&lt;br /&gt;わー。&lt;br /&gt;これをスクリプトに組み込みます。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var actDoc = app.activeDocument;&lt;br /&gt;var myMojikumi=actDoc.mojikumiTables.add("Y汎用括弧半角v2.0/0808");&lt;br /&gt;//MojikumiTableDefaults.LINE_END_ALL_ONE_HALF_EM_ENUM&lt;br /&gt;myMojikumi.basedOnMojikumiSet = 1246572593;&lt;br /&gt;//コンソールに表示された配列をそのままコピペ&lt;br /&gt;myMojikumi.overrideMojikumiAkiList=[&lt;br /&gt; [18, 22, false, 0.05, 0.05, 0.05, 0, false],&lt;br /&gt; [18, 23, false, 0.05, 0.05, 0.05, 0, false],&lt;br /&gt; [18, 22, true, 0.05, 0.05, 0.05, 0, false],&lt;br /&gt; [12, 12, false, -0.05, 0, 0.5, 5, false],&lt;br /&gt; [33, 12, false, -0.05, 0, 0.5, 5, false],&lt;br /&gt; [11, 12, false, -0.05, 0, 0.5, 5, false],&lt;br /&gt; [3, 12, false, -0.05, 0, 0.5, 5, false],&lt;br /&gt; [9, 12, false, -0.05, 0, 0.5, 5, false],&lt;br /&gt; [8, 12, false, -0.05, 0, 0.5, 5, false],&lt;br /&gt; [4, 12, false, -0.05, 0, 0, 5, false],&lt;br /&gt; [7, 12, false, -0.05, 0, 0.5, 5, false],&lt;br /&gt; [12, 33, false, -0.05, 0, 0.5, 5, false],&lt;br /&gt; &lt;br /&gt; //...中略...&lt;br /&gt; &lt;br /&gt; [24, 4, false, 0, 0, 0.5, 0, false],&lt;br /&gt; [25, 18, false, 0, 0, 0.25, 6, false],&lt;br /&gt; [18, 18, false, 0, 0, 0.25, 6, false],&lt;br /&gt; [18, 25, false, 0, 0, 0.25, 6, false],&lt;br /&gt; [25, 25, false, 0, 0, 0.25, 6, false]];&lt;/pre&gt;空のドキュメントを開いた状態で実行すれば、新しく文字組みアキ量設定ができます。&lt;br /&gt;&lt;br /&gt;2010-02-22追記：&lt;br /&gt;めんどくさいので、読み出し・組み込み部分をまとめて、スクリプトを生成するようにしました。&lt;br /&gt;文字組みを読み取りたい部分のテキストを選択して、スクリプトを実行して下さい。&lt;br /&gt;ファイル保存ダイアログが開き、スクリプトを保存します。&lt;br /&gt;&lt;pre class="prettyprint"&gt;(function(){&lt;br /&gt;  if(app.activeDocument.selection.length==0) return;&lt;br /&gt;　var obj=app.activeDocument.selection[0];&lt;br /&gt;  var check={&lt;br /&gt;    "Text":true,&lt;br /&gt;    "TextColumn":true,&lt;br /&gt;    "Paragraph":true,&lt;br /&gt;    "InsertionPoint":true,&lt;br /&gt;    "Character":true,&lt;br /&gt;    "TextStyleRange":true&lt;br /&gt;  }&lt;br /&gt;  if(!check[obj.constructor.name]) return;&lt;br /&gt;&lt;br /&gt;  var defFile = new File("~/Desktop/mojikumi_"+obj.mojikumi.name+".jsx");&lt;br /&gt;  defFile = defFile.saveDlg('スクリプトの保存先を選択して下さい。');&lt;br /&gt;  if(!defFile) return;&lt;br /&gt;  var mojikumiAryTxt = obj.mojikumi.overrideMojikumiAkiList.toSource();&lt;br /&gt;  mojikumiAryTxt = mojikumiAryTxt.replace(/\], \[/g,"],\n [");&lt;br /&gt;&lt;br /&gt;  var script='var actDoc = app.activeDocument;\n'&lt;br /&gt;  +'var myMojikumi=actDoc.mojikumiTables.add("'+ obj.mojikumi.name +'");\n'&lt;br /&gt;  +'myMojikumi.basedOnMojikumiSet = '+ obj.mojikumi.basedOnMojikumiSet +';\n'&lt;br /&gt;  +'myMojikumi.overrideMojikumiAkiList =\n'+ mojikumiAryTxt +';';&lt;br /&gt;&lt;br /&gt;  if(defFile.open('w')){&lt;br /&gt;    defFile.writeln(script);&lt;br /&gt;    defFile.close();&lt;br /&gt;    alert("スクリプトを書き出しました。");&lt;br /&gt;  }&lt;br /&gt;})();&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1797407805112388937?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1797407805112388937/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1797407805112388937' title='7 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1797407805112388937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1797407805112388937'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/10/indesign.html' title='スクリプトでInDesignの文字組みアキ量設定を作る。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/SsjRsk6FvWI/AAAAAAAAAJ4/8fHDseRzOc4/s72-c/mojikumi.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5429241969482406019</id><published>2009-09-24T20:46:00.004+09:00</published><updated>2009-09-24T20:58:34.549+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poi'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>groovy の eachWithIndex</title><content type='html'>&lt;a href="http://kanemu1117nc.blogspot.com/2009/09/groovypoiexcel.html"&gt;前々回のエントリ&lt;/a&gt;について、上司からダメ出しをもらう。&lt;br /&gt;&lt;br /&gt;「kanemu の poi のコード、なんで for 使ってんの？each 使えばいいじゃん」&lt;br /&gt;自分しばし考え&lt;br /&gt;「 i と j が使いたかったんですよ」&lt;br /&gt;「index が欲しかったってこと？じゃあ eachWithIndex は？」&lt;br /&gt;「？？？」&lt;br /&gt;&lt;a href="http://groovy.codehaus.org/groovy-jdk/"&gt;groovy-jdk&lt;/a&gt; を確認すると、eachほにゃららってメソッドがあるわあるわ…。&lt;br /&gt;ためしにgroovyconsoleで&lt;br /&gt;&lt;pre class="prettyprint"&gt;def myVal=[&lt;br /&gt;["あああ","いいい","ううう"],&lt;br /&gt;["かかか","ききき","くくく"],&lt;br /&gt;["さささ","ししし","すすす"]&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;myVal.eachWithIndex{v,i-&gt;&lt;br /&gt; println "${i} =&gt; ${v}";&lt;br /&gt; v.eachWithIndex{vv,ii-&gt;&lt;br /&gt;   println "------ ${ii} =&gt; ${vv}";&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;pre class="prettyprint"&gt;0 =&gt; [あああ, いいい, ううう]&lt;br /&gt;------ 0 =&gt; あああ&lt;br /&gt;------ 1 =&gt; いいい&lt;br /&gt;------ 2 =&gt; ううう&lt;br /&gt;1 =&gt; [かかか, ききき, くくく]&lt;br /&gt;------ 0 =&gt; かかか&lt;br /&gt;------ 1 =&gt; ききき&lt;br /&gt;------ 2 =&gt; くくく&lt;br /&gt;2 =&gt; [さささ, ししし, すすす]&lt;br /&gt;------ 0 =&gt; さささ&lt;br /&gt;------ 1 =&gt; ししし&lt;br /&gt;------ 2 =&gt; すすす&lt;/pre&gt;ははあ、なるほど。&lt;br /&gt;ということは先日のコードは、&lt;br /&gt;&lt;pre class="prettyprint"&gt;import org.apache.poi.hssf.usermodel.*;&lt;br /&gt;&lt;br /&gt;def myVal=[&lt;br /&gt;["あああ","いいい","ううう"],&lt;br /&gt;["かかか","ききき","くくく"],&lt;br /&gt;["さささ","ししし","すすす"]&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;//新規ワークブック作成&lt;br /&gt;HSSFWorkbook myWb = new HSSFWorkbook();&lt;br /&gt;//新規シート作成&lt;br /&gt;HSSFSheet mySheet = myWb.createSheet();&lt;br /&gt;&lt;br /&gt;myVal.eachWithIndex{v,i -&gt;&lt;br /&gt;  //新規行作成&lt;br /&gt;  HSSFRow myRow = mySheet.createRow(i);&lt;br /&gt;  v.eachWithIndex{vv,ii -&gt;&lt;br /&gt;    //新規セル作成&lt;br /&gt;    HSSFCell myCel = myRow.createCell((short)ii);&lt;br /&gt;    myCel.setEncoding(HSSFCell.ENCODING_UTF_16);&lt;br /&gt;    myCel.setCellValue(vv);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;//作成したワークブックを保存する&lt;br /&gt;new File("Test.xls").withOutputStream{myWb.write(it)}&lt;/pre&gt;ですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5429241969482406019?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5429241969482406019/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5429241969482406019' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5429241969482406019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5429241969482406019'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/09/groovy-eachwithindex.html' title='groovy の eachWithIndex'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6022741672479587734</id><published>2009-09-23T16:02:00.012+09:00</published><updated>2010-07-04T03:32:18.503+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AppleScript'/><category scheme='http://www.blogger.com/atom/ns#' term='iTerm'/><title type='text'>TermHere.app を iTermに対応させる。</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SrnQLmaM-3I/AAAAAAAAAJw/a6qnbEZ88ko/s1600-h/itermhere.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 128px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SrnQLmaM-3I/AAAAAAAAAJw/a6qnbEZ88ko/s200/itermhere.jpg" alt="" id="BLOGGER_PHOTO_ID_5384563727205727090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;「TermHere」というAppleScriptアプリが配布されている。&lt;br /&gt;&lt;a href="http://manas.tungare.name/software/finder-toolbar-scripts/"&gt;Mac OS X Finder Toolbar Scripts for Textmate, Terminal, and Touch. - Manas Tungare&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finderのツールバーに登録しておけば、開いているフォルダのディレクトリをターミナルで開いてくれる便利なスクリプトなのだが、残念ながら自分がふだん使用しているのは&lt;a href="http://iterm.sourceforge.net/"&gt;iTerm&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;なんとなくパッケージの中身を開いてみたら、"Public Domain" と書いてあったので、自分でちょっといじってみた。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;まず、上記からTerminalのところをダウンロード&lt;/li&gt;&lt;li&gt;TerminalHere.dmg を開き、中のTermHere.appをコピー&lt;/li&gt;&lt;li&gt;右クリック「パッケージの内容を表示」で開く&lt;/li&gt;&lt;li&gt;/Contents/Resources/Scripts/main.scpt をスクリプトエディタで開いて編集。&lt;pre class="prettyprint"&gt;tell application "Finder"&lt;br /&gt;set thisFolder to (target of front window) as Unicode text&lt;br /&gt;set posixPath to quoted form of POSIX path of thisFolder&lt;br /&gt;end tell&lt;br /&gt;&lt;br /&gt;tell application "iTerm"&lt;br /&gt;activate&lt;br /&gt;if (count current terminal) is 0 then&lt;br /&gt; set myterm to (make new terminal)&lt;br /&gt; tell myterm&lt;br /&gt;  launch session "Default"&lt;br /&gt; end tell&lt;br /&gt;end if&lt;br /&gt;tell the current session of the current terminal&lt;br /&gt; write text "cd " &amp;amp; posixPath&lt;br /&gt;end tell&lt;br /&gt;end tell&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;そのまま保存。&lt;/li&gt;&lt;li&gt;見た目も気にするなら、/Contents/Resources/termhere.icns を iTermのものと入れ替える。&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;あとは説明書どおりにFinderのツールバーに登録しておけばよい。&lt;br /&gt;&lt;br /&gt;2010.07.04追記：&lt;br /&gt;このエントリ久しぶりに見て「これって単にAppleScript書いてるだけじゃん！」と気づいた。&lt;br /&gt;要はアプリケーションバンドルにして保存すればよい。&lt;br /&gt;&lt;ol&gt;&lt;li&gt;スクリプトエディタ.appを起動し、上記スクリプトをペースト&lt;/li&gt;&lt;li&gt;アプリケーションバンドルとして保存&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/TC-B3a7XrMI/AAAAAAAAASQ/ckAZzVqsOkM/s1600/itermdot1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 158px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/TC-B3a7XrMI/AAAAAAAAASQ/ckAZzVqsOkM/s200/itermdot1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5489749259909049538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;これでOK。アイコンの変更は上記を参考に。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6022741672479587734?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6022741672479587734/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6022741672479587734' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6022741672479587734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6022741672479587734'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/09/termhereapp-iterm.html' title='TermHere.app を iTermに対応させる。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/SrnQLmaM-3I/AAAAAAAAAJw/a6qnbEZ88ko/s72-c/itermhere.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-9168723401863639269</id><published>2009-09-14T03:45:00.007+09:00</published><updated>2009-10-12T03:06:39.740+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poi'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>groovyとpoiでExcelファイルを出力する</title><content type='html'>poi は java から Microsoft Office ファイルを扱うライブラリ。これでエクセルファイルを作ってみる。&lt;br /&gt;環境はMacBook(CoreDuo)、MacOSX10.5.8、java v1.5.0_19、groovy v1.6.4。&lt;br /&gt;&lt;br /&gt;まず、poiのbinファイルを&lt;a href="http://www.apache.org/dyn/closer.cgi/jakarta/poi/release/"&gt;こちら&lt;/a&gt;から入手する。&lt;br /&gt;今回は、poi-bin-3.0-FINAL-20070503.zip をダウンロードした。&lt;br /&gt;解凍して、poi-3.0-rc4-20070503.jar を ~/.groovy/lib/ の中に入れて準備完了。&lt;br /&gt;&lt;br /&gt;以下コード。&lt;br /&gt;&lt;pre class="prettyprint"&gt;import org.apache.poi.hssf.usermodel.*;&lt;br /&gt;&lt;br /&gt;def myVal=[&lt;br /&gt;["あああ","いいい","ううう"],&lt;br /&gt;["かかか","ききき","くくく"],&lt;br /&gt;["さささ","ししし","すすす"]&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;//新規ワークブック作成&lt;br /&gt;HSSFWorkbook myWb = new HSSFWorkbook();&lt;br /&gt;//新規シート作成&lt;br /&gt;HSSFSheet mySheet = myWb.createSheet();&lt;br /&gt;&lt;br /&gt;for(i in 0..&amp;lt;myVal.size){&lt;br /&gt; //新規行作成&lt;br /&gt; HSSFRow myRow = mySheet.createRow(i);&lt;br /&gt; for(j in 0..&amp;lt;myVal[i].size){&lt;br /&gt;   //新規セル作成&lt;br /&gt;   HSSFCell myCel = myRow.createCell((short)j);&lt;br /&gt;   myCel.setEncoding(HSSFCell.ENCODING_UTF_16);&lt;br /&gt;   myCel.setCellValue(myVal[i][j]);&lt;br /&gt; }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;//作成したワークブックを保存する&lt;br /&gt;new File("Test.xls").withOutputStream{myWb.write(it)}&lt;/pre&gt;&lt;br /&gt;poi.groovy として保存、保存したディレクトリに移動して&lt;br /&gt;&lt;pre class="prettyprint"&gt;groovy poi.groovy&lt;/pre&gt;でエクセルファイルができた。簡単。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Sq1DRHoXYrI/AAAAAAAAAJo/3gKg63Rhqxo/s1600-h/test_xls.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 157px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Sq1DRHoXYrI/AAAAAAAAAJo/3gKg63Rhqxo/s200/test_xls.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5381031091162800818" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-9168723401863639269?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/9168723401863639269/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=9168723401863639269' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/9168723401863639269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/9168723401863639269'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/09/groovypoiexcel.html' title='groovyとpoiでExcelファイルを出力する'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NsZ3kbgYLEw/Sq1DRHoXYrI/AAAAAAAAAJo/3gKg63Rhqxo/s72-c/test_xls.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-210878654685508414</id><published>2009-09-04T13:57:00.008+09:00</published><updated>2010-12-12T12:46:46.403+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>拡張子を切る</title><content type='html'>「ファイル名はそのままで拡張子だけ変えたテキストを作りたい」とか、「ファイル名の後ろに"_copy"とつけて別名保存」とかの時に使う。自分コピペ用。&lt;br /&gt;&lt;pre class="prettyprint"&gt;function cutEx(path){&lt;br /&gt;  //拡張子を切る&lt;br /&gt; var pathTxt=path, exText="";&lt;br /&gt; var dirCutNo=( (/\//.test(path))? path.lastIndexOf("/") : 0 );&lt;br /&gt; if(/\./.test(path.slice(dirCutNo))){&lt;br /&gt;  pathTxt=path.slice(0, path.lastIndexOf("."));&lt;br /&gt;  exText=path.slice(path.lastIndexOf("."));&lt;br /&gt; };&lt;br /&gt;  return [pathTxt,exText];&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var filePath="aaa/zasshi.indd";&lt;br /&gt;alert("拡張子: "+cutEx(filePath)[1]+"\nファイルパス: "+cutEx(filePath)[0]);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2010.12.12追記：&lt;br /&gt;この記事で何をしたかったのか思い出し中。&lt;br /&gt;拡張子の前に.のあるファイル名でも、パスより前に.があっても拡張子を取りたくて、あるいは拡張子がなくってもそのパスだけ欲しかったってことか。&lt;br /&gt;今ならこう書く。&lt;br /&gt;&lt;pre class="prettyprint"&gt;function cutEx(path){&lt;br /&gt;  return path.split(/(\.[^\.\/]+)$/);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var cutPath;&lt;br /&gt;cutPath=cutEx("a.aa/za.sshi.indd")&lt;br /&gt;alert("拡張子: "+cutPath[1]+"\nファイルパス: "+cutPath[0]);&lt;br /&gt;&lt;br /&gt;var cutPath;&lt;br /&gt;cutPath=cutEx("/a.aa/zasshi")&lt;br /&gt;alert("拡張子: "+cutPath[1]+"\nファイルパス: "+cutPath[0]);&lt;br /&gt;&lt;br /&gt;var cutPath;&lt;br /&gt;cutPath=cutEx("a.aa/za.sshi.txt")&lt;br /&gt;alert("拡張子: "+cutPath[1]+"\nファイルパス: "+cutPath[0]);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-210878654685508414?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/210878654685508414/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=210878654685508414' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/210878654685508414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/210878654685508414'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/09/blog-post.html' title='拡張子を切る'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2416236780436645606</id><published>2009-08-30T03:28:00.015+09:00</published><updated>2009-08-30T14:26:21.995+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><title type='text'>Grails-1.1.1で「Simple」wiki を動かしてみる</title><content type='html'>ちょっと思う所あり、&lt;a href="http://www.jggug.org/"&gt;日本Grails/Groovyユーザーグループ（JGGUG）&lt;/a&gt;でソース公開している、Grailsで実装したWiki「Simple」を動かしてみました。&lt;br /&gt;環境はMacOSX 10.5.8。&lt;br /&gt;&lt;br /&gt;まずあらかじめ&lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt;の動く環境を整えておきます。現在の最新版、Grails-1.1.1を準備しました。&lt;br /&gt;セットアップはいろいろな人が書いているので省略。&lt;br /&gt;&lt;br /&gt;自分のワークディレクトリに移動し、 &lt;a href="http://code.google.com/p/gcrnagoya/"&gt;http://code.google.com/p/gcrnagoya/&lt;/a&gt; からソースコードをSVNで落とします。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ svn checkout http://gcrnagoya.googlecode.com/svn/trunk/simple simple&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;simpleフォルダができるので、中の application.properties を確認。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#Do not edit app.grails.* properties, they may change automatically. DO NOT put application configuration in here, it is not the right place!&lt;br /&gt;#Thu May 07 12:43:04 JST 2009&lt;br /&gt;app.version=0.1&lt;br /&gt;app.servlet.version=2.4&lt;br /&gt;app.grails.version=1.0.5&lt;br /&gt;app.name=simple&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Grailsの作成バージョンが1.0.5なので、grails upgrade（※あんまり信用されてないコマンドなので注意）を実行します。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ grails upgrade&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;もう一度 application.properties の中を確認すると、&lt;br /&gt;&lt;pre class="prettyprint"&gt;#utf-8&lt;br /&gt;#Sat Aug 29 18:13:30 JST 2009&lt;br /&gt;app.version=0.1&lt;br /&gt;app.servlet.version=2.4&lt;br /&gt;app.grails.version=1.1.1&lt;br /&gt;plugins.hibernate=1.1.1&lt;br /&gt;app.name=simple&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;次に grails-upp/conf/ に　BuildConfig.groovy を作成し、以下を記述します。&lt;br /&gt;&lt;pre class="prettyprint"&gt;grails.project.plugins.dir="work_tmp/plugins"&lt;br /&gt;grails.project.work.dir="work_tmp/work"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これを書いておくと、 デフォルトでは ~/.grails/1.1.1/plugins にインストールされるプラグインを、アプリケーションの work_tmp/plugins/ 以下にインストールしてくれます。&lt;br /&gt;&lt;br /&gt;plugins フォルダにプラグインのzip(grails-acegi-0.3.zip,grails-feeds-1.4.zip)が入っているのですが、これをさっくり無視して本家リポジトリからプラグインをインストールします。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ grails install-plugin acegi&lt;br /&gt;$ grails install-plugin feeds&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;application.properties を確認すると、&lt;br /&gt;&lt;pre class="prettyprint"&gt;#utf-8&lt;br /&gt;#Sat Aug 29 18:25:48 JST 2009&lt;br /&gt;plugins.feeds=1.4&lt;br /&gt;app.version=0.1&lt;br /&gt;plugins.acegi=0.5.2&lt;br /&gt;app.servlet.version=2.4&lt;br /&gt;app.grails.version=1.1.1&lt;br /&gt;plugins.hibernate=1.1.1&lt;br /&gt;app.name=simple&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;となりました。&lt;br /&gt;アプリケーションにwork_tmpフォルダができて、中の plugins の中に acegi-0.5.2 と feeds-1.4 がインストールされます。&lt;br /&gt;アプリケーション直下の plugins フォルダは捨ててしまいます。&lt;br /&gt;&lt;br /&gt;これで、grails-appしてみます。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ grails run-app&lt;br /&gt;Welcome to Grails 1.1.1 - http://grails.org/&lt;br /&gt;Licensed under Apache Standard License 2.0&lt;br /&gt;Grails home is set to: /opt/grails-1.1.1&lt;br /&gt;----- 省略 -----&lt;br /&gt;create default role &amp;amp; user&lt;br /&gt;Server running. Browse to http://localhost:8080/simple&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ブラウザから http://localhost:8080/simple を開くと、&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Spl1JNnzkRI/AAAAAAAAAJA/e2GHfdCWRCw/s1600-h/simple-login.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 172px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Spl1JNnzkRI/AAAAAAAAAJA/e2GHfdCWRCw/s200/simple-login.jpg" alt="" id="BLOGGER_PHOTO_ID_5375456431379288338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;わー。&lt;br /&gt;初期状態だとユーザがひとつもないので、ユーザを新規作成します。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Spl1p37sgdI/AAAAAAAAAJI/5FzOTInfAx8/s1600-h/simple-create-user.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 172px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Spl1p37sgdI/AAAAAAAAAJI/5FzOTInfAx8/s200/simple-create-user.jpg" alt="" id="BLOGGER_PHOTO_ID_5375456992492814802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;登録すると自動でログインします。&lt;br /&gt;トップページがないので、まずトップページを作成します。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Spl2m5bSWII/AAAAAAAAAJQ/LLVgLcHwks0/s1600-h/simple-top.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 160px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Spl2m5bSWII/AAAAAAAAAJQ/LLVgLcHwks0/s200/simple-top.jpg" alt="" id="BLOGGER_PHOTO_ID_5375458040865773698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/Spl3drECkCI/AAAAAAAAAJg/Mh1yykxefKs/s1600-h/simple-top2.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 160px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/Spl3drECkCI/AAAAAAAAAJg/Mh1yykxefKs/s200/simple-top2.jpg" alt="" id="BLOGGER_PHOTO_ID_5375458981902979106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;初期状態だと、タイトルに「top」とつけたページがトップページになるようです。それを「index」に変更したいので、&lt;br /&gt;grails-upp/conf/config.groovy の 76行目&lt;br /&gt;&lt;pre class="prettyprint"&gt;simple.contents.toppage="top"&lt;/pre&gt;を&lt;br /&gt;&lt;pre class="prettyprint"&gt;simple.contents.toppage="index"&lt;/pre&gt;に変更します。&lt;br /&gt;リロードすると index がトップになるように反映されています。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Spl3ARW0oMI/AAAAAAAAAJY/0_ro6r1tyVg/s1600-h/simple-index2.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Spl3ARW0oMI/AAAAAAAAAJY/0_ro6r1tyVg/s200/simple-index2.jpg" alt="" id="BLOGGER_PHOTO_ID_5375458476786229442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;とてもシンプル。&lt;br /&gt;&lt;br /&gt;8/30追記：&lt;br /&gt;ところで、起動コンソールを見ていると、いくつか起動時にエラーが出ています。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;2009-08-30 14:07:55,428&lt;br /&gt;[main] ERROR commons.DefaultGrailsControllerClass  -&lt;br /&gt;The allowedMethods property in RoleController should be declared static. &lt;br /&gt;The non static version is supported for now but has been&lt;br /&gt;deprecated and may not work in future versions of Grails.&lt;br /&gt;----- 省略 -----&lt;/pre&gt;&lt;br /&gt;これを解消するために、grails-app/controllers/&lt;br /&gt;&lt;ul&gt;&lt;li&gt;RegisterController.groovy&lt;/li&gt;&lt;li&gt;RequestmapController.groovy&lt;/li&gt;&lt;li&gt;RoleController.groovy&lt;/li&gt;&lt;li&gt;UserController.groovy&lt;/li&gt;&lt;/ul&gt;の、&lt;pre class="prettyprint"&gt;def allowedMethods&lt;/pre&gt;となっている部分を&lt;br /&gt;&lt;pre class="prettyprint"&gt;static allowedMethods&lt;/pre&gt;に修正します。&lt;br /&gt;&lt;br /&gt;参考ページ：&lt;a href="http://d.hatena.ne.jp/mottsnite/20090217/1234857617"&gt;Grails-1.0.*からGrails-1.1への〜 Pt.1 - leftovers...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2416236780436645606?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2416236780436645606/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2416236780436645606' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2416236780436645606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2416236780436645606'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/08/grails-111simplewiki.html' title='Grails-1.1.1で「Simple」wiki を動かしてみる'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NsZ3kbgYLEw/Spl1JNnzkRI/AAAAAAAAAJA/e2GHfdCWRCw/s72-c/simple-login.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2040691067508578699</id><published>2009-08-22T18:42:00.013+09:00</published><updated>2009-08-22T22:28:44.551+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Flash Catalyst を見た話。</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/So_GewcdKJI/AAAAAAAAAI4/Gsv81-mYwCw/s1600-h/FlashCatalystFlashBuilder.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 98px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/So_GewcdKJI/AAAAAAAAAI4/Gsv81-mYwCw/s200/FlashCatalystFlashBuilder.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5372731112178919570" /&gt;&lt;/a&gt;&lt;br /&gt;今日、うちの会社の会議室にて、&lt;a href="http://www.fxug.net/"&gt;FxUG&lt;/a&gt;の「&lt;a href="http://www.fxug.net/modules/bwiki/index.php?cmd=read&amp;page=Flex%CA%D9%B6%AF%B2%F1%C2%E878%B2%F3%A1%F7%CC%BE%B8%C5%B2%B0%BB%B2%B2%C3%BC%F5%C9%D5"&gt;Flex勉強会第78回＠名古屋&lt;/a&gt;」がありました。&lt;br /&gt;自分も一緒に聴講させてもらったのですが、アドビの轟さんがしてくれた、Flash Builder 4 と Flash Catalyst のプレゼンが非常に面白かったので、少しここにも書いておきます。&lt;br /&gt;&lt;br /&gt;Flash Catalyst というのは、Illustator や Photoshop で作ったデザインを Flex のビューとして再利用するためのツールです。自分も今回初めて知りました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.adobe.com/jp/devnet/flex/articles/flex4_tokyo.html"&gt;イベントレポート「Flash Catalyst / Flash Builder 4 ベータ公開イベント」&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.adobe.com/jp/newsletters/edge/december2008/articles/article2/index.html"&gt;Adobe Edge: 2008年12月 Flash Catalyst：PhotoshopデザインがそのままFlexアプリのViewへと変わる！&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Webデザインのインターフェースを作る時、今まではデザイナーがIllustratorでカンプを作っても、結局WEB担当者が見た目を似せて作り直したりしていました。せいぜい画像パーツとして切り出す程度。&lt;br /&gt;Flash Catalyst を使うと、IllustratorやPhotoshopのファイルで作り込んだパーツを、そのままFlexのフォームやボタンに変換できる。Flexで作ったWebページや、Airアプリの見た目を、プログラマに頼らずデザイナーが「動き」の部分まで作れるようになるわけです。&lt;br /&gt;&lt;br /&gt;今回の轟さんのプレゼンは、Flexアプリケーションを、全くプログラムを書かずに最後まで作る、というコンセプトでした。デザイナーが作ったIllustratorファイルの、普通のパスの四角形で作った部分を選択して右クリックでテキスト入力フォームに変換したり、モーションを追加したりするのを見て、おお、ここまで出来るのかと感嘆。&lt;br /&gt;まあ操作で覚えることは沢山あるにしても、少なくともプログラムは一切書かないし、少し努力すればたいていのデザイナーなら使えるレベルだと思います。&lt;br /&gt;&lt;br /&gt;デザイナーが作成したビューをFlexプログラマに渡して、データを読み書きできるようにします。それをやるのが新しい Flash Builder。こちらもデータをドラッグ＆ドロップで読み来んでActionScriptのコードを自動生成したりと、面白いデモがてんこもりでした。&lt;br /&gt;でもやっぱり印象的だったのは Catalyst。紙媒体中心の仕事からWEBへの参入は結構壁が厚いと思いますが、Flex、Airのビューという選択肢がひとつ増えた感じ。&lt;br /&gt;どちらにしろ紙媒体の仕事はどんどん減ってるわけだし…&lt;br /&gt;&lt;br /&gt;自分はデザインはだめだし、組版方面の話ではないけれど、なんだか最近暗い話ばかりの業界でも面白そうな方向に行けばまだまだ面白い仕事はあるんだ、ということを実感させてくれるようなプレゼンでした。&lt;br /&gt;&lt;br /&gt;ps. 他の講演も、会場の雰囲気も活気があって面白い話ばかりでした。&lt;br /&gt;FxUG の皆さんありがとうございました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2040691067508578699?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2040691067508578699/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2040691067508578699' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2040691067508578699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2040691067508578699'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/08/flash-catalyst.html' title='Flash Catalyst を見た話。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/So_GewcdKJI/AAAAAAAAAI4/Gsv81-mYwCw/s72-c/FlashCatalystFlashBuilder.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8509085321526520063</id><published>2009-08-14T23:54:00.005+09:00</published><updated>2009-08-15T00:18:28.631+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>perlでJSONを使う</title><content type='html'>PerlでJSONを作るには、JSONモジュールを使う。&lt;br /&gt;WINDOWSで最新のActivePerlの場合は、JSONモジュールは最初から入っていた。&lt;br /&gt;「Perl Package Manager」から確認できる。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SoV8VTBshlI/AAAAAAAAAIg/SYcrzJ9IhD4/s1600-h/perlPackageManager.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 309px; height: 320px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SoV8VTBshlI/AAAAAAAAAIg/SYcrzJ9IhD4/s320/perlPackageManager.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5369834836035667538" /&gt;&lt;/a&gt;&lt;br /&gt;Macの場合は、CPANからインストールする必要がある。&lt;br /&gt;先にCPANのインストール。&lt;br /&gt;参考にしたサイト：&lt;br /&gt;&lt;a href="http://y-kit.jp/saba/xp/cpan.htm"&gt;CPAN経由でLinuxにモジュールを組み込む&lt;/a&gt;&lt;br /&gt;&lt;a href="http://poccori.com/blog/wp/archives/90"&gt;Heart Beat � Blog Archive � Mac OSXでPerlの環境を整える&lt;/a&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/onicchi/20090801/1249135481"&gt;MacでCPANを使ってPerlモジュールインストール - nmon&lt;/a&gt;&lt;br /&gt;CPANを入れたら、コンソールから&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ sudo cpan&lt;br /&gt;Password:&lt;br /&gt;&gt;install JSON&lt;br /&gt;&gt;exit&lt;/pre&gt;&lt;br /&gt;これでOK。&lt;br /&gt;&lt;br /&gt;使うには、use JSON; を指定して、ハッシュのリファレンスを渡してやる。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#test2.pl&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use utf8;&lt;br /&gt;use Encode;&lt;br /&gt;use JSON;&lt;br /&gt;binmode STDIN, ':encoding(utf8)';&lt;br /&gt;binmode STDOUT, ':encoding(utf8)';&lt;br /&gt;binmode STDERR, ':encoding(utf8)';&lt;br /&gt;&lt;br /&gt;my %hash = (&lt;br /&gt;  'チョウ' =&amp;gt; { &lt;br /&gt;    'アゲハチョウ'=&amp;gt;'Papilio xuthus', &lt;br /&gt;    'モンシロチョウ'=&amp;gt;'Pieris rapae', &lt;br /&gt;    'ゴマダラチョウ'=&amp;gt;'Hestina persimilis japonica' &lt;br /&gt;    },&lt;br /&gt;  'コガネムシ' =&amp;gt; { &lt;br /&gt;    'マメコガネ'=&amp;gt;'Popillia japonica', &lt;br /&gt;    'カナブン'=&amp;gt;'Rhomborrhina　japonica', &lt;br /&gt;    'スジコガネ'=&amp;gt;'Anomala testaceipes' &lt;br /&gt;    },&lt;br /&gt;  'バッタ' =&amp;gt; { &lt;br /&gt;    'トノサマバッタ'=&amp;gt;'Locusta migratoria', &lt;br /&gt;    'ショウリョウバッタ'=&amp;gt;'Acrida cinerea', &lt;br /&gt;    'コバネイナゴ'=&amp;gt;'Oxya yezoensis' &lt;br /&gt;    }&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;my $hash_ref = \%hash;&lt;br /&gt;my $hash_json = JSON-&amp;gt;new-&amp;gt;encode($hash_ref);&lt;br /&gt;&lt;br /&gt;print $hash_json;&lt;br /&gt;print "\n";&lt;/pre&gt;&lt;br /&gt;これで、コンソールから&lt;br /&gt;&lt;pre class="prettyprint"&gt;perl test2.pl&lt;/pre&gt;で、&lt;br /&gt;&lt;blockquote&gt;{"チョウ":{"ゴマダラチョウ":"Hestina persimilis japonica","モンシロチョウ":"Pieris rapae","アゲハチョウ":"Papilio xuthus"},"バッタ":{"トノサマバッタ":"Locusta migratoria","コバネイナゴ":"Oxya yezoensis","ショウリョウバッタ":"Acrida cinerea"},"コガネムシ":{"スジコガネ":"Anomala testaceipes","マメコガネ":"Popillia japonica","カナブン":"Rhomborrhina　japonica"}}&lt;/blockquote&gt;と表示される。OK。&lt;br /&gt;&lt;br /&gt;参考：&lt;br /&gt;&lt;a href="http://kawa.at.webry.info/200801/article_6.html"&gt;[Perl] JSON モジュールの utf8 フラグ周りの仕様 tips 注意点 Kawa.netブログ（川崎有亮）/ウェブリブログ&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8509085321526520063?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8509085321526520063/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8509085321526520063' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8509085321526520063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8509085321526520063'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/08/perljson.html' title='perlでJSONを使う'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/SoV8VTBshlI/AAAAAAAAAIg/SYcrzJ9IhD4/s72-c/perlPackageManager.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4905446226479352373</id><published>2009-08-11T01:36:00.010+09:00</published><updated>2009-08-15T09:09:46.862+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>とりあえず上手くいくperl5.8のエンコード指定テンプレ</title><content type='html'>正規表現がまともに動いて、文字化けもしない設定がわかってきたのでメモ。&lt;br /&gt;下は簡単な検索置換スクリプトサンプルです。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#!/usr/bin/perl;&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;use utf8;    # ソースコード（このスクリプト自体）をUTF8で書くよという宣言&lt;br /&gt;use Encode;  # Encode.pm モジュールを使用する宣言&lt;br /&gt;&lt;br /&gt;binmode STDIN,  ':encoding(utf8)';&lt;br /&gt;binmode STDOUT, ':encoding(utf8)';&lt;br /&gt;binmode STDERR, ':encoding(utf8)';&lt;br /&gt;# 標準出力（コンソールから打ち込む文字、または&lt;br /&gt;# ブラウザから送られてくる文字）のエンコード指定。&lt;br /&gt;# binmode はバイナリモード。&lt;br /&gt;# Windowsのコマンドプロンプトに出すならば　':encoding(cp932)' を使う。&lt;br /&gt;&lt;br /&gt;if(@ARGV &amp;lt; 2){&lt;br /&gt;print "Usage: perl test.pl infile outfile\n";&lt;br /&gt;exit;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;my $INFILE=$ARGV[0];&lt;br /&gt;my $OUTFILE=$ARGV[1];&lt;br /&gt;&lt;br /&gt;open my $in, "&amp;lt;:encoding(cp932)", $INFILE or die "$!";&lt;br /&gt;# 読み込み時にかならずファイルのエンコードを指定。&lt;br /&gt;# これで読み込んだ文字に「UTF8フラグ」が立つ。&lt;br /&gt;my @file = &amp;lt;$in&amp;gt;;&lt;br /&gt;close($in);&lt;br /&gt;&lt;br /&gt;foreach my $line (@file){&lt;br /&gt;$line =~ s/わらつたよ/うたつたよ/g;&lt;br /&gt;$line =~ s/かぷかぷ/ボェ〜〜〜〜〜と/g;&lt;br /&gt;$line =~ s/クラムボン/ジャイアン/g;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;open my $out, "&amp;gt;:encoding(utf8)", $OUTFILE or die "$!";&lt;br /&gt;# 書き出す時もかならずエンコードを指定する。&lt;br /&gt;# 「UTF8フラグ」もきちんと取って出力される。&lt;br /&gt;print $out @file;&lt;br /&gt;close($out);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これで、コンソールから&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ perl test.pl infile.txt outfile.txt&lt;/pre&gt;&lt;br /&gt;を実行すると、WINDOWS shift-jis で書かれた infile.txt&lt;br /&gt;&lt;blockquote&gt;『クラムボンはわらつたよ。』&lt;br /&gt;『クラムボンはかぷかぷわらつたよ。』&lt;br /&gt;『クラムボンは跳てわらつたよ。』&lt;br /&gt;『クラムボンはかぷかぷわらつたよ。』&lt;/blockquote&gt;&lt;br /&gt;を読み込んで、UTF8 の outfile.txt&lt;br /&gt;&lt;blockquote&gt;『ジャイアンはうたつたよ。』&lt;br /&gt;『ジャイアンはボェ〜〜〜〜〜とうたつたよ。』&lt;br /&gt;『ジャイアンは跳てうたつたよ。』&lt;br /&gt;『ジャイアンはボェ〜〜〜〜〜とうたつたよ。』&lt;/blockquote&gt;を吐き出します。&lt;br /&gt;&lt;br /&gt;結局&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ソースファイルはUTF8で書き、use utf8を指定&lt;/li&gt;&lt;li&gt;標準出力にbinmodeでエンコードを指定&lt;/li&gt;&lt;li&gt;読み込み、書き出し時にファイルのエンコードを指定&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;これを守って書けばたいていは上手くいきそうです。&lt;br /&gt;自分用コピペ元として…。&lt;br /&gt;&lt;br /&gt;参考：&lt;br /&gt;&lt;a href="http://blog.livedoor.jp/dankogai/archives/51031595.html"&gt;404 Blog Not Found:perl - Encode 入門&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lr.pi.titech.ac.jp/%7Eabekawa/perl/perl_unicode.html"&gt;Perl5.8 の UNICODE 対応&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aritia.org/hizumi/perl/perlwin.html"&gt;WindowsでPerlを使うもんじゃない&lt;/a&gt;&lt;br /&gt;&lt;a href="http://level.s69.xrea.com/mozilla/index.cgi?id=20080116_utf8"&gt;Perl: use utf8 と use encoding と \w - えむもじら&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4905446226479352373?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4905446226479352373/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4905446226479352373' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4905446226479352373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4905446226479352373'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/08/perl58.html' title='とりあえず上手くいくperl5.8のエンコード指定テンプレ'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3021251970060844753</id><published>2009-08-05T22:58:00.005+09:00</published><updated>2010-05-10T04:38:19.294+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>JavaScript内に複数行のテキストを書く</title><content type='html'>JavaScript内に複数行のテキストを書きたいときは、普通はこのように書くと思う。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var text="何が面白くて駝鳥を飼ふのだ。\n"&lt;br /&gt;+ "動物園の四坪半のぬかるみの中では、\n"&lt;br /&gt;+ "脚が大股過ぎるぢやないか。\n"&lt;br /&gt;+ "頸があんまり長過ぎるぢやないか。\n"&lt;br /&gt;+ "雪の降る国にこれでは羽がぼろぼろ過ぎるぢやないか。\n"&lt;br /&gt;+ "腹がへるから堅パンも食ふだらうが、\n"&lt;br /&gt;+ "駝鳥の眼は遠くばかり見てゐるぢやないか。\n"&lt;br /&gt;+ "身も世もない様に燃えてゐるぢやないか。\n"&lt;br /&gt;+ "瑠璃色の風が今にも吹いて来るのを待ちかまへてゐるぢやないか。\n"&lt;br /&gt;+ "あの小さな素朴な頭が無辺大の夢で逆まいてゐるぢやないか。\n"&lt;br /&gt;+ "これはもう駝鳥ぢやないぢやないか。\n"&lt;br /&gt;+ "人間よ、\n"&lt;br /&gt;+ "もう止せ、こんな事は。";&lt;br /&gt;&lt;br /&gt;alert(text);&lt;/pre&gt;これだと＋と\nと""だらけで、いかにも読みにくい。&lt;br /&gt;実は、下のようにも書ける（のだと最近知った）。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var text="何が面白くて駝鳥を飼ふのだ。\&lt;br /&gt;動物園の四坪半のぬかるみの中では、\&lt;br /&gt;脚が大股過ぎるぢやないか。\&lt;br /&gt;頸があんまり長過ぎるぢやないか。\&lt;br /&gt;雪の降る国にこれでは羽がぼろぼろ過ぎるぢやないか。\&lt;br /&gt;腹がへるから堅パンも食ふだらうが、\&lt;br /&gt;駝鳥の眼は遠くばかり見てゐるぢやないか。\&lt;br /&gt;身も世もない様に燃えてゐるぢやないか。\&lt;br /&gt;瑠璃色の風が今にも吹いて来るのを待ちかまへてゐるぢやないか。\&lt;br /&gt;あの小さな素朴な頭が無辺大の夢で逆まいてゐるぢやないか。\&lt;br /&gt;これはもう駝鳥ぢやないぢやないか。\&lt;br /&gt;人間よ、\&lt;br /&gt;もう止せ、こんな事は。";&lt;br /&gt;&lt;br /&gt;alert(text);&lt;/pre&gt;&lt;br /&gt;ちょっとだけ気分が良い。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3021251970060844753?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3021251970060844753/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3021251970060844753' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3021251970060844753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3021251970060844753'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/08/javascript.html' title='JavaScript内に複数行のテキストを書く'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3401586036783528332</id><published>2009-08-03T06:49:00.006+09:00</published><updated>2010-05-10T04:40:03.698+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignでPDFを貼り込むときのオプション</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SnYM3U-RhVI/AAAAAAAAAIY/6NSTENeXcr8/s1600-h/trimming.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 172px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SnYM3U-RhVI/AAAAAAAAAIY/6NSTENeXcr8/s320/trimming.jpg" alt="" id="BLOGGER_PHOTO_ID_5365490150720767314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;InDesignにPDFを貼り込むスクリプトを作るとき、いつも忘れてしまうのでメモ。&lt;br /&gt;&lt;pre class="prettyprint"&gt;app.pdfPlacePreferences.pdfCrop=PDFCrop.CROP_TRIM;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これはPDFを「ファイルメニュー→配置」で選んだ時に、「読み込みオプションを表示」で出る画面のトリミングオプション。&lt;br /&gt;PDFはEPSとは違い、いろいろなサイズをあらかじめ持っている。&lt;br /&gt;トリミングサイズ、裁ち落としサイズ、メディアサイズetc...&lt;br /&gt;&lt;br /&gt;最初にこれを設定しておかないと、スクリプトを実行した時に思わぬ場所でトリミングされてしまう。&lt;br /&gt;&lt;br /&gt;オプションの種類は以下のとおり。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PDFCrop.CROP_ART&lt;/li&gt;&lt;li&gt;PDFCrop.CROP_BLEED&lt;/li&gt;&lt;li&gt;PDFCrop.CROP_CONTENT&lt;/li&gt;&lt;li&gt;PDFCrop.CROP_MEDIA&lt;/li&gt;&lt;li&gt;PDFCrop.CROP_PDF&lt;/li&gt;&lt;li&gt;PDFCrop.CROP_TRIM&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3401586036783528332?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3401586036783528332/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3401586036783528332' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3401586036783528332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3401586036783528332'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/08/indesignpdf.html' title='InDesignでPDFを貼り込むときのオプション'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NsZ3kbgYLEw/SnYM3U-RhVI/AAAAAAAAAIY/6NSTENeXcr8/s72-c/trimming.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2408029232360109006</id><published>2009-07-27T01:25:00.004+09:00</published><updated>2010-05-10T04:46:02.287+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustratorで選択したオブジェクトをグループ</title><content type='html'>調べるのにすごいかかったのでメモ。&lt;br /&gt;&lt;br /&gt;グループするには、新しくgroupItemを作ってその中にmoveする。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var doc=app.activeDocument;&lt;br /&gt;var sels=doc.selection;&lt;br /&gt;&lt;br /&gt;var grp=doc.groupItems.add();&lt;br /&gt;for(var i=0;i&amp;lt;sels.length;i++){&lt;br /&gt;var sel=sels[i]&lt;br /&gt;sel.move(grp,ElementPlacement.PLACEATEND);&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;このmoveのオプションを調べるのにすごく苦労した。&lt;br /&gt;結局、IllustratorCS3_JavaScript_Reference.pdf の後ろの方、Scripting Constants に載っていたのだが。ここにあったこと覚えておかないと…。&lt;br /&gt;&lt;br /&gt;ElementPlacementで選べるオプションは以下の５種類。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ElementPlacement.INSIDE&lt;/li&gt;&lt;li&gt;ElementPlacement.PLACEATBEGINNING&lt;/li&gt;&lt;li&gt;ElementPlacement.PLACEATEND&lt;/li&gt;&lt;li&gt;ElementPlacement.PLACEBEFORE&lt;/li&gt;&lt;li&gt;ElementPlacement.PLACEAFTER&lt;/li&gt;&lt;/ul&gt;選ぶのを間違えると，グループした時にオブジェクトの前後が逆になったりします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2408029232360109006?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2408029232360109006/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2408029232360109006' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2408029232360109006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2408029232360109006'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/07/illustrator_27.html' title='Illustratorで選択したオブジェクトをグループ'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8856612466582413025</id><published>2009-07-21T03:45:00.005+09:00</published><updated>2010-05-10T04:44:50.022+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustratorで扇形を描くスクリプト。</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SmS8PoapEiI/AAAAAAAAAIQ/DSZXNMjBvJc/s1600-h/ougigata.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 294px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SmS8PoapEiI/AAAAAAAAAIQ/DSZXNMjBvJc/s320/ougigata.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5360616433210954274" /&gt;&lt;/a&gt;&lt;br /&gt;がんばって書いたので公開します。&lt;br /&gt;上の画像のような感じできれいな扇形を描く&lt;br /&gt;&lt;pre class="prettyprint"&gt;//中心点o, 半径 r, 開始角度a, 終了角度b とすると、&lt;br /&gt;&lt;br /&gt;var o=[100,100];&lt;br /&gt;var r=100;&lt;br /&gt;var a=20;&lt;br /&gt;var b=320;&lt;br /&gt;&lt;br /&gt;var doc=app.activeDocument;&lt;br /&gt;var pObj=circularSector(doc,o,r,a,b);&lt;br /&gt;pObj.filled = false; //　塗りなし&lt;br /&gt;pObj.stroked = true; //　線あり&lt;br /&gt;pObj.strokeWidth = 3; //　線幅3ポイント&lt;br /&gt;&lt;br /&gt;//---------------------処理ここまで--------------------------&lt;br /&gt;function circularSector(doc,o,r,a,b){&lt;br /&gt;  //扇形を作成する。ドキュメントdoc、中心点o、半径 r、開始角度a、終了角度b &lt;br /&gt;  //角度を出す&lt;br /&gt;  var shema=(b-a)%360;&lt;br /&gt;  //90度以上なら角度を分割&lt;br /&gt;  var pointsLength=Math.ceil(Math.abs(shema/90));&lt;br /&gt;  var shema2=shema/(pointsLength);&lt;br /&gt;  //いっこいっこの角度を配列に入れる&lt;br /&gt;  var angleAry=[];&lt;br /&gt;  for(var i=0;i&amp;lt;=pointsLength;i++){&lt;br /&gt;    angleAry.push(a+shema2*i)&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;  //パスのポイントの配列を作る&lt;br /&gt;  var pointsAry=[o];&lt;br /&gt;  for(var j=0;j&amp;lt;angleAry.length;j++){&lt;br /&gt;    pointsAry.push(trigonometric(o, r, angleAry[j]));&lt;br /&gt;  };&lt;br /&gt;  $.writeln(pointsAry);&lt;br /&gt;  &lt;br /&gt;  //パスオブジェクトを生成&lt;br /&gt;  var pObj = doc.pathItems.add();&lt;br /&gt;  pObj.setEntirePath(pointsAry);&lt;br /&gt;  //パスを閉じる&lt;br /&gt;  pObj.closed=true;&lt;br /&gt;  &lt;br /&gt;  //パスを選択&lt;br /&gt;  pObj.selected=true;&lt;br /&gt;  //ハンドルをのばす&lt;br /&gt;  var d=arcDirection(r, shema2);&lt;br /&gt;  for(var k=1;k&amp;lt;pointsAry.length;k++){&lt;br /&gt;    if(k&amp;lt;pointsAry.length-1){&lt;br /&gt;      pObj.selectedPathPoints[k].rightDirection=&lt;br /&gt;        trigonometric(pointsAry[k], d, angleAry[k-1]+90);&lt;br /&gt;    };&lt;br /&gt;    if(k&amp;gt;1){&lt;br /&gt;      pObj.selectedPathPoints[k].leftDirection=&lt;br /&gt;        trigonometric(pointsAry[k], d, angleAry[k-1]-90);&lt;br /&gt;    };&lt;br /&gt;  };&lt;br /&gt;  //パスの選択解除&lt;br /&gt;  pObj.selected=false;&lt;br /&gt;  return pObj;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;function trigonometric(o, r, theta){&lt;br /&gt;  //三角関数。原点o、半径r、角度theta&lt;br /&gt;  var oo,x,y;&lt;br /&gt;  x=r*Math.sin(radian(theta));&lt;br /&gt;  if(/e/.test(x.toString())) x=0;&lt;br /&gt;  y=r*Math.cos(radian(theta));&lt;br /&gt;  if(/e/.test(y.toString())) y=0;&lt;br /&gt;  oo=[o[0]+x,o[1]+y];&lt;br /&gt;  return oo;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;function arcDirection(r, theta){&lt;br /&gt;  //円弧のハンドルまでの距離を出す。半径r、角度theta&lt;br /&gt;  var k = (Math.tan(radian(theta)/4))*4/3&lt;br /&gt;  return r * k;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;function radian(theta){&lt;br /&gt;  //ラジアンを計算する。角度theta&lt;br /&gt;  var rad=theta*Math.PI/180;&lt;br /&gt;  return rad;&lt;br /&gt;};&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8856612466582413025?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8856612466582413025/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8856612466582413025' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8856612466582413025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8856612466582413025'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/07/illustrator.html' title='Illustratorで扇形を描くスクリプト。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/SmS8PoapEiI/AAAAAAAAAIQ/DSZXNMjBvJc/s72-c/ougigata.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1049559906982594402</id><published>2009-06-22T00:24:00.008+09:00</published><updated>2010-05-10T04:45:05.658+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustrator8.0の詰めをCS以降で検出できるか？</title><content type='html'>イラレ8で使われていた文字の「詰め」機能は、CS以降では使えない。&lt;br /&gt;イラレ8で作られたドキュメントをCSで開くと、「テキストを更新」するかどうかを求められ、テキストを更新しなければ文字の編集はできない。更新すれば詰め情報は飛んでしまい、文字はみっともなく広がってしまう。その部分は手作業で直すしかない。&lt;br /&gt;Scriptを使っても詰めが使われていたかどうかの情報は取れないし、自分でもほぼあきらめていた。&lt;br /&gt;&lt;br /&gt;が、要するに「文字が広がってしまう」のが問題の本質であるわけだから、更新前と更新後で文字のサイズを取って比較し、不自然に広がってしまうようなら「詰め」が使われていた、という事で良いのでは？&lt;br /&gt;そう思ってスクリプトを書いてみた。環境はMac、CS3。&lt;br /&gt;&lt;pre class="prettyprint"&gt;function convertLegacyText(doc){&lt;br /&gt;  &lt;br /&gt;  var itemSizeList={};&lt;br /&gt;  for(var i=0;i&amp;lt;doc.pageItems.length;i++){&lt;br /&gt;    var tItem=doc.pageItems[i];&lt;br /&gt;    if(tItem.constructor.name=="TextFrame"){&lt;br /&gt;      var name=rundumStr(8);&lt;br /&gt;      //レガシーテキストに名前をつける&lt;br /&gt;      tItem.name=name;&lt;br /&gt;      //名前とwidth,heightの値を保存&lt;br /&gt;      itemSizeList[name]=[tItem.width,tItem.height];&lt;br /&gt;    };&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  //テキストを更新&lt;br /&gt;  doc.legacyTextItems.convertToNative();&lt;br /&gt;  &lt;br /&gt;  //配列を作る&lt;br /&gt;  var list=[];&lt;br /&gt;  for(var j=0;j&amp;lt;doc.textFrames.length;j++){&lt;br /&gt;    var tItem2=doc.textFrames[j];&lt;br /&gt;    //縦組ならば&lt;br /&gt;    if(tItem2.orientation==TextOrientation.VERTICAL){&lt;br /&gt;      if(tItem2.height&amp;gt;itemSizeList[tItem2.name][1]*1.01){&lt;br /&gt;        list.push(tItem2);&lt;br /&gt;      };&lt;br /&gt;    //横組みならば&lt;br /&gt;    }else{&lt;br /&gt;      if(tItem2.width&amp;gt;itemSizeList[tItem2.name][0]*1.01){&lt;br /&gt;        list.push(tItem2);&lt;br /&gt;      };&lt;br /&gt;    };&lt;br /&gt;  };&lt;br /&gt;  return list;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;//ランダムな文字列を作成する&lt;br /&gt;function rundumStr(num) {&lt;br /&gt;   var outtxt = "";&lt;br /&gt;  var text = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";&lt;br /&gt;  var textSize = text.length;&lt;br /&gt;   for(var i = 0; i &amp;lt; num; i ++ ){&lt;br /&gt;     outtxt += text[Math.floor(Math.random()*textSize)];&lt;br /&gt;   }&lt;br /&gt;   return outtxt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var doc=app.activeDocument;&lt;br /&gt;var list=convertLegacyText(doc);&lt;br /&gt;if(list.length&amp;gt;0){&lt;br /&gt;  alert(list.length+"個のテキストフレームの詰めが崩れました。")&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;イラレ8で詰めが使われているファイルを開く時「テキストの更新」をせずに開き、上記スクリプトを実行する。&lt;br /&gt;すると、「convertLegacyText」functionの返り値に、サイズの変化が大きかったテキストフレームのリストを返す。&lt;br /&gt;何か処理をかけるならば、このリストのtextFrameに対し順番に処理をかける。&lt;br /&gt;&lt;br /&gt;更新前と更新後でテキストフレームを区別する方法がなかったが、name属性が空だったので、ランダムに名前をつけてやることで解決できた。&lt;br /&gt;あとの処理は考え中……。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1049559906982594402?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1049559906982594402/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1049559906982594402' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1049559906982594402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1049559906982594402'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/06/illustrator80cs2.html' title='Illustrator8.0の詰めをCS以降で検出できるか？'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-772780002739020944</id><published>2009-06-21T12:39:00.003+09:00</published><updated>2010-05-10T04:47:14.551+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><title type='text'>ExtendScriptでそのオブジェクトに使えるメソッドを表示する</title><content type='html'>例えば、Illustratorのドキュメントを開いて，以下を実行&lt;br /&gt;&lt;pre class="prettyprint"&gt;var doc=app.activeDocument;&lt;br /&gt;&lt;br /&gt;var docMethods=doc.reflect.methods;&lt;br /&gt;for(var i=0;i&amp;lt;docMethods.length;i++){&lt;br /&gt; $.writeln(docMethods[i]);&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;すると、ESTKのコンソールに表示される。&lt;br /&gt;&lt;blockquote&gt;close&lt;br /&gt;save&lt;br /&gt;saveAs&lt;br /&gt;print&lt;br /&gt;exportFile&lt;br /&gt;activate&lt;br /&gt;importVariables&lt;br /&gt;exportVariables&lt;br /&gt;importCharacterStyles&lt;br /&gt;importParagraphStyles&lt;br /&gt;importPrintPreset&lt;br /&gt;exportPrintPreset&lt;br /&gt;importPDFPreset&lt;br /&gt;exportPDFPreset&lt;br /&gt;imageCapture&lt;br /&gt;undefined&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-772780002739020944?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/772780002739020944/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=772780002739020944' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/772780002739020944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/772780002739020944'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/06/extendscript.html' title='ExtendScriptでそのオブジェクトに使えるメソッドを表示する'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5018328875065803226</id><published>2009-06-03T12:49:00.005+09:00</published><updated>2010-05-10T04:48:35.464+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><title type='text'>今スクリプトをどこから起動しているか調べる</title><content type='html'>&lt;pre class="prettyprint"&gt;alert(BridgeTalk.appName);&lt;/pre&gt;&lt;br /&gt;これを保存して、Photoshopの　ファイルメニュー → スクリプト から起動すると&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SiXzKwfU4UI/AAAAAAAAAII/yMQnFssjbs8/s1600-h/appname_ps.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SiXzKwfU4UI/AAAAAAAAAII/yMQnFssjbs8/s320/appname_ps.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5342943899085496642" /&gt;&lt;/a&gt;&lt;br /&gt;ExtendScript Toolkitから起動すると&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SiXzKvpw4BI/AAAAAAAAAIA/6nC4jBXrz-I/s1600-h/appname_estk.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SiXzKvpw4BI/AAAAAAAAAIA/6nC4jBXrz-I/s320/appname_estk.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5342943898860838930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;※6:21追記：この設定、あまり意味ないかも。&lt;br /&gt;app.nameとの違いは、app.nameだと "ExtendScript Toolkit" と返すけれど&lt;br /&gt;BridgeTalk.appNameは "estoolkit" と返します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5018328875065803226?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5018328875065803226/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5018328875065803226' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5018328875065803226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5018328875065803226'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/06/blog-post.html' title='今スクリプトをどこから起動しているか調べる'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NsZ3kbgYLEw/SiXzKwfU4UI/AAAAAAAAAII/yMQnFssjbs8/s72-c/appname_ps.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4676934306772599324</id><published>2009-05-26T10:44:00.004+09:00</published><updated>2010-05-10T04:49:04.911+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustrator Scriptでアラートダイアログを出さないようにする。</title><content type='html'>Illustrator CS3にて確認。&lt;br /&gt;アラートを出さないようにするには、&lt;br /&gt;&lt;pre class="prettyprint"&gt;app.userInteractionLevel=UserInteractionLevel.DONTDISPLAYALERTS;&lt;/pre&gt;&lt;br /&gt;アラートを出すようにするには&lt;br /&gt;&lt;pre class="prettyprint"&gt;app.userInteractionLevel=UserInteractionLevel.DISPLAYALERTS;&lt;/pre&gt;※アラート回避処理をしたスクリプトには、必ず末尾にアラートを出す処理を書いて元に戻しておくこと。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4676934306772599324?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4676934306772599324/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4676934306772599324' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4676934306772599324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4676934306772599324'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/05/illustrator-script.html' title='Illustrator Scriptでアラートダイアログを出さないようにする。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6385760652912858310</id><published>2009-05-25T22:04:00.003+09:00</published><updated>2010-05-10T04:49:21.293+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>ExtendScriptでディレクトリを掘り下がる</title><content type='html'>ディレクトリ降下は再帰処理の基本。&lt;br /&gt;ExtendScriptのコンソールに、あるフォルダ以下にある全てのファイルのパスを表示します。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var folderObj = Folder.selectDialog("フォルダを選択してください");&lt;br /&gt;if(folderObj){&lt;br /&gt;  (function(folderObj){&lt;br /&gt;    var fileList = folderObj.getFiles();&lt;br /&gt;    for(var i=0;i&amp;lt;fileList.length;i++){&lt;br /&gt;      if(fileList[i].constructor.name=="Folder"){&lt;br /&gt;        arguments.callee(fileList[i]);&lt;br /&gt;      }else{&lt;br /&gt;        $.writeln(fileList[i].fsName);&lt;br /&gt;      };&lt;br /&gt;    }&lt;br /&gt;  })(folderObj);&lt;br /&gt;};&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6385760652912858310?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6385760652912858310/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6385760652912858310' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6385760652912858310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6385760652912858310'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/05/extendscript.html' title='ExtendScriptでディレクトリを掘り下がる'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-66389073793449772</id><published>2009-05-23T13:43:00.010+09:00</published><updated>2010-05-10T04:49:35.333+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>文字から文字コードを得る、文字コードを文字に戻す</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Shd_mInd8sI/AAAAAAAAAHg/9Te9SD1Ij_s/s1600-h/charcode.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 263px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Shd_mInd8sI/AAAAAAAAAHg/9Te9SD1Ij_s/s320/charcode.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5338876176395793090" /&gt;&lt;/a&gt;InDesign CS3のテキストフレームの文字からUnicodeを表示し、そのUnicodeを文字に戻します。&lt;br /&gt;&lt;pre class="prettyprint"&gt;//選択テキストフレームの文字&lt;br /&gt;var myChar = app.activeDocument.selection[0].characters[0].contents;&lt;br /&gt;alert("文字："+myChar);&lt;br /&gt;&lt;br /&gt;//charCodeAtで数値を取って16進数で表示&lt;br /&gt;var myCharCode = myChar.charCodeAt(0).toString(16);&lt;br /&gt;alert("文字ユニコード："+myCharCode);&lt;br /&gt;&lt;br /&gt;//文字コードを数値に戻す&lt;br /&gt;var c = parseInt("0x"+myCharCode);&lt;br /&gt;//fromCharCodeで文字に戻す&lt;br /&gt;var myCharFromCode = String.fromCharCode(c);&lt;br /&gt;alert("ユニコード"+myCharCode+"の文字は："+myCharFromCode);&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/Shd_mQ3pUII/AAAAAAAAAHo/VHU-K5H84dU/s1600-h/charcode1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/Shd_mQ3pUII/AAAAAAAAAHo/VHU-K5H84dU/s320/charcode1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5338876178611130498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/Shd_maFHpmI/AAAAAAAAAHw/haWrSB8Bj6U/s1600-h/charcode2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/Shd_maFHpmI/AAAAAAAAAHw/haWrSB8Bj6U/s320/charcode2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5338876181083563618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Shd_mos5haI/AAAAAAAAAH4/-0FKsie_RnQ/s1600-h/charcode3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/Shd_mos5haI/AAAAAAAAAH4/-0FKsie_RnQ/s320/charcode3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5338876185008506274" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-66389073793449772?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/66389073793449772/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=66389073793449772' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/66389073793449772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/66389073793449772'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/05/blog-post.html' title='文字から文字コードを得る、文字コードを文字に戻す'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NsZ3kbgYLEw/Shd_mInd8sI/AAAAAAAAAHg/9Te9SD1Ij_s/s72-c/charcode.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6431411374618990148</id><published>2009-05-05T04:13:00.010+09:00</published><updated>2009-05-07T02:32:28.380+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>XAMPP for MacOS X で PEAR を使ったphpが動かない件。</title><content type='html'>php勉強中。&lt;br /&gt;&lt;br /&gt;動かしてたサンプルに PEAR の HTML_QuickForm というライブラリを使ったものがあったが、それを XAMPP の htdocs に入れても動かない。&lt;br /&gt;なのでいろいろ調べた。XAMPP 1.0.1。&lt;br /&gt;&lt;br /&gt;その１：PEARのコマンドは、/Applications/XAMPP/xamppfiles/bin/pear にある。これで HTML_QuickForm をインストール。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ sudo su&lt;br /&gt;Password:********&lt;br /&gt;# /Applications/XAMPP/xamppfiles/bin/pear install HTML_QuickForm&lt;/pre&gt;&lt;br /&gt;でもやっぱり動かない……。&lt;br /&gt;&lt;br /&gt;その２：php.iniの、PEARのパスが間違ってた。&lt;br /&gt;/Applications/XAMPP/etc/php.ini のいちばん最後、&lt;br /&gt;&lt;pre class="prettyprint"&gt;include_path=".:/Applications/xampp/xamppfiles/lib/php"&lt;/pre&gt;を&lt;br /&gt;&lt;pre class="prettyprint"&gt;include_path=".:/Applications/xampp/xamppfiles/lib/php/pear"&lt;/pre&gt;にする。これでPEARのライブラリが呼び出せる。&lt;br /&gt;&lt;br /&gt;追記0507: php.iniの内容はそのままで、phpのライブラリを読み込んでいるところを&lt;br /&gt;&lt;pre class="prettyprint"&gt;require_once("HTML/QuickForm.php");&lt;/pre&gt;から&lt;br /&gt;&lt;pre class="prettyprint"&gt;require_once("pear/HTML/QuickForm.php");&lt;/pre&gt;にした方が良い。他で読み込んでるものがあるかも知れないし……。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6431411374618990148?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6431411374618990148/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6431411374618990148' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6431411374618990148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6431411374618990148'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/05/xampp-for-macos-x-pear-wo.html' title='XAMPP for MacOS X で PEAR を使ったphpが動かない件。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3187885462258498028</id><published>2009-04-30T12:44:00.009+09:00</published><updated>2010-05-10T04:50:27.660+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesign Scriptでアラートダイアログを出さないようにする。</title><content type='html'>ちょっと嵌ったのでメモ。&lt;br /&gt;&lt;pre class="prettyprint"&gt;app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;&lt;/pre&gt;&lt;br /&gt;これをスクリプトの最初に宣言する。&lt;br /&gt;app.scriptPreferences.userInteractionLevelで宣言することができるのは、以下の３種類。&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;UserInteractionLevels.INTERACT_WITH_ALERTS&lt;br/&gt;警告のダイアログのみ表示する。&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;UserInteractionLevels.INTERACT_WITH_ALL&lt;br/&gt;全てのダイアログを表示する。&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;UserInteractionLevels.NEVER_INTERACT&lt;br/&gt;全てのダイアログを表示しない。&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;使った後は、スクリプトの最後に&lt;br /&gt;&lt;pre class="prettyprint"&gt;app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;&lt;/pre&gt;を書いて元に戻しておかないと、他でアラートを使うスクリプトを走らせた時に、アラートが出なくなってしまうので注意。&lt;br /&gt;&lt;br /&gt;ちなみにPhotoshopだと&lt;br /&gt;&lt;pre class="prettyprint"&gt;app.displayDialogs = DialogModes.NO;&lt;/pre&gt;を使う。&lt;br /&gt;&lt;a href="http://kanemu1117nc.blogspot.com/2009/05/illustrator-script.html"&gt;Illustratorの場合はこちら&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3187885462258498028?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3187885462258498028/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3187885462258498028' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3187885462258498028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3187885462258498028'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/04/indesign-script.html' title='InDesign Scriptでアラートダイアログを出さないようにする。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1399935319142996308</id><published>2009-04-30T04:18:00.011+09:00</published><updated>2010-05-10T04:50:44.130+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='正規表現'/><title type='text'>replaceの検索結果をさらにreplaceする。</title><content type='html'>JavaScriptのreplaceの置換文字列のところにfunctionを書けるよ、という話。&lt;br /&gt;&lt;a href="https://developer.mozilla.org/Ja/Core_JavaScript_1.5_Reference/Global_Objects/String/Replace"&gt;replace - MDC&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;例えば、テキスト内の「1000円」「2000円」といった数字全てにカンマを入れたいという場合&lt;br /&gt;&lt;pre class="prettyprint"&gt;function plusCamma(str){&lt;br /&gt; str = str.replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,');&lt;br /&gt; return str;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var text="2009年お正月セール、当店平日価格23000円の品、特価9999円！";&lt;br /&gt;text=text.replace(/[0-9]+(?=円)/g, plusCamma);&lt;br /&gt;alert(text);&lt;/pre&gt;と書ける。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SfipDs2HhKI/AAAAAAAAAHY/UQqYuWpSrkA/s1600-h/replaceFunc.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 110px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SfipDs2HhKI/AAAAAAAAAHY/UQqYuWpSrkA/s320/replaceFunc.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5330196040035828898" /&gt;&lt;/a&gt;&lt;br /&gt;置換文字列のfunctionに引数の()は入れない。&lt;br /&gt;でもそれだと、検索結果全体にしか変換をかけられない。&lt;br /&gt;キャプチャした$1、$2なんかを利用したい時はどうすればいいんだろう？&lt;br /&gt;&lt;br /&gt;そう思って調べてみた。&lt;br /&gt;ExtendScript Toolkitで、$.writelnを使ってコンソールに出してみる。&lt;br /&gt;&lt;pre class="prettyprint"&gt;function test(str){&lt;br /&gt; var ary=[];&lt;br /&gt; for(var i=0;i&amp;lt;arguments.length;i++) ary.push(arguments[i])&lt;br /&gt; $.writeln("数："+arguments.length+"、引数："+ary.join(" || "));&lt;br /&gt; return "＜変換済み＞";&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var text="2009年お正月セール、当店平日価格23000円の品、特価9999円！";&lt;br /&gt;text=text.replace(/([0-9]+)(円)/g, test);&lt;br /&gt;$.writeln(text);&lt;/pre&gt;&lt;br /&gt;結果はこんな風。&lt;br /&gt;&lt;blockquote&gt;数：5、引数：23000円 || 23000 || 円 || 18 || 2009年お正月セール、当店平日価格23000円の品、特価9999円！&lt;br /&gt;数：5、引数：9999円 || 9999 || 円 || 29 || 2009年お正月セール、当店平日価格＜変換済み＞の品、特価9999円！&lt;br /&gt;2009年お正月セール、当店平日価格＜変換済み＞の品、特価＜変換済み＞！&lt;br /&gt;undefined&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;argumentsの中に順番に、$0、$1、$2、検索された文字の位置、置換される前のテキスト全体が入って来てる。&lt;br /&gt;なので$1を使いたい場合は、arguments[1]を拾えば良い。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;function plusCamma2(str){&lt;br /&gt; var str=arguments[1];&lt;br /&gt; str = str.replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,')&lt;br /&gt;       +arguments[2];&lt;br /&gt; return str;&lt;br /&gt;};&lt;br /&gt;var text="2009年お正月セール、当店平日価格23000円の品、特価9999円！";&lt;br /&gt;text=text.replace(/([0-9]+)(円)/g, plusCamma2);&lt;br /&gt;alert(text);&lt;/pre&gt;のように書いても良い。という事。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1399935319142996308?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1399935319142996308/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1399935319142996308' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1399935319142996308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1399935319142996308'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/04/replacereplace.html' title='replaceの検索結果をさらにreplaceする。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NsZ3kbgYLEw/SfipDs2HhKI/AAAAAAAAAHY/UQqYuWpSrkA/s72-c/replaceFunc.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1382776945108416724</id><published>2009-04-24T21:06:00.005+09:00</published><updated>2010-05-10T04:50:59.169+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignのスクリプトをキーボードショートカットで使う。</title><content type='html'>今日初めて知ったのですが、InDesignのスクリプトにキーボードショートカットを割り当てられるんですね。&lt;br /&gt;「編集→キーボードショートカット」を開いてみると…&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SfGr_fDabUI/AAAAAAAAAHQ/7oZeQMSybtM/s1600-h/script_shotcut.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 301px; height: 320px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SfGr_fDabUI/AAAAAAAAAHQ/7oZeQMSybtM/s320/script_shotcut.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5328228941311929666" /&gt;&lt;/a&gt;ほら、インストールしてあるスクリプトがずらーーーっと出る。&lt;br /&gt;よく使うスクリプトにショートカットを割り当てて、バリバリ仕事をこなしましょう！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1382776945108416724?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1382776945108416724/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1382776945108416724' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1382776945108416724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1382776945108416724'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/04/indesign.html' title='InDesignのスクリプトをキーボードショートカットで使う。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NsZ3kbgYLEw/SfGr_fDabUI/AAAAAAAAAHQ/7oZeQMSybtM/s72-c/script_shotcut.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8457869033479455789</id><published>2009-04-19T19:15:00.015+09:00</published><updated>2011-02-05T12:44:57.550+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>InDesignCS4でライブラリに登録すると画像のタグが消える？</title><content type='html'>メモ、というかヘルプ！&lt;br /&gt;InDesign CS4でライブラリに登録した画像フレームの、XMLタグが飛んでしまう…。&lt;br /&gt;&lt;br /&gt;具体的には次の通り。InDesign、バージョン6.0.1。&lt;br /&gt;まず、たくさんの画像フレームを作り、それぞれに別々のタグを設定する。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/Ser6BS8c0yI/AAAAAAAAAG4/7EdwR5Aenhc/s1600-h/tag_ga_kieru1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/Ser6BS8c0yI/AAAAAAAAAG4/7EdwR5Aenhc/s320/tag_ga_kieru1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5326344409491231522" /&gt;&lt;/a&gt;&lt;br /&gt;それをライブラリに登録する。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/Ser6FZOm-XI/AAAAAAAAAHA/hpRnd8X1wTE/s1600-h/tag_ga_kieru2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/Ser6FZOm-XI/AAAAAAAAAHA/hpRnd8X1wTE/s320/tag_ga_kieru2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5326344479897483634" /&gt;&lt;/a&gt;&lt;br /&gt;元のドキュメントに戻すと…&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Ser6K7TTLsI/AAAAAAAAAHI/rF2gjngKXg8/s1600-h/tag_ga_kieru3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/Ser6K7TTLsI/AAAAAAAAAHI/rF2gjngKXg8/s320/tag_ga_kieru3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5326344574943309506" /&gt;&lt;/a&gt;&lt;br /&gt;左１行目、下4つの画像からタグが飛んでしまっている！&lt;br /&gt;抜ける部分は同じライブラリのアセットなら同じだけれど、何度も登録するとその度にいくつかタグが飛ぶ。&lt;br /&gt;これはXMLで自動組してる会社にとっては死活問題なのでは…？？？&lt;br /&gt;&lt;br /&gt;追記0420：コメントにて、せうぞー様より再現しないというご報告をいただきました。個人の設定に依存する現象かも知れません。&lt;br /&gt;&lt;br /&gt;追記0424：すいません、忙しくて追記遅れました。&lt;br /&gt;匿名様より再現したとのコメントを頂きました。&lt;br /&gt;原因はわかりませんが自分だけの現象ではないようですので、ブログのエントリは残しておこうと思います。何かわかりましたらまたエントリを書くつもりです。&lt;br /&gt;&lt;br /&gt;追記20100108：Adobeのいわもとさんが自ブログでCS4の問題として紹介されてました。&lt;br /&gt;&lt;a href="http://blogs.adobe.com/iwamoto/2010/01/post_7.html"&gt;ライブラリに登録するとグラフィックフレームからタグが無くなる - いわもとぶろぐ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;追記20110205：一度、解消したというエントリを書いたのですが、間違っていました。&lt;br /&gt;その後検証しないまま、そちらのエントリに打ち消し線と注意書きをして残していたのですが、誤解されるかもしれないのでエントリ削除しました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8457869033479455789?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8457869033479455789/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8457869033479455789' title='9 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8457869033479455789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8457869033479455789'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/04/indesigncs4.html' title='InDesignCS4でライブラリに登録すると画像のタグが消える？'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/Ser6BS8c0yI/AAAAAAAAAG4/7EdwR5Aenhc/s72-c/tag_ga_kieru1.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3821918211722975124</id><published>2009-04-16T01:35:00.007+09:00</published><updated>2009-04-16T02:36:06.891+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CentOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>VirtualBox上のCentOSに接続するにはブリッジにすれば良いのでした。</title><content type='html'>&lt;a href="http://kanemu1117nc.blogspot.com/2009/04/virtualboxcentos-53http.html"&gt;前の記事&lt;/a&gt;を読んだ会社の先輩（php師匠）から一言&lt;br /&gt;「kanemuの記事わけわかんない。なんでブリッジでやんないの？」&lt;br /&gt;と言われる。？？？&lt;br /&gt;&lt;br /&gt;先輩、僕が使ってたMacBookProのVirtualBoxを立ち上げさせて、キーを叩きはじめる。&lt;br /&gt;&lt;br /&gt;1. CentOSのバーチャルマシンを選択し、設定→ネットワーク→設定 から&lt;br /&gt;割当てを「ブリッジ ネットワーク」にする。&lt;br /&gt;&lt;br /&gt;2. マシンを起動し、rootでログイン。&lt;br /&gt;&lt;pre class="prettyprint"&gt;# ifconfig&lt;/pre&gt;を入力してIPアドレスを確認。「192.168.2.4」になっていた。&lt;br /&gt;&lt;br /&gt;3. Macのターミナルから&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ssh &amp;lt;ユーザ名&amp;gt;@192.168.2.4&lt;/pre&gt;でログインして普通に入れた。&lt;br /&gt;http://192.168.2.4/を開けば、apacheへも難なく繋がる…。&lt;br /&gt;&lt;br /&gt;？？？？？&lt;br /&gt;「仮想マシンへのログインで苦労した事ないからさ、&lt;br /&gt;　むしろこの方法でログインできるのを見つけてくる方が関心するわ」&lt;br /&gt;だそうです。&lt;br /&gt;というわけで、無駄な苦労をしていたというオチでした。はぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3821918211722975124?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3821918211722975124/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3821918211722975124' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3821918211722975124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3821918211722975124'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/04/virtualboxcentos.html' title='VirtualBox上のCentOSに接続するにはブリッジにすれば良いのでした。'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-151910620722441202</id><published>2009-04-13T03:21:00.021+09:00</published><updated>2011-09-27T10:37:28.836+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CentOS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>VirtualBoxにCentOS 5.3をインストールして、ローカルからsshでアクセスできるようになるまで</title><content type='html'>MacBook Pro、MacOS X 10.5.6のVirtualBox2.2にCentOS 5.3をインストールしました。&lt;br /&gt;走り書きなので完全にメモ用です。いずれ分かりやすくまとめ直すかも……。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.centos.org/"&gt;CentOS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ふつうにDVDイメージをダウンロードするとかなり重いので、BitTrrentクライアントをインストール。&lt;br /&gt;自分はTransmissionというのを入れた。&lt;br /&gt;&lt;a href="http://www.transmissionbt.com/download.php"&gt;Transmission&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://isoredirect.centos.org/centos/5/isos/x86_64/"&gt;http://isoredirect.centos.org/centos/5/isos/x86_64/&lt;/a&gt;&lt;br /&gt;から適当なミラーに入り、CentOS-5.3-x86_64-bin-DVD.torrentをダウンロード。&lt;br /&gt;それをTransmissionのウィンドウにドラッグ。addを押すとダウンロードが始まる。&lt;br /&gt;たぶん普通にDVDイメージを落とすより速い。&lt;br /&gt;&lt;br /&gt;VirtualBoxの新規仮想マシンを作成。&lt;br /&gt;オペレーティングシステムはLinux、バージョンはLinux 2.6にする。（RedHatのがいいかも）&lt;br /&gt;設定→ストレージ→CD/DVD-ROM　を開き、「CD/DVDドライブのマウント」にチェック。&lt;br /&gt;ISOイメージファイルを選び、先にダウンロードしたDVDイメージを選択する。&lt;br /&gt;これでDVDを焼かずにインストールできる。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20090403/327762/"&gt;ITPro／インストール完全ガイド：CentOS 5.3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://centossrv.com/"&gt;CentOSで自宅サーバー構築&lt;/a&gt;&lt;br /&gt;等を見ながらインストール。&lt;br /&gt;ブログでは、&lt;a href="http://applelife100.blogspot.com/2007/07/centos-5php1.html"&gt;林檎生活100: CentOS 5でつくるPHP開発サーバ．#1&lt;/a&gt;,&lt;a href="http://applelife100.blogspot.com/2007/07/centos-5php2.html"&gt;#2&lt;/a&gt;,&lt;a href="http://applelife100.blogspot.com/2007/07/centos-5php3.html"&gt;#3&lt;/a&gt;,&lt;a href="http://applelife100.blogspot.com/2007/08/centos-5php4.html"&gt;#4&lt;/a&gt;,&lt;a href="http://applelife100.blogspot.com/2007/08/centos-5php5.html"&gt;#5&lt;/a&gt;&lt;br /&gt;がとても役に立った。&lt;br /&gt;デフォルトでも良いけれど、たぶん開発環境(gcc)だけは入れておいた方が良い。&lt;br /&gt;&lt;br /&gt;httpを起動する&lt;br /&gt;&lt;pre class="prettyprint"&gt;# yum -y install httpd&lt;br /&gt;# /sbin/chkconfig httpd on&lt;br /&gt;# /etc/rc.d/init.d/httpd start&lt;/pre&gt;&lt;br /&gt;ドキュメントディレクトリのオーナーを変更&lt;br /&gt;&lt;pre class="prettyprint"&gt;# chown -R &amp;lt;ユーザ名&amp;gt; /var/www/html&lt;/pre&gt;&lt;br /&gt;この状態でゲストOSから&lt;br /&gt;http://localhost/&lt;br /&gt;でcentOSのapacheページが見られる。&lt;br /&gt;&lt;br /&gt;ホストOS側からssh接続できるようにする。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/masaking/20080823/1219501272"&gt;VirtualBox on Mac OS X で、ゲスト OS に ssh/http アクセスするまで - 腹八分目&lt;/a&gt;&lt;br /&gt;を参考にしました。&lt;br /&gt;ゲストのCentOSを終了して、Macのターミナルから次を設定。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/&lt;br /&gt;e1000/0/LUN#0/Config/guestssh/Protocol" TCP&lt;br /&gt;$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/&lt;br /&gt;e1000/0/LUN#0/Config/guestssh/GuestPort" 22&lt;br /&gt;$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/&lt;br /&gt;e1000/0/LUN#0/Config/guestssh/HostPort" 50022&lt;br /&gt;$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/&lt;br /&gt;e1000/0/LUN#0/Config/guesthttp/Protocol" TCP&lt;br /&gt;$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/&lt;br /&gt;e1000/0/LUN#0/Config/guesthttp/GuestPort" 80&lt;br /&gt;$ VBoxManage setextradata "CentOS" "VBoxInternal/Devices/&lt;br /&gt;e1000/0/LUN#0/Config/guesthttp/HostPort" 50080&lt;/pre&gt;&lt;br /&gt;ここでハマったのが、「e1000」の部分。ここはVirtualBox側から見るネットワークアダプタの名前。参考ブログ側だと「pcnet」となっているけれど、自分の環境ではアダプタタイプがIntel PRO/1000 MT Desktop (82540EM) となっていて、この場合は「e1000」と書かなきゃいけない。&lt;br /&gt;「"CentOS"」は自分の仮想マシンの名前。&lt;br /&gt;&lt;a href="http://kanemu1117nc.blogspot.com/2009/04/virtualboxcentos.html"&gt;※もっと簡単な方法もあります！&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;これで、Macのターミナルからssh接続で&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ssh -p 50022 -l &amp;lt;ユーザ名&amp;gt;localhost&lt;/pre&gt;&lt;br /&gt;でアクセスできる。&lt;br /&gt;&lt;br /&gt;CyberduckでファイルをUPする場合は、&lt;br /&gt;プロトコル：SFTP&lt;br /&gt;サーバ：localhost&lt;br /&gt;ポート:50022&lt;br /&gt;で接続できる。&lt;br /&gt;&lt;br /&gt;http://localhost:50080/&lt;br /&gt;をブラウザで開けば、さっきのapacheのページが…開かない。&lt;br /&gt;これはCentOS側のファイヤーウォールの問題だった。CentOSのシステム→管理→セキュリティレベルとファイヤーウォールの設定　から、ファイヤーウォールを無効にする。&lt;br /&gt;&lt;br /&gt;ログイン時にxWindowを立ち上げないようにする。&lt;br /&gt;viで/etc/inittab を編集。&lt;br /&gt;&lt;pre class="prettyprint"&gt;# vi /etc/inittab&lt;/pre&gt;id:5:initdefault の行を、id:3:initdefaultにして保存。&lt;br /&gt;xWindowを立ち上げたいときは、&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ startx&lt;/pre&gt;を入力する。&lt;br /&gt;仮想マシンの電源を落とす。&lt;br /&gt;&lt;pre class="prettyprint"&gt;# shutdown -h now&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-151910620722441202?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/151910620722441202/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=151910620722441202' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/151910620722441202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/151910620722441202'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/04/virtualboxcentos-53http.html' title='VirtualBoxにCentOS 5.3をインストールして、ローカルからsshでアクセスできるようになるまで'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3849870724954832248</id><published>2009-02-26T02:29:00.007+09:00</published><updated>2009-02-26T02:38:40.060+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><title type='text'>フレームグリッドをJPEGで書き出すと上下に余白ができる？</title><content type='html'>InDesign CS3,CS4にて現象を確認。&lt;br /&gt;&lt;br /&gt;フレームグリッドを作り、色をつけてJPEG書き出しします。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SaWASyXpk7I/AAAAAAAAAGg/gR1LSVMxDaE/s1600-h/createjpeg.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 251px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SaWASyXpk7I/AAAAAAAAAGg/gR1LSVMxDaE/s320/createjpeg.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5306788796172964786" /&gt;&lt;/a&gt;&lt;br /&gt;出たJPEGが、これ。&lt;br /&gt;わかりにくければ、ダウンロードして開いてみて下さい。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SaWAs2sXPSI/AAAAAAAAAGo/S_IVSRC9mao/s1600-h/flamegrid1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 170px; height: 99px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SaWAs2sXPSI/AAAAAAAAAGo/S_IVSRC9mao/s400/flamegrid1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5306789244010183970" /&gt;&lt;/a&gt;？？？&lt;br /&gt;ちなみに、タテ組みで出しても、上下に余白ができます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SaWBBDM5bMI/AAAAAAAAAGw/KPlGZTUIymc/s1600-h/flamegrid2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 79px; height: 173px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SaWBBDM5bMI/AAAAAAAAAGw/KPlGZTUIymc/s400/flamegrid2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5306789590965251266" /&gt;&lt;/a&gt;テキストフレーム、画像フレームならば余白はできません。&lt;br /&gt;これはどういう現象？謎だ……。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3849870724954832248?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3849870724954832248/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3849870724954832248' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3849870724954832248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3849870724954832248'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/02/jpeg.html' title='フレームグリッドをJPEGで書き出すと上下に余白ができる？'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NsZ3kbgYLEw/SaWASyXpk7I/AAAAAAAAAGg/gR1LSVMxDaE/s72-c/createjpeg.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7675920626804145980</id><published>2009-02-23T06:08:00.008+09:00</published><updated>2010-05-10T04:51:39.401+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustratorのページ上のアイテムをeachする</title><content type='html'>&lt;pre class="prettyprint"&gt;Object.prototype.eachItems=function(funcs){&lt;br /&gt;    //Document.pageItemsの時はgroup内のものを除外&lt;br /&gt;    var items;&lt;br /&gt;    if(this.hasOwnProperty("pageItems")){&lt;br /&gt;      items=[];&lt;br /&gt;      var ps=this.pageItems;&lt;br /&gt;      for(var i=0;i&amp;lt;ps.length;i++){&lt;br /&gt;        if(ps[i].parent.typename!="GroupItem") items.push(ps[i]);&lt;br /&gt;        }&lt;br /&gt;    }else if(this instanceof Array){&lt;br /&gt;      items=this;&lt;br /&gt;    }else{&lt;br /&gt;      items=[this];&lt;br /&gt;    };&lt;br /&gt;    //引数をArrayにする&lt;br /&gt;    var fn=[];&lt;br /&gt;    for(var f=0;f&amp;lt;arguments.length;f++){&lt;br /&gt;      fn.push(arguments[f]);&lt;br /&gt;      };&lt;br /&gt;    //内部関数&lt;br /&gt;    (function(items,fn){&lt;br /&gt;      for(var i=0;i&amp;lt;items.length;i++){&lt;br /&gt;        var item=items[i];&lt;br /&gt;        if(item.hasOwnProperty("pageItems")){&lt;br /&gt;          var groupItems=item.pageItems;&lt;br /&gt;          arguments.callee(groupItems,fn);&lt;br /&gt;          }else{&lt;br /&gt;          for(var j=0;j&amp;lt;fn.length;j++){&lt;br /&gt;            fn[j](item);&lt;br /&gt;            }&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;      })(items,fn);&lt;br /&gt;    };  &lt;br /&gt;&lt;br /&gt;function hoge(obj){&lt;br /&gt;  if(obj.constructor.name=="TextFrame"){&lt;br /&gt;    obj.contents="テキストの中身を入れ替えます";&lt;br /&gt;    };&lt;br /&gt;  };&lt;br /&gt;function huga(obj){&lt;br /&gt;  $.writeln(obj.typename);&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;app.activeDocument.eachItems(&lt;br /&gt;  hoge,huga&lt;br /&gt;  );&lt;/pre&gt;Illustrator CS3にて動作確認。&lt;br /&gt;この間から昔のgroopLoopを引っ張ってごにょごにょやってて、やっと書けたので公開。&lt;br /&gt;&lt;br /&gt;Illustratorの図版修正はほぼ自分の仕事になっています。やっててすごくめんどくさい繰り返し作業（全角数字を半角にツメるとか、文字を置換するとか…）を見つけたとき、スクリプトを書いて処理したいなーと思うのですが、&lt;br /&gt;時間さえかければたいていのスクリプトは書ける自信はあるけれど、締め切りは常に迫っていて、スクリプトを書くのに１時間かけていたら意味がない。悶々としながらひたすら作業をくり返すわけです。&lt;br /&gt;単機能の書き捨てスクリプトなら、10分で書けるようにならなきゃ！&lt;br /&gt;&lt;br /&gt;方針としては、pageItemごと、TextFlameとかPathItemとかの処理を書いてfunctionにする。それだけなら大した時間はかからないので、その上でeachItemsの引数にfunctionを渡してやる、functionはいくつ渡してもいい。&lt;br /&gt;それで、そういう小さいコードをたくさん書いて保持しておけば…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7675920626804145980?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7675920626804145980/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7675920626804145980' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7675920626804145980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7675920626804145980'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/02/illustratoreach.html' title='Illustratorのページ上のアイテムをeachする'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2286740348281499746</id><published>2009-02-21T23:44:00.008+09:00</published><updated>2010-05-10T04:51:56.147+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>evalを使わずにテキストになった配列をArrayに戻す</title><content type='html'>new Function を使います。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var aryText="[\"チョウ\",\"ガ\",\"トンボ\",\"ハチ\",\"カブトムシ\"]";&lt;br /&gt;alert(aryText[4]);  // &lt;-  ウ&lt;br /&gt;&lt;br /&gt;new Function("return ary="+aryText)();&lt;br /&gt;alert(ary.length);  // &lt;-  5&lt;br /&gt;alert(ary[4]);   // &lt;-  カブトムシ&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2286740348281499746?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2286740348281499746/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2286740348281499746' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2286740348281499746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2286740348281499746'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/02/evalarray.html' title='evalを使わずにテキストになった配列をArrayに戻す'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1181449693925114191</id><published>2009-02-17T01:46:00.023+09:00</published><updated>2010-05-10T04:52:09.992+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>pageItemsとallPageItems</title><content type='html'>大間違いをしてたようです。お詫びエントリ。&lt;br /&gt;昨年9月に描いた&lt;a href="http://kanemu1117nc.blogspot.com/2008/09/blog-post.html"&gt;グループをさかのぼれ&lt;/a&gt;で、InDesignのグループ見つけたらさらにその中を調べる、という処理を書きましたが…&lt;span style="font-weight:bold;"&gt;InDesignでallPageItemsを使うのであれば、そんな処理はいらない&lt;/span&gt;ようです。&lt;br /&gt;&lt;br /&gt;実験。InDesignはCS3。&lt;br /&gt;まず新規ドキュメントに、てきとうにいろいろなアイテムを10個作り、それの中から３つグループを作ります。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SZme9ufg1VI/AAAAAAAAAF4/0OrZiPso9Hk/s1600-h/pageItems.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 309px; height: 320px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SZme9ufg1VI/AAAAAAAAAF4/0OrZiPso9Hk/s320/pageItems.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5303444819494884690" /&gt;&lt;/a&gt;&lt;br /&gt;それで、さらにその中の２つのグループをグループします。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SZmfiZt_DtI/AAAAAAAAAGA/2s5xAHKeSm4/s1600-h/pageItems2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 309px; height: 320px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SZmfiZt_DtI/AAAAAAAAAGA/2s5xAHKeSm4/s320/pageItems2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5303445449573600978" /&gt;&lt;/a&gt;&lt;br /&gt;準備完了。allPageItemsの中を調べてみます。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var objs=app.activeDocument.allPageItems;&lt;br /&gt;alert(objs+"\n"+objs.length);&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SZsgOt08M5I/AAAAAAAAAGI/CgET6qeR87w/s1600-h/allPageItems_alert.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 142px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SZsgOt08M5I/AAAAAAAAAGI/CgET6qeR87w/s320/allPageItems_alert.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5303868423350793106" /&gt;&lt;/a&gt;&lt;br /&gt;14個返ってきます…&lt;br /&gt;allPageItemsは、そのドキュメントの&lt;span style="font-weight:bold;"&gt;Groupを含めた、全てのアイテムの配列を返している&lt;/span&gt;ようです。なのでグループを含めない数は、constructor.nameがGroup以外のものを数えればOK。&lt;br /&gt;&lt;br /&gt;ところで、pageItemsだったらどうでしょう？&lt;br /&gt;&lt;pre class="prettyprint"&gt;var objs=app.activeDocument.pageItems;&lt;br /&gt;alert(objs+"\n"+objs.length);&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SZsir8BAy2I/AAAAAAAAAGQ/SVvU7PhYwDE/s1600-h/pageItems_alert.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SZsir8BAy2I/AAAAAAAAAGQ/SVvU7PhYwDE/s320/pageItems_alert.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5303871124398984034" /&gt;&lt;/a&gt;？？？&lt;br /&gt;pageItemsだと個数は4。ドキュメントの上のアイテムを（グループを１つとして）返してるようなんですが、&lt;span style="font-weight:bold;"&gt;配列じゃなくpageItemsってオブジェクトを返してくる。&lt;/span&gt;&lt;br /&gt;もうちょっと調べてみます。ここからはalertなしで。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var objs=app.activeDocument.pageItems;&lt;br /&gt;$.writeln(objs.properties.toSource());&lt;/pre&gt;とやろうとしたら、「エラー: オブジェクトはプロパティまたはメソッド 'properties' をサポートしていません」と出るので、それではと&lt;br /&gt;&lt;pre class="prettyprint"&gt;var objs=app.activeDocument.pageItems;&lt;br /&gt;for (var i in objs) {&lt;br /&gt; $.write(i+":");&lt;br /&gt; try{&lt;br /&gt;  $.writeln(objs[i])&lt;br /&gt; }catch(e){&lt;br /&gt;  $.writeln(e.toString())&lt;br /&gt; }&lt;br /&gt;};&lt;/pre&gt;だと&lt;br /&gt;&lt;blockquote&gt;length:4&lt;/blockquote&gt;しか返らない。&lt;br /&gt;&lt;pre class="prettyprint"&gt;ar objs=app.activeDocument.pageItems;&lt;br /&gt;for (var j=0;j&amp;lt;objs.length;j++) {&lt;br /&gt;  $.writeln(objs[j].getElements ());&lt;br /&gt;};&lt;/pre&gt;ならば&lt;br /&gt;&lt;blockquote&gt;[object PageItem]&lt;br /&gt;[object PageItem]&lt;br /&gt;[object PageItem]&lt;br /&gt;[object PageItem]&lt;/blockquote&gt;全部「PageItem」なんですよね。constructor.nameで分岐できない…。&lt;br /&gt;オブジェクトモデルを調べてみると、pageItemのところにgetElementsというメソッドがありました。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var objs=app.activeDocument.pageItems;&lt;br /&gt;for (var j=0;j&amp;lt;objs.length;j++) {&lt;br /&gt;  $.writeln(objs[j].getElements());&lt;br /&gt;};&lt;/pre&gt;&lt;blockquote&gt;[object Group]&lt;br /&gt;[object Rectangle]&lt;br /&gt;[object Group]&lt;br /&gt;[object TextFrame]&lt;/blockquote&gt;うん、OK。&lt;br /&gt;&lt;br /&gt;なので、&lt;a href="http://kanemu1117nc.blogspot.com/2008/09/blog-post.html"&gt;グループをさかのぼれ&lt;/a&gt;で書いたスクリプトをやるのなら、次のようになります。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "InDesign"&lt;br /&gt;selObjs=app.activeDocument.selection;&lt;br /&gt;//↓toolkitのJavaScriptコンソールに表示するよ&lt;br /&gt;$.writeln ("------Groupを1コとするなら------"+selObjs.length);&lt;br /&gt;&lt;br /&gt;var count=0;&lt;br /&gt;groupLoop=function(objs){&lt;br /&gt;  for(var i=0;i&amp;lt;objs.length;i++){&lt;br /&gt;  //↓getElements()は配列で来るみたい、constructorがArrayだった&lt;br /&gt;  var obj=objs[i].getElements()[0];&lt;br /&gt;  if(obj.constructor.name=="Group"){&lt;br /&gt;    var groupObjs=obj.pageItems;&lt;br /&gt;    //↓groupRoop(groupObjs);でいいけど一応&lt;br /&gt;    arguments.callee(groupObjs);&lt;br /&gt;    }else{&lt;br /&gt;      //↓ここの処理を書き換えれば、処理が変わる！&lt;br /&gt;      count++;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return count;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;groupLoop(selObjs);&lt;br /&gt;$.writeln ("------Groupの中を数えるなら------"+count);&lt;/pre&gt;&lt;pre class="prettyprint"&gt;#target "InDesign"&lt;br /&gt;selObjs=app.activeDocument.selection;&lt;br /&gt;&lt;br /&gt;groupLoop=function(objs){&lt;br /&gt;  for(var i=0;i&amp;lt;objs.length;i++){&lt;br /&gt;    var obj=objs[i].getElements()[0];&lt;br /&gt;    if(obj.constructor.name=="Group"){&lt;br /&gt;      var groupObjs=obj.pageItems;&lt;br /&gt;      arguments.callee(groupObjs);&lt;br /&gt;    }else{&lt;br /&gt;      if(obj.constructor.name=="TextFrame"){&lt;br /&gt;      obj.parentStory.contents="ほげ";&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;groupLoop(selObjs);&lt;/pre&gt;&lt;br /&gt;以上です。すみませんでしたm(_ _)m&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1181449693925114191?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1181449693925114191/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1181449693925114191' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1181449693925114191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1181449693925114191'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/02/pageitemsallpageitems.html' title='pageItemsとallPageItems'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/SZme9ufg1VI/AAAAAAAAAF4/0OrZiPso9Hk/s72-c/pageItems.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3242613746570081345</id><published>2009-02-04T09:27:00.004+09:00</published><updated>2009-02-04T09:53:46.551+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑記'/><title type='text'>page2009に</title><content type='html'>&lt;a href="http://mkawablog.blogspot.com/"&gt;うちの社長&lt;/a&gt;と&lt;a href="http://xmldo.blogspot.com/"&gt;開発リーダー&lt;/a&gt;が行っています。&lt;br /&gt;（株）ニューキャスト、展示ホールD、52番ブースです。&lt;br /&gt;よろしければ寄っていって下さい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3242613746570081345?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3242613746570081345/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3242613746570081345' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3242613746570081345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3242613746570081345'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/02/page2009.html' title='page2009に'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1476137546995719059</id><published>2009-01-28T08:06:00.005+09:00</published><updated>2010-05-10T04:52:27.671+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>スクリプトでタグ付きフレームの画像を削除するとタグが抜ける？</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SX-TyipYIwI/AAAAAAAAAFg/pwEhBmVGL5M/s1600-h/xmltest02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 261px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SX-TyipYIwI/AAAAAAAAAFg/pwEhBmVGL5M/s320/xmltest02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5296114183314088706" /&gt;&lt;/a&gt;&lt;br /&gt;InDesignCS3です。こんな感じに、タグ付フレームに入った画像があったとします。&lt;br /&gt;試しに、ひとつ画像を選択して、&lt;br /&gt;&lt;pre class="prettyprint"&gt;var selObj=app.activeDocument.selection[0];&lt;br /&gt;selObj.allGraphics[0].remove();&lt;/pre&gt;&lt;br /&gt;すると、画像と一緒にXMLのタグも画像フレームから外れてしまいます。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SX-TzL3hKkI/AAAAAAAAAFo/7HW_j8gPWdI/s1600-h/xmltest03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 261px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SX-TzL3hKkI/AAAAAAAAAFo/7HW_j8gPWdI/s320/xmltest03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5296114194379254338" /&gt;&lt;/a&gt;あれー…？？&lt;br /&gt;&lt;br /&gt;仕方がないんで、タグ部分をいったん退避してから削除して、フレームにもう一度結びつけ直しました。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var selObj=app.activeDocument.selection[0];&lt;br /&gt;//タグを退避させる&lt;br /&gt;var tag=selObj.associatedXMLElement;&lt;br /&gt;//タグから画像のリンクを削除&lt;br /&gt;tag.xmlAttributes[0].remove();&lt;br /&gt;//画像を削除&lt;br /&gt;selObj.allGraphics[0].remove();&lt;br /&gt;//フレームにタグを結び直す&lt;br /&gt;selObj.placeXML(tag);&lt;br /&gt;//テキストフレームになってしまうので、画像フレームに戻す&lt;br /&gt;selObj.contentType=ContentType.GRAPHIC_TYPE;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SX-TzLrYP-I/AAAAAAAAAFw/DcolHW4StFg/s1600-h/xmltest04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 261px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SX-TzLrYP-I/AAAAAAAAAFw/DcolHW4StFg/s320/xmltest04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5296114194328338402" /&gt;&lt;/a&gt;これで、とりあえずフレームにタグを残す事はできました。&lt;br /&gt;&lt;br /&gt;ただ、これはもっと上手い方法があるような気が…&lt;br /&gt;こういう場合はどこをどう削除すればいいんでしょう？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1476137546995719059?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1476137546995719059/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1476137546995719059' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1476137546995719059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1476137546995719059'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/01/blog-post.html' title='スクリプトでタグ付きフレームの画像を削除するとタグが抜ける？'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NsZ3kbgYLEw/SX-TyipYIwI/AAAAAAAAAFg/pwEhBmVGL5M/s72-c/xmltest02.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5576466677238002909</id><published>2009-01-18T02:08:00.009+09:00</published><updated>2010-05-10T04:52:43.900+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CS4'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Adobe Creative Suite 4 のインストールが「準備中」で止まる</title><content type='html'>かなり稀なケースだと思うのですが、どこかで同じトラブルが起こった時のために…。&lt;br /&gt;&lt;br /&gt;会社でAdobe Creative Suite 4 Design Standardを買ってもらったので、早速社用Macにインストールしようとした。ところが、インストーラを立ち上げて、シリアル入れて、規約に同意して、簡易インストールで、と来た所で「インストール」をクリックしても『インストールを準備しています』の表示で止まってしまい、そこから先に進まない。&lt;br /&gt;Adobeサポートのインストール時におけるトラブルシューティング等を読みながら、セーフブート起動やアクセス権の修復やいろいろやってみたが、どうやっても先に進まない。&lt;br /&gt;&lt;br /&gt;あらかた思いつく手を全て試した後で、画面が止まる理由を考えた。自分、なにかよけいな事したか？&lt;br /&gt;あっ、と思い出した。機能を確かめようと思って、&lt;span style="font-weight:bold;"&gt;先にExtendScript Toolkit CS4だけを落としてインストールしてあった&lt;/span&gt;のだ。急いでそれを抜いてもう一度試したら、無事にインストールできた。&lt;br /&gt;&lt;br /&gt;もしCS4購入前に体験版やら何やらを試していたならば、先にそれらをアンインストールしておいた方がいいかも知れません。以上。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5576466677238002909?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5576466677238002909/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5576466677238002909' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5576466677238002909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5576466677238002909'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2009/01/adobe-creative-suite-4.html' title='Adobe Creative Suite 4 のインストールが「準備中」で止まる'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4639065437210403265</id><published>2008-12-21T03:33:00.011+09:00</published><updated>2010-05-10T04:52:57.985+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustrator CS3でScriptUIするときはBridgeTalkしなくちゃいけない？</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SU07XSFgtyI/AAAAAAAAAFU/xAcWCBOkfdk/s1600-h/UI.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 168px; height: 66px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SU07XSFgtyI/AAAAAAAAAFU/xAcWCBOkfdk/s400/UI.jpg" alt="" id="BLOGGER_PHOTO_ID_5281943209153443618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ScriptUIを使っていてハマったのでメモ。&lt;br /&gt;以下のスクリプト。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;parette = new Window("palette","ScriptUI TEST");&lt;br /&gt;parette.orientation = 'row';&lt;br /&gt;parette.btn = parette.add('button', undefined, '選択したものの数は？');&lt;br /&gt;&lt;br /&gt;parette.btn.onClick = function() {&lt;br /&gt;  parette.close();&lt;br /&gt;  var obj=app.activeDocument.selection;&lt;br /&gt;  alert(obj.length);&lt;br /&gt;  }&lt;br /&gt;parette.show();&lt;br /&gt;&lt;/pre&gt;これをIllustratorで動かしてクリックしても、反応しない。&lt;br /&gt;ちなみに、InDesignで動かせばちゃんと選択項目の数を教えてくれる。&lt;br /&gt;&lt;pre class="prettyprint"&gt;parette = new Window("palette","ScriptUI TEST");&lt;br /&gt;parette.orientation = 'row';&lt;br /&gt;parette.btn = parette.add('button', undefined, '選択したものの数は？');&lt;br /&gt;&lt;br /&gt;parette.btn.onClick = function() {&lt;br /&gt;  parette.close();&lt;br /&gt;  var bt=new BridgeTalk();&lt;br /&gt;  bt.target = "Illustrator";&lt;br /&gt;  bt.body ="alert(app.activeDocument.selection.length)";&lt;br /&gt;  bt.send();&lt;br /&gt;  }&lt;br /&gt;parette.show();&lt;/pre&gt;これなら動く。&lt;br /&gt;どうも、Illustrator CS3でScriptUIを使う場合は、BridgeTalkで話しかけないと反応しないみたい。&lt;br /&gt;うーん…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4639065437210403265?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4639065437210403265/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4639065437210403265' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4639065437210403265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4639065437210403265'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/12/illustrator-cs3scriptuibridgetalk.html' title='Illustrator CS3でScriptUIするときはBridgeTalkしなくちゃいけない？'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/SU07XSFgtyI/AAAAAAAAAFU/xAcWCBOkfdk/s72-c/UI.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8922113981314062211</id><published>2008-12-20T07:50:00.006+09:00</published><updated>2010-05-10T04:53:28.309+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>InDesignスクリプトのArrayを拡張してみる</title><content type='html'>選択範囲の大きさを求める関数を、InDesignのArrayに拡張してみるテスト。&lt;br /&gt;Arrayのprototypeに関数を設定してしまえばよい。&lt;br /&gt;&lt;pre class="prettyprint"&gt;Array.prototype.visibleBounds=function(){&lt;br /&gt; var ary=this[0].visibleBounds;&lt;br /&gt; if(ary){&lt;br /&gt;  for(i=1;i&amp;lt;this.length;i++){&lt;br /&gt;   var follow=this[i].visibleBounds;&lt;br /&gt;   if(ary[0]&amp;gt;follow[0]) ary[0]=follow[0];&lt;br /&gt;   if(ary[1]&amp;gt;follow[1]) ary[1]=follow[1];&lt;br /&gt;   if(ary[2]&amp;lt;follow[2]) ary[2]=follow[2];&lt;br /&gt;   if(ary[3]&amp;lt;follow[3]) ary[3]=follow[3];&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;return ary;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Array.prototype.geometricBounds=function(){&lt;br /&gt; var ary=this[0].geometricBounds;&lt;br /&gt; if(ary){&lt;br /&gt;  for(i=1;i&amp;lt;this.length;i++){&lt;br /&gt;   var follow=this[i].geometricBounds;&lt;br /&gt;   if(ary[0]&amp;gt;follow[0]) ary[0]=follow[0];&lt;br /&gt;   if(ary[1]&amp;gt;follow[1]) ary[1]=follow[1];&lt;br /&gt;   if(ary[2]&amp;lt;follow[2]) ary[2]=follow[2];&lt;br /&gt;   if(ary[3]&amp;lt;follow[3]) ary[3]=follow[3];&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;return ary;&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;選択したもの全体の大きさを出したいときは、選択して&lt;br /&gt;&lt;pre class="prettyprint"&gt;var objs=app.activeDocument.selection;&lt;br /&gt;$.writeln(objs.visibleBounds());&lt;br /&gt;$.writeln(objs.geometricBounds());&lt;/pre&gt;&lt;br /&gt;で、visibleBounds,geometricBoundsの形でとれる。&lt;br /&gt;JavaScriptは不思議だー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8922113981314062211?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8922113981314062211/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8922113981314062211' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8922113981314062211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8922113981314062211'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/12/indesignarray.html' title='InDesignスクリプトのArrayを拡張してみる'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-3760766837071229729</id><published>2008-12-14T02:12:00.010+09:00</published><updated>2010-05-10T04:53:45.918+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustratorで、選択オブジェクトの持つプロパティと値をコンソールに書き出す</title><content type='html'>InDesignはオブジェクトの値をtoSource()で見られるけれど、Illustratorでは見られない。&lt;br /&gt;いちいちJavaScriptリファレンスで確認するのも大変だし、どうするかなーと思ってた。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/amachang/20070202/1170386546"&gt;JavaScript の配列と連想配列の違い - IT戦記&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;配列は素直に for&lt;br /&gt;連想配列には for in&lt;/blockquote&gt;&lt;br /&gt;あ、そうか。JavaScriptのオブジェクトは全て連想配列だから…&lt;br /&gt;&lt;a href="http://starry.night.nu/web/prog/javascript/c01_know_basic_behavior.html"&gt;第一章 JavaScriptにおけるオブジェクトの基本的性質を知る&lt;/a&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;var obj=app.activeDocument.selection[0];&lt;br /&gt;&lt;br /&gt;for (var i in obj) {&lt;br /&gt; $.write(i+":");&lt;br /&gt; try{&lt;br /&gt;  $.writeln(obj[i])&lt;br /&gt; }catch(e){&lt;br /&gt;  $.writeln(e.toString())&lt;br /&gt; }&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;やっぱりJavaScriptはきちんと勉強しないとだめだね。&lt;br /&gt;&lt;br /&gt;091216追記：ワンライナー、変数がかぶってるところにも使えるようにfunctionに。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var o=app.activeDocument.selection[0];&lt;br /&gt;(function(o){for(var i in o){try{i+=':'+o[i]}catch(e){i+=':'+e}$.writeln(i)}})(o);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-3760766837071229729?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/3760766837071229729/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=3760766837071229729' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3760766837071229729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/3760766837071229729'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/12/illustrator.html' title='Illustratorで、選択オブジェクトの持つプロパティと値をコンソールに書き出す'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-8274489503522345822</id><published>2008-12-12T01:30:00.009+09:00</published><updated>2008-12-12T01:57:18.094+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Formatter'/><title type='text'>Antenna House Formatter の説明会に行ってきました</title><content type='html'>表題の通り、名古屋駅前で開催されたアンテナハウス主催「&lt;a href="http://kaigishitsu.termina.co.jp/introduction/index.html"&gt;CSSによる文書レイアウト指定セミナー&lt;/a&gt;」へ行ってきました。&lt;br /&gt;&lt;br /&gt;小さな会議室で、集まったのは自分を含め10人。これは多いのか、少ないのか。&lt;br /&gt;名古屋という土地柄から見れば多いのかも……。&lt;br /&gt;内容は、アンテナハウスのXSL-Formatterの新バージョン「&lt;a href="http://www.antenna.co.jp/AHF/"&gt;Antenna House Formatter v5&lt;/a&gt;」の紹介と、CSSによる組版の説明。あとWord2DITAという、WORDでDITAを作成するためのプラグイン製品の紹介。&lt;br /&gt;&lt;br /&gt;AH Formatter、なかなか印象的でした。&lt;br /&gt;&lt;br /&gt;まず料金体系。今回、フル機能版に加えてLite版を用意して、用途に会わせて６製品にわけ、Lite版の方はかなり戦略的な価格に設定してきました。&lt;br /&gt;手元にある説明会資料によると、単機能のLiteでスタンドアロンならば４万。&lt;br /&gt;&lt;a href="http://www.antenna.co.jp/news/AHF50-20081208.html"&gt;ニュースリリース&lt;/a&gt;参照。&lt;br /&gt;ちょっと奮発すれば個人でも買ってみようかと思える値段。&lt;br /&gt;ただし、Lite版は1文書300ページ以内とか、PDF/XやPDF/A出力機能がない等の制限あり。もっともAcrobatを持っていれば、標準の書き出しを使う必要はないでしょう。&lt;br /&gt;&lt;br /&gt;それで、今回の一番の目玉、CSS組版。&lt;br /&gt;セミナー自体は淡々と進みましたが、これはちょっと衝撃でした。&lt;br /&gt;&lt;br /&gt;アンテナハウスのサイトで配布しているHTML+CSSのサンプルを、そのままFirefoxで開けてみると、CSS3やAH拡張部分以外は普通に見れてしまうんです。HTMLだから当然ですが。&lt;br /&gt;これをAH Formatterに通すと、きちんとページ組みされて出てくる。CSSをきちんと作ってさえいれば、もう自動組みする必要さえない。完全なワンソース。&lt;br /&gt;あれ？でもそうなると、普通のブラウザが全てCSS3に対応するようになったらどうなるんだろう…。&lt;br /&gt;&lt;br /&gt;アンテナの司会の方がぽろっと一言。&lt;br /&gt;「まあ、今はFormatterが他の3、４年先を行っているだけで、３年ぐらいたつとブラウザに追いつかれるかもしれないんですよ〜…」&lt;br /&gt;&lt;br /&gt;そう、CSS3は標準化される予定のフォーマットなわけで、そうなれば当然ブラウザに搭載されるわけです。そうなればblogもwikiも最初からページ組を意識して作られるようになります。WEBで見た物が、何も手を加えることなく、そのまま、普通に、タダで組版されて出てくる時代が近いうちに来る。長文組版、大学の紀要やマニュアルなんかのDTPの仕事は確実になくなりそう。&lt;br /&gt;だからこそアンテナハウスは真っ先にCSS組版を作ったのだろうし、これから先はブラウザに比べてどう付加価値をつけるか、日本語組版や多国語をどこまできれいに出力できるかで勝負するつもりなのだろうと思います。&lt;br /&gt;自分らの仕事は、CSS3を駆使していかに上手く組版するかがポイントになるでしょう。機能が多い分使いがいはありそうですが、そうなるとWEB系の人らとガチ勝負になるなー。&lt;br /&gt;&lt;br /&gt;セミナーで出た話だと、W3Cの慣例だと実装が２つ揃ったところで勧告になるそうで、たぶんCSS3勧告は2011年頃までかかるだろうとの事。でも３年なんてすぐですもんね。組版の未来を占う上でも、AH Formatterは注目です。&lt;br /&gt;&lt;br /&gt;他に出た話。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;現状ではCSS組版はFO組版よりだいぶ遅い。分厚いマニュアルや高度なサーバ処理にはFOを進めるとの事。&lt;/li&gt;&lt;li&gt;CSS,FOを混在させて組版することはできない。&lt;/li&gt;&lt;li&gt;AHの独自拡張部分は、他の仕様と区別するためベンダープレフィックスをつけて欲しい（なしでも出るらしい）。&lt;/li&gt;&lt;li&gt;サイズプロパティに入れられるB5,B4の指定はISOの標準なので、日本のB4,B5版はJIS-B4,JIS-B5と入れる。AH独自仕様。&lt;/li&gt;&lt;li&gt;スタンドアロン版にはJAVAインターフェイス等の開発環境は含まれない（以前同様）。&lt;/li&gt;&lt;li&gt;FOとCSSの機能の差については、体験版をダウンロードした中にあるオンラインマニュアルに対応表がある。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;あと、Word2DITAについて。&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/Darwin_Information_Typing_Architecture"&gt;Darwin Information Typing Architecture - Wikipedia&lt;/a&gt;&lt;br /&gt;DITAは技術情報を配布するために策定されたXML仕様。DITAで検索するとアンテナハウス関連のページばかりかかるので、アンテナハウスが押している仕様なのはわかります。&lt;br /&gt;Word2DITAはそれをWORDを使って簡単に作成できるというもの。ウィザード形式に画面の進めていくとテンプレートが生成されて、その内容を埋めることでDITAを書き出せる。再利用性を考えた仕様なので、トピックごとの小さなXMLになり、最終的にマップに取り込んで一つの文書になるらしいです。&lt;br /&gt;&lt;br /&gt;なんというか、Wordで作成できる以前に、なぜDITAが便利なのかの理解が進みませんでした。&lt;br /&gt;必要を感じなければ誰も興味を持たないわけで、たぶん流行らないだろうなぁ。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-8274489503522345822?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/8274489503522345822/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=8274489503522345822' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8274489503522345822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/8274489503522345822'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/12/antenna-house-formatter.html' title='Antenna House Formatter の説明会に行ってきました'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2792463650830834235</id><published>2008-12-04T07:56:00.005+09:00</published><updated>2008-12-04T08:27:00.444+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>GroovyからJPEG画像をRGB→CMYK変換</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/kusakari/20071209/1197131593"&gt;imageio を使った jpeg の rgb, cmyk 相互変換 - 夜の Discovery&lt;/a&gt;&lt;br /&gt;&lt;a href="http://forums.sun.com/thread.jspa?threadID=527311&amp;messageID=2531272"&gt;Java Programming [Archive] - HELP!!! URGENT!!!! convert a jpg CMYK to jpg RGB&lt;/a&gt;&lt;br /&gt;上記ページのJava→Groovy翻訳に挑戦。自分の力ではこれ以上コード削れなかった…。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;import java.awt.image.*;&lt;br /&gt;import java.awt.color.*;&lt;br /&gt;import java.awt.event.*;&lt;br /&gt;import java.awt.*;&lt;br /&gt;import com.sun.image.codec.jpeg.*;&lt;br /&gt; &lt;br /&gt;String USAGE = "groovy CMYKSave &amp;lt;cmykProfile&amp;gt; &amp;lt;rgbJPEGFile&amp;gt; &amp;lt;cmykJPEGFile&amp;gt; &amp;lt;invert=yes|no&amp;gt;"&lt;br /&gt;&lt;br /&gt;//引数が4つ未満ならUSAGEを表示して終了&lt;br /&gt;if(args.length&amp;lt;4){&lt;br /&gt;  println(USAGE)&lt;br /&gt;  System.exit(0)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//引数それぞれの割当て&lt;br /&gt;String cmykProfile = args[0]&lt;br /&gt;String rgbJPEGFile = args[1]&lt;br /&gt;String cmykJPEGFile = args[2]&lt;br /&gt;boolean invert = "true".equalsIgnoreCase(args[3])&lt;br /&gt;&lt;br /&gt;//元イメージを読み込む&lt;br /&gt;def decoder = JPEGCodec.createJPEGDecoder(new FileInputStream(rgbJPEGFile))&lt;br /&gt;def rgbImage = decoder.decodeAsBufferedImage();&lt;br /&gt;&lt;br /&gt;//CMYKプロファイルからCMYKカラースペースを作成&lt;br /&gt;def p = ICC_Profile.getInstance(new FileInputStream(cmykProfile))&lt;br /&gt;def cmykCS = new ICC_ColorSpace(p);&lt;br /&gt;&lt;br /&gt;def out = new FileOutputStream(cmykJPEGFile)&lt;br /&gt;&lt;br /&gt;//RGBイメージからCMYKへのコンバート&lt;br /&gt;def rgbCS = rgbImage.getColorModel().getColorSpace()&lt;br /&gt;def rgbToCmyk = new ColorConvertOp(rgbCS, cmykCS, null)&lt;br /&gt;&lt;br /&gt;//変換先CMYKイメージのカラーモデル作成&lt;br /&gt;def cmykModel = new ComponentColorModel(cmykCS,[8, 8, 8, 8] as int[], &lt;br /&gt;false, true, Transparency.OPAQUE, DataBuffer.TYPE_BYTE)&lt;br /&gt;def cmykRaster =&lt;br /&gt; cmykModel.createCompatibleWritableRaster(rgbImage.getWidth(),rgbImage.getHeight())&lt;br /&gt;&lt;br /&gt;//ここでCMYKにコンバートする&lt;br /&gt;rgbToCmyk.filter(rgbImage.getRaster(), cmykRaster)&lt;br /&gt;&lt;br /&gt;//trueなら階調反転&lt;br /&gt;if(invert){&lt;br /&gt;  println("CMYKの階調を反転します")&lt;br /&gt;  def swap = new byte[256]&lt;br /&gt;  for(i in 0..&amp;lt;swap.length){&lt;br /&gt;    swap[i] = (byte)(255-i)&lt;br /&gt;  }&lt;br /&gt;  def lookup = new ByteLookupTable(0, [swap, swap, swap, swap] as byte[][] )&lt;br /&gt;  def luop = new LookupOp(lookup, null)&lt;br /&gt;  cmykRaster = luop.filter(cmykRaster, cmykRaster.createCompatibleWritableRaster())&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//最後にCMYK画像を保存する&lt;br /&gt;def encoder = JPEGCodec.createJPEGEncoder(out)&lt;br /&gt;def param = encoder.getDefaultJPEGEncodeParam(cmykRaster, JPEGDecodeParam.COLOR_ID_CMYK)&lt;br /&gt;param.setQuality(1, false)&lt;br /&gt;encoder.encode(cmykRaster, param)&lt;br /&gt;out.close()&lt;br /&gt;println("イメージ${cmykJPEGFile}を保存しました。")&lt;/pre&gt;&lt;br /&gt;動作確認は&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovy CMYKSave.groovy JapanColor2001Coated.icc test.jpg test_out.jpg true&lt;/pre&gt;&lt;br /&gt;って感じです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2792463650830834235?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2792463650830834235/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2792463650830834235' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2792463650830834235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2792463650830834235'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/12/groovyjpegrgbcmyk.html' title='GroovyからJPEG画像をRGB→CMYK変換'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-451411837362785160</id><published>2008-11-24T02:03:00.008+09:00</published><updated>2008-11-24T02:23:12.543+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>CotEditorで不可視ファイルを表示する</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSmNW6QK7XI/AAAAAAAAAFE/JpldCuIECyk/s1600-h/cotEditor.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 198px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSmNW6QK7XI/AAAAAAAAAFE/JpldCuIECyk/s320/cotEditor.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5271900263547596146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aynimac.com/p_blog/files/article.php?id=41"&gt;AYNiMac : 自作ソフト : CotEditor&lt;/a&gt;&lt;br /&gt;Mac用テキストエディタ。&lt;br /&gt;UTF-8もSJISも表示できて、正規表現もしっかり実装していて、しかもフリー。&lt;br /&gt;今いちばん充実してるんじゃないだろうか。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SSmPuHyaTlI/AAAAAAAAAFM/bf5j17UKOoU/s1600-h/cotEditor2.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 251px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SSmPuHyaTlI/AAAAAAAAAFM/bf5j17UKOoU/s320/cotEditor2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5271902861341118034" /&gt;&lt;/a&gt;で、ちょっとしたTipsのメモ。&lt;br /&gt;.bash_profileとかの不過視ファイルを編集したいとき（それぐらいターミナルでやれって言われそうだけど）、CotEditorではファイルメニューの「開く」では普通には表示されない。&lt;br /&gt;でも、&lt;span style="font-weight:bold;"&gt;Shiftキーを押しながらファイルメニューを開く&lt;/span&gt;と、「非表示ファイルを開く」が現れる。そこから選択すればよい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-451411837362785160?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/451411837362785160/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=451411837362785160' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/451411837362785160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/451411837362785160'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/11/coteditor.html' title='CotEditorで不可視ファイルを表示する'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSmNW6QK7XI/AAAAAAAAAFE/JpldCuIECyk/s72-c/cotEditor.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-628567486974462552</id><published>2008-11-23T09:21:00.009+09:00</published><updated>2008-11-23T20:23:04.575+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='正規表現'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Groovyでテキスト処理を試す</title><content type='html'>組版・DTP関連でプログラムを使ったテキスト処理をするなら、普通はsed、perl、rubyなんかを使うと思う。でもここはあえてgroovyでやってみる。&lt;br /&gt;&lt;br /&gt;まずテキストを用意。&lt;a href="http://www.aozora.gr.jp/"&gt;青空文庫&lt;/a&gt;から「&lt;a href="http://www.aozora.gr.jp/cards/000148/card789.html"&gt;我輩は猫である&lt;/a&gt;」のテキスト版を引っ張ってきて、それの一部を使うことにする。&lt;br /&gt;&lt;blockquote&gt;　吾輩《わがはい》は猫である。名前はまだ無い。&lt;br /&gt;　どこで生れたかとんと見当《けんとう》がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番｜獰悪《どうあく》な種族であったそうだ。この書生というのは時々我々を捕《つかま》えて煮《に》て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。ただ彼の掌《てのひら》に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始《みはじめ》であろう。この時妙なものだと思った感じが今でも残っている。第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶《やかん》だ。その後《ご》猫にもだいぶ逢《あ》ったがこんな片輪《かたわ》には一度も出会《でく》わした事がない。のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙《けむり》を吹く。どうも咽《む》せぽくて実に弱った。これが人間の飲む煙草《たばこ》というものである事はようやくこの頃知った。&lt;/blockquote&gt;&lt;br /&gt;この文章を"waganeko.txt"としてSJISで保存。とりあえずデスクトップに置く。&lt;br /&gt;それに対して、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ルビにxhtml風のタグをつける。&lt;/li&gt;&lt;li&gt;行ごとに&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;タグをつける。&lt;/li&gt;&lt;li&gt;語尾が"んぬ。"で終わるようにする。&lt;/li&gt;&lt;li&gt;SJISのテキストをUTF8にする。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.htmlをつけて保存。&lt;/li&gt;&lt;/ul&gt;ここまでやってみる。&lt;br /&gt;以下Groovyコード。&lt;br /&gt;&lt;pre class="prettyprint"&gt;def inputCharCode = "SJIS" //入力側文字コード&lt;br /&gt;def outputCharCode = "UTF8" //出力側文字コード&lt;br /&gt;&lt;br /&gt;//変換マップ※なぜか行頭にスペースがないとエラーになる？&lt;br /&gt;def replaceTable=[&lt;br /&gt;  /^/:"&amp;lt;p&amp;gt;",&lt;br /&gt;  /$/:"&amp;lt;/p&amp;gt;",&lt;br /&gt;  /\n/:"&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;",&lt;br /&gt;  /｜{0,1}([一-龠]+?)《([ぁ-ん]+?)》/:&lt;br /&gt;{ m0, m1, m2 -&amp;gt; "&amp;lt;ruby&amp;gt;&amp;lt;rb&amp;gt;$m1&amp;lt;/rb&amp;gt;&amp;lt;rt&amp;gt;$m2&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;" },&lt;br /&gt;  "。":"んぬ。"&lt;br /&gt;  ]&lt;br /&gt;&lt;br /&gt;//--------------------処理ここから--------------------&lt;br /&gt;if(args.length &amp;lt; 1){&lt;br /&gt;  println("ファイルを指定して下さい。")&lt;br /&gt;&lt;br /&gt;}else{&lt;br /&gt;  //argsが1個以上なら数を数えてループ&lt;br /&gt;  for(i in 0..&amp;lt; args.length){&lt;br /&gt; &lt;br /&gt;    //ファイルの中身を読む&lt;br /&gt;    def file = new File(args[i])&lt;br /&gt;    String str = file.getText(inputCharCode)&lt;br /&gt;   &lt;br /&gt;    //変換マップの中を順に置換する&lt;br /&gt;    replaceTable.each{key,value -&amp;gt; str=str.replaceAll(key,value)}&lt;br /&gt;   &lt;br /&gt;    //同じ名前の.htmlを作って書き込み&lt;br /&gt;    String newPath = args[i].replace(".txt",".html")&lt;br /&gt;    def dir = new File(newPath)&lt;br /&gt;    dir.write(str,outputCharCode)&lt;br /&gt;    println("-------------${newPath}を書き出しました。")&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;これをテキストエディタに貼付け、"aozora.groovy"って名前をつけて保存。とりあえずデスクトップに置く。&lt;br /&gt;ターミナルを立ち上げ、&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cd Desktop/&lt;br /&gt;$ groovy aozora.groovy waganeko.txt&lt;br /&gt;---------------waganeko.htmlを書き出しました。&lt;/pre&gt;&lt;br /&gt;とすれば、waganeko.htmlが書き出される。&lt;br /&gt;&lt;br /&gt;確認のために、&lt;a href="https://addons.mozilla.org/ja/firefox/addon/1935"&gt;XHTMLルビサポート&lt;/a&gt;というFirefox用アドオンがあるので、それをインストールしてFirefoxで開いてみよう。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSizjDJGN9I/AAAAAAAAAE8/CzeUgdC9bNw/s1600-h/aozora.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSizjDJGN9I/AAAAAAAAAE8/CzeUgdC9bNw/s320/aozora.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5271660778557421522" /&gt;&lt;/a&gt;&lt;br /&gt;Pタグ以下しかないんで、完璧なhtmlになってはいないけれど、そのへんはテストってことで。&lt;br /&gt;&lt;br /&gt;変換を変えたいのなら、変換マップの中身を書き換えればいいだけ。&lt;br /&gt;簡単だ！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-628567486974462552?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/628567486974462552/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=628567486974462552' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/628567486974462552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/628567486974462552'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/11/groovy.html' title='Groovyでテキスト処理を試す'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSizjDJGN9I/AAAAAAAAAE8/CzeUgdC9bNw/s72-c/aozora.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2201261930811931677</id><published>2008-11-22T08:26:00.021+09:00</published><updated>2010-05-10T04:58:21.893+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='正規表現'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>正規表現、先読みと後読み</title><content type='html'>正規表現でテキスト処理をする際、いちばん分かりにくくて、いちばん役に立ったのが&lt;span style="font-weight:bold;"&gt;先読み&lt;/span&gt;と&lt;span style="font-weight:bold;"&gt;後読み&lt;/span&gt;。どうもここが正規表現のキモのような気がする。&lt;br /&gt;そういうわけでメモ。&lt;br /&gt;&lt;br /&gt;Groovyの場合、肯定的先読みは&lt;span style="font-weight:bold;"&gt;(?=&lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;)&lt;/span&gt;、肯定的後読みは&lt;span style="font-weight:bold;"&gt;(?&lt;=&lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;)&lt;/span&gt;と書く。&lt;br /&gt;※&lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;の部分は判別させたい文字列。&lt;br /&gt;&lt;br /&gt;先読み、後読みは何に使うのかというと、&lt;span style="font-weight:bold;"&gt;「文字列の前と後にどんな文字が来るか判別したくて、なおかつその部分にはマッチさせたくない」&lt;/span&gt;という場合に使う。&lt;br /&gt;たとえば、「hoge(?=&lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;)」は &lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;が後ろにあるhogeにマッチするが、(?=&lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;)部分にはマッチしない。&lt;br /&gt;「(?&amp;lt;=&lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;)hoge」は &lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;が前にあるhogeにマッチするが、(?&amp;lt;=&lt;span style="font-style:italic;"&gt;pattern&lt;/span&gt;)部分にはマッチしない。&lt;br /&gt;&lt;br /&gt;マッチしたい文字の&lt;span style="font-weight:bold;"&gt;前に後読み、後ろに先読みを使う&lt;/span&gt;のがミソ。&lt;br /&gt;順番でいうと(後読み)(欲しい部分)(先読み)と使う。&lt;br /&gt;ここまでOK？&lt;br /&gt;&lt;br /&gt;実例。下のような文章があったとする。&lt;br /&gt;&lt;blockquote&gt;長嶋 茂雄の誕生日は1936年2月20日。&lt;br /&gt;1974（昭和11）年2月20日から&lt;br /&gt;2008（平成20）年11月20日の間の日数は26,572日、&lt;br /&gt;72年と274日になります。ところで、ただいまの時間は7:19です。&lt;/blockquote&gt;&lt;br /&gt;「ところで」の部分が苦しい…のは置いといて、&lt;br /&gt;このテキストの&lt;span style="font-weight:bold;"&gt;「1桁と2桁の数字だけ&amp;lt;tcy&amp;gt;&amp;lt;/tcy&amp;gt;というタグで囲みたい」&lt;/span&gt;。&lt;br /&gt;どうしよう？&lt;br /&gt;&lt;br /&gt;まず、1桁と2桁の数字だから、&lt;br /&gt;&lt;blockquote&gt;\d{1,2}&lt;/blockquote&gt;&lt;br /&gt;だけど、これだと3桁以上の数字にもマッチしてしまうので、前後に数字がない場合だけマッチさせたい。&lt;br /&gt;&lt;blockquote&gt;(?&lt;=[^\d])(\d{1,2})(?=[^\d])&lt;/blockquote&gt;&lt;br /&gt;また、コンマ区切りと小数点、時間を表しているコロンがあった場合もマッチさせたくない。&lt;br /&gt;&lt;blockquote&gt;(?&lt;=[^\d\.,:])(\d{1,2})(?=[^\d\.,:])&lt;/blockquote&gt;&lt;br /&gt;この文章にはないけれど、行頭もしくは行末に数字が来るかもしれない。&lt;br /&gt;&lt;blockquote&gt;(?&lt;=^|[^\d\.,:])(\d{1,2})(?=[^\d\.,:]|$)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;これで、数字2桁までの「数字部分にだけ」マッチする。&lt;br /&gt;以下Groovyスクリプト。&lt;br /&gt;&lt;pre class="prettyprint"&gt;def text="""長嶋 茂雄の誕生日は1936年2月20日。&lt;br /&gt;1974（昭和11）年2月20日から&lt;br /&gt;2008（平成20）年11月20日の間の日数は26,572日、&lt;br /&gt;72年と274日になります。ところで、ただいまの時間は7:19です。"""&lt;br /&gt;&lt;br /&gt;//半角1,2桁の数字にタテ中ヨコ用タグ付け&lt;br /&gt;text=text.replaceAll(/(?&lt;=^|[^\d\.,:])(\d{1,2})(?=[^\d\.,:]|$)/) {&lt;br /&gt; m0, m1 -&gt; "&amp;lt;tcy&amp;gt;${m1}&amp;lt;/tcy&amp;gt;"&lt;br /&gt; }&lt;br /&gt;println(text)&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSdM5ieBplI/AAAAAAAAAEs/1QX-DJdsRGc/s1600-h/tcygroovy.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 311px;" src="http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSdM5ieBplI/AAAAAAAAAEs/1QX-DJdsRGc/s320/tcygroovy.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5271266440249452114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ところで、JavaScriptも正規表現を使えるけれど、&lt;span style="font-weight:bold;"&gt;後読みをサポートしていない&lt;/span&gt;。&lt;br /&gt;仕方がないので、後読み部分を普通にマッチさせる。後読み部分も1字なので不具合は出ないと思う。&lt;br /&gt;以下ExtendScript。&lt;br /&gt;&lt;pre class="prettyprint"&gt;var text="長嶋 茂雄の誕生日は1936年2月20日。\n"&lt;br /&gt;+"1974（昭和11）年2月20日から\n"&lt;br /&gt;+"2008（平成20）年11月20日の間の日数は26,572日、\n"&lt;br /&gt;+"72年と274日になります。ところで、ただいまの時間は7:19です。"&lt;br /&gt;//半角1,2桁の数字にタテ中ヨコ用タグ付け&lt;br /&gt;text=text.replace(/(^|[^\d\.,:])(\d{1,2})(?=[^\d\.,:]|$)/g,"$1"+"&amp;lt;tcy&amp;gt;"+"$2"+"&amp;lt;/tcy&amp;gt;");&lt;br /&gt;$.writeln(text);&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SSdOfB2advI/AAAAAAAAAE0/L2JSv7pTcVk/s1600-h/tcyjsx.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://4.bp.blogspot.com/_NsZ3kbgYLEw/SSdOfB2advI/AAAAAAAAAE0/L2JSv7pTcVk/s320/tcyjsx.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5271268183840028402" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2201261930811931677?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2201261930811931677/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2201261930811931677' title='3 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2201261930811931677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2201261930811931677'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/11/blog-post.html' title='正規表現、先読みと後読み'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_NsZ3kbgYLEw/SSdM5ieBplI/AAAAAAAAAEs/1QX-DJdsRGc/s72-c/tcygroovy.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1826377477840504296</id><published>2008-11-19T01:26:00.015+09:00</published><updated>2010-05-10T04:36:21.650+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Illustrator'/><title type='text'>Illustartor→InDesign間でBridgeTalk</title><content type='html'>IllustratorのvisibleBoundsとgeometricBoundsが、yが上に向かって増える仕様なのでInDesignと合わない。むかついたので、腹いせにBoundsをInDesign風に置き換えるfunctionを書いた。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target "Illustrator"&lt;br /&gt;&lt;br /&gt;forIndBounds=function(bounds){&lt;br /&gt; var h=app.activeDocument.height;&lt;br /&gt; var ary=[h-bounds[1],bounds[0],h-bounds[3],bounds[2]];&lt;br /&gt; return ary;&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;//AIの場合は単位を設定しても常にポイントでくる&lt;br /&gt;var selObj = app.activeDocument.selection;&lt;br /&gt;for(var i=0;i&amp;lt;selObj.length;i++){&lt;br /&gt; var aivb=selObj[i].visibleBounds;&lt;br /&gt; var aigb=selObj[i].geometricBounds;&lt;br /&gt; };&lt;/pre&gt;&lt;br /&gt;ただ、これだけではInDesignに流用は全くできない。&lt;br /&gt;せっかくならアプリ間連携してInDesignで直接テキストフレーム生成できるといいよね？&lt;br /&gt;そういうわけで余計な苦労をはじめるのだ。&lt;br /&gt;&lt;br /&gt;とりあえず拾ったgeometricBoundsを全部Arrayにつっこむ。&lt;br /&gt;そしてInDesignに渡す方法を考える。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/kamiseto/20081108/1226114046"&gt;illustrator13.executeScriptの正体 - なにする？DTP WEB&lt;/a&gt;&lt;br /&gt;↑ここの記事で、AdobeCS間で通信するメソッドがあるのを知った。&lt;br /&gt;&lt;pre class="prettyprint"&gt;indesign5.executeScript("alert(\"こんにちはInDesign\")");&lt;/pre&gt;&lt;br /&gt;だけども、scriptがレアなままでは渡せない、一度Stringになっている必要がある。&lt;br /&gt;変数はどうやって渡すの？&lt;br /&gt;同じブログの記事で、executeScriptの正体はBridgeTalkだと知る。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/kamiseto/20081108/1226164823"&gt;BridgeTalkって何？ - なにする？DTP WEB&lt;/a&gt;&lt;br /&gt;BridgeTalk!!&lt;br /&gt;&lt;br /&gt;それを使って、functionと変数をなんとか渡そうとしてるうちに、それもfunctionになった。&lt;br /&gt;とりあえず、InD側の単位は全部ポイントに合わせ、線幅や色も決めうち。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#target " Illustrator"&lt;br /&gt;&lt;br /&gt;//InD風Boundsに変換するfunction&lt;br /&gt;forIndBounds=function(bounds){&lt;br /&gt; var h=app.activeDocument.height;&lt;br /&gt; var ary=[&lt;br /&gt; h-bounds[1],&lt;br /&gt; bounds[0],&lt;br /&gt; h-bounds[3],&lt;br /&gt; bounds[2]&lt;br /&gt; ];&lt;br /&gt; return ary;&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;//とりあえず拾ったgeometricBoundsを全部Aryにつっこむ。&lt;br /&gt;var selObj = app.activeDocument.selection;&lt;br /&gt;var ary = [];&lt;br /&gt;for(var i=0;i&amp;lt;selObj.length;i++){&lt;br /&gt; var aigb=forIndBounds(selObj[i].geometricBounds);&lt;br /&gt; ary.push(aigb);&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;$.writeln(ary.toSource());&lt;br /&gt;&lt;br /&gt;//BridgeTalk経由でfunctionと変数を渡す。&lt;br /&gt;btFunc=function(app,func,arg){&lt;br /&gt; var argObj="";&lt;br /&gt; if(typeof(arg)=="string") {&lt;br /&gt;   argObj="\""+arg+"\"";&lt;br /&gt;  }else{&lt;br /&gt;   argObj=arg.toSource();&lt;br /&gt;  }&lt;br /&gt; var bt=new BridgeTalk();&lt;br /&gt; bt.target = app;&lt;br /&gt; bt.body = "var func="+func.toString();&lt;br /&gt; bt.body += "func("+argObj+");";&lt;br /&gt; bt.send();&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt;//arrayからテキストフレームを作る。&lt;br /&gt;//とりあえず、InD側の単位はあらかじめ全部ポイントに合わせ、線幅や色も決めうち。&lt;br /&gt;createTextFrame=function(objAry){&lt;br /&gt;  var docObj = app.activeDocument&lt;br /&gt; for(var i=0;i&amp;lt;objAry.length;i++){&lt;br /&gt;  txtObj = docObj.textFrames.add();&lt;br /&gt;  txtObj.geometricBounds = objAry[i];&lt;br /&gt;  txtObj.strokeColor ="Black";&lt;br /&gt;  txtObj.strokeWeight = 10;&lt;br /&gt; }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;btFunc("InDesign",createTextFrame,ary);&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SSL66vsr0sI/AAAAAAAAAEU/70crcO2iW88/s1600-h/forIndBounds.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 293px; height: 320px;" src="http://2.bp.blogspot.com/_NsZ3kbgYLEw/SSL66vsr0sI/AAAAAAAAAEU/70crcO2iW88/s320/forIndBounds.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5270050401120146114" /&gt;&lt;/a&gt;&lt;br /&gt;あっはっは！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1826377477840504296?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1826377477840504296/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1826377477840504296' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1826377477840504296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1826377477840504296'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/11/illustartorindesignbridgetalk.html' title='Illustartor→InDesign間でBridgeTalk'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NsZ3kbgYLEw/SSL66vsr0sI/AAAAAAAAAEU/70crcO2iW88/s72-c/forIndBounds.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-7286838514391939531</id><published>2008-11-16T00:37:00.007+09:00</published><updated>2010-05-10T04:36:49.616+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>AdobeCS3のJavaScriptでガベージコレクション</title><content type='html'>&lt;pre class="prettyprint"&gt;$.gc () &lt;/pre&gt;&lt;br /&gt;これだけ。&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3"&gt;WIKIPEDIA: ガベージコレクション&lt;/a&gt;&lt;br /&gt;ガベージコレクションというのは、いらなくなったメモリを解放する処理で、ようするにメモリ関連のエラーに効果があるらしいんだけど、実際の所どれほど効果があるものなのかよくわからない。&lt;br /&gt;&lt;br /&gt;今自分の会社でお客さんに渡しているスクリプトが&lt;br /&gt;「使用するとだんだんInDesignが重くなる」&lt;br /&gt;と言われていたので、これを処理の末尾にそっと挿入。&lt;br /&gt;おまじない。&lt;br /&gt;&lt;br /&gt;不具合が解消されたかはまだ不明。こんど聞いてみないとな…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-7286838514391939531?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/7286838514391939531/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=7286838514391939531' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7286838514391939531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/7286838514391939531'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/11/extendscript.html' title='AdobeCS3のJavaScriptでガベージコレクション'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-4635007661509114141</id><published>2008-10-26T05:42:00.006+09:00</published><updated>2008-11-21T05:30:13.678+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xindice'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>MacでXindiceを使う 2</title><content type='html'>続いて、Xindiceを使ってみる。&lt;br /&gt;&lt;a href="http://www.atmarkit.co.jp/fxml/tanpatsu/18xindice/xindice02.html"&gt;@ITの記事&lt;/a&gt;は古いのか、そのままでは試せなかった。&lt;br /&gt;&lt;a href="http://www.theylive.jp/apache/xindice4.html"&gt;theylive.jp：XMLデータベース 「Xindice」にチャレンジ&lt;/a&gt;&lt;br /&gt;↑ここの記事がすごく参考になった。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ xindice add_collection -c /db -n sampledb&lt;br /&gt;trying to register database&lt;br /&gt;Created : /db/sampledb&lt;br /&gt;&lt;br /&gt;$ xindice lc -c /db&lt;br /&gt;trying to register database&lt;br /&gt;&lt;br /&gt;        sampledb&lt;br /&gt;        system&lt;br /&gt;        meta&lt;br /&gt;&lt;br /&gt;Total collections: 3&lt;br /&gt;&lt;br /&gt;$ xindice ad -c /db/sampledb -f problem1.xml -n prob1&lt;br /&gt;trying to register database&lt;br /&gt;Added document /db/sampledb/prob1&lt;br /&gt;&lt;br /&gt;$ xindice ad -c /db/sampledb -f problem2.xml -n prob2&lt;br /&gt;trying to register database&lt;br /&gt;Added document /db/sampledb/prob2&lt;br /&gt;&lt;br /&gt;$ xindice xpath -c /db/sampledb -q "/problem[@status='open']"&lt;br /&gt;trying to register database&lt;br /&gt;&amp;lt;problem date="2001-12-28" id="ID0002" src:col="/db/sampledb" src:key="prob2"&lt;br /&gt; status="open" title="core dump" xmlns:src="http://xml.apache.org/xindice/Query"&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;&lt;br /&gt;    サーバがコア･ダンプする。&lt;br /&gt;  &amp;lt;/description&amp;gt;&lt;br /&gt;  &amp;lt;actions&amp;gt;&lt;br /&gt;    &amp;lt;action who="A_company"&amp;gt;&lt;br /&gt;      &amp;lt;description&amp;gt;&lt;br /&gt;        開発元に問合せ。&lt;br /&gt;      &amp;lt;/description&amp;gt;&lt;br /&gt;    &amp;lt;/action&amp;gt;&lt;br /&gt;    &amp;lt;action who="C_customer"&amp;gt;&lt;br /&gt;      &amp;lt;description&amp;gt;&lt;br /&gt;        情報収集&lt;br /&gt;      &amp;lt;/description&amp;gt;&lt;br /&gt;    &amp;lt;/action&amp;gt;&lt;br /&gt;  &amp;lt;/actions&amp;gt;&lt;br /&gt;&amp;lt;/problem&amp;gt;&lt;br /&gt;&lt;br /&gt;$ xindice xpath -c /db/sampledb -q "/problem//action[@who='B_corporation']"&lt;br /&gt;trying to register database&lt;br /&gt;&amp;lt;action src:col="/db/sampledb" src:key="prob1" who="B_corporation"&lt;br /&gt; xmlns:src="http://xml.apache.org/xindice/Query"&amp;gt;&lt;br /&gt;      &amp;lt;description&amp;gt;&lt;br /&gt;        レスポンスセンターに問い合わせる。&lt;br /&gt;      &amp;lt;/description&amp;gt;&lt;br /&gt;    &amp;lt;/action&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-4635007661509114141?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/4635007661509114141/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=4635007661509114141' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4635007661509114141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/4635007661509114141'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/10/macxindice-2.html' title='MacでXindiceを使う 2'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5775782667090265749</id><published>2008-10-26T03:53:00.007+09:00</published><updated>2008-11-21T04:45:49.076+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xindice'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>MacでXindiceを使う</title><content type='html'>Xindice（じんでぃーちぇ）はjavaで書かれたXMLデータベース。&lt;br /&gt;&lt;a href="http://www.atmarkit.co.jp/fxml/tanpatsu/18xindice/xindice01.html"&gt;&lt;br /&gt;＠IT：Xindice：無料で使えるXMLデータベース（1） ネイティブXMLデータベースを立ち上げる！ &lt;/a&gt;&lt;br /&gt;↑ここの記事を参考に、MacでXindiceの起動に挑戦してみる。&lt;br /&gt;&lt;br /&gt;まず、&lt;a href="http://xml.apache.org/xindice/download.cgi"&gt;Xindiceのダウンロードページ&lt;/a&gt;からバイナリファイルをダウンロードする。&lt;br /&gt;今回ダウンロードしたのは、xml-xindice-1.2m1-bin.tar.gz&lt;br /&gt;新しい方が良いと思って。&lt;br /&gt;&lt;br /&gt;解凍して、いつもこの手のファイルを入れている/optディレクトリにコピー。&lt;br /&gt;フォルダ名をxindiceにする。&lt;br /&gt;Javaはインストール済。&lt;br /&gt;パスを通す。~/.bash_profile に以下を記述。&lt;br /&gt;&lt;pre class="prettyprint"&gt;export XINDICE_HOME=/opt/xindice&lt;br /&gt;export PATH=$XINDICE_HOME/bin:$PATH&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;iTermを立ち上げ、起動を試す。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cd /opt/xindice&lt;br /&gt;$ ./start&lt;br /&gt;-bash: ./start: No such file or directory&lt;/pre&gt;&lt;br /&gt;動かない…そもそも/opt/xindiceディレクトリの中にstartってファイルないし。&lt;br /&gt;いろいろ検索するが情報なし。&lt;br /&gt;よく見ると、ディレクトリ直下にxindicedってファイルがある。&lt;br /&gt;これシェルスクリプトだよな…&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ./xindiced&lt;br /&gt;Xindice Server Startup Script&lt;br /&gt;Usage:&lt;br /&gt;    ./xindiced &lt;action&gt;&lt;br /&gt;Actions:&lt;br /&gt;  start           Start Xindice server&lt;br /&gt;  stop            Stop  Xindice server&lt;br /&gt;  debug           Start Xindice server with remote debugging on&lt;/pre&gt;&lt;br /&gt;おっ&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ./xindiced start&lt;br /&gt;&lt;br /&gt;Starting Xindice. Log files are under /opt/xindice/logs&lt;br /&gt;&lt;br /&gt;Xindice is running with PID 27403&lt;/pre&gt;&lt;br /&gt;当たり！v1.2だと、startとstopはxindicedにまとまってるのか。&lt;br /&gt;&lt;br /&gt;簡単に書いてるけどこれに気づくまで数時間…&lt;br /&gt;あとはたぶん、上の記事通りやれば動くと思うので、今日はここまで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5775782667090265749?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5775782667090265749/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5775782667090265749' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5775782667090265749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5775782667090265749'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/10/macxindice.html' title='MacでXindiceを使う'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-5165333144759251125</id><published>2008-10-20T23:21:00.007+09:00</published><updated>2008-11-21T04:44:54.200+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xalan'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Macでxalanを使う</title><content type='html'>&lt;a href="http://www.lcv.ne.jp/~denori/diary/diary0402.htm#D040212"&gt;勝手にしやがれ：Macintosh(Panther)でXSLTを扱う&lt;/a&gt;&lt;br /&gt;↑この記事を参考に、Macにもともと入っているXalanを使ってみる。&lt;br /&gt;環境はMacOS X 10.4.11。&lt;br /&gt;&lt;br /&gt;java version "1.5.0_16"&lt;br /&gt;Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-275)&lt;br /&gt;Java HotSpot(TM) Client VM (build 1.5.0_16-132, mixed mode, sharing)&lt;br /&gt;&lt;br /&gt;まず、ターミナルの表示をSJISにする。&lt;br /&gt;自分の使ってるiTermは最初からSJIS設定なのでOK。&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ java org.apache.xalan.xslt.Process&lt;/pre&gt;&lt;br /&gt;と打つと、マニュアルがずらずらと出てくる。&lt;br /&gt;出てくるからそのまま使えると思い、&lt;br /&gt;サンプルのtest.xslとtest.xmlを用意して&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ java org.apache.xalan.xslt.Process -xsl test.xsl -in test.xml -out test.txt&lt;/pre&gt;&lt;br /&gt;と打つとtest.txtができた。OK。&lt;br /&gt;&lt;br /&gt;次に、.bash_profileにエイリアスを書く。&lt;br /&gt;&lt;pre class="prettyprint"&gt;alias xalan='java org.apache.xalan.xslt.Process'&lt;/pre&gt;&lt;br /&gt;と追加して、&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ xalan -xsl test.xsl -in test.xml -out test.txt&lt;/pre&gt;&lt;br /&gt;で動いた。OK。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-5165333144759251125?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/5165333144759251125/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=5165333144759251125' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5165333144759251125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/5165333144759251125'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/10/macxalan.html' title='Macでxalanを使う'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-1414578176967182661</id><published>2008-10-14T23:44:00.008+09:00</published><updated>2010-05-10T04:46:42.520+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>functionをreturnするfunction、それがクロージャ</title><content type='html'>ちょっとブレイクスルーがあったのでメモ。&lt;br /&gt;JavaScriptでのクロージャの話。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;Greeting = function(aisatsu){&lt;br /&gt;　return function(name){&lt;br /&gt; 　　alert (aisatsu + "、" + name + "さん！");&lt;br /&gt; 　　return;&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;morning = new Greeting("おはよう");&lt;br /&gt;morning("佐藤");&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;クロージャは関数を返す関数なのだ。&lt;br /&gt;上の例だとGreetingに"おはよう"を渡す事で、&lt;br /&gt;中のfunctionは&lt;br /&gt;&lt;pre class="prettyprint"&gt;function(name){&lt;br /&gt; 　alert ("おはよう" + "、" + name + "さん！");&lt;br /&gt; 　return;&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;になって、それをmorningに代入してるというわけか。&lt;br /&gt;ようやく理解できた。なるほど！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-1414578176967182661?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/1414578176967182661/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=1414578176967182661' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1414578176967182661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/1414578176967182661'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/10/functionreturnfunction.html' title='functionをreturnするfunction、それがクロージャ'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-6486187765076207008</id><published>2008-10-12T09:01:00.040+09:00</published><updated>2010-05-11T11:08:03.588+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>やさしいJavaとGroovy</title><content type='html'>Groovyの勉強をはじめたが、Groovyの本や解説サイトには「まずGroovyとJavaとの違いから」「Javaの基本的知識はあるものとして説明」という言葉だらけになっている。&lt;br /&gt;自分はJava素人なので、まずJavaから勉強することにした。&lt;br /&gt;&lt;br /&gt;用意した本は、会社にあった「&lt;a href="http://www.amazon.co.jp/gp/product/4797331828?ie=UTF8&amp;tag=kanemu1117nc-22&amp;link_code=wql&amp;camp=759&amp;creative=3887"&gt;やさしいJava 第3版&lt;/a&gt;」、「&lt;a href="http://www.amazon.co.jp/gp/product/4839927278?ie=UTF8&amp;tag=kanemu1117nc-22&amp;link_code=wql&amp;camp=759&amp;creative=3887"&gt;Groovyイン・アクション&lt;/a&gt;」の２冊。&lt;br /&gt;まず、やさしい&lt;a href="http://homepage3.nifty.com/%7Emana/yasaj.html"&gt;Javaのサポートページ&lt;/a&gt;から、サンプルコードをダウンロードする。&lt;br /&gt;&lt;br /&gt;やさしいJavaのサンプルコードを開けてみると、文字コードがShift-JISになっている。&lt;br /&gt;会社で支給されているテキストエディタは&lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt;。日本語化してもUTF-8しか表示できない。&lt;br /&gt;なので、全部UTF-8に変換する。&lt;br /&gt;Mac用でテキストエンコードの一括変換できるソフトで、&lt;a href="http://www.rk-k.com/mtc.html"&gt;MultiTextConverter&lt;/a&gt;というのがあったのでそれを使用。&lt;br /&gt;&lt;br /&gt;なんかエラーが出て、全部を変換できない……。&lt;br /&gt;しょうがないので１フォルダづつ変換して、上手くいかないものは&lt;a href="http://www.artman21.com/jp/jedit_x/"&gt;Jedit X&lt;/a&gt;で開いて別名保存。&lt;br /&gt;&lt;br /&gt;無事全てをUTF-8にできたので、&lt;a href="http://iterm.sourceforge.net/localization.shtml"&gt;iTerm&lt;/a&gt;を立ち上げ、サンプルコードのディレクトリへ行く。&lt;br /&gt;自分はルート以下に/work/projects/ディレクトリを作って入れている。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cd /work/projects/YJSample/&lt;br /&gt;$ mate .&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SPFIyYkOyVI/AAAAAAAAAEM/diPpeKfBfEg/s200/textMateMandW.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 118px;" src="http://3.bp.blogspot.com/_NsZ3kbgYLEw/SPFIyYkOyVI/AAAAAAAAAEM/diPpeKfBfEg/s200/textMateMandW.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;TextMateが立ち上がって、メニュー表示される。OK。&lt;br /&gt;&lt;br /&gt;次、Javaの設定。&lt;br /&gt;JavaはMacに標準でインストールされるので、「パスを通す」。この言葉は始めの頃ずいぶん悩んだけど、要はシェルで使えるようにする事なんだと気づいて納得した。&lt;br /&gt;&lt;br /&gt;ホームディレクトリにある.bash_profileに以下を記述する。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;export JAVA_HOME=/Library/Java/Home&lt;br /&gt;export PATH=$JAVA_HOME/bin:$PATH&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;iTermから&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ java -version&lt;br /&gt;java version "1.5.0_16"&lt;br /&gt;Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-275)&lt;br /&gt;Java HotSpot(TM) Client VM (build 1.5.0_16-132, mixed mode, sharing)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これでOK。&lt;br /&gt;&lt;br /&gt;次、Groovyのインストールと設定。&lt;br /&gt;&lt;a href="http://groovy.codehaus.org/Download"&gt;groovyのdownloadページ&lt;/a&gt;から最新のgroovyをダウンロードしてきて展開。&lt;br /&gt;こういうのは/opt/ディレクトリを作って入れているので、そこに入れる。&lt;br /&gt;パスを通す。.bash_profileに以下を記述。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;export GROOVY_HOME=/opt/groovy-1.5.6&lt;br /&gt;export PATH=$GROOVY_HOME/bin:$PATH&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;iTermから&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovy -version&lt;br /&gt;Groovy Version: 1.5.6 JVM: 1.5.0_16-132&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OK。&lt;br /&gt;&lt;br /&gt;javacをやってみる。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cd /work/projects/YJSample/01&lt;br /&gt;$ javac Sample1.java&lt;br /&gt;Sample1.java:5: #x##:###̕####́A#G###R#[#f#B###O SJIS #Ƀ}#b#v#ł##܂######&lt;br /&gt;System.out.println("ようこそJavaへ?#?");&lt;br /&gt;^&lt;br /&gt;Sample1.java:5: #x##:###̕####́A#G###R#[#f#B###O SJIS #Ƀ}#b#v#ł##܂######&lt;br /&gt;System.out.println("ようこそJavaへ?#?");&lt;br /&gt;^&lt;br /&gt;#x## 2 ###&lt;br /&gt;$ java Sample1&lt;br /&gt;ようこそJavaへ?#?&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;なんか文字が化ける。。。iTermの表示はちゃんとUTF-8にしてある。&lt;br /&gt;&lt;br /&gt;たくさんぐぐって調べると、どうもjavacはエンコーディングを明示しないとOSのデフォルト・エンコーディングで変換する様子。MacはSJISになっていて、OSのデフォルトは変更できないっぽい。&lt;br /&gt;ここに書いてある方法をもとに、エンコードを指定してやってみる。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ javac -encoding UTF-8 Sample1.java&lt;br /&gt;$ java -Dfile.encoding=UTF-8 Sample1&lt;/pre&gt;&lt;br /&gt;ようこそJavaへ！&lt;br /&gt;&lt;br /&gt;次はgroovycを試す。&lt;br /&gt;試しにSample1g.groovyを書いて、以下のようにする。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;println "ようこそGroovyへ！"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これをgroovycしてみる。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovyc Sample1g.groovy&lt;br /&gt;$ java -cp $GROOVY_HOME/embeddable/groovy-all-1.5.6.jar: Sample1g&lt;br /&gt;ようこそGroovyへ?#?&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;javacの時と同じことが起こっているので、encodingを指定する。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovyc --encoding UTF-8 Sample1g.groovy&lt;br /&gt;$ java -Dfile.encoding=UTF8 -cp $GROOVY_HOME/embeddable/groovy-all-1.5.6.jar: Sample1g&lt;br /&gt;ようこそGroovyへ！&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;毎回javacとgroovycのときに同じ事を書くのはめんどいので、.bash_profileにエイリアスを書く。&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;alias javac="javac -encoding UTF-8"&lt;br /&gt;alias groovyc="groovyc --encoding UTF-8"&lt;br /&gt;alias java="java -Dfile.encoding=UTF8 -cp $GROOVY_HOME/embeddable/groovy-all-1.5.6.jar:"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これで、JavaとGroovyを完全に同じに扱えるようになった。※追記2で変更↓&lt;br /&gt;&lt;br /&gt;追記：&lt;br /&gt;ひとつ問題発見。コンパイルじゃなく.groovyをそのまま走らせようとすると、&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovy Sample1g.groovy&lt;br /&gt;ようこそGroovyへ?#?&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;という風に化ける。ああ、こっちもUTF指定しなきゃだめかと思い、&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovy -c UTF8 Sample1g.groovy&lt;br /&gt;#悤####Groovy#ցI&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;はいい？もしやと思いiTermの表示をS-JISにしてみると&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ groovy -c UTF8 Sample1g.groovy&lt;br /&gt;ようこそGroovyへ！&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;groovyコマンドは内部でコンパイルしてるわけだから、groovyc→javaってやってるわけで、→javaのときにエンコード指定を拾ってない？？？&lt;br /&gt;&lt;br /&gt;追記2：&lt;br /&gt;そもそも、Javaの思想に「一度書いたらどこでも動く」てのがあるわけで、各プラットフォームがそれぞれ別のデフォルトエンコーディングを持っていたら、そのエンコーディングに合わせて動かなくちゃいけない。そのためにJavaの内部的には文字コードは全てUnicodeで持っていて、各プラットフォームごとに合わせているらしい。&lt;br /&gt;&lt;br /&gt;それを考えると、groovyコマンドがコンパイル時にだけエンコードを指定できて、中身のJavaバイトコードはUnicodeで持ち、出力はデフォルトプラットフォームに合わせる、って動きなのも合ってるような気がしてきた。&lt;br /&gt;&lt;br /&gt;なので、iTermの画面はShift-JIS表示にして、Javaコマンドのエイリアスからは-Dfile.encoding=UTF8の指示は取る。残った.bash_profileのエイリアスは&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;alias javac="javac -encoding UTF-8"&lt;br /&gt;alias groovyc="groovyc --encoding UTF-8"&lt;br /&gt;alias java="java -cp $GROOVY_HOME/embeddable/groovy-all-1.5.7.jar:"&lt;br /&gt;alias groovy="groovy -c UTF-8"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;この状態で運用することに決定。&lt;br /&gt;疲れた……。&lt;br /&gt;&lt;br /&gt;追記3：2008年11月23日&lt;br /&gt;さらに追記。&lt;br /&gt;MacOSX 10.5で、この条件で動かしたら文字が化ける！&lt;br /&gt;&lt;a href="http://www.ksroom.com/page24/files/0dd080a260216d10c303b08ba8744898-149.html"&gt;Mac OS 10.5で、論理工房のJava関連4Dプラグイン&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Apple社のJavaバーチャルマシンでは、Mac OS  8〜10.4まで、デフォルトの文字エンコーディングとして「Shift_JIS」が採用されていましたが、Mac OS 10.5では、「UTF-8」が採用されています。&lt;/blockquote&gt;&lt;br /&gt;おぉ…。&lt;br /&gt;&lt;br /&gt;そういうわけで、&lt;br /&gt;・プログラムのエンコードをUTF8に統一するには、上記のエイリアスを記述する&lt;br /&gt;・ターミナルコンソールは、10.4以前はShift-JIS、10.5以降はUTF8表示にする&lt;br /&gt;で、こんどこそOKです。あしからず。&lt;br /&gt;&lt;br /&gt;追記4：2010年5月11日&lt;br /&gt;Java6からは、デフォルトエンコーディングがShift-JISに戻ってるみたいです。&lt;br /&gt;Appleの意図がわからない……。&lt;br /&gt;Groovyのエンコード設定については、@uehajさんが以下のページで詳しく書いてくれています。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/uehaj/20090815/1250316330"&gt;groovyでスクリプトのエンコーディングを指定する - Grな日々(uehajの日記)&lt;/a&gt;&lt;br /&gt;結論としては、&lt;GROOVY_HOME&gt;/bin/startGroovy(.bat) に&lt;br /&gt;&lt;pre class="prettyprint"&gt;export JAVA_OPTS='-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8'&lt;/pre&gt;&lt;br /&gt;の1行を書き加えるのがいいようです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-6486187765076207008?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/6486187765076207008/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=6486187765076207008' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6486187765076207008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/6486187765076207008'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/10/javagroovy.html' title='やさしいJavaとGroovy'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NsZ3kbgYLEw/SPFIyYkOyVI/AAAAAAAAAEM/diPpeKfBfEg/s72-c/textMateMandW.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4515362030076263722.post-2273350333577831304</id><published>2008-09-03T08:02:00.006+09:00</published><updated>2010-05-10T04:37:19.785+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='InDesign'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtendScript'/><title type='text'>OS固有のパス表記は使いたくない時</title><content type='html'>InDesignって、&lt;br /&gt;&lt;pre class="prettyprint"&gt;filename = "~/Desktop/sampleFile.indd";&lt;br /&gt;app.open(filename);&lt;/pre&gt;と書いてもファイルを開けないんです。開くには、&lt;br /&gt;&lt;pre class="prettyprint"&gt;filename = "Macintosh HD:Users:kanemu:Desktop:sampleFile.indd";&lt;br /&gt;app.open(filename);&lt;/pre&gt;みたいに、OS固有表記で書かなきゃいけない。&lt;br /&gt;これではスクリプトをMac,WIN共有で使いたい時、よろしくない。&lt;br /&gt;ではどうするか？&lt;br /&gt;&lt;pre class="prettyprint"&gt;filename = "~/Desktop/sampleFile.indd";&lt;br /&gt;app.open(File(filename));&lt;/pre&gt;&lt;br /&gt;これでOK。File()でくくって、Fileオブジェクトにして渡してやればいい。&lt;br /&gt;&lt;br /&gt;もっと早く気づいていれば…orz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4515362030076263722-2273350333577831304?l=blog.kanemu.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.kanemu.net/feeds/2273350333577831304/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4515362030076263722&amp;postID=2273350333577831304' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2273350333577831304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4515362030076263722/posts/default/2273350333577831304'/><link rel='alternate' type='text/html' href='http://blog.kanemu.net/2008/09/os.html' title='OS固有のパス表記は使いたくない時'/><author><name>kanemu1117nc</name><uri>http://www.blogger.com/profile/05258456497243739851</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_NsZ3kbgYLEw/TOovqsfvfZI/AAAAAAAAAUU/u7bDFc9Dh1g/s1600-R/ninja.jpg'/></author><thr:total>0</thr:total></entry></feed>
