robot

论文已经提交了

理论含量是不少的

老板希望能够加上个video的链接,确保accept系数

我跟老板说花一天时间测试一下

已经搞了三天

发现门还没摸着

不是这个问题就是那个问题

全是底层问题

robot本身的摄像头分辨率低(大概只有几万像素)、延时长,还有radial distortion

所以用logi摄像头

稍微好一点,分辨率640 x 480,延时稍微短一点,radial distortion也不严重

不过又有新的问题:它老是自动调整图象颜色

估计得专门研究一下变化模型,做个补偿才行

另一个更严重的问题是robot走得慢时很难保持直线,因为两个轮子是分别控制的,有可能其中一个遇到的阻力更大一些,搞得停下来的时候老是转一下弯,这样point correspondences就不好找了

还有程序问题

point correspondences的寻找在大部分情况下都一塌糊涂

一个是跟环境有关,地毯的texture太丰富了,哪个点看起来都差不多,估计下次得专门撒些碎纸片。受图像质量影响也很大。今天去电器店,发现摄像机的视频质量真高,N大的屏幕,清晰得一塌糊涂,没有任何的blur,几乎没有延时。不过那样的一个摄像机得花上千美刀吧?而且还得研究directshow看怎么grab frame。

另一个改进的方法是多利用直线。直线作为feature进行匹配应该更robust一些。

其实最实用的方法还是利用颜色,就是可能太简单发不了paper。

不过也许也可以搞得复杂一些。比如引入shape,texture之类的东西。

Advertisements

分类信息

天涯:[互联网]中国分类信息网站排名

天涯:[互联网]58与客齐集:现实主义与理想主义在分类信息中的对碰

国内的创业狂潮似乎永远超乎我的想象,自从互联网在中国落地生根,中国与世界的差距就缩短到一两年,或者更短,至少在互联网行业。复制成功,这是最简单的道理。也确实造就了新浪搜狐百度这样的互联网巨头。不过,问题是我们首先需要知道国外有哪些成功的案例?或者哪些成功的技术?在互联网时代之前,只有那些有机会出国或者海龟才有丰富的信息,而现在,即使生活在农村的人们也能迅速了解一个领域的任何信息。所以,可以预见的,或者也许正在发生着的,将是越来越多的本土创业人士,他们是中国创业准确说创新的主力军。突然感觉到,创业一词似乎已经成了流行词汇。其实中国已经有过一次互联网浪潮。但寒冬也跟着很快临到。而现在似乎又是一次热潮,伴随着硅谷的热潮。下一个寒冬会是什么时候?

跑题了。回头。上面两个链接触动了我。因为roommate在暑假回国前专门请我吃顿饭,问我有没有创业的idea,或者我有没有什么技术。技术我没怎么谈,觉得也不成熟。但如果是idea的话,我的逻辑就是复制成功。典型的,myspace, youtube, craiglist。我极力推荐craiglist。只不过,今天看了这两篇文章,才发现原来国内早就有一批公司复制craiglist了,都是从去年开始的。其实,我也是去年知道craiglist这个网站。而这个网站,红火也才两年。至于myspace, youtube之类,国内的模仿者也早就起步了。所以,现在已经不是海龟的时代。互联网世代,没有国界。

 再说分类信息。毫无疑问,这是个有前途的东西,或者说已经证明成功的东西。其实很早就有黄页的概念,分类更加细致,我还专门抽取过新浪的黄页目录,光互联网公司就有几万条记录。而且,也有地区分类。不过,分类信息网站的出现,仍然掀起一场革命。也许,根本的革命在于用户的参与。黄页的内容都是企业,而且需要付费。而分类信息,则更加个人化(当然,企业也同样参与)。比如租房子找房子,比如招聘找工作,比如二手,甚至也包括征婚征友。这些都是黄页所无法提供的。当然,也有类似51job这样的专业招聘找工作网站,或者也有很多地方性的二手论坛,不过,现在他们都归于分类信息的大旗之下。

是的,一切仍然跟信息有关。

