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 或者 ...
主要介绍了视频集成解决方案,包括视频监控数据流转、音视频传输协议对比、协议接入、主流的流媒体协议、播放协议对比、主流的封装格式、主要视频编码、常见的设备与连接方案、术语解释、业务场景、视频接入平台、流媒体服务选型以及平台选型等方面的内容。通过这篇文章,读者可以了解到视频集成常见的解决方案,并从现有方案中学习总结,以应对日益复杂的业务场景。 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…) * * @aut ...
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?方法变量是在它们使用的代码附近定义还是在方法的开始处定义? 命名:字段/常量/变量/类名的命名 ...
简介花了点时间装饰了一下 GitHub 主页, 感觉好过得去 🙉. GItHub 个人主页相关的项目非常多, 也没有一个个去尝试, 所以这里先做一个记录, 先做一个资源收集, 等有时间再去折腾. 目前的效果如下: dong4j 的 GitHub 主页 统计类Metrics 获得类似上图的 GitHub 数据统计,需要用到一个在线工具「Metrics」,打开网站之后,在左侧输入你的 GitHub ID,稍等一会,就会返回右侧所有和你相关的数据。 GitHub Stats Card自述文件中获取动态生成的 GitHub 统计信息 –> github-readme-stats Most used languages自述文件中添加使用编程语言对比统计图 –> github-readme-stats Github Profile Trophy添加奖杯信息–> github-profile-trophy GitHub Readme Activity Graph动态生成的活动图,用于显示过去 31 天的 GitHub 活动。 –> github-readme ...
安知鱼主题自带朋友圈功能, 不过需要自行部署后端, 下面说说我的部署过程. 创建朋友圈页面在 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"); }, ...
自建 Hitokoto 服务Hexo 添加 RSS 订阅功能Hexo 自定义加载动画 简介同样是因为默认的 https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js 已无法打开, 所以参考 self-hosted busuanzi 在本地服务器自建一个. 部署根据 官方文档 使用 docker-compose 直接部署: 123456789101112131415161718192021services: busuanzi: image: xcsoft/busuanzi:latest ports: - 8888:8080 volumes: - ./data/config.yaml:/app/config.yaml # 如果不需要修改首页, 可以不需要挂载 - ./data/dist/index.html:/app/dist/index.html environment: WEB_LOG: true WEB_DEBUG: false ...
前言最近使用的 Hexo 主题 hexo-theme-anzhiyu 默认的随机一言接口被限流了, 根据官方文档在家里的服务器上搭建了一个, 目前用于我的博客. 部署根据 官方文档 使用 docker-compose 部署: 123456789101112131415161718services: hitokoto_api: image: hitokoto/api:release container_name: hitokoto_api hostname: hitokoto_api environment: NODE_ENV: production url: https://你的域名 api_name: blog redis.host: 你的 redis ip redis.port: 你的 redis 端口 redis.password: 你的 redis 密码 redis.database: 你的 redis 数据库 ports: - 8888:8000 resta ...
Hexo 博客添加 RSS 订阅功能 插件 GitHub https://github.com/hexojs/hexo-generator-feed 安装 hexo…… 这篇文章介绍了如何在 Hexo 博客中添加 RSS 订阅功能。需要使用时光插件,并提供了 GitHub 地址。在配置 RSS 时,可以选择原子或 RSS2 的类型,设置文件路径,决定展示文章的数量,还可以选择包含文章的全部内容或摘要。同时,也可以自定义订阅图标和订阅内容的顺序。在部署后,直接在根目录中访问配置的文件即可使用 RSS 订阅功能。 插件 GitHub 地址:https://github.com/hexojs/hexo-generator-feed 安装 hexo-generator-feed 插件1npm install hexo-generator-feed --save 修改 _config.yml 配置1234feed: type: atom path: atom.xml limit: false type: RSS 的类型 (atom/rss2)path: 文件路径,默认是 a ...
前言在老东家花了一年的时间,基于当时最新的 Spring Boot 2.5.x 写了一套脚手架工程,经过 1 年多的迭代, 这套脚手架已在技术中心多个部分应用. 脚手架包含最底层的 maven 依赖管理, 可以说是整个工程的灵魂, 期间重构过 3 次, 这个后面再说.第二层是核心模块层, 就是我们常见的 core 包, 但是也分为至少 8 大模块.第三层是基于 Spring Boot 2.5.x 封装的 starter 层, 这个层是整个脚手架工程的精髓所在, 也是我们后续要重点介绍的.第四层是支撑层, 包括 Maven 插件和 IDEA 插件.最后当然是示例工程, 包含每个 starter 组件的使用方式. 写这套脚手架的时候正好赶上 业务中台 火热的时期, 因此比如通用的 用户中心, 支付中心等也应运而生, 但是这部分涉及到公司的业务流程, 后面将不会过多描述. 今天决定开始新一轮的重构, 基于 Spring Boot 3.3.x 来写一个企业级的脚手架工程, 主要考虑以下几点: 想体验一下最新的 Spring Boot 3.3.x 与 Spring AI; 最新的 Sp ...