如何成为一个优秀工程师

作者谈了自己在 Stripe 公司担任 SRE (系统可靠性)工程师的经历。

计算机如何实现除法

对于计算机来说,加法和减法比乘法容易实现,而乘法又比除法容易实现。

从 Google Analytics 迁移到 Fathom

如何自己架设开源的 Fathom 服务,统计网站访问情况。

从 Google Analytics 迁移到 Fathom

贝佐斯的秘密是如何泄漏的

亚马逊公司老板贝佐斯的婚外情,被媒体披露,让他陷入了麻烦。媒体如何得知贝佐斯的秘密呢?这篇文章认为,原因是黑客进入了他女友的邮箱,因为该邮箱的密码早就泄漏了。

如何计算月相

地球看到的月亮形状是不一样的,本文通过可视化图形,解释如何通过三角函数计算月相。

如何计算月相

扼杀应用

马丁·福勒认为重写重要系统的较好做法,是逐步扼杀它,而不是一次性取代。

Chrome 的隐藏插件

Chrome 浏览器启动的时候,会加载一些系统插件,不会在插件页显示。这里介绍如何查看这些隐藏插件。

JPG 和 JPG2000 格式

JPG2000 图像格式的介绍,也解释了 JPG 和 PNG 格式。

条形码如何工作?

怎么解读条形码,本文还给出了 Python 的扫码实现。

条形码如何工作?

Java 开发人员调查结果 2018

一份针对全世界 Java 开发者的调查统计,有不少有趣的结果。上图是 IDE 的选择。

Java 开发人员调查结果 2018

Finally 代码块的解释

随着 JS 引入 async/await ,开发者不可避免地会更多使用 try/catch/finally ,本文解释 finally 代码块的一些容易混淆的点。

一段混淆过的 JS 脚本剖析

作者收到一封诈骗 Email,比较特别的是,它不是引诱用户点击链接,而是提供了一个网页附件,让用户打开,里面是一段混淆过的 JS 脚本。

apt 与 apt-get 的差异

Debian 系统安装软件包有 apt 和 apt-get 两种命令,本文介绍了它们的异同。

TensorFlow.js 介绍

本文描述了TensorFlow.js 的设计、API 和实现,并重点介绍了一些使用实例。

编程语言都有中央包存储库吗?

许多语言都有中央软件包存储库,比如 npm、PyPI 和 CRAN。但是,每种编程语言都有这些吗?答案是只有39种语言有。

你应该记住的 DNS 地址

作者介绍了几个常用的 DNS 服务器地址,简单谈了它们之间的差异。

磁极的改变意味着什么?

最近,地球磁极的 N 极突然加速改变,这篇《国家地理》的报道详细介绍了背景知识。

Jsonnet 比 Yaml 更适合配置文件

Jsonnet 是谷歌推出的 JSON 配置文件生成工具,基本上解决了 JSON 格式的所有痛点,比 Yaml 格式更优越。

为什么我们从 Go 转向 PHP?

作者谈了 PHP 过去三年的改进,以及为什么更适合架设他们的网站。

文件系统的过去,现在和未来

文件系统的历史回顾,介绍各种文件系列的来历和特点。

MSIX文件:Windows 可执行文件的未来?

Windows有三种常见的安装程序格式: MSI,EXE 和 AppX。微软据称正在考虑推出 MSIX 格式,统一这三种格式。这种格式的最大特点就是,它是一个容器,因此有很多容器的好处。

MSIX文件:Windows 可执行文件的未来?

K 线图的机器学习

K 线图经常用于股市预测,如果使用人工智能分析 K 线图会怎样?有人真的搞了一个机器学习模型,用无数 K 线图训练,然后去预测股价。结果非常糟糕,亏损严重,我们终于有了一个人工智能无能为力的领域。

K 线图的机器学习

安装 Google BBR(中文)

Google 开源的 TCP BBR 拥塞控制算法,可以提升网速,适合 CentOS 等内核较老的云主机升级。本文介绍安装方法。(@ansiz 投稿)

数字世界中的纸张----理解 PDF

一篇面向一般用户的 PDF 格式介绍,覆盖了 PDF 的适用场景、内部结构、常见误区。(@jerrylususu 投稿)

不要忘了控件的背景颜色

Mac 系统提供深色背景以后,网页如果忘了设置控件的背景色,可能就会出现上图的结果,控件变成了系统默认的深色背景。

不要忘了控件的背景颜色

回忆理查德·费曼

理查德·费曼是当代最著名的物理学家之一,作者在1970年代读本科期间,听过费曼的课,并与他有密切的接触。本文回忆了一些往事,主要是费曼对碰到的新问题如何做出反应。

回忆理查德·费曼

戴尔49寸显示器使用感受

戴尔49英寸超宽显示器的最高分辨率为5120 x 1440,可以分成两个27英寸的16:9视图。作者谈了这台显示器的一些限制,以及使用感受。

戴尔49寸显示器使用感受

不要随意放置点文件

越来越多的软件会将自己的配置文件,以点文件(dotfile)的形式放在用户的主目录下面。作者呼吁不要这样做,而要采用已有的 XDG 目录规范,将配置文件和数据文件放在该规范指定的位置。

树莓派的问题

作者谈了树莓派的一些局限,最大问题在哪里,哪些项目不适合使用它。

Java 语言如何实现线程间通信

一篇简单的教程,Java 语言如何实现多线程编程。

谷歌搜索的运算符

本文详细介绍谷歌搜索的运算符,用来定制搜索结果。

函数式编程的好处

著名程序员 John Carmack 谈了函数式编程对 C++ 语言的好处。不涉及代码,只是概念上的讲解。

取消 C++ 的预处理器

本文作者建议,不要使用预处理器定义宏(Macro),甚至不要使用(自定义的)宏。

Fossil 与 Git 的对比

Fossil 是专为 SQLite 开发的版本管理系统,与 Git 采用不一样的模型,总体上来说,比 Git 更简单。

超越 DRY

DRY 原则指的是"不要重复自己",意思是如果代码有重复,就应该把它提炼出来。本文提出,这条原则不应过分严格地使用,有时候代码冗余对软件是有利的。

Deno 运行时介绍

Deno 是一个 JS/TypeScript 运行时,用来取代 Node。它的最大特点就是不支持 CommonJS,只支持 ES6 模块。

MIT 许可证逐句解释

MIT 是常见的开源许可证,但是很多人并没有看过它的条文。本文逐句解释该许可证的每一句话。

未来的 JavaScript 语言

本文介绍 TC39 委员会正在考虑的、加入 JavaScript 语言的一些新功能。

30年的梦想失败是什么感觉?

一个发明家受鸵鸟奔跑姿势的启发,发明了一种弹簧鞋。他为这个梦想投入了30年,依然没有成功。现在专利即将到期,30年可能就是白忙一场。

30年的梦想失败是什么感觉?

Cordova,React-Native 和 Swift

作为一个 iOS 开发者,作者谈了自己使用标题里面的三种技术,开发 App 的感受。

3万行代码从 Flow 迁移到 TypeScript 的经验

一篇 TypeScript 的使用体会,以及一些使用经验。

浏览器的 gRPC 协议支持

gRPC 是谷歌提出的一套远程服务调用的解决方案,只能用于服务器之间。本文介绍了 gRPC-Web 这个项目,旨在让浏览器也可以使用 gRPC。

Linux 桌面设置

本文介绍了作者如何配置 Linux 桌面开发环境。

安全上网指南

一份安全上网清单,从专业角度告诉你,应该做哪些事情,怎样才能安全地使用互联网。

如何使用树莓派架设各种网络服务

作者介绍使用一台树莓派,架设个人使用的反向代理服务器、Git 服务、看板服务的过程。

我的 NAS 损坏经历

作者的家用 NAS 的电路板损坏,导致所有数据都无法读出,他不得不把4块 1TB 硬盘插到台式机里面恢复数据。

我的 NAS  损坏经历

SQLite 用作搜索服务

SQLite 有很强的读取性能,作者提出它可以用作小型网站的搜索数据库。

Dart 语言的异步编程

Dart 是 Flutter 框架的开发语言,语法与 JS 高度类似,也是单线程。本文介绍 Dart 语言的异步操作,可以比较与 JS 的异同。

实时动画将是下一个热点

随着 GPU 日益强大,实时渲染高质量的 3D 动画已经成为现实,这将改变许多行业,个人将可以制作完整的电影。

Netlify Lambda 的一个应用实例

本文使用 Netlify Lambda 服务,每当网站更新的时候,就自动到推特发一个消息。

HTTP 协议简史

介绍 HTTP 协议的由来和发展。(@gusibi 投稿)

Docker 的优缺点

一篇很简单的对 Docker 技术的评论。(@lanzhiwang 投稿)

mkcert 制作 localhost 证书

mkcert 是一个签发本地证书的工具,用于开发环境,最大特色是可以签发 localhost 的证书。

Python 类型系统入门教程

介绍 Python 新引入的数据类型系统。

如何识别音频广告?

作者通过机器学习和音频指纹,识别出音频里面的广告,从而可以过滤广播里面的广告,只听节目的部分。也可以分辨谈话和音乐,做到只听音乐。

cat 命令的历史

本文介绍了 Unix 系统的 cat 命令的由来和发展。(@pad0van_ _投稿)

