编程开发与计算机科学

「并行」和「并发」

从中文字面上还是挺难区分「并行」和「并发」的,两者都带着一个「并」,似乎是个同义词。而在计算机科学中,「并行」和「并发」完全是两个不同的概念。两者并非互斥,也有相关联,但含义绝不可混淆。

英文辨析

「并行」的英文是 parallel,「并发」的英文是 concurrent。有意思的是,台湾将前者翻译成「平行」,后者翻译成「并行」。可见中文翻译基本是词不达意的。要区分两者还需从英文原文着手。

……

flexbox 实现自适应图片九宫格布局

「九宫格」的布局是指:在一个正方形的容器中,以 3x3 排列共九个正方形的元素。当容器大小发生变化时,容器内部的九个元素尺寸也能随着容器大小而缩放,并保持正方形的外形。当容器内元素不满九个时,每行元素能够等比放大并撑满一行

如何使用 llhttp

llhttp 是 Node.js v12 以上版本使用的 HTTP 解析器,代替了旧版的 http_parser。根据官方宣传,相较于旧版解析器,新版本解析器性能提升了 156%。llhttp 的主要代码由 Typescript 实现,描述了一个有限状态机,最终通过 llparse 将代码转换成 C 语言源代码。然而官方文档里根本没写如何生成 C 语言代码,只能自己探索了。

首先 clone 下 llhttp 的代码:

shellgit clone https://github.com/nodejs/llhttp

在项目根目录下能找到 Makefile 配置文件。打开看了下,并不是很复杂。这个 Makefile 配置仅支持 clang 编译器 和 Linux 操作系统。不过我们只需要生成 C 语言代码的部分就行了。

……

    Windows 下编译 libuv

    在 Windows 下编译 libuv 需要先安装 Visual C++ Build Tools 和 CMake。

    在 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\Request 的 expectsJson() 方法来决定是否将错误信息渲染成 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秒)。

        ……