舟山自驾游[多图]

一、舟山跨海大桥组图

 

二、舟山喜来登绿城酒店

三、大青山自驾游线路

四、老友强海鲜面

http://www.dianping.com/shop/2063446

 

五、回程时的蓝天

. . . → Read More: 舟山自驾游[多图]

RubyConfChina 2010演讲视频放出

. . . → Read More: RubyConfChina 2010演讲视频放出

Ruby Conf China演讲PPT放出

Ruby,no sql and tokyocabinet
View more presentations from . . . → Read More: Ruby Conf China演讲PPT放出

云计算编程大赛——平台级开发的挑战!

当今的IT业界,最火的词,只怕就是“云计算”了吧。很多人对于流行热门的词汇, 往往不屑一顾,称之为buzzword。不过,图灵出版社&CSDN的主编刘江先生,在2010年第五期的《程序员》杂志卷首语中,开宗明义的指出:“在IT技术发展的历程中,buzzword建立奇功的例子屡见不鲜。”

而“云计算”,则是新一轮IT技术大发展的标志性词汇。在云计算的大旗下,汇集了众多的技术分支:并行计算(Parallel Computing)、分布式计算(Distributed Computing)、虚拟化(Virtualization)、效用计算(Utility Computing)、IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等等。

在这样的技术大潮之下,有一个方向应该被称之为“云计算”的正宗!“任何一段代码,都可以被分配到任何一台电脑上执行,巨量的、繁复的计算与执行任务,能够被透明的、高效的、均匀的分配到海量的计算资源上执行,充分利用计算机群的计算能力。” . . . → Read More: 云计算编程大赛——平台级开发的挑战!

TCDatabase介绍(3)

四、存储数据结构
1、TCT的存储数据结构

TC的不同的数据类型,有不同的数据存储结构。这里主要介绍TC的Table类型的存储结构。

每个TC的Table,起码有一个*.tct文件。这个tct,是在hash数据库的基础上改进而来的。下面转贴几张张宴的PPT里的图。

TCT的改进,就是在Hash的Key-Value的Value部分,动了一些手脚,将多个字段打成一个大包,都存在一个Value里去了。

另外,TCTDB,有可能会有一个*.tct.idx文件,这个idx,是一个B+Tree结构,将一个table中的各个需要建立索引的字段数据,在TCBDB中建立索引。

TCBDB的结构图如下:

在idx文件里,则是将value与key反过来存放。

2、TCDatabase的存储数据结构

为了解决之前提到过的TCTDB存在的问题,我们设想的TCDatabase的结构,将是这样的:

1、表结构(data.tcb.cfg) TCHDB table_name1 => {column1=>string,column2=>int} table_name1_count => 10 table_name1_index => {column1,column2} table_name2 => {column1=>string,column2=>int} table_name2_count => 10 table_name2_index => {column1,column2} 2、记录集(data.tcb)  TCBDB . . . → Read More: TCDatabase介绍(3)

TCDatabase介绍(2)

三、TokyoTyrant的网络协议
1、简单介绍

介绍这个,其实价值不大,因为详细的文档都在那里呢:http://1978th.net/tokyotyrant/spex.html#protocol

不过,还是要说一下,因为我对TT的协议,颇有些不满。

TT的协议,各位如果仔细看,就会发现,这是一个典型的未经重构的,临时拼凑起来的协议。最初的TT,只考虑了基本的put、putkeep、putcat、out、get、mget等等命令,每个命令都以0xC8开头,然后再加上一个16位二进制数。

put          0×10

putkeep   0×11

putcat      0×12

putshl      0×13

putnr       0×18

out          0×20

get          0×30

mget       0×31

……

但是,他还有一个misc命令,所有与Table数据类相关的命令,都包含在misc里面,misc的格式是这样的:

[magic:2][nsiz:4][opts:4][rnum:4][nbuf:*][{[asiz:4][abuf:*]}:*]

magic:  0xC8 0×90

nsiz:     name的长度

opts:    option参数

rnum:   后续参数的个数

nbuf:    name

asiz与abuf交替出现,表示每一个参数

因此,我们针对RDBTBL的操作,最终都会调用misc命令。

rdb = RDB::new

rdb.open(“localhost”, 3900)