Chris Dixon 的12个创业观点

Chris Dixon 是一个很有名的美国创业者,在网上分享过很多关于创业的想法。本文介绍他的12个观点。

TypeScript 写一个词法解析器

词法解析器(lexer)的作用是将源码转成一个个词元(token),本文介绍如何用 TypeScript 写一个简单的解析器。

电子的轨道

上面是一张常见的原子模型的图片,但是这张图片其实是错的。电子的运动其实不存在图中那种轨道,所谓电子轨道实际上是电子的能量级,至于电子真正的运行方式,我们并不知道。

电子的轨道

Python 的 Dict 数据结构的实现

本文介绍 Dict 结构的实现原理,从最简单的哈希数组的实现讲起。

开发不需要"编译"的 WebApp

作者介绍如何使用 Web Components 技术开发一个网页音乐播放器。(@mantou132_ _投稿)

什么是真正的程序员

本文是一篇译文,作者仿照《小王子》中的情节,通过小 printf 遇见的不同类型的程序员,最后悟出什么才是真正的程序员!(@LanjianNUll_ _投稿)

2018年最佳笔记本电脑

这个网站评选了2018年最好的10款笔记本电脑。

使用 Docker 部署React

本文介绍如何制作 React 应用的 Docker 容器,并将其部署到服务器。

FizzBuzz 的10种语言解答

FizzBuzz 是考验编程初学者的经典题目,本文用10种语言写出答案,比较各种语言的不同。

去瑞典当工程师,是否值得?

一个中国开发者移居到瑞典当工程师。十年之后,他对自己这个决定的看法,留在国内好,还是去瑞典好?

电话键盘与计算器键盘为什么不同?

左侧是电话的拨号键盘,右侧是计算机的输入键盘,它们的排列方式为何不同?

电话键盘与计算器键盘为什么不同?

我如何搭建家庭机房

作者回顾了六年来自己在家里搭建机房的过程,有大量图片。

我如何搭建家庭机房

现在最流行的网站技术栈是什么?

这是一个论坛的讨论帖,有人问这个问题,下面一堆回答,流行的技术基本上都提到了。

文档站点生成工具

本文以 JS 项目为例,介绍各种生成文档站点的工具。

软件创新和软件专利

本文总结了历史上重大的软件创新,进而提出专利制度不适合软件业,应该废除软件专利。

Wireguard 安装教程

介绍 Wirdguard 如何安装和配置。

JSON 操作命令行工具 fx

fx 可以方便地在命令行操作 JSON 数据,本文是 fx 用法的教程。

我不喜欢 Python 的原因

作者谈了他不喜欢的8个 Python 语法。

计算机如何识别图像?

本文较通俗地介绍了神经网络的历史发展和计算原理。

10年博客的经验

作者写了10年博客,介绍怎么可以通过博客取得最佳效果。

月光和放大镜可以点火吗?

假设放大镜可以无限大,能够聚焦月光以点火吗?答案是不能。

我的必备 iOS 软件,2018年版

一个软件工程师介绍自己安装的 iOS 软件。

我如何做日本糖果的邮寄服务?

一个芬兰程序员搬到日本,介绍他如何创造一个向全世界邮寄日本糖果的服务,从而赚到自己在日本的所有生活费。

我如何做日本糖果的邮寄服务?

Chrome 开发者工具如何使用断点?

本文通过实例讲解,如何设置事件监听断点和 watch 表达式。

让你的生活更轻松的9个 Bash 快捷别名

本文介绍9个实用的 Bash 函数,你可以参考他的方式,将自己常用的操作封装成函数,然后设置别名。

HTTP 头信息的安全设置

本文介绍跟网页安全相关的一些 HTTP 头信息。

25 个改变世界的芯片

本文列出了人类历史上25个最重要的集成电路。

为什么复印店老板都是湖南人?

这是一篇2010年的论文,作者是北京大学社会学博士,他经过调查研究后发现,全国70%的复印店老板都是湖南新化人。(@yuanjingsong 投稿)

安卓设备如何启用加密 DNS?

DNS 查询默认是不加密的,本文介绍如何在安卓手机上通过 cloudflare 的服务,启用加密 DNS 服务。

IPFS 文件系统的简单解释

本文以一种通俗易懂的方式解释 IPFS 这个基于 IP 协议的文件系统的原理。

IPFS 文件系统的简单解释

Erlang 语言的20年历史

2018年12月8日是 Erlang 语言发布20年的纪念日,本文从一个历史参与者的角度回顾了这20年。

如何写一个 Node 命令行验证码图像识别工具

Node 命令行工具的开发实例,从 0 开始写。(@ringcrl_ _投稿)

为什么使用 F#?

F# 语言的特点介绍。

编译器基础

本文用 JavaScript 语言演示如何写解析器,将代码转为抽象语法树 AST,然后再写编译器,将其转为汇编语言。

放弃 Linux,试试 FreeBSD 或 Illumos?

本文提出 FreeBSD 或者基于 Solaris 的 illumos 在功能上优于 Linux,更值得尝试。

如何创建一个具有机器学习能力的 Sketch 插件

本文用浅显的语言介绍,如何写一个简单能够识别热狗图像的 Sketch 插件。(@Anderson-Liu 投稿)

熵是什么?

一篇科普文章,不仅介绍了物理意义的熵,还介绍社会内部的熵、公司内部的熵等。

Docker 镜像中有什么?

Docker 的 Image 文件是分层的,本文简单介绍怎么查看每一层的内容,它们又是怎么组合成一个可以运行的 Image 文件。这里还有另外一篇类似的文章,通过控制分层来缩小 Image 文件尺寸。(@tifazxy 投稿)

为什么你应该尝试 hapi?

hapi 框架的作者介绍该框架的特点。这里还有一篇《值得关注的10个 Node.js 框架》。

网咯追查俄罗斯间谍

英国一个民间机构如何使用互联网公开资料,追查两个俄罗斯间谍的故事。

解密英语语法

王垠老师的《解密计算机科学》还没写完,又开始写第二本书《解密英语语法》。发布第一章以后,第二天他又把这个计划取消了,"我曾经想过把这写成一本完整的语法书,可是后来发现似乎一篇文章足矣。"(@wblovezqy_ _投稿)

vimdiff 教程

vimdiff 是一个显示文件 diff 的命令行工具,本文主要介绍怎么改用其他算法,以不同的格式显示 diff。

vimdiff 教程

谷歌代码搜索的工作原理

谷歌代码搜索的作者,介绍搜索的算法原理。

《荒野大镖客:救赎2》制作记

这篇长篇报道介绍 RockStar 游戏公司和它开发的游戏《Red Dead Redemption 2》。

《荒野大镖客:救赎2》制作记

高级 Web 安全主题

本文收集各种网页入侵的技术,已经收集了十多种。

何时不使用微服务?

微服务是目前流行的架构,但是会增加复杂性,比如一个 API 变成多个 API(上图)。本文讨论了哪些情况不应该使用微服务。

何时不使用微服务?

使用 Cloudflare Worker 加速谷歌字体加载

网页加载谷歌字体的最大问题是加载速度较慢,会影响网页体验。Cloudflare 提供 Worker 方案,可以改写用户的字体请求,从而加速字体加载。

Vue.js 框架的作者尤雨溪专访

介绍了 Vue.js 的发展历程,以及背后的想法。(@M1seRy_ _投稿)

Flutter 框架印象

作者较深入地评论了目前 Flutter 框架开发手机应用的优缺点,总体上还是鼓励大家使用它。

MVC 框架的误解

作者提出,现在那些 MVC 应用其实改叫 MVA 更合适,也就是把 Controller(控制器)改成 Adapter(适配器)。

MVC 框架的误解

QUIC 协议的注意事项

本文介绍了 QUIC 协议的一些优点。作者提出,QUIC 与其称为 HTTP/3,不如称为 TCP/2。

target = "_blank" 的危险性

HTML 网页的<a>元素打开的子网页,可以用window.opener.location.replace()方法替换掉父窗口的网址,这会带来风险。

一个人如何开发游戏《星露谷》

上线前,唯一测试就是女朋友玩了几天。如果卖不出去(绝大多数游戏的结局),四年就浪费了,幸好成功了。不过,这个游戏借鉴了任天堂的《牧场物语》,有人认为他抄袭了。

一个人如何开发游戏《星露谷》

如何编写一个硬盘启动程序?

本文教你如何向硬盘的主引导扇区 MBR 写入程序,使得计算机可以在没有操作系统的情况下运行程序,显示 Hello World。

地址表单不应该分成两行

本文提出地址输入不应该有两个输入框,而是应该只是一个 textarea。

地址表单不应该分成两行

ZIP 压缩算法详细分析

使用通俗的语言介绍 ZIP 算法,文章较长。(@chowc 投稿)

新版 Gmail 代码一瞥

新版的 Gmail 用谷歌自家的 Lighthouse 评估性能,100分里面只得了2分。下载的脚本有6MB,完全渲染需要9秒,其中一半代码可能根本用不到。有人分析了代码,发现过时的早期代码都还在。猜测由于过于复杂,现有团队可能没有能力升级底层,只做了一些样式的更新。

使用 TypeScript 两年后

作者回顾了使用 TypeScript 两年的经历,总体上还是推荐的,也提出了一些值得注意的问题。

极简主义软件工程师宣言

