诚哥博客换新架构啦!

👋 欢迎来到 诚哥博客!

  • 全新博客架构 博客迁移一路曲折 终于找到合适我的架构啦.
  • Wordpres -> Next.js -> Hugo.
  • 2025-12-01 诚哥博客换新架构啦.

简单几步在Hugo上搭建Sveltia CMS方便可视化编辑Hugo文章

最近将博客迁移到Hugo 弄了个CMS方便写文章和编辑文章等,然后想着做个教程吧,记录一下,不仅限于Hugo,其他基于git的文章文档等都适用,如vuepress vitepress等 1.在hugo项目创建以下文件 static/admin/config.yml (后期就配置这个就行) backend: name: github repo: Rakers1024/chengzz-hugo branch: main publish_mode: editorial_workflow media_folder: assets/img public_folder: /img # 时区设置 - 使用中国标准时间 (UTC+8) # 这样在 CMS 中创建的文章会自动使用正确的时区 locale: 'zh-Hans' # Sveltia CMS 会自动处理时区转换为 UTC collections: - name: 'post' label: '新建日常' folder: 'content/posts' create: true slug: '{{year}}-{{month}}-{{day}}-{{slug}}' fields: - label: '标题' name: 'title' widget: 'string' - label: '草稿' name: 'draft' widget: 'boolean' default: true - label: '发布日期' name: 'date' widget: 'datetime' default: '{{now}}' date_format: 'YYYY-MM-DD' time_format: 'HH:mm' format: 'YYYY-MM-DDTHH:mm:ssZ' picker_utc: false - label: '最后修改日期' name: 'lastmod' widget: 'datetime' required: false default: '{{now}}' date_format: 'YYYY-MM-DD' time_format: 'HH:mm' format: 'YYYY-MM-DDTHH:mm:ssZ' picker_utc: false - label: '文章ID' name: 'post_id' widget: 'string' required: false default: '{{timestamp}}' - label: 'URL' name: 'url' widget: 'string' required: false default: '/{{timestamp}}.html' - label: '作者' name: 'author' widget: 'string' required: false default: '诚哥' - label: '封面' name: 'cover' widget: 'image' required: false - label: '分类' name: 'categories' widget: 'list' summary: '{{fields.category}}' field: label: '分类项' name: 'category' widget: 'string' default: '日常干货' - label: '标签' name: 'tags' widget: 'list' summary: '{{fields.tag}}' field: label: '标签项' name: 'tag' widget: 'string' - label: '正文' name: 'body' widget: 'markdown' static/admin/index.html(这里我做了重定向 方便自己的域名支持单点登录,你可以删除,也可以自己改成netlify生成的域名。) ...

2025年12月4日 · 2 分钟 · 诚哥

大家好! 太久没维护我的博客了! 域名即将到期之际! 我做出了选择!

