Skip to content

转:一辈子

中小学成绩一直很出色,但也不是惊天动地的神童
考上一所不错的大学,但也不是清华北大
进来后发现身边的人都挺挫,其实自己也不过这么回事
毕了业,进了一所还算不错的单位,但也不是什么nb企业
拿着固定的收入,住着租的房子或者公司宿舍
努力个三五年工资涨到五六千,nb点的八千上万?
攒钱贷款买了房,娶了妻,在钢筋混凝土的都市的一个角落里有了一个自己的洞
若干年后买了一款大众的不能再大众的大众车
原来,这就是自己的未来
二十年的梦揭开就是这个样子

像以前一样,你每天还会上网
你发现你不是新闻网站首页的那些风云人物,你没有能力影响一个时代,甚至一群人
那些曾经不屑与不齿的时尚女郎依旧只能在网上点一点,或者右键另存为
还有童年时代就开始喜欢的名车跑车,依旧只能看看
也没有那样一个闪耀的舞台,舞台下是为你欢呼的追随者
你曾坚信你会成为国镓栋梁,甚至在一个危急时刻为国捐躯,可你只能自嘲报国无门
你曾以为自己会走遍世界,眼看奔3了却还没出过国,甚至没爬过泰山登过长城,没有见过黄河
你以为终会有一个赏识你的女孩跟你有一场轰轰烈烈的爱情,女孩却比你想的实际和虚荣
那些小时候小心翼翼保留下来的书信、磁带和玩具,原来只是扔在一个角落,却怎么也记不起珍藏的初衷
爱迪生莎士比亚依旧是童话一样的存在,虽然你曾幻想自己一定会成为一个大发明家或者大文学家,你的聪明才智会让世人惊叹
于是每年到诺奖颁布的时候,你总会有点莫名的失落,虽然你也觉得这是多么可笑
你听见梦想破碎的声音,却无从拾起。你依旧还在等待,却不知道等的是什么

世界改变了我们 能改变世界的却不是我们

转:免费电子书列表

原帖的地址在stackoverflow.com

List of Free Programming books (compiled):

Graphics Programming

Language Agnostic

ASP.NET MVC:

Assembly Language

Bash

C/C++

C#

  • See .NET below

Django

Forth

Git

Haskell

Java

JavaScript

Linux

Lisp

Lua

Maven

Mercurial

