普通视图

发现新文章,点击刷新页面。
昨天 — 2025年5月18日首页

【开源软件推荐】 so-novel,一个超强的聚合式小说下载工具

作者 极客密码
2025年5月18日 16:34

📚 前言:网文阅读的困境与解法

你是否曾遇到这样的困扰:想看最新连载小说,要么被迫付费,要么忍受广告横飞的笔趣阁,要么被限制在特定平台的APP中?

虽然市面上已有不少阅读方案,但总有些难以满足的需求:有人嫌弃界面设计太丑,有人吐槽功能不够完善,还有人厌倦了被特定平台限制。在这种情况下,高度可定制化的阅读体验成为了许多书友的终极追求。

今天要介绍的"So Novel"正是为解决这些痛点而生的利器。它能够将全网流行小说(包括连载中和已完本的)一键下载为主流电子书格式,让你可以在任何喜爱的设备上实现真正的离线阅读体验。

🎯 谁适合使用So Novel?

  • 免费(白嫖)看正版网文 ,又追求 极致阅读体验 的资深书友
  • 习惯用手机阅读的iOS用户(由于无法使用"阅读"APP,可通过So Novel下载后导入Apple Books)
  • 喜欢在电脑或大屏设备上阅读的Windows、macOS、Linux用户
  • 钟爱专业电子书阅读器的发烧友
  • 讨厌在线阅读依赖性,习惯将书籍存储在本地的"囤书党"
  • 经常处于无网络环境需要离线阅读的通勤党
  • 追求"开箱即用",不想折腾复杂配置的普通用户

✨ So Novel 介绍

So Novel是一款交互式小说下载器,真正做到了跨平台、无门槛使用:

  • 🖥️ 跨系统支持:windows、maacos、linux皆可使用
  • 📦 开箱即用:下载解压后即可使用,无需任何额外配置
  • 🔍 多源聚合:内置多个书源,支持聚合搜索,无需手动切换
  • 🚀 极速下载:特别优化无限流书源的下载速度
  • 📑 多格式支持:可导出EPUB、TXT、HTML(支持翻页)、PDF等格式
  • 📚 批量下载:同时下载多部作品,效率翻倍
  • 🔄 簡繁转换:内置简繁互转功能,满足不同阅读习惯

如何下载

在 so-novel 官方 Github Releases 下载对应操作系统版本即可:

github.com/freeok/so-n…

注:如果访问不到Github或者下载很慢,这里同时也提供给百度网盘的下载链接:

链接: pan.baidu.com/s/1EfH5_nMT…
提取码: xfdm

我这里是 macos intel芯片,下载 sonovel-macos_x64.tar.gz 就可以,M系列芯片的下载 arm64 版本的

安装使用

下载后将压缩包解压

直接将当前目录拖到 终端 里去(windows 版本的解压后有个 exe 文件,直接双击就可以打开)

然后输入如下命令后,按回车

bash ./run-macos.sh

您可能会遇到这样一个无法验证开发者的警告信息,不用管它,点击取消:

点击 系统设置,找到 隐私与安全性

找到安全性,并改为 APP Store和被认可的开发者

点击仍然允许

再次回到终端,执行上次的命令回车即可打开。

接下来就是按提示输入序号,按回车就行了

需要聚合搜索,输入 q ,按回车,输入书名,按回车:

输入下载序号,按回车:

输入1 下载全本

下载完成后,会自动合并为 epub 格式

合并成功后的 epub 文件位于软件目录下的 downloads 文件夹

导入喜欢的阅读软件,开始享受阅读的乐趣吧!

昨天以前首页

译:自由实验你的代码—Git worktree

作者 ikonan
2025年5月17日 17:23

编者注: Git worktree 是 Git 提供的一个强大功能,它允许你在同一个仓库中同时处理多个分支,而不会干扰当前的工作环境。1) 通过创建新的 worktree,你可以并行处理多个任务,比如修复紧急 bug 和开发新功能。2) worktree 与主工作区完全隔离,你可以独立提交、推送和归档更改。3) 使用 worktree 可以避免频繁切换分支带来的混乱,保持工作区的整洁。本文详细介绍了 worktree 的使用场景和操作方法,帮助你更高效地管理 Git 仓库。

什么是 Git worktree

Git worktree 是 Git 仓库的链接副本,允许你同时检出多个分支。worktree 与主工作副本的路径不同,但它可以处于不同的状态和不同的分支上。Git 中新的 worktree 的优势在于,你可以进行与当前任务无关的更改,提交更改,然后在稍后合并它,而不会干扰你当前的工作环境。

来自 git-worktree 手册页的典型示例是,当你正在为项目开发一个令人兴奋的新功能时,你的项目经理告诉你需要一个紧急修复。问题是,你的工作仓库(你的“worktree”)因为正在开发一个主要的新功能而处于混乱状态。你不想将修复“偷偷”插入当前的冲刺中,也不愿意暂存更改以创建一个新的分支来进行修复。相反,你决定创建一个新的 worktree,以便在那里进行修复:

$ git branch | tee 
* dev 
  trunk 
$ git worktree add -b hotfix ~/code/hotfix trunk 
Preparing ../hotfix (identifier hotfix) HEAD is now at 62a2daf commit

上述命令的功能是从 trunk 分支创建一个名为 hotfix 的新分支,并将其作为一个独立的 worktree 放置在 ~/code/hotfix 目录中。此时,你可以将这个 worktree 当作主要的工作空间。你能够切换到该目录,进行紧急修复,提交修改,最后删除这个 worktree:

$ cd ~/code/hotfix 
$ sed -i 's/teh/the/' hello.txt 
$ git commit --all --message '紧急修复'

一旦你完成了紧急工作,你可以回到之前的任务。你可以控制何时将你的 hotfix 集成到主项目中。例如,你可以直接从它的 worktree 将更改推送到项目的远程仓库:

$ git push origin HEAD 
$ cd ~/code/myproject

或者你可以将 worktree 归档为 TAR 或 ZIP 文件:

$ cd ~/code/myproject 
$ git archive --format tar --output hotfix.tar master

或者你可以从单独的 worktree 中获取更改:

$ git worktree list 
/home/seth/code/myproject 15fca84 [dev] 
/home/seth/code/hotfix 09e585d [master]

从那里,你可以使用最适合你和你的团队的策略来合并你的更改。

列出活跃的 worktree

你可以使用 git worktree list 命令获取 worktree 的列表,并查看每个 worktree 检出的分支:

$ git worktree list 
/home/seth/code/myproject 15fca84 [dev] 
/home/seth/code/hotfix 09e585d [master]

你可以在任何一个 worktree 中使用这个命令。worktree 总是链接的(除非你手动移动它们,破坏 Git 定位 worktree 的能力,从而切断链接)。

移动一个 worktree

Git 在你的项目的 .git 目录中跟踪 worktree 的位置和状态:

$ cat ~/code/myproject/.git/worktrees/hotfix/gitdir /home/seth/code/hotfix/.git

如果你需要重新定位一个 worktree,你必须使用 git worktree move;否则,当 Git 尝试更新 worktree 的状态时,它会失败:

$ mkdir ~/Temp 
$ git worktree move hotfix ~/Temp 
$ git worktree list 
/home/seth/code/myproject 15fca84 [dev] 
/home/seth/Temp/hotfix 09e585d [master]

删除一个 worktree

当你完成工作后,你可以使用 remove 子命令删除它:

$ git worktree remove hotfix 
$ git worktree list 
/home/seth/code/myproject 15fca84 [dev]

为了确保你的 .git 目录是干净的,在删除 worktree 后使用 prune 子命令:

$ git worktree prune

何时使用 worktree

使用标签、书签、自动备份等功能时,需自行跟踪数据,否则易管理混乱。Git worktree 也同理,别频繁创建,避免副本过多。建议按需创建,完成任务、提交工作后及时删除,保持简洁专注。

重要的是,worktree 为你管理 Git 仓库提供了更大的灵活性。在需要时使用它们,再也不用为了检查另一个分支上的内容而匆忙保存工作状态。

英文原文

用AI做了个图片上传/下发应用

2025年5月17日 10:13

微信群的二维码每周都要更新一次,比较麻烦。于是搞了个简单的上传/下发的 Web 应用。

下面是优化前后流程,虽然看似步骤少了一步,但大大节省了时间。

主要功能

  • 常见类型图片上传,支持删除,提供外链访问
  • 支持上传前修改图片名,同名自动覆盖
  • 秘钥登录,配置更简单

Github: github.com/ATQQ/image-…

体验地址:imageupload.test.sugarat.top (秘钥testpwd)

imageupload.test.sugarat.top/images/user…

AI做了啥

Web站点生成

bolt.new/~/sb1-58wfa…

使用 Bolt(bolt.new) 生成

Prompt 如下

实现一个Vue3 SSR的应用,通过填写一个指定的秘钥(服务器上可以配置多个秘钥)
就可以上传图片到服务器上,支持用户单选或者多选图片,上传后给用户返回图片链接,
链接构成 domain/images/秘钥对应账号名/图片名称

其中图片名称可以由用户可选指定,不指定就动态生成一个不重复的图片名

同时集成图片的自动压缩

哐哐的一顿输出,分分钟就好了。

图片压缩功能生成得有问题,代码上就先给移除了😄

项目最终就是 Vue Nuxt 技术栈。

镜像脚本生成

使用 Cursor 的 chat 功能,也是 kuakua 的就生成了!

我做了什么

  1. 代码逻辑的微调
  2. 镜像脚本的微调,构建镜像上传
  3. 部署服务器

上面的工作理论上AI都能搞定,复杂点的可以结合一下 MCP,但个人觉得重要的部分还是需要人工 Review 改造一下。

细微的地方修改,Prompt 效率还是没有直接改 code 来得快。

如何部署

Docker

最简单的方式使用 Docker 镜像(当然也是AI生成的)

docker run -d \
  --name image-uploader \
  -p 3000:3000 \
  -v $(pwd)/data:/app/data \
  -e NODE_ENV=production \
  -e HOST=0.0.0.0 \
  -e PORT=3000 \
  -e SECRET_ACCOUNT_USER1=your-secret-key-here \
  --restart unless-stopped \
  sugarjl/image-uploader

通过修改SECRET_ACCOUNT_XXX的值来设置秘钥 比如

  -e SECRET_ACCOUNT_HELLO=a123456 \

PM2

# 拉代码
git clone https://github.com/ATQQ/image-uploader.git

# Gitee 地址(Github 访问受阻)
git clone https://gitee.com/sugarjl/image-uploader.git

cd image-uploader

# 装依赖
npm install
# 构建
npm run build

# 启动
# 在 ecosystem.config.cjs env中添加或修改秘钥
pm2 start ecosystem.config.cjs
# 或者 启动时通过环境变量指定秘钥
SECRET_ACCOUNT_USER1=test pm2 start ecosystem.config.cjs

最后

有 AI 后,能快速验证的各种想法,分分钟就生成 demo ,效率杠杠的!

语言不再是开发的障碍。

❌
❌