2009年6月28日星期日

只放一只羊!

"阿尔迪"超市的所有者,是德国80多岁的阿尔布莱希特兄弟,它是全世界公认的零售
业航母,目前的身价已达400亿欧元。在美国,阿尔迪的年销售额现已达到48亿美元,它计划
今后每年开40家分店,到2010年把总量扩展到1000家。同时,阿尔迪还在北美收购了那些被
沃尔玛挤兑而破产的零售商。
  尽管年销售额达2000亿欧元的美国"沃尔玛"公司,销售额是阿尔迪的6倍,但阿尔迪每
年经销的单件商品的总价值却超过4000万欧元,竟是沃尔玛的30倍。因阿尔迪只销售不超过
1000种商品,比沃尔玛少15万种。
  德国人给阿尔迪起了一个通俗的名字——"穷人店"。二战后,阿尔布莱希特兄弟从盟
军战俘营回到家乡,开办了一家食品零售店。因为当时人们只想用最低的价格购买生活必需
品,所以兄弟俩把价格定得很低。他们说:"我们的业务发展基础只有一个:最低的价格!
"
  阿尔迪能从一个三流小店发展成为世界上最成功的零售商,人们曾有无数个猜想,认为
它一定有非常机密的营销方案,而且也会把它严严实实地隐藏起来。但出乎人们意料,它的
制胜法宝只有两个字:"简单"!就是"简单"这两个字,令许多企业始终无法模仿。
  它简单到什么程度,从以下几个方面就可以看出:
  不做广告
  阿尔迪所有的商场,只有每周一期八开的《阿尔迪信息报》放在超市入口,对下周的新
上柜货品作个介绍,由顾客随意自取浏览,便于顾客按照自己的意愿选择喜欢的商品。除此
之外,绝不做其他任何形式的商品宣传。
  商品单调
  商场里只放着简单的600~700种商品。货品装在纸箱里堆在光秃秃的货架板上,价目表悬
在头顶,而不是贴在商品包装上;瓶装芦笋和沙丁鱼罐头挤破了纸箱,手纸只有两种牌子,
腌菜只有一种,每种商品只提供一种选择,即同类商品之中最好的品牌,每一种商品都只有
一种规格的包装。商品都是能够迅速带出店铺的,包括罐头食品、纸袋包装食品、快餐食品
、一些新鲜果蔬和冰冻食品等。除少量日用品、食品设有货架、冷柜外,其他商品均由店员
打开纸箱包装,任顾客自取。
  员工人数少
  每一家阿尔迪超市的雇员都少于10名,他们都身兼数职。商场里没有现代化超市设备,
没有使用条形码扫描仪和读卡机等现代化设备,坚持使用最简单的收款机,而且只收现金。
没有人员为顾客提供装袋的服务,店员对商品价格倒背如流,他们心算和录入速度令人惊叹
,整个顾客交款的过程非常快捷。
 不收尾数钱
  在阿尔迪,商品价格的尾数都是0或5。他们开始时经过测试,发现营业员找零钱的时间
会影响销售,如果将找零钱的时间去掉,可以减少营业员数量,又可以多卖出为数不少的商
品。于是阿尔迪决定,尾数0.05~0.09马克的商品,按0.05马克收款;而尾数0~0.04马克的
商品,按0收款。这样做,既提高了商店员工的工作效率,又降价吸引了更多的顾客。
  
  不举债经营
  阿尔迪从不举债经营,扩张都是用已产生的利润来进行,因此风险很低。曾是阿尔迪的
管理人员迪特?布兰德斯说:"阿尔迪的一个原则是:不仓促展开业务,而是先打好牢固的基
础。基础一旦有了,它会行动得很快。"
  员工执行力强
  阿尔迪的用人原则是能力+高薪,非常注重员工队伍的精干和年轻化。与其他零售企业相
比,阿尔迪的薪水要高出10%~20%。工作出色的员工有很多升迁机会,升任超市经理的即
配给公车,升任部门主任的年薪可达到20万马克。因此,阿尔迪吸引了大批年轻的优秀人才
加盟。
  有人这样形象地总结了阿尔迪成功的秘诀:只放一只羊!因为,无数个想放一群羊的人
,到了最后,却一只羊也没剩下,原因就是他们被无尽的贪欲挤垮,而最后失掉了一群羊。
所以,不管你做什么工作,在做事前,还是先衡量一下自己的能力,看看你到底适合放几只
羊?

