-
用php写了个图床相关的
最近不是都说微博图床404了,我这么多年丢了好多文件,突然觉得有个图床也不错,写了个能用的,用qq空间里的图片和微博图片测试还可以具体如下 https://wx4.sinaimg.cn/large/005JCY4Qgy1hiz6pd1jozj30v916341q.jpg 下面直接插入,效果如下: 按我写的功能插入,如下:
-
实现了一个框架外挂
业务开发实践中,发现开发业务逻辑为了便于调整要么是走可配置方式要么是走脚本支持方式,可配置方式当前没见到有完美的,用起来都很别扭,而脚本方式的确很多商业软件就是这样的,但是无形当中要求了业务开发人员的脚本语言能力;为了做第一个纯配置方式的复杂业务开发,我实现了这个通过函数名调用任意用户后增加dll里未知函数的功能,实践测试了一下,相当风骚,先备份一个源码在这里;后续基于这个有很多玩法。 具体代码如下:
-
Flask已死,Fastapi才是未来[转]
Flask是一个在Python开发者心目中十分重要的项目,如果你是一个Web开发者,我相信你一定用过Flask,但是可能没有用过FastAPI。这个和国外相比可能会更明显一点,我觉得主要是因为国内已经没有多少人在写技术文章推荐,教大家分辨趋势或者主流,而一些老手即便知道它们的优缺点可能也懒得写对比文章,结果造成很多新人不了解怎么选,只能看一些老的文章、大V或者书籍的推荐作为选择的依据。 但是如果你有兴趣,你可以考证2点: 最近1-2年,Python相关的知名新项目中只要有Web的,基本都使用FastAPI。 今天(2023年12月18日)在Github上,FastAPI的star数(66k)已经超过了Flask(65.2)。 接着看一下Python官方的开发者调查中Web框架占比的变化: 可以看到19年FastAPI甚至不是一个选项,而22年已经占到25%的比率。这个开发者调查需要年中才会统计出上一年的,所以2023年的得明天第三季度才能知道,我预计FastAPI可以达到35%左右。 需要注意这个占比数据包含了现有系统,所以Django和Flask不容易跌得很快,但是趋势是很明显的。 我们知道Web框架这个领域是很高产的,基本每年都有新的框架诞生,大部分框架昙花一现,但有的框架却能够长青。FastAPI诞生于2018年底,在2019年年底左右开始崭露头角,那么为什么它可以在短短的5年里让关注度超过在2010年底诞生的Flask呢?接着我们顺着时间线捋捋Python Web框架和相关解决方案的发展来理解吧。 Web框架(插件、工具)发展史 FastAPI作者是一个非常关注Python生态发展的开发者,延伸阅读链接2是一篇作者写的,详细的介绍了FastAPI出各个库中的借鉴或者启发的细节,而发展史这部分我也参考了这篇文章。大家应该看看原文,里面包含了为什么会出现FastAPI以及作者的一些设计哲学。 Django Django是Python社区里最早做到统治级别的Web框架,当时知名的Instagram就是用它构建的。它的特点是大而全,各种web开发需要用到的细节它基本都有相关的模块,尤其和关系数据库、管理功能等方面耦合度非常高。对于熟悉的老手,这是一个生产级别的框架,但即便有完整的文档,对于初学者非常不友好,学习曲线中后期很陡峭,它的复杂度和定制成本非常高。 其实我这篇文章,也可以叫做「Django和Flask之死」,但是在框架应用场景角度来说Flask和FastAPI对比更合适,而Django直接和FastAPI相比有一些差别。在一些商业场景(例如CMS)Django依然是首选,而Flask(甚至FastAPI)看起来更像个「玩具」,所以Django短时间不会被取代(Flask这些年不是也是没取代的了嘛)。 Django REST Framework(DRF) Django主旨是为了在后端生成 HTML,而不是创建现代前端(如 React、Vue.js )或与其通信的其他系统使用的 API。所以FastAPI其实和Django REST Framework直接对标,它们主要场景都是构建 Web API,但是名字上也可以看出来,DRF还是依托于Django框架,所以缺点一样。 Flask Flask是一个「微」框架(Micro framework),和Django截然相反,它仅保留小部分的核心,还为了解耦把功能拆分成几个库(如Jinja2,Werkzeug等),所以开发者有足够的自由,你可以很容易写出相关功能的第三方插件。它里面的蓝图、上下文、装饰器表示路由、信号等等设计在当时是非常先进的,再加上文档写的很完整,可以说对新手极为友好。 Flask REST Frameworks 由于Flask的简单性,它非常适合构建API,不过由于Flask什么也不带,我们需要专门的REST框架。所以相继出现了 flask-restful 、Flask-RESTPlus、flask-api等框架,另外在Rest服务中,会需要数据验证、解析和规范等需要,也出现了Marshmallow、Webargs和APISpec,一直到Flask-apispec。但是整个发展过程中没有出现一个足够好的能够对标DRF的Flask REST Framework。 而到这个阶段,Flask的缺点其实也暴露了。 Flask本来的优点是灵活性和极简主义,但这意味着很多很多组件需要自己造,这个要不然需要公司够大专门有开发者开发和维护,要不然得个人能力极强,否则插件很难达到生产级别,这就造成Flask的第三方插件质量层次不齐,且无法保证长期维护。就像我上面说的那些库,现在来看,其中已经很多不再维护了。 所以即便是今天,你想用Flask构建一个API服务,还是要东拼西凑各个组件,其中某些组件有些没及时更新的地方要自己动手解决,这对于老手来说还好,对于新人来说很痛苦,尤其是你想要应用现在最新的实践方案和理念,只能望而兴叹。 Asyncio生态 从Python3.5开始,asyncio已经是未来的趋势了。所以开始出现了一些原生支持asyncio的Web框架,如aiohttp、Starlette和sanic。 这个时候Flask并不想接受改变,社区迟迟的不加入aio的支持,另外Flask原作者也去写rust了,把项目交给了2个维护者(现在只剩一个人了)。 而用于构架API服务的项目例如apistar,molten。它们都给FastAPI的带来了设计灵感。 FastAPI 接着就是诞生FastAPI了。作者本来也是想找到一个好的解决方案,但是以上种种都是自己的问题或者说局限性,所以作者就造了这个轮子。 FastAPI为什么能成为统治者 这篇文章的核心部分啦,这些理由也是为什么FastAPI会替代Flask的原因。 异步设计 在Flask的那个时代,代码执行是单线程、同步的,这意味着要依次处理请求,前一个请求完成前,其他请求消耗在等待 I/O 操作上。而asyncio是最好的解决方案,它让I/O成为异步操作,无需等待任务完成即可获取任务结果并继续处理其他任务请求。 而FastAPI天生支持并发和异步代码,代码写对了就可以在效率上达到极致,所以它被认为是目前最快的Python框架,效率和NodeJS或Go接近。当速度和性能至关重要时,FastAPI 是最佳选择。 使用Pydantic做用户数据验证 […]
-
dev-ide[转]
推荐轻量级C++/C IDE | dev C++凉了怎么办 以下是碎碎念 (●’◡’●)ノ 最近又开始写C++,我电脑用了好久了,并且只有8G的运行内存,每次打开VS2019都是卡卡卡卡卡卡……这就让我怀念起各种轻量级IDE了。想当年我真的是用过了各种乱七八糟的学生入门编译器,比如eclipse,Code Blocks,VC6.0,Dev C++之类的。其中最简便的就是dev c++了。但是有个坏消息,我用的那个dev c++早在2015年就停止维护了。怪不得我当时用dev c++没办法调试呢,一调试就闪退,导致我一度怀疑自己的垃圾电脑,最后无奈转战VS2010了,后来又VS2017,VS2019……再后来我还捣鼓着用VS code写C++,想了解的看这里:超详细!怎么用VS Code写C/C++。(╯ ̄Д ̄)╯╘═╛ 但是都很麻烦。知道最近我发现,虽然dev c++ 死了,但是他的子孙后代还活着!我又行了!(๑•̀ㅂ•́)و✧😏 dev c++发展历史:原开发公司 Bloodshed 在2011年发布了 v4.9.9.2 后停止开发 。独立开发者 Orwelldevcpp 继续更新,2016年发布了最终版本 v5.11之后停止更新。但是之后还是有人继续了dev c++的意志!继续在开发。所以我今天挨个下载了试试,顺手做个测评。 正文直接看这里。 小熊猫Dev-C++,吐血推荐! 国内开发者 royqh1979 开发的版本小熊猫Dev-C++ (原名Dev C++ 2020)。下载地址:https://royqh.net/devcpp/download 使用感受: 其实可以更换编辑框那块的主题,但是不能换整体的主题,编辑框是黑的但是工具栏是白的看起来就很怪异。所以我还是使用了黑+黑 有代码提示,用起来十分流畅,还有自动语法检查 调试功能也和vs使用感一样好 总结就是除了丑点哪里都好。(我就从界面和编译调试来说说,毕竟其他功能我也用不太到,写大项目我还得用VS) Embarcadero Dev-C++ 国外开发者 FMXExpress 等人在 Embarcadero 公司支持下继续开发的 Embarcadero Dev-C++。下载地址:https://github.com/Embarcadero/Dev-Cpp/releases 使用感受: 图标变红的了 像老版本一样,没有代码提示,只有简单的括号补全之类的 但是开发了新主题,可以用dark […]
-
BCB和Delphi的互用
原创作者sun28 BCB和Delphi互用是很方便的。特别是在BCB中使用Delphi程序,有时候几乎什么都不用改就可以使用。众多C++程序员一直希望Borland公司能够将VCL用C++改写,就现在地情况来看这个愿望很难有实现的一天。我不知道Borland公司是否有修改的打算,但BCB和Delphi互用的这一特性一直是Borland公司引以为傲的一点之一。从其员工的文章中就可以看出这一点。这也是使用BCB和Delphi的好处之一,因为可以进行代码共享,减少了很多重复性的工作,这无疑是一种创举。也正是这一功能使得程序员在工作的时候可以随意地选择工具(BCB或Delphi)。 BCB和Delphi的特点: Delphi能够最大限度的让程序员容易的生成性能很高的、功能强大的组件、应用程序和对象。 BCB允许程序员运用以灵活,巧妙,功能强大而闻名的C++语言编写程序。 BCB和Delphi代码共享的好处: 程序员可以随意地选择适用的工具(BCB或Delphi)进行编程。BCB和Delphi之间的代码共享让程序员不用担心代码是用什么工具编写的。也不用担心一个工具中编写的代码会不会不别另一个工具所认同。而是集中精力用最快的方法去建立你解决问题的模式。然后在BCB或是Delphi中编译。在BCB中使用Delphi比在Delphi中使用BCB更容易,但她们之间的代码在一定程度上都是可以互用的。 BCB和Delphi的代码共享,促进了代码的重复利用。C++和Pascal有很多共性,使得她们共享代码成为可能。C++编译并不比Pascal快。相反由于BCB中使用的是Pascal编写的VCL,因此BCB生成的应用程序比用Delphi生成的应用程序要稍微大一点。当然这一点在今天来说已经无关紧要。 Delphi使用非常简单,语法简单让程序员更容易理解。这使得公司里的新手可以快速的上手,投入到项目中去。参与项目的程序员可以同时使用BCB和Delphi工作。 由于Delphi简单易使,因此非常适用于一些时间要求紧迫的项目。即使你是使用C++的老手,你也可以在时间紧迫的时候选择Delphi来编制程序。然后你也可以再用BCB来编译他们,如果你想这样干的话。这并不会增加你的工作量。 在BCB中可用的Delphi代码 代码形式 说明 Delphi源代码单元和对象 直接编译 Delphi Form 有的版本可以直接编译,有的需要手工改动 Delphi中的函数,方法,结构等 一般情况下可直接编译 Delphi组件 一般情况下可直接编译 Delphi包 直接编译 Delphi生成的COM,DLL,ActiveX,OLE直接编译 Delphi生成的Obj,lib文件 直接编译 在Delphi中可用的BCB代码 代码形式 说明 BCB源代码单元和对象 需要手工改动 BCB Form 需要手工改动 BCB中的函数,方法,结构等 需要手工改动 BCB组件 需要手工改动 BCB包 ????–没试过! BCB生成的COM,DLL,ActiveX,OLE直接编译,代码共享的主要方式 BCB生成的Obj,lib文件 一定条件下可以,比较麻烦 将Delphi代码变为BCB代码 有时Delphi应用程序与C++ Builder应用程序可能需要相互转换。这种转换虽然费时,但并不困难(顺便说一句,进行转换时,我将Delphi与C++ Builder同时运行)。这里只想介绍将Delphi变为C++Builder的过程,反过来也差别不大。将Delphi变为C++ Builder主要有两步。第一步是将Delphi应用程序窗体复制到C++ Builder项目中,第二步是修改Delphi代码。一般情况下这都是没有必要的,除非你想改写为C++代码。下面详细介绍这两个步骤。: 首先要复制Delphi窗体到C++ Builder应用程序中。Delphi窗体与C++ Builder窗体使用相同的基本格式,但至少有一大差别。显然,窗体文件包含窗体本身和窗体上每个构件的尺寸和位置。但窗体文件中也还包含事件信息。具体地说,窗体文件包括窗体及其构件所建事件处理器的描述。在Delphi窗体文件中,事件引用的事件处理器是Delphi方法,而在C++ Builder窗体文件中,事件指向C++ Builder事件处理器。自然,要删除Pascal引用才能在C++ […]
-
便捷ddns
本文将介绍如何使用西部数码的API实现DDNS功能,使您的域名始终指向您的动态IP地址。API介绍:接口地址 https://api.west.cn/API/v2/domain/dns/接口支持两种认证方式1、域名级认证(仅单域名)支持参数 act=dnsrec.update&domain=指定域名&apidomainkey=域名密钥&hostname=完整子域名&record_value=设置的IP域名KEY获取方法,如下图所示,进入管理中心-域名管理-点击域名-右侧上方ApiKey 点击后复制 2、用户级认证 (支持管理多域名)支持参数 act=dnsrec.update&username=用户名&apikey=用户密钥&domain=指定域名&hostname=完整子域名&record_value=设置的IP用户KEY获取 https://www.west.cn/manager/API/APIconfig.asp注意:dnsrec.update接口在更新解析时会删除存在的a记录重新添加,其他api功能可参看 域名API接口文档使用示例:1、群晖NAS先添加自定义服务商服务供应商: westQuery URL: https://api.west.cn/API/v2/domain/dns/?act=dnsrec.update&domain=__USERNAME__&hostname=__HOSTNAME__&record_value=__MYIP__&apidomainkey=__PASSWORD__新增DDNS,选择west 服务商,按截图添加相应的信息 注意:custom 模式下,您需要先在域名解析中添加一条 test.domain.com 的A记录解析。 关于西部数码的域名实现DDNS功能,有不清楚的可以直接通过我司官网在线咨询或提交工单,专业人员将为您解答。
-
传奇源码对于素材处理
这个代码,要说好呢,还是有很多的可以学习的地方的,不过很多地方也是实现得比较粗糙。 要对真彩色支持,首先要了解到: 1、它是16位增强色的,是没有调色板的。具体原理后述。 2、它的素材也是针对增强色设计的,字节可直接用于增强色模式,不可直接用于真彩色模式。 认识到了这两点,基本知道该怎么做了。 先说说增强色模式,现在一般的传奇3私服,会提供一个登录器,登录器除了IP代理之外,还有一个作用就是在运行程序时,把电脑设置成增强色模式,不然按现代的机器,真彩色模式运行,把增强色的数据直接当成rgb颜色渲染,会花屏。 增强色用2个字节(WORD)表示一个颜色,r分量占5位,g分量占6位,b分量占5位,共计16位。 因此每个分量有一个位掩码和一个位移码,对这个WORD数据作用掩码和位移,就可以取出对应的分量的颜色值。当电脑在增强色模式下时,这个操作是自动进行的。 取出rgb分量,还是不能将其用于表示rgb,原因是精度不一样导致的数据单位不一样。 真彩色中,一个分量是一个字节,即8位,而增强色中,一个分量是5或者6位。因此,需要做一个缩放。 例如,红色,在真彩色中,r分量是0xff,而在增强色中,r是二进制11111。 因此,r和b分量需要乘以8,g分量需要乘以4。然后,就可以组合成rgb真彩色了。 因为程序的素材本身就不是真彩色的,因此,我们只需要对surface的操作进行真彩色的支持即可。 首先dx设备要设置成32位深度的,然后,对surface的取色彩操作,要认为是直接在取真彩色的数据,并且在取出计算分量时,相应的要除以8,或4,缩放到增强色的空间。对surface的写入色彩操作,要认为是在写真彩色数据,所以要先把WORD的增强色变换到DWORD的真彩色rgb,然后在写入。另外,因为色彩深度不一样,对surface的pitch处理时要考虑到,因为它是以字节为单位的。
-
[论文素材]plc
基于QT图形视图框架的PLC梯形图编辑器的设计 企业:和利时集团 领域:PLC /PAC/PCC/RTU 领域:智能制造 点击数:2404 发布时间:2021-05-17 16:19:54 分享到: 针对自主可控可编程控制器上位机组态软件的梯形图编程需求,本文设计了一种梯形图语言编辑器。它基于QT下的图形视图框架,对接口进行了二次封装与扩展,实现了梯形图中各组件的创建、绘制与管理等功能。该梯形图编辑器已成功应用于和利时推出的新一代自主可控PLC编程软件平台,为PLC系统的梯形图逻辑组态提供了支持。 1 引言 PLC作为工业控制系统的重要组成部分,是现代工业自动化的重要支柱。2006年,国务院在发布的《国家中长期科学和技术发展规划纲要(2006-2020年)》中提出建设“核高基”重大科技专项,2015年又提出“中国制造2025”。在此背景下,国产化、自主化已经成为PLC市场发展的重要趋势。QT开发框架因其出色的跨平台性和代码开源的特点,成为开发自主可控软件的优良选择。 IEC 61131-3是旨在规范可编程控制器(Programmable Logic Controller,简称PLC)编程语言的国际标准,经过十多年的发展和完善,已被广大PLC使用者和生产厂商所认可和支持[1]。它是国际电工委员会(IEC)定义的PLC编程系统规范,也是工业控制领域的通用标准。梯形图(Ladder Diagram, LD)被称为PLC的第一编程语言,凭借其直观易学的优点,成为最广泛的编程语言[2]。它作为IEC 61131-3规定的PLC编程语言之一,沿袭自继电器控制电路的术语和符号,具有形象、实用等特点,被称为是“面向生产过程的编程语言”。 和利时推出的新一代自主可控编程软件平台AutoThink V4提供了对梯形图语言的编程支持,完整的LD编程组态支持包括前端的编辑和管理,以及后端的编译和执行。本文主要介绍LD前端编辑器的设计和实现。 2 QT下图形视图框架的介绍 2.1 框架组成 图形视图框架(The Graphic View Framework)是QT中基于MVC(Model View Controller)的软件设计模型开发出来的一个图元管理与交互平台。图1为框架的结构图,它由三部分组成: (1)场景(QGraphicsScene) 场景是图元对象存储和管理的容器,也是图元存在的逻辑场所,我们创建的图元只有添加到场景中才能进行显示和操作。 (2)视图(QGraphicsView) 视图是整个框架的对外交互接口,负责将场景中特定区域的内容显示出来。在实际使用中,可以对一个场景只添加一个视图,也可以将多个视图附加到同一个场景来显示其不同区域或不同缩放旋转变换下的状况。 (3)图元(QGraphicsItem) 图元是场景中的最基本元件,单个图元支持各种事件响应,多个图元之间可以生成父子组合等层级关系。 图1 图形视图框架结构 2.2 框架特点 (1)图元管理 QT图形视图架构使用了BSP(二叉空间分割树)的数据结构来组织和管理其中的图元,能够支持大场景下百万数量级别的2D图元的快速查找、排序以及实时显示。 (2)坐标系统 图形视图框架中存在三个坐标系统:场景坐标、视图坐标及图元坐标,每个系统都以自己的中心点为原点分别管理自己的坐标,三套系统之间使用映射来进行坐标转换。 (3)图形渲染 框架设计的坐标系统使每个图元仅需负责自己的图形渲染,图形视图框架基于仿射矩阵变换的运算处理能够快速响应缩放、旋转等高级渲染需求。 除此之外,框架支持图元间的z-order深度排序、碰撞检测,以及动画、OpenGL等高级应用,便于之后的高级应用扩展 。 (4)事件处理 图形视图框架中包含一套事件传播架构,支持对场景中图元进行双精度的精确交互[3] 。 3 LD编辑器在AutoThink V4组态软件中的功能 AutoThink V4是和利时研发的自主可控可编程控制系统的上位机软件,它作为系统中的控制算法组态工具,运行于工程师站中,技术人员通过它来进行现场工程的逻辑设备组态。AutoThink V4基于QT环境进行开发,整体模块结构如图2所示,其中框架管理和变量管理主要负责软件的UI展示与人机交互,IEC组态与硬件配置负责编程语言与硬件模块及协议的组态,数据源通过组态、语法分析、指令翻译等一系列处理,经过编译生成二进制形式的目标文件,最终通过在线模块下发给PLC下位机执行指令。 LD组态模块是IEC组态部分的子模块,分为前端编辑器及后端逻辑转换与处理两部分。梯形图编辑器负责梯形图中元件的创建、删除、选中、绘制、语法检查等管理操作,编辑器中的组态数据经过语法检查无误后,将被LD后端转换为一种预定好的中间语法结构传递给编译模块进行处理,生成目标文件下装到硬件设备端,并在在线监控状态下通过编辑器进行调试。 […]
-
Protected: 明洲记
There is no excerpt because this is a protected post.
-
资料
materialise magics 设备运控部分由西门子plc实现,具体三个电机分别控制供料仓平台升降,打印仓平台升降以及铺粉刮板动作; 实际核心3d打印部分是通过电子枪来调整打印点位的;所以传统运动轴xyz这里都用不上了,这里z是固化死的相对0.05,xy具体点位区域通过电子枪改变磁场实现点的偏移;进一步可推测g代码实际是传送给了电子枪的控制器,实现控制;这样如果要买第三方电子枪必须要拿到对应的控制代码才能实现g代码解析介入。 电子枪如果不开放源码,必须要求电子枪能提供控制接口快速按指令进行xy位置偏转; 除去电子枪部分其他真空管理部分和高压电源管理部分都是可以第三方嵌入的封闭系统,软件开发量几乎可以忽略; 针对电子枪汪博给出两个建议:1.买一套研究拆解实现仿制;2.招三个人,光学电子磁场电子方面的专业人士还得懂材料才可以;另外汪博也提到过国外有6家也可以尝试联系下; 基于现场情况确认,我昨日所发软件规划是没有理解当前枪的市场因素的,是按3做的默认设计,不符合电子枪市场现实;