2011年11月21日月曜日

[AppleScript] URLをデフォルト設定しているブラウザで開く


本当に本当に今更なんですが、知らなかったので・・・

URLをブラウザで開くとき、tell Applicationからアプリを呼ばなくても、自動でデフォルトに設定しているブラウザから開いてくれます。


2011年10月27日木曜日

@ika621 さん企画!「iPhoneのホーム画面を見せてくださいVol.4」に参加して みるよ!


何度もお世話になってる@ika621さんの企画にのっかってみました!!

【企画】iPhoneのホーム画面を見せてくださいVol.4
いつもありがとうございます!!


iPhone 4Sになって悩み続けているホーム画面ですが、この企画に参加したくてえいやーっと決めました!



IMG_0827


少ない!めっちゃ少ないね!!ワザとです!縛りプレイです!!
そんなMっ子すいとーのホーム画面をじっくりご紹介します!



2011年10月16日日曜日

これであなたもネイティブ!!iOS5のsiriに返事してもらう方法!

iPhone 4S買いました。iOS 5触りました。
その辺もちゃんと報告しようと思ってたんですが、とりあえずどうでもいいです。
iOS 5から導入されたsiri。彼女に振り向いてもらうたった一つの方法を伝授します!!

2011年10月12日水曜日

iPhone 4S、SIMロックフリー?SoftBank?結局どっちがいいの?


僕の可愛いiPhone 3GSちゃんには、一日一回再起動して自分の調子を整えてくれる自己修復機能がついています。気がついたら実装されてました。
先進的でカッコイイんだけど、通勤電車の中で始められると音楽聞けないわRSS読めないわTwitterできないわで結構悲惨です。
iOS 5でも使えない未来機能ではありますが、正直僕には荷が重いなと常々感じていました。

なので、名残り惜しくも、今回iPhone 4Sを買おうと思います。
時代を先取りしすぎた3GSさん、お勤めごくろうさまです。
我が家では天下り先に、お掃除ロボ監視カメラ兼家電リモコンの席を用意しています。
ご老体には割と激務かもしれませんが。。。

で、新しく迎え入れる4Sさんですが、この子をどうやって買おうか悩んでるのです。
前回の記事では「海外からSIMロックフリーを輸入するぜ」と調子に乗ってました。
しかし、ちょっと雲行きが怪しくなってきたのです。


2011年10月9日日曜日

実質無償機種変更キャンペーンがイミフすぎたのでSoftbank支店をたらい回って きた

今更だけど、iPhone 4S発表されましたね。
4と大してスペック変わらないけど、3GSユーザーの僕はこの機会に乗り換えます。
僕のような化石機種3G/3GSユーザーのためにSoftBankさんが用意した「実質無償機種変更キャンペーン」を使おうかなあと目論んでいました。

iPhone向け新キャンペーン「アレ コレ ソレ キャンペーン」、10月14日より開始 | ソフトバンクモバイル株式会社
(僕が使うのは実質無償機種変更キャンペーンのほうです)

このキャンペーン、3G/3GSの残積分が無くなるそうですが、そんなことあり得んの?
SoftBankの料金プランは、月々割やらで安くなる場合でも、機種代が直接安くなるなんてことはあり得ません。
「基本料金と機種代は固定、割引は通信費のみに適用」これが鉄則。
今回が特例?それとも勘違い?アホの僕がいくら考えても分かるはずもないので、近所のSoftBankショップで尋ねてきました。

なお、この記事を書いたあとにSoftBankから補足説明が入り、料金が変更されることもあり得ます。ご了承ください。
(現時点ではSoftBankのオペレーターもキャンペーン内容を理解していないレベルです)

2011年9月24日土曜日

Alfred3作目!Evernoteで日記をつけよう、Evernote Diary!


久々にAlfredネタです。
はじめてEvernoteと連携してみました。
下はAlfred Extention本体とAlfred持ってない人用のコード。

Evernote Diary - Alfred Extention


-- Alfred Extentionのままでサーセン
property nb : ""

on alfred_script(q)
set notetext to q as text
set t to do shell script "date +'%Y/%m/%d'"
set timeStr to time string of (current date)
set AppleScript's text item delimiters to ","
try
set tit to text item 1 of notetext
set txt to text item 2 of notetext
on error
set tit to ""
set txt to text item 1 of notetext
end try
set tit to "[" & timeStr & "] " & tit
set t to t & "の日記"

tell application "Evernote"
if nb = "" then
set foundNotes to find notes "intitle:\"" & t & "\""
set found to ((length of foundNotes) is not 0)
if not found then
set curnote to create note with html "" title t
tell curnote to append html "

" & tit & "

"
tell curnote to append text txt
tell curnote to append html ""
else
repeat with curnote in foundNotes
tell curnote to append html "

" & tit & "

"
tell curnote to append text txt
tell curnote to append html "
"
end repeat
end if
else
set foundNotes to find notes "notebook:\"" & nb & "\"" & " intitle:\"" & t & "\""
set found to ((length of foundNotes) is not 0)
if not found then
set curnote to create note with html "" title t notebook nb
tell curnote to append html "

" & tit & "

"
tell curnote to append text txt
tell curnote to append html ""
else
repeat with curnote in foundNotes
tell curnote to append html "

" & tit & "

"
tell curnote to append text txt
tell curnote to append html "
"
end repeat
end if
end if
end tell
do shell script "afplay /System/Library/Sounds/Hero.aiff"
end alfred_script


名前のとおり、Evernoteに日記を書くためのスクリプトです。
最近Twitterでボヤキっぱなしなので、自粛するために作りました。
それも「つぶやき」なのかもしれませんが、脳内だだ漏れなのも気持ち悪いですしね。
ただのボヤキも念のため後から読み返せるようにしておこう、というスクリプト。

触りはこのくらいにして、さっそく機能を紹介します。


例えるなら、お一人様Twitter



Evernoteに「ノート名=日付」のノートを作成します。
ノートの内容は「小見出し=時間(と入力したタイトル)、本文=入力したテキスト」です。
同日に書き込んだ内容は、その日の日付のノートに追記されていきます。
ノートの内容は、ほとんどTwitterのログそのものです。見た目はこんな感じ。

1

かなり質素ですが、お一人様Twitterならこれでも問題ないです。
背景色とか文字色くらいなら、スクリプトを編集すれば簡単に変更できると思います。
以下、簡単に設定や使いかたをメモ。


設定



ノートを作成するノートブックを選べるようにしています。
一行目の「property nb : ""」にノートブック名を記入してください。
何も書かない場合、デフォルトノートブックを選択します。
まだノートブックが無い場合、新しくそのノートブックを作成します。
「デフォルトでいいから空欄でいいや」という人でも、デフォルトノートブックの名前を記入すると、ほんのわずか実行速度が上がります。

あと、今回はGrowlやめて音を鳴らすようにしました。
あまりに一瞬の出来事だしエラーも吐きようがないので、確認のためだけ。
実行したらリアクション返すのは、アプリとして割と大事な気がします。


使いかた



Alfredで「ed "テキスト"」と記入します。
「ed」の後に入力したテキストがノート内の文章となります。

例1) 2011/09/23 13:00:00に「ed ほげ」と入力

2

入力するテキストを「,」で区切ることで、小見出しにタイトルを入力できます。
例2) 例1と同日の14:00:00に「ed hoge,ほげほげ」と入力

3

このくらいですね。超簡単仕様。


「このスクリプトどっかで見たぞ?」←正解



多分そう感じている人が大多数でしょう。そのとおり、今回も安定の9割コピペ。
この記事とこの記事を合わせると、Evernote Diaryができちゃったよ!
いつもホントにありがとうございます。

Evernote Daily Diary - Veritrope


[Mac][Evernote] PowerPackユーザー限定。Alfredから最速でEvernoteにメモできるExtension『addev』 - b2log/p


b2logさんのコードを大枠に、Veritropeさんのコードをペタペタ。
少し前に見た「Launcher」というMacのキーボードランチャでEvernoteに日記を書くというネタを、Alfredでやってみただけ。
Alfredだと一動作少ないのがいいですね。


あとがき



Evernote Diaryを作って感じたこと。
主題はEvernoteにノートを作る場合のパラメータについて。
Evernoteに自前で作りたいノートって、割とたくさんあるんじゃね?ってこと。
で、それを一つのコマンドから作れたら素敵じゃね?ってこと。

日記、長文、タスク、ブログのネタ、買いものリスト。
Evernoteに作りたいノートは、すぐ思いつくレベルでもこのくらいはある。
そして、それらを書くときのEvernoteのノートのスタイルは様々。
今回の日記スタイルだったり、チェックボックスがついたタスクだったり。
長文だとAlfredでは書けないし、ウィンドウを出してじっくり書きたかったりする。

