Sucha's Blog ~ Archive for October, 2022

22年10月30日 周日 12:15

达里奥“债务周期”理论

不记得在微博上看了哪位博主的介绍,开始看达里奥的债务周期理论。

先说一下背景,这个理论是达里奥总结经济规律后得出来的经济周期模型,这个模型着眼于经济周期,但出发点是个人、国家,我个人理解这里的债务也可以理解为个人、国家的货币(现金流),跟社会生产率的关系。

交易

模型从最简单的开始,人们需要交换所需,因而产生交易,这里的交易是一锤子买卖,一个人的所有消费,是另外一个人的所有收入,因为大家都交易换取所需,没有剩余的现金。

市场上流通的现金,刚刚好够所有人交易,也就没有通货膨胀。

信用

信用是加上了一个时间延期的交易,借钱的人增加了负债,放钱的人增加了资产,只有当借钱的还钱了,整个交易才完成。

市场中的一个环节,比如某个人因为其信用,增加了负债,在市场上凭空多出来了钱,一个人的所有消费是另外一个人的所有收入,借钱这个人环节后面的人都多了这笔钱,所以市场上凭空多出来了这笔钱。

借钱的人因为还钱而有了信用,也更容易借到钱,成了优质借贷人,放贷人就更乐意借钱给他,等于是鼓励借钱。

短债务周期

有了信用,市场上可以凭空多出来钱后,跟最开始的朴素交易不一样了,市场上有了债务(信用),也就有了周期。

刚开始放钱的人有利可图,借钱的人借钱容易,一切都很顺利,交易市场上会凭空多出来钱。本质上来说,这些钱是未来的现金流,但是却通过信用在当前使用。这些来自未来的钱,也让整个市场更繁荣了,繁荣的市场环境下,因为可预见的未来,人们倾向于借更多的钱,市场上的钱越来越多。

因为短期内社会生产率没有明显的提高,这些多出来的钱,会缓慢抬高所有社会商品的价格,这就是通货膨胀。

社会商品的价格是所有人承担的,而因信用在流通环节多出来的钱不是社会每个人均享的,这容易造成社会问题,因为信贷的部分过热,也容易影响金融的稳定。

货币管理者此时会选择回收一部分货币,其手段就是提高利率,利率提高后,放钱的会发现放钱还不如储蓄,一部分钱会从市场上回流,市场上钱少了,商品价格也会慢慢回落,钱会慢慢回到更需要它的地方,因为低利率额外出现的生产、交易会减少。

这个其实就是经济衰退,会从过热,回到正常的情况。

货币管理者其实还可以降低利率,大家都不存钱了,而是选择放贷,市场上的钱多了起来,也盘活了经济。

长债务周期

在短债务周期中,社会生产率也在提升,短债务周期的螺旋上升,如果社会整体的还债能力,没有超过收入能力,也就是生产率还是正的话,对社会整体还是有利的,整个社会还是向着繁荣发展。

但是这个螺旋循环上升的情况不是一直不变的。

在这个螺旋循环上升的过程中,社会的债务其实一致在不断的缓慢积累,但是也总有到头。当社会的总体债务增长速度超过了其还债增长速度的时候,会发生其中一部分人无法还债的情况,一点都还不了了。

而整个社会因为短周期的债务已经完全结成一体,一个人的所有支出,就是另外一个人的所有收入,当有人完全不还钱时,会导致债务链条一环扣着一环,这个时候就是信用坍塌,经济萧条的情况。

如果当前社会面情况很差,会导致放钱的人根本不想放钱(有钱也不放,毕竟大概率还不了),而那些可能因为一点点钱就能度过眼前难关的人,在市场上借不到钱。

如果货币管理者这个时候选择提高利率也没有用,因为市场上是缺钱;而货币管理者降低利率也没用,有能力放贷的人也不会借钱,因为市场上需要借钱的人,还不了钱。

这些因为信贷产生的钱,最终影响了社会所有方面,债务增长速度超过了还债能力,导致生产率为负。

