2010年1月13日星期三

【ZT】百度孙云丰:Google市侩,我感到恶心


今天下午1时20分,百度首席产品设计师孙云丰在自己的博客中撰文关于谷歌退出中国,直指Google退出中国的姿态证明自己是市侩分子,对此感到恶心。

博客全文如下:

google宣称要退出中国,所证明的,恰恰不是市面上的那些g粉所宣称的那样,google是个人权斗士,而刚好反了过来,正好证明google是个市侩分子。

google的首席法律顾问的调调 让我感到恶心。因经济利益退出,就直白白的说好了,把自己涂脂抹粉一番,还煞有介事的提到google被中国人攻击,中国异议分子的Gmail信箱被攻 击,把这些事情作为退出中国的铺垫,这种论调是侮辱中国普通老百姓的智商,但还真有可能迎合那帮目空一切,但从未到过中国、对中国没有丝毫了解,却又喜欢 对中国说三道四的西方人的假想。

只提一个假设,如果谷歌占据了中国80%的搜索市场份额,google的高管,还会这么高调的宣称要do no evil,从中国退出吗?

整个事情给我的唯一感受,就是恶心。
--------------
以上是作为一个曾经的忠实google用户而说的,和百度无关。市面上沾沾自喜于了解一点google的产品技术细节将google奉为道德楷模而自封G粉的兄弟,请勿跟帖瞎喷,你们根本不懂什么叫搜索引擎,什么叫自由人权。


历史应该记住这一天,在这位百度首席产品设计师发表此文之后几小时,Google取消Google中国的敏感词过滤,随之百度的敏感词过滤即刻失效,事实证明了最懂搜索引擎,最懂自由人权,最懂中文的百度如何盗用Google服务为自己牟利。

2010年1月9日星期六

为 PyCon Asia Pacific 2010 准备的——基于三元语义的关系数据库建模工具Socrates

基于三元语义的关系数据库动态建模工具Socrates

Socrates, Relational Database Dynamic Models Make Tools

摘要 Summary

Socrates 是一个基于关系型数据库和ORM的通用数据库工具。它通过三元语义表达了对动态数据结构的存储和管理功能。使得开发人员可以在关系数据库中管理结构可变的 数据。三元语义可以方便的表达单一信息之间的关系,因此它很适合用来表达有向图,甚至有向有环的网状模型,或路径长度很长的关系。

  • 预计时长:25分钟
  • 难度 Level :面向中级听众
  • 类别 Categories:数据库 databases

详细内容 Description

Outline
=======

.. contents:: :local:

项目背景 Background on project
---------------------------------------

* 需要建立一个数据库,支持多个统计报表输出,每个报表都是临时性的,数据量不大,但是报表的格式和内容变化很大

* 需要支持当前不能预期的数据内容

* 需要支持一些网状关系模型,节点间的关系变更频繁,经常需要沿节点间的路径进行访问

* 游戏中的人物、道具等信息,展开为关系表会非常庞大,但是往往只有一部分字段有信息,此类稀疏数据结构用关系数据库表达比较浪费

需要解决的问题 Problems to solve
------------------------------------

* 数据表的业务信息有内在的一致性,为每种变化建立一个新的数据表不经济

* 频繁变化结构的数据,每次调整表结构不现实

* 关系数据库的模型适合表示大量同类数据的关系,但表达深度的递归关系,如树状结构,是比较难操作的

* 一些应用,如游戏中的人物、道具等信息,展开为关系表会非常庞大,但是往往只有一部分字段有信息,此类稀疏数据结构用关系数据库表达比较浪费

项目介绍 What's socrates?
------------------------------------

* Socrates 基于三元语义模型,可以方便的表达动态的数据结构和关系

* 模型分为两个层次:条目和子句

* 每个子句是一个(主语,谓语,宾语)三元结构

* 每个主语表示一个条目,每一到多个同一主语的子句描述一个完整的条目

* 谓语表示主语拥有的特征

* 宾语表示主语在当前谓语下表达的信息内容

* 每个条目可以看成一个类字典的结构

* 谓语是可读的文本,它的命名是其唯一标识特性

