Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

转盘盘

玩具项目,没有接入后台服务

拼字字

将 scrabble 项目移植到微信小程序平台开发测试,基于 node 服务实现线上联机。未发布。

开发工具集

基于 spring-shell 开发的交互式 CLI 程序,可以轻松拓展功能模块,适应突发需求。

功能 | Features

1. 阿里云 OSS 存储

  • 上传本地文件夹到 OSS 存储
  • 下载 OSS 存储到本地

2. GridFs 存储

  • 保存本地文件夹到 GridFs 存储
  • 根据正则表达式匹配文件并下载到本地
  • 下载顶层数据(b3dm)到本地
  • 选择 Mongo 库提供 HTTP 访问服务
flowchart TD
    D[本地文件夹] -->|保存| E[GridFs 存储]
    E -->|匹配正则| F[下载文件]
    E -->|下载顶层数据| G[b3dm 文件]
    H[Mongo 库] -->|HTTP 访问| E

3. JSON 格式化

  • 选择文件夹格式化所有 JSON 文件
  • 选择文件夹压缩所有 JSON 文件

4. JS 压缩混淆加密

  • 选择文件夹以及处理模式,备份并处理文件夹中所有 JS

5. ZKFinger

  • 中科慧指 SDK 的使用

  • 合理的利用线程池,充分利用计算机资源

check_server

监测提醒程序,根据配置文件检测指定服务,如果服务异常或服务状态在预期外则针对该服务发出通知

配置文件说明

{
    "sms": {                                        //阿里云短信服务参数
        "ak": "********",
        "sk": "********",
        "singName": "********",
        "templateCode": "********"
    },
    "http": [
        {
            "name": "gitlab",                       //服务名称
            "address": "http://gitlab.sunwaywh.top",//服务地址
            "interval": 600,                        //检测间隔(秒),默认60
            "expect": [                             //预期状态码
                200,
                301
            ],
            "phones": [                             //接收通知手机号
                "15272829933",
                "13554122184"
            ]
        },
        {
            "name": "doc",
            "address": "http://doc.sunwaywh.top",
            "expect": [
                200
            ],
            "phones": [
                "13554122184"
            ]
        },
        {
            "name": "index",
            "url": "http://www.sunwaywh.top",
            "expect": [
                200
            ],
            "phones": [
                "15272829933"
            ]
        }
    ],
    "tcp": [
        {
            "name": "mysql",
            "address": "106.13.18.102:3306",
            "phones": [
                "13554122184",
                "15272829933"
            ]
        },
        {
            "name": "mongodb",
            "address": "106.13.18.102:27017",
            "phones": [
                "13554122184",
                "15272829933"
            ]
        }
    ]
}

code_translate

代码翻译工具,使用第三方翻译 api 将代码中的中文翻译为英文

安装和使用 | Install && Usage

# go install
# code_translate -cp ./test -cs .go -ai ************** -ak ************** -tm 1
mode1(all) => test/test.go
模块相关事件执行顺序 -> Execution sequence of module related events
服务端 -> Server
启动服务 -> Start service
停止服务 -> Out of Service
客户端 -> client
客户端启动 -> Client startup
客户端处理消息 -> Client processing messages
客户端处理错误 -> Client processing error
客户端关闭 -> Client shutdown

选项 | Option

  -ai string
        appid
  -ak string
        appkey
  -cp string
        code path (default ".")
  -cs string
        code suffix
  -tm int
        translate mode:
        0(default)->translate notes only
        1->translate all

依赖项 | Dependencies

代码统计 | Code statistics

===============================================================================
 Language            Files        Lines         Code     Comments       Blanks
===============================================================================
 Go                      6          462          395           26           41
===============================================================================
 Total                   6          462          395           26           41
===============================================================================

logo_generate

logo 生成工具,解析 ttf 字库生成个性化 logo。

用法和参数

USAGE:
      logo_generate [OPTIONS] "LOGO"
OPTIONS:
      -f string
            输出格式 svg|jpg|png|ascii (default "svg")
      -fs string
            指定字体风格 atiba|blox|organ|panda|xtrusion (default "atiba")
      -o string
            保存路径 (default ".")
      -r int
            排列方向 (0:horizontal,1:vertical,2:cover)
      -s int
            字体大小,范围限制在 24~1024 (default 24)
      -sp int
            字体间距 (default 1)
      -split
            是否拆分到多个文件
      -ss string
            svg css样式
      -ttf string
            指定字体文件

内置字体风格

风格示例
atiba
blox
organ
panda
xtrusion

示例