.NET (C#)

NoSQL

Objective-C

Parrot / Perl 6

Perl

PHP

PowerShell

Prolog

PostgreSQL

Python

Ruby

Scala

Scheme

SmallTalk

Subversion

*SQL (Implementation agnostic) *

Vim

学习:一个并发的Cache

public class Memoizer implements Computable {
    private final ConcurrentMap> cache
        = new ConcurrentHashMap>();
    private final Computable c;

    public Memoizer(Computable c) { this.c = c; }

    public V compute(final A arg) throws InterruptedException {
        while (true) {
            Future f = cache.get(arg);
            if (f == null) {
                Callable eval = new Callable() {
                    public V call() throws InterruptedException {
                        return c.compute(arg);
                    }
                };
                FutureTask ft = new FutureTask(eval);
                f = cache.putIfAbsent(arg, ft); //先把FutureTask放进去再说
                if (f == null) { f = ft; ft.run(); } //开始计算
            }
            try {
                return f.get();
            } catch (CancellationException e) {
                cache.remove(arg, f);
            } catch (ExecutionException e) {
                throw launderThrowable(e.getCause());
            }
        }
    }
}

Continue reading ›

转:netty 中文手册

原文地址:http://docs.jboss.org/netty/3.1/guide/html_single/

The Netty Project 3.1 User Guide
The Proven Approach to Rapid Network Application Development

3.1.5.GA, r1772

序言
1. 问题
2. 方案 

第一章. 开始
1.1. 开始之前
1.2. 抛弃协议服务
1.3. 查看接收到的数据
1.4. 响应协议服务
1.5. 时间协议服务
1.6. 时间协议服务客户端 
1.7. 流数据的传输处理   
1.7.1. Socket Buffer的缺陷  
1.7.2. 第一种方案 
1.7.3. 第二种方案
1.8. 使用POJO代替ChannelBuffer
1.9. 关闭你的应用
1.10. 总述 

第二章. 架构总览
2.1. 丰富的缓冲实现 
2.2. 统一的异步 I/O API 
2.3. 基于拦截链模式的事件模型 
2.4. 适用快速开发的高级组件
2.4.1. Codec框架
2.4.2. SSL / TLS 支持 
2.4.3. HTTP实现
2.4.4. Google Protocol Buffer 整合 
2.5. 总述 

序言
本指南对Netty 进行了介绍并指出其意义所在。

1. 问题
现在,我们使用适合一般用途的应用或组件来和彼此通信。例如,我们常常使用一个HTTP客户端从远程服务器获取信息或者通过web services进行远程方法的调用。

然而,一个适合普通目的的协议或其实现并不具备其规模上的扩展性。例如,我们无法使用一个普通的HTTP服务器进行大型文件,电邮信息的交互,或者处理金 融信息和多人游戏数据那种要求准实时消息传递的应用场景。因此,这些都要求使用一个适用于特殊目的并经过高度优化的协议实现。例如,你可能想要实现一个对 基于AJAX的聊天应用,媒体流或大文件传输进行过特殊优化的HTTP服务器。你甚至可能想去设计和实现一个全新的,特定于你的需求的通信协议。

另一种无法避免的场景是你可能不得不使用一种专有的协议和原有系统交互。在这种情况下,你需要考虑的是如何能够快速的开发出这个协议的实现并且同时还没有牺牲最终应用的性能和稳定性。

2. 方案
Netty 是一个异步的,事件驱动的网络编程框架和工具,使用Netty 可以快速开发出可维护的,高性能、高扩展能力的协议服务及其客户端应用。

也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。

“快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸收了多种协议的实现经验,这些协议包括FTP,SMPT,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。

一些用户可能找到了某些同样声称具有这些特性的编程框架,因此你们可能想问Netty 又有什么不一样的地方。这个问题的答案是Netty 项目的设计哲学。从创立之初,无论是在API还是在其实现上Netty 都致力于为你提供最为舒适的使用体验。虽然这并不是显而易见的,但你终将会认识到这种设计哲学将令你在阅读本指南和使用Netty 时变得更加得轻松和容易。

Continue reading ›

转:用正则表达式检查素数

一般来说,我们会使用正规表达式来做字符串匹配,今天在网上浏览的时候,看到了有人用正则表达式来检查一个数字是否为素数(质数),让我非常感兴趣,这个正则表达式如下所示:

/^1?$|^(11+?)\1+$/

要使用这个正规则表达式,你需要把自然数转成多个1的字符串,如:2 要写成 “11”, 3 要写成 “111”, 17 要写成“11111111111111111”,这种工作使用一些脚本语言可以轻松的完成。

一开始我对这个表达式持怀疑态度,但仔细研究了一下这个表达式,发现是非常合理的,下面,让我带你来细细剖析一下是这个表达式的工作原理。

首先,我们看到这个表达式中有“|”,也就是说这个表达式可以分成两个部分:/^1?$/ 和 /^(11+?)\1+$/

* 第一部分:/^1?$/, 这个部分相信不用我多说了,其表示匹配“非空串”以及字串中不只一个“1”的字符串。
* 第二部分:/^(11+?)\1+$/,这个部分是整个表达式的关键部分。其可以分成两个部分,(11+?) 和\1+$,前半部很简单了,匹配以“11”开头的并重复0或n个1的字符串,后面的部分意思是把前半部分作为一个字串去匹配还剩下的字符串1次或多次(这句话的意思是——剩余的字串的1的个数要是前面字串1个数的整数倍)。

通过上面的分析,我们知道,第二部分是最重要的,对于第二部分,举几个例子,

示例一:判断自然数8。我们可以知道,8转成我们的格式就是“11111111”,对于(11+?),其匹配了“11”,于是还剩下“111111”,而\1+$正好匹配了剩下的“111111”,因为,“11”这个模式在“111111”出现了三次,符合模式匹配,返回true。取反(^),所以,得到false,于是这个数不是质数。

示例二:判断自然数11。转成我们需要的格式是“11111111111”(十一个1),对于(11+?),其匹配了“11”(前两个1),还剩下“111111111”(九个1),而\1+$无法为“11”匹配那“九个 1”,因为“11”这个模式并没有在“九个1”这个串中正好出现N次。于是,我们的正则表达式引擎会尝试下一种方法,先匹配“111”(前三个1),然后把“111”作为模式去匹配剩下的“11111111”(八个1),很明显,那“八个1”并没有匹配“三个1”多次。所以,引擎会继续向下尝试……直至返回false。

通过示例二,我们可以得到这样的等价数算算法,正则表达式会匹配这若干个1中有没有出现“二个1”的整数倍,“三个1”的整数倍,“四个1”的整数倍……,而,这正好是我们需要的算素数的算法。现在大家明白了吧。

下面,我们用perl来使用这个正规则表达式不停地输出素数:(关于perl的语法我就不多说了)

perl -e’$|++;(1 x$_)!~/^1?$|^(11+?)\1+$/&&print”$_ “while ++$_’

另外,让我们来举一反三,根据上述的这种方法,我们甚至可以用正则表达式来求证某方式是否有解,如:

* 二元方程:17x + 12y = 51 判断其是否有解的正则表达式是:^(.*)\1{16}(.*)\2{11}$
* 三元方程:11x + 2y + 5z = 115 判断其是否有解的正则表达式是:^(.*)\1{10}(.*)\2{1}(.*)\3{4}$

大家不妨自己做做练习,为什么上述的两个正则表达式可以判断方程是否有解。如果无法参透其中的奥妙的话,你可以读读这篇英文文章

转自 cool shell : http://coolshell.cn/?p=2704

转:感悟成长

1.以前我不住校,高三每天6点半骑自行车上学,23点放学骑回家,一天17个小时。放学后还不想回家,大半夜闲逛。
现在我必须住校,每年初春新 秋坐火车上学,仲夏大寒卧铺回家,算一算,300天。
于是,我知道什么叫想 家。
2.大学前我和同桌上课拉过手,掐过腿。现在我的旁边每节课是不同的面孔,打了招呼,下课却忘记了这张脸。
于是,我听懂了《同桌的你》。
3.父母送我去大学报到,临走的时候, 我妈来和我告别,我问我爸呢,我妈说“你爸怕你哭,就没来。”
大二暑假我回家,我妈无意中说“其实你爸当时就在马路对面。你转身进学校,你爸就哭 了。”
于是,我懂了,在成长面前,爸爸也是脆弱的。
4. 大学报到,我父母陪同,铺床、买用品。我有个室友,自己自己在那边铺床,后来我才知道他是自己来报到的,我很佩服他,也很佩服父母这么放得开孩子,自愧不 如。
又一次吃饭,我和这个室友说,我很佩服你自己来学校。他说:“你羡慕我独立,我羡慕你身边很温暖。”
然后,我懂得,当我看别人的时候,别人也在看我,为何我要忽略自己?
5. 大学生活的第一个晚上,我一个室友从箱子里拿出一张卫生巾,炫耀这是他第一次到她女友家过夜偷出来的纪念,脸上还荡漾着幸福的笑容。谁知到过了2个礼拜, 分了。
大一结束的时候换寝室,暖瓶撒了一桌子水。用光了纸巾,那同学从抽屉拿出那张卫生巾。。。吸水效果很好。
于是,我懂了,该放下的就放下,有些所谓的纪念,也就那么一点用处。
6. 刚上大一时候,室友在卫生巾室友怂恿下果断踹了在外地的现任女友,坐了2个小时地铁去松江向另一女生表白,无奈惨痛被拒。大学过半,至今仍孤身一人。
于是,我懂了,在没有确定下家之前,不要放了上家。
7.大一的时候有 一次拉肚子,给妈妈打电话不停的诉苦。
大二的时候我一个室友打球咬掉了一块舌头,缝上了有一段不能说话。后来我问他你妈知道么,他说没告诉,怕她 担心。
于是,我懂了,我的痛哭会被距离放大,千里之外,妈妈比我更痛苦。
8.大一下学期的时候给妈妈打电话,有段时间她没说几句就放了电话,她说她在打麻将。
寒假回家的时候我爸告诉我,其实妈妈那段时间正在 住院,半个月里,每次接我电话之前,她就叫病房里的人不要说话,也不敢和我聊很长时间,怕露馅。
于是,我懂得,有时候隐瞒,也是一种爱。
9.大学之前,自己只管学习, 脏衣服一仍有人洗,饿了张嘴有饭吃。
那时候我还嫌衣服少,饭不好吃。
上了大学,看着床底下塞得一坨坨的脏衣服,捶了捶耀只能继续一件一件 的洗。
盯着食堂的饭菜,叹了叹气,只能硬着头皮放下咽。
于是,懂 了,以为平平常常的东西,等自己完全承担了,就觉得不那么容易了。
10.高中时候上课偷摸看个青年文摘、当代歌坛,惬意的不得 了。
一边看着小说,一遍提防着老师,看的也不亦乐乎。
上了大学,偶然一次经过报亭,买了本青年文摘,给了老板三块,老板说三块五。我问什 么时候涨了得,老板说涨了有一年多了。我才发现,大学之后,再没买过青年文摘。
于是,我懂得,是不是有些老友和快乐我们慢慢忘记了?
11.学校开学很早,基本过年之后过不了十五就要上学。
今 年正月十五,和奶奶视频。
我说:奶奶,你看你大孙子都长这么多胡子了。
我不知奶奶听见没有,她就在那边笑,我在这边却哭了。
于是,我懂得,时间和距离向前延伸,最终会失去些什么,所以要珍惜。
12. 刚上大学的时候,我觉得自己是个异类:
晚上在走廊上校内,路人甲乙经过,大声说校内真无聊,然后我就赶紧把本合上了;
我在自习室吃茶 叶蛋,路人甲乙讨论,茶叶蛋真垃圾,又没营养还有毒,我把半个蛋收到塑料袋里了;
我用电脑上QQ,路人甲乙又讨论,QQ真山寨,我习惯MSN,我 脸红的把QQ关了,说实话MSN咋用我都不知道;
我拿着4级单词背的劲劲的,路人甲乙在旁边议论我觉得GRE和TOFUL高分还是有规律的,我 无颜的收起了英语书;
这个世界太多路人了,所以我更习惯走胡同,因为人少,但是胡同越走越窄,往往还是死胡同,所以只能靠边走马路,把中间让给 浩浩荡荡的路人,但是在路边经常掉进下水道里,或者侥幸逃过井盖却不留神撞在了树上。
后来,看看自己,虽然没有什么大鸣大放,但我的大学生活同样 让“路人”们羡慕。
于是,我懂了,好好走自己的路,一个劲的看别人,弄不好 就摔了。还是仔细认真的看着自己的路。
13.以前为了赖一会床,相处各种理由请假,拉肚子、鼻子出血、感冒。。。但请假条落款都是 我本人的名字。
上了大学之后不用理由,想睡就睡,点名让别人顶替喊一声,弄到最后,把自己的名字都弄丢了。
于是,明白了,担当啊,越来越不敢。
14.高中的时候熬不住了就想再坚 持一下,到时候考个大学上上就得了!
大学了,看着自己的专业,看看以前的同学出国的出国,奖学金的奖学金,然后开始骂自己,当初怎么不再多坚持一 下。
于是,懂得了,人的确有无限的潜力,如果以现状看从前。
15. 上大学前生活在父母的臂膀下,看病可以走关系找好医生,上学可以走后门进好班,去哪里父母和朋友打个照顾就能得到照顾。
大学后父母罩不到我,去哪 里不仅要排队,还要被强行插队。
于是,就懂了,常常自以为是,看不起父母, 其实自己什么都不是。
16.以前学习,一学期一本书,然后还要好好保管,高考前还要重新看。书里的内容多年后翻看,还会有回忆。
大 学之后,一学期一本书,用过之后就卖掉,想想自己学过的书是什么样封面,没有什么印象。准备考研重新看的时候,感觉怎么都是新书。
于是,就懂得了,有时候,重复让人踏实,新鲜反而让人无感。
17.硬着头 皮进大学学经济,虽然在别人看来我这个学校的经济有多么多么牛,其实冷暖自知。刚上大学的时候我想出国,成绩不行想转专业,转专业未果准备考公务员,公务 员考试越来越激烈越来越黑于是准备CPA。
开始我想环游世界,后来想赚大钱,后来想有稳定的工作,再后来希望顺利找到好工作。我的梦想在越来越萎 缩,却被认为越来越实际,务实。
于是,我懂了,在现实和梦想之间,我们都是 从梦想趋向于现实的以至于越来越偏离,等现实满足了,再看梦想,已经远的看不到了。
18.大学之前,谈恋爱要偷偷摸摸的,遮遮掩 掩,不能见光。
大学之后,单身的要偷偷摸摸,遮遮掩掩,不能见光。
于 是,我懂了,有时候,合理不合理只是一线之隔。
19.高中的时候给老师起外号,私下里同学都这么叫。
大学了,想给老师起外 号,却发现根本不知道老师大号。
于是,懂了,有些幼稚的游戏,已经玩不下去 了。
20.刚上初中那年,twins出道,青春可爱,不少同学是他们的粉丝。
高三那年,阿娇艳照门,偷偷摸摸各种搜集艳照 互相传阅,纯洁不再,难以相信。
大二这年,阿sa宣布离婚,镜头前流泪,不舍婚姻。
于是,懂了,在成长的,不只我一个人。
21.初二的时候,张国荣从高楼跳下。
冬天,梅艳芳也离去。
大 一下学期某个英语课,用手机上网,知道了从小听到大的新闻联播再不会有罗京的声音。
于是,懂得了,长大了,不知道有多少人要离我们而去。
22.高中的时候能跑能跳都得憋着,能说会唱都得忍着,高考只 考语数外史地政理化生。大家都是同一笼包子,看上去一样。
大学里,玩的就是素质,有特长就能独当一面,虽然近来的时候都是包子,但就看哪个包子褶 儿多,哪个包子长得像汉堡,拼个性。
于是,懂了,就算自己哪哪都短,关键时 刻还是得有一特长。
23.高中的时候只能穿校服,走到哪年龄大的就叫我小弟,年龄小的就叫我哥哥。
大学没校服,地铁上半 老徐娘都管我叫大哥,初中生还喊我叔叔,还得硬着头皮答应。
于是,懂了,实 质上,我们早就不是孩子了。
24.高中时候看只看本地天气预报。
大学了看两个天气预报除了所在的城市,总也不忘看看家里 的天气。
于是,懂得了,走得再远,还是挂念那个不怎么繁华的家乡。

大 学就是学会面对爸妈一点点老了,我们长大了,以为是somebody的自己变成了nobody也可以接受了。
大一,时间好多,多到不知道怎么安排
大 二,烦恼好多,多到不知道怎么处理
大三,事情好多,多到不知道怎么应付
大四,纠结好多,多到不知道怎么放下
转眼间,大学毕业,参加工作
回首,发现回忆很多,
再回首,发现失落更多~~~~

转:NoSQL生态系统

By Jonathan Ellis,系统架构师, Translated by Jametong

空前的数据量正在驱动商业寻找传统关系型数据库的替代方案,它已经为我们服务30多年了(今年5月份ACM刚刚给关系型数据庆祝40岁生日).总体来讲,这些替代方案就是目前知名的“NoSQL数据库.”

关系型数据库的基本问题是无法处理许多现代的工作负载.有三个具体的问题领域:向外扩展(Scale out)类似于Digg(3TB的绿色徽章 数据)或Facebook(50T 的收件箱搜索数据)或Ebay(总共2PB的数据)的数据集,单机性能限制以及僵化的概要设计.

商业上(包含Rackspace Cloud公司)需要寻找新的方式来存储并扩展大规模的数据.我最近写了一 篇关于Cassandra的文章,一个我们投入了资源的非关系型数据库.还有另外一些正在运作中的非关系型数据库,它们汇总在一起被我们称 为”NoSQL运动”.

“NoSQL”这个术语实际上是由一个Rackspace 的员工Eric Evans最先提出的,当时来自Last.fm网站的Johan Oskarsson提议组织一次开源分布式数据库的研讨会. 这个名称与概念就一起流行了起来.

有些人反对NoSQL这个说法,因为它听起来像是仅仅表明了我们不做什么,而不是我们在做什么. 事实确实是这样,我也基本同意此说法,但是这个术语仍然有其价值,因为当关系型数据库是你所知道的唯一工具时,每个问题看起来都像个拇指(俗语, 如果你手里有一个锤子,你看到什么都是钉子,译者补充).NoSQL这个术语起码让 人们知道还有其他的选项可供选择.但是,当关系型数据库是解决问题的最佳工具时,我们并不是反关系型数据库者;它的涵义应该是“不仅仅有SQL(Not Only SQL)”而不是“不再有SQL(No SQL at all)”.

有关NoSQL名称的一个真实的忧虑是,它是如此大的一个概念,以致于差异巨大的设计都可以涵盖其中.如果在讨论各种产品时没有搞清楚这一点,就会 导致概念混乱.因此,我建议大家沿着下面三个维度来思考这些数据库选项: 可伸缩性(scalability)数 据模型与查询模型(data and query model)以及持久化设计(persistence design).

我选择了10种NoSQL数据库作为示例.这不是一份详尽的清单,但是这里讨论的概念对于评估其他的NoSQL数据库也至关重要.

可伸缩性(Scalability)

通过使用复制, 就可以轻易扩展读的规模,因此,每当我在此文中谈到规模伸缩(scaling),都是表示通过自动分区将数据分布到多台机器以扩展写的规模.我们将做这种 事情的系统称为“分布式数据库”.它们包括CassandraHBaseRiakScalarisVoldemort以及其他很多类似的系统.如果你的写容量或写数 据大小已经无法在一台机器上进行处理,如果你不想自己手工来管理分区的话,这些就是你的唯一选项了.(你 不会这么做吧?)

人们使用分布式数据库主要关注两件事情: 1) 是否支持多个数据中心以及2) 能否在对应用透明的前提下往正在运行的集群中添加新机器的能力.