rdb.put(“foo”, “hop”)

#发出0xC8 0×10 0×0003 0×0003  “foo”    “hop”

#      magiccode ksiz      vsiz       kbuf*   vbuf*

rdb = RDBTBL::new

rdb.open(“localhost”,3900)

rdb.put(“foo”,{“hop”=>”value”})

#发出0xC8 0×90 0×0003 0×0000  0×0003  “put”    0×0003 “foo”     0×0003 “hop”    0×0005 “value”

magiccode nsiz      opts      rnum      nbuf*  asiz1    abuf1*  asiz2    abuf2*  asiz3    abuf3*

看上去非常类似的代码,发出的网络数据流,却完全不同。

2、misc的问题

TT的协议中,最麻烦的,就是这个misc命令,效率最低的,也是这个misc命令,Table型数据,一共支持10个不同的命令,却全部被堆到一个misc里来完成了。

按照某种合理的逻辑,这些命令,应该跟正常的其他命令类似,各自分配到自己的magic code,各自有自己的命令格式和定义,而不是像现在这个样子。

即使是这个misc本身,也非常糟糕,将key与value,放到一个数组里,而且整个数组也没有一个总的长度,使得解析也变得效率低下了。

目前的TCDatabase,因为是在TT的skeleton基础上开发,因此接收的命令与TT完全一致。这当然降低了开发的难度。但是,要想进一步改善TT,或者说要想做出一个TCDatabase,抛弃现有的二进制协议,另起炉灶,应该是一个必然的选择。

3、TCDatabase的协议设想

这个是一个初步的设想,还需要跟riceball详细讨论,才能确定下来:

每个命令一个不同的magic code
[key_size] 如果需要key作为参数的话
[key_buf*] 如果需要key作为参数的话
[opts]        . . . → Read More: TCDatabase介绍(2)

TCDatabase介绍(1)

TCDatabase,是我在创新院的同事,riceball的一个开源项目。http://code.google.com/p/tcdatabase

他自己也写了两篇blog作介绍。tcdatabase(一) tcdatabase(二)

不过我总感觉写得太像干巴巴的技术文档了,所以我自告奋勇的来帮他另写一个介绍,以下是第一部分:

 

一、TokyoCabinet、TokyoTyrant简介

我们常说的TC/TT,是TokyoCabinet/TokyoTyrant的简称。这两个开源项目,都是由日本人平林幹雄开发的。(Mikio Hirabayashi’s Homepage twitter: @hirabayashiM)

1、TokyoCabinet

TC,是一个Key-Value的数据库library,你可以通过C语言程序来访问TC提供的各种函数,也可以使用其他各种语言绑定,例如perl、ruby、java、lua。

TC对外的表现形式,无非是一组put/get方法,从内部实现来说,TC一共支持6种不同的数据结构,包括hash数据库,B+树数据库,定长数据库、表格数据库、内存hash数据库以及内存B+树数据库。

以ruby语言举例:

hdb = HDB::new

hdb.open("casket.tch", HDB::OWRITER | HDB::OCREAT)

hdb.put("foo", "hop")

value = hdb.get("foo")

hdb.close

这样就可以创建一个名为casket.tch的Hash数据库文件,并进行put/get的操作。

也可以通过ADB(Abstract database),以完全相同的API,创建并访问不同的数据库。

adb = ADB::new

adb.open(name) 

adb.close

其中,如果name为*,则创建一个内存hash数据库;name为+,则是内存B+树数据库;文件名为*.tch、*.tcb、*.tcf、*.tct则分别对应于hash、B+Tree、fixed-length和table类型。

2、TokyoTyrant

至于TT,则是在TC基础上实现的一个server。TT接受来自socket连接的各种请求,作为一个网络服务而存在着。通常我们会这样来启动TT。

ttserver –port 3900 /ttdata/casket.tch

这样,在3900端口,就启动了一个数据库服务,这个数据库的数据,就保存在/ttdata/casket.tch中。

而在client端,也多种不同的语言实现,例如ruby的代码会写成这样:

rdb = RDB::new

rdb.open("localhost", 3900)

rdb.put("foo", "hop")

value = rdb.get("foo")

rdb.close

