2014年04月29日

AppleScriptでファイルやフォルダを取得する

AppleScriptを使うからには、なにかしらフォルダやファイルを操作しようとしているはずだと思われます。
なので、操作したいフォルダやファイルを取得します。
以下その方法を何点か。

*****フォルダの取得 ---ダイアログが開くのでフォルダを選びます。結果はエイリアス(alias)で得られます

set theAlias to choose folder


例えばOSの入ってるHDDにあるピクチャフォルダの中の”tmp”というフォルダを選んだとすると、

結果; alias "Macintosh HD:Users:Ryo:Pictures:tmp:"

*****ファイルの取得 ---ダイアログが開くのでファイルを選びます。結果はエイリアス(alias)で得られます

set theAlias to choose file


例えば上記tmpフォルダ内のmypicture.jpgというファイルを選んだとすると、

結果; alias "Macintosh HD:Users:Ryo:Pictures:tmp:mypicture.jpg"


*****取得したエイリアスをテキストパスに変換

set textPath to theAlias as text


結果; "Macintosh HD:Users:Ryo:Pictures:tmp:"

set textPath to theAlias as string

set textPath to theAlias as Unicode text

でも同じ


*****POSIXパスに変換  alias, テキストパスから変換可。Finder参照からは直接変換できない。

set posixPath to POSIX path of theAlias

set posixPath to POSIX path of textPath

set posixPath to (textPath)'s POSIX path

set posixPath to (theAlias)'s POSIX path


結果; "/Users/Ryo/Pictures/tmp/"


*****Finderを使ってフォルダ参照(パス)を取得。指定したフォルダの中にある全てのフォルダのFinder参照がリストになって返ってくる。 alias, Finder参照が使用可。POSIXパスは不可。テキストパスは”alias textPath”で使用可

例えば上記で取得した ”theAlias” というエイリアスの中にある全フォルダがほしいとき、

tell application "Finder"

set theList to every folder of theAlias

end tell


 


tell application "Finder"

set theList to every folder of alias textPath

end tell



*****Finderを使ってファイル参照(パス)を取得。指定したフォルダの中にある全てのファイルのFinder参照がリストになって返ってくる。不可視ファイルは取得されないみたい。

tell application "Finder"

set theList to every file of theAlias

end tell



*****Finderで選んでいるフォルダおよびファイルのFinder参照を返す。2つ選んでも一つしか取得できない。リスト型ではないみたい。

tell application "Finder"

return selection

end tell


---------

set a to test()

set aAlias to a as alias

 

on test()

tell application "Finder"

return selection

end tell

end test

-----------

とかすると、Finder参照からaliasやテキストパスに変換可。


*****指定したフォルダ内にあるフォルダおよびファイルの全リストを取得。こちらはパスではなくただの名前がリストになって返ってくる。フォルダの指定にはaliasもテキストパスも使える。Finder参照は使えない。

set theList to (list folder theAlias)


結果; {".DS_Store", "1111.jpg", "mypicture.jpg", "test", "test.txt", "work"}
"test", "work”はフォルダ、"1111.jpg", "mypicture.jpg","test.txt”はファイル。".DS_Store”は不可視ファイル。

このままでは不可視ファイルも拾ってくるので、”without invisibles”を付けると、

set theList to (list folder theAlias without invisibles)


結果; {"1111.jpg", "mypicture.jpg", "test", "test.txt", "work"}
posted by Ryo Yamashita at 19:37| Comment(0) | AppleScript

AppleScriptのファイル参照、パス、などについて

趣味で、AppleScriptを書くようになって半年ほど経ちました。
やっと色々と分かって来た模様。ここらで一つ、備忘録的に、はまったところをまとめておこうと思います。
ちなみに専門家ではないので、経験的にこんなところかな、って感じで書いておりますので間違いがあるかも知れませんが、実用には問題ないかと思われます。

まずはパスとか。ファイルやフォルダを扱うときのパスで、注意する事があります。
というか、これをしっかり理解していないと所々でつまっちゃって、前に進みません。
AppleScriptでは、パス、というかファイル参照が4種類存在します。
Finder参照、エイリアス(alias)、テキストパス、POSIXパス

このうち、いわゆるパスっていうのはテキストパスとPOSIXパスだと思われます。

