轶哥博客

妄图改变世界的全栈程序员。

Windows应用以管理员权限开机自启(开源)

在研发自助硬件设备的时候,需要实现Windows下的软件以管理员权限自启。

  1. Windows服务:需想办法调用UI进程。
  2. NSSM:一个方便的服务封装程序。但以管理员权限启动UI进程较困难。
  3. 注册表:常见方法在最新版win10测试失败。可尝试抓取Windows任务计划程序对注册表的修改。

测试了多种方法,发现最终可靠的方法是通过Windows任务计划程序进行注册。

开源MySQL定时备份系统

自动获取 MySQL 数据库备份文件并将其上传到对象存储。

Features

  1. 支持加密后压缩上传(默认上传到私密存储的“归档存储”类型,文件需解冻后方可下载)。
  2. 定时自动执行任务。
  3. Web 可视化动态添加配置,支持同时管理多个数据库,可以设置需要备份的表或不需要备份的表。
  4. 支持生成单个 PHP 文件,用于仅内网可访问数据库或虚拟主机数据库的备份。
  5. 支持生成 Shell 文件,用于仅内网可访问数据库的备份。(由于 Docker 部署已非常方便,这个功能不再开发)
  6. 支持 Swagger UI 查看 API,方便与其它系统整合。
  7. 支持超级管理员添加多个普通管理员超级管理员可以管理所有数据库,普通管理员之间内容互不可见,适合普通开发团队的使用场景。
  8. 由于此系统仅为灾备设计,仅支持全量备份,默认备份数据+结构(包含视图、触发器等),不支持增量备份。如果您的数据非常重要,请勿将此作为唯一备份系统,可配合服务商提供的备份功能使用。
  9. 兼容支持手机端访问。
Github 仓库迁移至 Gitea 脚本

迁移 github 私有/公有仓库到 gitea 是一件容易的事情,不过可能由于网络原因,部分较大的项目可能会失败。此脚本会自动过滤已经迁移完成的仓库,因此重复执行脚本直至 gitea 中的仓库和 github 中的仓库数量一致,即表示迁移完成。gitea 迁移失败的仓库会被系统自动删除,因此可能出现仓库数量浮动。为了确保代码资产安全,您在迁移完成后应该间隔十分钟再次执行,直到 gitea 中的仓库和 github 中的仓库数量仍然一致。

需要注意,使用该脚本前,需创建一个Github Token,并且需要临时关闭Two-factor authentication

Electron 应用分发系统

Electron 应用分发系统提供应用程序编译(支持Windows、Linux、MacOS)、自动升级、分发服务。让Electron应用分发变得非常容易。

开源地址:https://github.com/yi-ge/electron-distribution

使用时需要注意,一个git仓库需对应一个Electron应用程序,一个Electron应用程序对应需要部署一套应用分发系统。

Electron 应用分发系统服务器端工作在64位Linux操作系统(必须)和MacOS(可选),默认编译x64应用程序, 其它平台及架构需要修改相应代码(不过这很容易实现).

Node.js打印PDF文件

在Windows平台,使用Node.js实现原生打印PDF通常需要借助C++。例如node-printer,需要安装Python、Visual Studio,同时还需要使用node-pdfium进行PDF转EMF。

也有一些二进制(exe)命令行打印解决方案,但是都有一些缺陷。

例如:

  • 借助 Adobe Reader 或 Acrobat 实现打印,则Windows XP、7、10需要安装不同版本的 DPF 软件,并且在打印时会打开该软件。
  • Sumatra PDF可以静默进行命令行打印,但是在80mm热敏纸打印机中的打印效果较差(不清晰)。

理论上这些方案支持所有能在Windows中安装驱动的打印机,包括非串口的热敏纸打印机。大多数方案都是基于PDFium的实现,如果您有足够的时间精力,可以深入研究PDFium

JS推测Base64图片类型

部分业务中会碰到Base64图片文本。

例如:

  • 微信JS-SDK - “拍照或从手机相册中选图接口”,wx.chooseImage与wx.request结合获取Base64数据。“获取本地图片接口”,wx.getLocalImgData返回Base64数据。
  • 微信小程序中,图片访问地址受到白名单限制,有可能采用base64数据直接在接口返回。
  • 某种读卡器获取到的图片数据以Base64格式返回。

如果返回的图片数据中不包含格式前缀(甚至某个微信接口在ios中错误返回image/jgp类型),那就需要推测图片类型。

Node.js 网页截图服务 - 网页快照API

Puppeteer 是 Headless Chrome Node API。也就是谷歌将Chrome无头浏览模式的接口封装成Node.js的API。利用Puppeteer实现网页截图/网页快照服务是非常容易的。

webpage-capture是基于Puppeteer实现带权限认证(多APP授权)、配备消息队列管理的网页快照API。

源代码:https://github.com/yi-ge/webpage-capture
功能:可对百万级网页数据进行截图采集的API服务。
Swagger文档:https://snapshot.openapi.site/documentation

PHP 7.3正式版+常见拓展的Docker镜像

2018年12月6日PHP官方发布了PHP 7.3.0 正式版。恰逢最近在写一个PHP在线练习的网站,特意去翻了一下7.3.0正式版的Docker镜像。

因为官方镜像只包含了最基本的模块,像pdo_mysqlredis之类的模块并没有包含进去。在hub.docker.com中找到一个相对比较合适的 PHP 7.2 版本的Dockerfilehttps://hub.docker.com/r/phpdocker/phpdocker/),却发现作者将MariaDBRedis ServerNode.js等内容给编进了Image。

我比较喜欢干净的Docker Image,一个镜像只做一个事情。像MySQLRedis之类的数据库,可以单独启动相应的模块。

因此我在前人的基础上,移除了MariaDBRedis ServerNode.js并升级PHP版本到7.3.0正式版。

  上一页下一页