首页 文章 精选 留言 我的

精选列表

搜索[非自回归核心技术],共10007篇文章
优秀的个人博客,低调大师

深度丨详解 Amazon Go 三大核心技术

12 月 5 日,亚马逊发布 Amazon Go 震惊业界。雷锋网第一时间研究了专利文件,并采访资深计算机视觉算法工程师,最终出文从2份专利文件,一窥Amazon Go到底藏了什么黑科技? 今天雷锋网特地采访了无人零售商店创业者陈维龙(微信:daoyuan3)为大家更加详细地解读 Amazon Go 以及无人零售商店项目。陈维龙毕业于中山大学,曾亲自参与并实施过多套类似的无人零售解决方案系统,对整个项目的流程化体系有着较深的认知和实践经验。 Amazon Go 系统构成 陈维龙把 Amazon Go 系统“拆分”为三部分:人/货架/进出口。其中硬件软件构成如下表: 人 货架 进出口 硬件 手机 摄像头/压力/红外/体积位传感器/光幕 二维码识别器/自动门 软件 专门应用 库存管理系统 定制系统 布局如下图所示: 货架墙壁上安装多个摄像头,多种传感器埋在每层货架

优秀的个人博客,低调大师

Erupt 1.7.3 发布、非拖拽、非代码生成、零前端代码,纯注解开发企业级 Admin

Erupt 通用后台管理框架 Erupt 是一个低代码全栈类框架,它使用Java 注解动态生成页面以及增、删、改、查、权限控制等功能。 零前端代码、零 CURD、自动建表,仅需一个类文件+简洁的注解配置,快速开发企业级 Admin 管理后台。 提供企业级中后台管理系统的全栈解决方案,大幅压缩研发周期,专注核心业务 本次更新内容 🐞 修复EruptUser对象与EruptRole对象修改时由于存在游离对象所产生的bug 🐞 修复树视图下 choice 组件数据不自动清空的 bug 🐞 修复oracle数据源 EruptOperateLog 表无法自动创建的bug 🐞 修复oracle数据源 EruptJobLog 表无法自动创建的bug 🐞 修复获取当前用户信息后,数据转变为游离状态的bug 🌟 关闭一对多弹出层点击框外就自动关闭能力 🌟 优化 erupt-monitor 手机端布局 🌟 优化 tab_table 组件滑动条出现的最大宽度 🌟 限制 table 表格最大宽度 🌟 优化审计数据用户关联对象,EruptUser对象替换为数据结构更简单的EruptUserVo对象 🌟magic-api升级至1.3.3 🌟 view注解附件与图片支持全路径网络资源的展示 🌟 @RowOperation 注解新增后置JS表达式执行,实现OperationHandler接口,afterJS方法即可 🌟 多数据源支持自动建表,支持jpa额外配置项(多数据源配置发生破坏性更改,详见:多数据源配置) 项目官网:www.erupt.xyz @Erupt( name = "简单的例子", power = @Power(importable = true, export = true) ) @Table(name = "t_simple") //数据库表名 @Entity public class Simple extends BaseModel { @EruptField( views = @View(title = "文本"), edit = @Edit(title = "文本", notNull = true, search = @Search) ) private String input; @EruptField( views = @View(title = "数值", sortable = true), edit = @Edit(title = "数值", search = @Search) ) private Float number; @EruptField( views = @View(title = "布尔"), edit = @Edit(title = "布尔", search = @Search) ) private Boolean bool; @EruptField( views = @View(title = "时间"), edit = @Edit(title = "时间", search = @Search(vague = true)) ) private Date date; @EruptField( views = @View(title = "滑动条"), edit = @Edit(title = "滑动条", type = EditType.SLIDER, search = @Search, sliderType = @SliderType(max = 90, markPoints = {0, 30, 60, 90}, dots = true)) ) private Integer slide; @EruptField( views = @View(title = "下拉选择"), edit = @Edit( search = @Search, title = "下拉选择", type = EditType.CHOICE, choiceType = @ChoiceType(fetchHandler = SqlChoiceFetchHandler.class, fetchHandlerParams = "select id,name from e_upms_menu" ) ) ) private Long choice; } 特性 | Features 自动建表:表结构自动生成,无需手动建表 易于上手:会简单的Spring Boot基础知识即可 使用简单:仅需了解@Erupt与@EruptField两个注解即可上手开发 代码简洁:仅需一个.java文件, template、controller、service、dao 都不需要创建 功能强大:动态条件处理,逻辑删除,LDAP,自定义登录逻辑,RedisSession,操作日志等 多数据源:支持:MySQL、Oracle、SQL Server、PostgreSQL、H2,甚至支持MongoDB 高扩展性:支持自定义数据源实现、自定义登录逻辑、动态权限管理、生命周期函数、自定义 OSS 大量组件:滑动输入、时间选择、一对多、图片上传、代码编辑、自动完成、树、多对多、地图等23类组件 丰富展示:普通文本、二维码、链接、图片、HTML、代码段、iframe、swf等 低侵入性:几乎所有功能都围绕注解而展开,不影响Spring Boot其他功能或三方库库的使用 前后端分离:后端与前端可分开部署 响应式布局:支持PC端手机端等各种规格的设备中使用 自定义页面:支持自定义页面,自定义弹出层,且支持:原生H5 / Freemarker / Thymeleaf等方式渲染 前端零代码:前端布局自动构建,一行前端代码都不用写 无需二次开发:仅需引用 jar 包即可 ! 完全不需要了解Angular / React / Vue / Jquery 而且不需要了解JavaScript / HTML / CSS 甚至不需要了解Spring MVC / Mybatis / SQL 在线体验 | Demo 演示地址:https://www.erupt.xyz/demo 账号密码:guest / guest 支持主流 4 款现代浏览器,以及 Internet Explorer 11+,可直接运行在 Electron 等基于 Web 标准的环境上 演示截图 | Screenshot⛰

