前言

最近家里台式机重装了 Windows 10 系统,备份了资料并格式化了所有的磁盘,所有得重新安装应用。

这台机器我的定位始终是游戏机+一台备用机,所以在安装完操作系统后第一时间便安装了腾讯的 Wegame 客户端并下载了英雄联盟,相比先前升级的 Windows 11 来说,掉线的频率似乎也低了很多。

然而最近心血来潮,想学习 Golang,在看了几天文档之后决定开始实操,部署好环境后打算开始学习 Gorm,就得安装 MySQL 数据库环境,本来打算直接用 Docker 部署一个,但最新 Relase 居然启动不了,始终 stoped -> starting -> stoping -> stoped。。

老实说我没遇到过这种问题,后来检索了发现说新版本似乎有问题,有人卸载后安装 v4.4.4 解决了问题,我当然没有这种运气,要是说回退能解决问题的话也就没有这篇文章了。

后来再次检索发现,可以通过 Power Shell 管理员身份执行 netsh winsock reset 解决问题,它确实为我解决了问题,也让我安装完 Docker 折腾三个小时后第一次看到 Docker Desktop is running,启动后已经是晚上十一点了,便关机睡觉。

第二天,玩完游戏需要出门,想在出门这段时间运行 Docker build 来构建镜像,然后它又起不来了。。

谁在捣乱?

出门后我仔细回想今天到底都做了啥,为什么它又启动不了,以及昨晚的 Running 到底是不是错觉。

游戏?

为了验证猜想,我运行了重置 Winsock 后重启了计算机后直接启动 Docker,能够正常启动 Pull 了一个镜像也能正常启动,随后我便退出了 Docker 启动 Wegame,然后重新启动 Docker 也能够正常启动。

接着,退出 Docker 后从 Wegame 启动了 LOL,看着右下角的 Wegame 网络加速:「为您加速 31 ms」就大感不妙,随后启动 Docekr,果然启动失败了。

随后,检索关键字「Windows10 Wegame Docker 冲突」,果然找到了线索,同时找到了一篇讨论的文章,链接如下:Winsock module breaks WSL2 #4177,大概内容是 Wegame 的加速器(基于腾讯加速器组件)使用了 Winsock 设置代理时会影响 LSP DLL 从而导致 WSL2 启动异常,所以在启动时需要将 LSP DLL 排除在 WSL 进程中,并且文章提供了工具。

除了工具外,我在文章 WSL2启动时提示:参考的对象类型不支持尝试的操作 中找到了手动修改注册表的方式,通过运行 regedit 命令打开注册表编辑器,进入路径 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog\0408F7A3,修改或新增名称 AppFullPath,类型 字符串值,数据填入:C:\Windows\System32\wsl.exe,修改或新增 PermittedLspCategories,类型 DWORD(32位)值,数据填入: 0x80000000

Fixed it

首先打开文章提供的工具保存本地,地址: NoLsp.exe

然后右键 Windows 图标打开一个「Windows Power Shell(管理员)」并进入工具保存的目录然后执行:

NoLsp.exe C:\Windows\System32\wsl.exe

最后

尝试检索「加速器与 WSL 冲突」关键字会得到更多结果,目前已知腾讯加速器(含 Wegame)和 UU 加速器出现这种情况,如果碰巧电脑上有游戏加速器而 Docker 正好罢工不妨试试这个解决方案。

参考

  1. Winsock module breaks WSL2 #4177
  2. 腾讯这个 Wegame 啊,你要是能火就怪了
  3. WSL2启动时提示:参考的对象类型不支持尝试的操作

Happy Coding :)

这一年,博客停止了更新,实际上文章的草稿箱里有数篇文章。

等我再想起来博客的时候,已经是年末了,想捡起几篇草稿箱文章,想了想,还是记录一下这一年的故事。

转正

回到年初,返深后便开始准备转正的事儿,领导提拔将我加进了今年转内部编制的候选名单,候选名单总共 9 人,仅 2 个转正名额,不得不说压力挺大。那段时间每天晚上对着 PPT 不断改稿演练,经过紧张的答辩,侥幸以总得分 8.3 排名第一进入转正名单,至此结束了外包生涯,有归属感真好。