作者解释了什么是极简主义的态度开发软件。

2018年 JavaScript 开发者调查

2018年 JS 开发者的调查报告,主要是各种框架、工具的使用情况。

《超人特工队2》的设计过程

《超人特工队2》的设计师介绍他们如何从现实生活吸收灵感,设计画面,多图。

《超人特工队2》的设计过程

TOML 配置格式介绍

TOML 格式的介绍、中文文档翻译和解析工具。(@LongTengDao 投稿)

Git bisect 命令解释

如果你不知道哪个提交引入了错误代码,就可以使用 git bisect 命令利用二分法,逐步定位到错误的提交。

package.json 大数据分析

有人分析了 GitHub 上面56万个项目的 package.json 的依赖项,得到了一些结论,比如过去一年被依赖最多的30个模块。

使用 Swift 解析 Excel 电子表格

本文使用 Swift 语言操作 Excel 电子表格。文中解释了 Excel 的格式,理论上其他语言也可以做到。

Clojure 语言入门教程

如果你想从头学习 Clojure 语言,可以读这篇教程,内容非常详尽。

网站域名是否该有 www?

www.example.com 和 example.com 哪一个合适作为主站的域名?这里的关键问题是,example.com 设置的 Cookie 可以被子域名读取,并一起发送到服务器。

UDP 协议到底可不可靠?

UDP 协议不如 TCP 协议可靠,这是大家都知道,但是这个协议到底丢包率有多高?有人做了测试,结果发现丢包率并不高,主要的问题是数据包的顺序。

调试 Node 应用的最简单方法:VS Code

本文介绍如何使用 VS Code 编辑器调试 Node 代码。

JavaScript 如何复制对象

JavaScript 的对象复制默认是浅拷贝,本文介绍如何深拷贝。

Netlify lambda 的最简单示例

Netlify 的 lambda 函数可能是现在最简单的 Serverless 实现,本文教你如何完成一个 hello world 示例。

不必要的 HTTP 头信息

本文统计了世界最大的前50万个网站返回的 HTTP 回应,其中最常见的30种 HTTP 头信息包括了很多错误的用法。

水平看板

看板(kanban)是管理 issue 的流行方式,一般的看板是垂直的。本文提出,这是因为日本文字是直排的,而看板是日本人发明的,西方文字是横排的,所以看板应该改成水平。

水平看板

tldr

Linux 系统的 man 帮助文件通常很冗长,难以查阅,这个项目提供简化的 man 文件。(@chenylvia 投稿)

如何在安卓手机里清除谷歌?

本文作者讲述如何将红米手机重刷系统,剔除了所有谷歌相关的服务。

IPFS 简介

IPFS 是一个分布式的互联网协议,底层机制类似于将网站发布到区块链。本文介绍 IPFS 的特点,不涉及技术细节。

AWS 网络介绍

本文介绍亚马逊网络服务(AWS)对用户提供的子网服务。每个购买 AWS 的用户会分配到一个 VPC(虚拟私有云),即一个虚拟子网,比如 10.0.0.0/16,文章介绍与之相关的一些概念和知识。

为什么静态资源应该使用 CDN?

本文用一个简单的例子解释什么是 CDN,以及它的好处。

HAProxy 的防 DDOS 机制

HAProxy 是一个负载均衡服务器,自带过滤 HTTP 请求的功能,可以防止应用层的 DDOS 攻击,这方面比 nginx 更强大。

Python 的数据序列化

本文介绍 Python 的各种数据序列化方案,包括 XML、JSON、MsgPack、Protobuf、Thrift等。

如何定制一个调色板

本文介绍如何为自己的应用定制一个调色板,指定各种颜色。

如何定制一个调色板

图解 DNS over HTTPS

长期以来,DNS 请求一直是不加密的,这造成 DNS 可能被监听和篡改。最新的方案是推广 DNS over HTTPS,即对 DNS 请求加密,Mozilla 基金会的这篇文章解释了这是怎么回事。

网页加载Three.js、Rust 和 WebAssembly

本文通过一个简单的实例,介绍网页如何加载用 Rust 写的 WebAssembly 模块。

TCP 协议的堵塞控制算法

网络数据包如果一次发送太多,就会造成网络拥堵;如果发送太少,就浪费了带宽,延长了通信时间。TCP 协议有一个拥堵窗口机制,负责动态调整每次发送数据包的数量。本文通俗地解释了这种算法的细节。

使用 Go 编写前端 Web 框架

本文使用 Go 语言编写一个非常简单的前端单页应用,然后将它编译成 WebAssembly。所有功能,包括前端组件和前端路由,都是用 Go 写的。看上去,网页编程即将不再是 JS 的专利了。

破坏程序员生产力的12件事

本文列出了影响程序员工作效率的常见情景:工作经常被打断、领导进行微观管理、产品需求不断扩大等等。

使用 Pandas 处理 CSV 文件

Pandas 是一个用于数据操作和分析的 Python 库,本文通过一个范例,介绍如何使用它对 CSV 文件进行数据处理。

使用 Pandas 处理 CSV 文件

排版入门

介绍排版的基本知识。

排版入门

创业公司的20个指标

一位风险投资家的观点,如何判断一家创业公司是否值得投资。

使用 Neovim 进行 JavaScript 开发

如果你喜欢 Vim 的便捷,又喜欢 VS Code 的图形界面,那么可以试试 Neovim。本文介绍如何配置 Neovim,以适应 JavaScript 开发。

Python 使用数字与字符串的技巧

本文是《Python 工匠》系列的第三篇,介绍在 Python 中编写与数字和字符串相关代码的建议与技巧。(作者@piglei_ _投稿)

GitHub 十大最佳实践

如何才能最好地使用 GitHub 管理项目,本文提供了具有可操作性的十条建议。

等待时间悖论

公共汽车的间隔时间为10分钟,那么平均等待时间应该为5分钟,但是如果进行抽样,你会发现抽样得到的平均时间为10分钟,这是为什么?简单说,原因就是等待时间越长的人,越容易被抽样到。

我为什么喜欢 Java 语言?

一个程序员解释他眼中 Java 语言的优点。

需要学习的是编程,而不是编程语言

作者注意到,编程与编程语言几乎没有关系,学生可能只是在学编程语言,而不是在学编程。

你可能不需要单页应用

现在的前端开发大量使用单页应用 SPA,使得前端的复杂性急剧增加。这篇文章提出,SPA 可能被过度使用了,大部分情况下,你可能不需要单页应用。

新人要学习的机器学习十大算法

本文介绍了机器学习最基本的十种算法,比如线性回归、朴素贝叶斯、KNN聚合等。

10月21日 GitHub 故障分析

10月21日,GitHub 发生了一次持续24小时的故障,本文是该公司的事后故障分析。主要原因是,当天两个数据中心之间的光纤断了43秒,导致主库与从库之间数据不同步,而且没法确定哪一个镜像是数据完整的,不得不从头做数据恢复。

圆周率 Pi 需要使用多少位小数?

美国国家航天局计算时,使用 Pi 小数点后15位。这样的话,即使轨道半径是250亿英里,计算误差也小于手指的长度(几厘米)。

圆周率 Pi 需要使用多少位小数?

Pandoc 生成静态网站

Pandoc 是一个文档格式转换工具,本文介绍如何使用它,将 Markdown 源码转成网页,发布到 AWS S3。

QR 二维码是怎么生成的?

本文通过一个实例,一步步演示二维码的生成算法。

压缩算法的解释

压缩是最常用的功能之一,压缩算法一般分成两大类:基于熵的压缩和基于字典的压缩。本文简单解释这两类算法的原理,以及将它们合在一起的 deflate 算法。

Manjaro 发行版介绍

Manjaro 是一个新的 Linux 发行版,内核采用 Arch Linux,UI 采用 Deepin,集灵活性和易用的 UI 于一体。

Manjaro 发行版介绍

密码学简明教程

本文回顾了加密发展的几个阶段,每个阶段都给出了 Python 的小例子。

停止无限滚动

本文提出网页的无限滚动并不是一个好的设计,应该限制使用或者停止使用。

WebAssembly 的未来

WebAssembly 目前只是 MVP(最小可行产品)阶段,本文介绍了这种编译语言未来可能具有的功能。

YAML 格式的问题

YAML 格式虽然比 JSON 格式易读易写,但也有很多问题。这种格式其实很复杂,并不是配置文件的理想格式。

Pokemon Go 为什么成功?

Pokemon GO 是一个在地图上捕捉口袋妖怪的游戏,初看起来相当无聊,不需要任何游戏技能。但是该游戏取得了惊人的成功,这是为什么?

2018 最佳 Linux 桌面发行版

本文对三个层次的(初级、中级、高级)用户,介绍最合适的 Linux 发行版,用于桌面系统。对新手有一定的参考价值。

Web Performance 101

网页性能的基础知识,针对初学者,内容比较全。

如何阅读 RFC?

RFC 是很多互联网协议的标准,但是它是文本文件,不太容易阅读。本文介绍 RFC 文档的相关知识。

奇特的代码缩进风格

本文总结了几种奇特的缩进方式。比如,每一层缩进都是前两层缩进之和,这就叫做斐波拉切缩进。

奇特的代码缩进风格

如何使用 Flutter 制作一个 iPhone 计算器?

Flutter 开发的一个简单教程。

