← 返回首页

个人作品展示

作者自研的开源桌面程序与工具,全部免费。版本由 GitHub Actions 自动构建发布,介绍取自各项目 README。

🧮ExprCalc 表达式计算器macOS

macOS 表达式计算器:直接书写数学表达式求值,支持变量与内置函数,纯鼠标也能完成计算

首个版本正在构建发布中,稍后再来看看。也可前往GitHub 仓库查看源码与构建状态。
📖 详细介绍(README)

ExprCalc — macOS 表达式计算器

基于 SwiftUI 的 macOS 桌面计算器:直接书写数学表达式求值,支持自定义变量、14 个内置函数、幂运算右结合等完整语法。内置递归下降解析引擎与完整的中文错误提示。

主界面

功能特性

  • 自然书写表达式:+ - * / ^、括号、幂右结合(2^3^2 = 512)、一元负号(-3^2 = -9)
  • 纯鼠标输入:输入框下方按键行(0~9 . ( ) ⌫);运算符、函数、常量、变量点击即插入到光标处,不碰键盘也能完成计算
  • 光标感知插入:点击 sin(x) 后占位符 x 自动选中,直接输入即可覆盖;支持 ⌘Z 撤销
  • 变量面板:随时增删改变量,点击变量值标签插入变量名
  • 完善的错误处理:除零、未知函数、参数个数不匹配、多余字符、NaN/溢出等均有中文提示
  • 三种计算方式:Return、⌘Return、点击「计 算」按钮

快速开始

环境要求:macOS 26+、Xcode(含 macOS SDK,Swift 5.9+)。

git clone https://github.com/foolpanda/ExprCalc.git
cd ExprCalc/ExprCalc

# 一键构建并生成 ExprCalc.app
./build.sh app
open ./ExprCalc.app

也可以用 Xcode 打开 ExprCalc.xcodeproj,⌘R 运行。

build.sh 命令

| 命令 | 说明 |

|------|------|

| ./build.sh debug | 命令行编译 Debug |

| ./build.sh release | 命令行编译 Release |

| ./build.sh test | 运行 XCTest 单元测试(27 个用例) |

| ./build.sh app | 产出 ./ExprCalc.app |

| ./build.sh verify | 不依赖 Xcode,纯 Swift 验证表达式引擎 |

| ./build.sh clean | 清理构建产物 |

使用说明

界面布局

  • 左侧 30% 变量面板:编辑变量名与值;「添加变量」新增;左滑删除;下方「当前变量值」标签点击插入变量名到表达式
  • 右侧 70% 表达式区:输入框 → 按键行 → 计算按钮 → 结果/错误 → 运算与函数参考

输入方式

键盘输入:直接在输入框书写,按 Return 或 ⌘Return 计算,⌘Z 撤销。

鼠标输入(无需键盘):

  1. 点击「清空」或用 ⌫ 逐字删除默认表达式
  2. 点击按键行输入数字、小数点、括号;退格键删除光标前一个字符
  3. 点击下方参考区的运算符(插入 + - * / ^ 等)和函数(插入 sqrt(x) 等完整形式)
  4. 需要变量时,点击左侧「当前变量值」标签插入变量名
  5. 点击「计 算」按钮查看结果

> 💡 点击函数(如 sin(x))后,占位符 x 处于选中状态,直接输入数字或点击变量即可覆盖;点击 ( ... ) 后光标停在括号内。所有插入均发生在光标位置,可与键盘输入自由混用。

支持的运算符与函数

运算符

| 写法 | 说明 |

|------|------|

| a + b / a - b / a * b / a / b | 四则运算,除零报错 |

| a ^ b | 幂运算,右结合:2^3^2 = 2^(3²) = 512 |

| ( ... ) | 括号,提升优先级 |

| -a | 一元负号,优先级低于 ^:-3^2 = -9 |

函数

| 函数 | 说明 |

|------|------|

| sin(x) cos(x) tan(x) | 三角函数(参数为弧度) |

| deg(r) / rad(d) | 弧度 → 角度 / 角度 → 弧度 |

| ln(x) | 自然对数(以 e 为底) |

| log(x) | 常用对数(以 10 为底),log(100) = 2 |

| log(b, x) | 以 b 为底的对数,log(2, 8) = 3 |

| exp(x) | e 的 x 次幂 |

