普通视图

发现新文章,点击刷新页面。
昨天以前偕臧的小站

新作:Sunny Screenshot 是 截图 & 钉图的跨平台软件,亦支持“OCR”和“图片翻译”功能

作者 偕臧
2024年3月1日 04:32

简 述: 仅纯粹 C++ 开发了一款 Sunny 截图软件,原生应用;支持 “截图 & 钉图”、”图片翻译”、”OCR提取文字” 等功能,多套皮肤和 Win10 的亚克力效果(类透明磨砂),简洁整体设计的窗口,

支持跨平台:已验证可运行在的系统 ヾ(≧▽≦*)o;

官网: https://sunny.xmuli.tech

支持跨平台:已验证可运行在的系统 ヾ(≧▽≦*)o,详见官网文档

① Windows 7 / 8 / 10 / 11

② MacOS: 10 / 11 / 12 / 13 / 14

③ Linux:Debian 12,Ubuntu 20.04 / 22.04 / 24.04,Deepin/UOS V20-23, openkylin 1.0.x,等

现已上架 Microsoft Store 和 Linux 多个应用商城,撒花🎊🎊🎊🎉🎉🎉;

开发完之后一直也没有宣传过,寂静的在的一隅仓库呆着着; 直到连续几天发现涌入大量流量,Star 也随之猛长;蛤?着什么情况,我啥也没干了。问了下新人,才知 Sunny 已被很多大佬和知名软件网站给翻牌子了,属实意外惊喜╰(°▽°)╯。

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


描述

Sunny 截图是使用纯 C++ 开发的一款简洁且漂亮的 “截图&拼图” 的软件工具,亦支持图片翻译和OCR 等功能;支持 Windows,MacOS,Linux 平台。

本项目从 2023 年起,至少会持续开发和维护十年,再更久的事情,那就彼时再说~;可以放心使用,因为我自身也在使用;

官网

**官网: ** https://sunny.xmuli.tech | 作者: 偕臧

GitHub | Gitee | Releases | Issues | App Store : Microsoft Store / Deepin Store / UOS Store / Spark Store /

反馈 Bug, 提出建议或者想法,任何帮助改进,亦可加入交流群:alt text

功能特色

  • 特色功能
    • 截图 & 钉图
    • 图片翻译(中/英/日/韩/俄/等)
    • OCR 提取文字
    • 窗口属性
    • 自动检测
    • 代码签名
  • 样式功能
    • 亚克力的透明磨砂
    • 自定义的活动色
    • 自定义”边框 & 十字线”的宽度
    • 绘画工具栏支持:垂直 & 水平
    • 钉图窗口的阴影效果
    • 钉图透明度
    • 多种系统风格
  • 其它功能
    • 自定义尺寸和位置截图、延时截图、窗口检测截图
    • 翻译和提取文字的 API,支持用私人 key
    • 手动保存 & 快捷保存 & 自动保存
    • 自动拷贝到剪切板
    • 调整字体及大小
    • 快捷键自定义
    • 国际化翻译
    • 开源库鸣谢
  • 跨平台移植
    • Windows 7 / 8 / 10 / 11+
    • Ubuntu 20.04 / 22.04+
    • Deepin / UOS V20.9 - 23+
    • openkylin V1.0.1+
  • App Store 已上架
    • Microsoft Store 微软商店
    • Deepin / UOS Store 深度社区 / 统信商店
    • Spark Store 星火商店
    • openkylin Store (Ongoing) 麒麟商店

相关文章


演示效果

视频

👉 Sunny 截图是一款简洁且漂亮的截图的软件工具,亦支持【图片翻译】和【OCR】


截图

Windows 10/11+

MacOS 10.15~13+

Linux

  • Ubuntu 22.04

  • Deepin V20.9 / UOS

  • openkylin V1.0.1


代码签名证书

极力推荐从 GirHub Release 下载,更新最快最稳定。下载文件后,文件右键属性校验其唯一性,确保文件没被篡改;

键盘快捷键

