[转]许小年:转折点上的中国经济/中等收入陷阱

        本文为许小年教授2017年5月5日在深圳创新发展研究院的演讲:转折点上的中国经济

  中国的经济发展经过三十多年的改革开放,到现在处于一个很关键的转型期。这个转型期能否顺利过渡,决定了中国未来十年、二十年经济发展的态势。这几年可以说是非常关键的时间段。转折是从资本积累到创新驱动的经济增长,这是它一个很大的特点。为什么经济要转型?如何去转型?为什么企业的经营模式要转型?如何去转型?这是今天我演讲的主要内容。

  数量型增长无法持续
  在讲这些内容之前,我介绍一个理论分析框架(生产函数),有助于我们理清转型的来龙去脉。这个数学公式的左边Y是GDP或者是企业的产出,右边有几个字母,A代表技术,K代表资本投入,L代表劳动投入。这个公式就是一个投入产出的关系。国家的经济、GDP也就是左边的Y由什么决定?由三个因素决定:劳动投入、资本投入和技术水平。企业的产出同样可以用这个公式来表达,左边是企业的产出或者产值,右边是企业的技术装备水平和资本与劳动的投入。

  用这样一个公式想要表达什么观点?这个公式是一个经验公式,用世界各国的数据进行验证,这个公式大体都是成立的。企业层面上我们没有做太多的分析,从概念上大家都可以接受,一个企业它的资本投入或者产能越高,劳动力雇佣得越多,它的技术水平越高,它的产出就越高。

  这个经验公式用来区分两类性质不同的增长,来区分两类性质不同的企业经营模式。一类经营模式或者是增长模式是“数量型增长”,就是单纯依靠资源的投入,依靠资本和劳动的投入来驱动增长,K和L增加,左边的Y增加,这叫数量型增长。第二类增长是“效率型增长”,不是靠K和L而是靠提高A,A代表技术水平。这个A不是我们狭义理解的技术,他是广义的技术,包括了制度的因素。效率型增长的特点是,如果A的数值更大,你不用增加资本的投入和劳动的投入,左边Y也会更高,所以他是依靠提高K和L的效率来驱动增长,而并不是靠增加资本和劳动的数量来增长。

  同等数量的资本和劳动,如果效率更高,不必再增加人、不必再增加产能,也可以获得产出的提高。举一个例子,比如一个手机生产厂,它的生产能力是给定的,如果生产苹果手机,这是什么样的产值?如果生产小米手机,那又是什么样的产值?两种不同的产品反映在公式的A上,苹果所代表的技术水平不是小米手机能够相比的。所以技术水平的提高,你不必增加产能,不必增加人力的投入,可以获得更高的产出。这是两类不同性质的增长模式。一类是数量型增长,一类是效率型增长。

  这两类增长模式本质的不同就是数量型增长无法持续,它依靠不断地增加投资、增加资本,这个增长虽然在一个时期内能够实现预期目标,但是无法持续。为什么无法持续?这是我们今天要讲的一个核心的经济规律,这个经济规律叫做“资本的边际收益递减”,这个词听起来好象有一些太学术化,我解释一下实际上大家都可以理解,这是常识。在其他所有条件不变的情况下,追加资本投入虽然可以带来GDP的增加,但是每一单位投资所产生的收益越来越低。

  我们设想一下农民种一块地,假设在刚开始的时候,农民完全是用劳动种这个地,他没有什么资本的投入,没有拖拉机、化肥、灌溉设备,完全就是靠简单的劳动工具来种这块地。大家设想一下,在纯体力劳动的情况下,亩产能够达到多少?我们去陕北下乡的时候,当时亩产只有300斤,所以“大跃进”时期有人说亩产万斤,但凡有一点农业生产知识的人就知道怎么可能是万斤呢?我怎么也想象不来陕北的土地上能够产出万斤粮来,我们当时只有300斤亩产。

  现在我们再想象一下,给农民配一台拖拉机亩产能够增加多少?大概能够增加100斤左右。如果能够提高100斤现在是亩产400斤。我再给他增加第二台拖拉机,各位想一下第二台拖拉机带来的增产效果是多少?要比第一台要少,因为土地已经深翻过了,第二台拖拉机再来深翻一遍,他的效果就比第一台要差。我们设想第二台拖拉机带来的亩产是50斤。配第三台拖拉机的时候呢?增产效果是0,也许是5、6斤。继续增加资本投入总会到达一个点,在那个点上追加的资本没有任何影响。这就叫做“资本的边际收益递减”。当资本的边际收益递减到0的时候,你再追加资本,没用了,亩产不增加了。

  数量型增长无法持续原因:资本边际收益递减

  亩产不增加了,这个时候出现了一系列的现象:
  第一个现象,不管你再投入什么,GDP增长不动了。这个时候我们就说这个国家陷入了中等收入陷阱。中等收入陷阱的背后是什么?所谓的中等收入大概是人均收入1万美元左右,中等收入陷阱并不是说1万美元的人均收入是一个魔障谁也过不去,好像是一个神奇的数字,在这个数字面前世界上发展中国家纷纷败下阵来,而是说一个国家通过工业化可以实现经济增长,但是到了一定程度以后,工业化所带来的增长动力消失了,经济增长缺乏新的动力,于是就停在1万美元左右。

  78年开始的时候,中国经济是一个资本、装备严重不足的经济,那个时候你进行投资,用先进的生产设备、工业设备,可以很快地增加GDP。但是现在用大机器装备各行各业的过程基本上已经完成了。在这个时候再增加资本投入没有用了,因为它的收益等于0了。

  我们看到过去几年间,中国的GDP增长在不断地下降,尽管每年政府增加的投入并没有减少。09年的时候4万亿,4万亿那只是一个符号,真正的投入是十几万亿,现在我们谈40万亿,又加了一个0。可是GDP增长为什么还在下滑呢?因为资本的边际收益递减。

  所以我们现在在宏观现象上看到一系列的数字下滑,它只是表明经济规律正在发生作用。不断下降的GDP增长率印证了中国经济增长的模式是两种模式当中的数量型增长,而不是效率型增长。当资本的边际收益等于0或者是接近0的时候,农民还要提高亩产怎么办?农民说“三农”政策执行得很好,我现在已经有三台拖拉机不要再给我拖拉机了,因为没用。现在还要增产怎么办?这要去找袁隆平院士,跟他讨一些良种,跟袁隆平院士讲,现在靠资本积累拖拉机无法提高亩产了,喷灌机、拖拉机都有了,化肥也用了,亩产已经到头了。如果要继续增产,我向您讨教,能不能用优良的品种给我,我可以继续增加亩产。

  袁隆平院士的优良品种代表的就是A,就是技术含量的增加。袁隆平院士的种子不是老天给的,是他多少年辛辛苦苦经过科学实验、经过筛选得到的种子。这个种子比农民一般的种子技术含量要高得多。如果我们找袁隆平院士,那就是把农业生产的动力从资本积累转向了技术创新。这是今天我们要讲的核心内容,这就是我们今天要讲的经济规律。

  通过资本积累来驱动经济的增长无法持续的原因是什么?就是资本的边际收益递减。当资本边际收益等于0的时候再增加资本没用了,增长停止了。所以靠资源数量投入的增加来驱动经济的增长是无法持续的,而通过A的增加来驱动经济的增长是可以持续的,为什么?因为人类认识自然、认识经济的能力是无限的,因为技术进步是无止境的。

  从工业革命开始我们就在提高A,比如蒸汽机,蒸汽机的效率比人力、比畜力、风力、水力有效得多。蒸汽机之后又有电力、铁路,工业革命以来200年现代世界经济的增长,依靠的不是政府的刺激性政策,主要依靠的是技术进步。从蒸汽机一直到今天的互联网,不断地技术进步推动了A,保持了工业革命以来现代世界经济的增长,也保证了中国经济从改革开放以来到现在的增长。

  当然你不能够把这两种增长动力截然分开,我们只能在概念上把它分开,来理解中国经济当前所面临的困境以及摆脱困境的方法。

  中国已经掉入了中等收入陷阱了

  中国目前的资本边际收益是不是等于0了?我们是不是已经掉入了中等收入陷阱了?我的判断是:是的。从数据上来讲,大概在1990年代晚期,1块钱人民币的投资可以带来大约4毛钱到5毛钱的新增GDP;今天或者说去年,1块钱的投资能够带来多少新增GDP?今天是不是投资边际收益等于0了?我们看到的统计数字是,在过去的大概十几年间,1块钱投资收益从4-5毛钱一路下降到了今天的7分钱,1块钱人民币的投资能够带来新增GDP只有7分,不等于0也差不多了。所以这个时候投资怎么都拉不起来,边际收益接近0了。

  另外一组数据——企业的产品出厂价格指数(PPI)——可以看得非常清楚。从2012年开始一直到去年的下半年全是负增长,企业的产品出厂绝对价格在不断地下降。为什么会产生这个现象?产能过剩。在过剩产能的压力下,企业竞相降价,试图保住自己的市场份额,试图保住自己的销售。产能过剩是什么意思?产能过剩就是中国的各行各业已经不再需要新的投资了。

  在出厂价格不断下降的时候,你如果有新的投资进行,这个投资收益是多少?投资收益是负的。所以我们不仅已经过了投资收益等于0这一点了,而且已经掉到0点以下了。各行各业的过剩产能很清晰地告诉我们,过剩产能一定会导致PPI的负增长,而PPI的负增长意味着资本积累现在已经过度了,资本的收益等于0甚至等于负的,也就是说投资根本无法回收。

  这个时候我们看到的一些经济现象很容易理解了,现在有一个词叫“脱实向虚”。中国政府很着急,给你们一点钱你们不投入实体经济拿去干什么了?炒股票。2015年经历了一次大股灾现在谁也不敢炒了,去年就炒房子,深圳房价去年涨了2倍,深圳的房价还会涨。没买房的不要过度悲伤,你咬咬牙就买了吧,因为以后还会涨。有了房子的也不要太高兴,涨得越高跌得越狠,将来跌得越狠。

  中央银行印钞票,这些钱就是不往实体经济去,你抱怨有什么用,政府老是说“引导资金进入实体经济”,你怎么引导他也不去,因为实体经济的收益等于0了,所以他不去实体经济了。要想让资金进实体经济要想别的办法,在资本普遍过剩的情况下,在产能各行各业都普遍过剩的情况下,资金不会进实体经济。所以在这个时候印钞票,除了制造通货膨胀没有其他任何的效果。

  一旦到资本收益等于0的时候,就是中等收入陷阱。中等收入陷阱意味着宏观政策失灵,“脱实向虚”只不过是宏观政策另外的一个反映,宏观政策这个时候没有用了。政府去印钞票,钞票不进实体经济,去炒资产价格;财政政策也失灵了,财政政策不能增加GDP,我们知道中国大部分的财政投资进入实体经济,民间的投资大幅度地下滑,是因为收益等于0,政府冲进来投资,结果就是更多的过剩产能。

  所以这个时候谈扩张性的财政政策和货币政策那是非常荒谬的。因为扩张性的财政政策、货币政策,实际上都是为了拉动投资。可是我们的经济已经不需要资本了,你投资干什么?这个时候政策不应该是刺激需求。

  PPI上来是因为2016年上半年的货币放水

  这个时候经济增长怎么办?更多的投资意味着更多的产能,更多的产能意味着PPI还会继续下降。PPI去年的下半年为什么上来了,有人说中国经济企稳反弹在即,去年下半年PPI小尾巴为什么翘起来了,这是不是经济企稳的标志?为什么起来了呢?

  分析一下几个原因。第一个原因也是最重要的原因,是货币供应(狭义货币M1)。两者什么关系?两者正相关关系,谁是原因谁是结果?货币是原因,价格是结果。我们发现货币供应和价格指数高度相关,去年下半年的PPI小尾巴翘起来,原因是去年上半年的货币放水。去年上半年M1增长率从5%左右突然增加到25%,货币增长速度在很短的时间里提高了这么多,当然会反映在价格上,所以这个小尾巴翘起来了。

  有人说这个小尾巴翘起来表明中国经济已经企稳了,我认为没有。这个翘起来最主要的原因是中央银行又放水了。说好的供给侧改革呢?怎么又跑到需求侧去货币放水了呢?怎么回事?不清楚。现在我们的政策层面上到底是怎么样操作的?目的是什么?要实现什么目标?现在学者一头雾水。我们搞不清楚宏观政策是怎么制定的。现在我自己越来越多的时间用在微观层面的研究,宏观层面没法研究了,越研究越糊涂。

  有人就说中国经济反弹了,尾巴翘起来是不是U形的右边?去年(2016)5月份权威人士讲中国经济不是U形更不是V形而是L形,这个我是同意的。有人说U形已经走出来了,并没有走出来,主要是因为中央银行的放水。市场上关于当前的经济形势有不同的观点,有人认为已经企稳反弹,但是在学界我所听到的基本上是共识,中国经济仍然处于L形,而不是U形。学界争论的L形到底是这一竖还是一横,没有对L形有争论。我个人认为,我们现在在这一横上,这一横还要横很长的时间,并没有走出来。

  除了货币放水以外,反弹还有其他的原因。一个是去产能,去产能确实有一定的影响,但是它的影响远远低于货币放水。还有是库存周期,因为去年各行各业的库存是历史最低水平,为了补充库存,需求起来了一点,造成了一个反弹。

  再增发货币,目前的房价、汇率都保不住

  今年怎么样不用说大家都知道。今年以来这条红线(货币供应——狭义货币M1)一直在下,预示着今年下半年经济跟着这条红线下去。你会说,这红线效果挺明显的,为什么不继续把它拉上去呢?再把它拉上去深圳老百姓怎么活啊?深圳的房价还要涨到什么地方去啊?现在政府运用手中所有的行政手段在打房价,在限购、限价、限贷,现在还敢再增加货币供应吗?再增加货币供应行政手段都控制不住房价了。

  所以这个红线从今年年初开始就往下滑了。资产价格的暴涨是政府收缩货币的一个原因,政府收缩货币的第二个原因是人民币汇率。人民币汇率面临巨大的压力,要再增加人民币的供应,人民币汇率会进一步地贬值。现在在汇率的控制上也是几乎动用了所有的行政手段,资本账户相当于关闭掉了。大家都能够感受到,现在到香港去买保险,卡在那里刷不出来,换一点外汇把你当犯人审。你到银行换一点外汇,问你N多个问题,恨不得就假定你是一个在逃犯人一样。用所有的手段控制了资本账户,维持了目前人民币的汇率。如果再增发货币,连目前的汇率都保不住。

  现在我们是“捉襟见肘”,拆了东墙补西墙,管了这头管不了那头,是一种非常窘迫的状态,这就是中国经济的现状。

  所以企业界的朋友对于未来宏观经济严峻的形势要做好充分的准备,随着货币的再次收缩,今年下半年经济的数字会继续往下走,这个L形还很长。关于L形要走几年,取决于政府接下来要做什么,如果做得对,这个L的小尾巴会很快结束,如果政府在改革中无所作为,我们在L形中继续往前走。

  中国经济处在一个转折点上:要转向效率性增长

  在这样的情况下,在这种数量型增长已经是没有多大空间的情况下,中央政府在过去的几年中提出了一个很重要的政策方向的改变,这个政策方向的改变由于后续的解释不甚清晰,引起了市场和民间思想上的混乱,以至于现在我们对政策方向的改变没有给予充分的重视。这个政策方向的改变就是在投资拉动已经失效的情况下,我们在政策上提出的基调是什么?

  第一是“新常态”,新常态就是各位不要再预期10%的增长了,不会再有更高的增长了,那个时代已经过去了,甚至不要再预期8%的增长了。6.5%仅仅是一个数字,真实的增长率谁知道啊?反正很低就是了。6.5%就是统计局的一句话,高速增长的阶段过去了。第二,提出来“供给侧”,等下我会讲什么叫供给侧。

  这两个政策的转向,实际上反应了我们今天要讲的主题,就是中国经济处在一个转折点上,我们现在已经从需求侧转向了供给侧,转向供给侧实际上就是我们多年呼吁的效率型增长,转向供给侧就是从K和L转向A。为什么说转向A?因为A是技术水平,谁决定了技术水平?不是工信部、不是科技部,工信部和科技部只决定科技项目的补贴,不决定技术水平。技术水平是企业决定的。企业在供给侧还是在需求侧?企业在供给侧。所以供给侧一提出来以后,本人表示支持供给侧的转向。

  我的学生取笑我,他说“教授,你很少跟中央保持一致啊。”我说“你说的还不对。不是我跟政府保持一致,是政府跟我保持一致。OK?”我们呼吁了这么多年要效率型增长,政府终于同意了,当然他的说法是供给侧,我们的说法是依靠效率的提高来驱动中国经济的增长,而不是依靠政府发钞票、花钱,搞地方平台、投资,不是依靠这套东西,是依靠企业效益的提高。

  所谓的供给侧政策,一切围绕着企业效率的提高。这在目前我们看到的官方文稿中也罢,媒体的文章中也罢,都没有给予充分的重视。供给侧就是要提高企业的效率,在提高企业效率的方面我们不需要什么政策,但是我们需要制度保障。企业的效率怎么提高?要靠技术创新。我们关于供给侧的讨论应该围绕着企业效率,也就是围绕着如何促进企业的技术创新。

  效率性增长要靠创新
  说到创新我们在这里要给一个定义,什么叫创新?创新有很多的内容,我们一般理解的创新是,新技术、新产品、新服务。智能手机算一个创新,但这只是狭义的创新,广义的创新的内容要比狭义的创新丰富得多。广义的创新除了这种狭义的技术创新之外,还包括了商业模式的创新,比如京东的电商,这就是一个零售业模式的创新,当然他用了一些互联网。还有一些我们看到的,没有用任何的新技术进行的创新,那就是商业模式的创新。

  创新还包括了组织的创新,同样是深圳的企业比如万科,万科的楼盘很多,如何能够激励万科的每一个员工去最大化股东的利益,万科做了一个很有意义的组织上的创新,就是“事业合伙人制”,不涉及任何技术,事业合伙人的创新起了什么作用?每一个项目都有一群合伙人,这个合伙人有管理人员、有员工,大家都相当于尽管不是万科的股东,相当于都是这个项目的股东,都可以从这个项目的收益中获得收益。用这样的方法来激励每一位员工去努力工作。这也被我们包含在A里面,万科的事业合伙人的创新,有点类似78年小岗村农民的创新。

  现在依靠K和L这种增长已经没戏了,只好去做A,A又要靠创新。创新而言我认为深圳是全国创新城市的第一位,这个城市可以称为“创新城市”。我每次到深圳来心情都比较愉快,每次回到北京都感到很压抑。

  深圳真的是一个创新城市,要珍惜这个创新环境。我在深圳看到了最多的创新企业,我在深圳看到了最多的创新技术,我的很多学生都在深圳。这里的商业环境、创新环境,跟全国其他城市相比那简直就是天渊之别。

  深圳这个地方为什么能够成为创新城市很多原因,其中一个原因就是政府管事少。后面我们会讲到供给侧到底要采取什么样的措施能够促进创新,供给侧根本不需要产业政策。去年林毅夫和张维迎教授的产业政策之争中我坚定站在张维迎教授这边,坚定地认为供给侧根本不需要产业政策,产业需要一个良好的公平的竞争环境。我就没有看过中国哪一家创新公司是由政府的政策扶持出来的。

  中国的创新企业数一数,华为,民营的,在深圳;腾讯,民营的,在深圳。这些创新企业全都是民营企业,哪有什么政策扶持。现在做大了,政策送上门去了,在他刚初起的时候谁扶持他了?马云惨到找不到投资人,马化腾到处求爷爷告奶奶,最后南非的一个投资家投了他一把。南非的投资家为什么投了他一把?我估计南非远在万里之外根本不了解中国的情况,稀里糊涂给他融了一把资,就做成了一个腾讯。哪个是政府扶持起来的?我简直找不到。

  供给侧四大措施
  所以你要做A,要做经济转型转向A,在政策层面上我们不需要产业政策。我们需要的是什么?我提出了供给侧四大措施:

  第一大措施,保护私有产权。保护私有产权和创新有什么关系?关系太大了,因为创新研发都需要进行长期的积累,并不是灵机一动就能够产生的,需要进行长期的研发投资、长期的技术积累,才能产生突破。而你要让企业在研发上做长期地投资,你必须保护他的产权。保护产权的意义在于,给企业家建立起对于未来收益的稳定预期,只有稳定预期的支配下,他才能够做长期投资。

  中国的企业家都喜欢短平快项目,中国的企业家都不愿意投研发,原因是什么?原因是未来的不确定性太高了。我投资研发,我十几年的积累,十几年以后怎么回事我还不清楚呢。所以现在你看我们的企业家不是把这个资金投入到研发项目上去,而是把资金转移到国外去。

  春节期间我参加了中欧澳大利亚和新西兰校友会的成立,在悉尼的成立大会上有70多位澳洲和新西兰地区的中欧校友来参加,我对他们讲,我说大家跑到这里来,参加校友会的成立我很感动,我感动的是各位对学校的这一份情还在,但是另外一个方面我也很伤心,我伤心的是这么多的校友跑到澳大利亚、跑到新西兰来,本来你们应该留在中国的这片土地上,你们应该在这片土地上投资,来发展你们的事业,现在你们全跑了,我感到伤心。当然我不责怪你们,你们的行为、你们的选择全是理性的。

  为什么跑了?财产的安全,孩子的教育,空气,环境,所以跑了。

  所以保护私人产权是进行长期研发投资的前提条件,你没有有效的产权保护,没有人愿意做长期地投资。所以我说搞供给侧我们赞成,推动技术创新我们也认为是解决中国今天面临着诸多经济问题的一个有效的方法,但是需要加强对产权的保护。

  去年11月中共中央和国务院联合发了一个通知,这是值得一看的,说明这个问题已经反映到中央了,中央已经在关注这个问题了。这个通知是《关于尊重和保护企业家精神的意见》,今年3月份的政治局上又通过了一个意见,内容大致相同。说明现在这个问题已经比较严重了,已经引起了高层的注意。你要保护私有产权,要尊重企业家精神,否则我们创新没法做。

  你出文件、出意见这当然是好事了,但是为什么没有起到预想的作用呢?就是你的文件和意见不能够有效地实现你的目标。保护产权最有效的方法是什么?法治,不是人治。因为你今天发这个意见,明天又发一个相反的意见怎么办?我们看到政府经常发一些自相矛盾的意见,我就晕了,不知道哪个管用。而法治是非常清晰的,他不会随着政府的变动而随意地更改,这样他对产权的保护是比政府的承诺更加有效。

  供给侧我很赞成,一定要做,但是第一要保护私有产权。

  第二,缩小国有经济范围。国有企业从来不做A,他做K、做L,他投资冲动非常强烈,他雇了一大帮人。国有企业冗员充斥,人浮于事,他就是不做那A。为什么国有企业不做A?没有企业家精神,没有生存压力,都对。国有企业做不了A的原因是什么?他既没有创新的动力,他也没有创新的压力。没有创新的压力大家都知道。民营企业在市场上,如果他在创新上落后会有什么结果?市场会惩罚他,市场会淘汰他,他创新是迫于市场的压力。

  手机为例,曾经手机的NO.1是诺基亚,诺基亚现在在哪里?谁知道呢?为什么?从老大沦落为不知所终。为什么?在创新上也就落后了一步。落后了智能触屏手机,诺基亚已经掌握了这个技术,但是他没有推出产品。苹果手机出来的时候诺基亚还在按键盘,那个小键盘我看不清楚,那么小的手机,指头得多细啊才能用诺基亚手机。一个创新落后,曾经的第一名老大就被淘汰出局。创新在市场竞争的环境中并不是企业锦上添花的事,创新是企业生死攸关的头等大事。

  在数量型增长已经结束进入到技术创新时代,创新是企业的头等大事。企业的CEO一定要抓创新,企业的董事长一定要关注创新,创新失败企业就失败了。可以说,企业存在的目的就是为了创新,不是生产、不是销售,而是创新。因为市场压力太大了,你一步慢了,就淘汰出局。

  国有企业别说一步慢了,国有企业十步慢了都不在乎,因为他不会倒,因为他不会被淘汰出局,因为他是吃皇粮的,因为他出现问题政府会救他。他有什么创新压力?没有压力。他也没有创新的动力。

  创新的动力来自于哪里?来自于企业家的激励。企业家进行创新的激励有哪些?乔布斯为什么要创新?比尔盖茨为什么要创新?人都一样,作为人我觉得人和人之间相同之处远远大于我们的差异。乔布斯创新最强的动力是要把苹果做成一个百年老店,能够长存的优秀的公司,他有改变世界的情怀。盖茨创新要发财,两个人都是很了不起的创新者,但是两个人动机不一样。比尔盖茨要把他的企业做大他要发财,你不用责备他境界太低,我们也不用一定都要学乔布斯假装高大上,用不着,人是很复杂的动物,他的行为由多重的激励来驱动的。有的人要改变这个世界,有的人要发大财。有的人要用他积累的财富去做慈善,各种各样的动机来进行创新。

  但是,各种各样的动机进行创新,在国有企业那儿我们一个都看不到。国有企业的高管创新成功了他也发不了大财。为什么?因为央企老总每年60万,他们管着数以千计甚至上万亿的资产管着,你每年发他60万,开什么玩笑?要我做央企的老总管着数千亿的资产,每年拿到所有的工资60万,我干什么?我肯定要偷啊,人性使然啊。我肯定要琢磨,这几千万的资产我怎么样把他运作一下,我个人能够获得一点好处。

  比如说外购,我采购的价格就比市场价格高好多,我从谁那儿购的?从我哥们儿那儿购的。外包同样,从我的哥们那个企业购的高于市场价格,高的那一部分分吧。他们没有创新的激励,他的工资封顶,他不能够分享创新的收益,既没有创新的动力,又没有创新的压力。国有企业不可能是创新的主体,创新的主体必然是谁?民营企业。所以为了建设中国的创新经济,一定要缩小国有经济的范围,国有经济越大,这个国家的创新越没希望。

  第三,放松和解除管制。管制是创新的大敌。按照市值计算中国为什么出现了世界级的互联网公司?原因之一就是互联网刚刚进入中国的时候政府还没有反应过来呢,没管他,他一下子就起来了。自由的环境、资源的自由流动,是创新的必要条件,你少管我,你看你政府产业政策扶持的那一些新兴行业,我们发现政府扶哪个,哪个就垮。政府弄光伏,光伏什么后果?产能过剩一塌糊涂。光伏的领头企业全倒了。所以创新他不需要政府扶持,他需要政府创造一个良好的竞争环境。你不要管。

  现在又说电动汽车是新科技方向,国家政策支持。结果是什么?结果是企业和官员勾结骗取国家补贴,都在骗。说“我是电动汽车”,其实他根本不清楚什么是电动汽车,企业不清楚,官员也不清楚,搞两辆样车就把补贴骗过来了。电动汽车技术我们现在照样落后。所以创新不需要政府的扶持,但是需要一个自由的、良好的环境。

  第四,全面减税。不仅仅是帮助企业渡过经济下行的难关。全面减税的意义在于落实十八届三中全会提出来的“要让市场在资源配置中发挥决定性作用”,把资源更多地从行政性配置下解放出来,也就是从政府的手里解放出来,在市场上由企业来进行配置。这是减税最重要的意义,不仅仅是减轻一些企业的负担,当然减轻企业的负担现在也是很必要的,更重要的意义是把资源从行政性配置转向以市场为基础的企业进行配置。

  以上是我提的四条供给侧的政策。各位估计一下,被采纳的可能性有多大?几乎等于零。跟我们的资本边际收益一样,几乎等于0。我也知道几乎等于0,那我还在这里鼓吹什么呀?我在这里鼓吹因为这是我的工作,我的工作就是研究,我的任务就是根据我的研究结果提出政策建议,至于这个政策建议政府接受与否跟我没关系。我不会因为他接受而喜,我也不会因为他拒绝而悲,这只是我的工作而已。

  创新的认识误区

  如果政府不接受企业怎么办?宏观政策我们无力影响,企业只有在严峻的经济环境中做好自己的工作,特别是要做好创新。当前我看到了不少企业对于创新存在着一些模糊的认识,大家都意识到创新转型的迫切性,但是又感到似乎是落入了一个转型的悖论。

  我的学生跟我说“教授,我现在发现如果不转型的话是等死,转型是找死。你看这两种死法哪种更好一点?”我说“之所以有这种悖论,是因为你对转型存在着错误的理解。”我们有一些企业家把“转型”错误地理解成“转行”,转型不等于转行,转行确实找死。转型能够闯出一条生路。为什么转行是找死?因为你转行到了一个全新的行业,你没有行业的经验,你没有客户的基础,你没有团队,你不熟悉监管团队,不是找死吗?

  中国有一个故事叫做“赛马的故事”,这个故事的精神是什么?当人家出上马的时候你出下马,当对手出中马的时候你出上马,当对手出下马的时候你出中马。这个故事告诉我们什么?要扬长避短,要以人之长击人之短。你转行是以己人短击人之长,那不是找死吗?就像冷兵器时代的僧格林沁骑兵马队冲击洋人的长枪大炮一样,那不是找死吗?要用你的长处在市场上竞争,不是用你的短处。转行恰恰用你的短处在跟行业中已经建立起优势地位的企业进行竞争,所以我一再强调,转型不是转行。转型往往要求在你最熟悉的企业中来思考,来改变现状,来求得生路。

  这里给大家介绍一本书,彼得德鲁克写的《创新与企业家精神》,这本书是1984年出版的,今天我们读起来没有任何时之感。德鲁克在这本书里提了几个观念我非常赞同,一个观念就是“创新需要专注”,第二个观念就是“创新未必需要高科技,创新在传统行业中照样可以进行。”德鲁克用1980年代美国的数字说明,创新型企业3/4来自传统行业,只有1/4是来自科技行业。所以我们不要以为我不是互联网、我不是大数据,我不懂人工智能就不能创新。错了,你是卖葱的卖蒜的,你是炸油条的、开饭馆的,你是做鞋的、做衣服的都可以创新,创新有高科技当然好,但是并不以高科技为前提条件。德鲁克在这本书里面举了很多传统行业的创新,这些创新都收到了巨大的经济效益,但是没有什么高科技。

  创新案例

  我们只介绍一个麦当劳,他是一项伟大的创新,由于这项创新一个新的行业诞生了,就是快餐业。快餐业是由麦当劳创新的,在麦当劳之前没有快餐业。麦当劳的创新始于纽约的一个奶昔机的供应商,这个奶昔机的供应商发现,他每年奶昔机卖得最多的是加州一家汉堡店,每年都是加州这家汉堡店向特订购最多的奶昔机,他自己好奇,为什么每年都是他呢?于是他就飞到加州去看这家汉堡店。这一看发现果然与众不同,在麦当劳之前汉堡是怎么生产的?汉堡是一个萝卜一个坑,一个员工在一个工位上负责汉堡包的所有制作工序。从切面包,到切菜片,到炸肉饼、抹酱、打包、卖给客户都是一个员工来做。

  这种生产方式有什么问题?效率低。产品质量不够标准,这是两大痛点。不同的工人炸肉饼,有的人炸的时间长短不一样出来的味道不一样,客户感受一个店里买的汉堡味道不一样,他的产品的品质一致性无法得到保障,更不要说印度的汉堡包和中国的汉堡包了,那更不一样。这是一个统点,产品品质的一致性无法保障。第二个痛点是效率低,效率低体现在哪里?一个人要依次完成所有的工序,制作时间长,制作时间长意味着客户的等待时间长。我要等着你一块一块做,这个汉堡包的制作就跟家里家庭主妇做饭一样,他是一道一道工序做的。

  这家汉堡包的商店不一样,他是把在同一空间点上不同时点上完成的工序分布在不同的空间点上,在同一时点完成。用空间换时间。切面包的专做切面包,切生菜和番茄的关门管切生菜和番茄,炸肉饼的专门管炸肉饼、抹酱的专门抹酱……把汉堡包的单工位制作变成了流水线的生产,解决了问题是每一道供需都标准化了,因为他是由一个工人完成的。更重要的是他把不同的工序在不同的空间上同时完成,缩短了制作时间,也就是减少了客户的等候时间,所以这家汉堡店顾客盈门,每年都向纽约的奶昔机供应商订购最多的奶昔机。

  这个纽约商人叫做克拉克,他大受启发,马上跟加州的汉堡店的老板讲,说你想退休吗?老板说我还年轻,我还想干。他说你别干了,你要多少钱?我把你这个店买了。出了一个很高的价钱,汉堡店的老板拿着钱高高兴兴环游世界了,他把这个店买下来以后,把这种生产方式推广到全美国,一家一家地接着开店。这就创造了快餐业,这就是麦当劳的由来。

  你看一下麦当劳的创新,用了高科技了吗?没有任何的高科技。就这样造了一个大市值的公司,而且创造了一个全新的快餐行业。今天我们看到的快餐业肯德基、汉堡王等等,全都是学的麦当劳。麦当劳是第一家。所以传统行业照样可以创新,没有高科技同样可以创新。

  这是我们企业在创新的道路上需要澄清的一些误解。当然还有刚开始的第一个误解,那就是“转型就是转行”,错的,转型不是转行,只有在一个行业专注地去经营,长期地去耕耘和积累,才能发现你那个行业中的痛点问题是什么,才能够针对这些痛点的问题找到有效的解决方法。德鲁克在这本书里面举了很多的例子,他都说明:创新需要专注。创新不一定需要高科技。

  最近我在下面看了很多的企业,中国的企业还是有希望的,我之所以到深圳来心情比较愉快,也是看到了一些企业在积极地思考如何进行创新。从这些企业身上我看到了中国经济的未来,一回到北京,全都是雾霾,未来是什么都看不清。

  我看到的中国传统行业的创新,有的用了新技术,有的没有用新技术,照样做得不错。比如说有一家火锅店叫海底捞,我在深圳也去过海底捞,发现他确实有创新。去过海底捞的发现海底捞的发现在哪里?服务非常好。他的服务和其他的企业、和其他的这一些餐饮业的服务不一样在什么地方,我个人感觉,作为客户的体验跟大家分享一下。

  我个人感觉他的服务恰到好处,并没有高高在上,也没有低声下气,我们的中国服务业就是这两个极端,比如你一进门他点头哈腰说“先生您来了”,弄得你很不舒服。海底捞的服务让你感到很亲切,恰到好处。海底捞最难得的是,你到全国各地哪一个地方的海底捞去,他的服务一致性很高,基本都是这个服务,并不是说深圳这个地方的海底捞的服务让你感到舒服,济南那个地方又让你感到难受,不是的,他全国都是一样的。

  这要求公司的人力资源管理一定是有他独特的地方,我没有做具体的深入调查,也就是说海底捞在人力资源管理上做了创新,这也是我们讲的创新的一个内容。我还观察发现,海底捞有一些小的创新积累起来,就使得他成为一个区别于竞争对手的品牌。吃火锅有一个客户痛点,油烟。于是有一些火锅店就在涮锅上面架了一个吸烟机,但是噪音太大。本来几个朋友周末约了到餐馆里去聊聊天,把抽烟机一开声音很响,彼此聊天气氛都没有了,因为你要喊着说对方才听见。海底捞没有那个罩子,他的油烟怎么解决?他的油烟解决是在涮锅的周边全开了槽,油烟一出来就从涮锅周边的槽吸走了。你用大罩子我不用大罩子,我在涮锅的边上开槽,开风口,把油烟抽走,这就是创新。微小的创新可以积少成多,最终客户能够体会到,你这里跟别人不一样。所以我出差但凡想吃涮锅的时候一定会先找海底捞,然后再考虑其他家。这个就是创新,他没有什么高科技。

  在互联网的时代大家都说你要不上网你就得死,大家都要触网。谁说的?为什么要上网啊?说互联网是一个强大的销售工具,是吗?互联网是强大的销售工具,但是我们为什么看到用传统销售方法手机公司照样可以做得很好?小米是网上销售的,中国去年手机出货量是怎么排名的?第一名Oppo,第二名Vivo、第三名是华为,接下来才是互联网销售的小米。华为、Oppo、Vivo全都是传统的销售渠道。我并不是排斥互联网,而是说互联网他仅仅是一个工具、是一个手段。在商业、在市场上到底用什么样的手段、运用什么样的技术,取决于我的综合成本和综合效应的分析。没有必要一窝蜂地去上网,有的时候传统的方法反而比互联网更加有效。

  我可以举出很多的例子来,当然你要是能用互联网我还是建议大家尽量地用,可是在我这里是不存在互联网思维的,我和互联网界的朋友们经常交流,我们也经常争论。我和马云争论过,我和周鸿祎争论过,我坚决否认互联网思维的存在,我认为互联网没有什么思维,互联网是有思维的人手中的一个工具,它本身没有思维,就像蒸汽机没有思维一样,看你怎么样去用它。

  下面我介绍一个传统行业,运用互联网和数据技术对资深进行改造,取得了非常好的效益。给在传统行业工作的朋友们增加一点信心,当然我这并不是说否认互联网行业、移动技术以及人工智能,今后他们会是非常活跃的创新领域,我不否认这一点。但是在这个领域之外的企业照样可以进行创新,只是想说明这样一个观点。

  这是一家服装企业,多传统啊,做衣服的。但是他做的衣服和一般的服装企业有点不一样,他是做定制西服。我们知道过去做定制西服都要去裁缝铺做,给你量完尺寸裁缝自己到布上把你的尺寸画成版形,然后拿剪刀裁下来再缝制。这样的商业模式痛点在哪里?交货期长因为要手工师傅一件一件去做,时间有时候是一到两个月。第二个统点是什么?贵,价格高,不方便,我要到裁缝铺去,而且贵。一套好一点面料的西服现在国内要多少钱?接近一万吧。交货期快的一个月,慢的两个月,我在香港定的西服要一个半月才能寄到我这里。

  这家企业解决了痛点的问题,这个行业之所以慢、之所以成本高,是因为有经验的裁缝师傅很有限,他做不过来,而且有经验的裁缝师傅成本是高的,他要解决这个问题。用什么方法解决?用大数据。其实数据也不算太大,跟自动驾驶汽车的数据相比简直不是一个量级的。

  人进去以后先三维扫描,当然现在精度还不够,还是需要人皮尺去量,如果他将来的技术过关的话三维扫描可以了,往那儿一站两秒钟扫描,扫描完了就把你身上的尺寸都输进计算机。输进计算机以后,他不是靠有经验的师傅根据你的肩宽、臂长去打版,去裁布,不是的。而是从数据库里调出和你的身材最接近的版形,然后用一种算法来缩小那个库里的版形和你尺寸之间的差。也就是用计算机设计。

  这张PPT上可以看到,上面那两片是一个裤腿,下面那两片是另外一个裤腿,不需要有经验的裁缝师傅,这些小姑娘进来了训练一下就可以做。前提是什么?数据库。前提是你的数据库要足够大,要能够存了足够多的样板,使得在库里我可以提出一个版形和你的身材是最接近的。数据库越大,适合我身材的版形就越多,然后再用算法做一些调整。

  这个设计就完成了,不用有经验的老师傅再琢磨,因为你的身材是三维的,他要把你三维的身材放在平面上,变成两维的尺寸和形状,这个是需要一点经验的,而且两维的布裁出来之后锋起来还特别适合你三维的体型,他有一个三维到两维的转换,再从两维到三维的转换,这个转换不是靠师傅的经验完成的,而是靠机器完成的,这就是他创新的地方。

  这个尺寸一设计完了,加工指令自动地送到了数控裁床,下面铺上布,上面盖一个塑料薄膜,底下一抽真空,就把布放在裁床的面上,由中央控制的切割头一片一片地把布给裁出来。裁好了布以后,最右边的这个工人把每一片布上钉上一个IC卡挂到了流水线上,开始在车间中游走,物联网的概念。每一片布走到什么地方,它目前的状态是什么,系统里面全都有数据。

  这个布片就在挂架上走,走到了这个工位上,这个工人把这片布拿下来,IC卡在机器上一扫,屏幕上显示的就是他应该在这里做什么样的加工。开扣眼的、锁边的、缝制的,清清楚楚。加工完以后再把卡一扫挂回到流水线继续往下走。

  最后的成品从颜色上、款式上、尺寸上,没有两件是一样的,全是个性化的,根据你的需求定制的。他把手工操作的定制的服装变成了工业化的流水生产,结果是降低了一半以上的价格,1万块钱的西服现在卖不超过5千。交货期从1个月缩短到7天,保证7天交货了,如果晚到甘愿受罚,他承诺了一定做到。这就是用了一点数据技术来改造传统行业,取得了这样的效果。

  我们讲创新需要专注执着的“笨人”,专注在你自己的行业,像华为这样的企业专注,几十年来如一日做通信设备,不炒股、不卖楼、不做金融、不上市,大家说华为太高大上了我们学不了。老干妈行吗?人家就做辣酱,也是不炒股、不卖楼、不做金融、不上市,人家把这瓶辣酱卖到了全世界,无论中国人走到哪里,都可以买到老干妈辣酱。我在悉尼、纽约、巴黎都可以买到老干妈的辣酱,他的全球销售体系一定有独到之处,他是怎么做到的?所以我们不要妄自菲薄,觉得自己所在这个行业没有什么好做的,一定要跨界转移到高科技行业中去,不是这样的。就在自己最实际的行业中我们照样可以创新。

  我们看到一些国外的企业在跨界,我们自己也想学,其实这些国外的企业根本就没有在跨界,我们没有仔细地去观察和分析。

  比如说谷歌,谷歌做搜索引擎的为什么做自动驾驶汽车,引得我们好多的中国企业根本就没有汽车行业的经验,现在都纷纷做起了电动汽车和无人驾驶汽车。我说你有什么技术积累可以做无人驾驶机车?谷歌为什么可以做?谷歌之所以做无人驾驶汽车,因为无人驾驶技术正是谷歌的畅想,谷歌没有跨界,而是把他的核心技术延伸到了自动驾驶上。自动驾驶用的是谷歌的图象处理技术,图像和数据处理的技术这正是谷歌搜索多年来积累的优势所在,所以他没有跨界。你不能把谷歌的汽车看成是一辆汽车,你应该把谷歌的汽车看成是一部强大的数据处理器,因为他通过声光电各种各样的传感器在识别周围的环境,有的是图像,有的是声音,有的甚至是热能,他把这一系列传感器获得的信号输入到他的中央处理器当中去,判断我这个车周围都有几辆车在开,这几辆车的速度是多少,发生碰撞的概率是多少,进行快速地运转。当两辆车非常接近的时候,他做出判断驾驶盘拐弯。我们看谷歌的自动驾驶汽车视频可以看到,当一辆车离得特别近的时候它自动就拐走了。实际上他是根据传感得来的信号,对这些信号进行处理分析,然后做出操作的指令。因此谷歌的自动驾驶汽车实际上不是传统意义的汽车,他的核心是强大的数据和图像的处理器,而这正是谷歌的技术。

  我们的企业很多既没有做过车,也搞不清楚图象处理是怎么回事,他就贸然地冲进去了,那不找死吗?他有什么技术能力能够做这些东西?你不要看国外的企业,其实国外的企业他的跨界比国内的企业要少多了,他是以专注而著称的。

  小结

  总体来说中国的宏观经济现在没什么好看的,大家都说未来宏观经济有很多不确定性,在我看来未来宏观经济没有什么不确定性,非常确定的,就是L形的长尾巴,大家不必对宏观感到焦虑,焦虑的原因是我们难以把握,其实现在宏观我觉得很好把握。

  你就准备好L形的尾巴还有个三五年就好了,不必再为这些事情再花时间费脑筋去思考,要思考的是在长L形中企业怎么办,从过去的制造转向研发,从过去的市场份额转向思考创新,转向产品,专注产品、专注技术。以中国企业家的才能,以中国市场的巨大,我相信只要我们下决心转型,这个任务是可以完成的。而只有中国的企业能够创新,不断地保持活力,中国的宏观经济未来就有希望。

  我就讲到这里,谢谢大家!

