各位工程师朋友,今天给大家分享一个基于物奇 wq 七零三四芯片的离线日制存储与导出方案。很多嵌入式设备在现场运行时出了问题,却拿不到日制,这个方案就能完美解决。我们把系统日制存到外挂的 s p i nor flash 里,需要时用手机 app 就 能导出, 是不是很方便?整个系统分三层架构设计,最底层是硬件驱动层,负责 s p i 接口、通信和 flash 的 基础操作,中间是日制管理层,这部分是核心,要解决循环存储和磨损均衡的关键问题。最上面是应用接口层,主要处理和 app 的 通信协议。重点讲讲 flash 分 成引导区、配置区和日制存储区。日制区又按四 kb 物理扇区划分成 n 个分区。 每条日制都有固定格式,开头是零 x 四 c 四 f 四七零零这个魔术字,接着是时间戳、日制长度 等级,最后才是日制内容。为了方便查找,我们在 flash 启齿扇区做了两级缩影表,一级缩影记录当前写到哪个扇区, 二级缩影按时间范围建立扇区映射,这样查日期就快多了。写入的时候采用循环机制,当前扇区写满了就擦除下一个。就像我们记日记,写满一本换一本。特别设计了磨损均衡算法,让每个扇区的擦除次数尽量平均。不会有的扇区早就坏了,有的还没用过。这里有个小技巧, 我们优先选择擦除次数最少的扇区,这样能大大延长复来时寿命。导出功能也很关键,我们自定义了一套 u a r t 或 b l e 通信协议, app 发送零 x 零一命令就能获取日记列表,发零 x 零二命令可以按时间范围读取,传输前会对数据进行叉分编码,还支持 g z i p 压缩,就算日质量大也不怕,万一传输中断也没关系,支持断点续传,下次接着传就行。 给大家报组数据。四兆的 flash 大 概能存十五万条五十字的日制,单条写入时间不到十五毫秒,按每天一千条日制算, flash 能用十年以上。这个方案在有限资源下实现了工业级的日制管理, 特别适合智能穿戴 i o t 设备这些需要离线日制分析的场景。各位同行,你们在做嵌入式日制系统时遇到过什么问题?是更关注存储容量还是写入速度?欢迎在评论区交流讨论,对完整方案感兴趣的朋友 加我微, kazakz 十七、可申请加入数字音频系统研究开发交流答疑群,课题组领取资料。
粉丝111获赞387

你说你会接口自动化,那我问你,接口自动化框架中,日制模块是如何设计与实现的?如何保证日制的完整性与可追溯性?刚面了一个三年经验的测试,我问他,你们自研或者改造的自动化框架里,日制模块是怎么搭建的?完整的?实现思路是什么? 日常执行脚本时,该怎样全方位保障日制数据完整并且实现问题一键追溯?能不能直接讲讲你的思路?他果断回答, 直接引入第三方日制工具类,简单配置一下日制级别,在代码关键位置打上 info error, 日制出问题直接看日制排查就行了。我接着追问, 既然你觉得这么简单,那为什么线上脚本报错经常出现日制打印不全、缺失,请求入餐没有响应,报文报错只有提示,却无完整堆架, 还有多条用力并发执行时,日制混杂错乱,根本分不清哪条日制对应哪个接口,哪个测试用力?这种问题你怎么解决?怎么从根源规避?我再补充一句, 很多工程师只会单纯调用日制打印方法,但压根不懂日制模块的底层设计逻辑,也没有统一的日制输出规范。针对日制丢失、内容残缺、日制混乱、无法溯源这些高频问题,你有没有一套标准化的设计与校验方案? 绝大多数后人到这里直接卡壳,半天答不上来。如果这道题你也没把握打好,我整理了让大厂测试总监沉默的必考题库,包含测试理论功能、测试自动化、测试接口、测试性能、测试数据库等等,甩个六六六,直接打包带走。 其实这道题就是初级自动化工程师和高级自动化测试开发工程师的核心分水岭。 这道题从来不是考察你会不会调用日制 api, 会不会简单打印日制,而是考察你是否具备框架组建、设计能力、故障排查、风控能力、工程化落地思维。 这里也纠正一个绝大多数自动化从业者的普遍误区。很多人认为日制只是辅助排查 bug 的 工具, 只要能打印报错信息,能看到运行记录就足够了。但大家要明白,能打印日制和日制高质量、可落地、可追溯是完全两个层级的能力,不能混为一谈。真正能胜任框架搭建企业及自动化开发的工程师, 必须吃透日制模块设计的三层核心认知,缺一不可。第一层,日制模块整体架构拆解与底层落地实现。首先我们要清楚,接口自动化框架的日制模块绝对不能零散化、随意化打印,市面上主流框架底层均依托成熟日制组建。 java 技术站选用 logback log 四 g 二 python 技术站依靠 logan 内置模块,但不能直接原声调用,必须做二次封装,我们需要统一封装局域日制、工具类固化四大核心配置 分级,日制级别、标准化日制输出格式、多渠道输出策略、动态日制过滤规则。同时拆分日制类型分为运行普通日制、接口请求日制、响应结果日制、自定义异常日制、数据库操作日制前置、后置、依赖日制六大类。 并且要统一规范所有日制的输出模板,固定时间戳、现成 id、 用力 id、 接口路径、请求方式、操作人员、报错、堆栈等基础子段,从架构层面杜绝日制格式杂乱、输出内容不统一的问题, 让所有日制有据可依。第二层,多维度把控日制完整性,规避日制残缺风险。审核完善日制,不能凭个人经验随意添加打印代码, 需要建立全链路覆盖标准,明确哪些场景必须强制打印日制,从源头补齐缺失内容。很多初级工程师只会打印成功状态的日制,这也是排查故障最大的痛点。一套完整的接口自动化日制,必须覆盖全执行生命周期, 用力执行。前置阶段,打印环境配置请求头 cookie、 签名、密钥、全局参数接口调用阶段,完整记录请求 u r l 请求方法、入餐报文超时时长响应阶段,存储完整响应体、响应码,响应耗时。异常阶段, 捕获完整异常堆战失败原因、重试次数执行收尾阶段,记录用力执行结果、断言详情、数据库增删改查数据。同时要做好差异化级别管控。 debug 级别,用于开发调试。 info 级别记录正常执行流程。 warn 级别记录非阻断类异常。 error 级别捕获阻断性报错。 禁止低级别日制屏蔽高级别关键信息,同时定期清理无效溶于日制,避免日制过载,掩盖故障问题,实现精简且完整的输出效果。第三层,搭建可追溯落地方案, 建立日制标准化准入规范。想要彻底解决日制混乱、无法溯源的问题,核心核心就是绑定唯一 trace id, 所有关联日制都绑定该 id, 并发执行场景下,依靠 trace id 加现成 id 双重标识,实现日制隔离,随时根据用力 id、 trace id 执行时间筛选对应日制,彻底解决并发日制混杂问题。其次,制定分层存储策略, 区分本地网址与服务器网址,本地网址适配开发调试、按天拆分网址文件、服务器网址对接网址收集工具联动、 alower、 extender report 等测试报告,直接在报告内嵌入对应网址入口。 另外,设定日制保留周期、文件大小预置,防止日制文件占用过多服务器资源。最后,统一团队编码规范,禁止开发人员随意新增自定义日制字段,所有日制新增修改都遵循既定模板, 形成底层封装日制工具类全生命周期强制打印、唯一 id 绑定、溯源、分层存储规章的完整闭环。从架构、规范、制度三个维度守住日制质量底线。讲到这里,大家应该能明白这道面试题的考察本质, 它区分的是只会简单调用工具复制粘贴代码的初级执行者和能够独立设计、组建矩阵、搭建工程化框架的高级自动化工程师。 初级工程师眼里,日制只是排查 bug 的 辅助工具。高级工程师眼里,日制是自动化框架的底层基石,是线上故障定位、责任划分、用力复盘、版本迭代的核心数据依据。 最后问下大家,你们平时搭建自动化框架时,是直接原生调用日制工具还是做过二次封装?有没有遇到过日制缺失引发日制混乱无法排查问题的坑?欢迎评论区留言交流!

