写写年度收益率年均收益率和年化收益率-2

前述写到全国社保基金投资年度、年化和年均收益率分析及其与同期中国央行M2的增长率对比( -R/H2SR,  https://ufqi.com/blog/income-rate-annuals/ )。大致小结为社保基金投资之所以牛到厉害,由于在2007和2015中国股灾时能够成功逃顶获得远超出平均水平的收益率;同时在2019、2020两个年份,分别抢到低点,然后又获得较高的收益率;以此赢得20年来年化收益率8.5%的美誉,跑赢同期中国央行M2的增长率年化6%。

行文到这里,我们想进一步地写写中国另外一个投资大亨:中国投资有限责任公司,中投公司,看看他的投资业绩。毕竟与全国社保基金200亿人民币起家不同,中投以2000亿美元起家。她的投资业绩的年化收益率也值得品读。

4. 中投公司境外投资12年来的年度、年化收益率分析

中投公司2007年设立,是国家主权财富基金,初始资金规模2000亿美元。其业务主要分三块:中国国际、中投海外和中央汇金。前两者主要在境外进行投资活动,中央汇金是各大国有大银行的大股东。

在中投公司的官网上有截至2019年的投资业绩数据( -R/G2SZ )。截至2019年,其累积年化收益率为 6.13% , 略低于全国社保基金的 8.5%。 不过中投公布的数据统计口径有两处差异: 1) 年度净收益率(刨去税金等其他?), 2)计算时间以公司成立日2007年9月29日起计算(不是自然年?)。

在新华网的一篇报道中提到“新华社北京(2020年)9月25日电(记者吴雨)中国投资有限责任公司25日发布年报显示,按美元计算,2019年中投公司境外投资净收益率为17.41%,投资收益额422亿美元。” ( -R/a2SQ )。
由于我们即将进行的是趋势分析,上述两点差异并不妨碍将要做的分析与讨论。

纵向来看,12年来,中投公司境外投资收益率颇为中规中矩,没有太突出超常的收益率,也没有明显跌份的亏损,波动区间小于社保基金的收益率。初步推测,可能跟海外欧美国家证券市场波动小于中国沪深证券市场有关。因为从公司要求和管理团队风格来说,都是谨慎操作——赚多少无所谓,一定不能亏太多。

循着这个思路,我们把中投公司境外投资年度收益率(净收益率)的变化与美国股市道琼斯工业指数做对比,或能窥见在这不错的投资业绩背后的一些逻辑或手法。

中投公司境外投资在2008-2020这12年里,2009-2010, 2017和2019,这四个年份表现不错,其年度收益率分别为 11.7%, 11.7%(两年一样的?), 17.59% 和 17.41%。如果打开道琼斯工业指数的历史曲线进行事后判断分析,大致可以看到:
1) 2009年的大涨是由于2008年金融危机挖下一个巨大的坑,道琼斯指数低至 6440点;
2) 2010年的高收益,是由于2010年中有坑,在10000点徘徊,而年末又成功拉起到11500点附近;

3) 2019年的高收益,是由于中美贸易战2018年挖下的坑, 2018年末低至 21800点左右,而2019年末到 29000点;
4) 2020年预计会是高收益年份,估算给到 10%, 因为新冠疫情,在2020年3月份砸出巨型天坑,道琼斯指数低至 18000点,而2020年年末成功拉起到 30000点。

5)故意将 2017年的大涨留在最后说,这一年没有坑,近乎直线拉升? 为何能实现躺赢?这12年里,2017年唯一实现躺赢的年份,也即买啥都赚。

可以小结: 中投公司过去12年里,有5个年头将是大赚,而这些年份里,靠股灾砸出坑的有4次——2008年金融危机一次,2018年中美贸易战一次,2020年的新冠疫情一次,2010年中的小坑,原因不详。难怪在新冠疫情导致股灾时,有证券业内人士称之为“黄金坑”。
对于这种体量无限大“弹药无限多”的机构投资者来说,不怕套的无限长,在面临每次股灾时,似乎都会在心底泛起某种“大发国难财”的想法。

相反地,在2011、2015、2008和2018年里,都是亏损,从道琼斯指数上看,当年都是有坑,而且在年末没有反弹起来。令人称奇的时,2008、2018等大盘指数几乎都是 20%以上的下跌,而中投公司却能及时止损或者成功逃掉?即便是 2011、2015的坑,事后看来,也很深,很吓人,中投公司境外投资是如何做到及时止损或者成功逃顶的?

未卜先知的研判?如果说像社保基金等机构投资者主要在国内证券市场进行操作的话,我们还可以阴谋论地臆想一下可能的操作空间。然而中投公司境外投资主要投向的是欧美发达国家成熟运作的证券市场,如道琼斯工业指数等,我们几乎无法再进行任何阴谋论的猜测。
也许真实情况,只有那些实际操盘人知道,那些被称之为精英的操盘手们知道如何在牛市获取超过大盘的收益,而在熊市避免太多亏损。往往后者避免亏损,比在牛市获取超常收益更重要。

如果再横向地对比社保基金的神奇操作,或者真相就是那看起来再朴素不过的道理:高抛低吸。
2007年道琼斯指数连涨3年到高点 14200点左右;2017年连涨2年到24600点左右,或许在大跌来临之前的几周、几日,精英高手们已经逃离了,此为高抛。2008和2018股灾时,或他们已经在股灾前空仓持币待购了。也许没有2008、2018的股灾,他们同样会抛售,然后等待下一个入场的机会。

2011年和2015年的坑,或有点意外,其前期并没有连续的大涨。而坑后当年也有反弹,所以略微亏损在情理之中。从上帝视角来看,如果当时精英操盘手们能够在坑底进行买入操作时,或许当年的收益率能够扭亏为正。


美国股票道琼斯工业指数2007-2020