-R/g2SI

-R/R2SL

发表在 社会生活 | 标签为 , , , , | 2条评论

显白黑茶色蓝黑色板栗色三元牛奶李宁体育用品汽車老司機

20:1, PHP性能评测Base62x:内置模块 vs. 脚本模块

上篇( -R/P2SN )我们概括地解释了使用服务器端、客户端各种缓存、压缩优化提速-gMIS等手段. 这次更具体到编程语言层面讨论优化。行文此前背景:
1.  -gwa2 vs -thinkphp, -R/92SJ
2. php的所谓优化, -R/22SK
3. 关于Log4j和Sysytem.out.println的性能比较测试, -R/I2SL

关于Java/PHP的性能评测和优化,大致结论是面向对象编程(OOP)等是拿性能换便利(Convenience)、强壮(Robustness)等,除了描绘客观复杂世界所需外,深层的另因可能是硬件性能越来便宜,而人工越来昂贵。本文可以看作是其中 2. 的接续,尝试探索的是,在PHP编程中,使用C语言等实现的Module/模块(内置模块)比PHP脚本写的Module/模块(脚本模块)快吗? 如果快,同样的功能,能快多少?

距离上次进行类似的测试,已经十多年过去了,PHP和Java都发展了很多版本,日益成熟和稳定,而C语言却保持了相对的稳定,现在重新做一些这样的性能对比,颇有时空感。