欢迎参加本次关于 esp 三二预制系统的分享。今天我们将深入探讨 esp idf 提供的这套功能强大,可配置带颜色和时间戳的专业预制系统。我们将从最基础的 esp l e g 开始,逐步深入到高级调试技巧, 帮助大家掌握这个 esp 三二开发调试的必备技能。本次分享将分为九个部分,首先我们会介绍五个核心的日制级别函数。接着我们会探讨如何使用条件日制红来简化代码。 然后我们会展示一些特殊的日制函数,他们是调试中的利器。之后我们会学习如何灵活的控制日制级别以及一些高级使用技巧。最后,我们会深入底层了解其实现原理,并总结常见问题和最佳实践。最后通过一个完整的视力来巩固所学。 首先,我们来看 esp 三二日制系统的核心,五个标准的日制级别,他们分别是错误警告、信息、调试和溶于。 这五个级别按照优先级从高到低排列,每个级别都有其特定的用途和默认的输出行为。比如错误级别的日制总是会被输出,而调试和溶于级别的日制默认是关闭的,需要手动开启。 这种分级机制让我们可以非常灵活地控制调试信息的详细程度。我们首先详细了解一下最常用的 espoog, 它用于打印错误级别日制,在创口监视器中会显示为红色,非常醒目,便于定位问题。 要使用它必须满足两个前提,包含 e s p log 头文件,并定义一个唯一的模块标签 t a g。 这个 t a g 非常重要,它能帮助我们区分不同模块的日制输出,在复杂项目中必不可少。 右侧展示了一个典型的代码片段,大家可以看到, e s p l u g 的 用法非常灵活,不仅支持简单的自复串输出,还支持新语言风格的格式化输出,可以直接将整数、自复串等变量嵌入日制中,方便调试。 这是 esp l o d 的 实际输出效果。我们可以看到,每一行日制都包含了几个关键部分,一个代表级别的字母, e 系统运行的时间戳,我们定义的 t, a, g 以及我们自己写的日制信息。这种格式非常清晰,有助于我们快速定位问题。 其他几个日制级别的使用方法完全相同, e s p logw 用于警告, e s p log lab 用于普通信息, e s p l o g, d 和 e s p l o g v 则用于更详细的调试信息。它们的输出格式也类似,只是开头的字母和颜色不同。 需要注意的是,默认情况下,调试和熔余级别的日制是不会显示的,我们需要通过配置来开启它们。接下来是一个非常实用的技巧。条件日制红 我们经常需要在满足某个条件时才打印日制。传统的做法是使用 f 语句,而 esp idf 提供的一系列带 f 后置的红可以让我们用一行代码完成这个操作,使代码更加简洁易读。 比如这个例子,当温度超过五十度时,打印错误制式使用 esp log arrow f 就 非常方便。现在我们来看一些特殊的日制函数,它们堪称调试神器。 首先是 esp log buffer hex, 它可以直接打印出一个字节数组的十六禁制表示,这在调试 i, two, c, s, p i 等通信协议时非常有用,可以让我们直观地看到收发的数据是否正确,就像使用逻辑分析仪一样方便。 左侧的代码展示了如何快速调用该函数,你只需要传入数组和长度即可。下方的输出视力可以看到,日制系统会自动帮你格式化输出,包含地址偏移和 a s c i i 码对照,让你能像专业硬件工程师一样分析数据流。 另一个非常有用的函数是 esp log beeper hack stomp, 它不仅能显示十六禁制数据,还会在右侧显示对应的 a s c i a 字母。这对于调试基于文本的协议,比如 http 或串口 a t 指令非常有帮助,我们可以一目了然地看到发送或接收的字母串内容。 同时,左侧的十六禁制可以帮助排查那些无法直接显示的控制字母或乱码人体。 esp 三二的日制系统提供了非常灵活的控制机制,主要分为三级, 第一级是编辑时的全局配置,我们可以通过 manual config 来设置整个工程的默认日期级别。第二级是运行时动态修改,这是最灵活的方式,可以在代码中随时调整某个模块的日期级别。 第三级是单个文件的局部控制,可以为特定文件设置不同的日期级别。这种三级控制机制让我们在开发和发布时都能轻松管理日期输出。这里是具体的实现方法, 编辑时配置主要通过 menu config 图形界面完成,而运行时控制则是通过调用 esp log level set 函数,我们可以指定模块名和想要设置的级别。例如,我们可以单独将 ui home 模块的日制级别设为 debug, 而不影响其他模块。 此外,在单个文件开头定义 log local 红可以覆盖局设置,实现更精细的控制。当我们的产品准备发布时,通常需要关闭所有调试日制,以节省资源并提高性能。 esp idf 提供了一个非常简单的方法,在文件顶部定义 log local level 为 esp log non, 这样该文件中的所有日制红都会被域处理器优化掉,不会生成任何代码,这对于最终产品的稳定性和资源利用非常重要。 除了控制日制级别,我们还可以自定义日制的输出格式。通过 menu config, 我 们可以选择在日制中包含更多信息,比如县城 id、 文件名和行号。这在复杂的多县城应用中调试时非常有用,可以帮助我们快速定位到日制是在哪个文件的哪一行打印的, 大大提高调试效率。例如,我们可以将格式配置为显示日期级别、县城 id、 文件名、航号以及模块标签,这样在排查问题时上下文信息非常完整,能迅速定位到具体代码位置。 另一个高级技巧是日制重定项。默认情况下,日制输出到 u r t 零,但有时我们可能需要将日制保存到 sd 卡,通过网络发送到服务器或者显示在本地的屏幕上。 esp idf 允许我们通过 esp lockset vpr 函数来设置一个自定义的输出函数, 从而实现日制的重定项,这为日制的存储和远程监控提供了极大的灵活性。了解日制系统的底层实现有助于我们更好地使用它。 所有的日制函数都定义在 esp idf 的 log 组建中。值得注意的是, esp loe 这些都是红定义,而不是真正的函数。这样做的好处是可以在翻译时进行优化,如果某个日制级别被关闭,对应的代码就不会被翻译,从而节省资源。 同时,红也使得处理可变参数和自动添加时间戳 tag 等信息变得非常方便。 我们来看一个具体的红展开过程。当我们写下 esp lgoog 时,预处理器会将它展开成一个包含条件判断的代码块儿。首先,它会检查日制级别是否满足输出条件,如果满足就会调用底层的 esp log write 函数,并自动添加上时间戳、 t h g 等信息。 最终,所有日制都会通过这个核心函数进行处理和输出。在使用日制系统时,我们可能会遇到一些常见的错误,最常见的就是忘记定义 tag, 导致翻译报错。 解决方法很简单,在文件开头定义一个 t a g 即可。其次是忘记包含 esp 下划线 log 点 h 头文件。另外一个常见问题是调试日期不显示,这通常是因为局域日期设置的太高,或者没有为特定文件开启调试级别。 还有一些其他的常见问题,比如打印 f 默认关闭了 perfect 的 浮点数支持,需要在 menu config 中手动开启。 另外,如果日制输出乱码,通常需要检查串口拨错率、编码格式以及硬件连接是否正确。这些都是开发过程中容易遇到的小问题,了解如何解决可以节省我们的调试时间。 最后,我们总结一些使用日制系统的最佳实践。首先,每个文件都应该使用唯一的 t a g, 这有助于快速定位问题来源。其次,要根据信息的重要性选择合适的日制级别。错误信息要尽可能具体,以便于排查。 同时要避免在高频循环中打印日制,以免影响性能。在发布版本中一定要关闭调试日制。 最后,记住不要在中断服务函数中使用日制函数,因为它们不是中断安全的。为了让大家更好的理解,这里提供了一个完整的可运行视力。 这个代码演示了如何设置局部日制级别,如何使用不同级别的日制函数,如何使用条件日制和十六禁制缓冲区打印,以及如何结合硬件操作进行调试。大家可以将这道代码复制到自己的项目中,实际体验一下日制系统的强大功能。 我的分享到此结束,感谢大家的聆听。我是致歉 ai 工作室,余生关注我,一起用 ai 玩转嵌入式。

嗯,今天给大家来简单介绍一下,就是我们的产品需求文档怎么来写,我把它简单的做成一个模板库,嗯,跟大家简单分享一下,就是嗯,怎么编写这个产品需求文档更有思路,更有框架,而且让别人看了你这个需求文档能够 更清晰去对上下做一个承接。首先就是 我把它分成分为了几个板块,就是前沿啊,嗯,他主要的就是介绍一下,比如说我们这个产品文档一个 demo, 就是 我们要做一个用户中心的用户中心资料编辑的一个功能需求, 然后嗯简单的一些概述,适合谁谁来使用。然后接下来就是我们那个版本信息,因为我们这个需求他是不断的在更新迭代的, 比如说今天我变成了一点零的版本,明天就变成一点一的版本,然后一点一的版本的话新加的哪些内容,然后这块都有一有一个简单的记录与跟踪,方便我们第一眼就能看到最新的这个变更的需求。 然后接下来就是嗯文档说明的一个嗯名词性解释,这个在标准的 prd 文档都会有的, 然后简单的去概括一下就可以了。然后第四个板块就是我们的需求背景,这块表述的一定要重要,因为我从业务到研发一定要清楚的了解我们整个 的业务的一些流程,然后才能做到一个当我们做出产品的时候,才能跟我们的业务相匹配,也相符合。 首先就是嗯,你需要写产品或者数据的一些现状,这个现状是啥?也就说明嗯问题,说明我们当前这个产品面临着一些什么问题? 从这个问题中呢会衍生他出现的一些需求,也就是说当前 我们呃用户仅能去修改昵称,无法去修改其他的资料,然后呃用户反馈信息低,个性化程度低,然后无法编辑资料的编辑口,用户体验不完整,说明 这个问题呢?其实他也就是需求,因为问题他本质就是我们现状与预期的一个差值嘛,然后所以说这个现状与预期的差值也其实产品本质的这个需求 啊,我们从这块进行简单的一个参数,接下来就是我们所做的一个用户调研,比如说,呃,确实是这个需求我们已经体验到有了,然后有多少人需要 啊?这个需求我们有没有价值去做这个东西啊?然后接下来就是简单一个竞品分析,这个其实这两个板块啊,其实在我们, 嗯小的一些需求都不会涉及到,只有是大的需求的话才会涉及到。然后比如说竞品,确实人家我们的其他竞品确实有这个修改其他功能,然后也支持这个图片的裁剪啊。然后接下来就是说我们 做这个东西的一个价值,因为我们所在的公司或者组织他最后都要产出的吗?你说我入职时候我需要达到什么样的一个产出?我这个需求到底重不重要?在我当前这个节点里,他这个紧急程度高不高?我 如果把这个需求做了,他对我的产出或者是对公司的效益有没有一个影响?所以说我们要简单的陈述一下,就是我,嗯这个此需求他有没有价值,然后以便于我们当 我们数值的时候,或者是当我这个流程交转到这个开发的手里,他会也会在心里做一个简单评估,来来去做开发这些东西。 比如说,嗯,提升用户体验,这个都是简单一些官方套话啊,如果真的有价值的话,我们比如会如果能够提升我们公司的效益,或者减少多少人力成本,这样的话,从降本和增效两个方面来进行一个说明, 他会一个是体验我们,一个是体现我们所做的工作价值。然后第二个就是说他也能够嗯做,做出一种 就是我们可能领导看到这个需求呢,他也会觉得这个东西他就值得做。或者说我们产研去看了我们这个东西,他也觉得这个东西确实是必要去做,然后可能积极性会推动一些吧。 然后接下来就是我们所描述的一些目的啊,要达到什么样一个目标?比如说我们确实是编辑资料,能够自主的去编辑,然后通常情况下呢,能够展示 完整的一个资料。然后这块就是我们需求背景简单描述的一个过程。然后我们接下来的话就是 需求范围,也就是我们着重要强大的一些功能点。比如说嗯,这个给大家列的一个需求列表啊,这个列表的话大家可以去分, 比如说我们 p 零级别的有哪些? p 一 级别的有哪些? p 二级别有哪些啊?这块只是我简单写一些 demo, 这块都能简单去看到。 比如说我们这个他选的是 p 零级别的是哪个端的,然后产品的 u 片级是哪里的?比如这个模块他需要哪些字段啊?都是可以的。 然后接下来就是我们功能详情的主要一个说明了,因为我们这个到这块需求已经 给他标定一个范围了,接下来我们就描述这个需求的到底是怎样的一个过程。通常我们会有这个产品流程图,然后呃用交互原型图啊,去简单的去梳理这个业务流程。 然后呢还有会有这个功能说明,比如说我们资料编辑模块,就是要更改头像,然后详细的一个说明,说支持多大的格式,限制大小为多少格式为啥样 啊?其次我们修改名称时候,他是不是有这种敏感词的,或者是禁止特殊符号啊?同样的话就是我们在选择性别的时候,这块只是给他简单更详细,去把每一个小的功能去给他。嗯, 详细完,以便于我们开发,更能详细的去去梳理他所要开发的功能,以便于我们这个测试呢,依靠这些去简单的去进行测试,用力的一些设计啊。 然后简单,然后第七个板块就可能是一些非功能的一些需求,比如说我们性能需求上要求我们这个上传时间不要太短,不要太长, 然后支持什么?呃兼容性了,最简单的一些个非功能性需求,然后还有的一些东西呢,他需要数据买点,比如说这块确实有多少人 做留存。然后第九个板块就是我们项目那个规划,比如说我们这个进度从哪拉齐到哪,从哪拉齐到哪,这样的一个完整的一些工作流程, 其实就都在这这样一个产品需要文档里边啊?如果后面大家有需要的话也可以私信我一下,今天就给大家简单的去介绍的这些,好,谢谢大家。

