Zhongxiao37

Database and Ruby, Python, History


Posts

  • 打造个人助理-1

    最近自己做了一个个人版的“小爱同学”,能够进行 NLP 处理,并进行对应的操作。之前做过一个版本,是依托 ChatGPT 的 API 做的聊天功能,但这次,我们可以让它干活了!

  • 使用bfg清理git repo

    如果你需要从一个 repo 里面,彻底清理掉一个大文件、密码文件,你可以考虑使用 bfg

  • 如何从SFDC拉取大量数据

    通常从 Salesforce 拉取数据,我们第一反应就是用restforce包去搞定所有的事情,但是restforce有它的局限性:

  • kaggle刷题之时间序列

  • kaggle刷题之房价预测

    房价预测和之前的题就不一样了,算是回归问题。插一句,逻辑回归不是回归模型,是分类模型,因为它出来的结果是 0 和 1 的分类。

  • 如何做人脸识别

    下载arcface_onnx.py,然后执行下面的代码就可以算出两个照片的相似度,进而判断两者是不是同一个人。

  • 一个最基本的Machine learning pipeline

  • 如何做人脸眼部区域打码

    主流的人脸检测技术几乎已经相当成熟了,刷脸系统就是一个常见的应用场景。 Insightface是一个开源的人脸分析项目。

  • Kaggle刷题之泰坦尼克号宇宙飞船

    继续自己的刷题之旅 - Spaceship Titanic

  • Kubernetes CA_KEY_TOO_SMALL错误

    阿里云上的老集群会遇到 CA_KEY_TOO_SMALL 错误,原因是本地的~/.kube/config里面,客户端的证书链有问题,其中一个证书过短。

  • 基于 Airflow+Kubernetes 搭建 ML pipeline

  • 如何获取Kubernetes的RABC verbs

    我在创建 Kubernetes Role,但是不知道完整 verbs 列表。其实,Kubernetes API 就提供这个清单。

  • Kaggle刷题之泰坦尼克号

    同事推荐了一个 ML 刷题的网站,正好可以拿来练手。第一道题是预测泰坦尼克号上的幸存者

  • 如何学习

    最近自己多了一句口头禅“不亲自动手,都是多巴胺”,主要意思是强调学习的时候一定要动手,要有产出,否则就是自嗨,过几天就忘记了。同时,我也想整理一下之前看到的相关文章。

  • Kubernetes ClusterIP vs NodePort vs LoadBalancer vs Ingress

    Kubernetes Service

  • 如何在阿里云上搭建Kubeflow

    什么是 Kubeflow

  • 在Kubernetes上搭建Selenium Grid

    本文是基于 Kubernetes官网的示例搭建的,只是重新用 Kustomize 排版了一下。

  • 如何通过Argo Rollouts实现金丝雀部署(2)

    继上一步实现了 Argo Rollout 切分流量搭配金丝雀部署之后,我打算引入自动化测试进行版本验证,当自动化验证通过之后,则自动部署新的版本。

  • 如何通过Argo Rollouts实现金丝雀部署(1)

    Argo 家简直是在 Kubernetes 上实现 GitOps 的大杀器,本来 ArgoCD 搭配 Kubernetes 原生的 Rollout 就够用了,但不行,还要实践蓝绿部署,金丝雀部署。

  • http连接断了之后,服务器怎么办

    和同事遇到一个问题,发现 gateway 报超时错误。但是查看应用的日志,却是一切正常。但是我记得之前遇到过因为超时,无法返回日志的情况。

  • 如何理解Puma的并行运行

    Puma 是一个基于 rack 的 web server,在 Readme 中,它提到即使有 GVL 的存在,它还是能够实现 IO waiting 方面的 parallel。为什么?

  • 用ArgoCD实现CD

    用 ArgoCD 可以实现基于 Kubernetes 集群的 GitOps CD。

  • 通过阿里云SSO获取的STS token的有效时间

    按照阿里云的文档, 可以通过acs-sso login --profile sso来获取 SSO 角色的临时 STS token。但是发现这个 Token 的时间特别长,不是 assumeRole文档里面提到的 1 个小时,虽然两者都可以换取到 STS token。

  • NextAuth与Azure AD集成

    最近在做前后端分离,常见的有两种方案,一个是 bundle 打包成 js 文件,再嵌入 web 的某个页面;另外一个前端单独起一个服务器,用前端来负责页面和 SSO 相关的功能,后端只管提供 API 数据。这次用的是第二种方式,因为我想把后端作为纯的 API 服务器。

  • 用Terraform在阿里云上搭建托管版Kubernetes

    继上次用 Terraform 把环境对齐之后,终于可以开始用 Terraform 在阿里云上搭建 Kubernetes 了。不过为了方便理解,还是从零开始搭建。

  • 把OSS作为PVC挂载到airflow的日志卷

    有人曾说,人的一生不可能踏入同一条河两次,但是,我却可以两次用同样的姿势栽入坑里。用血泪教训告诉你,把 OSS 作为 PVC 挂载到 airflow 的日志卷,这样是不行的…

  • 如何用root用户进入pod

    kubectl 不支持用--user root的方式进入 pod,那怎么办呢?

  • 如何利用Terraform导入现有Infra

    需求是把现有阿里云 Infra 转为 Terraform 代码,方便以后实现 gitops。

  • 用Docker本地运行 Spark

    可以利用 Docker,在本地跑 Spark + Postgres。

  • Front Engineering Workshop: Dock图标

  • Kubernetes的若干问题

    从问题的角度去理解 Kubernetes

  • Docker容器到底是怎么回事

    Docker 容器其实是利用 Linux 的 Namespace 技术,实现了进程,挂载点,网络等隔离,本质上还是一个特殊的进程。这样,在容器里面,只能够看到自己 Namespace 空间里面的进程和资源,比如只能够看到 PID 为 1 的进程。同时,这也意味着,一个容器无法同时跑两个不同的应用(除非用supervisord)。Docker 这样的技术,脱离了整个虚拟机,实现了类似于进程级别的虚拟化。

  • 如何优雅地编码HTML邮件

    常常看见有些设计地很好的邮件,脑补用 HTML 网页就可以简单实现了,等到真的自己去写类似的邮件的时候,才发现邮件真的是一个古老的东西。

  • 在阿里云ASK部署Airflow KubernetesExecutor

    Airflow 的部署上,可以让 airflow scheduler 既当任务派发,又当任务处理。就像下图一样,webserver 只是给用户展示的界面而已,scheduler 就是既要又要。

  • Graph database Neo4j quick start

    本地想搭一个 Neo4j 来学习一下图数据库,但是 Neo4j 的官网老是让我去创建一个云数据库,不是很喜欢留下个人信息,就打算本地起一个 Neo4j。参考官网文章,执行下面的命令就可以启动 Neo4j 数据库了。

  • 通过kubeadm搭建kubernetes

    最近在《深入剖析 Kubernetes》,顺手搭建一个 K8S。

  • 如何限制Docker的资源分配

    我们有一些自动化的机子在跑 Docker,最近总是发现这些机子的 CPU 占用过高,导致这些机子直接掉线,甚至直接都没法 SSH 上去。由此,我们尝试去限制 Docker 的 CPU 分配。

  • Terraform上允许ICMP协议

    在 Terraform 上创建 security group 的时候,允许 TCP 和 UDP 协议都比较直接,但是 ICMP 的时候,就没有那么直接了。如果想要允许 ping,需要按照下面配置。

  • 通过Terraform搭建VPC+TGW互通

    目标是,在两个 VPC 上搭建两个 EC2,然后通过 TGW 将两个 VPC 打通。

  • SSO、JWT和Oauth2

    打算讲个故事,把 SSO,OAUTH,JWT 这些都揉在一起。

  • Front Engineering Workshop: 可拖拽对象

    实现一个可以拖拽的对象

  • Front Engineering Workshop: 从零开始build一个进度环

    需求是构建一个上传进度的圆圈。

  • Rails 7 + esbuild + React

    基本上和前一篇文章一样,支持剥离了 Stimulus 和 BootStrap,换成了 React+MUI。

  • Rails 7 + esbuild + BootStrap

    创建一个新项目

  • Front Engineering Workshop: Javascript下载多个文件并打zip包

    需求是,连接阿里云的 OSS,批量下载多个文件并打包。

  • great_expectation 自定义数据集

    Great Expectation 是针对数据的验证工具,基于 Python 的一个 package。

  • Pandas输出的样式调整

    最近有一个需求是要把 Pandas 导出成 Excel,并且调整样式。Pandas 有默认的 Styler,但默认只会影响在 Jupyter Notebook 里面的输出样式,不会影响 Excel(个别样式可以生效)。

  • 计算IV和WOE

    半年前做过一个项目,中间涉及到计算 WOE 值,然后自己手撕了一次,过了半年就看不懂了,所以老老实实记录一下 WOE 的来由。

  • 阿里云ACK网络关系

    之前用阿里云的托管版 K8S(即 ACK),却一直不知道一个请求是怎么进入 pod 的。以前的项目是非容器化的,直接一条 DNS 记录指向 EC2 上的 Nginx,再用 Nginx 转发到背后的 Application。

  • Debug Rails in VS Code (Ruby 3)

    本来没有什么好说的,直到自己一直用的vscode-ruby被标记为归档了,然后 Ruby 3.1 上好像用不了这个插件了。搜了一圈,发现 2021 年发布了一个新的插件。

  • GreaseMonkey script + React

    突然来了一个需求,需要修改某个页面,做一个 Demo。如果是单纯做 PPT,简单修改 HTML 元素,调整 CSS 即可。如果需要进一步,需要录制视频,可能需要搭一个 app。我在想,如果用 GreaseMonkey 脚本,加上已经打包好的 React,是不是可以介于两者之间呢?

  • Postgres中的full text search

    文章源于 https://xata.io/blog/postgres-full-text-search-engine

  • 简单实现表血缘图

    在 ETL 过程中,我们时常需要知道这些数据是从哪些表的哪个字段来的。我们可以写一个文档,但文档需要时刻维护。如果是用一些 ETL 工具,可是直接画出这些关系,即数据血缘。在我的项目中,由于是自己造轮子,所以需要自己画数据血缘,如下图所示。

  • Spark中的DataFrame和SQL操作

    准备工作

  • Pandas中的性能优化

    最近做了一次 Pandas 的性能优化,对比下来,在小规模的数据集上,Pandas 的性能会比 SQL 更好。当数据量继续上涨,SQL 会更好些。如果数据到了几百 GB,甚至 TB 级别,目前看只能够用 Spark 了。

  • Postgres插件pglogical

    背景

  • Postgres开启Logical Replication

    Postgres有Physical replication和Logical replication。Logical replication有个好处就是可以很直观地看到已经提交的SQL语句,用来实现CDC(Change Data Capture)。

  • 小爱音箱+ChatGPT

    现有方案

  • Deep Racer中用到的分析工具

    主要文章

  • Python中的继承链

    Python说是多继承,但实际上还是有一个调用顺序,看上去还是单继承。下面的难点就是继承链上C是在B的前面,然后A是在C前面。所以才会出现,先进入C,再进入B,最后是A。

  • 通过Airflow调度Sagemaker实现ML pipeline

    Sagemaker有自己的pipeline,但是我很不喜欢,如果实现起来,就等于我在Airflow的DAG里面还要嵌套一个dag,查看日志等都不方便。不过我们可以把他们拍平,都放到Airflow里面来实现。

  • Redshift中为什么没有多个排序键

    Redshift 是亚马逊提供的列式存储数据库。和传统的关系型数据库不同,Redshift主要是列式存储,应用场景主要是OLAP。相对于OLTP,应用要求快速定位到某一条记录,OLAP更多是数据的聚合,或者是数仓结构(相对较少的join,读取指定范围内的数据而不是单条数据)。

  • Front Engineering Workshop: CSS skeleton loading animation

    思路是,在元素的后面添加一个::after 元素,这个元素添加线性渐变,然后在通过keyframesanimation做个动态移动。

  • Github Action to upload Aliyun OSS

    通过Github Action上传OSS。需要注意的是-r -f需要写在末尾,否则会有一些莫可名状的行为。

  • Google colab + Stable Diffusion

    薅谷歌的羊毛来AIGC

  • Using rclone to convert FTP to WebDav

    入手了群辉 220+,把照片,电影都迁移了过去,还特意开通了百度云盘,用 Cloud Sync 把百度盘里面的东西都扒光清空了。但自己还有一个问题,就是如何把自己的照片做冷备份。

  • async in python/javascript/golang/ruby

    最近在看 Golang,看到了协程调度器的时候,突然想起 Javascript 的 event loop,觉得把这些东西对比起来的时候,真是有趣。顺手把 Python 的asyncio也看了一遍,发现在并发上面,Golang真的是炸天的存在。

  • 博客的新姿势 Ghost + Gatsby

    这篇文章是基于Ghost+Gatsby写的。

  • Airflow quick start

    What’s Airflow

  • Migrate from webpacker to jsbundling-rails(esbuild)

    Install jsbunding-rails

  • Express SSO with passport-saml

    添加express-session, passport, passport-saml

  • 用nextjs+express展示k8s集群的pods和环境变量

    https://medium.com/bb-tutorials-and-thoughts/how-to-develop-and-build-next-js-app-with-nodejs-backend-7ff91841bd3

  • Ruby: #dup vs #clone

    Ruby中dupclone的区别只有一点,即clone会复制singleton class和维持fronze状态。其实clone是原对象的一个复制,而dup是通过原对象的类重新创建出来的一个新的对象。

  • Postgresql中主键ID不连续

    Postgresql中主键ID可能是不连续,原本是为了增加并发性,但这样的话,会导致ID不连续的问题。参见这里

  • Things about Ruby Memory

    从Ruby的内存碎片化说起

  • Stop iteration for AWN.async

    自己在用awesome-notification作为自己项目的notification,但是遇到一个问题。在循环中想要通过onReject来中断循环,但是发现不可行。原因是代码中在处理onReject的时候,返回的其实是一个promise,即下一个循环开始以后,才会回来执行onReject。这样就导致没法中断下一个循环。

  • 通过Lambda捕获S3的增量文件

    1. 创建两个 buckets ‘pzhong-test-bucket’ and ‘pzhong-incremental-bucket’
    2. 创建能够访问两个 buckets 的 policy

  • ActiveRecord Cache

    ActiveRecord Cache

  • SQL Server | MySQL | Postgresql

    From SQL Server, MySQL & Postgresql

  • Check if MYSQL connection is using SSL

    最近几天发现bitbucket上面的pipeline失败了,后来发现是因为上周JDK 8升级到292,禁用了TLSv1.0 和 TLSv1.1. 将pipeline的版本强制回滚到openjdk:8u282-jdk以后,暂时可以用了. 进而引出一些关于MYSQL SSL的问题.

  • mysql locks analysis

    Case One

  • AC-86U+FRP+FTP

    好不容易有了内网穿透,顺带成功搭上FTP,结果速度感人,只有100KB,回头一看,自己的VPS就1M的带宽,搞个铲铲。但Anyway,还是勉强可以用了。

  • gpg快速入门

    GPG可以用来加密文件,或者git commit,属于非对称加密。

  • Linux常用命令

    awk

  • 从TCP/IP握手开始说起

    网上已经有很多关于 TCP/IP 协议等内容,比如阮一峰先生的这篇文章就非常的经典。

  • Nightwatch初探

    看到测试组在用ES6的async/await,莫名激动。想看看async/await怎么实现的,试玩一下,觉得没有什么意思。

  • 通过http代理加速MySQL连接

    自己买的是HTTP代理,本地9900开启了HTTP Proxy端口。

  • 通过ssh加速MySQL连接

    公司用亚马逊的EC作为跳板连接MySQL数据库,因为亚马逊服务器在国外,查询一个1M的表都要等300+秒。此外,因为用了跳板,你没法在Terminal中直接连接数据库。接下来,就是要解决这两个问题。

  • github 加速

    分辨需要设置的代理

  • sysbench

    安装sysbench

  • 禁用ssh密码登陆

    自己买了个服务器,老是被人给扫描端口登陆。密码总会被破解的,我打算直接把密码登陆给禁用了,反正ssh可以通过密钥登陆。

  • Vault

    Go语言很火,比如Docker就是用Go语言写的。在之前的测试里面,Go的性能快追上C了。

  • memcached

    Docker-compose

  • mysql_config_editor快速设置

    不想每次连接mysql数据库的时候都输入密码,可以通过这种方式提前配置好,直接命令行连接。

  • Prevent Mac from sleeping

    来点咖啡因

  • MySQL notes

    From SQL Server To MySQL

  • MySQL is *really* slow

    准备

  • using JQuery with webpacker in Rails 6

    Rails升级到6以后引入了webpack,个人觉得对纯后端开发来说,真的实在太恶心了。但是,你们不是叫着满天飞的全局变量不好么?

  • 指数基金

    且慢12.16开了一堂直播课,介绍了指数基金。下面是一些笔记。

  • Build Jenkins on Docker, install rvm and test pipeline

    原生的Jenkins镜像里面没有rvm,虽然说有rvm插件,但是依旧不好用,而且好几年没有maintain,也不知道现在还有人用没有。基于Jenkins的centos7镜像,安装rvm,并安装Ruby 2.6.6。版本号可以根据自己的需求改。

  • ES6中的继承和Mixin

    ES6终于引入了class这样的关键字,即使是语法糖,至少能够让其他编程语言的程序员不会觉得那么突兀了。习惯了Ruby的继承链,总会习惯性的问,这个类的parent是谁?方法是怎么顺着继承链查找的?

  • ES6中的继发和并发

    严格来说,由于JavaScript是单线程,所以没有并发。有类似并发操作的,那就是协程。ES6中有async和await,用它们来实现异步操作,简直很爽。但是,并不是用了async就可以并发,或者接近并发了。一般有两种方式可以让他们“并发”。

  • 一千万个整数计数

    要求

    有10,000,000个100以内的整数,求某个数字出现的次数。

  • 动态规划之记录转移过程

    动态规划一般是处理在限制条件下(背包总重量)能够最多能够拿多少东西的问题。在这个基础上,又可以扩展成最大价值是多少,最大价值具体为哪些物品,物品附带子物品的情况。

  • 调整华硕路由AiMesh的无线功率

    用AC86U和AC66U-B1组成了AiMesh,这样整个房间5G都是满格的。不过有一点,就是无法调整子节点的功率。华硕这点居然不是自动同步过去的,比较恶心。好在能够ssh上去,就可以调整功率了。

  • 修改Host屏蔽MiBox广告

    越来越喜欢华硕路由了。

  • 从分表分库说起

    单库单表

  • Redis

    安装

  • Migrate from DelayedJob to Sidekiq

    Steps

  • Scope in Rails

    Table of Contents

  • Rails中的设计模式

    观察者模式

    Rails之前有Observer,后来被单独抽离到rails-observer gem中去了。和callback比,observer一般处理model职责之外的行为,比如给用户发邮件。callback更加倾向于处理model职责内的行为,比如验证,默认值等。在我看来,有点像是消息队列,observer订阅/注册某个主题,主题推送通知。此外,观察者模式相对比callback,解耦方面更好些。

  • Rails的includes和joins

    很老的话题了,再看看Rails 5.2中的behavior吧。

  • 数据结构

    Table of Contents

  • Python中的元编程

    习惯了Ruby,总希望能够在其他语言里面找到同样的身影。比如,通过method_missing去处理没有定义的方法,或者用define_methodclass_eval等去动态定义方法,抑或者用included, prepended, extended这些方法增加方法。

  • 各个版本的Docker镜像

    Full offcial image

    基于最新的Debian操作系统,默认的选择。

  • Rails为什么你需要Nginx

    一般我们都会用一个Web Server,放在Application Server(puma, thin, unicorn)等前面。用Nginx,可以满足下面这些条件:

  • 给Rails镜像瘦身

    一直以来,Rails的docker镜像都很庞大。单纯Ruby的官方镜像都800多MB,而alpine版本的Ruby就小了很多,才50多MB。基于这个版本build的Rails镜像将会小很多,不过还是没有Golang build出来的可执行文件小。

  • singleton_class in Ruby

    Singleton Class 元类

    元类其实也是一个Class,在《Ruby原理剖析》里面,元类和类的关系如下图。

  • Data Warehouse概念

    数据仓库 Data Warehouse

  • 常见的浏览器安全防御

  • Authenticity_token & csrf_token in Rails 5

    Table of Contents

  • Using cache to build docker image if Gemfile is not changed

    如果Gemfile没有改动,我们可以使用warm cache,而不是每次都需要重新build。这里的一个trick就是需要先添加Gemfile,再bundle install, 而不是先ADD . $APP_HOME,再bundle install。因为通常代码会有改动,一旦有改动,docker就不会使用cache。这种方式在这篇文章里面有详细介绍。

  • From Ruby To Python/Javascript/Go

    Table of Contents

  • Database isolation levels

    数据库有4种隔离级别:Read Uncommited, Read Committed, Repeatable Read, Serializable.

  • 光荣与梦想 - 你所需要的历史

    美国人自己写的书,详细揭露了美国曾经的劣迹。不知历史,对美国一味跪舔,到时候历史一旦重演,自己将一无所有,理想崩塌。

  • MySQL的一次死锁分析

    之前分析过SQL SERVER的死锁,但基本都是基于READ COMMITTED下的死锁。玩得高级点的,就是key lookup lock。最近不幸玩了MySQL,拿原来的理解去尝试分析,结果不对,然后才发现,MySQL的默认隔离级别是REPEATABLE READ。