提问,思考,学习,分享,积累
kernelchina's picture

开源代码学习(open source code learning)

http://www.kernelchina.org/linux/

http://www.kernelchina.org/apache/

http://www.kernelchina.org/nginx/

先创建了linux kernel的源码树,以后会加其他开源代码的源码树。这个是基于GNU global建立的,和Source Insight的效果差不多。

droplet's picture

Checksum,用还是不用?

在网络上传输数据,错误不可避免,所以需要一些手段去发现错误,并且更进一步,纠正错误。在网络上,纠正错误的方法就是重传,简单粗暴。在存储里面,还可以用冗余的数据把错误数据恢复了。checksum的计算和校验需要时间,所以希望能够省掉;但是在出现错误时,不知道什么原因时,又希望有checksum。特别是在网络上传递指针(一般不可能),数组下标,flag等等,用的时候可以检查,但是可能不知道出错的原因。所以在设计的时候最好预留checksum的空间,不要到用的时候再往上加,数据结构就不兼容了。如果是一个想长期发展的项目,兼容升级应该放到一个重要的位置。

appleleaf's picture

有关Cache 2 - 基本结构

周末花了一个下午看了一下《计算机体系结构量化方法》的附录B,是有关Cache原理的介绍。这本书写的还真是好啊,看似一块大砖头,本以为废话很多,其实多数描述很简练,微言大义。例如前些日子写了一个带宽和时延的关系,这本书一句话就写明白了:“时延决定数据第一个接收Bit的时间,带宽决定接收剩余数据的时间”,真实很牛X啊。

画了一张小图总结Cache的基本结构。

image

CPU的处理器地址(我理解就是经过转换后的最终的硬件地址了)被划分为三个部分,Tag,Index,Offset。寻址的时候,首先用Index寻址Cache Set(这个是Cache相关性的产物)。Tag用作Key在Cache Line Set之中匹配Cache Line。Offset用于得到最终对象地址。其他很多概念和Cache Policy就是基于这个简单的数据结构图演化出来的。

appleleaf's picture

又购书

半夜起来睡不着,逛逛网站,趁着打折又忍不住买了一些书。买书一般在当当,亚马逊,京东上择其便宜者而购买之。先说说这几个网站的收藏功能。

亚马逊的最好,直接在首页之中有一个“心愿单”按钮,收藏的图书都在这里了,直接买就行了。当当的次之,要点“我的当当”,其中有一个收藏。京东的最弱,需要点击“我的订单”,其中有一个“我的关注”。这两个功能怎么是隶属关系?京东号称招聘了几万工程师,就设计出来这么没有逻辑的导航方式?

现在买书的原则是:经典图书,要可以传家,或者是已经看过的自评为5星的电子书,或者是豆瓣评价很高的且作者有保证,孩子长大后也可以看。因此《Windows API》大全之类的图书再也不买了。另一个原因是京城居不易,家里没有地方放,现在是买新书,扔旧书(主要是计算机图书)腾地方,上次卖了一堆旧书,按斤称,大概五十元,相当于一本的价格。

购书清单如下:

《中国哲学简史》冯友兰

《美的历程》李泽厚,这两本书和上次买的《傅雷家书》是一套的,因此凑齐,是中学生的课外阅读丛书,对于经典书我不是很挑出版社的牌子,只要字不要印错就行。

《诗品译注 》周振甫,周先生代表高品质。

《负暄琐话》《负暄续话》《负暄三话》张中行,基本看过电子书,这几本书是回忆录,记录了很多文化名人,被誉为当代的《世说新语》,确实不为过。我现在也是张先生的fan,加上这次的几本书一共八本张先生的著作了。

《顺生论》张中行。我也看过电子书,不是很喜欢,主要是太过平淡有如白开水,可能是我年龄和阅历还没有到,买来收藏。

剩下的就是一堆作文小书,我Mark很久了,有几本是面向中学生的,但是自问我们现在这样的成年人,写文字能写过中学生的也不多。

《作文杂谈》张中行

《经典常谈》朱自清

《国学常识》曹伯韩

《文章修养》唐弢

《语文随笔》《文章讲话》《怎样写作》叶圣陶、夏丐尊。这两位前辈是儿女亲家,经常合作出书,我个人很喜欢叶圣陶的小文章,当当还有卖叶的全集,26精装大本,共6,7百块。还是比较划算,家里住复式的可以考虑。

appleleaf's picture

C语言可变参数中传递结构的问题

遇到如下一个问题,程序中将结构:

struct aaa{

   int a;

}

传递给printf,并且按照u%打印,总是输出0,而不是aaa.a的数值。

在不同平台的编译环境测试了一下,在Solars over Sparc上的gcc编译结果是打印了aaa结构变量的地址而不是0。

