求职相关意见记录 / 小窝评论通知规划

昨天发布的日记得到了部分推友关注,引发了不少共鸣,也意外收获了一些粉丝以及打赏(应该是来自推特,但我实际并不知道是谁),感谢各位支持,在这里我也列出两个或许有帮助的评论。

@天朗气清:Boss 直聘上意向工作里的职位和期望薪资比较重要,建议填前端和 10k 左右,然后选择一个离得近的发达点的城市,每天在推荐里海投 120 个,留 30 个位置给要联系你的,这样一周后会有一大堆面试,最好录音然后复盘,用录音笔录一下,希望我的经验能帮到你

@xingwangzhe:这几年 AI 振荡期大家都很焦虑。不过博主写了这么久、积累了这么多项目,对产品的 Taste 反而成了最稀缺的东西——现在人人能让AI跑通一个功能,但'这个功能该不该做、做成什么样',才是差距所在。

在小窝真正得到一些流量和评论之后,顿时也发现了目前交互性上的不足,其中最大的问题就是评论回复并没有做邮件通知,这决定了评论者能否接收到我回复内容,引发更进一步的交流。这是一个非常关键的功能,先记录一下,后续整一整。

小窝是一个为我自己打造的平台,对于大多数人来说或许并没有什么特别的价值,得到的反馈非常有限,想要持续性坚持下去,我认为还是需要多创作一些或许对大家有用的,这样才能不辜负各位对我的关注。

不过确实之前有很巧的事,A 遇到了一个 Safari 的问题找到了我网站,结果在和 B 讨论,而 B 刚好认识我,他把聊天记录发给了我,我网站的辨识度看起来还是挺高的,这风格确实能算是独树一帜了吧。

接下来就是往常的琐事记录了:

  • 小窝在读增加 HTML、Markdown 双类型

    • HTML 感觉确实有些臃肿,现在其实可以直接让 AI 帮我提炼精简
  • 小窝 AI 机器人评论增加身份和风格机制

    • 此前只有固定几种,我觉得可以拆分成两种形式组合更灵活
  • 修复后台评论管理员评论异常,将机器人评论拆分成单独业务接口
  • 调整照片处理脚本对多种比例分辨率的支持

    • 这个脚本主要是方便上传小窝的,其实我更想直接集成在后台里面
  • 收货了两个滤镜转接圈,给购入的 CPL 偏振镜使用

    • 或许对接下来旅行拍风光会有帮助吧

失业两个月的迷茫 / AI 浪潮下的技能贬值 / 学历劣势与职业焦虑

转眼就是七月份了,这意味着我即将失业两个月了。Boss 招聘上也是安安静静的,本科都裁了一大堆,凭什么他们会看上我这个大专生呢。我写了这么久的博客,积累了这么多项目,现在一点都不算加分项了,变得一文不值了吗。在学历上我确实没有优势,我很希望能通过积累个人形象和品牌来弥补,但似乎并没有那么成功。

我读了 @Innei 的文章《在 AI 浪潮下,如何留在牌桌上》,深有感触,其实早在自己失业之前我都已经在怀疑自己了,现在的 AI 这么强,我原先执着的调样式、优化性能、改善代码可维护性,学习和经历的这么多,究竟还有什么用,原先对我来说可能是“亮点”的职业个性,似乎正在被 AI 抹平。因为你完全可以把预想的架构给到 AI,让它自己规划具体的代码落地,感觉我的优势,也就仅仅是比那些没学过前端的人要强那么一些吧。

有人说学习后端,补全全栈知识,这很重要,但又似乎并不是那么重要。我现在小窝的新后端代码也多数使用 AI 编写,基本能够达到预期,那我补后端又需要补什么,才能比其他人更厉害呢。学习接入支付?解决高并发?还是和大多数人一样去卷 Agent 开发?虽说 AI 发展了这么久,但我始终认为自己在掉队,毕竟它迭代的实在是太快了

有人说没学会以后都可以不学了,确实对于 AI 的使用者来说,只要生成的结果越来越好,似乎就是 AI 发展的最终目标,因为使用者并不需要理解整个过程。这才是最矛盾的一环,既然 AI 质量提升了,那是否意味着更多非程序员的外行也能做出好用的网页和软件呢。可能有人会抬杠他们容易写出屎山,但大势所趋似乎屎不屎山也不太重要了,根本没人在乎这个问题,不然为什么我还会失业呢对吧。

文章提到了“AI 产品工程师”这个新兴说法,我认为就是产品+研发二合一,那问题来了,怎么做才算是一个合格的产品呢,我的所有项目其实都是站在自己的角度出发设计,正常产品需要考虑的就更多了,我认为此时此刻的我并不是一个合格的产品。所以我该怎么转变呢,这不得提一个大大的问号。

服务器基础运维问题记录

晚上打开博客发现挂掉了,SSH 也连不上,简单排查发现是内部就连不上外网,CloudCone 这个老服务器实例又双叒叕翻车了。我用了上午做的完整备份,直接在另外一个服务器部署了上去,Caddy 配置就是简单,似乎一点问题都没有。