これらを一つのスクリプトから選んで実行できるといいなぁ、と思った。
Alfredから起動するスクリプトは同じだけど、パラメータで分別する。
パラメータに「diary」と入れたら、今回の日記スタイルでノートを作る。
パラメータに「task」と入れたら、チェックボックス付きノートを作る。
全部バラバラにスクリプト書いてAlfredに登録しても結果は同じだけど、そんなにコマンド覚えられないしね。

けど悪い点もある。Alfred Extentionにめちゃくちゃ長いコードを書く必要がある。

対策1:スタイル別に小分けにして、外部スクリプトにしちゃう。
スタイルごとに「evernote_diary.scpt」とか「evernote_task.scpt」に分けちゃう。
本体はrun scriptで外部を実行するだけにすれば、Alfred Extention自体は短くなる。
けど、これだとAlfredでエクスポート出来ない。それはコンセプト的に本末転倒。

対策2:Alfredでエクスポート出来る形で外部スクリプトを使う。
1と矛盾するようだけど、方法はある。詳しくは長くなるのでまた今度。
ザックリ書くと、外部スクリプトを「テキスト形式」で保存しておく。
一手間かければ外部スクリプトを読み込んだコードを作れるようになる、はず。。。
話脱線するけど、これはAlfredだけの話じゃなくて、全てのスクリプトでやってみたい。
個人的にはそのほうがスクリプト管理しやすいと思うし、ブログに貼るときも簡単なので、そのうちスクリプトの管理自体をごっそり変えてみるつもり。

対策3:これ、そもそもアプリじゃね?
スクリプトとアプリの境界はよく分かんないけど、なんとなく。
それに正直、Alfredでやる意味が薄いかなぁ。出来るに越したことはないけど。
ホットキー1つで実行できれば、速さは確実にランチャより上だし。
本当はEvernote Trunkにこういうの期待してたんだけど、どうも違ったみたいだし・・・

当面は対策2に向けて爆進中です。

2011年9月18日日曜日

ServiceAppleScript -右クリックからAppleScript実行-

久々に神アプリ発見!!



いつもいろんなアプリを探してますが、今回は神アプリと呼べるアプリを発見しました!
偶然にもMacの手書き説明書さんで紹介されてる、その名もServiceAppleScript。

ServiceAppleScript - AppleScriptを実行するサービスメニュー項目を作るアプリケーション


これを使えばAppleScriptを右クリックのサービス項目から使えます!
このアプリはかなりの需要があるんじゃないでしょうか!


AppleScriptをもっと使いやすい位置に



普段AppleScriptを使う場合、メニューバーやランチャから実行する人が多いでしょう。
一方で、使いやすいAppleScriptはテキストやファイルを引数にするものが多いです。
例を上げると「選択したテキストやファイルを〇〇する」みたいなタイプ。大抵は簡単なコードですが、使う頻度で言えば小難しいコードより確実に多いはず。
となると、AppleScriptを使うまでの手順としては


  1. テキスト/ファイルを選択

  2. メニューバーやランチャまでマウスを持っていく

  3. クリックして起動


の3ステップ。これ、かなり面倒じゃないですか?
いろんな場面で使える便利なAppleScriptを作っても、使うまでが面倒だとむしろ使いたくなくなるという、ワケの分からない状況。
AppleScriptはものによってはかなりの頻度で実行するものもあります。
そんなものこそ、アプリケーションと違い、もう一歩使いやすい位置に置きたい。
ServiceAppleScriptは、そんな願いを叶えてくれるアプリです。


Automator使えばよくね?



実はServiceAppleScriptが出る前から、サービスからAppleScriptを使う手はありました。
というか超有名で当たり前な手段ですね。
Automatorでサービスを作り「AppleScriptを実行」のウィンドウにコードを書く。
・・・うん、そうね。確かにこれでもいいよね。。。
実際僕も今まではこれでやってましたし。
しかし、ServiceAppleScriptを使う利点はいくつもあるのです。
特に「これはいい!」と思ったのは、AppleScriptをAppleScriptとして管理できるようになること。


ここがダメだよAutomator



「なにを言ってるんだこいつは」と思ったでしょうが、そのまま文字通りの意味です。
当たり前ではありますが、Automatorで作ったサービスはたとえ中身が全てAppleScriptで書かれていたとしても、Automatorでしか開けません。
そのくせに、Automatorに用意されているスクリプト作成ウィンドウは猫の額より狭い。
そもそもこのウィンドウ、どう見てもスクリプト書かせる気がないでしょ・・・

1

結局は作成・編集するたびにAppleScriptエディタで書いてコピペする始末。
もうホント何をやってるんだ僕は・・・と虚しくなるレベル。
だったら最初からAppleScriptエディタで書かせてよって話です。
なぜAutomatorには外部のAppleScriptを読み込む機能が無いのか、不思議でなりません。
AppleScriptはAppleScriptとして保存し、編集するときはAppleScriptエディタを使う。
これが出来る時点で、ServiceAppleScriptは超優秀。あるべき形って感じがいいですね。
「右クリックから実行」とかタイトルに書いた割に、一番の目当ては納得いく形でサービスを扱うことにあったり。

このほかにも、AutomatorではAppleScriptのpropertyが扱えなかったりと、チマチマと制限があります。
その点ServiceAppleScriptはpropertyも扱えるし、なんと言ってもサービスをアプリケーション形式にできるので、パッケージの中身を好きにできるのがイイですね。
サブルーチン集を置いてもよし、アイコン変えてもよし。配布も簡単です。

散々言ってますが、Automatorにもちゃんといい部分はあります。
あらかじめAutomatorに用意されているコマンド集を使えるので、それはそれで便利。
1つのサービスを作るお手軽さでは、Automatorが圧倒的に上でしょう。
その分、クリティカルな機能は探しにくいというだけ。
その時々で便利に使える方を選べばいいと思います。


投げっぱなしですがホント便利!



相変わらずアプリのレビューをすると言いたい放題言って使い方すら放置してますが、その辺は作者さんの配布ページやらを参考に。
いくつかサンプルも置いてくれているので、発想の参考にしてみるといいと思います。
僕はさっそく前の記事で作った「選択したファイル/フォルダを1つずつzip圧縮」のサービス版を作ってみました。
やっぱり「右クリックから実行」ってのはいいですね。感覚で使えます。
相変わらずただコピペしただけですが、作ったサービスを置いておきます。

選択項目を1つずつzipで圧縮.app

propertyも扱えるようになったし、いろんなサービスを考えてみたいと思います( ´ ▽ ` )

ServiceAppleScript - AppleScriptを実行するサービスメニュー項目を作るアプリケーション

[AppleScript] Finderで複数選択している項目を1つずつzipで圧縮

1つずつってのがミソです。

複数選択している状態で圧縮すると、デフォルトではまとめて圧縮されてしまいます。
しかしときには1つずつ圧縮したいケースもあるでしょう。(というか直面した)
コードは相変わらず9割コピペ。僕の仕事はGrowlを設定しただけ。
dittoが初参加です、ちょっと調べるとこれ便利ですね。これからお世話になりそう。
ditto(1) Mac OS X Manual Page

あと、今回のような時間がかかるときはGrowl入れる意味があって嬉しいです。
いつも自己満なんで。。。
しかし、ファイル操作のときはshell大活躍すぎてAppleScriptで書く意味がががが・・・
AppleScriptは当然として、shellも知っとかないとですねぇ。覚えることが多いっす。

set i to 0
tell application "Finder"
set fol_Path to (target of window 1) as alias
repeat with select_item in (selection as list)
set file_path to select_item as alias
set fil_name to name of file_path as text
set source to quoted form of POSIX path of (file_path as text)
set dest to quoted form of POSIX path of (fol_Path & fil_name & ".zip" as text)
do shell script "ditto -ck " & source & " " & dest
delay 1
set i to i + 1
end repeat
end tell
set grrDescription to i & "files" as text
my growlRegister()
growlNotify("End Run Zip", grrDescription)


using terms from application "GrowlHelperApp"
on growlRegister()
tell application "GrowlHelperApp"
register as application "選択項目をzipで圧縮" all notifications {"Notification"} default notifications {"Notification"} icon of application "Finder.app"
end tell
end growlRegister
on growlNotify(grrTitle, grrDescription)
tell application "GrowlHelperApp"
notify with name "Notification" title grrTitle description grrDescription application name "選択項目をzipで圧縮"
end tell
end growlNotify
end using terms from

ブログのテンプレートが治ったよ!!!

@ryo_dgマジ大天使


さっきの「要するに情弱なのでわかりません(´・ω・`)」という記事を投稿して4分。
ソッコーで解決策を教えて頂きました。そんな大天使、@ryo_dg。
[blackbirdpie url="http://twitter.com/#!/ryo_dg/status/114983883103141888"]
えっ?えっ?よくわからんお??と困惑してると、
[blackbirdpie url="http://twitter.com/#!/ryo_dg/status/114984659158437889"]
なんとURLまで教えてくれる親切っぷり。
さっそく入れてみましたよ!!