在Windows上用VC和Cygwin的Gcc编译的结果都正确打印了aaa.a的数值。

C语言是按照值进行传递的,因此如果函数参数显式定义为struct aaa类型,则传递的结果一定没有问题。而对于可变参数传递结构变量或许标准没有明确规定。

首先我们要避免传递结构作为参数,一定要以地址为参数,避免含糊造成的错误,同时不用进行参数拷贝。

appleleaf's picture

Splunk上市

image

前两天Splunk IPO成功,股票double,市值30亿刀,http://online.wsj.com/article/SB10001424052702303513404577353891795293210.html

成功的小公司都是问题解决驱动的,Splunk解决了客户的何种关键问题呢?其官网的产品介绍部分有所描述http://www.splunk.com/product

企业的IT基础(Web、app、服务器、网络、移动设备)设施会产生大量的数据,Splunk分析这些数据(主要是log)提供有价值的信息。

Splunk号称“Index Any Data From Any Source”;号称提供复杂事件关联“Correlate Complex Events”;其号称可以基于map-reduce,每天可以处理几十个T的(“tens of terabytes”)大数据。

Splunk应对的问题就是这么简单,本地信息之中做数据分析、事件关联等工作。

Splunk的基本处理模型可以看作如下两个步骤:

1.数据的indexing。根据系统预定义或用户提供的规则提取信息。这个步骤有些像Desktop Search,但是更有针对性。

2.对于Index之后的结果,提供上层API接口,用以展示信息。对于信息的提取、汇聚等操纵,在关系数据库领域已经有了SQL这样的成熟的、广为用户接受的模型。因此Splunk也借鉴了相关概念。类比SQL,提供了对应的API。

其他就是末节了,例如Splunk提供了Web应用开发框架和一些demo,提供了层次性的级联方案用以支持scale等等工程特性。

我的理解是Splunk可以看作“专用的Google Desktop(针对本地日志优化或简化) + 类SQL接口(针对底层是hash方式存储的index和数据)”,Splunk用新的技术解决了传统的问题,提供了传统的概念,做到极致后,赚到了30亿刀。这里也可参照20多亿刀被EMC收购的DataDomain。也是专注并解决了一个问题“冗余数据删除”。以前和一个朋友谈过,他的观点是大公司做产品布局要大,云计算云云。我的观点仍然是工程师的观点,即解决用户具体实际难题。像Splunk,Datadomain这样,一个产品价值2,30亿刀,对于中国企业不够大吗?

appleleaf's picture

逝者 - 1

微博写了一年了,其中记录了一些看到英年早逝者,假设新浪微博有3亿人,人均寿命100岁,则平均1年有300万人变成僵尸粉。人可以立志以三生之力做事情,但珍惜今生的生命,珍惜和亲人相处的日子。

@网易公开课 新浪机构认证【壮士一去兮,不复返】[泪] --《斯巴达克斯:血与沙》主演Andy Whitfield在与癌症抗争了两年之后,于昨天在澳大利亚悉尼的家中不幸去世,终年37岁。Andy的妻子Vashti在声明中称:“年轻、美丽的战士,于今日早晨在阳光明媚的悉尼,安详地在我的怀里睡去。

逝去的小怡帆

@王小妮 新浪个人认证 人间温情:11,25,太原火车站候车室内,一位僧人超度一位默默逝去的老人

@新闻晨报 新浪机构认证【胃痛不注意 北京一女孩急性胃溃疡去世】女孩方言@Aimee_Fang 12月16日因急性胃溃疡导致失血性休克而去世,年仅23岁。12月14日,她忍着胃痛还在上班,15日被确诊为急性胃炎,第二天去世。她可爱,开朗,长期加班、熬夜、每天晚上九点后晚餐。为这朵过早凋零的花哀悼[蜡烛],同时提醒我们,爱惜自己。

appleleaf's picture

C语言的Signed和Unsigned的混合使用

在语法书中提到,如果有unsigned参与计算则会提升signed为unsigned进行计算,但是检视一个bug的code之时仍然发现有些小疑问,为此做了一下实验。

· +的汇编指令完全一样都是add

r = a + b;

00402D2C mov eax,dword ptr [a]

00402D2F add eax,dword ptr [b]

00402D32 mov dword ptr [r],eax

· -同上都是sub

· *同上都是imul

· /不同如下,只要有unsigned参与的都一样,用div。两个都是signed的用idiv指令。

ur = a / b;

00402D4C mov eax,dword ptr [a]

00402D4F cdq

00402D50 idiv eax,dword ptr [b]

00402D53 mov dword ptr [ur],eax

ur = a / ub;

