Sikuli带来的意义与无限的潜力

Sikuli带来的意义与无限的潜力

转自“wcf的博客”:http://blog.163.com/wcf0002@126/blog/static/326051332010791050595/

这礼拜真是我人生中最疯狂的一天了..。

自从Sikuli发表后,我本来还打算一封封回覆所有的问题,后来发现排山倒海而来的邮件和留言速度远大过我能阅读和回覆的量。前几天我优先把Sikuli比较大的bug和一些平台问题修掉,昨天释出了0.9.7让各平台都提升到同样的版本(只剩Linux还是没有抓图的快捷键了),整体运行的速度也提昇了不少,并且新增了一个.skl格式让人能透过command line或double-click直接执行script。如果之前下载过旧版的朋友强烈建议升级到0.9.7。

修完紧急的bug后,我们会再陆续补上一些文件和教学,说明一些常见的问题要怎么解决。例如说,画面上、如果按特殊键或是在不同的键盘排列上使用(用dvorak的人还真不少,一堆人跟我说type()在dvorak上会有问题)..。

但这篇文章中我想谈的不是被上万人盯着的压力,而是关于Sikuli能带来的改变,以及未来的潜力。

有些人说Sikuli看起来只是另一个按键精灵或是AutoHotkey,但其实Sikuli还有许多在这个直观意义之上的潜力我们没直接说出来。

第一,Sikuli最重要的革命是程式码的可读性(readability)和易用性(usability)。把萤幕截图直接放在程式码里面,让人能直接「看到」他想控制的东西,这是从来没人想过的事情。以往的方法,不管是透过应用程式自己的程式介面(API)或是透过XPath拿到网页里的某个元件,都是只有程式设计师才能写、才能读懂的神秘外星语言。机器喜欢精确的语言,人类花越多力气把事情描述的越清楚,机器就越容易读懂。

可是,有没有人想过,人类发明这么多程式语言来操控电脑,究竟是便利了人类还是便利了电脑?现在我们每天用的程式语言,不管是C++、Java、C#、Python、Javascript..都是只有程式设计师才能写才能读的语言。更讽刺的是,这些「现代」语言跟五十年前就有的LISP、Fortran本质上并没有什么不同,一样都是纯文字,一样要求精确严谨的语法,一样是架在百层高塔的系统架构上。即使是训练有素的程式设计师,要写程式做些有用的事情也都得先翻翻充满黑话的说明文件,看看需要的功能对应到什么函式,运气不好可能还得学个COM+之类的鬼东西才能使用。

如同我在中提过的一样,即使同为程式设计师,运用电脑的效率依然会有数十倍甚至百倍的差距。如果每天都要按一百个按钮,程式设计师可以找到适合的命令列工具使用,或是自己写程式唿叫应用程式提供的函式,就可以用一个按键取代这一百个按钮。那完全不懂程式的一般使用者呢?恐怕只能两手一摊任由别人写好的软体摆佈。也就是说,即使一个人掌控了键盘和滑鼠,但实际上却是被别人的软体限制住,如此使用电脑其实完全没有自由可言。

Sikuli的革命把写程式的门槛降低了,人们和系统或应用程式沟通不再需要读用黑话写的文件,也不用搞懂底层的架构是怎么做的,只要把平常使用键盘滑鼠的方式,再加上想控制目标的萤幕截图,就可以轻易写成能自动执行的程式。

Sikuli带来的意义与无限的潜力 - Edward - wcf的博客

除了好写外,任何人看程式和图都能很容易读懂程式到底做了什么事,于是Sikuli很自然就能成为一种写教学文件的最佳媒介。以往的教学文件常常step by step列出使用者要做的事,加上使用者应该要看到的画面,很巧的是这两者Sikuli script都有。但比传统的文字描述更好的是,只要把Sikuli的指令混用在文件中,或是透过简单的对应把文字描述转成script,这样一份文件不只人能看懂,连电脑都能执行这些步骤并且一步步告诉你要按的按钮在哪里。

第二,除了直观上的GUI自动化外,其实Sikuli更重要的意义是提供了一种把使用者操作UI的互动过程记录下来的新方法。以程式设计师的黑话来说,这可以说是GUI操作过程的serialization,如果用一般人的方法说,这就是把人机互动过程「数位化」的一种方法。

电脑发展的过程中,一条必经之路就是把人类周遭的一切资讯全部数位化。一旦资讯被数位化,就可以轻易储存在电脑里,或是透过网路分享给别人,电脑科学家也才能发展更多方法来处理、分析、运用这些资料。在21世纪的今天,人们把声音、影像、文字全都数位化了,所以我们可以轻易的复制、传播、使用这些资讯。但在人们如此依赖电脑的今天,人和电脑的互动过程其实一直没有一个好方法可以记录,所以更别提要复制或是分享这种互动过程。

而Sikuli在这个人机互动领域开了一条全新的道路,这也是为什么Sikuli的论文是出现在「User Interface Software and Technology」的会议上,而不是在讨论程式语言的会议上。

人机互动的过程一旦能被一个标准的方法记录下来,接着就能复制,就能分享,就能让电脑自动执行或是演算这些过程。未来的应用方式有千百种,唯一的限制只是看我们的想像力而已。

