
Affine矩阵算法推理
Affine变换的效果为: If a point originally had coordinates (x, y), then after the transformation it will have coordinates (ax + cy + e, bx + dy + f) 参考setTransform文档 设各点表示为 src: (s00, s01), (s10, s11), (s20, s21); dst: (d00, d01), ... 整理可得两组三元一次等式: a, c, e: \[\begin{array}{c} d00 = a * s00 + c * s01 + e \\ d10 = a * s10 + c * s11 + e \\ d20 = a * s20 + c * s21 + e \\ \end{array}\]...

Url跳转测试
可用 微信 weixin:// weixin://dl/publicaccount?username=gh_3c884a3615f3 美团 imeituan:// Popo netease-popoapp:// 不可用? 网易云音乐 orpheuswidget:// orpheuswidget://download 支付宝 alipay:// 网易严选 yanxuan://

混合图片制作工具-内嵌版本
部署地址 tool.html 从现有部署复制了一份, 进行了一些调整. 从代码来看功能还很不完善. 之后有时间再进行优化吧. 旧版部署地址: www.h8t.top/miximg GH部署地址: autumnsun1996.github.io/MixedPNG GH-Github仓库: AutumnSun1996/MixedPNG 效果展示 使用’Alt+T’切换主题, 即可看到文章头图发生变化. 也可以尝试在新窗口中打开图片

使用AsciiDoc和Shortcodes实现代码展示+嵌入同步
需求 进行记录的时候, 常常会希望一段js/html/css代码可以作为代码进行展示, 同时嵌入到页面上. 在尝试时间展示页面的时候, 基于 AsciiDoc Passthrough + Hugo Shortcodes 实现了一个简单的代码展示+嵌入同步方案. 使用样例 时间展示页面-AsciiDoc 实际代码 Shortcode内容为(layouts/shortcodes/htmldoc.adoc): ++++ {{ .Inner }} ++++ [source,html] ---- {{ .Inner }} ---- 使用方式为: 实现代码如下: {{% htmldoc %}} <div id="tsdiv" style="font-size: 1.5em"></div> <script> const tsDom = document.querySelector('div#tsdiv'); const reqAF = ( window.requestAnimationFrame || window.webkitRequestAnimationFrame || function (callback) { window.setTimeout( callback, 1000 / 60 ) } ); (function setTs() { tsDom.innerHTML = (new Date()).toISOString(); reqAF(setTs); })(); </script> {{% /htmldoc %}}
Rust Docker编译配置方案
简单记录一下UXCI 这个Rust命令行工具的发布过程中遇到的问题以及解决方案. 问题: 运行环境中GLIBC缺失 问题的表现是: Linux下的编译结果无法在部分其他环境执行 报错内容为: uxcirs: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by uxcirs) 这个错误是因为rust使用了动态链接, 因此依赖于系统的glibc库. 编译时使用的GLIBC_2.28(或者其他版本)在运行时的机器上不存在, 因此无法正常运行. 获取可用的 GLIBC 版本: ldd --version | head -1 各环境下的版本分别为: 镜像ubuntu:18.04: ldd (Ubuntu GLIBC 2.27-3ubuntu1.6) 2.27 (sha256:8aa9c2798215f99544d1ce7439ea9c3a6dfd82de607da1cec3a8a2fae005931b) VPS: ldd (Debian GLIBC 2.28-10+deb10u2) 2.28 镜像rust:latest: ldd (Debian GLIBC 2.31-13+deb11u5) 2.31 (sha256:557ff96cf0d2bed8fe24aded88a5dabbca8d71ff4fa66b696ed8a295247c92cc) 因此, VPS上编译得到的文件无法在 Ubuntu 18.04 中运行. 使用rust:latest镜像编译得到的文件无法在VPS和Ubuntu 18.04中运行. 让运行环境适配可执行文件也是一种选项, 但这个一般是对使用者来说的, 因此这次的需求中可以不用考虑. 而为了让二进制文件能适配更多的运行环境, 大致上有这几种思路: 使用静态链接 降低glibc版本 使用静态链接 StackOverflow中的 这里 还提到了静态编译glibc, 之后有需要的话可以尝试一下 降低glibc版本 由于Docker的存在, 这个选项实际执行起来还是比较方便的....
几个浏览器端的机器学习算法Demo
自行部署的Demo: OnnxWeb, YoloV5, 物品检测 OnnxWeb, 人体Mask TFJs, 人体Mask 基于NCNN的demo: ErdNet人体Mask Demo Github YoloV5 物品检测 Github OnnxWeb和TFJs的个Demo可以正常运行, 但推理速度都不太能令人满意. NCNN的几个Demo基本达到了可用的级别.

Latex展示环境配置方案
结论 对Markdown文件, 需要使用 pandoc+MathJax. 或者,可以使用 AsciiDoc文件+MathJax. MathJax 浏览器中, 一般需要使用MathJax进行渲染. 使用CDN(jsdelivr) <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> 提供本地副本 npm install mathjax@3 cp -r node_modules/mathjax/es5/ TARGET_DIR 添加到模板中 在html head的配置项中添加script标记即可. 以 hugo+PaperMod 主题配置为例: PaperMod 提供了layouts/partials/extend_head.html用于自定义配置, 因此添加到该文件即可: # 注意: 不需要修改主题中的文件, 而是写入到项目文件夹 mkdir -p layouts/partials/ cat <<EOF >> layouts/partials/extend_head.html {{- if (.Param "mathjax") }} <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <style> .MathJax { overflow-x: auto; overflow-y: hidden; } </style> {{- end }} EOF 如果使用了本地副本的方案, 需要相应地修改script里的地址. 这里的css是为了解决默认配置下存在的一个问题: 手机上展示公式超宽时, 将导致页面宽度被改变. 参考了这个回答以及实际生成的html....
青鸟自定义消息微信推送工具
记录一下’青鸟自定义消息推送工具’微信小程序的实现
时间展示页面
一个简单的时间展示页面, 用于帮助计算多屏延迟 实现代码如下: <div id="tsdiv" style="font-size: 1.5em"></div> <script> const tsDom = document.querySelector('div#tsdiv'); const reqAF = ( window.requestAnimationFrame || window.webkitRequestAnimationFrame || function (callback) { window.setTimeout( callback, 1000 / 60 ) } ); (function setTs() { tsDom.innerHTML = (new Date()).toISOString(); reqAF(setTs); })(); </script>
基于JS的文本处理工具
部署地址: www.h8t.top/text Github: AutumnSun1996/webtool 使用方式: 在中间输入原始字符串, 左侧输入 javascript 代码, 即可在右侧得到处理后的结果. 可通过辅助函数h构造数据处理辅助类. 默认参数为原始字符串. TODO: 处理死循环 更完善的使用文档 代码提示 支持导出和导入(分享)