5. 年度、年化收益率分析小结

5.1. 金融证券市场赚钱是很难的。
纵向的20年、12年跨度观察,横向的全国社保和中投公司笔投资业绩比较,都说明这一点,靠钱生钱,这种有点“不劳而获”的行当,很艰难。根据数据( -R/c2SP ,有福常在:  https://ufqi.com/news/ulongpage.446.html  ),1995年-2018年,中国25个行业的平均利润率不过8.35%,依旧低于GDP年均增速。同时期,货币M2年均增速为16.14%,GDP年均增速为8.87%。

无论是全国社保基金还是中投公司,他们的资金量、团队操盘能力,如果说他们是这个地球上是二流的,估计无人敢称为一流的。他们勤勉尽责,殚精竭虑地工作,每年也是有亏有赚,多年后看,所获得收益,也基本与25个行业平均收益差不多( 8.35% )。

最顶级的人才团队,最顶尖机构,所获得的成绩不过如此 ( 8.5% 左右 )。排后面的二流团队、二流机构又所获几何?三流团队和三流机构呢? 草台班子呢?资金和投研能力都排在末梢的个人散户又如何?

当我们分别品读了社保基金和中投公司近20年的收益情况分析后,再来听听时任中国人民银行党委书记、银监会主席郭树清先生的话( -R/l2SW , -Url4P ):
“在打击非法集资过程中,要努力通过多种方式让人民群众认识到,高收益意味着高风险,收益率超过6%的就要打问号,超过8%的就很危险,10%以上就要准备损失全部本金。”

是不是有新的体会和感悟,醍醐灌醒,振聋发聩?这真不是吓唬人的!我们最顶级的团队上不封顶的资金量,没日没夜累死累活地干,也才只有 8% 左右年化收益率,随便来个隔壁老王,就能承诺 8% 年化收益率?

一时一事上获得暴利或有偶然性,基业长青的数年之后,能有媲美全国社保基金和中投公司的年化收益率,差不多可以去跟他们PK了。那么多基金经理,10年以上年化 10% 以上的,仍是凤毛麟角,恰如最精英最顶级的全国社保基金团队或者中投公司的团队。

5.2. 年化收益率攀高的秘诀:高抛低吸
高和低都是相对而言,何处为高,何处为低?
相比前一阶段,上涨了 10% 算高吗? 下跌了 10% 算低吗?
10% 不算的话,那 15% 呢? 20% 呢?
哪个算是高,又为何是?

另外,相比前一阶段,是前一天,两天,三天,一周,两周,三周,一月,两月,三月,半年,一年,两年?

即便是知道了此处是高不是低,或者是低不是高,那经济学中股价随机游走不可预测的魔咒又在时时响起…

于是,终极地,我们回到概率论和博弈论等上了。举凡知其不可为而为之,莫不是概率论或博弈论等,区别可能是,有的人赌的大,1%的胜率,也押上 90%的筹码;有的人堵的小,90%的胜率,只押上1%的筹码。

我们猜测,全国社保基金团队和中投公司境外投资团队,可能会 60% 以下的胜率不考虑押注,在有 7~80% 胜率时,也只押上 2~30% 的筹码。

—-

这是温习经济学著作的第五篇习作,之前的各篇附列如下。

  1. 写写年度收益率年均收益率和年化收益率, https://ufqi.com/blog/income-rate-annuals/
  2. 治大国若过小家——写写王朝兴衰更替背后的经济账, https://ufqi.com/blog/political-reform-country-vs-home/
  3.  写写🏦存款利率贷款利率和负利率, https://ufqi.com/blog/captial-rate-and-minus-rate/
  4. 写写1929年美国经济大萧条与2020年美国股市大跌, https://ufqi.com/blog/us-1929-economic-crisis-2020-stock-shock/

—-

-R/b2SO , https://ufqi.com/blog/income-rate-annuals-with-cic/

《投资学》进阶阅读推荐必读之书.

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

彩染发剂植物纯自己在家染头发膏女2021流行色显白天然冰糖雪梨膏儿童宝宝砀山慈梨膏山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩显白黑茶色蓝黑色板栗色

写写年度收益率年均收益率和年化收益率

银行存款利率一降再降,叠加一升再升的通货膨胀率( https://ufqi.com/news/ulonglist.5786.html ),实际上的存款利率已经早是负数,我们所持有的资金的购买力在不知不觉中降低再降低,贬值再贬值。只是由于官方存款利率还没有变成负数,直观上我们还感觉不到,或者刺激得不是那么强烈。

然而,“先知先觉”的同学们已经开始积极主动的进行投资理财了。在这项充满挑战和机遇,也伴随着刺激和风险的活动中,需要具备一些基础知识或者名词定义。其中较为高频和优先的词语叫做收益率,根据使用场景不同,又分为年度收益率,还有月度,月息,七日,每日收益率等等,还有年化收益率和年均收益率等。

这篇打算深究一下这几个收益率名词的定义和使用场景。这是温习经济学过程中的第四篇习作,之前三篇分别是《写写1929年美国经济大萧条与2020年美国股市大跌》( https://ufqi.com/blog/us-1929-economic-crisis-2020-stock-shock/ ),《写写🏦存款利率贷款利率和负利率》( https://ufqi.com/blog/captial-rate-and-minus-rate/ ) 和 《治大国若过小家——写写王朝兴衰更替背后的经济账》( https://ufqi.com/blog/political-reform-country-vs-home/  )。

前文在写写存款利率贷款利率和负利率的文章中已经谈到,当今,除了中国央行公布的官方存款利率是正数,美国美联储官方公布存款利率区间是0~0.25,其他一些国家和地区已经是存款负利率了。这只是名义存款利率,叠加通货膨胀率,则实际货币贬值得更加厉害,可能这也是国际社会上,不存钱,超前消费和信用消费诱因之一。

1. 年度、年化和年均的基本概念定义及计算公式

在讨论年度收益率,年化收益率和年均收益率之前,需要先定义和假设一下:
本金、期初/起初值,通常用 P 表示,Prime;
终值、末期/末值,通常用 F 表示, Final?
利率,用 R 表示, Rate;
期数、轮次,用 n 表示。
接下来要用到一些简单易懂的公式了,以便给那些“太长不看”的同学快速的答案。

年度收益率 R = ( ( F / P ) – 1 ) * 100% ;
年化收益率 R =  ( F / P ) ^( 1 / n ) – 1 ;
年均收益率 R = Sum ( R0 : Rn ) / n ;

其中: / 表示除法运算, * 表示乘法运算, ^ 表示幂运算, Sum 是求和函数, R0 是第一期收益率, Rn 是第n期收益率。这里的“期” 默认是指年。

年度收益率 含义是本年(自然年或者财政年),期末的数值除以期初的本金值,然后做百分化表示;
年均收益率 含义也相对好理解,就是每年平均,将多个年份的收益率加起来做算术平均数即可。年均还有另外一层意思是横向的,比如将同一年份内的多个不同数据对象的数值加起来做算术平均,如2019国民年均收入增长率。
年化收益率,相对较复杂一些,这里有复利计算的思想在里面,也即每年的收益率的计算总是以上一年的终值作为本金。另外,就是这里的轮次和期数 n , 当 n > 1 时,可以理解为多个年份后计算年化收益率;当 n < 1 时,表示短期收益率的延长理论值,这也是我们能够在小于一年期的理财产品中能够看到“七日年化利率”的由来。

行文至此,概念和理论希望已经说清楚了,接下来写写数据上的干货。我们希望使用上面的几个指标来考察一下全国社保基金(全国社会保障基金, ssf.gov.cn )权益投资收益的历年数据情况。

2. 全国社保基金投资年度、年化和年均收益率分析

拿全国社保基金投资收益率说事,是因为她干得漂亮。“(全国社保基金)理事会是境内最大机构投资者…,全国社保基金成立以来,取得了骄人的投资业绩,自2000年8月成立至2017年底,年均投资收益率8.44%,累计投资收益额大于累计财政净拨入额。”

Fig-1. 全国社保基金权益投资收益率2001-2020

上图表格中收录了全国社保20年来的每年年度收益率(绝对值),基于年度收益率,我们推导计算出了年化收益率和年均收益率。为了方便计算,我们假设了全国社保基金本金初期值为 10K,其实真实值应该是 200亿人民币左右。也为了凑数,我们根据2020年前11个月的数据,估算了2020年的年度增长率 15% 。

可以看出年度收益率波动较大,而年化收益率较平缓,年均收益率与年化收益率接近,且偏大。

可以看出,收益率最好和次高的年份是 2007和2006年,分别是 43% 和 29%。收益最差的年份是 2008和2018年,分别是 -6.8% 和 -2.3% 。令人惊奇是, 2009和2019都迎来了“报复性”的增长。
截至 2020年,20年来,全国社保基金年化收益率为 8.5% , 年均增长率为 9%, 这一业绩的确是“骄人”。之所以取得这样的成绩与好年份超高收益有关,如 2006-2007,2014-2015, 2019-2020. 其余年份也几乎乏善可陈。
这三个时间段里前两个刚好对应则中国股市是两次大的股灾,分别是2007年和2015年,牛气冲天之后一落千丈!全国社保基金的投资负责人是如何做到精准逃顶的?

2019-2020 这个时段的高收益却分别对应中国股市的两个低点,分别是2019年1月的2440点和2020年3月的2745点。中国股市分别在这两个低点之后迅雷不及掩耳之势快速拉升,2019年之后断崖下跌!2020年高位震荡至今。

小结她的傲人业绩,2006-2007, 2014-2015, 成功逃顶,赚取超高收益后在股灾来临之前一刻安全撤离;
2019-2020,成功埋伏,在市场最低点勇于加仓,在获得一定收益后,再度出逃, 如此操作,2019年一次,2020年一次,分别斩获 10+% 的收益率!
成功逃顶或有不可描述的缘由或故事,但成功埋伏确有某种投资人的慧眼识珠。
如果用美国投资大师沃伦巴菲特的话来配音,或就是那句“在别人贪婪时恐惧,在别人恐惧时贪婪。”

拉长历史来看,总是大道至简。20年来,全国社保基金的投资人可能换了几茬,也许回撤和亏损的理由各个不同,但赚取盈余的姿势和理由总是那么一致。只是我们凡夫俗子,不识庐山真面目,只缘身在此山中。做事后盘点说得头头是道,实盘操作当时已惘然。

3. 中国央行20年来的M2年度、年化和年均增速分析

Fig-1的表格中右侧是同时期中国央行M2的增长速度数据。广义货币供应量(M2,Broad Money)的定义大致约等于全社会的货币量。货币(M0)=流通中的现金,即流通于银行体系之外的现金。狭义货币(M1)=(M0)+单位活期存款;广义货币(M2)=M1+准货币(单位定期存款+居民储蓄存款+其他存款+证券公司客户保证金+住房公积金中心存款+非存款类金融机构在存款类金融机构的存款)。

为了方便计算,我们也假设了M2的本金、初期值为 10K。由于M2的增速里面一个重要因素是GDP的增长,所以我们还在后面增加了同时期的GDP增速。官方定义上,M2的增长,主要是由于GDP增加了。两者一致是理想状态,增加多少东西(货物或服务)印多少钱;如果GDP增速大于M2增速,则货币升值,如果GDP增速小于M2增速,则货币贬值。

通过上面的记录数据,我们发现全国社保基金投资年化收益率 8.5%, 确实傲人的业绩,而同时期的M2是多少呢? 通过公开数据收集、计算得出,2001-2020期间M2的年化增长率为 14.8% , 同时期GDP的年化增长率为  8.9%。于是我们有这样一组对比数据:

2001-2020年间主要年化收益率、增长率数据
全国社保基金投资年化收益率: 8.5% ;
中国央行M2年化增长率: 14.8% ;
中国GDP年化增长率: 8.9% ;
M2净增长率:M2增长率 – GDP增长率 = 6% ;

从这一角度看,全国社保基金投资收益跑赢了M2净增长率(扣减GDP增长率),净年化收益率为 8.5% – 6 = 2.5%。
进一步地,我们发现2001-2020这20年间,如果某项投资年化收益率低于 M2净增长率 6% 的话,其持有的货币(资产)的实际购买力是下降的,货币(资产)被贬值。

此外,根据M2的历史数据,我们会发现,2008年金融危机时候的“大放水”,“四万亿”的确推高M2,使其急速上升,致使2009年的M2年度增长率达到 27.7% 。而2017年以来,M2年度增长率开始大幅下降至 8% 左右,几乎与GDP年度增长率接近,似乎是完美的理想状态了。

小结全文,年度收益率年均收益率和年化收益率本不难理解和使用,希望上面的这些数据能够存档下来,便于后面接续使用,更长时期观察、对比和分析。

-R/D2SO

写写年度收益率年均收益率和年化收益率

《投资学》进阶阅读推荐必读之书。

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

得力彩色铅笔油性彩铅学生用专业手绘48色水溶性彩铅笔24色画画笔36色小学生安全无毒水溶款绘画素描儿童铅笔医用外科口罩一次性医疗专用口罩防尘透气成人三层防护透气医生插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板床上电脑桌大学生宿舍上铺懒人可折叠小桌子家用寝室简约学习书桌

GWA2吉娃兔引入JsDelivr公用CDN的开发与配置

新冠肺炎疫情持续差不多一年了,疫苗已经在望,希望人类早日战胜这个病魔。

GWA2吉娃兔 持续更新升级,这次在升级更新优化的路上,走得更远,尝试引入公用CDN(Content Delivery Network,内容分发网络)。借此,使得基于GWA2的各种应用程序、网页能够如虎添翼一般,更快的响应用户请求。这次改进源于我们持之以恒地追求——更高、更快和更强。

根据此前梳理的提速优化思路(-gMIS 吉密斯 升级:增加缓存,按时间快捷检索和全局SessionId等,https://ufqi.com/blog/gmis-update-with-cache-searchbytime/),我们分别在缓存和减少页面持续两个方便进行了各种优化改进。其中在缓存优化方向,已经进行了客户端缓存和服务器端缓存,独缺少网络层缓存(CDN)这块。迟迟没有下手进行这个网络层缓存的升级操作,一是CDN相对而言与代码层开发关系不大,或者没有关系;二是网络层的CDN几乎等同于加服务器、加带宽的意思,迟迟没有合适的机会。

根据 V2EX上技术高手的介绍,我们在考察了JsDelivr公用CDN之后,发现是一个很好的开源CDN方案,可以实现免费免备案使用的静态资源分发。

  WITH    

 

1. 使用JsDelivr的准备工作
JsDelivr 允许托管和分发的网页文件类型是JavaScript(.js)、CSS(.css) 和部分小尺寸的图片(.jpg, .png等)。

JsDelivr 可以读取开源发布在 npm 、GitHub和WordPress 上的以上相关静态文件。出于便于管理和更新GWA2所使用的全部静态资源类文件,我们选择将上述文件放在 GitHub 的公开项目上(Repository)。

在GitHub上为某个项目或者网站、App建立一个对应的Repos, 将GWA2 的 view子目录下的所有非html文件上传到 GitHub 对应的 Repos下即可。这些文件包括 ,js, .css, .ico, .jpg, .png 等等。

由于JsDelivr的目标是分发静态资源文件,当加载.html文件时,其content-type 为 text/plain , 所以目前还无法使用JsDelivr 分发 .html. 从另外一个角度来说,.html 文件通常包括有业务逻辑或者模板语言,放在自家服务器上,反而更好。

经过以上几步准备工作,现在可以通过如下路径访问到已经放入 CDN网络的静态文件。地址例如,

https://cdn.jsdelivr.net/gh/UserName/ReposName/view/SiteName/abc.css

其中, gh 代表在 JsDelivr语境中的 GitHub,
UserName 为当前资源文件在GitHub 上的用户名称,
ReposName 为当前资源文件在 GitHub 上的项目名称,
view 为 GWA2 的子目录,负责视图,文件结构保持与本地服务器相一致。

 

2. 在GWA2中引入CDN

GWA2 从最早时期已经采用了 MVC 分层设计,因此针对视图文件的修改,相对集中。所有视图文件的加载,都通过一个叫做 $viewdir 的全局变量进行控制。 $viewdir 告诉服务器或者模板引擎,视图文件的具体位置。

如果要引入JsDelivr ,则只需要在项目中,适当修改 $viewdir 的指向即可。通常涉及到的文件在 comm/footer.inc 中。

GWA2PHP:
$cdnStaticPrefix=”//cdn.jsdelivr.net/gh/UserName/ReposName”;
$viewdir = $cdnStaticPrefix.”/”.$viewdir;

GWA2Java:
//- +cdn, 12:34 2020-12-04
String cdnStaticPrefix = “//cdn.jsdelivr.net/gh/UserName/ReposName”;
viewdir = cdnStaticPrefix + “/” + viewdir;

 

3. 速度提升明显用户反馈良好

经过上述修改后,程序同步及html或模板更新后,页面浏览加载会感觉提升明显。直觉上会有所谓的“秒开”。这对于在国内浏览海外服务器的相关网站时,对比尤其明显。

理论上分析,一个HTML文件中,实际 html 代码的尺寸占比很小,网上有一些这方面的数据,可能在10%左右,而更多的则是需要呈现页面的 .js, .css和各类页面元素等。如果将后者这些静态资源文件交给CDN网络,其提速效果自然有突飞猛进的感觉。

另外,这些原本需要本地服务器解析请求做出应答的内容,完全交给了CDN网络,无疑极大地降低了本地服务器的负载和减少了本地网络的带宽占用。相应地,这些富裕出来的资源可以更好、更快地响应HTML页面的输出。

此消彼长,基本是在国内的用户浏览海外服务器的网站,页面打开实现“秒开”也是很有可能的。
这里的“秒开”应该主要是指首次打开某个全新的页面,由于GWA2已经在客户端进行了大量的缓存,在第二次之后打开或者刷新页面,这些静态的.js .css和图片文件等,多数将都由浏览器调用本地缓存来实现响应,那将是页面加载的极致快速。

有时候幸福来得就是这么突然,海外服务器的页面可以实现了秒开,而且这个CDN由于不涉及到具体内容文件,因此可以不用中国地区的备案,而且她也是免费的——GitHub免费寄存静态资源文件,JsDelivr负责免费分发到距离用户最近的地方——据说全球有上数百个CDN节点,这几乎可以媲美一流的CDN服务。

 

4. CDN回滚与容错

作为可靠的庞大的CDN网络,JsDelivr是稳定的,但也需要预防万一的突发偶然情况,如果由于某种未知的原因 JsDelivr突然不能用了,如何可以快速平滑的切回到本地服务器?

也即CDN服务需要能够在必要的时候进行回滚或者降级,以实现容错。这个在 GWA2 里改动相对简单,参照上面增加CDN的时候操作,如果感知到 CDN不可用时,可以清空其赋值即可将资源文件的请求切换到本地服务器上来。也即通常情况下说的所有CDN本击穿了。

GWA2PHP:
$cdnStaticPrefix=””; # failover
$viewdir = $cdnStaticPrefix.”/”.$viewdir;

GWA2Java:
//- +cdn, 12:34 2020-12-04
String cdnStaticPrefix = “”; # failover
viewdir = cdnStaticPrefix + “/” + viewdir;

5. 多源CDN及应用层CDN队列

显然,GWA2 可以在代码层实现多源CDN的集群式配置,我们可以在程序中定义 $cdnStatixPrefix 作为当前CDN分发网络的标志,可以可以同样地定义 N个不同的CDN网络,如 $cdnStaticPrefix2, $cdnStaticPrefix3… $cdnStaticPrefixN.

当有这么一个群组队列的CDN可以用时,可以使用随机算法或者权重算法,将请求分发给这个CDN池,从而实现更加可靠的内容分发。

当然,也可以加上一定的心跳检测装置,自动对下线失效的CDN做移除处理。同样地,基于心跳检测,将恢复正常的CDN网络加入到队列中来,从而实现网络自动化、智能化运行。

如上,完成 GWA2吉娃兔引入JsDelivr公用CDN的开发与配置.

 


-GWA2 吉娃兔 是“通用网络应用架构( General Web Application Architeture, https://ufqi.com/dev/gwa2/ )”,基于 -GWA2 可以轻便构建各种网络应用程序,
包括复杂的在线购物商城、在线医疗、在线教育、 旅游交易平台、社群或者社交网站和新闻资讯网站等,
也包括各种企事业单位网上门户,在线交互及服务作业系统等.  比如 开源通用管理信息系统软件 gMIS吉密斯( //ufqi.com/dev/gmis/ ), 新闻聚合 UfqiNew有福新闻( //ufqi.com/news/ )
还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部.
-GWA2 是为数不多的支持跨开发语言的应用框架,目前支持 -Java, -PHP, -Perl, -Aspx and -Python .

-GWA2 is a “General Web Application Architecture” and based on -GWA2 developers can easily build a variety of network applications,
including complex online shopping malls, online medical services, online teaching, travel trading platforms, community or social networking sites and news information sites, etc.
Also the applications include various online portals of enterprises and institutions, online interaction and service operations systems.
Moreover it contains server-side support for NativeApp, or even all of the WebApp.
-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.

-GWA2 is E.A.S.Y 
Easy Along, Swift Yield
轻松启动, 快速产出.


 

JSDelivr: A free CDN for Open Source

fast, reliable, and automated

serving ~ 94 billion requests / month
 

serving ~ 2990 TiB / month
 

around since 2012
 
发表在 -GWA2, 服务器运维, 编程技术, 计算机技术 | 标签为 , , , , | 3条评论

医用外科口罩一次性医疗专用口罩防尘透气成人三层防护透气医生插座保护套儿童防触电插孔安全塞防护盖宝宝婴幼儿插头插座孔插板床上电脑桌大学生宿舍上铺懒人可折叠小桌子家用寝室简约学习书桌电热蚊香液套装无味婴儿孕妇家用补充液插电式灭蚊液

治大国若过小家——写写王朝兴衰更替背后的经济账

最近在读网红历史长篇文章《晚清沧海事》( 上下卷在线连载: https://ufqi.com/news/ulongpage.1008.html  ),在其中接近尾声的部分,有一个章节叫做《 晚清沧海事:制度落后就要挨打-117:下卷六十六:光复伊犁:晚清灭亡的实情》。这个章节里剖析了晚清灭亡的真实情况,从作者的观点,晚清政府未能对外抵御强敌,对内镇压反叛势力是根本原因之一。作为两个政治想象的另外一个,意图改革儒家思想也加速了其衰落,最终走向不得不面临的大清帝国崩盘的局面。

细究起来,晚清政府之所以未能在对日本等国的作战中取得胜利,主要原因之一是晚清在勉力镇压了内部反叛势力(太平天国军、捻军等)之后,经济上受到重创,国库见底。在接下来的拮据日子里,又要面临一个子掰两半花的局面,那就是晚清著名的 海防还是疆防的大辩论。这里的海防是大清帝国的海上防务,主要是针对同时明治维新崛起的日本和欧洲列强。而并不多见于历史的疆防,则是指西北的陕甘宁和新疆、西藏等地区的内乱和外敌。内乱是穆斯林持续不断的反叛,外地是土耳其、印度(英属)和俄国等。

总结就是晚清政府由于常年征战导致经济上连年负债,越没钱越弱,越弱越遭人欺负,越没钱,死循环。一个大国的治理,竟如同一个小家过日子一样,穷死。

古圣贤者老子在名篇《道德经》里著文“治大国若烹小鲜”。由于所言极其简略,加上时日久远,解读众说纷纭。比较主流的解释有两种,一种是治国不要折腾,寓意烹小鲜不能来回翻转。还有一种解法是说,小鲜不若大鱼,不能掐头去尾删减内脏,那就几乎不剩下啥了,要原样蒸煮。这种解法寓意治国要兼收并蓄,不删减,不增殖,顺其自然。

这里本人倾向于第二种解释,顺其自然。不过结合对此前的理解,稍加改动为“治大国若过小家”。看着一个泱泱大国,治理道理的背后,竟然与寻常百姓的一家一户过日子一样,都是围绕挣取几块钱,吃上一口饭。这个观点也在斯塔夫里阿诺斯(Leften Stavros Stavrianos)的《全球通史》里被提到,王朝循环的根本原因是经济管理的循环,而造成经济循环的原因,则是帝国开支超过税收。

这是读习经济学的第三篇心得体会写作,之前两篇分别是《写写1929年美国经济大萧条与2020年美国股市大跌》( https://ufqi.com/blog/us-1929-economic-crisis-2020-stock-shock/ )和《写写🏦存款利率贷款利率和负利率》( https://ufqi.com/blog/captial-rate-and-minus-rate/ )。

简而言之,一个大国的治理,与一个小家庭过日子一样的道理,也是开门七件事,柴米油盐酱醋茶,关门七件事,吃喝拉撒睡洗刮。其核心就是一个字,钱!没有一个大国是在国库充盈的时候被击垮的,而所有王朝被覆灭的时候,都是国库亏空的。宛如家境殷实的家庭不容易离散出问题,而贫贱夫妻百事哀。

Fig 1. 王朝兴衰更替背后的经济账

一个政权(政府)初始创立,开始“今儿起我话事”,都听我的安排,给我上税(如上图)。
如果是一个允许讲道理(民主自由)的政权,基本内部就不存在起义、反叛等事件,因为允许公开有礼有节的抗辩,自然会遵循所谓市场规律,自由发展。勤快的懂得钻营的人就会获得超过平均数的收入和财富,于是有资本利得的助力,人群有贫富分化,踩着马太效应进而形成垄断,而垄断是经济危机的伏笔。

于是,政府要警惕垄断,预防经济危机,当经济危机发生时,国库可能会亏空。为避免这种情况,政府要避免经济危机发生,也就是避免垄断,也就是避免过分的贫富差距极大化。当经济危机不可避免的发生时,需要采取一切可能的手段来救助经济。如果成功了,皆大欢喜,如果不能,在野党就会翻盘上台,政府被和平更替。还有一种情况比较危险是,隔壁老王的邻国这时候趁火打劫来入侵处于经济危机时候的国家。

相反地,如果一个政权(政府)是不允许讲道理(独裁专制)的,内部起义、反叛就不可避免了。内部干架的区别主要是大的反抗和小的反抗,镇压了的反叛和镇压不了的反叛。从设立开始话事的时候起,反对派就一直在积蓄力量,政府主要收入来源的税基就像一个有蚁穴的大坝一样,潜移默化的逐渐减少。此消彼长,纳税的减少,而吃税(吃财政)的人却是反方向逐年月的增长,国库从一开始有盈余到平衡,到不可逆转的出现亏空。

反对派无法通过讲道理来实现诉求,只好战场上刀把子说话,不可避免的,持续动荡,帝国疲于应付,财政日趋紧张。周遭环伺的隔壁老王的邻国这时候也会插上一杠子,一般会正面敲竹杠,或者正面敲竹杠叠加或明或暗地支持反对派的叛军。兴盛一时的帝国无可奈何地走向了内忧外患的地步,无论是攘外必先安内,还是颠倒过来,一个锅里吃饭,就那么多米,区别不大。

晚清政府既要努力镇压西北陕甘新疆西藏穆斯林的反叛,还要对付海上来袭的日本和欧洲列强,不是不能打,实在是没钱了,生生打没钱的。据说晚清政府军队组织从中原地带运送粮草往大西北打仗,起运30担粮食,终到1担粮食,其余29担粮食在来回途中被吃掉了。从这个角度理解,国民政府时候,蒋介石面临似乎也有类似的局面。

在这个不讲道理的政府来看,无非是镇压了上一个反叛军,然后迎接下一个反叛军。在这个无休止的循环中,如果某一次反叛军胜利了,政府就彻底完蛋,另一个新政府就此设立。
如果他还是一个不讲道理的政府,就再次开启那个反抗-镇压模式的无休止地狱模式。
如果他良心发现,转为允许讲道理的政府,那就进入与经济危机做斗争的娱乐模式。

隔壁老王式的邻国是一个烦人的存在。由于国与国之间没有所谓正义,只有所谓利益,而且是无羞耻、无底线的地盘之争,所以,一旦一个政府被刺探到其国库亏空,就想一个普通百姓家庭一样,如果穷的揭不开锅,那受人欺负几乎是必然的。如果这时候有被大户财阀看得上的东西,无论是人还是财物,往往都会被使用各种手段被掠走。

家庭如此,政府国家亦然。百姓穷居闹市无人问,国家也是弱国无外交。
治大国若过小家,手中有粮,心中不慌。这背后都是经济活动,起支配作用的是经济规律。

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

山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩显白黑茶色蓝黑色板栗色中国电信 电信流量5G卡手机卡京东制作

GWA2吉娃兔🐇Java中的文件上傳表單處理若干問題

在 GWA2Java 中處理文件上傳的HTML表單被稱爲是“客貨混裝”的HTTP請求處理。

文件上傳處理是HTTP Web開發中較爲特殊的應用,對開發者有一定的要求。無論是流行的PHP,Aspx或者JSP都需要一定的處理技巧。由於實在想不起來10多年前是如何赤手純代碼來處理客貨混裝的HTML文件上傳表單,這次還是詳細地記錄一次,以備再過些時日忘卻了而備查。

還有一層考慮是,在處理HTML的文件上傳表單時,需要考慮與 GWA2Java的融合,涉及到GWA2 的文件處理的核心模塊,因此也需要或者也是檢視GWA2架構設計的一次極好的機會。
對此前的 GWA2 Java項目的巡視,我們發現已經有一些項目涉及到文件上傳,但基本上多數是使用Ajax異步上次等,回避了“客貨混裝”模式,某個HTML表單只負責文件上傳,而另外一個表單再收集其他數據。

所以,這次要在 GWA2Java 中更好的整合進文件上傳,并且是客貨混裝模式——處理一個表單,裏面同時包括兩個字段:張三的姓名文字和張三的頭像圖片。

1. 瀏覽器客戶端 HTML表單中enctype

如果需要在瀏覽器客戶端的HTML表單中進行文件上傳,需要明確顯式地指定 Form元素的 enctype 屬性為 multipart/form-data 。

2. 服務器端接收處理文件上傳的第三方組件

基於 Apache Tomcat的 Java Web Server,進行服務器端的文件上傳處理,推薦使用的組件是 Apache commons-fileupload-1.4.jar , 一并的也要引入 Apache commons-io-2.7.jar。

3. HTTP Request.getParameter 失效

儅客戶端使用文件上傳的表單遞交數據時,Java Web Server中常規的 Servlet 對象 HTTPRequest的主要方法 request.getParameter 就失效。這也是普通程序無法處理客貨混裝的原因之一。

取而代之的,儅 enctype=multipart/form-data , 需要通過第三方組件獲取到相應的表單參數。
在 GWA2 中,其中的路由模塊嚴重依賴HTTP Request的參數,這時候,需要將主要路由參數放入Form的Action屬性中。
可以改進的另外一個方法是,通過引入 Apache commons-fileupload 的相關對象,便利 FormItems 對象,從而獲得表單中的常規非文件字段,文本文件字段的名稱和值。

遍歷FormItems獲得HTTP Request請求參數之後,再通過 request.setAttribute寫回到當前Request對象,如此即可巧妙地彌補 request.getParameter 失效的問題。
由於在 GWA2Java 中,獲取外部參數通常由 Wht.get 的方法進行,這個方法除了調用 request.getParameter 之外,還會進一步地的訪問 request.getAttribute , 從而實現了對 request.setAttribute 的訪問。再進一步地的 Wht.get 還會對訪問數據做一些基本的安全檢查。

樣例代碼:

ServletFileUpload sfileupld = new ServletFileUpload((new DiskFileItemFactory()));
formItems = sfileupld.parseRequest(request); // can only be parsed once!
if (formItems != null && formItems.size() > 0){
String iname, ivalue; byte[] bytes;
for (FileItem item : formItems){
// processes only fields that are common form fields
if (item.isFormField()){
bytes = item.getFieldName().getBytes(“ISO-8859-1”); // why 8859?
iname = new String(bytes, “UTF-8”);
bytes = item.getString().getBytes(“ISO-8859-1”);
ivalue = new String(bytes, “UTF-8”);
request.setAttribute(iname, ivalue);
//debug(“ctrl/item: iname:”+iname+”, ivalue:”+ivalue);
}
}
}

 

4. HTML表單上傳request 能且僅能被parse一次

上文中提到的獲取 FormItems 需要從 HTTP Request中提取,

List<FormItem> formItems = uploadInstance.parseRequest(request);

這裏的Request,只能被 parseRequest 執行一次,如果在同一次請求處理程序中,再次對這個 request 執行 parseRequest 時,就會返回異常為空的錯誤。
因此,儅我們需要在程序頂部通過便利 FormItems 設置 request.setAttribute 時,還需要保留 FormItems 作爲全局對象,在後面這裏處理實際上傳文件時使用,避免再次調用 parseRequest 產生爲空的錯誤異常。

5. 揮之不去的字符轉碼: 從 ISO-8859-1 到 UTF-8

從心裏上,我們是抗拒在代碼中進行字符集轉碼的,所以從一開始,我們在 GWA2Java 中進行了前後端統一全流程一貫地使用UTF-8字符集,從而避免在系統程序内做無謂的轉碼工作。(參考:-GWA2 Java版本的i18n/中文编码/乱码问题,https://ufqi.com/blog/gwa2-java-i18n/ )

偏偏這裏儅使用客貨混裝模式進行文件上傳時,通過parseRequest出來的 FormItem 其中的非ASCII字符的編碼是 ISO-8859-1 ,對於像 GWA2Java 這樣默認的 UTF-8 環境,字符集轉碼成爲迫不得已的事情。

6. 文件上傳處理方法的歸置

在 GWA2 的架構設計中,文件上傳功能,歸屬于文件模塊,引入系統的接口文件是 inc/FileA , 針對不同的文件系統,有不同的文件類來實現 inc/FileDirver , 如 默認的文件處理是 Linux 的 inc/FileSystem .

在歸屬上,這些 inc 目錄下的類及其方法是“大家閨秀”,一般不參與到具體業務處理程序的,只能通過統一界面接口 inc/WebApp 來調用。因此理想的是調用文件上傳的邏輯流程大致為:

ctrl/a.jsp –> mod/ModA –> inc/WebApp –> inc/FileA –> inc/FileSystem .

由於文件上傳,屬於非常規的“操作”需求,另外一種非標準的捷徑是,在 mod/ModA 中直接實例化 inc/FileSystem , 從而便利地觸發對 upload 方法的運用。但這只針對具體的項目可行,且不需要可移植性。比如如果宿主系統不是 Linux, 那就不能實例化 inc/FileSystem , 相應地可能需要實例化 inc/WindowsFileSystem 來處理宿主環境是 Windows 的文件上傳。

7. 有進有出,文件刪除的操作

在此之前,核心接口類 inc/WebApp 中定義了 readObject/writeObject 用來讀寫非數據庫源的數據。其中 inc/FileA 中相應地定義了 read/write 方法,只是還沒有對應的刪除方法 rm 的實現。

接著這個機會,我們歸置並實現了 inc/FileA, inc/FileDriver 和 inc/FileSystem 三個類的 rm 方法,同時改造 inc/WebApp.rmBy 方法,將上述方法進行對接。

inc/WebApp.rmBy(“file:Path_To_File”) –> inc/FileA.rm –> inc/FileSystem.rm .

 GWA2Java, GWA2 就是這樣通過一個又一個項目實踐,不斷豐富完善,日益健壯强大,儅融合和沉澱足夠多的智慧和精華,一定能取得更大的成就。我們在 UfqiWork 有福工坊 ( https://ufqi.com/work/ )上首先實現了 GWA2Java 處理文件上傳的客貨混裝模式。


-GWA2 吉娃兔 是”通用网络应用架构( General Web Application Architeture, https://ufqi.com/dev/gwa2/ )”,基于 -GWA2 可以轻便构建各种网络应用程序,
包括复杂的在线购物商城、在线医疗、在线教育、 旅游交易平台、社群或者社交网站和新闻资讯网站等,
也包括各种企事业单位网上门户,在线交互及服务作业系统等.
还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部.
-GWA2 是为数不多的支持跨开发语言的应用框架,目前支持 -Java, -PHP, -Perl, -Aspx and -Python .

-GWA2 is a “General Web Application Architecture” and based on -GWA2 developers can easily build a variety of network applications,
including complex online shopping malls, online medical services, online teaching, travel trading platforms, community or social networking sites and news information sites, etc.
Also the applications include various online portals of enterprises and institutions, online interaction and service operations systems.
Moreover it contains server-side support for NativeApp, or even all of the WebApp.
-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.

-GWA2 is E.A.S.Y 
Easy Along, Swift Yield
轻松启动, 快速产出.


ufqiwork-logo

有福工坊UfqiWork 是一个在线服务交易平台。( https://ufqi.com/work/ )
有福工坊提供在线分类服务信息,致力于在线撮合服务交易的买方和卖方,并为买方、卖方提供“行准”服务,居间担保服务交易。行准服务的提供方为居间交易的第三方。有福工坊的服务交易平台为整个服务交易流程的第四方。

-R/32ST

https://ufqi.com/blog/gwa2-java-file-upload-issues/

发表在 -GWA2, -Hanjst/-汉吉斯特, 服务器运维, 编程技术, 计算机技术 | 标签为 , , , , | 一条评论

床上电脑桌大学生宿舍上铺懒人可折叠小桌子家用寝室简约学习书桌电热蚊香液套装无味婴儿孕妇家用补充液插电式灭蚊液护发素发膜正品修复干枯免洗家用护发补水顺滑女士发热焗油膏书皮纸自粘透明磨砂加厚包书皮小学生一二三四年级上册上学期书膜全套课本书本保护套16k封面外壳防水a4

A practical analysis on $hadow$ocks

Things are getting worse even for an ordinary computer programmer to bypass the Internet walls in some countries or districts. There are quite a lot of techniques involved in making a working solution to get through the walls safely to smoothly.

Knowledge on TCP/IP is an entry for this exam. Deep understanding of the walls is an essential point and other requirements are data communications, data security, network security and data encryption.

Besides those above, programmers are also being asked what application is being deployed over the wall. The most-deployed application is HTTP, and therefore they need to understand more than usual on its protocols. Multiple operating systems and programming languages could help programmers easily get things done.

What’s more, for both sides, the battles of blocking and anti-blocking are always continually being evolved  and they just look like spear vs. shield. One working technique may fail tomorrow if it has been acquired by another side. 

Here is a workflow based on what we have learnt from $hadow$ocks, one of the most-starred repositories on GitHub.

Work flow:

–> packets plain sent (1)
–> $hadow$ocks-windows-client(2) –> obfs-local(3)
–> packets wrapped over Internet
–> obfs-server(4) –> $hadow$ocks-libev-server(5)
–> packets REQUEST & RESPONSE (6)
–> $hadow$ocks-libev-server(7) –> obfs-server(8)
–> packets wrapped over Internet
–> obfs-local(9) –> $hadow$ocks-windows-client(10)
–> packets plain recv (11)


https://ufqi.com/blog/analysis-on-hadowocks-202008/

-R/A2SP

发表在 服务器运维, 编程技术, 计算机技术 | 标签为 , , | 一条评论

山羊绒围巾女冬英伦百搭围脖双面格子加厚保暖披肩显白黑茶色蓝黑色板栗色中国电信 电信流量5G卡手机卡京东制作