* 宾语可以使用数据库平台所支持的任意数据类型

* Socrates封装关系数据库的静态强类型本质,在使用接口上表现为动态数据模型

* 访问层上,Socrates基于Python的ORM工具SQLAlchemy,可以使用SQLAlchemy的强大功能进行操作

* Socrates 在数据库层表现为一个统一序列器,若干个存储表,十个元语命令的数据行,存储表可以由用户动态添加

动机 Why socrates?
------------------------

* 小粒度数据,可以方便的对单一属性精确的访问

* 支持对数据进行类似字典操作的访问

* 每一个数据条目就是一个类似字典的结构,可以独立的增删数据,不影响其它条目

* 条目之间可以通过子句方便的建立关系

*

支持多种不同数据库,允许使用具体平台的特定数据类型



简单的演示 Basic recurrence
----------------------------------

* 在不同数据库平台上“On Command”建立一个Socrates环境
* 注册新类型、新谓语
* 添加条目,建立关系

进一步的演示 More sophisticated recurrence
-----------------------------

* 查询子句和条目

* 沿条目关系进行访问

* 访问和操作条目中的子句

* 谓词表达式

Other capabilities of socrates
------------------------------

* 性能讨论

* 并发和分布

* 异构数据库的多节点集群

结尾
----------

* Socrates 提供了灵活的数据管理方式,为动态和复杂数据的管理提供了一种通用的方式

* Socrates 在DSL和分布式集群方面还可以有所发展

* Socrates 的性能还有很大的提升空间

IT宅男们,有没有什么技术让你觉得相见恨晚?

无意中想起SQLite,于是发起了这么一个话题,感谢各位朋友的参与,我把大家的话收集一下,放在这里。

@sshg

PY算一个吧。当初看了一个下午就决定ditch Perl了。Haskell算另一个吧。看到type class的时候,也是怦然心动。不过Haskell比Py门槛高,用的机会也相对少。呵呵,我资格比你老。我上手的时候才是2.1。查资料的时候,Internet上还有很多1.6的东西。此外,还被逼无奈,用1.4写过代码。呵呵,1.4才叫那个痛苦呢。连自省都很不完善。

硬件方面,Nokia的maemo设备。此外,3M的迷你投影仪,以及CU上介绍的OLPC

75没有的第二代OLPC平板电脑。Sexy!

还有虚拟化。用过很多虚拟化的产品,包括vmware, VBox, Xen, KVM。具体哪个产品好,不好说,但是第一次看到vmware的时候,那个激动呀。用一个词形容,sexy!

这样说吧。技术分几种。一种是一看就喜欢,然后越研究越喜欢。比如Py,比如虚拟化。有的,一看喜欢,一眼就就放下了。比如Zope。有的一看没觉得怎样,研究一番之后,喜欢上了。比如DNS。还有,一看就不喜欢,越用越不喜欢,还很恶心地得天天用。比如Perl。

@laiyonghao

cassandra/thrift/scribe

@xiaoxiolu

pypy吧

@smallfish

perl和pg。可惜现在一直未有大规模应用,还只是自己的试验田

@neruont

函数式编程. 话说我学函数式编程思想入门还是靠 CPP 泛型...

@marchliu

一 度觉得,我对Python的接触并不算很晚,毕竟从Python2.3以后,它才逐渐完善了多编码文本、修饰、异常等等有用的特性,但是想了想,即使只是 自由软件和动态类型这两个特色,已经足可以改变我的世界观了。如果时间可以倒流,我希望1991年就开始学习Python。

Postgres, 其实从04年就想要学习,但不得其门而入。从去年正式的使用它,这个产品从未让我失望过一次。我是一个“重”数据库爱好者。PG足够强大完备,它的无限嵌 入语言、正则语法集成、丰富的contrib,使我如鱼得水。这个产品可称伟大。它让我入行十年来很多未实现的构思得以成真。

Perl对我来说也是非常重要的一项,它使我的文本处理技能提升了一个台阶。如果早几年学会它,相信我获益会更多。

