Hegwin.Me

寓形宇内复几时?曷不委心任去留?胡为乎遑遑欲何之?

Stirling公式的证明

The Proof of Stirling's approximation

在描述算法的时间复杂度时,我们常用大O记法(Big O notation)来描述计算量随问题规模增长的情况。对于正整数的阶乘$n!$,如果使用一般的递归实现,这个时间复杂度是 $O(n)$,它代表计算量随着$n$的增长呈线性增加。当$n$较大时,计算量也相当可观,如果不需要特别精确的结果,那就可以使用Sterling公式进行近似计算,它可以将时间复杂降为 $O(\log{n})$ ,这是一个...

Wallis公式的证明

The Proof of Wallis' formula

之前在知乎上有遇到一个问题“有没有结果含有“π”但是与圆完全无关的问题?”,于是便想到Wallis公式,它是由John Wallis(1616-1703)提出,主要的应用还是在于证明Sterling公式。虽然Wallis公式本身看起来是个普通的无穷乘积,但是他的结果却表达了圆周率 π。如果你高数教材用的是同济大学的版本,其实你已经在课本上学到了Wallis公式的证明:课本上有一道例题是讲定积...

关于HTTPS证书和CAA

HTTPS Certificate and CAA

上回说到用 Caddy 做 HTTP server + 反向代理,不用自己操心 HTTPS 证书比较省心,今天就遇到一个不省心的事情。 我除了 blog 这个 web app之外,还有一些其他小玩意挂在次级域名上,比如 wow.hegwin.me 是一个魔兽的战斗宠物工具,我把他添加到 Caddy的配置的时候,出现几行错误: 注意其中的 “DNS problem: query t...

使用Caddy作为反向代理服务并获取HTTPS证书

Use Caddy as reverse proxy server with free HTTPS certificate

因为之前更换服务器OS镜像,数据丢失,我的 blog 服务停了几个月,中间又遇到我父亲中风,在老家照顾了4个多月,一直没时间打理个人博客。今天终于把它修回来了。 在这中间我做了不少更新,Ruby的版本从1.9更新到了2.7,Rails也从3.2更新到了5.2,很多手动部署的过程,也改成了自动部署。另外比较新的一点尝试就是,我用 Caddy 代替了 Nginx 做反向代理服务器,并且利用...

Windows7 + Ubuntu 双系统下,如何升级到 Windows 10

Windows 10 upgrade from Windows 7 dual boot with Ubuntu

我有一台台式电脑,购买于2014年。它是 Windows 7 + Ubuntu 14.04 的双系统,我考虑很久要把 Windows 7 升级到 Windows 10,但这个过程存在潜在的问题,让我迟迟没有下手。我最近终于下定决心,对他进行升级,这里分享一下我升级的过程。 在购买这台电脑时,微软已经发布了 Windows 8,但是 Win 8 由于一些激进的修改,在国内并不太流行,所以...

Ruby命令行格式化输出

Format Your Output in Terminal with Ruby

在命令行输出内容,一般而言Ruby基本的方法都是够用的,比如 puts、print、sprintf系列;但如果要在terminal输出颜色,表格进度条等,就会比较难以实现了。 这里小节下自己探索后感觉好用的gems: 彩色输出(基于ANSI):rainbow; 表格输出:terminal-table; 大综合(包含彩色、表格和进度条):formatador。 R...

在Ruby中运行系统命令

Execute System Commands in Ruby

在Ruby中有若干种方法来调用系统命令: 1. 反引号或者 %x(); 2. system 方法; 3. File; 4. Open3。 反引号及 %x() 与 system 的区别在于: system 只会返回 true/false;而`%x`在命令执行成功时,会返回命令的stdout,当命令支持失败时,会返回空字符串 `""` 这样看来其实反引号或者 `%x...

运行特定版本的 bundler

Run specific version of bundler

Ruby小(没)技(鸟)巧(用)系列。 当你同时安装了两个版本的bundler,比如 2.0.1 和 1.17.2,默认情况下 bundle exec 等命令都是使用的最新版本的bundler;而你要维护的程序比较古老,那么你可能就会遇到这个神奇的问题: Bundler could not find compatible versions for gem "bundler" ...

第一个Rust程序

Hello World in Rust

学习新的编程语言时,大家都有第一个传统,先编写一个简单的程序,即在屏幕上输出 "Hello, World!" 在官方的 Getting Started,我们可以看到安装方式非常容易,在命令行输入如下命令即可: curl https://sh.rustup.rs -sSf | sh (Tips: Rust这个语言会使用 rustup 这个工具来管理版本和toolchain。)

Ruby中目录和文件操作的几种方式

Different methods in Ruby to manipulate directories and files

创建目录: 方法一:利用 Dir.mkdir 可以创建一个目录,并且其有一个可选参数用来标记目录的权限。 如我要在 /Users/hegwin/Workspace 目录下创建一个 `ruby` 子目录,那么可以这么操作: Dir.mkdir('/Users/hegwin/Workspace/ruby') 正常创建后,Dir.mkdir 会返回整数 0。 这个方法和Li...