Tag Archives: Applescript

マシン不調につき

10_7_5

諸々遅れております。申し訳ございません。

外部ディスクから起動して、

  • ディスクユーティリティ
  • Applejack(これ外部は無理ですね 笑)
  • ディスクウオーリア

などを行うも、今ひとつ芳しくなく……。
10.7.5 統合アップデートを再度適用することで、なんとか復旧したようです。

症状としては

  • Safari を開いてから、ホームを開くまでがやたら遅い。(Googleを開くのに30秒とか尋常じゃない)。開いてから普通なんですが。
  • Spotlight のデータが頻繁に壊れる(気がつくと何かやってる)
  • Launchデータベースも頻繁に壊れる(開く度、初めて開くアラートが表示される)
  • Finder が無反応になる
  • AppleScript が正常動作しない

てな感じでした。

今朝電源を投入すると、ログイン時に起動するはずのスクリプトがタイムアウトしてるし、Spotlightインデックスは作り直してるっぽいし、開くはずのアプリが全く開かないし……焦りました(笑)

ひとまずバックアップから起動して、進行中のデータだけはすぐに救出、下版予定の仕事だけはすぐに下版。

それから9時間……。
いやいや、参りました。こんな時に限っておこるんですよね。トラブルって。

今は大丈夫っぽいですが、これで明日ダメだったらハード的な問題かもですね。
再インストールするなら10.8にするかな……(まだ10.7.5なんですよ)
ついでに CS6 も入れないとですね……。(まだ入れてない)

「システム環境設定を開いている間は何もしない」処理を追加

先ほどのスクリプト「カーソルサイズを変更してみる」の改訂版、「システム環境設定を開いている間は何もしない」処理を追加したソースです。

tell application "System Events"
	repeat
		set pList to name of every process whose visible is true and frontmost is true
		if (pList = {"Finder"}) then
			my front_app()
		else if (pList = {"System Preferences"}) then
			my quiet_app()
		else
			my other_app()
		end if
		--何秒おきに監視するかの秒数
		delay 3
	end repeat
end tell

--システム環境設定を開いている間は何もしない
on quiet_app()
end quiet_app

--Finderがアクティブの場合
on front_app()
	my open_pref()
	my open_univ()
	tell application "System Events"
		if UI elements enabled then
			tell slider "カーソルのサイズ:" of tab group 1 of window "ユニバーサルアクセス" of application process "System Preferences"
				set value to 4
			end tell
		end if
	end tell
end front_app

--他がアクティブの場合
on other_app()
	my open_pref()
	my open_univ()
	tell application "System Events"
		tell slider "カーソルのサイズ:" of tab group 1 of window "ユニバーサルアクセス" of application process "System Preferences"
			set value to 1
		end tell
	end tell
end other_app

--システム環境設定 > マウス を開く動作
on open_pref()
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.mouse"
	end tell
end open_pref

--システム環境設定 > ユニバーサルアクセス を開く動作
on open_univ()
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.universalaccess"
	end tell
end open_univ

カーソルサイズを変更してみる

デュアルモニター環境で画面が広くなると快適なんですが、カーソルを見失うのが長年の悩みでして……。

カーソルを大きくすると追いかけやすくなっていい反面、Photoshop 等でブラシサイズまで大きくなってしまい、正確なブラシ操作が困難になります。
当たり前なんでしょうが、Finder で表示されているカーソルと標準の黒矢印は綺麗に拡大されますが、他のアプリケーションではカーソルデータを切り替えて表示しているんですよね。

Cursor01
標準のカーソル。左が標準サイズ、右が拡大(たぶん400%)

brush
こんな感じ。(Adobe系CS5)

以前、Magic Mouse を使い始めた頃、不意のスクロールでかなりイライラした際、Applescript で「Adobe系アプリがアクティブになっている時だけスクロールをオフにする」というものを作りました。
その時は腱鞘炎を起こしたため、Magic Mouse からトラックボールに変えてしまったので作ったことすら忘れていました。

で、そのスクリプトをいじれば
「Finder がアクティブになっている時だけカーソルサイズを特大にする」
ってはできるんじゃね? という思いつきで作りました。

気になる人は気になると思いますが

  • Applescript なので常時起動させておく必要があります。
  • 常時システム環境設定を開いておくことになります。(ただしバックグラウンドで)
  • 監視時間はあまり短くできない。

そんな感じです。

見せるのが恥ずかしいようなソースですが、こちらも公開しておきますね。
Applescript エディタにコピペすれば動作確認ができます。

tell application "System Events"
	repeat
		set pList to name of every process whose visible is true and frontmost is true
		if (pList = {"Finder"}) then
			my front_app()
		else
			my other_app()
		end if
		--何秒おきに監視するかの秒数
		delay 3
	end repeat
end tell

--Finderがアクティブの場合
on front_app()
	my open_pref()
	my open_univ()
	tell application "System Events"
		if UI elements enabled then
			tell slider "カーソルのサイズ:" of tab group 1 of window "ユニバーサルアクセス" of application process "System Preferences"
				set value to 4
			end tell
		end if
	end tell
end front_app

--他がアクティブの場合
on other_app()
	my open_pref()
	my open_univ()
	tell application "System Events"
		tell slider "カーソルのサイズ:" of tab group 1 of window "ユニバーサルアクセス" of application process "System Preferences"
			set value to 1
		end tell
	end tell
