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
-
简单实现表血缘图
在 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 元素,这个元素添加线性渐变,然后在通过
keyframes
和animation
做个动态移动。 -
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中
dup
和clone
的区别只有一点,即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的增量文件
- 创建两个 buckets ‘pzhong-test-bucket’ and ‘pzhong-incremental-bucket’
- 创建能够访问两个 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_method
,class_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。