Self-Hosting Aptabase on a Mac Mini - A Troubleshooting Guide

· 杂记

I recently went looking for an analytics tool for an app I’m developing. There are plenty of options out there, but most are either too heavyweight or raise privacy concerns. After some research, Aptabase caught my eye — it’s privacy-first, uses no unique user identifiers, fully complies with GDPR/CCPA, comes with a clean and intuitive dashboard, and offers over 10 SDKs covering most major frameworks. Best of all, it supports self-hosting, so your data stays entirely under your control.

The official self-hosting repository makes it look simple — just clone, tweak a few configs, run docker compose up -d, and you’re done. But the actual deployment process had quite a few gotchas, and many others in the Issues have run into similar problems. Here’s what I learned, hoping it saves you some trouble.

Read More →
#Aptabase #Self-Host #Docker #Cloudflare

在 Mac Mini 上 Self-Host Aptabase 的踩坑记录

· 杂记

最近在为自己开发的 App 寻找数据统计工具。市面上的选择不少,但大部分要么太重,要么在隐私方面让人不太放心。调研了一圈之后,Aptabase 吸引了我的注意 —— 它主打隐私优先,不使用任何用户唯一标识符,完全符合 GDPR、CCPA 等法规要求,而且自带的 Dashboard 简洁直观,提供了超过 10 种 SDK,基本覆盖了主流的开发框架。更重要的是,它支持 Self-Host,数据完全掌握在自己手里。

官方提供了 Self-Hosting 仓库,看起来很简单 ——clone 下来、改改配置、docker compose up -d 就完事了。但实际部署过程中还是踩了不少坑,Issue 里也有很多人遇到了类似的问题。这里把我的经历整理出来,希望能帮到后来人。

Read More →
#Aptabase #Self-Host #Docker #Cloudflare

2022 年读的一些书

·

最近一年读了不少书和杂志,有电子版也有实体书,收获还是蛮多的,主要偏技术一些,希望 23 年能扩宽一下阅读范围。

技术书籍

技术书籍偏 C++ 以及一些底层的技术,英文为主。 选英文版主要原因有两个吧,一是有些书没有中文版,即便有,翻译的也很晦涩难懂,我倒不怪罪译者的水平,技术书籍确实比较难翻译得平易近人。(打比方说我比较敬仰的 C++ 骨灰级程序员 侯捷老师 的技术水平肯定是一流的,但是翻译的书也是很晦涩,可读性比较..)

  1. Effective Modern C++

    Scott Meyer 著作,每次读都会有新的收获,技术点讲的非常的细,比如关于 std::move 和 universal reference 就花了一章来介绍,各种想不到的 case. C++ 真的是了解的越多,就发现不了解的更多。 建议阅读英文版。
Read More →
#书

Blog 托管到 Cloudflare Pages

· 杂记

Blog 此前一直是跑在自己的东京服务器上,这个服务器上跑着我的 blog 以及一些自用的服务,因为更新并不频繁,所以直接起了本地的 hexo server,然后 nginx 反向代理一下,当然还反代了其他的几个服务。

但是最近考虑把服务器给退掉,所以 blog 的托管就成了一个问题。简单做了下调研,国内的云厂商基本都有,但是麻烦的是域名和备案。做了一些调研,最终考虑托管到 Cloudflare Pages 上,有以下几个优势:

Read More →
#blog #cloudflare

LLVM 工具系列 - Address Sanitizer 基本原理介绍及案例分析 (1)

· C++ LLVM

Address Sanitizer 介绍

LLVM 提供了一系列的工具帮助 C/C++/Objc/Objc++ 开发者检查代码中可能的潜在问题,这些工具包括 Address Sanitizer,Memory Sanitizer,Thread Sanitizer,XRay 等等, 功能各异。

本篇主要介绍可能是最常用的一个工具 Address Sanitizer,它的主要作用是帮助开发者在运行时检测出内存地址访问的问题,比如访问了释放的内存,内存访问越界等。

全部种类如下,也都是非常常见的几类内存访问问题。

Read More →
#C++ #llvm #Address Sanitizer #ASan

C++ Lambda 本质 & 变量捕获

· C++ Lambda

C++ 11 引入 lambda 之后,可以很方便地在 C++ 中使用匿名函数,这篇文章主要聊聊其背后的实现原理以及有反直觉的变量捕获机制。在阅读本文之前,需要读者对 C++ lambda 有一个简单的了解。

C++ Lambda 的函数结构

1
[capture_list](parameter_list) -> return_type {function_body}

其中,capture_list 表示捕获列表,parameter_list 表示函数参数列表,return_type 表示函数返回类型,function_body 表示函数体。下面是一个简单的 Lambda 函数示例,这里定义一个计算面积的名为 area 的 lambda。

Read More →
#C++

std::shared_ptr 的线程安全性 & 在多线程中的使用注意事项

· C++

我们在讨论 std::shared_ptr 线程安全时,讨论的是什么?在讨论之前,我们先理清楚这样的一个简单但却容易混淆的逻辑。 std::shared_ptr 是个类模版,无法孤立存在的,因此实际使用中,我们都是使用他的具体模版类。这里使用 std::shared_ptr 来举例,我们讨论的时候,其实上是在讨论 std::shared_ptr 的线程安全性,并不是 SomeType 的线程安全性...

Read More →

C++ std::enable_shared_from_this<T> 具体实现

· C++ 模版元编程

C++ 中使用 std::shared_ptr 智能指针不当有可能会造成循环引用,因为 std::shared_ptr 内部是基于引用计数来实现的, 当引用计数为 0 时,就会释放内部持有的裸指针。但是当 a 持有 b, b 也持有 a 时,相当于 a 和 b 的引用计数都至少为 1,因此得不到释放,RAII 此时也无能为力。这时就需要使用 weak_ptr 来打破循环引用。

通过 weak_ptr 来避免循环引用

来看一个比较典型的 delegate / observer 的场景:

Read More →
#C++