前一阵子买了一个 4K 显示器,之前的 1080P 是用了快 10 年 DELL。
国产的友达屏幕,27 寸,1300 尼特,支持 HDR400,价格嘛,某东活动,不到 1.3K,香得很。黑苹果上面可以配置为高动态范围, 显示器这边把 HDR 打开,然后用 DP1.2 的线,能支持到 10bit 的色深。
话说 4K 的显示效果要比 1080 好太多了,之前在黑苹果上面字体模糊的,现在字体显示很锐利,还有之前保存了不少 1080 视频的, 在新屏幕上面看,效果打折了哈哈。
另外对比了 V 站的电影(1080 SDR 吧,大部分是这个),以及 B 站的 1080 高码率,B 站的好太多了,反正没有那种动作稍微快一点就 果冻的感觉,另外 B 站在 Chrome 上面能够打开 4K,效果也能感觉比 1080 高码率还要好。
在 Mac 的 Safari 上面,B 站的视频可以支持到 8K,不过 8K 的源太少了,我是没有感觉出来跟 4K 的差异,对比之下,4K 和 1080 差异还挺大的,当然 1080 高码率会好一些。
我尝试下载一些 4K 的视频,太大了,一部电影十几 G 收不住。如果是 1080 高码率的话,大概几个 G 吧,2、3 个小时的也就 5、6 G,对于我是能够接受的,然后分辨率在这个屏幕上面,感觉也很好。
另外也能看出苹果原生的播放器,跟 VLC 的差异,哈哈哈,就是这么神奇。
就像一位同学说的,只怪自己上 4K 显示屏太晚了,4K 太香了。
这里主要涉及到修改容器内部文件,以及将其保存为一个本地的修改镜像。另外,baidu 可以知道,SeedDMS 对于上传文档的限制,需要修改 php.ini。
我们先去容器看下文件具体在哪里:
$ docker exec -it seeddms /bin/bash
root@c31cfcd7168f:/# cd /
root@c31cfcd7168f:/# find . -name "php.ini"
./usr/local/etc/php/php.ini
root@c31cfcd7168f:/# exit
$ docker cp seeddms:/usr/local/etc/php/php.ini php.ini
然后还是 baidu,看下需要修改 php.ini 的哪些配置:
对于手头的这个镜像,只需要修改后面 3 个就好了
然后将其拷贝回容器,并保存这个修改后的容器为镜像
$ docker cp php.ini seeddms:/usr/local/etc/php/php.ini
$ docker commit seeddms my_seeddms
停止之前的容器,使用新的镜像运行
$ docker stop seeddms
$ docker rm seeddms
$ docker run --name seeddms \
-d \
--restart=always \
-v /HOST/data:/var/www/seeddms/data \
-v /HOST/conf:/var/www/seeddms/conf \
-v /HOST/ext:/var/www/seeddms/www/ext \
-p 80:80 my_seeddms
这样就行了。
先说一个悲伤的故事,之前在百度网盘上面存了不少书籍,包括技术书籍以及小说等等,然后是用 QQ 账号登陆的,后来不记得是登陆后要绑定手机号还是干嘛,绑定完了之后,好多书都不见了!
也许我之前的手机号注册过了吧,然后导致账号合并了之类的,真的搞不懂。当时我是非常后悔没有做备份,因为之前网盘有做活动,永久 2T,怪不得 2T 永远用不完!
就想着搞一个文档管理系统,比如这篇文章介绍的。
因为是个人使用,运行在类似 NAS 一样的小机器上,可以的话,就不需要跑起来类似 MySQL 或者 PostgreSQL 这样的 DB 了。实话说,是真的用不上牛刀。
于是试了一下 SeedDMS,PHP 搭建的,可以只用 SQLite。
后来才发现,我这一个前端开发,搞不懂 PHP 的安装,apache/nginx/openresty 难不倒我,但是 php 的安装难倒我了,你说有个 index.php 可是先要运行起来才能安装,但网站可不是那么简单就能运行的,先搞懂 pear 目录,简写意思是 PHP Extension Application Repository,然后呢,请使用 Composer,谢谢~
我这的魔怔了,无比怀念 go build 可以指定导出不同平台的 binary,然后配置问题不就是 YAML 或者 JSON 搞定,再说,我如果没有提供配置文件,就不能使用 default config running 吗,笑了。
于是就回到了其他的路子上,不再考虑自己源码安装了。试了几个 github 上别人提供的 docker 镜像,最后选了eraelpeha/docker-seeddms
$ docker pull eraelpeha/seeddms
$ docker run --name seeddms -p 8080:80 eraelpeha/seeddms
浏览器访问一下服务端的 8080 端口,应该可以看到提示了,然后就可以通过 8080/install 安装了。
因为后续网站配置,文档啥的还是要保存在 docker 容器之外的目录,所以先 docker cp 容器里面的配置文件出来,待会再挂载本地 volume 上去:
$ docker cp seeddms:/var/www/seeddms/data /HOST/data
$ docker cp seeddms:/var/www/seeddms/conf /HOST/conf
$ docker cp seeddms:/var/www/seeddms/www/ext /HOST/ext
$ chmod -R 777 /HOST/data /HOST/conf /HOST/ext
上面也将 data 目录配置到外面了。
使用 docker ps -a 查看运行的 image,stop 后,rm 掉,再运行一下看看,这里配置为启动 background 加载了,然后设置为 80 端口
$ docker run --name seeddms \
-d \
--restart=always \
-v /HOST/data:/var/www/seeddms/data \
-v /HOST/conf:/var/www/seeddms/conf \
-v /HOST/ext:/var/www/seeddms/www/ext \
-p 80:80 eraelpeha/seeddms
最后,设置 docker 开机启动吧
$ systemctl start docker
重启后,发现文档服务起来了,之前的设置也都还有效,这样就配置完了。
搞了一个下午,就感觉 php 太坑了,跟 go 的起步差了十万八千里。
昨天说到 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 侧是一样的。
大概这样吧。
这个其实也是 5 月份的事情,之前也说过,因为一直都有用 MoonCake,自然就少不了 LSP 的支持。
这次是同步了 LuaHelper 的更新,自己这边添加了另外一些功能,比如对于非工程路径的支持, hover 到 require 库时,可以寻找过去,另外就是函数内部的 local 变量,我是默认不展示在 outline 的,我觉得这些变量太烦了。
另外刚看到 upstream 已经到了 0.2.16 了,等我后面有空再同步一下吧。
上个月买了新的台式电脑,用了一个多月后,感觉还行吧。当时换台式机想了挺久,主要是之前那台 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 了。
现在的感觉,性能毫无疑问是过剩的,结论我现在确实只是个参数党。
默认情况下,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 能访问到的目录下用就好了。
前一段时间在多抓鱼上买了这本二手书,之所以买,是因为一篇豆瓣上的文章《没有什么必须要说》1,作者苏美。
短篇记载的是一位女儿父亲的一生,从荣耀到低沉,从生机勃勃到病患缠身黯然神伤,这篇短篇的另外一条线是女儿跟父亲的关系,她们的关系算是父亲境遇的反映。
父亲年轻时是一位帕米尔高原的边防战士,在一片白茫茫的雪海里面恪尽职守,直来直往,追雪兔、打雪狼,莽莽撞撞,不言轻伤。直来直往的性格,也体现在跟女儿的关系上面。父亲威严,不允许孩子反驳,女儿为此挨了不少耳光。
画风一转。
可这又有什么用呢,父亲退伍转业,突然患病后身体状况急转而下,为了救命,不得不躺在手术台上,身体被医生划开,插满了管子,任人摆布。
冰天雪地上顶天立地的男儿不在,只剩下无法自理,得依靠儿女度过难关的一位凄惨病人,当时父亲才 49 岁。
父亲状态转好,但在更为复杂、广大的社会丛林里里的小角色,随时间流逝,生计慢慢成了问题,不得不依靠一些之前的狐朋狗友接济。
这位狐朋狗友丢给了父亲一份差事,表面上是管个小公司,实际上是帮摆平这位前辈的一个二奶,二奶啥都不懂,公司帐很乱。
女儿看到父亲这般情景,是恨不得给父亲这位朋友一个耳光。可这位朋友也算是女儿从小就认识的长辈,只能作罢。
故事从高光开局,进入接近死亡的威胁,身体转好的递进,来到社会丛林复杂关系的碾压,然后进入了尾声。
父亲年迈,在厨房里面为儿辈准备晚餐,唠唠叨叨,完全融入了家庭生活。
[1] 被删帖了,禁止网站 JS 能看到
用 cincau 开发了一个小站点,而 cincau 是支持使用定制的 luastatic 打包的,目标系统是 Linux。因为容器什么的我还不熟悉,所以其实最终拿到的是 luajit 包含了所有脚本 C 数据 + 一堆 shared library,tar 到一起的结果。
像上面说的,因为没搞容器,所以还是需要通过虚拟机上的 Linux 系统生成目标二进制,之前在 Mac 上我用的是 Parallels,也挺方便的,但是 Parallels 贵啊,非正规的也不好搞,这次新机器上的 Parallels 好不容易安装好了,结果网络怎么都用不了,我是相当郁闷,花了几个小时还搞不定,但是又确实不想花钱升级了。
于是试了一下 VirtualBox,发现同样一个版本,低至 10.12 的 Mac 也能安装,新 Mac 系统上面创建的虚拟机文件,拷贝过来后,直接用,不能更开心。
感觉不需要什么特别的配置,直接用就行,早知道我早早地使用 VirtualBox 好了,毕竟不是使用 Windows,对于虚拟化性能、3D、2D 什么我是一点都不在乎的,现在身边已经没有 Windows 机器了。
3 号 7 点的时候,太阳已经把深圳晒得金黄,五一开头的冷雨天气正式结束,然后气温紧接着就上来了。我是计划好了去罗浮山,早买了票。
一路还挺顺利的,老地方惠州北站转华侨中学,为了吃到肠粉早餐,走了 3 站公交,然后上 268 到了罗浮山。
人巨多,门票相比之前便宜了,只要 ¥27,不知道是不是因为放假的原因。还有缆车升级了,之前一个筐 2 个人,全开放的结构,景观不能更好,就是有点危险,要脚踩加手扶着前面弹性的顶架,要不顶架会自动上翻,这种情况不敢想。拿着手机、相机拍照也得很小心,如果掉下去,要找回来估计难,没法刻缆求剑。
记得当时第一次坐这种缆车,看着树尖在脚底下过,风在耳边呼呼地吹,心跳有点快。
现在变全封闭的车厢了,挤满可以坐 8 个人,但一般只进去 6 个。运量是之前的 3 倍,然后周转速度也快了很多,排队也不焦躁了。不过单程贵了 10 块,双程现在上到 120 了。
人好多呀,几乎是排队上山,好多狭窄的小径,都要挤着才能过去。即便到了飞云顶,人一样多。山顶的小土堆、石头堆不见了,成了一个大土堆,之前石头堆上插着的五星红旗也不见了。
我是觉得罗浮山的山体好美,远看就像是拔地而起,山脉轮廓非常清晰。如果从山顶看,几个山脊各种曲线蜿蜒向下,墨绿色铺满了整座山,爱了爱了。
爬山中间有路过瀑布,景点叫分水坳,也许是刚停雨的原因吧,水流很大,哗哗地。旁边有卖甘蔗的,也不贵,6 块钱,我后悔只搞了一根,一边嚼着,一边看瀑布,吃完还可以洗个手冰凉一下。可惜下山路过的时候,发现卖完了。
晚上仍然是 268 到博罗后,转 L1A、L1B 到惠州市区。晚饭就在街边的推车小吃上,搞了牛肉杂碎煮物,还要了个煎饼果子。不过牛肉真的一般,我觉得太硬了,味道勉勉强强。
第二早又搞了一波肠粉,反正就是觉得比深圳的好吃,然后原路高铁返深了,排队核酸搞了快 20 分钟才出站。
UI 交互没变化,也是方便之后如果想从站点、博客搜索内容的话,会方便一些,不过自己测试了一下,很多内容搜索不到,应该是小站点,搜索引擎照顾不了。
没名气的静态网页就这样的了,😌