Sikuli(在墨西哥维乔印第安人的语言里是”上帝之眼”的意思)是由美国麻省理工学院开发的一种最新编程技术,使得编程人员可以使用截图替代代码,从而简化代码的编写流程。从它研究方向上看,是一种编程技术,但是该技术还可以用于进行大规模的程序测试,脚本程序编写使用的是python语言。
上面是对Sikuli一种比较官方的介绍,上周末我下载下来玩儿了一下,直接上图应该可以说明Sikuli有什么功能。(图中是我写的一个Sikuli程序,可以在我的网站里找到搜索框,输入Sikuli,然后点击搜索按钮)

相关网址:
它能干什么实际工作啊?我也说不清。也许可以做下面几个事情吧:
Related posts
中午和三火兄饭后百步走的时候聊到Python和Ruby,发现Python的作者是荷兰的,Ruby的作者是日本的。联想起前些日子南非世界杯上日本和荷兰比赛时候的段子:
一个嫖娼业最发达的国家战胜了一个AV业最发达的国家,这个故事告诉我们,实践是检验真理的唯一标准。
Related posts
之所以整理这个表格,是因为各家号称支持OpenID的站点常有这样那样的问题,不是一句两句的事情。这不是一个完整表格,只是我感兴趣的和调研了的的一些。可以看到国内对OpenID支持的很不怎么样,如果QQ开发QQ号作为OpenID就好了。
体验了这些站点后一个基本结论是:It works! 但用户体验真是sucks! 无法投入商业使用。但OpenID的一些竞争者可以商业使用。(这个话题找机会详细开一篇文章说。坑填上了,见:OpenID的用户体验)
Related posts
听闻OpenID好久了,但一直没具体看过它的原理,最近在准备一个互联网产品,周末想起来好好看看OpenID是否可以用。现将学习所得记录一下。
OpenID体系中的参与者和角色,OpenID登录过程中有三种角色:
- User:网站访问者操作的浏览器
- RP:Relying Party,用户要登录的网站
- OP:OpenID Provider,提供OpenID帐号的网站,验证用户名密码的一方。
- 举例:苍井空使用自己的Google帐号登录lixinyang.com。User是苍井空,RP是lixinyang.com,OP是Google.com
OpenID的登录过程,我不细讲了,下面三个图都是来说明的,直接上图。需要说明的是这个登录过程导致的几个问题:
- User/RP/OP三者间网络两两都需要联通,所以它们一定要在“墙”的同侧。中国特色的问题,谁让别人用的是internet,我们用的是chinternet。
- 用户登录过程中会看到OP的页面,总的来讲这导致用户很不习惯。也有些许好处 — 通过傍一个NB的大款来增加自己的可信性。(用户在登录lixinyang.com的过程中看到了Google登陆页)
- 一个登陆过程中User/RP/OP之间有七八次交互,而且经常横跨大洲,所以过程经常很慢。
- User似乎一定要是浏览器,而不能是自有客户端。(这条需要进一步调研)