なおった!!改行なおったよ!!!


すげえ、一発でなおってしまった・・・
2つあった改行が見事に取れてます。よく分かんないけどすげえ・・・
というか、僕の暗号化された悩みを解読して解決までしてくれたりょーちん。
まさかTwitterで天使に出会えるとは・・・
マジでありがとう(´;ω;`) 一生ついて行きます師匠。


どうやらbrタグは入れなくていいらしい


マイエンジェルの教えのとおり、WordPressはbrタグを入れなくてもコード内で改行した場所に自動でbrタグを入れる仕様なんだそうです。
一方、僕はコードにガシガシとbrタグを書いて投稿してました。
どうやらそれが重複して、brタグが2つ入ってた模様。
要するに僕が余計なことやってたというオチでした\(^q^)/

なので、今度からはbrタグは入れずにただ改行するだけにすればOK。簡単ですね。
そして、今回入れたこのbrBrbrってプラグインがあれば、改行したいときに好きなだけ改行できるみたいです。
なので、






なんてこともできる!!(ちなみにこれは直接brタグは打ってません)
仕組みはよく分かんないけど、挙動のわからなかったbrタグが直感的に打てるようになりました!


超簡単な設定方法


やることはすごく簡単なんですが、MarsEditを使ってる人は一手間あるんで一応。
まず、ここからプラグイン本体をダウンロード。

Wordpress 改行プラグイン · CamCam


インストールまでは紹介ページのとおりです。これで意のままに改行できるようになる!

ここからはMarsEdit使ってる人のみ。
MarsEditというブログエディタには、リアルタイムでプレビューを表示するという機能がありますが、ここの設定です。
僕は元々brタグを打ち込んでたので、プレビューでは「brタグで改行、普通の改行は無視する」という設定にしてました。
これからは「普通の改行を改行(書いたとおりの文章)する」ように設定し直します。
(すっごく分かりづらいなこの説明・・・)

やり方は凄まじく簡単・・ですが、環境設定になかったのでちょっと探しました。
MarsEditのメイン画面でブログ一覧を出して、ブログ名を右クリック。
Edit Settingsがあるので、それをクリック。

1

次にPreview Text FilterをTextileに変更。

2

こんだけ。
つーかこれも大天使ryo_dgに教えてもらいました。マジ感謝。
今までの記事はbrタグ書いちゃったんでもう治せませんが、これからは好きなスタイルで書けそうです。
本当によかった!ありがとうりょーちん!!

てすととととと

またまたテスト投稿。
タグって難しいね(´・ω・`)

ブログのテンプレートがおかしい件

最近は割とブログの更新頻度も上がってきました。
そうなるとやっぱり愛着も湧いてきて、たまにはプラグインの更新でもしようかなー、ついでにテーマもいじってみたいなーでもそんなスキルねーなー、なんて軽い気持ちで久しぶりに自分のブログを覗きにきたわけですが・・・