货币政策奠定中长期底部——金学伟

在硬通货时代,每隔一段时间就会发生一次经济衰退和萧条。那是真正的衰退,不是今天我们通常所说的经济增长率下降,而是国民生产总值实实在在的减少。这种由国民生产总值周期性的正增长和负增长交替的经济波动,被称为古典式波动。与此相反,近几十年来的经济波动主要体现为增长率的高低起伏,由此产生的波动称为增长型波动。
产生古典式波动的原因很多。其中最主要的原因之一出在货币供应量上。货币作为商品价值尺度、财富储存手段、商品流通媒介与支付手段,它的总量必需和经济总量相匹配:有多大的经济总量就需要有多大的货币总量,否则整个经济运行就会失序,正常的循环就会中断。而在硬通货时代,货币就是金、银、铜,它的增长受到矿山开采、冶炼等生产环节的制约,这些环节的年均增长率决定了货币的年均增长率。当经济的发展过于迅猛,或货币生产的环节出现梗阻时,整个社会就会产生钱不够的问题,正常的商品流通与循环也就无法进行下去。最终的结果只能是经济总量降下来,以适应货币总量。
我国北宋年间曾发生过两次经济危机,其原因都在货币短缺。北宋时曾短暂出现过的"交子"——世界上最早的纸币形式,就是应这一需要产生的。明朝末年张献忠窜入四川,建立大西国。这个农民天真地以为有了银子就有一切,把整个大西国的银子搜刮一空,使四川经济陷入万劫不复的深渊,最后连张献忠本人想举办一次"国宴",也空有一大堆银子,却买不到所需的肉。清朝的康熙、雍正年间也发生过一次钱不够的问题,不过当时缺的主要是铜钱,国家拿不出那么多铜来铸造铜钱,以满足商品流通的需要。为此朝廷争论了好多年,直到雍正上台,这位务实皇帝拍板:不怕人家说大清朝铜钱不纯,不要担心因此损害大清朝面子,以60%的铜加40%的锡铸成铜钱,才解决了这个问题。
在纸币时代,上述问题已不存在,只要需要,货币可随时印刷。但由此产生的新的问题就是货币发行量的过剩,以及由此带来的长期通货膨胀。当今世界,一年的通胀率也许就超过了以往100年。
通胀发生于现在,它的根源却在过去。以我国为例,从1986年到2006年的20年间,我国GDP总量的年均复合增长率为16.26%,而货币供应量(M2)的年均复合增长率为22.84%。如果说,经济总量增长1%,货币总量也增长1%属于正常所需,那么,这一数字表明在过去20年里,我国货币供应量平均每年要超过正常所需6.58个百分点。如以近10年来看,则从1996年到2006年,GDP的年均增长率为11.39%,而货币总量的年均增长率为16.72%,平均每年超过正常所需5.33个百分点。当今的通货膨胀实际上就是长期积累的货币超量发行结果。2002年,笔者曾发表文章,针对当时众多经济学家要求政府加大货币发行量,以解决所谓退货紧缩问题,根据货币总量和经济总量以及流通中现金的运行态势预测:从2003年起,我国就将进入新一轮通胀,在此之前,任何加大货币发行量的建议,都会加剧日后治理通胀的难度。当前的通胀,实际上就是过去10多年间超量发行货币的总爆发或集中体现。这样的通胀,任何一个国家和政府都无法从根本上消除它,因为时间不能倒退,我们无法回到过去再重新来过。只有当社会经济总量、资产总量与货币总量在新的物价基础上达到新的平衡,通胀才能基本消除。在此之前,唯一的办法就是通过一定手段,延长平衡的时间,以放慢通胀速度,也就是以延长通胀时间的方法,来防止因平衡速度过快而导致恶性通胀的出现。如果我们不能清楚地认识到这一点,如果把控制通胀提到太高的高度,如果为反通胀而过度收缩银根,以致货币发行量不能和现有的经济总量相匹配,满足不了经济运转的需要,那么很可能会出现通胀没有下去,而GDP总量却下去了,最终反而导致通胀率的居高不下,甚至猛升。
笔者以为,近两年我国央行的货币政策已出现了相关苗头:2007年,我国名义GDP总量增长了17.76%,而当年货币供应量只增长了16.9%;今年上半年,名义GDP的同比增长率为22.33%,货币供应量的同比增长率只有17.4%。货币供应量的增长率已经连续1年半低于经济总量的增长率。这样的货币政策已无法维持下去。
 如果说在硬通货时代,经济总量的周期性下降是不可避免的;那么,在纸币时代,周期性的通货膨胀同样也是不可避免的,能够避免的只有恶性通胀以及经济总量的衰退。如果说在硬通货时代,通胀比衰退更可怕,因为通胀会加剧衰退;那么在纸币时代,衰退比通胀更可怕,因为衰退可加剧通胀。这已被越来越多的人所认识。