很多的信息是静态的。但我们很多迫切的需求,都是动态的,都是搜索引擎提供不了的。比如找工作,比如找房子。有人要卖,有人要买;有人要招聘,有人要找工作;有人要找男朋友,有人要找女朋友;。。。这些都需要信息的发布与沟通。而这些信息,也都是流动的信息,准确地说是流逝。房子租出去了,就不会再出租。东西卖出去了,就不会再寻找买家。同样,我们不会关心三个月前的出租信息,我们不会关心三个月前的二手信息。嗯,和新闻一样,过期就作废。而需求,永远都很强劲。平台,嗯,我们需要一个信息发布的平台。而且,这个平台需要足够的人气,它就像一个大市场。有足够的买家,也有足够的卖家。集中,再集中。这样每个人的利益都被扩大化。不过,从当前的发展看似乎是山头林立,不像美国的craiglist一家独大。他们有被整合的必要么?我的技术?hoho~。

视频搜索

视频搜索将成互联网下一热点 各企业均趋之若鹜

严格的说youtube并不是一个视频搜索网站,它只是一个视频共享站点,所有的视频都在他们的服务器上,统一的转化成flash格式。youtube以外的视频是无法搜索的。google video也是类似的。而国内的openv则是另外一个模式,更像百度的mp3搜索,服务器本身并不存储视频。视频仍然在内容提供商的网站上。感觉这样似乎更有前途。而国内的视频量肯定比国外的还大,就像百度可以搜索到很多的mp3,但是google无法办到一样。版权的限制使得国外的网站不敢随意的放置mp3,当然也就包括video。google video无法做到youtube那样火爆,版权的忌讳也是关键因素。

其实学术界N年前就开始搞视频搜索了。但都是不实用的一些东西,纯粹为发paper而发paper。上次听Louie说,google那两个家伙的paper开始是被拒的,hoho~。其实即使是后来发表出来的,也都是二三流的会议。但是最终只有他们成功了。搞搜索的人多如牛毛,很多所谓的学术界牛人一年发N篇,还是顶级会议,顶级杂志,但又有什么用呢?最终不过都成了垃圾而已。三年前听百度的一个家伙说他们最担心微软,但三年过去了,百度上市,成就了一坨百万富翁,它的搜索引擎盖过Google和雅虎成为中文市场第一,而MSRA呢?还在宣扬发了多少多少篇paper,hoho~。

static library

终于找到c++里一个合适的重用解决方案

越来越觉得c++弱的一塌糊涂

 Walkthrough: Creating and Using a Static Library

其实很早就知道dll。但是需要多写这样一个关键字:__declspec(dllexport)。很多开源的类库都会将这个关键词define为一个常量。然后在所有的函数或者类前面插入这个常量。当然,插入的这个常量可能还包含它东西。不过,一直觉得这样很恶心。简单的说,就是让代码变得不优美。多了一个没有必要的东西。Java里面就不存在这个东西。写一个类无论是给自己用还是打包成类库给别人用都没有区别。而在c++里,要把一个应用转化成类库DLL,就得加一堆的__declspec(dllexport)。这个代价并不小,而且让源代码变得恶心。

static library就不用这么干。有点儿类似Java里的味道了。真是个好东西。

Louie前两天要求整个更牛逼的gui让他操作。其实也是我自己早就预定的目标。不过实现这个我得重新整理一下代码。源代码差不多有上百个文件了,再往里加东西就要爆炸了。基本策略是用目录进行分割。其实有一小部分已经分割了。不过源代码分割还不够,项目也得分割。Louie其实不仅要GUI,他还要根据配置文件进行批处理的功能。这两个东西肯定得用不同的project。核心是一样的。但是相同的一坨文件两个project都include是件很恶心的事情。我也不愿意搞成DLL,不想在源代码里面到处加那个恶心的关键字。以前的策略是尽量把类的定义写在头文件里,cpp文件干脆为空,嗯,跟Java一样。不过这样会增加编译的时间,也很恶心。今天发现的static library基本上完美的解决了这个问题。嗯,太tm爽了。其实DLL在运行时更有优点。但是我就是不喜欢往源代码里乱加东西。

其实今天也是偶尔通过wxWidgets发现的。这是个跨平台的开源GUI项目,应该很popular,而且很成熟。我并不打算拿它写gui,只是想看看它的组织结构。开源的项目有很多,但是架构优美的很少。http://www.koders.com/可以搜索到很多源代码,但是你不知道哪个项目好哪个项目不好。wxWidgets的源代码就有几十兆,应该算标准的大型项目了。庞大的东西必定需要细分以便于把复杂度降低到人可以把握的程度。这跟大的书店必须详尽的分门别类一样。wxWidgets的根目录下有十来个子目录,src是源代码,只包含cpp文件。所有h文件在include里边。(我不打算这样干,反正所有东西只是留给自己重用)。tests目录包含了测试项目,每个项目只有几个文件。还有samples和demos。tests, samples和demos都需要使用类库,方式就是static library。类库本身也包含了许多子项目,同样也是static library进行重用。其实源代码里是用了__declspec(dllexport)的,应该也可以编译成DLL。

