大象笔记

知者行之始,行者知之成

Golang CMS 通用的公司产品、服务介绍类网站框架设计

需求背景 我正在用 golang + react ant design pro 开发一套公司内部使用的物联网产品解决方案的介绍网站,同时支持电脑端和手机端。 但是突然来了一个客户的紧急需求,就是能够手机扫描二维码,直接查看产品介绍。 最初想做微信小程序,但是由于要兼容海外市场,最终决定采用 H5 页面的方式来实现,支持中英双语。 于是纠结来了。如果把现在正在开发的那套代码复制过来,很多地方都是需要调整的,例如: 公司 logo 企业名称 备案号 等。而这些模板修改,放到代码中,非常不方便维护,以后再有第三套,第四套同样需要这些修改。 于是,我想是否能够实现一套像 php wordpress ...

阅读全文...

golang fmt.Sprintf 中 %d 与 %s 混用会怎样

写了一个后台分页的 bug,问题的原因在 fmt.Sprintf 中我将 int 类型传递给了 %s。 有问题的代码 categoryId := 5 if categoryId > 0 { url += fmt.Sprintf("?category=%s", categoryId) } 其输出是: /solutions?category=%!s(int=5) 导致之后的参数解析逻辑没有正常执行。 而且这个 bug 具有隐蔽性,从打印日志输出看,我看了半天也没有发现这是一个错误的输出。 后来看 golang fmt 的文档,才知道这是错误信息。 Format ...

阅读全文...

上班开车单程1小时真是噩梦般的体验

去集团另一个子公司现场办公一个周,每天走高速单程一个小时,身心俱疲。 实力不允许做雷锋 第一天早上6:50出门,绕回公司接同事,再走高速去另一个公司。8:20到达,整整一个半小时。 本来还以为绕个圈小意思,没想到这个小意思足够回乳山老家的时间了。 第二天,我就不敢再做好事了,让同事打车到我门口,我再开车去现场。不过,天天等人的滋味也并不好受。 下高速查行程码,要命 本来开这么远的距离已经够糟心了,下高速还要排队查行程码,赶上早晚高峰,排个 15 分钟到 20 分钟很正常。 没有比这更让人上火的了,不到两天,嘴上就起了个泡。 压垮骆驼的最后一根稻草 今天早上,照例我提前到了约定地点,等候永远迟到 ...

阅读全文...

golang 生成文章简介

主要是为了用 golang 生成文章简介,及 html description 标签的内容。 逻辑 去除 html tag 取前 N 个字符 (160 个字母,或 80 个中文字符) HTML StripTags for Go, 去除 HTML 标签 https://github.com/grokify/html-strip-tags-go go get github.com/grokify/html-strip-tags-go 使用方法 import( strip "github.com/grokify/html-strip-tags-go" ) fun ...

阅读全文...

VIM Markdown 中打开当前光标所在的文件链接

由于我把记录每天 TODO 事项放在了 markdown 文件中,当需要记录具体某个事项的细节时,还是新开一个文档比较清晰,所以需要能在 VIM 中快速打开,或者新建文件。 vim-markdown 插件 原来 vim-markdown 组件是支持这个功能的: https://github.com/preservim/vim-markdown 安装: Plugin 'godlygeek/tabular' Plugin 'preservim/vim-markdown' NeoVim 中使用也完全没有问题。 ge 命令 要打开光标所在的文件链接,只需要在 VIM 中依次按下: ge 此时就 ...

阅读全文...

微信小程序 wxml include 公共模板

需求 我想在微信小程序每个页面的底部都加上统一的页脚,例如,问题反馈入口和版权信息等。 由于页面太多,全部逐页手动添加不现实,所以需要用到引入公共模板的功能。 连 golang 的 template 都支持 include 功能,更何况小程序的 wxml 呢。 查了一下,确实支持。 https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/import.html 放在哪里 可以在项目根目录,与 pages 平级,新建一个 templates 的目录,专门用来存放公用模板。例如: footer.wxml header.wxm ...