( 作者为上海智晟投资管理有限公司首席经济顾问)

办公族五个坏习惯让身体长石头

肾结石一跃成为全民最为关注的疾病之一。但是要预防结石病,仅仅关注奶粉或者牛奶的食用安全远远不够,而需要被关怀的也绝不仅止于婴幼儿群体。相关资料显示,近年来结石的发病率逐年升高,发病群体涵盖所有年龄层,并有年轻化的趋势,其中办公室白领占据相当大的比例。
  结石为何盯上办公族?有关专家指出,这与办公族工作繁忙、工作节奏紧张等客观因素有关,更与其不良的生活习惯紧密相连,其中五个坏习惯,是致病的罪魁祸首。
  不吃早餐
  不吃早餐的办公族不在少数,有的是因为早上赶着上班,来不及吃,有的是为了减肥,不愿意吃。这一看似寻常的生活习惯却是导致结石病的重要原因。据健康863网的保健专家介绍,不吃早餐诱发结石病的几率相当大。这是因为人体在经过夜晚的长时间睡眠后,需要在早晨摄入食物来补充能量,胆作为消化系统的一部分,会在早上分泌胆汁,做好消化食物的准备。人如果不吃早餐,胆就没有食物可消化,胆汁就会长时间停留在胆囊,长此以往,胆汁会淤积在胆囊或肠道,胆固醇自胆汁中析出就易形成结石。
  防石计:不要给自己任何借口不吃早餐。吃早餐耽搁不了太多时间,也不会让你长胖。即使是简单的喝点牛奶、吃片面包,也能起到预防作用。
  不爱喝水
  不少办公族因为工作节奏快,喝水的时间相应较少,还有为数不少的人即使有时间喝水,量也不够大,而这正是诱发结石病的另一重要原因。专家表示,喝水少会减少人体尿液,并会使尿液过度浓缩,尿中盐类的浓度增高,沉淀增多,就容易形成肾结石或尿路结石。
  防石计:多喝水可以增加排尿量,稀释尿液,降低尿内晶体浓度,冲洗尿路,有利于预防结石形成及促使结石排出,所以即便不口渴,个人每天也应喝水2000毫升以上,并最好选择清水。
  不喜欢运动
  运动量少也会导致结石的产生。而办公族的工作性质注定了坐的时间非常长,运动的机会少,下班后很多人也不爱运动。专家指出,人如果很少运动,一方面不利于钙质吸收,会增加尿液中的钙盐成分,产生肾结石或尿路结石;另一方面人体腹壁会松弛,引致内脏下垂,压迫胆管,使胆汁排泄不畅而淤积,从而形成胆结石。

  防石计:加强运动,不要"坐等"结石的形成。在办公室工作两个小时左右,就应站起来做些简单的放松运动,业余也应保证一定的运动量,每天的运动时间应在30分钟以上。
  吃得太油
  办公族因为工作繁忙,应酬较多等原因,在外就餐的机会较多,吃大鱼大肉的频率较高,并容易暴饮暴食,尤其是男性,往往吃得过于油腻,而这正是结石病的重要诱因。因为高脂肪、高蛋白食物会增高胆汁中的胆固醇含量,形成结石;动物内脏、肉类代谢也会产生尿酸,导致结石。
  防石计:管住嘴,限制食物中胆固醇的含量,少吃或忌吃富含胆固醇的食物,如肥肉、动物内脏、鱼籽、蟹黄、蛋黄等。多吃新鲜瓜果和蔬菜以及大蒜、洋葱、香菇、黑木耳等具有降低胆固醇作用的保护性食物。
  吃得太素
  吃得太油腻容易得结石,吃得太素同样容易长石头。办公室MM大多热衷减肥,不少人信奉素食主义,以蔬菜为主食。专家提醒,虽然蔬菜富含维生素、矿物质和膳食纤维,但是,菠菜、芹菜、番茄、竹笋等蔬菜中同时还富含草酸,过量食用可能从尿中析出而形成结石,其与豆制品或者钙片中的钙结合后,也容易形成结石。
  防石计:含草酸盐较多的蔬菜在吃之前应先焯一下,然后再过一遍水,以减少草酸摄入量;可多吃碱性蔬菜和苹果,综合酸碱度;宜适量摄入高脂肪、高蛋白食物,均衡饮食结构,减小结石风险。

