作者自研的开源桌面程序与工具,全部免费。版本由 GitHub Actions 自动构建发布,介绍取自各项目 README。
macOS 表达式计算器:直接书写数学表达式求值,支持变量与内置函数,纯鼠标也能完成计算
基于 SwiftUI 的 macOS 桌面计算器:直接书写数学表达式求值,支持自定义变量、14 个内置函数、幂运算右结合等完整语法。内置递归下降解析引擎与完整的中文错误提示。

+ - * / ^、括号、幂右结合(2^3^2 = 512)、一元负号(-3^2 = -9)0~9 . ( ) ⌫);运算符、函数、常量、变量点击即插入到光标处,不碰键盘也能完成计算sin(x) 后占位符 x 自动选中,直接输入即可覆盖;支持 ⌘Z 撤销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 debug | 命令行编译 Debug |
| ./build.sh release | 命令行编译 Release |
| ./build.sh test | 运行 XCTest 单元测试(27 个用例) |
| ./build.sh app | 产出 ./ExprCalc.app |
| ./build.sh verify | 不依赖 Xcode,纯 Swift 验证表达式引擎 |
| ./build.sh clean | 清理构建产物 |
键盘输入:直接在输入框书写,按 Return 或 ⌘Return 计算,⌘Z 撤销。
鼠标输入(无需键盘):
⌫ 逐字删除默认表达式+ - * / ^ 等)和函数(插入 sqrt(x) 等完整形式)> 💡 点击函数(如 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 即可换图标。
Windows 分形绘图程序:探索 Z(n)=Z(n-1)^exp+C 的 Mandelbrot / Julia 分形世界,支持参数编辑
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:


Pixel Bender 3D 分形着色器(Mandelbulb 三维分形),可在 Photoshop / After Effects 中使用
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:



Windows 三国华容道滑块益智游戏:多款经典棋局,内置 BFS 自动求解与自动演示,三国人物棋子带背景音乐
经典滑块益智游戏华容道(Klotski)的 Windows 桌面版,内置 BFS 自动求解与演示,使用 Visual Studio 2022(C++ / MFC / v143 工具集) 开发。

bin/bk.mp3无需编译,到 Releases 下载压缩包(x64 为 64 位,x86 为 32 位),解压运行 MFCcaocaohrd_xxx.exe 即可。
> 压缩包内已包含棋局文件 sanguohrd.txt 和音乐 bk.mp3,请保持它们与 exe 在同一目录。Release 版为静态链接,无需安装任何 VC 运行库。
| 文档 | 内容 |
|------|------|
| 棋局文件格式 | sanguohrd.txt 的编号规则、类型定义、编写方法,附 8 棋局参考棋局集 |
| 经典阵法图鉴 | 横刀立马、过五关等经典阵法布局图与最少步数 |
| 数学原理 | 排列组合、逆序数、奇偶性、最短路径——求解器背后的数学 |
MFCcaocaohrd.slnRelease | x64(或 Release | x86)配置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
仅供学习交流使用。
macOS 文件夹磁盘占用统计:渐进式扫描、树形大小视图、环形占比图、Everything 式搜索与索引缓存
参考 Folder Size Explorer 的思路,用 SwiftUI 编写的 macOS 原生文件夹大小统计工具。
统计视图(树形大小 / 占比 / 文件数,右侧详情与环形图):

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

NSDirectoryEnumerator 深度遍历,边扫边出结果,不用等整个目录扫完--path)智能判断——有本地缓存则先秒出顶层目录,后台从缓存聚合注入 size/占比(只做一遍聚合统计、不建树,50 万文件目录载入从 7.8s 降至约 3s,且展开到哪层才物化哪层,没点开的子树不占内存);无缓存则进入浏览模式(只列顶层,文件夹显示直接数量、文件显示自身大小);点击目录逐层展开(原生 NSOutlineView 懒加载);树表右上有「统计大小」按钮,工具栏 ▶(⌘R)跳过缓存强制刷新;浏览模式下打开搜索窗口会自动装载已有索引缓存*.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 文件n / 总数。FileMenu.swift 统一,NSMenu 与 SwiftUI contextMenu 共用一份定义。按住 ⌘ / ⇧ 可多选(树表、搜索结果均支持)cmux,可添加任意命令(如 VS Code、iTerm、Beyond Compare),命令在新终端窗口的目标目录下执行;{path} 代表第一个选中项,{paths} 代表全部选中项(空格分隔、自动转义,如 bcomp {paths} 即可比较两个文件);首次使用自定义启动器需授权"控制终端"L10n.swift 字符串表),新增语言只需加一列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)可能需要在 系统设置 → 隐私与安全性 → 完全磁盘访问权限 中授权运行终端。