(不好意思,这个系列中断了近两周,我会尽快在这几天,把后面几篇写完。) 上一次,我介绍了Hacker News的排名算法。它的特点是用户只能投赞成票,但是很多网站还允许用户投反对票。就是说,除了好评以外,你还可以给某篇文章差评。 Red
互联网的出现,意味着"信息大爆炸"。 用户担心的,不再是信息太少,而是信息太多。如何从大量信息之中,快速有效地找出最重要的内容,成了互联网的一大核心问题。 各种各样的排名算法,是目前过滤信息的主要手段之一。对信息进行排名,意
程序员Scott MacDonald做了一个很有趣的项目----骰子作画。 他用黑底白点的骰子。 模拟出一张人像照片。 把图像放大,就可以看得更清楚。 他一共用了2500多颗骰子。 最后的成品就是这样。 任何一张图片都可以用骰子模拟出来,算法非常简
上一次,我介绍了贝叶斯推断的原理,今天讲如何将它用于垃圾邮件过滤。 ======================================== 贝叶斯推断及其互联网应用 作者:期权记 (接上文) 七、什么是贝叶斯过滤器? 垃圾邮件是一种令人头痛的顽症,困扰着所
一年前的这个时候,我正在翻译Paul Graham的《黑客与画家》。 那本书的第八章,写了一个非常具体的技术问题----如何使用贝叶斯推断过滤垃圾邮件(英文版)。 我没完全看懂那一章。当时是硬着头皮,按照字面意思把它译出来的。虽然译文质
上个月,Google把"相似图片搜索"正式放上了首页。 你可以用一张图片,搜索互联网上所有与它相似的图片。点击搜索框中照相机的图标。 一个对话框会出现。 你输入网片的网址,或者直接上传图片,Google就会找出与其相似的图片。下面这张图
1. e是一个重要的常数,但是我一直不知道,它的真正含义是什么。 它不像π。大家都知道,π代表了圆的周长与直径之比3.14159,可是如果我问你,e代表了什么。你能回答吗? 维基百科说: "e是自然对数的底数。" 但是,你去看"自然对数",
昨天,我读到一篇文章,很赞同它的观点。 作者举了一个圆的例子,来说明这一点。 圆形可能是人类最先认识的形状。我们从直观的体验,就可以马上说出,什么是圆的。比如,苹果是圆的,轮子是圆的,太阳是圆的,等等。 但是,如果要从学术
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。 这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Che
据说,陶哲轩(Terrence Tao)是40岁以下最聪明的美国科学家。 他最近在Blog(此链接被屏蔽)上出了一道数学题,翻译如下: 第三个问题,我根本不懂,就不考虑了。 前两个问题,我一开始用直觉判断,后来发现想不清楚,只好老老实实拿出
过去三个月,我一直在写《Bash 脚本教程》,现在终于写完了。 Bash 是 Linux 和 Mac 的默认 Shell(命令行环境),系统管理和服务器开发都需要它。虽然不难,但是语法很怪异,比如计算字符串的长度要写成${#varname},根本记不住,需要查
维基百科有一个姐妹项目,叫做"维基数据"(Wikidata)。你可以从维基百科左侧边栏点进去。 "维基数据"将维基百科的所有数据,整理成一个可以机器处理的数据库,方便查询。比如,山西省人口最多的地区是哪一个? 这种问题在维基百科查询,
FFmpeg 是视频处理最常用的开源软件。 它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许多音频和视频格式的标准编码/解码实现。 FFmpeg 本身是一个庞大的项目,包含许多组件和库文件,最常用的是它
有时,Bash 脚本需要创建临时文件或临时目录。 常见的做法是,自己在/tmp目录里面生成一个文件,这样做有很多弊端。本文介绍如何安全地处理临时文件。 一、临时文件的安全问题 直接创建临时文件,尤其在/tmp目录里面,往往会导致安全问题
Git 版本管理时,往往需要撤销某些操作。 本文介绍几种最主要的情况,给出详细的解释。更多的命令可以参考《常用 Git 命令清单》一文。 一、撤销提交 一种常见的场景是,提交代码以后,你突然意识到这个提交有问题,应该撤销掉,这时执行
2019年11月,GitHub 正式开放了 GitHub Actions 这个功能,现在不用申请就能使用。 GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,但也可用作代码运行环境。功能非常强大,能够玩出许多花样。 我写的《GitHub Actions 入门教程
新人学习手机 App 开发,一开始总要选择一条学习路径。 如果你熟悉 Java 语言,可以学习安卓开发;如果熟悉脚本语言(比如 Python 或 Ruby),可以学习 Swift 语言,进行 iOS 开发;如果像我一样,比较熟悉 Web 网页技术,那么 H5 开发是
手机现在是互联网的最大入口。根据《中国互联网报告》,手机网民已经超过8亿,人均每天上网三个多小时。 毫不奇怪,手机应用软件(mobile application,简称 mobile App)的开发工程师供不应求,一直是 IT 招聘的热门。 如果你开始学习手
每个人都下载文件,大家有没有想过,文件可能是假的,尤其来自网盘或专门的下载站。 本文就来谈谈如何识别文件的真假。 一、XcodeGhost 事件 我们从一件真实的事件说起。 2015年9月,苹果手机的一些 App 被发现向可疑网站发送数据。进一
本文是写给 JavaScript 程序员的 Python 教程。 Python 的异步编程,其他人可能觉得很难,但是 JavaScript 程序员应该特别容易理解,因为两者的概念和语法类似。JavaScript 的异步模型更简单直观,很适合作为学习 Python 异步的基础。 本
CSS 有两个最重要的基本属性,前端开发必须掌握:display 和 position。 display属性指定网页的布局。两个重要的布局,我已经介绍过了:弹性布局flex和网格布局grid。 本文介绍非常有用的position属性。我希望通过10分钟的阅读,帮助大家
Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具。 本文介绍如何使用 Tmux。 一、Tmux 是什么? 1.1 会话与进程 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输
GitHub Actions 是 GitHub 的持续集成服务,于2018年10月推出。 这些天,我一直在试用,觉得它非常强大,有创意,比 Travis CI 玩法更多。 本文是一个简单教程,演示如何使用 GitHub Actions 自动发布一个 React 应用到 GitHub Pages。
Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪。 一、CSRF 攻击是什么? Cookie 往往用来存储用户的身份信息,恶意网站可以设法伪造带有正确 Cookie 的 HTTP 请求,这就是 CSRF 攻击。 举例
xargs是 Unix 系统的一个很有用的命令,但是常常被忽视,很多人不了解它的用法。 本文介绍如何使用这个命令。 一、标准输入与管道命令 Unix 命令都带有参数,有些命令可以接受"标准输入"(stdin)作为参数。 $ cat /etc/passwd | grep r
简介 curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。 它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。 本文介绍它的主要命令行
手机文件,比如照片和视频,如何下载到桌面电脑? 普通用户可以使用手机线,将手机和电脑连起来。作为开发者,其实有更方便的方法,就是在手机架设一个 HTTP 服务,然后从桌面浏览器访问手机。 本文讲解如何使用 Termux 架设手机的 HTTP
我们每天看别人的视频,有时也拿起手机拍一段。你有没有想过,把自己的照片和视频做成一部短片呢? 现在的视频编辑软件早就脱离了专业人士,操作日趋傻瓜化,对新人非常友好。哪怕你是一个彻底的外行,也能很轻松地做出一部像样的短片。
网页在手机浏览器打开时,怎么调试? 安卓设备的 Chrome 浏览器支持远程调试,可以使用桌面浏览器的开发者工具。本文介绍如何进行远程调试。 Step 1:启用开发者模式 远程调试需要打开”开发者模式”。如果你的手机已经打开,可以跳过这
CockroachDB 是一个开源的分布式数据库,最近改变了代码授权,放弃了 Apache 许可证。 许多开源数据库这一两年都改变了授权,比如 Confluent、Elastic 、MongoDB、Redis Labs、TimescaleDB。本文分析这种现象。 一、CockroachDB 的许可证
网页在不同尺寸的设备上,都有良好的显示效果,叫做"响应式设计"(responsive web design)。 响应式设计的网页图像,就是"响应式图像"(responsive image)。 响应式图像的解决方案有很多,JavaScript 和 CSS 都可以实现。本文介绍最简
这组 OAuth 系列教程,第一篇介绍了基本概念,第二篇介绍了获取令牌的四种方式,今天演示一个实例,如何通过 OAuth 获取 API 数据。 很多网站登录时,允许使用第三方网站的身份,这称为"第三方登录"。 下面就以 GitHub 为例,写一个最简
上一篇文章介绍了 OAuth 2.0 是一种授权机制,主要用来颁发令牌(token)。本文接着介绍颁发令牌的实务操作。 下面我假定,你已经理解了 OAuth 2.0 的含义和设计思想,否则请先阅读这个系列的上一篇文章。 进入正文之前,插播一则活动消
OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。 这个标准比较抽象,使用了很多术语,初学者不容易理解。其实说起来并不复杂,下面我就通过一个简单的类比,帮助大家轻松理解,OAuth 2.0 到底是什么。 一、快递员
一、概述 网格布局(Grid)是最强大的 CSS 布局方案。 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。 上图这样的布局,就是 Grid 布局的拿手好
网页需要配色。一种好看、易用、符合心意的配色,是很不容易的,尤其在没有设计师时。 一、Flat UI 色表 最简单的方法是,从一个给定的色表选择颜色。我以前就是这样,主要根据 Flat UI 的色表配色。 这个色表提供20种颜色(其实是10种,
敏捷开发(agile development)是非常流行的软件开发方法。据统计,2018年90%的软件开发采用敏捷开发。 但是,到底什么是敏捷开发,能说清的人却不多。本文尝试用简洁易懂的语言,解释敏捷开发。 一、迭代开发 敏捷开发的核心是迭代开发
一、概述 面向对象编程和关系型数据库,都是目前最流行的技术,但是它们的模型是不一样的。 面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。很早就有人提出,关系也可以用对象表达
所有需要登录的网站,都会提供"找回密码"的功能,防止用户忘记密码。 正确设计这个功能,保证安全可靠,并不简单。下面就是安全专家 Troy Hunt 给出的设计指南。 一、如何保存密码 一个网站要想保证密码安全,第一步就是以正确的方法保存
关系型数据库最难的地方,就是建模(model)。 错综复杂的数据,需要建立模型,才能储存在数据库。所谓"模型"就是两样东西:实体(entity)+ 关系(relationship)。 实体指的是那些实际的对象,带有自己的属性,可以理解成一组相关属性
git bisect是一个很有用的命令,用来查找哪一次代码提交引入了错误。 它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓"两分法",就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,
网站的前后端通信,往往会有异步请求,这时应该怎么设计 API? 我最近读到一篇文章,作者介绍了他的做法,设计得很精细,我觉得值得借鉴,可以当作异步 API 的标准设计。 一、同步 API 为了便于比较,先看看同步 API 的设计。下面是一个
awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。 它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。 awk其实不仅仅是工具软件,还是一种编
两周前,我介绍了 Page Visibility API。有了它,就可以监听各种情况的网页卸载。 但是,它没有解决一个问题。Android、iOS 和最新的 Windows 系统可以随时自主地停止后台进程,及时释放系统资源。也就是说,网页可能随时被系统丢弃掉。P
弹性布局(Flexbox)逐渐流行,越来越多人使用,因为它写 CSS 布局真是太方便了。 三年前,我写过 Flexbox 的介绍(上,下),但是有些地方写得不清楚。今天,我看到一篇教程,才意识到一个最简单的表单,就可以解释 Flexbox,而且内容还
一、简介 有时候,开发者需要知道,用户正在离开页面。常用的方法是监听下面三个事件。 pagehide beforeunload unload 但是,这些事件在手机上可能不会触发,页面就直接关闭了。因为手机系统可以将一个进程直接转入后台,然后杀死。 用户
Git 是最流行的版本管理工具,也是程序员的必备技能之一。 即使天天使用它,很多人也未必了解它的原理。Git 为什么可以管理版本?git add、git commit这些基本命令,到底在做什么,你说得清楚吗? 这篇文章用一个实例,解释 Git 的运行过
RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。 它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。 一、URL 设计 1.1 动词 + 宾语 RESTful 的核心思想就是