テキストパス
Macintosh HD:Users:Ryo:Pictures:tmp:
Photo:workspace:tmp:
Macintosh HD:Users:Ryo:Pictures:tmp:mypicture.jpg


POSIXパス
/Users/Ryo/Pictures/tmp/
/Volumes/Photo/workspace/tmp/
/Users/Ryo/Pictures/tmp/mypicture.jpg

具体的にはこんな感じ。
要はUnix的なパスの指定はPOSIXパス。それをMac的に書くとテキストパス。
上段はOSの入ってるHDD内のtmpというフォルダのパス。中段はPhotoという名前の外付けHDD内にあるtmpというフォルダのパス。
フォルダの区切りが ”:” か “/“ かの違いとルート(最初のフォルダ)の表現が違います。
下段はフォルダではなく、ファイルのパス。最後に ":" とか "/" とか付きません。

普通にスクリプト内でテキストとして扱う場合はテキストパスを使います。パスからフォルダ名を取得したり、新たにフォルダを追加するためにパスに文字列を付け加えたりする時。
で、POSIXパスはスクリプト内でシェルスクリプトなどのUnixコマンドを使いたいとき、Mac的なテキストパスの指定では受け付けてくれない時があるので、そういう場合はPOSIXパスを使います。

エイリアス(alias)はパス、というよりは機能、って感じかと思います。
スクリプト内でパスとしてエイリアスを指定しておくと、そのフォルダやファイルを移動しても、自動で追いかけてくれるというものです。
詳しくは分かりません。が、確かにゴミ箱に移動してもパスとして通ります。
エイリアスはテキストではありません。
例えば、

set textPath to "Photo:workspace:tmp:"

set newPath to textPath & "newfolder:"


などどすると、

"Photo:workspace:tmp:newfolder:"

と、文字列“Photo:workspace:tmp:”の後に、文字列“newfolder:”を結合した値が返ってきますが、

set textPath to "Photo:workspace:tmp:"

set theAlias to textPath as alias

set newPath to theAlias & "newfolder:"


と、textPathをエイリアスに変換してから文字列を足そうとしても、

{alias "Photo:workspace:tmp:", "newfolder:"}

と、変なリストで返ってきます。一つ目がエイリアスで、二つ目が文字列、みたいな。

なので、文字列として扱う場合はエイリアスのままでは使えないので、

set textPath to theAlias as text


などとして、テキストパス(というかただのテキスト)にして扱うようにします。

最後にFinder参照。
これはFinderの中でのファイル参照って事だと思います。
tell application “Finder” などとFinder経由でパスを取得しようとすると、

{folder "tmp" of folder "Pictures" of folder "Ryo" of folder "Users" of startup disk of application "Finder"}

みたいな値が返ってきます。
これも当然テキストではないので、テキストとして扱いたい場合は、

set textPath to abc as text --(変数abcにFinder参照が入ってるとします)

みたいな感じでテキストに変換します。
ちなみに上のFinder参照をテキストパスに変換すると、

Macintosh HD:Users:Ryo:Pictures:tmp:

です。

始めはこの4つがなにがなにやら分からず苦労しましたが、分かればなんて事ないですね。
実際にはスクリプト内でこの4つを相互に変換しながら使っていきます。
というか、AppleScriptでファイル参照を取得しようとすると、Finder参照かエイリアスで取得されるので、それをテキストパスやPOSIXパスに変換して処理していく、って感じですかね。

****まとめ****
エイリアス ---テキストパス、POSIXパスに変換可
alias "Macintosh HD:Users:Ryo:Pictures:tmp:"

テキストパス ---エイリアス、POSIXパスに変換可
Macintosh HD:Users:Ryo:Pictures:tmp:

POSIXパス ---テキストパスに変換可。エイリアスには変換できない。
/Users/Ryo/Pictures/tmp/

Finder参照 ---エイリアス、テキストパスに変換可。POSIXパスには変換できない。
{folder "tmp" of folder "Pictures" of folder "Ryo" of folder "Users" of startup disk of application "Finder"}
posted by Ryo Yamashita at 17:51| Comment(0) | AppleScript

2014年04月12日

D600のゴミ問題