非分布式NoSQL数据库包括CouchDBMongoDBNeo4jRedis以及Tokyo Cabinet.它们可作为分布式系统的持久层; MongoDB提供了受限制的数据分片(Sharding)功能,CouchDB也有一个独立的Lounge项目来支持做类似的分片功能,Tokyo Cabinet可用作Voldemort的存储引擎.

数据模型与查询模型

NoSQL数据库之间的数据模型与查询API千差万别.


(相关链接: Thrift, map/reduce views, Thrift, Cursor, Graph, Collection, Nested hashes, get/put, get/put, get/put)

部分重点内容介绍:

Cassandra与HBase共同使用的ColumnFamily模型都是受到Google的Bigtable 论文第2节的启发. (Cassandra丢弃了历史版本,并增加了超级列 (SuperColumn)的概念).在这两个系统中,都有与你之前看到的关系型数据库类似的行/列概念,但是此处的行是稀疏的行:你想要一行有多少列,一行就可 以有多少列,这些列并不需要事先定义好.

键值(Key/value)模型是最简单也最容易实现的模型,但是,如果你仅想对值(Value)的一部分进行查询/更新时,它的效率会比较低.要 想在一个分 布式的键值上,实现更加复杂的结构也会非常困难.

文档数据库实际上是更高级的键/值(Key/Value)数据库,允许在每个键上关联嵌套的值.相对于每次简单地返回整个BLOB(二进制大对象) 来讲,文档数据库支持更高效的查询.

