读书人

制作属于你自己的Mac 机器人助手

发布时间: 2013-10-08 17:12:09 作者: rapoo

打造属于你自己的Mac 机器人助手

自从看了钢铁侠系列之后,就对各种自动化、监控、预警的想法乐此不疲。如果你使用iPhone那么你手机上有Siri,可以执行一些你想让它执行的操作(比如呼叫某个联系人等等)。但我一直都是对着电脑的时间比对着手机更长,所以总喜欢电脑也可以更智能一点。其实我这里所期待的"智能",指的是一种“伪自动化”,它大体包含了两个特征:自动处理+及时提醒。

Mac OS X源于开源操作系统:Darwin,(它是Unix-like操作系统)。由于天生的hack文化,使得mac os x的可编程性非常好,很多对于系统的监控、操作都对外开放了shell 命令。这让我的想法并非遥不可及!

这几天没事的时候,写了一系列的automatic-services开源在了github上(service还不够多,也没有完全构建好)。目前已经构建完成或正在构建的列表如下:

制作属于你自己的Mac 机器人助手

可以编写的服务还有很多,比如你可以参照那份人体的作息时间表。让机器人自动提醒你,当前时段建议你做些什么。

目前,这些服务已经在我的mbp上运行良好(其中大部分都是开机自启动的deamon 程序)。


实现
分析

首先,我们来分析一下,都有哪些可能的服务。其实服务以其生命周期来划分,可以简单得分为:即时运行的简短服务(如报时);在系统开机状态下,常驻系统的deamon服务(内存、CPU、电池电量监控/报警灯)。

服务的大部分模式都是基于经典的"请求/应答"模式,此处也不例外。因为这里没有牵扯到mac os x系统编程,所以无法享有系统级别的一些好处(比如信号机制、系统事件等),这样也让你去实现一套自定义的协议变得困难(因为你必不可少需要利用消息机制、事件机制)。而去写一个while true done;是非常不靠谱的,特别是以deamon在后台运行(这大大占用CPU,造成CPU不停空转),CPU的温度直线飙升。

基于以上的原因,最后还是选择了已有的标准协议(http)及其服务处理程序。从构建http server的简易性角度考虑,node.js无疑是最好的选择,并且它的特性也非常适合这样的需求(单线程、基于事件)。所以最终选择采用node.js在本机运行一个http server来当做服务的容器。


如何启动服务

因为这些服务都宿主于本机启动的http server内部,要启动它只能从本地向其发出请求。比如你想打开goAgent,这时大家可能首先会想到的是打开浏览器,然后输入:



apple script

一个只适用于mac 操作系统的脚本语言,上图右框


Automator的工具

上图左框,里面可以将各种重复的流程化的操作串联起来,让系统来充当“机器人”去为你执行那些无聊而重复的事情(比如重命名一个文件夹里所有的文件名称,去一个网站上按一些规则抓取特定的图片...)。

制作属于你自己的Mac 机器人助手


mac 提供的语音听写

我尝试过,但识别率不是非常理想,除非你英语非常标准。

制作属于你自己的Mac 机器人助手


关于vino

vino是科比布莱恩特的新昵称,寓意是陈年美酒,愈久弥香!

Enjoy & Have fun!

读书人网 >编程

热点推荐