rclone copy -P remote:文件夹 本地路径
tar -xzf filename.tar.gz

另外去给机器升级了下软件包和内核,升级过程中再次遇到 SSHD 的问题,提示:

Configuring openssh-server
--------------------------

A new version (/tmp/tmp.WU6Ix38YKw) of configuration file /etc/ssh/sshd_config is available, but the version installed currently
has been locally modified.

  1. install the package maintainer's version             5. show a 3-way difference between available versions
  2. keep the local version currently installed           6. do a 3-way merge between available versions
  3. show the differences between the versions            7. start a new shell to examine the situation
  4. show a side-by-side difference between the versions
What do you want to do about modified configuration file sshd_config?

我选择 1 覆盖到最新版本,之后重启系统,用了服务商的后台重新修改配置,再次重启解决。

之后是 pm2 的状态丢失问题,重启之后都会丢失。平时修改维护需要 pm2 save 保存进程,执行 pm2 startup 生成开机脚本,它会自动创建过去,重启系统后它将会自动以服务形式启动。如果依旧想手动启动,则是执行 pm2 resurrect 命令读取上面 pm2 save 保存的状态。

最后是升级内核,提示报错,问了下 ChatGPT 说是我的 APT 软件源签名密钥过期了。

Get: 1 https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version InRelease [14.8kB]
Err https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version InRelease
The following signatures were invalid: EXPKEYSIG ABA1F9B8875A6661 Caddy Web Server <[email protected]

解决办法:

# 删除旧的 Key
sudo rm -f /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo rm -f /etc/apt/sources.list.d/caddy-stable.list
# 获取新的 Key(来自官方脚本)
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
# 更新 APT 源
sudo apt update
# 更新 Caddy
sudo apt upgrade

此时应该就修复这个错误了,继续执行 do-release-upgrade 命令,出现报错:

Not enough free disk space

The upgrade has aborted. The upgrade needs a total of 257 M free
space on disk '/boot'. Please free at least an additional 100 M of
disk space on '/boot'. You can remove old kernels using 'sudo apt
autoremove' and you could also set COMPRESS=xZ in
/etc/initramfs-tools/initramfs.conf to reduce the size of your
initramfs.

执行 sudo apt autoremove 之后确实删除了一些旧的内核文件。重试继续后出现警告说明,大概原因是升级内核的时候会临时禁用第三方源。

Checking for installed snaps

Calculating snap size requirements

Updating repository information

Third party sources disabled

Some third party entries in your sources.list were disabled. You can
re-enable them after the upgrade with the
'software-properties' tool
or your package manager.

To continue please press [ENTER]

升级完成后 vim /etc/sysctl.conf 手动进入修改,对比后仅保留最后面的配置项

#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables.
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com

# Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3

###################################################################
# Functions previously found in netbase
#

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1


###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through
# redirection. Some network environments, however, require that these
# settings are disabled so review and enable them as needed.
#
# Do not accept ICMP redirects (prevent MITM attacks)
#net.ipv4.conf.all.accept_redirects = 0
-#net.ipv6.conf.all.accept_redirects = 0
+#net.ipv4.conf.default.accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
# net.ipv4.conf.all.secure_redirects = 1
#
# Do not send ICMP redirects (we are not a router)
#net.ipv4.conf.all.send_redirects = 0
#
-# Do not accept IP source route packets (we are not a router)
-#net.ipv4.conf.all.accept_source_route = 0
-#net.ipv6.conf.all.accept_source_route = 0
-#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#

###################################################################
# Magic system request Key
# 0=disable, 1=enable all, >1 bitmask of sysrq functions
# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
# for what other values do
#kernel.sysrq=438

-net.ipv4.neigh.default.base_reachable_time_ms = 600000
-net.ipv4.neigh.eth1.delay_first_probe_time = 1
-net.ipv4.neigh.default.mcast_solicit = 20
-net.ipv4.neigh.default.retrans_time_ms = 250
-net.ipv4.conf.all.rp_filter=0
-net.ipv4.conf.eth0.rp_filter=0
-net.ipv4.conf.eth1.rp_filter=0
-net.core.default_qdisc=fq
-net.ipv4.tcp_congestion_control=bbr
-net.ipv4.tcp_fastopen=3

圆明新园外拍学习 / 开发岗位求职困境与面试反思

下午去了圆明新园拍照,模特是 @江晚 老师,主摄是 @Kaya,我副摄蹭拍学习。他主要选择的拍摄地点集合在走廊和许愿区,走廊的框架自带“引导线”效果,许愿区可以拍前后景多个图层,凸显画面的层次感。比较刁钻的机位我就没有办法和他抢了,很多照片甚至眼神都没有看过来(我也没去打招呼,怕影响主摄自己的节奏),但自我感觉还是有那么几张可以返,尤其是 CCD 拍的,虽说是大平光但出乎意料的好看其实。

主摄的动作指导还是有一手的,首先确定大致的摆姿,之后和模特沟通精细调整角度,确保成片效果。这块还确实是我的短板,还是得多拍多研究,如何用语言或肢体表达让模特迅速理解调整,也是一个很讲究的事情呢。

