[{"content":"这几天把这个博客重新调整了下，框架改成了 Hugo，域名也换了，几篇文章也顺便迁移过来了。部署方式从服务器部署换成了 github + cloudflare 的自动化部署，方便很多。\n这些要是放在以前，是不敢想的，各种配置要折腾，各种报错要搜索，各种问题要解决。现在好了，借助 AI，虽然不是分分钟，大概也只需要十几分钟。\n看到博客之前还有几篇记录错误的笔记，现在也是几乎不需要了，直接丢给 AI 就行了。真的是时过境迁。短短几年，已经从远远的观望到现在离不开 AI 了。这其中又逃不过一个不免让人焦虑的话题，那就是慢慢的自己也在被 AI 取代。是吧？\n在计算机方面，随着 AI 越来越强，慢慢的编码能力已经超过我们普通程序员了。我们又该何去何从呢？这是一个全新的事物，这也是一个全新的问题，目前我是还没有找到答案。但是也不用气馁，毕竟没有什么问题是解决不了的。\n但是，从另一个角度看，有了 AI 对于我们来讲也是有了一个很重要的工具。就像学习上，过去可能学习起来费劲的东西，坚持不了几天就会放弃，最终几个月下来也没学到什么。但是现在不一样了，有了 AI 什么问题都能立马得到答案，学习的体验不一样了，不会有那么多折磨人的挫折了。虽然也还是会有不懂的地方。这样或许能够缩小我们和前面那一批人的差距呢？\n既然是随笔，就写到这里吧，简单记录一下自己的所思所想。留给未来的自己看，说不定也能留给某个正在爬取数据的 AI 看。\n","permalink":"https://dev.404503.xyz/posts/ai-%E6%97%B6%E4%BB%A3%E7%9A%84%E9%9A%8F%E7%AC%94%E4%B8%80/","summary":"\u003cp\u003e这几天把这个博客重新调整了下，框架改成了 Hugo，域名也换了，几篇文章也顺便迁移过来了。部署方式从服务器部署换成了 github + cloudflare 的自动化部署，方便很多。\u003c/p\u003e\n\u003cp\u003e这些要是放在以前，是不敢想的，各种配置要折腾，各种报错要搜索，各种问题要解决。现在好了，借助 AI，虽然不是分分钟，大概也只需要十几分钟。\u003c/p\u003e\n\u003cp\u003e看到博客之前还有几篇记录错误的笔记，现在也是几乎不需要了，直接丢给 AI 就行了。真的是时过境迁。短短几年，已经从远远的观望到现在离不开 AI 了。这其中又逃不过一个不免让人焦虑的话题，那就是慢慢的自己也在被 AI 取代。是吧？\u003c/p\u003e\n\u003cp\u003e在计算机方面，随着 AI 越来越强，慢慢的编码能力已经超过我们普通程序员了。我们又该何去何从呢？这是一个全新的事物，这也是一个全新的问题，目前我是还没有找到答案。但是也不用气馁，毕竟没有什么问题是解决不了的。\u003c/p\u003e\n\u003cp\u003e但是，从另一个角度看，有了 AI 对于我们来讲也是有了一个很重要的工具。就像学习上，过去可能学习起来费劲的东西，坚持不了几天就会放弃，最终几个月下来也没学到什么。但是现在不一样了，有了 AI 什么问题都能立马得到答案，学习的体验不一样了，不会有那么多折磨人的挫折了。虽然也还是会有不懂的地方。这样或许能够缩小我们和前面那一批人的差距呢？\u003c/p\u003e\n\u003cp\u003e既然是随笔，就写到这里吧，简单记录一下自己的所思所想。留给未来的自己看，说不定也能留给某个正在爬取数据的 AI 看。\u003c/p\u003e","title":"AI 时代的随笔一"},{"content":" 作为 android 开发，平时工作主要就是解决 bug，做些需求，都是一些没有挑战性的，比较重复性的工作。那么如何在工作中提高自己呢\n要在这种重复性工作中提升自己，可以从以下几个方面入手：\n深入学习 Android 的底层原理\n学习 Android 系统的架构、UI 渲染流程、内存管理等方面的内容。掌握这些知识不仅有助于你理解现有的开发框架，还能帮助你在遇到复杂问题时更容易找到解决方案。\n优化和重构代码\n定期对代码进行重构和优化，不仅是解决现有 bug 的方式，也是提高自己编码能力的好机会。比如，学习和实践更先进的架构模式（MVVM、Clean Architecture），以及在代码中使用更高效的数据结构和算法。\n掌握更多的第三方库和工具\n了解并掌握常用的第三方库（如 Retrofit、Glide、Room、Dagger）以及开发工具（如 Android Studio 的高级功能、调试工具等），让自己的工作效率和代码质量得到提升。\n参与开源项目或贡献代码\n可以通过参与开源项目，提升自己的技术水平并积累实际经验。开源项目中的技术栈、问题解决方案和编码风格，都能带给你新的启发。\n学习前端技术\n现代 Android 开发越来越依赖前端技术，学习一些与前端相关的技术（如 WebView、PWA 等）能拓宽你的技术视野，增加项目的多样性。\n制定学习计划并实践\n不断挑战自己，设定小的学习目标。例如，学习 Kotlin 的高级特性，掌握 Jetpack Compose，或者深入理解 Android 性能优化等方面的知识。实践是提高自己的重要途径。\n反思和总结\n在解决每个问题之后，花时间反思问题的解决过程，查漏补缺，写学习笔记。定期回顾自己的进展和存在的不足，制定新的学习目标。\n通过这些方法，你不仅能在现有工作中提升自己，也能逐步积累更多的技术深度，为未来的职业发展打下基础。\n","permalink":"https://dev.404503.xyz/2025/09/04/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%B7%A5%E4%BD%9C%E4%B8%AD%E6%8F%90%E9%AB%98%E8%87%AA%E5%B7%B1/","summary":"\u003cblockquote\u003e\n\u003cp\u003e作为 android 开发，平时工作主要就是解决 bug，做些需求，都是一些没有挑战性的，比较重复性的工作。那么如何在工作中提高自己呢\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e要在这种重复性工作中提升自己，可以从以下几个方面入手：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e深入学习 Android 的底层原理\u003c/strong\u003e\u003cbr\u003e\n学习 Android 系统的架构、UI 渲染流程、内存管理等方面的内容。掌握这些知识不仅有助于你理解现有的开发框架，还能帮助你在遇到复杂问题时更容易找到解决方案。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e优化和重构代码\u003c/strong\u003e\u003cbr\u003e\n定期对代码进行重构和优化，不仅是解决现有 bug 的方式，也是提高自己编码能力的好机会。比如，学习和实践更先进的架构模式（MVVM、Clean Architecture），以及在代码中使用更高效的数据结构和算法。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e掌握更多的第三方库和工具\u003c/strong\u003e\u003cbr\u003e\n了解并掌握常用的第三方库（如 Retrofit、Glide、Room、Dagger）以及开发工具（如 Android Studio 的高级功能、调试工具等），让自己的工作效率和代码质量得到提升。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e参与开源项目或贡献代码\u003c/strong\u003e\u003cbr\u003e\n可以通过参与开源项目，提升自己的技术水平并积累实际经验。开源项目中的技术栈、问题解决方案和编码风格，都能带给你新的启发。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e学习前端技术\u003c/strong\u003e\u003cbr\u003e\n现代 Android 开发越来越依赖前端技术，学习一些与前端相关的技术（如 WebView、PWA 等）能拓宽你的技术视野，增加项目的多样性。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e制定学习计划并实践\u003c/strong\u003e\u003cbr\u003e\n不断挑战自己，设定小的学习目标。例如，学习 Kotlin 的高级特性，掌握 Jetpack Compose，或者深入理解 Android 性能优化等方面的知识。实践是提高自己的重要途径。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e反思和总结\u003c/strong\u003e\u003cbr\u003e\n在解决每个问题之后，花时间反思问题的解决过程，查漏补缺，写学习笔记。定期回顾自己的进展和存在的不足，制定新的学习目标。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e通过这些方法，你不仅能在现有工作中提升自己，也能逐步积累更多的技术深度，为未来的职业发展打下基础。\u003c/p\u003e","title":"如何在工作中提高自己"},{"content":"个人管理\n1、时间管理\n2、饮食管理\n3、体重管理\n4、学习管理\n5、工作管理\n6、协商管理\n7、沟通管理\n","permalink":"https://dev.404503.xyz/2025/04/24/%E4%B8%AA%E4%BA%BA%E7%AE%A1%E7%90%86%E7%AC%94%E8%AE%B0/","summary":"\u003cp\u003e个人管理\u003c/p\u003e\n\u003cp\u003e1、时间管理\u003c/p\u003e\n\u003cp\u003e2、饮食管理\u003c/p\u003e\n\u003cp\u003e3、体重管理\u003c/p\u003e\n\u003cp\u003e4、学习管理\u003c/p\u003e\n\u003cp\u003e5、工作管理\u003c/p\u003e\n\u003cp\u003e6、协商管理\u003c/p\u003e\n\u003cp\u003e7、沟通管理\u003c/p\u003e","title":"个人管理笔记"},{"content":"今天的一些事情做下记录。 其实回头想想争吵也没有必要，谁也改变不了谁，只能接受。\n在面对的时候要冷静，不能情绪化，避免过多讨论，陷入争吵的境地。 冷静，不要情绪化，换位思考。\n来自今早和 ChatGPT 的对话。最后总结下来就是四条。 **多沟通**：用平和的方式交流，避免情绪化。 **理解差异**：站在对方的角度考虑问题，学会接受不同的价值观。 **制定边界**：明确个人空间和责任划分，减少相互干扰。 **保持独立性**：如果条件允许，适当分开居住会让关系更和谐。 ","permalink":"https://dev.404503.xyz/2024/12/16/%E5%A6%82%E4%BD%95%E5%92%8C%E7%88%B6%E6%AF%8D%E7%9B%B8%E5%A4%84/","summary":"\u003cp\u003e今天的一些事情做下记录。\n其实回头想想争吵也没有必要，谁也改变不了谁，只能接受。\u003c/p\u003e\n\u003cp\u003e在面对的时候要冷静，不能情绪化，避免过多讨论，陷入争吵的境地。\n冷静，不要情绪化，换位思考。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e来自今早和 ChatGPT 的对话。最后总结下来就是四条。\n**多沟通**：用平和的方式交流，避免情绪化。\n**理解差异**：站在对方的角度考虑问题，学会接受不同的价值观。\n**制定边界**：明确个人空间和责任划分，减少相互干扰。\n**保持独立性**：如果条件允许，适当分开居住会让关系更和谐。\n\u003c/code\u003e\u003c/pre\u003e","title":"如何和父母相处"},{"content":"2024年11月6号记录下。\n系统硬盘使用量，11月2号安装。\n文件硬盘使用量，电脑自带的。\n11.19 再次纪录，替换了系统硬盘为老笔记本上面 500G 的固态。\n","permalink":"https://dev.404503.xyz/2024/11/06/ssd-%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95-20241106/","summary":"\u003cp\u003e2024年11月6号记录下。\u003c/p\u003e\n\u003cp\u003e系统硬盘使用量，11月2号安装。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Snipaste_2024-11-06_09-06-19\" loading=\"lazy\" src=\"https://image.404503.xyz/api/images/a925ab04-f61e-431a-be17-99c1099a9274?variant=original\"\u003e\u003c/p\u003e\n\u003cp\u003e文件硬盘使用量，电脑自带的。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"Snipaste_2024-11-06_09-06-48\" loading=\"lazy\" src=\"https://image.404503.xyz/api/images/d5442d77-3ef1-472e-82cb-57e492b6d21c?variant=original\"\u003e\u003c/p\u003e\n\u003cp\u003e11.19 再次纪录，替换了系统硬盘为老笔记本上面 500G 的固态。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://image.404503.xyz/api/images/8635df62-f716-4a16-830f-6b50a161b586?variant=original\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://image.404503.xyz/api/images/42a0f3ab-c6ed-4c7f-9d25-978458d3c5e8?variant=original\"\u003e\u003c/p\u003e","title":"ssd 使用记录 20241106"},{"content":"昨天（20240828）在台式机上面，将双系统里面的 window 磁盘格式化了，想着只用 ubuntu 就好，没想到再次启动就一直报错，错误信息类似：\nFailed to start default target: Transaction for.graphical.target/start is destructive (emergency.target has ‘start’ job queued, but ‘stop’ is included in transaction) 折腾一小时也没有解决，无奈重新安装了 ubuntu 系统。\n今早想了想还是觉得奇怪，所以搜索了下，发下了这个帖子，感觉问题的解决办法应该就是下面的回帖，但是已经重装了系统，也就不纠结了。只是记录下。\nhttps://askubuntu.com/questions/1439112/failed-to-start-default-target-transaction-for-graphical-target-start-is-destru\nThis is probably too late for you, but I just helped a friend with this same issue. The solution was simple. It has to do with a disk not being able to be mounted.\nIn your case in particular and looking at your included image, I can not see the very first lines that it printed out, which would be helpful\u0026ndash;it tells which disk is not able to be mounted.\nIn my friend\u0026rsquo;s case, in the /etc/fstab file, there was an extra entry for an external USB hard drive. For some reason, the system wasn\u0026rsquo;t able to find it at boot, and it caused this same draconian message that you\u0026rsquo;re getting.\nThe solution was simply to edit the file using sudo nano /etc/fstab and put a # at the start of the relevant line to prevent the line from being active. Reboot and computer should start up normally.\nThis whole thing happened when updating Kubuntu 20.04 to 22.04.\nUpdate\nhttps://www.reddit.com/r/homelab/comments/x15lua/ubuntu_server_you_are_in_emergency_mode_how_to/\n都能找到相似问题，目前看是磁盘挂载导致的了。当时一直使用 ai 工具进行搜索的，虽然都给出了一些答案，但都是比较复杂的操作，似乎能够让人信服。但是看看这些帖子，似乎问题并没有那么复杂。还是需要 ai 和搜索引擎搭配使用才行。\n","permalink":"https://dev.404503.xyz/2024/08/29/Ubuntu-%E5%88%A0%E9%99%A4%E7%A3%81%E7%9B%98%E5%90%8E%E5%90%AF%E5%8A%A8%E9%94%99%E8%AF%AF%E9%97%AE%E9%A2%98%E8%AE%B0%E5%BD%95/","summary":"\u003cp\u003e昨天（20240828）在台式机上面，将双系统里面的 window 磁盘格式化了，想着只用 ubuntu 就好，没想到再次启动就一直报错，错误信息类似：\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eFailed to start default target: Transaction for.graphical.target/start is destructive (emergency.target has ‘start’ job queued, but ‘stop’ is included in transaction)\u003c/code\u003e 折腾一小时也没有解决，无奈重新安装了 ubuntu 系统。\u003c/p\u003e\n\u003cp\u003e今早想了想还是觉得奇怪，所以搜索了下，发下了这个帖子，感觉问题的解决办法应该就是下面的回帖，但是已经重装了系统，也就不纠结了。只是记录下。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://askubuntu.com/questions/1439112/failed-to-start-default-target-transaction-for-graphical-target-start-is-destru\"\u003ehttps://askubuntu.com/questions/1439112/failed-to-start-default-target-transaction-for-graphical-target-start-is-destru\u003c/a\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis is probably too late for you, but I just helped a friend with this same issue. The solution was simple. It has to do with a disk not being able to be mounted.\u003c/p\u003e\n\u003cp\u003eIn your case in particular and looking at your included image, I can not see the very first lines that it printed out, which would be helpful\u0026ndash;it tells which disk is not able to be mounted.\u003c/p\u003e","title":"Ubuntu 删除磁盘后启动错误问题记录"},{"content":"这几天重新开始配置了 hexo 博客，今天换到笔记本上推送的时候报了如题上面的错误。但是服务器密钥是从 git 仓库拷贝过来的，其他配置也都正确。那是怎么回事呢。\nnothing to commit, working tree clean Load key \u0026#34;C:\\\\Users\\demo\\.ssh\\git\u0026#34;: error in libcrypto git@1.2.3.4: Permission denied (publickey). fatal: Could not read from remote repository. 如果能确保密钥文件内容不变的话，查看下是不是文件的换行符格式被改了，我这边通过 git 同步下来的推送密钥就被改成了 CR LF，我们手动修改成 Unix 的就可以了。\n","permalink":"https://dev.404503.xyz/2024/06/02/Error-in-libcrypto-%E9%97%AE%E9%A2%98%E7%BA%AA%E5%BD%95/","summary":"\u003cp\u003e这几天重新开始配置了 hexo 博客，今天换到笔记本上推送的时候报了如题上面的错误。但是服务器密钥是从 git 仓库拷贝过来的，其他配置也都正确。那是怎么回事呢。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003enothing to commit, working tree clean\nLoad key \u0026#34;C:\\\\Users\\demo\\.ssh\\git\u0026#34;: error in libcrypto\ngit@1.2.3.4: Permission denied (publickey).\nfatal: Could not read from remote repository.\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e如果能确保密钥文件内容不变的话，查看下是不是文件的换行符格式被改了，我这边通过 git 同步下来的推送密钥就被改成了 CR LF，我们手动修改成 Unix 的就可以了。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image-20240602231730216\" loading=\"lazy\" src=\"https://pic1.404503.xyz/uploads/2024/06/02/efG9FzRH3zBO.png\"\u003e\u003c/p\u003e","title":"Error in libcrypto 问题纪录"},{"content":"今天继续骑车，骑了大概 18km，感觉不错，运动运动的感觉总是舒服的。\n","permalink":"https://dev.404503.xyz/2024/06/02/%E9%AA%91%E8%A1%8C%E8%AE%B0%E5%BD%95-0602/","summary":"\u003cp\u003e今天继续骑车，骑了大概 18km，感觉不错，运动运动的感觉总是舒服的。\u003c/p\u003e","title":"骑行记录-0602"},{"content":"Timber 使用记录 项目地址：https://github.com/JakeWharton/timber\n首先初始化\nTimber.plant((Timber.Tree) (Object) new CustomDebugTree());\n这里使用了自定义的Tree，其中修改了默认的 tag。\npublic class CustomDebugTree extends Timber.DebugTree { @Nullable @Override protected String createStackElementTag(@NonNull StackTraceElement element) { return \u0026#34;test_\u0026#34; + super.createStackElementTag(element); } } 接着就可以调用具体的方法来打印日志了。\n","permalink":"https://dev.404503.xyz/2024/05/27/Android-Timber-%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95/","summary":"\u003ch3 id=\"timber-使用记录\"\u003eTimber 使用记录\u003c/h3\u003e\n\u003cp\u003e项目地址：https://github.com/JakeWharton/timber\u003c/p\u003e\n\u003cp\u003e首先初始化\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eTimber.plant((Timber.Tree) (Object) new CustomDebugTree());\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e这里使用了自定义的\u003ccode\u003eTree\u003c/code\u003e，其中修改了默认的 tag。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-java\" data-lang=\"java\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eclass\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eCustomDebugTree\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eextends\u003c/span\u003e Timber.\u003cspan style=\"color:#a6e22e\"\u003eDebugTree\u003c/span\u003e {  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003e@Nullable\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003e@Override\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eprotected\u003c/span\u003e String \u003cspan style=\"color:#a6e22e\"\u003ecreateStackElementTag\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003e@NonNull\u003c/span\u003e StackTraceElement element) {  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;test_\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003esuper\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ecreateStackElementTag\u003c/span\u003e(element);  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e接着就可以调用具体的方法来打印日志了。\u003c/p\u003e","title":"Android Timber 使用记录"}]