要做这样的实验而且有一定实际意义的话,机会要等或者碰的,此前进行的将 -Base62x 进行多版本语言开发工作,刚好能满足这一实验的目的。我们成功将地C语言的 -Base62x 编译成PHP 7 的一个ext模块 ext/base62x ,同时也使用PHP脚本语言实现了 -Base62x 的版本,名为 base62x.class.php, 相应地代码都可以从 -github-wadelau 下载获得。

有了这些准备工作,我们要进行的实验是使用同样的算法,对一段文本进行 -Base62x 编码,C语言实现的PHP ext/base62x 模块会比使用PHP脚本编写的 base62x.class.php 运行得快吗? 能快多少?

基于此,我们编写了测试程序,进行一万次随机字符串的 base62x 编码,将其运行耗费时间进行记录对比。

测试程序主体, basetest.php
使用base62x.class.php的编码方法, 
      $b62x = new Base62x();
      $s_encoded = $b62x->encode($s);
使用PHP内置C语言实现的同样算法模块base62x.c的编码方法,
      $s_encoded = base62x_encode($s);

使用C语言的模块需要重新编译PHP的安装目录对应的程序,关于编制PHP扩展模块的详细操作参考,-R/d2SH , -R/M2SJ .

分别使用上述方法进行10,000次编码,使用PHP的内置函数microtime进行计时,记录每进行10,000次编码操作时,两者所花费的时间,重复进行10次,记录列如下。

