bgpict2.png 
わかばマークのMacの備忘録
初心者による Mac OSX の便利な使い方や、ソフトウェアの紹介など、Macのこといろいろ。

2009 / 11

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 

http://wakabamac.blog95.fc2.com/?overture" target="_new

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

edit

スポンサー広告 | |
+

http://wakabamac.blog95.fc2.com/blog-entry-994.html

Task3 / タスクの設定例(4)
icn_Task3.jpg
Task3 : あらゆるタスクを自動化する
Growl対応
OS10.4.11以上(UB)
シェアウェア ¥1,500(銀行振込)、¥1,700(PayPal)


Task3 / タスクの設定例(3)』のつづき

Task3 / タスクの設定例(4)
(各項目へジャンプします)




t3_itunes_scripts

ホットキーで iTunes を操作したら便利そうな AppleScript


Task3 はホットキーを設定してアクションを実行できるのですが、ホットキーで iTunes を操作できたら便利だろうということで、それ用の AppleScript を書いてみました。

それぞれの AppleScript を Task3 の「アクション」に設定して、トリガーでホットキーを設定して使います。


再生・一時停止
tell application "iTunes"
if player state is playing then
pause
else
play
end if
end tell

iTunes が起動していないときでも、このスクリプトを実行すると、iTunes が起動して再生し始めます。


次のトラックを再生
tell application "System Events" to set appList to name of every application process whose background only is false
if appList contains "iTunes" then
tell application "iTunes" to play (next track)
end if
(iTunes が起動していないときは、動作しない)



停止
tell application "System Events" to set appList to name of every application process whose background only is false
if appList contains "iTunes" then
tell application "iTunes" to stop
end if
(iTunes が起動していないときは、動作しない)



ボリュームUP
tell application "System Events" to set appList to name of every application process whose background only is false
if appList contains "iTunes" then
tell application "iTunes"
set soundVol to sound volume
if soundVol > 90 then
set sound volume to 100
else
set sound volume to soundVol + 10
end if
end tell
end if
(iTunes が起動していないときは、動作しない)



ボリュームDOWN

ソースは略(iTunes が起動していないときは、動作しない)



ミュートのON/OFF切り替え
tell application "System Events" to set appList to name of every application process whose background only is false
if appList contains "iTunes" then
tell application "iTunes"
if mute is false then
set mute to true
else
set mute to false
end if
end tell
end if
(iTunes が起動していないときは、動作しない)



現在の曲情報を Growl で表示
set rt to return as text
tell application "System Events" to set appList to name of every application process whose background only is false
if appList contains "iTunes" then
tell application "iTunes"
if class of current track is not URL track then
try
tell current track
set theTrack to name
set theArtist to artist
set theAlbum to "[ " & album & " ]"
set numRating to rating
set theRating to "―――――"
if numRating < 5 then set theRating to "・・・・・"
if numRating ≥ 5 and numRating < 15 then set theRating to・・・・"
if numRating ≥ 15 and numRating < 25 then set theRating to "★・・・・"
if numRating ≥ 25 and numRating < 35 then set theRating to "½・・・"
if numRating ≥ 35 and numRating < 45 then set theRating to "★★・・・"
if numRating ≥ 45 and numRating < 55 then set theRating to "★★½・・"
if numRating ≥ 55 and numRating < 65 then set theRating to "★★★・・"
if numRating ≥ 65 and numRating < 75 then set theRating to "★★★½"
if numRating ≥ 75 and numRating < 85 then set theRating to "★★★★・"
if numRating ≥ 85 and numRating < 95 then set theRating to "★★★★½"
if numRating ≥ 95 then set theRating to "★★★★★"
end tell
end try
else if class of current track is URL track then
set theTrack to current stream title
set theArtist to comment of current track
set theAlbum to "[ " & name of current track & " ]"
set theRating to ""
end if

if exists artworks of current track then
set theArtwork to data of artwork 1 of current track
try
tell application "GrowlHelperApp" to notify with name "Task3MessageWorkNotification" title (theTrack as Unicode text) description ((theArtist & rt & theAlbum & rt & theRating) as Unicode text) application name "task3runner" pictImage theArtwork --sticky "yes"
end try
else
try
tell application "GrowlHelperApp" to notify with name "Task3MessageWorkNotification" title (theTrack as Unicode text) description ((theArtist & rt & theAlbum & rt & theRating) as Unicode text) application name "task3runner" icon of application "iTunes" --sticky "yes"
end try
end if
end tell
end if
(iTunes が起動していないときは、動作しない)

現在再生中の曲情報を Growl で表示します。
090916tsk81.jpg

ただし、Growl でアートワークを表示させているせいか?やけに「GrowlHelperApp」への負荷が掛かってしまう。
それと、このスクリプトを AppleScript Editor で試しに実行すると、AppleScript Editor が強制的に終了してしまうので注意。(どこに問題があるのかよくわからない)



現在の曲のレートを★1/2ずつUP

ソースは略(iTunes が起動していないときは、動作しない)

現在再生中の曲のレートを★1/2UPします。
そして Growl でその曲情報を表示します。



現在の曲のレートを★1/2ずつDOWN

ソースは略(iTunes が起動していないときは、動作しない)

現在再生中の曲のレートを★1/2DOWNします。
そして Growl でその曲情報を表示します。



別にホットキーに設定しなくても、Task3メニューから使えば、メニューバーにある iTunes コントローラ として使えます。
090916tsk82.gif

これら上記の AppleScript を保存したものをアップロードしたので、欲しい人はどうぞ。
iTunes_Scripts_for_Task3

AppleScript Editor で開いて、ソースを Task3 にコピペして使って下さい。
この中の「♫ Show Info.scpt」「★↑ Increase Rating.scpt」「★↓ Decrease Rating.scpt」の3つは AppleScript Editor で実行すると、AppleScript Editor が終了してしまうので注意。





t3_login_items

曜日ごとにログインアイテムを変更する


Task3 を使えば、曜日ごとに「ログインアイテム」を変更して、日によって違うアプリケーションを起動させることができます。

(トリガー)
リストから「コンピュータの起動/終了」を選択、コンピュータの起動時に実行するように設定します。
090916tsk83.gif


(アクション)
ファイル/アプリケーションを開く」で、ログイン時に起動させたいアプリケーションを選択して登録します。
※ここで登録したアプリケーションは、重複しないように
システム環境設定アカウントログイン項目
で登録しないようにしておきます。


(実行条件)
リストから「日時を制限」を選択して、曜日を選択していきます。
090916tsk84.gif

これでタスクを有効にして保存すると、月曜~金曜までの「ログイン項目」を設定できます。
また新規タスクを作成して、ここで指定した別の曜日にも、同じように起動するファイル・アプリケーションを設定すると、曜日ごとに違った「ログイン項目」になります。




他にも日にちを指定して、その日ごとに違うアプリケーションを「ログイン項目」に設定したい場合は、「実行条件」にAppleScript を設定することによって可能です。

例えば、月末だけ起動するように設定する場合、「実行条件」に下のような AppleScript を設定します。
090916tsk85.gif
set endOfMonthList to {"0131", "0228", "0229", "0331", "0430", "0531", "0630", "0731", "0831", "0930", "1031", "1130", "1231"}
set theToday to do shell script "date '+%m%d'"
return (endOfMonthList contains theToday)
(月末以外の他の日付を設定したい場合には、1行目の {} 内に "1201" とか日付の数字を入れて下さい)
これで「アクション」でアプリケーションを起動するようにすれば、それは月末だけの「ログイン項目」になります。





t3_virus_scan

ClamXav で定期的にウイルススキャン


ClamXavでウイルススキャンするときに、Task3 を併用すれば夜中にMacを起動(スリープ復帰)して、ウイルススキャン、終わったらシステム終了(スリープさせる)といった使い方ができます。

まず ClamXav の環境設定で「スケジュール」を設定します。
090916tsk86.gif
(↑ClamXav の環境設定のウインドウの画像です)
僕の場合は「ウイルス定義の更新」を毎週土曜日AM3:15、「スキャン」を毎週土曜日AM3:20 に実行するように設定しています。

CalmXav のスケジュール設定では、その時間にMacが起動している状態でないと機能しないので、Task3 で土曜日AM3:15よりも前に Mac を起動させるように、下のように設定しておきます。

(トリガー)
スケジュール」をリストから選択して、毎週土曜日AM3:10 に設定します。
090916tsk87.gif


(アクション)
コンピュータを起動/終了」をリストから選択して、コンピュータを 起動/復帰 と設定します。
090916tsk88.gif