2009年6月27日星期六

sh一在建楼盘轰然倒塌

事情发生在早上5:40分左右。

行人车辆请注意,飞机就要开过来了!

请在拦木外等候,不要抢行,不要翻栏杆!

Linux代码淬火工具

介绍用来提高Linux应用程序安全性和可靠性的开源工具和代码追踪技术。
一、源代码检查工具
在软件开发过程中,我们可以利用源码检查工具来找出常见的编程错误以及安全漏洞。这些工具用起来并不复杂,下面介绍splint和flawfinder这两款源码检查工具的使用方法。
splint是一款静态源代码检查工具,能对源代码进行全面的分析。对于没有注释的源代码,可以使用-weak选项:
splint -weak *.c -I./inc
其中,./inc是头文件所在的子目录。此外,Splint还支持标准检查模式(选项-standard),若要进行中等强度检查则使用选项-checks,若使用选项-strict则进行最严格的检查。
flawfinder也是一款用来寻找源代码错误的静态分析工具。通过该工具提供错误消息,开发人员可以更快的找到错误所在。请看下面的例子:
$ flawfinder test.c
test.c:11: [2] (buffer) char:
Statically-sized arrays can be overflowed. Perform bounds
checking, use functions that limit length, or ensure that
the size is larger than the maximum possible length.
$
本例中,flawfinder给出了一个提示,指出静态尺寸的数组可能被恶意利用的潜在危险。
除了上面介绍的splint和flawfinder这两款工具外,还有RATS(一款安全审计工具)以及ITS4(静态漏洞扫描工具)等工具可用。但需要
注意的是,虽然这些工具能够分担一部分工作,但却无法完全替代人类。因为工具在发现漏洞的同时,也可能遗漏安全漏洞。

二、代码跟踪技术
我们知道,strace工具通常是用来追踪系统调用的,实际上,它还可以作为间接的源代码审计工具。从系统调用的角度来跟踪应用程序的执行,可以让我们了解到Linux应用程序的底层操作,借助这些低层操作我们可以更好的理解我们的源代码。
在下面的例子中,有多处违反了我们前面讨论的代码淬火原则,现在我们展示如何利用strace来进行调试。
#include <unistd.h>
#include <fcntl.h>
#define MAX_BUF 128
int main()
{
int fd;
char buf[MAX_BUF+1];
fd = open( "myfile.txt", O_RDONLY );
read( fd, buf, MAX_BUF );
printf( "read %s\n", buf );
close( fd );
}
我们注意到,上面的代码的第11行,即:fd = open( "myfile.txt", O_RDONLY
);
试图打开一个称为myfile.txt的文件,但事前并没有检查该文件是否业已存在。在这种情况下执行该程序的话,会导致无法预测的结果:
$ gcc -o bad bad.c
$ ./bad
read @?8Z@
$
看看,这样的结果是你没料到的吧。所以,先让我们利用strace来看看到底发生了什么。注意,下面的输出已经作了删减,但重要的信息都保留下来了:
$ strace ./bad
execve("./bad", ["./bad"], [/* 20 vars */]) = 0
uname({sys="Linux", node="camus", ...}) = 0
...
open("myfile.txt", O_RDONLY) = -1 ENOENT ( No such file or
directory)
read(-1, 0xbfffef20, 128) = -1 EBADF (Bad file descriptor)
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40017000
write(1, "read \300\357\377\2778Z\1@\n", 14read /à???8z@
) = 14
close(-1) = -1 EBADF (Bad file descriptor)
munmap(0x40017000, 4096) = 0
exit_group(-1) = ?
$
执行程序后,我们看到用来启动该程序的系统调用是execve();不久又调用了open(),该系统调用对应于代码中的第11行。并且我们看到系统调用
open()的右边的返回值是-1,并指出错误"ENOENT ( No such file or
directory)",即不存在这个文件或目录。换句话说,这是在告诉我们需要先建立文件。此外,系统调用read()也以失败而告终,它的错误是非法
的文件描述符,因为open调用失败了。
strace工具不仅用来帮助理解有源代码的程序的行为,而且也对于没有源代码的程序也同样有效。因为,透过对系统调用的观察,我们能够在二进制级别来理解程序的行为。