做一名拥有零位粉丝的科技区博主,从今天起,我将用一辈子的时间为我的零位粉丝讲解全世界最受欢迎的编程语言以及 aigc 创作工具。而今天我要讲解的第一套教程便是 python, 本视频耗时三个月制作,制作时长超三百分钟, 陪你系统的学习 python 编程,这应该是目前全网最良心的入门到进阶的 python 教程了,哪怕你是零基础也能学会。相信大家偶尔会在各大视频平台刷到那些靠 python 实现自动化办公、爬取数据、制作小游戏的炫酷作品。 那么这些实用又有价值的 python 项目是如何实现的?我们又如何在编辑 python 代码时保证逻辑的严谨性,同时又能精准地控制程序的运行效果?从这些视频开始,我会从零教大家来学习 python 编程,从 python 基础环境的搭建,讲解到需求分析、代码编辑 这道调试运行的技巧和最终的项目实战落地带,大家由浅入深的从零开始学习 python 编程接单或者自己开发工具,实现你想象当中的功能。除此之外,本系列视频中用到的 python 学习工具, 实战案例、原码练习题、代码模板、学习路线,还有目前 python 的 热门应用方向,自动化数据分析爬虫,我都会整理起来放在置顶评论里,有需要的伙伴可一步获取。下面就开始吧,来 python 的 异常处理,那我们在这底下 第十几十二个 piston 异常处理啊!那这里面呢?各位你要知道一个事啊, python 的 异常处理不是说给你处理这种东西, 看呐,不是给你处理这种东西,懂吗?这这这这不叫异常好吧?这叫瞎写 啊这叫瞎写。这这这这,胡来啊胡来,这这这这,他不管好吧,就是语法错误,他是不能帮你解决的好吧,语法错误是不能帮你解决的。语法错误,那就是你代码都写错了,你这明往往的大红线都出现了,对吧?你还处理个毛线呢,你重新改重新写代码吧,对不对?所以呢,这个 这要叫叫 python 异常处理,不是处理这种东西的啊,这是你编印错误,这是你写代码写错了啊,这个不行。那 python 处理的是什么异常呢?看着啊,我弄个 a input, 对 吧?那个弄个 a, sorry, 我 把它写的全全后一点。 int 啊, input, 你给我输入一个数字,再来个 b, 好 了,再给我输入一个数字,好吧,一个 a, 一个 b, 好 了,接下来呢,我们去算一下是吧? a 啊,除以 b, 我 们去算 a, 除 b, 来运行一下啊,走, 哎,正常情况下输个十,再输入一个三,对吧?哎,除起来,然后得到结果打印,这个没问题,对吧?现在没问题,但是呢,走 十零框机炸了,看到吧,这个零一进来他就炸了,为啥呢?因为这个零不能做除数,对吧?零不能做除数,所以呢,你看这个程序我写的有没有问题? 没问题,程序是没问题的,但是呢,极个别的值极个别的不太正常的数据出现的时候会导致你整个程序的崩溃啊,导致整个程序的崩溃,你看着啊,我在底下接着写 print, 是 吧?我要上天 走十零,看到没?我要上天出不来。为什么出不来?因为这句话报错了,对吧?这句话在运行的时候, 哎,由于数据的不对,对吧?导致出错,导致出错,说白了我这个程序啊,应该是没什么问题的,对吧?就是说他他他他运行的时候出现了一些个意外,出现了一些意外情况,那么这个意外情况呢?会干嘛?会导致程序中断,那此时程序 会中断啊?会中断,一中断了,好了,那我上天就上不去了,对吧?那你想象一下,如果这个东西是在正常的一个生产环境下,生产环境下,兄弟们,你你,你思考一下,你的这个 app, 手机 app 在 进行啊,数据传输啊,或者在进行这个用户交互的操作的过程当中,就出个错,很正常吧, 对吧?你一个手机 app, 咱说,咱说微信吧,一个微信可能要要要,要几十万行代码,那几十万行代码某一行出错了,很正常,因为它的运行环境是非常复杂的, 非常非常复杂的。举个例子啊,咱说,呃,安卓也好啊,苹果也好,对不对啊?还有什么?这个,这个安卓大屏小屏,对吧?然后你,你跟那个聊天的时候的那那那那个群群聊,私聊, 对吧?转账这些东西,你想多复杂的一个逻辑啊?那这些逻辑里面有一句话,出现了一个小小的瑕疵,不很正常吗? 对吧?这个小小的瑕疵,对不对?那你不应该让整个微信就彻底的崩掉了,对吧?彻底的崩掉了,这个不合理啊,这个不合理。所以呢, 我们就需要做一个事情,干嘛呢?当程序运行过程当中,由于某些特殊数值特殊的情况出现了,导致程序出错了,我不,我不能让它中断, 他中断了,对吧?我就上不了天了,我后续的很多操作就做不了了,对不对?所以呢,这会我们就需要去学习这个叫做异常处理。所以各位清楚的知道一个事情,异常处理处理的是什么?是程序运行时的一些什么意外情况 啊?一些意外情况不是你瞎写的那个代码,懂吧?不是你瞎写的那个代码啊,这个是异常处理,那么异常处理,你要知道,如果异常不处理 啊,如果异常不处理,那么程序会中断,对吧?会中断,所以呢,这个是我们需要注意的点啊,必须要进行处理。那怎么处理呢?那怎么处理呢?在 python 里面主要说的是这个玩意叫 try accept 的 语句 啊,叫 try accept 语句。那这个玩意儿怎么来解读呢?兄弟们,你就记着,这玩意儿它分成两段儿,一段儿是串,一段儿是 accept, 所以 它的语法是这样,串, 哎,不拉不拉,不拉不拉。然后呢,再来个 accept, 哎, accept 后面,哎,不拉不拉,不拉,不拉不拉。那这个里面它会分成两段儿,这两段儿是干嘛呢?串什么意思?我要尝试 啊,我要尝试着去运行这里边的一段代码,哎,就去跑,去,大胆的去给我跑,去跑的过程当中有可能出错,有可能不出错, 对吧?一段代码的运行就两种结果,没问题和有问题吗?对吧?如果说没有问题好了,就正常的结束这段逻辑,接着往后跑了。那还有一种情况呢,是出错 报错,报错了怎么办?会进到 accept 里面去,会进到 accept 里面去,能懂吗?所以呢, accept 相当于是意外,出现了意外怎么怎么着,对吧?出现了意外怎么怎么着?所以呢,整个这个玩意的解读就是 来尝试运行一段代码,如果不出错 就正常结束,如果出错, ok, 那 么错误啊,不是不是,不是,错误吧,就是如果出错了,会自动运行 accept 中的内容 啊。自动运行 accept 里边的内容,那像咱们这个程序想把它改写的话呢?我就可以这样做,在这里面写个 try, 是 吧?写个 try 来把它给我推下去,对吧?然后在这里面呢,哎,写个 accept, 写个 accept, 然后 print 一下,是吧?出错了, 哎,出错了再打印一下,说我出错了,可以吧,那我们看一下啊,这个程序运行走,来,我们来个正常的十和二,十和二,那兄弟们仔细琢磨琢磨,品一品啊。 十二十除二,没问题,没问题就接着往后走了,懂了吧?没问题就正常往后走了,所以 看他直接五点零,我要上天,程序正常的走出去了,对不对?好了,那如果说出错了呢?走 十,哎,零,走零就出错了,看见了吗?零,他就出错了,然后我要上天啊,我要上天。所以各位,你要知道一个事情,就是如果这里面出错了,哎,走 excel 的, 并且程序不中断,看 见了吗?这是他的好处啊,就程序不中,就你这代码出错了,我程序不会中断,而能继续运行啊,继续运行,所以这个逻辑叫什么呢?这个逻辑有的人给他起个名字叫自醒, 叫自省。什么自省?就你程序报错了啊?报错了,报错怎么办?报错了自动的,对吧?反省一下,接着往后走, 哎,接着往后走,这个叫自省啊,那这个叫 try accept 的, 它的一个基本的运行逻辑啊,就它的一个语法规则。基本的运行逻辑是这样的,但是呢,这么写是不完整的,是不完整的,很粗糙的,但它能用啊,它能用。那这里面 怎么把它写得更加的完善一些呢?怎么把这个玩意写得更完善一些呢?来,兄弟们, excel 对 吧里面报错了就提示个出错了,光一个出错了,有个鸟用,我得知道它到底错哪了,出了什么错, 对吧?方便我再回去补充我代码,调试我代码的时候,我知道我应该去做什么,对吧,就说白了,你看 对吧?十零,对吧,出错了再给用户看的话,就是就出错了。好家伙,到底哪错了?出了什么问题,对不对你得告诉我呀,对吧?那现在什么都没有看见了吗?现在什么都没有。所以呢,我们在 excel 里面往往是干嘛是需要错误信息的, 哎,在 excel 里面,哎,需,我们往往是需要错误信息的,不能直接就这一个,出错了就完了。那错误信息在哪呢? 错误信息看清楚,它会自动的。注意啊,这个里面报错,会自动的把那个错误信息给传递给 excel。 听清楚啊,把收集到的错误信息传递给 except。 所以 except 得干嘛?得接呀, 对吧?得接,你现在啥都没有,谁接?没人接,对吧?所以得有人接收。怎么接收呢?看清楚空格 exception, as 一个 e 啊, as 一个 e, 看着,这是什么意思? 嗯,看,那这什么意思?就是你这里面出错,对吧?出的错呢?它把你收集,收集完了之后呢?甩给 accept, accept 会把这个错误 丢给这个玩意。看清楚啊,丢给后面这个玩意,追给这个这个这个 e, 这个变量 e 啊,变量啊,变量 e。 那 这个 exception 在 这里是什么意思呢?它表示的是什么类型的错误?哎?什么类型的错误?什么意思呢?咳咳咳, 就像我们生活当中犯事了,各位,我们生活当中有犯事了,什么小偷小摸啊,什么打架斗殴啊,啊?还有什么?这个这个这个杀人放火啊,对吧?这种这种这种小问题,对吧?出现了一些小问题,那这些小问题出错之后,想象一下 这个 accept, 帮你接收这个错误,帮你顶包,帮你去打这官司, 你把他想象成律师出错了,你生活当中小偷小摸了,打架斗殴了,杀人放火了,出现了错误,出现了问题,被人逮住了,被警察逮住了,你怎么办? 你得把这个问题是不甩给律师,对吧?甩给律师,那么甩律师的话,不同的律师他擅长的东西是不一样的,有的是专门处理这种这种这种 闲杂的小事的,是吧?你这是打架斗殴啊,对吧?这种东西。但是如果你抢劫了,你杀人了,你放火了,那这种很严重的问题,你是不是得请一个比较厉害的律师, 对吧?所以呢,这个类型,这个玩意是个类型啊,这个类型在这的意思就是你出的错是什么错?如果是符合这个小错的,好了,那就,哎,就就就就就就帮你接收,如果符合其他错的话,那就不接收啊,那就不接收。所以呢,像咱们刚才这个程序,他所报的错是个什么错?来 给大家还原一下啊, 报的是这个错, 叫做 zero diversion。 什么 l 啊?我们出的是这个错,哎,出的是这个错啊,所以呢?哎。把它放在这,哎,把它放在这。所以呢,当你这个程序里面出现了什么,出现了这种错误的时候,好了,哎,就把这个错误呢交给这个, 哎,能专门处理这种错误的,这个律师,懂了吧?那我们来打印一下这个 e, 好 吧,来打印一下这个 e 啊,来,右键走, 来十,再来个二,对吧?哎。哎,二是正常的,是吧?十零,对吧?看出错了,出的什么错? diversion by zero 啊 diversion by zero。 所以呢,就把错误信息就拿到了啊,就拿到了,那么为什么要要要有一个明确的错误信息呢?因为在 python 里面, 对吧?我刚才不说了吗?你小偷小摸了,对吧?这个,这个,这个,打架斗殴了,这都找小律师,对吧?你要是杀人放火了,你要找大律师,对不对?所以 你不一定非得有一个律师,你可以有好多个律师,对吗?你还可以走,哎,你还可以走,你可以有好多个律师。来,我把它细划一下啊, 哎,把它细化一下,看着啊,比方说这是什么?这,这个,这,这是,呃,除数不能为零这么一个事,对吧?这相当于是小律师,可以吧?是个小律师。好了,那你还有可能是什么呢?你这个,哎,我把这代码挪挪挪进来啊, 挪进来,是吧?你是不是有可能是类型有问题,所以有可能会有 type l, 对吧?类型的问题,对吧?所以呢,这个相当于是个中型律师,可以吗?中型律师。好了,如果说你出的这个错啊,是个天大的错误,对吧?天大的错误,你杀人放火了,对吧?怎么办?你需要一个大律师,在 python 里面最大的律师是他, python 里面最大的律师是他。一个 type, 他 相当于是大律师。大律师什么意思?大律师能干的活就多, 对吧?你给的钱也多,是吧?能干的活也多。那你想象一下,你啊,杀人放火了啊,这个打架斗殴了,对不对?那被这些小律师你错,你假设你出的是这个错,好了,那这个错呢?哎。被他所捕获。如果你出的是这个错,好了,错误被他所捕获,好了,如果不是这两个错, 其他的杂七杂八的玩意儿,其他的所有的错误,好了,都做这里啊,这个就说 可以更细化的去。呃,划分出来你的错误是什么错误啊?不同的错误可以给出不同的处理逻辑啊不同的错误给出不同的处理逻辑,比如说像这种小错,对吧?小错,对吧?那就是 小错误,对吧?哎。这个这个这个这个罚酒,罚酒,罚,罚款一百,完事,对吧?然后呢?这个是中型错误,对吧?中型错误, 对吧?这个这个这个罚款,那一百一千,罚款一千,对吧?然后呢?出现了巨大的问题,巨大的问题,对不对?那我们就可以。呃。怎么说呢?呃。直接枪毙 啊,直接枪毙,对不对?那这里面你看我现在跑出来他都是小错误,对吧?都是这种小错误,罚款一百就能搞定的啊?这种小错误。为啥呢?因为你报的错是这个错,懂吧?报的错是这个错,这种小的错误啊,那类型错误。比方说我们把这个 int 看着往里面放上一个,比如说, 哈哈哈,对吧?你看我往里面传,哈哈哈哈哈,是不能够转成 int 的, 对吧?所以这块会报错走。对,巨大的问题,直接枪毙,哦, sorry, 这还不是 type l, 我 们看一眼它什么 l 啊?我把这个错误信息给它打印一下啊, 稍等,兄弟们,我把这个错误信息给它打印一下啊。走, 走,他叫 y 六 l 啊,他叫 y 六 l, 我 写太不 l 不 太对,对吧?叫 y 六 l, 对 不对?走, 哎,随便给哒哒哒哒哒,看中等错误,罚款个一千,哎,也就过去了,懂了吧?所以他这块的逻辑就是,你尝试着运行这根代码,然后呢,出现这种错误就走这个,出现这种错误就走这个,懂了吧?哎,这个是我们说, 呃,这叫什么?这个叫叫叫叫叫叫穿 excep 的 这么一个逻辑啊,那穿 excep 的 没完呢?它这个语法呀,非常的顽强啊,后面还可以再补充,还可以再补充,比方说你甭管是大错误,小错误,巨大的问题,对吧?你最终,哎都可以干嘛呢?去去去去。呃,进看守所,好吧,进看守所先关七天。那这块来个 finally 啊。 finally 是 吧,这块还有个 finally print, 这是最终的收尾的 啊,最终收尾工作,你罚款一百,蹲个七天,罚款一千,蹲七天啊。然后呢,这个巨大的问题,枪毙,枪毙之前先关你七天,懂了吧?哎,所以这个 finally 是 收尾的啊,最终收尾的 啊,不论报错还是不报错,哎,都要执行的一段代码是这个 finally 啊,是这个 finally, 那 这个 finally 呢?主要用的场景呢?就是我们 假设就连接数据库,想往数据库里面存储数据,或者从数据库里面读数据,那不论说你读的成功还是失败,你最终都要去关闭这个链接啊,都要关闭链接,要不然数据库链接会越来越多的,对吧?哎,这是一个 finally 的 一个作用,然后这里面还有什么 else, 这一阵咱不讲了。好吧,各位,这玩意用不上,在你的职业生涯里面用不上,他这个就就比较比较有病,你知道吧,他的执行逻辑是,当你这里边不出错,没问题 啊,不出错的时候他还走个 else, 这谁会用他呀,闲的,对吧?所以这个语法咱就不讲了啊,这个用不上啊,这是简直是吃饱了撑的,没什么,用到这个就够了啊,就够了,然后我们在这块完善一下它的语法,是吧。啊, accept 后面往往呢会跟上类型 啊,你报的什么错了?哎,类型后面跟上一个变量啊,跟上一个变量,那你还可以呢,给出很多个 sorry, 你 可以给出很多个这种啊。 accept 可以 给很多,但是最后呢,会有一个 finally 啊,会有一个 finally 啊,这相当于是它的一个完整语法了啊,相当于是完整语法了,在 finally 里面呢,是最终要执行的东西 啊,就不论你是报错还是不报错,哎,最终都要执行的东西啊。这是 try accept 它的一个语法规则啊。语法规则 在实战的过程当中我们最多的写法,兄弟们需要知道啊,我们写的最多的不是这么干,没有人闲的没事写这么多的,对吧?不,不会的,一般都是这么干串,然后呢?去干活,哎,去干活可能会出错的地方,然后接下来一个 step 啊, exception s e, 那 直接 pass, 懂了吗?我们往往基本上是这种结构用的是最多的啊,不会搞得那么复杂,最多最多兄弟们会多一个 finally 啊,最多最多来一个 finally, 好 吧,哎这是我们需要呃让大家了解和知道的点啊需要大家知道的点。然后这里面呢还有一个隐藏的知识点,这个呢 就是如果你不纠结其实你发现不了如果你纠结的话是能发现的啊。这里面有个隐藏的问题,如果我写这玩意对吧?我写个这玩意,哎,我把它这么这么扩起来,好吧扩起来。然后这里面呢我故意报个错啊故意报个错。一除零啊一除零啊。呃 行吧,一除零,然后这块呢瑞特一二三瑞特一二三,然后紧接着呢这块对吧? print sorry print 我是 finally 哎我是 finally。 好 了,接下来我去调用这个函数,对吧?得到结果,然后呢 print 这个结果。 看的看的看的懂吗?这玩意啊这个玩意,哎他这个玩意运行这个函数好了运行这个函数这个函数呢?哎在踹里面会报错报错呢就走到这里面来了,那返回一二三,所以呢就会把一二三返回给这里,这里呢就能接收到一二三。那么接下来问题是他执行不执行, 对吧?最终这个 finally 会不会被执行的?它能不能完成我们对它的一个期望?因为我们期望的是不管你报错还是不报错一定要走 finally 对 吧?一定要走 finally, 因为 finally 是 完成最终呃的代码的地方,对不对?那么如果是这样的逻辑的话,它会不会走对不对?我们跑一下走, 看见没?各位,我是 finally, 明白啥意思没有?也就是说你虽然返回了一二三你虽然返回了一二三,你没有执行到 finally 的, 对吧?但是 finally 也会被运行,记住啊,不论, 哎 sorry, 不 论何时啊, finally 一定会运行, 可以吗?各位,不论什么情况下,这个翻译的一定会行,哪怕你在前面瑞特了,在这瑞特了,你在哪瑞特都要执行这个翻译的啊,都要执行这个翻译的啊,当然你再踹前面瑞特你就没了啊,你要这么干,瑞特这玩意 那那就没了,因为他根本就没走到踹里面去,看到没走到踹里面去,只要你进了踹,那么翻译的一定会运行,一定会运行啊。 好了,这个是我们关于异常处理这一块啊,异常处理这一块啊,我们需要知道的其实就是 create a set, 对 吧?这样的一个语法,它呢还是比较简单的啊,比较简单的,我们用的时候呢,没有我讲的这么复杂啊。 然后下一个就是关于日记的记录,就是当我这个程序出错的时候,我们需要记住日记,对吧?但是日记日记的记录呢?我们把它挪下面去来 traceback 什么意思?叫追踪,叫追踪,它追踪有什么用呢?来,兄弟们看啊,看 它追踪是有用的,很有用的一个东西来串哎。 print 一 除零,一除零,然后呢,我们来个 accept 对 吧?然后 exception as e, 这是我们用的最多的啊,来 print 这个 e, 对 吧?打印这个错误信息来走, 对吧?他打印了一下这个错误信息,但是兄弟们,我们在程序报错之后,对于程序员而言最重要的是什么?是不是这个错误信息?但是现在你看这个错误信息太简短了, 能理解吗?这个错误信息太简单了,我程序员出错最好的东西是什么?看着最好的东西是这种东西, 对吧?这个,这个飘红的,这个,这个,这个打印这个是最好的,因为这个东西里面直观的告诉你了,对吧?我的是哪个文件里面哪一行,对吧?那行是什么?代码出了什么错,非常的直观,你去调代码的时候非常好调, 懂了吧?所以呢,这个东西是吧?是我们在写代码期间非常重要的一个点,但是一旦你加上 chapt, 你 会发现错误信息没了, 对吧?错误信息没了,为啥呢?因为错误信息被他给收了,而他一收呢?一打印这个 e 呢?又只有这东西,对吧?信息量太少了,对不对?所以我们需要借助这么一个模块,叫 traceback in port 叫 traceback, 这个模块,在 traceback 里面,我们可以用 traceback 点 ex 啊, sorry formate, e i exc。 用这个玩意能够打印出来,能够获取到当前程序的应用栈。来给各位去看一下啊,右键走, 看见没?这东西又出来了,哎,又出来,但是不是红字了,看见没?不是红字了啊,是哪打印的?是这打印的,看到了吧?跟我们的那个报错信息是一模一样的,这多舒服呀,对吧?所以呢,在你写代码期间, 对吧?用这个可以,各位,哎,在调试代码期间用这个,当你代码上线了,对吧?你可以不用他,你可以不用他,你写一个别的吧,给给客户一个友好的提示,这个我都可以理解,但是在写代码期间用这个好吗?这个是上线时 啊,上线时用这个东西啊,那这个是我们讲关于呃 traceback 我 们要用到的东西,就这一句话好吗?就这一句话,其他的玩意不用去纠结,不用去抠, 不用去抠,你用不着,你用不着啊,还什么 print, 还有这个 formate, 老板现在一大堆,用不着就用这个,相信我啊,这个就就就够了,就够了,非常的简单啊。 traceback 完事 来 traceback 之后我们接下来呢去看一个,呃,下一个就是这个叫做,呃,叫日制的一个记录啊,日制的一个记录,来,我们在这儿再来一个啊,哎 traceback 那 个把它弄下来,这个东西 十三啊,别十三了,直接啊,直接写的写出来吧。十三,那 traceback 模块啊, traceback 模块就这么一个玩意啊,它能看到,对吧?这个这个这个这个这个调用过程调用栈 战神站说的直白点,错误信息,好吧,就是我们看想看的那个错误信息啊,在那个 accept 里面能看到信错误信息, 哎, ok, 这个是 traceback 的 东西。然后接下来我们来看第十四个,就是这个叫日制的处理啊,十四就是 python 记录日制啊, python 如何记录日制这个玩意啊。呃,讲道理,兄弟们记录日制这一块代码不用记, 代码不用记,为啥呢?因为这个代码是固定的,代码是固定的,所有的这种固定的玩意不用记,而且这个代码还比较长,比较长,你千万别去记它去,这个玩意记起来比较麻烦,好吧,来,我们直接找到那个那个这个地方 啊, log 模块啊, log 模块, log 模块就是 python 记录日制的一个基础模块啊,一个基础模块, python 直接有的。那我们可以直接导入模块,然后就可以咔咔 用了啊,把这个玩意做个简单的配置就可以直接用了。来给各位去看一下啊,给各位看一下,把这个玩意十三个,第十三是关于日制记录啊,我们在这 import log 啊, import 的 logo。 那 首先呢,先做一个基础配置啊,基础配置,这个基础配置别记啊,千万别记,这玩意很麻烦, 这多香,对吧?然后把这个前面这玩意干掉啊,把这玩意干掉,把这玩意干掉。哎,你在做基础配置的时候,你需要填入这么多内容啊,把这个推推,推推是吧?看的会比较清楚。首先 你记录日记的时候,你需要告诉他,是吧?你要把这个日记写到哪个文件里边去?这是文件名, 看得懂吗?就是一个文件名啊,把这个文件名怼进去,然后是否妹特格式,你要记录日记,日记的格式长什么样啊?长什么样?这有个时间啊,有个名字,然后有一个级别啊,日记错误的级别,后面是哪个模块?哪个模块,然后在后面 还有呢?哪个模块?这个 nbs 就 没用,哎,这样的,看他再说一遍,这是哪个时间?时间,然后这个是什么?这个是母,这个是名字啊,日期的名字,然后这个是它的一个叫,嗯, 级别啊,级别,日期的错误级别,这是模块哪个模块出现了什么事? message 什么事,懂了吧?所以整个这个逻辑就是什么时间,对吧?在什么地点出现了个多么严重的一个什么问题 啊,就这么个玩意啊。然后后面 date for mate 是 你这个时间,这不放时间吗?时间放什么格式的对吧?哎,这个放上格式后面有个 level, level 是 等级, 等级,这个呢,它表示的是多大的等级以上的错误会被记录到日记当中?看着啊,这块是需要,需要各位制作的 level 那是多少分儿以上的错误信息会写入到日记当中? 看着,这是只有 level 大 于等于你配置的这个玩意儿才会被写入进去,比方说我 level 等于三十, 等于三十。好了,大于三十的大于等于三十的会被记录到日历当中啊,会被记录到日历当中。所以呢,这块会有一个等级的概念啊,等级的概念。那么在 python 当中哎, logging 模块 啊, log in 模块自动帮你干嘛呢?划分了一些日制等级帮你划分了一些日制等级,但是呢,这个等级你可以遵守,也可以不遵守啊,但是这块我建议大家遵守,因为都是呃在这个体系下去工作的啊,不要去 特立独行建议不要特立独行啊。那么 log in 里面给的这个日制等级呢?有这么几个,一个叫 critical, 哎,点儿 critical 啊 critical, 这个呢,是最高级别的 认知错误啊,错误,最高级别的错误,那一般情况下呢,你可以把它理解成是一个非常非常严重的事故了啊,非常严重的事故了。然后还有这么个这么几个等级叫 logging 点儿 arrow, 这个是普通错误啊,然后 logging 点儿叫 warning 啊, warning 哎,然后再往下 log in 点儿,还有叫做呃 info 啊, log in 点儿叫 bug 啊,叫 bug。 来,我把这个先放开吧,先放开,然后我们一个个看啊。 arrow, 这个是呃,普通错误,就程序报错了,普通的错误啊,那这个呢,相当于是呃,警告,警告,这个是 信息啊,记住了一个信息,这个呢是 debug 最详细 啊,最详细的一个信息记录。那么各位,这里边 critical 看着它的等级是多少,给大家看一下。按住 ctrl 点进去啊,点进去你能看到 critical 是 五十啊,五十啊,非常严重的五十,然后 arrow 是 四十, warning 是 三十, warning 跟 word 是 一个啊, warning 跟 word 是 一个,然后叫 info 是 二十, bug 是 十,然后 no time no t 啊, not sight 是 零啊,默认不设置就是零啊,默认是零,所以呢,在这块我们就知道了,这个是五十,这个呢是三十,这个呢是信息是十啊,二十啊, 二十,这个呢是十啊,这个是十,所以呢,我们知道了。哎,这几个日制的级别,那我这写了三十什么意思?在你的记录日制的当中, 只有出现在三十以上的问题的时候,才会被记录到这个文件里面去啊,低于三十的 info 啊和 delete 就 不会再记录了啊,就不会再记录了。那如果说这块写成个四十呢,那代表的是从错误 啊,只有错误和严重的错误会被记录到日当中啊,会被记录到日当中。如果你选择的是十,选择是十,那 ok, 就是 说白了,几乎是所有的都要记录啊,就太详细了啊,太详细了。所以呢,他给了这么几种日制的级别,那这个玩意我们知道了他的级别了,也设置好了,接下来我们来试验一下怎么来往这个。呃,日制文件里面记录东西很简单, log in 点。哎,这块呢,我们可以用啊,叫喔叫叫叫叫 i o 啊, log in 点 i o。 小 写的啊,大写的是它这个级别小写的是它的功能啊。那你要记住什么错误呢?叫我上天了,看到了吧。哎记录个我上天了,来运行一下。走, 看这边啊,看这边就会多一个啊,你写的是?呃这块叫叉一点 t s t 上这里面找去。 这呢叉一打开看到没,哎这块默认情况下啊,由于是 windows 默认是 g b k 所以呢我拿 u t f 八会有乱码啊,我给它重新导入成 g b k 就 可以了啊。 重新导一下看我上天了,看了吧,哎就记录下来了。看它这个记录的格式啊,哪个时间对吧。那默认啊,是 root, 默认这个名字就是 root, 然后是 l, 是 错误级别啊 l 级别的,然后呢是这个模块里面出现的什么错误 懂了吧?这就是一个呃预制的一个格式,你可以换,你觉得这个不好你可以自己去换去啊。那这个呢是呃 a 轴的一个效果,然后 log in 点我们再来一个 warning 啊,来个 warning, 比方说,呃我感冒了啊,来感冒了来走对吧。哎看这头 只有我上天了,看见没,只多了个我上天了,为什么那个感冒了进不来呢?原因是你这个级别是四十,而你的 warning 只有多少?只有三十啊,只有三十,所以呢它,哎这个 level 啊,日制设置是三十啊 sorry 四十以上对吧。那此时 warning 的 级别不够, 懂了吗?这个级别不够,所以呢他就没有被记录到这里面来啊没有被记录到这里面来。这他他为什么要这样设置呢?这样设置的好处是啥呢?就是你在整个项目在上线之前你可以把这个 level 调很低对吧你可以调个十 对吧或者调个零对不对。我把所有的日制所有的信息全都记录下来全都记录下来但是呢一旦某一天项目上线了 我可能不需要那么细的日制的信息了那我可能把它调整成三十或者四十对吧我只记住错误方便咱们去查看日制日制太多了也不好 对不对哎所以就是有这样的一个设置就方便啊一一楼泳衣这设置好了哎后面就都跟着变了对吧。后面代码不用变。代码不用变它自动过滤啊自动过滤其他的我就不试了啊然后有一个需要说一下叫 log log log 这个 log 啥意思呢。就是 warning arrow 还有 info debug critical 这些玩意不够用了。不够用了怎么办。你可以自己定义自己定义啊自己定义的时候比如说我来个十八级。十八级是吧。十八级什么。是是是是是是这个我要呃我我我我我想上厕所我想上厕所来走 哎 sorry 我 这个改成十吧改成十看的清楚一些啊清理一下走 对吧记录上去了看这头看到没这个 level 十八级懂了吧就相当于你自己定义一个级别啊就他给的这个级别你觉得不够完美啊什么 l 啊 word 啊你觉得不好你自己定义那自己定义你就写个十八就行啊就行了但是不建议啊不推荐好吧不推荐啊 不推荐啊。推荐是什么呢。推荐的写法是这样的看着啊这玩意注射掉了啊真正有用的来了哎真正的使用上的时候 完整的一个错误处,错误的处理逻辑应该是这样的,我们写个 try, 是 吧?我们写个 print, 一 除以零,然后紧接着呢,来个 accept 的, 然后 exception as 一个 e, 接下来呢,我们需要在这里面是不是拿到那个错误信息啊,对吧?所以我们需要 import traceback, 记着吧,刚说完 traceback, traceback 呢?能够它点儿 否? mate, exc, 这不是错误信息吗?把这个错误信息记录到日记当中,注意,是错,错误信息,所以用 arrow, 对 吧?用 arrow, 所以 这是 记录错误信息,对吧?啊,完事了这是,这是正常的。走,跑出来看这边看见没?前面这个其实都都都都,都是我之前测的,删了再跑,对吧?你看 等会空行,很烦人。哎,这个跑出来就能看到。哦,那个,那个,这个文件里面出了个错误,对吧?错是什么错呢?是,哎,这个东西,这个文件里面第二十二行,第二十二行,第二十二行。出什么错?出零了, 对吧?出零了,所以呢,你看到这样的信息你就可以去哎去去找,到底哪出了问题啊,出了什么问题啊?等等等等, 懂了吧。哎,这个是日制处理的一个逻辑啊,我们,呃,后面写代码的时候会用到类似这样的逻辑啊,这样的逻辑。然后日制呢?还可以说写入到更多的文件啊,更多的文件就是下面这种逻辑了 啊,下面这种逻辑了。这种逻辑呢?大家有兴趣可以去看一下。没兴趣就算了啊,没兴趣就算了。首先他在这呢,可以来个 log in file handler, 先整了一个文件助手, 文件助手,这个文件助手呢,就是写了一个,对吧?打开了一个文件,然后呢写个 a, 然后呢? encrypting utf 八,就是带编码了,就不会出现在我之前那个中文有乱码的问题了,对吧?然后有个文件助手把这个文件助手呢设置了一下,对吧?往里面写入的这个 格式,对吧?还是往那堆格式,哎,扔进来,然后这个文件助手设置好了格式,哎,扔进来,然后这个文件助手呢?添加到这个 log 对 象里面去 添加到 log 对 象里面去,那这个 log 对 象在使用的时候, ok, 就 会按照这个文件助手的配置的过程往里面加 啊,往里面去,往里面写东西,所以后面呢 log 一 就可以写东西了,对吧?啊?那这这可以分文件,这有这个文件,对吧?然后下面呢再创建另外一个文件的一个 log 对 象,对吧?一样的逻辑,也是弄了个文件助手,也是那个文件助手,但是呢它指向了另外一个文件,对吧?就可以一个项目有 多个文件了啊?有多个文件了,然后呢?哎,就你用 log 一, ok, 那 就是第一个 log 二呢?就是第二个,对吧?可以拆分啊,可以拆分,但这个, 呃,看情况吧,如果项目不是很大的话啊,就一个文件就可以了,如果项目很大很大很大的时候,你可以考虑分开, 好吧?哎,这个是我们,呃,关于日制处理异常处理这块我们需要知道和了解的知识点,好吗?哎,这个呢,大家回去去练一练就可以了啊。然后这个基本上咱们就说到这了啊,来。

