Substratum Android 上的主题引擎

Substratum 是一款 Android 上的主题工具,能够不用 root 来达到系统级主题修改。并且在该工具下有一群爱好者和社区开发了无数的美观且实用的主题。Substratum 开始于以前非常流行的 CyanogenMod, Cyanogen 内置了该主题引擎,并使得修改主题异常简单。但是不幸的是,Cyanogen 没有继续下去, 但是 Substratum 死灰复燃。最初的时候 Substratum 还需要 Root 来使用,但是 Android Oreo 之后就可以不依赖于 Root 了。 Installation 如果想要正式版从 Pla Read more ...


唯一 ID 生成方案

最近在整理以前的草稿箱,翻到了这篇建于 2019 年的关于“唯一 ID 生成器”的笔记。当时似乎正在为一个分布式系统设计主键生成策略。既然翻出来了,就趁着这个机会,结合这几年在分布式领域的经验,把这个话题完善一下。 在单体架构中,我们习惯使用数据库的自增 ID(Auto Increment)作为主键,简单且性能不错。但在分布式系统或微服务架构下,分库分表之后,自增 ID 就捉襟见肘了。我们需要一个能够在分布式环境下生成全局唯一、趋势有序、且高性能的 ID 生成方案。 常见方案对比 在确定最终方案之前,通常会考察以下几种常见的替代方案: 1. UU Read more ...


Flask Babel 使用

Flask babel 是 Flask 的语言扩展,允许非常简单的方式让 Flask 支持多语言。 Installation pip install flask-babel 安装时会安装依赖 Babel, Python 国际化 pytz 时区 speaklater 辅助工具集 Configuration 在 python 文件中要使用多语言的文字时引入 from flask_babel import gettext 比如 gettext('author') 在 html 模板文件中 <pre>{\% Read more ...


Android 内核中的 CPU 调频

CPU 调频模块主要分为三块: CPUFreq 核心模块,核心模块主要是公共的 API 和逻辑 CPUFreq 驱动,处理和平台相关的逻辑,设置 CPU 频率和电压 CPUFreq governor,频率控制器,CPU 调频的策略,CPU 在什么负载,什么场景下使用多少频率 最后第三部分 governor 也是本文重点。传统的 CPU governor 选择,以 Performance 和 Powersave 举例,就是一个让 CPU 跑在最高频率,一个让 CPU 跑在最低频率,所有动作都在初始化时设置。 调频器策略 OnDeman Read more ...

2019-08-02 android , kernel , cpu-governor

Vim 插件之注释

Vim 下的注释插件有很多个 tpope/vim-commentary scrooloose/nerdcommenter tomtom/tcomment_vim 这三个插件各有特色。 Read more ...

2019-07-30 vim-plugin , vim , vi , commentary

QQ 音乐 qmcflac 文件解密

首先说重点,代码来自: https://github.com/Presburger/qmc-decoder Build 按照项目主页的方式 Build,生成 decoder 二进制可执行文件即可。 这个二进制可以实现 qmc0、qmc3、qmcflac 格式转换,生成普通未加密的 mp3, 或者 flac 文件。 Result 运行 结果 外延 C++ 实现的另外一个版本 如果熟悉 Java 也可以参考这个项目 如果熟悉 C# 那么可以看看这个项目 Read more ...

2019-07-27 qq-music , flac , decoder

Linnx Mint 上使用触摸板手势

都知道 Mac 上的触摸板非常好用,简单的手势就能实现十几种操作,从单指,双指,三指,到四指,甚至五指,从轻点,按压,到滑动,到捏合,组合起来能实现非常多的操作。 Mac 下手势 通过不同的组合可以得到非常多的功能。一些比较重要的操作列在了下面。 单指 一个手指轻轻点击,可以选中目标; 双指 两个手指同时点击,鼠标右键功能; 两个手指轻点,Smart zoom,可以快速缩放; 两个手指分开或捏合,可以放大缩小图片、网页等内容; 两个手指上下拖移滑动,即可实现翻页; 两个手指旋转,可以旋转图片等对象; 两个手指从触控板右侧 Read more ...

2019-07-25 linux , mint , gesture , touchpal , trackpad

Vim 插件之全局搜索:ack.vim

这篇文章看开始陆陆续续记录一下用过的 Vim Plugin,虽然有些一直也在用但从没有好好整理过,正好这篇开一个计划吧。 Ack.vim 在 vim 中使用 ack 或者 ag 来搜索,通过 Quickfix 来提供所搜结果 首先放上链接 https://github.com/mileszs/ack.vim 我使用 Vundle 管理,安装更新就不展开,这里重点介绍一下该插件。这里需要注意 ack.vim 需要依赖 ack >= 2.0 及以上版本。 Installation brew install the_silver_se Read more ...

2019-07-21 vim , vim-plugin , ack , ack-grep , ag , search , grep

我可能要抛弃用了很多年的 Chrome 换用 Vivaldi

大概一两年前就听说了 Vivaldi 这样一款浏览器,它使用 Chromium 做内核,创始人是从 Opera 浏览器出来的,不满 Chrome 横扫浏览器市场,没有给 Opera 一点喘息的机会,很多 Opera 的特性在 Chrome 上都被摘掉了。所以他们就开始搞了这一个 Vivaldi 浏览器,我记得当时听到的第一个宣传语是,快。想来 Chrome 最初打开市场时的宣传语也是快,但是多少年过去了 Chrome 虽然自身保持非常干净,但是加上自定义的扩展,也变得越来越臃肿了,但倒是也在一个可以接受的范围内。两年前 Vivaldi 依靠这一条宣传没有 Read more ...


使用 port knocking 隐藏 SSH daemon 端口

暴露在互联网上的服务器非常容易被恶意程序进行端口扫描,以前也整理过一篇 VPS 安全设置 的文章,但都是一些比较基础的设置,能够绕过一些简单的端口扫描,但是并不能从根本上解决端口扫描的问题。 Port knocking 通过防火墙的帮助能够实现,只有你按照特定方式请求后才开放端口,增加了一层保护。主要防止恶意攻击者通过端口扫描来对机器进行攻击。 这篇文章就通过 knockd 的使用来介绍一下 Port knocking 。 Note: 本文只演示 IPV4 下的配置。 Port knocking Port knocking 类似于 准备工作 Read more ...

2019-07-19 knocking , ssh , vps , security

最近文章

  • Google Code Wiki:让 GitHub 仓库秒变代码百科全书 之前 Devin 团队推出了一款 DeepWiki 的网站,可以用来解释 GitHub 的代码仓库。今天偶然发现 Google 也推出了类似的产品,叫做 Code Wiki。
  • Typeless: 又一款 macOS 上的 AI 语音输入利器 看过我博客的人会发现,我在这半年的时间里面体验了非常多的语音转文字工具,可以说,这样的工具极大地提升了我的生产效率。不仅搭配 Obsidian 可以更快地写笔记,搭配 Claude Code 等编程工具也可以让我更快地输入提示词。体验到后面,遇到类似的产品,我一般也不会单独地出一篇文章,但是今天体验完了 Typeless,我觉得它值得写一篇文章,单独介绍一下。
  • Gemini CLI 使用小技巧 本文记录 Gemini CLI 使用过程中一些容易被忽略的问题,以及使用小技巧。
  • 让 AI 更懂你的工作流:Gemini CLI 自定义 Slash Commands 配置指南 看过我博客的人会发现,我过去分享了非常多 Claude Code 下的使用小技巧,Claude Code 提供了非常好用的 Clash Commands,可以让我们直接通过快捷方式调用我们预先定义好的 prompt。最近我在使用 Gemini CLI 时,也发现我需要类似的功能。但幸好,Gemini CLI 已经帮我们实现了 slash commands,我们只需要定义好一个函数,就可以非常轻松地通过斜杠命令来调用。
  • 在 Obsidian 中使用 Gemini CLI 从 2020 年开始使用 Obsidian 算起,到今天也已经快 5 年了,这个过程中我将过去将近 10 年的笔记,包括 Evernote,WizNote 中的笔记,豆瓣上的笔记全部转成了 Markdown 保存到了本地,后来陆陆续续使用的比如 [[Voicenotes]] 也都转成 Markdown 存如 Obsidian。虽然过去纪念陆陆续续在整理,但是实际上每天添加到笔记库中的内容要远多于要整理阅读的内容,笔记仓库也是越来越大,所以我越来越想使用一个工具可以帮助我真正地理解我写下的东西,并且在我想使用的时候能快速的找回。