佛山50公里徒步

今天参加了佛山50公里徒步,实际上全程只有40公里。考虑到家附近的风景已经完全熟悉了,所以我们直接坐轻轨从第二站开始走——这个第二站是指出发点是第0站来算。

从映月湖公园走到三山森林公园,路上有个拍照哥,经常停下来拍拍着拍拍那,然后又快步走走到了我们前面,反复出现了好几次。目测他的相机是APS-C画幅的,镜头是个大光圈,可能是50mm f/1.8,因为前镜片很大但是镜身比较短。这一段感觉是徒步活动对沿途商业带来贡献的最明显的一段,一路上各种饭店小吃店都是坐满人的,益力多小电驴也不少。

过了三山森林公园之后就往文瀚湖公园走,中间在三龙湾的补给点有一支三人乐队驻唱给大家打气,我们坐下来吃了包薯片。这一段特地绕到三龙湾写字楼区再绕回马路这边来,感觉是给这个写字楼打广告而特别设计的,毕竟从上一个红绿灯不过马路直接右转的话,反而不用上天桥。

文瀚湖公园我是第一次去,感觉设计得有点不把游客当人;整个公园的步行区域几乎没有绿荫覆盖,都不说夏天三十多度的时候是怎么个铁板烧猪法了,就今天这种27度的天气太阳一出来都热得直冒汗——可能是外地设计师吧,不知道广东的公园没有榕树是会热死的。

文瀚湖公园之后走一段河堤,再上桥过对面去平洲玉器街的玉廉公园。此时我们已经心生退意,一方面是partner今晚有饭局,走得满身汗需要回家洗澡;另一方面已经走了十几公里,而我们想二十公里差不多了,平时没有锻炼“顶硬上”的话对身体也不好。桥上的大风舒服得很,清爽了一下。玉器街这一段也是特地绕个大圈的,因为如果不顺着路线走而是直接沿着路边往前的话,就可以到红绿灯过马路去到打卡点,而不用在里面绕一圈出来再走回红绿灯过。我们去到牌坊打卡之后就去坐有轨电车撤退了。

有轨电车上面好多人,跟三号线可以相提并论了,难得一见的场景。

结束之后看了一下苹果的数据,综合来看配速是14分钟1公里,也就是时速4公里左右;混合了其他时段的步行数据,27000步20公里,所以朋友圈里超过54000步的都可能是走完全程的了。

CK3 mod 修复记录 (1)