ok, 那 我们继续来看我们装饰模式的一个代码示意啊,这里的话设计说明是之前大家每个视频里面都能看到的,用来给 ai 提示生成的,那这次我们装饰器想用什么样的一个示意呢?我们来看一下这个,他是我们想用一个简单的日制框架,也就是我们前面视频里面讲到过的,他需要用所有的日制输出对象遵循同一个抽象接口, 基础的对象负责真正的写网址,装饰器对象也实现这个接口,那我们需要在网址上附加一些东西,对吧? 那我们看一下我们会在这个上面附加哪些东西?最底层的可能是,呃, write a logo message, 对 吧?那我们文件输出,然后附加了一些,那我们这里有三个功能,第一个是哎, 第一个是附加时间戳,第二个是增加我们的日制级别,第三个是附加模块名,那这些都是由装饰的一个模块做,嗯,去给他 组合形成的。好的,那后面的就是装饰抽象,那些都是一些编程的定义,我们不用看反,我们主要知道是这增加这几个功能。那我们来看我们的 make 函数,因为老规矩吧,我们看一下这个函数是长什么样的。 ok, 好, 这里因为注注,注注也写的比较多,这里你看我们写了一个 logo writer, 嗯,一看就是那个装饰器的电容链,对不对?那我们这里创建了两个电容链, 哦,还不一样。这里还举了更多的例子,第一个是那个,第一个加的是时间戳,第二个加的是那个报警水平,第三个加的是那个具体哪个模块,对吧? 它是一层加,然后各的顺序是,你看它的顺序就是 file, the model, the level, the times, value, 这是 一样的。那第一个那个装饰念,我们来看一下吧。它首先是创建的一个这个,那我们就要去看一下这边的函数里面,比如说我们想看一下这个,呃,这个是那个 lograter 里面,它定义了一个什么? ok, 他 定义了一个很简单的操作接口,看到没?他就是一个写日子的操作,还有一个销毁,那是不是我们后面所有的装饰的一些功能都必须要包含这个接口呢? 对吧?因为,所以说不然的话他没有办法电视调用,他都必须包含 write 的 一个接口。 ok, 那 这里就继续回去看淡了。 好,这里我们创建了一个嵌一,这里它是说以追加模式打开文件,不覆盖我们的历史日制,然后它就开始写, 对吧?太阳 writer, 这里就用了 malok, 然后大家自己实现的时候看,嗯,用不用吧?因为它是直接追加到文件上的,它的那个写的话,第一个 它就是创建了一个 a p p log, 点 h, 到时候我们应该能看到,没关系。然后第一个念的话,那我们就 release or destroy, 那 我们第一个要干什么呢?我们要给那个就是 a p p log 外面附加一个。 呃,咦,它怎么它在,呃这里 它附加了一个 ssr, 为什么呢?我们待会儿去看一下,看一下这个,这个是给它附加功能的, 看到没有?它的是一个 model decorator crate, 它是跟我们整个最底层的设备链附加一个功能的,那我们附加了第一层,然后就继续附加那个错误等级,错误等级是 error, 看一下他啊,他说的这个是 model, 好 吧,那就是森森这个 model 他 只是传了一个名字进去,他那个我还以为是会用传感器来做, 然后附加了一个,然后再附加一个,那个报警等级也是传到了这里面,然后最后, 然后之后再加了一个时间戳的标,啊,这个就是传进来,然后他应该是在那里给他加一个时间戳的标, 就传完了,然后他通过最外层的对象写入,沿途调用这几个链,看到没?第一个是最基础的,底层的我们要操作的一个对象,然后在附加的链上一层一层的附加, 然后调用完了之后,比如说我们通过最外层的对象写入,这个时候我们就通过这里带了十点错的对象写入,然后沿途调这个链,这个链,这个链,然后进行触发, 他掉了两个, ok, 哦,这里他又改变了一个等级,嗯,这里其实整个东西的话就比较明确了。那我们来看一下简单的一个打印吧。 是这个啊,哎,敲错了。 好嘞, 嗯,是这个,这里他让他执行完了。那我们直接看 log 吧,因为这个最终其实他,嗯,他是在那个文件里面写到文件里面来的。那我们来对照着看, 这有笔 啊,第一个我们写了两个,一个是内容,是那个 read file, 一个是 in it time out, 对 吧? 这里首先我们看它附加的念,第一个是加的最最靠近里层的一个, 这个太大了,看不清楚。最靠近底层的一个 sensor, 我 们先加 sensor, 然后是报警等级 ero, 然后最后加的是那个 time stop 时间戳,对吧?那我们看调这个装饰链,它总共发了两个东西, 第一个发的是那个 read fill, 对 吧?对的上,然后第二个发的是 inittimeout, 对 的,好,然后这里他就把那个嵌一给释放掉了,那第二个他就重新来做了一个一样的,他是追加到那个 app log 里面, app log 里面的话,第一个它先加的时间戳,对不对?我们先把时间戳加到了附加到这个上面,然后再给它加的报警等级,然后给的音符,然后它同样的是发了一个 log start, 对 吧?这里然后一个 background task running 好,然后他就 ok 了,挂了就没了,那说明我们整个逻辑是 ok 的。 嗯,如果大家想看具体的实现,其实它这里面最重要的是一个包装器的,就是包含那个 logo write 的 一个 base 和那个的互相传递,然后大家实现的时候可以去参考。 嗯,对这些,你比如说这里 file login, 然后那个 file decorator 点 c, 然后 log 那 些,这些都是它实现怎么去包装这些东西的一个函数吧。我觉得这里让大家分得比较开,其实最核心的就是在 最底层的是 logrider 去做那个附加嘛?功能附加,然后就是这里, 所以大家做的时候可以去看一下这里是具体怎么实现的,然后具体的一些东西我讲其实也没太大意义,因为现在 ai 时代大家也可以很快的去学的。然后但是如果你不知道怎么实现,我建议你来看一下这个代码也 反而他的一个欠的一个调用,对吧?他为什么要这么写?先把最底层的一个日制写的对象写好了之后,然后他为什么在这个念上去附加功能? ok, 那 我们看这个函数它就是什么, 用了一个那个 x, 它就会去掉这里面,这里面返回了一个新的 logo writer, 对 吧? 这这里面其实可能有点麻烦的点是在于它调用了 maloc, 我 们在做参数的时候可能会偏麻烦一点,相当于它一层一层的念再往后面申请。 然后嘛最终他的那个调用关系,你看嘛,他加了一个背式,就是类似于念表的方式,一层一层的念着走,他念到对嗯,念的尾部 开始调用,一层一层的调到最原始的一个,那个嵌意就是这里面创建的一个嗯,写追加文件的功能。好,那相当于装饰模式的代码。简单的讲解就到此结束了。

