山西之行

山西之行

出发前几天看福州到长治的机票还可以就买了。2025.11.28早上8:55的飞机,多亏了新开通的福州滨海快线,刚好赶上。飞行2个小时20分钟左右。长治机场就在城区边上,我选择直接走路到城里。机场路一路两边很多鸟可以拍,不过这些鸟太容易被脚步声惊扰,所以并没有拍到一张好的。 午饭找了一家当地的小吃,不过我好像吃不惯。 入住旅馆放下行李后,地图看到附近有一个老顶山国家森林公园,不假思索就出发了。公园其中一个山顶上有一座巨大的关帝铜像。 照片是下山后在山脚下通过长焦镜头拍的,否则实现不了这样的角度。爬上铜像要花25元,就没上去。 吃完晚饭后回到旅馆,看了《浪浪山小妖怪》,非常好看。因为今天是周五,九点的时候和伙伴们进行了线上英语角。 9.29 今天准备前往国家湿地公园去打鸟。坐公交时被司机感动到,我没注意看车号,公交车开出去的时候我才示意要乘车,大概开出20米后我看车停了下来,于是我飞奔过去,尴尬的上车,司机跟我说了一句当地方言,我没听懂,估计是说: 怎么刚才车停下来的时候没上车?我听不懂,直接回了几句谢谢。 十点左右到的漳泽湖国家城市湿地公园,拍了一天照,午饭都没吃,因为舍
5 min read
编程

PHP静态函数回传类型:static 与 self 的差异