Related posts
今天查看google统计发现,这篇“告诉你User-Agent的含义 是什么”的博文访问量还是很高的,大家都是搜“user- agent是什么 ”来到这个页面的。
既然大家这么关心user-agent,那我顺别推荐一下最近公司应用的开源机型库 — Wurfl。作为一个机型数据库,wurfl最大的优点是数据全。提供的API也还算清晰方便,Java/PHP API都有,数据结构简单、清晰。各位想写机型库代码的朋友,建议还是以它为基础来做吧,省不少力气。感谢吴晓华的推荐。
BTW:今天Google CEO施密特说“手机已经成为计算技术最热门的领域,最聪明的开发人员在编写应用程序时首先考虑的手机平台,其次才是Windows、Mac 等桌面操作系统”。
Related posts
今天看到Apache发布了Tomcat 7.0,心中竟有一丝唏嘘 — 原来赖以谋生、每日厮混的Tomcat现在自己竟然如此不在意了,beta都发布了才想着去看它的新特性。摘录几个Tomcat 7.0的新特性吧:
- Servlet 3.0:有不少新的有趣的东西,比如我比较感兴趣的:异步处理、Servlet可动态部署、内建文件上传支持。还有我不太感兴趣的:注释替代配置、插件体系。详见这里。
- JSP 2.2、EL 2.2
- 增加了web application内存泄露的检测和防护。
详见:tomcat 7.0 change log
Related posts
http://jnb.ociweb.com/jnb/jnbJun2009.html
写的非常不错的文章,对体系结构、运行时、性能测试、应用场景都有介绍,而且比较客观。而且其中明确回答了几个问题,例如:
- Thrift客户端运行时候都需要什么,需要C++那堆东西吗?
- Thrift生成的代码帮我们解决了哪些问题?它对我们写Service的服务器端提供了哪些帮助?
- 一个Server可以提供多个Service吗?
- Thrift支持哪些数据传输格式(Protocol)和传输方式(Transport),什么时候该用哪个。
更多内容请阅读这篇文章吧。
Related posts
利用这个周末终于写了个thrift的demo代码:Cache服务器。下面是三部分代码:
thrift文件,Java服务器端和客户端代码,Python客户端代码
比较简单,就不逐行讲解了。但是这个代码想要跑起来显然也不是很容易的,因为需要配置thrift运行时,没有动手操作过的同学一定会遇到问题。下面是thrif idl文件,为了演示所以接口定义的有些重复:
struct CacheEntry{
1: i32 key
2: string value
}
service CacheService {
string get(1: i32 key),
void put(1: i32 key, 2: string value),
CacheEntry getEntry(1: i32 key),
void putEntry(1: CacheEntry entry)
}
BTW:写这个demo的过程中深切感到脚本语言写代码的快速,即使我没看过几眼python,但python demo依然比java写的快。java编译什么的太麻烦。
Related posts
Thrift安装挺麻烦的,但Runtime很容易,防止大家的畏难情绪特别说明一下。
Thrift Java Rumtime: libthrift.jar,slf4j-api-1.6.0.jar,就这么两个jar包。
Thrift Python Runtime,就是/usr/lib/python2.5/site-packages/thrift/目录下一些python lib
这些运行时其实是不需要安装thrift,而只要在THRIFT_DIR/lib/java,THRIFT_DIR/lib/py目录里就可以直接安装相应语言的运行时。
Related posts
本来在自己VPS的Ubuntu上安装好了Thrift,但发现那个VPS内存限制太严,用起来不爽,所以还是在公司服务器上安装Thrift吧。公司的机器都是Redhat,所以边装边记录一下安装过程。安装过程参考文档:
- Thrift依赖的软件:http://wiki.apache.org/thrift/ThriftRequirements
- 官方安装指南:http://wiki.apache.org/thrift/ThriftInstallation
Step1:安装依赖
- autoconf版本低需要升级。./configue –prefix /usr, make, make install经典三步搞定
- libtool版本低需要升级。./configue –prefix /usr, make, make install经典三步搞定
- zlib版本低需要升级。./configue, make, make install经典三步搞定
- 安装boost。./bootstrap.sh, ./bjam, ./bjam install
- 安装ant。
- 安装SLFJ,把它的jar包放在类路径下就好了。thrift java api运行的时候需要。
Step2:下载和编译Thrift
- 下载:wget http://apache.etoak.com/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz
- tar -zxvf thrift-0.2.0-incubating.tar.gz
- cd thrift-0.2.0
- ./bootstrap.sh
- ./configure, make, make install
Step3:生成运行时(Runtime)
- cd ./lib/java
- ant 生成libthrift.jar(thrift的java运行时)
- cd ../python
- python setup.py install(生成python运行时)
- cd ../php
- php的运行时我没有生成,因为它没有提供自动脚本,而需要手动操作。
Related posts