| pow(a, b) | a 的 b 次幂 |

| sqrt(x) | 平方根(x ≥ 0) |

| abs(x) | 绝对值 |

| ceil(x) / floor(x) | 向上 / 向下取整 |

| round(x) | 四舍五入(.5 向偶数) |

内置常量

pi ≈ 3.14159,e ≈ 2.71828

表达式示例

| 表达式 | 结果 | 说明 |

|--------|------|------|

| sqrt(x^2 + y^2) | 5 | 默认示例(x=3, y=4) |

| 2 ^ 3 ^ 2 | 512 | 幂右结合 |

| -3 ^ 2 | -9 | 一元负号低于 ^ |

| log(2, 8) | 3 | 两参数对数 |

| sin(rad(30)) | 0.5 | 角度转弧度后求正弦 |

| pi * r ^ 2 | 78.5398 | 圆面积(r=5) |

| round(2.5) | 2 | .5 向偶数舍入 |

| exp(ln(5)) | 5 | 函数复合 |

截图中的综合示例:sqrt(x^2 + y^2) * sin(rad(30)) + log(2, 8) ^ 2 - abs(-e) / exp(floor(t)) = 10.5

项目结构

ExprCalc/
├── ExprCalc.xcodeproj
├── ExprCalc/                     # 应用源码
│   ├── ExprCalcApp.swift         # App 入口
│   ├── ContentView.swift         # 主界面(输入/按键行/参考/变量面板)
│   ├── ExprEvaluator.swift       # 表达式引擎(词法分析 + 递归下降)
│   └── Assets.xcassets/          # 应用图标、强调色
├── ExprCalcTests/                # XCTest 单元测试
├── ExprCalc_Complete.swift       # 单文件完整版(新建工程时替换 ContentView.swift)
├── Scripts/
│   └── make_icon.swift           # 应用图标生成脚本
├── Docs/
│   └── screenshot.png            # README 截图
├── build.sh                      # 一键构建脚本
└── verify_engine.swift           # 引擎独立验证(无需 Xcode)

重新生成应用图标

图标由脚本矢量渲染(蓝色渐变圆角方块 + 白色 √x,SF Pro Rounded Bold),输出全部 10 个标准尺寸:

swift Scripts/make_icon.swift ExprCalc/Assets.xcassets/AppIcon.appiconset

修改脚本中的配色与文字后重新执行,再 ./build.sh app 即可换图标。

🌀Z-fractal 分形绘图Windows

Windows 分形绘图程序:探索 Z(n)=Z(n-1)^exp+C 的 Mandelbrot / Julia 分形世界,支持参数编辑

首个版本正在构建发布中,稍后再来看看。也可前往GitHub 仓库查看源码与构建状态。
📖 详细介绍(README)

Z-fractal

fractal demo

Descriptions can be found here: https://blog.csdn.net/foolpanda1168/article/details/82026590

click Release/zxpfractal.exe to run

click menu [Next] (or toolbar [==>]) to see next fractal.

click menu [Edit--editvc] to input new C or Exponent: Z(n)=Z(n-1)^exp +c

A glimpse of the ouput:

Image chines Facebook

Image wheel wich 3 dragons

✨fractal3D 分形着色器着色器

Pixel Bender 3D 分形着色器(Mandelbulb 三维分形),可在 Photoshop / After Effects 中使用

首个版本正在构建发布中,稍后再来看看。也可前往GitHub 仓库查看源码与构建状态。
📖 详细介绍(README)

fractal 3D demo

fractal 3D demo

Descriptions can be found here: https://blog.csdn.net/foolpanda1168/article/details/86101091

use Adobe Pixel Bender Toolkit 2 ,pbk file to demo fractal of 3d ,mandelbulb.

modify MandelbulbQuick.pbk from https://github.com/vpmedia/flash-pbk-collection .

A glimpse of the ouput:

operation gui of pixel bender toolkit

wraped image

change colors

⚔️曹操华容道Windowsv1.0.0

Windows 三国华容道滑块益智游戏:多款经典棋局,内置 BFS 自动求解与自动演示,三国人物棋子带背景音乐

MFCcaocaohrd-v1.0.0-x64.zip
5.4 MB · 发布于 2026/10/6
下载
MFCcaocaohrd-v1.0.0-x86.zip
5.2 MB · 发布于 2026/10/6
下载
查看 Release 详情(源码与历史版本)→
📖 详细介绍(README)