真把我气笑了,代码拼审里面竟然又看到了一点 print stack trees。 都五二零二二年了,还有人在埋这样的雷, ai 都写不出来。哎,事情是这样啊,这两天在看呃,在做代码拼审,看的都是高杰同学的提奥代码库。真没想到啊,一眼就看到了这个一点 print stack trees。 哎呀,看到这行代码,我直接大脑荡激了,这难道是本科生写的毕业设计吗?为啥说是他是在埋雷呢?第一个坑啊,你的日制全没了,这玩意直接打印到的标准输出里通常就是控制台, 现在谁还看控制台啊,你的日制完全看不到了。再有啊,项目跑在刀口容器里面,容器一重启,所有报错信息都没了,人间蒸发 对吧?你的 e、 l k 日日平台根本采集不到这些真,线上有问题的时候,你靠什么排查呀,对吧,估计只能靠玄学啊。第二个坑更要命,哎,这东西是同步堵塞的,高病发场景下啊,它会疯狂的吃掉你的 c p o, 吃掉你的私奔 i o, 整个系统瞬间卡死, 这都是血泪教训啊,在之前没少见过线上事故,就因为这一行代码导致的整个服务血崩。正确的做法也很简单啊,用日制框架 java 领着呢 slf, 或者直接用 jcl logback slf 这些都是很好的日制总件。 log 点 arrow, 把日制对象直接传进去, 然后既能保证完整的追战信息,又能异步写入,还能被监控系统直接抓取,这才是生产级的姿势啊。说起扎心的,别管你的 type 是 p 六 p 七还是 p 八,就这一行日日代码就能看出啊,你是不是刻板出身的,是不是真正写过生产级系统? 现在立刻打开你自己的项目啊,全区搜索 print stack trees, 你 看看啊,有几个吧,赶紧改,别等先上,出事了再后悔。

