重剑无锋


  • Home

  • Archives

manjaro 中的 wifi 连接

Posted on 2019-06-08

manjaro 安装之后,首要任务是连接wifi, 不同于 arch Linux 的

1
wifi-menu

命令, manjaro 版本的连接 wifi 命令是

1
nmtui

哈哈,出来哪个界面是蓝屏的,类似于 xp 死机的界面,哈哈哈。

不过整体上 manjaro 的一般桌面版都比较干净整洁。当然,最吸引人的莫过于和 arch 一样, 仓库里面的众多软件。 除了pacman 管理软件中外,还有 yaourt 不过最近 yaourt 不怎么维护了,需要切到 yay 上。

不管怎么说,端午节,又是高考的季节,网络速度很慢。

在我已经安装 deepin 的 SSD 上分出了一半的空间给 manjaro 用。 还有个机械硬盘 445G 也是一个 manjaro .

诡异的202d 和 202c

Posted on 2019-05-30

诡异的 202D 和 202C
你们看下面这两行有啥不一样?

1
select count(a.id) as count from  a left join  b on a.code = b.code left join  c on a.id = c.id where a.ctime >= 1559059200 and a.ctime < 1559145600 and a.phone = ‭15038135711;‬

和

1
select count(a.id) as count from  a left join  b on a.code = b.code left join  c on a.id = c.id where a.ctime >= 1559059200 and a.ctime < 1559145600 and a.phone = 15038135711;有啥不一样两个?

看上去差不多吧?其实如果你真实运行,就会发现第一句末尾的15038135711会报错。
一般的IDE是傻傻分不清有啥不一样的。但是放在 vim 或者 Emacs 里面一眼就是别出来了。⚫️ 哈哈。

灵犀指 之 sed 妙用

Posted on 2019-05-20

前奏

今天又来了一个比之前更有意思的一个需求。

需要提取两项数据,1. 包含两层目录下面的不带后缀的文件名;2. 这些文件的修改时间。
然后将这两个关联的数据插入一个表中,供后续和其他表关联查询使用。

1
2
3
4
find . -name "*.zip" -print  | xargs ls --full-time | head -n 3
-rw------- 1 root root 4792 2019-02-18 09:27:47.113037320 +0800 ./5/0/02ef1fefebcef1fddf.zip
-rw------- 1 root root 11794 2019-03-19 10:04:15.777575937 +0800 ./5/0/305c3eae0cac4fcfd0.zip
-rw------- 1 root root 5813 2019-05-11 14:22:09.270733531 +0800 ./5/0/00640aa46bf544aacf.zip

如,把这三行的 2019-02-18 02ef1fefebcef1fddf 摘出来。

然后创建数据库:

