存档

‘技术’ 分类的存档

说说一个新的老概念coroutine

2008年8月18日 4 条评论

因为最近的工作当中频繁地用到了异步的IO编程模型,对于异步模型的难于维护性深感切肤之痛。工作之余便在考虑有没有什么方法可以使这种模型变得更加的易读易写和易维护,有一个想法很自然的产生了,就是用我们熟悉的流程化的方法来做写处理流程,然后在一些IO触发点上异步化,也就是触发一个异步IO请求,将当前的执行状态换出,换入另一个执行状态,直到IO请求结束,该执行状态被再次换入,则继续执行。

后来去搜索相关的问题,发现其实这个是一个很老的想法了。在计算机科学当中,这个术语叫做Coroutine,最早提出是在1969年,而在早期的高级语言lisp和schema当中就有实现。如果把Coroutine和函数进行比较的话,函数只有一个入口点,而Coroutine可以有多个入口点。当Coroutine被第一次调用到的时候,它将从起始处开始执行,一旦遇到具有yield语义的语句的时候,就是返回给另外一个Coroutine或者调用者,而在接下来被调用的时候,就从yield语句下面的一条语句继续执行直到遇到新的yield语句或者Coroutine的结束。

如果了解Python,其实Python当中的Generator就是一种Coroutine。比如

def xrange(start, end):
    val = start;
    while ( val < start ):
       yield val
       val += 1

除了Python,Stackless-Python和.NET也有相应的实现,而C/C++虽然有一些实现,但是通用性都不太好,因为实现难度相对比较大,毕竟Coroutine完全颠覆了C/C++基于stack的函数调用模型。

下面大体上看一下Coroutine的几个C实现,下次再写。

标签: ,

HONDA的机器人ASIMO

2008年7月30日 4 条评论

今天偶尔在电视上看到的,HONDA(本田)的工程师带着他们的类人形机器人ASIMO到四川灾区给孩子们表演。电视上只有很短的一些片断,但是仍然展示了ASIMO的一些很强大的特性,比如奔跑。

随即Google了一下这款机器人的资料,发现这个机器人还真是不简单:
根据wikipedia上面的介绍,这款机器人高130公分,重54公斤,Airborne time(这是什么,反应时间?)0.03秒,具有34个自由度(可以理解成34个关节么……)。可以识别移动的物体、姿势、手势、环境、10张运动中的人脸、以及不同的声音。

几段Youtube上面的视频:
CES 2007上面的demo
http://www.youtube.com/watch?v=cfaAiujrX_Y

 

以及在HONDA实验室里面的demo:
http://www.youtube.com/watch?v=Q3C5sc8b3xM

 

相当的强大。

这款机器人不仅具有类人的外观、自主行走、上楼梯的能力,而且可以以时速6公里奔跑,以时速5公里转弯。从demo里面看,还可以感受到人对其手臂的作用力而跟人一起转弯。不仅如此,看demo上面推一个推车的部分,启动时多加的一点力道,以及转弯时两只手不同的力道都相当的好。

另外就是精度。看机器人体操表演的一段,明显能够看出其手臂在快速的运动之后仍然可以快速的停在正确的位置上。这个看起来很cool,而且我相信也是有相当难度的。

看它推推车的那一段,真想弄个回来帮我去超市买东西……

不过据说,制造一个需要106,710,325日元,折合人民币6829460.8元。

HONDA的网站上面还有更多的视频。

最后用HONDA的ASIMO墙纸上面的一句话来描述:The power of Dreams。翻译过来就是:梦想的力量。

标签: , ,

最近看到的两个东西

2008年7月13日 1 条评论

福珑盒子2F(使用龙芯2F处理器)出货,去年开始预定的时候登记了一下,于是上个星期龙梦公司的人问我现在要不要确认预定。我是很想搞一个过来玩玩的,但是,买回来还不见得有空折腾,而且暂时龙梦盒子断货,暂时就放一放了。

另一个话题是有人折腾出来的Android在Nokia N810上面的成功安装,只是Nokia N810也有些小贵。

所以……

就是这样。

标签: ,

也来说说校内开发的卖身许可

2008年7月8日 没有评论

毕竟校内不是Facebook,在学来Facebook开发API之形的时候,却没有沿用平台的核心部件之一:开发许可。

为什么一个平台的开发许可如此重要呢?因为开发许可是平台供应者和开发者之间的法律协议。一个设计良好的协议可以让以这个平台为核心的众多应用形成一个良性的、相互促进的庞大的社区甚至是产业。典型的例子就是Mozilla Firefox以及围绕着Mozilla通用许可证形成的庞大的Mozilla社区,包括数以万计的插件程序、扩展、皮肤等等。还有GNU通用许可,以及围绕在GNU Linux周围的庞大的GNU社区。