去杠杆

打破这个循环,在达里奥的描述中,就是去杠杆,有下面四个步骤

这几步需要徐徐缓慢成立,既要削减支出,也要发行货币、制造信用,总之就是财富重新分配,削减那些生产率提升慢、消耗资源多的行业、公司,盘活生产率提升快、社会影响面大的行业、公司,让社会的现金流,信贷重新起来。

--

短债务周期、长债务周期对我来说,还是有点难理解,慢慢来吧。

22年10月18日 周二 23:01

站点支持夜间模式

在 Win 10 本上玩老旧游戏,之后用 FireFox 查了一下暗黑模式插件,找到了 darkreader 扩展,其实也支持作为 Chrome 扩展,于是试用了一下,感觉完成度很高,阔以。

但是更没想到的是,因为是开源软件,github 介绍页上还包含了一个 darkreader.min.js 可以用在网站上,使用起来也比较简单,所以,很快,半小时不到,本站就支持夜间模式了。

方法是点击右边的 Function 下面的 theme ➟,就可以切换日间、夜间模式了。

跟用 FireFox/Chrome 插件效果一样的。

22年10月15日 周六 23:17

使用 Pagefind 支持静态网页站内搜索

在微博上看到了人家介绍 Pagefind,一个静态网站搜索工具,试用了一下,感觉很不错,部署也很方便。

这个工具的可以在每次 html 静态内容生成之后,对 html 网页进行分析,可以指定语言等,生成的是一个个独立的 zip 文件, 以及 css 和 js,全部生成在某个目录下,不需要其他的打包工具了。

打包的命令行比如,最后加的 --serve 参数可以拉起一个本地的 http 服务器,可以浏览器直接预览。

$ pagefind --bundle-dir ./pagefind --source ./publish --verbose --serve

运行的时候,先拉起一个 html,指定一个 id 内容节点,然后运行 js 提供的类进行 UI 渲染,它会监听 input 的输入, 然后动态更新节点下面搜索到的内容。

比如 HTML 页面先加载依赖的资源。

	<link href="pagefind/pagefind-ui.css" rel="stylesheet">
	<script src="pagefind/pagefind-ui.js" type="text/javascript"></script>

然后下面这样跑 js 就可以了。

<div id="pagefind"></div>
<script>
   	window.addEventListener('DOMContentLoaded', (event) => {
       	new PagefindUI({
			element: "#pagefind",
			showImages: false
		});
   	});
</script>

很好操作,UI 就不放上来了,工具是 Rust 搞的,要赞一个。

22年10月05日 周三 17:47

sshfs-win 配置记录

文章提供了一种 Windows 通过 sshfs-win 挂载 Linux 文件系统并访问内容的方案。

​​Windows 与 Linux 文件系统交互的可选方式

Windows 跟 Linux 文件系统交互数据的方式有好多种,我了解到的有

SSHFS 介绍

SSHFS 是一个使用 SSH File Transfer Protocol (SFTP)协议访问 SSHD 服务端,将远端文件系统,挂载到本地的用户层文件系统(FUSE)。

而 sshfs-win 则是一个 Windows 的实现方案,最终会将 Linux 文件系统挂载到本地的一个虚拟磁盘上。

sshfs-win 安装

我自己的情况是 WIN 7 SP1,Linux 是 VMware 虚拟机的 Ubuntu 18.04,看项目介绍 WIN 7 及之后的都能支持。

(新换了 WIN10 系统,也是这个方式安装使用)

有 sshfs-win-manager 这个界面管理器提供方便的操作,项目 README 有提供安装流程,我这里简单翻译一下

第一步

安装 winfsp 项目下的 releases 页面找到的最新稳定版本,目前是 winfsp-1.10.22006.msi

安装 sshfs-win 项目下的 releases 页面找到最新的稳定版本,目前是 sshfs-win-3.5.20357-x64.msi,这个是 64 位的

第二步