如何使用 Flutter 制作一个 iPhone 计算器?

TensorFlow.js 自动化 Chrome 恐龙游戏

本文介绍如何使用 TensorFlow.js 进行深度学习,自动玩 Chrome 浏览器的恐龙跳跃游戏。

神奇物理学:树木中的水

有一点是肯定的,树木需要将水从根部运送到顶部。如果树高100米,树木内部有什么机制可以将水运送得这么高?要知道,一个大气压的情况下,吸管最多只能将水吸到10米的高度,要达到100米,树的内部难道存在10个大气压?

文本数据如何储存在 Canvas 图片?

网页从服务器拿到数据,需要保存下来,但是不想存在 Cookie 和 LocalStorage,怎么办?这篇文章的方法就是动态生成一张 Canvas 的 PNG 图片,将数据存在里面。

GraphQL 入门教程

本文介绍 GraphQL 的概念和优点,演示如何用 Express.js 搭建一个 GraphQL 后端。

HTML 网页的 head 元素 指南

网页的 <head> 元素可以放置很多东西,本文列出了其中一些主要的内容,可以当作参考手册。

Nginx 如何设置 IPv6 网站

本文介绍如何配置网站,接受 IPv6 的访问。

React Router v4 教程

前端框架 React 的路由库教程,提供在线代码运行示例,例子简洁能说明问题。(@Anderson-Liu 投稿)

Java 线程与 Go 线程的根本差异

作者注意到一个现象,同一台机器,Java 线程最多只能建几千个,但是 Go 线程可以建数百万个。他研究后发现,这跟线程的内存占用有关,每个 Go 线程竟然只占用4KB。

如何用 C++ 写网页?

本文教你如何用 C++ 写一个二进制程序,每当收到通过 CGI 网关发来的调用请求时,自动返回一个网页。其他后端语言也可以用来写网页,原理是一样的。

为什么要使用 GraphQL ?

GraphQL 是客户端请求服务器数据的一种新技术,本文分析的它的优点和局限。

FPGA 是什么?

现在,程序员编程都是针对某种硬件架构,比如 CPU 或 GPU,但是也可以为某种计算定制电路,这种电路专门用来完成这种计算,这就叫做 FPGA。本文介绍 FPGA 的特点,长处和短处。

DHCP 协议如何工作?

DHCP 协议全称是"动态主机配置协议",局域网的设备往往使用这个协议获得动态 IP 地址。本文解释这个协议的运作过程。

HTTPS 协议图解

图解 HTTPS 对话过程,非常形象,每一个字节的含义都讲到了。

如何让不纯的函数变纯?

通过 JavaScript 代码解释函数式编程的一些基本概念。

Go 语言与 Rust 语言的比较

本文谈了这两种语言各自的长处和短处。

最早的域名

作者写了一个脚本,查询 whois 数据库里面最老的域名。最早的 .com 域名是 symbolics.com(1985-03-15 注册),最早的 .net 域名是 nordu.net(1985-01-01 注册)。

如何写一个 Chrome 浏览器的扩展

想写 Chrome 浏览器的扩展吗?可以看这篇教程,很容易懂。原始代码有一些小问题,我重新做了一个 Demo。

树莓派如何搭建 NAS

想要搭建家用储存系统的朋友,可以看这篇教程,使用树莓派和移动硬盘,搭建一个 NAS,操作简单,可玩性高,费用便宜。

Kubernetes:令人惊讶的个人项目平台

流行的观点认为,Kubernetes 是一种过于复杂的技术,只适用于非常大的机器群。我认为这可能是错的,Kubernetes 适用于小型项目。

Kubernetes 用于个人项目?不用了,谢谢!

本文是对上一篇文章的反驳。

网页性能的准确测量

本文讨论如何使用window.requestAnimationFrame() 测量脚本操作的准确耗时。

区块链技术概述

美国国家标准技术研究所(NIST)编写的介绍区块链的小册子,针对一般读者,内容比较全面完整。

我为什么起诉 PinScreen?

一个硅谷工程师起诉了他的华人老板,还制作了一个极其详细的网页。我觉得这招很好,值得借鉴。不管官司能否赢,我要让你曝曝光。

我为什么起诉 PinScreen?

为什么国际航线的航路如此混乱?

《南华早报》的长篇可视化报道,解释为什么国际航线弯弯曲曲,不采用最近的直线距离飞行。本文图文并茂的呈现方式,值得借鉴。

为什么国际航线的航路如此混乱?

CSV 和 JSON

CSV 和 JSON 两种数据格式的介绍和比较。很多人忽略的一个事实是,最近几年 CSV 的使用量一直在上升。

异常处理是错误的设计

许多主流语言都采用抛出异常的方式处理错误,这篇文章认为,这种设计是错误的,传统的返回值是更好的方式。抛出异常的主要好处是,可以将业务代码与错误处理代码分开,缺点是它改变了控制流,有点像 goto 语言,可以随意跳转。

如何撰写技术文档

技术文档(documents)分成四种:教程(tutorial)、指导(guide)、解释(explanation)和参考(reference)。本文解释了每一种文档的特点,并给出了写作建议。

阿里巴巴的18位创始人

1999年,阿里巴巴集团成立,当时共有18位创始人,大部分是马云的同事、朋友和学生。这篇文章汇总了这18个人的公开资料。

使用 Qt 为 Python 脚本添加图形界面

Qt 是一个 C++ 写的跨平台控件库,PyQt 将其移植到 Python,可以很方便地为 Python 脚本添加图形界面。

使用 Qt 为 Python 脚本添加图形界面

微服务入门示例

本文解释了什么是微服务架构,并且给出了一个简单的示例,在 Docker 里面使用 Flask 框架和 ZeroMQ 搭建一个简单的微服务应用。

为什么使用 i3 窗口管理器?

Linux 发行版一般都自带桌面环境,如果你需要的只是一个好用的命令行,那么你可以放弃桌面环境,改用窗口管理器。i3 就是一个很好用的平铺式窗口管理器,本文给出了五个推荐理由。如果你有兴趣的话,这里还有一篇简单教程。

为什么使用 i3 窗口管理器?

Pi-hole 拦截广告

如果你还在用广告拦截器,Pi-hole 是更好的选择。它是树莓派上的 DNS 服务器,架设在局域网里面,内置黑名单,拦截广告域名的 DNS 请求。从此,局域网所有设备都看不到广告。

如何制作命令行动画?

本文介绍如何使用 ncurses 这个 C 语言标准库,写一个简单的命令行动画。

如何将 Web 应用做成 Docker?

本文通过一个很简单的单页应用,演示如何将 Web 应用放到 Docker 里面,然后通过 Docker 运行。

PyPy 的十五年

PyPy 是用 Python 编写的 Python 解释器,这也是它名字的来源。该项目的创始人回顾了走过的十五年。

Linux 内核与 Mac 内核的差异

Linux 内核与 Mac 内核虽然都源于 Unix,但是差别较大。Mac 内核继承 BSD Unix,有一些很老的代码,并且做了大量的定制。

六种虚拟私有网络工具

一些虚拟私有网络的相关知识。

你不需要Momentjs

本文列举如何用 date-fns 或者原生方法,取代 moment.js。

Severless 的缺点

决定使用 Severless 架构之前,你应该读一下这篇文章,了解这种架构的一些问题。目前,最大的问题是,一旦用了它,就很难再摆脱对服务提供商的依赖。

IPFS 介绍

IPFS 是一个具有 web 接口的分布式数据库,一旦写入,你的内容就将永远存在,且无法修改。本文是一篇很不错的介绍文章, Cloudflare 在文中宣布开通 IPFS 网关服务。如果你有自己的 IPFS 节点,就可以让 Cloudflare 的 CDN 网络分发你的内容。

ActivityPub 协议介绍

ActivePub 是一种分布式的通信协议,本文以 Mastodon 为例,介绍为什么它可以改变互联网。

Github 的语义搜索

Github 正在测试语义搜索,匹配的依据不再是关键字,而是搜索的语义。比如,搜索"连接两个字符串",就会跳出相关的代码。本文介绍实现细节。

为什么 Reason 语言合适写 React 应用?

Facebook 在开发 React 的同时,还发明了一种新语言 Reason,它是 OCaml 语言的变种。Reason 和 React 的创始人是相同的,这篇文章解释了为什么 Reason 语言天生适合写 React 应用。

现在的歌词变简单了吗?

简单的歌词通常有重复的内容。这篇文章使用压缩算法,比较现在的歌词与过去的歌词,看看哪个压缩得更小,内容更简单。

<input> 元素的三个属性

HTML 网页的 <input> 元素有几十个属性,本文介绍其中三个开发者比较不熟悉的属性。

Cloudflare worker 的一个使用实例

这篇文章很容易懂,解释怎么使用 serverless 服务,修改 HTTP 回应。这个服务看起来很好用,缺点好像是只有使用 Cloudflare CDN 的网站才能用。

为什么技术有利于暴政?

《人类简史》的作者尤瓦尔·赫拉利的最新文章。他提出,人工智能有利于政府,可以将权力集中在少数精英手里。唯一可能的解决方法,是寻找分布式的技术方案,防止资源的集中。

命令行脚本的运行原理

脚本的第一行为什么以 #! 开头?Shell 内部又是如何处理脚本的?

Presentation API