大家好,我是练习时长四年的新人练习生,请多多关照。

双月湾旅途

随着疫情好转,开始萌生了一些想要出去走走的想法,时常想在某个周五下班说走就走出去好好的放松,最后将目的地定在了惠州双月湾,路途实在曲折,不过到达目的地之后,一切疲倦都烟消云散了。

921648714877_.pic.jpg

定了一间面朝大海的海景房,双月湾海景房民宿普遍价格很便宜,300 元都能租一间很大的房间。

931648714914_.pic.jpg

911648714849_.pic.jpg

海风迎面,海浪此起彼伏,坐在沙滩上望着天际线,海天交界处在夕阳的映衬下呈蓝粉渐变色,实在漂亮,如果不是太阳太毒辣,我甚至能在这里坐一整天。另外这里沙滩沙子真的太粗了,比以往去过的任何沙滩的沙子都粗,踩在上面没有任何愉快的感觉。

961648715484_.pic.jpg

WechatIMG101.jpeg

出门没有拍照的习惯,从相册里捡出了几张还能看过去的照片。另外还有一个提议,出门记得带伞,当然还有防晒霜。

NUC8 & AOC 卢瓦尔 4K 显示器

这里不得不说我的 MacBook Pro 2016,从 2017 年购入一直陪伴着我,中间罢工数次都被万能的华强北拯救回来了,不过随着我技术转型丐版 8G 内存的窘境也日益突出。卡顿成了我每天易怒的原因之一。最终还是付款了购物车里心心念念很久 NUC8,店家帮忙改好了无线网卡并预装了系统,基本就是到手即用,后来我也支持购买了 维奇 的引导,感谢大佬们的奉献让贫穷的我能以 3000 元出头的价格体验到满配的 Mac mini。

NUC8 主机照片

neofetch 截图

说到 4K 显示器,在这之前我都没用过 4K,因为在我习惯了 1080p 显示器并且轻微近视的情况下,导致我看屏幕感觉啥分辨率都是一样的朦胧。不过不重要,既然主机的钱省下来了,换台 4K 也算是体验一下旗舰配置,毕竟 MacBook Pro 我只能买丐版(我真穷)。

显示器到货后,给我最大的感官体验是字体清晰了很多,字体边缘过渡没有颗粒,亮度也比之前高了不少。我并非专业用户,对各种参数也没有直观的感受,你也看到了,在此之前我甚至都没用过 4K,不过体验了大半年后,再回去看 1080p,感觉无论是图片还是字体,都有另一种感觉,这种感觉在改变之前很难相信的,也并不是鸟枪换炮后的高贵感,更像是「平凡之路」中台词所说:“离开故乡一段时间后再回来,你就会发现原来这栋楼这么小,这棵树这么矮,这条街这么短,这条路这么窄。”

AOC 卢瓦尔 4K 显示器

专升本考试 & 新人面试

我在四月份左右报名了朋友教育机构的专升本项目,打算提升一下自己的学历,说来惭愧在我们项目组乃至整个部门我的学历都是垫底的,在招聘新人时筛选了半个月简历后愈发觉得学历的重要性,因为学历低的话你的简历甚至都递不到面试官的手里,在平台筛选的时候就已经过滤掉了。你的经历、做过的项目以及学习的技能想在面试官夸夸其谈都做不到,就是这么残酷。

在面试中相比更加残酷的是年龄。我在招聘的时候面试过比较年长的面试者,他们基础扎实,经验丰富,但国内互联网的氛围就导致你 35 岁之后在开发岗很难再干下去,我们项目组也是这样,团队平均年龄都很年轻,PASS 之后经常在思考我 35 岁之后会被这样对待吗?

还好,我还年轻,我还有大把的时间去提升自己,我还有自己的兴趣爱好,我要在 35 岁前学习更多的东西。我报考了湖南工业大学的自考,备考期间相对顺利,只是复习政治的时候有些本能的抗拒感(算了,不说了)。后来,我也是贴着录取分数先通过了入学考试,学习时间需要两年半,我还有时间。

客制化键盘

