编程开发与计算机科学

Windows 下编译 libuv

在 Windows 下编译 libuv 需要先安装 Visual C++ Build ToolsCMake

在 libuv 源代码目录下运行命令:

powershellmkdir build
cd build
cmake .. -DBUILD_TESTING=ON
cd ..
cmake --build --config Release build

……

    Python 库资源收集

    收集了流行的 Python 库和资源。会不定期更新

    Nim 语言的动态分发机制

    Nim 是一款 Python 风格的静态类型语言。但事实上,除了缩进语法外,Nim 和 Python 并没有太多相似之处。相对于 Python,Nim 更多地吸收了 Ada 和 Lisp 等语言的特性。

    Nim 编译器通过生成 C 或 Obj-C 中间代码的方式来进行本地编译,所以需要依赖一套外部编译器。Nim 也可以生成 Javascript 代码。此外,还有以脚本方式运行的 NimScript

    OOP 的一个特性就是支持多态,而动态分发(Dynamic Dispatch)就是实现多态的基础。在讲解 Nim 的动态分发实现前,先讲一下其他语言是如何实现的。

    ……

    创建支持 Kotlin 协程的 Vert.x 服务代理

    本文提供一个方法,可用于创建支持 Kotlin 协程的 Vert.x 服务代理

    Laravel 强制 api 路由组返回 JSON

    Laravel 的默认错误处理器通过 Illuminate\Http\RequestexpectsJson() 方法来决定是否将错误信息渲染成 JSON 格式输出。这要求将请求头的 Accept 字段设置为 application/json。本文提供一种方法,在尽可能减少代码的情况下,强制让 api 路由组中的所有错误响应变成 JSON 格式,而不依赖于请求的 Accept 头部

    使用 Cloudflare 的源站缓存控制

    Cloudflare 默认不缓存 HTML 页面,必须通过添加页面规则(Page Rule)来开启网页缓存。然而,免费用户每个站点最多只能添加三条规则。对于一个复杂的项目来说,三条规则是远远不够用的。通过设置源站缓存控制(Origin Cache Control),可以仅使用一条规则来启用全站缓存。

    ……

      使用 Google Authenticator(谷歌身份验证器)

      某些简单的业务场景需要一个管理后台,但是系统却没有复杂到需要引入一套用户体系。那么,谷歌身份验证器(Google Authenticator)可以作为管理后台的一种简单的身份认证方式。

      Google Authenticator 是一款基于时间(TOTP)与哈希(HOTP)的一次性密码算法的两步验证软件令牌。其原理是通过密钥与时间或者计数器序列计算出一个六到八位的一次性密码。

      其中 HOTP 算法需要服务端维护一个额外的计数器,需要客户端和服务端的计数器保持同步才能验证一致。而 TOTP 算法只要保证服务端和客户端的时间同步即可验证一致(默认时间误差窗口是30秒)。

      ……

      Java 获取包中所有的类

      刚接触 Java,没想到连这种基础功能都需要自己实现,而且还如此复杂。虽然最后也完成了实现代码,不过最后还是使用了 org.reflections 第三方包。记录实现代码,万一以后用得到

      Vert.x 项目自动重新部署

      Vert.x 是一款基于 JVM 的高性能异步框架。使用官网提供的项目生成器创建的 gradle 配置有一个 BUG,导致在 Windows 环境下无法完成自动部署。 修复方法如下

      让 Vagrant 共享目录支持文件事件通知

      在使用 Vagrant 的过程中发现了一个问题:对于使用 config.vm.synced_folder 进行配置的共享文件夹,如果在 Host 系统(本地环境)中修改了其路径下的文件,在 Guest 系统(虚拟机环境)中是无法通过 inotifywait 接收到文件系统事件的。

      而通常情况下,Vagrant 的共享目录是用来存放源代码的。我们会在 Host 系统中编辑源代码,在 Guest 系统中运行它们。如果 Guest 系统无法监控源代码目录的变化,就无法实现源代码的自动编译和热加载。

      ……