hello, 大家好,我是 fred, 专注从普通小白的视角去分享怎么从零开始用 ai 和 web coding, 提升自己生活和工作效率。很多人装完 codex 第一反应就是马上去让他写代码,但我会让他做另外一件事情,也就是 给他写好 hmd。 因为 ai 其实不怕复杂的任务,怕的是一开始没有规则,没有规则的时候他可能讲太多,改太多,甚至把你不想动的地方也顺手动的。所以说我们这期会先讲怎么让 codex 在 动手之前先知道你的规矩。 第一,什么是 a g m d? 大家可以把 a g m d 理解成 ai 的 一个写作的说明书,它会告诉 codex 这个项目怎么沟通,怎么写代码,哪些安全底线不能碰,哪些操作必须先问 以前这些要求,你可能要每次重复的去讲,去写进这个文件以后,它就会变成一个默认的规则,你不用每次去教 codex 怎么去配合你。 然后第一部分,其就是他的整个的语言的使用规范,因为我日常沟通就用中文嘛,这样去讨论需求和复盘问题其实更顺的。 但是像在代码,包括命令行啊、变量名啊、日制和报错,其还是要保留英文的。原因很简单,就是因为 英文报错可以直接去搜索,方便去定位问题,如果全翻译成中文,反而会降低排查的效率。所以说我的原则是解释用中文,哎,记住信息,保留原样。 第二部分就是它的代码和提交的规范。虽然我们大家都看不懂代码,但是我也不希望 ai 为了去显得完整,去提前写一堆复杂抽象的东西,其当前需要什么东西,就把当前的问题解决干净,如果单个文件太长, 那就去拆主键,拆函数,去拆模块,每次改动尽量小一些,提交清楚啊,每一次的记录,这样后面口袋再去维护的时候,才不会被一大堆的这种十三代码去劝退,对吧? 第三个最核心的点就是安全,与红线类似,像这种密码啊,密钥啊, a p r key 啊,这种是不能够直接写进代码的,然后包括像点 e n v 这种本地配置的文件,也不能提交到仓库,包括日期,也不要输出一些隐私的信息。 像日常的一些小改动,其实可以用一些低摩擦的去执行,但比如涉及到一些接口的结构啊,数据库的制段啊,批量去删除一些文件啊,或者说一些外部的账号和数据,就必须天 先让他停下来跟我确认。其实这不是去增加一些流程啊,而是防止一次自动执行,把一些项目改到不可控的状态。 然后第四个就是它的整个的执行与测试的工作流。就很多时候 ai 说,诶,我已经修好了,其实不重要,就验证通过才重要,你知道吧? 所以说如果命令报错,要如实的去上 ai 报告,然后包括测试失败也不能查,包括修 bug 的 时候,最好去先写一个能够复现问题的测试,再去改代码,就跑完以后能跑测试就跑测试,能跑 nin 就 跑 nin, 这样才能够减少 ai 的 整个的一个幻觉, 想让他看起来完成,但实际上不能用的这种情况。然后最呃第五个呢,是我自己的一个用户习惯,因为我会要求他叫我 fred, 包括我自己的偏好去直奔主题,找一些形式化的确认,能够直接做的就日常 直接做啊,但涉及到一些可能删除啊,密钥啊,权限啊,上传啊,账号操作这种风险点啊,就必须还是跟我确认,这样应该就不是机械的去回复我,而是更贴近我自己的一个工作节奏。 然后像呃目前我的这个 a g m e a i 的 一个工作模式的话,就是遇到熟悉的问题,他会去用一些内置的 skills, 而不是每次都从零开始去乱试,包括改完源码之后去默认跑测试,降低一些低级的语法错误,也不会去做一些多余的发散。 真正高效的写作不是让 ai 写得越多越好,而是在正确正确的这种边界里面把当前的问题解决掉。 所以说我可以给大家看一下当前我整个的一个 h m d 啊,包括刚刚所说到的语言的问题,安全红线的问题,工作流程的问题以及代码标准的问题,和我自己的一些用户偏好,其实跟刚刚讲的是完全一致的, ok。 最后总结一下就是, agent m d 的 本质就是把你反复叮嘱 codex 的 话一次性写清楚,语言怎么用,代码怎么写,安全边界在哪里,什么时候要去验证,什么时候要去确认,都放进去, 它不是让流程变得复杂,而是去减少废话,减少返工。所以说 codex 安装好以后,我建议不要第一时间让它去写功能,先把规矩建立起来,先定规矩,再让 ai 去干活。规则清楚之后,你只需要告诉它目标, 剩下的就是让他按规则去执行。 ok, 我是 fred, 后面我会持续用真实的案例告诉大家怎么把 ai 用进自己的工作流。这就是本期的分享,我们下期再见。