这是AI解释的,搬到这里来免得自己忘了。 在PHP静态方法(static method)的回传类型提示中,使用 static 和 self是两个常见的选项。它们都表示方法可能返回一个类实例,但它们在继承和多态性(Polymorphism)方面的表现有所不同。 使用 self (类型被锁定) 当在 ParentClass 中使用 : ?self 时,回传类型永远锁定为 ParentClass。 class ParentClass { // 尽管 new static() 实际创建的是 ChildClass 实例, // 但类型提示被锁定在 ParentClass。 public static function factory(): self { return new static(); } } class ChildClass extends ParentClass {} // 呼叫 ChildClass::factory() $instance
1 min read

阅是读书,历是出行

随年纪越来越大,越觉得阅读和出行的对于一个人修行的重要性。现在这个快节奏的社会的人们最大的一个问题是不能与孤独独处。一旦人们闲下来或者觉得无聊时,那么各种消极的想法就会涌现到脑海,于是我们努力着摆脱这个孤独,无论是电视,刷短视频等等,都是在让自己脱离孤独,以至于暂时逃避那些消极的想法。 最近读完的《心流》这本书,真的体会很多,非常建议看到这篇文章的你也去读一读,你会感谢我的。 这会儿我在从重庆回福州的火车上,在手机上的Ghost博客后台编写的文字。这次出行也成功说服自己入手了一台二手单反,佳能EOS 80D,配的EF-S 18-135mm镜头,接下来应该可以重新拾起摄影的热情。我是很相信命运的,如果没有这次的出行,可能买相机的执行力还要拖延很久,拖延原因是不知道选哪个型号,以及是否购买新机还是二手。 有几年没用相机了,不过之前用的也是佳能型号,所以设置熟悉起来相对容易些,在奉节三峡之巅和白帝城拍了一些。 图揽:三峡之巅,白帝城佳能EOS 80D,单色和彩色原图。Brandon ZhangBrandon Zhang 写着写着好像博客正文和标题并不是很搭配,不过无所谓了,本博客主
2 min read
给Ghost Gallery组件增加放大图标
Ghost

给Ghost Gallery组件增加放大图标

Ghost Gallery组件在移动端的样式和桌面端的样式一致,这样在手机上看图片过于小,不过它支持lightbox功能,点击图片可以放大,所以问题不是很大,但是可能很多用户不知道点击图片来放大查看,例如这位朋友所提交的issue一样:https://github.com/TryGhost/Casper/issues/948 我也在issue底部留言的我的个人解决方案,就是在图片右上角增加一个放大图标,提醒用户图片是可以点击来放大查看的,CSS代码在issue留言中已经说了,就是几行简单的代码。 <style> .kg-gallery-image { position: relative; &::after { content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdH
2 min read
太姥山之行
旅行

太姥山之行

9.19 中午到的太姥山站,出站后转8路公交车到太姥山游客中心。淡季门票90元,我以为宁德户口有优惠,结果没有。 景区出来后,到镇上找了一家饭店,吃的炒溜溜粉。 其实应该吃个锅边的,店门口正在做锅边。 一看颜色就知道是纯的地瓜粉做的,味道应该和老家一样。 晚饭后等不到公交车于是打车到的火车站前往温岭。 9.20 今天早上去逛了温岭市博物馆,看到了一个国宝重器,温岭下面一个村出土的商代的蟠龙纹青铜盘。 不过居然发现这个国宝旁边的英文介绍标签,居然把英文单词dynasty给拼错了。 博物馆逛完在附近找了一家面店吃的特色姜汤面,有鱼有虾,虽然价格38元挺贵,不过味道确实很不错的。 午饭后走到一个公园,在湖边休息和看书。 9.21 早餐吃的当地嵌糕,其实很和平常见到那种山东煎饼差不多,只是这个嵌糕不是煎的,有点类似米糕的感觉,不过不是很吃的惯。
2 min read
个人项目该怎么开展比较合适?
编程

个人项目该怎么开展比较合适?

平常工作期间写公司项目的业务需求,都是有一个明确的scope,准确的知道完成任务是什么样的一个状态,完成一个需求就会有满足感,然后提交到代码评审,评审过了再提交给测试,有一个完成的多人参与的一个流程,这样的话我们潜意识里觉得是成功的完成了一个业务需求,对自己的付出做出一个肯定,从而刺激我们的大脑,说好样的,而且也不会感到疲惫或者困惑。 那么对于个人项目,这其中的区别就很大了,不知道这个是否适应于所有人,起码对于我自己而言,刚开始一个个人项目的时候激情满满,好像一坐下来可以写大半天不休息的那种,但是随着项目越写越复杂,激情在渐渐减弱,这种减弱不是说对项目不感兴趣了,而是我们并没有很好的一个规划,一直处于写的状态,然后没有给自己做一个清晰的规划,到底写到哪里算是完成今天的任务,久而久之我们的大脑就会不适应,达到不了写公司项目的那种刺激,而且写个人项目仅仅是个人参与,没有其他人的正面反馈,那么这其中就很需要将这个项目scope做一个完整且清晰的规划,比如今天写哪个需求,写到哪里算结束,然后写好了怎么鼓励自己,而且可以达到一个有效的循环,而不至于导致burnout,这是很值得思考的一个问题。
3 min read
添加事件勾子
编程

添加事件勾子

WordPress中最强大的概念是有许多的勾子供开发者来修改特定的值,然后我记得前段时间看lit作者在油管上面的一个视频讲到在JavaScript中我们也可以创建一个简单的事件勾子,比如下面这段代码,在我们使用newTaskName 前,我们先发送一个自定义事件,允许项目中的其他代码,或者插件(如果你是写库给别人用)来修改我们这边的待办事项名称。 /** * Handles editing a task. * * @param {CustomEvent} event - The custom event that triggered the function, containing task details. * * @returns {Promise<void>} - A promise that resolves when the task is updated or an alert is shown on failure.
1 min read
从Docker Desktop迁移到ObrStack
编程

从Docker Desktop迁移到ObrStack

切换到旧项目文件夹,备份数据库。 ddev export-db --gzip=false > db.sql 退出Docker Desktop,接着创建新的项目地址 ~/codes/ddev/new-project-folder,启动ObrStack程序,然后运行。 // https://ddev.readthedocs.io/en/stable/users/quickstart/#wordpress ddev config --project-type=wordpress ddev start ddev wp core download 导入数据库 将数据库文件转移至当前文件夹,然后导入数据库。 ddev import-db < db.sql 或者直接在file参数上指向到旧项目数据库文件位置。 ddev import-db --file=../old-project-folder/db.
1 min read