Anduin Xue
Anduin Xue

Anduin's Tech Blog

Software Development Software Development


Set up a local docker registry mirror

本文介绍了通过自托管Docker registry镜像Docker镜像到本地服务器的完整方案包含三个Python脚本check.py验证镜像是否为最新版delete.py删除损坏镜像mirror.sh自动化镜像流程以及配套的Docker容器化部署方案首先通过docker run启动registry服务编写三个Python脚本实现镜像状态检测和清理编写包含所有目标镜像的mirror.sh脚本使用regctl工具执行镜像拉取和推送操作通过Dockerfile构建包含必要依赖的容器镜像配置定时任务实现每日自动执行镜像任务同时提供本地registry的使用方法包括配置daemon.json信任不安全仓库和镜像推送拉取操作最终形成完整的Docker镜像本地化镜像解决方案--Qwen3

Automation Python Docker Registry Mirroring Scripting

AnduinOS 究竟是怎么诞生的……

AnduinOS的诞生源于一位微软工程师对Linux系统个性化配置的执着追求。这个被戏称为"Windows主题Ubuntu"的系统,本质上是开发者在重装系统时反复调试个性化设置的产物,通过简单的ISO文件修改和自动化脚本封装,实现了对Ubuntu生态的轻量化定制。项目意外登上Distrowatch榜单后,开发者坦承这个茶余饭后消遣项目远比主业.NET开发更受关注,这种反差恰印证了技术社区对"极简主义"系统的某种隐秘渴望——当人们不再追求功能叠加而回归系统本质时,最朴素的方案反而可能掀起波澜。 这个仅用下午时间打造的系统引发热议的核心矛盾在于:当开发者坚持"不做多余工作"的哲学时,社区却在争论其商业潜力与技术价值。有人批评它缺乏应用商店,有人质疑其安全属性,但开发者始终强调这纯粹是满足个人需求的产物。这种"非功利主义"的开发态度,在当今商业软件主导的科技生态中显得尤为特殊——当一位全职工程师选择用业余时间维护开源项目时,究竟是技术理想主义的胜利,还是对商业逻辑的某种反叛?更耐人寻味的是,开发者对Nix系统持续的兴趣,暗示着包管理领域的技术革命或许正在酝酿,而AnduinOS的未来或许会成为这场变革的见证者。 项目面临的最大挑战并非技术层面,而是维系社区信任。当开发者坦承自己可能随时失业、系统可能突然停更时,这种"脆弱性"反而成为项目独特魅力的注脚:在商业利益与个人爱好之间,在开源精神与生存压力之中,一个由个人需求驱动的系统如何证明其存在的价值?或许正如开发者所言,保持本心才是最艰难的课题——当世界充满喧嚣时,最安静的系统反而最能触动人心。--Qwen3

AnduinOS Introduction Story Release operating-system Operating System Development

应用商店、包管理……每天都会使用的东西有什么开发难度?

包管理是软件工程中的核心问题传统包管理器如apt通过集中存储解决依赖但存在冲突和环境不一致问题Nix采用函数式模型以不可变包和确定性构建为核心通过哈希路径实现包隔离和共享并支持二进制缓存和原子操作NuGet结合Monolithic与动态链接策略在项目内打包依赖同时全局存储多版本包以缓解冲突Monolithic方法通过打包所有依赖确保一致性但牺牲空间效率Docker等分治策略将服务单体化配合简单依赖管理成为主流然而包管理领域仍缺乏万能方案Nix虽技术先进但因反直觉应用有限业界普遍依赖Monolithic与虚拟化结合的折中方案包管理的复杂性远超表面呈现的商店化体验现代软件工程通过抽象简化了用户操作但开发者仍需直面依赖问题的本质挑战--Qwen3

Store nuget apt package manager Application Nix

在 2024 年学习汇编还有必要吗

文章探讨了操作系统与应用程序的相互关系及其底层抽象机制。通过定义和实现ABI(应用二进制接口)作为软件与硬件交互的标准,操作系统和应用程序可以同时诞生并依此共生。ABI明确了程序入口、资源管理、调用约定等规范,成为二者交互的桥梁,例如鸿蒙兼容Linux ABI使跨系统运行成为可能。学习汇编与操作系统课程有助于理解计算机底层机制,包括内存管理、进程调度、死锁处理等核心概念,这些知识对编译器开发、嵌入式系统设计及网络安全至关重要。文章指出,应用程序并不必然依赖操作系统存在,早期计算机和实时系统可直接在硬件上运行代码,而现代裸机编程和自制操作系统实验也证明了应用软件与操作系统的独立性。通过插件系统设计的案例,展示了抽象接口(如ImageFilter)如何实现系统扩展性,而操作系统本质是ABI的执行者与管理者。最终结论强调,理解ABI和底层原理是突破高级语言抽象的必要途径,计算机科学教育应重视基础理论而非仅关注应用层面。--Qwen3