base62x.class vs. base62x.c for 10K strings encoded operations

  Time cost for Time cost for  
  base62x.class.php base62x.c  
1 0.15378499 0.006615877  
2 0.154273987 0.006779909  
3 0.161313057 0.00666213  
4 0.178726912 0.00667119  
5 0.193426132 0.007475138  
6 0.162053108 0.00752902  
7 0.169737101 0.00692296  
8 0.155719995 0.006750107  
9 0.164766073 0.007402897  
10 0.196639061 0.006860018  
      Faster x
avg 0.169044042 0.006966925 24.2637964
max 0.196639061 0.00752902 26.11748314
min 0.15378499 0.006615877 23.24483765

测试主机环境为普通台式机PC上运行的VMWare Station中运行的OpenSuSE Linux Leap 64bit,PHP 7.0.

运行数据显示,使用PHP脚本语言实现的base62x.class进行一万次编码平均需要花费0.1690秒,也即需要169.0ms;而使用C语言实现的同样的算法的base62x算法的一万次编码平均需要花费的时间为0.0070秒,也即7.0ms;两相比较,前者是后者的24倍,也即base62x.class比base62x.c多用了20多倍的时间,后者比前者快了20多倍。

进一步地拉长与之前的对比,PHP的优化思路,优化逻辑,减少不必要的操作步骤,减少自定义的方法、类库,尽量使用内置方法、类库,当这些还不足够快时,终极提速或者能有较大提速的就是使用类似C语言以PHP扩展模块的方式进行尝试。