D600ユーザーを悩ませていた、センサーのごみ。
特に、私なんざ、発売日前日に買っちゃったもんだから、見事にゴミだらけでした。
保証期間の1年間に、フィルター清掃に4, 5回は出しましたね。
出しても次の日にはゴミが付きましたけど。。。
結構文句も言いましたが、そういう物です、って言われてましたね。

で、去年あたりですかね。対策しますよ、ってなって、D610が出て、とうとう、対策してもゴミが付く場合は、なんと、新品と交換します、と。
ずっと対策してほしかったんですが、サブ機がないため我慢してたわけです。
このほどD700を手に入れまして、やっと対策をお願いしに新宿のカスタマーセンターに行きましたよ。

私の他に二人ほどD600ユーザーがいて、そのうちおじいさんの方は怒ってましたねー。
なんで駄目だって分かってる物をうるんだよ、っつって。D610がでる直前に買っちゃったじゃないか!って。

私はというと、とりあえずゴミが付かなくなるだけで大変助かるのでとにかく対策してください!ってお願いしたら、シャッターユニットを丸ごと交換します、とおっしゃるじゃありませんか。

まじで。
私、既に9万回シャッターを切っておりまして。
とにかく心配で無駄にシャッターを切ってたんですね。
ダサいですね。

ところが、まさかのシャッターユニット交換。しかも無償で。
最高じゃないっすか。今までの9万回は練習ってことで、これからが本番じゃないっすか。
となりのおじいさんは怒ってたけど、こちとらだいぶラッキー♡ルンルンじゃん。

しかも、月曜日に出したんですが、土曜日の今日、事務所に郵送で戻ってきました。
早い!

シャッターカウントはーーー

90,143

なるほど。そこはリセットされないんだ。
ていうか、対策に出す直前のカウントは88,000くらいなんだけど。
2000回くらい空打ちして馴らしたのかな?

ま、でもユニットは新しくなっていると信じる事にしよう。
24万回まではいけるはずだと信じよう。

これからは清々しい気分で仕事ができそうです!
posted by Ryo Yamashita at 16:24| Comment(0) | カメラ機材関連

2014年04月03日

karnel_taskの暴走?

えー、Mac mini Late2012をFusion Drive化した訳ですが。

最近お気に入りのMusic Unlimitedで音楽を楽しみながら作業していると、突然カクカクして遅くなる。
で、Music Unlimitedを閉じてしばらくすると元に戻る。
Chromeが悪いのかなー、と思い、Safariで開くも同じ結果に。

まさかSSDが原因か!これがプチフリってやつか!
と思いながら、この辺↓の記事を参考にしながら
http://d.hatena.ne.jp/yousuke_saki/20110730/1311971892
http://allabout.co.jp/gm/gc/427316/5/

PRAMリセットしたり、kextcacheを再構築したり、SMCリセットしたりするも結果は変わらず。

がっかりしながらアクティビティモニタで監視しながら同じ事をやってみると、どうやらkarnel_taskってやつが急に走り出してCPU負荷が500%とかに!
でカクカクする。

んーーーーー、SSDのせいなのか。
ググってみてもkarnel_taskの暴走は一概に解決は出来ない模様。
マジでSSDが原因かも、と思い、Apple Hardware Testなる物を試してみました。
すると、
4MOT/1/40000002:Exhaust-0
というエラーがでました。。。。

やっぱハードのエラーかー。
と肩を落としつつ。Exhaustってことは排気か?ファンか?温度か?
と思い、今度はTemperature Monitorなるアプリで温度を測ってみることに。
すると、CPUまわりの温度が80度を超えた当たりでkarnel_taskが暴走しだす模様。
SSD入れたから温度が上がりすぎるのかな?そんなに発熱するとは思えないぞ?

とりあえず、ファンをぶん回してみよう!てことで、Macs Fan Controlというアプリでファンをコントロールする事に。
CPUの温度が80度こえたらファンをMAXにするようにしてみたところ、何か変。
”現在の回転数”ってところが”0”のまま。。。

ん?ファンが回ってないのかしら?
Mac miniの底のふたを開けてみます。
ファンが回ってません。

まじか。SSD増設したときに断線したか。ショートしたか。
一旦OS終了して電源を落とし、再度ファンのコネクタをチェックしてみる事に。
ぱっと見ささってんだけどなー、と思いながらコネクタを押してみると、カチってなんかはまった感触が。
あれ。いまカチって言った?