00402D56 mov eax,dword ptr [a]

00402D59 xor edx,edx

00402D5B div eax,dword ptr [ub]

00402D5E mov dword ptr [ur],eax

· >操作和unsigned以及signed有关,如下:

r = a > b; -- 考虑符号做比较,例如(-1 < 1) == true

00403284 mov ecx,dword ptr [a]

00403287 xor edx,edx

00403289 cmp ecx,dword ptr [b]

0040328C setg dl

0040328F mov dword ptr [r],edx

r = a > ub; -- 用机器表示做比较,例如(-1 < 1) == false

00403292 mov eax,dword ptr [a]

00403295 cmp dword ptr [ub],eax

00403298 sbb ecx,ecx

0040329A neg ecx

0040329C mov dword ptr [r],ecx

· <操作和符号有关,如下: -- 规则同上

r = (a < b);

00403284 mov ecx,dword ptr [a]

00403287 xor edx,edx

00403289 cmp ecx,dword ptr [b]

0040328C setl dl

0040328F mov dword ptr [r],edx

r = (a < ub);

00403292 mov eax,dword ptr [a]

00403295 cmp eax,dword ptr [ub]

00403298 sbb ecx,ecx

0040329A neg ecx

0040329C mov dword ptr [r],ecx

· ==操作和符号无关

· =操作和unsigned以及signed无关

r = a;

0040326C mov eax,dword ptr [a]

appleleaf's picture

购书

最近京东和当当又开始掐架了,虽然我看的挺不落忍的,但是还是买了几本。

《傅雷家书》:电子书先看了部分,极佳,有教育意义,以后孩子也可以看。主要是傅雷和家人尤其是傅聪的书信集。

《傅雷书简》:是傅雷和朋友的通信,想必也不错。

《流年碎影》:张中行的回忆录,这些大师们包括季羡林嘴里都说我不行,没什么可以写的,实际上一写就是几百上千页的回忆录。

《人间词话》:只有6.4元,就当买了一对鸡翅了。

《牛棚杂忆》:季羡林的文革回忆录,看过电子书,其实今日人性亦然,只是没有土壤罢了。和梁晓声的《自白》一样,让我们了解一下世界的阴暗面。另外作者在受屈辱的时候,从容求生的态度值得我们学习。

《沉思录》:据说温总理看过百遍。

《小说例话》:周振甫的《文章例话》《诗词例话》的兄弟姊妹篇,前两本我有早期版本,看起来真是一个难啊,主要是周老水平太高了。本书是评点四大名著之类的图书,应该易读的多。

《培根随笔》:打折后5.5元,就当买了一个蛋挞了。

《汪曾祺谈师友》:记录作者在西南联大的人事见闻,相当于史料了,包括西南联大的校风,沈从文等联大的诸多大师的轶事等。读后,心向往之。我本人对于任何小说(武侠除外)天生不感兴趣,还是更喜欢看记录人生的文字和节目,例如凤凰卫视的《冷暖人生》。

前两天,在掐架前,买了一本《计算机体系结构:量化研究方法(英文版·第5版)》。买亏了, 如果这次买入可以节约十几元。这本书排版很好,每一页左侧都留有足够的留白,可能是算计着大家要读此书要做不少笔记的缘故。第一章快速翻过,第二章“内存架构”卡住了,连同附录大约两百页,介绍了Cache方方面面,需要慢慢读一下了。

droplet's picture

How to design a good API and why it matters [转载]

什么是好的API?API会成为一个公司最有价值资产,这一点问微软就知道了,windows API虽然数量不少,但是保持了很高的稳定性,这个很难做到。就算是自己写的小模块,也需要多个函数,多个类的交互,交互就会产生依赖,就会有API的需求。当然,对于一个功能单一的程序来说,还上升不到api design的程度。但是对于一些编程框架,比如java, mfc来说,api的设计就非常重要。本人没有参与过这些工作,也不好评价,下面就简单谈谈感想。

1)api的稳定性。稳定的API才能长期使用,也就是说,一套api的功能应该是没有交集才行,并且所有api的集合能够涵盖所有的功能。setter/getter不是api,它只是为了访问数据结构。api至少应该是功能级别的,这话说起来有点空,自己动手时就能明白。api需要向后兼容,这样才能保护投资。有时稳定并不仅仅是对api来说,比如用户界面之类的,同样需要稳定性。一个稳定的用户界面(命令行,不是GUI),可以减少学习时间。如果是一个产品,一个用户界面,很难想象用户怎么去用。

2)避免重复的api,高度抽象。这个可以参考unix system call。read/write可以读写字符,块,以及socket。一套api就定义了系统的完整功能集,不多也不少。

Syndicate content