Web初心者「気付いたら改行が入ってました(キリッ」



1

な ん だ こ れ、行間空きすぎ・・・
「どんなコードしてんだよ」とHTMLを見てみると、



2

なんということでしょう。
一行ずつにbrタグが打ち込まれているではありませんか。
明らかに一個余分だろ・・・
HTMLの文法なんてお構いなし。(brタグ連打はイクナイらしい)
これぞ匠の成せる技。さすがWeb初心者すいとー。



Web初心者「(多分)気付いたら改行が入ってました(半信半疑」



いや、さすがにいくら僕が初心者でも、こんなに改行はしてません。
でも一応確認はしてみようとサーバーの記事を直接見てみると、



3

うん、やっぱりbrタグは1つずつしか書いてないことが判明。
ほらね、僕はちゃんと書いてたんだよ。よかったよかった(*´Д`)



「けど、前はちゃんと改行されてたよなぁ」と思いながら、昔にBloggerで書いてインポートした記事を開いてみると、こちらは無駄な改行は入っていない。
てことは、WordPressに移ってから書いた記事のみがおかしいということ。
あれ?もしかしたらこの改行ってWordPressさんの所為?



小悪魔WordPressの罠☆(ゝω・)vキャピ



自分が間違ってないと知るや、WordPressさんを悪者に仕立て上げてググってみたら、こんな記事を発見。




最適化(笑)と銘打って勝手にpタグ、brタグを書いたり消したりしてくれるらしい。
ホントなにやってくれてんだよ(´;ω;`)
さらにググってみると、似た症状で困ってる人はいるようで。
というか、実際の用途は「たくさん改行を入れたい」らしいです。
僕とは真逆だけど、WordPressの最適化を止めて欲しいってのは同じ。
んで、この最適化(笑)対策のプラグインとかもありました。



Modify paragraph formatting plugin “PS Disable Auto Formatting” | WordPress Plugin for CMS



早速入れてみる。・・・が、やっぱりどうにも直らず。
これはどうしようもないのか・・・_|\○_
そもそもWordPressがどういう動きをしてるのか分かってないのが問題なんですが、これ以上の解決策が見つからず。
いい加減HTMLとかPHPとか勉強しないとなぁと痛感しています。
とりあえず今はこの行間空きまくりのテンプレートで我慢するしかないか・・・

2011年9月9日金曜日

テスト投稿

PS Disable Auto Formattingのテスト。
うまくいったら記事にしますお。


うまくいかなくても記事にするのでたすけて(´;ω;`)

2011年9月8日木曜日

Textastic -iPadでいつでもどこでもプログラミング-

最近スクリプトとやらにハマってきて、日夜妄想にふけってます。
「あんなことできたらなー」と調べ始め、「アレとコレを使い回せば出来るんじゃね?」と思いたち、「とりあえずガシガシ書くべ!」と盛り上がります。
簡単なコードでも形になると、やったあああああって感じになれて楽しいです。


で、この「妄想」→「ひらめき」→「書き出し」の一連の流れで一人遊びするんですが、唯一スムーズにいかないのが「書き出し」。
メンドクサイとかではありません、書くのは楽しいし大好きです。
ただ、すぐに形にするのが難しいのです。ただでさえワケの分からない文字列ですから。
トーシロの僕はエディタでコンパイルしながら、ひたすらにtry & errorがやっと。
仕方ないと言えばそれまでですが、もう少し効率的に進めたいものです。


ほかにも「書き出し」に時間がかかる点があります。それは自宅でないと出来ない点。
「いや、iPhoneで書けばいいじゃん」・・・そう、僕も最初はそう思ってました。
しかしこれがおもしろいほどに筆が進まない。もといフリックが走らない。
あの狭い画面にこれでもかとキーボードを出し、チマチマと縦横にスクロールしながら、超初心者冗長コードを読んでると、全くと言っていいほど頭が働きません。


これではアイデアは溜まる一方です。積ん読、積みゲーならぬ積んアイ。(語呂悪すぎ)
アイデアばかり出してもしょうがない。いつでも発散できる環境を作らねば!
と思い立って、このアプリを買ってみました。


iPadでいつでもどこでもコーディングできるよ!



Textastic Code Editor App
カテゴリ: 仕事効率化
価格: ¥850


このアプリはコーディングに特化したテキストエディタ。
HTML、Object-C、JavaScript、shellなど超有名どころは当然として、80以上の言語をサポートしているというパワフルなエディタです。
HTMLやCSSではプレビュー表示ができるので、デザイン屋さんも嬉しいアプリ。
更に決め手になったのは、ユーザーの少ないAppleScriptにも対応している点。
ほかにもコーディングアプリはありましたが、AppleScript対応はTextasticしか見つけられませんでした。
僕は今のところAppleScript一筋なので、実質Textastic一択という流れ。
機能やレビューは本家ryo_dgくんの記事が分かりやすいので、そちらをどうぞ。


超ザックリな気に入った点、イマイチな点


気に入った点



  • 記号が即座に打てる専用キーボードが超便利。これだけはPCにも勝る。

  • カーソル位置の移動を補助するサブパネルも便利、しかもオシャレ。

  • 画面が大きくてザーッと読みやすい。iPhoneではこうはいかない。

  • フォントを細かく変更できる。初心者には見やすさが命。

  • Dropbox対応。今更当たり前っぽいけど、ようやく必須な機能なんだと気づいた。


イマイチな点



  • 2バイト文字が1バイト文字の幅になっちゃう。見やすさとオシャレさ激減。

  • 文字コードを自動認識しない、毎回選ぶの面倒。実は僕だけだという噂もある・・・


こんなのあったら便利なのに・・・



  • コンパイル。アドオンでいいから欲しい。通信ありきでサーバー経由なら可能?

  • 用語登録機能。よく使うクラス名とかは数タップで打ちたい。

  • スクリプト内の変数を記憶する機能。一度打った変数は数タップで入力したい。

  • Bookmarkletでリンクタグ挿入。HTMLには便利なのかな?HTMLサッパリすぎて謎。

  • 各言語のヘルプが欲しい。・・・はい、ググれって話ですね。。。


言いたい放題言いましたが、実際イマイチな点はほとんど無し。
2バイトだろうが1バイトだろうが、機能的には大した問題ではないですし。
楽しすぎるだけに、要望ばかりが先走っちゃいますね。ほぼ、ただのワガママ集です。
ただ、用語登録や変数入力補助あたりはかなり重要な気もしてます。
テキストエディタは補助機能が盛りだくさんだからこそ、使う価値があると思うので。実はそのうち作者に要望してみようかなと思ってます。
またこのほかにも、TextasticでAppleScriptを書くにあたって便利な使いかたもチラホラ見えてきたので、その辺りも追々記事にしたいと思います。


いいお値段はしますがそれ以上の働きをしてくれる、久々に大当たりなアプリです。
僕自身いろんなiPadアプリを試してますが、完成度はかなり高い部類かと。
あと、いつでもプログラミング出来るってのはすごく大事ですね。自然とモチベーションが高まるし、その分アイデアも生まれやすくなります。
プログラマー、WebデザイナーなiPadユーザーは是非ご検討くださいな( ´ ▽ ` )ノ



Textastic Code Editor App
カテゴリ: 仕事効率化
価格: ¥850

2011年8月21日日曜日

[AppleScript] とてもユニークな命令、最前面のアプリ名を取得

こんなのあるんですねぇ。妄想心を駆られます。
ちょっと忘れたけどWebで見かけた、最前面のアプリ名を取得する命令。


tell application "System Events"
set front_app to name of (path to frontmost application)
end tell

最前面のアプリ次第で分岐する、といった使いかたが主でしょうか。
または、全てのアプリが共通で行えるような動作を「最前面のアプリ」で実行するとか。
「tell application front_app」といった使いかたも出来るのがミソ。
ちょっとすぐには実装したい用途が思いつきませんが、なかなか面白いですよね。


今、言った先から思いつきました。
どのブラウザからでもURLをコピーする命令。
まさか前回苦い思い出を作ったFirefoxが参考になるとは・・・
実装例はこんな感じ。


tell application "System Events"
set front_app to name of (path to frontmost application)
set NUM to number of front_app
set NUM to NUM - 4
set front_app to characters 1 thru NUM of front_app as text
tell application front_app
keystroke "l" using {command down}
keystroke "c" using {command down}
end tell
end tell

「どんな需要だよ」って感じは否めませんが、こういう使いかたも出来る、と。
command + lでロケーションバーアクティブは、大抵のブラウザで共通ですし。
コピペが使えるということは、テキストエディタなどでも用途があるかもしれません。
そのほかに使えるコマンドと言えば、検索、設定、ヘルプ、アプリ終了とかでしょうか。


あ、またまた思いつきました。
ブラウザで表示している記事を全選択 → コピー → Evernoteにペーストとかは面白そう。
ゴテゴテしたブログではビューが崩れるでしょうが、うちみたいにシンプルなら可能。
今試してみて、Yahooの個別ニュースはいけますね。
シンプルなページをクリップするには、間違いなく最速でしょう。
・・・が、実際にペーストする必要があるので、一度Evernoteをアクティブにする必要があるのが難点かな。。。
最後に「front_app」をアクティブにすればいいことですけど。気になる人は気になるかも。(僕は気になる)
なんにせよ、frontmost、ユニークですね。

2011年8月17日水曜日

Growlを個別に設定する方法

AppleScriptでGrowlを使うとき、コード内に「このAppleScriptをGrowlアプリケーションとして登録する」という命令を書きます。
大体これで通知内容は指定出来るんですが、唯一出来ないのが音の設定。
正確に言えば"Growl Application Bridge"とかいうFrameworkを使えば出来るっぽいんですが、さすがにサッパリ分からん(´・ω・`)
僕が不甲斐ないのでスクリプトには「音は自分で設定してね!」としか書けません。
ということで、その方法を書いておきます。


Growl専用のアプリケーションリスト


1


ここから設定します。


2


アプリケーションの中に登録しているリストがずらーっと出てくるので、


3


設定したいアプリを選ぶと個別に設定できます。で、サウンドもここから設定。


オシマイ(´・ω・`)
「は?知っとるわそんなの!」って?
いや、確かにそうでしょうが、投げっぱなしというのも気持ち悪いですしねぇ・・・
これからはここを参照するようにします。

[AppleScript] 各ブラウザで最前面のページタイトルとURLを取得

タイトルどおりなんですが、それぞれで取り出す手法が違います。
AppleScriptでは、同じクラスでもアプリによって意味が違うことがあります。
なので、一つの情報を取り出すにも、同じ手段が取れないことはザラです。
Macで使う最近のブラウザといったら、Safari、Google Chrome、Firefoxでしょうか。
それ以外は使ってないので、ひとまずは3つ作りました。


まずはSafari。


tell application "Safari"
set page_URL to URL of current tab of window 1
set page_title to name of current tab of window 1
end tell

うん、分かりやすいですね。さすがApple純正ブラウザです。
用語説明を開いて驚いたんですが、印刷設定まで出来るんです。充実し過ぎ。


お次はGoogle Chrome。


tell application "Google Chrome"
set page_URL to URL of active tab of window 1
set page_title to title of active tab of window 1
end tell

まあ、大体は一緒ですね。currentがactiveになっただけ。
しかし、このくらいなら統一して欲しい気もしますが・・・
この辺りがAppleScriptらしさ。クラス云々というのはこういった側面です。


最後にFirefox。


tell application "Firefox"
activate
set page_title to the name of front window
tell application "System Events"
keystroke "l" using {command down}
keystroke "c" using {command down}
set page_URL to the clipboard as text
end tell
end tell

ええ、思わず「うそ・・・だろ・・・?」と言いたくなるコードです。
URL取得でkeystrokeとか、冗談でしか無いですね。が、残念。これしかありません。
AppleはMozillaに恨みでも買ってるんでしょうか。
細かく言えば、GUI Scriptingのエラー処理、クリップボードの保護も欲しいところです。
その辺を追加したらこうなります。


my gui_check()
set temp to the clipboard as text
tell application "Firefox"
activate
set page_title to the name of front window
tell application "System Events"
keystroke "l" using {command down}
keystroke "c" using {command down}
delay 0.5
set page_URL to the clipboard as text
end tell
end tell
delay 0.5
set the clipboard to temp as text

to gui_check()
tell application "System Events"
if UI elements enabled is false then
tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.universalaccess"
set msg to "GUI scripting is not available." & return & "Do you put the check in" & return & "\"Enable access for assistive devices\" ?"
--display dialog msg buttons {"OK"} default button "OK" with icon note --giving up after 10
display dialog msg buttons {"cansel", "check and try"} with icon note
end tell
set UI elements enabled to true
delay 0.5
tell application "System Preferences" to quit
delay 0.5
end if
end tell
end gui_check

もうね、やってられっかって話です。
そして嫌味なのが、この手法だと3つのブラウザ全て共通で使えるということです。
3つのブラウザに対応した形を作るなら、これをハンドラにした方が楽だということ。
まあ、 絶 対 に やらないけど・・・


でもまあ、これでFirefoxでもURL取得のテンプレが出来たので、次からは楽できそう。
ついでにGUI Scriptingのエラーもルーチン化できたし。こっちは随分と便利。
にしても、もう少しなんとかならないかなぁ・・・
言語を変えれば解決するんでしょうか・・・
今回これを作るにあたって、少しSafariに傾きつつあります。

2011年8月16日火曜日

[AppleScript] iTunesの再生中の曲情報をいろいろ取得

そのまんま、iTunesの曲情報を取得するだけ。
1分で書けるレベルですが、ひな形くらいにはなるかと。
Twitterの呟きパラメータとかになら使えるかもしれません。
というか、実際にその用途でついでに書いただけだったり・・・
ぱっと見たところアートワークの取得も出来たので、使いかたによっては面白いことができるのかもしれません。
こういうの見てると、Windowsのsamurizeを思い出しますね。


tell application "iTunes"
set i_track to current track
set i_name to the name of current track
set i_artist to artist of current track
set i_album to album of current track
set i_genre to genre of current track
set i_rating to rating of current track
set i_lyrics to lyrics of current track
set i_path to location of current track --HFSパス
end tell

[AppleScript] Bit.lyで短縮URL作成 [要API]

bit.lyで短縮したURLを返すルーチン。
用途的にルーチンにする必要は無いですが・・・書いちゃったので。
前に本家が公開してた方法は閉鎖してました。


Bit.ly URL shortening with Mac OS X Snow Leopard Services and Applescript
いっても410 GONEが返ってきます
しかし410なんてエラーあったんですね、知らなかった・・・



現行の記述はググッても中々見つからず、公式の隅っこに埋まってる感じ。
もうbit.ly自体あまり使われていないのかもしれませんが、念のため。
僕としては、かなり便利だと思うんですけどねぇ。。。
format=txtをxml、jsonに変えると、そのタイプで取得できます。


ApiDocumentation - bitly-api - bitly REST API method documentation - API Libraries and Documentation for bitly - Google Project Hosting
v3/shortenってとこ


残念ながら、直リンを返してくれるのはユーザー名、API持ってる人だけみたい。
無い場合はhttp://bit.ly/longURLに飛ばされてからでないと、短縮URLが作れません。
「アカウント持ってないヤツ、ちょっとウチこいよ」ってことなのかな?
ワンクッション無くURLを作る方法をご存知の方いましたら、教えてください。


set bitly_user to "" --bit.ly ユーザー名
set bitly_api to "" --bit.ly API
set longURL to "" --短縮前URL

to bitly(longURL, bitly_user, bitly_api)
set inputResult to (longURL as string)
if (((characters 1 thru 4 of inputResult) as string) = "http") then
set curlCMD to "curl --stderr /dev/null \"http://api.bitly.com/v3/shorten?login=" & bitly_user & "&apiKey=" & bitly_api & "&longUrl=" & longURL & "&format=txt\""
set tinyURL to (do shell script curlCMD)
return tinyURL
end if
end bitly

[AppleScript] Finderで選択した項目のいろんな情報を取得

スマートなコードを見つけたのでご紹介。
AppleScriptでググったらまずヒットするザリガニが見ていた...。さんから。
選択中したファイルのいろんな情報を引っ張り出します。
大抵はshellで取得すると思うんですが、これはprpertyから抜き取ります。
無理がなく、AppleScriptだけってのもステキ。
一気にいろんな情報が取れて便利ですねー。
ついでですが、a7、a8にパス関係を追加してます。(僕が使いたかっただけ)


tell application "Finder" to repeat with a2 in selection as alias list
copy properties of a2 to {name:a3, name extension:a4, container:a6}
set a5 to a3's characters 1 thru -((count character of a4) + 2) as Unicode text
set a7 to (a2 as alias) as Unicode text
set a8 to POSIX path of a7 as Unicode text
end repeat
--a3:ファイル名&拡張子、a4:拡張子、a5:ファイル名、a6:ディレクトリ、a7:HFSパス、a8:POSIXパス

2011年8月15日月曜日

MarsEdit買いました!!

MarsEdit - the blog editor for WordPress, Tumblr, Blogger and more. App
カテゴリ: ソーシャルネットワーキング
価格: ¥3,450


ずっと気になってたブログエディタ、MarsEditをついに買いました!
今まではmiで書いてWebのエディタに貼りつけてたんですが、もう限界。
miはホントお世話になって、タグとか登録しまくってて、かなり便利。
ブログエディタではないけど、細かい設定でほぼブログエディタとなってました。
今までありがとうmi、これからも使うんでよろしく。


執筆と校正が同時に出来る!


そう、miは完璧と言ってよかった。
軽い、タブ管理、ブログ書ける、コードも書ける。落ち度などあるわけがない。
問題はWordPressのWebエディタ。


頑張ってブログ書き終わったらもうヘトヘト。コピペしてすぐ投稿したい。
しかしそのままだと、半端な改行だったりして表示がズレズレに・・・
ということで、WordPress上でも若干の校正、プレビューが必要でした。
これがメンドイ。もうホントにメンドイ。
頑張って小さい表示枠で書きなおすも、下書き保存→プレビュー→まだズレてるorz
はあ?これで文章書けって?無理言わないでよ(´・ω・`)
ただでさえ文章力の無い僕から、やる気まで奪うんですか(´・ω・`)
自分の中では完了したはずの内容を書き直す。これがどんだけしんどいことか。


その点、MarsEditには「プレビュー機能」がついています。
記事を書きながら横目で出来映えが見れるという、なんとも素晴らしい機能。
これならブログ執筆と校正が同時に出来ます。WordPressを開く必要すらありません。
ホントこれ、素晴らしすぎます( ´ ▽ ` )


とりあえず設定した内容


まずはブログエディタに欠かせない最低限の機能を設定しました。
hrmlタグのマークアップ作成。僕は大して使わないんで、デフォルトにリスト用3つとソースコード用を足しただけ。
あとはキーをcontrol + ""に変更したくらい。(commandって干渉多いような・・・)
あとはツールバーとか・・・まあ、まだそのくらいですね・・・
まだ買ったばっかではしゃいでるレベルです。。。


この辺どーにかしたい


プレビューはブログのCSSを直接コピペしましたが、連動できないんですかねぇ?
ブログ側のCSSを更新したら、自動でプレビュー画面も更新されるって感じに。
まあ、それが出来るなら最初からそういう設定が用意されてる気がするんで、無理なのかもしれませんけど。
出来ないなら、書き出し位置と横幅だけ合わせたCSSにした方が軽そうです。


あと、ブログ記事のタグ一覧を出したい。
カテゴリは一覧が出て、タグは出ない。しかしサジェストはする。なんとも不思議設計。
これは上のCSSが適用されればプレビュー画面で最新のタグを見れるので、そっちでまとめて解決したい。
んー、まだ分かってないことが多すぎます。


正直、今のところはプレビューに釣られて飛びついたようなもんですw
ですが、ブログエディタならではな機能もたくさんあるみたい。(当たり前か)
ほかにもBookmarkletが使えたり、AppleScriptが使えたり。
最近AppleScriptやAlfred拡張にハマり、今後はコマンドやルーチンの記事が増える(予定)ので、もっと深い機能も探求していきたいと思います!
そのうちMarsEdit用のスクリプトも作りたいですね( ´ ▽ ` )



MarsEdit - the blog editor for WordPress, Tumblr, Blogger and more. App
カテゴリ: ソーシャルネットワーキング
価格: ¥3,450

2011年8月14日日曜日

[AppleScript] テキストをデリミタで分割してリスト化

テキストをリスト化する構文。

Finderからパスを取得した場合などによく使ってます。

拡張子、ファイル名、階層数を受け取りたいときは便利。



try
set AppleScript's text item delimiters to "NewDelim"
set DelList to ""
repeat with i from 1 to (count text item of DelText)
set demo to text item i of DelText
set DelList to DelList & demo as list
end repeat
end try

[AppleScript] Growlのサブルーチン化

Growlで通知を出すときの決まり文句。お世話になりそうです。

初回実行後に登録アプリ名でGrowlのアプリケーションごとの設定欄に現れます。音などはそちらで設定するしかなさそう。

サンプルのTweetの部分はGrowlへの登録アプリ名になります。

またサンプルのYoruFukurouは夜フクロウさんのアイコン指定。

思いのほか弄れるところはあるようで、詳しくは本家で都度確認、わかり次第追記の方がよさそう。


--実行部
my growlRegister()
growlNotify(grrTitle, grrDescription)

--サブルーチン部
using terms from application "GrowlHelperApp"
on growlRegister()
tell application "GrowlHelperApp"
register as application "Tweet" all notifications {"Notification"} default notifications {"Notification"} icon of application "YoruFukurou.app"
end tell
end growlRegister
on growlNotify(grrTitle, grrDescription)
tell application "GrowlHelperApp"
notify with name "Notification" title grrTitle description grrDescription application name "Tweet"
end tell
end growlNotify
end using terms from

2作目Alfred拡張、今度は期待できる!爆速リネームアプリ、Light Renamer!!

この間ご紹介したキーボードランチャAlfredの拡張、2作目作りました!

今回はかなりいい出来!!(前回が前回なだけに) 間違いなく便利です!

その名もLight Renamer!Alfredから爆速で高性能なリネームが出来る!

これは見なきゃ損!使わなきゃ損!ではさっそくご紹介します!(`・ω・´)


追記(110823)

一番下に直接コード貼りました。

たぶん、AlfredのPowerpackじゃないと見れないと思うので。

近いうち、もっと分かりやすい方法を載せますので、Alfredの便利さを心待ちにしてください(`・ω・´)


動画にしてみました!多分これが一番分かりやすいんじゃないかと思います。

ピンぼけみたいになってますが、挙動はこんな感じです。キャプチャしながらだからCPUフル回転してるので、実際はもっと速いです。

最後のオマケAlfred拡張も近いうち記事あげますー( ´ ▽ ` )ノ



一晩かかったんだし、まずは自慢させてください


・・・なんか通販みたいだったで普通にいきましょう。

とりあえず、モノを見てもらったほうが早いので、こちらをどうぞ。


Light Renamer


この拡張をざっくり説明すると、Finderで選択中の項目(ファイル/フォルダ両方)を、複数のパラメータを持たせてリネームします。

例えば、連番をつけたり、日付をつけたり、親フォルダの名前を参照したり、という感じです。

一連の流れを見てもらえば、なお分かりやすいかと思います。


1


まず、Finderで複数の項目を選択します。

見づらいですが、自炊した漫画で100項目掴みました。


2


おもむろにAlfredを呼び出します。僕はcontrol + space。

そして、"re fol,面白いよ!,n"と入力。

これはAlfredからパラメータを送るルールです。この辺はあとでご紹介。


3


ほい!!実行して3秒ほど、選択していたファイルがリネームされました!

"BLOOD+ 03_面白いよ!_001".jpg、完璧です!!

これは送ったパラメータ、"re fol,面白いよ!,n"で指定した内容となっています。

当然コレ以外のパラメータも送れますし、パラメータの順番も自由自在です。

リネームは名前昇順で実行されるので、連番に狂いもありません。

どうでしょう、なかなか使えそうな機能じゃないでしょうか。


Light Renamerはここが凄い!


では、このほかにどんなリネームが出来るのか。パラメータの説明と合わせて紹介します。

先ほどのパラメータの内容を紐解くと、こんな感じになっています。

re_fol,面白いよ!,n



  • re → AlfredからLight Renamerを呼び出すコマンド。必須です。

  • _ → 半角スペース。見えないので_書きましたが、実際は空白です。

  • fol → 親フォルダ名を表すパラメータ。[定数]

  • 面白いよ! → 設定していないパラメータ。要するに好きに使える文字列。[定数]

  • n → 連番を表すパラメータ。三桁だけど二桁、一桁もある。[変数]

  • , → それぞれのパラメータを区切る文字。これは固定してます。


このようにパラメータを与えることで、好きな構成の名前に変えられるという具合です。

このほかにも、下のパラメータも用意しています。



  • t → 日付を表すパラメータ。yymmddの記述で日付が入ります。[定数]

  • cur → リネーム前の名前を表すパラメータ。[変数]


これらのパラメータを好きな順番に並べれば、

re cur,t

→朝食_110813.jpg, 昼食_110813.jpg, 夕食_110813.jpg, 総カロリー_110813.txt,...

のような、食事ログのまとめ、

re n,沖縄旅行,t

→001_沖縄旅行_110813.jpg, 002_沖縄旅行_110813.avi, 003_沖縄旅行_110813.mp3,...

のような、旅行のデータまとめなどが、とても手軽に行えます。

僕が例で出した自炊ファイルのまとめは、一番ポピュラーな使いかたかと思います。

今挙げた食事ログのまとめを見ると分かりますが、パラメータは2つでも1つでも問題ありません。

その場合、区切りの","は省略して構いません。("re n" or "re n,t"の実用性は凄まじいです。)

拡張子を保護してリネームするので、いろんなファイルが混ざっていても大丈夫。

フォルダも同じ方法でリネームするので、ファイルとフォルダが混ざっていても大丈夫。

そしてそして、各パラメータには"t"、"n"、"fol"などが割り当てられてますが、これは設定で好きな文字に変更出来ます。

ついでに区切り文字の"_"も好きに変更出来ます。もうなんでもアリなレベル。

スクリプト内に"チョチョイと設定"という設定部分を作っているので、その値を変えてもらえばOK。

キーボードランチャからチョロっと叩くだけで、ここまで出来ていいのかと疑います。


自分で言うのもなんですが、これだけ出来れば普段づかいには十分でしょう。

もう簡単なリネームなら、専用アプリは必要ありません。

是非みなさんも使ってみてください!!

Alfredでの使いかたは、前回の記事に書いてますのでそちらをどうぞ。


ついでではありますが、Growlの通知もつけました。リネーム完了後、ポンと出ます。

ただ、これはエラー報告では無いです。ただ”出てくるだけ”。自己満足。

音などを設定したい人は、一度このスクリプトでGrowlをポップアップさせてから、

システム環境設定→Growl→アプリケーション→Light Renamerから設定してください。

「そんなんいらんわ」「Growl入れてない」という人は、スクリプト内に書いてある"チョチョイと設定"から、growl_runの初期値を"false"にしてください。

よかったらエラー処理にでも役立たせてくれれば幸いです。


いくつか注意点


使う上で、頭の片隅に覚えておいて欲しい項目がいくつか。

まず、Backgoundのチェックボックスを"ON"、Actionを"OFF"にしてください。

Backgroundが"OFF"でもリネームは出来ますが、リネーム中Alfredがほぼ固まります。

本末転倒もはなはだしいです。


そしてこれが大切なんですが、リネームするファイル/フォルダまでのフルパス(自身も含む)に、"."を含んだものはリネーム出来ません。

拡張子はOKなんですが、二重拡張子やフォルダに"."が入ったものは対応していません。(.tar.gzなど)

普段僕が扱わない拡張子は頭から抜けてました、ごめんなさい(´・ω・`)

その辺は他の専用ソフトでリネームするか、スクリプトを書き換えてください。


最後に。使っていると分かることなんですが、パラメータには[定数]と[変数]があります。

上のリストの末尾に書いてあるのがソレです。

連番、元のファイル名が変数となっており、この2つはファイルごとに値が違います。

それ以外の親フォルダ名、日付、任意の文字列は、常に一定の値が入ります。

もうピンときたでしょうが、定数のパラメータだけでリネームを実行すると、2つ目のリネーム処理でファイル名が重複してしまうため、リネームされません。

まあ、それでもエラーは吐かないのでリネームは素直に終了しますが、最初のファイルだけリネームされてしまうという危なっかしい状態になります。

実際には拡張子が違えばリネームは行えるので一概ではありませんが、こういった側面があることを知っておいてください。


あとがき - Alfredならではの拡張とは


"Light Renamer"を作って思ったことコーナー。このあとがき、恒例になりそうです。

前回のタイマーも一応Alfred用の作りでしたが、今回のは完全にAlfred専用な感じで大満足。

というのは、キーボードランチャからパラメータを直接投げるという挙動についてです。

この部分を踏まえないと、「それ別のやり方のが速くね?」ってことに成りかねません。

速さがすべてとは言いませんが、キーボードランチャを使う人は割とそういう考えではないでしょうか。(僕だけか?)

Light Renamerは、力ではワイルドカードや正規表現でゴリゴリとリネーム出来るアプリには手も足も出ませんが、こと速さにおいては格別です。

キーボードランチャに似合った、適材適所な拡張機能と言っていいでしょう。

まあ中身は相変わらずズタボロですが、Alfredの考えはこんな感じなのかなと思います。

とまあ、さすがにいい加減自己満過ぎるので、そろそろ次のアプリの構想に移ります(笑)


コードを追記


コメント込みだとすごい量だな・・・



(*
Light Renamer
すいとー (@suito1942)
http://www.hw2-suito.com/

*概要
Alfredから使える、簡易リネームスクリプトです。
Finderで選択している項目をリネームします。
ファイル/フォルダ両用です。複数選択した場合、名前昇順で実行されます。
入力文字を","で区切り、さまざまなパラメータを最大3つまで組み合わせることが出来ます。
各パラメータは下記。(Syntaxは変更可)

Syntax:$任意の文字列 [定数]
任意の文字列。ファイル名に使えない文字列は含まないでください。
Syntax:$t [定数]
日時を入力します。記述はyymmdd。(例:110813)
Syntax:$n [変数]
連番を入力します。デフォルトの記述は三桁。(例:001,002,003,...)
一桁、二桁もオプションで用意しています。変更したい場合は最後の"カウントアップ"を編集してください。
Syntax:$fol [定数]
親フォルダ名を入力します。
Syntax:$cur [変数]
リネーム前のファイル名を入力します。

*使いかた
Alfredのkeywordを入力し(デフォルトは"re")、returnもしくは" "を押して、それぞれのパラメータを","で区切って入力します。
それぞれのパラメータは"_"で区切られます。
少し分かりづらいので、いくつかの実用例を紹介します。

1、"re n,沖縄旅行,t" と入力 [対象:沖縄旅行のいろんなデータ]
→001_沖縄旅行_110813.jpg, 002_沖縄旅行_110813.avi, 003_沖縄旅行_110813.mp3,...
2、"re cur,t" と入力 [対象:今日食べた食事のデータ]
→朝食_110813.jpg, 昼食_110813.jpg, おやつ_110813,jpg, 夕食_110813.jpg, 総カロリー_110813.txt,...
3、"re fol,cur" と入力 [対象:「よつばと!1巻」を自炊したデータ]
→よつばと!1巻_001.jpg, よつばと!1巻_002.jpg, よつばと!1巻_003.jpg,...

パラメータは最大3つまで。1つでもリネームは出来ます。(実際、"re n"はよく使うと思います。)
ファイル、フォルダともに、同様の処理をします。(拡張子は保護します。)
各パラメータを呼び出すSyntaxと、各パラメータを区切る"_"は、下記から変更可能です。("チョチョイと設定"から〜まで)
使いやすい文字に変更してみてください。

*注意点
Backgoundのチェックボックスを"ON"、Actionを"OFF"にしてください。

スクリプトの仕様上、下記のファイル、フォルダ名のものはリネーム出来ません。
"."を含むファイル、フォルダ名(階層含んですべて)
二重拡張子のファイルなどは、別の手段でリネームしてください。

各パラメータには、回数を重ねるごとに内容が変更されるものと、変更されないものがあります。
Syntaxの欄にある、[定数],[変数]がそれにあたります。(拡張子は準変数としておきます。)
連番、リネーム前ファイル名は毎回変わりますが、それ以外はずっと同じ文字列が入ります。
[定数]のパラメータのみで構成すると、2つ目のリネーム処理でファイル名の重複によるエラーとなります。
「ミスった!・・・あれ?元のファイル名なんだっけ?」と陥りやすいので、気をつけてください。

*おまけ
ついでにGrowlの通知もつけました。リネーム完了後、ポップアップします。
ただし、エラー報告などではありません。ただ"出てくるだけ"です。
音などを設定したい人は、一度このスクリプトでGrowlをポップアップさせてから、
システム環境設定→Growl→アプリケーション→Light Renamerから設定してください。
「そんなんいらんわ」「Growl入れてない」という人は、"チョチョイと設定"から、
growl_runの値を"false"にしてください。
上手くエラー処理に役立たせてくれれば幸いです。
*)

on alfred_script(q)
set q to q as text

--チョチョイと設定 ここから
--""内を変えるとSyntaxを変更できます
set t to "t" --日付のSyntax
set n to "n" --連番のSyntax
set fol to "fol" --親フォルダのSyntax
set cur to "cur" --現在のファイル名のSyntax
set separator to "_" --各パラメータを区切る文字
set growl_run to "true" --いる場合は"true"、いらない場合は"false"
--チョチョイと設定 ここまで

--フォルダ名取得
tell application "Finder"
tell window 1
set parent_path to target as alias as text
end tell
try
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to ":"
set parent_list to ""
repeat with i from 1 to (count text item of parent_path)
set demo to text item i of parent_path
set parent_list to parent_list & demo as list
end repeat
end try
set demo to count of parent_list
set demo to demo - 1
set folder_name to text item demo of parent_list
set AppleScript's text item delimiters to oldDelim
end tell

--その他もろもろ
set current_day to (do shell script "date '+%y%m%d'")
set item_num to 0
set count_type to ""
set current_type to ""
set current_name to ""

--引数の判定と代入、count_typeとcurrent_typeは後の判定用
set my_parameter to q
set my_parameter to my_parameter & "," & "," --引数が少ない時用
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to ","

if text item 1 of my_parameter = t then
set A to current_day
else if text item 1 of my_parameter = n then
set A to item_num
set count_type to "A"
else if text item 1 of my_parameter = cur then
set A to ""
set current_type to "A"
else if text item 1 of my_parameter = fol then
set A to folder_name
else if text item 1 of my_parameter ≠ "" then
set A to text item 1 of my_parameter
else
set A to ""
end if

if text item 2 of my_parameter = t then
set B to current_day
else if text item 2 of my_parameter = n then
set B to item_num
set count_type to "B"
else if text item 2 of my_parameter = cur then
set B to ""
set current_type to "B"
else if text item 2 of my_parameter = fol then
set B to folder_name
else if text item 2 of my_parameter ≠ "" then
set B to text item 2 of my_parameter
else
set B to ""
end if

if text item 3 of my_parameter = t then
set C to current_day
else if text item 3 of my_parameter = n then
set C to item_num
set count_type to "C"
else if text item 3 of my_parameter = cur then
set C to ""
set current_type to "C"
else if text item 3 of my_parameter = fol then
set C to folder_name
else if text item 3 of my_parameter ≠ "" then
set C to text item 3 of my_parameter
else
set C to ""
end if
set AppleScript's text item delimiters to oldDelim

tell application "Finder"
set g_i to 0 --遊びで使ってます、よかったらエラー処理に役立たせてください
repeat with select_item in (selection as list)
set file_path to select_item as text
set g_i to g_i + 1
if file_path contains "." then --ファイルのとき(拡張子の有無を判定。二重拡張子、親フォルダに"."がある場合は成り立たない理由)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to "."
set item_ext to last text item of file_path --拡張子取得
set current_name_text to text item 1 of file_path

try
set AppleScript's text item delimiters to ":"
set current_name_list to ""
repeat with ii from 1 to (count text item of current_name_text)
set list_demo to text item ii of current_name_text
set current_name_list to current_name_list & list_demo as list
end repeat
end try
set current_name to last text item of current_name_list --現在の名前取得
set AppleScript's text item delimiters to oldDelim

--変数になるcurとnはrepeat内
--引数にcurがあったとき
if current_type = "A" then
set A to current_name
else if current_type = "B" then
set B to current_name
else if current_type = "C" then
set C to current_name
end if

--引数にnがあったとき
if count_type = "A" then
set A to my count_up(A)
else if count_type = "B" then
set B to my count_up(B)
else if count_type = "C" then
set C to my count_up(C)
end if

--リネーム
if C = "" and B = "" then
set name of select_item to A & "." & item_ext as Unicode text
else if C = "" then
set name of select_item to A & separator & B & "." & item_ext as Unicode text
else
set name of select_item to A & separator & B & separator & C & "." & item_ext as Unicode text
end if
else --フォルダのとき
try
set AppleScript's text item delimiters to ":"
set current_name_list to ""
repeat with ii from 1 to (count text item of file_path)
set list_demo to text item ii of file_path
set current_name_list to current_name_list & list_demo as list
end repeat
end try
set current_name to last text item of current_name_list --現在の名前取得
set AppleScript's text item delimiters to oldDelim

--変数になるcurとnはrepeat内
--引数にcurがあったとき
if current_type = "A" then
set A to current_name
else if current_type = "B" then
set B to current_name
else if current_type = "C" then
set C to current_name
end if

--引数にnがあったとき
if count_type = "A" then
set A to my count_up(A)
else if count_type = "B" then
set B to my count_up(B)
else if count_type = "C" then
set C to my count_up(C)
end if

--リネーム
if C = "" and B = "" then
set name of select_item to A as Unicode text
else if C = "" then
set name of select_item to A & separator & B as Unicode text
else
set name of select_item to A & separator & B & separator & C as Unicode text
end if
end if
end repeat
end tell
if growl_run = "true" then
set g_i to "total " & g_i & " items" as text
my growlRegister()
growlNotify("End Run Rename", g_i)
end if
end alfred_script

--サブルーチン
--カウントアップ
-- 一桁にする・・・[2],[3]をコメントアウト
-- 二桁にする・・・[3]をコメントアウト
-- 三桁にする・・・[2]をコメントアウト
-- (コメントアウトは行頭に"--"をつけてください)
to count_up(type)
set type to type + 1 -- [1]
--set type to text -2 thru -1 of ("0" & type) -- [2]
set type to text -3 thru -1 of ("00" & type) -- [3]
return type
end count_up

--Growlサブルーチン
--エラーの方は使ってません。よかったらどこかに設置してください。
using terms from application "GrowlHelperApp"
on growlRegister()
tell application "GrowlHelperApp"
register as application "Light Renamer" all notifications {"Notification"} default notifications {"Notification"} icon of application "Alfred.app"
end tell
end growlRegister
on growlRegister_error()
tell application "GrowlHelperApp"
register as application "Light Renamer error" all notifications {"Alert"} default notifications {"Alert"} icon of application "Alfred.app"
end tell
end growlRegister_error
on growlNotify(grrTitle, grrDescription)
tell application "GrowlHelperApp"
notify with name "Notification" title grrTitle description grrDescription application name "Light Renamer"
end tell
end growlNotify
on growlNotify_error(grrTitle, grrDescription)
tell application "GrowlHelperApp"
notify with name "Alert" title grrTitle description grrDescription application name "Light Renamer error"
end tell
end growlNotify_error
end using terms from

2011年8月13日土曜日

[AppleScript] Finderで選択中の項目をリネーム

今日からApple Scriptの書き溜めをブログにしていこうと思います。

スクリプト書くとき、簡単なルーチンはEvernoteにメモで残してるんですが、それだとあんまり実用性が無いので。

というのも、ただコピペするだけだと、こんな感じになるから。


Finderで選択中の項目をリネーム(ファイル、フォルダは識別しない)


もう目も当てられません・・・

つーことで、「Webクリップしたソースコードならそのまま使えるだろ!」&「Webに置いときゃ誰が見るかもね!」と思った次第。

どこまで続くか分からないし、実際スクリプト書いてる最中にチマチマとブログにメモするの?って疑問はありますが、とりあえず続けてみます!


リネーム


ほんでは、さっそく一つ。

巷で大流行のAlfred拡張で使う予定の、リネームルーチン。

連番とかはつけてないので、必要に応じて変えてください。

拡張子は保護しますが、フォルダ名がファイル名まがいな記述("エロフォルダ.jpg"とか)だとエラー。(理由分からず)

あと二重拡張子も無視。.tar.gzとか、うちのHDDに入ってない無いものは興味なし。



on rename(new_name)
tell application "Finder"
repeat with select_item in (selection as list)
set file_path to select_item as text
if file_path contains "." then --ファイルのとき
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to "." --二重拡張子は無視
set item_ext to text item 2 of file_path
set AppleScript's text item delimiters to oldDelim
set name of select_item to new_name & "." & item_ext
delay 0.05 --タマに重複することがある(うちだけ?)
else --フォルダのとき
set name of select_item to new_name
delay 0.05 --タマに重複することがある(うちだけ?)
end if
end repeat
end tell
end rename

おお、割と見れる感じに整いますね。

ただ、色が・・・(´・ω・`) まあ、いいか。

これでEvernoteにもクリップ出来てることでしょう。(まだ未確認ですが)

こういうの、サクッとブログに上げるスクリプトも欲しいですねぇ。

2011年8月12日金曜日

お洒落ランチャAlfredにスクリプト連携!!さっそくタイマー作ってみたよ!

「Alfredというキーボードランチャで面白いことが出来るよ!!」と、Twitterで@syunkuroさんに教えてもらいました。

Macに数多くあるランチャの中でも、軍を抜いたオシャレ度でのAlfred。

そのAlfredに、スクリプトと連携できる機能が実装されています。(有料パッケージのみ)

主には公式synkuroさんのブログを見ていただくとして、ザックリ説明するとAlfredからスクリプトの変数を直接投げられるという、なんとも面白そうな機能。

まだアップデートには出てきませんが、公式からver.0.9.9をダウンロードし、Powerpackを購入すると使えます。

そんなわけで、僕も一つ作ってみました。


追記[110813]

少し編集したので新しい方に置き換えました。

beep音をコメントアウト、代わりにGrowlを追加。

初回は音がならないので、実行後に

システム環境設定→Growl→アプリケーション→カップ麺タイマー

から音設定してください。

「カップ麺なんざbeep音で十分」って人はbeepのコメントアウト外して下さい。

まあ・・・あんまり変わってないけどね(´・ω・`)


カップ麺タイマー


はい、名前のとおり、ただのタイマーです。

ともかく下のリンクからレッツダウンロード!

カップ麺タイマー


1


ダウンロードしたら、AlfredのExtension右隅にD&D。

これだけで使えるようになります。便利ですね。

使いかたは中身にも書いていますが、一応ここでも説明。



  1. Alfredで"timer"とタイプし、"カップ麺タイマー"が一段目にあることを確認して、return。(デフォルト設定)

  2. 半角スペース空くので、そのままタイマー時間(分)を入力。

  3. 時間がきたらビープ音が3回鳴るよ!やったね!!

  4. ちまたで噂のポロモード(?)にもいいかもね!!

  5. 以上!!!!(`・ω・´)


「・・・は?」と思われるでしょうが、これでも色々と頑張ったんです。

本当はまだほんの少しマシハズだったんですけど、 僕には荷が重かった・・・

散々あれやこれやと足掻いた挙句、僕の力ではAlfredを生かせずこんな形になってしまいましたとさ(´・ω・`)

とまあ僕は散々だったんですが、使いかたによってはかなり便利な機能なのは間違いないですし、オシャレなマカーはぜひ遊んでもらいたいです。

本家のブログには既にいくつかのスクリプトが置いてありますし、みんなで公開しあって便利なランチャに仕上げましょう!


実はも一個作った!!


そう、ホントはこのスクリプト、ポロモード仕様にしたかったんです。

時間設定して、総時間とかも出てみたいな、ステキ拡張になる予定だったんです。

まあ僕はポロモードとか分かんないので、夜中にダラダラと続ける惰性PCの警告に使うつもりだったんです。

それがなぜカップ麺タイマーに・・・( ´Д`)=3

というのもなんですので、残骸を残しておきます。(一応動きます。)

Inertia Timer - 惰性タイマー

こちらはアプリケーションなので、単独で動きます。普通に実行してもらえば大丈夫。

使い勝手はこっちのが使いやすいかもしれません。(ダイアログ出るし)

ポロモードとかで真面目に使う人は間違いなくコッチのはず。


使いかたを説明するまでも無いアプリですが、一応。


2


起動するとタイマー時間を尋ねるダイアログが出るので、入力。


3


時間が経つと、ビープ音とともにダイアログが出ます。

終了するなら"OK"、延長するなら"never"。


4


延長を選んだ場合、再び出てきたダイアログにタイマー時間を入力。

以下エンドレスでリピート。


5


延長後のダイアログでは、総時間と繰り返し回数も吐きます。

ポロモードで頑張ってる人はヤル気が、深夜の惰性でPC触ってる人は明日への焦りがみなぎりますね。


ちょっとした注意点として、半角数字の自然数以外は受け付けません。(0は含まず)

黙って静かに終了するので、気づかないと延々作業するハメになります。

エラー吐いて欲しい場合は修正してください(´・ω・`)


Alfred拡張を作ってみて


少し、作成後の小言を。

ナゼこれをAlfredでやらなかったか。

実際、ほぼ同じ作りにすればAlfredでも動きはします。

しかし、Alfredの拡張は当然Alfred上で動くので、スクリプト実行中はAlfredがかなり重くなるんですね・・・

対策として、Alfredにはスクリプトをバックグラウンドで実行させるオプションもあります。(現にカップ麺タイマーはバックグラウンド動作)

しかししかしそうすると、ダイアログは出せなくなります。

・・・という感じでジレンマに陥り、残念な結果になってしまいました。。。

結局、今回のAlfred拡張には向いてない動作ということで、アプリになった、と。

そのほかにも、Alfredでやる意味(=キーボードランチャで引数を渡す)を考えると、中々適切なものが見つからず、といった具合。

他の手順のほうが早いようでは意味が無いですしね。意外と作業を選びます。その分考えるのがすごくおもしろい。

作るのは簡単だけど、奥が深いなーと思いました。


最後の最後に宣伝


よかったら使ってね!「この辺おかしいよ?」とかガシガシ言ってくださいヽ( ・∀・)ノ

「こうすればAlfredで出来るよ!」みたいなアドバイス、ゼヒゼヒ教えてくださいm(_ _)m

そしてこっそりと、しょぼい自作アイコンを差し替えてくれる方大募集です(´・ω・`)

2011年8月6日土曜日

iTunesのスマートプレイリストが出先で最強な件

大分今更なTipsですが自分的にかなり大当たりだったのでメモ。


みなさんiTunesは使っていますか?

iPhoneやiPodを持ってる人は、まず使ってると思います。

僕はiPhoneのiPodアプリで毎日音楽を聞いてるので、お世話になりっぱなしです。

普段は適当な音楽をかけっぱなしなんですが、ここ最近は遠出することが多く、iPodアプリにお世話になる時間も長いので、割と意識して選曲してます。

そうなってくると、アーティストやアルバム単位ではなく、自分のお気に入り集を作りたくなってきます。

朝聞きたい曲、みんなに聞かせたい曲、カラオケで歌いたい曲などなど。

そんな曲に出会ったとき、頭の隅に覚えたり、メモしなくても、一発で振り分けする方法を大発見しました!!!ババーン!!ドヤッ (というか今更気付いた)


スマートプレイリストはiPodアプリのための機能でござった


結論を言うとスマートプレイリストを使うわけです。

「スマートプレイリスト?なんぞそれ?」という人にザックリ説明すると、再生回数や追加した日などから自分で条件を作って、あとは自動で曲を割り振ってくれるという、なんとも便利な機能。


これ、なんとiPodアプリでも動くんですよ。

外でiPodで曲を聞いてて、条件を満たした瞬間、勝手に割り振られてるんです。

ね?知らなったでしょ?( ´_ゝ`) (え・・・知らなかったの僕だけ・・・?)


レートで最大5つのスマートプレイリスト


とは言っても、iPodアプリはiTunesとは違って、曲情報を編集とかできません。

「コメントに"なんちゃら"が入った曲は"どこそこ"に移動」とかは無理。難しすぎる。

唯一編集できる情報、それはレート。

あんまり見る機会は無いと思いますが、こんなページで編集できます。


1000000484


1000000485


設定もちょー簡単


スマートプレイリストでこれを作る。


1000000486


終了。最大で5つまで。

あとは「レート5つはカラオケ用」とか自分ルールを作るだけ。

iPodアプリで「お、これいいな」と思ったら、5段階のレートをポチッとタップ。

「ん・・・、やっぱ違うな」と思ったら、レート外すだけ。

超絶便利っす。うーんもっと早くから気付いとくんだった・・・