Chrome 66 支持 Presentation API,这个 API 允许浏览器定制投射到第二块屏幕的内容,使用脚本进行控制。

Presentation API

跨站点请求的七种情况

网页可以向第三方站点发出请求,这是 CSRF 攻击的主要原因。这篇文章总结了可能发出第三方请求的七种情况。

网络协议入门

本文从协议设计的顶层角度,总体上解释互联网协议的设计思想。

为什么 GraphQL 可以取代 Redux?

本文解释了 Redux 想要解决的问题,而 GraphQL 可以解决同样的问题。但是,该文没有给出细节。

DNS over TLS 的 Node 客户端

为了提高安全性,防止监听,DNS 查询已经可以在 HTTPS 协议上完成。这篇文章教你怎么写一个 Node 客户端,获取 DNS 信息。

戴维·霍夫曼的人生

本文介绍著名的压缩算法霍夫曼编码的发明人戴维·霍夫曼的故事。

戴维·霍夫曼的人生

V8 引擎十周年回顾

本文是 V8 官方团队写的历史回顾,介绍 V8 每一年在技术上的突破。

Common Lisp 的学习途径

Lisp 是函数式语言的鼻祖,入门难度较高。作者给出了学习途径。

如何编译 GIF 解析的 WebAssembly 代码?

本文以一个 C 语言的 GIF 解析库为例,介绍怎么把它编译成 WebAssembly 用在浏览器。

什么是区块链?

一篇针对普通读者的区块链入门介绍,写得比较好懂,还带有互动性的示例。

如何追踪 tab?

答案是利用新建 tab 的时候会新建 Session 这个特点,可以创建一个 uuid 写入 sessionStorage,每个请求都附上这个 uuid,就可以区分 tab 了。

使用 Google Cloud Functions 运行端对端测试

谷歌云服务最近内置了 Puppeteer。本文介绍如何使用这个功能,完成云端的端对端测试。

命令行工具的增强

这篇文章给出增强版命令行工具的清单,比如 bat 取代 cat,htop 取代 top 等等。

了解 Linux 容器技术

容器实际上是 Linux 进程的一种特殊封装,这组系列文章介绍了容器的底层知识。

如何使用 PySimpleGUI 开发 GUI?

PySimpleGUI 是一种为 Python 脚本加入图形界面的简单方案。

如何使用 PySimpleGUI 开发 GUI?

Julia语言简介(第1部分)

Julia 是一种新兴语言,设计目录是兼具 C 的速度和 Python 的灵活语法。本文介绍它的基本语法。

二叉树算法介绍:go 语言实现为例

这篇文章很不错,用最简单的语言介绍了二叉树和 go,还有大量配图。

二叉树算法介绍:go 语言实现为例

网站架构101

本文介绍大型网站架构的基本知识。

网站架构101

Go 模块简介

Go v1.11 引入了模块(module)的概念,主要为了使用语义版本,解决依赖升级的兼容性问题。

about 协议的来历

"about: "开头的网址,返回与浏览器本身相关的内容,最常用就是空网址 about: blank ,以及 about:history 。

.ipynb 文件和 Jupyter 云服务

.ipynb 文件是一种在网页上运行的代码运行时,可以实时看到运行结果,支持40多种语言的运行,包括 Python,R,Julia 和 Scala。它是由 Jupyter Notebook 生成的,本文介绍5种支持 Jupyter 的云服务。

使用 Webview 开发跨平台桌面应用

操作系统都有自己的 Webview,Mac 是 webview,Windows 是 MSHTML,Linux 是 gtk-webkit2。这篇文章教你怎么用 Webview,开发一个跨平台的桌面打飞机游戏。

使用 Webview 开发跨平台桌面应用

如何搭建一个私有的 CDN?

大部分情况下,我们使用市场上现有的 CDN 服务。但是,你也可以自己搭一个,这篇文章教你怎么做。

Java 与 Node / JavaScript 的对比

作者原来是一个 Java 开发者,后来转为使用 Node。他比较了这两种语言。

如何将 WordPress 站点发布成 Gitlab 静态页面站点?

WordPress 是常用的博客软件,虽然方便易用,但是容易产生安全问题。作者提供了一个脚本,可以将 WordPress 网站的 HTML 页面,部署到 Gitlab Pages 服务,做成一个静态网站。

WireGuard 介绍

WireGuard 内部实现原理的一些介绍,以及与现有方案的比较。

Serverless 最佳实践

Serverless 作为服务导向架构的一种形式,有很多优点。本文介绍了使用这种架构时,应该注意的问题。

如何维持缓存的一致性?

有一句名言:"计算机科学有两大难题:缓存不一致和变量命名。"本文就介绍缓存与源数据不一致的基本知识。

如何对缓存服务器注入恶意代码?

用户发出的请求,很大一部分是缓存服务器响应的。这意味着,不一定需要感染源站,只要能在缓存服务器注入恶意代码,就能达到目的。本文给出了这方面的详细介绍以及实际的案例。

OCaml 语言入门教程

OCaml 是一种通用语言,在函数式编程里面加入了命令式编程和面向对象编程的特性。

Python魔术方法指南

Python 有大量的魔术方法(方法名前后有两个下划线),本文给出了一个完整的介绍。

如何用 Node 搭建一个推特机器人?

本文详细指导你搭建一个免费推特机器人,每当有人在推特 follow 你,就会收到一条欢迎私信。

地中海为什么没有潮汐?

地中海沿岸,很多城市最热闹的大街就在海边。我一直很奇怪,难道他们不怕涨潮吗?现在终于确认了,地中海几乎没有潮汐。

如何将 Swift 用于服务端编程?

Swift 语言一般用于开发 iPhone 的 App,现在开始有人尝试将它用于服务端编程。

Puppeteer 网页爬虫和自动化测试教程

想要学习浏览器自动化的同学,可以看看这篇中文教程。

.snap vs .deb

.snap 是一种新的 Linux 安装包格式,最大特点就是自带依赖,某种程序上很像容器。

人脸检测服务对比

本文比较了谷歌、微软、亚马逊、IBM 四家公司的人脸检测服务的准确性。

人脸检测服务对比

Java 面试的算法问题

本文讲解了 Java 面试经常遇到的各种算法问题。

Vi 的来源

Vi 是 Unix 系统的常见编辑器。它最初是 ed 编辑器的改写,vi 表示 ed 的 visual 模式,后来有人写了增强版 vi improved,这就是 vim 的来历。

Mastodon 简介

Mastodon 是开源的 Twitter 克隆。它的最大特点是允许多个实例(即服务器)之间的互相联系,比如引用一个用户需要给出他所在的实例地址(@foo@mastodon.instance),有点像 Email 的概念。

Mastodon 简介

如何拿到 Homebrew 的代码提交权?

作者讲述了,他如何在30分钟内发现 Homebrew 的一个漏洞,从而可以向代码库提交代码。Homebrew 是 Mac 环境最广泛使用的开发工具之一,一旦注入恶意代码,后果非常严重。这个事情提醒我们,使用网上下载的任何代码,都必须非常小心。

Kotlin 标准库的一些优点

Kotlin 是安卓设备替代 Java 的一种编程语言,本文介绍了它的一些胜过 Java 的地方。

Go 与 Python 的比较

本文介绍 Go 语言对比 Python 的优点。

公共 DNS 比较

本文测试了几个全球性的公共 DNS 服务提供商,结果第一名是 Cloudflare,第二名是 Google。

提高 Python 程序性能的七个方法

Python 的长处不是性能,但是采用本文的方法,可以减少一些不必要的资源浪费。

网页设计的常见错误

本文使用图片对比,列出网页外观设计的15个注意点。上图左侧是改造前的网页,右侧是改造后。

网页设计的常见错误

axios 内部设计分析

axios 是一个非常流行的 JavaScript 语言的 HTTP 请求库,本文分析它的内部设计。

Python 语言如何生成随机数?

如果你需要在 Python 语言用到随机数,看这篇文章就够了。

Cherry 公司的历史

Cherry 是世界最著名的机械键盘品牌,这篇文章介绍这个品牌的历史。

Cherry 公司的历史

Python 面向对象编程

Python 初级语法教程。

如何让 SSH 更安全?

提高 SSH 安全等级的一些知识。本文较难,需要密码学知识。

Kubernetes 的起源

Google 官方介绍 Kubernetes 这个项目是怎么诞生的。

如何写一个脚本语言的虚拟机?

这组系列文章介绍脚本语言的运行虚拟机(VM)怎么写。

C 程序员应该选择哪一种语言?

本文从 C 程序员的角度比较 C++、Go、Rust 这三种语言。

WireGuard 介绍

WireGuard 仍然是一个实验性的新产品,目前只有 Linux 和安卓客户端。

正则表达式中隐藏的陷阱

从一个失败的正则表达式解释正则引擎的运行原理。

鸽子传信解释 HTTPS

本文使用鸽子传信作为比喻,解释 HTTPS 协议。

鸽子传信解释 HTTPS

Debian 系统小知识

Debian 是历史最悠久、使用最广泛的 Linux 发行版之一。今年8月16日是它25周年的生日,本文介绍一些它的小知识。

Debian 系统小知识

为什么选择 Java 作为后端开发语言?

本文介绍了 Java 语言用在后端开发的一些优势。

为什么选择 Java 作为后端开发语言?

