逃离 IE 浏览器与 ActiveX 控件
前言因为公司产品是 B/S 架构,所以很多与硬件交互资源的功能,不可避免的要使用 ActiveX 控件。 但是因为安全性问题,现代浏览器例如 Chrome、Firefox、Edge 等都已经放弃了对 ActiveX 的支持,所以这个方案已经不再是合适的选择。 当然现阶段还是有很多解决方案,例如不使用新特性与新功能,坚定不移的使用支持 ActiveX 的浏览器版本;使用开源的一些浏览器组件例如 MiniBlink,开发自己的“浏览器”等等。 但是对于开发来说,面对前端涌现的很多新技术,因为浏览器版本太低,无法支持一些新特性而无法使用畏手畏脚,是一种很痛苦的开发体验。 解决打印问题因为最初产品设计的问题,没有使用水晶报表、FastReport 等报表控件,所以打印现在还依托于 HTML 打印。 用过的其实都知道,浏览器本身以及市面上一些 ActiveX 打印控件,其实对打印功能支持都有限,一些复杂的功能无法实现,而且经常要被一些内容溢出、所见非所得等问题折磨。 而产品升级到用 Chrome 就更麻烦了,本身自带的打印功能,产品发布以后基本没有使用价值,和 C/S 架构的打印体验更是差...
多线程操作 Windows Form 或 WPF 的控件
前言写代码就是这样,不是天天写的代码,很长一段时间不用,下次再用大概率是已经忘记了,不知道怎么处理。 虽然可以从搜索引擎中找到答案,但是肯定没有自己整理的看着舒服,所以后面会把 C/S 开发时遇到的一些小坑整理以下。 多线程操作 UI 组件今天写一个 HTTP 监听的小工具,其中需要输出一个日志窗,其中会由于日志类型的不同,调整 RichTextBox 的 SelectionColor 和 SelectionBackColor 以更新日志窗体的前景色或背景色。 当然可能涉及多线程中输出日志,所以更新组件内容自然也用了 Invoke 与 BeginInvoke 方法。 因为写日志时会将之前设置的前景色以及背景色取出来,等输出完成后将原本的前景色或背景色设置回去,所以调用方法以后就在想,这个过程需不需要加锁。 因为万一在输出 Error 日志时,将颜色设置成红色了,那另外一个线程需要写 Info 类型的日志,那前景色与背景色岂不是就乱掉了。 然后就简单写了个段,测试了一下: 12345678910111213141516171819202122232425for (int ...
贝克曼 DxH800 血球仪图片绘制问题
过去开发 LIS 接口对接仪器,大部分血细胞分析仪厂商是希森美康、迈瑞等。 与这些仪器通讯时有个好处,仪器会将图片内容直接发送给我们,或使用第三方软件提前绘制,我们直接读取或对 Base64 数据转码即可,对接都很简单。 但是有些厂商,例如贝克曼、雅培提供的并不是绘制好的图片数据,而是需要我们使用他们提供的数据信息,自行绘制,相对来说开发投入的精力就比希森美康和迈瑞大很多。 以下就是我在绘制血液分析散点图与直方图的一些经验总结。 雅培 Ruby 系列第一次试水是同事负责的一台雅培 Ruby 系列的全自动血细胞分析仪,图形不是常见的可以读文件或者直接从 Base64 转码。 因为当时在出差,而且不是我负责的,所以没有仔细研究,也仅仅只绘制出了直方图供同事参考。 这里也将这部分代码存在这里,如果以后有用的话备查: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667public stati...
SOA —— ASP.NET Web API 依赖注入
依赖注入(Dependency Injection,缩写DI)是将系统中各层对象解耦的一种方式,是实现控制反转(Inversion of Control,缩写IoC)的一种常用方式。 搭建框架首先我们搭建一个用于测试的基本框架,因为最近在了解 FreeSql,所以数据访问就使用 FreeSql,在这里推荐一下这个项目,叶老板真的很🐂🍺。 下图可以看出项目的简单架构: 实体实体层定义了实体的接口 IBaseEntity : 1234567public class IBaseEntity{ [Column(IsPrimary = true, IsIdentity = true)] public long Id { get; set; } public DateTime CreateTime { get; set; } = DateTime.Now; public DateTime UpdateTime { get; set; } = DateTime.Now;} 标本类 S...
MacOS 使用 DBeaver 连接 Oracle 数据库
作为“专业”的商业数据库,Oracle 不允许第三方公司私自集成 Oracle 数据库的 jdbc 连接驱动,所以 DBeaver 不能像其他数据库那样,自动的为我们下载驱动文件。 DBeaver 添加连接添加 Oracle 连接会出现如下配置: 如上图,点击“测试连接”会提示让我们配置连接驱动: 下载 jar 包如果数据库服务器是 11g 或 12c,根据数据库版本选择框下的连接,到 Oracle 官网登录下载即可。 这里我安装的是 19c,直接到根据指引下载最新的 jar 包:18.3 JDBC and UCP Downloads page 其他的一些指引信息可以参考:Quick Start with JDBC 配置驱动点击弹出缺少驱动文件窗体中的 添加 jar 包 或点击 Oracle 连接设置界面的 编辑驱动设置 可以进入以下页面: 按如图所示,将我们下载的文件解压到一个合适的位置,点击 添加文件 将如图所示的三个文件添加进列表即可。 完成后点击确定可能会报错,可以忽略报错信息,直接从连接配置界面,重新点击 测试连接 即可确认驱动是否正常。 当然还可能会仍然无法连接...
SOA —— ASP.NET Web API 知识点小结
ASP.NET Web API 是一个框架,可以轻松地构建包含浏览器和移动设备在内的广泛客户端的 HTTP 服务。 ASP.NET Web API 是在 .NET Framework 框架上构建 REST 风格应用程序的理想平台。 什么是 RESTful表现层状态转换(英语: Representational State Transfer ,缩写: REST )是一种架构风格,方便不同软件或程序在网络中互相传递消息。表现层状态转换是基于 HTTP 之上而确定的一组约定和属性,是一种设计提供全球资讯网络服务的软件构建风格。 符合或兼容这种架构风格(简称为 REST 或 RESTful )的网络服务,目前主流的 Web 服务实现方案中,因为 REST 模式与复杂的 SOAP 和 XML-RPC 相比更加简洁,所以越来越多的服务开始采用 REST 风格设计和实现。 REST 架构的要点需要注意的是, REST 是设计风格而不是标准。 REST 通常基于使用 HTTP , URI ,和 XML 以及 HTML 这些现有的广泛流行的协议和标准。 资源是由URI来指定。 对资源的操作包括获...
SOA —— WCF 知识点小结
WCF 相较于 WebService 更加灵活,支持多种宿主、多种协议,并且支持双工。 印象中读书时也开过 WCF 的课程,但是那本讲 WCF 的书实在是太厚了,所以其实并没有学进去,混个学分后来不了了之。 工作中,使用更多的是 WebService 或者 Socket,所以仅凭偶尔接触的一些小例子,来总结一些简单的使用场景。 创建服务端不同于 WebService 只能托管在 IIS 上,WCF 可以托管在任意的程序上,可以是网站,也可以是控制台、WinForm、WPF、Windows Service 等。 注意:Visual Studio 2019 安装时默认没有勾选 WPF 的模板,可以通过 Visual Studio Installer 安装,点击 修改 -> 单个组件 -> 开发活动 -> Windows Communication Foundation。 定义并实现服务协定WCF 创建服务端第一步是创建一个服务协定,这样我们就可以很方便的将服务与宿主分离。 后期创建服务端时,可以指定服务运行在不同的宿主上,而不需要调整服务本身的代码,这里我们创建...
SOA —— WebService 知识点总结
虽然 WebService 已经很 Low 了,但是胜在简单。所以很多小公司或者公司内部仍然会使用这个做一些接口。 这里总结一下 WebService 的一些使用技巧,以及经验总结。 创建服务端WebService 宿主是 IIS,所以我们需要先创建一个 ASP.Net Web 的空项目,当然如果选择 MVC 或 WebForm 也没有影响。 创建以后我们就可以添加对应的服务文件,如下图: 会生成一个 *.asmx 文件与 一个 *.asmx.cs 文件,结构与 WebForm 的窗体页面或一般处理程序等一致。 如果我们没有将后台代码 cs 文件另外单独存放的需求,那么就不需要调整,直接修改展开对 cs 文件进行修改即可。 这里我们添加一些方法用于测试: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263using System;using System.Collections.Generic;...
SQLite 数据库常用命令
压缩数据库删除数据或更新数据后,数据库不断增大,可以使用一下命令对数据库进行压缩。 1VACUUM;
代码仓管理系统 Gitea 搭建
开始用二进制文件搭建,结果一直启动不起来,后来换了一个版本可以启动起来,但是设置自启动总是提示找不到 [Unit],但是配置文件是配置了的。 很无奈,太菜了只能用 Docker 来安装了,还简单一些。 升级 Git123456789101112131415161718# 安装依赖yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidocyum install gcc perl-ExtUtils-MakeMaker# 卸载 gitgit --versionyum remove git# 安装 gitcd /usr/local/src/wget https://www.kernel.org/pub/software/scm/git/git-2.24.0.tar.xztar -vxf git-2.24.0.tar.xzcd git-2.24.0make prefix=/usr/local/git allmake prefix=/usr/local/git installecho ...