针对这个终极优化思路,之前只是定性的分析,这次有了定量的分析,印证了之前的分析和推测。

结合之前提到的针对 Java 的 Log4j 和 System.out.println 对比,似乎这种终极优化也可以应用到 Java 的编程中,通过使用JNI调用Java对外部C/C++等实现的扩展,也能否取得20:1点提速效果,这还有待进一步地实验。

经次实验可以大致地得出,同样算法,使用C语言实现的PHP扩展的内置模块比使用PHP脚本编写的OOP模块要快很多,其比值大约在 20:1 左右。

Base62x: An Alternative Approach to Base64 for non-Alphanumeric Characters.
Base62x 是无符号的Base64编码方案。在文件系统、网络系统中可以安全地使用,同时是各种变种Base64编码方案的理想替代品。

发表在 Base62x, 编程技术, 计算机技术 | 标签为 , , , | 留下评论

汽車老司機愛自己悅己容2nd插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板ChatGpt 与人工智能AI对话

-gMIS 吉密斯 升级:增加缓存,按时间快捷检索和全局SessionId等

这是 -gMIS 吉密斯 发布以来比较大范围的更新的一次,这篇文章也前后写了三周,一是忙,二是要记录的内容多,分别有如下几点:增加客户端、服务器端的缓存,增加压缩输出进行页面加载的提速,增加全局Session进行独立会话管理,增加新式的图形验证码方式,增加按照时间字段进行快速检索的功能等。备忘如下并分述之。