断言库 Power Assert 介绍

为什么 Power Assert 是更好的断言库?

如何自学计算机科学?

作者给出了各门课程的参考书单和学习资源,以及一些建议。

如何制作一个节能的网站?

臃肿肥胖的网页会消耗更多能源,释放更多二氧化碳。为了保护地球,我们应该制作简单节能的网页,作者演示了如何制作一个只有 7KB 的 Wordpress 网站。

如何制作一个节能的网站?

最简单的反向代理服务器

本文介绍如何用 Go 语言实现一个最简单的反向代理服务器。

谷歌云服务:The Good, Bad, and Ugly

作者从用户角度,对谷歌云服务的各个方面进行了评价。

图像 EXIF 方向错误

你有没有遇到,照片在手机里面方向正确,上传到网站却左右颠倒或上下颠倒?这篇文章告诉你为什么。

图像 EXIF 方向错误

幽灵文字

Unicode 里面有一些不存在的汉字,称为"幽灵文字"。它们是怎么进入标准的?原来,1978年,日本制定本国编码标准 JIS 时有一些错误,创造出这些文字,后来 Unicode 又全部继承了 JIS。

幽灵文字

新的 HTTP 头字段 Feature-Policy

继内容安全政策之后,现在又多了一个新的 HTTP 头字段 Feature-Policy,用来禁止网页执行某些功能。

Android 9.0 特性介绍

Android 9.0 就是早先推出 Beta 版的 Android P。现在我们知道,P 代表的甜点就是派(Pie)。

Android 9.0 特性介绍

TLS 1.3 介绍

HTTPS 协议的最新版本 TLS 1.3,最近成为了国际标准 RFC 8446。本文详细介绍这个新协议,包括 TLS 1.2 的缺陷,以及 TLS 1.3 如何解决它。

TLS 1.3 介绍

如何使用 Node 优化图片?

本文教你使用 JS 的 imagemin 模块,压缩图片的大小。

DNS over HTTPS

DNS 查询都是基于 HTTP 协议的,即使是加密通信,网络服务商依然可以知道你想访问的网站。现在有多种解决方案,本文介绍如何在 Firefox 浏览器打开设置,使得 DNS 协议走 HTTPS 协议。

WebAssembly 的发展方向

WebAssembly 是浏览器可以执行的字节码,使得非 JS 编写的程序可以在浏览器运行。它现在的功能非常少,还处在 MVP(最小可用产品)状态。这篇文章介绍了一些很可能采纳的 WebAssembly 提案。

少子化和人口老龄化综述

全世界发达国家都有少子化和人口老龄化的趋势,这篇文章是我看过的最好的这方面的综述,有大量的数据和事实。除了非洲,其他大洲的人口都接近峰值了,将要开始下降,这意味着许多国家将不得不依靠移民,解决本国人力不足问题。

SVG 动画入门:以加载转子为例

本文手把手教你如何写一个最简单的 SVG 动画。

Hash 算法简介

Hash 算法的概念性介绍。

Hash 算法简介

为什么飞机驾驶舱不使用触摸屏?

现在的飞机驾驶舱还是使用物理仪表盘,而不是触摸屏,这是为什么?主要的原因还是物理按钮会形成肌肉记忆,比操作触摸屏更快。

为什么飞机驾驶舱不使用触摸屏?

斐波那契数列的计算公式

如果不用递归,直接算出斐波那契数列的任意项,应该怎么计算?

如何通过 npm 窃取信用卡密码?

本文讲述了作者通过 npm 发布恶意代码的种种手段,非常值得一读。其中有一个技巧,就是package.js 与 package.min.js 的代码不同,恶意代码只放在后者。

图数据结构入门

图(graph)是一种数据结构,由点(vertex)和边(edge)组成。本文介绍图结构的算法基本知识。

图数据结构入门

判断油画的年代

这种问题恐怕要熟悉欧洲艺术的专家才能回答。现在,有人写了一个神经网络教程,介绍如何用算法判断油画的年代。

判断油画的年代

SVG 背景

这篇文章教你如何手写一个 SVG 文件,作为网页的背景图案。

SVG 背景

气候变暖的入门介绍

全球气候正在变暖,这到底是怎么一回事,原因是什么。本文是我读过最好的这方面的入门读物。

如何设计 Web 应用的架构

大型 Web 应用最关键的就是架构,最难的也是架构。这份教程整理了这方面需要知道的知识。

Webpack 4 入门教程

Webpack 是 JS 代码的打包器,现在前端开发的主流工具。Webpack 4 是它的最新版本。

ssh 端口为什么是 22?

SSH 的作者回忆, ftp 端口是21,telnet 的端口是23,他就挑了中间剩下的22。

PDF 格式有什么用?

作者认为应该避免使用 PDF 格式。一般情况下,HTML 格式是更好的选择。如果要求保证精确的打印效果,可以使用压缩的 Postscript 格式。

为什么 Kubernetes 是新的应用服务器?

这篇文章解释,为什么以后发布应用的时候,不是直接发布在服务器上,而是通过 Kubernetes 发布。

Python 语言教程:基本统计学指标

一篇很好的初级 Python 教程,教你用最基本的语法,算出平均数和标准差。

WordPress 编译为 .Net

有人把 WordPress 编译成了 .Net 代码,运行的时候只需要 .Net 环境,不需要 PHP 了。随着转码器的流行,以后这种事情可能越来越多。你用什么语言可能根本无所谓了,反正都可以转来转去。

IP 地址 192.168.1.1 的由来

为什么是 192.168.1.1 这个地址,而不是别的地址被指定为内网 IP?

Kubernetes 入门教程

Kubernetes 是现在最流行的容器集群管理工具,本文给出了一份上手教程,教大家怎么安装和使用它。

dd 命令教程

dd 命令通常用来克隆整块磁盘,或者制作 Linux 系统的 USB 启动盘。这篇文章教你怎么用,其实很简单。

如何写一个模块打包器

Webpack 是现在最流行的模块打包器,可以将脚本依赖打包成一个文件。这到底是怎么实现的?如果自己写一个打包器,应该怎么写?

如何写一个模块打包器

Chrome 浏览器开发者工具教程

介绍 Chrome 开发者工具各个部分的用法。

Chrome 浏览器开发者工具教程

MacOS 内核与 Linux 内核的差异

介绍 MacOS 内核的历史演变,跟 Linux 的差异还是很大的。

什么是 Web 应用程序防火墙(WAF)?

WAF 是应用程序级别的防火墙,目前主要用在 Web 服务器软件。这篇文章简单介绍了 WAF 的概念。

什么是 Web 应用程序防火墙(WAF)?

数据结构参考

一份很好的数据结构教程,图文并茂,简明扼要,列出每种结构的定义和优缺点,非常适合初学者。

数据结构参考

Go101

*Go 101 *是一本介绍 Go 语言的语法和各种细节的开源电子书,帮助读者深入彻底地了解 Go。

逆向工程初学者教程

向初学者介绍逆向工程的知识。

如何破解路由器?

一份简单的教程,如何获得局域网路由器的 root 权限。

Timsort 入门

Python 的默认排序算法是 Timsort,它的表现据说好于快排(quicksort)。本文解释了这种算法的基本原理。

深入理解 flutter 的编译原理与优化

闲鱼是国内最早使用 Flutter 的 App 之一,这个系列的文章是他们对 Flutter 的使用总结。

Chrome 的缓存浏览模式

Chrome 可以启用"show saved copy" 按钮。如果网站下线,而本地又有以前访问时的缓存,就能看到缓存的版本。

Chrome 的缓存浏览模式

微服务架构的简单解释

一篇比较简单的微服务架构的解释。

在 Google Bucket 托管静态网站

静态网站可以免费托管在很多地方,现在又多了一个选择:谷歌的云服务。这篇文章教你怎么做。

Flutter 入门介绍

现在的跨平台App开发工具分成两类:(1)容器包了Web View,App实际是一个本地网站;(2)原生控件的跨平台抽象。Flutter走了不一样的路:自己开发了一套原生控件,每个平台实现一遍,然后把渲染引擎(这套控件)打包在每个应用里面,因此性能没有问题,平台差异也很小。

Flutter 入门介绍

Python 类型系统的现状

本文回顾了 Python 类型系统的现状,对它的优缺点进行了评价。

Python 类型系统的现状

为什么 SQL Server 的日期从1753年1月1日开始?

原因是1752年英格兰进行了日历改革,由于日历算法的差异,导致丢失了9月3日到9月13日的一共12天。为了避免计算天数的误差,SQL Server 就索性把最小日期定为1753年1月1日,更大的日期范围由 datetime2 类型提供。

Unix 就是 IDE

集成开发环境(IDE)作为文件结构、代码编写、代码维护、测试和排错工具于一体的应用程序,对程序员们非常有价值。这个教程展示如何用 Unix 命令行工具完成 IDE 的功能。

Web Assembly 和 Go

这里还有一篇文章,展示了两个用 Go 语言写的 WebAssebmly demo。

如何生成 localhost 的证书?

本地开发时,我们常常使用 localhost 访问本地服务,怎样才能生成证书,让 localhost 提供 https 服务呢?

Unicode 字符与 CSS 背景

Unicode 字符用作 CSS 背景,可以产生一些非常独特的背景。此文还有续篇。