Abstraction Assembly Language Memory Management Function Pointers Deadlock Detection Embedded Systems

基于 Docker Swarm Mode 建设你家里的数据中心!

文章介绍了使用Docker Swarm部署集群并结合Swarmpit管理工具的实践流程。核心步骤包括通过GlusterFS构建分布式存储、利用docker-compose.yml文件定义业务栈、通过Swarmpit可视化界面管理服务节点和资源分配。关键概念体系由Stack(服务集合)、Service(容器化服务定义)、Task(实际容器实例)、Node(物理/虚拟节点)构成。业务部署需编写版本3.3规范的编排文件,通过docker stack deploy命令实现集群化部署。存储方案采用GlusterFS实现跨节点数据同步,需在各节点配置存储卷并设置访问权限。运维方面包含节点状态管理(上线/下线维护)、容器调试入口获取、日志追踪等操作。通过暴露80/443端口结合Caddy等反向代理可实现HTTPS服务,而共享存储的自动化挂载则通过systemd服务确保节点重启后自动恢复可用状态。--Qwen3

bash Linux Server Docker Container Docker Swarm Cluster Swarmpit

在2023年学习传统软件开发技巧还有意义吗?

在2023年传统软件开发技巧是否仍有价值成为争议焦点。文章指出AI驱动的软件工程正在重构行业底层逻辑,代码生成工具通过自然语言交互替代了传统编程流程,甚至能重构代码、修复bug并优化性能,这种基于深度学习的智能化开发模式已对JetBrains等传统代码分析工具形成降维打击。但作者强调传统软件工程的价值不会消失——正如20年前面向对象编程普及后汇编语言仍是计算机教育的基石,掌握C++、Java等传统语言能帮助开发者建立更深刻的技术认知体系。未来工程师的竞争力将呈现两极分化:掌握AI技术并具备传统工程思维的复合型人才将占据高端岗位,而仅会简单操作AI工具的开发者将陷入低附加值劳动的困境。文章提出关键命题:当AI接管基础编码工作后,工程师的核心价值究竟体现在哪里?如何在传统技术根基与AI前沿领域之间找到最佳平衡点?当代码生成器能完成90%的开发任务时,人类工程师的不可替代性究竟存在于技术架构设计还是系统级问题解决?这些未解之谜或许正是推动行业持续演进的原动力。--Qwen3

AI in Software Development Traditional Software Engineering Future of Programming Learning Strategy for AI Software Engineer Requirements Career Development in Tech

UWP 一个技术上成功但商业上失败的框架之死;一个现代的操作系统究竟应该提供什么?

UWP作为微软提出的现代化应用框架在技术层面实现了沙盒环境、跨设备兼容性、硬件加速渲染等突破性创新,其模块化设计解决了传统Win32应用的资源争抢、权限混乱等问题,但最终因生态建设失败走向衰亡。尽管UWP在性能优化、系统集成度、开箱即用体验等方面展现出革命性优势,却遭遇了开发者生态断裂、微软战略摇摆、应用质量参差等致命打击。微软自研应用的频繁崩溃与功能缺失导致用户对UWP形成质量刻板印象,而互联网企业因框架封闭性放弃开发适配,加之微软内部出现Win32与UWP并行的混乱局面,最终导致开发者集体撤离。随着MAUI等新一代框架回归Win32开发模式,UWP的现代化理念在Windows生态中逐渐消逝,留给用户的不仅是碎片化的应用选择困境,更是对系统未来演进方向的深刻质疑。--Qwen3

C# Microsoft Windows Microsoft Store UWP Windows Development

Why do low-code development is a pseudo requirement?

低代码开发平台被广泛宣传为降低技术门槛的解决方案,但其本质是否真的解决了开发难题仍值得深思。文章通过对比网页设计工具与低代码平台的相似性指出,所见即所得(WYSIWYG)的开发模式在复杂场景中反而会暴露局限性——当需求涉及动态表单、复杂交互或可扩展性时,低代码平台生成的代码往往充斥着冗余标记,缺乏结构复用能力。作者进一步质疑:若企业具备组织低代码开发团队的能力,为何不直接招聘原生开发人员?这种看似降低学习成本的方案,实际上隐含了对平台规则的深度掌握需求,甚至可能形成新的技术债务。代码作为人类对现实世界的抽象,其价值在于通过形式化语言实现精准控制,而低代码平台试图以图形化操作替代代码逻辑,本质上是用非标准化的抽象方式处理复杂问题。尽管低代码在特定场景(如快速构建简易工具)中具备价值,但其适用范围受限于需求复杂度、基础设施完备性及开发者基础素养。文章结尾抛出值得反思的问题:当低代码平台宣称“无需编程即可开发”时,是否忽略了软件工程的核心价值?在AI逐步介入开发流程的今天,我们究竟是在解放生产力,还是将复杂问题强行简化为可被机器理解的表象?--Qwen3

Software Development Low Code PowerApps WYSIWYG Low code Development Software Abstraction

找到玄学问题的根源的方法 - 夹逼调试法

夹逼调试法是一种通过双向环境对比快速定位玄学问题根源的系统方法。当程序在理想环境能正常运行而在特定环境异常时该方法通过构建理想环境与故障环境的对比集合逐步逼近问题核心先在故障环境向理想环境靠拢过程中观察差异因素的影响再反向从理想环境向故障环境逼近验证假设从而缩小问题范围。该方法特别适用于环境依赖性强的异常场景例如网络配置操作系统版本软件冲突等复杂因素交织的情况。通过Spotify无法运行的案例展示了如何通过对比操作系统版本网络环境软件来源等差异最终发现Windows N版与专业版的兼容性问题在飞机启动故障案例中则通过开关状态的双向验证锁定关键控制因素。这种方法的优势在于将模糊的环境差异转化为可验证的变量组合但需注意其结果仅指向可能原因而非绝对因果。当面对类似"为什么我的代码在本地运行正常却在服务器报错""为什么同样的配置在不同设备表现不一致"等问题时能否通过构建理想环境和差异分析找到突破口?或许这个方法能成为你调试玄学问题的利器。--Qwen3

Software Development Debugging Problem Solving Computer Science Environment Analysis System Issues

Tips about rules setup for Outlook enterprise users

在信息洪流中如何构建高效的邮件过滤体系?当每天面对成百上千封邮件时如何让重要信息浮出水面?企业用户在Outlook中设置规则的艺术在于建立分层处理策略——从垃圾信息的精准拦截到核心项目的主动捕捉从个人事务的智能识别到团队协作的分类管理。通过构建优先级明确的规则链:首先将GitHub通知Teams消息等固定来源的噪音批量归类继而用关键词触发关键项目警报再通过收件人识别锁定个人沟通最后按团队邮箱分流讨论内容最终形成"重要-次要-其他"的三维信息矩阵。这种规则架构不仅需要识别邮件的本质属性更考验对工作场景的深层理解:当你的规则体系开始自动运行时是否真正实现了信息的精准触达?在自动化分类背后隐藏的其实是对工作优先级的哲学思考——究竟哪些信息值得你立即响应哪些可以延迟处理哪些应该永久归档?邮件规则设置不仅是技术操作更是工作认知的具象化过程你的Outlook规则是否反映了你对工作的独特理解?--Qwen3

Outlook Rules Setup Email Organization Tips Mail Automation Efficient Workflow Inbox Management Guide Important Emails Alert

软件工程领域中的逆全球化趋势

过去的二十年间软件工程领域的全球化趋势曾被视作技术发展的必然方向跨国企业通过统一的云基础设施和分布式系统实现全球服务覆盖CAP定理指导下的分区容忍性设计让跨地域数据同步成为可能微软的CosmosDb和国内的TiDB等技术验证了这种模式的可行性但2020年后的地缘政治变化正在改写这一逻辑国家间的数据流动面临前所未有的信任危机客户开始要求服务必须在物理隔离的空气墙环境中依然完整运行这种需求催生了软件工程的逆全球化转型当分布式系统的分区不再由网络延迟定义而是由政治和技术壁垒切割时传统的SaaS模式面临根本性挑战私有云的本地化部署和数据主权的重新定义成为刚需更极端的场景要求将整个组织结构作为服务交付对象而非仅仅是代码这种变革不仅颠覆了技术架构更重构了商业逻辑当数据跨境流动需要如同人员出入境般办理数字签证时当软件销售从交付产品转向交付人才与组织时我们是否正在见证一种新的数字时代地缘政治如何在CAP定理的框架下重新定义软件工程的边界?当全球化与逆全球化的力量在代码层面持续角力时未来的技术架构将如何在信任与安全的天平上找到新的平衡点?--Qwen3

Multi-tenant China Software Development AirGap Globalization CAP Theorem

Use JetBrains code quality analyzer to prevent checking-in bad C# code

本文介绍了如何通过JetBrains ReSharper代码质量分析工具在Azure DevOps和GitHub Actions中自动拦截不符合规范的C#代码提交。文章展示了在持续集成流水线中集成ReSharper的YAML配置方案,包括安装代码质量分析插件、定义检查任务优先级以及通过.editorconfig文件自定义规则集的完整实践路径。特别指出在Azure DevOps中将代码检查任务置于构建之后测试之前可避免无效代码测试浪费资源,并揭示了无需购买ReSharper授权即可通过dotnet工具链实现本地代码质量检测的免费方案。文章引发思考:当自动化代码检查与团队开发习惯产生冲突时,如何平衡代码质量标准与实际开发灵活性?如何通过规则调整既避免过度约束又确保核心代码规范?读者或许会好奇:在云原生开发盛行的当下,如何将静态代码分析与动态测试策略结合形成更全面的质量保障体系?--Qwen3

C# Azure DevOps JetBrains Resharper Code Quality Pipelines