解锁网络边界的魔法师:Tailscale
这是又一篇安利 Tailscale 的文章,如果问我 2024 年我最喜欢的软件是什么,那么 Tailscale 当之无愧。我真的非常喜爱 Tailscale 这个软件,而且已经为其写了两篇文章: Create your own Overlay Network | Zwlin’s Blog When tailscale subnet router meet fake IP | Zwlin’s Blog 在中国大陆,如果你想成为一个合格的 self-hosted 爱好者,我认为首先需要解决的不是你的影音服务器,NAS 设备,树莓派等,而是一个更为重要的问题:内网穿透。如果你无法非常方便的访问到你的设备,你自建的各种服务,那么其他的一切都无从谈起,而 Tailscale 就是实现这一目的最棒的工具..
更多

nRF-Kconfig插件解析
Foreword 之前刚好看过一点VScode插件原理,这里就能用上了,看一下nRF-Kconfig是怎么实现的,改一个通用版本来,方便大家使用 nRF-Kconfig Kconfig插件的安装目录在这里 C:\Users\用户名\.vscode\extensions\nordic-semiconductor.nrf-kconfig-2024.12.13 实际这个插件也没有加密或者混淆什么的,可以直接看 尝试build "scripts": { "vscode:prepublish": "npm run build && npm run changelog", "build": "rimraf dist && tsx ./scripts/build..
更多利用whisper为视频自动生成字幕
whisper是一个由openai开发的通用语言识别模型,我们可以使用它来为视频自动创建字幕。环境安装为了加速,我们需要使用GPU来进行计算,因此需要安装基于CUDA的pytorch。首先我们需要安装Miniconda,这里安装的时候直接点击下一步即可。安装完毕之后,我们需要创建一个新的环境,这里我们创建一个名为whisper的环境:conda create -n whisper python=3.8conda activate whisper1. 安装CUDA安装好了Miniconda之后,我们需要安装CUDA,执行nvidia-smi$ nvidia-smiThu Jan 2 11:49:53 2025+------------------------------------------------..
更多

Systemd 的 socket activation 机制
Systemd 的 Socket Activation(套接字激活)是一种按需启动服务的机制,其核心原理是:在客户端请求到来时,通过套接字(socket)触发服务的启动,而不需要预先运行服务。这种方式极大地节约了系统资源,同时优化了服务启动的效率。 说是现在 Linux 系统,实际上只研究了 debian 系的,不过其他应该也大差不差吧( 之所以了解到这个机制,是因为最近发现线上使用的 rsyslog 收集日志方案,在某些机器上会出现日志丢失的情况,为了搞清和解决这个问题,我开始研究现代 Linux 系统上 rsyslog 的收集日志的流程。 rsyslog 日志写入流程 应用程序调用 syslog()。 syslog() 函数将消息发送到 /dev/log: syslog() 函数通过 Unix..
更多

下载和使用仿宋GB2312字体
下载和使用仿宋GB2312字体仿宋GB2312字体下载:仿宋_GB2312.ttfMac使用字体方法双击下载好的字体文件,会自动打开系统的字体设置页面也可以看到电脑上所有的字体将Word或者WPS退出再打开,就能看到新增的字体了
更多

一日一技:超简单方法显著提高大模型答案质量
很多人都知道Prompt大神李继刚,他使用Lisp语法来写Prompt,把大模型指挥得服服帖帖。但我们很多时候没有办法把自己业务场景的Prompt改造成伪代码的形式。相信不少人跟我一样,会使用Markdown格式来写Prompt,大部分时候没什么问题,但偶尔总会发现大模型返回的结果跟我们想要的不一样。Markdown的弊端例如下图所示:让大模型给我返回一个JSON,它返回的时候会用Markdown的多行代码格式来包装这个JSON。我后续要解析数据时,还得使用字符串切分功能把开头结尾的三个反引号去掉。即便我把system prompt里面的反引号去掉,改成:1234567你是一个数据提取专家,你能从一段文本中提取出所有结构化数据。并以J50N格式返回。返回格式示例:{"name": "小王","age": ..
更多

一日一技:如何正确对Python第三方库做二次开发
今天,有同学在知识星球上给我提了一个问题:如何在Simplemind中接入Azure的GPT接口。如下图所示。在使用Python时经常会出现这样的情况,某一个第三方库,满足我们99%的需求,但碰巧有一个小需求不满足。遇到这种情况,有些同学会忍痛割爱,换一个库;还有一些同学,会继续使用这个第三方库,但是缺的那个功能,他就完全自己单独写;剩下的同学,可能是把这个第三方库下载下来,放到自己项目的根目录中,然后当做项目的一部分来修改并导入使用。今天我们就来讲一下这个问题。前两个方法不需要多说什么。第三个方法从功能上来说没什么问题,但会给自己的项目引入大量其他代码,导致项目在做安全性检查、静态类型检查、Code Review时变得很麻烦。而且这个第三方库必须放到项目的根目录,否则在导入时,它的导入语句就跟正常pip..
更多

Zephyr build 架构
Foreword Zephyr 工程的整个构建体系是怎样的,这里做一个具体的分析和学习 最近小米的Vele 也开源了,不过由于缺少文档,而且架构非常庞大,光是仓库就传了两三百个,想看明白不太容易,但是基础的CMake、Kconfig等等全都有。 CMake 创建构建目录:保持源代码目录整洁。 使用 CMake 生成构建文件:配置项目并生成适合平台的构建文件。 编译和构建:使用生成的构建文件执行编译和构建。 清理构建文件:删除中间文件和目标文件。 重新配置和构建:处理项目设置的更改。 CMake 推荐使用 “Out-of-source” 构建方式,即将构建文件放在源代码目录之外的独立目录中 CMake例程 一个比较简单的CMake例程 https://g..
更多

配置管理工具之kconfig
Foreword 绕了这么大一圈,似乎只有kconfig是比较成熟的,能与之相媲美的管理工具很少 Kconfig 安装 在windows下使用Kconfig,至少得有python,否则界面等内容无法正常显示 python需要先安装这几个包 python -m pip install windows-curses python -m pip install kconfiglib 测试安装,可以正常显示命令 menuconfig -h 测试 参考工程sample_1 https://github.com/bobwenstudy/test_kconfig_system 编译所有 make all 修改配置 menuconfig 运行main.exe就能看到结果了 ..
更多

一日一技:为什么我很讨厌LangChain
一说到RAG或者Agent,很多人就会想到LangChan或者LlamaIndex,他们似乎觉得这两个东西是大模型应用开发的标配。但对我来说,我特别讨厌这两个东西。因为这两个东西就是过度封装的典型代表。特别是里面大量使用依赖注入,让人使用起来非常难受。什么是依赖注入假设我们要在Python里面模拟出各种动物的声音,那么使用依赖注入可以这样写:12345678910111213141516171819202122def make_sound(animal): sound = animal.bark() print(f'这个动物在{sound}')class Duck: def bark(self): return '嘎嘎叫'class Dog: def bark(sel..
更多