KeysDescriptionMode
F6窗口激活截图图全局
Ctrl + F6仅延时截图全局
Shift + F6自定义截图(起点位置 + 截图区域 + 延迟时间)全局
🐱‍🐉
Esc退出截图本地
Tab切换挡位,检测的子窗口矩形的深度本地
` / ~显示捕捉窗口的属性信息 (Path/Size/PID/HWnd …)本地
Ctrl + Shift + S快捷键快速保存到到指定的路径本地
, , , ( A, S, W, D )移动选中区域 1px本地
Ctrl + , , , 外扩选中区域 10 px本地
Shift + , , , 内缩选中区域 10 px本地

应用商店下载

Microsoft Store

在 Window 10/11+ 系统,也在微软商店直接下载


Deepin / UOS Store

深度社区、 统信操作系统商店中,已可直接下载

Spark Store

以及三方的星火商店,也可直接下载


截图作品系列

很久之前就想些一个软件截图的软件,目前一共写如下三个层级的难度作品,提供大家参考

  • Ⅰ. 新手之作 ShotX
    • 项目地址:ShotX | 镜像
    • 功 能:①基本的截图功能,复制和保存,②右键托盘及菜单,③支持 Window,MacOS,Linux,④攥写 Github-Action 的 CI/CD 自动脚本 .yml;实现自动打包和发布,⑤更多见 README 和 源码
    • 描 述:新手级的截图,适合初学 Qt/C++ 入门者
  • Ⅱ. 高级之作 FLIPPED
    • 官 网:flipped.xmuli.tech
    • 项目地址:FLIPPED | 镜像
    • 功 能:①贴图和钉图,②多屏截图,延时截图,自定义截图,③智能检测窗口矩形(Windows & Linux),④矩形、椭圆、箭头、画笔、马赛克、文本、序号,⑤撤销、重做(多级)、保存、取消、拷贝到剪切板,⑥截图框样式三套,且主题色提供自定义;屏幕十字线样式自定义,⑦国际化:英文、简体中文、繁体中文;字体和字号自定义,⑧支持设置窗口,托盘,截图区域之间的流畅切换,⑨更多见 README 和 源码
    • 描 述:高级难度,适合已学习 Qt/C++ 数年经验进阶,需同类型软件的代码借鉴,但可探索中独立写一个大的软件。出发于隐私安全,无任何联网功能。
  • Ⅲ. 商业级别的成熟之作 Sunny (推荐)
    • 官 网:sunny.xmuli.tech
    • 项目地址:Sunny | 镜像
    • 功 能:是 FLIPPED 作品的超集合,常见截图功能都都包含。还包含额外的功能:① “图片翻译” (中/英/日/韩/俄等),和”OCR 提取文字”,也支持用户私人token 的额度使用 ,② .iss 脚本和 CMake 来提供便携版,安装版,③ 绘画工具栏的亚克力效果,且支持跨平台(毛玻璃效果),④编辑文本支持富文本,同一个注释可采用多个字体和颜色等(暂未遇到其它同类软件也能做到),⑤全新的 UI/UE 设计交互,“设置窗口” 无任何缝隙拼接感,颜值达到简约美观,⑥优化截屏完成后的内存释放;⑦国际化翻译更方便,⑧CMake 重写拆分为 EXE + DLL 隔离,⑨进行代码签名,方便下载校验和防篡改,⑩成功上架 Window 的微软商店,Linux 的 深度/统信商店,以及三方的星火商店等;麒麟商店也在上架待审核
    • 描 述:基于前两个的项目经验和不足,直接重写了一套新的框架和UI界面;目前个人从代码功能和产品体验来说,已经达到 工程代码整洁、规范、稳定和健壮性,优秀的解耦机制,漂亮简约得 UI / UX 设计,可以随时应对变化的实际需求,很久之内都无需重构了。定位为 漂亮和简洁,功能实用为主。
项目描述开发经验
ShotX功能极简的截图工具简易,新手级的截图,适合初学 Qt/C++ 入门
FLIPPED简洁且漂亮,功能完整的截图软件;隐私安全,无任何联网功能高级难度,属 Qt/C++ 数年经验的进阶作品,在借鉴同类作品的代码时,可于探索中独立完成的一个大的软件
Sunny一款简洁且漂亮的截图的软件工具。亦支持图片翻译和OCR;已上架微软商店,深度/统信商店,及三方的星火商店等专业级作品,适合已多年沉浸研究 Qt/C++ 经验,随心所欲写任意所需功能,属于商业级的成熟作品,是本截图系列的最高水准之作

注: ShotX,FLIPPED,Sunny 这三款均支持跨平台 Windows / MacOS / Linux。

笔记: Sunny = FLIPPED的功能重构 + 代码重构 + UI重构 + 网络功能(图片翻译+OCR)+ 上架应用商店 + 后续新功能;而 ShotX 是最早的练手探索

如何开发一款截图软件呢?

在写和发布的后的期间,也遇到很多私聊请教 、 邮件沟通某个功能实现?反馈 Bug 和给出使用心得和建议;都给答疑了,但想来可写为一整篇,中间遇到的困难点都写出来,公开出来提供后来者参考。

编译环境

  💻 MacOS 13 📎 Qt 5.15.2 📎 gcc/g++ 9.2 📎 gdb8.3

  💻 Ubuntu 22.04 📎Deepin 20.9-23+ 📎 Qt 5.15.2 📎 gcc/g++ 9.0 📎 gdb8.0

  💻 win10 22H2 📎 Qt 5.15.2 📎 Visual Studio 2022 📎 C++17

【整体思路】

  • 基础窗口: 创建一个 QWidget 窗口,去掉标题栏后,全屏且置顶,捕获此刻多屏幕状态保存为 QPixamp,然后绘画在 QWidget 最底层,再绘画一层透明黑色作为遮罩
  • 绘画工具栏: 作为是一个单独的子窗口,包含两个一级和二级的绘画工具栏,控制二级的显隐
  • 鼠标光标: 将 QWidget 放于虚拟桌面的左上角;相对坐标和绝对坐标的转换
  • 功能思路: 时刻判断当前所处模式:Wait / Select / Move / Draw / Stretch 标记;根据模式标记,对鼠标的 Press / Move / Release 事件进行对应的操作;重点是鼠标放下和松开时的 QPoint
    • 捕获模式:智能窗口 / 全屏截图 / 延时截图 / 自定义截图 等
    • 绘画模式则细分:一级绘画栏和二级绘画栏(愈加精确的参数)
    • 拉伸可为:拉伸已绘图形 / 选中框 / … ,操作是可见区域的任意一个图案
    • 移动同上
  • 钉图功能: 独立的窗口,将图片绘画在最底层,且需要重绘缩小一圈,为毛玻璃的彩虹灯预留位置
  • 杂项但重要: 国际化,不重启切换语言字体,编译,打包,CI /CD,热键,窗口尺寸遍历,显示窗口详细信息及大小,代码签名证书,上架应用商店;太多了,单独成篇写在下面

【如何购买代码签名】

【如何上架应用商城】

  • 『问题』如何上架到微软的 Microsoft Store?如何上架 Linux 的深度/统信/麒麟商城,以及如三方的星火商店呢?

    篇幅太长,单写了一篇,包含详细上架 Windows Store, Deepin/UOS Store, 三方 星火商店等。

    👉 《Sunny截图上架Microsoft Store及Linux商店流程的指北

    Note:

    个人作品上架微软商店的流程很折磨,最后上架成功后也是拨开云雾;

    若是文章对你有价值,亦可帮我积累Sunny的微软信誉,或者在深度商店的好评,甚至感谢🙇‍ ;

    Windows 用户推荐的下载 👉 Sunny_setup_msvc_1.3.0_x64.exe


【打包发布 Windows / MacOS / Linux 上】

介绍多种平台和格式:①Windows:绿色便携版和安装包 .exe ②MacOS:.app.img ③Linux: 绿色版、 .deb.AppImage

  • 『问题』Windows 如何构建打包为 .exe 文件?如何生成构绿色版和安装版?

    QT 项目在 Windows 平台上面发布成可执行程序

  • 『问题』MacOS 如何构建打包为 .dmg 文件?

    QT 项目在 MacOS 平台上面发布成可执行程序

  • 『问题』Linux 如何构建打包为 .deb 文件、如何打包为通用的 .AppImage 格式?

    • Linux下又多种打包 .deb 打包方法:

      • 〖方法一〗通过 ldd.sh + Sunny.sh 两个脚本打包依赖,参考《QT 项目在 Linux 平台上面发布成可执行程序

      • 〖方法二〗通过 dh_make + dpkg-buildpackage 命令《Linux 中用 dh_make 将 Qt + CMake 项目打包为 deb 文件

      • 〖方法三,最推荐〗通过 CMake 的 cpack 命令,那样就不需要填写 debian 文件夹下的 control 等文件,直接拷贝相关资源文件过去。 CMakeLists.txt 底部加上 CPack 的相关代码,核心如下:

        # CPACK: General Settingsset (CPACK_GENERATOR "TBZ2")set (CPACK_PACKAGE_NAME "${project_name}")set (CPACK_PACKAGE_VERSION "${project_version}")set (CPACK_PACKAGE_VENDOR "https://github.com/XMuli")set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simple and beautiful screenshot software tool for Windows, MacOS and Linux")set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")set (CPACK_PACKAGE_CONTACT "https://sunny.xmuli.tech")# 设置Debian软件包的依赖关系set (CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5x11extras5, libqt5svg5")set (CPACK_SYSTEM_NAME "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")set (CPACK_DEBIAN_PACKAGE_SHILIBDEPS ON)include(CPack)
    • Linux下有多种打包 .AppImage 打包方法

      #【方式四】使用 linuxdeployqt 方式打包,在 Ubuntu 22.04 打包,不可以使用 -----------------------------####linuxdeployqt-continuous-x86_64.AppImage 方案可在 Ubuntu 22.04 上面不可行####$ ../linuxdeployqt-continuous-x86_64.AppImage Sunny -appimage$ sudo apt install  libfuse2但是由于过于作者的固执坚守旧的版本,所以无法使用,理由和可能的解决如下:https://github.com/probonopd/linuxdeployqt/issues/340#issuecomment-932712016即:使用linuxdeploy和linuxdeploy-plugin-qt#####linuxdeploy-x86_64.AppImage + linuxdeploy-plugin-qt-x86_64.AppImage 下面方案可行#####https://github.com/BearKidsTeam/thplayer/blob/master/.github/workflows/linux.yml#L54$ sudo apt update$ sudo apt install qtbase5-dev qtmultimedia5-dev libqt5multimedia5-plugins$ sudo add-apt-repository universe$ sudo apt install libfuse2$ wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage$ wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage$ chmod +x linuxdeploy*.AppImage$ mkdir build && cd build$ cmake ..$ cmake --build . -j$(nproc)$ cd ..$ ../linuxdeploy-x86_64.AppImage --appdir AppDir -e bin/Sunny -d bin/resources/cpack/tech.xmuli.sunny.desktop -i bin/resources/logo/logo.svg --icon-filename tech.xmuli.sunny -p qt -o appimage$  ./linuxdeploy-x86_64.AppImage --appdir AppDir -e build/thplayer -d assets/thplayer.desktop -i assets/thplayer.svg --icon-filename thplayer -p qt -o appimage$ mv TouHou_Player*.AppImage thplayer-linux.AppImage
  • 『问题』如何书写 .yml 的脚本,通过 GitHub 的Action 资源,自动打包构建生成 Release 呢?

    通过写三个系统的 .yml 脚本,路径必须是 .github/workflows ,随着时间的流逝⌛,想要持续构建对应的云系统和 Kit 也必须更新,文档和版本参见 images ,直接往 .yml 修改;这是一个实际可跑的脚本 *.yml 都是可以编译成功的,失败可能是额度时间不够了,如某次成功的示例,可看到头像是 GitHub 的头像发布的 Release-v6.1


【UI / UX 设计的效果】

  • 『问题』截图的一级二级的菜单工具栏,如何实现 Windows7 的透明磨砂 / Windows 的亚克力的效果,且能够支持 Windows / Linux / MacOS?

    单纯实现亚克力效果不难,难在Linux和 MacOS 上也能实现这个效果?这是当时的一些探索和经验,总结了四种方法放置于 GitHub - AcrylicWindow

  • 『问题』如何实现一个完美的无边框窗口跨平台,且还要占用低,没有瑕疵BUG,还能白嫖?

    也折腾过,难度也很大,后来发现对于截图,费力可以实现,但是没必要,成本太大;结论:这样现成的没有,目前效果和跨平台都最佳的方案是framelesshelper, 有时放弃也是一种解决方案。

  • 『问题』如何实现国际化多语言的切换?尤其是未使用 Qt Designer 来创建 .ui 文件,遇到无 ui->retranslateUi(this) 函数?不重启软件便可以切换语言

    对于有有 .ui 的部分,可以通过 《Qt 项目(CMake)设置国际化支持》来解决。对于存手写的控件实现的,且大致实现的思路是:

    下拉框中切换语言时,发射信号 → 全局单例 → 信号和槽函 → 到主窗口的槽函数,在里面进行重新加载语言,所有相关的控件的默认文本,都写在这个函数里面,便可以不重启软件,直接实现语言切换成功


【用户体验细节】

  • 『问题』是否需要管理员权限才能运行?

    全程不会弹 UAC 弹窗,不需要管理员权限就可以使用所有功能,也不会中途提权,仅普通用户权限即可,包括导向安装,静默安装,使用卸载;

  • 『问题』Windows 和 Linux 支持一次截多个屏幕,MacOS 仅只能截图单个屏幕,如何实现呢?

    MacOS 除了系统自带的截图支持外,至今没有任何一个三方软件可以做到这点,包括大厂等某企鹅的截图的,无解。根原是属于此苹果接口没公开,至少没人能够发现。

  • 『问题』如何确保 MacOS 上的效果和 Window上面保持外观的一致?

    一个难点是再 MacOS 上也要和再 Windows 的效果保持一致,于是对不同风格进行对比,但 Fusion 又会倒是 Setting 窗口非原生的样式,但好在十分接近;选取一个平衡点。另外还手绘画了一个二十多个自定义或者复杂控件。


【看不见的优化】

  • 『问题』如何解决使用 ESC 取消截图后的内存泄露问题?QPointer 、智能指针、还是单例?

    也花了大力气来探究,在完成一次截图之后,内存的占用会在合适时机自动释放出来;这是定位在消耗内存的变量;开发环境显示器为 4K 27 寸 + 3K笔记本双屏;

  • 『问题』对于使用单例模式不止一处时,有序需要多个单例用来传递或者保存数值时候,重复写很容易

    可采用奇异递归模板的方式,然后添加一个宏展开为友元类;多个单例都只用写一份,而前提是需要对 《C++ 类的六个特殊成员函数》 很熟悉,才能理解,属于优雅的一种实现。

  • 『问题』日志和崩溃生成 DUMP 记录?

    日志可以通过配置文件修改,若是遇到传说的崩溃,亦会自动生成 .dmp 和 崩溃原因;

    转储文件存放: C:/Users/用户名/AppData/Local/XMuli/Sunny/cache/Sunny_Dumps/dump_2024_02_29_11_31_30_714.dmp

    实现方法可通过 WIN API 来实现

    #ifdef _MSC_VERSetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);//注冊异常捕获函数#endif

    额,你没接触过 DUMP,完全不会对其进行解剖分析?也简单写了一个使用 WinDbg 进行入门

    WinDbg:入门分析 dmp 文件『一』》、《WinDbg:调试之附加进程生成 dmp『二』

  • 『问题』希望单例运行EXE,确保全局唯一性?

    可以通过共享内存QSharedMemory 和系统信号量 QSystemSemaphore,双重保证程序在一台终端上,仅会运行一个;

    也能杜绝很罕见的一种情况,即使上次程序崩溃之后,但仍有残留的僵死进程,被误判当前没有启动。严谨(中指推一下眼镜)

    QString uniqueKey = "SunnyUniqueKey"; // 使用唯一的标识符来创建共享内存和系统信号量QSharedMemory sharedMemory;sharedMemory.setKey(uniqueKey);// 尝试附加到现有的共享内存并分离if (sharedMemory.attach()) {    sharedMemory.detach();}// 尝试创建共享内存,如果已经存在,表示已经有一个实例在运行, 判断是为了确保在同一台计算机上只能运行一个相同实例的程序。if (!sharedMemory.create(1)) {    qDebug() << "There is already an instance of the application running (by QSharedMemory)!";    return 1;}// 创建系统信号量, 再尝试获取系统信号量,如果已经被其他实例持有,程序就退出, 判断是为了确保在多个进程同时启动时,只有一个进程能够继续执行。QSystemSemaphore用于创建系统信号量,如果系统信号量已经被其他实例持有(比如由于上一次程序异常退出导致信号量未被释放),则acquire函数会返回false,QSystemSemaphore systemSemaphore(uniqueKey, 1, QSystemSemaphore::Open);if (!systemSemaphore.acquire()) {    qDebug() << "There is already an instance of the application running (by QSystemSemaphore)!";    return 1;}// ...程序其它逻辑// 释放系统信号量systemSemaphore.release();

【Qt / C++ 编码问题】


【项目杂项】


  • 【编译遇坑】【杂谈经验总结】等有空再更

番外:意外之喜

分享一下喜悦

在 v1.3 发布的那天晚上,记得 downloads 是 900+ 的样子;发布完了就去睡觉了。

第二天早上一看下载量就是 1k, 1.1k;中午再看一眼就是 1.2k;晚上再看就是 1.3k;

第三天是 1.4k,

第四天是 1.5k,

… …哈哈哈哈哈哈哈哈哈, 放假回家过年了,也没怎么看

约大大前天回来一看,嗯,还是 1.5k,大家玩的开心愉快

大前天到了 1.6k

前天到了 1.7k

昨天号到了 1.7k

今天的到了 1.8k , 纪念打卡(–写这篇时)

在写过的所有软件中,总的下载量虽然不是最大的,但短时间增速率长是最快的 ヾ(≧▽≦*)o。


系列地址

QtExamples 欢迎 star ⭐ 和 fork 🍴 这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费

简洁且易用的ChatGPT&AI的桌面应用程序ThinkyMate → 不需登录

作者 偕臧
2024年1月11日 05:30

简 述: 开发了一个简洁且易用的 ChatGPT & AI 的桌面应用程序 ThinkyMate;跨平台,无需登录或注册即可使用。 已经内置博主的账号 Key,用户也可以自己的私人 API-KEY。

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


介绍

ThinkyMate


Simple and easy to use desktop application for ChatGPT & AI

简洁且易用的 ChatGPT & AI 的桌面应用程序

簡潔且易用的 ChatGPT & AI 的桌面應用程序

Preview

网址

TitleURL
Sitethinkymate.com
Guidewiki

下载

视频

功能

用于 ChatGPT 和 AI 的简单易用的桌面应用程序! 🎉🎉🎉🎊🎊🎊🎊

ChatGPT和AI:

  • 无需注册和登录任何账户即可使用
  • 无需登录 即可使用 ChatGPT 和 SparkDesk 聊天和语音的所有功能。
  • 支持 ChatGPT 和 SparkDesk AI 模型
  • 支持场景上下文与记录记忆
  • 支持使用私人 API KEY 使用相关功能。
  • 支持气泡模式和纯文本模式
  • 支持显示模式切换:流式(打字机)+常规响应
  • 支持更换主题: MacOS、Ubuntu、Windows、暗黑模式
  • API 密钥采用 AES_256 + CBC 算法加密,密码框输入
  • 跨平台支持(Windows、MacOS、Linux 操作系统)
  • 更多值得探索和发现的功能

语音:

  • 支持文本到语音(TTS)和文本到语音(TTS)功能

  • 支持硬件耳机联动扩展

  • 支持自动智能措辞和转换,更流畅自然

  • 支持修改语速和替换语音库

使用教程

  1. 下载 软件包并安装
  2. Tray Mail 上下文菜单,打开高级设置
  3. 输入 API KEY 以启用相应功能(可选);请重启软件以确保其生效。
    • 输入 OpenAI 密钥以使用 ChatGPT 功能和语音转文字功能
    • 输入讯飞密钥,使用火花桌面功能
    • 输入白度密钥使用文本转语音功能
  4. 输入语音或文本,享受 ChatGPT 功能!
  5. 更多预览图片请参阅 这里

编译环境

  💻 MacOS 13 + 📎 Qt 5.15 📎 gcc/g++ 9.2 📎 gdb8.3

  💻 Ubuntu 22.04 📎Deepin 20.9-23+ 📎 Qt 5.15.2 📎 gcc/g++ 9.0 📎 gdb8.0

  💻 win10 22H2 📎 Qt 5.15.2 📎 Visual Studio 2022 📎 C++17

贡献

如果对您有帮助,或者觉得有用,您可以点击该仓库的⭐ Star 🍴 Fork 两个图标,方便抬手之间,说点赞的手, 手留余香;其次可以我喝一杯冰的快乐水。

反馈

如何反馈?非常欢迎您加入我们!您可以 提一个反馈 ;提出任何错误、建议、功能设想,或帮助改进本软件。

作者

xmulitech@gmail.com | https://thinkymate.com


系列地址

QtExamples 欢迎 star ⭐ 和 fork 🍴 这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费!”

小米路由器 R4A 刷原生 OpenWrt 后的风景

作者 偕臧
2023年1月3日 01:54

简 述: 继上篇 小米AX6S刷OpenWrt和开启OpenClash 后,手痒难耐,决定把小米路由器4A千兆版(R4A)路由器 给刷个原生的 OpenWrt

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


背景

miwifi_r4a_firmware_72d65_2.28.62.bin [官方] 可刷机固件,可开启 telnet

openwrt-22.03.2-ramips-mt7621-xiaomi_mi-router-4a-gigabit-squashfs-sysupgrade.bin

openwrt-22.03.2-ramips-mt7621-xiaomi_mi-router-4a-gigabit-initramfs-kernel.bin

squashfs-sysupgrade.bin 是我们要刷的版本,initramfs-kernel.bin 是类似于重启后就会镜像还原的版本;

通过 openwrt.org 刷官方原生 最新的 openwrt-22.03 固件;OpenWRTInvasion 则利用漏洞进入小米路由器


💻 win10 22H2 📎 小米路由器4A千兆版(R4A) 📎 虚拟机的 Ubuntu 20.04


刷成原生 OpenWrt

  1. 先刷为 2.28.62 版本;此为经过验证可以刷机的版本

  2. 链接路由器,打开 192.168.31.1 登陆后,拷贝出链接的 stok 数,此时标签页不关闭

  3. 主机 Win10 连接路由器 Wifi 后,虚拟机的 Ubuntu 20.04 网络设置为桥接,ifconfig 确保处于同一网段;

  4. 进入 OpenWRTInvasion 文件夹;作用为开启 telnet

    pip3 install -r requirements.txtpython3 remote_command_execution_vulnerability.py

    显示 “done! Now you can connect to the router using several options: (user: root, password: root)” 属成功,才可进行下一步

  5. 固件可通过提前上传到 /tmp 下,依次操作后刷机则成功

    telnet 192.168.31.1    (user: root, password: root)cd /tmpmtd -e OS1 -r write openwrt-22.03.2-ramips-mt7621-xiaomi_mi-router-4a-gigabit-initramfs-kernel.bin OS1
  6. 刚刷好没有 WIFI 的,默认 IP 192.168.1.1, 账号 root,密码无;网线可进后台。

  7. 也可以先刷 initramfs-kernel.bin 后;


注:

  • 打开 192.168.31.1 的标签页也使用虚拟机 ubuntu 的浏览器打开获取 stok 数;之前 Win10 浏览器打开,执行命令,总提示 Warning: the process has finished, but seems like ssh connection to the router is not working as expected.;屡次 telnet 进不去;浪费光阴

  • OpenWRTInvasion,该脚本只能运行在 Linux、Mac 上

  • 需要先刷为支持的版本,如 2.28.62


原生 OpenWrt 基础操作

开启 WiFi

原生默认没开启 WiFi;还以为没成功,氪!

WIFI最好通过图形界面(LuCI)开启,相关设置在 Network(网络)> Wireless(无线)里头。

选择启用之后,记得进入 Edit(编辑)> Interface Configuration(接口配置)> Wireless Security(无线安全)来设置密码。

WIFI名在 Interface Configuration(接口配置)> General Setup(常规设置)> ESSID 修改。


opkg 换源

sed -i 's/downloads.openwrt.org/mirrors.ustc.edu.cn\/openwrt/g' /etc/opkg/distfeeds.confopkg updateopkg instll libustream-openssl ca-bundle ca-certificates

参考 https://mirrors.ustc.edu.cn/help/openwrt.html


设置中文

在 “system-Software” 搜索 luci-i18n-base-zh-cn 之前,先Update 下方可搜寻到


OpenClash 插件

release 下载 luci-app-openclash_0.45.78-beta_all.ipk后 ,执行 opkg install /tmp/**.ipk 安装;遇最后一行提示 * opkg_install_cmd: Cannot install package luci-app-openclash. 则需要按照 wiki 先安装所必须的依赖。


8M 之殇,终结

然,被提示拿捏的死死的;刷小米固件,会想起某帖说的 8M,也明白了;暴风哭泣。不说了,快跑,撤退~~


References

读《找对英语学习方法的第一本书》

作者 偕臧
2022年12月7日 00:21

简 述: 此书写于二十年前,结合我自身情况参照,有了一种理论指导,可在众多学习方法中有效抉择,亦能在不同阶段更换不同策略。本文为读后的一个简要归纳和札记。

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


碎碎念

趁闲暇,花了五天给看完了;感比较久,然统计共 12 h 即可阅完;虽累亦甚至愉悦。


简要

本书重点探讨成年人学习英文的方法和策略。对于自学英语,其指明了一些常见的误区,和对近百年来出现过的主流方法进行了归纳,依据 Rod Ellis 《二语习得概论》 理论和进百年得时间验证进行定论。当然,本书本书直接点题,没有一个通用通杀的方法,但又一个通用的自然逻辑顺序可以作为参考,目前在亲身验证中,也在寻找出一条适合自己的道路。


第一章:爱之愈深、误之愈切

介绍学习外语中常见的误区。

  • 仅听标准发音,会错而不自知;需多听各种带口音的发音,感受其中差异从而自动纠正
  • 外语环境
    • 出国待两年,就会了:住外国房东家、华人街、加拿大小班纯外教、
    • 实际生活场景:购物交流、在家听英语广播
  • 早期学习英语不应开口,有一个较长的“沉默期”,过早开口英语能力会石化在一个较低水平
  • 洋泾浜口语(英语加当地语混杂后的不规范的简化语):类似中式英语、景点商贩英口语
  • 汉语是最容易学,会听会说不会写汉字的文盲。
  • 英语角多和低水平同学交流,不容易犯同样的错误,心理轻松,容易说长句、表达更佳流畅
  • 常见的词组不属俚语,要掌握;但不需刻意学习俚语,其属于文化风俗、文化库。
  • 实际应用能力不是靠背诵“固定搭配”来提高的。eg:“Excuse me” 已被点名回答,则不必再说表示此表示插话。注意使用的场景
  • 不可有意识的记住连读原理并尝试理性的应用它,刻意的连读会适得其反。掌握听和说的连读,是一个自然的过程。

总结: 不同人的语言学习阶段,最佳学习环境是不同的。对初学者来说,自然外语环境的效果最差,不必寻求。有计划、有步骤的、自己从基础单词听力开始学习。

初学者有效方式之一:通过图画、实物、肢体语言开始学习与其对应的单个英文单词发音

中级学习者:适合多媒体和计算机辅助语言,重点学习听力,后由浅入深的阅读

高级学习者:自然外语环境比较明显,英文电影、合适的英文材料更佳。


第二章:我思故我“说”

简单介绍一些科学原理,和记单词重在读音、语法不重要的观点。成人需要英语思维方可做到“听”、“说”反应迅速。

  • 哑巴英语

  • 外语思维:直接建立外语词汇本身和思维直接连接,还关联相关“外语词汇”以及其慨念与思维概念的直接连接

  • 对于高频词汇和句子,尽可能使用外语思维。低频仅占交流中 10% 的的抽象词汇和特殊用法,不必强要外语思维;二八原则,不必耗费大量时间和精力

  • 外语的阅读和写作,正确也是用外语思维;但思考或写作前期构思,可使用一定母语思维。

  • “语法-翻译法”教学是不可取的,有明显弊端,属于落后的老古董保守派。

  • 单词:获得多为表现得形式,从而建立词汇意义在大脑得长久印象

    • 单词分级
      • 2000 个最高频单词,使用率 90%;(英文报纸使用率 80%,略低一点)
      • 5000 个次高频单词,使用率 98%;(包含前 2000,报纸同理稍低);
      • 7000 个普通高频单词,使用率 99%;(包含前 5000,报纸同理稍低)
      • 7000-30000,出现频率为最后得 1% 以内
    • 不靠字典读懂小说,现象是每 10 行生出一个生词(每行 10 词);5000 加上 570 学院词汇表[p105],留学看英文教科书不再吃力。
    • 要求不同
      • 第一层:基础 200 单词,量虽少,使用率最高
      • 第二层:2000 单词,对话中最常用 1000 个单词涵盖普通对话 94% 的词汇,阅读中出现概率为 74%。“通用词汇表(General Sercice List)” 于 1953 年提出,但至今依旧可用,覆盖阅读中 90%,简单对话 95%。词组最好在实际用到它们的文中或者句子掌握,死记硬背效果差。
      • 第三层:5000 单词达到 98%,建立单词的“声音思维”,一听立刻反应形象或概念而非翻译。至此阶段足以够用。其中大多具体的单词可用具体实物、图像、动作表示来学习;少数为抽象单词。可借助日常生活中见到的实物建立思维。
      • 第四层:5000 以上单词,不必苛求完全达到英语思维。通过中文解释学会不会有很大负面影响,阅读更没有问题,听力也仅才 2% 机会。此部分反过来,采取先背诵,在实践中发现和了解真实应用的方式,在做到真正掌握。
    • 学习按照小时计算,而不能用天数。最好设定任务期限,算准时间,提前报名
    • 英语中为数不多的 180 个不规则动词才是使用频率最高的,达到 70%。大多有小规律可循,生活中最常用 20 个动词全部是不规律,但是极度高频使用,反而是容易掌握的。
  • 讲语法

    • 语法知识的多少和交流的流利程度和正确程度之间,没有丝毫关系。语法知识不能不能帮助形成英语思维,反而是在捣乱。

    • 对语法的真正掌握,是有特定的自然次序的(拉森-弗里曼习得次序)。无论成年人是否学习语法知识,最后都是按照这个顺序掌握的

      1. 进行时 ing2. in3. on4. 复数5. 不规则动词中的过去形式6. 所有格 ’s7. is, am, are8. 冠词9. 规则东西的过去式开始出现-ed10. 规则第三人称单数-s11. 不规则第三人称单数-es
    • 语法价值的含义:

      • 首先关注句子含义而非句子结构。反面例子:阅读速度慢,是由于目光在含义价值低的词汇上停留时间明显过长
      • 掌握语法规律过程中,应该从语法现象的”正确单词之间的搭配“入手,从而建立正确连接,达到自动、迅速、不假思索的语法应用能力
      • 语法知识总结和介绍
        1. 第一阶段,零起点在人们后期阶段,了解一点语法还是有用处,”只需知其然,不必知其所以然“就好。方法是重点介绍引文的语法结构,以及和中文语法中不同的指出,使得不感觉奇怪即可。
        2. 第二阶段,接触和学习相当外语后,有一定听力和阅读基础,准备说和写作之前。方法是学生有意识的“注意到”语法变化的具体形式,原则依旧是“只需知其然,不必知其所以然”就好。前提一直是正确有效的输入。
        3. 第三阶段,语法学习的高级阶段。重点不是普通意义上的语法规则,不再是固定搭配,时态变化,动词变化和语序等基础语法,而是在语言表达的高级层面进行完善,最主要是学习正规的英文写作,如商务写作。这种语法提高的核心是“避免歧义”。
  • 论记忆:成人的记忆力远比儿童好

  • 对于学习英文来说,应该完全放弃英文字,只学习英语声音。将注意力集中到声音上,真正按照学习语言的因该的自然顺序去掌握外语(“先听说后读写”)。

  • 要做到流利的识别英文字,最重要的前提是这些单词的”发音”都已经清晰的在大脑中形成,然后通过各种认知手段去识别文字。

  • 学习外语的成年人,国际英标一定要学,总共才是四十几个。


第三章:探寻最佳方法之路

详细介绍百年来学习英文主流方法历史,通过理论支撑和时间验证来阐述各自利弊和实用性。


第四章:理通法自明

不存在某一个统一、的具体的“学习方法”,根据学习者自身情况、不同阶段、科学的制定不同的学习策略。

本章也是前三章的提炼,也是最无用的一章,一切所需要的都需要自己去前三章寻找。

仍将学习过程分为四个阶段,具体阶段也提供一些操作方法。

  • 三种学习类型
    1. 视觉类型(Visual Learner),占据 70%
    2. 听觉类型(Auditory Learner),占据 20%
    3. 运动类型(kinesthetic Learner),占据 10%
  • 外语学习四个阶段
    1. 入门期(Early Stage)
      • 主要锁定基础单词,以名词为主(先学),动词为辅助(后学);只学单词,不学句子;只练习听力。
      • 实践方法:生活场景联想
      • 结束标志:约 3 个月,1000 单词 + 短语
    2. 提高期(Upping the Ante)
      • 通过听力,建立外语思维,关键是提供适当的“可理解输入”
      • 实践方法:古恩的序列法
      • 结束标志:约 6 个月,2000~4000单词,能听懂生活对话,可独自出国旅游;但依旧大量听不懂原版电影。
    3. 增长期(Getting Serious)
      • 学习重点依旧听力,增加阅读,可以少量针对性的说英语。
      • 实践方法:词汇量突击,采用快速背单词
      • 结束标志:一年多,每天至少一小时。英文环境和工作学习无困难,英文电影理解大部分。
    4. 高级期(Scaling Everest)
      • 重点是补习语法(消除语言中歧义则种等),锻炼英文写作 / 商务写作;以及纠正口音。突破“满足于现状”的心理障碍。
      • 实践方法:没有方法,已经是 Life Style
      • 结束标志:约 5%的陈年人能达到此“接近母语水平”

Misleading indentation; statement is not part of the previous 'if'

作者 偕臧
2022年8月8日 03:31

简 述: 使用的 Qt 升级到了 5.15.2,然后 IDE 编译报警告⚠如下,强迫症犯了,得消除掉。

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


警告

screenshot.cpp:164:2: Misleading indentation; statement is not part of the previous 'if'screenshot.cpp:161:5: previous statement is here

PS:💻 win10 21H2 📎 Qt 5.15.2 📎 QtCreator 8.0.0


修复

修改,将其修改为 Tab 按键或者 回车自动对齐,即可消除此警告⚠;改动如下


系列地址

QtExamples

欢迎 star ⭐ 和 fork 🍴 这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录,这里你可以学到如何亲自编写这类软件的经验,这是一系列完整的教程,并且永久免费!”

❌
❌