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

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

转正

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

携号转网

现在的主号是刚到深圳时办理的,电信的日租卡,19 元一个月,每天 1 元 1G 流量,本来很正常的套餐,但在家里信号实在是太差导致会漏接很多电话,上电信公众号投诉过,后来接到电信的反馈也不了了之,再后来实在忍无可忍就直接携号转网到了联通并办理了大王卡套餐,套餐资费差不了太多,而且王卡宽带也很香,按日付费,2 元一天,我也用了很长一段时间。

NUC8 黑苹果

不得不说我的 MacBook Pro 2016 还是坚挺了这么久,17 年到 21 年,随着我转型到 Java 8G 内存的窘境也日益突出。「卡」成了我每天易怒的原因之一。后来实在受不了,付款了购物车里心心念念很久 NUC8,店家帮忙改好了无线网卡并预装了系统,基本就是到手即用,后来我也支持购买了 维奇 的引导,感谢大佬们的奉献让贫穷的我能以 3000元出头的价格体验到满配的 Mac mini。

NUC8 主机照片

macOS 版本截图

neofetch 截图

AOC 卢瓦尔 4K 显示器

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

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

AOC 卢瓦尔 4K 显示器

京东京造 K8 键盘

说起这把键盘,我更多的评价恐怕是负面的,在 K8 之前我还短暂的拥有一把 K2,不过后来我退货了。我不止一次在 v2ex 和什么值得买上看到过 K2 的名字,带给我的信息仿佛是人手一把,Mac 用户标配的错觉。

但是直到键盘到手时我触碰到空格的那几秒,我愣住了。首先是手感类肤质的键帽让我想起了智能机刚普及是大多厂商都尝试过的类肤质涂层,曾经也在各种电子产品上出现过,可能因为我是油性皮肤,我所接触的类肤质涂层表面都是有光瓦亮的,这导致后来我都这个材质的产品都有抵触情绪;其次是声音,或许是因为樱桃的轴体用得太多,导致我觉得所有的键盘都应该有弹簧声,在我按下 K2 后给我的反馈更多是空腔音和明显的肉感,甚至感觉它弹起的时候不跟手。

换键帽后的 K8

K2 第二天就直接退货了,后来购入 K8 时我和 ikbc W200 比对了好久,因为内置锂电池,我最终还是选择了 K8。到手后,同样的类肤质以及方向键上方的空缺部分导致部分键悬浮,我是真很难受,不过还是想慢慢接受。

而后来的事实证明不喜欢的东西不能将就,当然那是后话了。

电信宽带

在之前携号转网转网至联通后,同时使用了联通的王卡宽带,然而我玩 LOL 的时候经常在确定匹配对局后掉线几十秒才进入 ban 选英雄的界面,有时候会因为掉线导致 ban 选超时直接惩罚 5 分钟不允许匹配对局。我一度把矛头指向联通宽带,不为别的,就因为 它比电信便宜。。后来我还怀疑过路由器,在我换了新的路由器后,问题仍然没有解决的时候,我再次将矛头指向了联通宽带。

碰巧 10 月份遇到城中村三线下地工程,居住的楼栋联通宽带被剪断了,打电话了解需要至少一周时间才能恢复,而且是三家运营商都被剪断了。没办法,只能等。然而过了一周后,联通仍然没有联系我,同时我注意到楼下的电信盒子已经有光纤接入了,而联通的宽带盒子仍然是光秃秃的立在那儿。

后来通过知乎了解到了广东电信有一个城中村优惠活动,不需要办理手机卡,60 元一个月,100M 下行和 30M 上行。办理过程也是相对曲折,总之我前后断网了一个月,一个月没开过电脑,不过这个套餐在你看到这篇文章的时候已经下架了。

客制化键盘

