大象笔记

知者行之始,行者知之成

Nginx 添加 Access-Control-Allow-Origin 头,允许跨域请求

No 'Access-Control-Allow-Origin' header 想从 js 前端实现拉取一个服务端的 markdown 文件,然后在浏览器端渲染成 HTML。 但是本地开发环境调试时报错: Access to XMLHttpRequest at 'https://www.sunzhongwei.com/some_file.md' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on th ...

阅读全文...

2023 年底工作总结

又到了一年一度的年底写工作总结的 PPT 时间。 这个周末烟台刚下完创历史记录的暴雪,天太冷就没有出门,把 PPT 赶了出来。 PPT 内容来源 每个月的月报 涉及项目的屏幕截图。统计了一下今年6成的工作都是在写 Android,所以界面截图成了大头。为了更加直观,我把截屏视频转换成了 gif 自动循环播放,同时省去了贴图量。 整理这个笔记的目的 找一个合适的切入点,让我自己不反感这个总结。 公司比较尴尬的一点是,这个 PPT 还要在部门内部上台讲一遍。 然后相互打分,作为年度考核的一个依据。 如果是为了打高分,那么这个 PPT 自然就会出现各种言不由衷的内容。 而且也不一定有好的效果。 ...

阅读全文...

Rust web 框架 axum (五): 每个功能独立一个文件

之前为了练手把所有的 Axum rust 代码都写在 main.rs 这一个主文件中。 随着功能的增多,发现几点不便: 代码行数过多,不方便查找指定功能的代码 不同功能的类似数据结构需要分别定义,为了避免重名,增加了功能名前缀,但是带来的影响是类型名过长,代码丑陋无比 新增功能时,复制/修改既有代码也不方便 目标 一个 Axum 项目中,有多个子功能,每个子功能在不同的文件中实现。 契机 正好在写枯燥无比的 Android 界面代码时,产生了一个小工具的需求, 即,将 Android 样式代码剥离出 styles.xml 文件,于是在写这个功能的时候, 就顺手将既有的 Axum 项目代码重 ...

阅读全文...

将 yolov5 内置模型导出为 pytorch mobile 格式

Google Colab 地址 使用 Colab 能利用 Google 免费提供的 GPU 资源,快速进行模型训练。比在我的弱鸡笔记本上训练,能节省大量时间。 在 Colab 上新建一个项目 https://colab.research.google.com 或者可以考虑继续沿用之前的项目。 安装 yolov5 新建一个代码块 #clone YOLOv5 and !git clone https://github.com/ultralytics/yolov5 # clone repo %cd yolov5 %pip install -qr requirements.txt # install ...

阅读全文...

Rust web 框架 axum (四): 生产服务器环境使用 Nginx 部署 axum 服务

这个周末不算忙,总算可以把一直没有上线的 Rust Axum 写的在线小工具发布了。 基本上跟 Golang Gin 的发布流程类似,本地编译好,scp 到服务器上。 然后配置好 systemd, nginx reload 就可以了。 比较省事的地方是 axum 默认会把模板文件打包到二进制文件中,不需要像 golang gin 一样增加额外配置代码。 第一个 Rust 小工具 Rust Axum 小工具: 中文标点替换成对应的英文标点符号 网页地址: https://www.sunzhongwei.com/tools3/replace-chinese-punctuation 编译优化 如果不 ...

阅读全文...

通过了微信小程序个人认证

早上收到一条微信公众平台的消息提醒: 大致内容是,现有的个人微信小程序需要完成微信认证,否则,12月24日之后将不能被搜索到,无法转发分享。。。 这还得了,只能屁颠屁颠地去小程序管理后台去完成认证了。 按照提示,到左侧导航栏找到微信认证功能,即可。 费用 个人微信小程序认证费用 30,企业小程序 300。 认证费用转嫁开发者,也是没有底线了现在。 第一个被驳回 原因是,如果你选择了个人职业,例如我选了软件开发工程师,还需要上传身份证。但是第一次填写,也没提示。审核人员就打电话过来了。说不提供身份证,就需要将职业置空,即无。 第一次见到发布程序,还需要认证我职业的。。。有任何关联性么? 我干 ...

