• data

    2010-01-02

    感觉webapps几乎都是database apps

    而data呢,几乎都是通过web UI输入进去的

    各种各样的frameworks呢,几乎都是基于database

    再说传统的应用吧

    数据库以外的

    那就是文件

    应用程序经常需要精确到数据的每个字节

    而交互,除了按钮之外,主要是鼠标信息,还有画图

    以后这些都可以在HTML5里面实现

    至于文件系统,也许会被database取代,或者被一些框架取代

    将来的Web会和视频输入,音频输入,其他的传感器输入无缝的联合么?

    GPU会在服务器端利用么?

    Chrome OS是如何处理SD卡里的数据呢?

  • 乱七八糟

    2009-12-27

    info, data, model, process, control, program

    一切都可以看作是数据和对数据的处理,或者分析

    而数学,则是处理的核心

    逻辑算是数学的一种

    数学之外,就是设计

    无论是一个产品,还是一个程序,

    数学用来解决问题

    设计用来满足体验

    设计也用来满足演化的需要

    设计建立了人与系统沟通的桥梁

    系统的正确性,健壮性依赖算法

    而系统的可扩展性,可维护性,可用性则依赖于设计

    设计属于艺术

    算法属于科学

    搞研究主要是搞算法

    算法是不可重复的

    也就是说,一旦一个算法被提出来,就没有再研究的必要

    所以呢,算法似乎是越来越稀缺的资源,越来越困难的领域

    而设计则不同

    同一个算法,可以写到各种不同的类库里面,这些不同的实现都有存在的必要

    一个好的设计,可以不断的重复使用

    就如同汽车,其实看起来都差不多,但并不影响他们都跑到路上

    搞研究就不行了,算法差不多的话就不算创新,也就不能发表,也就几乎没有意义

    解决问题也是一样,如果有了好的解决方案,人家也不会找你

    既然找你,问题也就肯定很难,以至于需要你来发明新的算法

    所以呢,搞研究肯定是费脑子的事情

    而设计系统呢,则主要是设计,是艺术,不需要高深的理论,不需要知道什么线性代数,不需要知道什么SVD

    而现代化呢,似乎科学跟设计完全分离了

    学术界和工业界,两个不同的世界

    互联网的基础架构是科学还是设计呢?当然是设计。

    设计必然有设计相关的科学,或者原则

  • 乱七八糟

    2009-12-27

    发现工作之后更为前途担忧

    读书的时候觉得自己的前途就跟迷雾一样,不知道以后会干什么

    以为定了工作以后的大致方向也就定了

    如果是去公司编程,那我以后就走编程路线

    如果是去公司做研究,拿以后就走研究路线

    现在的公司主要是做研究,作信号处理

    以后是否就一直走研究路线?

    这条路线走到底又是什么?

    像kwan这样开公司?像以前老板那样做教授?还是一直做一名研究员?

    觉得自己的编程技术每天都在落后

    被趋势抛得越来越远

    是否有一条编程和研究的中间路线呢?

    其实kwan的公司已经是离这条路线最近的了。

    kwan不希望仅仅是研究,kwan也希望能有产品,公司能够发展。

    但是目前仍然处于有什么食物吃什么的阶段。

    慢慢积累吧。

  • enable one task to be completed by one command

    比如安装一个东西,比如给汽车加速,比如做饭

    在pragmatic programmer里面叫don't use manual procedures

    related: DRY Don't repeat yourself;  single responsibility principle

     

  • lesson

    2009-12-17

    full understanding occurs if and only if implementation is did

  • iteration

    2009-12-13

    refactoring其实是快速,轻量级的iteration

    iteration的概念很早就有了

    refactoring, iteration的应用其实可以很广泛,不仅仅是代码

    比如用到report,不断的修改错误,添加新的内容等等

    可以用到自己知识体系的构建或者对事物的理解,不断的复习,不断的学习新的体系,不断的构建更完整的体系

     

     

  • docs elements

    2009-11-23

    今天去公园,回头又把很多年前看的pragmatic programmer拿出来乱翻了一下。注意到model, view这个概念。一个核心的原则是model只能有一个,是最权威的信息来源,其他的都是views,都最好由model自动生成。文档就是一个例子。表现形式可以多种多样。那么model是什么呢?这个问题等会儿说。model如何写呢?有很多的工具,每种工具相当于一种语言,比如一般用的office。office其实是model和view的综合体。所以其实很容易混淆model和view。后果是不熟练的人改个字体就得到处改。好一点儿的方式是用stylesheets。程序语言里面有自动文档生成器。每种生成器的语法就是一套语言,比如javadoc, doxygen等等。另外还有docbook这样基于xml的模型。还有restructured text。其实不管什么类型,文档核心的概念都是差不多的。就像程序设计语言,变量,函数,类,继承,这些概念都是一样的。那么文档的核心概念是啥呢?也不知道有没有书专门讲这个。先自己总结一下。

    回顾一下自己写的博士论文。首先是章节(chapter),属于第一级。章节下面就是二级三级的内容。每一级下面都可以有最底级的文字内容,一般以段(paragraph)来分隔。这几样,就是文档的基本结构了。然后一个核心而且相当重要的概念,就是引用(reference)(可以想象成变量)。引用是internet的基本机制,是语言的基本机制。而在传统的文档中,这一点做的相当不好。比如写paper,一般在文档末尾列上一些引用别人的文献,对这些文献,文章里面肯定会提及,也就是要把引用说出来。怎么说呢?方式是写出序号,比如[1], [2-4],或者,作者名加上文献年份。总之,就是得给个id号。这个id号,要对应文章末尾文献的id号。很显然,这种方式无法扩展,比如id号只能对应于一篇文档。另外的一个严重问题是改起来极不方便。所以必须得用一些工具来搞,比如endnote。文献是一种外部引用。还有内部引用,比如图和表。还有公式。这些都会经常需要引用。最好的解决方案是用专门的工具,比如endnote,或者word里面的引用标签。这些引用工具可以自动进行编号,索引。其实章节也需要引用,用来生成table of contents。刚才说到,这两样是内容的另外两个基本元素。第一种基本元素是文字。一个实用的文档一般都要包括图和表。有一句话是一千个文字也抵不过一张图。文字,图和表,这三样基本上就足够组成一个文档了。对于程序文档来说,最好还有一些code samples,还有对应的引用,这些东西需要特殊照顾。现代的media,还包括video,audio,这种东西,慢慢都会包含到文档里面来,随着电子书的普及。

    回头再说说wiki,还有internet。里面的基本元素是页(Page),段(element)和引用(link)。

    还有啥?想不起来了。docbook里面应该有完整详细的定义。

    现在是问题呢,就是如何用一个工具或者语言来将这些概念表达出来。这得看每套工具或者语言的使用方法。无论是什么工具或者语言,其实都应该先想好概念模型,然后再将模型表达出来。就和设计程序一样。所以,写文档,应该当作程序来写。而当程序写的要求,就是每种概念的内容,都要使用特定概念的语法,或者标识。而不是“粗体的表示一级”这种混淆表示和模型的方式。

    最后说说工具。也许,每种问题都有对应适合的工具。很想知道,不同语言的文档之间可以互相转化么?是否有一个语言,这种语言写的文档可以转化成所有其他的语言的文档,比如各种各样的wiki语言?docbook可以么?

  • 乱七八糟

    2009-11-05

    maha distance相当于基于正态分布的概率

    kernel的版本相当于假定高维空间上是正态分布

  • 还是语言

    2009-10-28

    以前是这么划分的:

    语法相当于一等公民

    标准库相当于二等公民

    第三方类库相当于三等公民

    现在觉得还得细分

    语法本身也有不同等级

    比如C++里面的exception就明显是个三等公民

    再说类的概念

    类的一种核心概念是自动分配和释放内存

    从某种方面来说这是一种进步

    可是从另外一个方面来说,这是个陷阱

    为什么是陷阱呢?因为机器本身不支持这个概念

    C/C++的机器是硬件

    Java, .net的机器是vm

    动态语言的机器是解释器

    只有机器本身支持的特性才是一等公民

    其他的都是二等公民或者以下

    内存的自动分配是个美好的特性

    但是如果机器本身不支持就成了假冒伪劣

    或者,只是一种模仿秀,而不是真枪实货

    另外,还有机器的数据模型

    硬件机器的数据模型是字节数组

    我这几天总试图用C实现matlab的语法

    发现非常困难

    而基本原因,则是因为矩阵是matlab的一等公民,是机器模型

    而不是硬件机器的数据模型

    另外还有范型

    硬件机器是不支持泛型的

    所以要写出基于范型的函数会非常蹩脚

    C++有模板技术,同样,仅仅是一种模仿

    很简单的

    vector<double>和vector<int>是无法互换的

    只有动态语言才是真正的泛型

    那么将来是否是动态语言的天下呢?

    当然不是

    如果是以前,我也许会这么认为,但是现在再也不会

    感觉新的东西总在变化,但是老的东西基本不怎么变

    机器语言是所有语言的基础,虽然不会再有人用机器语言编程,但只是因为面向硬件的语言替换了它而以

    比如汇编,比如C

    有硬件存在的地方,就有C的用武之地

    C要消失,除非等到硬件消失

    硬件会消失么,当然不可能。所以C的寿命会是最长的。

    再说动态语言,最早流行的动态语言似乎是perl,但现在明显不如python和ruby

    那么将来呢?

    也许会出现很多的领域语言

    再说应用

    从面向应用来说,高级语言似乎总比低级的语言更好

    但现在不这么觉得,原因是硬件资源的限制

    资源优化是一个永恒的主题

    因为资源的稀缺是永恒的

    资源的丰富永远只是一个假相

    而资源,归根结底都是硬件资源

    而优化硬件资源的使用,则必须使用面向硬件的语言

    所以搞我这一个行当,信号处理,一个hyperspectal image就占了800MB。我能用动态语言么?用matlab都是够呛。load了一张图片,就不能load第二张。不仅不能load第二张。做个任何的操作都极可能out of memory。因为matlab里面的对象一般都是copy的。

    所以呢,我看我得回归硬件。

    用C来做传说中的榨干硬件的点滴资源

     

     

  • version

    2009-10-16

    //其实一直不是真正懂得该怎么搞version

    //http://en.wikipedia.org/wiki/Software_versioning

    major.minor.revision

    major: 当系统完全进行重新设计,接口改变以至于不能向后兼容时,改变major number。反过来,同一个major number开头的东西必须保证向后兼容。

    minor:系统增加了新特性,或者接口增加。

    revision: bug被补上。功能被完善。

    之前的想法是用tags来保存不同的版本。一个项目总是只有一个trunk。现在觉得不好。应该是每个major version都要单独创建一个项目,有对应的trunk, tags, branches。这样旧版本还可以继续被使用,完善。minor和revision使用tags。好想也有用major.minor单独做项目的。

     

  • table

    2009-10-02

    最近用matlab写实验scripts

    用table来存储实验结果

    发觉table真是个伟大的东西

    也许,关系模型之所以成功是因为本质上它最符合数据的组织天性

    table简单的说就是一个个item的集合

    每个item有一系列的属性

    也许这是最简单的模型

    但是确是最强大的模型

    用了table之后,完全就不用定义什么数据结构。而且查询起来非常方便,比如一个非常简单的查询引擎

    function results = query_table(table, function_keep_row)

    然后写一个

    function keep = keep_xx(row)

    keep = row(1) == xx

    就可以实现select * from table where xx的功能

    选取其中几列也很简单new_table = original_table(:, [1, 3])

     

  • 碎片

    2009-10-01

    单词是基本的碎片

    句子是段的碎片

    段是文章的碎片

    文章是主题的碎片

    书是更大主题的碎片

    图书馆是书的集合

    单词是基本的索引方式

    单词被文献所引用

    知识的发现和学习都是碎片化的

    而知识本身是框架化的

    资源

    历史是只读的

    历史都应该被归档,管理

    有时间戳

    分类是一种tags

    关键词是一种tags

    权限和分享的设置

    历史是碎片化的

    文档是框架化的

    文档是碎片的有机拼凑

    以及胶合

    使用wiki来创作文档

    使用blog来记录历史(碎片)

    公司需要wiki来分享信息

    wiki有类似于subversion的版本管理功能么?

     

  • words II

    2009-09-25

    关于模型

    最近看程序员的自我修养,看到symbol这个东西

    其实word就是symbol

    特别是名词

    一个word是一个id

    一个名词word对应一个er model里面的实体模型

    有属性

    关系模型可以看作是实体模型的一种

    现在的文本处理要么太松散,没有模型

    要么太严格,模型太死

    模型太松散,就无法做到高级的查询,处理。无法进行推理深入。

    模型太严格,应用的领域就受到限制,数据的收集也严格

    而人的语言处理模型则非常灵活

    也就是说,现在的语言模型仍然处于原始阶段

    每一个词都有对应的模型,或弱,或强,不同的领域,模型还会不一样

    properties属性集

    树模型用于细分,拆解。比如程序。是树+表

    矩阵模型。数据库

    网络模型。互联网

    文献里面则有引用,被引用。

     

     

  • words

    2009-09-25

    in the beginning was the word. ---- bibile john 1:1

    人活在words的海洋里面

    信息世界就是words交流的世界

    twitter, facebook, email, im, forum, news portal, blog, wiki

    有没有一个地方,能把这些统一起来呢?google wave可以么?

    很想做一个网站,用于个人消息的发送和接收集散地。

    发送消息最基本的模型是:from -> to  words

    from一般是自己self, 一个账号

    to可以是个人,比如email, im

    也可以是public,比如twitter, facebook, blog, forum,

    也可以是群组,比如qq里面的群,比如同学录

    接受消息的模型一样,不过from和to的类型反过来,或者from <- to words

    news可以看作public到自己,rss也是

    用户可以对不同to进行管理,分类,组合等等。

     

     

  • 2009-09-18

    现在又开始着手整理公司的核心类库,因为暂时没有deadline的压力

    首先是数值计算,主要是线性代数。而线性代数主要是矩阵库。要求:

    1.全面。基本的,高级的矩阵操作都应该有。比如SVD。

    2.成熟。经过工业界检验的。

    3.易用。

    另外一个想法是单独写一组interface。这样将来替换实现,或者增加一些功能。不至于绑定到某个类库。不过这样其实也不好。因为API本身就是一组实现。自己的实现不一定有别人的实现好。

    API本身也是传染的。如果一个函数的输入类型是AMatrix。那么其他地方基本上也慢慢都要用这个类型。不像XML有统一的API。或者其他平台只有一种API是dominant的。

    另外一个问题是公司的legacy code,用了一些不同的矩阵实现。感觉不同的实现是无法避免的。那怎么办呢?拿到要在统一的类库里面提供不同版本?那样岂不是造成confusion?

    从某方面说,C的代码库以及对应的应用经常比C++更稳定一些。因为原子级的数据更通用。比如double。而且,另一个不熟悉API的人也能很容易操作,使用对应的数据。用double*, rows, cols来代表一个矩阵显然比用一个类来表示更稳定。因为类会千变万化。哦,可怕的变化。

    以前一般使用opencv的矩阵库。因为opencv很多的函数都是建立在对应的矩阵库之上的。

     

  • observer

    2009-09-17

    最近这个模式用的非常之多

    问题是这样的,程序里面要启动一些线程,某些线程要通知另外一些线程,比如用户界面。

    Qt创造了一个机制,叫做signals and slots。这个东西非常intuitive。每个对象与外界打交道无非是两种,接收消息,或者送出消息。在传统的语言模型里面只有一种机制,那就是函数调用。接收消息是通过调用函数,传入参数。送出消息是通过返回值。这种机制有一个基本的限制,那就是程序执行是同步的,也是按顺序执行的。简单地说,就是假定只有一个线程。解决这种限制的模式是observer模式。要传出消息的对象开放一个接口,比如registerListener(Listener*)。如果外部对象想接受这个对象传出的消息,那么就实现Listener接口,并调用registerListener函数。更传统的方法是callback,使用函数指针。再回到Qt的机制。它基本上算是增加了语言的定义。那就是一个函数是slots还是signals。如果对象要送出消息,只用简单的调用emit aSignalFunction。slots跟一般的function没有什么区别。那么监听怎么实现呢?使用connect函数。connect一个signal到一个slot。或者,connect一个signal到另一个signal。这种方式很像硬件里面的pins链接。很直观,也很方便。不过这个东西也有很多的限制,或者说,产生了很多的依赖。首先,类必须继承自QObject或者QObject的子类。其次,需要声明Q_OBJECT宏,还要使用一些特殊的关键字。这些都会让代码依赖于Qt平台。不仅如此,使用这个类的其他的类,也都得使用同样的机制,实现slots来接受signals。也就是说,这种机制是传染的。另外,类必须使用Qt的moc来编译生成一个源文件,加入到项目里面一起编译才行。使用这种机制的好处是,1:代码少。不用实现observer模式。2:依赖少(除Qt)外。仅有的依赖是函数的signature。只要signals和slots的signature match,就可以连接。怎么算match呢?只要函数参数类型一样就可以了。另外一个Qt的限制是,一个类不能同时继承多个QObject的类。

    有多个方案,也就面临选择的问题。想来想去,最终决定是尽量不用Qt里面的机制。实现Qbserver模式麻烦就麻烦一点儿。后来发现这导致一个问题。那就是QObject的子类不能使用register来获取消息并调用slots。Qt是不允许不同的线程之间传送消息的。解决这个问题的办法是创建一个单独的QObject类,先把Listener的消息转化成signals。然后再把signals传给slots。这样就没有问题。

    再说Observer模式。其实实现很简单。但是每个都实现就明显有模式重复之嫌了。而且也繁琐。怎么办呢?Agile Software Development里面的解决办法是做个抽象类。把共同的逻辑放到基类里面去。子类调用notify函数就可以了。自己以前也写过通用的的基类Observable和Observer。也用过很多。不过这种模式要求observer的子类了解Observable的类型信息,以及调用一些对应的函数来获取信息。这种方式,虽然降低了代码的重复。但是也增加了依赖。另外,领域逻辑表达的不好。一旦Observable有多个送出消息的类型,就必须定义一个区分消息的协议。一个通用的管道,还是多个不同的管道?这是一个问题。感觉得好好研究一下Java里面的消息机制。

  • 代码的安全感

    2009-09-14

    人的第一需求是安全感。

    演化代码也是一样。

    而隔离是提供安全感的基本途径。

    就像人的房屋。把外界的空间和自己的空间分离出来。窗户,门,都可以看成是接口。接口限制什么东西可以进来,什么不能进来。

    信息隐藏是一种隔离。

    SRP(Single Responsibility Principle)是一种隔离。

    面向接口是一种隔离。

     

  • guidelines

    2009-09-14

    guidelines = principles in context

    principles don't change

    context changes

    guidelines changes

  • 信息隐藏

    2009-09-14

    separate interface and implementation

    separate use and implementation

    每个语言都有独特的编译,链接和引用机制

    不同的机制引出不同的信息隐藏实现方式

    在Java里面,使用另外一个类库或者文件,都不用关心头文件的定义,也不需要关心class文件的物理位置。所以呢,强调interface分离出来就差不多了。

    在c++里面则不一样。c++需要包含一个.h文件。一旦.h文件变动,client的程序就得重新编译,即使是interface没有变化。但是,.h文件会经常随着实现而变动,比如private的成员变动。解决这个问题的一个经典方案是Pimpl模式。这个模式在java里是不存在的。因为不需要,而且有些繁琐。另外,java里面可以设置一个class是private的。c++里面则没有。那么怎么隐藏一个类呢?一种方法是不把它放到include目录下面去。

    还有一个经常变化的是物理位置,以及namespace。很多c/c++的项目都不设namespace,而是在所有的类或者函数最前面加一个前缀,比如Qt,OpenCV, OpenGL。或者,就设一个namespace,比如std。引用文件的时候,没有目录什么的。这一般需要先设定好include path环境变量。总的来说,就是类库对用户来说是平的。没有两层或者更多。这样很方便,也不容易变化。要求是类库所暴露的接口不能有重复的名字。这一点应该说是合理的。而且也不难。至于分类,分模块的话。一个模块对应一个项目,一个include目录。每个include目录下面没有子目录。

     

     

  • 信息应用

    2009-07-23

    突然意识到互联网上的几乎所有的网站都是特定的信息应用,或者说,信息程序

    虽然很早就看到过新闻,Google Chrome可以把特定的网站定制为一个单独的桌面应用

    不过,昨天晚上的感受更进了一个层次

    Gmail这种东西可能更加偏向应用

    应用跟信息的区别是什么呢?

    一般来说,一个应用需要大量的互动,需要用户的输入,然后应用处理输入,给用户一些输出,或者,完成一些操作,用户想要的

    游戏可能是互动性最强的应用

    而信息呢?更多的是静态的。用户更多的是浏览,查询。比如新闻网站。

    那么什么是信息应用呢?

    典型的例子是论坛,blog,wiki,sns,也包括gmail, sms, search engine,分类信息,digg等等

    这些应用的特点是信息是核心,而应用则是促进信息的分享,交流,沟通等等

    这些应用都需要用户的交互,而不仅仅是简单的信息

    再比如特定的垂直网站,edmunds,关于汽车信息的。里面综合了各种各样购车的信息。不仅有类似新闻,或者只是的分享,也有卖家的产品的详细信息,买家可以查询任何一款车的大致价格,可以根据自己的地理位置轻易找到当地的卖家,查看卖家的库存,联系卖家

    总之,在我看来,这是一个非常全面的,面向特定领域的信息应用。不仅有各种各样的静态信息,也有非常成熟的交互式应用。

    one size does not fit all。任何领域其实都有对应的信息模型。充分挖掘领域的模型,可以给用户带来更好的体验

    从某种意义上来说,所有的网站都是特定的信息应用。

    那么接下来。如何构建信息应用?

    最开始的时候是个人网站,有很多网站可以让用户建立自己的主页

    但是如果要整一个更复杂的应用,早些时候还都得自己搞服务器,即便现在很多网站都已经预装了一些系统。但是写应用一般还是得自己从头写起,用特定的语言,特定的框架。

    这里面有一个问题,几乎所有人都可以轻而易举建一个自己的主页,但是只有很少人能自己写一个应用。没有多少普通用户会自己去学什么java, ruby, asp之类。

    而另一方面,普通用户是否需要构建自己的应用?当然需要。只不过,这一要求一般被已有的软件,或者应用掩盖了。还是那句话,one size does not fit all。

    传统的解决方法呢,是软件,或者应用,可以让用户自己定制一些特性,一些功能,这个角customize,或者personalize

    但是呢,很显然,这些仍然局限于已有的应用之类

    用户是否需要自己构建特定的应用?包括数据库功能的?比如收集信息。

    老婆是学文科的。得做很多问卷调查。后来我帮她用zoho建了一个应用。非常方便,非常简单,非常有用。

    以前还接触过evite之类的,分发邀请信息的。

    昨天上apartment的网站,发现很多功能也都是使用特定的一些网络应用平台

    很多年前有一个词叫web service,我一直没有好好学。现在觉得,其实这并不是那么重要。为啥呢,因为他还是面向底层的,面向编程人员的。也就是说,门槛太高,对于普通用户。

    现在出现了新词,叫cloud

    不管有多少种不一样的cloud,这些,与普通用户关系都不大。因为它是底层的架构,是基础设施。

    而真正对用户有价值的,是特定领域的应用平台。用户可以在上面轻易构建自己的应用,为自己服务。

    各种各样的widgets,算是一种基本的平台吧。但是还相当不够。很多情况,用户需要有自己的数据库。自己的数据库应用。

    发觉想的有点儿偏了。

    再回到信息应用本身吧。。。回头再说。

  • 语言的天性

    2009-07-13

    每个语言都有自身的天性。顺其天性,做事才会舒服。这些天性取决于当初语言设计的目标,语言本身的语法,语言的复用方式等等。

    比如C的天性是结构化编程,如果强行套上OO,肯定不会舒服。

    比如Java的天性是OO,使用结构化编程也不好。

    C当初是面向机器,面向硬件。所以操作系统,或者设备驱动,或者嵌入式,C都是最match的。但是到了应用层,快速的开发,复用成为最重要的。C在面对其他的语言也就显出不足。

    C++的天性是什么?似乎没有多少人能够百分百肯定。他基本上是C的超集,他有OO,有GP。在应用开发上来说,他比C要方便快捷。但是因为语言本身的复杂性和编译器的不兼容性,在二进制复用上远远不如C。在面向机器的开发也不如C。那么天性是什么?感觉复用上来说源代码级别的复用才是天性。另外,错误处理的天性是什么呢?C++提供了几种不同的方式。在尝试了几次exception后,决定放弃了,或者api层面不使用了。C++本身的exception语法似乎压根就不鼓励使用exception。也许这与他要顾及高效有关。而不同编译器对exception的处理也不一样。从应用上来说,C++基本上适合于桌面应用或者系统或者后台应用的的开发。

  • 模块化问题

    2009-07-02

    准备重新更新一下自己的类库

    以前开发的大部分东西现在都用不着,比如3d方面

    目前还有其他的问题

    公司的机器上没有visual studio,正版太贵

    我下了个express版本

    也就是说我的笔记本和公司机器用的是不同的编译器

    复用c++的类库就会出现问题

    c++类库都必须重新编译一遍,对特定的编译器//有啥好的办法没?

    因为这个限制,之前的小模块模式也不得不改变,准备回到单个大模块的模式。复用时设置起来方便一些。

    之前用scons来自动组合成大模块

    但是既然要重新编译代码,对不同的编译器,那么,scons同样的每次都得运行一下。如果同事对这个不熟悉,也不是很方便。

    而且,有时机器上可能有不同的visual c++版本。选择不同的编译器也是问题。

    cmake对这个问题的解决方案好一些。不过不喜欢每个目录都写一些配置文件。

    也许再重新研究一下cmake?

    c++的复用问题还是蛮恶心。比java差得太远。也不如c。

  • 昨晚没上自习,看了两部电影,一部导火索,一部投名状。前面的情节简单,也就打斗吸引眼球。后面的,让我回味了好久。到处看影评,自己也想。

    王书亚的评论很好。但是有点儿玄。虽然我也是基督徒。基本上每句也能看懂。但是读完之后总觉得抓不住核心意思。感觉飘得慌。

    其他的评论感觉都不是非常到位。说说自己的感想吧。

    这部电影给我最大的感觉是真实。真实是什么呢?真实就是丑陋,就是血腥,就是天地无情,以万物为刍狗。兵荒马乱,百姓食不果腹,为匪为军,不过混口饭吃,争取生存的权利。是的,一切都是生存,或者,最终的胜利。既然目标已决,那么,情义何处安放?或者,情义这种东西,否是真的合理?目标重要?还是情义重要?庞青云是有理想的。他的理想是造福百姓,让百姓能吃饱饭。而要达到这个目的,浴血疆场是根本不够的。妥协,欺诈,利用,这些厚黑手法都是必要的制胜之道。而庞青云从死人堆里爬出来的那天,已经看清了这一点。从一个一无所有的逃亡将士,到最终的官封两江总督,英勇以外,谋略(或者狡诈)必不可缺。还有一件,则是无情。弟兄奸淫女人该不该处死?投降的将士该不该灭口?结拜兄弟该不该杀?如果庞青云要达到彼岸,要建功立业,实现百姓吃饱的抱负,就必须无情。如果是很多年以前,我会喜欢赵二虎。但是我现在更同情的是庞青云。很多影评把庞青云对应历史里面的马昕怡。其实,庞青云并非简单的单个载体。在他身上,导演加入了很多很多的角色。其中一个,我觉得是曾国藩。以前看过曾国藩的历史传记。曾国藩的湘军带头攻入了南京。而曾国藩,就做过一些背信弃义的事。还有李鸿章,杀降杀的老外都看不过去。不过影片中的庞青云比这两位好得多,每次都处于无奈。其实,历史上杀老乡以示军法的名将多的是了。兄弟情是什么?兄弟以外,他人皆可杀?甚至无辜者?甚至嫂子或者妻子?兄弟就不可以杀?在缺乏信仰神的社会,我们的道德如何定义?兄弟,兄弟,兄弟就是最高的道德,最高的信仰。若有人侵害兄弟,他就是十恶不赦。只要是为了兄弟的利益,其他的什么王法都是垃圾。为了宣誓兄弟这一最高信仰,无辜的人必须成为祭祀品。既然兄弟代表最高的道德,杀人也就没有不道德。赵二虎是这一观念的代表者。大哥庞青云要入伙,就必须和他们一样,杀一无辜者。午阳更加认理一些,不像二虎那般执着。但是终究没有逃过这一信仰的诅咒。大哥杀了二哥,这一事实终究让午阳崩溃。“外人乱兄弟者,必杀之”。先是杀嫂子。“兄弟乱兄弟者,必杀之”,然后又刺杀大哥。是信仰让我们丧失人性么?是信仰让我们无情么?每个人都活在自身的信仰里,都为了自身的信仰不择手段。庞青云的信仰是百姓吃饱 ,安居乐业。赵二虎的信仰是兄弟同甘苦,共患难。午阳的信仰是“这是对的”。莲生的信仰是活着,什么都想要。魁字营头头,还有开始那个1500精兵的头头,信仰是保存自己的实力,利用别人。军机处三位大人的信仰是自身利益。即是信仰,就是绝对。即是信仰,就是正确。信仰无错,其他的都会错。信仰是目的,其他的都是手段。信仰就是审判,每个人都是审判官。你我活在同一个世界,但注定怀着不同信仰。什么是善?什么是恶?是什么让我们互相残杀。我们可以逃脱信仰么?断然不能。什么是善?什么是恶?我们可以回避么?断然不能。无善无恶?那我们如何行走于世间呢?或是万物皆虚空?虚空之中,我们自己是什么?人行走于世间,要么是苟且偷生的信,要么是其他的信。有哪一种信可以让我们不互相残杀呢?有哪一种信可以让我们彼此相爱呢?有哪一种信,可以让我们爱敌人如同爱自己呢?如果没有天上的父,兄弟能有几个呢?如果没有天上的道和心中的灵,我们如何判断是非呢?如果没有那一位为罪人牺牲的羔羊,我们如何能认识舍己的爱和天上的父呢?

    //庞青云是片中的悲情英雄。身怀壮志,死不得所。而这样的事情,历史上太多太多,比如岳飞。狡兔死,走狗烹。至于战斗的时候兄弟营不援手,历史上也有很多。好像一位晚唐的将领,带领不多的人镇守一座城。断粮,以至于最后吃人。他派手下去另外一位将领那儿要粮,要人。对方就是不给。

    //专制体制下,若想成事就必须趟进污水,拜结权贵,尔虞我诈。可惜,成功者屈指可数,更多的是庞青云这样的悲情英雄。因为几乎所有人,只信仰自己的利益。

     

  • robot

    2009-05-31

    PhD的题目是从robot开始的

    论文最终以robot结束

    但是几年下来,其实花的时间并不多

    尽管这是最感兴趣的方向

    不知道以后工作了还会不会有时间继续下去

    希望还会有机会吧

    今天又想了想这方面的东西

    还是视觉方面

    其实应该综合多种特征

    lines, colors, motion, 

    应该都考虑

    还有prior knowledge

    一幅图像的骨架可以由lines, vanishing points, ground plane大致来定义

    然后texture, colors可以用来做细节的分类,建模

    之前做的东西都比较零散

    一直想着结合起来

    但是也没时间做

    也许在sfm的基础之上,再做结构化的建模

    比如lines,planes等等

    任何一个空间都会有主要的几个planes

    每个图像可以分解成很多的小的块

    根据motion和对应,可以把这些小的块对应到不同的平面上去

    对于远方的结构,可以根据分类来确定对应的面

    如何确定planes呢?

    可以根据线,piror knowledge

     

     

     

  • 一面是云,一面是终端

    Google说:The browser is the computer

    又有人说:Robots are man's new best friend

    一面是数据,一面是函数

    终端最终退化成数据采集器和数据交互器

    而计算和数据最终都潜在云里

    未来只有两个方向

    一个是浏览器的后端

    一个是浏览器的前端

    后端是服务器,是网页程序

    前端是手持设备,不仅仅是一个电脑,还有大量的传感器,或者,有一天,其实是一个机器人

    一个变形金刚

    是的,那一天真的不用再下载任何程序

    brushesapp都可以做到网页里

    html5支持网页画图

    “five main HTML 5 concepts: canvas tags, video tags, geolocation, application caching and database, and Web Workers.”

    语音?视频?都可以通过网页交互

    游戏?Google tries jump-starting 3D Web with O3D

    时代真的变化了

    一面是云,一面是机器人

    一面是计算,一面是信息

    移动,可移动的机器人

    可以去买酒

    可以去拿烟

    也许未来的某一天

    满街只见机器人

    不见有行人

    而现在

    我得把博士论文最后一章

    基于视觉的移动机器人导航

    得整完

  • iphone

    2009-05-28

    最近看到两条关于iphone的消息

    一个是有一个哥们儿用iphone画了著名杂志《纽约客》的封面画。用手指,一个小时,站在时代广场上画的。

    天才的背后是技术的支持

    这个应用软件是brushes http://brushesapp.com/,只要5美金,就可以从iphone app store上下载。

    另一个是美国大兵开始大量使用iphone 和 touch。价格便宜,量又足。

    “iPhone的功能非常多,能够为使用者提供语言翻译、发送和接受敏感信息,甚至还能帮助狙击手测算弹道。现在,美军正计划采用iPhone作为炸弹处理机器人的导航系统,利用它们从无人侦察机上接收信息。美国海军陆战队还在资助另外一个项目,允许士兵将被拘捕嫌犯的照片传入数据库,相关软件将对图像进行自动对比。理论上说,这将更容易追踪嫌犯。 ”

    怎么觉得iphone要成为windows?//当然,一个是硬件软件捆绑的平台,一个是纯粹的操作系统平台,不过本质上差不多。

    一方面,大家慢慢抛弃传统的桌面引用,转向web,专向所谓的云

    但是,像信号处理这种东西,比如视频,图像,语音等等,很多时候没有必要,也无法用过网页来做处理。另外,还有一些单机游戏。

    iphone似乎要开启一个新的计算平台。也就是手持+触摸。

    在传统的pc上面,鼠标应该是最方便的交互工具。

    不过对于手持设备,鼠标是不可能的。

    除了携带方便外,手持设备的一个很大优势是交互性强。比如拍照片,录像,语音,聊天。GPS等等。在未来,或者现在,手持设备肯定是人生活的左臂右膀,无法割舍。

    很多时候,手持设备可以完全取代笔记本的功能。

    而iphone,会成为手持设备的代名词么?

    还是GPhone?

    我想工作后得买个touch,学习学习怎么开发上面的应用程序。

    那pc上的程序还会剩下什么呢?

    似乎浏览器就够了。

    如果不是得用visual studio,以及word

    也许真的不需要windows

     

  • 继续幻想

    2009-05-12

    刚才搞忘写了

    这个相框还可以打电话,当闹钟,收音机,当电视,控制家里电灯,房子监控,等等

    总之呢,可以干很多很多事情

    怎么实现呢?

    最简单的方法

    做成一台PC

    一个可触摸面板,相框大小,如果能够伸缩更好

    一个小pc,手机大小应该足够了,没有键盘

    操作系统呢,当然得是免费的

    大部分的内容呢,得是特定的格式,类似于RSS

    这样能够自动更新,方便定制

    需要一个语音识别引擎

    应用页面得专门定制,也许修改一下chrome就足够了

    不过应用得像亦歌那样

    控制简单,界面也简单

    聊天工具专门定制

    通话系统专门定制

    交互也可以做成其它方式,更容易实现,也更准的方式

    这个东西应该很轻

    可以躺在床上拿来读书

    也可以上网用

     

  • 创业

    2009-05-11

    做完偶尔看了一下csdn的创业频道

    看了一些demo

    觉得很不错

    也觉得自己基本上是落后于时代了

    觉得国内在很多方面其实已经不必美国差

    中国其实已经有大批优秀的程序员

    无论从数量还是质量上来说,其实都不差于美国

    但是中国缺少核心的技术,或者基础架构的东西

    比如语言,操作系统,虚拟机,芯片,标准等等

    在国内做应用,做模仿的比较多

    也许因为基础架构需要大量和长期的投入,而且有时钱景不大

    这需要基础的投资

    而这种基础的投资一般只能由政府或者大公司提供

    当然不能指望政府的所谓科研项目

    在美国其实也差不多,虽然稍微好一点儿

    而大公司的话,国内会有大公司做基础架构的投入么?

    也许也有,或者很快也会有

    至于像ruby或者python这样的创始一门语言

    则需要理想和热情,不计“钱途”

    这些也都不容易

    回头说应用吧

    感觉这方面就像麦当劳一样

    国内的肯定比国外的好吃,花样也更多

    技术方面,其实已经没有任何差距

    既然大家都有技术实力

    那么比拼的就是创意,用户体验,以及推广了

    而这方面,国内自然不差

    有几个东西觉得不错,一个是亦歌,一个是小说下载阅读

    都非常实用

    其实小说下载阅读可以做在浏览器里

    昨天晚上想的其实是其他的一些东西

    就是互联网的资源,以及应用

    互联网其实可以看成是一个巨大的资源库,或者水库

    网络是管道

    而终端+浏览器则是各家的水龙头

    当然,这个水龙头是可以定制的,想得到什么就能得到什么

    那么问题是什么呢?

    是怎么能让用户轻松的获得他所想要的东西

    所以呢,Google同学牛了

    youtube牛了

    bt牛了

    门户当然也牛了

    当然呢,用户的要求越来越高

    也就是体验

    也就是更方便的获取,享受资源

    所以呢,千千静听,到这个亦歌,主要都是提升用户的体验

    书呢,是另一类使用频繁的资源

    还有什么呢?视频

    比如电视剧,电影,比如球赛集锦,比如用户自制的视频等等

    还有新闻

    有一个想法

    就是一个类似于电子相框的东西,放到床头,或者书桌

    交互纯粹靠触摸或者语音,或者手势

    然后呢,这个东西有语音合成

    可以自动报新闻,比赛结果,可以自动放歌,自动阅读书,自动阅读email

    这个东西最好上面还有一个针孔投影仪

    可以让用户吧电影什么的投影到墙上

    好像类似的东西已经有人做了,不过似乎交互方面都是静态的

    核心的技术呢,是交互,特别是语音或者手势的交互

    当然呢,还有资源搜索或者说编辑

    资源搜索相当重要,仍然需要继续发展

    这个相框应该还能买东西,通知折扣,提醒事件(或者自动打印一张事务清单)等等

    为啥不是pc,或者电脑呢?太麻烦。

    很多事情并不需要键盘

    需要键盘的地方,可以用语音,触摸屏,甚至是投影到地面,

    那我学的东西可以干啥列?

    跟这些感觉干系不大

    基于摄像头的交互?关系也不大。

    感觉应用是另外一些方面,比如augmented reality,机器人视觉等等。

    三维图像合成的话也是一个应用。

     

  • 又调了一个礼拜的medical image

    写了一些visualization的程序看中间结果

    以及分析

    大部分参数得到的结果都不理想

    不过偶尔撞到几个还凑活的结果

    感觉就像在黑暗里随机打枪一样

    希望某一枪能够中靶

    另一方面,调试程序或者问题也是一样

    以为问题的原因是A,结果解决了A之后,发现问题还在

    又猜是B,结果还是一样

    系统越是复杂,猜中的概率越小

    怎么才能改善呢?

    怎么根据错误的一枪了解错误在什么地方,然后下次射出更好的一枪呢?

    也许每次发现了问题,就应该仔细分析问题,而不要不断的盲目打枪了

    盲目打枪不仅效率低下,对理解问题也没有什么的帮助

    有的参数可以,有的参数不可以

    感觉问题的原因不在于参数,而是degeneracy

    其实很早就注意到了这个问题

    但是一直没有系统的专门去解决它

    总是忙于一个又一个deadline,而每一个deadline的项目又都是应用性质的,希望能做出最终demo的

    于是不断的打盲枪,希望能中一靶,把demo搞定

    至于解决中间盲枪准星的问题则不是要点,跟paper也没有关系。因为paper解决的是系统问题,不是做一个更好的的某个技术细节。

    不过我最终还是被盲枪准星得问题给射中了

    而且射中了好几次

    cvpr, ijcai, iccv,拖到最后几天整demo,结果总是得不到好的demo

    也许我应该focus到中间的准星问题,专门的研究,整篇paper

    解决这个理论问题,再作实际应用

     

  • more features

    2009-04-02

    用opencv highgui写的code非常难以重用

    比如一个slider bar的callback函数:void onSelFrameIndexChange(int pos)

    基本上只能使用global变量

    另外,这个函数也无法知道在被哪个对象或者窗口调用,所以怎么重用呢?

    现在要添加一些新的功能,其中大部分的东西跟之前的一个程序是一样的

    但是因为无法重用

    所以只能在原来的程序上面改了

    这样原来的程序也就多了一些功能,但是代码变得更臃肿了

    而从现在的程序来了解原来的程序结构也变得困难

    现在可以明白为什么软件越来越复杂,却很少有按照复杂级别分类的不同版本

    其实如果用Qt或者其他高级的gui类库的话,应该是可以做到重用的

    不过这又是另外一个topic了