优秀的个人博客,低调大师

KPlayer —— 非图形服务器直播工具

KPlayer KPlayer可以帮助你快速的在服务器上进行视频资源的循环直播推流。本仓库为libkplayer的golang封装版本 查看帮助文档:https://kplayer.net/p/1 kplayer是什么 kplayer为你提供最小化成本搭建视频推流功能的工具,最优的推流方案OBS或其他软件依赖与xWindow或图形化界面的需要,不适合在服务端与云服务器上进行部署。KPlayer无需依赖图形化界面,您可以使用任意一款你喜欢的发行版本即可实现多视频资源无缝推流的方案。 只需要定义您的配置文件,针对定制化的修改。即可达成想要的结果。并且可以24小时无人值守的方式运行它。 有什么特性 多视频资源无缝推流 媒体资源推流,通常是单个资源文件连续推流。如果你有这方面的经验,那么肯定使用过ffmpeg或者obs的方案来进行推流直播。 与ffmpeg相比。想要实现多资源连续推流的方式通过concat配合-loop可以达到或者使用循环运行ffmpeg命令来长时间推流。但是无法动态控制视频资源的顺序,而且在视频存在差异性的情况下,必须保证视频参数的高度一致性。类似分辨率,码率,sar,dar,声道数量等造成极大的不便。使用命令行循环推流则会导致资源切换时会出现资源断流的情况,严重时会出现编码数据不匹配(绿屏、音画不同步...) 与obs相比。obs更依赖图形化界面的GUI操作,依赖实时编码。这在服务器上将变得不太友好。 预生成缓存,节省硬件资源 如果你的场景是循环推流,并不需要进行实时编码。KPlayer提供缓存机制,将上一次推流的数据缓存下来。下一次直接使用缓存文件,这将极大的降低你的机器CPU与内存占用量,仅使用较小的资源可以完成不间断推流。 KPlayer也支持在高性能机器上预生成缓存,传输至性能较小的服务器上直接使用缓存推流。降低资源占用量 支持多输出资源 KPlayer不仅支持输入资源的定义,对输出资源也允许定义多个输出资源并行推流。这意味着,你可以在不同的推流平台上显示一致的视频画面。 同时支持你配置重连机制,在某些原因下由于服务端的意外断开。你可以允许KPlyaer不被中断,并在某个时间段后进行尝试重新连接。 提供丰富的API接口辅助第三方应用控制 若具备基础的编码能力,KPlayer支持你通过jsonrpc调用的方式去控制它的播放行为。包括但不限于添加/删除输入资源文件、添加/删除输出资源、暂停、跳过等等等... API是动态控制的,不必重新运行它。 提供可热拔插的插件机制,并提供自定义插件开发 丰富视频资源内容,我们提供了插件的机制。通过插件的配置,你可以实现插件提供的各种功能。例如在直播资源中添加一行文字、添加一个图片水印、显示时间、进度条等等... 并且支持你开发自定义插件提供给其他人使用。 什么样的设计 编码语言 KPlayer从v0.5.0以上由以下编程语言构成。 C++17 实现编解码与输入输出的核心逻辑 Golang 实现用户交互态的业务逻辑 Rust/C++ 提供插件的实现功能 相较于v0.4.x的版本,我们将各个功能解耦方便迭代开发提供更好的迭代周期和功能开发 解耦设计 KPlayer的整体控制逻辑依赖于消息队列通信,在主程序编码中可以看到大量的消息事件的处理,方便各模块中的功能解耦。同时多线程间彼此通过消息通信进行逻辑解耦 在对libkplayer与外界交互信息上,使用protobuf进行数据交互。如果有幸你参与到插件的开发工作中来,相信这会对你带来较大的便利 插件机制 得益于插件的设计逻辑,可以丰富推流视频中的内容。v0.4.x内的插件依赖于动态链接库的加载,不好的地方就是插件行为将变得不可控(读取机器磁盘文件、访问网络资源)... 得益于WebAssembly的出色设计,我们使用wasm来完成插件的编码与运行。我们可以严格控制每个插件的可访问行为。在无授权的情况下,它并不能访问任何关于你机器上的任何数据。你可以放心的使用它而不必担心会存在恶意插件或插件被篡改的情况产生。并且你可以使用你熟悉的任何语言来编写插件,只要它符合wasm标准 未来会支持什么 提供更多的插件 提供更多的辅助工具降低入门成本 完善的辅助文档