重用是最基本的要求,代码级重用,项目级重用。SOA其实也就是业务级的重用。重用也是解决复杂性的基本方案。如果一个项目很难做到重用,那么它也就很难再往前走了。而梳理代码,refactoring是增强重用性的基本方式。前几天很惊诧的发觉Louie一直在用我的程序处理数据。他不是有自己的matlab代码么?我的程序也不过是移植他的matlab代码而已。上次他处理别人的数据还是用他自己的matlab代码,为什么这次不用了?也许因为我的程序有实时性,可以方便调节参数。不过这不是最重要的。我觉得根本的原因是Louie的代码已经腐烂变质,已经成了一块庞大的石头,无法搬动,无法修改,也无法前行。无论是加新的算法,新的模块或是仅仅写几个新的批处理,都已经异常复杂,牵一发而动全身。其实我自己已经重写了他的一部分代码,不过完全基于面向对象的思路。分类,再分类,隔离,再隔离。Louie有很多很多的想法,但是,随着越来越多的想法,越来越多的需求引入,代码变得越来越臃肿,代码本身已经成为实现新想法的庞大负担。所以,我估计Louie的matlab代码将不会再增长多少,他的很多想法,也就只有寄托在我的c++程序上了。怪不得前天找我的时候要求我告诉他怎么添加新的算法,hoho~。

量变引起质变。大型的系统必须要有一个精良的组织架构来支撑,否则就容易崩溃,坍塌。大型的程序如此,大型的建筑如此,大型的公司如此,大型的社会也如此。

复杂就像一个怪兽,我们必须在它长成难以控制前将其肢解。

tv content

Business 2.0: Multivision mines TV text to tell companies what’s being said about them.

idea起源于创始人的工作经历。如果我们什么时候成为名人,我们可能被电视曝光的机会很多。而于我们无名鼠辈,因着偶尔的巧合,或者偶尔的事件,一下子上了电视屏幕。那实在是不得了的事情。珍贵的东西我们都想收藏,我们也就很希望能搞到相关的视频。不过对于很多用户的这个愿望,电视台一般不给,可能是麻烦的缘故。不过Farahi看到了这个机会。最开始的时候,他在家里一天到晚录电视节目,谁想要什么视频,他都可以提供,当然,是要钱的。后来,他偶尔在机场看到了更大的机会。因为他发现电视上竟然还有节目标题。有了节目标题,找起东西来就方便多了,也就是说,可以scale到更大的生意了。他现在的公司,multivision,市值有上亿美金,而生意,很简单,就是帮助客户监视电视上提到他们的信息。这些信息很重要,无论是个人,还是公司。

以前在国内时研究过一段企业竞争情报。基本focus在web上的文字信息上。其实现在Google和百度已经提供新闻搜索,就可以直接用在这方面。不过multivision的模式google是提供不了的。因为电视不属于互联网,视频也不是文字。

不过,一切都在融合。IPTV如火如荼,美国2009年也将彻底推行数字电视。现在,Media center, TiVo,都可以方便的录制电视节目。可以预见到,几年之内,视频,很多很多的视频,将充满我们的电脑,也充满互联网。P2P引爆了视频的传播,视频的播放。但是,他们无法被用户定制。比如抽取一小段,比如schedule录制任务,比如为clip标注更多的信息。

google很早就推出了video search。但是大部分东西都是收费的。美国有钱人也许舍得花钱,但绝大多数人更喜欢免费的东西。所以,youtube更为火爆。

但是youtube仍然很原始。无论是画面的质量,还是内容的质量。

想象有一天,我们踢完球后,洗个澡,坐在电脑前。时间已是7点,中央五台的体育新闻节目已经过了,但是没关系,因为节目内容已经自动录好了,我们直接点开视频文件就可以看了。当然,media center已经可以做这个了。但是,共享,网络,搜索,也许才是更重要的东西。我们也许不必自己录制,直接上网点播就行了。当然,现在已经有BT了,也有很多很好的BT论坛,大家在那儿分享种子。但是,资源仍然稀少,带宽仍然有限。

电视节目的自动录制,宽带的普及,将极大的丰富互联网上的视频内容。也许,版权将是一个问题,不过中国向来是没有这个概念的,可以copy的东西有什么理由不是免费的呢?

