关于 Docker 容器配置信息的渐进式思考
关于 Docker 容器配置信息的渐进式思考 作为一名软件工程师,作者经常使用各种配置文件如 YAML、Markdown、Dockerfile 等进行工作。作者认为程序员追求配置的动态灵活性是天经地义的事,却发现在 DevOps 理念流行后,程序员们常常要像运维一样处理各种配置文件,这使得编程工作变得繁琐。在探讨容器、配置文件和环境变量时,作者通过回顾不同阶段的实践,分享了对配置管理的思考。起初,作者通过Dockerfile将配置文件复制到容器中,但很快意识到不同环境需要不同的配置。随后尝试使用环境变量来实现动态配置,并使用工具`envsubst`来注入环境变量到配置文件中。然而这种方法需要重新构建镜像,作者随后采用将配置更新脚本放入`CMD` 或 `ENTRYPOINT` 指令中,以便通过重启容器来更新配置。尽管运维同事更倾向于使用 `sed` 命令,但这种方法增加了维护成本。作者提到了配置文件挂载到主机的方法,这使得修改主机上的配置文件可以即时更新容器内的配置。Docker Swarm 提供了一种管理配置文件的机制,而 Kubernetes 则使用 ConfigMap 来管理容器内的配置。作者认为容器内的配置管理应让配置与容器分离,即使动态生效而不是固化在容器中。文章最后,作者提出配置管理的关键在于找到变化与不变之间的平衡,反映出技术选择往往不是选择题而是填空题。作者幽默地以古代钱币的外圆内方比喻自己的技术态度,认为一心只想搞技术的想法真实且不做作,并欢迎大家在评论区交流想法。
在 Docker 容器内集成 Crontab 定时任务
在 Docker 容器内集成 Crontab 定时任务 本文介绍了在Linux中使用Crontab执行定时任务的基础知识,包括Crontab文件的格式和示例,以及如何通过编写脚本和设置Crontab定时任务来解决Kerberos票据过期的问题。作者还分享了在Docker容器内集成Crontab定时任务的方法,包括如何编辑Crontab文件、查看定时任务日志、处理环境变量等技巧。最后,提供了相关链接供进一步学习参考。
为你的服务器集成 LDAP 认证
为你的服务器集成 LDAP 认证 这篇文章介绍了作者在企业级应用项目中接触到的面向企业和用户的项目区别,重点讨论了为什么需要 LDAP 认证以及如何在 Nginx 和 Apache 服务器上集成LDAP认证。在具体操作中,展示了如何在 Nginx 中安装nginx-auth-ldap 模块以及在 Apach e中使用 mod-authnz-ldap 模块实现 LDAP 认证,并简要介绍了在后端实现 Basic 认证的流程。文章最后总结了 Nginx 和 Apache 在 LDAP 认证方面的不同之处,并对企业级应用的认证方案提出了讨论。
似花还似非花
似花还似非花 在周末独自游览大唐芙蓉园时,作者感受到时光变迁和疫情带来的冷静氛围。讨论了在繁华场所拍照的人际关系和纳什均衡理论,以及玩游戏《Stray》后的感悟,认为游戏以猫的视角讲述人类故事。描述了游戏结尾的牺牲和隐喻,引发对家乡和疫情的思考。最后谈及审美同质化、脸盲症的影响,以及马斯克的形象转变,探讨了现代社会的排异心理和人性的复杂性。
视频是不能 P 的系列:使用 Dlib 实现人脸识别
视频是不能 P 的系列:使用 Dlib 实现人脸识别 本文介绍了使用 Dlib 库实现人脸识别的方法。通过 Dlib 的 compute_face_descriptor() 方法,将人脸转化为 128 维向量,再利用支持向量机(SVM)进行模型训练,以识别不同人物。文章详细记录了从人脸检测到特征值计算,再到模型训练和识别的整个流程,并通过实验显示,该方法的识别率达到了 94.58%,是一种相对可靠的人脸识别方案。此外,还探讨了使用 SVM 优化识别效率的可能性以及 OpenCV 的 LBPH 方法的局限性。
浅议分布式链路追踪与日志的整合
浅议分布式链路追踪与日志的整合 最近阅读了一篇关于分布式链路追踪和日志系统整合的文章,主要介绍了在.NET中利用Activity、ActivitySource和ActivityListener等API实现分布式追踪的方法。这些API可以被视为微软对OpenTelemetry规范的实现,其中每个Activity对应一个Span。文章还介绍了如何利用自定义TraceId和NLog.DiagnosticSource等工具实现将TraceId渲染到日志中,以实现更好的日志查询和分析。最后,作者分享了如何利用OpenTelemetry SDK自动采集HttpClient和ASP.NET Core的诊断信息,并探讨了分布式追踪与日志整合的实践方法。文章以深入浅出的方式介绍了相关概念和技术,提供了有关链路追踪和日志系统整合的有益见解。
关于 Git 大文件上传这件小事
关于 Git 大文件上传这件小事 在这篇文章中,作者分享了在使用Git时遇到的大文件上传问题以及如何应对。作者提到了Git LFS扩展的使用方法,包括安装、追踪文件和提交大文件的步骤。此外,文章还介绍了在提交大文件后如何处理历史记录中的大文件以及通过git filter-branch命令重写提交历史的方法。最后,作者总结了文章的主要内容,强调了对Git LFS和大文件处理的重要性,以及在解决问题过程中可能遇到的挑战。
.NET 进程内队列 Channel 的入门与应用
.NET 进程内队列 Channel 的入门与应用 近期,博主为FakeRPC项目增加了WebSocket协议支持,利用全双工通信特性在一个连接中发送多条数据。考虑WebSocket协议是为了验证JSON-RPC的可行性,并为后续支持TCP/IP协议铺路。在实现FakeRPC过程中使用了.NET中的Channel数据结构来实现消息转发。Channel是.NET Core 3.0后推出的集合类型,主要应用于生产者-消费者模型。通过示例展示了Channel的应用,以及在FakeRPC中如何利用WebSocket协议实现双向通信。介绍了Channel的特性和在数据流处理中的应用,展示了其在性能方面的优势。通过实例展示了利用Channel实现数据流模式的过程。总结指出,过去的经历会影响认知,但持续学习新技术是必要的。
使用 Fody 实现 .NET 的静态编织
使用 Fody 实现 .NET 的静态编织 本文介绍了在项目中使用 `OnMethodBoundaryAspect` 基类记录方法日志的经历,以及澄清了之前对项目使用的是 PostSharp 的误解。讨论了面向切面编程(AOP)中的静态编织和动态代理,以及在.NET中使用Fody进行静态编织的实践。展示了使用Fody插件实现静态织入功能的过程,包括编写插件、修改IL代码等细节。通过自定义插件HelloWorld.Fody展示了静态编织的原理和效果。最后总结了静态编织的重要性以及通过IL代码操作插件的实现方式。整体内容涵盖了AOP、Fody插件、IL代码修改等方面的知识。
.NET Core + ELK 搭建可视化日志分析平台(下)
.NET Core + ELK 搭建可视化日志分析平台(下) 本文介绍了从 Logstash 到 Filebeat 到 Fluentd 的日志收集工具演进过程,重点讨论了各工具的特点、优缺点以及配置方法。详细说明了 Filebeat 的轻量级特性及配置方式,以及 Fluentd 和 Fluent-Bit 之间的对比和使用方法。同时介绍了 Tail 模式和 Forward 模式下的日志收集策略,以及配置文件示例和实际操作步骤。文章通过讲述作者的个人思考和体验,总结了日志收集工具的选择和使用建议。
聊一聊前端图片懒加载背后的故事
聊一聊前端图片懒加载背后的故事 博主通过采取一系列优化措施,成功将博客的首屏渲染时间从2.0 秒缩短到了 1.7秒。这些措施包括使用 CDN 加速、压缩图片、生成缩略图和采用懒加载技术。文章主要介绍了前端图片懒加载技术,解释了其概念、目的和实现方式。懒加载是一种通过延迟加载来优化网页性能的方法,尤其适用于图片较多的网页。文中介绍了三种实现懒加载的策略:监听滚动事件、使用 IntersectionObserver API 和利用浏览器原生的 `loading='lazy'` 属性。通过比较这三种方法的优缺点,作者推荐结合使用前两种方法以更精确地控制懒加载的细节。文章最后强调了懒加载在前端性能优化中的重要性,并提供了示例代码供读者参考。
杂感·七月寄望
杂感·七月寄望 本文通过多个主题探讨了生活中的矛盾和情感。首先以桃花潭无桃花比喻人们对事物不切实际的期待,并通过汪伦与李白的故事强调真诚的价值。接着,作者表达了对刺杀事件的震惊,并通过《金色梦乡》一书探讨了牺牲少数人的问题,以及在危机时刻的个人自救。文章还讨论了人类情感的建立,以及作者对亲密关系的思考,通过播客和网络互动反思创作自由和性别角色。最后,文章指出人们在不同角色和年龄阶段面临的双重标准,以及对平衡的追求,强调世界的质感和动态平衡的重要性。
支持外部链接跳转的 Vue Router 扩展实现
支持外部链接跳转的 Vue Router 扩展实现 Vue Router 是 Vue 中重要的插件,特别在单页面应用中起着关键作用。随着页面概念逐渐消失,路由根据URL确定显示内容。文章介绍了处理内部和外部链接的问题,提出了在 Vue Router 基础上实现外部链接跳转的扩展思路。通过自定义组件 MyRouterLink,区分内部和外部链接并支持传递URL参数,解决了 Vue Router 不支持外部链接的问题。讨论了如何给出站链接携带令牌信息,通过指令或组件内部处理统一附加参数。最终强调了在项目中统一使用规范化组件的重要性。
视频是不能 P 的系列:OpenCV 和 Dlib 实现表情包
视频是不能 P 的系列:OpenCV 和 Dlib 实现表情包 2020 年底,博主开启了一个关于视频不能 P 的系列,探讨了视频/图像处理思路,涉及 OpenCV、Dlib 和表情包等。Dlib 通过 68 个特征点定位人脸五官,实现人脸检测和识别,提供更多探索可能。文章介绍了使用 Dlib的人脸特征点绘制和抠取,生成表情包的过程,包括创建掩膜、裁切图片、阈值处理等。最终,将人脸与熊猫人合成为表情包。文章总结了 Dlib 的应用,探讨了处理图像的有趣过程,展示了程序员的浪漫之处。
不得不说的 ASP.NET Core 集成测试
不得不说的 ASP.NET Core 集成测试 这篇文章讨论了ASP.NET Core集成测试的重要性,从单元测试和Mock的角度出发,探讨了在现实软件世界中“万物皆可模拟”的理想与挑战。介绍了使用Moq进行模拟测试的方法,并引出了集成测试的必要性和TestServer的作用。详细讨论了如何使用TestServer进行API、中间件、HttpContext和gRPC的测试,并介绍了通过WebApplicationFactory实现更优雅集成测试的方法,结合xUnit的IClassFixture解决测试类中共享数据的初始化和销毁问题。最后分享了作者对写作计划和技术实践的心得体会。