• 开心的2024年春节

    full 2024 Birthday

    BG

    大环境差,公司刚经历一波裁员,我的团队也全部解散了。工作也没有之前那么忙了,正好也可以抽时间完成之前一直在计划但没有做的事

    • 持续学英语、学CS相关专业课程、拿个CS学位
    • 坚持看些书,2023年大概认真看了30本,受益匪浅
    • 花更多的时间与家人相处,无论工作怎样,家人在一起健康开心就好
    • 学习育儿知识,争取做一个合格的奶爸

    宝宝4岁生日

    转眼,2024年已到来,两个宝宝也迎来了4岁生日!不少人回想过去通常会觉得很艰辛,的确,非常感谢我老婆无比艰辛的怀两个宝宝最后顺利出生。

    ...

    READ ALL

  • Welcome 2024

    动荡的2023

    2023~相信看到我这篇文章的大多数IT行业的朋友都受到了2023经济低迷的影响,降薪裁员一片哀嚎~,就连家底殷实的大厂也不例外。要说这个时期有没有逆势者可能大觉都共认华为了,一机难求,它给中国制造提振了不少信心,问界汽车一把做到龙头位置,其它当然还有芯片、国产系统产业都是逆势归来。人们在经历不幸时总会展望来年,我也不例外,经历了2023团队解散、降薪、业务线停滞等种种事之后自然就在思考2024会好起来吗?

    2024会更好吗?

    时间飞快,7月团队解散,转眼就2024的元旦了。公司也并没有消停,经过2024年的市场预期,计算了一下现有的成本,发现还得继续裁员才能做到成本持平,这让我想起了前段时间我看的一本萨希尔·拉文吉亚写的《小而美》,作者一直努力想让自己公司变成独角兽,但是至少少数公司能成为独角兽,大多数公司能盈利就不错了,之前有过相关的创业数据称平均一家创业公司的存活周期是2年,也就差不多天使轮之后要么成要么黄。

    ...

    READ ALL

  • clickhouse导出建表语句DDL换行符的问题

    今天需要把一个clickhouse的实例转移到另外一个实例,本来要使用clickhouse-backup工具,但最终总是导出metadata,没有包含实际数据,没办法只能放弃,使用脚本的方式导出建表语句,再导出CSV的数据。

    然而在导出建表语句的时候,非常奇怪,在clickhouse CLI下总是看起来正常

    $ SHOW CREATE TABLE analysis.spm_dictionary
    
    SHOW CREATE TABLE analysis.spm_dictionary
    
    Query id: 0bd7cb9d-b92a-4625-9ca9-eb306ce77fd3
    
    ┌─statement───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
    │ CREATE TABLE analysis.spm_dictionary
    (
        `spm_b` String,
        `name` String
    )
    ENGINE = MergeTree
    ORDER BY spm_b
    SETTINGS index_granularity = 8192 │
    └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
    
    1 row in set. Elapsed: 0.014 sec. 
    

    ...

    READ ALL

  • tar解压错误Cannot change ownership to uid 1000, gid 1000 Permission denied

    前两天在解压一个tar包时提示

    Cannot change ownership to uid 1000, gid 1000: Permission denied

    第一次遇到这个问题,看这个错误感觉像是权限的问题,但我当前操作就是在root账号下,理论上root应该拥有一切权限,而我这次操作跟以往不一样的地方是我在NFS下解压的。

    我在本地磁盘下可以解压,在NFS下无法解压,难道我需要去修改NFS的文件系统?

    后来在tar的帮助文档里看到了一个关键性配置项--no-same-owner,这个配置项的意思是在解压时不用保持相同的Owner,我试了一下,错误解决~

    ...

    READ ALL

  • 非常奇怪的Kafka发消息MessageTimeOut错误

    full kafka error log

    我有一个Rust项目,需要发送kafka消息,容器化运行。我使用的是Rust 1.70版本,kafka类库使用的是rdkafka,但最近遇到一个非常奇怪的问题,我发现在没有修改任何依赖与Carogo.lock的场景下重新构建出来的镜像竟然无法发送消息。到生产后一直报错

    Failed to produce kafka message: Message production error: MessageTimedOut (Local: Message timed out)
    

    ...

    READ ALL

  • httpie的Github仓库丢失了5.4万收藏量

    full httpie lost 54k stars

    前两天逛httpie的Github仓库,发现README写了一段有意思的内容

    We lost 54k GitHub stars

    有点好奇,就点进去看了一下,总的来说这是发生在2022年因为一次误操作把仓库从public改到private导致Github系统把原仓库5.4万的stars清零的悲惨事件。

    到现在有一年时间也不属于什么新鲜新闻了,甚至可能看到这篇文章的很多读者都已经知道了这件事,接下来我就摘抄文章里的一些有意思的片段

    ...

    READ ALL

  • kubeadm重新构建k8s集群注意事项

    背景环境信息

    • 操作系统 Debian 10 buster
    • 1个控制节点(192.168.1.2) + 2个Worker节点(192.168.1.[2、3])
    • Kubernetes版本为最新的1.27.3
    • 容器运行时选containerd
    • 网络插件CNI为Calico
    • Pod子网10.244.0.0/16

    kubeadm init初始化集群很顺利,按照教程配置.kube目录,拷贝配置文件,安装网络插件,部署nginx也能访 问,但就是在启动Nginx时发现配置转发的集群内主机名找不到,这还是同一个Namespace下的。

    初步判断可能是集群DNS问题,启动busybox进入命令行模式,看了一下/etc/resolv.conf没问题,直接ping其它pod IP发现ping不通,ping互联网IP发现也ping不通,这完全就是无网的状态啊~

    ...

    READ ALL

  • 用zsh-syntax-highlighting配置你的命令行语法高亮

    如果你是一名程序员,那么配置一个语法高亮,支持在命令行显示时间、显示Git分支、推送拉取状态等等就显得非常有助于日常工作。

    在Mac电脑上通常都是基于zsh配置,而如果你想懒省事的话,也有人家配好的profile,你直接用就好,它就是powerlevel10k。其中有一个功能我认为是比较常用的,就是当你敲入的命令存在系统的时候,它就会变成绿色,当你敲入一个命令系统中检测不存在时,就会变红色,这个校验可以让我们在执行前就能校验命令是否正确,极大提升工作效率,它也是zsh的一个插件,叫zsh-syntax-highlighting,点击链接到它的Github的主页提供了安装文档入口,支持很多包管理安装

    ...

    READ ALL

  • Rust lettre使用腾讯企业邮箱发送邮件参数配置

    邮件发送这个在Rust中总是有点问题,之前用lettre低版本测试没问题,后来腾讯企业邮箱升级做了一些限制调整,我调了好长时间,终于调通了。

    Cargo.toml

    [dependencies]
    lettre = "0.10"
    

    目前lettre最新版本就是0.10版本了。

    sample.rs

    use lettre::message::header::ContentType;
    use lettre::transport::smtp::authentication::{Credentials, Mechanism};
    use lettre::transport::smtp::client::{TlsParameters, Tls};
    use lettre::{Message, SmtpTransport, Transport};
    use log::{info, warn};
    use crate::router;
    
    fn send_mail(to_addr: &str, subject: &str, body: String) -> anyhow::Result<()> {
      let email: Message = Message::builder()
        .from("Qttc <blog@qttc.net>".parse()?)
        .reply_to("Qttc <blog@qttc.net>".parse()?)
        .to(to_addr.parse()?)
        .subject(subject)
        .header(ContentType::TEXT_HTML)
        .body(body)?;
    
      let creds: Credentials = Credentials::new(
        "[Account]".to_string(),
        "[Password]".to_string(),
      );
    
      let smtp_host: &str = "smtp.exmail.qq.com";
      let tls_params: TlsParameters = TlsParameters::new("exmail.qq.com".to_string())?;
      let tls: Tls = Tls::Wrapper(tls_params);
    
      let mailer: SmtpTransport = SmtpTransport::relay(smtp_host)?
        .port(465)
        .credentials(creds)
        .authentication(vec![Mechanism::Login])
        .tls(tls)
        .build();
    
      match mailer.send(&email) {
        Ok(_) => info!("Email sent {} successfully!", &to_addr),
        Err(e) => warn!("Error sending email {} was error: {}", &to_addr, e),
      };
    
      Ok(())
    }
    

    ...

    READ ALL

  • 用Github Copilot Chat写一个Node.js + H5文件上传的代码

    前两天我就介绍过Github的Copilot X系列,到现在VSCode扩展Copilot Chat已经stable了,可以运行在正常稳定蓝色版本的VSCode里了。

    如果你没有开通Copilot相关的服务的话,需要先到这里开通https://github.com/features/preview/copilot-x,其中Chat服务需要额外申请人工审批,有些人通过的快,有些人通过的慢,快的隔天就收到开通邮件,慢的比如我快两周。总之得收到开通的邮件之后才能在VSCode里安装Github Copilot Chat扩展使用。

    ...

    READ ALL