视频,很多很多的视频。就像信息,很多很多的信息,在互联网出现后。

搜索,而且应当是免费内容的搜索。

RSS, tags, 将为用户提供基本的定制工具。

整合?

百度的新闻专题

把我的激情又灭掉一半。

比如,在百度上搜索阿根廷这个词汇,右边将会出现 浏览关于阿根廷的新闻专题 字样。点击进去,将全是关于阿根廷的新闻,不过根据相关关键词分了一下类。算法其实很简单。我也正打算下一步这么搞的。不过需要一个分词模块。又用了一下google,发现没有这个功能。看来百度这方面比google作的更为出色。其实百度还可以再进一步,分析更多的子类,生成一个树,或者关联频繁集。

搞搜索就需要很多很多的机器,很多很多的带宽。可惜这些我都没有。甚至我在公司上上网都不好意思,还担心被人检测流量。百度其实是个好地方,有无限的数据供你研究。哎。

也许目前只能开发些实验性的模块。可是,时间?

先从分词开始?

碎片

知识以碎片的形式存在

比如一个个概念,比如一条条规则

所以wiki能够成功。你可以方便的根据一个单词新建一个页面,这是知识本来的存在形式。

碎片也是信息的存在形式。

一条条新闻。

还有blog

如果说wiki是基于概念维度的碎片模型,那么blog是基于时间维度的碎片模型。

消息是容易过期的。过期作废。所以时间模型是必要的。

但是知识是不过期的,所以wiki更加合适。

程序也是由一块块碎片组装起来的。

一个个的类,一个个的函数。当然,本质上是由知识的碎片构成的。比如,在语法层面,如何定义一个类,如何使用异常,如何写for循环;在类库层面,如何读取文本文件,如何连接数据库;在程序逻辑层面,如何实现设计界面,算法是怎样的,架构是怎样的。当我们不清楚一个功能如何实现的时候,我们不会从头到尾浏览一本书,而是直接寻找相关的知识碎片。嗯,我们需要的只是那一块碎片。表达一块碎片不需要一个完整的程序,简单的几行代码就足够。

解决复杂性的基本手段之一是把问题分解为更小的子问题。也就是打散为问题碎片,并继续将这些问题碎片打散为更小的碎片,直到我们可以立即解决的程度为止。

我们获取知识的方式同样是小块小块的吸收。

就像一口吞不下一碗饭,我们也不能一下子吸收整块知识,同样不能一下子解决一个复杂问题。我们头脑能解决的复杂性有限,碎片化是必要方式。

碎片需要组织,以构建复杂的系统。

机器由一个个小的零件组装而成。

程序碎片通过语言组装成大的应用。

数学体系源于几条基本的公理,然后构建出各种定理,又根据定理一层层构造出更高级的法则。

HTML本质上是碎片模型,通过伟大的URL将一块块的碎片串接起来。

旧有的文档是一个大而全的整体,只有简单的目录方式来查找。而基于HTML则方便了许多,任何地方出现任何引用都可以通过URL直接到达相关的地方。

碎片的模式更加容易组织信息。无论是添加,修改,删除还是浏览。

搜索是伟大的,因为帮你迅速的定位你想要的碎片。

程序设计的基本原则之一是松耦合,职责分离,也就是尽量把程序碎片化。

社会大分工是种碎片化。

所有我们用到的工具,能感知到的人造的东西,都是一块块碎片组装起来的。

碎片化是构建系统最好的方式。

世界本来就是碎片化的。

我们的生活,我们的思想,我们的快乐,我们的忧伤。都是碎片。

一切都跟成本有关

任何工具/产品/系统都有其使用成本

当我们想要的功能一定时,使用成本更低的工具/产品/系统显然更好

简单/易用的产品意味着更低的成本

所以说为什么易用性是最重要的一项指标

互联网时代面临的最大问题是信息的易用性

所以说为什么搜索引擎能够成功

因为降低了获取信息的成本

但是

为什么只有Google获得了最大的成功?

同样,还是因为使用成本

如果搜索结果页面90%的内容都是不相关的,意味着90%的无谓消耗。更高的相关性意味着更低的使用成本。

我们每天看新闻,大部分时间都消耗在无用信息的过滤上。

更进一层

为什么表达的简洁、明了、易懂很重要?

同样和成本有关。一听就明白的话语显然比云里雾里的拐弯抹角式的话语有更低的吸收成本。