安装 ssh-win-manager 项目下的 releases 页面找到的最新稳定版本,目前是 sshfs-win-manager-setup-v1.3.1.exe

以上两步就安装完了。

sshfs-win 配置

开始菜单打开 SSHFS-Win Manager 后,点击右侧的 Add Connect 来增加需要访问的 Linux 文件系统地址就好

SSHFS-Win Manager

增加一个配置图片

Add Connection

如果 ssh 过去的用户无权限的话,在 Windows 这边会显示

Window 侧权限访问

22年10月03日 周一 22:42

MNet / Cincau 支持 Win 10

国庆放假没想好去哪里,再加上深圳这边几乎天天都有疫情,零星爆发,特别是罗湖、福田,连宝安也有一处,就更不敢走远了。

然后这个国庆的前几天,是为 MNet、Cincau 加入了 Win 10 的支持,虽然说之前有做过 Win 7 的,但在那之后都只验证了 Mac 和 Linux 下的场景,毕竟我自己没怎么使用 Windows 嘛。

其实有这个想法也很自然,因为 9 月底的时候,把家里的 T450 拿到了深圳,还升级了几个主要的硬件,多了这一台玩具后,就有了上面的想法,然后实践了一把。

用的工具链是 mingw64,安装包这里有 http://www.winlibs.com/

有一些工程本来就考虑 Windows 环境的,用 mingw32-make 替换 make 很多东西都能直接编译过,比如 LuaJIT。

mnet 的部分还好,都是我自己的代码,我是单独搞了一个独立于项目之外的 win 目录,放置一个 shell 文件,编译参数都配置好了,而且加上了 OpenSSL 的支持,来自 https://slproweb.com/products/Win32OpenSSL.html

这个 OpenSSL 可以选择是 msi 安装包的,安装好后,将头文件以及二进制库放到刚提到的 win 目录下相应位置就好。

跑了一下基于 openssl 的 reconnect 以及 rwdata 点对点测试,没毛病,跑得很好。

mnet 测试 OK 后,想着是不是 cincau 也可以呀,但是 cincau 的依赖项比较多,在 Mac 以及 Linux 下,依赖了 LuaRocks 来管理。但是在 Win 下,我死活用不了这个 LuaRocks,不知道怎么用,不管是 Git Bash、Windows Terminal 还是 cmd.exe,都没法用,也许是我使用的方式不对吧,这个就不晓得了。

不过没关系,用不了 LuaRocks,我就一个一个编译好了,好几个是不需要单独编译的,比如 MoonCake,纯 Lua 的库,但也遇到了问题,没法用 shebang 的方式拉起一个 lua 源代码了,只能删除 shebang 行,用一个单独的 bat 文件模拟了。

另外一个比较难的是 luasql.sqlite3,我搞了好久,大概有 3 个小时左右,在 lua 侧 require 老是出现找不到库的问题,运行起来后,库函数定位不到。

这个时候其实 cincau demo 工程里面,基本的 HTTP 已经通了,但是在 playground 页面里的 sqlite3 数据库读写还是失败的。

这里的原因,是因为 sqlite3.dll 预编译包和 lua.sqlite3 最终生成的 sqlite3.dll 文件名冲突了,导致加载失败。

使用了工具链的 nm 查看,发现 luaopen_luasql_sliqte3 确实没找到,怪不得失败,搞了半个晚上呀,没成功,只能先睡觉去了。

第二天一想,不对呀,我其实可以将 sqlite3.c 和 sqlite3.h 跟 luas.qlite3 放到一起编译的,这样就少了一层 dll 加载,只留了一个 sqilte3.dll 放到 luasql 目录下。这样在 lua 源文件层,之前怎么 require lua.sqlite3,现在还是一样。

此次变更后,demo 工程 playground 页面下的几个测试项都通过了,可喜可贺。

之后将这个 win 目录放到了单独的分支中,毕竟编译麻烦,不像 mnet,后面如果没有 C 层的改动,这个目录其实可以继续用下去了。