想不起来是什么时候入了客制化的圈子,看了下订单应该是在 11 月底,在 B 站看了无数客制化键盘的视频后,入手了套件、轴体和键帽,意义上讲是我第一把客制化键盘。过程并不难,只需要找到合适自己的套件,也就是键盘的外壳以及 PCB 板,我入手的是 CIY68 套件,79 元价格并且全键支持热插拔,2.4G 和蓝牙双模,干电池供电。轴体我第一次购入的是佳达隆 G 黄 Pro,1 元一颗,手感类似于樱桃的红轴,属于线性轴。键帽我则选择了复古风格的 9009 键帽,我一直想要一把复古风格的键盘,就像小时候玩的小霸王学习机的风格,而 9009 的灰白配色非常吸引我,而搭配的几颗粉黄绿的增补键帽算的上点睛之笔。

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

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

VN66 键盘

一入键圈深似海,不知道什么时候开始我的 B 站推荐从 LOL 变成了各类键盘的拆解测评视频,学习客制化的润轴、解决钢丝音、解决空腔音等等教程。我非常喜欢小配列,108 键、87 键、68 键和 61 键配列我都用过,个人认为 68 键和 87 键配列是办公相对合适的配列。直到看到 VN66 这把键盘,我感觉我又行了,但是我现在键盘很多了,很难说服自己再花几百元购买一把键盘,除非。

更换旋钮的 VN66

是的,除非出售几把键盘。出手的名单中那肯定有一把 K8,说起 K8,他后来情况更糟了,由于键帽是 ABS 喷涂类肤质涂层,导致键帽表面相当脆弱,稍微硬物划过都会造成永久性划痕,而划痕下就是白色的底灯透光。这对于强迫症来说无疑是灾难,我试着抢救过,我为此给他换上了一套 PBT 侧刻键帽,相当有感觉,除了方向键上方的悬浮轴体。交易是在闲鱼上进行的,一位来自成都的买家拍下了它,过程非常顺利。

Elasticsearch

终于终于,算是入了 Elasticsearch 的坑,我之前一直想学习来着,但是 DSL 语法实在晦涩难懂。或许是开窍了,也或许是同事的指点,最近也是逐渐上手了 ES 并且用到了实际项目中,通过慕课网的教程,对基础语法有有了基本的认识,希望后续能手写 DSL 哈哈哈。

Java

转 Java 也有一段时间了,应该是要有一些总结的。首先和 PHP 最大的区别我觉得应该开发工时上,现在的需求估时基本都要 * 2的工时才能完成。并且有些东西还不能按 PHP 的思想去写,这个还真是太多一时半会儿想不起来,等后面在填坑吧。

回顾与展望

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

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

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)
  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 工具,过程还挺顺利。

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

最近写需求,同步了上游系统一个接口的数据到表里,大概长这样:

| id | name | role_id |
| 1 | 小王 | 4,5,6 |
| 2 | 小张 | 5,6,7 |
| 3 | 小李 | 50,51,52 |

需求是查询 role_id5 的所有用户,最开始的想法是这样:

select * from T where role_id like '%,5,%';

但是发现 最开始和最末尾的 ID 没有 , 分隔符 ,这就会导致最打头和最末尾的 ID 查不到。然后我又改成了这样:

select * from T where role_id like '%5%';

这个结果显然会将 id3 的结果一起查出来,况且 like 会扫描全表,这并不是我想要的。

后来我又想到了两个方案:

  1. 新建一张表,字段有 idrole_id,将字符串 role_id 列表分隔成一条条关联数据;
  2. 修改 role_id 格式为 |id1|id2|id3|,这样就可以用 like '%|id1|%' 查询。

直到 leader 在群里发了一个 MySQL 函数 FIND_IN_SET,让我立马拍大腿。

FIND_IN_SET(needle,haystack);
needle是要查找的字符串,如果 needle 中包含逗号(,)将无法正常工作。
haystack是要搜索的逗号(,)分隔的字符串列表。

上述的 role_id 字段也不用调整和处理,修改查询语句如下:

select * from T where FIND_IN_SET(5, role_id);

参考: