跳到主要内容

iPhone 14 系列屏幕尺寸变化

· 阅读需 6 分钟

本次发布会总共 4 款 iPhone:基础款 iPhone 14,加大基础款 iPhone 14 Plus,Pro 款 iPhone 14 Pro,加大 Pro 款 iPhone 14 Pro Max。

Docker部署 Ghost 博客

· 阅读需 7 分钟

Ghost 官方并没有提供 docker 镜像,是社区制作的。

本次实验环境为:

  • VPS: 2 核 CPU,4G 内存,8M 宽带

  • Linux: Ubuntu Server 20.04

  • Docker: v20.x

  • Ghost: 5.x

Docker Compose 配置

Ghost 支持两种数据库,本地开发默认 SQLite,Release 默认是 MariaDB。MariaDB 是 MySQL 的一个分支,完全兼容 MySQL。

本次部署采用 MariaDB,先创建一个空目录/home/ghost-blog,然后在ghost-blog创建一个docker-compose.yml文件。

【译】Swift/OC/C++/Rust/Vale 等编程语言的弱引用实现

· 阅读需 18 分钟

本文翻译自 Vale 核心团队的 Blog,Vale 是一门全新的编程语言,特点是快速、安全、简单。

弱引用本身就很奇怪,本文是收集了一些常见的编程语言对弱引用的实现方法。我们的目标是找到最佳方法用于 Vale,以符合其快速、内存安全和易于使用的目标。最后,我们制定了一个全新方法。

弱引用有什么用?

大部分共享所有权的编程语言中,如 Python、Swift、Obj-C、C#,正常的引用是"strong"的,即我们常说的强引用。只要还有一个强引用指向对象,那么对象就不能被释放。当最后一个强引用消失之后,对象被释放。

在引用计数的语言里,如 Swift,当不再有强引用指向对象时,能够立即通知删除对象。在跟踪垃圾回收的语言里,如 Java,解释器会通过事件的方式通知删除对象。

相对于强引用,我们还有弱引用,类似于一个快捷方式或者软链接一样,不会对对象进行保活。目标对象被释放时,他们会变成 null。

我们知道强引用容易触发“循环引用”的问题,导致对象无法被释放,最终内存泄漏。这时我们可以引入弱引用打破这个循环,例如 Swift 里面的[weak self]。我们还可以通过弱引用来判断一个变量是否还存在,如果存在还可以继续后面的逻辑。

为什么学那么多没用的编程语言?

· 阅读需 3 分钟

今年是 Rust 大年,发展非常迅速,也是今年要重点学习的一门编程语言,但是因工作过于繁忙,遂搁置一边。

上半年只看了一个 star 只有 900 多的超小众实验性编程语言 Vale,我学了能干嘛呢?P 用没有!

架构设计之Single source of truth

· 阅读需 12 分钟

本文探讨在设计 GUI 客户端的架构模式时遇到的问题以及解决方案。

所有带图形交互的客户端都可以叫 GUI 客户端,包含但不限于:Windows/Mac/Linux 客户端,Web 页面,Android/iOS App,小程序,快应用,KFC 点餐台等各种显示屏等。

SIP协议入门指南

· 阅读需 59 分钟

前置声明:本文是本人关于 SIP 资料的一个梳理结果,80%的内容都是摘自各个参考资料的一部分,20%是自己在 12-14 年间 SIP 相关工作的理解感悟,然后根据自己拟定的目录大纲进行整合。本文所有版权不归我,如有侵权,请告知,必删。

为什么要写这么一篇文章?

我司(Legrand)核心产品是楼宇视频对讲设备,在业界的名气还不错。

视频通话或者视频会议技术栈通常是 SIP 标准协议,我们当然也不例外。

自从我专做 iOS 开发之后,我就很久不玩 SIP 了,但是这些 SIP 的东西还是没有完全忘记。最近领导给我们开了 Q2 业绩会,提出老旧系统改造,包括 SIP Server 升级,NAT 打洞啊,目的是为了提高系统的稳定性,节省服务器的资源开销。

这些工作跟我没啥关系,因为我不做服务器,但是勾起了我多年的回忆。随即产生一个想法,就是给当年完全不懂 SIP 的自己写一篇入门文章,当做是对自己过去工作、技术的一个总结。

OK,废话不多数,正文开始。

做技术需要探索精神

· 阅读需 5 分钟

最近在看一篇文章,美国计算机学会通讯(Communications of the ACM)期刊 2022 年 5 月第 65 卷第 5 期将发表一篇有关 Go 语言的综述类 Paper:《The Go Programming Language and Environment》。这篇文章的作者是 Go 核心团队,复盘了 10 多年来 Go 的演化发展,深入分析了那些对 Go 的成功最具决定性的设计哲学与决策。

这篇文章解答了我下面几个疑问:

  • Go 的设计起源是什么?
  • 在 Google 各种 C++、Java 大神存在的场景下,为什么还需要从语言层面去设计这么一个工具?
  • Go 对大规模分布式系统究竟有什么好处,付出这么大努力获得的回报值得吗?

强烈推荐大家都看一遍,英文不好的可以看中文版

设计语言

· 阅读需 23 分钟

最近大半年,随着字节跳动、腾讯相继开源了自己的设计语言,又让“Design Language”这个词在业界火了一把。

有的厂商也用"Design System"这个词,都是一个意思,我个人认为"Language"比"System"更好。

关于设计语言的鼻祖,应该就是 Apple 的 Human Interface Guidelines。我查了一下资料发现,早在 1987 年,Apple 发布 "Macintosh II" 型号个人电脑的时候,Human Interface Guidelines 就诞生了。

现在的业界老二是 Google 的 Material Design , 2014 年才发布,纯纯的后生。