三、小结
古人云,工欲善其事,必先利其器。借助于上文介绍的代码淬火方面的编码知识,用来提高Linux应用程序安全性和可靠性的调试工具,相信读者能够更快更好开发出安全可靠的高品质软件来。

编程利器——splint工具

到底需不需要编译器之外的独立的静态代码检查工具呢?这个问题'仁者见仁,智者见智'。但是有一个结论我想大家都会认可,那就是越是在开发周期早期发现的
Bug,修复它所付出的代价就越小。而像lint这样的静态代码检查程序恰恰是让Bug在早期阶段'显露原型'的绝佳工具,而追求'lint-
clean'[注1]境界的代码也向来是专家级程序员的嗜好。别忘了在'C专家编程'一书中曾经提到Sun
OS的内核一直是保持'lint-clean'状态的,这就是榜样!还等什么?赶快学呀!^_^

有人抱怨'不敢用lint工具,
太多的Warnings把快屏幕都淹没了!',不过高手一般不这么想,他会细心琢磨这些Warnings背后的'暗示',并和lint工具沟通,利用
lint工具提供的交互方法屏蔽掉一些经过分析认为不能成为错误的Warnings。久而久之,高手本身就成了一个lint程序,就能够很快的用肉眼发现
代码中的问题,并指出问题所在,如何解决!他还能告知如何嵌入一些Annotations从而避免让lint程序产生不必要的Warnings,这时这位
高手对语言和程序的理解就又提高了一个档次了。其实使用ling工具不仅仅是为了提早发现程序中的Bug,其使用过程有助于你加深对程序的认识和理解。的
确事实就是这样。

Splint就是一款强大而且应用广泛的开源lint工具。它的强大的代码检查能力固
然让人称道,但是让我更欣赏的却是它提供的'Annotations'机制。
Splint可以让程序员在自己的代码中嵌入相应的Anotations,这些Anotations作为Splint分析代码时的输入以帮助Splint
产生对程序员更有用的信息。下面是一些Splint的使用入门,更多详细信息请查看'Splint
manual'。

1、最简单的Splint使用方法
>> splint *.c

2、Splint输出Warnings的基本格式
<file>:<line>[,<column>]: message
[hint]
<file>:<line>,<column>: extra location information, if appropriate
我们可以使用'+/-<flags>'来自定义其输出格式,如'splint -showcol
*c',则Splint不会在输出信息中显示'列'信息。

3、使用flags控制splint的检查范围和输出格式
'+<flag>' -- 表明某个flag处于打开状态,如'+unixlib';
'-<flag>' -- 表明某个flag处于关闭状态,如'-weak';

4、使用.splintrc环境文件
如果不想每次使用splint的时候都手工输入一堆'+/-<flags>',那么你可以把这些'+/-<flags>'预先写
到.splintrc文件中,当splint执行的时候它会自动加上这些flags的。默认的flags设置在'~/splintrc'文件中,但是如果
一旦splint的当前工作路径下也有.splintrc文件,那么这个.splintrc文件中的flag设置会覆盖'~/splintrc'中的
flags设置,但是命令行中的flags设置是具备最高优先级的,它会覆盖前面提到的任何一个文件中的flags设置。

5、使用Annotations
对于'Annotations'的作用,Java程序员并不陌生,但是C程序员则对这个不是那么了解。C代码中的Annotations用来指导Splint生成恰当的代码检查报告。下面这个例子对比使用和不使用Annotations,Splint的输出的差别:
/* testlint.c */
void foo1() {
/*@unused@*/int *p = NULL;
}

void foo2() {
int *p = NULL;
}

splint testlint.c
Splint 3.1.1 --- 28 Apr 2003

testlint.c: (in function foo2)
testlint.c:6:7: Variable p declared but not used
A variable is declared but never used. Use /*@unused@*/ in front of
declaration to suppress message. (Use -varuse to inhibit warning)

Finished checking --- 1 code warning

可以看出没使用Annotation的函数foo2被给出Warning了。Splint的Annotations繁多,我们在平时做lint时可以多多接触。

'早用lint,勤用lint',这是C专家给我们的建议。'lint-clean'也许离你并不遥远。

[注1]
'lint-clean' -- 程序能够顺利通过lint程序的检查。