このタスクを保存するときには、普通に保存するだけではスケジュール通りにMacの起動/復帰ができないので、「保存して起動日時を予約」( shift+command+S )します(パスワード入力が必要)。

設定できたら「起動予約を確認」で起動復帰のスケジュールを確認できます。



別にこれだけの設定でも、Mac が自動的に起動/スリープ復帰して、ClamXav でウイルススキャンできるのですが、この時間を利用してメンテナンスや、スキャンが終わった後にシステム環境設定の「省エネルギー」設定でのスリープを円滑にさせるように、Task3 で設定しておきます。

先ほどの「アクション」に実行する項目を追加していきます。
090916tsk89.gif

まずスリープを妨げるアプリケーション「Caffeine」をOFFにするようにAppleScriptを実行します。
tell application "Caffeine" to turn off

また、別のアクション項目を追加して Twitterクライアントの「夜フクロウ」を終了させるようにします。

他にも、何か自動的に動くアプリケーションなどを終了させたり、ネットワーク上のファイル共有でマウントしているサーバーをアンマウントしたり Task3 のアクション項目に追加しておきます。

これで、「省エネルギー」パネルで設定したスリープを妨げることなく、ウイルススキャンが完了するとスリープするようになります。


ついでに、この時間を利用してメンテナンスするように、アクション項目を追加しておきます。
メニューバーから各種メンテナンスをする』参照



念を入れて、もう一つ別のタスクを作成してスリープさせるようにも設定しておきます。
(何らかの予期しない理由で「省エネルギー」設定でのスリープができない状態になったときのため)

ウイルススキャンが終わる時間をだいたい見計らって、それに余裕を持たせた時間帯にスリープするように設定しておくといいでしょう。僕の場合はAM5:30に設定しています。

このときに、このタスクの「実行条件」で「日時を制限」しておいた方がいいです。
090916tsk90.gif

というのは、Task3 のタスクでスリープさせる前に、「省エネルギー」設定でのスリープが先に実行された場合、Task3 のタスクが持ち越されて次の日に使用するときにタスクが実行され、いきなりスリープしたみたいになってしまうからです。




こんな感じで、土曜日AM3:00頃に自動でウイルススキャン+もろもろを実行するように設定できました。

ただ、ClamXav のスケジュール設定は「1セット」のみしか設定できないので、例えば月曜日には別ボリューム内をスキャン、水曜日にはまた別のボリューム内をスキャンとか、そういった使い方ができません。

そこで Task3 で、ClamXav のエンジン「clamav」を実行させるようにして、複数のウイルススキャンのパターンのセットを作成して実行します。

Task3 で新規タスクを作成して、トリガーは自分の好きな日時を設定し、アクションで「コンピュータの起動/復帰」を設定します。さらにアクション項目を追加して、下のような AppleScript を実行するようにします。
property targetDirectoryList : {"対象フォルダのパス1", "対象フォルダのパス2", "対象フォルダのパス3"}
-- 上の行の{}内にスキャン対象にするフォルダのパスを""で囲って入力して下さい
-- 複数のフォルダを指定するときは「,」で区切って複数のパスを指定できます
-- {"/Applications","/Users","~/Desktop","~/Pictures"}

-- ウイルス定義の更新
do shell script "/usr/local/clamXav/bin/freshclam --quiet --log=/usr/local/clamXav/share/clamav/freshclam.log; open /usr/local/clamXav/share/clamav/freshclam.log"

set homePath to POSIX path of (path to home folder)
set stringOfPaths to ""
repeat with eachItem in targetDirectoryList
if eachItem contains "~" then
set eachPath to (do shell script "echo " & eachItem & " | sed -e 's/~//g'")
else
set eachPath to eachItem
end if
set stringOfPaths to stringOfPaths & space & (quoted form of eachPath)
end repeat

-- ウイルススキャン
tell application "Terminal"
activate
do script ("/usr/local/clamXav/bin/clamscan -r" & stringOfPaths & " --log=" & homePath & "Library/Logs/clamXav-scan.log ; open ~/Library/Logs/clamXav-scan.log")
end tell
※ 最初の行の {} 内にスキャン対象にするフォルダのパスを "" で囲って入力して下さい

このアクションを含むタスクをいくつか作成して、それにスケジュールトリガーを組み合わせれば、毎週の曜日ごとに違うボリュームなどのフォルダをスキャンしていくとかの、使用が可能になります。

(ターミナル上でコマンドを実行しているのは、ログを書き出すようにしていても、スキャン結果のサマリーがちゃんと表示されないことが多いので、ターミナル上で実行しています。)





t3_applescript

タスクを AppleScript で実行する


Task3 はAppleScript に対応しており、登録したタスクをそれぞれで実行できます。

AppleScript Editor で下のようなスクリプトを作成して実行します。
tell application "task3runner"
run task name "タスクのタイトル"
end tell
のコマンドで実行できます(「実行条件」を評価する)。


タスクの「実行条件」を無視して実行したい場合は
tell application "task3runner"
force run task name "タスクのタイトル"
end tell
とします。



これを使えば、Task3 以外のアプリケーション、例えばマウスジェスチャで AppleScript を実行できるものなどで、Task3 のタスクを実行できるようになります。





t3_task_applescript

タスクのアクションで実行する AppleScript について


僕は AppleScript がちょっとは分かる「なんちゃってAppleScripter」なので、Task3 のタスクのアクションで多く AppleScript を実行させています。

いろいろ Task3 で実行させる AppleScript で気付いたことをちょっと採り上げると・・・

例えば、Task3 で「メッセージ表示」での Growl 表示は、タスクに登録した文章でないと表示できません。
AppleScript で Growl 表示させるようにすると、AppleScript内で取得した数値や文字列など表示できるようになります。
set aTitle to "タイトル"
set aDescription to "文章内容"
set anIconOfApp to "task3runner" -- アイコンとして使うアプリケーション名 (例)"iTunes"
set aSticky to "no" -- "yes" or "no""yes" だとクリックするまで Growl のウインドウが表示され続ける
set aPriority to 0 -- 優先度。-2 から 2 まで。0 が標準。

tell application "GrowlHelperApp"
notify with name "Task3MessageWorkNotification" title (aTitle as Unicode text) description (aDescription as Unicode text) application name "task3runner" icon of application anIconOfApp sticky aSticky priority aPriority
end tell
このスクリプトを実行すると、こんな風に Growl で表示されます。
090916tsk91.jpg


例えば・・・
set aTitle to "Today"
set aDescription to current date
set anIconOfApp to "iCal"
set aSticky to "no"
set aPriority to 0

tell application "GrowlHelperApp"
notify with name "Task3MessageWorkNotification" title (aTitle as Unicode text) description (aDescription as Unicode text) application name "task3runner" icon of application anIconOfApp sticky aSticky priority aPriority
end tell
とすると、下のように現在日時を Growl で表示します。
090916tsk92.jpg



他にも、Task3 で「シェルスクリプトを実行」させる場合、sudo を付けてコマンドを実行することはできません。

そこで AppleScript でターミナル上でコマンドを実行するようにします。
tell application "Terminal"
activate
do script "sudo hoge"
end tell
こうすると、ターミナルが起動してパスワード入力を求められるので、入力して実行という具合になります。



また、パスワード入力せずにコマンドを実行したい場合は、ちょっと荒技で実行できます。
do shell script "sudo hoge" user name "管理者ユーザの登録アカウント名" password "そのパスワード" with administrator privileges
(ターミナル上ではなく、コマンドを実行します)




あと、Task3 のタスクの AppleScript では display dialogdisplay alert が実行できません。

これらを含むスクリプトを実行したいときは、AppleScript を「アプリケーション形式」に保存して、Task3 でそのアプリケーションを実行する形にします。






Task3 はまだまだバージョンアップして、機能が増えていくと思うので、
そのときはまた『Task3 / タスクの設定例(5)』を書くかも?







この記事では Task3 version 1.1.0 を使用しています。

(ダウンロードリンク)
Site top page : Spread Your Wings
Download page : Task3



(関連記事)
Task3 --- 基本的な「タスク」の設定のやり方など

Task3 / タスクの設定例(1)
Task3 / タスクの設定例(2)
Task3 / タスクの設定例(3)
Task3 / タスクの設定例(4)

edit

Utility | CM:0 | TB:0

tag : Task3 

+

http://wakabamac.blog95.fc2.com/blog-entry-996.html