优秀的个人博客,低调大师

用python画小猪佩奇(非原创)

略作改动: # coding:utf-8 import turtle as t t.screensize(400, 300, "blue") t.pensize(4) # 设置画笔的大小 t.colormode(255) # 设置GBK颜色范围为0-255 t.color((255,155,192),"pink") # 设置画笔颜色和填充颜色(pink) t.setup(840,500) # 设置主窗口的大小为840*500 t.speed(10) # 设置画笔速度为10 #鼻子 t.pu() # 提笔 t.goto(-100,100) # 画笔前往坐标(-100,100) t.pd() # 下笔 t.seth(-30) # 笔的角度为-30° t.begin_fill() # 外形填充的开始标志 a=0.4 for i in range(120): if 0<=i<30 or 60<=i<90: a=a+0.08 t.lt(3) #向左转3度 t.fd(a) #向前走a的步长 else: a=a-0.08 t.lt(3) t.fd(a) t.end_fill() # 依据轮廓填充 t.pu() # 提笔 t.seth(90) # 笔的角度为90度 t.fd(25) # 向前移动25 t.seth(0) # 转换画笔的角度为0 t.fd(10) t.pd() t.pencolor(255,155,192) # 设置画笔颜色 t.seth(10) t.begin_fill() t.circle(5) # 画一个半径为5的圆 t.color(160,82,45) # 设置画笔和填充颜色 t.end_fill() t.pu() t.seth(0) t.fd(20) t.pd() t.pencolor(255,155,192) t.seth(10) t.begin_fill() t.circle(5) t.color(160,82,45) t.end_fill() #头 t.color((255,155,192),"pink") t.pu() t.seth(90) t.fd(41) t.seth(0) t.fd(0) t.pd() t.begin_fill() t.seth(180) t.circle(300,-30) # 顺时针画一个半径为300,圆心角为30°的园 t.circle(100,-60) t.circle(80,-100) t.circle(150,-20) t.circle(60,-95) t.seth(161) t.circle(-300,15) t.pu() t.goto(-100,100) t.pd() t.seth(-30) a=0.4 for i in range(60): if 0<=i<30 or 60<=i<90: a=a+0.08 t.lt(3) #向左转3度 t.fd(a) #向前走a的步长 else: a=a-0.08 t.lt(3) t.fd(a) t.end_fill() #耳朵 t.color((255,155,192),"pink") t.pu() t.seth(90) t.fd(-7) t.seth(0) t.fd(70) t.pd() t.begin_fill() t.seth(100) t.circle(-50,50) t.circle(-10,120) t.circle(-50,54) t.end_fill() t.pu() t.seth(90) t.fd(-12) t.seth(0) t.fd(30) t.pd() t.begin_fill() t.seth(100) t.circle(-50,50) t.circle(-10,120) t.circle(-50,56) t.end_fill() #眼睛 t.color((255,155,192),"white") t.pu() t.seth(90) t.fd(-20) t.seth(0) t.fd(-95) t.pd() t.begin_fill() t.circle(15) t.end_fill() t.color("black") t.pu() t.seth(90) t.fd(12) t.seth(0) t.fd(-3) t.pd() t.begin_fill() t.circle(3) t.end_fill() t.color((255,155,192),"white") t.pu() t.seth(90) t.fd(-25) t.seth(0) t.fd(40) t.pd() t.begin_fill() t.circle(15) t.end_fill() t.color("black") t.pu() t.seth(90) t.fd(12) t.seth(0) t.fd(-3) t.pd() t.begin_fill() t.circle(3) t.end_fill() #腮 t.color((255,155,192)) t.pu() t.seth(90) t.fd(-95) t.seth(0) t.fd(65) t.pd() t.begin_fill() t.circle(30) t.end_fill() #嘴 t.color(239,69,19) t.pu() t.seth(90) t.fd(15) t.seth(0) t.fd(-100) t.pd() t.seth(-80) t.circle(30,40) t.circle(40,80) #身体 t.color("red",(255,99,71)) t.pu() t.seth(90) t.fd(-20) t.seth(0) t.fd(-78) t.pd() t.begin_fill() t.seth(-130) t.circle(100,10) t.circle(300,30) t.seth(0) t.fd(230) t.seth(90) t.circle(300,30) t.circle(100,3) t.color((255,155,192),(255,100,100)) t.seth(-135) t.circle(-80,63) t.circle(-150,24) t.end_fill() #手 t.color((255,155,192)) t.pu() t.seth(90) t.fd(-40) t.seth(0) t.fd(-27) t.pd() t.seth(-160) t.circle(300,15) t.pu() t.seth(90) t.fd(15) t.seth(0) t.fd(0) t.pd() t.seth(-10) t.circle(-20,90) t.pu() t.seth(90) t.fd(30) t.seth(0) t.fd(237) t.pd() t.seth(-20) t.circle(-300,15) t.pu() t.seth(90) t.fd(20) t.seth(0) t.fd(0) t.pd() t.seth(-170) t.circle(20,90) #脚 t.pensize(10) t.color((240,128,128)) t.pu() t.seth(90) t.fd(-75) t.seth(0) t.fd(-180) t.pd() t.seth(-90) t.fd(40) t.seth(-180) t.color("black") t.pensize(15) t.fd(20) t.pensize(10) t.color((240,128,128)) t.pu() t.seth(90) t.fd(40) t.seth(0) t.fd(90) t.pd() t.seth(-90) t.fd(40) t.seth(-180) t.color("black") t.pensize(15) t.fd(20) #尾巴 t.pensize(4) t.color((255,155,192)) t.pu() t.seth(90) t.fd(70) t.seth(0) t.fd(95) t.pd() t.seth(0) t.circle(70,20) t.circle(10,330) t.circle(70,30) t.done() -------知识无价,汗水有情,如需搬运请注明出处,谢谢!

