温故而知新,再话 Python 动态导入
温故而知新,再话 Python 动态导入 本文回顾了 Python 中的动态导入机制,并通过作者开发基于 ChatGPT 的人工智能管家 Jarvis 的实践,探讨了如何利用动态导入实现插件化和按需加载模块。作者介绍了使用 importlib 模块和 __import__ 函数来动态导入模块的方法,并通过示例代码展示了如何根据不同条件导入不同的模块,以及如何通过动态导入解决环境差异带来的问题。文章还提到了作者对使用 virtualenv 管理 Python 版本和开发环境的体验。
后 GPT 时代,NLP 不存在了?
后 GPT 时代,NLP 不存在了? 在讨论中,提到了以 ChatGPT 为代表的大型语言模型对自然语言处理(NLP)领域的冲击,以及以 Rasa 为代表的传统NLP解决方案。对于“NLP已死”和“NLP不存在了”的观点,作者认为这代表了通用智能和专业智能两种人工智能方向。作者分享了在开发人工智能管家“贾维斯”过程中遇到的意图识别问题,并通过两种方法进行解决。最终强调了在机遇与挑战并存的时代中,选择合适的技术和平衡通用和专业智能的重要性。
视频是不能 P 的系列:使用 Milvus 实现海量人脸快速检索
视频是不能 P 的系列:使用 Milvus 实现海量人脸快速检索 本文探讨了如何利用 Milvus 向量数据库实现海量人脸数据的快速检索。作者首先回顾了人脸识别项目中遇到的挑战,包括性能下降和快速判断人脸是否在样本库中的问题。随后,文章介绍了向量化的概念以及 Milvus 的核心功能——相似度检索。通过详细的步骤和代码示例,展示了如何安装 Milvus、创建集合、插入数据、创建索引以及执行相似度搜索。此外,文章还讨论了 Milvus 在人脸识别上的应用,包括提取人脸特征、写入向量数据库以及查询最相似的人脸。最后,作者对使用向量数据库进行人脸识别的尝试和探索进行了总结,指出尽管向量数据库可能无法完全避免循环结构的宿命,但在样本数目不大的情况下,其优势并不显著,但仍然是值得尝试的方案。
GDI+下字体大小自适应方案初探
GDI+下字体大小自适应方案初探 在讨论中提到,人类在面对未知领域时会自然地分为不同派别,如降临派、拯救派和幸存派,同时探讨了人类对于机器取代工作的担忧以及人工智能与数学之间的关系。在具体技术上,介绍了通过GDI+绘制圆形和椭圆形印章的方法,以及基于宽高和周长动态调整字体大小实现字体自适应方案。文章通过数学知识的运用展示了对于确定性的追求和对复杂世界的探索,强调了科学与技术在带来便利的同时也展现了人类对确定性的渴望。
小爱音箱集成 ChatGPT 的不完全教程
小爱音箱集成 ChatGPT 的不完全教程 本文是关于如何将 ChatGPT 集成到小爱音箱中的不完全教程。文章首先介绍了智能家居的基础概念,包括 WIFI、ZigBee 和 BLE 等通信协议,以及智能家居平台的选择。接着,作者分享了如何使用 MiService 和 python-miio 库来控制米家设备,并通过编程获取小爱音箱的控制指令。文章还详细介绍了接入 ChatGPT 的方法,包括安装 openai 包和设置 API 密钥。最后,作者提出了两种集成 ChatGPT 和小爱音箱的思路:一种是通过获取对话记录并用 ChatGPT 回答问题,另一种是通过蓝牙直接连接音箱。文章以对未来 AI 发展的思考作为结尾。
程序员视角下的三体世界随想
程序员视角下的三体世界随想 作者在新年伊始撰写博客,反思过去一年未有圆满结局,疫情加剧了对故乡的思念。作者选择乘坐首班高铁回乡,并决定给家人一个拥抱,却发现面对熟悉的人时表达情感变得困难。尽管期待每次重逢都有不同体验,但对家的熟悉感带来了内心的安宁。作者不喜欢过年走亲戚,话题转向了《三体》中的三体问题,这是一个描述在万有引力作用下三个天体运动规律的复杂问题,至今无解析通解。三体问题贯穿物理学发展史,与牛顿第一定律和开普勒定律相关,但其运动轨迹不可预测,求解需要解18个一阶微分方程。尽管有特定解,但无法用通用公式描述所有情况。《三体》小说中,三体星球因受三个太阳影响,生活条件极端,居民需通过脱水和浸泡来适应。现实中的半人马座α三合星真实存在,其行星比邻星b面临X射线威胁,令外星生命存在成谜。作者将三体问题与分布式系统的 CAP 定理相提并论,探讨信息传递延迟和主从切换的一致性问题。最后,作者思考三体人的脱水和浸泡与程序员的序列化和反序列化之间的相似性,以及人的意识与肉体的关系,引发对个体身份和变化的深入思考。
关于 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代码修改等方面的知识。