Neo4j拥有一个非常独特的数据模型,它以节点与边的形式在图中存储对象与关系.对于适合这个模型(例如,分层数据)的查询,它的性能可能会达到 其替代选项的1000 倍.

Scalaris的独特之处在于,它可以提供跨越多个键的分布式事务.(关于一致性与可用性的权衡的讨论超出了本文 的范围,但是,在评估分布式系统时,它也是需要记住的一方面.)

持久化设计

关于持久化设计,我的意思是“数据在内部是如何存储的?”

持久化模型可以为我们提供大量关于这些数据库适合处理多大工作负载的信息.

内存数据库非常非常快(单台机器上的Redis可以处理100,000次操作/秒), 但是无法处理超过可用内存的数据集.持久性(Durability,数据不会由于服务器崩溃或停电而丢失)也是个问题; 在两次刷新到磁盘的时间间隔内预期数据丢失量可能非常大.Scalaris是我们此列表中唯一的内存数据库,它通过复制来解决持久性的问题,但是,由于它 不支持跨越多个数据中心,因此,如果遇到类似电源故障一类的问题数据仍将非常脆弱.

在为了持久性写入一个仅可追加的提交日志之后,Memtable与SSTable会缓冲内存中的写操作.在接受了足够多的写操作之后 (Memtable达到一定的阈值),就会对memtable中的数据进行排序,并一次性写入到磁盘,写入的文件就是一个“sstable.” 这样它就可以提供接近于内存处理的性能,因为它不涉及任何检索操作,同时又可以避免纯粹在内存中的方法那样遭遇持久性问题.(在前面引用的 Bigtable论文的第5.3与5.4两节,以及论文日志结构的合并树 (The Log-Structured merge-tree)中对此都有详细的描述)