1
2
3
4
5
6
7
CREATE TABLE 'tmp_code' (
`id` int(11) unsigned NOT NULL auto_increment,
`code` char(20) NOT NULL,
`ctime` char(30) NOT NULL,
PRIMARY KEY (`id`),
KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

最后塞进去数据库。

思路

我的第一反应是: 先使用命令把

1
2
3
2019-02-18 02ef1fefebcef1fddf 
2019-03-19 305c3eae0cac4fcfd0
2019-05-11 0640aa46bf544aacfx

拿出来,然后使用我擅长的 vim 文本编辑器批量编辑。
确实也是可以实现。只需要使用 Ctrl + v 批量, 配合制作一两个宏。

vim 宏拼接sql 技巧

比如录制宏部分可以使用, 比如单独插入一个字段

分别转化成单条插入sql(思路一)

第一行单独处理, 然后我们从第二行开始制作宏

1
2
3
4
5
6
7
8
qij
IINSERT INTO tmp_tb (code) values ('
Ctrl+[
A');
Ctrl+[
q
-- 查看总行数n, 移动光标在第一行时,普通模式下执行(n-2)次回放宏:如 n = 100, 则执行时是 98@i
n-2@i

或者vim批量编辑拼接成 insert sql (思路2)

录制宏:

1
2
3
4
5
6
q
ijI'
Ctrl+[
A',
Ctrl+[
q

查看总行数n, 移动光标在第一行时,普通模式下执行(n-1)次回放宏:如 n = 100, 则执行时是 99@i

1
n-1@i

首行 输入

1
2
insert into tmp_tb code values (
);

然后把结尾的 ); 放到最后一行

得高人指点 awk 和 sed 精要

这里转而使用 awk 和 sed 实现一行搞定, 具体可以这样:

1
find . -name "*.zip" -print  | xargs ls --full-time | awk '{print $6,$9}' | sed -r 's#.*([0-9]{4}-[0-9]{2}-[0-9]{2}).*/(\S+)\.zip$#INSERT\ INTO\ tmp_tb\ \(ctime,code\)\ values\ (\1 \2)#' >> tmp_code.sql
  1. 逐一备注解释一下:
1
find . -name "*.zip" -print

是为了 找到当前目录及子目录中所有的 .zip 结尾的文件。

  1. “|” 是管道命令。
  2. 紧接着将文件的更改时间打印出来 xargs ls –full-time 。
  3. 然后,使用 awk awk中介绍过 的 awk 命令,默认空格作为分割符,将文本分离出来, $6, $9分别是空格分割的这么多列里,第六,第九列分别就是时间和文件信息的字符串。此时,时间已经拿到年月日,但是第九列却是带路径带后缀 ./5/0/02ef1fefebcef1fddf.zip 这样的字符串。
  4. 然后就到 sed 粉墨登场:
1
sed -r 's#.*([0-9]{4}-[0-9]{2}-[0-9]{2}).*/(\S+)\.zip$#INSERT\ INTO\ tmp_tb\ \(ctime,code\)\ values\ (\1 \2)#'

sed 有一个绝妙的地方,就是可以使用像 (匹配模式) 这样的模式,匹配起来, 然后 使用 \1 , \2 这样拿到前面的匹配模式里原文的匹配的字符串,可以理解为一个变量。 单条 sed 一共可使用 9 个这样的匹配模式。

于是就可以完成这个需求了。 对于成千上万,特别是超过 vim 能承受的打开速度和编辑的文件来说,awk 和 sed 配合 其他比如 find, grep, xargs 等命令,简直是犹如神助!

  1. 最后用
    1
    >> tmp_code.sql

把终端的标准输出都导入一个 tmp_code.sql 文件里面去。

  1. 数据库
    1
    source tmp_code.sql

入库。收工。
人呀,只要你给机会,他什么事情都能干得出来。

走出宅门

Posted on 2019-05-19

我根本就不会泡妞。拉倒吧,就这样吧。好好地赚钱,去自己想去的地方。做自己想做的事,没有后背,没有根据地。就这样往前走吧。
“三十功名尘与土,八千里路云和月。”
就此打住了。

zsh 中 flutter 中不起作用的问题

Posted on 2019-05-18

flutter 起飞

最近每次在 zsh 命令行中都是只能临时设置 flutter 路径,或者非得跑到 flutter 安装的 bin 目录中才能启用 flutter , 今天到官网一看才知道,原来 ~/.zshrc 开机加载之后,并没有启动 ~/.bash_profile

于是解决的办法是:在 ~/.zshrc 的末尾加一行,

1
source ~/.bash_profile

但是我有点疑问是其他命令都是可以通过 ~/.zshrc 加的,那样

1
source ~/.zshrc

就好了呀。
怪哉, 怪哉……

arch-key

Posted on 2019-05-12

arch 系统signature错误

升级或者重装失败时,报 error: krb5: signature from … is unknown trust
… invalid or corrupted package (PGP singature)

解决方法

1
pacman-key --refresh-keys

或者

1
pacman -Sy archlinux-keyring

buy

Posted on 2019-03-05

现代的买卖

买卖初始的方式是各取所需,等价交换,按需交易。现如今,买卖变成了是一场场战争,没有底线地刺激人的欲望和需求。

经济机器是怎样运行的

Posted on 2018-12-09

对经济的兴趣

我原先一直没兴趣关注关系经济学相关的东西。读书时代喜欢更多的热衷于谈论家国大事,总是幻想着仗剑闯天涯,怎么干一番开天辟地的,前无古人后无来者的大业,整天跟着时事到处转悠。到今天没被忽悠瘸,也真是庆幸。
今天了解下经济机器是怎么运行了。因为我已经开始对投资,对赚钱,对经济的运行规律整出兴趣来了。
这是我在一个视频里面看到的。不一定就对,看自己判断了。我把视频说的记录下来,再自己琢磨琢磨。
开始了。

经济机器

经济就像一部简单的机器一样运行。但是很多人不大懂得这一点,或是对经济的运行方式持有不同观点, 于是导致很多不必要的经济损失。
经济虽然看起来复杂,但是其实是以简单和机械的方式运行。经济由几个简单的零部件和无数次重复的简单交易组成,这些交易首先是由人的天性所驱动,因而形成三股主要的经济动力。

  • 一,生产率的提高,
  • 二,短期债务周期,
  • 三, 长期债务周期。

交易

经济不过是无数交易的总和,而交易是一件非常简单的事情。交易时刻都在发生,我们每次买东西都是进行一笔交易。在每次交易中,买方使用货币或信用向卖方交换商品、服务或金融资产。信用在使用时和货币一样,因此把花费的货币和信用加在一起,就可以得出支出总额。支出总额是经济的驱动力,如果用支出金额除以销量,就得出价格。就这么简单,这就是交易。交易是经济机器的最基本零件,所有经济周期和动力都是交易造成的。所以理解了交易,才能理解整个经济。

一个市场由买卖同一种商品的所有买方和卖方组成,例如, 小麦市场、汽车市场、股票市场和千万种其他市场,经济就是由所有市场内的全部交易构成。把全部市场内的总支出和销量加在一起,就得到了了解经济运行所需要的全部信息。个人、企业、银行和政府都在以上述方式从事交易,用货币和信用,交换商品、服务和金融资产。政府是最大的买方和卖方,而政府有两个组成部分:即收税的中央政府和花钱的中央银行。央行控制着经济中的货币和信贷数量,因此不同于其他买方和卖方。央行通过影响利率和发行更多货币来实行这种控制。因此,央行在信贷流通当中发挥着重要作用。

信贷

信贷 是经济中最重要的的组成部分,但也许是人们最不了解的部分。它之所以最重要,是因为它是经济中最大且最变幻莫测的一部分。贷款人和借款人与在市场中进行交易的买方和卖方没有两样。通常,贷款人希望自己的钱生出更多的钱,而借款人则想购买当前无法负担的某种东西。比如房子、汽车、或是进行投资,例如开办企业。借贷可以同时满足贷款人和借款人的需要。借款人保证偿还借款,成为本金,并支付额外的款额,称为利息。利率高时,借贷就会减少,原因是贷款变得昂贵;当利率低时,借贷就会增加,原因是贷款变得便宜。如果借款人保证偿还债务,而且借款人相信这一承诺,信贷就产生了。任何两个人都可以通过协定凭空创造出信贷!信贷看似简单,实则复杂,因为信贷还有其他名称。 信贷一旦产生,立即成为 债务 。债务是借款人的资产,是借款人的负债。等到借款人今后偿还了贷款并支付了利息,这些资产和负债将消失,交易得以完成。那么为什么信贷如此重要?

这是因为,借款人一旦获得信贷,便可以增加自己的支出。不要忘记,支出是经济的驱动力,这是因为一个人的支出是另一个人的收入。想想看,你每花一块钱,另一个人挣了一块钱;而你每挣一块钱,必定有别人花了一块钱。所以你花的越多,别人挣得就越多。如果某人的收入增加,其信用度就会提高,贷款人就更愿意把钱借给他。信用良好的人具备两个条件:偿还能力和抵押物。收入债务比率高,借款人就具备偿还能力。如果无法偿还,借款人还可以用有价值的、可以出售的资产作为抵押物。这样,贷款人可以放心地把钱借给他们。所以,收入增加使得借贷也增加,从而能够增加支出。由于一个人的支出是另一人的收入,这将导致借贷进一步增加,并不断循坏。这一自我驱动的模式导致经济增长,也正因为如此,才产生了经济周期。

在一项交易中为了获得某样东西你必须付出另一样东西,长期来看,你得到多少取决于你生产多少。我们的知识随时间而逐渐增多,知识的积累会提高我们的生活水平,我们将此称为生产率的提高。一个善于创新和勤奋的人,将比那些自满和懒惰的人更快的提高生产率和生活水平。但在短期内不一定体现出来。生产率在长期内最关键,但信贷在短期内最重要。这是因为生产率的提高不会剧烈波动,因此不是经济起伏的一个重要动力。但是债务是这种动力,因为我们能够通过借债让消费超过支出,但是在还债时不得不让消费低于支出。债务量的波动有两大周期,其中一个周期持续大约5年至8年,另一个持续大约75年到100年。大部分人虽然能感受到波动,但由于离波动太近,每天、每周都身临其境,通常并不认为这是周期。

如上所述,经济的上下起伏不是取决于人们多么善于创新或勤奋工作,而是主要看信贷的数量。我们先想象一个没有信贷的经济运行。在这样的经济运行中,增加支出的唯一办法就是增加收入,因此需要提高生产率和工作量。提高生产率和经济增长的唯一途径。由于我的支出是另一个人的收入,当我或者另一个人的生产率提高的时候,经济就会增长。我们如果观察各种交易,加以总结就会发现一条类似于生产率增长轨迹的渐近线。但是,由于我们借债,于是产生了周期,原因并不是任何法规,而是人的天性和信贷的运作方式。借债不过是提前消费,为了购买现在买不起的东西,你的支出必然超过收入。因此,你需要借钱,实质上是向未来的自己借钱。 你给自己设定了一个未来的时间,到那个时候,你的支出必须少于收入,以便偿还债务。 这样马上就形成了一个周期。通常一旦你借钱,就制造了一个周期,对于个人这样,对于整个经济运行也是这样。这就是为什么必须理解信贷,因为信贷触发了一系列机械和可以预料的、将在未来发生的事件, 这就是信贷不同于货币的地方。完成交易需要货币, 当你在酒吧用现金买一瓶啤酒时,交易立即完成。但是如果你用信用买一瓶啤酒,比如赊账,你相当于承诺今后为这瓶啤酒付钱。你和酒吧一起创造了一笔资产和一笔债务,你们凭空制造出了信贷。只有在你今后清偿了这笔赊账之后,上述资产和负债才会消失,债务才会还清,交易才会了结。

现实生活中,大部分所谓的钱实际上是信贷。不要忘记,在没有信贷的经济运行中,增加支出的唯一办法是提高生产。但是在有信贷的经济运行中,还可以通过借贷来增加支出。因此,有信贷的经济运行能增加支出,使得收入的增长速度在短期内超过生产率的增长,但在长期内并非如此。但是信贷不一定是坏事, 只是会导致周期性变化。信贷如果造成超过偿还能力的过度消费,就是不良信贷。但是信贷如果高效率地分配资源和产生收入让你能偿还债务,就是良性信贷。例如,如果你借钱买一台大彩电,电视机不会带来任何收入让你偿还债务。但是你如果借钱买一台拖拉机,用它来收获更多的庄稼,赚更多的钱你就能偿还债务,提高生活水平。在有信贷的经济运行中,我们可以跟踪各种交易,观察信贷如何带来经济增长。

举一个例子: 假设你每年挣10万美元,没有任何债务。你有不错的信用,可以借一万美元,例如用信用卡借。因此,你每年可以花11万美元,即使你的收入只有10万美元。由于你的支出是别人的收入,另一个人因此挣了11万美元,这个挣了11万美元的人如果没有任何债务,可以借1.1万美元。他可以消费12.1万美元,即使他的年收入只有11万美元。由于他的支出是另一个人的收入,而我们通过跟踪各种交易,可以看到这个过程不断自我强化。但不要忘记,借债形成周期,周期会上升,最终也会下降。

短期债务周期

下面我们来谈谈短期债务周期。随着经活动的增加,出现了扩张,这是短期债务周期的第一阶段。支出继续增加,价格开始上涨。原因是:导致支出增加的是信贷,而信贷可以即刻凭空产生。如果支出和收入的增长速度超过所售出的商品的生产速度,价格就会上涨。我们把价格的上涨成为通货膨胀。

央行不希望通货膨胀过高,因为这会导致很多问题。央行在看到价格上涨时就会提高利率。随着利率的上升,有能力借钱的人会减少,同时现有债务成本也会上升,就等于你每个月的信用卡还款额会增加。由于人们减少借债,还款额度增长,剩下来用于支出的资金将减少,因此支出速度放慢。而由于一个人的支出是另一个人的收入,环环相扣,人们的收入将下降。由于支出减少,价格将下跌,我们称之为通货紧缩。经济活动减少,经济便进入衰退。如果衰退过于严重,而且通货膨胀不再成为问题,央行将降低利率,使经济活动重新加速。随着利率降低,偿债成为下降,借债和支出增加,出现另一次经济扩张。

可见,经济像一部机器一样运行。在短期债务周期中,限制支出的唯一因素是贷款人和借款人的贷款和借款意愿。如果信贷易于获得,经济就会扩张。如果信贷不易获得,经济就会衰退。请注意,这个周期主要由央行控制。短期债务周期通常持续5-8年,在几十年里不断重复。但是,请注意在每一个周期的低谷和高峰后,经济增长和债务都超过一前一个周期。为什么会这样呢?这是人促成的。人具有借更多钱和花更多钱的倾向,而不喜欢偿还债务,这是人的天性。因此,在长期内,债务增加的速度超过收入,从而形成长期债务周期。

尽管人们的债务增加,但贷款人会提供更宽松的信贷条件,这是为什么?这是因为,大家都以为形势一片大好!人们仅注意最近出现的情况。最近的情况是什么呢?收入一直在增加!资产价值不断上升!股票市场欣欣向荣!现在是繁荣时期!用借来的钱购买商品、服务和金融资产很划算。当人们过度借贷消费时,泡沫便产生了。因此,尽管债务一直增加。但收入也以相近的速度增加,从而抵消了债务。我们把债务与收入比率称为债务负担,只要收入继续上升,债务负担就可以承受。于此同时,资产价值迅猛上升,人们大量借钱来购买资产,因为投资促使资产价格日益升高。人们感觉自己很富有。因此,尽管积累了大量债务,收入和资产价值的上升,帮助借款人可以在长期内保持良好的信用度。但是这种情况显然无法永久持续下去,也确实没有持续下去。到了一定的时候,偿债成本的增加速度超过收入,迫使人们消减支出。

由于一个人的支出是另一个的收入,收入开始下降。人们的信用因此降低,致使借贷减少。偿债成本继续增加,使得支出进一步减少,周期开始逆转。这时到达长期债务的顶峰,债务负担变得过重。美国、欧洲和世界上很多其他地区在 2008 年就发生了这一情况,日本在 1989 年和美国在 1929 年因同样原因发生了这一情况。 现在经济进入去杠杆化时期。在去杠杆化过程中,人们削减支出,收入下降,信贷消失。资产价格下跌,银行发生挤兑,股票市场下跌,社会紧张加剧。整个过程开始下滑并形成恶性循环。随着收入下降和偿债成本增加,借款人倍感拮据。随着信用消失,信贷枯竭,借款人再也无法借到足够的钱来偿还债务。借款人竭力填补这个窟窿,不得不出售资产。在支出下降的同时,出售热潮使市场充斥待售资产。这时,股票市场暴跌,不动产市场一蹶不振,银行陷入困境。随着资产价格下跌,借款人能够提供的抵押物的价值下降,这进一步降低了借款人的信用。人们觉得自己很穷,信贷迅速消失。

支出减少、收入减少、财富减少、信贷减少、借债等等随之减少,这是一个恶性循环。它看起来与衰退相似,但不同之处是,无法通过降低利率来挽回局面。在衰退中,可以通过降低利率来刺激借贷。但是,在去杠杆化过程中,由于利率已经很低,接近0,从而丧失刺激功能,因此降低利率不起作用。美国国内的利率在 1930 年的去杠杆化期间下降到 0,在 2008 年也是如此。衰退与去杠杠化之间的区别在于,在去杠杆化过程中,借贷人的债务负担变得过重,无法通过降低利率来减轻。贷款人意识到,债务过于庞大,根本无法足额偿还。借款人失去了偿债能力,其抵押物失去价值,他们觉得受到债务的极大伤害,不想再借入更多债务。贷款人停止放贷,借款人停止借贷,整个经济体与个人一样都失去了信用度。

怎样去杠杠化

那么应该怎样应对去杠杆化?问题在于,债务负担过重,必须减轻,为此可以采用四种方法。

  1. 个人、企业和政府削减支出;
  2. 通过债务违约和重组来减少债务;
  3. 财富再分配,将财富从富人转给穷人;
  4. 央行发行更多货币。

这四种办法被用于现代历史上的每一个去杠杆化过程。通常第一个措施是削减支出,个人、企业、银行和政府都勒紧裤腰带削减支出,从而能够减少债务。我们经常把这称为紧缩,当借款人不再借入新的债务,并开始减少旧债务的时候,你会以为债务负担会减轻。但情况刚好相反!支出减少了,而一个人的支出是另一个人的收入,这就导致收入下降。收入下降速度超过还债的速度,因此债务负担实际上更为沉重。我们已经看到,这种削减支出的做法引起通货紧缩,令人痛苦。企业不得不削减成本,这意味着工作机会减少,失业率上升。这导致下一个步骤,即必须减少债务!很多借款人无法偿还贷款。而借款人的债务是贷款人的资产,如果借款人不偿还银行贷款,人们会担心银行无法偿还其存款。因此纷纷从银行去除存款,银行收到挤兑,而个人、企业和银行出现债务违约。这种严重的经济收缩就是萧条。萧条的一个主要特征是,人们发现,他们原先以为属于自己的财富中有很大一部分实际上并不存在。

我们再次以酒吧为例,当你用赊账的办法买一瓶啤酒时,是在承诺今后偿还酒吧的赊账,你的承诺成为酒吧的一项资产。但是,如果你不兑现承诺,不偿还酒吧的赊账,实际上是债务违约。那么酒吧的这项“资产”实际上一钱不值,它实际上是消失了。很多贷款人不希望自己的资产消失,同意债务重组。债务重组意味着贷款人得到的还款减少,或偿还周期延长,或利率低于当时商定的水平。无论如何,合约被破坏,结果是债务减少。贷款人希望多少收回一些贷款,总强过血本无归。债务重组让债务消失,但由于它导致收入和资产价值以更快的速度消失,债务负担继续日趋严重。削减债务和减少支出一样,令人痛苦和导致通货紧缩。所有这些都对中央政府产生影响,因为收入降低和就业减少意味着政府的税收减少。于此同时,由于失业率上升,中央政府需要增加支出,很多失业者储蓄不足,需要政府的财务资助。此外,政府制定刺激计划和增加支出,以弥补经济活动的减少。在去杠杠化的过程中,政府的预算赤字飙升,原因是政府的支出超过税收,在新闻中听到的预算赤字正是这种情况。

政府必须加税或者举债,以填补赤字。但是,在收入下降和很多人失业的时候,应该向谁融资呢?富人。由于政府需要更多的钱,而且大量的财富集中在少数富人的手中。政府自然而然地增加对富人的征税,以帮助经济中的财富再分配。把财富从富人那里转给穷人,正在困苦当中的穷人开始怨恨富人,承受经济疲弱、资产贬值和增税压力的富人开始怨恨穷人。如果萧条继续下去,就会爆发社会动荡。不仅国家内部的紧张加剧,而且国家之间也会这样,债务国和债权国之间尤其如此。这种局势可以导致政治变革,有时是极端的变革。

1930 年代,这种局势导致希特勒掌权、欧洲爆发战争和美国的大萧条。要求采取行动来结束萧条的压力越来越大。不要忘记,人们心目中的货币实际上大部分是信贷。因此,信贷一旦消失,人们的钱会不够花。人们迫切需要钱,而你一定记得,谁可以发行货币,中央银行可以。央行已经把利率降到接近 0 的水平,现在不得不发行更多货币。发行货币与削减支出、减少债务和财富再分配不同,会引起通货膨胀和刺激经济。中央银行不可避免地凭空发行更多货币,并使用这些货币来购买金融资产和政府债券。这种情况发生在美国大萧条期间,并与 2008 年再次爆发,当时美国的中央银行,即联邦储备委员会,增加发行了两万多亿美元,世界各地能够这样做的其他央行也增发了很多货币。央行通过用这些货币购买金融资产,帮助推升了资产价格,从而提高了人们的信用。但是,这仅仅有助于那些拥有金融资产的人,你看央行可以反行货币,但是只能购买金融资产。

而另一方面,中央政府可以购买商品和服务,可以向人民送钱,但是无法印钞票。因此为了刺激经济,央行和政府必须合作央行通过购买政府债券,其实是把钱借给政府,使其能够运行赤字预算。并通过刺激计划和失业救济金来增加购买商品和服务的支出,这增加了人们的收入,也增加了政府的债务。但是这个办法将降低经济中的总债务负担,这是一个风险很大的时刻。决策者需要平衡考虑降低债务负担的四种办法。必须平衡兼顾通货紧缩的办法和通货膨胀的办法,以便保持稳定。如果取成适当的平衡,就可以带来和谐的去杠杠化。所以说去杠杠化可以是痛苦的,也可以是和谐的。怎样才能实现和谐的去杠杠化? 尽管去杠杠化是艰难的,但以尽可能好的办法来处理艰难的局势却是一件好事。这比杠杠化阶段大量举债产生过度失衡现象要好得多。在和谐的去杠杠化过程中,债务收入比率下降,经济实际上是正增长。同时通货膨胀并不是一个问题,这是通过适当的平衡所取得的。为了取得稳定的平衡,需要结合削减支出、减少债务、转移财富和发行货币的办法以保持经济和社会稳定。

有人问,发行货币是否会加剧通货膨胀?如果增发的货币抵消贷款的降幅,就不会引发通货膨胀。不要忘记,重要的是支出。每一块钱的支出,无论支出的是货币,还是信用,对价格的影响都是一样的。央行可以通过增加货币发行量来弥补消失的信贷。央行为了扭转局面,不仅需要推动收入的增长,而且需要让收入的增长率超过所积累债务的利率,这是什么意思?主要的意思是,收入一定是比债务增长得快。

例如,我们假设有个国家正在经历去杠杠化,其债务收入比率是 100%,这意味着,债务量相当于整个国家一年的收入。假设这些债务的利率是 2%,如果债务以 2% 的利率速度增加而收入的增长率仅有大约 1%,那么债务负担永远不会减轻,必须发行更多货币,是收入增长率超过利率。然而, 发行货币太容易了,而且这个方法比其他方法受欢迎。因此这个方法可能易于滥用。关键是避免像 1920 年代去杠杠化的德国那样发行过多的货币,从而导致恶性通货膨胀。
如果决策层取得适当的平衡,去杠杠化过程就不会那样激烈,经济增长速度缓慢,但是债务负担会下降,这就是和谐的去杠杠化。

当收入上升的时候,借款人的信用度提高。借款人一旦显得更有信用,贷款人就会开始恢复贷款。债务负担终于开始下降,人们可以借到钱,就可以增加消费。经济终于开始恢复增长,长期债务周期从而进入通货再膨胀阶段。去杠杠化如果处理不当,会非常可怕;如果处理得当,最终将解决问题。为了使债务负担下降和经济活动恢复正常,大约需要十年或更长的时间,因此有“失去的十年”这种说法。
综上所述,经济当然要比这个模式复杂一些。然而,把短期债务周期、长期债务周期和生产率增长轨迹结合起来分析,我们会得到一个不错的模式,可以看清我们在过去和当前的出境以及未来可能的发展方向。

小结

最后,希望学到三条法则:

  • 第一,不要让债务的增长速度超过收入,因为债务负担最终将把你压垮。
  • 第二,不要让收入的增长速度超过生产率,因为这最终将使你失去竞争力。
  • 第三,尽一切努力提高生产率,因为生产率在长期内起着最关键的作用。
    学习了。

go 爬虫爬取深圳房源信息

Posted on 2018-12-07

没事就捣鼓一下爬虫,弄点数据玩一下吧。
今天就拿下深圳房源来弄一下。
花了半小时加调试正确。

深圳房源价格概况

考验你的时候到了

Posted on 2018-12-02

周末发版

周六上线, 大版本的升级。虽说不是太大波动但也是一波三折。做个记录吧。可以改进的地方当然还是很多的。
昨天还想着总结一下的。但是昨天其他部门折腾到晚上 22:00 多。回到家都 11:30 了, 当时没来得及仔细回顾。洗洗睡了。
今天来回顾一下都用了哪些上线操作技巧。

就位

8:30 我就已经就位了。基本上进入上线的节奏了。但是同时上线的其他部门的四个部门还没有准备好。我需要等其中一个部门的人将与本次需求相关的大概几十万数据发过来, 进行初始化。
于是写好上线文档,重新梳理一遍本次开发的源码逻辑,流程。确认顺利走了一遍。将后端单元测试 go test 走一遍。确认开发环境和测试环境下没有问题的。

准备

9:00 开始细化前一天(周五)与架构师讨论修改之后的文档, 包括数据初始化的改动。本来周五下午我准备封闭将要上线的 dev-feature 功能分支的。但是架构师过了一遍之后。认为我初始化的数据有点问题。主要是初始化不够彻底,留有少许残余的没初始化到。于是我重新修改了两版方案。其中初始化行业和地址字典部分,我改为原先从上传文件走脚本修改,改为导入临时表, 然后使用联表查询,依据不同条件进行批量更新。
等初始化的数据,一直催他们,还是没有给到正式线的初始化数据。
所以在 15:30 拿到初始化数据之前。我依次做了这几件事情:

  1. 无关的代码注释,多余的 log 打印去掉。
  2. 合并前端代码,提交版本库。 因为需要拉 node_module 目录,所以提前准备好前端代码镜像。
  3. 合并后端go代码,提交版本库待发布分支。

    1
    2
    3
    4
    5
    6
    git checkout master 
    git fetch
    git checkout dev-feature
    git rebase master -i
    # 然后保留一个功能点的 commint ,其他的 commit 修改为 squash
    # 这样可以保证主干分支 master 的干净, 相当于本次 100 个 commit 汇成了一个 commit
  4. 再次细化上线文档。

    • 将数据库表变更操作每条将要执行的 sql 按照执行顺序, 按照四个功能块列出来。细化到每一条 sql, 包含变更前的查询和变更后的确认 sql 全补上。
    • 初始将修改的功能点 1-7 罗列出来。上线前给架构师再过一遍。架构师确认无误。
    • 加上接入监控部分详细描述。
    • 确认要部署的 docker 集群 ip。
  5. 提前配置好配置服务器的相关域名,开放端口,各项敏感参数,签名。
  6. 配置线上开放的 API . 发布,申请审核通过之后,进行对应的业务线授权。

初始化

开始所有的数据库操作之前,都先备份。

1
mysqldump -uroot -p dbname table_name > table_xxx_20181201.sql

16:00 千呼万唤始出来,终于等来了初始化数据。我依次按照我的文档。执行了初始化。一开始收到初始化文件时,想着用 rsync 去上传文件的。但是行不通。改为 rz 同步初始化数据文件到服务器。然后打算从终端直接导入。

1
mysqldump -uroot -p db_name < change.sql

结果不行。又改登陆数据库先进去, 然后

1
source /dirpath/change.sql

这下导入了。之后开始加字段,

1
2
3
4
5
ALTER TABLE X ADD COLUMN xxx VARCHAR(50) NOT NULL COMMENT 'XXX';
UPDATE TABLE ...
ALTER TABLE ADD INDEX (`YYY`);
...
# 还有一顿的操作, 按流程文档走。

初始化历时 30 分钟左右。
此时已经 16:30 左右了! 根据上线次序,必须其他三个部门全部上线完,我才能上线。但是其中的一个部门还在初始化。
然后继续等。结果,等到了晚上快 20:00 点,才等来了消息: 其他部门初始化完成了,这下我才可上线。在这中间,我又把本次接入的出入的接口加上监控项目。这样,代码一上线,我就可以开始变看日志,边看监控发现存在的问题了。

上线

于是我用了 7 秒就把后端所有的镜像部署上去了。为啥?因为我在等待其他部门操作期间,把所有的镜像都准备好了。万事俱备,只欠灭霸的一个响指了。哦,好像哪里不对啊。
紧接着又上线前端的容器。
看日志,发现有一个错误级别的。反馈是数据库有一个字段找不到!这个字段是第八版本中修改的!赶紧加上。这回后续时间内那个错误级别日志消失了。
然后联合线上回归。又发现几个问题。马上跟进!
原来其中有一个问题是我这边的,有一个表的有关时间字段设置的 int(11) 没有 UNSIGNED ! 长度不够。所以我改了一下这个字段长度。

1
ALTER TABLE table_name CHANGE `x_column` `x_column` int(11)  UNSIGNED  NOT NULL DEFAULT 0 COMMENT '过期时间';

然后再验,还是不够。原来另一个接口返回的时间戳是精确到毫秒级的时间戳, 从 2147483647 扩大到 4294967295还是不够。所以我改为 bigint 之后才行。
其他问题,协助他们验证的线上的 bug 进行日志跟进。依次都化解了。

验证完,都已经 22:00 了。
然后就坐地铁回家了!

小结

  1. 永远准备好应对任何来自生产环境的异常问题。生产环境和测试环境不可能完全一致, 只能无限逼近。
  2. 单元测试能多写就多些,必要的加上压测。
  3. 操作流程要清晰。
  4. 要有全局观。
  5. 响应要一直保持足够快。
12…6

Gitvim

55 posts
18 tags
RSS
© 2019 Gitvim