所有的这些成功的许可都有一个共同特点:在保留部分权利的同时,不剥夺作者本身对于该作品的知识产权和他人利用该作品赚钱的权利。Mozilla就不用说了,它既不要求插件开源,也要求插件必须把知识产权让渡给Mozilla,你爱怎么搞怎么搞。严格如GPL者,虽然不允许通过封闭源代码赚钱,但是并没有剥夺他人出售GPL软件的权利,更没有限制使用GPL软件提供服务赚钱,而且GPL唯一保留的权利便是作者的知识产权。正因为有利可图,资本才会聚集过来,你自己才能变成一个平台。

但是在校内的开发许可当中,有下面的一些规定:

2.4
如因其提供给校内网的开发作品存在权利瑕疵或侵犯了第三方的合法权益(包括但不限于专利权、商标权、著作权及著作权邻接权、肖像权、隐私权、名誉权等)而
导致校内网或与校内网合作的其他单位面临任何索赔、诉讼;或者使校内网或者与校内网合作的其他单位因此遭受任何名誉、声誉或者财产上的损失,开发者将积极
地采取一切可能采取的措施,以保证校内网及与校内网合作的其他单位免受上述索赔、诉讼的影响。同时开发者对校内网及与校内网合作的其他单位因此遭受的直接
或间接经济损失负有全部的赔偿责任;

六、插件应用程序的权利归属


1.
开发者在活动校内网插件应用程序开发许可证、且将其开发的作品提供给校内网,即视为其已经将基于作品的全部权利,包括但不限于所有权及知识产权永久性、不可撤销的、独家让渡给校内网。

2.
经开发者创作完成并提交给校内网的应用程序,校内网在全世界范围内享有免费的、永久性的、不可撤销的权利和许可,以使用、复制、出版、发行、以原有或其他
形式进行改编、转载、翻译、传播、表演和展示此等内容(整体或部分)。同时开发者承诺,不就上述作品以及上述作品的改编作品对任何第三方进行任何形式的许
可或授权使用。
3. 经开发者创作而产生的文本、图片、图形、音频和/
或视频等资料的所有权及知识产权归属于校内网,未经校内网同意,开发者保证不以任何形式直接或间接发布、播放、出于播放或发布目的而改编或再发行,或者用于其他任何商业目的。同时保证不许可任何第三方从事上述行为。

[….]

八、免责声明


1、校内网有权在提前通知或不通知的情况下以任何理由随时修改、限制、暂停或停止全部或部分开发者服务,而且对于任何此类修改、限制、暂停或停止行为,校内网对开发者或任何第三方不负任何责任。

简单的说:做插件的开发者,你不拥有对于该插件的知识产权,你的知识产权已经让渡给了校内;但是,出了问题你要负责,需要赔偿你也要负责。

这样只会吓走开发者,平台不是这么做的。

但是反过来说,校内有做成平台的打算么?恐怕没有。Facebook做API目的很大程度上是为了把自己平台化,让更多的网站可以通过自己的用户基础来推广,然后大家一起赚钱,寻求的是一种Win-Win的可能性。校内则走了几乎完全相反的一条路,看起来校内想要通过这种方式来弥补自己创新匮乏的问题,但是方式错了——想要世界上的聪明人为你服务,你必须给他们点什么,而不是从他们那里抢过来。

标签: , ,

校内API

2008年7月7日 1 条评论

校内秉承着它一贯的风格,紧随老大哥Facebook的脚步,今天也公布了其API:
http://app.xiaonei.com/developers/home.do

简单看了一下,果然是一贯的校内风格:基本上完全是Facebook API的翻版。
当前的版本当中,还没有Facebook的FQL(Facebook Query Language)和FBJS(Facebook Javascript),但是已经有了REST-like API和FBML(Facebook Markup Language)的翻版XNML(Xiaonei Markup Language)。

尽管是新公开,但是据朋友那里得来的资料,两个礼拜前就已经对一些合作伙伴公开了,所以虽然官方的API发布定在明天,今天已经有了很多的应用在上面了。大多数应用都仍然以将人们联系在一起为目的,还有一些小游戏的排行榜等等,还有就是为自己的网站做推广的stub page。

总之还不错。

标签: ,

Finally it got compiled

2008年4月19日 1 条评论

I mean OpenInkpot.

It cost 5 nights and 7 GB of disk to compile, OMG.

— Update @ 2008-4-19 —
I found I compiled the x86 version, not the ARM version…
Try again, but VM disk is full now…

Herb Sutter Gave up Live Space due to Comment Spams

2008年4月7日 1 条评论

http://herbsutter.spaces.live.com/Blog/cns!2D4327CC297151BB!917.entry

Herb Sutter, the C++ guru, finally left Live Space due to the comment spam out of control.

I like Live Spaces, and I really
hate moving a blog, but unfortunately the comment spam is out of
control and I just can’t keep up with the tools available to manage it
here — other than accepting a blog with no comments at all, which I’m
unwilling to do. Your comments are too valuable to give up.

I have researched on the blog comment spams for a long time, since my blog was spammed at the first time (in Chinese). Also I created a semi-automatic solution (in Chinese) to delete the spams. I believe not only me is suffering the blog comment spams, so I was thinking to make the solution totally automatic, and create a tool to clean blog comment spams for us spammer haters.