几乎从有数据库开始,B-树就开始在数据 库中使用了.它们提供健壮的索引支持,但是在旋转磁盘(仍然是目前最经济实用的存储介质)上, 它的性能表现比较差,因为它读写任何内容都会涉及到多次磁盘检索.

CouchDB的仅可做追加操作的 B-树(Append-Only B-tree)是一个比较有趣的变体,它以限 制CouchDB并发写(one write at a time)的代价避免了其检索的开销.

结论

NoSQL运动在2009年取得了爆发性的效果,因为越来越多的企业需要处理大规模的数据.Rackspace Cloud公司很高兴在NoSQL运动扮演了一个较早期的角色,还会持续为Cassandra投入资源并支持与NoSQL East类似的活动.

可以到Google 讨论组找到与NoSQL相关的会议通知与讨论.

转:多啦A梦:大雄,我等你很久了

今天无意中看到五月天唱的一句蛮有诗意的歌词:“如果说最后/宜静不是嫁给了大雄/一生相信的执着/一秒就崩落”,所以我就去百度,看最后宜静最后 是不是嫁给了大雄。宜静最后是嫁给了大雄。然后,又无意中发现动画《机器猫》是有如此感人结局的:

某天,大 雄如往常般,忘了做作业在学校被老师骂,也如往常般被技安、阿福他们欺负,连未来的老婆宜静也将先嫁给别人。总之,对大雄来讲,生活就是一团糟,今天跟昨 天没什么两样。
唯一的变化是,小叮当突然变成植物机器猫。
无论大雄怎么踢、打、骂,小叮当都没有反应。大雄不知道小叮当到底 发生了什么,只伤心地哭了一整晚。可是,无论大雄再伤心透顶,小叮当也只是纹风不动地坐在那里;大雄手伸到口袋里,口袋也毫无动静。
然后大 雄想起抽屉里的时间飞行机,就穿着睡衣去22世纪找小叮当的妹妹小叮铃。小叮铃还没完全听完说明,就被大雄催着坐上飞机飞回20世纪。小叮铃一看她哥哥动 也不动,马上知道是电池用完了。正想换电池时,小叮铃想起一个非常重大的事。没有备用电源……大雄不懂得其中意思,只在一旁催。小叮铃只好问大雄:你愿意 让哥哥跟你的回忆都消失吗?原来旧型的猫机器人的耳朵里,装有备用电源,以便充电时能保持至今为止的记忆。
可是,小叮当没有耳朵!(这是众 所皆知的)