0. 提速:增加缓存支持,默认开启
0.1. 前端/客户端缓存
通过HTTP的Cache字段将页面中不经常修改的资源文件缓存在客户端,从而实现更快速的页面加载,这些资源文件包括JavaScript、CSS和图片Icon文件等。例如,在 HTTP Response 中增加这样的设置。
        Cache-Control: max-age=604800
0.2. 网络层缓存(CDN)
通过将服务器端端页面内容缓存在距离终端用户较劲端ISP端的网络层,从而实现较快的访问,这超出编程的范围,将在另外的篇章讨论。
03. 后端/服务器端缓存
服务器端缓存是将从第三方资源提供方获得端资源缓存在本地,以内存热备的方式使得第二次同样资源可以较快方式获得。第三方资源包括读取文件系统、数据库系统、其他在线资源等。
-gMIS 的服务器端缓存,主要依靠 -GWA2 的缓存接口实现,其中的实现细节描述在 “-GWA2 更新缓存调用built-in cache方法”( -R/r2SH )。
-gMIS 服务器端端缓存主要缓存一些辅助设置端查询,如动态菜单、路径导航、对象表结构描述、select选项等不会即时改变,也不需要实时显示修改状态等数据,对于当前对象表的数据则不能进行缓存,这由于 -gMIS 管理信息系统的性质所决定的,增删改的动作需要即时反应出来。
页面缓存及提速的思维导图可以描述为下图所示。