你还在为从零到一搭一个企业级架构而烦恼,还在为解决权限混乱、安全难控发愁吗?策划初级程序员必学开源框架之洛伊洛伊框架帮你完美解决。洛伊框架实现包含以下功能,一个企业级应用需要的通用功能它都有,不用重复造轮子。 项目代码结构介绍 企业项目集成第一步,下载源码并引入项目 修改应用配置,分别是数据库配置和服务器配置,就是这么简单高效。下一作品将录屏实操怎么把落一框架集成到项目中使用点关注不迷路!

这个是程序的主要特点介绍,最大的优势就是纯本地,用的是本地千问三点六三五 b a 三 b 四比特量化版模型,并且拍损代码也是完全透明,不用担心外部安全隐患或信息泄露。主要包括人格设定、 记忆系统、知识库和翻译模型训练这些功能。接下来看一下这个代码,一共一万五千多行,名副其实的尸山代码 程序可以设定不同的人格。先和大白聊聊,就是超能陆战队电影里面的那个大白, 让大白帮忙写个贪吃蛇游戏, 游戏还挺好玩,就是速度有点快,手速跟不太上。 接下来切换人格,就是魔幻手机里面的那个傻妞, 让他这首歌检验下文档编辑能力。 有些符号乱码了,看来还得继续改进。 把他的水晶娃娃手机照片发给他识别一下, 再发个带图的 word, 看能不能都能识别到。 还不错,就是最后识别完他第一次回复会被系统拦截。程序内部有个完成验证,他以为自己回答过一次了, 验证完给在我回答时有些简略,这个还得改下提示词优化一下。 接下来是知识库,可以按照自己的需求构建,这己就演示一下。随便上传两篇文献,正常图片文本文件都是支持上传的,图片会先自动提取文字,然后分块存入,每块知识都有编码知识库,目前就这两篇文献 让傻妞总结知识库的内容。 有时候本地模型会陷入思考循环,导致长期没反应,软件界面就显示超时了,让它继续就好了。 还好参考文献没瞎编, 让它再写首诗, 再验证下它的浏览器控制功能,在 b 站随便搜个啥,就王安石吧, 可以,基本没问题。 再让他写一万字关于自己的小说, 使用 raggy 分 块来写,防止他直接生成超长文本把自己撑爆。 哎,又死循环了。其实从步骤看,他已经写高了,让他继续完成 好了。不错,就是剧情不太对。陆小谦成修手机的了,跟电视剧里的设定不太一样。 再验证下翻译功能, 主要是复制翻译,它可以监听电脑全职剪贴版内容,让 ai 翻译 截图。翻译截图就是 ocr, 先提取文字,后面步骤都一样。除了翻译,它还会解释翻译的内容的具体含义,辅助理解。这个模型温度设置可能有点高,有些慢。 让傻妞给陆小谦写一封信, 不得不说写得还不错。 试一下模型训练就训练一个,一点五 b 模型演示一下, 训练完成保存为 g g u f 了。 试一下,看训练出的模型能不能用。 回答简直牛头不对马嘴,看来小模型确实差点意思。 最后让 ai 自己总结一下经验,这个经验文件内容每次都会随发布的任务一块给 ai, 帮助提升效率。 完了,就这样了,再见各位!