大雄终于了解了事情的困难。
种种回忆在大雄的脑海里奔腾,大雄跟小叮当曾飞到过去、未来,也曾到恐龙世界,海 底世界,更在宇宙打过仗……小叮铃拼命跟大雄解释:若要装新电池,小叮当醒来时会失去一切与大雄曾有过的回忆;若保持现状,记忆不会消失。结果,大雄选择 保持现状。
此时,大雄还是小学六年级。
许多年后,从海外归国的大雄,已长大成人,并就职于某家尖端科技的企业。他身边的新 娘,正是宜静。当年,小叮铃回到22世纪后,大雄只跟身边的人们说,小叮当回到未来的世界去了。时日一久,也就没人再提小叮当的事。不过,小叮当其实一直 被保管在大雄家的壁橱里。
大雄为了修好小叮当,拼命用功读书,然后上国中、高中、大学,成绩逐年变好,最后出国到著名的大学留学。现在,大 雄在他自己的研究室中。他叫来平日严禁其出入研究室的妻子宜静。对她说:你看好,我要按开关了。说完,大雄泪盈于眶。
他就是为了这一刻,苦 学了十几年。为了这一刻,从一个老是忘了做作业、成绩从倒数起算比较快的笨学生,慢慢努力取得今天的成绩……
开关按下后,一阵静寂,久久的 静寂。
终于,小叮当开口了:“大雄,我等你很久了。”