所以说,为什么沟通技能很重要,几乎所有公司招聘都会强调有好的沟通技能。本质是要求更低的沟通成本。

为什么文档是必要的?//虽然我从来不写,也许是因为几乎所有自己写的东西都没其他人看

因为从源代码获取程序逻辑的成本比从文档获取的要高得多。源代码包含了太多无关的细节,也许有99%。

当然,高级的工具也是重要的,因为降低开发成本。同理,类库是重要的,平台是重要的。一切降低成本的东西都是重要的。

同理,抄近路是必要的。走终南捷径也是必要的。

同理,简单是好的,复杂是坏的。复杂即意味着更高的成本。

工具和语言

工具是语言的基本要素

工具提供服务

类库其实就是工具库

语言本身提供的工具库有限,为了解决特定的领域问题,我们需要开发自己的工具库

新的工具库使用已有的工具库进行开发

工具库简化程序的开发

我们的活动离不开工具

刚才上了趟厕所,觉得厕所是个工具

头脑中有了厕所的概念,知道厕所这个工具所提供的功能,才会想着去上厕所

突然想到垃圾收集

高级的厕所有这样的功能,人走就自动放水

而低级的则需要事毕按个按钮或者拉个东西放水

c++就像这低级的厕所,需要手工清除垃圾

面向对象是伟大的,因为它表达了工具

工具丰富了我们的语言

现实世界中的每个实体都可看作是一个工具

比如手机、笔、纸、饭盒、杯子、自行车、厕所、马桶、银行

每个工具都是个服务性实体

这些概念都可以看作一个类,每个类具有相关的功能

这些工具提供了我们完成各种任务的基本语言要素

再使用过程语法调用这些工具,就可以构造一个程序,也就是解决方案

不过现实中的工具不像程序中的类库那样能够随意获得

我们知道可以用手机打电话,但是我们可能并不拥有一个手机

我们的能力不仅取决于我们的知识,还取决于我们所能拥有的工具

知识其实也是种工具,而且可以随意获得,就如类库一样,本质上是段代码

也就是说,知识也是语言的基本要素

所以说,知识就是力量。更多的知识,意味着可以解决更多更复杂的问题。

仍然是语言

下面是Python写的一段代码:

import statsout

def output(data, format="text"):                             
    output_function = getattr(statsout, "output_%s" % format)
    return output_function(data)                             

什么意思呢?就是如果format = "html",就使用output_html()这个函数,如果是xml,就使用output_xml()这个函数。

也就是说,函数也是对象,可以赋给一个变量。当然,c++里也有函数指针。不过这里的函数还可以根据字符串动态调用。类似于Java中的反射机制。

还有更震撼的:

>>> g = lambda x: x*2 
>>> g(3)
6
>>> (lambda x: x*2)(3)
6

g是一个函数对象,这个函数以表达式的形式被动态构造。

这是一种简化,就是当一个函数只需要用一次或者只在很小的范围里是使用时,不需要使用什么def之类来专门定义一个函数。

突然发觉我们的思考其实是局限于我们所使用的语言的

我们用java思考,用c++思考。

写Java程序时,我们不会想到for xx in xxlist if yy来表达我们的需求。也许我们会想,首先需要一个循环,还需要新建一个List保存结果,然后循环里写个条件判断,把符合条件的扔到新的List里。当然,也有更简单的方式。我曾构建过一个类,类有一个接口,List filter(List in, Filter f)。Filter是我定义的一个接口,接受一个对象,返回true或false。要实现刚才的问题,需要写一个Filter定义if中的条件,然后调用这个filter函数。这个方式虽然更加先进了一些,但是相比python中的一条命令,仍然麻烦了许多。我需要思考,如何写一个Filter,要implements Filter,那个接口名是什么。这些都是重复性的工作。

也就是说,语言本身也许就决定了我们的思考是简单还是复杂。或者说,我们是在用语言进行思考的。

当我们掌握了更好的语言,我们才能构造更好的解决方案,也才能更快的构造解决方案。

每个领域都有其特定的语言。特定的语言来自于领域特定的对象,特定的问题,特定的规则。我们从小写的数学证明,数学求解,使用的是数学语言。大学学的矩阵,积分微分,也都是专门的数学语言。化学领域有方程式。

掌握的语言决定了我们的能力。在学习递归之前,我们不会想到用递归方式解决问题。

也许,每个领域都是一门语言。