写在前面

我用的工具实在是特殊,我的数字生活也是很难用图片来表示的,写的 AppleScript 脚本又只有一个(强迫症,硬生生地塞进了一个里),运不运行我都是看不到的,更别说截图了,我也不喜欢拍电子产品的图片(尽管手上有一个不多见的 Sony Dpt-S1))所以,首先这是一个可能图片不多的文章,也可能是一个适用性不一定很大的文章。但是诸位看看不亏多少,不是?

一年的回顾

作为一个高中生活在一个寄宿制不准携带电子产品学校的我,自己与这些电子产品的情缘都是从2015高三毕业开始的。

2015年末,购入了索尼 DPT-S1 和 Macbook Pro 16G 定制版,还有一台 4S(完全出于信仰)。所以,2016 对于我,是一个摸索和适应的阶段。

热衷于探索软件的我,一向在寻找能更好地满足需求的软件的方向上执念太深。电脑,手机对于我这个学生党来说,在学习的方面上,无非背单词,读文档,听歌,看视频几大要求。

背单词需求高,于是尝试了市面上的诸多词典,由于中途用过安卓机,所以安卓平台上也略有接触。用过新东方的优词,扇贝,海词,欧路,沪江小D,沪江开心词场,百词斩等等,还有一个至今还没有多大名气的词根词缀记忆词典(虽然我强推此款),对了,还有系统原生。

希望获取资讯,开开眼界,于是去弄 RSS 和播客,又是一番知乎教程,大概一个星期,又给我弃了。

总是一个人,于是听听音乐,免得孤独,生了心病。可是我在 iTunes,网易云,QQ几家徘徊,都是用着卸,卸了安。网易用的最多,听歌量终于要到了10000,三家也都充过会员。但是,都是非常想弃了的。

文档是逃不掉要去看的,于是试了许多的阅读器,结果很悲凉,没有哪一款能多坚持一会儿。

一年的反思

就这样过了一年,年末,一气之下,重装了系统,所有的应用从头来安。

但也不能说没有收获,我明白了自己使用应用的习惯,明白了自己的痛点。例如对于单词,每当我需要查询的时候,我要去各个应用里查让自己满意的解释,有时只是需要个简单翻译,有时又想看非常详细,有时还想去看看词源词根。想要记录单词,还要去复制,粘贴,打开印象笔记,尽管有 IOS 端的 workflow 和 Mac 端的 Alfred 和 popclip,但是体验的提升并不明显。若是还要加上周期性的复习,更是麻烦。而平时的阅读,打开特定的软件,看特定的内容,更是常常感到促狭。尽管 Rss 也是对这样的过程有了改善,但是我还是浑身不自在。

所以,2016 年末,终于找到一本好的 AppleScript 教材的我,开始了自行调教。

AppleScript 下我的数字生活

基本思路

放弃了 mac,我终于是想起来用 DPT-S1 作为阅读工具了,略有些鸡肋的一个设备,没有必要详谈它,也没有必要放照片。iPad pro 的大小,看漫画和教科书是爽翻,但是只能看 pdf,没有词典,云同步又因为尴尬的校园网变得更加尴尬。

目前的工作流是每天晚上把 DPT-S1 连到电脑上时,会有一个脚本自动启动,把明天要背的单词,要复习的单词,要看的文档,可能会看的 rss 更新全部做成pdf导入进去,用 AppleScript 写一个 html,用 python 的 wkhtmltopdf来实现html到pdf的转换,自己写一个 CSS 来满足自己不像样的审美。 同时,由于 OmniFocus,Evernote,DEVONthink 都支持 AppleScript,所以顺带着也把它们放在了脚本的协同工作里。

对背单词的实现