算起来有好一段时间没有对博客进行维护了,也不能说完全没有。博客之前一直是Wordpress的、后来改造成nextjs、再到现在的hugo,让我在下面详细述说。 1. Wordpress越用越不适合自己 Wordpress是一个扩展非常强的框架,几乎搭建就是一键式的,没什么难度。 但是随着时间的迁移,我数据库的表随着插件的增加卸载,主题的落后(主题一旦安装使用,自定义几乎很难有时间再去维护升级)。 自己是学前端开发的,但是对PHP真的不喜欢,之前之所以选择wordpress就是认为他能快速搭建,至少在2021年是这样的,但是现在的博客框架是太多了,也该换换了 随着插件增加,访客增加,我的服务器终于是抗不住了,几乎每天都要干满负荷,装不了其他服务,对于个人服务器的不友好,毕竟个人的服务器不多 又要装其他的服务,不可能一直让博客占用这么多 况且博客本身难赚钱。后面打算自己写一个低内存的。 2.改造nextjs到放弃 2025年初时刚通过ai来帮自己实现很多测试网站,nextjs是ai默认生成最多的,再遇服务器负载高问题,我打算自己写一套nextjs 并且结合我的自动化发布博客和微信公众号自动发布 结合一起,毕竟微信公众号有些收入,就打算两个系统服务融合一起管理。 最终在下班的各个时间堆积下 我弄完了,也正常跑 占用也不高。 但是随着我迁移到新的nextjs站,我发现seo并不友好了,可能是我做的服务站SEO不好,也没什么时间继续维护了,再加上微信公众号对AI的封锁 导致我没什么收入,就停止了微信公众号的相关内容服务器自动化。 然后博客站就一直丢着不管了。直到最近我访问我的博客站,居然访问不了了,而且是那个nextjs最常见的服务端渲染问题。 再加上我的域名到期了 我产生了不想续域名的想法,直到过期了11天,差9天就回收的时候,我认为还是搭建一个纯前端静态资源的博客是最佳选择,服务器占用几乎为0 也不妨碍我其他服务的运行。 3. 改造hugo Hugo一个高效的纯前端网站生成器。 我改造他的时候用了wp2hugo 可以一键迁移我之前的wp文章,为什么不迁移nextjs的?因为这个只做了展示 而且文章内容结构都是高度自定义的,而且文章编辑器我都还没写完。 所以还是迁移之前的wordpress数据 比较有很多迁移工具。 直接导出wp的xml数据 然后转换器直接就能给我生成一整个站点,再改改配置就行了 几乎用时不到3天,再加上一些优化项和CMS的搭建总共我用时5天,目前我的这篇文章不是在vscode等编辑器上写的 而是搭建了Sveltia CMS写的第一篇文章。 4.总结 之前做wordpress就是想看看能否做点付费的内容。但是毕竟不是全职,还是放弃了,nextjs虽然强大,但是个人不推荐,太费时间了 就算有ai加持 还是不推荐个人做博客,当然用他的模板还是可以的,但是我没用模板 干到死哈哈。博客还是回归内容为主,简单才是最好的。希望我不再折腾这个博客吧。 感谢您的阅读!!!

2025年12月3日 · 1 分钟 · 诚哥

在安卓IOS上如何判断内存地址是否缺页

在安卓和 iOS 系统中,当程序访问一个没有被加载到内存的内存地址时,就会发生缺页(page fault)。此时,系统会触发一个异常,并执行缺页处理程序来解决这个问题。通常一些游戏会将此作为判断是否内存被读取的检测方案。 缺页简介 通常情况下,缺页处理程序会将缺页的内存地址所在的页面从磁盘中加载到内存中,然后重新执行访问内存地址的指令。但是,如果内存地址所在的页面无法从磁盘加载到内存中,缺页处理程序就会报告一个内存地址无效的错误。 为了判断内存地址是否缺页,可以在安卓和 iOS 系统中使用一些工具来监控缺页的情况。例如,可以使用 Android Studio 或 Xcode 等开发工具中的调试器来查看缺页事件,或者使用命令行工具如 top、vmstat 和 dmesg 等来查看系统的缺页信息。 需要注意的是,在安卓和 iOS 系统中,缺页是一种正常的运行情况,并不一定意味着程序出错或者系统有问题。通常情况下,缺页处理程序能够很好地解决缺页问题,使得程序能够正常运行。 安卓 在 arm64 安卓系统上不访问内存地址的情况下判断内存地址是否缺页的 c/c++ 函数的一种可能的实现方式如下: [hidecontent type=“reply”] #include <sys/mman.h> bool isPageFault(void* address) { // 尝试将内存地址标记为无效 int result = mprotect(address, 1, PROT_NONE); if (result == 0) { // 如果标记成功,说明内存地址有效 return false; } else { // 如果标记失败,说明内存地址无效 return true; } } [/hidecontent] 该函数使用了 mprotect 函数来尝试将内存地址标记为无效。 如果内存地址有效,则标记操作会失败,函数返回 false;如果内存地址无效,则标记操作会成功,函数返回 true。 IOS 在 arm64 iOS 系统上不访问内存地址的情况下判断内存地址是否缺页的 c/c++ 函数的一种可能的实现方式如下: [hidecontent type=“reply”] #include <mach/vm_map.h> #include <mach/mach_init.h> bool isPageFault(void* address) { // 获取当前进程的任务句柄 mach_port_t task = mach_task_self(); // 获取内存地址的保护属性 vm_region_basic_info_data_64_t info; mach_vm_size_t size; mach_port_t object_name; unsigned int depth; kern_return_t result = mach_vm_region( task, (mach_vm_address_t*) &address, &size, VM_REGION_BASIC_INFO_64, (vm_region_info_t) &info, &size, &object_name ); // 如果内存地址无效,则返回 true if (result != KERN_SUCCESS) { return true; } else { return false; } } [/hidecontent] ...

