Sucha's Blog ~ Welcome

22年6月26日 周日 15:02

MoocHelper 更新到 0.2.16

昨天说到 LuaHelper 已经更新到了 0.2.16,今天我也同步将 MoocHelper 更新上去了,主要的改动有

例子是

local foo = {}

function foo:test()
    local foo = {}
    self:bar()
end

function foo:bar()
end

之前当 hover 到 test() 函数中的 self:bar() 时,self 其实指向的是函数内的 local variable foo,而实际 Lua 语义是指向运行当前 function 的 table,毕竟 self 是作为当前 function 第一个参数传递进来的。

moocscript 的处理还特别一点,因为其 class/struct 是通过拼凑 AssignStat 来实现的,这种 : 函数在 class/struct 里面其实是实例函数,语法跟 Lua 不一样,没有 table name 前缀,得特别处理一下。

这里的特别处理是,需要在当前 AST 的位置,一直寻找 parent scope 到最近的 class scope,如果存在,拿到外层 local variable map 的同名变量定义(如上面例子的 foo),将变量定义的 Loc 作为 self 的 varStruct 描述,后面这个 Loc 的逻辑跟 Lua 侧是一样的。

大概这样吧。

22年6月25日 周六 22:30

MoocHelper 更新到 0.2.15

这个其实也是 5 月份的事情,之前也说过,因为一直都有用 MoonCake,自然就少不了 LSP 的支持。

这次是同步了 LuaHelper 的更新,自己这边添加了另外一些功能,比如对于非工程路径的支持, hover 到 require 库时,可以寻找过去,另外就是函数内部的 local 变量,我是默认不展示在 outline 的,我觉得这些变量太烦了。

另外刚看到 upstream 已经到了 0.2.16 了,等我后面有空再同步一下吧。

22年6月25日 周六 21:15

新台式电脑

上个月买了新的台式电脑,用了一个多月后,感觉还行吧。当时换台式机想了挺久,主要是之前那台 i5 一直停留在 10.12 升不了系统, 也用了好多年了,考虑再三,还是先换了吧。

之前还犹豫要不要买 Apple Silicon M1 的,因为工作中用的就是 M1,所以也算了解。最大 16G 的内存是软肋,即便是工作, 勉勉强强够吧,CPU 倒是还不错,这一两年都足够了其实,GPU 不参与评测。不过如果配上 512G 的 SSD,价格就很不香了。

还有因为平时绝大部分时间用的是 M1,真的不大想下班再用 M1 了,也是一个因素。

于是搞了一台黑苹果,CPU 用了 i7-12700,GPU 是基本入门款,因为平时极少玩游戏,反而内存直接到了 64G。规格上去之后, 机箱体积也小不了,虽然还是 Mini-ITX,还挺重的。

各种原因,显示屏还是 1080P 的,已经用了有 8 年了,因为租住的地方比较小,如果换成 27 寸 4K,感觉塞不下(真的有点挤), 而 M1 对 2K 屏幕支持很弱,我试过即便用了 GitHub 上的 HiDPI 脚本,还是不尽如人意,要上就只能上 4K,所以不如先不换。

直接上 64G 内存的原因,是之前编译一些稍微大一点的 Swift 工程,加上开了其他浏览器什么的之后,感觉内存都快满了情况, 所以不如一步到位 64G 了。

现在的感觉,性能毫无疑问是过剩的,结论我现在确实只是个参数党。

22年5月14日 周日 23:49

cmark-gfm 静态链接

默认情况下,cmark-gfm 是通过 cmake 编译为动态库的方式,但其实可以通过设置

$ cmake -DCMARK_SHARED=OFF ../
$ make

配置为静态链接,少一个依赖,如果能修改一下再链接到 musl libc,那就更进一步,不受限于系统版本了哈哈。

不过即便使用系统的 libc,也已经很不错了,毕竟也是向后兼容的,不担心未来的使用

$ otool -L src/cmark-gfm
src/cmark-gfm:
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)

如果是动态链接的话,会是下面这样

$ otool -L src/cmark-gfm
src/cmark-gfm:
	@rpath/libcmark-gfm-extensions.0.29.0.gfm.3.dylib (compatibility version 0.29.0, current version 0.29.0)
	@rpath/libcmark-gfm.0.29.0.gfm.3.dylib (compatibility version 0.29.0, current version 0.29.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)

编译后当然不会放到系统目录,而是随便丢到一个 PATH 能访问到的目录下用就好了。

22年5月14日 周日 21:16

倾我所有去生活

前一段时间在多抓鱼上买了这本二手书,之所以买,是因为一篇豆瓣上的文章《没有什么必须要说》1,作者苏美。