出于对英语单词的极大需求,我用系统自带词典来得到单词英文释义,mac os 自己提供了一个 python 方法,不过藏的比较深罢了,(╯°Д°)╯︵ /(.□ . )我也是这个年末才知道,用有道词典的api得到中文释义,用有道翻译的api得到简单翻译,用python的 urllib2 和 BeautifulSoup 4 在优词词典(还是强推)的网页中得到单词的中文词源(英文词源真是心情好才会去碰)。 结果就有了下面这样

单词.png

关于系统词典的 python 方法,我是在看一个利用系统词典来了实现 Anki 的 python 程序的源码里发现的(好吧,我就是为了找这个才去翻的源码),在这里有教程,真想看一看文件的位置的话,在

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/Headers/DictionaryServices.h

然后用 AppleScript 实现了一个类似艾宾浩斯的循环 第一天提供单词的中英释义和词源,第二天提供单词的中文释义和词源,在之后的复习中,只提供简单的翻译,一页塞给一百多个单词不是问题。

并且每天的任务都会记录在 OmniFocus 中,记第二天晚上为截止日期。

这种方法的方便之处在于只需要找一个txt格式的单词文档就可以了。即使需要每天记忆的东西不是单词,也是可以套用的。例如在百度文库上收了一个托福一百句,说是包含大量难记词,所以也就有了下面的

句子.png

同时,还在 OmniFocus 做了相应的项目,如下

omni.png

对于 Rss 的实现

暂时只用了知乎日报,China Daily,朝日新闻的三个,刚好中英日,也是圆满,限制了获取条目的数量,一天六个,多了便没时间去看了,用python的feedparser包得到链接,用BeautifulSoup 中的相应的选择器来得到真正的文章内容,然后将得到的 HTML 字符串传递给 AppleScript 就好。利用 CSS 的 `display:none`,便可以让文章内容里还掺杂的多余的东西消失,让我这个强迫症甚感愉快。

 也想着要怎么提高逼格,于是就用 one 一个的每日一句来做 html 的开头,每天一首诗之类的还是多余了,一句话便够了。

效果也是如下

one.png

对于阅读文档的实现

总有些杂七杂八的东西要传到 DPT-S1 上,比如苹果开发者文档之类的,像 AppleScript 还是官网上的教程最吼了,于是,command + p 打印,心情好改个名字,加一个 Tomerge 的 tag。 晚上,用 brew 里的tag工具来得到 Finder 里的标签文件,用系统 Automater 里的包里面的 python 文件来实现 pdf 的合并(系统自带就是吼) ,万能的 do shell script 大法将这一切放在 AppleScript 里运行 看一下写的方法就可以发现python文件的位置了 所谓的 python 文件在/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py

这个可能使用的人会比较多,实现的方法在下面,to_merge_file 是 POSIX 类型的路径,而刚好tag返回的就是这个类型的路径

on merge_pdf(to_merge_files)
   set to_merge to ""
 repeat with to_merge_file in to_merge_files
        set finder_file to alias (POSIX file to_merge_file)
        tell application "Finder"
          
           if name extension of finder_file is "pdf" or "PDF" then
                set to_merge to to_merge & " " & quoted form of (POSIX path of (to_merge_file as string))
          end if
     end tell
   end repeat
 set merged_pdf to (alias "Macintosh HD:Users:hei_threebody:Desktop:未命名文件夹:" as string) & short date string of (current date) & ".pdf"
  do shell script "/System/Library/Automator/Combine\\ PDF\\ Pages.action/Contents/Resources/join.py " & "-o " & quoted form of POSIX path of merged_pdf & to_merge
end merge_pdf

关于听歌

之所以想弃了iTunes,网易云,QQ三个平台,并不是因为什么收费制度。我喜欢支持 iTunes 的 lyrics 的桌面歌词,但是一方面歌词少,另一方面,iTunes 也没有网易那么大的曲库和讨人喜欢的评论和私人FM,网易云确实是喜欢,不然也不会坚持听了九千多首歌了,但是非常不喜欢网易的歌词,一方面显示效果单一,我要色彩,我要色彩,我要色彩,另一方面,不能在其他应用全屏显示也是最大的鸡肋了。而QQ的歌词讨喜啊,彩色的,彩色的,可是也不能在其他应用全屏时显示。 