对于table类型的数据库,则需要创建一个RDBTBL的对象实例,因为它提供了更多的一些访问API,例如:

rdb = RDBTBL::new

rdb.open("localhost", 1978)

rdb.put("1", { "name" => "mikio", "age" => "30", "lang" => "ja,en,c" })

qry = RDBQRY::new(rdb)

qry = RDBQRY::new(rdb)

qry.addcond("age", RDBQRY::QCNUMGE, "20")

qry.addcond("lang", RDBQRY::QCSTROR, "ja,en")

qry.setorder("name", RDBQRY::QOSTRASC)

qry.setlimit(10)

res = qry.search

res.each . . . → Read More: TCDatabase介绍(1)

《格子客》4月19日14:00有限名额封测

这是我进入盛大创新院以后参与的第一个大项目,经过艰苦而紧张的开发之后,终于。。。即将。。。迎来对外封测的一天!

《格子客》(http://gzk.sdo.com)将于4月19日14:00迎来首次有限名额封测!封测邀请码共2500枚,封测期间将送出2916个实物奖品!

你可以找我要邀请码,目前我手头上只有50枚,当然,如果群众过于踊跃,我会再去找他们要更多…谢谢!

有意者,可以给我发邮件,站内留言,QQ,短信,twitter,回复blog等等,先到先得!

《格子客》是一款通过简单的翻格子进行的社交产品,每次翻格子,都会有不同的体验,可以翻出快乐,翻出惊喜,翻出知识,翻出梦想,翻出缘份!详情请登录 http://gzk.sdo.com。 格子客的blog地址:http://blog.sina.com.cn/sdogezike

电子产品

富士数码相机
多普达智能手机
戴尔宽屏液晶显示器
艾利和MP4播放器

Apple Ipod Touch
三洋闪存摄照一体机
海尔洗衣机
格兰仕多功能电烤箱

PS3(家用游戏机)
诺基亚 X3
PSP3000
飞利浦微型影院

美容用品

雅诗兰黛倾城礼盒
迪奥焕白亮采精华
原宿娃娃香水套装
佰草集美白超值套装

生活用品

太空记忆舒压枕
魔法变色杯-听老婆话
轮胎形CD包
CRAZY . . . → Read More: 《格子客》4月19日14:00有限名额封测

上当买了一本烂书!

. . . → Read More: 上当买了一本烂书!

聊聊儒家传统的道德观

一、缘起:

10多年前的时候,我经常混迹在各大宗教信仰论坛。对各种宗教、哲学都感兴趣,却并无自己的定见。2000年的时候,我在海外的一个“宗教论坛”,与羽箭、GTI等朋友有一个大型的对话,是关于理性、善、恶之类的。后来基甸兄还写了一篇评论,大大的夸奖了我一番。

评宗坛非基督徒关于“理性”与“善”的讨论(基甸)
【参考】宗坛非基督徒关于“理性”的讨论(蝶之仙、GTI、心造、羽箭、齐飞)
【参考】宗坛非基督徒关于“善”的讨论(蝶之仙、羽箭、GTI)

嗯,当年,我的昵称是“蝶之仙”。以上地址都需要翻墙才能看到。各位如果感兴趣的,可以自己努力一下。当时的羽箭兄,是一个比较偏向于无神论与儒家的信徒。而我基本上是一个追问者,没有自己的明确观点,一味的去寻找对方的逻辑破绽。这样的讨论,对我而言的确非常过瘾,当然,羽箭兄肯定是不好受的,哈哈。

后来,大概在02~03年的时候,由于深受钱穆先生的影响,我基本上明确的转向儒家。然后写下了《我的信仰地图》一文。后来还写了一篇《儒家的那些道理》,但是,当年我那么咄咄逼人的追问羽箭兄的问题,其实是直指儒家道德观的,因此我始终还欠羽箭兄,也欠自己一个回复,以我现在的立场,该如何来辩驳呢?

二、近因:

在这么多年来,我时常会翻出CCIM的存档,自己读了一遍又一遍,设想自己该如何回答当年的质问,但是始终不知该如何来写。知道最近看到了一个视频《哈佛:孰对孰错》,才让我找到了入手的话题。 . . . → Read More: 聊聊儒家传统的道德观