C++ 中的仿函数(Functor)和匿名函数(Lambda)
Jun 27, 2022
从 C++ 11 标准开始,被称为现代 C++。其中的一个原因,就是增加了 Lambda 表达式。 仿函数 在没有 Lambda 表达式之前,如果要在局部运行一个函数,只能使用仿函数。 仿函数就是在局部定义一个类,然后重载 () 运算符: …
免费的自建 Git 服务
Jun 24, 2022
Gitlab https://about.gitlab.com/install/ Gogs A painless self-hosted Git service. https://gogs.io/docs/installation
微软在 Apple 平台上的努力
Jun 23, 2022
FluentUI Fluent 是微软 Windows 界面的设计语言,就是界面设计规范。 微软使用 Swift 实现了一套 Fluent 风格的界面库。 支持 iOS 14+ 和 macOS 10.14+ https://github.com/microsoft/fluentui-apple FluentDarkModeKit Swift 实现的自动适配深色和浅色风格的库,支持 iOS 11+ …
各操作系统使用的渲染引擎
Jun 20, 2022
各种 Linux 发行版 Wayland, Xorg/X11 Wayland 是致力替代历史悠久的 X11,新的软件需要对 Wayland 做适配。 Android Skia Flutter, Chrome 也使用。 macOS & iOS 都是使用 Quartz 作为统一图形接口。
SwiftUI 相关的开源实现
Jun 15, 2022
Swift 是苹果公司的开源编程语言,但是苹果公司使用 Swift 开发的一些好用的框架却是闭源的,比如:SwiftUI、Combine。 以下是开源社区的实现版本: SwiftUI 的开源实现 由于 SwiftUI 涵盖的范围确实太大,以下开源项目现在已经不继续维护了,有点可惜。 …
自定义 Sh Bash Zsh Shell 配置
Jun 11, 2022
Sh Shell 系统范围配置: /etc/profile 用户范围配置: $HOME/.profile 有些系统(例如 Debian)会读取 /etc/profile.d 目录里的 *.sh 作为自定义的系统级配置: if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do [ -r $i ] && . $i done unset i fi 以上代码写在 /etc/profile 里,如果没有说明当前的系统不支持读取 profile.d 里的自定义配置,可以自己加上。 …
Swift 中的值类型和引用类型
May 30, 2022
Swift 中的 struct, enum, tuple 是值类型,class 是引用类型。 值类型在传递的时候是直接拷贝一份数据副本,而引用类型不拷贝数据,只是增加引用计数。 为了避免内存浪费,Swift 对值类型增加了一个写时复制(Copy-On-Write)的特性,只有在赋值后做了修改才会发生拷贝数据副本的行为,否则就和引用类型一样共享一份数据。 …
C++ 实现一个 AutoLayout 的 DSL
May 18, 2022
DSL 全称是 Domain-Specific Language,叫作领域专用语言。用于解决特定问题而提出的编程语言。比如 CSS 就是解决网页中布局问题而产生的 DSL。 自动布局(AutoLayout)是开发中必不可少的,但是其 API 沉长难记而且写出来的代码不直观。为了解决这些而出现了 Masonry 和 SnapKit。这两个库也属于自动布局的 DSL。 …
在 FreeBSD 中安装 Bash Shell
May 17, 2022
FreeBSD 安装后默认可选的 Shell 只有 sh 和 tcsh,如果需要 bash 和 zsh 是需要自己安装配置的。 安装 bash: sudo pkg install bash 以上命令使用到了 sudo,在 FreeBSD 里 sudo 也是需要自己安装。 配置 bash: …
FreeBSD 中的 pkg 使用代理
May 17, 2022
FreeBSD 13.1 发布了,终于修复了在 Apple Silicon 上不能使用网络的问题。 下载地址: https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/13.1/ pkg 是 FreeBSD 的包管理工具,类似于 Debian 上的 apt。 pkg 的配置文件路径是 /usr/local/etc/pkg.conf,代理信息需要写在配置文件中,环境变量 http_proxy 没有作用。 …