短篇记载的是一位女儿父亲的一生,从荣耀到低沉,从生机勃勃到病患缠身黯然神伤,这篇短篇的另外一条线是女儿跟父亲的关系,她们的关系算是父亲境遇的反映。

父亲年轻时是一位帕米尔高原的边防战士,在一片白茫茫的雪海里面恪尽职守,直来直往,追雪兔、打雪狼,莽莽撞撞,不言轻伤。直来直往的性格,也体现在跟女儿的关系上面。父亲威严,不允许孩子反驳,女儿为此挨了不少耳光。

画风一转。

可这又有什么用呢,父亲退伍转业,突然患病后身体状况急转而下,为了救命,不得不躺在手术台上,身体被医生划开,插满了管子,任人摆布。

冰天雪地上顶天立地的男儿不在,只剩下无法自理,得依靠儿女度过难关的一位凄惨病人,当时父亲才 49 岁。

父亲状态转好,但在更为复杂、广大的社会丛林里里的小角色,随时间流逝,生计慢慢成了问题,不得不依靠一些之前的狐朋狗友接济。

这位狐朋狗友丢给了父亲一份差事,表面上是管个小公司,实际上是帮摆平这位前辈的一个二奶,二奶啥都不懂,公司帐很乱。

女儿看到父亲这般情景,是恨不得给父亲这位朋友一个耳光。可这位朋友也算是女儿从小就认识的长辈,只能作罢。

故事从高光开局,进入接近死亡的威胁,身体转好的递进,来到社会丛林复杂关系的碾压,然后进入了尾声。

父亲年迈,在厨房里面为儿辈准备晚餐,唠唠叨叨,完全融入了家庭生活。

[1] 被删帖了,禁止网站 JS 能看到

22年5月8日 周日 23:16

Parallels 和 VirtualBox

cincau 开发了一个小站点,而 cincau 是支持使用定制的 luastatic 打包的,目标系统是 Linux。因为容器什么的我还不熟悉,所以其实最终拿到的是 luajit 包含了所有脚本 C 数据 + 一堆 shared library,tar 到一起的结果。

像上面说的,因为没搞容器,所以还是需要通过虚拟机上的 Linux 系统生成目标二进制,之前在 Mac 上我用的是 Parallels,也挺方便的,但是 Parallels 贵啊,非正规的也不好搞,这次新机器上的 Parallels 好不容易安装好了,结果网络怎么都用不了,我是相当郁闷,花了几个小时还搞不定,但是又确实不想花钱升级了。

于是试了一下 VirtualBox,发现同样一个版本,低至 10.12 的 Mac 也能安装,新 Mac 系统上面创建的虚拟机文件,拷贝过来后,直接用,不能更开心。

感觉不需要什么特别的配置,直接用就行,早知道我早早地使用 VirtualBox 好了,毕竟不是使用 Windows,对于虚拟化性能、3D、2D 什么我是一点都不在乎的,现在身边已经没有 Windows 机器了。

22年5月4日 周三 23:28

罗浮山一日游

3 号 7 点的时候,太阳已经把深圳晒得金黄,五一开头的冷雨天气正式结束,然后气温紧接着就上来了。我是计划好了去罗浮山,早买了票。

一路还挺顺利的,老地方惠州北站转华侨中学,为了吃到肠粉早餐,走了 3 站公交,然后上 268 到了罗浮山。

人巨多,门票相比之前便宜了,只要 ¥27,不知道是不是因为放假的原因。还有缆车升级了,之前一个筐 2 个人,全开放的结构,景观不能更好,就是有点危险,要脚踩加手扶着前面弹性的顶架,要不顶架会自动上翻,这种情况不敢想。拿着手机、相机拍照也得很小心,如果掉下去,要找回来估计难,没法刻缆求剑。

记得当时第一次坐这种缆车,看着树尖在脚底下过,风在耳边呼呼地吹,心跳有点快。

现在变全封闭的车厢了,挤满可以坐 8 个人,但一般只进去 6 个。运量是之前的 3 倍,然后周转速度也快了很多,排队也不焦躁了。不过单程贵了 10 块,双程现在上到 120 了。

人好多呀,几乎是排队上山,好多狭窄的小径,都要挤着才能过去。即便到了飞云顶,人一样多。山顶的小土堆、石头堆不见了,成了一个大土堆,之前石头堆上插着的五星红旗也不见了。

我是觉得罗浮山的山体好美,远看就像是拔地而起,山脉轮廓非常清晰。如果从山顶看,几个山脊各种曲线蜿蜒向下,墨绿色铺满了整座山,爱了爱了。

爬山中间有路过瀑布,景点叫分水坳,也许是刚停雨的原因吧,水流很大,哗哗地。旁边有卖甘蔗的,也不贵,6 块钱,我后悔只搞了一根,一边嚼着,一边看瀑布,吃完还可以洗个手冰凉一下。可惜下山路过的时候,发现卖完了。