電源入れてみると、元気にファンが回りだしました。
コネクタのはめ方が甘かっただけという。

温度を測るとCUPまわりで50度くらい。
色々負荷をかけても温度は上がりません。karnel_taskも出てきません。

なんてこった。こんなんでまる二日くらい悩んじゃったよ。

皆さんもコネクタはしっかりとめましょうね。
ささったように見えてささってないかも。

ま、おかげさまですこぶる快調に動いてます。うちのMac。
posted by Ryo Yamashita at 16:02| Comment(0) | Macなど

2014年04月02日

Mac mini Late 2012をSSD化しちゃった

2年前、Macのノートはたけーなー、と悩んだあげく、液晶が良さげなVAIO SEを買った訳ですが、期待したほど良くなかった(笑)。
ピンクや紫といった微妙な色が全くでない。写真を扱うには無理がある。
ま、所詮ノートの液晶と行った感じ。IPSだから角度によって色が変わる事はないんですが。
さらにバッテリーの持ちも悪い。もって2時間。使えない。
windowsでしか出来ない事もあるから、まあ、いいんだけど、愛着は次第に薄れていった訳です。
Sony撤退しちゃうし。。。
で、もともと3年めどでSSD化しようと思ってたんですが、SSDの値段が思ったより下がって来たのでSSDに換装してみたわけです。
Transcend TS256GSSD340←これ↓
http://jp.transcend-info.com/Products/CatList.asp?LangNo=17&ModNo=502

まー、細かいスペックはどうでもよくて、とにかく安くて安定して使えて速くなればと思い。
結果、スーパー速くなりました。ついでにクリーンインストールしたのでリカバリー領域も削除できたし、とても快適。

おかげでMac miniが2世代くらいまえの遅さに感じられて、なんだかなー。とイライラしていた訳です。
で、仕事が一段落したのを理由にもういっちょSSDを買いまして。

Seagate ST240HM000←これ↓
http://www.seagate.com/jp/ja/internal-hard-drives/laptop-hard-drives/laptop-600-ssd/?sku=ST240HM000

どれがいいのか相当悩みましたが、ま、最後は直感で(笑)。
で気合いを入れてMac mini Late2012にSSD増設したわけです。

いろんなところで情報ありますが、OWCの増設キットを使いました。

昔はwindowsを自作してましたが、さすがに製品版を解体した事はないのでドキドキでしたが、まー、なんとか無事増設完了。
アメリカ人が作ったとは思えないほど丁寧で緻密で無駄のないレイアウトでしたよ。メンテナンスもしやすい。
アルミのケースはどうやって作ったのか。一度型で抜いて全部削ったのかな?
美しさもプラスする当たりは日本の企業にはない感覚ですかねー。

私のMac miniはもとのHDDが下段(ふたを開けてすぐ)についてたので、ほぼ全分解して、奥にSSDを増設しました。
で、もともとのHDDにOS入ってるからどうなんのかな?と思いながらTime Machineしてた外付けHDDをつないでOptionキーを押しながら電源入れると、起動するディスクを選べました。
で、外付けHDDを選ぶと、ディスクユーテリティでSSDをフォーマットできるようになります。
フォーマットしようとすると、なんと、OSちゃんから

"あなたのディスクはFusionDriveにできます。やりますか?”

的なことをきかれるじゃないですか!
OSを10.9のMavericksにしてたからなのかな?

えー、まさかの提案。
予想してなかったので慌てて色々調べてみたら、Fusion Driveの評判は悪くない模様。
データの保存先とか色々気にしなくていいし、ドライブ増えるのも分かりづらいし、ここは一つ、OSちゃんの提案に乗っかってみる事に。

でFusion Driveでフォーマットお願いします、ってクリックしたら、いともかんたんにFusion Driveになりました!

その後Time Machineでシステムを復元。
2時間弱で元通りになりました。外付けがUSB2.0で100Gくらいのデータだったので、USB3.0の外付けならもっと速かったのかな?

起動が40秒くらいになりました。5倍くらい速くなった感じ。
Trim enablerでTrimを有効にするのを忘れずに。
posted by Ryo Yamashita at 18:19| Comment(0) | Macなど