Unicode 字符与 CSS 背景

如果没有 if 语句

一篇很有意思的文章,讨论如果不使用 if ... else 语句,应该怎么写代码。他的意思是,某些情况下 if 属于误用,会造成代码冗余或不利于阅读,这时应该减少 if 的使用。

国内最大的 DDOS 攻击

4月8日,清明节后第一个工作日,腾讯云一个重要的棋牌游戏客户突然遭受大流量 DDoS 攻击,棋牌类游戏遭受攻击习以为常,但是本轮攻击流量峰值竟达到了1.23Tbps,刷新国内DDoS攻击最大流量记录。

devops 工程师的职务

devops 是 IT 行业的一个新兴领域,这一类工程师的职务应该怎么分类呢?这篇文章认为可以分成三种职务:运维(Operations)、平台工程(Platform Engineering)、发布管理(Release Management)。

MySQL 数据库的字符集,要用 utf8mb4,而不是 utf8

MySQL 的 utf8 字符集不是真正的 UTF-8,只支持最多三个字节的字符。真正的 UTF-8 可能会出现四个字节的字符。MySQL 从来没有修复这个 Bug,而是使用另外的解决方法:真正的 UTF-8字符集改用 utf8mb4 的名字提供。.

网站流量指标的含义

UV、PV、跳出率(bounce rate)这些词到底是什么意思?怎么计算?

Web 技术史

这篇文章写于2014年,回顾了互联网开发技术的历史。客户端的部分看不看无所谓,服务器的部分写得很好。

socks5 技术简介

socks 是一种服务器的通信代理协议,本文介绍它的一些基本知识。

Flutter 试用感受

Flutter 是谷歌推出的跨平台App开发工具。只要写一次代码,就能同时编译出安卓和iOS两个平台的App。这篇是一个 iOS 开发者的试用报告,他说他对 Flutter 感到非常满意。

Channel 服务介绍

Channel 是 Web Socket 协议的封装,提供服务器、PC端、手机端的库,做到客户端订阅服务器事件,或者服务器订阅客户端事件。

Rust 初学者指南:初识 Rust

Rust 是一种静态的编译型语言,实现了C 或 C++ 大部分的功能。但是不同于 C 和 C++,Rust 还可以进入 C# 和 Java 长时间统治的领域:自动内存管理。Rust 语言既有低级语言的速度优势,同时又不用手动管理内存,还不存在麻烦的垃圾收集机制。

WebAssembly 现状与实战

WebAssembly 并不是一门编程语言,而是一份字节码标准,需要用高级编程语言编译出字节码放到 WebAssembly 虚拟机中才能运行, 浏览器厂商需要做的就是根据 WebAssembly 规范实现虚拟机。本文重点介绍如何使用 AssemblyScript 来编写 WebAssembly。

git push --force-with-lease

不要用 git push --force,而要用 git push --force-with-lease 代替。在你上次提交之后,只要其他人往该分支提交给代码,git push --force-with-lease 会拒绝覆盖。

为什么 Linux 用户更喜欢命令行?

这篇文章讨论了为什么程序员更喜欢使用命令行,而不是图形界面。

IPFS 教程

它是一个分布式网络,采用点对点通信。内部是一个区块链,文件写入以后就没法删除了,然后通过哈希可以读出文件。缺点是本地需要架设一个客户端,资源开销有点大。

IPFS 教程

Puppeteer 的一些使用经验

Puppeteer 是谷歌推出的 Chrome 无头浏览器,是目前的浏览器自动化首选工具。本文介绍了作者的使用经验。

GRAIL 笔迹识别算法

这篇教程详细介绍一种手写识别算法,并且附有多个可视化示例可以操作。这篇的英语看起来有点费劲,但是耐心看一定可以看懂,因为解释得很好,也没有复杂的数学。

GRAIL 笔迹识别算法

网页如何适配 WatchOS5

苹果手表的最新系统 WatchOS5,可以在手表上浏览网页。WWDC 2018 放出一段8分钟视频,介绍网页如何适配苹果手表,还算挺简单的。

网页如何适配 WatchOS5

GPU 知识介绍

这篇文章介绍什么是 GPU,为什么不用 CPU 进行图形渲染,GPU 的基本概念等等。

Python 的数据类型: list 与 tuple 的区别

转动的电风扇 动态火焰效果

Python 的数据类型: list 与 tuple 的区别

如何使用 AWS LAMBDA 做一个 YOUTUBE MP3 下载器

作者做了一个 Bookmarklet。浏览 Youtube 的时候,只要按一下这个书签工具,就会把请求发到 AWS LAMBDA,然后抓取 Youtube 流文件,转码成 mp3 文后以后存到 S3,再返回下载地址。

各种数据结构的 JavaScript 实现

这篇文章针对初学者,介绍 Array、HashMaps、Sets、Linked Lists、Stacks、Queues 这六种数据结构的 JavaScript 实现。

tcpdump 示例教程

tcpdump 是一个 Linux 命令行工具,用来查看 TCP 通信。

Eloquent JavaScript 3rd edition 中文版

一本开源的 JavaScript 语言的入门教材。

2018 世界杯预测

有人根据历史数据,写了一个脚本,预测本届世界杯的所有比赛(见上图)。四强是葡萄牙、阿根廷、巴西、德国,决赛是巴西对德国,冠军是德国。链接是完整的脚本和数据集下载。不过,世界杯已经开始了,跟真实结果一比较,似乎出入比较大,这届的强队都表现一般。

2018 世界杯预测

MATLAB 处理照片

你还是使用 PhotoShop 处理照片吗?可以考虑试试看 MATLAB。

MATLAB 处理照片

V8 改进垃圾清理机制

Testcafe 是一个 UI 测试框架,可以在各大浏览器进行 UI 测试。相比 Puppeteer,它提供各种专门针对测试的封装好的方法。

V8 改进垃圾清理机制

数码照相机如何工作

本文介绍数码相机 CMOS 芯片的感光原理,彩色的光线是如何变成数字信号的。

数码照相机如何工作

while True: learn()

一个帮助玩家学习人工智能的游戏。你扮演一个人工智能专家,在游戏的引导下解决各种问题。

while True: learn()

初学者在 Linux 上安装比特币完整节点指南(2018年版)

这篇文章教你如何在没有任何 Linux 经验的情况下,全新安装Kubuntu 18.04系统,并在这个系统安装比特币完整节点,加入比特币网络。

计算机科学速成课

志愿者从 Youtube 搬到 B 站的40集视频教程。

计算机科学速成课

awesome-ruby-china

Ruby China 论坛的精华贴整理。

相关系数与余弦相似性

这里有一篇论文,给出相关系数的十三种解释,但都写得不太容易理解。后来,我又读到了标题里面的那篇论文,指出相关系数就是两个矢量的余弦相似性,所以完全相关是+1或-1,完全不相关是0,一下子就看懂了。

相关系数与余弦相似性

Docker and Go

2013年的时候,Docker 团队介绍他们为什么使用 Go 语言写 Docker。

编写 Markdown 解析器

一组三个部分的系列文章,介绍如何从零开始写一个 Markdown 解析器。作者是用 Ruby 语言实现,但是一些基本知识的介绍跟语言无关,写得挺好的。

深度学习在线课程比较

深度学习是目前很热名的主题,各大网校都有这方面的课程。这篇文章比较了美国三大教育平台的深度学习课程:Coursera、Udemy 和 Udacity。

前端人工智能?TensorFlow.js 学会游戏通关

作者使用 TensorFlow.js,让程序自动完成 Chrome 浏览器的内置小游戏"恐龙快跑"。

前端人工智能?TensorFlow.js 学会游戏通关

哈佛大学游戏开发课程

哈佛大学游戏开发课程 CS50,提供讲课视频、课程笔记、PPT 和作业等资料。

马尔可夫决策过程

如何利用马尔可夫链建立一个决策模型,文章较好懂。

Awk 编程语言

awk 是 Unix 命令行处理文本的有用工具,这里是1988年出版的 awk 教程。Unix 命令行高度稳定,所以这本教材也没那么过时。

JavaScript 算法与数据结构

这个仓库收集了30多种算法的 JavaScript 实现。

高性能矩阵乘法

矩阵乘法需要计算每一行与所有列的乘积之和,如果矩阵很大,乘法计算是非常耗时的。这篇文章讨论如何实现一个高性能的矩阵乘法算法。

高性能矩阵乘法

Python - 100天从新手到大师

一本针对初学者的 Python 教程。

DiscoverDev.io

该网站每天列出5~10篇当天值得阅读的软件文章。

Facebook 的机器学习视频教程

《Facebook 机器学习指南》是由 Facebook 广告机器学习团队开发的六部分的视频系列。该系列分享了最好的现实世界实践,并提供了如何将机器学习功能应用于实际问题的实用技巧。

气压的知识

气压就是大气的压力,一个标准大气压等于760毫米汞柱。有的地方气压高,有的地方气压低,这是风形成的根本原因,台风就是巨大的热带低气压。地球上,赤道由于高温蒸发是低压区,极地由于冷空气下降是高压区,这就形成了地球的风带。

Flask 教程的中文版

Flask 是 Python 的 Web 开发框架。这个教程教你如何用 Python 和 Flask 来创建 Web 应用。

arl

各种语言最受欢迎的项目,按照 GitHub Star 的数量排行。