MFC 曹操华容道

经典滑块益智游戏华容道(Klotski)的 Windows 桌面版,内置 BFS 自动求解与演示,使用 Visual Studio 2022(C++ / MFC / v143 工具集) 开发。

平台 IDE 语言

游戏截图

功能特性

  • 多个经典棋局:横刀立马、四路进兵等,下拉框切换;棋局文件可自行扩展,见 棋局文件格式
  • 自动求解:内置 BFS 广度优先搜索求解器,一键算出通关步骤
  • 自动演示:点"运行解"自动播放求解步骤,演示间隔 100ms ~ 5s 可调
  • 三国人物棋子:张飞、曹操、马超、黄忠、关羽、赵云手绘位图棋子
  • 背景音乐:可静音,音乐文件 bin/bk.mp3

快速上手

  1. 把曹操(2×2 大块)移到底部出口即获胜
  2. 按住棋子向上下左右拖动即可移动
  3. 点 1求解 计算步骤 → 点 2运行解 观看自动演示

下载

无需编译,到 Releases 下载压缩包(x64 为 64 位,x86 为 32 位),解压运行 MFCcaocaohrd_xxx.exe 即可。

> 压缩包内已包含棋局文件 sanguohrd.txt 和音乐 bk.mp3,请保持它们与 exe 在同一目录。Release 版为静态链接,无需安装任何 VC 运行库。

文档

| 文档 | 内容 |

|------|------|

| 棋局文件格式 | sanguohrd.txt 的编号规则、类型定义、编写方法,附 8 棋局参考棋局集 |

| 经典阵法图鉴 | 横刀立马、过五关等经典阵法布局图与最少步数 |

| 数学原理 | 排列组合、逆序数、奇偶性、最短路径——求解器背后的数学 |

从源码编译

  1. 安装 Visual Studio 2022(勾选"使用 C++ 的桌面开发"工作负载,其中包含 MFC 库)
  2. 双击打开 MFCcaocaohrd.sln
  3. 选择 Release | x64(或 Release | x86)配置
  4. 按 F7 或 Ctrl+Shift+B 生成,输出位于 bin/ 目录

> Release 配置使用静态链接(MFC/CRT 打进 exe),Debug 配置为动态链接便于调试。

项目结构

MFCcaocaohrd.sln          VS2022 解决方案
MFCcaocaohrd/             源代码目录
├── MFCcaocaohrd.cpp/h    应用程序类(读取棋局、播放音乐)
├── MFCcaocaohrdDlg.cpp/h 主对话框(求解/演示/棋局切换)
├── QZ.cpp/h              棋子类 + BFS 求解器
├── TStage.cpp/h          棋局/关卡数据结构
├── WNDChess.cpp/h        棋子窗口(拖动消息处理)
├── CDemoThread.cpp/h     自动演示线程
├── Direction.cpp/h       方向定义
├── res/ res2/ res3/      位图、图标、音乐等资源
└── bin/                  编译输出与运行时数据文件
docs/                     图文文档(格式说明/阵法图鉴/数学原理)
.github/workflows/        CI:打 v* 标签自动编译并发布 Release

License

仅供学习交流使用。

📁FolderSizeFinder 文件夹大小统计macOSv1.0.0

macOS 文件夹磁盘占用统计:渐进式扫描、树形大小视图、环形占比图、Everything 式搜索与索引缓存

FolderSize-cli-universal
3.8 MB · 发布于 2026/10/6
下载
FolderSize-macos-universal.zip
2.7 MB · 发布于 2026/10/6
下载
查看 Release 详情(源码与历史版本)→
📖 详细介绍(README)

FolderSize — macOS 文件夹大小统计

参考 Folder Size Explorer 的思路,用 SwiftUI 编写的 macOS 原生文件夹大小统计工具。

界面预览

统计视图(树形大小 / 占比 / 文件数,右侧详情与环形图):

Everything 式搜索(输入即搜,示例面板点击即用):