Retweet ボタンを付けてみました
ブログの各記事のフッター部分に Twitter で、そのブログ記事に対してのコメントができるように「Retweet」ボタンを付けてみました。
Retweet_Icon.jpg(←これ)

こいつをクリックすると Twitterアカウントを持っている人なら、下のように新規ページを開いてコメントできます。
091119rt1.gif
参考『Twitterをはじめたブロガーがやっておくべきことまとめ - sarusaruworld lab - Web Lab


FC2ブログに同じような「Retweet」ボタンを設置する場合は、テンプレートのHTMLを編集して、各エントリを記述する部分の <!--topentry--> から <!--/topentry--> の間の表示させたい場所にこれを挿入します。

<a href="http://twitter.com/home?status=RT%20@自分のユーザ名:%20<%topentry_enc_utftitle>%20<%topentry_enc_link>" target="_blank" title="【<%topentry_title>】Twitterでコメントする">画像のimgタグやテキスト</a>

(※ 自分のユーザ名 のところには自分のTwitterのユーザ名を入力)

ほんとは自動でURLを短縮したいんだけど、JavaScript の知識がないので断念しました。
(ヒントになりそうなことが『見ているページをTwitterに投稿するBookmarkletとブログ用ボタン [C!]』ここに書いてあったけど、自分の望む仕様ではないので断念)



Twitter はまだ始めたばかりで、使い方はあまり、よくわかりません。
(かと言ってあまり調べる気もないけど)
タイムラインがあふれ返ってしまって消化しきれそうにないので、フォローしている人の数は少ないです。
(僕だけかもしれないけど、RSSリーダーで未読ばっかりになってしまって、結局何も見ないという状態が、また Twitter でも繰り返されるような気がして・・・)

そんな理由でフォローされても、お返しにフォローするといったことはしませんのでご了承下さい。






To the foreigners who is reading this weblog

Hello everybody of the readers of very few foreigners. Welcome to my weblog.

When you comment with this weblog, it's necessary to input the password of the image authentication that if you cannot read Japanese, it's difficult.

Therefore, I had done it that you can comment by using Twitter.


You can retweet in Twitter when you click this button. Retweet_Icon.jpg

091119rt1.gif


Best Regards :-)

However, I'm not good at English.(´・ω・`)ショボーン

edit

はじめまして | CM:0 | TB:0
+

http://wakabamac.blog95.fc2.com/blog-entry-995.html

MacHeist でソフトを Get しよう - nanoBundle -
MacHeist前のキャンペーンが終了して、あらたに『MacHeist nanoBundle』という、総額 $154 相当の6つのシェアウェアのアプリケーションがもらえるキャンペーンをやっています。
091106mhn1.jpg


MacHeist にログインして、シェアウェア登録用の名前とメールアドレスを入力すると(寄付するかどうかを問われた後)、自分専用のレシートページにアプリケーションのシリアル番号が表示されます。
シリアル番号が表示されるまでちょっと時間が掛かります。


nanoBundle のアプリケーションのラインナップは
となっております。

