Alfred Workflow: App Dig

  AppShopper是一个很实用的iOS/Mac App价格信息搜集网站,App Dig基于它,可以很方便的在Alfed里获取如限时免费等App价格变更信息,同时也支持AppShopper的Wish List。

App Dig Screenshot

DownloadSource

  • 支持App列表中显示应用图标1
  • 设置AppShopper用户名并公开Wish List可显示愿望列表2

  1. 显示应用图标时,获得App列表的时间可能增加,可在app setting中选择禁用 

  2. 在AppShopper的Wish List页面选中'Share My Wishlist'即可公开你的愿望列表 

Read more...

HOW TO: 升级Mac OS X上的GIT

  在MacOSX下使用Homebrew或其它方式安装最新版本的GIT后,往往并不能使用,系统默认调用的依旧还是比较旧的版本,原因是已经通过XCode等方式安装过git,且它们的路径优先级较高。

  下面假设你已经通过Homebrewbrew install git成功安装了GIT,但系统默认使用的还是旧版本。

1. 检查系统默认调用的是否是通过Homebrew安装的最新版本

  Homebrew安装的GIT会被软链接到/usr/local/bin目录下,所以如果你使用which git看到的结果不是/usr/local/bin/git,那么你就需要通过后面的方法修改以便能够默认使用你所安装版本的GIT。

2. 移除系统自带的版本

  如果which git返回的结果是/usr/bin/git,说明你可能通过XCode安装了其自带的GIT,其版本一般都比较低,需要移除。

cd /usr/bin
sudo mkdir backup-git-apple
sudo mv git* backup-git-apple

3. 移除可能存在的其它版本

  如果which git返回的结果是/usr/local/git/bin/git,则表示可能是你曾经使用git-osx-installer或其它方式安装过GIT,检查系统环境变量PATH可能还包含形如/usr/local/git/bin的路径。

sudo rm -rf /usr/local/git
sudo rm /etc/paths.d/git
sudo rm /etc/manpaths.d/git

  最后,重启终端,再次检查which gitgit version

  BTW: 2、3的情况可能同时存在。

让iTunes的歌曲自动获取歌词

Fetch Lyric for iTunes

  在4321.la看到使用AppleScript自动获取iTunes曲目歌词的脚本,相当不错,自己做了些修改,添加了当歌词已存在时忽略获取,可以通过Growl通知获取的结果等功能。代码如下:

-- FetchLyric
-- DESCRIPTION: 让iTunes内当前被选中的曲目自动下载并保存歌词,若歌词已存在将被忽略,支持Growl通知
-- AUTHOR: JinnLynn http:://jeeker.net
-- LAST UPDATED: 2012-05-04
-- INTRO PAGE: http://jeeker.net/fetch-lyric-for-itunes/
-- REF: Martian http://blog.4321.la/articles/2012/01/27/use-applescript-to-set-itunes-lyrics/
property scriptName : "FetchLyric"
property baseURL : "http://lyrics.sinaapp.com/"
property isGrowlRunning : false
property statusDesc : {"歌词已存在,无需再获取。", "歌词获取成功。", "歌词获取失败。", "未选择歌曲。"}
property STATUS_LYRIC_EXIST : 1
property STATUS_LYRIC_SUCCESS : 2
property STATUS_LYRIC_FAIL : 3
property STATUS_LYRIC_UNSELECTED : 4

tell application "System Events"
    set isGrowlRunning to (count of (every process whose bundle identifier is "com.Growl.GrowlHelperApp")) > 0
end tell

script growl
    on growlNotify(artist, title, status)
        if isGrowlRunning = false then return
        tell application id "com.Growl.GrowlHelperApp"
            if title = "" then set title to "unknown"
            set the_title to title
            if artist is not equal to "" then set the_title to artist & " - " & the_title
            set the_desc to item status of statusDesc
            set the allNotificationsList to {scriptName}
            set the enabledNotificationsList to {scriptName}
            register as application ¬
                scriptName all notifications allNotificationsList ¬
                default notifications enabledNotificationsList ¬
                icon of application "iTunes"
            notify with name ¬
                scriptName title ¬
                the_title description ¬
                the_desc application name scriptName
            -- 尝试使用歌曲封面作为Growl图标出错
        end tell
    end growlNotify