功能

  • 渐进式扫描:后台 NSDirectoryEnumerator 深度遍历,边扫边出结果,不用等整个目录扫完
  • 浏览模式 / 智能打开 + 缓存懒水合:所有打开入口(侧栏/收藏夹/拖拽/⌘O/--path)智能判断——有本地缓存则先秒出顶层目录,后台从缓存聚合注入 size/占比(只做一遍聚合统计、不建树,50 万文件目录载入从 7.8s 降至约 3s,且展开到哪层才物化哪层,没点开的子树不占内存);无缓存则进入浏览模式(只列顶层,文件夹显示直接数量、文件显示自身大小);点击目录逐层展开(原生 NSOutlineView 懒加载);树表右上有「统计大小」按钮,工具栏 ▶(⌘R)跳过缓存强制刷新;浏览模式下打开搜索窗口会自动装载已有索引缓存
  • 搜索驱动的后台缓存刷新:输入关键词立即用现有索引出结果;若缓存陈旧(>60 秒),同时自动启动后台刷新扫描——不打断当前结果(底部转圈指示),扫描完成后缓存原子重建、索引整体切换到新快照并用同一关键词重跑:新增文件出现、已删文件消失、同名取新大小。缓存更新策略为整份原子重建(临时文件 + 原子替换),不做增量合并
  • 树形视图:文件夹层级按大小降序展开,显示大小 / 占父目录比 / 文件数 / 子文件夹数
  • 双口径:磁盘占用(实际分配块)与逻辑大小(字节数)一键切换
  • 环形图:选中文件夹的子目录大小构成(前 7 项 + 其他),带占比条图例
  • 最大文件榜:整个扫描范围内 Top 150 大文件
  • Everything 式搜索(⌘F):右键任意文件夹"在此文件夹中搜索…"弹出独立搜索窗口。窗口分四段:第一行显示待搜索的全路径(可一键拷贝)、第二行是独立的关键词输入框(打开即聚焦,输入即搜,带 ✕ 清空)、第三行是示例行——收起时只占一行(示例按钮 + 语法提示),点"搜索示例"浮出面板展示 9 组常用场景(查询串 + 说明,点击即用)与最近搜索;下方为实时结果列表,双击在 Finder 定位,扫描进行中也可搜索
  • 搜索语法:多关键词空格分隔(AND,按相对路径匹配,不区分大小写)、*.pdf/IMG_*.jpg 名称通配符、ext:log 扩展名、size:>100mb / size:<1gb / size:>=2kb 大小比较(单位 b/kb/mb/gb/tb)、folder: 只看文件夹(可带关键词如 folder:node)、file: 只看文件,均可自由组合,如 mp4 size:>500mb
  • 索引落盘:完整扫描后自动保存二进制索引(~/Library/Application Support/FolderSize/Indexes/*.fsidx);再次打开同一目录秒载缓存不再扫描(状态栏显示"已载入缓存",点"重新扫描"刷新);另支持 文件菜单 → 导出索引…/打开索引… 交换 .fsidx 文件
  • 隐藏文件开关、错误统计(无权限目录计数)、Finder 定位、拷贝路径、右键"设为根"重扫
  • 收藏夹(侧栏"卷"下方):中间树列表右键文件夹 →「添加到收藏夹」(收藏到顶层 / 已有分类 / 新建分类)。类似 Chrome 收藏夹,支持多级分类整理:右键分类或收藏可 重命名 / 新建子分类 / 移动到分类(子菜单带层级轨迹)/ 删除(分类连同其下收藏);点击收藏即以浏览模式打开(秒开),目录已失效时提示并可一键清理;收藏树与分类展开状态持久化,重启不丢
  • 内置图片预览窗口:图片右键 →「图片预览…」打开独立预览窗口——顶部显示当前文件全路径(可选中复制),并提供「上一级目录 / 下一级目录」在目录树间穿梭(进入某目录后自动预览该目录图片);工具栏可复制全路径、复制父路径;窗口内 ←/→ 连播同目录图片,底部实时显示 n / 总数。
  • Windows 式文件右键菜单(支持多选):统计树、搜索结果、最大文件榜中的所有条目(文件与文件夹)统一右键菜单——打开(默认应用,多选时逐项打开)/ 打开方式(LaunchServices 枚举可用应用,附「其他…」手动选择)/ 快速查看(QLPreviewPanel,多选时面板内 ←/→ 连播)/ 比较(恰选中两项时出现,自动探测已安装的 Beyond Compare 与 FileMerge)/ 属性…(应用内对话框:类型、位置、逻辑大小、磁盘占用、创建与修改时间、权限)/ 在访达中显示简介(⌘I)/ 在访达中显示 / 在终端中打开 / 自定义启动器 / 添加到收藏夹(文件夹)/ 在此文件夹中搜索(文件夹)/ 拷贝 / 拷贝路径 / 移到废纸篓(带确认);菜单构建逻辑由 FileMenu.swift 统一,NSMenu 与 SwiftUI contextMenu 共用一份定义。按住 ⌘ / ⇧ 可多选(树表、搜索结果均支持)
  • 打开方式 / 目录启动器:收藏夹和树列表的右键菜单可直接 在访达中显示 / 在终端中打开(默认 Terminal.app),并支持自定义启动器——预置 cmux,可添加任意命令(如 VS Code、iTerm、Beyond Compare),命令在新终端窗口的目标目录下执行;{path} 代表第一个选中项,{paths} 代表全部选中项(空格分隔、自动转义,如 bcomp {paths} 即可比较两个文件);首次使用自定义启动器需授权"控制终端"
  • 中英双语 + 设置:菜单 FolderSize → 设置(⌘,)选择 简体中文 / English / 跟随系统,切换立即生效;所有界面文案与 tooltip 由语义 ID 键控(L10n.swift 字符串表),新增语言只需加一列
  • 交互细节:扫描小批量异步回传 + 表格刷新节流,统计过程中展开/选中照样流畅;所有按钮和控件都有 tooltip 说明
  • 拖拽文件夹到欢迎页、侧栏快速定位(主文件夹/下载/文稿/应用程序/各卷)
  • 支持命令行启动直达:FolderSize --path ~/Downloads(默认浏览模式,加 --scan 启动即统计)

构建与运行

本机需用完整 Xcode 工具链(CLT 缺少 SwiftUIMacros 宏插件):

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer swift build
swift run FolderSize                 # 或 .build/debug/FolderSize
.build/debug/FolderSize --path ~/Downloads

> 终端启动的键盘焦点:macOS 14 起 AppKit 改为"协作式激活",从前台终端拉起的进程

> 默认拿不到键盘焦点(打字会进终端)。本应用已内置分级激活兜底(常规激活 →

> 借前台应用 cooperative 让渡 → 激活策略翻转,见 AppFocus.swift);如仍遇到,

> 可改用 LaunchServices 启动,激活由系统接管、无此问题(仅冷启动接收 --args):

>

>

> open FolderSize.app --args --path ~/Downloads
> 

>

> 另注意:若终端开启了"安全键盘输入"(Terminal 菜单栏 显示 → 安全键盘输入),

> 任何应用都无法从终端拿走键盘输入,需先取消勾选。

测试

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer swift test

结构

Sources/FolderSize/
├── FolderSizeApp.swift    # 入口 + 菜单命令 + 搜索窗口场景
├── AppFocus.swift         # 分级激活:终端拉起时也要把键盘焦点抢回来
├── ContentView.swift      # 主布局、工具栏、状态栏
├── SidebarView.swift      # 快速位置 / 卷
├── FolderTableView.swift  # 层级 Table(HSplitView 左侧)
├── DetailPanel.swift      # 详情:统计 + 环形图/最大文件
├── FileMenu.swift         # 文件/文件夹右键菜单(NSMenu 与 SwiftUI 共用)
├── DonutChart.swift       # Canvas 环形图 + 迷你占比条
├── SearchWindowView.swift # Everything 式搜索窗口
├── ImagePreview.swift     # 内置图片预览窗口(路径/目录跳转/复制路径)
├── SearchSupport.swift    # FileRecord / SearchScope / 纯函数过滤器
├── Favorites.swift        # 收藏夹树(多级分类)+ UserDefaults 持久化
├── Launchers.swift        # 目录启动器(访达 / 终端 / cmux 等自定义命令)
├── IndexCache.swift       # .fsidx 二进制索引读写
├── WelcomeView.swift      # 欢迎页(拖拽区)
├── ScanStore.swift        # 扫描状态机 + 增量建树 + 索引/缓存
├── Scanner.swift          # 后台枚举器(批量事件)
├── Node.swift             # 树节点模型
└── Format.swift           # 格式化 + 图表色板

> 提示:首次扫描系统目录(如 ~/Library)可能需要在 系统设置 → 隐私与安全性 → 完全磁盘访问权限 中授权运行终端。