看 @zachholman 如何决定 GitHub 用的技术栈
这篇文章名不符实,其实讲的是程序员要谦卑,要不断审视现状,并愿意就不爽的地方做出改变。
程序员一般没机会决定公司的技术栈。真正能碰到的机会,要么公司初建,要么赶上大重写,或者在一个边缘问题上你用随便什么闪亮的新东西写,不搞挂的话就没人会说什么。以 Github 为例,即便他们在 Ruby 开发这个领域是个标杆,但也不意味着他们的方案就是最好的。他们选择了现在的技术栈只是因为曾经对他们遇到的问题做了 Tradeoffs,并且,他们将来会怎样做会取决于他们的不断评估:过去做的 Tradeoffs 能否还能满足以后的需求。
普通员工如何参与决策公司的技术栈?很大一部分需要员工内趋地去审视和分析自己分外的工作,特别是那些公司不太可能会分派人手进去解决的领域。至于平时要做什么?时不时地去花时间和精力思考和评估目前正在使用的工具,看看这些用了多年的工具现在还好用么 - 没有必要去抱怨这个工具这里不好那里不好,可以的话,给出自己的解决方案!
read more你真的了解 inode 这个东西吗?
本文介绍了硬链接和 Unix 文件系统的 inode。
- inode 是操作系统提供的数据结构 (struct)
- inode 存储了文件或目录相对应的硬盘块 (disk blocks), 以及用户啊,权限啊之类的元信息
- filename, dirname 不存储在 inode 中
- 文件系统中每个 inode 都有自己的 ID
- 文件系统通过 ID 找 inode 对应的数据
- 目录的内容:一张表,登记了从目录和文件名字到 inode ID
- 目录也其实只不过是一种文件,设定了类型是 DIR
- 目录的数据存在和上面 ^ 的 inode 区别开的另外一个 inode
- rm 从目录中删掉一个 name-inode 的键值对。
- 当没有 name 指向 inode 时 …
后端开发保障应用安全需要至少做到哪些事情?
后端安全的几个关键词: Injection(注入), XSS(跨站), CORS(跨域)
- Injection: 写 SQL 的时候不要自己格式化 query,而应该交给标准库来做,一般
exec("select * from table where field=%s", field)
这种写法是足够安全的;exec("select * from table where fields=%s" % field)
是要命的。想想 field 的值等于1; delete from table
可怎么办! - XSS: 不信任任何用户的输入,用户的输入在渲染 Template 的时候,记得 escape 一下。不少模板库都提供了自动 …
KMeans 和 SK-Learn 实战
K-Means 算法是一个简单有效的非监督学习的聚类算法,它基于数据点的距离聚类数据,一个简单的 Python 实现是通过 sk-learn 来做。准备一个 [[a1, b1], [a2, b2], ...]
的数据,然后应用到 KMeans 模型里:
>>> from sklearn.cluster import KMeans
>>> kmeans = KMeans(n_clusters=2) # 假设只聚类出两簇数据
>>> kmeans.fit(YOUR_DATA_HERE) # 应用模型
>>> keamns.labels_ # 获得前面准备的数据向对应的标签,每个标签对应一簇数据
[0 0 0 0 1 1 1 1]
HTTP 流量加密需要付出的 CPU 资源有多少?
加密的代价有多高?结论:TLS 代价特低,AES-GCM & P256 都是性能很好的算法,RSA 历史作用不可磨灭,但正在死去,被更快更安全的算法替代。未来我们要用什么加密算法呢?不可知啊,NIST 列表有一长串的候选算法,只是目前还没有一个能比 P256 性能更好。
- TLS 部署很方便,可以使用诸如 OpenSSL 或 BoringSSL 这样的工具。
- Cloudflare 的工程师在他们的数据中心做了一番统计,结论是,代码不算高。像 BoringSSL 只消耗了 1.8% 的 CPU 时间。
- BoringSSL 应用 AES-128-GCM 算法,加密速度能到 3.7 Gb/s
- RSA 不具备前向加密保证( Forward …