阅读全文...

Android 通过 ACTION_IMAGE_CAPTURE 拍照获取原尺寸的 bitmap 图片

之前匆匆实现了 Android 拍照功能,但测试时发现得到的图片尺寸都很小,并不是拍照时的原始尺寸。 从官方文档得知原来 ACTION_IMAGE_CAPTURE 从 Intent 得到的是图片的缩略图。 而且解决过程中,万万没想到 Android 官方文档的中文版示例代码有问题,直接用里面的代码根本运行不了。同时,里面不少翻译错误。 需要切换为英文文档,才能跑通。浪费大量时间,服气了。 最终效果 为何直接从 Intent 得到的是缩略图 实际上 Android 官方文档写的也很详细: val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAP ...

阅读全文...

软著代码自动提取,并生成代码文件

申请软著需要提交 60 页代码,或者 3000 行代码。手动一个文件一个文件的复制黏贴太麻烦了。 特别是像 Android 项目这种目录层级特别多的,完全是浪费时间。 于是写了个 shell 脚本,自动生成 txt 格式的文件,然后全部复制到 word 中即可。 以 Android Kotlin 项目为例: shell 脚本 gen_code.sh #!/bin/bash set -e # or use "set -o errexit" to quit on error. set -x # or use "set -o xtrace" to prin ...

阅读全文...

Golang 后台模板分页组件,基于 Tailwind CSS

为何不适用基于 Javascript 的分页组件 For SEO. 写 Web 就是为了能被用户搜素到,如果不是为了这个目的,web 版本都没有存在的价值。 而分页导航又是被搜索引擎收录的关键,所以一定要在后台进行渲染,不要使用 Javascript。 后台模板实现 现在来看,Laravel Django 这类框架还是比 gin 爽,毕竟内置了分页组件。 可以参考这个封装,顺便学习一些 template html 库的使用。 https://github.com/AndyEverLie/go-pagination-bootstrap 封装的很好,复用性很强。但是需要改造的地方。 TODO [ ...

阅读全文...

Android 从相册选择照片,或者拍照

之前实现了 Android 拍照获取图片,现在需要再加上从相册选择照片。 交互 其实有多种交互方式: 界面上直接放两个按钮:一个是拍照,一个是从相册选取。简单直接。 点击拍照按钮,弹出一个选择框,提供两个选项,一拍照,二从相册选择 对于界面空间富裕的场景,我觉得第一种方式就非常方便了。当然,我也懒得搞那么复杂。。。 可是微信里面那个相机为啥那么方便呢?是否是自定义实现的相机,而不是调用的默认的相机应用。 kotlin registerForActivityResult 实现,目前推荐 registerForActivityResult 并没有 startActivityForResult ...

阅读全文...

Android Kotlin JSONObject 解析接口返回的 JSON 数据

我想试试不依赖三方库,例如 GSON,的情况下,用 Android 内置的 JSONObject 来解析后台接口返回的 JSON 字符串。 后台返回的 JSON 格式为: { "err_code": 0, "count": 4, "img": "static/public_images/20220405_093125_cb6e46b6301542ada1ee8e4a7a182e1f.jpg", "shape": [ 232, 174 ...

阅读全文...

Android Kotlin 使用 OkHttp3 上传拍照获取的 Bitmap 图片

断断续续耗费了快一天时间,终于把 Android 拍照并使用 OkHttp3 上传图片的功能实现。 整体感受: Kotlin 相关的资料还是少,即便是英文的资料也不足,特别是三方库。大部分都是 Java 的代码 Android 这些类库相关接口废弃得过于频繁,就算找到了示例代码,经常是已经废弃的接口。对新手很不友好 无聊的概念太多,必须沉住气,要不很容易掀桌子 家里有孩子需要看,不可能一直坐在电脑边,身边有本纸质参考书翻翻,即便是过时的实现方法,还是有启发的,也可以了解基础知识 OkHttp 官方文档 https://square.github.io/okhttp/ 只不过文档是基于 Ja ...

阅读全文...