end other_app

--システム環境設定 > マウス を開く動作
on open_pref()
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.mouse"
	end tell
end open_pref

--システム環境設定 > ユニバーサルアクセス を開く動作
on open_univ()
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.universalaccess"
	end tell
end open_univ

(抜けがあったので修正しました)

追記
カーソルを見失いにくくなりましたが、システム環境設定をいじるときは不便なので、アプリ名を決めて、前面のアプリが「システム環境設定」だったら、一時停止する、的な処理を加えないといけませんね(笑)

iPhone5のバッテリードレインとiCalの507エラー

iPhone5 使い心地は快適なんですけど、バッテリーの消耗が異常なぐらい早い(泣)。
この状況ってのは尋常ではないわけで。

先日も夜の打ち合わせに出かけて、19時半の時点で97%。
22時の終了時にはなんと17%
どう考えてもおかしい。テザリング中ですか(笑)

調べてみると
MMSを一度設定をクリアするといいとか
ネットワーク設定をリセットするといいとか
復元したら治りますとか
諸説ありますが、というか原因がいろいろあるんでしょうね。
一時的に治ったように見えるんですが、充電してしばらく経過するとグングン減る。
もう泣けるぐらい(笑)。←逆に笑えてきましたけど

私の場合はどうやら iCloud に不具合があったようで……
一度 iCloud のアカウントを削除し、再度アクティブにしたところ…
それ以来、バッテリードレインは再発していません。

あまりにも減らないので、「あるある電池か?」とか疑ってみましたが、問題ないようです。
同期するデータが多いとちょっと時間がかかるかもしれませんが、どうやっても治らない場合に試す価値はあるかもしれません。

重なるときは重なるんですね、こういうトラブルって。

iCal が突然 507 エラーを吐いて、同期してくれなくなりました。

iCal 507 エラー

こういう使い方は想定されてないと思うんですが(笑)、自分の工数管理というか仕事チェックというか。

作業ファイル/フォルダを AppleScript & Cron で定期監視させて、自動でiCal に書き込ませてます。

いつのタイミングでどんな仕事をしていたか、ざっくりと、どれぐらい時間喰ってるかが把握できます。反省材料であったり、心の糧であったり。
4sqのチェックインと組み合わせて利用すると、自動ライフログのできあがり。

それはいいんですが、
調べてみても、iCal で 507 エラーってのは国内では出てこない。

米Appleディスカッションボードで発見したんですが(英語に弱くて……)……

https://discussions.apple.com/thread/3398234?start=0&tstart=0

いったんライブラリの中の iCal データを削除し、iCal を再起動させたあとで、もう一度同期させるといいよ

と書かれている気がします。

できれば残しておきたい記録なので、ics 形式で書き出しをしたあと、iPhone側のカレンダー同期はOFFにしてから、思い切って削除してみました。
最悪は「インポートすればいいや」って気持ちで。

すると、削除されたあと…なぜか復活(サーバーからデータを引っ張ってくるのが当たり前?)。

少々時間はくいましたが、今回はエラーも吐かずに同期してくれているようです。
ちょっとこの状態で様子見してみます。

手っ取り早く Chrome のキャッシュを削除したい

WEB的な仕事をしていると、CSSとかすぐに適用して欲しい場合ってありますよね。
あと、なんとなく調子が悪い時とか(気のせいかもしれませんがw)

Mac な人限定ですが AppleScript 経由でシェルスクリプトを……
以下の通りです。

try
	do shell script "rm -R /Users/USERNAME/Library/Caches/Google/Chrome/Default/Cache/* && rm -R /Users/USERNAME/Library/Caches/Google/Chrome/Default/Media Cache/*"
on error
	return
end try

※あ、当然ながら「USERNAME」はあなたのユーザ名(ホームディレクトリの名前ね)です。

アプリケーション形式で保存してDockに乗せておいてもいいかもしれませんね。

私の場合は

  1. AppleScript エディタ の環境設定を開いて
  2. メニューバーにスクリプトメニューを表示 のチェックをオンに
  3. そうするとメニューバーに「スクリプトメニュー」が出てくる

ので、そこからスクリプトファイルにアクセスできるようになります。

ちなみに

  • option キー + メニューから選択 で編集
  • Shift キー + メニューから選択 でファイル表示

してくれますよ。

prefs

AppleScript でファイルサイズを get する

ちょっと AppleScript でファイルサイズを取得する必要が出てきたのでメモメモ。

get size とするとファイルサイズが取得できますが、単位最小単位なのでMBにするために 1000000 で割る…と言いたい所ですが、小数点以下が欲しいので 100000 で割って round で四捨五入した後、10で割ってMB単位に。

round のパラメータ

  • 四捨五入 rounding to nearest
  • 切り上げ rounding up
  • 切り捨て rounding down
  • ゼロ方向に丸める rounding toward zero

「ゼロ方向に丸める」ってのがよくわかりません。

サンプルコード

tell application "Finder"
--choose file でファイルを選ぶ(エイリアスとして)
get size of (choose file)
--結果(result)を 100000 で割って四捨五入、単位を整える
set file_size to ((round (result / 100000) rounding to nearest) / 10)
--ダイアログを表示する
display dialog file_size
end tell