就我的目前情况而言摄影还是更想作为一个爱好,二次元摄影相较于三次元赚钱接单还是要困难一些。但我的开发技能又要怎么破局,此时此刻我似乎还是没有答案。晚上和爸妈讨论这件事,也去刷了一下 Boss 直聘,发现有些小公司在招聘“全能手”,具体说明也是要求全后端都得会,甚至还需要负责 DevOps 相关(听群友说基本 24 小时待岗,出事马上给我修复),它要求这么多只开 15K 我感觉是有点少了。

IT 岗位现状确实很难,一边到处裁员,一边在找更厉害的 AI“多面体”,也不知道这样的情况会持续多久。和群友 @提莫 聊天,感觉 DevOps 也不是个简单的活。

提莫:DevOps 其实还涉及到监控系统搭建,你还得思考每个业务怎么监控起来,什么指标能反映业务状态。Build Docker 反而是非常简单的事,因为大部分都有模版。

业务指标监控完了,还有日志采集,比如 ELK 方案。So 你可以理解,这个岗位是 SRE 主要涵盖可观测性系统建设,业务架构设计,发布流程设计,故障恢复流程设计,容灾方案设计实施演练

这件事最离谱的是就算你知道一些基础,靠 AI 能辅助解决了,但面试的时候还是会要求你熟悉掌握,我认为这就是我上次面试挂了的原因,对答确实不太流畅,再加上确实 Electron 的 Jenkins 的很多都忘了,是一次失败的面试。但看上去对方目前还在继续招人,并没有取消掉这个岗位,也不知道他们是怎么想的。我觉得面试的人比去面试的要简单,反正都有 AI 了,你让 AI 出题和判断面试者的能力都不是啥问题不对么。同理岗位的要求也可能是 AI 生成的,毕竟你只要告诉它给我一个行业常见的解决方案就可以了不是么。

晚上还简单继续规划了一下自己之后去上海的旅程,第一天大概率是在上海市区逛,第二天或者第三天才去 BW 逛展。

BW 抢票成功,是惊喜还是侥幸呢

下午和老妈去走了“香山云道”的石景山路线,也是走了很多次的登山路线了。这条路线横跨吉大水库到景山公园观景台的位置,能看到香炉湾沙滩的全部风光,也能看到远处的港珠澳大桥。

今天是 BiliBili World 抢票的时间,刚好登顶之后就要到抢票时间了,这里的网络情况看上去挺一般的,只有 3 格信号,悬念很大,不过我用了电信卡,走了 5G Advanced 模式。我在抢票界面看着时间一分一秒的过去,心跳加速,似乎马上就要开启一次疯狂对战了。

我选的是第三天的票,一开始果不其然“前方拥堵”,票一下子就被抢空,但我并没有放弃,之前看别人的抢票攻略描述说可以到 5 分、10 分的时候再试试抢回流票(别人因操作失误导致的退票),我拿着两台 iPhone 同时操作点击,让我想不到的奇迹发生了,界面跳到了支付宝付款界面(但我之前的手机退出登录了,换到新手机上操作),结果成功付款,也就是说抢票成功了!

在一旁休息的老妈看到我激动的表情,似乎也为我抢票成功的事感到快乐。我和她说平时不知道去哪,这次就真有去外面玩的机会了。

晚上回家也和老爸讨论了这件事,我从来没坐过飞机一个人去还是有些紧张的,其实也挺希望有人和我一起。一认识的摄影哥们他没抢到,二开再试试,这是最大的变量。或者干脆就把我爸叫上,反正他退休在家就天天玩短视频,也没啥事情做...

踩坑总结 / 修图返图 / 漫展预备

  • 其实今天才把昨天的 Vibe Coding 第一期踩坑写完

  • 完成了 @雨霖 开拓者星一套图的全部修图流程
  • 发布申请中山 AS 漫展的微信朋友圈,依旧压轴选手
  • 群友都在提去 BiliBili World 漫展的事,搞得我又想去了

    • 不过普票是后天(20)抢票,大概率抢不到,能抢到就考虑一下
    • 主要是去了上海还能去找 @Innei 玩,更有意思了

面试挂了 / 修图换道具 / 规划摄影业务系统

今天收到了 HR 的回复,果不其然挂了,也算是在意料之内。不过能得到主动回复也说明对面挺礼貌了,此前绝大多数情况都是悄无声息的,没消息默认挂。

中午好,上周的面试结果出来,很抱歉,本次未能入围,谢谢您参与面试。祝您早日找到适合的工作。

下午继续修图,主要是给 @雨霖 的开拓者星,基本上调色修脸都搞定了,包括最复杂的需要给她换道具棒球棍的部分,当时她急急忙忙没准备道具,我就让她拿着一个手机支架当代替品了。这里主要就是 AI 抽卡,并且需要将游戏内的高清截图给到 AI,将道具抠图过去原图替换掉就是了。

1
2
3
...
5
奇趣音乐盒技术源于 Kico Player
Emmm,这里是歌词君