阅读全文...

VIM 中进行英文单词拼写检查

最近写代码时,发现好多的单词拼写错误,既有自己拼写错误的,也有三方 API 中的字段拼写错误,更有产品文档中的,及 UI 设计稿中的。 有些一眼就能辨识出来,有些很难察觉,特别是比较长的单词。 例如: registration 拼写成了 registartion。 浏览器比较好,非常智能,比如正在使用的 Edge,就自动标注了第二个单词有拼写错误。 但是在 VIM 中,就很难发现,一旦上线,就是非常尴尬的 bug。 于是查了一下,发现 VIM 居然自带了单词拼写检查功能。 开启 :set spell 关闭 set nospell 效果 VIM 会在拼写错误的单词下面加上下划线。 但是,没 ...

阅读全文...

在阿里云上成功卖掉了一个闲置的域名

最近双十一,又收到好几个域名的续费通知,有的废弃很久了,一直舍不得扔掉。 毕竟好不容易做了备案,也通过了 Google Adsense 广告认证,丢了确实可惜。 但是,自己精力有限,不想花费过多的时间在不再感兴趣的项目上。心想干脆直接卖掉吧。 阿里云域名管理很方便的一点是,不想续费了,可以直接挂在上面交易,设置好一个目标价格后,可以等待买家一口价成交,省时省力,不墨迹。 没想到,挂了两天就被买走了。 这个域名是 14 年注册的,三个字拼音的域名,不太好。但是有备案,也接入了各种广告联盟,有一点点流量,可以忽略不计。挂了个 wordpress 站,及一个练手的小 Spring Boot 项目。 ...

阅读全文...

Rust web 框架 axum (三): 使用 askama html 模板

askama 是什么 Askama implements a template rendering engine based on Jinja. It generates Rust code from your templates at compile time based on a user-defined struct to hold the template's context. askama 即一套模板系统,可以集成到 rust 项目中,并不局限于 axum 中,也不局限于 HTML,任何的模板使用场景都是可以的。 类似 golang 内置的模板系统,及 php laravel 中 ...

阅读全文...

Rust web 框架 axum (二): 返回 HTML form 表单,并处理 post 请求

要实现一个小的在线网页工具,最基本的功能就是能够返回一个 HTML form 表单, 让用户能填写数据,然后提交到 rust axum 后台,再将处理后的数据展示出来。 相对 PHP,Python,Go 的 web 框架,Rust 的 web 框架就晦涩很多,下面的示例如果换成其他语言, 在没有任何基础的情况下,估计一小时也能搞定,但是使用 rust axum 这个框架,我还是折腾了一晚上。 主要原因是: axum 的文档太简陋。如果不是 ChatGPT 帮助,我估计给我一天也搞不定。Google 也搜不到太多的资料。 rust 语法晦涩,需要具备大量的基础知识 下面示例实现了一些基本的使 ...

阅读全文...

android AppCompatButton 设置按下时显示的背景图片

即一个 Android Button 在正常显示时,跟按下时,显示不同的背景图片。 通常按下时显示的是另一张高亮的图片。 之前是通过点击事件实现的,无意发现 drawable selector 可以方便的配置实现,这样代码也清晰了很多。 drawable selector 右键点击 res/drawable 目录,选择新建一个 Drawable Resource File,Root Element 是 selector。 命名为 button_bg.xml <?xml version="1.0" encoding="utf-8"?> < ...

阅读全文...

dp, sp, px 与 Android 界面布局自适应

之前写 Android 平板 App,由于没有正经写过 Android 界面布局,为了图省事, 直接用 px 像素做的布局,及字号大小设置。 好在平板是我们指定的型号,屏幕尺寸,及像素。但是自从发货到客户手中之后, 我就非常担心,一旦这款平板停产,换个更高分辨率的平板怎么办? 为了消除焦虑,我了解了一下 Android 布局的基础。 总结起来一句话: 字号用 sp,宽高用 dp。 问题简化 图片宽度用什么单位? dp 字号用什么单位?sp dp 是什么? dp 是怎么换算为 px 的? dp 是怎么换算为 px 的 android 中,dp 在渲染前,都会被转换成 px。 px = den ...

阅读全文...