Emacs, 这个软件对我来说太重要了。它使我真正摆脱了对IDE的依赖,让我从一个拖控件的家伙,真正进入到对代码和软件开发的理解。它改变了我的工作习惯和思维方 式。不过在Emacs23之前,我大概不能接受它对中文的支持度,事实上也是因为这一点,我才拖到这几年学会它。

Unicode,Unicode如果早十年推广该多好!不需要更多的解释了!

曾经我有很多次机会,如果可以快速交付实用的软件,就可以赚一些钱,但是我找不到顺手的组合,甚至出现过两次对我打击比较大的失败。如果早几年接触Drupal和SQLite多好!我想写这个专题,正是因为刚才作饭的时候想起了SQLite,这是一个伟大的小东西!

SQLAlchemy,作为一个数据库编程工具,SQLAlchemy还不够完美,但是我再没有用过比它好的了!早年我不该相信“SQLAlchemy笨重复杂,难学难用"的谣传。

各种VCS,作为一个IT工程师,我应该一入行就学会它们中至少一个的使用,但是一直到05年我才有机会去学习和使用CVS,甚至我身边的同事对VCS的兴趣都很小,有很长时间只有我自己去尝试SVN和CVS的使用。真是个悲剧。

2010年1月6日星期三

Java Play! 学习体验

Java平台上有大量优秀的资源,但是其基础Web框架标准J2EE非常沉重复杂,严重 影响了小团队使用Java技术实现快速开发。而 Java Play!( http://www.playframework.org/ ) 有力提升了Java开发的敏捷能力。

这几天我一直在下班时间学习这个框架。总的来说,它非常的易学易懂,而且架构分层很接近ROR的模型(或者,对于我,很接近Web2py)。其架构设计非常清晰易懂。另外,使用中我体会到的几点优点如下:

- 在线热开发,不必考虑“Web-app”之类的部署问题,可以在命令行方便的建立和启动项目站点进行开发,源码保存后自动热编译更新,这一点比 Web2py好多了。
- 框架驱动模式合理,几乎不用操心接口继承、注入、AOP什么的,也不需要写XML 配置文件,最多为特定功能的结构进行标记。
- 文档翔实,质量高。这是在任何一个Python框架中都没有达到的水准,包括 Django和ZOPE。甚至就算ROR我觉得与之文档相比也有相当差距。仅 Tutorial一项就比web2py所有文档加一起的质和量都好很多了。
- 结构透明,无魔术。可以方便的使用任何开发工具进行开发,不依赖于某个 IDE,我是用的emacs。
- route 配置非常简单,纯文本,每个配置一行完成
- 模板功能丰富,特别是URL生成,非常智能。
- 有丰富完整和强大的测试支持,从基础的Java UnitTest到前端页面的“硒”测试,还允许用YAML编写测试数据环境,注入到测试或开发环境使用。
- 提供了CRUD、图片验证码等功能支持。

说了这么多好的,再说说我认为不足的:
- 限于Java语言,它再怎么智能、动态,也是有限的,Java语法不允许的,它不会变魔术。比如SQLAlchemy的动态记录类型,这个在Play的 JPA里,如果不反射的的 话,应该是没办法的。
- 模板功能很丰富,但是标记稍有些烦琐,这个不算大问题。
- 结构比J2EE/EJB简化了,自然也就有简化的代价,估计再像传统方式那样集合大 团队作战不太容易,例如模型层想做多层的代理转发是不行的。但是另一方面说, 肯定也比过去节省人力,开发效率高。
- 还没找到有没有XMLRPC等服务的提供方式,如果真的没有,就需要自己弄一个嵌进去了。

Play 一个有趣的地方是大量使用动态语言技术进行混合开发,框架里有不少 Python(jython?)和groovy代码。

在以下两个方面,Play可能会对有贡献:

一些Java成熟的技术和资源,如Flash、商业应用模型,可以通过这个平台引入 一些高性能要求的应用,目前测试结果Play好过Django等框架。

Play是我至今遇到最易学易用的Java框架,首次将Java Web开发的门槛降到了 ROR、Django、Web2py这个层次。以前我们难以引入的一些Java资源,现在有希望了。