./logo_generate  -fs "organ" -ss "fill:#186A3B;fill-rule:evenodd;stroke-width:1;stroke:#1B2631" -s 128 EDGELOG
./logo_generate -f "ascii" LOGO

 |||                        +|||||+                     +||||||             +|||||+
 |||                       |||||||||                  |||||||||            |||||||||
 |||                      |||||++||||               +|||||||||+           |||||++||||
 |||                     +|||     |||+             +||||+                +|||     |||+
 |||                     |||       |||            +|||+                  |||       |||
 |||                     ||+       +||+           |||+                   ||+       +||+
 |||                    +||+       +||+          +|||                   +||+       +||+
 |||                    +||+       +||+          |||                    +||+       +||+
 |||                    +||+       +||+          |||                    +||+       +||+
 |||                    +||+       +||+          ||+                    +||+       +||+
 |||                    +||+       +||+         +||+        +++         +||+       +||+
 |||                    +||+       +||+         +||+        |||         +||+       +||+
 |||                    +||+       +||+         +||+        |||         +||+       +||+
 |||                    +||+       +||+         +||+        |||         +||+       +||+
 |||        +||         +||+       +||+         +||+        |||         +||+       +||+
 |||        |||          ||+       +||+         +||+        |||          ||+       +||+
 |||       +|||          |||       |||          +||+        |||          |||       |||
 |||      +|||+          +|||     |||+          +||+        |||          +|||     |||+
 ||||||||||||+            |||||++||||           +||||||||||||||           |||||++||||
 |||||||||||+              |||||||||            +||||||||||||||            |||||||||
 |||||||||+                 +|||||+             +||||||||||||||             +|||||+

meet_lang

基于 vite+react 开发的相亲出游计划,依赖 百度地图 sdk

配置 | Configuration

系统配置

通过编辑 public/config.json 配置系统信息。文件内容应为如下 Config 对象

密钥可去百度地图开放平台官网申请

export interface Config {
  // 页面标题
  Title: string;
  // 百度地图应用密钥
  BmapAk: string;
  // 静态资源路径
  ResourcePath: string;
}

旅行路线配置

通过编辑 public/trips.json 配置旅行路线。文件内容应为如下 Trip 数组

export interface Trip {
  // 行程描述
  Describe: string;
  // 出发地信息
  FromInfo: string;
  // 出发地名
  FromName: string;
  // 出发地经度
  FromLng: number;
  // 出发地纬度
  FromLat: number;
  // 到达地对应场景数组下标,没有对应场景则为-1
  FromScneeIdx: number;
  // 到达地信息
  ToInfo: string;
  // 到达地名
  ToName: string;
  // 到达地经度
  ToLng: number;
  // 到达地纬度
  ToLat: number;
  // 到达地对应场景数组下标,没有对应场景则为-1
  ToScneeIdx: number;
}

场景配置

通过编辑 public/scenes.json 配置场景信息。文件内容应为如下 Scene 数组

export interface Scene {
  // 场景名称
  Name: string;
  // 图片url
  Images: string[];
  // 评分
  Score: number;
  // 位置
  Position: string;
  // 经度
  Longitude: number;
  // 纬度
  Latitude: number;
  // 运营时段
  TimeInterval: string;
  // 联系方式
  Contact: string;
  // 来源
  SourceUrl: string;
}

jar_pack

一个基于 Golang embed 打包自定义的 JRE 和 JAR 文件的跨平台打包工具,方便打包 JAR 程序进行二进制分发。

系统架构

graph TD;
    A[jar_pack 工具] --> B[准备 JRE]
    A --> C[准备 JAR]
    A --> D[编译]
    B --> E[JRE 目录]
    C --> F[JAR 文件]
    D --> G[输出二进制文件]
    E --> H[嵌入 JRE]
    F --> H[嵌入 JAR]
    G --> H[生成可执行文件]

使用示例(Java 8 版本环境打包到 Linux x86 下运行)

步骤 1: 准备指定版本以及系统的 JRE

从 Azul 下载并解压到 /jre 目录下。

步骤 2: 准备需要打包的 JAR

将 JAR 重命名为 app.jar

mv your-app.jar app.jar

步骤 3: 打包 Java 程序依赖的本地库

将本地库文件解压到 /lib 目录下。(可选)

mv xxx.dll lib/
mv xxx.so lib/

步骤 4: 编译

GOOS=linux GOARCH=amd64 go build -o app

运行

运行 ./app 或者指定 JVM 参数运行 ./app --spring.config.location=./application.yml

Windows 系统特殊说明

使用 rsrc 工具嵌入图标

  • 查找并保存 favicon.ico 图标到程序同级目录。
  • 新建程序描述文件 app.manifest,写入以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly>
    </dependency>
    <asmv3:application>
        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware>true</dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>
</assembly>
  • 生成资源嵌入文件 rsrc.syso
rsrc -manifest app.manifest -o rsrc.syso -ico favicon.ico
  • 编译时隐藏黑窗口:
go build -ldflags "-s -w -H=windowsgui"
  • 双击 exe 文件即可运行。

剪裁 JRE

Java 9 引入的一项功能,用于创建自定义的 JRE。这个自定义 JRE 只包含应用程序运行所需的模块,从而减少了体积。