('09/11/12追記)
なぜだか、50万ダウンロードに達していないのに「Mariner Write」がアンロックされました。
あと数時間でこのキャンペーンも終了なので、まだの人はお早めに。
(追記おわり)



ダウンロード期間が限定されていて、あと6日です。
お早めに。



('09/11/09追記)
MacHeist の nanoBundle のキャンペーンで、さらに「VirusBarrier」がバンドルのに追加されました。
(要 Facebookアカウント)
091109mhn2.jpg

「VirusBarrier」の入手方法は、
まず MacHeist にログインして、上記の nanoBundle を入手します。
(まだ入手していない場合)


次に「MacHeist: Immunize your Mac」のページで、2番の「Share on Facebook 」ボタンをクリックします。
(このときに Facebook にログインしていること)

小さなウインドウで「Connect with Facebook」ボタンをクリック。

下のように表示されるので「公開」ボタンをクリックして完了。
091109mhn3.gif


これで、MacHeist の自分のレシートページに「VirusBarrier」のシリアル番号が表示されます。



Facebook ってよく知らないし、使ったことなかったけど、これの為だけにアカウントを作ってしまった。
(´-`).。oO(そもそも「VirusBarrier」使うかなあ?)

残りはあと3日です、お早めに。




('09/11/13追記)
  ∧∧ ミ ドスッ
  (  ) _n_
  /  つ 終了|
~′ /´  ̄|| ̄
 ∪∪   ||_ε3
      ゙゙゙゙

edit

ひとりごと | CM:2 | TB:0
+

http://wakabamac.blog95.fc2.com/blog-entry-992.html

Task3 / タスクの設定例(3)
icn_Task3.jpg
Task3 : あらゆるタスクを自動化する
Growl対応
OS10.4.11以上(UB)
シェアウェア ¥1,500(銀行振込)、¥1,700(PayPal)


Task3 / タスクの設定例(2)』のつづき
この回では、主にウインドウ制御に関するタスクの設定例です。

(各項目へジャンプします)




t3_os9_window

1つのウインドウクリックで そのアプリすべてのウインドウを前面に表示させる


OS9風に、あるアプリケーションの1つのウインドウをクリックすると、そのアプリすべてのウインドウを前面に表示させるようにする方法です。

例えば Finder のウインドウをそのように制御する場合は、新規タスクを作成して下のように設定します。


(トリガー)
090916tsk39.gif

リストから「アプリケーションを監視」を選択して、Finder が「最前面に移動」したときに実行するようにします。


(アクション)
090916tsk40.gif

アップルスクリプトを実行」を選択して、下の AppleScript を入力します。
tell application "Finder" to activate

これでこのタスクを保存して有効にすると、Finder の1つのウインドウ(デスクトップも含む)をクリックしたときに、Finder のすべてのウインドウが前面に表示されるようになります。

例えば、下のようにSafariが最前面にあるときに、背面のFinderウインドウの1つをクリックします。
090624klk6.jpg

すると、Finderのすべてのウインドウが前面に表示されるようになります。
090624klk7.jpg

Finderなら、デスクトップのどこかをクリックしても、すべてのFinderのウインドウを前面に表示します。



トリガーのアプリケーションや、AppleScript の記述の "Finder" を別のアプリケーション名に置き換えれば、他のアプリケーションも同様にできます。

ツールウインドウが普通のウインドウと同じように表示される「Gimp」などでは、この機能がないとかなり使いづらいです。
(X11で動くGimpの場合「X11」を最前面にするように設定する)





t3_window_hide

アプリケーションが最前面でないときはウインドウを隠す


Twitterクライアントのアプリケーション「夜フクロウ」を使っていてよく思うのですが、この手のアプリケーションは Growl でタイムラインを表示しているので、つぶやく時以外はウインドウは邪魔で command+H で隠していることが多いです。

こんな風に自分が能動的に使用するとき以外は、そのアプリケーションのウインドウを隠したい場合、Task3 で最前面以外のときに自動で隠すようにできます。

新規タスクを作成して、下のように設定します。


(トリガー)
リストで「アプリケーションを監視」を選択し、
「YoruFukurou」が「バックグラウンドに移動」したときに実行するようにします。


(アクション)
下の AppleScript を実行するようにします。
tell application "System Events" to tell process "YoruFukurou" to set visible to false

このタスクを保存すると、夜フクロウを使っているときに、他のアプリケーションのウインドウをクリックして最前面でなくなったときに自動で隠れるようになります。


(YoruFukurou が最前面のとき)
090916tsk41.gif

(YoruFukurou が背面に移動したとき)
090916tsk42.gif
こんな風に自動的に隠れます。



トリガーのアプリケーションや AppleScript のプロセス名の "YoruFukurou" のところを他のアプリケーション名に変えて設定すると、他のアプリケーションでも同じようにできます。






t3_hide_others

特定のアプリが最前面になったとき、他のアプリを隠す


集中して作業を行いたいときなど、特定のアプリケーションが最前面になったときに、それ以外の他のアプリケーションのウインドウを隠すようにしてみます。

Task3 で新規タスクを作成して、次のように設定します。


(トリガー)
090916tsk43.gif

アプリケーションを監視」をリストで選択し、○○○が「最前面に移動」したときに設定します。

そのアプリケーションが最前面になったときに動作するアプリケーションを指定します。適用させたいアプリケーションごとに複数のトリガーを設定しておきます。

ここの例では、MacNote3 と Safari に設定してみます。


(アクション)
次の AppleScript を実行するようにします。
tell application "System Events"
set notFrontmostApp to name of every application process whose background only is false and frontmost is false
repeat with eachAppProcess in notFrontmostApp
tell application process eachAppProcess to set visible to false
end repeat
end tell

このタスクを保存して有効にすると、そのアプリが最前面に移動したときに、他のアプリのウインドウを隠します。


例えば、下のようにたくさんのウインドウを開いているときに、MacNote3 を最前面にしてみます。
090916tsk44.jpg


すると、MacNote3 が最前面になるとすぐに、それ以外のアプリケーションのウインドウが隠れます。
090916tsk45.jpg



Task3 とは関係ないことですが、似たようなことで、Dockのアプリケーションアイコンをクリックしたときに、それ以外のアプリケーションを隠す「シングルアプリケーションモード」とうものも、OSの隠し機能として存在するようです。
参考『シングルアプリケーションモード - soundscape out






t3_auto_hide_others

一定時間ごとにチェックして 最前面のアプリ以外のウインドウを自動的に隠す


上記の「特定のアプリが最前面になったとき、他のアプリを隠す」と似た内容ですが、一定時間ごとにアプリケーションの状態をチェックして、最前面以外のアプリのウインドウを隠すタスクを設定してみます。
(ちょうど「Spirited Away」の機能を Task3 で実現してみます。)

新規タスクを作成して、下のように設定します。


(トリガー)
繰り返し」を選択して、3分ごとに実行するように設定。
(時間間隔はお好みで)


(アクション)
次の 最前面以外のプロセスを隠す AppleScript を実行させます。
property excludeAppList : {"Finder", "Safari", "firefox-bin"}
-- 除外アプリケーションのプロセス名を、上の行の {} 内に入力する
-- "プロセス名" と引用府で囲って、「,」で区切って入力
-- Firefox のように アプリ名 とプロセス名 が異なるものもあるので注意。

tell application "System Events"
set notFrontmostApp to name of every application process whose background only is false and frontmost is false
repeat with eachAppProcess in notFrontmostApp
if excludeAppList does not contain eachAppProcess then
tell application process eachAppProcess to set visible to false
end if
end repeat
end tell
先頭の行の {} 内に、背面であっても隠さないアプリケーションのプロセス名を、に入力して保存します。
この例では Finder, Safari, Firefox は最前面に表示されていなくても、自動的に隠されることはありません。


このタスクを保存して有効にします。

例えば、いろいろなアプリケーションのウインドウを開いている状態で、Safari を最前面に表示しているとします。
090916tsk50.jpg

これで所定の時間が来ると、最前面の Safari 以外のアプリのウインドウは隠されます。
090916tsk51.jpg
(背面にある Finder のウインドウは AppleScript 上で「除外」アプリに指定しているので隠されない)






t3_dock_autohide

特定のアプリが最前面のときだけ Dock を表示させる


僕は Dockを「自動的に隠す」設定にしていて、普段は Dock を隠しているようにしています。しかし、Dock にドラッグ&ドロップするときなど、特定のアプリケーションの場合には、ずっと表示させておいた方が便利な場面もあります。

そこで Task3 を使って、2つのタスクを登録しし、特定のアプリが最前面のときだけ Dock を表示させるようにします。


例えば、Finder が最前面のときだけ Dock を表示させるように設定します。
まずは「Dock を表示させる」タスクから。

(トリガー)
アプリケーションを監視」を選択して、Finder が最前面に移動したときに設定します。
090916tsk39.gif
(他にもDockを表示させたいアプリがあるなら、複数のトリガー項目を作って、そのアプリが最前面に移動したときに設定します)


(アクション)
以下の AppleScript を実行するようにします。
-- Dock を表示する
repeat 3 times
set dockAutohide to do shell script "defaults read com.apple.dock autohide"
if dockAutohide is "1" then
tell application "System Events" to tell process "WhateverItIs" to key code 2 using {option down, command down}
end if
end repeat

まずはこの1つ目のタスクを作成し、もう一つ新規タスクを作成します。



2つ目の「Dock を隠す」タスク
(トリガー)
アプリケーションを監視」を選択して、Finder がバックグラウンドに移動したときに設定します。
090916tsk68.gif
(他にもDockを表示させたいアプリがあるなら、複数のトリガー項目を作って、そのアプリがバックグラウンドに移動したときに設定します)


(アクション)
以下の AppleScript を実行するようにします。
-- Dock を隠す
repeat 3 times
set dockAutohide to do shell script "defaults read com.apple.dock autohide"
if dockAutohide is "0" then
tell application "System Events" to tell process "WhateverItIs" to key code 2 using {option down, command down}
end if
end repeat


これらの2つのタスクを有効にして保存します。
すると、Finder が最前面でないときは、Dock は隠された状態です。
090916tsk69.jpg

Finder が最前面のアプリケーションになると
090916tsk70.jpg
Dock が表示されるようになります。


ただ、key codeoption+command+D のショートカットキーを入力しているだけのスクリプトなので、素早く最前面のアプリケーションを切り替えたときなど、失敗することが多いです。
killall Dock でDock を再起動させながら 初期設定ファイルを書き換える内容のスクリプトにすると、失敗することはほぼ無くなるけど、Dashboard も再起動されてしまうので採用せず)






t3_itunes_toggle_player

iTunes が最前面のときはウインドウ表示、背面に移動したはミニプレイヤー表示


(Task3 の作者の sekn さん のアイデア)
iTunes が最前面に移動したときにはブラウザウインドウを表示、背面に移動したときにはミニプレイヤー表示させるように、2つのタスクを作成して実現させます。

まずは iTunes が最前面になったときにタスク
(トリガー)
アプリケーションを監視」で
iTunes が最前面に移動したときに設定します。


(アクション)
以下の AppleScript を実行します。
tell application "iTunes" to set minimized of window 1 to false

('09/11/04修正)
tell application "iTunes"
repeat with aWindow in browser windows
set minimized of aWindow to false
end repeat
end tell




続いて iTunes が背面になったときにタスク
(トリガー)
アプリケーションを監視」で
iTunes がバックグラウンドに移動したときに設定します。


(アクション)
以下の AppleScript を実行します。
tell application "iTunes" to set minimized of window 1 to true

('09/11/04修正)
修正前の AppleScript では、iTunes をメニューから終了できない欠陥がりました。
(詳細はコメント欄参照。sekn さん、教えてくれてありがとう)
以下の内容に変更して下さい。
tell application "System Events" to set appList to name of every application process whose background only is false
if appList contains "iTunes" then
tell application "iTunes"
repeat with aWindow in browser windows
set minimized of aWindow to true
end repeat
end tell
end if




これら2つのタスクを有効にして保存します。

すると、iTunes が最前面に移動したときには、自動的にブラウザウインドウを表示
090916tsk71.jpg


iTunes が背面に移動したときには、自動的にミニプレイヤー表示に切り替わります。
090916tsk72.jpg





この回ではウインドウ制御についてのタスクの設定例でした。
こういった「ウインドウ制御」的な使い方をするときは、そのタスクのON/OFFの切り替えがもっと楽にできたらいいのに・・・と思い、作者の sekn さんにリクエストしてみました。

次回のバージョンアップでは、Task3メニューからそのタスクのON/OFFの切り替えができるようになるでしょう。(たぶん?)
090916tsk80.gif





Task3 / タスクの設定例(4)』につづく







この記事では Task3 version 1.1.0 を使用しています。

(ダウンロードリンク)
Site top page : Spread Your Wings
Download page : Task3



(関連記事)
Task3 --- 基本的な「タスク」の設定のやり方など

Task3 / タスクの設定例(1)
Task3 / タスクの設定例(2)
Task3 / タスクの設定例(3)
Task3 / タスクの設定例(4)

edit

Utility | CM:2 | TB:0

tag : Task3 

+

http://wakabamac.blog95.fc2.com/blog-entry-991.html

Task3 / タスクの設定例(2)
icn_Task3.jpg
Task3 : あらゆるタスクを自動化する
Growl対応
OS10.4.11以上(UB)
シェアウェア ¥1,500(銀行振込)、¥1,700(PayPal)


Task3 / タスクの設定例(1)』のつづき

Task3 / タスクの設定例(2)
(各項目へジャンプします)




t3_hotkey

ホットキーを使ってアクションを実行する


Task3 では「トリガー」にホットキーを設定して、それでアプリケーションの起動、ファイル・フォルダを開く、AppleScript の実行、シェルスクリプトの実行、ボリュームのアンマウントなどが実行できます。

例えば、Safari をホットキーで起動するように設定してみます。

新規タスクを作成し、下のように設定します。


(トリガー)
リストから「ホットキー」を選択し、ホットキーを設定します。
090916tsk67.gif

ホットキーは command shift option control文字キー を合わせたものが設定できます。
ファンクションキーなどは設定できません。

また、数字キー を設定したときには、テンキーの数字のキーでは機能しません(現在調査中とこと)。


(アクション)
リストから「ファイル/アプリケーションを開く」を選択し、Safari を指定します。
090916tsk58.gif


このタスクを有効にして保存すると、例で設定したように control+command+S のホットキーで Safari が起動するようになります(既に起動しているなら最前面に表示する)。



このホットキーが有効・無効な場面を作ろうと思えば、「実行条件」を設定します。
このタスクの「実行条件」タブでそれを設定します。

例えば、Firefox が起動しているときは、このホットキーを無効にしようと思えば、下のように設定します。
090916tsk59.gif

リストから「アプリケーションの起動」を選択して、Firefox が起動していないと設定します。

これで、ホットキーは Firefox が起動していいないときには無効になります。



「アクション」の設定で、複数の項目を作り、ホットキー1つで複数のアプリケーションを起動するといったこともできます。





t3_auto_mail

留守のときに誰かがMacを起動したらメールで知らせる


Task3 では指定した宛先にメールを送る機能もあります。
例えば、留守にしているときに誰かが勝手にMacを起動したら、自分の携帯電話などにメールを送って知らせることもできます。

新規タスクを作成し、下のように設定します。


(トリガー)
2つのトリガー項目を設定しておきます。
090916tsk60.gif

リストから「コンピュータの起動/終了」を選択し、
起動したとき、スリープから復帰したときに設定します。


(アクション)
リストから「電子メールを送信」を選択します。
090916tsk61.gif

件名と宛先のメールアドレス(←これは携帯などのアドレスにする)、その文章内容を入力します。


(実行条件)
自分で起動・スリープ復帰したときまで、メールされるのを防ぐために、実行条件を設定して日時を制限します。
090916tsk63.gif
留守にしているであろう曜日や時間帯に設定します。


このタスクを有効にして保存します。

すると、自分の留守のときに誰かがMacを起動、もしくはスリープから復帰させると、Mail.app が隠れた状態で起動してメールを送信します。
090916tsk62.gif





t3_watch_file

フォルダに変化があったら Growl でお知らせ


Task3 では、ファイル・フォルダの変化を監視することができます。

例えば「Public」フォルダを監視して、ネットワーク上の誰かがそこにファイルを保存したりして、フォルダに変化があったらGrowlでお知らせするといったような使い方ができます。

新規タスクを作成して、下のように設定します。


(トリガー)
リストから「フォルダ/ファイルを監視」を選択、「Public」フォルダを指定します。
090916tsk64.gif


(アクション)
090916tsk65.gif

メッセージを表示」を選択して、適当なメッセージを入力しておくといいでしょう。
(環境設定でメッセージを Growl で表示させるように設定しておく)

ついでに「Public」フォルダを開くアクション項目も登録しておくと便利かと思います。


このタスクを保存して有効にすると、「Public」フォルダにファイルが追加されるなど、変化があったときに Growl でお知らせします。
090916tsk66.jpg
(Growl のタイトルは、そのタスク名(Task3)と表示される)





t3_change_input_method

特定のアプリが最前面になったときに「英数」入力に切り替える


OS10.6では
システム環境設定言語とテキスト入力ソース
の「入力ソースオプション」から、ウインドウごとに入力ソースの状態を維持できるように復活しました。

僕の場合、これはウインドウを切り替える度に入力ソースも切り替わって、ややこしいので使わないように設定しています。


しかし、ターミナルなどのアプリケーションでは、それを使うときには「英数」入力に自動的に切り替わった方が使いやすいのです。
だからといって、上記の言語環境の設定はファイル(ウインドウ)ごとの設定なのでやっぱり使いにくい・・・。

そこで Task3 を使って、ターミナル.app が最前面に移動したとき、自動的に「英数」入力に切り替えるようにしてみます。

新規タスクを作成し、下のように設定します。


(トリガー)
リストから「アプリケーションを監視」を選択します。
090916tsk73.gif

(たいていの人はそうだと思いますが)日本語環境で Mac を使っているなら、ここのアプリケーション名はカタカナで「ターミナル」と手入力します。
(「選択」ボタンからダイアログ経由で選択すると「Terminal」と英語名になります)

Task3 でのアプリケーションの名前を入力する(できる)場面では(ダイアログで選択するとパスが表示される場面は除く)、そのアプリケーションの日本語表記名を入力しなければなりません(日本語環境で使用している場合)。

「ターミナル」(Terminal)、「テキストエディット」(TextEdit)、「ディスクユーティリティ」(Disk Utility)など、日本語表記名と英語表記名が違うアプリケーションの場合は、日本語表記名にします。

試してないけど、英語を第1言語に指定しているならば、たぶん気にしなくても大丈夫。


話がそれたけど、ターミナルが最前面に移動したときに設定します。
他のアプリケーションにも適用させたい場合は、トリガー項目を「」ボタンで追加して、同じように最前面に移動したときに設定します。


(アクション)
下の AppleScript を実行するようにします。
tell application "System Events" to tell process "WhateverItIs" to key code 102
このスクリプトは key code を使って 英数キー を入力させています。
英数キー のないUSキーボードでも多分?このスクリプトで「英数」入力に切り替えられると思います。


このタスクを有効にして保存します。

すると、ターミナルのウインドウが最前面に移動したときには、自動的に「英数」入力に切り替わります。
090916tsk74.gif



ちなみに かなキー のキーコードは「104」なので、上記の AppleScript の該当箇所を少し弄れば、アプリケーションが最前面になったときなどに「かな」入力に自動で切り替える、といったこともできるでしょう。





t3_volume_mount

ボリュームをマウントしたらバックアップアプリを起動する


Task3 はボリュームのマウント・アンマウントされるときを監視してトリガーに設定できます。

僕は外付けハードディスクにバックアップするのに、SilverKeeper を使っているので、ハードディスクをつないでボリュームをマウントしたときに、SilverKeeper を起動するようにしてみます。

新規タスクを作成し、下のように設定します。


(トリガー)
リストから「ボリュームを監視」を選択して、ボリュームを指定、マウントされたら実行されるようにします。
090916tsk75.gif


(アクション)
ファイル/アプリケーションを開く」を選択、SilverKeeper を指定します。


(実行条件)
(この設定は好みによると思うけど)リストから「前回実行からの経過時間」を選択して、その間隔を設定します。
090916tsk76.gif

さらに加えて、日付と時間に応じて実行するように、実行するときを制限するのもいいでしょう。
こうしておくことで、バックアップした直後にそのボリュームをマウントして、勝手にアプリケーションが立ち上がるのを防ぐことができます。


このタスクを有効にして保存すると、外付けハードディスクの電源を入れ、指定ボリュームをマウントしたときに、自動的に SilverKeeper が立ち上がるようになります。



ちなみに、SilverKeeper のスケジュール設定を設定しておくと、Task3 などの他のアプリケーションの関与無しに、自動的にバックアップ前にシステムの起動・スリープからの復帰をするようになります。



他にも Task3 の作者の sekn さんが作られたバックアップアプリケーションの「Sync!Sync!Sync!」のバックアップを実行するアクションが用意されています。
090916tsk79.gif





t3_volume_unmount

ボリュームをまとめてアンマウント


新規タスクを作成して、「アクション」にボリュームをまとめてアンマウントするように設定すると、Task3メニューから簡単にアンマウントすることができます。

090916tsk77.gif

このタスクを有効して保存すると、Task3メニューから一気にアンマウントできます。
090916tsk78.gif

また、このタスクの「トリガー」にホットキーを設定して、ホットキー1つで簡単にアンマウントするようにできます。



AppleScript でアンマウントできるボリュームを一気にアンマウント(イジェクト)するようにもできます。
以下のスクリプトを、タスクの「アクション」に登録しておくと便利です。
tell application "Finder"
if ((count of disks) > 1) then
set allDisks to disks whose ejectable is true
repeat with eachDisk in allDisks
try
eject eachDisk
end try
end repeat
end if
end tell




また、マウントされたディスクイメージだけをアンマウントしたい場合は、以下の AppleScript をタスクの「アクション」に登録するといいです。
tell application "Finder"
if ((count of disks) > 1) then
set allDisks to disks whose ejectable is true and journaling enabled is false and ignore privileges is true
repeat with eachDisk in allDisks
try
eject eachDisk
end try
end repeat
end if
end tell
(あまりテストしていないので、うまくいかないかも?)





Task3 / タスクの設定例(3)』へつづく







この記事では Task3 version 1.1.0 を使用しています。

(ダウンロードリンク)
Site top page : Spread Your Wings
Download page : Task3



(関連記事)
Task3 --- 基本的な「タスク」の設定のやり方など

Task3 / タスクの設定例(1)
Task3 / タスクの設定例(2)
Task3 / タスクの設定例(3)
Task3 / タスクの設定例(4)

edit

Utility | CM:2 | TB:0

tag : Task3 

+

http://wakabamac.blog95.fc2.com/blog-entry-993.html

MacHeist でソフトを Get しよう - Early Warning System -
もう既にご存知の方も多いかと思いますが『MacHeist』でまた何かやってます。
091102mh3.jpg

MacHeist にログインして、望遠鏡みたいなものを操作して、ある座標のところをチェックするとミッション完了のようです。
座標のヒントは Twitter で「MacHeist」(←ネタバレ注意)と検索すると・・・。

座標を探し当てると、上の画面のようになります。
(3日後にまた何かある?)

「TWEET FOR A TREAT」のところをクリックして、Twitter でそれをつぶやいたら、「My Loot」のページからアプリケーションのシリアル番号を取得できます。


もらえるソフトウェアは、ハードディスクの使用量をかっこいUIで視覚的に見れる「DaisyDisk」です。
icn_DaisyDisk.jpg

こんな風にハードディスクの使用量を視覚的に捉えられます。
091102mh2.jpg


edit

ひとりごと | CM:0 | TB:2
+

http://wakabamac.blog95.fc2.com/blog-entry-990.html

Task3 / タスクの設定例(1)
icn_Task3.jpg
Task3 : あらゆるタスクを自動化する
Growl対応
OS10.4.11以上(UB)
シェアウェア ¥1,500(銀行振込)、¥1,700(PayPal)


Task3』のつづき


Task3 はアイデア次第でいろいろ使えます。
しかし、様々なことに使えるだけに最初は取っ付きにくいかもしれません。

なので、僕の場合の設定例を挙げていきたいと思います。
Task3 / タスクの設定例(1)
(各項目へジャンプします)




t3_safari_download

Safariのダウンロード完了をGrowlでお知らせする


新規タスクを作成して、下のように設定します。

(トリガー)
090916tsk16.gif
リストで「ファイルのダウンロード」を選択
下の「ファイル名 : 」を空白にしていると、Safariですべてのファイルをダウンロードしたときに実行するタスクとなります。


(アクション)
090916tsk17.gif
リストで「メッセージを表示」を選択して、その下に任意のメッセージを入力。


環境設定ウインドウを開いて( cmmand+, )、「Growlを使ってメッセージを表示」にチェックを入れます。
090916tsk18.gif

これで cmmand+S で保存し、Safariで何かしらのファイルをダウンロードしたときに、Growl でお知らせするようになります。
090916tsk19.jpg
Growl のタイトルは「そのタスクの名前+(Task3)」となります。



ついで、もうひとつアクションを追加して、ダウンロードフォルダを開くようにしておくと便利です。
090916tsk20.gif


SafariStand を使用していて、ダウンロードしたものを「2009-09-26」といった日付の名前のフォルダに保存するように設定している場合は、アクションで下の AppleScript を実行させるようにすると、そのフォルダを Finder で開くようにできます。
set downloadFolder to "ダウンロードフォルダに指定しているフォルダのHFS形式のパス"
-- 上の行の "" 内にHFS形式のパスを入力↑
-- (例)Macintosh HD:Users:登録アカウント名:Downloads:
-- パスの最後には「:」コロンを入れて下さい

set theToday to do shell script "date '+%Y-%m-%d'"
set targetFolder to downloadFolder & theToday
tell application "Finder" to open alias targetFolder
(お好みで Finder に対して「activate」コマンドを入れて、Finderが最前面になるようにしてもいいと思う)

これで、Safari でファイルをダウンロードしたときに、Growl でお知らせ+そのフォルダを開くようになります。
090916tsk21.gif






t3_some_app_launch

複数のアプリケーションをセットで起動するようにする


例えば、iTunes と 再生中の曲とアートワークを表示するアプリ「TuNe」をセットで起動するようにしてみます。

新規タスクを作成し、次のように設定します。

(トリガー)
090916tsk22.gif
アプリケーションを監視」を選択、iTunes が起動したときのトリガーに設定する。


(アクション)
090916tsk23.gif
ファイル/アプリケーションを開く」を選択、Tune.app を指定する。


これで保存すると、iTunes を起動すると、セットで Tune が起動するようになります。


同じ要領で新規タスクを作成し、iTunes が終了させたときに Tune を終了させるようにしておくといいです。






t3_release_memory

定期的に使っていないメモリを解放する


定期的にメモリの使用状況を監視して、使ってない(Inactive)なメモリを解放するタスクを設定してみます。
どこかで聞いたような・・・)


(トリガー)
繰り返し」を選択します。
時間間隔はお好みで。僕の場合は15分ごとに設定しています。


(アクション)
まず下の AppleScript を「アプリケーション形式」で保存します
(Task3 上で実行する AppleScript では、「display dialog」「display alert」などが実行できないため)
property rt : return as text

on run
tell me to activate
set alertResult to display alert " メモリ使用状況 " & rt & "メモリの「空き」領域が少なくなっています" & rt & "使っていないメモリを解放するスクリプトを実行しますか?" message my memStatus() buttons {"Cancel", "Run"} default button 2 --giving up after 120
if alertResult is {button returned:"Run"} then
do shell script "du -s / &> /dev/null & sleep 10 && kill $!"
delay 2
tell application "GrowlHelperApp" to notify with name "Task3MessageWorkNotification" title (("メモリの解放 -> 完了" & rt & "現在のメモリ状況") as Unicode text) description (my memStatus() as Unicode text) application name "task3runner" icon of application "task3runner" sticky "yes"
end if
end run


on memStatus()
set memoryStatus to do shell script "top -l 1 | head -10 | grep PhysMem"

set wiredMem to word 2 of memoryStatus
set activeMem to word 4 of memoryStatus
set inactiveMem to word 6 of memoryStatus
set usedMem to word 8 of memoryStatus
set freeMem to word 10 of memoryStatus

set swapusage to do shell script "sysctl vm.swapusage"
set theSwap to "Swap : " & word 7 of swapusage & " (" & word 4 of swapusage & ")"

set grepLine to do shell script "top -l 1 | head -10 | grep VM"
set pageins to (((round (word 7 of grepLine as number) / 4096 * 100) / 100 * 16) as text) & "M"
set pageouts to (((round (word 10 of grepLine as number) / 4096 * 100) / 100 * 16) as text) & "M"

return "空き  : " & freeMem & rt & "固定  : " & wiredMem & rt & "使用  : " & activeMem & rt & "非使用 : " & inactiveMem & rt & "確保中 : " & usedMem & rt & rt & theSwap & rt & "Page Ins : " & pageins & rt & "Page Outs : " & pageouts & rt
end memStatus
これを「メモリ解放.app」とか、適当な名前を付けて、アプリケーション形式で任意の場所に保存します。

そして Task3 のアクションの設定で、このアプリケーションを開くように設定します。
090916tsk24.gif


(実行条件)
下の AppleScript で実行条件を判別するようにします。
090916tsk25.gif
set limitMem to 1000 -- 空きメモリがこの数値以下になったらスクリプトを実行
-- 使用環境に合わせて上の数値を変更して下さい。
-- 単位はMB。とりあえず1000MB に設定。

set freeMem to (do shell script "echo " & word 10 of (do shell script "top -l 1 | head -10 |grep PhysMem") & " | sed -e 's/M//g'") as number
return freeMemlimitMem
「実行条件」で AppleScript を選択した場合、それが返す値を参考に「アクション」を実行するかどうか、判断します。
値は真偽値(true or false)か、数値で判断します。数値の場合は 0 だとアクションを実行しない、0 以外だと実行します。

上のスクリプトの場合は、「空き」メモリが1000MB以下だと、true を返してアクションを実行するようになります。




これでタスク保存して運用すると、15分ごとにメモリの状況を監視して、メモリの「空き」領域が1000MB以下になったら、「メモリ解放.app」を実行するようになります。

「メモリ解放.app」が起動すると、ダイアログでスクリプトを実行するかどうかの確認をします。
090916tsk47.gif
(適当なアイコンを付けると、ダイアログでもアイコンが表示される)

これで「Run」をクリックすると、

du -s / &> /dev/null & sleep 10 && kill $!

のコマンドを実行して、使用していない(Inactive)メモリを解放します。
(このコマンドは『ものかも』さんを参考、というよりそのまんま)

約12秒後に Growl で完了を知らせて、現在のメモリの状況を表示します。
090916tsk48.jpg
(「非使用」が減って「空き」が少し増えてます)


メモリの状況を確認するコマンドは『うむらうす』のハルさんのをパクリ、教えてもらいました。
スワップの状況を確認するコマンドは『K-muraの物置』さんの「メモリ情報.scpt」を参考にしました。

ハルさん作の「Freemem Monitor」とか、ものかもさんの「Libera Memory Resident」を使えばいいんだけど、自分好みに動作させたくて作ってしまいました。

また、この「メモリ解放.app」では「du」コマンドを使っているけど、ハルさんのように Locate database の更新 を使うならば

/usr/libexec/locate.updatedb 2 < /dev/null || exit 0

該当箇所をこれにするとOK。


ここで使用した「メモリ解放.app」が欲しい人は、アップロードしたから適当にここからダウンロードして下さい(上のソースと同じだから意味はないけど)。






t3_visualizer

スクリーンセーバの代わりにiTunesのビジュアライザを使用


iTunes を起動して再生している最中は、スクリーンセーバの代わりに iTunes のビジュアライザを使うようにしてみます。
090916tsk57.jpg


(トリガー)
090916tsk26.gif

アプリケーションを監視」をリストから選択して、「ScreenSaverEngine」が最前面に移動したときに設定します(「起動」したときに設定してはダメ)。

「ScreenSaverEngine」は

/System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app

の場所にあります。名前を手入力してもOK。


(アクション)
090916tsk27.gif

以下の AppleScript を実行するようにします。
property idleTime : 10 -- スリープするまでの時間(分)「0」にするとスリープしない

on run
tell application "System Events"
set processList to name of every application process
end tell

if processList contains "iTunes" then
tell application "iTunes"
if player state is playing then
try
tell application id "com.apple.ScreenSaver.Engine" to quit
end try
activate
--set minimized of window 1 to false
set full screen to true
set visuals enabled to true
my sleepRun()
end if
end tell
end if
end run


on sleepRun()
if idleTime is 0 then return

repeat with i from 1 to idleTime
delay 60
tell application "System Events" to set currentApp to (name of the first process whose frontmost is true)
if currentApp is not "iTunes" then
return
else
tell application "iTunes"
if visuals enabled is false then return
end tell
end if
end repeat

--tell application "iTunes" to set full screen to false
tell application "iTunes" to set visuals enabled to false
tell application "System Events" to sleep
end sleepRun
(最初の行の数値を変更して、スリープするまでの時間を変更できます。
とりあえず、10分後に設定。)

このスクリプトは、iTunes で再生中のときのみ、スクリーンセーバが起動すると、それを終了して代わりに iTunes のビジュアライザを表示するようになります。

ビジュアライザだとスリープしないので、10分後にスリープするようにしてあります。(正確には1分ごとに状態をチェックして、そのときにビジュアライザがフルスクリーンで最前面に表示されているかどうかをチェックし、10回目にまだビジュアライザが表示されていたなら、スリープさせる代物です。)

スリープする必要がないならば、該当箇所をコメントアウトするなりして下さい。

※ビジュアライザの種類によっては、ちゃんとスリープできないかも。



これでタスクを保存すると、スクリーンセーバが起動すると、しばらくして iTunes のビジュアライザに切り替わるようになります。
(iTunes を再生している場合のみ)






t3_repair_permissions

スクリーンセーバ起動中にアクセス権の修復を行う


スクリーンセーバが起動しているときというのは、基本的に何もしていないときであって、その時間を有効に使って何かできないかと考えると「アクセス権の修復」をやるといいかと思い、次のようなタスクを設定してみました。


新規タスクを作成し、トリガー、アクション、実行条件を設定します。


(トリガー)
090916tsk26.gif

アプリケーションを監視」をリストから選択して、「ScreenSaverEngine」が最前面に移動したときに設定します(「起動」したときに設定してはダメ)。

「ScreenSaverEngine」は

/System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app

の場所にあります。名前を手入力してもOK。


(アクション)
090916tsk28.gif

シェルスクリプトを実行」をリストから選択して、下記のスクリプトを入力します。

diskutil repairPermissions /




(実行条件)
090916tsk29.gif

指定時間後に実行する」を選択して5秒後に設定します。

この「実行条件」の設定は別になくても大丈夫で、好みによります。



これで、このタスクを保存しておくと、スクリーンセーバが起動して5秒後に「アクセス権の修復」を開始するようになります。

ただ、システム環境設定の「省エネルギー」パネルで、スクリーンセーバの起動からスリープするまでの時間が、ある程度必要です。


他にも、スクリーンセーバが起動している間に、各種メンテナンススクリプトを走らせておくと便利かも。





t3_use_as_launcher

メニューバーに表示するランチャとして使用する


Task3 の環境設定( command+, )で「メニューバーにTask3メニューを表示する」にチェックします。
090916tsk30.gif

こうすると、メニューバーに Task3 の各タスクが表示されるようになります。
090916tsk52.gif

ここに表示されるタスクを実行すると、そのタスクのトリガー、実行条件に関係なく、アクションを実行します

違う見方をすれば、タスクを設定するときには、トリガー、実行条件は設定せずとも「アクション」のみの設定して、このメニューをランチャのようににも使えるということです。

メニューバーから使うランチャ類いのものは他にもいろいろあるし、Dockなどを使えばいいかもしれませんが、Task3では複数のアプリケーションを1度に起動させることができます。
090916tsk54.gif
「アクション」タブで、1つのタスクに複数のアクションを設定して、同時にアプリケーションを起動しておくようにすると、普通のランチャとは違った使い方もできます。



他にもよく使うフォルダ・ファイルを開くといったことにも使えます。
090916tsk55.gif
例えば、「~/Library」「/Library」の2つのフォルダを同時に開くとか、各種作業で保存したりするフォルダ・ファイル、それに使うアプリケーションをまとめて開くとか、いろいろ使い道はあると思います。



別にメニューから実行しなくても、トリガーを設定して「ホットキー」からそのタスクを実行することもできます。
090916tsk34.gif

実行条件でアプリケーションが起動しているとき、最前面のときなどに設定して、ホットキーが有効な場面を制限したりするのもいいでしょう。



このように Task3 はアプリケーションの起動、ファイル・フォルダを開く、AppleScript の実行、シェルスクリプトの実行、ボリュームのアンマウントなど、様々なことをアクションに設定できるので、Task3 のメニューはただのランチャではなく、かなり便利に使えます。



それと、Task3メニューに表示される順番は、Task3本体で設定したタスクの通りになるので、メニューでよく使うタスクを上の方に持ってきたり、判りやすい名前にした方が使いやすいです。
090916tsk56.gif





t3_maintenance

メニューバーから各種メンテナンスをする


「アクセス権の修復」などの各種メンテナンスを行う為のスクリプトなどを、アクションに登録しておくと、Task3メニューから お手製の『MainMenu』みたいにも使えます。
090916tsk53.gif

いくつか役に立ちそうなものを挙げると・・・

(QuickLookのリセット)

qlmanage -r

参考『クイックルックで表示できないとき - E-WA’S BLOG


(Dockの再起動)

killall Dock




(メニューバーの再起動)

killall SystemUIServer




(Finder の再起動)
property rt : return as text
global check_finder_window_exists


on run
set check_finder_window_exists to false
my main_routine()
end run


-- メイン
on main_routine()
-- Finderウインドウ情報の保存
tell application "Finder"
if Finder window 1 exists then
set check_finder_window_exists to true

set window_target to {}
set window_toolbar to {}
set window_statusbar to {}
set window_sidebar to {}
set window_bounds to {}
set window_view to {}
-- set window_view_options to {}
set window_collapsed to {}
set window_select_item_lists to {}

set every_finder_window to every Finder window
set window_count to count of every_finder_window

repeat with each_window in every_finder_window
tell each_window
set beginning of window_collapsed to collapsed
set beginning of window_target to target
set beginning of window_toolbar to toolbar visible
set beginning of window_statusbar to statusbar visible
set beginning of window_sidebar to sidebar width
set beginning of window_bounds to bounds
set beginning of window_view to current view
-- if current view is icon view then set beginning of window_view_options to icon view options
-- if current view is list view then set beginning of window_view_options to list view options
-- if current view is column view then set beginning of window_view_options to column view options
-- if current view is flow view then set beginning of window_view_options to ""
--set beginning of window_collapsed to collapsed
end tell

if collapsed of each_window is false then
set index of each_window to 1
try -- OS10.4以下用のエラー対策で「try」を付ける
set select_item to selection as alias list
on error
set select_item to {}
end try
else
set select_item to {}
end if
set beginning of window_select_item_lists to select_item

close each_window

end repeat

end if
end tell



my relaunch_finder() -- Finderの再起動


-- 再起動前に開いていたウインドウを再度開く
if check_finder_window_exists is true then
tell application "Finder"

-- 再起動後に開くウインドウを一度すべて閉じる
-- (閉じてから再度開く方が処理がラク)
close every Finder window
delay 1
if Finder window 1 exists then close every Finder window

delay 1

repeat with i from 1 to window_count
make new Finder window to item i of window_target

set toolbar visible of Finder window 1 to item i of window_toolbar
set statusbar visible of Finder window 1 to item i of window_statusbar
set sidebar width of Finder window 1 to item i of window_sidebar
set bounds of Finder window 1 to item i of window_bounds
set current view of Finder window 1 to item i of window_view
-- if current view of Finder window 1 is icon view then set icon view options of Finder window 1 to item i of window_view_options
-- if current view of Finder window 1 is list view then set list view options of Finder window 1 to item i of window_view_options
-- if current view of Finder window 1 is column view then set column view options of Finder window 1 to item i of window_view_options
delay 0.5
set selected_items to item i of window_select_item_lists
try
select selected_items
end try

--delay 0.5
set collapsed of Finder window 1 to item i of window_collapsed
end repeat

end tell
end if
--set check_finder_window_exists to false

end main_routine


-- Finderの再起動 --
-- 終了
on relaunch_finder()
try
tell application "Finder" to quit
end try

tell application "System Events"
repeat 10 times
if exists application process "Finder" then
delay 1
try
tell application "Finder" to quit
end try
else
exit repeat
end if
end repeat
end tell

my activate_finder()

end relaunch_finder

-- 起動
on activate_finder()
try
tell application "Finder" to activate
on error
delay 1
tell application "Finder" to activate
end try

tell application "System Events"
repeat 10 times
if exists application process "Finder" then
exit repeat
else
delay 1
tell application "Finder" to activate
end if
end repeat
end tell
end activate_finder
単に Finder を再起動するだけでなく、開いていたウインドウの状態、選択していたアイテム、ビューなどを再現するようにした AppleScript です。
(ただ不完全で再現に失敗することもままある)




(LaunchServices の再構築)
tell application "Terminal"
activate
do script "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -seed -rfv -all user, system, local"
end tell

参考『コンテキストメニューの「このアプリケーションで開く」がおかしくなった時の対処方法 - soundscape out

このタスクを実行すると、ターミナルが開きます。
090916tsk37.gif
すぐに終わるから、ちゃんとできてるのか不安になる・・・。

なぜ「シェルスクリプトを実行」で直接実行せずに、AppleScript 経由でターミナル上で実行させているのか。
その理由は Task3 上で、この LaunchServices の再構築 を実行すると、ターミナル.app と UTI の関連付けがおかしくなってしまうことがあったからです。
(深く検証した訳ではないので、もしかしたら違う原因かも?)




( Locate database の再構築)
set theMessage to ""
set growlsticky to "no"
try
do shell script "/usr/libexec/locate.updatedb"
on error errorMessage
set theMessage to errorMessage
set growlsticky to "yes"
end try
tell application "GrowlHelperApp" to notify with name "Task3MessageWorkNotification" title ("Locate database の再構築" as Unicode text) description (("完了しました" & return & theMessage) as Unicode text) application name "task3runner" icon of application "task3runner" sticky growlsticky
Mac OS X Manual Page For locate.updatedb(8)

AppleScript でやってる理由は、「Locate database の再構築」は時間が掛かるので、完了後に Growl でお知らせするためです。
090916tsk36.jpg

なぜだか

line 97: /var/db/locate.database: Permission denied

っていうエラーが出てくるけど、気にしないでおこう。




(アクセス権の修復)
set theMessage to ""
set growlsticky to "no"
try
set theMessage to do shell script "diskutil repairPermissions /"
if theMessage is "" then set growlsticky to "yes"
on error errorMessage
set theMessage to theMessage & return & errorMessage
set growlsticky to "yes"
end try
tell application "GrowlHelperApp" to notify with name "Task3MessageWorkNotification" title ("アクセス権の修復" as Unicode text) description (("完了しました" & return & theMessage) as Unicode text) application name "task3runner" icon of application "task3runner" sticky growlsticky
Mac OS X Manual Page For diskutil(8)

AppleScript でやってる理由は、これも時間が掛かるので、完了後に Growl でお知らせするためです。
090916tsk38.jpg
相変わらず ACL がなんとか・・・とかいうのが出てくる。




(メンテナンススクリプト)
tell application "Terminal"
activate
try
do script "sudo /usr/sbin/periodic daily weekly monthly"
end try
end tell
Mac OS X Manual Page For periodic(8)

sudo」の付くコマンドは Task3 上では直接実行できないため、AppleScript 経由で、ターミナル上で実行しています。

これを実行すると、ターミナルが起動してパスワード入力を求められます。
090916tsk46.gif

入力して returnキー で実行すると、daily, weekly, monthly スクリプトが実行されます。
(なぜだか実行時間がやけに短い。OS10.6では内容が変わったのか?わからないけど、ちゃんと実行されてるかは不明)

ちなみに、いつ実行されたか確認するには

ls -al /var/log/*.out

のコマンドで確認できます。もしくは コンソール.app でログを見ます。




他にも「rm」コマンドでキャッシュを削除するといったスクリプトもお好みで登録しておいたらいいでしょう。




これらのスクリプトなどを、Task3 の「アクション」として登録しておくと、いつでもメニューバーから実行できて便利です。





また、別のタスクを設定するときに、他のタスクのアクションを実行できるので、上記のようなシェルスクリプト、AppleScript をいろいろこまめに用意していると組み合わせて構成できてラクです。

090916tsk49.gif
アクションの設定で、リストから「他のタスクのアクションを実行」を選択する。
その下のリストで登録しているタスクを選択します。






t3_bookmarks

メニュー、ホットキーで開くブックマークとして使う


Task3メニューにタスクを表示させて、そのタスクにアクションとしてURLを開く AppleScript を登録しておくと、このメニューはブックマークとしても使えます。

AppleScript でURLを開くのは簡単です。
例えば、
open location "http://wakabamac.blog95.fc2.com/"
という風に、「open location "URL"」とするだけです。

この AppleScript を複数行にして、いつも開いているURLなどを何個か入力しておきます。
090916tsk33.gif

これでタスクを保存すると、Task3メニューにも反映されるので、これを実行すると、そのURLをデフォルトのWebブラウザでまとめて開くといった使い方ができます。
090916tsk32.gif



また、このタスクにトリガーで「ホットキー」を付けることができます。
090916tsk34.gif

ホットキーは command shift option control文字キー を合わせたものが設定できます。
ファンクションキーなどは設定できません。
また、数字キー を設定したときには、テンキーの数字のキーでは機能しません(現在調査中とこと)。


上の例でいうと、これでホットキーを入力したときに、Webブラウザでそれらのページが一気に開きます。



また、「実行条件」でこのトリガーが機能するときを、特定のアプリケーションが起動しているとき、最前面のとき、背面になったとき、起動していないときなどに制限することもできます。

例えば、Safari が最前面のときだけ機能するようにしてみます。
090916tsk35.gif

「実行条件」タブで「アプリケーションの起動」を選択して、Safari が 最前面で動作中として保存します。

こうすると、トリガーで設定したホットキーは、Safari が最前面のときだけしか機能しないようになります。






Task3 / タスクの設定例(2)』へつづく







この記事では Task3 version 1.1.0 を使用しています。

(ダウンロードリンク)
Site top page : Spread Your Wings
Download page : Task3



(関連記事)
Task3 --- 基本的な「タスク」の設定のやり方など

Task3 / タスクの設定例(1)
Task3 / タスクの設定例(2)
Task3 / タスクの設定例(3)
Task3 / タスクの設定例(4)

edit

Utility | CM:0 | TB:0

tag : Task3 

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