优秀的个人博客,低调大师

thymeleaf全局常量定义(非国际化)

微服务现在最流行的莫过于springboot,官方推荐两种模板语言,freemarker和thymeleaf,本文只介绍thymeleaf中如何定义全局常量。百度一搜thymeleaf的全局常量定义,都是让把常量写在“message_*”文件中,当然,做国际化的时候这个没问题 ,可是随着现在微服务大行其道,有很多不是国际化的东西需要定义,例如服务A调用服务B,这时候肯定要在A中配置B的url,这时候再写入message明显不合适了。 惯例先上思路 在模板解析时候就将常量写入,重写模板解析配置方法。看springboot源码 public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer { /** * {@inheritDoc} * <p>This implementation is empty. */ @Override public void configureViewResolvers(ViewResolverRegistry registry) { } } 目测应该是重写这货就可以了,talk is cheap,show me the code 动手重写 1.现在Application.properties中定义两个常量,用于文件上传和预览 upload.path=http://localhost:9091/accessory/upload image.view.path=http://localhost:9091/accessory/open?id= 2.重写configureViewResolvers(ViewResolverRegistry registry) @Resource(name="thymeleafViewResolver") private ThymeleafViewResolver thymeleafViewResolver; @Value("${upload.path}") private String defaultUploadPath; @Value("${image.view.path}") private String defaultImageViewPath; @Override public void configureViewResolvers(ViewResolverRegistry registry) { if (thymeleafViewResolver != null) { Map<String, Object> vars = new HashMap<>(8); vars.put("uploadPath", defaultUploadPath); vars.put("defaultImageViewPath", defaultImageViewPath); thymeleafViewResolver.setStaticVariables(vars); } super.configureViewResolvers(registry); } 3.模板上使用html中 <img src="/images/default-mem.png" th:src="${defaultImageViewPath+user.photo}" alt="" > js中 写法比较奇怪, /<![CDATA[/ 中间写定义的全局js常量 /]]>/ <script th:inline="javascript"> /*<![CDATA[*/ var basePath='http://www.baidu.com'; var uploadPath=[[${uploadPath}]]; var defaultImageViewPath=[[${defaultImageViewPath}]]; /*]]>*/ </script> 就是酱紫。

优秀的个人博客,低调大师

jenkins+docker 持续构建非docker in docker

工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目spring boot框架 使用 个软件版本 jenkinsJenkins ver. 2.90 docker 17.10-ce svn 1.6 maven 3.5 spring boot 1.5.6 centos7 实现目标:当我们迁入代码时自动升级到测试服务器,如下图 第一步 重新构建自己的jenkins镜像 构建我们自己的jenkins,jenkins 我们在docker容器中运行,但是 我们还要用jenkins来构建docker镜像这是就需要 jenkins容器中可以执行docker命令,所以我们需要构建自己的jenkins镜像 这里借鉴 大桥下的蜗牛

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册