2024年11月18日 · 1 分钟 · 诚哥博客

多种方式进行 Objective-C 或 C++项目字符串预编译加密防逆向

在 Objectice-C 或 C++ 项目中,使用字符串预编译加密可以有效防止代码被逆向工程。使用 js 加密生成 16 进行数组拷贝到项目中是一种解决方法,还可以使用开源宏定义域编译或者使用开源项目插件来防止逆向。这些方法可以有效防止程序中的敏感代码被逆向工程,并保护代码的可维护性和安全性。obfuscator-llvm、STCObfuscator、Obfuscator-iOS 等。 1.使用 js 加密生成 16 进行数组拷贝到项目 调用解密 AES 加密等加密 JS 生成加密字符串数据可以使用常见的加密算法,例如 AES、DES、RSA 等。以下是使用 AES 算法生成加密字符串数据的示例代码: // 密钥 const key = "0123456789abcdef0123456789abcdef"; // 原始数据 const data = "hello world"; // 加密 const aesEncrypt = (data, key) => { const cipher = crypto.createCipheriv("aes-256-cbc", key, key.slice(0, 16)); let encrypted = cipher.update(data, "utf8", "hex"); encrypted += cipher.final("hex"); return encrypted; }; const encrypted = aesEncrypt(data, key); console.log(encrypted); // 3f6dd8b6a402bda28077c0bf // 将16进制字符串转为16进制数组 const hexToArray = hex => { const array = new Uint8Array(hex.length / 2); for (let i = 0; i < hex.length; i += 2) { array[i / 2] = parseInt(hex.substr(i, 2), 16); } return array; }; const encryptedArray = hexToArray(encrypted); console.log(encryptedArray); // [63, 109, 216, 182, 164, 2, 189, 162, 128, 119, 192, 191] Objective-C++解密函数可以使用相应的解密算法进行解密,例如以下是使用 AES 算法进行解密的示例代码: ...

2024年8月7日 · 7 分钟 · 诚哥博客

子比主题编辑器功能组件提取

由于我切换为 markdown 编辑,用的不是古登堡编辑器,所以只能手动插入编辑器子比主题的功能组件了,下面加的是常用的一些功能,需要全面的可以自己去提取,这里是本人的一些常用的功能。 隐藏内容 [hidecontent type=“reply”]隐藏内容-评论可见[/hidecontent] [hidecontent type=“logged”]隐藏内容-登陆可见[/hidecontent] [hidecontent type=“payshow”]隐藏内容-付费阅读[/hidecontent] [hidecontent type=“vip1”]隐藏内容-一级会员可见[/hidecontent] [hidecontent type=“vip2”]隐藏内容-二级会员可见[/hidecontent] [hidecontent type=“password” password=“123” img_id="" img_url="" desc=“111”]隐藏内容-密码可见[/hidecontent] ## 我这里开头使用[空格hidecontent,真正使用是不需要空格的,因为我这里会解析 [ hidecontent type="reply"]隐藏内容-评论可见[/hidecontent] [ hidecontent type="logged"]隐藏内容-登陆可见[/hidecontent] [ hidecontent type="payshow"]隐藏内容-付费阅读[/hidecontent] [ hidecontent type="vip1"]隐藏内容-一级会员可见[/hidecontent] [ hidecontent type="vip2"]隐藏内容-二级会员可见[/hidecontent] [ hidecontent type="password" password="123" img_id="" img_url="" desc="111"]隐藏内容-密码可见[/hidecontent] 插入其他卡片文章 [postsbox post_id=“947”] ## 我这里开头使用[空格postsbox,真正使用是不需要空格的,因为我这里会解析 [ postsbox post_id="xx"]

2024年6月20日 · 1 分钟 · 诚哥博客