avatar
HackerPie
Unicode?UTF-8?GBK?……聊聊字符集和字符编码格式
按照习惯起个调 作为程序员,经常会在编程语言、操作系统、网络以及文本编辑等多个层面遇上字符集或者字符编码的问题,尽管一般都能快速通过搜索引擎找到解决方案,但是对于这种字符集以及其相关的字符编码格式的知识,倒是未曾系统梳理。恰逢近期有了一些收获,趁热记录分享下。 从 Unicode 和 UTF-8 说起 对于类 Unix 操作系统(比如 Mac OS 以及 Linux 操作系统等)的用户来说,会更多地接触 UTF-8 编码格式,我也是其中一个。而我过往总是…
avatar
HackerPie
后缀表达式之逆波兰表示法
从中缀表达式说起 对于人类来说,中缀表达式是最直观自然的,比如“3+5x4”或者“(3+5)x4”,一般来说,对于中缀表达式,在程序中会用一个抽象语法树来表示表达式和求值,比如: 3+5x4 + / \ / \ 3 x / \ / \ 5 4 -------------------------------- (3+5)x4 x / \ / \ + 4 / \ / \ 3 5 后续表达式求值使用二叉树的中序遍历便可。 但是这种表达式对于计算机来说,会有2个可以考虑提升的问题: 对于计算机不够直观,需要在树的结构上进行遍历和求值; 额外…
avatar
HackerPie
依赖倒置原则
说起依赖倒置原则,已经不是个新鲜的词了,虽然也知道依赖倒置原则的具体设计模式,但是一直觉得难以理解何为“倒置”,直到今晚重新静心阅读了 Wikipedia 才恍然大悟!欣喜之余,赶紧写篇文章总结。 传统软件分层设计模式 在软件设计开发的时候,我们都会自然而然思考系统的分层设计,比如以一个典型的三层架构来举例: --------------- 服务层 (提供 API 服务) --------------- ↓ --------------- 业务逻辑层 (封装具体的业务逻辑) --------------- ↓ --------------- 存储层 (处理数据存取) --------------- 依照此架构设计,我们可能自然而然地将各层…
avatar
HackerPie
数据结构:单调栈
什么是单调栈 单调栈是指从栈顶到栈底,栈内元素的值符合单调性的一种特殊数据结构。从栈顶到栈底,元素的值单调递减,称为单调递减栈;反之,称为单调递增栈。 \ 9 / \ 1 / | 7 | | 3 | | 5 | | 5 | | 3 | | 7 | | 2 | | 9 | ------- ------- 单调递减栈 单调递增栈 单调栈的维护 为了维持栈的单调性,在往栈内插入元素时,需要比较循环比较栈…
avatar
HackerPie
记一次Redis数据库配置导致的连接数泄露的问题
问题背景 2017 年圣诞节当天,突然收到一个我经手过的项目的告警邮件,错误消息显示**“Redis::CommandError: ERR max number of clients reached”**。 什么情况?难道这个项目翻车了?第一反应是这台服务器运行着自建的 Redis 数据库,但是客户端只有同个内网的一个 Ruby on Rails 的应用,怎么会有连接数爆掉的可能? 理论连接数计算 老衲掐指一算: sidekiq 客户端所需连接数: 对面 Rails 应用有 10 个 Unicorn 工作进程,每个unicorn进程初始化一个 sidekiq 客户端,一个 sidekiq 客户端默认…
avatar
小毛驴
关于会计学的认知
背景 作为韭菜的自我修养,大概知道上市公司财报到底是好还是不好是有必要的。至少不会在财报发布后,股票波动时一脸懵逼,等着大V们解读。 财报是什么 财报是上市公司依照证监会审计规则提交的经营周期内的财物报告,一般分为季度报告和年度报告。每次财报发布对股票价格都有重大的影响,财报的表现直接反应公司过去的经营增长情况。 财报中有两张会计表,资产负债表和利润表,分别…
avatar
小毛驴
手写汇编,从入门到放弃
2018-03 背景 从去年(2017 年)年底开始一直在学习怎么写高性能计算代码,主要是满足机器学习在线预测的业务需求。作为一个 Pythoner,没人指导,突然转向 C/C++ 领域还是有些许不适应。从最开始的无知者无畏,写过一些吊打 Java 的函数,到最近(2018 年 3 月)见识了 OpenBlas 的手写内联汇编 kernel 之后,算是从入门到放弃了。 编译链接 初入 C/C++ 开发领域,最头疼的就是编译链接,一编译报一堆错误,都不知道发生了…
avatar
小毛驴
稀疏矩阵计算工程实现心得
2018-03-02 在机器学习中,经常遇到稀疏向量,稀疏矩阵。如何高效处理这些稀疏对象,决定了一些模型能否在线落地应用。目前正在专攻这方面,自己瞎琢磨,走了不少弯路,也有一点心得。这里记录下来,不断总结。 算法改进 这是最直接简单的,收益也最大的。比如在千万级以上的向量空间中搜索最近邻居,暴力的两两计算代码层面无论如何加速计算量依然太大了。Faiss 通过预训练聚类和向量压缩大大减少搜索时的计算量,上亿…
avatar
小毛驴
关于RPC框架的思考
2020-10-18 Why RPC 对比 HTTP+JSON 的方案,使用成熟的 RPC 框架有何优势?如果只是想要简单的服务间通信功能,RPC 框架和 HTTP+JSON 并没有什么本质上的区别。至于常常提到的 RPC 更高效, protocol buffer 序列化格式传输数据量小之类的性能优势。不可否认在大公司,数据流量大的场景下抠这些性能是有意义的。但是扪心自问,自己的服务 QPS 有这么高吗? 那么在排除性能优势之后,还有什么使用 RPC 框架的理由呢?答案是:服务治理功能…
avatar
小毛驴
正经公司谁用 service mesh
2020-10-18 Why service mesh 在上篇关于 RPC 框架的文章中,提到了使用 RPC 框架很重要的一个原因是服务治理功能集成。这些功能都是业务无关的,但是以 SDK 的形式集成在业务代码里。这些 SDK 一般由基础设施团队开发,在升级和维护时就需要业务方配合,但是业务方是没有动机去积极配合的。WEB形式的程序能爆发的一个原因是发版权掌握在开发方手里,不需要强制用户去升级客户端,用户体验…
avatar
电子芥末
一个命令行微博客(ipelago), 可订阅RSS,可自定义模板发布静态网站
iPelago: CLI personal microblog (命令行个人微博客) 纯命令行操作,包括两方面功能: 写微博客并生成静态网站 (HTML 和 RSS) 订阅别人的 RSS ipelago 之名 ipelago 源于群岛的英文 archipelago, 如果我们每一个人是一座孤岛,那么当我们搭建自己的微博客,大家的微博客聚在一起就可以形成群岛。 主要功能 (写微博客、订阅RSS) 写自己的微博客 多种方式方便写博文(包括命令行输入、获取剪贴板内容、获取文件内容、通过简陋的 GUI 窗口输入)。 可生成静态网站 (包括…
avatar
Otto
入驻GeekNote
第一天入驻GeekNote. Cheers 👏
avatar
pyzm
第二篇20220403 解决edge请停用以开发者模式运行问题
http://www.yx12345.com/pcpd/7050/743.html
avatar
Rei
GeekNote 新增 Canonical URL 和 RSS 导入功能
GeekNote 是一个技术写作社区。 过去,GeekNote 的开发重心一直放在编辑功能和阅读功能上,所提供的纯净的编辑和阅读体验也获得不少人的好评。但需要面对的现实是,很多有写作习惯的作者已经拥有自己的独立博客,单纯编辑体验的提升并不是迁移博客的充分理由。 于是我一直在思考一个问题,有没有办法让作者不用放弃自己的独立博客,也能融入 GeekNote 的分享和发现网络之中。最近似乎找到了解决办法,这涉及到两个…
avatar
吕小荣
Atlantis: 可确定的执行计划
Workstream 的基础架构完全用 Terraform 来编写,就是大家常说的架构即代码 Infrastructure as Code (IaC),并且用自动化工具 Atlantis 来执行。每次有工程师要修改架构,只需要修改 Terraform 代码,然后在 Github 提交一个Pull Request。如果 PR 通过审核,Atlantis 可以帮助执行 terraform apply,并且合并 Pull Request。 在使用 Atlantis 的过程中我发现它不稳定。 Atlantis 经常打印出一堆和代码改动无关的执行计划。比如,我只是给一些资源加了一个标签team=Kraken, Atlantis 在做计划时除了增加…
avatar
吕小荣
.terraform.lock.hcl 简介
每种编程语言都有自己的包管理工具,Javascript 有 npm,Ruby 有 Bundler,Python 有 pip。这类管理工具通常会为项目创建一个类似 package.lock 的文件,锁定项目依赖版本,从而保证在不同的机器上运行程序时,依赖环境都相同。 对于 Ruby 项目,这个文件是 Gemfile.lock 对于前端项目,这个文件是 package-lock.json 或 yarn.lock 对于Python 项目,这个文件是 Pipfile.lock Terraform 也有“包”的概念,称之为 module。每个 module 打包了一堆资源。在代码中引入一个module,就会创建…
avatar
吕小荣
爷爷奶奶的文化传承:拆掉电视
我们家祖上几代都不是文化人,其实并没有什么传承。 小的时候,我爸爸妈妈天天忙着吵架,没空照顾我。是爷爷奶奶把我拉扯大的。爷爷是供销社的退休工人,奶奶是农民。他们在教育上能给我的指导非常的有限,但是他们一个的决定,却对我的学习起了决定性的作用: 他们拆掉了家里的电视,只在寒暑假的时候把电视搬出来给我和弟弟解解馋。 爷爷每天只能提着自己的破收音机消遣,奶奶本来就是勤快…
avatar
吕小荣
2021-2022 投资纪律
2020年我设定了两条交易纪律: 纪律一,每月仅在发工资的当日处理和投资相关的事情。 纪律二: 绝不主动向别人推荐 ETF 和股票 2021年,我自己读了一些投资的书籍,学习看财报。自己觉得有点本事了,就增加了交易频率,买了几个个股。实践出真知,我的投资组合都跌的很惨,交了学费。 此外我还根据指数的涨跌调整定投金额,跌了多买,涨了少买,事实证明没啥用,只是浪费时间和…
avatar
吕小荣
Terraform: Random 简介
Provider Provider 是连接 Terraform 和云的桥梁,Provider 定义了各种资源,比如 EC2,RDS,VPC,NAT 等等。Terraform 可以通过不同的 provider 与不同的云打交道,甚至私有云。 几个常用的 provider 源码: terraform AWS provider Google Cloud Platform provider Microsoft Azure provider Terraform Random Provider 简介 Terraform Random 它是一个”逻辑层”的 provider。之所以称之为”逻辑provider“,是因为它背后并没有对应的云。 它提供了以下资源类型。 random_id,用来创建随机字符串,比如 9baf56f751636fcf。 random_integer,用来创建随机数字。 random_pet, 用来创建一个随机…
avatar
吕小荣
terraform.tfvars 与 variables.tf 的区别
通常一个 Terraform 项目下,关于变量的文件有好几个: output.tf variables.tf locals.tf terraform.tfvars 其中 variables.tf 和 terraform.tfvars 最容易让人困惑,他们之间有什么区别和联系? variables.tf variables.tf 用来定义变量,比如变量名,类型,有点像写代码时函数的参数定义。 在以下范例文件中我定义了两个变量 project 和 environment,他们的类型是 string。 # variables.tf # Input variable definitions variable "project" { description = "project name" type = string } variable "environment" { description = "the environment of project, e.g. production, sandbox, staging…