今天我们给大家介绍一个开源的项目,叫 landview, 这个开源项目是我们经常用来做一些大模型日制监控。我们给大家先看一下软件,你可以看到我们在 define 里面定义了这样一个工作流程,那么它可以把整个一个工作流程到底是怎么运行的,它都可以定义在整个一个 可以去做一个消息的这样一个跟踪的一个记录,你可以看到这个里面它都可以记录的会非常完善,包括它的时间点、代码运行,你这个 pdf 文档的分析,加一层的格式,它这个地方都是可以定义的非常清楚的。好,那我们主要给大家来 介绍一下这个软件是怎么安装的,那么 linux 它也是可以这个独立部署的部,部署在你自己的服务器上,当然它也是有云端 cloud 的 这样一个 萨斯的这样一个系统。我们首先先看一下它的整个一个技术站,它的整个技术站还是比较复杂的,它前端有一个 ui 的 界面,就是这个后端 ui 的 界面, 或者它有一些 api, 就是 restful 的 api 封装的这些 sdk, 它有 java 的, 有 python 的, 有 java script 的, 又非常多,它通过这个 ui api 和 sdk 直接跟它的后端去连接,后端它也是一样,它有一个叫 web server, 我 们给大家看一下 它安装完成之后,它有一个 web server, 就是 linux web server, 还有一个就是 linux 的 worker, 这个主要是一个总体协调的这样的一个 后端的一个服务,这个你有些后端的服务,它要专门做一些工作的时候,它就会分配给这些 worker 去做。当然它还有一些数据的存储,它是放在这个 osgreico, 包括 clickhouse, 还有些文件包括它也是可以放在 miniio 里面, 当然它有些消息队列什么的,它是用这个 radis 的 技术站,所以我们可以看到它的整体的这样一个技术架构,它相对来讲还是会比较复杂的,这样的一个技术架构,但是我们使用起来会比较简单啊。好,我们看看它到底是怎么安装的,它安装也是能够支持 dog 的, 这样的一个安装环境会比较简单,我们给大家来介绍一下。首先你需要 安装它,建议你需要有一个 dog 或者 dog compose 的 这样的一个环境,当然你可以在 mac 电脑上装叫 dog desktop, 我 前面给大家看的演示的这个,这个就是 dock desktop, 因为我是安装在 mac 电脑上面的,这是一个。第二个,你要你的本地最好能够装一个 git, 从远程的这个 gitap 上面能够把它的原代码能够拉下来,它主要是要有这样两个环境, 有了这个两个环境之后,首先你还是要把这个给通过这样的一个命令,把它的原始的代码给下载到你的本地,我是下载在这边呢,给大家看一下,是下载在这的,下载完了之后,你到这个目录里面去,它这个里面会有一个非常重要的一个文件,这个 doc compose 有 这样的一个配置文件, 你就可以去把这样的一个命令 up compose, 这个 app 自动它就会集起来,之后如果顺利它就会自动的会集起来,之后你通过这个 local host 三千端口你就可以访问了,就就像我这样 local host 通过三千端口就可以去访问了, 那你访问进去,你可能刚开始你首先要注册一个管理员的这样的一个账号,注册完成之后你就登录进去之后就是这样的一个界面,你要设一些你的组织和你要管理的这些项目,他这个叫 program, 当然你也可以去新增一个,也是可以,只是说 可以新增一个,新增完了之后你可以创建一个项目的这样的一个 api 的 key, 那 么创创建出来之后,它会有这样有 secret key 跟 public key, 这个是非常重要的。还有一个就是 base ui, 就是 你这个服务器的地址,你一定要把这个保存好,当然你也可以保存在这个 emv 的 这样一个文件里面,就说你可以保存在你的 emv 的 这样一个文件里面也是可以的。 像我保存你也可以保存在这个文件里面,也是可以的,是把这个内容贴进去就可以了,你可以保存在这里里面,这个也是可以的,这种好保存完了之后呢,那么你就要这个福气,你要 你这个虽然是 linux 跑起来了,但是你要在你的有些应用里面要做一些设置,那这个时候你可以去看一下不同的应用,他可能设置的不太一样,我们可以给大家看一下啊。如果你要开始 chris 你 的这个日记,那么他这个里面会给我们介绍的是说你在 哪些的 plug in 里面,你可以去做这样一些事情,如果你是通过这个 open ai 的 sdk, 你 到底是怎么来处理的? land fuse, land chain, 你 到底是怎么来处理的?你是到底怎么来弄这个东西的?这个是通过代码的方式, 当然你也是可以通过像我这边,因为我是定义了一个 define 的 这样一个应用,那么在这个应用里面你也是可以看到它也是能够支持的,在这个地方有个监测,在这个监测里面你可以要要起用 使用 lambuse 就 可以了,你要去配置一下你前面的那个密钥公钥和你的 host 的 这样一个地址,那么你配置进去就可以了。 当你去访问这些东西的时候,当你要去访问访问这些东西的时候,它就自动的,它会把所有的这个日制都会更新到这个 lambuse 的 这样的一个后台里面去打定时间,那么你就可以看到像我这样执行的这样一个结果,它到底有多少个节点,有多少时间, 所谓的这些记录它都会记录在你的后台里面,有了这些数据之后,下一步我们就可以对这个应用做一些分析,做一些优化,它这个是这样,好,今天就这样我们这样的一个 infuse 到底是怎么样安装和部署的?在本机上这个进行安装的,我们就给大家介绍到这,好吧。