分析依赖

使用 jdeps 工具分析 JAR 文件,确定需要的模块。假设你的应用程序 JAR 文件名为 app.jar

jdeps --list-deps app.jar

创建自定义 JRE

根据 jdeps 的输出,使用 jlink 创建自定义 JRE。例如,假设你的应用程序需要以下模块:

jlink --module-path $JAVA_HOME/jmods --add-modules java.base,java.logging --output custom-jre

运行原理

$JAVAW||$JAVA -Djava.library.path=$LIB -jar $JAR $ARGS...

工作流程

sequenceDiagram
    participant U as 用户
    participant J as jar_pack
    participant F as 文件系统
    U->>J: 准备 JRE
    J->>F: 解压 JRE 到 /jre 目录
    U->>J: 准备 JAR 文件
    J->>F: 移动 JAR 文件到 /app.jar
    U->>J: 准备本地库
    J->>F: 移动本地库到 /lib 目录
    U->>J: 编译项目
    J->>F: 生成可执行文件 app
    U->>J: 运行 app
    J->>J: 嵌入 JRE 和 JAR
    J->>F: 输出可执行文件

水印助手

用于高效处理图片水印的 GUI 工具,基于 walk 实现 Windows GUI 界面,使用 imaging 进行图像处理。

使用

  1. 启动程序:双击运行程序,打开主界面。
  2. 添加图片:点击 "添加" 按钮或将文件/文件夹拖放到任务列表。
  3. 选择水印:选择水印图片文件,配置位置、大小、透明度等参数。
  4. 实时预览:实时预览水印效果,调整参数直到满意。
  5. 执行操作:点击 "开始" 按钮,程序会在后台多线程处理任务。
  6. 完成通知:任务完成后,程序会弹出通知。

编译

确保已安装 Golangrsrc 工具,然后按照以下步骤操作:

rsrc -manifest main.manifest -ico watermark.ico -o rsrc.syso

go build -ldflags="-H windowsgui"

依赖项 | Dependencies

chatgpt_proxy

chatgpt 代理工具, 将 chatgpt 的能力拓展到钉钉机器人, 微信客服等平台。

编译 | Build

go build

参数 | Arguments

参数说明默认值
-h帮助
-p服务端口9999
-ckchatgpt 密钥
-cmchatgpt model 参数"text-davinci-003"
-cmtchatgpt max_tokens 参数512
-cstchatgpt 会话超时时间360
-ctchatgpt temperature 参数0.9
-wa微信对话开放平台 开放 API APPID
-we微信对话开放平台 开放 API Encoding AESKey
-wt微信对话开放平台 开放 API Token

依赖项 | Dependencies

sequenceDiagram
    participant User as 用户
    participant WeChat as 微信/钉钉
    participant Proxy as chatgpt_proxy
    participant OpenAI as OpenAI API

    User->>WeChat: 发送消息
    WeChat->>Proxy: 转发消息
    Proxy->>OpenAI: 请求 ChatGPT 服务
    OpenAI-->>Proxy: 返回响应
    Proxy-->>WeChat: 转发响应
    WeChat-->>User: 返回 ChatGPT 回复

用户设备

  • 用户通过微信或钉钉发送消息。

微信/钉钉平台

  • 微信对话开放平台和钉钉开放平台接收用户消息,并转发至 chatgpt_proxy 服务。

chatgpt_proxy 服务

  • HTTP 服务器:接收来自微信/钉钉平台的消息。
  • 路由器:将消息路由到相应的处理器。
  • 处理器:处理消息,并向 OpenAI API 发送请求。
  • 日志服务:记录系统运行日志和请求日志。
graph TD
    subgraph 用户设备
        A[用户]
    end

    subgraph 微信/钉钉平台
        B[微信对话开放平台]
        C[钉钉开放平台]
    end

    subgraph chatgpt_proxy 服务
        D[HTTP 服务器]
        E[路由器]
        F[处理器]
        G[日志服务]
    end

    subgraph OpenAI 平台
        H[OpenAI API]
    end

    A -->|发送消息| B
    A -->|发送消息| C
    B -->|转发消息| D
    C -->|转发消息| D
    D --> E
    E --> F
    F -->|请求处理| H
    H -->|返回响应| F
    F -->|记录日志| G
    F --> E
    E --> D
    D --> B
    D --> C
    B -->|返回消息| A
    C -->|返回消息| A

Gct

AI 生成 Git 提交消息的命令行工具。

功能 | Features

  • 基于 Gemini Api 根据 Git 差异生成提交消息。
  • 提供交互式命令行界面,带有清晰的指导。
  • 支持多种语言的提交消息

系统架构

graph TD;
    A[Git 提交消息生成器] --> B[Gemini API]
    A --> C[用户输入]
    A --> D[Git 差异]
    B --> E[AI 生成消息]
    C --> E
    D --> E
    E --> F[提交消息]
    F --> G[Git 提交]

