使用 Homebrew Bundle 管理电脑上安装的软件
今天看到一篇推文说 Homebrew 也支持类似 package.json
的方式来管理电脑上安装的应用,感觉这玩意挺实用的,像我上回换电脑还是照着 brew list
的输出再一个个装,有了它的话就可以一键安装了。而且除了 Homebrew 之外,它还可以导出通过 App Store 安装的软件和 VS Code 插件。那么,就小小折腾一下。
今天看到一篇推文说 Homebrew 也支持类似 package.json
的方式来管理电脑上安装的应用,感觉这玩意挺实用的,像我上回换电脑还是照着 brew list
的输出再一个个装,有了它的话就可以一键安装了。而且除了 Homebrew 之外,它还可以导出通过 App Store 安装的软件和 VS Code 插件。那么,就小小折腾一下。
最近项目里用到了些 Lock,爬了些文了解到它们是基于 AbstractQueuedSynchronizer
(即 AQS
)实现的。那么,不如趁热打铁,看看里面是怎么工作的。
在前一篇博文 Spring Boot 启动流程分析的调用 beanFactory 的后置处理
小节中提到了 beanFactory 的后置处理。这部分是 Spring IoC 的重点,但是因为内容很长,所以在这里单独开一篇博文来分析。
想来用了这么久的 Spring Boot,但一直没仔细了解它是怎么启动的。那既然想起来了,不如趁热打铁,从它的入口开始,深入看看 Spring Boot 在启动时都做了些什么。
前段时间拿 ConcurrentHashMap
和 Timer
简单整了个带过期功能的缓存,那用都用了,顺便就看看 Timer
这玩意是咋实现的。
关于 Java 的类加载机制,尽管我看过几篇文章,知道个双亲委派模型
,但是从来没钻进源码里看它到底是怎么委派的。
在实现一个双检锁单例的时候,IDEA 提示我要给 INSTANCE
实例加上 volatile
修饰符。当时并不明白为啥,所以选择相信 IDE。但是还是那句话,不能知其然不知其所以然啊,自己写的代码,不能自己心里没底不是。于是乎我一顿网上冲浪,终于整明白了为啥双检单例必须要用 volatile
修饰符。
突然想起来小时候玩过的一个电子宠物游戏《梦幻电子宠物》。
主窗口 | 宠物状态 | 关于 |
---|---|---|
![]() |
![]() |
![]() |
这个小游戏的存档机制很有意思,是在 C 盘根目录下创建一个 ini 文件,记录宠物的出生时间和各项指标,然后它会根据这个时间来计算宠物的状态。也就是说,即使你把游戏关掉,宠物也不会停止成长。所以玩家就必须经常打开游戏照顾这个宠物,不然很有可能下次打开的时候,宠物就已经变成一个墓碑了……
这个小游戏我上传到蓝奏云了,有兴趣的可以去下载来玩。不过因为 64 位的 Windows 已经不支持 16 位应用,所以你需要一个老版本系统的虚拟机,或者用 otvdm
来运行。
地址:https://boris1993.lanzouj.com/b03queu3c
密码:15l3
P.S.:在找原版的时候,我注意到关于页面里 “碧晓拱籍 设计”,以为这是原作者的名字,于是就拿它一顿找啊,但一无所获。突然灵光一现,这会不会是…… 乱码?鬼使神差把这四个字按照 GBK
编码保存,然后再用 SHIFT-JIS
编码打开,得到一串片假名アフマ�ケーショ
,定睛一看这不就是 application
的日语アプリケション
嘛,虽然里面又掺了个乱码……
乱翻收藏夹的时候发现我还有个免费的 Grafana Cloud,遂想着把我这些自建的东西都用它监控起来,反正不用白不用。那么第一个就拿我的 RouterOS 软路由开刀吧。
前两天赶上阿里云搞活动,薅了一个 99 一年的 ECS。因为要接进咱的探针,就得跟我的服务器组个网。之前都是用 NAS 上装的 wgeasy
,这回想想,咱的 RouterOS 也有 Wireguard,那干脆吃个螃蟹,看看能不能直接在软路由上组,慢慢的逐步把 wgeasy
淘汰掉,顺便正经的学学 Wireguard 组网。