end script

tell application "iTunes"
    if selection is {} then
        tell growl to growlNotify("", "", STATUS_LYRIC_UNSELECTED)
        return
    end if
    set k to count (item of selection)
    set i to 1
    repeat
        set theTrack to (item i of selection)
        set this_artist to (get artist of theTrack)
        set this_title to (get name of theTrack)
        set this_lyric to (get lyrics of theTrack)
        -- set this_artwork to data of artwork 1 of theTrack

        set fetch_status to STATUS_LYRIC_FAIL

        if length of this_lyric < 1 then
            -- 只有当歌曲中未存在歌词时才尝试获取歌词
            set requestData to "title=" & this_title & "&artist=" & this_artist
            set songLyrics to do shell script "curl -d '" & requestData & "' " & baseURL
            if length of songLyrics > 1 then
                -- 歌词成功获取
                set lyrics of theTrack to songLyrics
                set fetch_status to STATUS_LYRIC_SUCCESS
            end if
        else
            set fetch_status to STATUS_LYRIC_EXIST
        end if

        tell growl to growlNotify(this_artist, this_title, fetch_status)

        set i to i + 1
        if i > k then exit repeat
    end repeat
    -- 如果Growl未运行则显示对话框
    if isGrowlRunning = false then
        display dialog return & "歌词获取结束!" buttons {"确定"} default button 1 with icon 1 giving up after 5 with title scriptName
    end if
end tell

  USAGE: 在AppleScript Editor中新建包含上述脚本的文件,保存在 ~/Library/iTunes/Scripts 目录下,这时在iTunes菜单栏中就会出现AppleScript的下拉菜单,选中需要的歌曲执行其中的命令即可。或者也可以使用Automator将上述脚本生成系统服务,具体本文不做详述,自行Google。

  实际上实现功能需要服务端的支持,上述脚本中使用了Martian搭建在SAE上的服务端,如果你想搭建自己的服务端可以在Martian的文章中找到代码,或下载下面的文件,里面也包含了一个在服务端运行的PHP文件。

Project on GitHubDownload

  BTW: 尝试过使用歌曲封面做为Growl的图标没有成功,总提示无法生成数据,不知道什么原因。

禁用Mac OS X Lion的Resume功能

  Mac OS X Lion新增加的Resume功能在给使用者带来便利的同时也引发了隐私上的问题,没人希望尴尬的内容因此被呈现在他人眼前,可惜对于Resume,Lion并没有提供比较完善的配置功能,很多时候需要手动进行设置。

1. 关闭所有应用的Resume功能

  System Preferences - General - Restore windows when quitting and re-opening apps 取消选中该选项。

Resume

2. 临时禁用某个应用的Resume功能

  使用快捷键⌥⌘Q退出某个应用,下次再次打开时就不会恢复窗口,除非该应用关闭时正在编辑的文件尚未保存。

  如果某个应用已经被退出,则可以在Finder前往~/Library/Saved Application State/文件夹,找到不想再次打开时恢复窗口的应用目录,如com.apple.Safari.savedState,将其删除即可(注:比较特别的是Preview在这个目录下只是一个链接,需要进入其目录后删除其下的所有文件)。

3. 永久关闭特定应用的Resume功能

  以Safari为例,打开终端,输入以下命令:

defaults write com.apple.Safari NSQuitAlwaysKeepsWindows -int 0

  要开启Resume功能,删除该键值即可:

defaults delete com.apple.Safari NSQuitAlwaysKeepsWindows

  也可以使用Pref Setter、PlistEdit Pro等plist工具对应用的配置文件添加或删除NSQuitAlwaysKeepsWindows键值。

BTW: 不是使用Mac OS X Lion的API而是自己控制窗口恢复的应用使用上述方法无效,如Chrome 15.0.865.0 dev