(页面缓存及提速方式方法)
上述设置分别在 inc/config.class 中进行开关设置,默认开启,可以进行在线开启或关闭。

1. 优化:按时间检索快捷方式
增加按日期滚动的快捷检索方式。对于具有时间属性的对象表,此前提供了按月滚动管理的功能,也即总是按一定规则显示当前月份的数据表,而且在功能区增加对过去三个月的链接。
本次修改,进一步地对具有时间属性的对象表,提供针对时间属性的快捷检索方式,如按天的“今天”,“昨天”,“本周”和“上周”。
区分处理日期/时间戳。对于时间属性是按天或者按小时,按分钟的情况分别进行特别处理。
‘rotatespan’=>’rotatespan’, # table names contains variable datetime, e.g. _201412, _201501, Mon Jan  5 15:31:29 CST 2015
‘searchbytimefield’ => ‘searchbytimefield’ # provide timebased search buttons

2. 优化:增加自我独立Session的实现
减掉对外部/第三方session管理的依赖。经过多方实验,最终选择使用自身提供了一种使用全局携带sessionId(sid)的访问鉴权方式来实现安全认证及会话管理。由于目前需要动态管理的用户信息并不多,主要是当前用户端User Id,可以不依赖第三方会话Session进行管理。
在此之前,-gMIS 一直是临时使用PHP的内置Session进行会话管理,也即在页面的Header部分启用
       session_start();
这种方式在单机实验阶段会运行良好,但在实际生产环境中或者在多个应用服务器组成的负载均衡中却无法使用,需要真实的第三方Session服务会话进行管理。
这次使用一种全局携带Session Id的方式实现Session 会话管理,这种方式在此前的应用中进行过部署,可以穿越各种网络环境,甚至是那种不能透传Cookie的网络环境,其健壮性较好。同时,也提供了基于Cookie的复用。
这样的改动,几乎需要在所有的页面所有的链接中修改增加Session Id,因此改动较大,同时修改后还需要逐个功能点点实际测试,涉及到的工作量挺多的。

3. 优化:探索使用基于单向Hash的图形验证码方式
不再依赖第三方存储信息的方式提供图形验证码服务。这个思路与上一点类似,想彻底摆脱对外部第三方Session会话的管理。传统地对人机验证作为会话管理的一部分,需要先生成问题/答案,存储在Session会话服务器上,然后进一步地等待用户回答,然后进行比对判断。
本次尝试实现一种全新的,基于消息摘要的人机验证方式,后续会继续整理完善成一种可以复制的应用,形成一篇安全类研究文章。
基于消息摘要的人机验证方法不需要第三方Session会话服务器进行问题/答案的存储,减少对第三方的依赖,供应链越短,质量越容易保证。

4. 提速:增加内容压缩后传输
在内容输出前进行压缩,然后再前转交给HTTP Server进行发送,实现传输内容最小化,从而达到页面加载提速的目标。根据在0节的图示描述,页面提速一方面是进行缓存,另一方面是减少页面尺寸(压缩),还有就是将要更新的内容进行局部分割,只更新需要修改的地方,后者已经通过Ajax实现。
这次的主要改动是根据Request中的压缩支持信息进行相应的对内容进行压缩后传输。
如 HTTP Request,
        Accept-Encoding: gzip, deflate, sdch
则HTTP Response
        Content-Encoding: gzip
        Vary: Accept-Encoding

5. Bugfixings and Imprvs
javscript –> javascript
首页底部信息更加丰富
首页定时自动更新
pagenavi, getCondition兼容含有%的oppnsk

经过上述优化和提速,在普通网络环境下,-gMIS 的普通页面请求在服务器端可以做到0.0xx秒完成请求处理,服务器端的每次数据库查询次数减少约80%;页面传送到客户端并展现出来可以做到1秒以内,网络层传输内容压缩比约60%左右。

-gMIS 是一种基于 -GWA2 的通用管理信息系统软件,具有可配置的输入和输出接口。
可以在其上构建各种管理应用软件系统,如
内容管理系统(CMS),客户资源管理(CRM),  企业资源计划管理(ERP),
办公自动化系统(OA)等, 以及各种行业应用管理系统软件,如
人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
商品管理及业务运营支撑系统等等。
实现零代码开发、搭建各种管理信息系统(MIS).

Lower Costs, 降低成本;  Better Productivity, 提高效率.

发表在 -gMIS, -GWA2, 编程技术, 计算机技术 | 标签为 , , | 3条评论

迪士尼母婴显白黑茶色蓝黑色板栗色三元牛奶李宁体育用品

GWA2-Perl Warning: Reference found where even-sized list expected

“Reference found where even-sized list expected” 这是个恼人的 -Perl 编程中的Warnings信息。在实现 -GWA2 的Perl版本时遇到这个问题,而且走了弯路,兹分析及备忘如下。

这个字面意思翻译为在期望为偶数元素列表的地方,发现了引用类型数据。

之所以恼人可能是由于debug时,需要弄清楚函数/方法调用时的pass by value 和pass by reference的异同,而这个细节在越来越“高级”的编程环境中变得不常见,所以真正遇到了,就可能一时糊涂走弯路。
这个 pass by value /call by value 和 pass by reference / call by reference 可以单独开一篇讲,兹简记如下:

“When a parameter is passed by reference, the caller and the callee use the same variable for the parameter. If the callee modifies the parameter variable, the effect is visible to the caller’s variable.

When a parameter is passed by value, the caller and callee have two independent variables with the same value. If the callee modifies the parameter variable, the effect is not visible to the caller.”
pass-by-reference-vs-pass-by-value-animation.gif (500×270)
-R/j2SL

0. 背景知识,Perl中的Hash及Reference
%hash
Instantiating it: %list = (“steve”=>23, “fred”=>38);
Instantiating a reference to it: $ref = {“steve”=>23, “fred”=>38};
Referencing it: $ref = \%list
Dereferencing it: %{$ref}
Accessing an element: ${$ref}{“steve”} or $ref->{“steve”}
–> -R/n2SI

1. 问题
在 GWA2 的设计中,数据及资源的流转需要经过对象object –> 父类webapp –> filea/ dba –> filedriver/dbdriver –> 实际行为及数据。
gwa2-perl-drafting-dba.20170101.jpg (1142×1073)