我鼻子差点酸了……

或许每个在多啦A梦的故事中成长起来的孩子,都期待着自己也能有一个属于自己的机器猫,有一个属于自己的百宝袋,都曾经对于竹蜻蜓与任意门编织的世界有着 无尽的向往与期待。可是,每个孩子都一定会长大的。时间在我们身上留下深深的烙印。于是,我们都变了,变得更加冷漠世故,更加贪婪无度,更加虚伪做作,更 加自私势利……曾几何时,那些对于友情的坚定执着、对于爱情的纯真炽热、对于未来的沸腾憧憬,在人性的苍凉中渐渐冷却下来……或许我们需要的不再是机器猫 了,我们需要的仅仅只是百宝袋而已……

故事的结局,或许是大团圆得有些许恶俗,但对于孩子们来说,这个就是能够给他们希望与力量的感 动。而这样的感动,对于我们来说,已经有多久不曾拥有了?或许,以后也都不可能再拥有了吧……

机器猫是属于孩子的,它太过梦幻,亦太过 理想。可是,对不起,我已经不再年少,不再单纯,不再适合梦幻和理想。如果我是大雄,或许我会选择直接让机器猫充电。因为,我已经不可能再成为它记忆中那 个大雄了,我也不可能如同漫画中那般倾心地付出去换取未知的结局了……
对不起,我是现实的,比起回忆,我更在乎现在。

所 以,对不起,请不必等我,我已经回不去了……

—————————————————— 我 想 说——————————————————

我不喜欢最后一段,为什么回不去了?只是不想回去而已。舍不得既得利 益,所以宁愿牺牲曾经的美好。
如果 我已经回不去了

至少 让我在脑海留存一片往昔的碎片

让我的精神 在寂寞的时候 可以回忆

如果 我已经回不去了

至少 让我在心里保有一块净土

让我的灵 魂 在疲倦的时候 可以安眠

翻译:Google VP8 Code 首次深入技术分析

翻译来自:唐福林 博客雨 http://blog.fulin.org/2010/05/vp8_first_in_depth_tech_analysis.html

注1:文章来自:http://x264dev.multimedia.cx/?p=377 ,一个 H264 开发者对 VP8 的深入分析。

注2:在Google翻译基础上试译,不足之处请多包涵,欢迎各种建议和意见

The first in-depth technical analysis of VP8

首次深入技术分析

Back in my original post about Internet video, I made some initial comments on the hope that VP8 would solve the problems of web video by providing a supposed patent-free video format with significantly better compression than the current options of Theora and Dirac.

在我原来写的关于互联网视频的博文中,我曾做了一些初步的设想,希望 VP8提供的免专利费的视频压缩视频格式,能显著的超过当前的选择 Theora 和 Dirac,解决当前互联网视频的难题。

Fortunately, it seems I was able to acquire access to the VP8 spec, software, and source a good few days before the official release and so was able to perform a detailed technical analysis in time for the official release.

幸运的是,在官方正式发布前几天,我似乎能够获得VP8规范,软件和源代码,因此能够在正式发布前对它做一个详细的技术分析。

The questions I will try to answer here are:

我会在这里尽量回答这些问题:

1. How good is VP8? Is the file format actually better than H.264 in terms of compression, and could a good VP8 encoder beat x264?

1。VP8有多好?在压缩比方面VP8文件格式真的比 H.264要好,一个好的VP8编码器可以击败x264吗?

On2 claimed 50% better than H.264, but On2 has always made absurd claims that they were never able to back up with results, so such a number is almost surely wrong.

On2公司声称VP8超过H.264标准  50%,但On2公司经常发表荒谬的声明但却从来不能用事实来证明它,所以这样的数字几乎肯定是错误的。

VP7, for example, was claimed to be 15% better than H.264 while being much faster, but was in reality neither faster nor higher quality.

例如VP7,据称超过H.264标准 15%,而且快得多,但实际上既不快,也不是质量更高。

2. How good is On2′s VP8 implementation? Irrespective of how good the spec is, is the implementation good, or is this going to be just like VP3, where On2 releases an unusably bad implementation with the hope that the community will fix it for them?

2。On2公司的VP8的实现如何?先不论规范多么好,它的实现是否足够好,还是和曾经的VP3一样,On2公司发布了一个几乎不能使用的差劲实现,希望开发社区来帮助完善?