我的第一把客制化键盘。过程并不难,只需要找到合适自己的套件,也就是键盘的外壳以及 PCB 板,我入手的是 CIY68 套件,79 元价格并且全键支持热插拔,2.4G 和蓝牙双模以及干电池供电。轴体我第一次购入的是佳达隆 G 黄 Pro,1 元一颗,手感类似于樱桃的红轴的线性轴,键帽我则选择了复古风格的 9009 键帽,我一直想要一把小时候小霸王学习机的复古风格的键盘,而 9009 的灰白配色非常吸引我,而搭配的几颗粉黄绿的增补键帽算得上点睛之笔。

键盘组装过程相对简单,由于热插拔所以根本用不上电烙铁,只需要将定位板对应位置贴一下铁氟龙胶带,用于填充卫星轴钢丝与定位板的空隙达到减少钢丝音等一些杂音,另外将卫星轴拆开,涂上某多多十几元包邮的润滑脂,擦干多余的油脂重新装回定位板即可。剩下的就是安装轴体,需要小心检查轴体针脚有没有弯曲,因为在轴体运输中可能会将轴体稍微压出形变,而安装轴体时不将针脚掰正的话直接插下去可能针脚就折了。针脚折了除了导致接触不良或者无法触发,严重的会将热插拔轴座直接顶脱焊。最后就是键帽啦,安装键帽时逐渐看到一把键盘完工时非常兴奋的,在组装完键盘后,我甚至抱着键盘玩了好久,后来我把他送给了我的朋友。

4B4919FE-ABEC-40CC-B5E4-B73600907993_1_105_c.jpeg

另一把是 VN66,也是目前我的开发主力键盘。

更换旋钮的 VN66

绩效评优

公司在年底的时候组织了年度述职,每个人都需要准备 PPT 进行演讲述职(提醒领导你去年一年都干了啥[doge]),然后领导分别对所有人根据今年的贡献进行打分,述职过程我参加了几位同事的述职,实在卷得厉害。评优规则为 12331,即 1 位 A+,2 位 A-,也必然有一位绩效为 C 的。

绩效由直属领导谈话公布,谈话聊了许多,这一年的公司业绩、团队迭代模式、不合理的需求等等还有我带领的新人,以及我写的一堆 BUG[doge]。

不过运气使然,我有幸拿到了 A- 的绩效,对应的激励是年终奖金 * 25% 以及次年月薪调薪 3%,这份幸运也算是给 2021 年画上最后的句号。

回顾与展望

回顾这一年。除了年龄加一以外我还有哪些收获。如果这一年给自己打分的话会给到多少呢?一时间难以回答。

2021 年已经结束了,人们还没有摘下口罩,疫情仍然在继续,西安最近还封城了。偶然间看到 18 年的一个视频,人们在地铁上大声的歌唱,他们满脸洋溢的笑容,那般自在现在来看已然是奢望。

我的 2021 年关键字一定是运气。那么,2022 年呢?

别消沉。

Update:

  • 2021-01-28: 换了联通宽带,不需要路由器拨号了,定时任务暂停了。

家里的路由器经常在一觉醒来的时候断网,随即小爱音响及其绑定的智能家具全都停止工作。每天早上八点的时候小爱同学会定时帮我加热热水器,而断网后只能去洗冷水。一次两次拔下路由器能解决,但最近越来越冷,洗冷水也觉得越发刺骨,我也实在没有动力从温暖的被窝里起来拔插路由器。

$ vim /etc/network-watch-dog
#!/bin/sh

# 锁文件位置
LOCK_FILE_PATH=/tmp/.network-watch-dog.lock
# 每次发包次数
PING_COUNT=3
# 离上次断网最大等待时间
MAX_WAITING_SECONDS=600

# 这里直接固定 ping ali dns
SUCCESS_COUNT=$(ping 223.5.5.5 -c ${PING_COUNT} 2>&1 | grep '64 bytes' | wc -l)