CK3有一个mod叫做Configurable News Feed,历经三代作者,现在还在更新的是Configurable News Feed – Updated。这个mod能够自定义自己想要收到的通知,近至至亲远达宗族成员、上下级的生老病死都可以自定义接受与否,对于扮演家族长非常有意义。但是问题在于,这个mod在普通模式下会导致成就不能解锁,在铁人模式下会导致设置菜单打不开——configurable这个核心没了,那就麻了;而对于我来说,能够解锁成就是游戏的核心驱动力。所以,昨天晚上我决定下手解决这个问题,并且花了一个钟完全了解了这个症结所在,成功帮助维护者修复了这个bug。 What 最早在2023年5月18日的时候Sunghowl提出这个mod会禁用成就,随后B flat表示铁人模式会让configuration button失效;之后有很多玩家遇到了相同的问题。 Why Lost Nomad指出了问题所在:gui/newsfeed.gui中使用了ExecuteConsoleCommand指令,导致成就被锁定。 How 之前在评论区或者什么地方我看到了一位玩家曾经提出,有一个mod曾经也是这样创建窗口的,因为在以前这是在runtime创建窗口的唯一方式;而现在有了另外的方法,所以那个mod通过先创建窗口然后hide了它,在需要的时候才visible,来解决了问题。这便是思路。 通过查阅ck3 wiki(其实是搜索ExecuteConsoleCommand而出现的)Interface页面,主要是New windows and toggles一节,了解到需要做以下改动: 创建gui/scripted_widgets路径并创建一个文件newsfeed_setting.txt来让窗口系统在启动时把窗口创建出来 通过visible field来控制窗口的可见性,并修改相关的button代码来让用户能够控制可见性 分析完成,那么我们打开问题之源gui/newsfeed.gui,看到以下段落: 1 2 3 4 5 6 7 8 9 10 11 12 state = { name = open_settings trigger_when = "[GetVariableSystem.Exists('newsfeed_settings_shown')]" on_start = "[ExecuteConsoleCommand('gui.CreateWidget gui/newsfeed_settings.gui…

x86 兼职路由器 AP

由于之前买的中兴路由器没有办法完全关掉 DHCP 服务器,所以如果 x86 重启,它就会启动自己的 DHCP 服务器,自作主张为客户端分配另一个网段(192.168.5.x)的 IP ;即使 x86 重启之后 DHCP 服务器重新上线,由于 DHCP lease 的刷新时间还没到,客户端们不会询问新的 IP ;而中兴自己则在上游 DHCP 恢复之后抛下客户端们不管了、自己以 10.x.x.x 的 IP 重新回到下级路由的位置,直接导致网烂掉。 为了改善体验,在网上冲浪一番之后决定让中兴退休,x86 把这活也揽过来(真正的 All-in-One )。于是需要挑选能够做 AP 的无线网卡,并且对 x86 上的 Archlinux 进行配置来完成这个任务。 硬件 兼职路由器,很多极客前辈们都是用的 openwrt 。恩山论坛的这个帖子是我的起点: [openwrt(x86)] 2024-4-18—官方源码—史上最全驱动—支持无线AP模式—openwrt x86-64 23.05.3版 。 根据帖主的建议,第一张卡我没有买高通的,只是买了一个便宜大份的 MT7921E。需要注意的是, QCA9882 、 MT7921 等都是芯片,整个网卡还需要其他电路才能成型;MT7921E 我的是…

20240312日志

下午把博客的syntax highlight和mathjax改了一遍,主要包括:切换PrismJS回rouge负责高亮;高亮相关的一些style调整;mathjax使用4.0beta4来支持换行。

另外还把之前尝试的gitlab runner(lxd executor)的相关内容记录了下来,感觉确实比virtualbox executor直观得多。

随后出门在后面的街吃了一顿饭,只花了15块。接着去对面坐桂16去万科把之前逛街的时候见到的那个公仔买下来,准备让爸爸带给妈妈做生日礼物。

Gitlab Runner Lxc Executor

此前写过一篇文章介绍如何用Virtualbox Executor和Docker Executor来提供Gitlab Runner,但是这两个executor部署都比较繁琐复杂,特别是Virtualbox在同为AMD64 Linux的情况下可以用Linux Container来更加方便地进行配置。本文记录的是如何配置一个基于Linux Container的Gitlab Runner。 关于安装Linux Container,这篇文章已经介绍过这里就不重复了。 准备模板Container 为了节省时间,我们可以提前准备一个模板Container,这样就不用每次都安装dependency了。在接下来的步骤里我们创建一个名为grbase(gitlab runner base)的ubuntu 22.04 amd64容器: 1 2 3 4 # 使用清华镜像源,使用储存池pool1存储数据 lxc launch mirror-images:ubuntu/jammy/amd64 grbase -s pool1 # 连接容器 lxc exec grbase bash 在容器里面根据自己的需要安装各种依赖,比如常见的build-essential、ruby-full,以及openssh-client、rsync等。其中作为Runner必须装的有git、git-lfs和(直接野binary安装的)gitlab-runner: 1 2 3 4 5 6 # git和git-lfs curl -s "https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh" | sudo bash apt…

Linux Container 与 Lxd

之前一直使用docker来部署服务,但是docker的运作方式对于备份是不太方便的:如果不stop掉容器,那么备份的时候很可能会发生“对正在写入的数据库进行备份”这种灾难性的事情;其他次要原因包括大量的image占据的无效备份空间、坚持使用iptables导致不能用nftables等等。相对而言,linux container同样提供了application和host隔离的安全性,而且每个container都是一个独立的linux环境,配置起来更加直观;网络比docker更加灵活、host可以进行更深度的控制;最重要的是,可以用snapshot + zfs send的方式进行可靠备份。 安装 根据Archwiki的指导安装lxd包,然后system enable –now lxd来开机启动lxd daemon,这样才能通过后面的配置让容器也开机启动。如果报错提示端口已占用,那么需要排查主机上的DNS和DHCP(server)是不是监听得太广泛了——lxd使用dnsmasq监听它创建的网络(默认是lxdbr0)上的67端口以及53端口来为容器们分配IP和提供DNS解析,所以主机上特别是DNS服务不要配置成监听全部interface;可以改成只监听127.0.0.1以及LAN的gateway(比如10.0.0.1),这样就不冲突了。 在成功启动lxd.service之后,来做id mapping。为了安全性,通常会使用unprivileged containers,简单而言就是通过uid/gid mapping的方式让容器里的root到了主机上是一个没有权限的用户,从而保护主机不被篡改。参考archwiki用usermod -v 1000000-1000999999 -w 1000000-1000999999 root来设置就好。 然后先做lxc init,但是跳过储存池的那个问题,我们稍后搞定。 搞定储存池的问题。lxd需要设置储存池来给容器们用,虽然官方提供了很多storage driver,但是最适合我的是ZFS。这里我是把某个SSD整个提供给ZFS管理了。执行以下几步创建pool并添加到lxc里面: 1 2 3 4 # 用zpool创建一个名为lxd1的储存池 zpool create lxd1 /dev/sda # 将lxd1储存池添加到lxd(注意用的是lxc命令)并命名为pool1 lxc storage create pool1 zfs source=lxd1 之后就可以创建容器了。创建新的容器的命令格式是: 1 lxc launch 源:系统/版本/架构 容器名字 -s 储存池名字…

Mac上command+`失效的临时解决办法

前一段时间更新了MacOS 14 Sonoma之后,到今天想用 Command + ` 来切换窗口的时候发现怎么按都不行,上苹果社区看发现很多人都表示遇到了这个问题,但是都没有解决办法。后来去reddit看了一下,找到一个老哥用Hammerspoon——类似于Windows那边的AutoHotkey,可以自己写lua脚本调用macos的API实现一些操作——来手工实现这个快捷键本来应有的功能(中文叫做“将焦点移到下一个窗口”,英文是“move focus to next window”)。原帖在这:Mesieu: I’m going to fix this through Hammerspoon…。 安装HammerSpoon直接上github:Releases,下载zip之后双击解压,再手动移动到Finder的“应用程序”里面,然后双击打开,钩上登录自启动(Launch Hammerspoon at login),然后点击“Enable Accessibility”前往设置App启用辅助功能: 然后就是设置脚本了,点击状态栏的锤子图标,选择Open Config就会用默认的文本编辑器打开一个窗口用来编辑init.lua,我们暂时没有其他功能需要用所以就直接把这个Command + `的功能的脚本塞进去就行。 我改了一下原作者的脚本里绑定的快捷键,直接改成了 Command + ` : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18…

羚羊峡古栈道森林公园

今天和女朋友一家三口一起去羚羊峡走了一下。我们从南边的入口开始,走到4.5公里处的摩崖石刻坐下来休息和吃了点东西之后,决定继续往北出口前进。等走到那边的时候,天已经完全黑了,而这个森林公园是完全没有路灯的,非常的原生态,所以只能靠着手机的手电功能照着路,女朋友还在那里讲鬼故事吓我——中途还看到了丁真湾!

西江航道看起来是非常繁忙,大大小小的船一直没停过,运沙船特别多,集装箱船也见到了两三艘。

从北出口回到南出口是打车,一路上感觉很多楼盘都没有在认真建设,都是差一点点就能封顶的那种状态。就算是已经建成交付的小区,入住率也不到50%,而今天是星期六,按理来说就算是买来玩玩的今天也会过来住一下吧。

作为古栈道公园,它特地把一些路段不进行铺设,真就把古代栈道的样子就这么给你看。另外还有以前没有发动机的时候逆流而上需要靠纤夫拉船,拉得多了就在石头上留下了纤痕,不过没有拍照。

千灯湖

今天带了相机出门,虽然拍了几张但是只有这张还行:

速食 – clion full remote dev (ssh)

无论是远程的还是本地的clion都是用 Jetbrains破解 里的进行破解。本地的就是用官方安装包安装了之后执行jetbra的 script/install.sh就行了。本地clion在新增了SSH连接到远程之后,不需要让它下载clion,我们自己来。

远程以Archlinux为例,使用AUR的clion进行安装,并且要安装clion-jre。然后执行jetbra的 script/install.sh。安装好之后Clion的目录在/opt/clion,根据官方文档执行bin/remote-dev-server.sh registerBackendLocationForGateway就能够把我们自己安装的这个Clion注册成IDE Backend了。此时在本地Clion的Remote Development – SSH中,我们已经建立的连接的右上角小齿轮点开Manage IDE Backends就可以有Backend了。

如果打开远程项目的时候弹出了Jetbrains Gateway的注册对话框的话直接关掉(点Exit)就行,这种情况一般是因为我们在远程还没有装好Clion的情况下就用本地Clion尝试连接导致jetbra补丁没生效。

这个部署模式是full remote模式,官方称为thin client(或者Remote with Gateway),所有的源文件和compile都由远程完成,本地不需要承载太多的计算量,很适合我的渣渣M1。与之相对的是网上搜索到处都是的Remote with local sources,所有东西都在本地,只有在build、debug等阶段才同步到远程。