很不幸,22021年的最后一天过的不顺利,缘自30日我的一个疏忽,进而引发了31日的故障,最终,31日整个上午我都在紧张地处理问题。

最近更新了一个功能的抽数任务,移除了任务中某个输出表的一个字段,这个字段在后续的关联任务中有用到,那么关联任务也要同步调整以取到这个字段。这就要求两个任务要同步更新了,否则后续的关联任务会找不到字段报错失败。

此前意识到此处是个风险点,特意提醒自己注意。

按计划要求31日更新上线,30日上午提前更新几个用户跑了任务发现一切正常,下午想到前置任务需要重新执行一次全量耗时较多,不如把剩余用户的前置任务更新并执行掉,这样31日就很轻松了,我确实这样做了,但是没有对其中哪个用户执行任务做验证,至此祸根已埋下,果然31日早晨这些客户的后续关联任务全失败了。

为此,总结本次经验教训:
端正态度,任务清单/执行步骤一定要写,带上风险点,不可偷懒,好记性不如烂笔头;

严格按照执行步骤操作,不能突发奇想、投机取巧,这往往容易忽视风险;

再小的改动,也要及时手动执行任务,尽早验证,留足回旋余地,最大限度降低风险。

最近一阵子老丈人染病求医入院,就诊当天遇到一个多次入院的病友家庭,作为过来人,他们对我们做了认真翔实的指导。病房里患者间会相互打听病情,交流中无不透露着同情、怜悯、支持和关心的情感,甚至连自己带饭都要问一下隔壁患者需不需要帮忙带饭。
老丈人入院前情绪有些低落,进入病房这个小团体后意识到原来这么多人跟自己一样受病痛困扰、跟病痛斗争,在相互间的倾诉、关心、支持和鼓励中很快乐观开朗起来了,可能这就是同病相怜吧。

—-2021-12-22—-
早上开始手术,排第一位,希望顺利。

今天上午将网站的 PHP 版本升级到了 PHP 8.1.0,遇到了几个问题,前前后后倒腾了两三个小时,这里记录下以备不时之需。

2 not upgraded

好久没登 vps 更新系统了,更新时出现 2 not upgraded 的提示,执行以下命令解决:

apt-get dist-upgrade

'/etc/init.d/php-fpm': No such file or directory

复制这里的代码保存名为 php-fpm 的文件到 /etc/init.d 目录,cd 进入 /etc/init.d 执行 chmod 777 php-fpm 加权限。

configure: error: Please reinstall the iconv library.

起初猜测是系统依赖跟新版本存在兼容性问题,切回 8.0.12 尝试更新到 8.0.13 发现还是过不去,仍然报 Please reinstall the iconv library. 百度上能搜的结果倒是很多,多是相互复制,其实方法就一种即重新编译,照着试了两个版本都不管用,后来发现问题是这些方法给的 configure 的配置不适用。最后,执行下列命令解决。

LIBICONV_VERSION=1.15
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${LIBICONV_VERSION}.tar.gz
tar xvzf libiconv-${LIBICONV_VERSION}.tar.gz
cd libiconv-${LIBICONV_VERSION}
./configure --enable-static
make install

睡前下载闲鱼打算翻订单找购买商品的参数,见一条11月7日的未读消息,正是今春购买兰花宋梅的卖家大哥发我的,一位扬州的养花大佬,问我宋梅养的怎么样,原来他那盆分苗惠让我的宋梅今夏因天气原因意外死亡。对此颇感惋惜,那花引自杭州,去年上花5杆,竟有4杆双花。

同时,大哥表示希望来年春天能从我这引回宋梅,我也希望促成好事,成人之美。受惠于近几年兰花价格的大幅下降,传统兰花名品得以广泛传播,我这种普通人也能不较锱铢轻易拥有这些经典品种,跟同好分享何乐不为。

宋梅,又名宋锦旋梅,于清乾隆年间由绍兴宋氏选出,自发现至今的200多年里春兰梅瓣者无出其右。

用了一段时间 iOS 的 dark mode 感觉良好,特别是夜间看手机不会很刺眼。周末给网站加了暗黑模式功能,检测用户设备对用户切换到暗黑模式,不需要插件,只要一小段 js 和 css 代码即可。

提醒:这里有更好的方法

实现原理

  1. 通过 js 获取当前访问设备的主题色设置模式做判断给 html 页面增加样式;
  2. 利用增加的样式和 css 的自定义属性切换 css 属性值。

利用 js 代码获取当前访问设备的主题色设置模式,并在页面 html 的 body 标签上增加 css 类 dark

if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches{
document.querySelector("body").classList.add("dark")
};

其中,prefers-color-scheme CSS 媒体特性用于检测用户是否有将系统的主题色设置为亮色或者暗色,详情请见 prefers-color-scheme

处理 css 样式:第一步,定义暗黑模式和正常模式下的 css 样式

/* 这里定义暗黑模式下的样式 */
.dark{
--dark-background:#333;
--dark-color:#333;
}
/* root 伪类定义正常模式下的样式 */
:root{
--light-background:1px solid #e5e5e5;
--light-color:1px solid #555;
}

处理 css 样式:第二步,修改暗黑模式下需要调整的 css 样式

这里需要用到 var() 函数的备用值功能来处理正常模式下的样式,否则在正常模式下获取不到样式。

.wrapper{
background:var(--dark-background,var(--light-background));
color:var(--dark-color,#666);
color:#666; /* 此处属性的目的是兼容不支持 css 自定义属性的浏览器 */
}

什么是 css 自定义属性

自定义属性(有时候也被称作 CSS 变量或者级联变量)是由 CSS 作者定义的,它包含的值可以在整个文档中重复使用。

使用 css 自定义属性

css 自定义属性使用起来非常简单和方便,如下:
由自定义属性标记设定值,如: --dark-color: #000;
由 var() 函数来获取值,如: color: var(--dark-color);
以上效果等同于 color:#000;
var() 函数可以定义多个备用值 (fallback value),当给定值未定义时将会用备用值替换,语法为:

var( <custom-property-name> [, <declaration-value> ]? )

例如:

.dark {--dark-color: #333}
.light {-—light-color: #eee}
body {
color: var(--dark-color, —light-color)
}

当 --dark-color 未定义或是无效值时,取 —light-color 。

为了实现暗黑模式的切换,我们可以这样处理:

.dark {—-background-color: #333}
.light {—-background-color: #eee}
body {
background: var(--background-color)
}

如此,就可以在系统切换到深色模式时给 body 加上 dark 类:<body class=“dark”>;当切回浅色模式时用 light 替换掉 dark:<body class=“dark”>

灵活使用 css 自定义属性会来带意想不到的效果。
更多请见:使用 CSS 自定义属性(变量)

浏览器兼容性

本文用到的 CSS 自定义属性和 prefers-color-scheme 可能需要考虑浏览器的兼容性问题,关于浏览器兼容性详情请见各自的文档说明:

  1. prefers-color-scheme
  2. 使用 CSS 自定义属性(变量)