新时代码农
未读首先我们需要明确什么是 基础框架 以及 基础框架 能给我们带来怎样的便利从而方便开发者快速根据业务需求构建可实施的业务项目.
1.1 什么是基础框架1.1.1 定义
框架(framework)是整个或部分系统的 可重用 设计,表现为一组抽象构件及构件实例间 交互 的方法,另一种定义为,框架是可被应用开发者定制的应用 骨架。
框架是一个 可复用 的设计构件,通常以 构件库 的形式出现,但构架库只是框架的一个重要部分,框架的关键在于框架内对象间的的交互模式和控制流模式。
从定义可以得出, 框架是一种 可复用 构件, 以 构件库 的方式加入到业务代码中, 从而避免重复开发达到复用的目的. 每个公司都会或多或少根据自己公司业务封装内部的开发基础框架. 比如蚂蚁金服基于 Spring Boot 自研的 SOFA, 属于金融级别的微服务框架; Vert.x 基于 Netty 封装的基于事件的异步框架; Dubbo 是一个高性能的、基于 Java 的开源 RPC 框架等.
考虑到面向的领域,以及实现编码实现,我们可以将将框架至少分为三类:
基础类库: 包含多数项目所需要的类库, 开发人员将其作为 ...
AI:人工智能
未读
越来越多的企业和个人希望能够利用 LLM 和生成式人工智能来构建专注于其特定领域的具备 AI 能力的产品。目前,大语言模型在处理通用问题方面表现较好,但由于训练语料和大模型的生成限制,对于垂直专业领域,则会存在知识深度和时效性不足的问题。在信息时代,由于企业的知识库更新频率越来越高,并且企业所拥有的垂直领域知识库(例如文档、图像、音视频等)往往是未公开或不可公开的。因此,对于企业而言,如果想在大语言模型的基础上构建属于特定垂直领域的 AI 产品,就需要不断将自身的知识库输入到大语言模型中进行训练。
目前有两种常见的方法实现:
微调(Fine-tuning):通过提供新的数据集对已有模型的权重进行微调,不断更新输入以调整输出,以达到所需的结果。这适用于数据集规模不大或针对特定类型任务或风格进行训练,但训练成本和价格较高。
提示调整(Prompt-tuning):通过调整输入提示而非修改模型权重,从而实现调整输出的目的。相较于微调,提示调整具有较低的计算成本,需要的资源和训练时间也较少,同时更加灵活。
综上所述,微调的方案投入成本较高,更新频率较低,并不适合所有企业。提示调整的方案 ...
2. 技术中心组织架构2.1 整体架构
技术中心由 2 个业务线和 5 个职能团队构成。其中事业线分为为: 业务部门一、业务部门二
职能团队为:开发团队、 测试团队、产品团队、UI 设计团队、运维团队和实施团队;
技术中心领导团队构成由 技术中心总负责人、技术负责人、产品负责人和各事业线项目经理以及各团队 Leader 构成,实行双线管理,双岗双责机制;
2.2 工作汇报机制
各事业线人员向项目经理汇报;
产品团队、开发团队、测试团队、运维团队向各团队 Leader 汇 报,各团队 Leader 技术负责人和产品负责人汇报;
项目经理、实施 Leader、 技术负责人和产品负责人向总负责人汇报;
2.3 部门划分与职能2.3.1 部门一界定各部门的职责范围
2.3.2 部门二界定各部门的职责范围
2.4 团队划分与职能
2.4.1 产品开发团队产品开发团队职责
技术引领与支持:关注国内外行业前沿发展动态及信息,研究并应用先进技术,管理公司整体核心技术,规划和引领公司开发技术发展,满足公司战略对技术提出的要求,以及系统更新产品升级的技术需求,向业务部门提供技术支持。
标 ...
1. 背景在 树莓派 + 大方摄像头 打造婴儿监控 中简单介绍了通过刷大方摄像头第三方固件来解锁更多功能, 比如 RTSP, MQTT 等, 这里我们就使用 RTSP 结合树莓派来打造一个直播间.
2. 直播架构复杂的架构图:
简单的架构图:
2.1 推流工具
ffmpeg:https://www.ffmpeg.org/download.html
OBS studio:https://obsproject.com/download
2.2 拉流工具
ffplay 播放器: https://www.ffmpeg.org/download.html 。
cutv www.cutv.com/demo/live_test.swf flash 播放器。
vlc 播放器。
ijkplayer (基于 ffplay): 一个基于 FFmpeg 的开源 Android/iOS 视频播放器。开源,API 易于集成;编译配置可裁剪,方便控制安装包大小;支持硬件加速解码,更加省电简单易用,指定拉流 URL,自动解码播放.。
2.3 流媒体服务器
SRS :一款国人开发的优秀开源流媒体服务器 ...
1. 背景6 月儿子诞生, 又有折腾的接口了.
儿子睡着后会放到主卧, 老婆在客厅, 我在书房, 为了监控儿子的睡眠状态, 开始折腾家里的闲置设备.
2. 目标
使用小米的大方摄像头捕获儿子的实时视频, 如果儿子动了就报警;
使用树莓派搭建 MQ 服务器, 将大方的告警推送到手机上;
3. 整体架构
大方摄像头监控儿子, 如果监测到动作, 这通过自带的 MQ client 发送动作告警;
树莓派监听特定 topic, 如果符合预设值则通过 bark 发送动作告警;
妈妈收到 bark 消息, 前去查看儿子是否需要宝宝;
完美的闭环
4. 实施步骤4.1 大方摄像头刷固件小米的大方摄像头官方固件不支持自定义 MQ, 感谢大佬开源了第三方固件, 感谢开源.
大方色摄像头第三方固件 支持大方摄像头, 小方摄像头等多款摄像头, 提供了 RTSP, MQ, Telegram 等集成服务. 有了 RTSP 服务后, 可以接入 HomeKit 和 Home Assistant.
刷固件的教程官方写的非常详细, 这里提醒一点:
10.你应该看到蓝色 LED 闪耀 5 秒钟(不闪烁)并开始移动( ...
1. 背景因为 DDNS-GO 接入了阿里云的 DDNS 服务, 会出现频繁的调用配置的 URL 去获取公网 IP 并更新到阿里云, 如果部分 IP 查询网站设置了请求限制, 将导致我的域名失效.
因此考虑使用 Nginx 来搭建一个获取公网 IP 的服务, 用来给 DDNS-GO 使用.
2. 使用 Nginx在网上查询资料后, 只需要对 Nginx 进行简单的配置即可:
123456789101112server { listen 8000; listen [::]:8000; server_name ip.xxx ip.yyy; server_tokens off; location = /ip { add_header Content-Type text/plain; access_log off; return 200 "$remote_addr\n"; }}
然后使用 curl http://ip.xxx:8000/ip 或者 curl ...
主要介绍了视频集成解决方案,包括视频监控数据流转、音视频传输协议对比、协议接入、主流的流媒体协议、播放协议对比、主流的封装格式、主要视频编码、常见的设备与连接方案、术语解释、业务场景、视频接入平台、流媒体服务选型以及平台选型等方面的内容。通过这篇文章,读者可以了解到视频集成常见的解决方案,并从现有方案中学习总结,以应对日益复杂的业务场景。
1. 目的随着承接的项目逐渐增多, 且大多数项目都会涉及到视频监管需求, 为了避免重复调研开发, 加快项目上线速度, 这里汇总总结了多种业务场景并提出对应的解决方案, 一方面是作为技术知识积累, 让团队人员了解视频集成常见的解决方案, 二是可以从现有方案中学习总结, 以应对日益复杂的业务场景.
2. 领域知识2.1 监控数据流
视频监控数据流转主要经过下面 5 个过程:
采集: 通过硬件设备采集音视频数据, 如果硬件设备支持, 还可以对数据进行粗加工, 比如添加水印;
推流: 设备端将音视频数据进`行编码压缩(H.264/H.265)后发送给流媒体服务器, 一般使用 RTSP (延迟最低);
流媒体处理: 负责转码, 传输, 数据 ...
缘起最近一段时间在开发 IDEA 插件, UI 界面需要使用到国际化配置, 于是就看了看 IDEA 是怎么实现的, 发现很简单, 正好能用到框架开发上.
打算为每个 atom-kernel 模块配置一个国际化配置, 同时将错误信息配置化. 因为是框架底层的组件, 如果使用 Spring Boot 的 i18n 实现就太重了, 因此需要一种超轻量级的实现方式.
IDEA 中如何实现 i18nIDEA 使用 ResourceBundle 这个类实现了 i18n, 源码如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556/** * 特定作用域捆绑包的基类(例如“vcs”捆绑包、“aop”捆绑包等)。 * 使用模式: * 创建一个扩展该类并为当前类构造函数提供目标bundle路径的类; * 可选地在子类中创建静态facade方法-创建单个共享实例并委托给它的getMessage(String,Object…) * * @author ...
AI:人工智能
未读
监控告警模块用于实时监控各类设备数据,通过采集、分析和处理数据,生成有价值的指标和警报信息,并向管理员发送通知,确保业务稳定运行。
1.1 目标监控告警模块用于实时监控各类设备数据,通过采集、分析和处理数据,生成有价值的指标和警报信息,并向管理员发送通知,确保业务稳定运行。
保持业务稳定:监控告警模块需要实时监控设备运行状态,并能够及时发现问题和异常情况,及时发出告警通知并迅速响应异常,以便管理员采取及时措施。
改善服务质量:监控告警模块支持对设备数据进行采集和分析,生成有价值的指标和警报信息,及时发现并解决问题,避免用户受到影响,提高用户体验。例如通过监控设备的在线率,当出现大规模的设备离线时,能第一时间介入解决问题,避免设备因故障导致客户业务受阻。
1.2 功能
主要包括数据采集、数据分析、告警通知、告警处理、数据展示、数据管理界面等多个功能模块。
数据采集:负责采集各个模块的数据,包括但不限于业务平台系统、DB、设备等的数据。采集的数据会存储到对应的数据库中,供后续分析使用。
数据分析:负责对采集到的数据进行处理、分析和计算,从而得出有价值的指标和警报信息。数据处理模块 ...
为什么你不爱写技术文档?以及怎样才能写好技术文档?我以前看过一个投票,盘点程序员不喜欢的事,有两条和文档相关:
不喜欢写文档;不喜欢项目文档太少。
看起来很矛盾,却很现实。基本上大家都认同:“项目文档很重要”,然而我们在项目中总是短期高估文档的重要性,而长期低估文档的重要性。
结果就是口号喊的很响:要重视文档、要写好文档、要多写文档,然而随着项目的推进,总有比文档优先级更重要的任务,文档的优先级总是被有意无意推迟,导致项目的文档缺失、老旧、无人维护。
1.1 为什么不爱写文档?那么为什么程序员都不爱写文档呢?我总结了一下大致有下面这些原因。
不知道怎么写
不知道怎么写文档的应该占很大一部分比例。
太忙没时间写或者懒得写
程序员确实很忙,但总有不那么忙的时候,却也很少见有人利用这时间去写文档。包括我自己也这样,有时候没那么忙的时候,宁可去想想怎么重构下代码,却很少会愿意去写文档,主要还是太懒。
因为是敏捷开发,所以不用写文档?
对于这个问题,我其实反驳过多次,敏捷宣言 最后一句话明确指出:「尽管右项有其价值,我们更重视左项的价值。」也就是说敏捷从来没有否认文档的价值,只 ...
1. 为什么用构件管理工具
一个项目就是一个工程
如果项目非常庞大,就不适合使用 package 来划分模块,最好是每一个模块对应一个工程,利于分工协作。借助于构件管理工具就可以将一个项目拆分成多个工程
项目中使用 jar 包,需要“复制”、“粘贴”项目的 lib 中
同样的 jar 包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。借助于构件管理工具可以将 jar 包保存在“仓库”中,不管在哪个项目只要使用引用即可就行。
jar 包需要的时候每次都要自己准备好或到官网下载
借助于构件管理工具我们可以使用统一的规范方式下载 jar 包 L
jar 包版本不一致的风险
不同的项目在使用 jar 包的时候,有可能会导致各个项目的 jar 包版本不一致,导致未执行错误。借助于构件管理工具,所有的 jar 包都放在“仓库”中,所有的项目都使用仓库的一份 jar 包。
一个 jar 包依赖其他的 jar 包需要自己手动的加入到项目中
FileUpload 组件->IO 组件,commons-fileupload-1.3.jar 依赖于 ...
新时代码农
未读让我们来谈谈代码审查。如果你花几分钟时间搜索有关代码审查的信息,你会看到很多文章讨论为什么代码审查是一件好事.
你还会看到很多关于如何使用代码审查工具的文档,比如 Upsource。但你不太容易找到一份指导你在审查他人代码时应该关注什么的指南。
可能没有明确文章解释应该寻找什么的原因是:有很多不同的事情需要考虑。并且,像任何一组要求(功能性的或非功能性的)一样,不同的组织对于每个方面都会有不同的优先级。
由于这是一个很大的主题,本章的目标只是概述在执行代码审查时,审阅者可能会关注的一些事情。确定每个方面的优先级并保持一致性检查是一个足够复杂的话题,足以成为一个独立的章节。
在审查他人的代码时,你寻找什么?无论你是通过 Upsource 这样的工具还是在与同事一起走查他们的代码,无论情况如何,有些东西比其他东西更容易评论。一些例子:
格式化:空格和换行在哪里?他们使用制表符还是空格?花括号是如何排列的?
风格:变量/参数是否被声明为 final?方法变量是在它们使用的代码附近定义还是在方法的开始处定义?
命名:字段/常量/变量/类名的命名是否符合 ...
安知鱼主题自带朋友圈功能, 不过需要自行部署后端, 下面说说我的部署过程.
创建朋友圈页面在 Hexo 博客根目录下打开终端,输入
1hexo new page fcircle
打开 source/fcircle/index.md,添加一行 type: 'fcircle':
12345678---title: 朋友圈date: 2022-11-21 17:06:17comments: falseaside: falsetop_img: falsetype: "fcircle"---
主题配置配置菜单:
123menu: 友链: 朋友圈: /fcircle/ || anzhiyu-icon-artstation
开启朋友圈:
123456# 朋友圈配置friends_vue: enable: true vue_js: xxx apiurl: xxx top_background: xxx
参数
备选值/类型
解释
enable
boolean
【必须】是否启用
vue_js
url
【必须】朋友圈前端 ...
参考 【Hexo博客】自定义Butterfly主题 Loading 加载动画 和 Hexo的Butterfly下自定义加载动画之小汽车动画的实现 实现了在 anzhiyu 主题下的自定义加载动画。
添加 loading 模版新建目录: themes/anzhiyu/layout/includes/loading/load_style, 添加如下 pug:
car.pugdefault.puggear.pugheo.pugimage.pugironheart.pugpace.pugscarecrow.pugtriangles.pugwizard.pug12345678910111213141516171819202122#loading-box .carplayscript. const preloader = { endLoading: () => { document.getElementById('loading-box').classList.add("loaded"); }, ...