谷歌官方的 Bash 脚本风格要求

Bash 脚本的语法远比编程语言宽松,你很容易写出难以阅读、风格混乱的脚本,可以参考谷歌如何写 Bash 脚本。

不必要的 HTTP 头信息

本文统计了30个最常见的 HTTP 头信息,逐个讨论哪些是必要的,哪些是没必要的。

响应式表格的两种解法

一种是使用 text-shadow 属性复制表头,另一个使用 element 方法复制表头。但是,这两种方法都有局限,前者是单元格里不能有换行,后者是只有 Firefox 支持。

响应式表格的两种解法

分布式系统的全面介绍

什么是分布式系统?最简单的定义,分布式系统是一组计算机一起工作,对于最终用户只显示为一台计算机。这些机器具有共享状态,可以处理并发操作,如果其中一台机器发生故障,不会影响整个系统的正常运行。

C Primer

一张网页的《C 语言的入门教程》,比较注重内存部分的讲解。写得不是很易读,但是还是可以看一下。

改变世界的17个数学公式

本文介绍了17个据说改变了世界的数学公式。数了一下,我知道9个。

改变世界的17个数学公式

如何用 Python 实现一个简单的 JSON 解析器?

代码还算简单,可以作为编译器的训练。

Everything old is new again: Microservices

这篇短文讨论了 SOA 架构(服务导向架构)和微服务架构的差异,为什么 SOA 会演变成微服务。

只有 13 台 DNS 根域名服务器原因

我们经常听到 DNS 根域名服务有 13 台,那么是为什么呢? 今天我们来深入了解下。

Linux: a Portable Operating System

这是 Linus Torvalds 的硕士毕业论文,介绍 Linux 系统如何适配不同的硬件架构。这篇论文不涉及代码,只介绍一些概念性的东西,但也不是那么好懂,至少我没有完全看懂。对内核和操作系统感兴趣的朋友,可以读一下。

ed 命令的一种用法

ed 是 Unix 系统里面最古老的命令行编辑器,但是功能并不弱。这篇文章介绍了一个使用 ed 的简单实例。

PacVim

通过吃豆子(PacMan)游戏学习 Vim 操作的命令行游戏。

PacVim

最简单的马尔可夫链图解

一个通俗的实例是,每天有"晴天"和"下雨"两种天气,天气变化的概率是50%,那么马尔可夫链就可以生成一个未来一周天气的模型。

最简单的马尔可夫链图解

决策树模型入门

决策树模型(Decision Tree)是最简单的机器学习模型,也最容易理解。当决策受到多个因素影响时,这个模型相当有用。

决策树模型入门

为什么 go 结构是有害的?

多线程编程之中,有一种 go 结构,就是主线程之外分出一个线程,这个线程完成任务以后,再回到主线程。作者认为,这种结构是有害的。他的最精彩观点就是:如果允许使用 go 结构,那么所有的语言功能都可以用这种结构实现,程序很快就会乱做一团。

为什么 go 结构是有害的?

Elm + Rust 开发桌面应用

这个项目展示了另一种开发桌面应用的可能。它的原理是,任何操作系统都有自己的 WebView,也就是说可以在应用程序里面调用 WebView 展示网页。那么可以使用 Rust 语言打包 WebView,而 JS 脚本部分交给 Elm 语言生成。由于 WebView 是系统提供的,所以打包出来非常小,一般只有几百KB,资源占用也很少。

Elm + Rust 开发桌面应用

高可用的部署技巧

Netflix 公司的工程师介绍,他们如何部署代码,提高服务的可用性,比如使用红黑部署、设置部署窗口等等。

哈佛大学《CS109:数据科学基础》的课程资料

1xx 编号的课程都是本科生的基础课程,我看了一下,讲的是 Python、基础的统计学知识和数学模型,提供免费的课程视频和PPT 下载。

《技术面试需要掌握的基础知识整理》

技术面试需要掌握的基础知识整理。

互联网公司技术架构

作者收集的国内各大互联网公司技术架构的资料

Node.js 最佳托管商

现在,各大云服务商都支持 Node.js 主机,本文对比了最大的 6 家服务商各自的优缺点。

软件测试的误区

本文讨论了13种软件测试的错误做法,比如:(1)单元测试与集成测试的比例不正确;(2)太相信 TDD(即写代码之前就写测试);(3)写了大量很慢的测试;(4)手动运行测试;(5)没有把生产环境的错误写成测试等等。

软件测试的误区

《React in patterns》

React 如何使用各种编程模式?

《React in patterns》

中译原文

本文集中介绍 Rust 最重要的核心特性:内存管理。这是 Rust 的主要创新之一,它的许多独特的特点是基于此的。本文写给不知道 Rust 或刚刚开始学习它的程序员的。对于熟悉 C、C++ 或其他使用手动管理内存以及使用垃圾回收器语言的读者来说会更容易理解 Rust 的特点。

SHA256 的实现

SHA256 是目前常用哈希算法里面最可靠的,Git 和比特币都依赖这种算法。本文解释了它的实现。

Python 列表的用法

列表(list)是最基本的数据结构,这篇文章通过实例讲解 Python 如何操作列表。很容易读,就是内容比较浅,只适合刚刚开始学 Python 的初学者。

Cosmos

收集各种算法的代码实现的仓库。

Meet the New Dialog Element

HTML 5.2 新增了 < dialog> 元素,这个元素将来一定会广泛使用,因为它提供了浏览器原生 Modal 窗口。

Meet the New Dialog Element

Active Record 与 Data Mapper 的差异

关系型数据库的操作通常采用 ORM 库,将表格转换成对象。ORM 主要分成两种类型:Active Record 与 Data Mapper。本文讨论这两种模型的差异和适用场景。

《计算与推断:数据科学基础》

本书是加州大学伯克利分校《数据科学导论》课程的教材,现在开源了。

WebAssembly 周刊

每周给你发送一封邮件,介绍本周值得关注的 WebAssembly 消息。

Optimizing React: Virtual DOM explained

React 的虚拟 DOM 机制的详细解释, JSX 代码如何变成虚拟 DOM 的数据结构。

Canvas: Draw on the web

从零基础开始,到Canvas API,再到基本动画与高级动画的实现,还会介绍视音频的处理、移动应用,最后如果有时间会扩展说一说3D、多人应用、游戏制作等。

Canvas: Draw on the web

Node 10 的异步遍历器

上个月底发布的 Node 10 支持异步遍历器,对 Stream 操作有重大影响。这篇文章介绍了如何用这个新语法读取文件内容,写法变得很自然。

A Gentle Introduction To Rust

Rust 语言入门教程

D3 Graph Theory

图理论(graph theory)是重要的数学分支,在数据处理领域有着重要应用。这个教程采用可视化库 D3,把图理论变成了可视化互动教程。

D3 Graph Theory

数据回归的15种类型

回归(regression)是数据处理的常用技术,用来找出数据的模式。本文介绍数据回归的15种拟合。

数据回归的15种类型

GitHub 最受欢迎的20个课程仓库

很多开放课程的仓库放在 GitHub 上面,GItHub 官方列出了最受欢迎的20个仓库。

Probability Theory (For Scientists and Engineers)

一个概率论的概览性介绍,每个章节后面有一个 R 语言的小例子。

D3 In Depth

可视化引擎 D3 的教程。

分布式系统的几个基本概念

Uber 架构师分享在搭建分布式支付系统过程中,遇到的最重要的几个概念:SLA、scaling、Consistency、Durability、Idempotency等。

解谜计算机科学

我写这本书,就是为了弥补计算机业界这一空缺,改变行业的现状。它将吸引新鲜干净的血液进入这个行业,并且赋予他们力量。它也可以刷新内行人员的头脑,让他们重新理解和审视已有的知识。这样也许我们能冲破这个行业的重重迷雾,让它变得诚实,获得科学的精神,成为像物理一样踏实的学科。 很多计算机书籍都喜欢从"数学基础"开始,一开头就是长篇累牍的数学公式,定理,证明...... 结果读者还没读完数学基础就倒下睡着了,再也不想打开这本书。所以我不从数学基础开始,而是从最简单的生活常识。在认识发展的过程中,你会自己去创造出所需要的那些数学。(摘自《序言》)

《Machine Learning Yearning》

他的新书《Machine Learning Yearning》现在可以免费订阅。今后几个月里面,他每完成一个部分,你就会得到邮件通知,可以立即读到。根据说明,这本书大概100页左右,每章的长度很短,非常容易阅读。内容主要关于如何实现你自己的机器学习项目,重点不是算法,而是如何运用算法到真实项目。

《Machine Learning Yearning》

《Foundations of Data Science》

第一部分:Python 数据处理 第二部分:抽样推断 第三部分:预测与机器学习

《Foundations of Data Science》

Programming Blockchains Step-by-Step

介绍如何使用 Ruby 语言从零开始写一个区块链实现,代码非常好懂,并有各种基础概念的解释。

Low Level Bit Hacks You Absolutely Must Know

位运算(bit operation)的用途,有很多例子。

React - Basic Theoretical Concepts

React 官方关于 React 原始设计思想的解释。

Google 面试自学手册

一份爱好者整理的 Google 面试准备指南。

Color: From Hexcodes to Eyeballs

人眼如何感受到色彩,读懂这篇文章需要一点物理学知识。