用法 | Use

编译

go build -o gct main.go

运行

运行编译后的二进制文件以启动:

gct

详细模式

gct -v

交互式命令行界面

  • enter 确认并提交
  • r 重新生成提交消息
  • k 设置 API 密钥
  • l 修改使用的语言
  • p 设置网络代理
graph TD;
    A[启动 gct] --> B{选择操作}
    B --> |<kbd>enter</kbd>| C[确认并提交]
    B --> |<kbd>r</kbd>| D[重新生成提交消息]
    B --> |<kbd>k</kbd>| E[设置 API 密钥]
    B --> |<kbd>l</kbd>| F[修改使用的语言]
    B --> |<kbd>p</kbd>| G[设置网络代理]

i18n_gen

使用 DeepL api 生成 i18n json 文件的工具。

Features

  • 针对 i18n-next 格式设计: 识别并保留文本中的占位符
  • 利用 DeepL 服务翻译 JSON 文件中的文本: 保持其结构不变
  • 翻译过程中的异常间隔处理: 保证程序平稳运行

用法 | Use

编译

go build

运行

运行编译后的二进制文件以启动:

i18n_gen [-h] [-server <deeplx_server_addr>] [-token <deeplx_access_token>] [-source <source_language>] <work_dir>

命令行标志

  • -h: 显示帮助信息
  • -server: 设置 DeepL 服务器地址(默认值:http://localhost:1188)
  • -token: 设置 DeepL 访问令牌(可选)
  • -source: 设置源语言(默认值:zh)
  • <work_dir>: 指定包含 i18n JSON 文件的工作目录

依赖项 | Dependencies

其他注意事项

  • 该工具假设 i18n 文件具有特定的 JSON 结构。
  • 参考 DeepL 文档以获取有关其 API 和使用准则的更多信息。
graph TD
    A[用户] -->|命令行| B[主程序]
    B --> C[DeepL API]
    B --> D[JSON 文件处理]
    C --> E[翻译结果]
    D --> F[占位符识别]
    D --> G[文件结构保持]
    E --> H[翻译后的 JSON 文件]

image2webp

用于将指定目录下的图片文件转换为 WebP 的命令行工具

功能 | Features

  • 支持多种图像格式:PNG、BMP、GIF、JPEG、JPG
  • 可调整输出质量(0-100,默认为 70)
  • 可调整图像大小(例如,0.5 表示将图像缩小为原来的一半,默认为 1.0,不调整大小)
  • 并行处理多个图像,提高转换速度,使用进度条显示转换进度

用法 | Use

编译

cargo build --release

运行

# 将 /tmp/images 目录中的图像转换为 WebP 格式,输出质量为 80,图像大小缩小为原来的一半
image2webp --quality 80 --size-factor 0.5 /tmp/images
  • 该应用程序使用 imagewebp 库进行图像处理和 WebP 编码。
  • 对于 GIF 图像,程序将依赖于 ffmpeg 进行转换。
  • 转换后的 WebP 图像的文件名与原始图像相同,但扩展名为 .webp

Shellx

跨平台协作式终端脚本和终端工具,支持 Windows、Mac、Linux 等主流操作系统。

slogan

脚本管理

  • 使用类似 VSCode 的编辑器编写和管理脚本
  • 支持简单拖拽快速执行
  • 保留编辑记录,随时回滚历史版本

script

文件管理

  • 同步当前会话目录
  • 支持文件上传下载

sftp

协作式终端

  • 通过 SSH 连接或浏览器访问目标设备
  • 支持公钥或密码验证
  • 所有验证均在本地进行,不会上传敏感信息

shtris

xianbao

分布式蜜罐系统,模拟常见易受攻击的服务来吸引攻击者,并收集攻击信息。采用模块化设计,支持多种协议和服务,帮助了解攻击者的行为模式。

主要模块

  • 蜜罐服务: 模拟多种服务(如 SSH、Redis、FTP 等),吸引攻击者并上报活动数据。
  • 数据服务器: 接收并分析蜜罐上报的数据,提供攻击趋势统计。
  • Web 界面: 用于管理蜜罐系统和展示统计数据,支持数据浏览和邮件订阅功能。
graph TD
    subgraph 蜜罐服务
        A1[SSH 服务]
        A2[Redis 服务]
        A3[FTP 服务]
        A4[MySQL 服务]
        A5[Telnet 服务]
    end

    subgraph 数据服务器
        B[接收活动数据]
        C[统计与分析]
    end

    subgraph Web 界面
        D[管理系统]
        E[查看统计]
        F[数据浏览]
        G[邮件订阅]
    end

    H[攻击者] -->|攻击| A1
    H -->|攻击| A2
    H -->|攻击| A3
    H -->|攻击| A4
    H -->|攻击| A5

    A1 -->|上报数据| B
    A2 -->|上报数据| B
    A3 -->|上报数据| B
    A4 -->|上报数据| B
    A5 -->|上报数据| B

    B --> C
    C -->|展示数据| D
    C -->|展示数据| E
    C -->|展示数据| F
    C -->|通知| G

Goodcode

代码编辑器插件,使用 ai 帮助提高代码质量和效率。

主要功能

  • AI 驱动的代码优化: 优化您的代码,使其更加清晰、易维护和高效。
  • 交互式聊天界面: 在 VSCode 中与 AI 模型无缝交互,满足各种使用场景。
  • 生成规范的提交信息: 根据更改的代码内容生成规范的提交信息,遵循最佳实践。
  • 支持多种语言: 自定义您首选的语言(英语、中文、西班牙语、阿拉伯语、葡萄牙语、俄语、日语和法语)。
  • 细粒度控制: 调整优化参数,例如温度、top K/P 值和最大输出长度,以获得定制结果。
  • 可扩展功能: 通过命令和菜单轻松与其他工具和工作流程集成。

注意事项

  • 需要提供 Gemini AI 的 apikey
  • 需要正确连接网络才能使用。
sequenceDiagram
    participant User as 开发者
    participant GoodCode as Good Code
    participant AI as AI 模型

    User->>GoodCode: 输入代码
    GoodCode->>AI: 分析代码内容
    AI-->>GoodCode: 返回优化建议
    GoodCode-->>User: 提供智能提示或重构建议
    User->>GoodCode: 选择性应用建议
    User->>GoodCode: 提交代码更改
    GoodCode->>AI: 生成提交信息
    GoodCode-->>User: 显示提交信息并确认

pantou

一个简单的倒计时应用,用于提醒距离特定时间还剩多久

截图 | Screenshot

pantou

jcef_browser

基于 jcef 开发的浏览器应用,用于在定制设备(指定区域、指定尺寸、指定形状)显示数据大屏。

参数说明

-u 或 --url: 要打开的网址,默认为 https://bing.com/
-w 或 --width: 窗口宽度,默认为 800
-h 或 --height: 窗口高度,默认为 600
-x 或 --x: 窗口的 X 坐标,默认为屏幕左上角 (0)
-y 或 --y: 窗口的 Y 坐标,默认为屏幕左上角 (0)
-s 或 --shape:指定窗口的形状。形状由不同的类型和参数组成,格式为以下之一:
  - ellipse:x:y:width:height:指定椭圆的边界矩形的左上角坐标 (x, y) 和椭圆的宽度和高度。
  - polygon:x1:y1,x2:y2,...:指定多边形的顶点坐标。坐标格式为 x1:y1,x2:y2,...,每对坐标用逗号分隔。
  - rounded-rectangle:x:y:width:height:arcWidth:arcHeight:指定圆角矩形的左上角坐标 (x, y),矩形的宽度和高度,以及圆角的宽度 (arcWidth) 和高度 (arcHeight)。

  如果未指定形状,则窗口默认为矩形。

示例用法

  • 打开一个指定网址并设置窗口为 1600 x 900 的矩形:
java -jar jcef_browser.jar -u http://localhost:8084/ui -w 1600 -h 900
  • 椭圆: ellipse
java -jar jcef_browser.jar -u http://localhost:8084/ui -w 1600 -h 900 -s "ellipse:0:0:1600:900"
  • 多边形: polygon
java -jar jcef_browser.jar -u http://localhost:8084/ui -w 1600 -h 900 -s "polygon:50:0,1550:0,1600:50,1600:850,1550:900,50:900,0:850,0:50"
  • 圆角矩形: rounded-rectangle
java -jar jcef_browser.jar -u http://localhost:8084/ui -w 1600 -h 900 -s "rounded-rectangle:0:0:1600:900:50:50"

工作流程

sequenceDiagram
    participant U as 用户
    participant JB as jcef_browser
    participant WM as 窗口管理
    participant BI as 浏览器初始化
    U->>JB: 提供 URL 和窗口参数
    JB->>WM: 创建窗口
    WM->>BI: 初始化浏览器
    BI->>WM: 返回浏览器实例
    WM->>JB: 设置窗口形状
    JB->>WM: 显示窗口
    JB->>U: 输出结果

依赖项 | Dependencies

使用前

使用后

jarwrap

用于将 Java JAR 文件打包为跨平台可执行文件,支持 windows,macos,linux 操作系统和常见 CPU 架构

jarwrap

主要模块

  • Site 服务 (Next.js): 用户界面交互,提交构建任务到消息队列。
  • Worker (Node.js): 从消息队列中获取构建任务,执行相应的任务逻辑(如构建、上传、生成下载链接)。涉及数据库操作、文件管理、S3、电子邮件发送等功能。
  • Builder (Golang): 基于 Golang 编写的打包程序,使用 Golang embed 功能嵌入 JRE、Native Library、JAR 文件,生成独立的可执行文件。

QShare

Next.js TypeScript Prisma License: MIT

QShare 是一个功能丰富的文件共享平台,旨在提供安全、高效、可扩展的文件存储、管理和共享解决方案。

📋 目录

✨ 功能特性

  • 📁 文件上传与管理: 支持拖拽上传、批量上传、断点续传,集成 Uppy 文件上传器
  • 🔍 多格式文件预览: 内置 PDF、视频、音频、Markdown、Excel、3D 模型等多种格式预览器
  • 📊 数据可视化分析: 使用 ECharts 提供详细的访问统计、热门文件排行、访客来源地图可视化
  • 🔐 用户认证与授权: 基于 NextAuth 实现安全的用户认证系统,支持多种登录方式
  • 🌐 IPFS 集成: 支持去中心化文件存储,提供文件哈希验证和分布式存储选项
  • 📱 响应式设计: 采用 Tailwind CSS 和 Shadcn UI,完美适配桌面和移动设备
  • 🔧 类型安全 API: 使用 tRPC 构建全类型安全的 API,提供优秀的开发体验

🛠 技术栈

前端技术

  • 框架: Next.js 15 - React 全栈框架
  • UI 库: React 18 - 用户界面库
  • 样式: Tailwind CSS - 实用优先的 CSS 框架
  • 组件: Shadcn UI - 可复用的 UI 组件库
  • 可视化: ECharts - 强大的数据可视化库
  • 文件上传: Uppy - 现代化的文件上传器

后端技术

  • API 框架: tRPC - 类型安全的 API 解决方案
  • ORM: Prisma - 下一代 Node.js ORM
  • 数据库: PostgreSQL - 关系型数据库
  • 认证: NextAuth.js - 完整的认证解决方案

存储服务

  • 对象存储: AWS S3 - 可扩展的对象存储服务
  • 去中心化存储: IPFS - 星际文件系统
  • 缓存: Redis - 内存数据结构存储

开发工具

  • 包管理: pnpm - 快速、节省磁盘空间的包管理器
  • 类型检查: TypeScript - JavaScript 的超集
  • 代码格式化: Prettier - 代码格式化工具
  • 代码检查: ESLint - 可插拔的 JavaScript 检查工具

🚀 快速开始

环境准备

确保你的系统已安装以下软件:

  • Node.js: v18.0 或更高版本
  • pnpm: v9.6.0 或更高版本
  • PostgreSQL: v12 或更高版本
  • Redis: v6 或更高版本(可选,用于缓存)

安装依赖

# 使用 pnpm 安装依赖
pnpm install

配置环境变量

复制环境变量模板文件并配置必要的参数:

# 复制环境变量模板
cp .env.example .env.local

编辑 .env.local 文件,配置以下必要的环境变量:

# 数据库配置
DATABASE_URL="postgresql://username:password@localhost:5432/qshare"

# NextAuth 配置
NEXTAUTH_SECRET="your-secret-key-here"
NEXTAUTH_URL="http://localhost:8004"

# AWS S3 配置(文件存储)
AWS_ACCESS_KEY_ID="your-aws-access-key"
AWS_SECRET_ACCESS_KEY="your-aws-secret-key"
AWS_REGION="us-east-1"
AWS_BUCKET_NAME="your-bucket-name"

# Redis 配置(缓存)
REDIS_URL="redis://localhost:6379"

# 应用配置
APP_URL="http://localhost:8004"

数据库迁移

运行数据库迁移命令来创建数据库表结构:

# 推送Prisma schema到数据库
pnpm db:push

# 或者运行迁移(推荐用于生产环境)
pnpm db:migrate

# 启动Prisma Studio查看数据
pnpm db:studio

启动开发服务器

启动开发服务器开始使用 QShare:

# 启动开发服务器(端口8004)
pnpm dev

应用将在 http://localhost:8004 启动,你可以通过浏览器访问。

📁 项目结构

qshare/
├── prisma/                 # 数据库schema和迁移文件
│   ├── schema.prisma      # Prisma数据模型定义
│   └── migrations/        # 数据库迁移历史
├── public/                # 静态资源文件
│   ├── icons/             # 应用图标
│   └── images/            # 图片资源
├── src/
│   ├── app/               # Next.js App Router
│   │   ├── api/           # API路由(包含tRPC)
│   │   │   ├── auth/      # 认证相关API
│   │   │   ├── upload/    # 文件上传API
│   │   │   ├── stat/      # 统计API
│   │   │   └── trpc/      # tRPC路由
│   │   ├── dashboard/     # 仪表盘页面
│   │   ├── [slug]/        # 文件查看页面
│   │   └── layout.tsx     # 应用布局
│   ├── components/        # 可复用UI组件
│   │   ├── ui/            # Shadcn UI基础组件
│   │   ├── dashboard/     # 仪表盘专用组件
│   │   └── upload/        # 文件上传组件
│   ├── lib/               # 工具函数和工具类
│   │   ├── auth.ts        # 认证工具
│   │   ├── db.ts          # 数据库工具
│   │   ├── s3.ts          # S3存储工具
│   │   └── utils.ts       # 通用工具函数
│   ├── server/            # 服务端代码
│   │   ├── api/           # tRPC API定义
│   │   └── auth/          # 认证配置
│   ├── styles/            # 全局样式
│   └── types/             # TypeScript类型定义
├── package.json           # 项目依赖配置
├── tsconfig.json          # TypeScript配置
├── tailwind.config.ts     # Tailwind CSS配置
└── next.config.js         # Next.js配置

S3Tool

基于 Fyne 开发的跨平台图形界面应用,用于管理与 S3 兼容的对象存储服务


功能概述

  • 多配置管理:支持配置多个 S3 存储服务。
  • 文件上传:支持拖拽上传文件。
  • 轻量级 UI:基于 Fyne 框架,具备简洁直观的用户界面。
  • 跨平台:支持桌面端、移动端和 web。

graph TD
    A[用户] -->|操作界面| B[文件列表]
    A -->|配置界面| C[S3 连接配置]
    B --> D[批量操作]
    B --> E[上传功能]
    B --> F[刷新列表]
    C --> G[Name]
    C --> H[S3 Endpoint]
    C --> I[S3 Bucket]
    C --> J[S3 Region]
    C --> K[Secret ID]
    C --> L[Secret Key]
    C --> M[测试连接]
    C --> N[保存配置]
    D --> O[删除]
    D --> P[下载]
    E --> Q[选择文件]
    E --> R[上传文件]

Git 工作负载分析器

这个工具通过调用 Google Generative AI 对 Git 提交的 diff 进行分析,提取任务事项并生成 Markdown 报告。

功能特性

  • 支持分析指定作者的 Git 提交;若不指定作者则分析所有提交
  • 对每个提交的文件级变更进行 AI 分析
  • 提取可交付的任务事项(含中文估算人天),输出 Markdown
  • 进度条展示与失败重试(可配置最大重试与延迟)
  • 通过命令行参数配置代理(无需环境变量)

安装依赖

pnpm install

配置

  1. 创建 .env 文件并配置 Google Gemini API 密钥(或通过命令行 --apiKey 传入):
GEMINI_API_KEY=your_gemini_api_key_here

无需设置代理相关环境变量,若需代理,请在运行时使用 --proxyUrl 指定。

使用方法

# 基本用法(指定作者)
pnpm start --repoPath /path/to/repo --author "作者名或邮箱" --outputFile /absolute/path/analysis.md --apiKey your_api_key

# 分析所有作者(不传 --author)
pnpm start --repoPath /path/to/repo --outputFile /absolute/path/analysis.md --apiKey your_api_key

# 使用代理(通过参数而非环境变量)
pnpm start --repoPath /path/to/repo --author "作者名" --outputFile /absolute/path/analysis.md --apiKey your_api_key --proxyUrl http://proxy:8080

# 自定义重试参数
pnpm start --repoPath /path/to/repo --author "作者名" --outputFile /absolute/path/analysis.md --apiKey your_api_key --maxRetries 5 --retryDelay 2000

参数说明

  • --repoPath, -r: Git 仓库路径(必需)
  • --author: 作者名称或邮箱(可选;不传则分析所有提交)
  • --outputFile, -o: 输出 Markdown 文件路径(必需,建议使用绝对路径)
  • --apiKey: Gemini API 密钥(可选;若未传则读取环境变量 GEMINI_API_KEY
  • --proxyUrl: 代理服务器 URL(可选;通过 undici 全局代理生效)
  • --maxRetries: 最大重试次数(默认:3)
  • --retryDelay: 重试延迟毫秒数(默认:3000)

注意事项

  • 确保有足够的API配额
  • 大型仓库可能需要较长的分析时间
  • 建议在分析前先测试小范围的提交
  • 代理请通过 --proxyUrl 参数设置;当前不读取代理相关环境变量
  • 默认模型为 gemini-2.0-flash-001

AI SVG Logo Generator

基于 Node.js + TypeScript + LangChain 的命令行与库,使用 LLM 生成干净、可扩展的 SVG Logo。支持多模型提供商:OpenAI、OpenRouter、DeepSeek、Gemini、Ollama

功能特性

  • 简洁的 CLI:使用单一 --prompt 描述风格与需求
  • TypeScript API,可集成到你的应用/脚本
  • 多提供商支持:openai | openrouter | deepseek | gemini | ollama
  • SVG 安全校验与基础清洗:确保输出为单个 <svg>,无脚本/外部引用
  • 可设置输出尺寸、模型和提供商

目录结构

src/
  cli.ts                 # 命令行入口
  generator.ts           # 生成器(核心逻辑)
  index.ts               # 库导出
  lib/
    prompt.ts            # 系统提示词与用户提示词构造
    providers.ts         # 多提供商工厂(OpenAI/OpenRouter/DeepSeek/Gemini/Ollama)
    validate.ts          # SVG 校验与清洗
  types/
    ambient.d.ts         # 可选依赖的模块声明(防类型报错)

环境要求

  • Node.js >= 18.18

安装

git clone <your-repo-url>
cd ai_logo_gen
npm install

环境变量(仅 API Key)

cp .env.example .env
# 打开 .env,只需设置 API Key(仅此项),其他参数用 CLI 传参:
#   OPENAI_API_KEY=sk-...
#   OPENROUTER_API_KEY=...
#   DEEPSEEK_API_KEY=...
#   GOOGLE_API_KEY=...   # 或 GEMINI_API_KEY=...
  • provider / model / base-url 一律通过 CLI 或函数参数传递。

构建

npm run build

CLI 使用

通用参数:

Usage: logo-gen [options]

Generate an SVG logo using LangChain + OpenAI

Options:
  -p, --prompt <string>  Logo design brief (style/brand/colors/motifs in one text)
  -W, --width <number>   Width (default: 512)
  -H, --height <number>  Height (default: 512)
  -o, --out <path>       Output SVG file path (default: "logo.svg")
  --provider <name>      LLM provider: openai|openrouter|deepseek|gemini|ollama (default: "openai")
  --model <string>       Model id for selected provider
  --base-url <string>    Custom base URL for API (OpenRouter/DeepSeek/Ollama)
  --api-key <string>     API key override
  -h, --help             display help for command

示例:

node dist/cli.js \
  --prompt "终端脚本管理工具的应用图标,极简现代扁平风格,方形圆角,主色调为深蓝色和亮青色,中央是一个抽象的'$'符号与字母'X'巧妙融合,象征命令行与脚本执行,简洁干净,无文字,高对比度,白色或透明背景,矢量图形风格,适合作为App图标或网站favicon,要有弧度设计" \
  --provider deepseek \
  --model deepseek-chat \
  --api-key xxx
  --width 512 --height 512 \
  --out logo.svg

可选:全局链接命令,直接使用 logo-gen

npm link
logo-gen --provider openai --model gpt-4o-mini \
  --api-key $OPENAI_API_KEY \
  --prompt "minimal logo for Acme with triangle motif" \
  --out logo.svg

库使用(TypeScript)

import { generateSvgLogo } from "ai_logo_gen";

const svg = await generateSvgLogo(
  {
    prompt: "minimal, geometric mark, green + black, brand: Acme",
    width: 512,
    height: 512,
  },
  {
    provider: "openai",
    model: "gpt-4o-mini",
    apiKey: process.env.OPENAI_API_KEY,
  }
);

// svg 字符串可直接写入 .svg 文件

提供商与模型

Provider需要的环境变量/参数默认 Base URL备注
openaiOPENAI_API_KEY / --api-key模型必传
openrouterOPENROUTER_API_KEY / --api-keyhttps://openrouter.ai/api/v1模型必传,可自定义 base-url
deepseekDEEPSEEK_API_KEY / --api-keyhttps://api.deepseek.com模型必传,可自定义 base-url
geminiGOOGLE_API_KEY 或 GEMINI_API_KEY / --api-key需安装额外依赖,模型必传
ollama无(本地推理)http://localhost:11434模型必传,可自定义 base-url

可选依赖(Gemini/Ollama)

项目对 Gemini 与 Ollama 采用“按需动态导入”。若你使用下列 provider,需自行安装对应包:

  • Gemini:

    npm i @langchain/google-genai @google/generative-ai
    # 如遇依赖冲突:
    npm i @langchain/google-genai @google/generative-ai --legacy-peer-deps
    
  • Ollama:

    npm i @langchain/community
    

未安装时,运行会给出明确提示,指引安装相应包。

SVG 输出规范

  • 仅输出单个 <svg>...</svg>,包含 xmlnsviewBox,设置 width/height
  • <script>foreignObject> 或外部引用
  • 包含 <title> 提升可访问性
  • 内容居中、可缩放,优先几何图形而非巨大 path 数据
  • 生成后会进行基础清洗与校验(见 src/lib/validate.ts

常见问题(FAQ / Troubleshooting)

  1. 运行时报“找不到包 @langchain/google-genai/@langchain/community

    • 按“可选依赖”章节安装所需包;或更换 provider(如 openai/openrouter/deepseek/ollama)。
  2. npm 装包时 ERESOLVE unable to resolve dependency tree

    • 试用 --legacy-peer-deps,或改用 pnpm/yarn。
  3. 报错 “Missing API key”

    • 对应提供商需要设置 API Key。用 --api-key 传入或在 .env 中设置相应环境变量。
  4. 输出 SVG 无法预览或显示错位

    • 尝试让 --prompt 更具体或减少复杂度;或调整尺寸;也可手工检查 xmlnsviewBox 是否正确。