现在,我所能得到的解决办法就是使用网页端的网易云音乐,然后利用 AppleScript 在 Safari 或 Chrome 上运行 JavaScript 脚本,得到当前的歌词等信息,然后利用 Übersicht 在桌面上显示,实在是没有找到可以在全屏模式下显示脚本运行结果的应用了。同时利用 Keyboard Maestro,设置特定快捷键下用 AppleScript 让 Safari 运行 JavaScript 模仿鼠标点击,实现暂停,下一曲等,已是宛如一个完整的播放器了。

虽然最后的结果还是情况没有任何的改善,但是好歹我是保住了私人FM(这也是为什么不为 DynamicLyric 写搜索网易云音乐歌词的理由),同时又拿到了实时的歌词,等学了 Swfit,仿着DynamicLyric 的源码,写人生的第一个 Mac 程序,就可以在全屏时显示歌词了(想想便是十分激动)。 

目前显示的效果如下,

歌词.png

没事干时换个颜色,加个效果,换个布局,也是练习 CSS 的好地方。

关于Übersicht

Übersicht 的潜力是无限的,因为菜单栏太小,通知中心又不好用。OmniFocus 固然有通知中心支持,但是我是一星期才摸一下通知中心的人,所以用 OmniFocus 的 AppleScript 把任务以 JSON 的形式传递给 Übersicht,再在桌面上显示,便是非常的好了。

同样,那些加了 Tag 的文件,也是用 brew 的 tag 工具来获取文件地址,传递给 Übersicht,分 tag 在桌面上显示,又加上 Übersicht 有运行终端命令的支持,只要加上一个点击触发动作 open + 文件地址即可。

(虽然我自己并没有那么做)

关于印象笔记

对于我来说是甩不掉的东西了,5个g的笔记,我自己都不知道是怎么整理的了,我只知道,如果若是真的把里面的东西全背了,我的英语和日语就不用愁了。但是,在 Mac 上的阅读体验可怜,又没有 iPad。所以我将其弃了有半年之久了。 年末学习 AppleScript 的时候,发现 Evernote 提供了一个 Command,便是让我可以将那些尘封的记忆材料,以艾宾浩斯的记忆曲线每天拿出来看一下了,用的是简单英语,应该不用解释。

tell application "Evernote"
  set note_name to "N1漢字の音読ーlist " & repeat_days
 set Note_html to HTML content of item 1 of (get find notes note_name)
end tell

所以无论大象做的怎样,单是对 AppleScript 支持极好这一点,便是让我弃不得了。

在我的脚本的最后再加几行

tell application "Evernote"
	set note_name to short date string of ((current date) + 1 * days) & ":おれのにちじょう"
	create note title note_name with html maked_html
end

便可以做好每日的备份了。

最后的反思

2017,AppleScript 支持程度将是我对应用选择的最优先考虑(所以我 2016 弃了 2do)

我承认自己骨子里还是一个很被动的人,若是让自己去刷阅读,随意背单词之类的竟然不感觉自由,而是很有胁迫感,反而每天拿起 DPT-S1 看电脑为自己准备好的有限的信息会觉得十分的舒服。 

我不清楚是否需要去详细的介绍自己用 AppleScript 写的脚本,若是介绍,就实在是太多了,毕竟功能比较杂,而且也是简单的东西。如果实在是懒得写了,我就共享在评论区吧。 最后秉承着图片不能太少的理念,送上一张在索法上的阅读效果图(每日单词和句子的数目出于调试的需求,只设置了两个,不用纠结颜色,反正到墨水屏上颜色都是虚话,本来想送两张的,可是第二张死活上传不上去)。

 

IMG_2110.jpg

其中日语单词的部分便是来自 Evernote 了