if [ ${SUCCESS_COUNT} == 0 ]; then
  TIMESTAMP=$(date +%s)

  if [ -f ${LOCK_FILE_PATH} ]; then
    LOCK_TIMESTAMP=$(cat ${LOCK_FILE_PATH})
    # 超过最大等待时间 删除锁文件重启
    if [ $(expr ${TIMESTAMP} - ${LOCK_TIMESTAMP}) -ge ${MAX_WAITING_SECONDS} ]; then
      rm -rf ${LOCK_FILE_PATH}
      reboot
    fi
  else
    # 写入断网时间到锁文件
    echo ${TIMESTAMP} > ${LOCK_FILE_PATH}
  fi
  /etc/init.d/network restart
else
  # 成功联网后判断上次断网遗留的锁文件
  if [ -f ${LOCK_FILE_PATH} ]; then
    rm -rf ${LOCK_FILE_PATH}
  fi
fi

最后给个执行权限,在定时任务中加入这条脚本,我这里每三分钟执行一次。

$ chmod a+x /etc/network-watch-dog
$ crontab -e
*/3 * * * * /etc/network-watch-dog > /dev/null 2>&1

等两天打算搞个断网消息通知。

Update:

  • 2021-01-25: 更新本地多网卡的情况

终端设置代理命令之前文章有写过的,趁今天重装了系统完善一下。

我的 Shell 使用 zsh,在 ~/.zshrc 下追加,如果使用 bash 需要修改 ~/.bashrc,可以使用 echo $SHELL 查看当前正在使用的 Shell。

命令用到了 jq 命令,需要先安装 brew install jq,其他平台替换为 yum 或者 apt-get

# 获取内网 IP
getlocalip() {
  local_ip=$(ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{printf("%s / %s; ", $2, $6)}')

  if [ ! "${local_ip}" ]; then
    echo "Your are offline."
  else
    echo "${local_ip}"
  fi
}

# 获取外网 IP
getpublicip() {
  response=$(curl 'https://api.ip.sb/geoip' -Lsk -A Mozilla)
  if [ ! "${response}" ]; then
    echo "You are offline."
  else
    ip=$(echo $response | jq -r '.ip')
    country=$(echo $response | jq -r '.country')
    country_code=$(echo $response | jq -r '.country_code')
    city=$(echo $response | jq -r '.city')
    isp=$(echo $response | jq -r '.isp')
    echo "${ip} at ${city} in ${country}(${country_code}) / ${isp}"
  fi
}

# 获取 内外网 IP
getip() {
  echo "Local IP: $(getlocalip)"
  echo "Public IP: $(getpublicip)"
}

# 定义代理地址
export PROXY_URL=127.0.0.1:7890

# 开启代理
proxyon() {
  export https_proxy=http://${PROXY_URL};
  export http_proxy=http://${PROXY_URL};
  export all_proxy=socks5://${PROXY_URL};
  export no_proxy=localhost,127.0.0.1,*.local,*.vanke.com,*.vankeservice.com
  getip
}

# 关闭代理
proxyoff() {
  unset https_proxy http_proxy all_proxy no_proxy;
  getip
}

然后 source ~/.zshrc,就可以使用命令了。

$ getlocalip
10.39.32.* / 10.39.32.255; 10.39.229.* / 10.39.229.255;
$ getpublicip
120.237.94.* at Shenzhen in China(CN) / China Mobile Guangdong
$ getip
Local IP: 10.39.32.* / 10.39.32.255; 10.39.229.* / 10.39.229.255;
Public IP: 58.250.23.228 at Shenzhen in China(CN) / China Unicom Guangdong
$ proxyon
Local IP: 10.39.32.* / 10.39.32.255; 10.39.229.* / 10.39.229.255;
Public IP: 52.175.9.* at Central in Hong Kong(HK) / Microsoft Corporation
$ proxyoff
Local IP: 10.39.32.* / 10.39.32.255; 10.39.229.* / 10.39.229.255;
Public IP: 183.62.230.* at Guangzhou in China(CN) / China Telecom

用了好几年的 Hexo 如今换成了 Typecho,换完之后心情挺复杂。

本想写篇博文记录一下最近的笔记,奈何升级 Big Surnode 环境有问题,索性直接换到了 Typecho。

迁移使用 hexo-2-typecho 工具,过程还挺顺利。

今年的文章产出好少哇,希望能好好写文章,好好记录生活。