Let’s hope not; it took 6 years to fix Theora!

希望不会,修复Theora就已经花了6年的时间!

3. How likely is VP8 to actually be free of patents? Even if VP8 is worse than H.264, being patent-free is still a useful attribute for obvious reasons.

3。VP8的专利免费有多确定?即使VP8不如H.264,专利免费仍然是一个非常吸引人的属性。

But as noted in my previous post, merely being published by Google doesn’t guarantee that it is.

但正如我在前面的博文里提到的,Google 发布它并不能保证它是免费的。

Microsoft did similar a few years ago with the release of VC-1, which was claimed to be patent-free — but within mere months after release, a whole bunch of companies claimed patents on it and soon enough a patent pool was formed.

微软在几年前做了类似的事情,发布了VC-1,声称是免专利费的。 但仅仅过了几个月,一大堆的公司声称拥有关于它的专利,并很快成立了一个专利池。

We’ll start by going through the core features of VP8.

我们将首先浏览一遍VP8的核心特点。

We’ll primarily analyze them by comparing to existing video formats. Keep in mind that an encoder and a spec are two different things: it’s possible for good encoder to be written for a bad spec or vice versa! Hence why a really good MPEG-1 encoder can beat a horrific H.264 encoder.

我们主要分析它们的格式,跟现有的格式做比较。 记住,编码器和规范是两个不同的东西:可能存在根据差的规范写出好的编码器实现,也可能反过来!所以为什么一个很好的MPEG – 1编码器可以击败一个差劲的H.264编码器。

But first, a comment on the spec itself.

但首先,关于规范本身的评论。

The spec consists largely of C code copy-pasted from the VP8 source code — up to and including TODOs, “optimizations”, and even C-specific hacks, such as workarounds for the undefined behavior of signed right shift on negative numbers.

这个规范里存在大量的从 VP8 源代码里拷贝过来的C语言代码,甚至包括一些 TODO,“优化”,甚至一些只在C语言里存在的技巧,比如负数的带符号右移的替代方法。

In many places it is simply outright opaque. Copy-pasted C code is not a spec. I may have complained about the H.264 spec being overly verbose, but at least it’s precise.

在许多地方简直是彻头彻尾不透明。 复制粘贴的C代码不是规范。我可能抱怨过冗长的H.264规格,但至少它是精确的。

The VP8 spec, by comparison, is imprecise, unclear, and overly short, leaving many portions of the format very vaguely explained.

相比之下,VP8 的规范是不确切的,不明确,过于短,还留下许多关于格式的很含糊的解释。

Some parts even explicitly refuse to fully explain a particular feature, pointing to highly-optimized, nigh-impossible-to-understand reference code for an explanation.

有些地方甚至明确拒绝完全解释一个特定的功能,却给了一个高度优化,无法理解的参考代码实现作为解释。

There’s no way in hell anyone could write a decoder solely with this spec alone.

所以根本没有人可以根据本规范来单独的实现一个解码器。

Now that I’ve gotten that out of my system, let’s get back to VP8 itself.

现在我已经摆脱了它(指规范?译者注)了,让我们回到VP8本身。

To begin with, to get a general sense for where all this fits in, basically all modern video formats work via some variation on the following chain of steps:

首先,为了获得一个大概的印象,基本上所有的现代的视频格式,都包含以下步骤的工作:

Encode: Predict -> Transform + Quant -> Entropy Code -> Loopfilter

编码:预测 – > 变换 – > 熵编码 – > 回放过滤
Decode: Entropy Decode -> Predict -> Dequant + Inverse Transform -> Loopfilter

解码:熵解码 – > 预测 – > 逆变换 – > 回放过滤

If you’re looking to just get to the results and skip the gritty technical details, make sure to check out the “overall verdict” section and the “visual results” section. Or at least skip to the “summary for the lazy”.

如果你只是希望得到结果,跳过这些繁琐的技术细节,请直接跳到“整体判决”部分和“视觉效果”一节。或者至少跳到“总结”一节。

Continue reading ›

我在Google上的人际圈

我的 Google Profile : http://www.google.com/profiles/tangfulin

Copy From http://www.google.com/s2/search/social

This is the network of connections Google uses to identify relevant social search results. It is based on a combination of the following:

In addition to web pages from your social circle, posts from your Google Reader subscriptions may also appear in your social search results.

This is a recent snapshot of your social circle. Changes you make to your connections will be reflected in the next snapshot. Learn more »

Direct connections from Google Chat and Contacts (52)

Here is the list of your Google contacts who have a Google profile and have content that can show up in your search results.

Add new people to your social circle by adding them to the “Friends”, “Family”, or “Coworkers” group in your Google contacts. You can also follow your friends in Google Reader or Buzz, which adds them to your social circle.

If you would like to see more content from your Google contacts, encourage them to create a Google profile and add links to their content there. Learn more »

Continue reading ›