晚上仍然是 268 到博罗后,转 L1A、L1B 到惠州市区。晚饭就在街边的推车小吃上,搞了牛肉杂碎煮物,还要了个煎饼果子。不过牛肉真的一般,我觉得太硬了,味道勉勉强强。

第二早又搞了一波肠粉,反正就是觉得比深圳的好吃,然后原路高铁返深了,排队核酸搞了快 20 分钟才出站。

22年4月5日 周六 01:28

改进侧边栏搜索

UI 交互没变化,也是方便之后如果想从站点、博客搜索内容的话,会方便一些,不过自己测试了一下,很多内容搜索不到,应该是小站点,搜索引擎照顾不了。

没名气的静态网页就这样的了,😌

22年4月5日 周六 01:28

MoocHelper 更新到 0.2.12

项目地址 MoocHelper,同时更新了 .vsix 跨平台安装包。

因为 LuaHelper 前段时间更新了,我也跟着将基本的代码更新上去,这次改动主要是 anotation,语法方面我觉得没有什么变化。 anotation 我用得少,所以相关改变也说不上了解。

另外修复了 switch case 中 case 后面 exp 的一些解析问题,之前跟 Lua EBNF 表述的 prefixexp 语法 ':' 有冲突。

mooncake 里 case 紧接着的 exp 可以是右值,比如 object:func1(param1):func2(param2) 是一个合法的 Lua prefixexp, 而 case 语句依赖 ':' 作为终结符,由于 Lua 不依赖空格、分行、间距来作为语法分割,因此刚刚的 exp 对于两个不同的 ':' 可以有多种解释:

-- case 1
case object:
    func1(param):func2(param2)
-- case 2
case object:func1(param1):
    func2(param2)
-- case 3
case (object:func1(param1):func2(param2))

实际上 Lua 的 prefixexp 使用的是贪心策略,最终解析出来的是 case 3,认为 case 子句没有完结,会报语法错误。 而 mooncake 之前对这里没有定义,因此 case 1 和 case 2 都是可选的合法解释。

这次的修改加上了补充,认为 ':' 之后如果紧接着空格,比如 '\t'、'\n'、'\t'、'\v',则认为是 case 语句的终结。 因此 case 1、case 2 才是 mooncake 合法的 case 语句,并且语义有区别。而 case 3 并不是合法的语句。

大概这样吧。

22年3月29日 后日 22:54

深圳停摆一周

深圳因为疫情整个城市停摆了一周,我所在的小区因为有密接者检测出阳性,被封了两周。

密接者所在的楼栋,在被封锁的 2 周内足不出户,医护都是送吃的到户;我们这些顺带的,前面 4 天,足不出户, 但是可以点外卖,医护送外卖和快递到户,4 天之后可以自己下楼拿快递。

好不容易解封了,感觉自己胖了一圈。

这两周从足不出户、足不出楼、足不出小区走过来,真的挺痛苦的,因为小区有点小,人多,又不鼓励下楼到处转,憋得太慌了。

好在之前做了一些准备,即便不买外卖,自热饭够一周,加上囤的面,两三周都不成问题。就是吃得确实寒碜了点,肉类不够,蔬菜也不够。

我是中午点外卖,晚上换着吃自热饭、方便面、竹升面等,话说竹升面挺不错的,看起来小小一卷,煮开后足够我吃的,味道也不错, 面感挺好的,没有单独的包装这点不够好。

我是打算手头这些方便面吃完后,搞些其他的面食试一下,尝尝鲜,因为方便面多是油炸类型的,不够健康,而且味道类似,吃多了有点腻。

竹升面这类看似清淡,其实可以搭配的感觉要多很多,反正我都是会煮 2 ~ 3 分钟的,方面程度来说是一样的。

不大想煮饭,煮饭是好吃,只是时间上耗费太多,后面等条件好些,看看再煮饭吧。

22年2月27日 后日 23:24

本站支持代码高亮

用的方案是 Prism,cmark-gfm 本来就支持生成相关的 pre、code tag,并带上 "language-css" 这样的 attribute 值,那只要简单加上下面两行就好了,在项目站点上,选了几个自己觉得也许会用得比较多的语言,比如 Bash/Shell/JS/Lua/Go/Swift/Lisp,我也就大概会这么多而已吧。

<link rel="stylesheet" type="text/css" href="../styles/prism.min.css">
<script type="text/javascript" src="../js/prism.min.js"></script>

感觉效果很不错的,比如之前

选的主题是 tomorrow night,跟已有的主题搭配起来也挺不错,缺点可能是 js 代码 minify 后仍然有 60k 吧。

不管怎么说,还有 Etag 撑着呢,另外,毕竟是存放在 github 的,算是白嫖了。