-
2026 前端面试题
CSS 基础 问题 考察范围 等级 参考答案 ----------------------------------------------------------------------------------------- -------------------------------------…
-
思考 思考 请思考
在 AI 编码助手满天飞的今天,我们敲代码的速度前所未有地快。但你有没有发现,有时候代码跑得越快,脑子反而越跟不上?这个是之前 AI 认知债里面提到的观点,但我最近发现了一些相关的地方,没有看见的地方。 以前开发软件本来就慢,人们习惯了把“思考”和“写代码”混为一谈,因为要主动思考代码如何写,这是一…
-
上下文之战
00 AI 编程风起 ChatGPT 刚出来的时候,大家都被震惊了,感觉自己要被 AI 替代了,大家都疯狂地研究怎么写提示词,怎么用 AI 来提高效率。我也不例外,开始和 ChatGPT 聊天,贪婪地学着新的知识。和 ChatGPT 聊代码,然后把代码复制到自己的项目里面去改改再用,乐此不疲。与此同…
-
从AI编程里面学到的
近一年来,自己都在用Cursor和Claude Code写代码,最近又在用Superpowers尝试一把梭哈。最近读了一篇关于AI编程的文章Jsse: A JavaScript Engine Built by an Agent的时候,突然发现里面的Lesson learned和自己平时的碎片化的思考…
-
Dokploy 快速入门
习惯了使用Kubernetes和Docker镜像,走到哪里都想用Docker镜像部署应用。真的是印证了那句话,“手里拿着锤子,看什么都是钉子”。 去年尝试用Nomad部署应用,但后来发现自己很多时候都不需要多个机子,其实都只有一台机子,就索性用了Docker Compose来部署应用。但Docker…
-
抛弃Tailwind, 用纯CSS?
最近我读了一篇文章,解读了 37signals 的新产品 Fizzy 的 CSS 架构。看完后我深有感触:他们竟然抛弃了 Tailwind,完全拥抱了纯 CSS(Vanilla CSS)。 在前端领域,我们经常开玩笑说“技术就是个圈”,但仔细拆解这十几年的技术演进,你会发现这其实是一个螺旋上升的过程…
-
孜孜不倦 静待花开
最近我读了徐宥(Eric Xu)的一篇文章:《AI Codes Retrospective》。作为一名前线敲代码的开发者,这篇文章里关于 Ilya Sutskever 的一段小故事让我深有感触。它就像是帮我 到了 AI 发展早期的那个混乱分支,让我彻底放下了对“天才”的神话滤镜。 1. 什么是这篇“…
-
AI cognitive debt
代码即债务。 随着需求更迭与技术演进,债务会随时间不断堆积。而 AI 的出现,似乎给这笔债加了杠杆:开发者沉溺于“快速交付”带来的快感,却忽视了对逻辑的深层理解;审核者在海量的 AI 产出面前疲于奔命,在项目压力下被迫妥协。结果显而易见——技术债务正以前所未有的速度疯狂扩张。 周五读完《Cognit…
-
在Cloudflare上免费打造零成本的 Scrum Poker
作为开发者,我们每两周都要进行一次 Sprint Planning。每次估点时,找一个免费、好用、不用注册的 Scrum Poker 工具简直像是在寻宝。市面上的工具要么广告满天飞,要么强制你注册账号。 我之前用过 poker4fun,体验不错,但我决定用现代技术栈自己造一个轮子,并且一分钱都不花。…
-
Migrate from ESLint/Prettier to Biome
什么是 Biome? 基于 Rust,实现 Prettier 一样的 format,和 ESLint 一样的代码检查。 安装 Biome Format Lint 集成 VS Code 安装 Biome 插件即可 配置 创建配置文件 从 Prettier 和 ESLint 迁移 PreCommit R…
-
如何用AI做code review
Cursor 有一篇很棒的文章介绍了如何做Code Review,虽然我对于提示词工程不是很感兴趣,但还是决定试一试,因为Code Review占据了我相当多的时间,而我又不希望自己成为一个Baby sister一样去教别人101课程。 创建 bb cli 因为使用的是Bitbucket 作为代码仓…
-
Superpowers 是如何工作的
我最近在折腾 AI 编程助手的工程化落地,遇到了一个非常有意思的框架:Superpowers。 1. 什么是 Superpowers? 简单来说,Superpowers 是一个为 AI 编程助手(如 Claude Code、Cursor、Gemini)设计的智能体技能框架与软件开发方法论。 如果把原…
-
排查微信小程序RID
小程序上遇到一个报错,错误码是 40029,同时给了一个 RID。 顺手一查,发现还可以通过 RID 反查当初的请求和一些信息,用于 debug。 微信开发了一个工具,直接访问 https://developers.weixin.qq.com/console/devtools/debug就可以查自己…
-
TUN 模式是如何工作的:网络流量的“黑洞”
你是否遇到过这样的情况:明明已经开启了代理软件,但终端里的 依然连不上 GitHub,Docker 拉取镜像还是慢如蜗牛,或者某些游戏根本无法联机? 为了解决这些“漏网之鱼”,我们通常会开启 Clash 等代理工具的 TUN 模式。今天,我们就来扒一扒 TUN 模式到底是什么,以及它是如何在底层接管…
-
React useMemo
为什么 和 能解决重复渲染问题 核心问题:React 默认会重复渲染 React 的默认行为非常简单:只要组件的状态发生改变,它及其所有子组件都会重新渲染,无论子组件的 props 是否真的发生了变化。 这种默认机制是合理的——React 无法在不执行子组件的情况下知道其输出是否会改变。但对于高开销…
-
微信小程序上传文件到阿里云OSS
在微信小程序开发中,将文件上传到阿里云 OSS 是一项常见需求。最安全、高效的方案是直传方案:服务端不直接中转文件,而是计算并颁发一个“签名通行证”,小程序凭借该签名直接将文件安全地上传至 OSS。 本文将带你快速梳理微信小程序直传阿里云 OSS 的核心流程。 1. 服务端:生成并颁发上传签名 为了…
-
一种实用的混合型Git分支策略
在现代软件开发中,选择合适的 Git 分支策略对于团队的协作效率和交付质量至关重要。经典的 Git Flow 虽然严谨,但往往显得过于繁重;而纯粹的 GitHub Flow 或主干开发(Trunk-Based Development)在面对复杂的测试和发布窗口管控时,又可能显得有些力不从心。 最近,…
-
Vault 中使用 AppRole
很久之前就接触过 HashiCorp Vault,最近在项目中需要使用 Vault 来安全地保存一些敏感配置和 Token。对于这种机器对机器(Machine-to-Machine)的场景,最推荐的认证方式就是 AppRole。 本文将演示如何在 Vault 中配置并使用 AppRole 进行身份验…
-
Argo Workflow 快速入门
Argo 家除了大名鼎鼎的 ArgoCD,还有一个非常强大的产品叫 Argo Workflow。我知道这个产品,其实是因为 Kubeflow(一款基于 Kubernetes 的机器学习平台)。后来发现 Kubeflow Pipeline 的底层编排引擎其实就是 Argo Workflow,这极大引起…
-
Bruno 快速入门
在 API 开发和测试的过程中,多应用、多环境的鉴权管理往往是一个令人头疼的问题。频繁地复制粘贴 Token 不仅低效,还容易出错;而将敏感凭证(如 Client Secret 或 Password)直接写在脚本或环境变量中,又会带来严重的安全隐患(例如被意外提交到 Git 仓库)。 本文将介绍一个…
-
微信小程序人脸检测
在微信小程序的开发中,如果我们需要实现人脸识别、活体检测或是基于人脸的互动玩法,微信官方提供的 VisionKit(视觉能力) 是一个非常强大且便捷的工具。它内置了高效的人脸检测模型,能够实时返回包含 106 个关键点的人脸数据。 本文将结合实际代码,带大家了解如何在 Taro 框架下利用微信小程序…
-
微信小程序实现美图秀秀拼图功能
最近在使用美图秀秀小程序时,发现它的四宫格拼图功能非常实用。出于对技术的好奇,我仔细琢磨了一下背后的原理,并基于 Taro 自己动手实现了一套类似的功能。本文将分享在微信小程序中实现拼图功能的核心思路和代码。 一、基础版:固定位置的静态拼图 静态拼图的实现相对简单:用户选择好图片后,按顺序存入数组,…
-
Prefect 笔记
Prefect, not perfect. 安装 Prefect 非常简单,习惯了 Docker 拉起的我,这次是直接本地拉起的,因为需要 cli 工具,所以直接本地运行了。 启动 Prefect API server,这个 Server 主要是前端,API 使用,并不会真实地执行你的 flow。 …
-
如何创建Mattermost Bot
首先去 System Console Integrations Bot Accounts 开启创建机器人。 然后去 Integration Bot Accounts 下面创建机器人。 就会生成一个机器人的 Token。 回到一个 Team,添加这个机器人。 发送消息 用下面的代码,就可以往一个 Ch…
-
本地搭建Mattermost
记录如何本地容器化搭建 Mattermost 并配置 SSL 证书。 1. 创建 Posgres database https://docs.mattermost.com/deployment-guide/server/preparations.html#database-preparation 2…
-
视觉化学习CNN
学习 https://poloclub.github.io/cnn-explainer/ 的笔记
-
什么是Stable Diffusion
https://poloclub.github.io/diffusion-explainer/
-
Golang往Kafka里面塞Avro消息
项目用到了 Kafka,我想要一个定时任务,往 Kafka 里面塞 Avro 格式的消息。 首先,定义一下配置和数据类型 然后从环境变量或者.env 文件从读取环境变量 接着就是连接 Postgres 数据库,查询需要处理的 userId. 从 Schema registry 里面获取 Schema…
-
微信小程序里面如何生成海报
需求是,小程序里面需要给用户上传的图片配上文字,最下面再打上我们自己的 logo。 步骤基本是 1. 先创建一个 Canvas 2. 然后是绘制 Canvas 依次把上传的图片缩放到 Canvas 指定的大小区域。注意 Canvas 是以左上为起点(0, 0),然后开始绘制。 至于图片的清晰度,需要…
-
马丁大叔的绞杀榕
马丁大叔写了一篇绞杀榕,表示渐进式地改造遗留系统的方法,而不是直接推倒重构。 对于直接推倒重构,大部分都是痛苦的。我看到过成功的,但是这个“成功”还是打折的,和当初的目标简直天壤之别。 与这种渐进式改造类似的,还有微服务。根据康威定律,组织架构决定了系统架构。换句话,一个团队非要拆成 7、8 个微服…
-
Kafka 101
现在 Kafka 不需要 Zookeeper 了,直接容器拉起一个 Kafka. list Topic create topic describe topic delete topic write message list consumer consume messages check offset…
-
在Golang中使用Redis的Stream
Reids 中有一个功能叫 Stream,可以实现类似于 Kafka 的功能,即消息可以持久化,有消费组且通过 ACK 确认消费成功。 快速写一段代码,创建一个 stream 和消费组 。然后消费组 就开始消费消息。 通过 就可以往 stream 里面塞消息了。然后脚本里面的消费者就开始消费消息,并…
-
微信小程序-卡地亚首页效果
设计师不知道怎么找到了卡地亚小程序,说我就要这个效果。。。 这效果妥妥地勾起了我的好奇心。。。 首先是最上面的导航栏,明显的是一个 fixed postion 直接置顶的效果。所以这个都还比较简单。 还可以看到,当在第一页的时候,是一个透明状态,第二页的时候,是白底。所以根据添加不同的 css,以及…
-
使用bun + rsbuild构建React项目
之前用过Vite创建一个React项目,后来又遇到了rsbuild,赶紧记录一下。尝试用Cursor初始化一个项目,在引入TailwindCSS的时候就翻车了。 Rsbuild 初始化rsbuild项目 引入TailwindCSS 修改文件 修改文件 修改文件 再次运行服务器 引入Redux 在团队…
-
如何使用uv作为python项目的包管理工具
在项目的包管理上,我觉得没有一个编程语言会比 Python 更让人抓狂的。 - 有一个 requirements.txt 文件,却没有一个好用的,锁定包版本的 requirements.txt.lock 文件,你需要安装或者 - 你可以用去更新 requirements.txt,但却加入了很多项目并…
-
MCP初探
前阵子同事介绍了一下MCP,自己趁有时间了解了一下。 关于MCP,大家就看官网的介绍吧。在我看来,MCP其实解决意图识别的问题,再按照Domain划分成为多个MCP server而已。 搭建MCP server 以MCP server postgres为例,这段代码启动了一个标准输入。 本地执行之后…
-
向量数据库Weaviate
在前面搭建了Ollama之后,我们就可以在本地使用向量数据库,方便计算自然语言的相似度,包括在语义和BM2上。 通过Docker快速搭建Weaviate向量数据库,本身基于Golang编写,镜像只有160M。由于我只需要测试embedding,即把自然语言转换为向量(或者理解为数组),就只用了模块。…
-
本地部署ollama
Ollama 可以在本地运行LLM模型,本身是一个基于Golang的web服务器加上cli,背后通过CGO调用模型的。 启动Ollama,背后实际上启动了一个Gin web server。 拉取镜像 查看下载的镜像 查看内存使用情况 通过curl调用 通过Python调用 或者通过Python的Op…
-
群晖上搭建Docker Registry
我想要在局域网内搭建自己的Docker Registry 搭配群晖的反向代理和证书搭建Docker Registry 我在群晖上跑了Docker Registry,这样本地搭好进行就直接局域网里面推送,然后Mac Mini上就会拉起最新的镜像了。 首先创建cr.ds220plus的记录 然后创建一个…
-
华硕路由器局域网DNS解析
我希望内部局域网里面,通过可以访问到群晖NAS。我用了华硕的官改固件,默认带了jffs。 SSH进入路由器 创建文件,内容为,然后在里添加即可。 解析所有.ds200plus 域名 如果要解析所有.ds220plus域名,就需要创建,内容为即可。 重启生效 运行重启dnsmasq生效改动。 为什么.…
-
Orbstack上搭建NFS服务器
我在NAS上启用了NFS,并且在Mac上成功挂载,倒是没有什么太多的问题。但是在Mac上启动NFS服务器,就遇到了很多问题。 Mac上如何启动NFS Mac上可以通过修改文件来启动NFS,但是文件格式却和Linux的不一样。问ChatGPT,很多时候都是Linux上的语法。 然后启动NFS服务,查看…
-
Squid如何搭建二级代理
我想做一个代理,类似于科学上网,DeepSeek给我推荐。但是,我没有玩过,而且DeepSeek回复的也连续多次把我带到沟里。所谓的AI,如果你会这些,那么就如虎添翼;如果你不会,0到60很快,但是从60到80很可能会翻车。 Proxy 2 首先创建二级代理,修改文件如下。这就暴露一个3128端口,…
-
Kubertnetes如何注入环境变量
需求是需要在Pod里面注入一些环境变量,比如VPC和NAT IP,还有镜像的tag方便health check的时候返回版本号。 确认Kubernetes 支持 Admission Webhook 输出即支持。 创建Webhook application 创建自签证书 注意subj是自己在Kuber…
-
Nomad快速入门
同事介绍了一个轻量型的容器集群解决方案,我快速在自己电脑上搭了一下,记录一下。 因为不能够用Docker desktop for Mac, 用的是Orbstack,因为issue#291,所以我只能够创建3个Linux Machine来实现。 就可以ssh进去这个虚拟机。 首先安装依赖包 加个宿主机…
-
PlayWright快速入门
在上家公司看见过之后,就很久没有碰过测试框架了。最近找了个机会完了一会儿。 安装 执行测试 根据文件中配置的,会扫描文件夹下面的测试文件。 查看报告 失败的时候截图和视频 修改文件,加入下面的配置即可。 UI模式下debug 录制脚本 VS Code 插件 安装Playwright Test for…
-
搭建Allure Report
Allure Report是一个查看测试报告的Web application,我用来和PlayWright集成。 安装 和PlayWright集成 安装 首先生成测试报告,并查看。 保留history 上面步骤生成的测试报告是没有历史信息的,需要在allure generate之前,把历史信息复制过…
-
浏览器上监听键盘操作
这篇算是刷KPI的。写了一个油猴脚本,需要按键ctrl+k唤起,esc退出。
-
如何创建一个Chrome插件
基于Vite和React,可以快速实现一个Chrome的插件。 创建一个Vite 项目 安装package 创建manifest.json 文件 这个是Chrome extension用的,里面要声明需要的权限等等配置。 Build package 浏览器加载插件 浏览器中,开启开发者模式,加载刚刚…
-
如何在纯浏览器上进行人脸识别
其实之前已经做过人脸识别的项目了,比如Insightface里面提供了模型以及代码,其指标可以查看Model Zoo。 但是当时的实现是离线模式,也就是离线识别照片,甚至是通过服务器进行人脸对比的。如果需要在浏览器里面进行实时的人脸识别,就需要其他的方案。后来同事推荐Google MediaPipe…
-
如何在Kubernetes上搭建Dify
本文是基于Winson-030 的代码部署的。 创建 Namespace 创建 PV 我用的 PV+OSS 部署的方式 创建 PVC 绑定 PV 部署向量数据库 weaviate 部署 Sandbox 部署 ssrf 部署 API 创建 Worker 创建 Web 创建 Nginx 创建 Ingre…
-
NLP如何解析问答对里面的答案
对于Q&A类的问题,Bert显得就像一个差等生,几乎不知道我问的是什么。那如何解析问答对里面的答案呢? Roberta 在Hugging Face的QA任务里面,排名第一的模型是一个基于Bert的模型。它可以做到简单的Q&A。 是源自RoBERTa: A Robustly Optimized BER…
-
搭了一个Kubernetes Dashboard
我搭了一个Kubernetes Dashboard。 Problem 无法快速查看多个Kubernetes集群的Deployment版本号,以及环境变量。 虽然我们可以用通过切换集群的方式查看版本,但是这就意味着我需要切换多个集群。这样非常重复,繁琐。 思路 网页 V.S. 脚本 最简单的方法就是自…
-
如何将Pytorch模型转换为ONNX格式
我将Bert模型训练出来之后,又将其容器化,但是遇到新的问题是镜像太大。 刚开始,我的如下,打出来的镜像有近8个G。 将模型转换为ONNX格式之后,镜像缩小为2个G。去掉不需要的torch和transformers包,再加入onnx即可。 什么是ONNX 是专门为了训练模型而生的,但是模型的部署却不…
-
JWT的验证
一般 JWT 是服务器签发,secret 是由服务器保存和验证的,所以一般客户端不需要验证 JWT 的签名是否是伪造的。同样的,对于服务器来说,只需要简单的签名即可,比如 HS256 算法,并不需要对称或者非对称加密。 在微服务架构中,我们一般是由 API gateway 统一验证请求中的 JWT …
-
打造个人助理-3
Bert 和 LLM 都是基于 Transformer,那什么是 Transformer?什么是 Bert? https://jalammar.github.io/illustrated-bert/ https://jalammar.github.io/illustrated-transformer…
-
打造个人助理-2
借着上次的机会,自己打造了一个个人版的小爱同学,自己对 Bert 也感了兴趣。 那为什么是 Bert,而不用 LLM? NLP 的历史 每个人对于 Transformer 和 Bert 的解读都不一样,3Blue1Brown 居然都还有视频来解释什么是 transformer。但如果是现在去回顾历史…
-
打造个人助理-1
最近自己做了一个个人版的“小爱同学”,能够进行 NLP 处理,并进行对应的操作。之前做过一个版本,是依托 ChatGPT 的 API 做的聊天功能,但这次,我们可以让它干活了! 比如,我提问"what's the value of jdbcdatabaseurl for the deployment…
-
使用bfg清理git repo
如果你需要从一个 repo 里面,彻底清理掉一个大文件、密码文件,你可以考虑使用 bfg。 我有一个同事,误把文件夹提交到了 git repo,虽然可以再提交一个 commit 清理掉这个文件夹,但是整个历史里面还保留这个文件,导致 git history 异常庞大。 又比如,我的另外一个同事不小心…
-
如何从SFDC拉取大量数据
通常从 Salesforce 拉取数据,我们第一反应就是用包去搞定所有的事情,但是有它的局限性: 1. 不适合请求大量数据。restforce 只支持同步操作,意味着你要一直等待,直到结果返回。当数据量比较小的时候,没有什么问题,但是当请求数据量大的时候,可能会很慢很慢。 2. 对异常编码的处理。r…
-
kaggle刷题之时间序列
- 时间序列预测 - 时间序列的性能评估 - 时间序列的特征 - 时间索引特征 - 滞后特征 - 趋势 - 预测未来 - 高阶 order - 季节性 - 季节规律图 - 周期图 - 结合大趋势 - 依赖过去的特征 - 自相关函数 ACF - 部分相关性函数 PACF - 截尾和拖尾 - 残差 - …
-
kaggle刷题之房价预测
房价预测和之前的题就不一样了,算是回归问题。插一句,逻辑回归不是回归模型,是分类模型,因为它出来的结果是 0 和 1 的分类。 数据 因为没有什么用,可以 drop 掉。 分析数据 将数据分为数字型和类别型两组。 类别型数据 空值处理 类别型数据有空值需要处理 再次查看数据,可以发现类别型的数据 u…
-
如何做人脸识别
下载arcfaceonnx.py,然后执行下面的代码就可以算出两个照片的相似度,进而判断两者是不是同一个人。 加载模型 加载图片 人脸检测 和前面的文章一样,返回的人脸框和五个关键点。 获取图片里面人脸照片的特征 方法做了两件事: 1. 根据人脸的 5 个关键点位进行对齐和拉伸,返回的是(112, …
-
一个最基本的Machine learning pipeline
上图是一个精简版的 Machine Learning Pipeline。 Data 数据 这里的数据一般是指清洗好的数据,可能已经有了标签,也有可能需要后续的步骤去计算出标签。 Labeller 打标 有些数据是没有标签,还需要额外的逻辑去计算出标签。 Splitter 拆分 将数据拆分成为训练集和…
-
如何做人脸眼部区域打码
主流的人脸检测技术几乎已经相当成熟了,刷脸系统就是一个常见的应用场景。 Insightface是一个开源的人脸分析项目。 如何人脸识别 代码仓库里面有一个scrfd.py文件,我们可以直接拿来使用,就可以识别人脸和确定关键点位。 下载人脸识别模型 在页面找到一个模型,比如模型,下载并解压出来。 下载…
-
Kaggle刷题之泰坦尼克号宇宙飞船
继续自己的刷题之旅 - Spaceship Titanic 题目 和泰坦尼克号类似,这次是飞船上的人被随机的传送走了,需要预测哪些被传送了。 查看数据 .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe…
-
Kubernetes CA_KEY_TOO_SMALL错误
阿里云上的老集群会遇到 CAKEYTOOSMALL 错误,原因是本地的里面,客户端的证书链有问题,其中一个证书过短。 就可以看到类似下面的内容,可以看到证书是通过 RSA 1024bit 加密的。 这样的证书会导致 Python 包[kubernetes-client][1]连不上集群。虽然可以通过…
-
基于 Airflow+Kubernetes 搭建 ML pipeline
- 创建 service account - Build OSS image - Build ML image - 创建 Airflow connection - 架构图 - 创建 KubernetesPodOperator 创建 service account 首先需要创建一个 service a…
-
如何获取Kubernetes的RABC verbs
我在创建 Kubernetes Role,但是不知道完整 verbs 列表。其实,Kubernetes API 就提供这个清单。 转发 Kubernetes API 查看所有资源/api/v1 和 /apis
-
Kaggle刷题之泰坦尼克号
同事推荐了一个 ML 刷题的网站,正好可以拿来练手。第一道题是预测泰坦尼克号上的幸存者。 .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: …
-
如何学习
最近自己多了一句口头禅“不亲自动手,都是多巴胺”,主要意思是强调学习的时候一定要动手,要有产出,否则就是自嗨,过几天就忘记了。同时,我也想整理一下之前看到的相关文章。 如何学习 小lin说里面有一期视频,介绍了如何学习。 1. 首先要了解新领域的知识框架,比死扣一个知识点好多了。比如有人说,我要学 …
-
Kubernetes ClusterIP vs NodePort vs LoadBalancer vs Ingress
Kubernetes Service Kubernetes 里面为什么要有 service 因为 Pod 是动态伸缩的,所以它们的 IP 是不固定的,为了解决这个问题,我们需要在 Pod 前面加个代理,service 就出现了。对于 Ingress 而言,service 的 IP 是一致不变的,所以…
-
如何在阿里云上搭建Kubeflow
什么是 Kubeflow [Kubeflow][1] 是 Google 开源的一个基于 Kubernetes 的 ML workflow 平台,集成了很多机器学习工具,比如 Jupyterlab,pipeline 等。 安装 KubeFlow Kubeflow 有一个[官方的文档][2],提示如何在…
-
在Kubernetes上搭建Selenium Grid
本文是基于 Kubernetes[官网的示例][1]搭建的,只是重新用 Kustomize 排版了一下。 Selenium Grid Selenium Kustomize 脚本 最后一键拉起 Selenium Grid。 Selenium dashboard 可以通过下面的命令,转发端口 4444,…
-
如何通过Argo Rollouts实现金丝雀部署(2)
继上一步实现了 Argo Rollout 切分流量搭配金丝雀部署之后,我打算引入自动化测试进行版本验证,当自动化验证通过之后,则自动部署新的版本。 Selenium 测试脚本 创建一个 Selenium 的测试脚本, 再 build 一个 Docker 镜像 创建验证模版 首先创建一个 Analys…
-
如何通过Argo Rollouts实现金丝雀部署(1)
Argo 家简直是在 Kubernetes 上实现 GitOps 的大杀器,本来 ArgoCD 搭配 Kubernetes 原生的 Rollout 就够用了,但不行,还要实践蓝绿部署,金丝雀部署。 什么是 Rollouts 其实和 Deployment 类似,也是控制 Pod 的,看具体的 yaml…
-
http连接断了之后,服务器怎么办
和同事遇到一个问题,发现 gateway 报超时错误。但是查看应用的日志,却是一切正常。但是我记得之前遇到过因为超时,无法返回日志的情况。 Puma 是如何工作的 Puma 官网有文档,以及视频介绍 Puma 是如何工作的。Puma 会有多个进程,每个进程有多个线程,监听 3000 端口。 当有请求…
-
如何理解Puma的并行运行
Puma 是一个基于 rack 的 web server,在 Readme 中,它提到即使有 GVL 的存在,它还是能够实现 IO waiting 方面的 parallel。为什么? 多进程 https://www.speedshop.co/2020/05/11/the-ruby-gvl-and-s…
-
用ArgoCD实现CD
用 ArgoCD 可以实现基于 Kubernetes 集群的 GitOps CD。 前置条件 1. Kubernetes 集群 2. 安装 kuberctl 并配置好 kubeconfig 安装 ArgoCD 当前为验证环节,所以没有用 HA 部署 ArgoCD。 Port Forward 没有配置…
-
通过阿里云SSO获取的STS token的有效时间
按照阿里云的文档, 可以通过来获取 SSO 角色的临时 STS token。但是发现这个 Token 的时间特别长,不是 assumeRole文档里面提到的 1 个小时,虽然两者都可以换取到 STS token。 其实,通过 SSO 获取的 STS token 有效时间,是在界面可以看到的。 但在调…
-
NextAuth与Azure AD集成
最近在做前后端分离,常见的有两种方案,一个是 bundle 打包成 js 文件,再嵌入 web 的某个页面;另外一个前端单独起一个服务器,用前端来负责页面和 SSO 相关的功能,后端只管提供 API 数据。这次用的是第二种方式,因为我想把后端作为纯的 API 服务器。 NextAuth 安装 Nex…
-
用Terraform在阿里云上搭建托管版Kubernetes
继上次用 Terraform 把环境对齐之后,终于可以开始用 Terraform 在阿里云上搭建 Kubernetes 了。不过为了方便理解,还是从零开始搭建。 VPC 第一件事情肯定是指定 VPC 网段。 对应的 VPC module 交换机 VSW 接下来是规划网段,将上面的 VPC 分割成几个…
-
把OSS作为PVC挂载到airflow的日志卷
有人曾说,人的一生不可能踏入同一条河两次,但是,我却可以两次用同样的姿势栽入坑里。用血泪教训告诉你,把 OSS 作为 PVC 挂载到 airflow 的日志卷,这样是不行的... 问题 在之前的测试用,我用创建了 OSS bucket,对应声明了 PVC,再把 PVC 挂载到 Deployment …
-
如何用root用户进入pod
kubectl 不支持用的方式进入 pod,那怎么办呢? 如果是 docker runtime,那可以用,和本地一样进入 Pod。但是 Kubernetes 在 1.23 之后就去掉了 docker,使用 containerd 作为 runtime。而 containerd 的 cli 工具是 cr…
-
如何利用Terraform导入现有Infra
需求是把现有阿里云 Infra 转为 Terraform 代码,方便以后实现 gitops。 创建 RAM 用户 需要先创建一个 RAM 用户,生成 AK/SK。 给用户赋予权限 暂时先给个 Admin 权限 翻了阿里云的官网,也不告诉到底需要啥权限。 安装 Terraform 参见官网doc 查看…
-
用Docker本地运行 Spark
可以利用 Docker,在本地跑 Spark + Postgres。 拉去 Spark 镜像 将 postgresql.jar 复制到镜像里面去 把 spark 跑起来,再把 postgresql.jar 复制进去,打成新的 image。 最后 docker compose up 创建 docker…
-
Kubernetes的若干问题
从问题的角度去理解 Kubernetes Kubernetes 里面的 Pod 是如何通信的 Pod 不是简单的容器,一个 Pod 里面可以跑两个 Container,那这两个 container 是如何通信的呢?看上去好像是一台虚拟机上跑了两个应用而已,但实际上只是一个 container 加入了…
-
Docker容器到底是怎么回事
Docker 容器其实是利用 Linux 的 Namespace 技术,实现了进程,挂载点,网络等隔离,本质上还是一个特殊的进程。这样,在容器里面,只能够看到自己 Namespace 空间里面的进程和资源,比如只能够看到 PID 为 1 的进程。同时,这也意味着,一个容器无法同时跑两个不同的应用(除…
-
如何优雅地编码HTML邮件
常常看见有些设计地很好的邮件,脑补用 HTML 网页就可以简单实现了,等到真的自己去写类似的邮件的时候,才发现邮件真的是一个古老的东西。 你能够想象,上面这样的邮件几乎全部是用 table 拼成的! First thing first 邮件和 HTML 网页不同,不支持很多功能。 1. 不支持 ja…
-
在阿里云ASK部署Airflow KubernetesExecutor
Airflow 的部署上,可以让 airflow scheduler 既当任务派发,又当任务处理。就像下图一样,webserver 只是给用户展示的界面而已,scheduler 就是既要又要。 也可以分布式部署,比如官网介绍的Celery Executor。还有一种就是利用 Kubernetes 创…
-
Graph database Neo4j quick start
本地想搭一个 Neo4j 来学习一下图数据库,但是 Neo4j 的官网老是让我去创建一个云数据库,不是很喜欢留下个人信息,就打算本地起一个 Neo4j。参考官网文章,执行下面的命令就可以启动 Neo4j 数据库了。 浏览器访问 http://localhost:7474/browser/,账号密码,…
-
通过kubeadm搭建kubernetes
最近在《深入剖析 Kubernetes》,顺手搭建一个 K8S。 搭建 EC2 首先起 3 台 EC2,如下图所示。 1. 新建一个 VPC。 2. 两个子网,public 子网连接 IGW,可以访问互联网,private 子网可以通过 NAT 访问互联网。 3. 开启 ssh,加上 keypair…
-
如何限制Docker的资源分配
我们有一些自动化的机子在跑 Docker,最近总是发现这些机子的 CPU 占用过高,导致这些机子直接掉线,甚至直接都没法 SSH 上去。由此,我们尝试去限制 Docker 的 CPU 分配。 针对 container 如果是针对某个特定的 container,可以用 来限制该容器的资源。你也可以在 …
-
Terraform上允许ICMP协议
在 Terraform 上创建 security group 的时候,允许 TCP 和 UDP 协议都比较直接,但是 ICMP 的时候,就没有那么直接了。如果想要允许 ping,需要按照下面配置。 继续深入 这里的 8 和 0 是来自 https://www.iana.org/assignments…
-
通过Terraform搭建VPC+TGW互通
目标是,在两个 VPC 上搭建两个 EC2,然后通过 TGW 将两个 VPC 打通。 构建 ec2 module 首先创建文件,分别通过参数创建 VPC,并允许 SSH 和 ICMP 协议。再在 VPC 上起一个 EC2。 构建 igw module 加上 igw module 之后,就可以从互联网…
-
SSO、JWT和Oauth2
打算讲个故事,把 SSO,OAUTH,JWT 这些都揉在一起。 1. 2000 年之后,互联网蓬勃发展,小明创建了一个网站 www.xxx.com。因为 HTTP 协议是无状态的,下一次请求我就不知道是谁在请求了,那么用户请求的时候就需要带一个凭证,来维持 session。那个时候,用户一般就是在 …
-
Front Engineering Workshop: 可拖拽对象
实现一个可以拖拽的对象 https://www.redblobgames.com/making-of/draggable/#pointer-events Drag Me function makeDraggable(state, el) { function start(event) { conso…
-
Front Engineering Workshop: 从零开始build一个进度环
需求是构建一个上传进度的圆圈。 圆饼图 首先构建一个圆饼图。 构建一个圆形,然后 构建一个圆饼出来。 内嵌一个圆形 再在中间嵌一个圆形。 50% 动态更新进度 写一段 Javascript 去更新进度 跟踪进度 这里用了阿里云的 OSS 上传文件。 如果单纯上传一个文件,进度可以通过回调函数参数 p…
-
Rails 7 + esbuild + React
基本上和前一篇文章一样,支持剥离了 Stimulus 和 BootStrap,换成了 React+MUI。 再把 Stimulus 相关的全部删掉。 创建 创建
-
Rails 7 + esbuild + BootStrap
创建一个新项目 安装 Stimulus 和 Turbo Rails 并且移除 Gemfile 中的 importmap,turbo-rails。 更新 更新 测试 js build 删除 更新 测试 asset pipeline
-
Front Engineering Workshop: Javascript下载多个文件并打zip包
需求是,连接阿里云的 OSS,批量下载多个文件并打包。 页面上有一个 link,绑定了 click 事件,触发 download 函数。 先用防止页面跳转,然后请求获取文件列表的地址。 然后是下载所有的文件。通过可以保证所有文件都下载完成以后,再继续执行下面的语句。 最后是打包 完整代码 Refer…
-
great_expectation 自定义数据集
Great Expectation 是针对数据的验证工具,基于 Python 的一个 package。 数据集 Great Expectation 支持 pandas dataframe, csv, sql,在 Great Expectation 里面叫做 Data Source。数据集可以在 gr…
-
Pandas输出的样式调整
最近有一个需求是要把 Pandas 导出成 Excel,并且调整样式。Pandas 有默认的 Styler,但默认只会影响在 Jupyter Notebook 里面的输出样式,不会影响 Excel(个别样式可以生效)。 https://pandas.pydata.org/docs/reference…
-
计算IV和WOE
半年前做过一个项目,中间涉及到计算 WOE 值,然后自己手撕了一次,过了半年就看不懂了,所以老老实实记录一下 WOE 的来由。 WOE 和 IV IV 指信息量,用来衡量各个特征对标签 y 的预测能力,而计算 IV 是需要 WOE。WOE 是指每个离散值(或者连续值分箱后转换成离散值)的权重。 示例…
-
阿里云ACK网络关系
之前用阿里云的托管版 K8S(即 ACK),却一直不知道一个请求是怎么进入 pod 的。以前的项目是非容器化的,直接一条 DNS 记录指向 EC2 上的 Nginx,再用 Nginx 转发到背后的 Application。 K8S 版本的网络请求会是像下面这个图一样的。 进入 Pod 的请求 假设有…
-
Debug Rails in VS Code (Ruby 3)
本来没有什么好说的,直到自己一直用的vscode-ruby被标记为归档了,然后 Ruby 3.1 上好像用不了这个插件了。搜了一圈,发现 2021 年发布了一个新的插件。 安装 VSCode rdbg Ruby Debugger https://marketplace.visualstudio.co…
-
GreaseMonkey script + React
突然来了一个需求,需要修改某个页面,做一个 Demo。如果是单纯做 PPT,简单修改 HTML 元素,调整 CSS 即可。如果需要进一步,需要录制视频,可能需要搭一个 app。我在想,如果用 GreaseMonkey 脚本,加上已经打包好的 React,是不是可以介于两者之间呢? 创建 React …
-
Postgres中的full text search
文章源于 https://xata.io/blog/postgres-full-text-search-engine 下载数据文件 https://www.kaggle.com/datasets/jrobischon/wikipedia-movie-plots 创建表 导入数据 tsvector 用…
-
简单实现表血缘图
在 ETL 过程中,我们时常需要知道这些数据是从哪些表的哪个字段来的。我们可以写一个文档,但文档需要时刻维护。如果是用一些 ETL 工具,可是直接画出这些关系,即数据血缘。在我的项目中,由于是自己造轮子,所以需要自己画数据血缘,如下图所示。 自己写了一段代码,主要是通过解析 sql 语句,然后在用 …
-
Spark中的DataFrame和SQL操作
准备工作 SparkSQL 的操作 DataFrame 的操作 输出 建议 DataFrame 和 SQL 都提供更为高级的 API 以及更好的优化去操作数据,他们都是声明式语言,告诉 Spark 我要什么,而不是具体的怎么做,适合并行操作。而之前的 RDD,则需要使用等类似的聚合方法去操作数据,是…
-
Pandas中的性能优化
最近做了一次 Pandas 的性能优化,对比下来,在小规模的数据集上,Pandas 的性能会比 SQL 更好。当数据量继续上涨,SQL 会更好些。如果数据到了几百 GB,甚至 TB 级别,目前看只能够用 Spark 了。 Pandas 使用 Pandas 的时候,建议将数据集当做一个整体来操作,这样…
-
Postgres插件pglogical
背景 我们需要在Postgres开启CDC功能,但是standby server上不能够开始logical replication,需要等到PG 16。目前在PG 14上,我们只能够在主库上开启logical replication,这样才可以实现CDC。 准备工作 需要两台数据库。我直接用Post…
-
Postgres开启Logical Replication
Postgres有Physical replication和Logical replication。Logical replication有个好处就是可以很直观地看到已经提交的SQL语句,用来实现CDC(Change Data Capture)。 测试脚本 输出
-
小爱音箱+ChatGPT
现有方案 现在网络上有两个方案,一个是基于Home Assistant + MQTT + NodeRed 来实现的,比如https://bxk64web49.feishu.cn/docx/ 。另外一个就是轮询小米的API,然后在通过tts播放结果,比如https://github.com/yihon…
-
Deep Racer中用到的分析工具
主要文章 https://towardsdatascience.com/an-advanced-guide-to-aws-deepracer-2b462c37eea#::text=The%20main%20objective%20when%20coding,episode%20should%20re…
-
Python中的继承链
Python说是多继承,但实际上还是有一个调用顺序,看上去还是单继承。下面的难点就是继承链上C是在B的前面,然后A是在C前面。所以才会出现,先进入C,再进入B,最后是A。 输入是
-
通过Airflow调度Sagemaker实现ML pipeline
Sagemaker有自己的pipeline,但是我很不喜欢,如果实现起来,就等于我在Airflow的DAG里面还要嵌套一个dag,查看日志等都不方便。不过我们可以把他们拍平,都放到Airflow里面来实现。 下面这段代码就是通过Airflow调度Athena和Sagemaker。 通过配置文件来调度…
-
Redshift中为什么没有多个排序键
Redshift 是亚马逊提供的列式存储数据库。和传统的关系型数据库不同,Redshift主要是列式存储,应用场景主要是OLAP。相对于OLTP,应用要求快速定位到某一条记录,OLAP更多是数据的聚合,或者是数仓结构(相对较少的join,读取指定范围内的数据而不是单条数据)。 排序键 根据where…
-
Front Engineering Workshop: CSS skeleton loading animation
思路是,在元素的后面添加一个::after 元素,这个元素添加线性渐变,然后在通过和做个动态移动。 Reference: https://codepen.io/JCLee/pen/dyPejGV
-
Github Action to upload Aliyun OSS
通过Github Action上传OSS。需要注意的是需要写在末尾,否则会有一些莫可名状的行为。 Secret是设置在项目上面的。
-
Google colab + Stable Diffusion
薅谷歌的羊毛来AIGC 免费拥有GPU的机器 访问Google Colab, 在里面选择GPU,你就拥有一个15G显存的GPU. 尝试模型 随便选择一个模型Stable Diffusion 1.4, 直接将实例代码复制到笔记本中,就可以开始绘图了。 效果还不错,基本30秒出图。而在自己的2021版的…
-
Using rclone to convert FTP to WebDav
入手了群辉 220+,把照片,电影都迁移了过去,还特意开通了百度云盘,用 Cloud Sync 把百度盘里面的东西都扒光清空了。但自己还有一个问题,就是如何把自己的照片做冷备份。 问题 家里的情况是,有一块移动硬盘,常年挂在路由器上面的,开启了 FTP 和硬盘休眠模式。所以大部分时候都是空闲的。 家…
-
async in python/javascript/golang/ruby
最近在看 Golang,看到了协程调度器的时候,突然想起 Javascript 的 event loop,觉得把这些东西对比起来的时候,真是有趣。顺手把 Python 的也看了一遍,发现在并发上面,真的是炸天的存在。 我也不能够免俗,故事还是要从头开始。 单线程 下面的例子显示了,如果只有一个线程,…
-
博客的新姿势 Ghost + Gatsby
这篇文章是基于[Ghost+Gatsby][1]写的。 很早以前我们搭建博客,一般都是WordPress,再后来就是Jekyll+Github Pages做一个静态站点。现在前端技术飞起,又有了很多选择,今天说的就是Ghost+Gatsby。 Ghost是什么 Ghost是一个基于Node.js的C…
-
Airflow quick start
What's Airflow Airflow is a platform to programmatically author, schedule and monitor workflows. DAGs Directed Acyclic Graph is a collection of all th…
-
Migrate from webpacker to jsbundling-rails(esbuild)
Install jsbunding-rails Update the Gemfile Run following commands 这个命令会做几件事,其中 1. 安装 foreman。具体可以查看 bin/dev 和 Procfile.dev 这两个文件。项目目录下执行就可以运行项目。 2. 安装…
-
Express SSO with passport-saml
添加express-session, passport, passport-saml 修改app.js 其中, 返回的是长这样。
-
用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中和的区别只有一点,即会复制singleton class和维持fronze状态。其实是原对象的一个复制,而是通过原对象的类重新创建出来的一个新的对象。 https://gist.github.com/ysorigin/3247021
-
Postgresql中主键ID不连续
Postgresql中主键ID可能是不连续,原本是为了增加并发性,但这样的话,会导致ID不连续的问题。参见这里 下面是测试代码 这里可以看到上一次ID的值是2,那么下一个值就应该是3。 执行到这里,就可以看到,LASTVALUE不再是2了,虽然什么都没有插入进去。这样就导致了主键的ID不再是连续的了…
-
Things about Ruby Memory
从Ruby的内存碎片化说起 Ruby的栈空间是当前运行栈的RVALUE的指针和值,而Heap里面存放的就是RAVLUE的值了。Ruby启动时会向系统通过malloc申请一片内存,即malloc heap。OS heap又会被划分一部分给Ruby成为Ruby heap。一个ruby heap page…
-
Stop iteration for AWN.async
自己在用awesome-notification作为自己项目的notification,但是遇到一个问题。在循环中想要通过来中断循环,但是发现不可行。原因是代码中在处理的时候,返回的其实是一个promise,即下一个循环开始以后,才会回来执行。这样就导致没法中断下一个循环。 解决方法是,住第一个,然…
-
通过Lambda捕获S3的增量文件
1. 创建两个 buckets 'pzhong-test-bucket' and 'pzhong-incremental-bucket' 2. 创建能够访问两个 buckets 的 policy 3. 创建能够访问日志的 policy 4. 创建一个新的角色,绑定上面两个 policy 5. 创建 …
-
ActiveRecord Cache
ActiveRecord Cache ActiveRecord有两种Cache,一种是relation cache,一般通过可以实现DB hit。另外一种是sql cache,这个就需要用一个block去避免。 1. https://www.honeybadger.io/blog/rails-act…
-
SQL Server | MySQL | Postgresql
From SQL Server, MySQL & Postgresql SQL Server MySQL Postresql Database Use database Table Create table like Table size Index
-
Check if MYSQL connection is using SSL
最近几天发现bitbucket上面的pipeline失败了,后来发现是因为上周JDK 8升级到292,禁用了TLSv1.0 和 TLSv1.1. 将pipeline的版本强制回滚到openjdk:8u282-jdk以后,暂时可以用了. 进而引出一些关于MYSQL SSL的问题. 一般SSL的常规方法…
-
mysql locks analysis
Case One Session 1(RR) Session 2(RR) ---------------------- start transaction; start transaction; insert into largetable1 select from largetable where…
-
AC-86U+FRP+FTP
好不容易有了内网穿透,顺带成功搭上FTP,结果速度感人,只有100KB,回头一看,自己的VPS就1M的带宽,搞个铲铲。但Anyway,还是勉强可以用了。 配置/etc/vsftpd.conf FTP除了21作为通信端口,还需要额外的随机端口作为数据端口。自己把随机端口限制在3个范围内,这样自己在FR…
-
gpg快速入门
GPG可以用来加密文件,或者git commit,属于非对称加密。 安装 无脑 查看当前key-pair 生成key-pair 中间会要求输入名字和邮箱,以及passphrase 导出公钥 先用下面的命令找到公钥的ID 然后再导出公钥 导出私钥 加密文件 选择一个receipt,然后加密 解密文件 …
-
Linux常用命令
awk 以分割字符串,对应该字符串,对应分割后的第一个字符。 如果改行有,打印 是内置变量,行号 是函数,转换为大写,此外还有 。完整函数参考1 还可以用 拼接字符串 搜索文件,查询内容 xargs 逐个调用命令 echo 截断 替换 sed 替换special character。会escape特…
-
从TCP/IP握手开始说起
网上已经有很多关于 TCP/IP 协议等内容,比如阮一峰先生的这篇文章就非常的经典。 简单说起,网络模型一般有两种,TCP/IP 模型和 OSI 模型。前者 5 层,后者 7 层。 从最底层开始说起 协议 每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则,就叫做"协议"(pr…
-
Nightwatch初探
看到测试组在用ES6的async/await,莫名激动。想看看async/await怎么实现的,试玩一下,觉得没有什么意思。 安装 配置nightwatch.conf.js 我把默认的浏览器改成chrome,并配置了一下serverpath 测试脚本 写了两个简单的测试脚本,async的是仿造公司项…
-
通过http代理加速MySQL连接
自己买的是HTTP代理,本地9900开启了HTTP Proxy端口。 docker-compose.yml 然后本地连接3329端口即可。之前是有ssh作为跳板,所以可以加速ssh连接。这次没有ssh跳板,MySQL连接用的是TCP/IP,所以需要做一次TCP的端口转发。 至此,无论有没有ssh跳板…
-
通过ssh加速MySQL连接
公司用亚马逊的EC作为跳板连接MySQL数据库,因为亚马逊服务器在国外,查询一个1M的表都要等300+秒。此外,因为用了跳板,你没法在Terminal中直接连接数据库。接下来,就是要解决这两个问题。 命令行里连接MySQL 背景 本地需要先ssh到JumpBox,在JumpBox上面在连上MySQL…
-
github 加速
分辨需要设置的代理 - HTTP 形式: git clone https://github.com/owner/git.git - SSH 形式: git clone git@github.com:owner/git.git 一、HTTP 形式 走 HTTP 代理 走 socks5 代理(如 Sha…
-
sysbench
安装sysbench Mac 直接 走起,CentOS就按照文档 测试一波CPU 结果如下,和自己的MBP一样。 [1]: https://github.com/akopytov/sysbench#linux
-
禁用ssh密码登陆
自己买了个服务器,老是被人给扫描端口登陆。密码总会被破解的,我打算直接把密码登陆给禁用了,反正ssh可以通过密钥登陆。 将本机公钥添加到远程主机中 如果本地没有密钥对,先运行,一路回车下去。 登陆远程主机,修改authorizedkeys,添加本机的公钥。 好了,可以退出试试,现在不在需要输入密码了…
-
Vault
Go语言很火,比如Docker就是用Go语言写的。在之前的测试里面,Go的性能快追上C了。 Vault也是用Go写的。Vault这个单词翻译过来叫地窖,或者保险库。在Harry Potter与魔法石里面就出现过,当时海格带着他去精灵银行取钱,还有魔法石。 Table of Contents - 安装…
-
memcached
Docker-compose 通过docker来安装memcached。下面是docker-compose.yml文件。 然后直接启动即可使用 Telnet 连接 Set 比较恶心的是,设置的bytes要和输入的value长度一致,否则存不进去。 Get 会输出 Flush all 清楚所有字段 退…
-
mysql_config_editor快速设置
不想每次连接mysql数据库的时候都输入密码,可以通过这种方式提前配置好,直接命令行连接。 新增连接配置 连接数据库 查看所有连接配置
-
MySQL notes
From SQL Server To MySQL Table of Contents - Table - select into - all index - table size - table status - Procedure - 获取SP的修改时间 - View - 视图修改时间 - Sec…
-
MySQL is *really* slow
准备 最近发现MySQL真的sucks,感觉免费的数据库,只是单纯存取数据,大家就用MySQL,但是如果数据多了以后,MySQL真的不是一般的弱鸡。 Talk is simple, show me the code! 首先,创建一个3000W条数据的表。 按照上面的步骤,然后再创建不同size的表。…
-
using JQuery with webpacker in Rails 6
Rails升级到6以后引入了webpack,个人觉得对纯后端开发来说,真的实在太恶心了。但是,你们不是叫着满天飞的全局变量不好么? npm Javascript的包管理器,类似于gem。下载package到./nodemodules,同时更新package.json。 yarn 又一个JavaScr…
-
指数基金
且慢12.16开了一堂[直播课][1],介绍了指数基金。下面是一些笔记。 指数基金 主要有宽基指数和窄基指数(行业指数) 宽基指数 是市场上最主要、最具代表性的指数,指覆盖股票面广泛,具有相当代表性的指数。指数可以新陈代谢,使得优秀的公司进入,劣质公司得以淘汰。比如沪深300。 沪深300 沪深30…
-
Build Jenkins on Docker, install rvm and test pipeline
原生的Jenkins镜像里面没有rvm,虽然说有rvm插件,但是依旧不好用,而且好几年没有maintain,也不知道现在还有人用没有。基于Jenkins的centos7镜像,安装rvm,并安装Ruby 2.6.6。版本号可以根据自己的需求改。 下面是docker-compose文件。networks…
-
ES6中的继承和Mixin
ES6终于引入了这样的关键字,即使是语法糖,至少能够让其他编程语言的程序员不会觉得那么突兀了。习惯了Ruby的继承链,总会习惯性的问,这个类的parent是谁?方法是怎么顺着继承链查找的? 下面有一副图,是从StackOverflow上复制过来的。 实例通过找到类Foo的prototype,每个类的…
-
ES6中的继发和并发
严格来说,由于JavaScript是单线程,所以没有并发。有类似并发操作的,那就是协程。ES6中有async和await,用它们来实现异步操作,简直很爽。但是,并不是用了async就可以并发,或者接近并发了。一般有两种方式可以让他们“并发”。 有趣的是,Python 3.5以后也有了和这两个关键字的…
-
一千万个整数计数
要求 有10,000,000个100以内的整数,求某个数字出现的次数。 题解 数字出现的范围已经决定了只有100个整数,所以创建一个100个元素的数组就够用了。我总觉得这道题有坑,循环一千万次可能会比较耗时,所以选择用numpy来计算。 但真的循环就慢么?真的迭代器就很爽么?分别写了几个函数来测试一…
-
动态规划之记录转移过程
动态规划一般是处理在限制条件下(背包总重量)能够最多能够拿多少东西的问题。在这个基础上,又可以扩展成最大价值是多少,最大价值具体为哪些物品,物品附带子物品的情况。 基础版 先说最简单的背包问题。假如有一个能够背20公斤的背包,现在有4个物品,分别为2, 5, 10, 11公斤,最多能够背多少公斤? …
-
调整华硕路由AiMesh的无线功率
用AC86U和AC66U-B1组成了AiMesh,这样整个房间5G都是满格的。不过有一点,就是无法调整子节点的功率。华硕这点居然不是自动同步过去的,比较恶心。好在能够ssh上去,就可以调整功率了。 首先把主路由的无线功率调整成为澳大利亚模式,2.4G就不用太猛了,本来就可以全屋覆盖了,主要是5G。 …
-
修改Host屏蔽MiBox广告
越来越喜欢华硕路由了。 家里的小米盒子太老了,最初的1代,1G内存,CPU才400MHz的。最近给娃放《冰雪奇缘2》1080p直接无法播放。对比一下小米盒子4和4c,还是多出100块钱买2G内存的小米盒子4。家里有很多小米设备,绑定小爱同学也挺好玩的。但是这个新盒子的广告让人有点恶心了,看个视频,要…
-
从分表分库说起
单库单表 业务开始阶段,一个数据库,加上几个业务表,就够用。代码也写在一起,一个service就搞定了。 单库分表 但某个表到达千万级别甚至上亿级别,日增长在2%左右,这个时候,可以预见这个表将来会变得异样庞大。这个时候需要分表。操作上可以用分区函数,把一个表分到多个分区文件上。也可以真实地拆为多个…
-
Redis
安装 下载镜像 创建docker-compose.yml docker-compose.yml 常用命令 进入redis 查看当前keys、key的类型 切换数据库 ###清空当前数据库 ###清空所有数据库 操作字符串 操作Hash 操作列表 无序集合 有序集合 过期策略 定时删除 在设置key的…
-
Migrate from DelayedJob to Sidekiq
Steps Update Gemfile Change ActiveJob queue adapter in Add file Configure routes.rb Add workers Add two workers in directory. Call these two workers v…
-
Scope in Rails
Table of Contents - ActiveRecord::Relation - #all - defaultscope - #scope 方法 - 对new、create的影响 - 链式scope - generaterelationmethod - 传入参数 - Reference Ra…
-
Rails中的设计模式
观察者模式 Rails之前有Observer,后来被单独抽离到rails-observer gem中去了。和callback比,observer一般处理model职责之外的行为,比如给用户发邮件。callback更加倾向于处理model职责内的行为,比如验证,默认值等。在我看来,有点像是消息队列,o…
-
Rails的includes和joins
很老的话题了,再看看Rails 5.2中的behavior吧。 joins 会导致N+1问题,即针对每一条fund的fundpricehistories,会触发额外的query加载所有记录。用只会对做过滤,不会加载关联数据。 继续执行 会触发sql去加载关联数据。 includes 会加载关联数据,…
-
数据结构
Table of Contents - 数据结构 - 数组 - 链表 - 队列 - 栈 - 散列表 - Hash冲突 - Ruby中的Hash实现原理 - 图 - 非加权图 - 加权图 - 负加权图 - 树 - 二叉树 - B-树 - B+树 - 二叉堆 - 红黑树 数据结构 数组 相同类型的变量的…
-
Python中的元编程
习惯了Ruby,总希望能够在其他语言里面找到同样的身影。比如,通过去处理没有定义的方法,或者用,等去动态定义方法,抑或者用, , 这些方法增加方法。 但是在Python中,我基本没有看到这样的操作,甚至对于类这样的概念,用的都不是很频繁。我有时候都怀疑Python里面有没有元编程,虽然我知道里面肯定…
-
各个版本的Docker镜像
Full offcial image 基于最新的Debian操作系统,默认的选择。 stretch/buster/jessie Debian版本的[CodeName][1],stretch对应的是9,buster对应的是10,jessie对应的是8。 -slim 完整镜像的精简版本,只安装了需要的依…
-
Rails为什么你需要Nginx
一般我们都会用一个Web Server,放在Application Server(puma, thin, unicorn)等前面。用Nginx,可以满足下面这些条件: 1. 静态重定向。比如,将http全部转向到https,将某类URL重定向到其他服务器。 2. Host静态文件。比如css和js,…
-
给Rails镜像瘦身
一直以来,Rails的docker镜像都很庞大。单纯Ruby的官方镜像都800多MB,而alpine版本的Ruby就小了很多,才50多MB。基于这个版本build的Rails镜像将会小很多,不过还是没有Golang build出来的可执行文件小。 首先,替换Alpine的源,国内就从下面随便选一个源…
-
singleton_class in Ruby
Singleton Class 元类 元类其实也是一个Class,在《Ruby原理剖析》里面,元类和类的关系如下图。 实例,可以通过得到它对应的类。可以通过找到父类,也可以通过找到元类。实例方法是在这个继承链中查找的,类方法是在这条继承链中查找的。 下图是《Ruby元编程》中描述的方法查找过程。 感…
-
Data Warehouse概念
数据仓库 Data Warehouse 1. 从业务数据中抽离数据,并针对决策和分析进行优化 2. 是面向主题的,集成化的,稳定的,随时间变化的数据集合,用来支持管理决策的过程 3. 数据来自多个数据源,并整合到一个数据库中 数据仓库和数据库的区别 数据库数据仓库 --------- 1 面向事务面…
-
常见的浏览器安全防御
Table of Contents - XSS - HttpOnly - XSSFilter - CSRF - 验证码 - csrftoken - 点击劫持 - X-Frame-Options - SQL 注入 - 文件上传 XSS 什么是 XSS 跨站点脚本注入 Cross-Site Script…
-
Authenticity_token & csrf_token in Rails 5
Table of Contents - Environment - 基础知识 - csrf-token的生成 - Form authenticitytoken的生成 - csrftoken的验证 - Decode Session Cookie - secretkeybase - FAQ 这边文章是基…
-
Using cache to build docker image if Gemfile is not changed
如果Gemfile没有改动,我们可以使用warm cache,而不是每次都需要重新build。这里的一个trick就是需要先添加Gemfile,再, 而不是先,再。因为通常代码会有改动,一旦有改动,docker就不会使用cache。这种方式在[这篇文章][dockergemfilecache]里面有…
-
From Ruby To Python/Javascript/Go
Table of Contents - From Ruby To Python, Javascript, Go - Data types - Boolean - Hash - Array List - Control flow - If...else - Loop - Methods/Functio…
-
Database isolation levels
数据库有4种隔离级别:Read Uncommited, Read Committed, Repeatable Read, Serializable. 隔离级别之前,先将一下脏读,不可重复读,幻读。 脏读 只会出现在Read Uncommitted下面,就像所有事务都不会加锁一样,没有提交的改动也会读…
-
从eval, class_eval, instance_eval 和 singleton_class 说起
最近在刷 CodeWar,整理来说,比 exercism.io 难多了。因为选择的是快速升级,所以没有刷几道题,难度就蹭蹭蹭地往上窜,有时候发现之前一晃而过的地方,啪啪地被打脸,原来真的就是一晃而过。 eval 我们可以用 这种方式,执行一段字符串,同时切换上下文 context。我们还可以用 来实…
-
光荣与梦想 - 你所需要的历史
美国人自己写的书,详细揭露了美国曾经的劣迹。不知历史,对美国一味跪舔,到时候历史一旦重演,自己将一无所有,理想崩塌。 一战中的退伍军人 书的开篇就罗斯福即将上任的前期,前任总统胡佛和他的手下如何暴力驱逐这些曾经为了这个国家付出过的军人。你所能够联想到的就是八·九·学·潮。但凡是自己干过的事情,就使劲…
-
通过yield动态创建方法
前任留下了一个祖传代码,看着挺好的,通过一个 build 方法,就可以动态创建一个新的类。等到自己去实现第二个类的时候,出了问题。say 方法被覆盖了。第一感觉就是,类被重新打开,然后被覆写了。 后来,在尝试打印 self 的时候,发现 block 是在顶级作用域 main 里面执行的。导致的结果就…
-
MySQL的一次死锁分析
之前分析过SQL SERVER的死锁,但基本都是基于READ COMMITTED下的死锁。玩得高级点的,就是key lookup lock。最近不幸玩了MySQL,拿原来的理解去尝试分析,结果不对,然后才发现,MySQL的默认隔离级别是REPEATABLE READ。 在RR级别下,除了常规的REC…
-
Include a new Module to included Module won't add methods
故事是这样的,如果我在创建一个实例以后,再去编辑类并增加一个方法,这个实例是能够发现新的方法的。 同理,在已经included 的module里增加一个新的方法。 但是,如果在已经included的module里面include一个新的module,这样就不行了。 原因在于,前两者影响的是方法表而已…
-
Include & Prepend
Ruby的include和prepend有一个重要的知识点,就是多重包含的时候,后面的Module会被ignore掉,只会包含一次。