// 雑記 AppleScript "); } }

雑記

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[勉強会][FileMaker] FM-Tokyo

10月24日、FM-TokyoにてFileMakerもくもく会の活動報告をしてきました。

今回の会では珍しくQ&Aの時間が取れたので、ちょっと前に遭遇した、Web DirectになってサポートされたデータのエクスポートがServer 14ならダウンロードできるのにServer 13だとダウンロードできない事について質問しました。

すぐに、『ポップアップのブロックじゃないのか?』との情報があり、深澤さんが検証してくれた結果、やはりブラウザのポップアップブロックが原因でした。
ポップアップブロックをしているといくつかの機能が動作しないとの事でした。


それにしても参加者の中で13でWeb Directを使用している人が私しかいないとは……(苦笑
スポンサーサイト

[勉強会][Database][Oralce]

今、隔週でOracle Databaseの勉強会に参加しています。

データベースはFileMakerで開発・運用をしていますが、別のデータベースにも興味があったので参加をしたのですが、系統だって学んだ事がなかったので、FileMakerの理解も深まってきたような気がしてます。

さて、第四回目で学んだ、索引(インデックス)が目から鱗でした!

FileMakerでももちろん索引はあるけど、索引があると検索が速くなる仕組みがわからず、何となくモヤモヤしてました。

Tree構造
ブロック
物理的な格納先

[AppeScript][Automator] テキストエディタの文字数のカウント

TLに流れてきた文字数をカウントするAppleScript。
全部のキーコードを数えていたので、普通、改行を1文字とはカウントしないよな。と思って書きました。
(車輪の再開発だとは思いましたが…)

あと、どうせならAutomatorのサービスで作ればショートカット割当も簡単ですよと。

Rubyを使っているので10.10だとうまく動かないかも……

環境:10.9


set qt to "\""
set displayTime to 1

tell application "TextEdit" to set theText to text of document 1
activate

set shellcmd to "ruby -Ku -e " & quoted form of ("print " & qt & theText & qt & ". gsub(/\\s/,\"\")")
set tmp to my doshell(shellcmd)

display dialog ((count of tmp) as string) & "文字" buttons {"OK"} default button 1 giving up after displayTime

on doshell(cmd)
do shell script cmd
end doshell


Scriptはシンプルにテキストエディタから内容を取得して、Rubyの正規表現で空白文字をざっくりと削除してカウント。(空白やタブもカウントしませんよね?)
ちょっと修正。
表示する事に意味はないので、表示後1秒で自動で閉じるようにしました。
早いや遅いは適宜displayTimeの値を変えてください。

workflowファイルはこちらから
ショートカットの設定はこちらから


Automator

ファイルから新規サービスを選択





AppleScriptで値を取りにいっているので、項目の受け取り入力なし
検索対象テキストエディタを選択。(ポップアップに表示されていない場合は、その他から選択してください。)
検索対象を設定する事で他のアプリケーションでは表示されないようになります。





左のアクションからAppleScriptを実行をダブルクリック





先ほどのScriptをコピー&ペースト。





任意の名前をつけて保存します。ここでは文字数カウントとしました。
保存をした場合にはフォルダは選択できません。
保存先は/Users/Userネーム/Library/Services/になります。




これでAutomatorでの作業は終わりました。
テキストエディタサービスメニューに文字数カウントという項目が出てきているはずです。





キーボードショートカット

最後にショートカットの設定をしましょう。
システム環境設定キーボードショートカットのタブがありますのでここで設定します。


アプリケーションを選択し+ボタンをクリック。




アプリケーションテキストエディタを選択。
メニュータイトルには先ほどAutomatorで付けたファイル名を入力します。
文字数カウントと入力。
キーボードショートカットに任意の設定を入力してください。コマンド+Kとしました。そして追加ボタン。



ショートカットが設定されているのが確認できると思います。


以上、簡単な説明でした。


テーマ:ソフトウェア - ジャンル:コンピュータ

[ApplScript][Illustrator] 指定間隔で自動保存 v3

[ApplScript][Illustrator] 指定間隔で自動保存にコメントいただきました

cs5とcs6ではsaveされるのに、 cs3とcs4では一度も保存されてないようですと出て保存されません。


そういえばちょっと前にもTwitterで同様の症状をつぶやいてた人がいたな……


さて、メッセージが出るのはファイルパスが取得できない時なので、早速その部分を確認。

tell application "Adobe Illustrator"
	set path1 to file path of current document
end tel
l

返り値
«data fss 9CFF77EBC400066161612E61694350000000DEBC990270000000B0E4ED43B8E3FFBF93BD99021E2A9F0262BE9902B8E3FFBFE2C19B02B8E4ED43580CEE43B8E3FFBF00000000»


?? パスが返ってこない!?
調べてみると、『どのクラスにも属さない値』らしい。けど何を言ってるのやら……

さらに調べると

tell application "Adobe Illustrator"
	set path1 to file path of current document
set path2 to POSIX path of path1
end tell

返り値
"/Git/Illustrator/cycle_save/aaa.ai"


POSIX pathにcastすればいいようで、無事扱える形で取得する事ができました。


簡単な説明

waitTime
で設定した間隔でIllustratorの最前面にあるファイルを保存し、_versionフォルダに、ファイル名+タイムスタンプでコピーします。

waitTime … 保存する間隔を分単位で設定します。デフォルトは15分。

デフォルトでは『PDF互換』にチェックをいれてませんので、互換ファイルの方がよい方は『on doc_save(doc_path)』の部分を修正してください。

上記を設定の上、別名保存でファイルフォーマットからアプリケーションを選び、実行後、自動的に終了しないにチェックをいれて保存してください。
終了させるにはアプリケーションをアクティブにして終了させるか、Dockから終了させてください。



まずは通常?バージョンから
ファイルはこちらからダウンロードできます。
また、Illustratorの終了時に自動で終了するバージョンと同梱しています。


(*
2012-08-27 v1.0
2015-04-03 v1.1 ファイルパスがalias値で返ってこない時への対応
*)

property waitTime : 15 --分単位

on idle {}
my main()
return waitTime * minutes

end idle


on main()
tell application "Adobe Illustrator"
if (count of document) is not 0 then
set flg_doc to false
tell current document
set doc_name to name
try
set doc_path to file path
set doc_path to (POSIX path of doc_path) as POSIX file
tell application "Finder" to set parent_Folder to parent of (doc_path as alias) as Unicode text

set flg_doc to true
on error
display dialog "一度も保存されていないようです" buttons " OK " default button 1
return
end try
end tell

if modified of current document is true then

my doc_save(doc_path)

if flg_doc then
my doc_copy(parent_Folder, doc_path, doc_name)
end if

end if
end if
end tell
end main


on doc_save(doc_path)
tell application "Adobe Illustrator"
save current document in file doc_path as Illustrator with options {class:Illustrator save options, PDF compatible:false}
--PDF互換にするにはPDF compatible:falseをtrueにする
end tell
end doc_save


on doc_copy(parent_Folder, doc_path, doc_name)
set p_parent_Folder to POSIX path of parent_Folder
set p_doc_path to POSIX path of doc_path

set new_doc_path to p_parent_Folder & "_version/" & my Delimiters(doc_name, ".ai", "_" & my DateToString() & ".ai")

set shellcmd to "cp -p " & quoted form of p_doc_path & " " & quoted form of new_doc_path
--display dialog shellcmd
try
do shell script shellcmd
on error
my make_folder(parent_Folder, doc_path, doc_name)
end try
end doc_copy


on make_folder(parent_Folder, doc_path, doc_name)
tell application "Finder" to make new folder at (parent_Folder as alias) with properties {name:"_version"}
my doc_copy(parent_Folder, doc_path, doc_name)
end make_folder


on Delimiters(theText, serchStr, replaceStr)
set OriginalDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to serchStr
set theText to text items of theText
set AppleScript's text item delimiters to replaceStr
set theText to theText as string
set AppleScript's text item delimiters to OriginalDelimiters
return theText
end Delimiters


on DateToString()
set todayStr to do shell script "date '+%m%d_%k%M'" --秒を追加する時はMのあとに%Sを追加
return (todayStr)
end DateToString



続いて、自動終了バージョン


(*
2012-08-27 v1.0
2012-09-06 v1.1 ドキュメント修正時のみ保存
2014-06-23 v1.2 アプリケーションの終了時に付随して終了させる
2015-04-03 v1.3 ファイルパスがalias値で返ってこない時への対応
*)

property wait_Time : 15 --分 保存する間隔
property idle_Time : 2 --秒 プロセス監視の間隔
property elapsed_Time : 0 --前回保存時よりの経過時間

on idle
my watch_ill()

return idle_Time
end idle


on watch_ill()
try
do shell script "ps cx | grep Illustrator"

if wait_Time * minutes - idle_Time is less than or equal to elapsed_Time then
my main()
set elapsed_Time to 0
end if

on error
quit --Illustratorが起動していない場合は終了
end try

set elapsed_Time to elapsed_Time + idle_Time

end watch_ill


on main()
tell application "Adobe Illustrator"
if (count of document) is not 0 then
set flg_doc to false
tell current document
set doc_name to name
try
set doc_path to file path
set doc_path to (POSIX path of doc_path) as POSIX file
tell application "Finder" to set parent_Folder to parent of (doc_path as alias) as Unicode text

set flg_doc to true
on error
display dialog "一度も保存されていないようです" buttons " OK " default button 1
return
end try
end tell

if modified of current document is true then

my doc_save(doc_path)

if flg_doc then
my doc_copy(parent_Folder, doc_path, doc_name)
end if

end if
end if
end tell
end main


on doc_save(doc_path)
tell application "Adobe Illustrator"
save current document in file doc_path as Illustrator with options {class:Illustrator save options, PDF compatible:false}
--PDF互換にするにはPDF compatible:falseをtrueにする
end tell
end doc_save


on doc_copy(parent_Folder, doc_path, doc_name)
set p_parent_Folder to POSIX path of parent_Folder
set p_doc_path to POSIX path of doc_path

set new_doc_path to p_parent_Folder & "_version/" & my Delimiters(doc_name, ".ai", "_" & my DateToString() & ".ai")

set shellcmd to "cp -p " & quoted form of p_doc_path & " " & quoted form of new_doc_path
--display dialog shellcmd
try
do shell script shellcmd
on error
my make_folder(parent_Folder, doc_path, doc_name)
end try
end doc_copy


on make_folder(parent_Folder, doc_path, doc_name)
tell application "Finder" to make new folder at (parent_Folder as alias) with properties {name:"_version"}
my doc_copy(parent_Folder, doc_path, doc_name)
end make_folder


on Delimiters(theText, serchStr, replaceStr)
set OriginalDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to serchStr
set theText to text items of theText
set AppleScript's text item delimiters to replaceStr
set theText to theText as string
set AppleScript's text item delimiters to OriginalDelimiters
return theText
end Delimiters


on DateToString()
set todayStr to do shell script "date '+%m%d_%k%M'" --秒を追加する時はMのあとに%Sを追加
return (todayStr)
end DateToString




※注意
前回同様、保存という処理の性質上、元に戻せません。ご使用の際には充分な検証をなさった上でご利用下さい。
よくいわれる"At your own risk"でお願いします。
Script処理がはじまった時に、アクティブ(最前面)なファイルに対して保存を行いますので、他のファイルからパーツだけ欲しいという場合等は複製を開いた方がよいでしょう。



最後に
CS3を使う場合には10.4で作業していたため、上位のバージョンのOSでは確認した事がありませんでした。
南部さん、ご報告ありがとうございました。

テーマ:ソフトウェア - ジャンル:コンピュータ

[AppleScript][Illustrator][Photoshop] 保存したバージョン・アプリケーションで開く

以前、Illustratorファイルを、保存したバージョンで開くScriptを公開致しましたが、もう一つ面倒な拡張子が残っていますね。

そう、eps

うっかりダブルクリックしてしまいプレビューがラスタライズを始めたり、Photoshopのラスタライズ設定のダイアログがでたり……
そんな経験、一度や二度ではないはず!!(前にも言ったかな…)

そこで、前回のaiに加え、epsは保存したアプリケーションで開くように機能を追加しました。

前回同様、Illustratorは保存時にターゲットにしたバージョンで開きます。つまり、下位バージョンにダウンバージョンで保存した場合、指定した下位のバージョンのIllustratorでファイルを開きます。
ターゲットになるバージョンがインストールされていない場合は、利用したいバージョンのIllustratorを指定するダイアログが出ますので任意で指定できます。(別のアプリケーションも指定できるのはご愛嬌)


PhotoshopはIlustratorと違い、バージョンの差異による影響は少ないと思い、あらかじめScriptをダブルクリックで起動し、利用するバージョンを指定しておくか、どのバージョンを利用するかを指定するダイアログが出ますのでそこで任意のバージョンを指定してください。

Exiftoolです。
リンク先からダウンロード&インストールしてください。


アプリケーションにDrag&Dropするか、予め.ai.epsファイルをAiEpsで開くように情報ウィンドウで設定すれば、ファイルのダブルクリックで保存したバージョンで開くと思います。

追記2014−10−27
『このアプリケーションで開く』の『すべてを変更』はOSのバージョンによってはうまく設定できないようです。


CC2014〜CS3まで対応しています。(のはず…)

AiEps.zip



今回、アイコンをイラレラボ illustrator-laboで有名なカワココさんに作成してもらいました!
アプリケーションの概要をお伝えし、そこからのイメージでとてもすばらしいアイコンに仕上げて頂きました!

ありがとうございました! 重ねてお礼申し上げます。




property Photoshop : ""

on run

my choose_app("ph")

end run

on open theList
repeat with aFile in theList
my main(aFile)
end repeat
end open


on main(aFile)
set posix_aFile to POSIX path of aFile
set shellcmd to "ExifTool -T -Creator " & quoted form of posix_aFile --creatorバージョン取得
set result_app_str to do shell script shellcmd


if (offset of "Photoshop" in result_app_str) is not 0 then
my launch_Ph(aFile)
else if (offset of "Illustrator" in result_app_str) is not 0 then
my launch_ill(aFile, result_app_str)
else
tell application "Finder"
set aExt to name extension of (info for aFile)

if aExt is "psd" or aExt is "jpg" or aExt is "tif" then
my launch_Ph(aFile)
end if
end tell
end if
end main


--Photoshop 起動
on launch_Ph(aFile)

if Photoshop is "" then my choose_app("ph")
my launch_App(Photoshop, aFile) --取得バージョンで開く

end launch_Ph


--Illustrator 起動
on launch_ill(aFile, result_app_str)

set ver to my get_ver(aFile, result_app_str) --バージョン取得
set Illustrator to my choose_Ill_ver(ver) as Unicode text --アプリケーション指定

my launch_App(Illustrator, aFile) --取得バージョンで開く

end launch_ill


--指定アプリケーションで開く
on launch_App(apl, aFile)
tell application apl
activate
open aFile
end tell
end launch_App


on get_ver(aFile, ver)

set CC2014 to 18
set cc to 17
set cs6 to 16
set cs5 to 15
set cs4 to 14
set cs3 to 13


set posix_aFile to POSIX path of aFile

if (offset of CC2014 in ver) is not 0 then
--display dialog "CC 2014"
return "CC 2014"

else if (offset of cc in ver) is not 0 then
--display dialog "CC"
set shellcmd to "ExifTool -T -Creatortool " & quoted form of posix_aFile
set ver_sub to do shell script shellcmd
if (offset of "2014" in ver_sub) is not 0 then
return "CC 2014"
else
return "CC"
end if

else if (offset of cs6 in ver) is not 0 then
--display dialog "CS6"
return "CS6"

else if (offset of cs5 in ver) is not 0 then
--display dialog "CS5"
set shellcmd to "ExifTool -T -Creatortool " & quoted form of posix_aFile
set ver_sub to do shell script shellcmd
if (offset of "2014" in ver_sub) is not 0 then
return "CS5.1"
else if (offset of "CS5.1" in ver_sub) is not 0 then
return "CS5.1"
else
return "CS5"
end if

else if (offset of cs4 in ver) is not 0 then
--display dialog "CS4"
return "CS4"

else if (offset of cs3 in ver) is not 0 then
--display dialog "CS3"
return "CS3"

else
return "none"
end if
end get_ver


on choose_Ill_ver(ver)
if ver is not "none" then
try
set open_app to (((path to applications folder as Unicode text) & "Adobe Illustrator " & ver & ":Adobe Illustrator.app")) as alias
set open_app to open_app as Unicode text
return open_app

on error
set launch_ill to my choose_app("Ill")
return launch_ill

end try

else
set launch_ill to my choose_app("Ill")
return launch_ill
end if

end choose_Ill_ver


on choose_app(apl)
if apl is "ph" then
set msg to "Adobe Photoshopを指定してください。"
else
set msg to "Adobe Illustratorを指定してください。"
end if

set tmp to choose file with prompt msg default location path to applications folder
if tmp is not "" and apl is "ph" then
set Photoshop to tmp as Unicode text
end if

return tmp
end choose_app

テーマ:ソフトウェア - ジャンル:コンピュータ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。