这个流转过程中,一个较好地承载数据结构是Hash,Key/Value组对,而在Perl的对象和方法等参数传递过程中,是不支持Hash等,如果将一个Hash作为参数进行传递,则该Hash等key/value会被顺序铺列到一个默认的@_数组中,也即如果期望是这样的:
mysub(my %myhash=(‘k1’=>’v1’, ‘k2’=>’v2’));
而实际运行的结果会等同于这样的:
mysub(my @myarray=(‘k1’, ‘v1’, ‘k2’, ‘v2’));
于是,理想的参数传递就不能使用常规的pass by value, 而要使用pass by reference, 也即,
my %myhash = (‘k1’=>’v1’, ‘k2’=>’v2’);
mysub(\%myhash);
魔鬼般的细节就在这里,产生了类似
Reference found where even-sized list expected
这样的错误,其只是一个warning,但在追求完美的coding style中,warnings是不可接受的。

2. 解决方法
问题的本质是在赋值等号的两边,出现了value和对应的reference时,就会报这样的warning,这是输入方面出现不一致,还是输出方面产生的不一致,排解起来容易走弯路。
warn on ($s,%h) = (1,{}) as on %h = {}
–> -R/v2SJ
问题重现:
my %hash = ();
my $hashref = {};
%hash = $hashref;  #  Reference found where even-sized list expected

由于Perl遵循 no unnecessary constraints, 所以在对方法和函数的传值时,既可以pass by value 也可以pass by reference, 两者都是允许的,用起来也很随意,因此一不留神可能就会将reference赋值给hash,进而产生警告。在稍微复杂点系统中,debug变得有些恼人。正确的使用方式示例:

sub mysub($){
    my %result = ();
    ….
    return \%result;
}

my %hash = (‘k1’=>’v1’, ‘k2’=>’v2’);
my $hashref = {};

$hashref = mysub(\%hash);
%hash = %{$hashref};

3. 扩展
Evaluation Stratragy/求值策略: -R/x12SK 

-R/92SI

gwa2-logo-201606.v2.png (300×300)

gwa2-roadmap-201611.jpg (1224×703)

-GWA2 是一套通用网络应用(软件程序)架构系统,基于 -GWA2 可以轻便构建各种网络应用程序, 包括复杂的在线购物商城、 旅游交易平台、社群或者社交网站和新闻资讯网站等, 也包括各种企事业单位网上门户,在线交互及服务作业系统等. 还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部。

发表在 -GWA2, 编程技术, 计算机技术 | 标签为 , , | 留下评论

山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩迪士尼母婴显白黑茶色蓝黑色板栗色三元牛奶

-Base62x 新增JavaScript版本及C/Java/PHP版本的完善

b62x-icon-201306.png (50×50)

Base62x-design-201702.v2.jpg (1025×557)
-Base62x 設計圖

-Base62x 在過去的2016年得到更多的部署和應用,也日漸穩定和成熟。在完成C/Java/PHP開發語言版本的基礎上,日前完成了JavaScript版本的移植,實現了在這四種開發語言中直接引用相關類庫即可應用。
C/C++:   base62x.c
Java:   Base62x.class.jsp
PHP:   base62x.class.php
JavaScript:   Base62x.class.js
相應的源碼已經開源發佈在 -github 上,地址為: -R/a2SM . 
同時也提供了針對各個語言版本的測試程序。

base62x.java_.php_.javascript.manual.201702.jpg (721×377)
OOP編程方式的調用Base62x方法

base62x.c.manual.201702.jpg (771×449)
函數式編程調用Base62x方法

簡而言之,Base62x, 作爲無符號版本的Base64, 可以用在數字進制轉換,字符串編碼兩個方面,其中字符串編碼又進一步地細分為ASCII字符串和非ASCII字符串編碼

這次升級更新主要有如下幾點,備忘于此。

1. Base62x.class.js
增加JavaScript版本的Base62x的實現方法,在JavaScript的編程中可以直接調用該類庫進行編碼,更安全地傳輸非打印字符,如替換内置函數escape/uescape.

2. Base62x.class.jsp
完善對數字進制轉換的相關功能。
Base62x.encode(input, ibase);
Base62x.decode(input, obase);

3. base62x.class.php
完善和修正不等長數組處理函數的一處bug.
_decodeByLength

4. base62x.c
完善和修正了輸出數組聲明時的長度估算策略:
目標進制的字符串長度 = 源字符串長度 * log[源進制] / log[目標進制]

一些個Base62x的部署場景和應用實例。
a. URL4P:   -R/52SJ
b. MobXPc:   -R/92SH
c. gMIS:   -gMIS, FileName Encoding && Login Redirect

d. GWA2:   GWA2, Zea.class, encoding after Zip
e. iAD:    -R/72SH  , Url Redirect
f. ToolBar:   -R/u2SI , Url Encoding

g. Dot-Base62x:   -R/X2SH  
h. URLEncode:   -R/U2SI

上面各種短地址中的ID部分就是使用的Base62x進行編碼的數字.

发表在 Base62x, 编程技术, 计算机技术 | 标签为 , , | 留下评论

山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩迪士尼母婴显白黑茶色蓝黑色板栗色三元牛奶

新春愉快!GWA2 in Perl 初版发布

新春愉快!2017年农历新年第一天,GWA2的Perl版本完成首个版本。

距离我们开始在2016年11月份开始筹划GWA2的Perl版本,大约2个月的时间过去了,这期间,我们对GWA2的软件编程框架设计进行再梳理,在继续完善GWA2 in PHP 和 GWA2 in Java的同时,开发了GWA2的Perl版本。逐渐形成了GWA2的发展路线图。


(GWA2的发展路线图)

GWA2 in Perl 的首个版本支持使用Perl在CLI模式下对数据库的操作,这是一种常见的应用场景。其驱动力仍是像此前描述的那样:

“此前在开发人民网的一套新闻转载发现系统时就多次有念头要对perl的代码进行封装和重用。最近又遇到新的使用perl的开发,居然还要从dbi写起,这太低效率了。PHP版本的gwa2的命令行模式的成功部署和运行很诱人,于是就有了perl的gwa2的实现。显然,这只是个开始。….”

在进行Perl版本的GWA2的实现时,也有很多挑战。-Perl 是一门古老而有年轻的编程语言,距今已有29年的历史,发展历程可谓漫长,而且Perl是松散的,提倡多态和丰富,推崇一个问题总有多个解决办法的文化(TMTOMTD)。Perl对面向对象(Object-Orienatied)支持并不是很好,首先对一个问题是是否引用第三方OO的类库,比如MOOSE,开始之后还有更多的支持与选择,近30年的Perl的发展,使其一方面有大量的成熟的类库,另一方面也有一些历史的遗留问题。

对于这些,GWA2的Perl版本只好保守地从基本功能做起,面向需求驱动,预留和开放相应接口,点滴积累,以其有所成,为Perl社区添砖加瓦,为Perl开发提供一个全心的视角。

Perl6正雄心勃勃地走来,对比太老的Perl5系列,Perl6又显得太年轻。在这个节骨眼上推进GWA2的Perl版本,忐忑和纠结是常有的,不过我们还是提供了一个Tutorial供开发者参考。

Programs Written in GWA2 with Perl

0. data
create table prefix_dummytbl(
    id int(12) not null auto_increment,
    iname char(255) not null default ”,
primary key (id),
unique index uk1(iname));

1. object
mod/DummyModule.pm
use parent ‘inc::WebApp’;

2. controller
ctrl/dummy.pl
use mod::DummyModule;
    $act=listen
    $act=speak
    $act=remember
….

3. view
view/default/dummy.html

4. routing
/path/to/perl /path/to/project/index.pl “?mod=dummy&act=listen&fmt=json”

-GWA2 是一套通用网络应用(软件程序)架构系统,基于 -GWA2 可以轻便构建各种网络应用程序, 包括复杂的在线购物商城、 旅游交易平台、社群或者社交网站和新闻资讯网站等, 也包括各种企事业单位网上门户,在线交互及服务作业系统等. 还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部。

发表在 -GWA2, 计算机技术 | 标签为 , , | 一条评论

汽車老司機愛自己悅己容2nd插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板ChatGpt 与人工智能AI对话