However, even I created the tool, that does not means our bloggers should take the responsibility to do anti-spam tasks. Anti-spam is the business of the service provider. Live Space SHOULD improve its comment system, or it will become Live Spam and more and more people will leave.

今天看到的两个安全相关的话题

2008年3月6日 没有评论

Google Android SDK发现安全漏洞


Core Security said Android SDK m3-rc37a and earlier are vulnerable to
several bugs in components that process GIF, PNG and BMP images, and
Android SDK m5-rc14 is vulnerable to a security bug in the component
that process BMP images.


CAPTCHA is dead, long live CAPTCHA

Hotmail, Yahoo, 和GMail的CAPTCHA近期相继被破掉,虽然它们看起来是那么坚不可摧:
Google:

Yahoo:

Hotmail:

— ftofficer的一点看法 —
正如文章中所提到的那样,CAPTCHA对于专业的spam发送者已经越来越没有防御力,它的作用可能在不久的将来就将退化为仅仅为了防script kids了。对于专业的spam发送者来说,技术手段是无法防住他们的,尤其在中国这种低人力成本的环境下,真的雇佣人来读CAPTCHA并且解读,都并非一件不可能的事情。
— /看法完 —

标签: , ,

还记得Blog Comment Spam么?

2008年2月24日 没有评论

今天发现了akismet这个网站。

通过REST架构提供API,允许blog软件验证每个Comment是不是spam,然后决定是否将其发布到blog上面。WordPress已经实现了对应插件。

We can’t stand spam.

Who can? You have better things to do with your life than deal with
the underbelly of the internet. Automattic Kismet (Akismet for short)
is a collaborative effort to make comment and trackback spam a
non-issue and restore innocence to blogging, so you never have to worry about spam again.

Akismet is free for personal use.

In the spirit of helping the blogosphere as much as possible, we’ve
decided to make Akismet free for as many people as possible. We have free API keys available for your personal blog.

标签: ,

搞定了Spam Comments的自动探测和删除

2008年1月25日 4 条评论

最近工作比较忙,所以只能下了班搞搞这个东西。今天终于搞定了,然后看着数十个Spam Comment瞬间搞定还是很有成就感的。

这个问题的关键在两个问题上:第一,如何得到一个Spam Comment的列表;第二,如何删除它们。

先考虑第二个问题。其实不管Space的代码多复杂,最后对Blog的操作还是要经过HTTP传输的。截获HTTP传输数据的方案有很多,我用的是TamperData这个Firefox扩展。简单的找两个Comments删除一下,发现对应的HTTP请求是这样的:

POST http://ftofficer.spaces.live.com/parts/blog/script/BlogService.fpp?cnmn=Microsoft.Spaces.Web.Parts.BlogPart.FireAnt.BlogService.delete_items&ptid=0&a=&au=undefined HTTP/1.1
Host: ftofficer.spaces.live.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-cn,zh;q=0.7,en-us;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: UTF-8,*
Connection: close
Content-Type: application/x-www-form-urlencoded
X-FPP-Command: 0
sc: [...]
Referer: [...]
Content-Length: 117
Cookie: [....]
Pragma: no-cache
Cache-Control: no-cache

cn=Microsoft.Spaces.Web.Parts.BlogPart.FireAnt.BlogService&mn=delete_items&d=[{1,%22cns!423B72634E2F6B7E!611%22}]&v2

其中最重要的东西就是红色标记的部分,前面Cookie是作为你已经登录到Live Space的证据;后面的一串字符串就是要删除的Comment的ID。所以我们需要的工作就是获取到这个ID,然后使用HTTP重放就可以了。最后我直接偷懒用了NetCat,写了一个Request的模板,用Perl替换一下其中的ID,用NC连上Live Space然后重放就是了。方法就是这样,如果要做成软件可能还比较麻烦一点,看看有空再搞,最近实在太忙。

然后回到第一个问题,我们需要获取到所有的Spam Comments的列表,这个问题不可避免的就要把Space爬一遍,枚举当中所有的Comments的内容,并一一判断。如果符合某种条件,就将其ID记录下来。不过要从头分析Space的页面结构并且枚举出ID和内容也是个很好大的工程,不如找找有没有现成的方案。经过一番Google,找到了Live Space Mover这个项目。这个项目当中包括了枚举Live Space当中所有的Comments的功能,功能不错。但是不足的是只能获取到的是Comments的内容,发送者这些信息,不包括对我来说最重要的ID,不过这不是什么大问题,Python的脚本在哪里放着,代码改改就行了。这段代码改过之后,花10分钟把Blog爬了一遍,成功生成列表,然后拿perl解析一下,调用一下nc,搞定。

方案是有了,有空整理一下,做一个点点鼠标就能搞定的东西,或者一个命令行搞定的东西。

再说再说,忙得很。有没有人自愿报名实践一下的?

标签: ,