第三,Sikuli把电脑视觉的研究领域,从真实世界延伸到电脑的桌面上。这点说起来真是很有趣,电脑视觉的研究人员数十年来尝试想让电脑能像人一样「看」这个「真实世界」,可以像人一样认得别人的脸,或是认得马路长什么样才能让电脑自动开车,但却没什么人想到让电脑「看」电脑自己输出的画面。在技术上来说,电脑萤幕上的资讯全都是电脑自己产生出来的,没有光影问题,没有角度问题,辨识上的难度远低于真实世界所需的难度。以现在的电脑视觉技术来说,辨识萤幕上的东西简直可以说是杀鸡用牛刀。

Sikuli把电脑视觉和人机介面两个研究领域打通了,有很多古老的问题(例如OCR,文字辨识)在真实世界很难解决,但在电脑桌面上却可能可以发展出又快又准确的方法。Sikuli也可能激发更多人把电脑视觉应用到软体介面上的创意,让使用者介面不只是简单使用,也能让每个人能真正随心所欲的操控电脑。

第四,建立在Java平台上并且open source的Sikuli,很有潜力能让每个人都能打造给自己的专属程式。

Sikuli不只是提供了一堆自动按滑鼠和按键的指令集而已,每一个Sikuli script都是一个和Python语法相容的程式。这意味着你可以使用任何的Python语法,不管是迴圈、if、定义function、或是定义class,每一个Sikuli script都是一个真正的Python程式(严格来说,应该是Jython,但这中间的差别并不太重要)。除此之外,Sikuli核心是跑在Java平台上,所以可以轻易的使用任何Java的函式库。例如说,你可以用swing建立一个新的视窗包含了两个按钮,按下第一个就用Sikuli执行每天上班前的例行工作,而按下第二个纽则执行下班前的例行工作。会写程式的人可以轻易混用Sikuli和现有的函式库,把Sikuli当成和系统或其他应用程式沟通的媒介,并在上层建立自己的新介面。也就是说,这就是桌面环境的mashup,可能的应用是无限大。

虽然不懂程式设计的人,难以撰写复杂的GUI程式或是资料处理。但Sikuli结合了现有的平台并且open source,这样的好处是会有来自世界各地有闲有能力的人帮忙让Sikuli变得更简单更好用,并结合其他的程式语言或是函式库让写程式的整体门槛大大降低。

虽说Sikuli现在还不是那么完美,但我相信open source会加快Sikuli的发展,让更多有兴趣的人进来帮忙。很多技术上的问题其实都好解决,例如有人问到是不是桌面换个skin后script就废了,或是能不能在背景执行script。这些问题其实都有好几种可能的答案可以解决,只是有没有必要现在就做而已。技术问题向来都不是能阻挡我的绊脚石,真正困难的只有突破自身创意和想像力的界线而已。

每个人使用电脑的方法都不同,软体公司设计的软体也只能按照大部分使用者的需求和习惯所设计。但不论有多少功能,总是不可能涵盖到每个人的大大小小需求。让每个人都能写程式(不论他们是不是知道他们正在写程式)是我一心嚮往的目标之一,或者说是我希望每个人都能100%按照自己的意愿花最少力气完成最多工作。但在今天的电脑环境上,不会写程式就有太多事都无法做到,即使会写程式的人,也不见得愿意花那么多力气去研究让自己未来更省力的方法。

这个问题的癥结不在于使用的人太懒惰或是不够聪明,而是电脑太难用。一个人得经歷几年的训练才能熟悉这种用程式「掌控」电脑的感觉,实在太不合理。或许没有人想研究让写程式变得更简单是因为怕丢了自己的饭碗,但我偏偏就觉得每个人应该要有聪明使用自己工具的自由,而不是反过来被工具限制了自己。所以,我希望Sikuli能让更多人把使用电脑的自由抢回自己手中,而不是被软体工程师们掐住脖子动弹不得。

写到最后,能参与Sikuli这个project其实最需要感谢的人是和我合作的Tom Yeh,在我进MIT前他就在跟我老闆Rob Miller讨论用萤幕截图来搜寻文件的可能性,所以其实在我还在当兵时我们就已经搭上线开始合作了。后来我到了MIT后,一连串的讨论就激发出许许多多混合萤幕截图和电脑视觉所产生的点子,其中第一个成果就是现在的Sikuli。

Sikuli Script只是这一串研究的开端和基石,在这之上其实我们还做了很多东西。例如说我们已经有一个能录制萤幕和使用者动作的程式,可以把使用者的动作自动转换成Sikuli Script,也就是说使用者一行程式都不用写,只要把想做的步骤做一次,程式码和萤幕截图就会自动产生出来让你修改或直接使用。用这个录制程式,我们可以轻易的在现有的GUI系统上观看全系统的操作歷史,甚至是自动redo某一部分操作。有这些系统做基础,我们能做的事情实在太多了,我只怕自己时间和能力有限,没办法把所有的点子都做出来。所以,这也是我们把Sikuli公开的目的,希望开放这块宝石后,能有更多人发挥想像力发明出更有趣更有用的东西来,并彻底打破现今使用电脑的方法,一起来改变世界吧!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值