清风亦平凡 https://www.mlplus.net 关注IT世界,记录平凡生活 Sun, 10 Mar 2024 15:35:39 +0000 zh-CN hourly 1 https://wordpress.org/?v=6.4.3 SQL Server 2008至2022版本的激活码/密钥 https://www.mlplus.net/2024/03/10/sql-server-activation-code/ https://www.mlplus.net/2024/03/10/sql-server-activation-code/#respond Sun, 10 Mar 2024 15:35:39 +0000 https://www.mlplus.net/?p=4540 背景

因为学习以及开发测试需要,所以需要用到某些版本的SQL Server,为了方便就在互联网上收集了一些SQL Server的激活码,以便以后学习用。

SQL Server 2008


开发版/Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYB
企业版/Enterprise: JD8Y6-HQG69-P9H84-XDTPG-34MBB

SQL Server 2008 R2


开发版/Developer32位:MC46H-JQR3C-2JRHY-XYRKY-QWPVM
开发版/Developer64位:FTMGC-B2J97-PJ4QG-V84YB-MTXX8
工组版:XQ4CB-VK9P3-4WYYH-4HQX3-K2R6Q
WEB版:FP4P7-YKG22-WGRVK-MKGMX-V9MTM
数据中心版32位:PTTFM-X467G-P7RH2-3Q6CG-4DMYB
数据中心版64位:DDT3B-8W62X-P9JD6-8MX7M-HWK38
企业版/Enterprise32位:R88PF-GMCFT-KM2KR-4R7GB-43K4B
企业版/Enterprise64位:GYF3T-H2V88-GRPPH-HWRJP-QRTYB
标准版/Strandard32位:CXTFT-74V4Y-9D48T-2DMFW-TX7CY
标准版/Strandard64位:B68Q6-KK2R7-89WGB-6Q9KR-QHFDW

SQL Server 2012


DEVELOPER/开发版:YQWTX-G8T4R-QW4XX-BVH62-GP68Y
ENTERPRISE/CAL 版服务器/ CAL版) 序列号:748RB-X4T6B-MRM7V-RTVFF-CHC8H
STANDARD/标准版:YFC4R-BRRWB-TVP9Y-6WJQ9-MCJQ7
WEB 版:FB3W8-YRXDP-G8F8F-C46KG-Q998F
ENTERPRISE/企业版:FH666-Y346V-7XFQ3-V69JM-RHW28
BUSINESS INTELLIGENCE 版(企业版)序列号:HRV7T-DVTM4-V6XG8-P36T4-MRYT6

SQL Server 2014


Business Intelligence:GJPF4-7PTW4-BB9JH-BVP6M-WFTMJ
Developer/开发版:82YJF-9RP6B-YQV9M-VXQFR-YJBGX
Enterprise/企业版:27HMJ-GH7P9-X2TTB-WPHQC-RG79R
Enterprise Core:TJYBJ-8YGH6-QK2JJ-M9DFB-D7M9D
Strandard/标准版:P7FRV-Y6X6Y-Y8C6Q-TB4QR-DMTTK
Web:J9MBB-R8PMP-R8WTW-8JJRD-C6GGW

SQL Server 2016


Enterprise/企业版:MDCJV-3YX8N-WG89M-KV443-G8249
Enterprise Core:TBR8B-BXC4Y-298NV-PYTBY-G3BCP
Standard/标准版:B9GQY-GBG4J-282NY-QRG4X-KQBCR
Web:BXJTY-X3GNH-WHTHG-8V3XK-T8243

SQL Server 2017


Enterprise/企业版:TDKQD-PKV44-PJT4N-TCJG2-3YJ6B
Enterprise Core:6GPYM-VHN83-PHDM2-Q9T2R-KBV83
Strandard/标准版:PHDV4-3VJWD-N7JVP-FGPKY-XBV89
Web:WV79P-7K6YG-T7QFN-M3WHF-37BXC

SQL Server 2019


Enterprise/企业版:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G
Strandard/标准版:PMBDC-FXVM3-T777P-N4FY8-PKFF4

SQL Server 2022


Enterprise/企业版: J4V48-P8MM4-9N3J9-HD97X-DYMRM
Enterprise Core: 2Q48Q-PB48J-DRCVN-GB844-X2H4Q
Standard/标准版: FG86G-CHH2T-CB7NJ-XT7D2-V8V4X
Web: 2R97W-F4XNT-T6MYV-3TKB7-6X3JM
Developer/开发版: 22222-00000-00000-00000-00000



转载请注明:清风亦平凡 » SQL Server 2008至2022版本的激活码/密钥

]]>
https://www.mlplus.net/2024/03/10/sql-server-activation-code/feed/ 0
Wavesurfer.js一个开源的音频可视化库 https://www.mlplus.net/2024/02/21/wavesurfer-js/ https://www.mlplus.net/2024/02/21/wavesurfer-js/#respond Wed, 21 Feb 2024 07:18:59 +0000 https://www.mlplus.net/?p=4524 Wavesurfer.js

Wavesurfer.js是一个基于JavaScript的开源音频波形可视化库。它利用Web Audio APIHTML5 Canvas技术,为音频数据提供了丰富的可视化展示方式。Wavesurfer.js的主要目标是提供一种灵活且易于集成的工具,使开发者能够在网页上创建交互式音频波形可视化。

wavesurfer.js图

特点

  1. 跨平台兼容性:由于Wavesurfer.js是基于Web标准构建的,因此它可以在任何支持Web Audio APICanvas的浏览器上运行,包括桌面和移动设备。
  2. 多格式支持:Wavesurfer.js支持多种音频格式,如WAV、MP3、OGG等,使开发者能够方便地加载和显示不同类型的音频文件。
  3. 高度可定制Wavesurfer.js提供了丰富的配置选项和API,允许开发者根据自己的需求定制波形的外观、行为以及交互方式。
  4. 音频分析功能:除了基本的波形显示,Wavesurfer.js还提供了音频分析功能,如频谱显示、基频检测等,帮助开发者更深入地理解音频数据的特性。
  5. 插件架构Wavesurfer.js采用插件架构,开发者可以通过添加插件来扩展其功能,如添加音频播放控制、区域选择、标记等。
  6. 性能优化Wavesurfer.js在性能方面也进行了优化,即使在处理大型音频文件时也能保持流畅的波形渲染和交互体验。

使用场景

  • 音乐播放器:在音乐播放器的网页应用中,使用Wavesurfer.js可以为用户提供一个直观且吸引人的音频波形展示,增强用户体验。
  • 音频编辑器:对于需要编辑和处理音频的应用,Wavesurfer.js提供了丰富的音频分析功能和可定制性,使开发者能够构建出功能强大的音频编辑器。
  • 教育和学习:在教育和学习领域,Wavesurfer.js可以用于展示音频信号的特性,帮助学生更好地理解音频的概念和原理。
  • 音频可视化艺术Wavesurfer.js的高度可定制性使其成为音频可视化艺术创作的理想选择,开发者可以创造出独特且富有创意的音频波形展示

项目

wavesurfer.js官网wavesurfer

应用

wavesurfer应用UI

总结

Wavesurfer.js是一个功能强大、易于集成且高度可定制的音频波形可视化库,适用于各种需要音频可视化功能的Web应用场景。



转载请注明:清风亦平凡 » Wavesurfer.js一个开源的音频可视化库

]]>
https://www.mlplus.net/2024/02/21/wavesurfer-js/feed/ 0
Docker使用NPM安装CNPM失败 https://www.mlplus.net/2024/01/22/docker-npm-install-cnpm-failed/ https://www.mlplus.net/2024/01/22/docker-npm-install-cnpm-failed/#respond Mon, 22 Jan 2024 03:45:39 +0000 https://www.mlplus.net/?p=4509 背景

项目使用jenkins自动构建应用,原本构建没有没有什么问题,一天突然就发生了异常且多次重试结果并没有改变。为了更快的构建完成项目,所以就找到简单的处理方法来解决问题。

Docker使用NPM安装CNPM失败-第0张图片

异常信息


RUN npm install -g cnpm@7.1.0 –registry=https://registry.npm.taobao.org
—> Running in 47877716e592
[91mnpm ERR! [0m[91mcode CERT_HAS_EXPIRED
[0m[91mnpm ERR![0m[91m errno CERT_HAS_EXPIRED
[0m[91mnpm ERR![0m[91m request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has expired
[0m[91m
[0m[91mnpm[0m[91m ERR! A complete log of this run can be found in:
[0m[91mnpm ERR![0m[91m /root/.npm/_logs/2024-01-22T03_08_56_192Z-debug.log
[0mThe command ‘/bin/sh -c npm install -g cnpm@7.1.0 –registry=https://registry.npm.taobao.org’ returned a non-zero code: 1

解决方法

如果没有使用的Docker就使用以下代码


npm config set strict-ssl false

使用Docker遇到此问题就Dockerfile中使用以下命令


RUN npm config set strict-ssl false && npm install -g cnpm@7.1.0 --registry=https://registry.npm.taobao.org



转载请注明:清风亦平凡 » Docker使用NPM安装CNPM失败

]]>
https://www.mlplus.net/2024/01/22/docker-npm-install-cnpm-failed/feed/ 0
开源在线文档预览解决方案kkFileView https://www.mlplus.net/2024/01/17/online-document-kkfileview/ https://www.mlplus.net/2024/01/17/online-document-kkfileview/#respond Wed, 17 Jan 2024 03:58:52 +0000 https://www.mlplus.net/?p=4481 背景

因需要进行文档在线预览,所以才有以下内容。因付费方案不在选择范围,所以只能寻求免费开源的解决方案。经过查找发现除了LibreOffice OnlyOfficekkFileView以外并没有发现其他可用的方案,也许是自己原因没有找到其他开源解决方案吧!由于没有在线编辑的需求,经过对比kkFileView部署以及使用极其简单,所以就选择了kkFileView

kkFileView

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等

开源在线文档预览解决方案kkFileView-第0张图片

项目特性

开源在线文档预览解决方案kkFileView-第1张图片
  • 使用spring boot开发,预览服务搭建部署非常简便
  • rest接口提供服务,跨平台特性(java,php,python,go,php,.net….)都支持,应用接入简单方便
  • 支持普通http/https文件下载url、http/https文件下载流url、ftp下载url等多种预览源
  • 提供zip,tar.gz发行包,提供一键启动脚本和丰富的配置项,方便部署使用
  • 提供Docker镜像发行包,方便在容器环境部署
  • 抽象预览服务接口,方便二次开发,非常方便添加其他类型文件预览支持

目前支持的文件类型如下:

  • 支持 doc, docx, xls, xlsx, xlsm, ppt, pptx, csv, tsv, dotm, xlt, xltm, dot, dotx,xlam, xla 等 Office 办公文档
  • 支持 wps, dps, et, ett, wpt 等国产 WPS Office 办公文档
  • 支持 odt, ods, ots, odp, otp, six, ott, fodt, fods 等OpenOffice、LibreOffice 办公文档
  • 支持 vsd, vsdx 等 Visio 流程图文件
  • 支持 wmf, emf 等 Windows 系统图像文件
  • 支持 psd 等 Photoshop 软件模型文件
  • 支持 pdf ,ofd, rtf 等文档
  • 支持 xmind 软件模型文件
  • 支持 bpmn 工作流文件
  • 支持 eml 邮件文件
  • 支持 epub 图书文档
  • 支持 obj, 3ds, stl, ply, gltf, glb, off, 3dm, fbx, dae, wrl, 3mf, ifc, brep, step, iges, fcstd, bim 等 3D 模型文件
  • 支持 dwg, dxf 等 CAD 模型文件
  • 支持 txt, xml(渲染), md(渲染), java, php, py, js, css 等所有纯文本
  • 支持 zip, rar, jar, tar, gzip, 7z 等压缩包
  • 支持 jpg, jpeg, png, gif, bmp, ico, jfif, webp 等图片预览(翻转,缩放,镜像)
  • 支持 tif, tiff 图信息模型文件
  • 支持 tga 图像格式文件
  • 支持 svg 矢量图像格式文件
  • 支持 mp3,wav,mp4,flv 等音视频格式文件
  • 支持 avi,mov,rm,webm,ts,rm,mkv,mpeg,ogg,mpg,rmvb,wmv,3gp,ts,swf 等视频格式转码预览

项目地址

GiteeGithub

部署

官方提供多种部署方式,其中包括使用Docker。因目前项目也是Docker部署,所以就使用此部署方式。

拉取镜像


# 网络环境方便访问docker中央仓库
docker pull keking/kkfileview:4.1.0

# 网络环境不方便访问docker中央仓库
wget https://kkview.cn/resource/kkFileView-4.1.0-docker.tar
docker load -i kkFileView-4.1.0-docker.tar

运行


docker run -it -p 8012:8012 keking/kkfileview:4.1.0

浏览器访问容器8012端口 http://127.0.0.1:8012 即可看到项目演示用首页

使用docker-compose


version: '3.4'

services:

  smart-document-service:
    container_name: smart-document-service
    image: keking/kkfileview:4.1.0
    restart: always
    ports:
      - "8012:8012"
    networks: 
      - smart-network-v1
    environment:
     - TZ=Asia/Shanghai
     - KK_FILE_DIR=/data/file  # 文件路径地址
      #KK_BASE_URL: "https://aa.bb.com/preview/"  # 配置nginx方向代理转发需要用到,详见官方文档
     - KK_CONTEXT_PATH=/previewDocuentFile/  # 配置nginx方向代理转发需要用到,详见官方文档
     - KK_OFFICE_PREVIEW_SWITCH_DISABLED=true  # 是否关闭预览切换,默认开启,如果需要关闭,设置为true
    volumes:
      - /data/smart/document_service/file:/data/file

networks:
  smart-network-v1:
    driver: bridge

项目接入

Nginx转发

由于以上内容更改了KK_CONTEXT_PATH,所以我们的转发内容是更改后的内容previewDocuentFile。其实不用Nginx转发也是可以的,由于项目的对外入口就一个,就有了这个Nginx转发的需求。


   location /previewDocuentFile {
          proxy_pass http://smart-document-service:8012;
   }

当您的项目内需要预览文件时,只需要调用浏览器打开本项目的预览接口,并传入须要预览文件的url,示例如下:


<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>

var url = 'http://127.0.0.1:8080/file/test.txt'; //要预览文件的访问地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(previewUrl)));

以上方式打开新页面进行预览,如果不开新页面使用iframe也是一样的。

在线文档预览效果
更多信息参考官方网站https://kkview.cn



转载请注明:清风亦平凡 » 开源在线文档预览解决方案kkFileView

]]>
https://www.mlplus.net/2024/01/17/online-document-kkfileview/feed/ 0
想你的话告诉月亮 https://www.mlplus.net/2023/12/23/%e6%83%b3%e4%bd%a0%e7%9a%84%e8%af%9d%e5%91%8a%e8%af%89%e6%9c%88%e4%ba%ae/ https://www.mlplus.net/2023/12/23/%e6%83%b3%e4%bd%a0%e7%9a%84%e8%af%9d%e5%91%8a%e8%af%89%e6%9c%88%e4%ba%ae/#respond Sat, 23 Dec 2023 03:20:18 +0000 https://www.mlplus.net/?p=4467 背景

自从抖音火起来之后,可以看到或者听到各种各样的事情。当然,也会有一些好听的歌曲出现。是的。这次又听到一首好听的歌曲,歌曲名称是《想你的话告诉月亮》,很喜欢这首歌曲。

它通过月亮这个象征,将歌者内心的情感传达给听众,让人感受到亲情、爱情的美好和珍贵。这首歌不仅是一首歌曲,更是一份情感的传递和表达。

歌曲信息


想你的话告诉月亮-刘晓超
作词:花开花落/冯光
作曲:冯光
演唱:刘晓超
编曲:福洲
混音:宋马超
制作人:杨学涛

歌词


天边的云朵总那么匆忙
久久凝望你身处的方向
苦苦压抑这思念的疯狂
情不自禁让我热泪盈眶
牵挂的心呀飞向了远方
顺便托风儿轻轻对你讲
不知远方的你是否无恙
今夜梦中会不会不一样
想你的话呀 悄悄的 悄悄的 告诉月亮
相思的话呀 相思的话现在无人可讲
真的难忘记那些旧时光
牵挂的心呀在风中彷徨
想你的话呀 悄悄的 悄悄的 告诉月亮
心上的人啊心上的人 多想陪在你身旁
无边的思念全都写脸上
写在我的心上 我心上
牵挂的心呀飞向了远方
顺便托风儿轻轻对你讲
不知远方的你是否无恙
今夜梦中会不会不一样
想你的话呀 悄悄的 悄悄的 告诉月亮
相思的话呀 相思的话现在无人可讲
真的难忘记那些旧时光
牵挂的心呀在风中彷徨
想你的话呀 悄悄的 悄悄的 告诉月亮
心上的人啊心上的人 多想陪在你身旁
无边的思念全都写脸上
写在我的心上 我心上
写在我的心上 我心上

音乐

以上歌曲引用的是网易音乐内容,使用的为网易外链播放器。



转载请注明:清风亦平凡 » 想你的话告诉月亮

]]>
https://www.mlplus.net/2023/12/23/%e6%83%b3%e4%bd%a0%e7%9a%84%e8%af%9d%e5%91%8a%e8%af%89%e6%9c%88%e4%ba%ae/feed/ 0
JS录音获取麦克风权限被拒绝访问 https://www.mlplus.net/2023/11/10/js%e5%bd%95%e9%9f%b3%e8%8e%b7%e5%8f%96%e9%ba%a6%e5%85%8b%e9%a3%8e%e6%9d%83%e9%99%90%e8%a2%ab%e6%8b%92%e7%bb%9d%e8%ae%bf%e9%97%ae/ https://www.mlplus.net/2023/11/10/js%e5%bd%95%e9%9f%b3%e8%8e%b7%e5%8f%96%e9%ba%a6%e5%85%8b%e9%a3%8e%e6%9d%83%e9%99%90%e8%a2%ab%e6%8b%92%e7%bb%9d%e8%ae%bf%e9%97%ae/#respond Thu, 09 Nov 2023 16:04:00 +0000 https://www.mlplus.net/?p=4447 背景

因业务需求原因,需要在网页上进行录音,使用Javascript来进行操作,完成录音并保存上传到指定服务器。实现相关代码后进行测试,发现访问音频设备最后被拒绝。

原因

网页上反馈的异常信息如下图所示

网页访问音频设备被拒绝

经过再次的查看,确认未经处理的异常信息如下:

DOMException: Permission denied by system
控制台显示的异常信息

查下浏览器的设置,浏览器是否禁用麦克风,经过确认浏览器并没有发现什么问题。

JS录音获取麦克风权限被拒绝访问-第2张图片
JS录音获取麦克风权限被拒绝访问-第3张图片

浏览器各项检查都非常的正常,尝试录音错误依然再次出现,按道理来讲,应该是没有什么问题的。就目前情况而言,的确可能存在不讲道理的情况呀。随后更换一台电脑进行了一下测试,经过测试发现没有任何问题,正常录音。这就诡异了!也许是音频硬件原因?将这音频设备在其他电脑上进行再次确认,测试结果还是没有问题。这就让人郁闷了.

哎!万万没有想到,麦克风的访问权限在系统设置中根本就没有开。真是服了自己,这个问题竟然没有第一时间确认,真有一巴掌拍在脸上的感觉!

系统声音设置界面
系统麦克风访问权限设置页面

解决

知道了引起异常的具体原因后,解决起来就无比的简单。针对以上问题来说,更改设置就好了。

更改麦克风访问权限
麦克风权限允许后的图例

总结

一些时候往往会忽视一些简单的问题,就默认了这些基础内容不会出现任何问题。当一些基础内容出现问题,就被忽略掉了!还是要避免一些惯性思维,防止不必要的低级问题再次出现。此事记录,更好的警示自己!



转载请注明:清风亦平凡 » JS录音获取麦克风权限被拒绝访问

]]>
https://www.mlplus.net/2023/11/10/js%e5%bd%95%e9%9f%b3%e8%8e%b7%e5%8f%96%e9%ba%a6%e5%85%8b%e9%a3%8e%e6%9d%83%e9%99%90%e8%a2%ab%e6%8b%92%e7%bb%9d%e8%ae%bf%e9%97%ae/feed/ 0
初级救护员培训课 https://www.mlplus.net/2023/11/08/%e5%88%9d%e7%ba%a7%e6%95%91%e6%8a%a4%e5%91%98%e5%9f%b9%e8%ae%ad%e8%af%be/ https://www.mlplus.net/2023/11/08/%e5%88%9d%e7%ba%a7%e6%95%91%e6%8a%a4%e5%91%98%e5%9f%b9%e8%ae%ad%e8%af%be/#respond Wed, 08 Nov 2023 15:40:59 +0000 https://www.mlplus.net/?p=4415 背景

2023年10月23日,社区群发布了关于深圳福田健康局举办的一个公众急救技能的培训报名的通知。如果希望学习相关内容的鼓励报名参与。正式的培训时间定在了2023年11月3日星期五,培训时间一整天,让人感到遗憾的就是培训时间不是周末。看了一下培训前的课程相关信息,感觉可以参与一下。学习一点急救知识,以便不时之需。按照指引进行了信息录入,完成报名流程。

培训

时间过得飞快,像流水一样。感觉转眼间就到了约定的时间。2023年11月3日按照约定的地点、时间提前半小时前去,原本以为参与的人应该不多,毕竟在群里看到报名列表只有十多个人,万万没有想到参与的人数竟然达到60多。哎!终归是自己想当然了,本来就是面向的整个区,而不是仅面向所在的小区。

人来的这么多,突然有点退意,假都请了,来都来了,学一下吧!如若不然真的对不起自己那个积极性,本来就是要学的,人多人少又有什么关系!

课程主要内容

  • 现场急救四步法
  • 心肺复苏技术
    • 胸外按压
    • 人工呼吸
    • 电击除颤(AED的使用)
  • 异物卡喉
    • 成人异物卡喉的急救方法
    • 婴儿异物卡喉的急救方法
  • 外伤急救
    • 创伤止血技术
    • 创伤包扎技术
  • 紧急翻身
    • 俯卧转仰卧
    • 仰卧转侧卧

现场准备的还是比较充足的,场地、座位、课程用到的设备等,其中假人模型与AED模拟机器是配对的,三排十五对,AED有两种型号,使用都很简单!如下图所示:

心肺复苏假人模型以及AED

课程开始,本来打算将PPT展示的内容拍照,讲师明确说课件有版权,课件开发投入了相当大的人力物力,不允许对课件拍照,只拍了一张首图,首图不存在课程相关急救信息,这就不会对其课程版权的侵害啦!

培训课程PPT课件首图

讲了关于心肺复苏的理论知识并安排利用假人进行实操练习,六十多人,每十五一组。说真的针对心脏骤停的心肺复苏的操作也不难,就是挺累人的。以前,在电视上看医生给患者进行心肺复苏感觉挺轻松的,实际上不但需要一些技巧,最重要的是还很消耗体力,医护人员还真不容易!

这里关于急救内容就不涉及了,别把人害了!我觉得这短时间的心肺复苏学习是远远不够的,了解些急救知识只能做权宜之计下的应急之用,想更专业的救人还是需要进行大量的练习与学习。以下一张图是查看周围AED分布的方法,这一张图讲师明确可以拍照。

附近AED查找的方式

以下是学员进行心肺复苏实操练习的一个场景,每个人都需要实操练习。

心肺复苏学员练习图

除了学习心肺复苏之外,还讲了异物卡喉、外伤急救等,其中外伤急救就是一个理论知识点普及。学习结束之后进行一个简单的考试,理论加实操,实操主要就是心肺复苏的操作。因为有假人模型的存在,也只有这个具备可操作性。最后,每人发一本急救手册,所讲的内容都在这个小册子上。

急救培训手册

总结

学习相关的急救知识是非常必要的,这些公众急救的安排也是比较有利的。这一天的学习还是比较有用,知道了一些急救的理论知识在未来说不定用得上,真的遇到需要急救的事情应该是能为专业的急救赢取一点时间的。讲师在讲课的时候说:“遇到一些需要急救的,在确保自己安全的前提下,可以放心大胆去救,不用担心,因为民法典出台了关于公众急救的一些免责规定”。其实对我而言,依然保持谨慎态度,即使遇到了需要急救的情况,个人大概率还是选择打120或者报警,真的很惧怕一些想不到的情况以及纠纷。



转载请注明:清风亦平凡 » 初级救护员培训课

]]>
https://www.mlplus.net/2023/11/08/%e5%88%9d%e7%ba%a7%e6%95%91%e6%8a%a4%e5%91%98%e5%9f%b9%e8%ae%ad%e8%af%be/feed/ 0
天际 https://www.mlplus.net/2023/11/04/%e5%a4%a9%e9%99%85/ https://www.mlplus.net/2023/11/04/%e5%a4%a9%e9%99%85/#respond Sat, 04 Nov 2023 14:23:36 +0000 https://www.mlplus.net/?p=4407 背景

打开抖音进行短时间消遣的时候,听到一首非常伤感的歌曲,非常的优美。歌曲名称《天际》,由戴春磊作词、作曲,姜玉阳演唱的一首歌曲。它充满情感的歌曲,旋律优美,歌词深情。歌曲通过主人公的内心独白,表达了对爱情的无奈和悲伤,让人感受到了爱情中的痛苦和失落。同时,歌曲也让人思考生命和时间的流逝,让人更加珍惜当下。

虽然它很伤感,但是很喜欢。

歌词


不知道为什么
让我遇见了你
在那个阳光明媚的春天里
不知道为什么
让我爱上了你
在这个错误的时间世界里
我其实有很多话要对你讲
但原谅我不能说的太明了
你是否也会感受
我这心碎的感受
你是否也曾在梦里梦到我
在冷冷的黑夜里哭泣
分不清眼泪和雨滴
慢慢的淋湿了我
为你写的每一首诗句
在心里面默默的想你
掩饰不住的委屈
只为了那一声我爱你
在无尽的夜空看星星
猜一猜哪一个是你
猜到了
你要对我眨眼睛
想要把你拥入怀里
你却变成流星
消失在这茫茫的天际
我其实有很多话要对你讲
但原谅我不能说的太明了
你是否也会感受
我这心碎的感受
你是否也曾在梦里梦到我
在冷冷的黑夜里哭泣
分不清眼泪和雨滴
慢慢的淋湿了我
为你写的每一首诗句
在心里面默默的想你
掩饰不住的委屈
只为了那一声我爱你
在无尽的夜空看星星
猜一猜哪一个是你
猜到了
你要对我眨眼睛
想要把你拥入怀里
你却变成流星
消失在这茫茫的天际
在冷冷的黑夜里哭泣
分不清眼泪和雨滴
慢慢的淋湿了我
为你写的每一首诗句
在心里面默默的想你
掩饰不住的委屈
只为了那一声我爱你
在无尽的夜空看星星
猜一猜哪一个是你
猜到了
你要对我眨眼睛
想要把你拥入怀里
你却变成流星
消失在这茫茫的天际

音乐欣赏



转载请注明:清风亦平凡 » 天际

]]>
https://www.mlplus.net/2023/11/04/%e5%a4%a9%e9%99%85/feed/ 0
黑色十月 https://www.mlplus.net/2023/10/31/%e9%bb%91%e8%89%b2%e5%8d%81%e6%9c%88/ https://www.mlplus.net/2023/10/31/%e9%bb%91%e8%89%b2%e5%8d%81%e6%9c%88/#respond Tue, 31 Oct 2023 15:34:54 +0000 https://www.mlplus.net/?p=4381 感概

正如标题所言,这个十月对于我来说是黑色的。为什么会这么说呢?因为生病了,并且病程还是比较长,过程非常难受。黄金假期别人都欢乐的过节,我却是渡劫呀。月末做一下记录。

十月三号

早上找了个药店测试了一下血糖,结果也在正常范围内,随后就吃个早饭。假期并没有游玩的计划,所以就去商场随便逛一逛,半个小时也就回了。感觉头有点痛,怀疑可能发热了,测量体温确认低烧且表现不太稳定,为了确认这个情况就重新买了一个体温计进行测量并确认了结果。低烧!除了这个低烧以外到没有 经过1个小时发现体温有升高趋势,还是得用药啊!

疫情期间准备的药物还有不少,所以就尝试吃点退烧药。退烧药有点作用,体温没有继续上升,但是一直保持低烧。此时症状已经包含发热、头痛、咽痛、咳嗽(不频繁、不剧烈)。出现这种情况,个人感觉应该是二阳(新冠感染)了。经过几个小时候体温继续上升,二次服药后继续保持低烧。这个时候已经下午6点了。又经过几个小时体温再次上升,变为中度发热38.6。这个时候觉得应该去医院了,症状加剧。

10月4号凌晨到了市二院急诊,描述相关症状,医生再次询问并查体。检查了血常规+CRP、新冠、甲流、乙流这四项。其中CRP稍高,新冠、甲流以及乙流都是阴性。医生说是病毒性感冒,问题不大。开了3天的抗病毒的感冒药以及退热布洛芬。

复诊

10月4日到6日按照医嘱服用,除发热症状有好转以外其他症状没有好转并有加重趋势。此时症状包含咳嗽(剧烈)、咽痛加剧、鼻塞、流鼻涕、打喷嚏、咳黄痰、畏寒。8日呼吸科复诊,增加CT检查,结果显示慢性验证。抗感冒药、抗生素、口服液6天,8日到13日症状逐渐消失,仅剩频次不高的咳嗽、咳痰。

10月14日再次复诊,更换了抗生素并给医嘱,明确药用完后没有其他症状不必复诊,有痰咳出即可。14日到19日咳嗽、咳痰逐渐减少,咳嗽、咳痰并未完全消失。发现活动稍大一点就咳嗽,医生曾说过恢复可能需要2周左右,也许还需要再等等。

总结

此次发热出现的一连串的症状,治疗到康复病程比较长,将近一月。其实首次急诊时候直接上抗生素也许就没有后续的问题了!当然医生未必是错了!个人觉得应该存在耐药性了,要不然不会出现用了抗生素还会出现少量咳黄痰的情况。耐药性是一个很麻烦的问题,小时候不懂这个,更没有注意这个问题。有问题就是一路阿莫西林、头孢过来的。

自己体质应该是差了的,免疫应该也是减弱了。以后还是要适当的进行锻炼,增强体质,提高免疫力。

希望以后越来越好吧!当然,这也许只是一个奢望罢了。衰老、疾病是不可避免、不可逃避的。

万般皆是命,半天不由人呐!



转载请注明:清风亦平凡 » 黑色十月

]]>
https://www.mlplus.net/2023/10/31/%e9%bb%91%e8%89%b2%e5%8d%81%e6%9c%88/feed/ 0
在Docker容器下使用.net 5统计图中文乱码的问题 https://www.mlplus.net/2023/09/24/docker-draw-image-garbled-code/ https://www.mlplus.net/2023/09/24/docker-draw-image-garbled-code/#respond Sun, 24 Sep 2023 15:09:15 +0000 https://www.mlplus.net/?p=4356 背景

客户新提需求,需要增加一张报表,报表需要增加统计图表。因为客户需要将数据以及统计图表一并导出到word中,所以没有使用前端统计相关的类库,比如:echartshighcharts等库。虽然可以使用前端相关类库导出word,但是并不能满足现有需求。后台服务使用的是.net 5,统计图完成后发现中文出现乱码。如下图:

直方图乱码

问题

出现以上乱码问题,其一可能是统计类库不支持中文导致的,也有可能是docker镜像中缺少相应的中文字体。因为在本地开发环境测试并没有问题,更新到测试环境后才发现以上乱码情况,所以应该是镜像中缺少相关中文字体而导致的。

解决

既然是缺少中文字体,那就安装字体就行了。在Windows系统中复制需要的字体到新建名称为chinese文件夹下,将此文件夹放到与dockerfile同一目录下即可。dockerfile文件中新增内容如下:


RUN apt-get -y  install fontconfig
COPY ./chinese /usr/share/fonts
RUN fc-cache -vf
Windows系统字体所在位置:控制面板\外观和个性化\字体
Linux字体目录是:/usr/share/fonts,所以dockerfile中指定将字体复制到此目录。

dockerfile更改后提交构建镜像并重新运行容器,再次查看效果后发现恢复正常,如下图:

直方图修正乱码

总结

docker中使用的镜像,有时候选择的是最小依赖的基础镜像,镜像比较小。但是一些情况是不满足需求的,在不更改基础镜像的情况下,还是要通过docker相关指令安装所需依赖,例如:一些软件、字体或者其他内容。



转载请注明:清风亦平凡 » 在Docker容器下使用.net 5统计图中文乱码的问题

]]>
https://www.mlplus.net/2023/09/24/docker-draw-image-garbled-code/feed/ 0
迁移网站更改域名后一个可以使用的301跳转方案 https://www.mlplus.net/2023/08/31/website-migration-301/ https://www.mlplus.net/2023/08/31/website-migration-301/#respond Wed, 30 Aug 2023 16:36:00 +0000 https://www.mlplus.net/?p=4329 背景

最初,由于购买cc域名不支持备案,所以就使用了阿里云香港云空间。自从2016年网站应用由.net应用BlogEngine.NET改为WordPress至今都使用的阿里云香港云空间。稳定倒是挺稳定的,就是一直感觉访问速度比较慢,本以为是阿里云香港云空间本是这样,就没有研究其慢的真实原因,当然这已经是后话了。

今年云空间快要到期的时候,突然想将网站迁移到国内,为了不在备案期间停止域名访问,就更换了域名。当域名更换完成,空间迁移完毕,貌似一切准备就绪,发现原来空间即将到期,留给301跳转的时间非常不足。本想使用阿里云DNS解析进行301跳转,这个也是最优的解决方案,无奈的是域名必须进行备案且是两个域名都必须备案。如果原来的域名也参与备案的话,网站就需要停止访问了,为了避免这种情况,只能放弃使用此方法。

发现

续费原来空间或者购买腾讯云和百度云等在价格上是不划算的。为了保证以最低的代价进行301跳转,就开始找一些低价无需备案的空间来作为中转。经过两天的查找发现一款非常符合预期的服务商,支持多国语言 ,支持不同的支付方式,包括阿里的支付宝,从2006年成立至今已经17年的justhost。发现最经济的一种方式以存储空间使用多少来进行收费的,1兆每天0.001元,也就是说1兆每天1厘,如下图所示:

服务空间套餐选择

使用

首先,注册该网站并充值1.17美元,当时的最低充值金额。随后,订购所选择的服务计划(套餐),等待10分钟左右邮件通知相关信息。以下便是订购的服务,按天来进行续订,按天进行扣费。

计划订购列表

新建一个php文件index.php上传到根目录,其内容如下


<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: 需要301跳转到域名");
exit();
?>

完整示例如下:


<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.mlplus.net");
exit();
?>

完成以上内容后发现一个问题,只有访问首页才会跳转,访问其他页面是没有作用的。为了达到所有请求进行301跳转,需要进行额外的配置重定向。为了完成以上需求,需要在根目录下使用.htaccess配置文件进行,这个文件如果存在就编辑修改,不存在则新建上传。新增具体内容如下:


RewriteEngine On
RewriteRule ^(.*)$ 这里是具体域名/$1 [R=301,L]

完整示例如下:


RewriteEngine On
RewriteRule ^(.*)$ https://www.mlplus.net/$1 [R=301,L]
以上配置属于Apache服务器的配置

经过一段时间的观察,此服务商也比较稳定,每天0.001元,从2023年07月11日至2023年08月31日止,扣费0.06元。

最初扣费详情图
最新扣费详情

日志

使用的此服务是按照占用空间进行计算收费,网站访问产生的日志文件以及访问统计图表也是被计算在其中的。最初发现占用空间升高就手动清理一次,感觉手动清理太过繁琐,就是用程序自动清理一下。基于.net core使用FluentFTP库进行FTP登录清理操作。

空间暂用统计

使用最简单,最暴力的方式完成,不考虑什么设计与性能,以最快的速度实现目的。

实现代码:


using FluentFTP;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace JustHost.Ftp.ClearLog
{
    internal class CrontabFtpClear
    {
        System.Timers.Timer timer;
        List<string> paths = new List<string>() { "/domains/skyfinder.cc/logs/", "/domains/skyfinder.cc/stats/" };
        public CrontabFtpClear()
        {
            timer = new System.Timers.Timer();
            timer.Interval = TimeSpan.FromHours(5).TotalMilliseconds;
            //timer.Interval = TimeSpan.FromSeconds(5).TotalMilliseconds;
            timer.Elapsed += Timer_Elapsed;
            timer.Enabled = true;
            timer.AutoReset = true;
        }

        private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
        {
            timer.Enabled = false;
            ClearProcess();
        }

        private void ClearProcess(){
            try
            {
                Console.WriteLine($"操作:执行指定清理命令 时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
                // 设置连接信息
                var ftpClient = new FtpClient("这里是服务器IP地址", "这里是用户名", "这里是密码");

                // 连接到FTP服务器
                ftpClient.Connect();
                foreach (var item in paths)
                {
                    if (!ftpClient.DirectoryExists(item))
                    {
                        continue;
                    }
                    ftpClient.DeleteDirectory(item, FtpListOption.ForceList);
                }

                ftpClient.Disconnect();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                timer.Enabled = true;
            }
        }


    }
}

调用运行:


using FluentFTP;

namespace JustHost.Ftp.ClearLog
{
    internal class Program
    {
        static void Main(string[] args)
        {
            CrontabFtpClear ftpClear = new CrontabFtpClear();
            Console.WriteLine($"FTP目录清理服务启动 {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
            while (true)
            {
                Thread.Sleep(1000);
            }
           
        }
    }
}

示例下载

justhost空间日志自动清理示例



转载请注明:清风亦平凡 » 迁移网站更改域名后一个可以使用的301跳转方案

]]>
https://www.mlplus.net/2023/08/31/website-migration-301/feed/ 0
Nginx禁止指定UA、IP或者IP段访问 https://www.mlplus.net/2023/07/21/nginx-access-denied-ua-ip/ https://www.mlplus.net/2023/07/21/nginx-access-denied-ua-ip/#respond Fri, 21 Jul 2023 04:50:21 +0000 https://www.mlplus.net/?p=4293 背景

在管理后台修改一些内容的时候,想到很久之前安装的重定向插件Redirections,随便就看一下。这不看不知道,看到了就差点大声尖叫。没有想到这么多对站点无意义的请求命中之前设置的重定向规则,一眼就可以发现请求UA不正常。例如:Apache-HttpClientpython-requests

这种是一些非法采集的应用,觉得还是要对这类UA进行一些限制,例如:禁止指定UA访问、拒绝IP或者IP段的访问等。

非正常UA访问记录图

现在服务已经由原来的Apache迁移到了Nginx服务上运行,所以现在的处置方案针对Nginx的。

Nginx禁止特定UA访问

Nginx中有一个内置变量$http_user_agent,表示HTTP请求头中的User-Agent字段。使用正则表达式匹配User-Agent字段中是否包含特定的字符串,符合规则的则禁止访问。具体实现如下:


location / {
    if ($http_user_agent ~* (python-requests|Apache-HttpClient)) {
        return 403;
    }
}

以上配置可以用于防止用户使用某些自动化工具或脚本对站点进行滥用。然而,需要注意的是,这种检测方式并不完全可靠。因为用户可以通过修改User-Agent来绕过此防护措施。所以这种方式只可以被视作拦截大多数爬虫程序的一种简单手段。

Nginx禁止特定的IP以及IP段

如果说Nginx禁止特定的UA来访问是一个泛化的处理方式的话,那么禁止IP或者IP段这是一个具备针对点的解决方法。针对某个IP或者某个IP段,这种方式比较滞后,发现大量无用请求后才可以采取的措施。当然,面对这种恶意的请求,这些也只是最快速、最简单、最低廉的解决方案。

Nginx中,可以使用deny指令来禁止IP地址或IP地址段的访问。这个功能可以用于防止恶意访问和DDoS攻击,以及限制对特定内容的访问。

禁止单个IP地址

要禁止单个IP地址的访问,可以在 Nginx 配置文件中添加以下行:


location / {
    deny 192.168.1.100;
    # 其他配置
}

在此例中,使用 deny 指令来阻止IP地址为 192.168.1.100 的客户端访问该位置的内容。如果有客户端尝试访问,他们将收到403 Forbidden错误。

禁止IP地址段

如果要禁止IP地址段的访问,可以在 Nginx 配置文件中使用 CIDR 表示法。CIDR 表示法允许您指定一个 IP 地址的范围。例如,要阻止 192.168.0.0/24 子网内的所有客户端访问,可以使用以下配置:


location / {
    deny 192.168.0.0/24;
    # 其他配置
}

这将阻止子网内的所有IP地址从该位置访问,包括 192.168.0.1192.168.0.2192.168.0.3 等等。

恢复被禁止的客户端

如果想恢复先前被禁止的 IP 地址或 IP 地址段的客户端,请简单地将其从相关的配置中删除或注释掉。


location / {
    # deny 192.168.1.100;
    # deny 192.168.0.0/24;
    # 其他配置
}

完整实例

下面是一个完整的Nginx配置,它禁止IP地址为192.168.1.100192.168.0.0/24的客户端访问站点:


http {
    server {
        listen 80;
        server_name example.com;
        root /var/www/html;

        location / {
            # 禁止IP地址为192.168.1.100的客户端访问
            deny 192.168.1.100;

            # 禁止IP地址为192.168.0.0/24的客户端访问
            deny 192.168.0.0/24;

            # 允许其他客户端访问
            allow all;

            # 其他配置
        }
    }
}



转载请注明:清风亦平凡 » Nginx禁止指定UA、IP或者IP段访问

]]>
https://www.mlplus.net/2023/07/21/nginx-access-denied-ua-ip/feed/ 0
HTML5音频资源加载失败的处理方法 https://www.mlplus.net/2023/07/16/html5-audio-load-fail/ https://www.mlplus.net/2023/07/16/html5-audio-load-fail/#respond Sun, 16 Jul 2023 14:00:00 +0000 https://www.mlplus.net/?p=4202 背景

页面加载很多音频标签,音频资源一些加载不成功,音频标签不可用,并且排除以下几种情况:

  • 检查音频的链接是否有效
  • 检查音频格式是否支持
  • 检查网络连接是否通畅

如果确认以上内容没有任何问题,则是页面加载过多的音频资源而导致部分音频资源加载失败。可以使用JavaScript进行资源加载重试,当然重试的策略需要进行限制,避免无限制尝试。

实现方式

以下是使用JavaScript代码实现自动重新加载资源的一个简单的示例,当音频标签加载失败时,它会自动尝试重新加载音频:


const audio = document.querySelector('audio');

audio.addEventListener('error', () => {
  audio.load();
});



在上面示例中,首先选择了音频标签,并添加了一个错误事件监听器。当发生错误时,错误事件会触发,并调用load()方法来重新加载音频并尝试播放。

如果希望重试的次数有限制,可以使用一个计数器来限制次数,例如:


const audio = document.querySelector('audio');
let retryCount = 0;
const maxRetries = 3;
audio.addEventListener('error', () => {
  if (retryCount < maxRetries) {
    audio.load();
    retryCount++;
  } else {
    console.log('音频加载失败');
  }
});

在以上的示例中,添加了一个retryCount变量来跟踪尝试次数,并添加了一个maxRetries变量来限制最大尝试次数。

如果重试次数小于最大尝试次数,将重新加载音频,并增加重试计数器。如果达到最大尝试次数,将打印一条错误消息。

这样,就可以使用JavaScript代码来实现自动重新加载音频标签了。这只是一个简单的示例,而实际情况可能需要考虑更多的情况,此示例仅供一个参考!



转载请注明:清风亦平凡 » HTML5音频资源加载失败的处理方法

]]>
https://www.mlplus.net/2023/07/16/html5-audio-load-fail/feed/ 0
WordPress由Apache迁移到Nginx出现404问题的解决方法 https://www.mlplus.net/2023/06/15/wordpress-nginx-rewrite/ https://www.mlplus.net/2023/06/15/wordpress-nginx-rewrite/#respond Thu, 15 Jun 2023 11:01:55 +0000 https://www.mlplus.net/?p=4236 背景

虚拟主机即将到期且位置在香港,为了网站更好的访问速度索性就迁回大陆。在好多年前购买的时候只有Apache可选,这次迁回有Nginx可以选择,官方有说这个性能更加的强劲,所以这次就选了Nginx服务。数据以及文件很容易就完成了迁移,本想万事大吉,随便点击了几下测试全是404,其中包括文章、分类、标签、搜索、分页、站点地图、日期等全部404。WordPress后台固定链接设置的是日期和名称,应该就是URL重写的问题了。在使用Apache的虚拟主机的时候是默认的有相关配置的,但是新购的Nginx虚拟主机就没有这种配置了。所以,只有自己来进行URL的重写配置。

固定链接
404演示

Nginx解决方法

Nginx重写URL配置内容如下:


location / {
    if (!-e $request_filename) {
        rewrite ^/([0-9]+?)/([0-9]+?)/([0-9]+?)/([^/]+)$ /index.php?year=$1&monthnum=$2&day=$3&name=$4 last;
        rewrite ^/([0-9]+?)/([0-9]+?)/([0-9]+?)/?$ /index.php?year=$1&monthnum=$2&day=$3 last;
        rewrite ^/([0-9]+)/([0-9]+)/?$ /index.php?year=$1&monthnum=$2 last;
        rewrite ^/category/(.*)/page/([0-9]+?)/?$ /index.php?category_name=$1&paged=$2 last;
        rewrite ^/category/(.*)$ /index.php?category_name=$1 last;
        rewrite ^/tag/(.*)/page/([0-9]+?)/?$ /index.php?tag=$1&paged=$2  last;
        rewrite ^/tag/(.*)/?$ /index.php?tag=$1 last;
        rewrite ^/page/([0-9]+?)/?$ /index.php?paged=$1 last;
        rewrite ^/([0-9]+?)/([0-9]+?)/page/([0-9]+?)/?$ /index.php?year=$1&monthnum=$2&paged=$3 last;
        rewrite ^/search/(.+?)/page/([0-9]+?)/?$ /index.php?s=$1&paged=$2 last;
        rewrite ^/search/(.+?)/?$ /index.php?s=$1 last;
        rewrite ^/(.+?)$ /index.php?pagename=$1 last;
    }
    try_files $uri $uri/ /index.php?$args;
}

location ~*  /feed/?$ {
    try_files $uri /index.php?$args;
}

location = /wp-sitemap.xml {
    try_files $uri $uri/ /index.php?$args;
}

location ~ ^/wp-sitemap(-index)?.xsl {
    try_files $uri $uri/ /index.php?$args;
}

location ~ ^/wp-sitemap-(.*?)-(.*?).xml$ {
    try_files $uri $uri/ /index.php?$args;
}

如果觉得以上配置太过臃肿,可以使用以下配置


location / {
     try_files $uri $uri/ /index.php?$args;
}

Apache中解决方法

.htaccess文件中加入以下代码:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>



转载请注明:清风亦平凡 » WordPress由Apache迁移到Nginx出现404问题的解决方法

]]>
https://www.mlplus.net/2023/06/15/wordpress-nginx-rewrite/feed/ 0
Syncfusion.DocIO.Net.Core操作Word的第三方组件无限制版 https://www.mlplus.net/2023/05/16/syncfusion-docio-net-core/ https://www.mlplus.net/2023/05/16/syncfusion-docio-net-core/#respond Tue, 16 May 2023 04:54:47 +0000 https://www.mlplus.net/?p=4208 背景

一些朋友推荐处理Word可以使用Syncfusion.DocIO,说是API比较好用而且还支持doc格式的文件,因此就了解一下。经过测试确认是比一些开源的处理库好用一点,支持相对来说比较完善,就因为这些所以才会有这篇介绍的内容。

Syncfusion.DocIO.Net.Core

Syncfusion.DocIO.Net.CoreSyncfusion的一组.NET组件,用于创建、编辑和转换Microsoft Word文档。它支持多种文件格式,包括.docx.rtf.txt等。它提供了一组易于使用的 API,可以帮助开发人员轻松地创建、读取和修改 Word 文档。

主要功能

  • 创建Word文档并添加内容、表格、图片等元素。
  • 编辑Word文档中的文本、表格、图片等内容。
  • Word文档转换为其他格式,如PDFHTML等。
  • 支持批量操作,可以同时打开多个Word文档并进行批量编辑和转换。
  • 支持自定义样式和主题,可以根据需要修改文档的外观和布局。
  • 包含额外的安全性特性,可以确保在处理敏感数据时的安全性

使用示例

以下是一个简单的示例,演示如何使用Syncfusion.DocIO.Net.Core创建一个Word文档并添加内容


using Syncfusion.DocIO;
using Syncfusion.DocIO.Xls;
using Syncfusion.DocIO.Xls.Conversion;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CreateWordDocument
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个新的Word文档
            Document doc = new Document();
            doc.AddSection("Introduction");
            
            //添加一个标题1级别的段落,并在其中添加一些文本
            Section section = doc.Sections[0];
            paragraph = section.Paragraphs.Add("Hello World!", DocFormat.Title1);
            paragraph.Range.InsertAfter("This is a sample document created using Syncfusion.DocIO.NET Core.");
            
            //保存并关闭文档
            doc.Save(@"C:\Documents\Sample.docx");
            doc.Close();
        }
    }
}



结论

Syncfusion.DocIO.Net.Core相对来说API比较好用,操作的格式基本符合预期。缺点就是此组件是商业版本,会有水印以及其他版权提示内容,如下图所示。如果使用比较低的版本,只有页眉页脚有试用版说明,比如:20.1.0.61及一下版本。

Word使用Syncfusion.DocIO导出包含水印与其他说明。

鉴于水印不便于学习,为了更好的营造学习气氛,所以对水印以及其他提示进行移除处理,水印移除后的表现形式如下:

Syncfusion.DocIO.Net.Core操作Word的第三方组件无限制版-第1张图片

如果不是非Syncfusion.DocIO.Net.Core不可,可以选用其他免费开源的Word处理组件。如果一定要使用请购买正版,以便得到更好的效果以及技术支持。虽然此组件相对来说比较完善好用,但最终我还是选用其他的开源组件,例如:

下载

Syncfusion.DocIO.Net.Core21.2.4 Syncfusion.DocIO.Net.Core22.1.37
版本22.1.37中包含Doc、XlsIO、Pdf
以上下载内容仅供学习使用,请勿用于其他用途。



转载请注明:清风亦平凡 » Syncfusion.DocIO.Net.Core操作Word的第三方组件无限制版

]]>
https://www.mlplus.net/2023/05/16/syncfusion-docio-net-core/feed/ 0
Guetzli高质量压缩图片算法工具 https://www.mlplus.net/2023/04/06/guetzli-jpeg-encoder/ https://www.mlplus.net/2023/04/06/guetzli-jpeg-encoder/#comments Thu, 06 Apr 2023 04:59:57 +0000 https://www.mlplus.net/?p=4181 介绍

Guetzli是一款JPEG编码器,其目标是在高视觉质量下实现卓越的压缩密度。Guetzli生成的图像通常比libjpeg生成的同等质量的图像小20-30%Guetzli只生成顺序的(非渐进的)JPEG,因为它们提供了更快的解压缩速度。

JPEG 图像的视觉质量与它的多阶段压缩过程有关:色彩空间变换,离散余弦变换,以及量化等等。Guetzli 具体针对量化阶段,图像视觉质量损失越多,输出图像尺寸越小。Guetzli 努力通过一个搜索算法,来克服 JPEG 格式的精神视觉模型与 Guetzli 的精神视觉模型之间的差别,以一种更全面更详细的方式来结合色彩感知和视觉掩蔽,从而在最小化损失和最小化图像尺寸中达到平衡。不过,尽管 Guetzli 可以使图像尺寸更小,但创建压缩图像所花费的时间要与目前的方法更长。

项目地址

guetzli

使用

Guetzli使用大量内存。您应该为每1MPix的输入图像提供300MB的内存。
Guetzli占用了大量的CPU时间。您应该指望每1MMix的输入图像使用大约1分钟的CPU。
Guetzli假设输入为sRGB配置文件,gamma为2.2。Guetzli将忽略图像中的任何颜色配置文件元数据。

要试用Guetzli,您需要构建下载Guetzli二进制文件。二进制文件读取PNGJPEG图像并创建优化的JPEG图像。

guetzli的使用比较简单,参数很少。默认采用95的质量,也可以通过 -quality 来指定大于等于84的质量,如果要小于84,需要修改源码。输入必须是符合转换要求的图片,输出则是jpeg格式图片。

什么样的图片才是符合要求的呢?

官方说明:

Only YUV color space input jpeg is supported

使用透明通道的png图、非YUVjpeg比如黑白图、gif图都是不能转换的。


guetzli [--quality Q] [--verbose] original.png output.jpg
guetzli [--quality Q] [--verbose] original.jpg output.jpg

guetzli 使用方式

压缩比例还是不错的,图像质量越高,体积越大压缩的比例就越高。目前测试7M的图片最大压缩到941 KB

请注意,Guetzli是为处理高质量图像而设计的。您应该始终倾向于提供未压缩的输入图像(例如,尚未使用任何JPEG编码器压缩的图像,包括Guetzli)。虽然它也适用于其他图像,但效果会较差。您可以尝试压缩一个封闭的样本高质量图像

您可以传递--quality Q参数来设置质量,单位相当于libjpeg质量。您还可以传递一个--verbose标志来查看所进行的编码尝试的跟踪。

请注意,JPEG图像不支持alpha通道(透明度)。如果输入是带有alpha通道的PNG,则在编码之前,它将覆盖在黑色背景上。

guetzli优劣

优势

兼容性比较好,输出的jpeg格式图片通用性非常高。没有webpsharpp那种协议不兼容的困扰。

压缩比率高,压缩质量比较好。

劣势

处理类型局限,并不能应对全部类型的图片。只能处理YUV颜色编码的图片。

时效性较差,图片越大处理越慢。7M的图片要1个多小时,不适合超高质量大体积的图片批量处理。

结论

guetzli是一款不错的JPEG编码器,在何种方面使用还需要根据自身的需求来确定。



转载请注明:清风亦平凡 » Guetzli高质量压缩图片算法工具

]]>
https://www.mlplus.net/2023/04/06/guetzli-jpeg-encoder/feed/ 2
安全架构设计基本原则 https://www.mlplus.net/2023/03/29/%e5%ae%89%e5%85%a8%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%a1%e5%9f%ba%e6%9c%ac%e5%8e%9f%e5%88%99/ https://www.mlplus.net/2023/03/29/%e5%ae%89%e5%85%a8%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%a1%e5%9f%ba%e6%9c%ac%e5%8e%9f%e5%88%99/#respond Wed, 29 Mar 2023 04:51:35 +0000 https://www.mlplus.net/?p=4176 安全原则

在应用系统软件开发设计的过程中,对应用系统的总体设计应当满足如下安全原则

原则说明
最小权限原则
Least Privilege
应用软件的每个模块如进程、用户只能访问当下所必需的信息或者资源。赋予每一个合法动作最小的权限,以保护数据以及功能避免受到错误或者恶意行为的破坏。
权限分离原则
Separation of Duties
对业务的操作、管理和审计权限应该由软件中的不同角色的用户分别承担;普通用户和管理员用户信息应该存放在不同的数据表中。
深度防御原则
Defense in Depth
在应用程序对业务数据进行处理的每个阶段都要考虑安全性问题,不能仅在某个阶段做安全防御,这样单点防御一旦被突破将造成安全风险。
容错保护原则
Fail Secure
当程序出现故障时或系统异常当系统失败时,可以进入到一个失败保护的状态。如果用户请求失败,系统仍可保障安全
单点异常终止原则
Single Point of Failure
当用户提交数据超出预期时,应立即终止程序的执行,不要试图加以修正并继续执行下去。
外来代码安全原则
Least Third Party Components
严格控制第三方函数与插件的使用,对外来代码必须进行详细的安全测试。
代码重用原则
Leveraging Existing Components
尽可能的重用软件已有的模块,这样可以降低引入新的漏洞和攻击界面的可能性。
数据保护原则
Data Protection
对用户数据的保护功能应涵盖用户数据存储的完整性、用户数据传输保密性、数据传输的访问控制、剩余信息的保护、数据反转操作等内容;应对系统中关键数据(如用户密码等)的存储和网络传输时应采用加密保护,实用加密加密算法应该符合国际标准、国家标准和业界标准。
可审计原则
Auditing
在应用系统中设计审计日志记录的功能,并对应用系统产生的日志增加完备的审计功能。
开放设计原则
Open Design
开放设计与“不开放即安全”的原则相对而言,认为设计本身不应具有神秘感。这一原则的具体表现可以参见应用于加密设计的Kerchoff定律,“系统不应单纯依赖私密性,若落入敌人手中则毫无优势可言”;开放设计以提高系统兼容性和可扩展性。
抗抵赖原则
Anti Repudiation
对于涉及支付交易等重要的业务场景,系统设计应有效地防止通信双方抵赖,如采用电子证书签名等方式。
规范性
Standardization
系统设计所采用的安全技术和安全产品应符合国际标准、国家标准和业界标准,为系统的扩展升级、与其他系统的互联提供良好的基础。
可扩展性
Scalability
以当前业务安全需求为基础,充分考虑发展的需要,安全功能模块子系统以插件或接口方式以方便未来的扩展。
实用性
Practicable
安全功能设计需要尽可能的考虑投入产出比,同时尽量控制对用户体验的影响。
符合性
Regulatory Compliance
安全功能的设计尽可能的要符合国家规范、行业规范以及业界的通用标准,如等级保护等规范。



转载请注明:清风亦平凡 » 安全架构设计基本原则

]]>
https://www.mlplus.net/2023/03/29/%e5%ae%89%e5%85%a8%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%a1%e5%9f%ba%e6%9c%ac%e5%8e%9f%e5%88%99/feed/ 0
使用Fiddler进行移动端(手机)抓包 https://www.mlplus.net/2023/03/14/fiddler-mobile-setting/ https://www.mlplus.net/2023/03/14/fiddler-mobile-setting/#respond Tue, 14 Mar 2023 09:15:33 +0000 https://www.mlplus.net/?p=4156 背景

客户一个定制企业微信相关内容,其中自动登录成功某些功能不正常,手动登录的又未复现问题,程序都是相同的且问题确实存在。准备使用抓包看一下企业微信自动登录与非自动登录的行为区别,抓包工具选用了大名鼎鼎的Fiddler

Fiddler

Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。

Fiddler 是用C#写出来的,它包含一个简单却功能强大的基于JScript.NET 事件脚本子系统,它的灵活性非常棒,可以支持众多的http调试任务,并且能够使用.net框架语言进行扩展。

操作设置

设置允许远程电脑链接

依次选择Tools=>Options=>Connections=>勾选Allow remote computers to connect=>再点击OK

Fiddler tools
Fiddler connections
Fiddler的监听端口是8888,在远端设备上需要Fiddler所在设备的IP以及端口

查看本机IP

使用快捷键Windows+R调出运行小窗口,输入cmd回车即可。

运行
命令行显示本机IP

设置网络代理

打开移动设备Wlan,修改当前连接的网络。

移动设备WLAN

在以下页面进行代理设置,选择手动模式

移动设备WLAN代理设置页面

输入Fiddler所在设备的IP与端口后保存。

移动设备WLAN代理设置

手机打开浏览器进行测试,随便打开页面进行测试即可。

手机浏览移动页面

Fiddler可以看到在手机浏览的网页表示设置成功。

Fiddler查看抓取



转载请注明:清风亦平凡 » 使用Fiddler进行移动端(手机)抓包

]]>
https://www.mlplus.net/2023/03/14/fiddler-mobile-setting/feed/ 0
安全风险状况说明 https://www.mlplus.net/2023/02/24/%e5%ae%89%e5%85%a8%e9%a3%8e%e9%99%a9%e7%8a%b6%e5%86%b5%e8%af%b4%e6%98%8e/ https://www.mlplus.net/2023/02/24/%e5%ae%89%e5%85%a8%e9%a3%8e%e9%99%a9%e7%8a%b6%e5%86%b5%e8%af%b4%e6%98%8e/#respond Fri, 24 Feb 2023 10:02:25 +0000 https://www.mlplus.net/?p=4138 安全风险状况等级说明
良好状态   信息系统处于良好运行状态,没有发现或只存在零星的低风险安全问题,此时只要保持现有安全策略就满足了本系统的安全等级要求。
预警状态信息系统中存在一些漏洞或安全隐患,此时需根据评估中发现的网络、主机、应用和管理等方面的问题对进行有针对性的加固或改进。
严重状态信息系统中发现存在严重漏洞或可能严重威胁到系统正常运行的安全问题,此时需要立刻采取措施,例如安装补丁或重新部署安全系统进行防护等等。
紧急状态信息系统面临严峻的网络安全态势,对组织的重大经济利益或政治利益可能造成严重损害。此时需要与其他安全部门通力协作采取紧急防御措施。

漏洞等级状况说明

低危漏洞 对系统造成较小的影响,攻击成本高,攻击场景较为苛刻,不会直接影响到系统的正常运行,攻击者可能无法通过该漏洞获得权限。
中危漏洞对系统造成一般的影响,攻击成本一般,在特定场景下将可影响系统的正常运行,攻击者需要配合其他安全漏洞方可间接获得权限。
高危漏洞对系统造成严重的影响,攻击成本低,一般情况下可直接利用而无需特定场景和要求,攻击者可直接利用该漏洞获得权限。



转载请注明:清风亦平凡 » 安全风险状况说明

]]>
https://www.mlplus.net/2023/02/24/%e5%ae%89%e5%85%a8%e9%a3%8e%e9%99%a9%e7%8a%b6%e5%86%b5%e8%af%b4%e6%98%8e/feed/ 0
Docker构建VUE项目NPM构建134异常 https://www.mlplus.net/2023/02/23/docker-build-npm134-error/ https://www.mlplus.net/2023/02/23/docker-build-npm134-error/#respond Thu, 23 Feb 2023 08:10:53 +0000 https://www.mlplus.net/?p=4131 背景

一个前端的VUE项目,需要打一个Docker的镜像离线包。通过命令行构建镜像,通过等待比较长的时间后,NPM构建抛出异常。

异常内容

以下是关于这次异常的详细信息:

docker构建VUE项目异常图片
=> ERROR [build-stage 10/10] RUN npm run build                                                                 1222.9s
------
 > [build-stage 10/10] RUN npm run build:
#18 7.649
#18 7.649 > vue-antd-admin@0.7.4 build /app
#18 7.649 > vue-cli-service build
#18 7.649
#18 24.59
#18 24.60 -  Building for production...
#18 1221.3
#18 1221.3 <--- Last few GCs --->
#18 1221.3
#18 1221.3 [24:0x40d39c0]  1206698 ms: Mark-sweep (reduce) 986.8 (995.9) -> 986.1 (997.4) MB, 6393.8 / 0.1 ms  (average mu = 0.076, current mu = 0.019) allocation failure scavenge might not succeed
#18 1221.3
#18 1221.3
#18 1221.3 <--- JS stacktrace --->
#18 1221.3
#18 1221.3 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
#18 1221.5  1: 0xa18da8 node::Abort() [/usr/local/bin/node]
#18 1221.5  2: 0x969880 node::FatalError(char const*, char const*) [/usr/local/bin/node]
#18 1221.5  3: 0xb74138 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
#18 1221.5  4: 0xb742c4 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/usr/local/bin/node]
#18 1221.5  5: 0xd1c820 v8::internal::Heap::EnsureFromSpaceIsCommitted() [/usr/local/bin/node]
#18 1221.5  6: 0xd1d288  [/usr/local/bin/node]
#18 1221.5  7: 0xd2af4c v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/local/bin/node]
#18 1221.5  8: 0xd2e41c v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/usr/local/bin/node]
#18 1221.5  9: 0xd00714 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [/usr/local/bin/node]
#18 1221.5 10: 0x101ba54 v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [/usr/local/bin/node]
#18 1221.5 11: 0x137bb0c  [/usr/local/bin/node]
#18 1221.5 qemu: uncaught target signal 6 (Aborted) - core dumped
#18 1221.7 Aborted
#18 1221.8 npm ERR! code ELIFECYCLE
#18 1221.8 npm ERR! errno 134
#18 1221.8 npm ERR! vue-antd-admin@0.7.4 build: `vue-cli-service build`
#18 1221.8 npm ERR! Exit status 134
#18 1221.8 npm ERR!
#18 1221.8 npm ERR! Failed at the vue-antd-admin@0.7.4 build script.
#18 1221.8 npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
#18 1222.0
#18 1222.0 npm ERR! A complete log of this run can be found in:
#18 1222.0 npm ERR!     /root/.npm/_logs/2023-02-16T06_26_23_271Z-debug.log
------
executor failed running [/bin/sh -c npm run build]: exit code: 134


经过查看发现NPM异常退出代码134,通过错误代码了解到应该是内存不足导致的。优先确认自己使用的这台物理机器内存,并未发现问题。应该是Docker本身子系统内存问题,经过查看确认允许内存为2G,这内存允许范围的确可能出现内存不足的问题。将内存设置为4GB后保存,再次构建项目,经过一段时间的等待,Docker镜像构建成功。

Docker构建VUE项目NPM构建134异常-第1张图片

Docker构建VUE项目NPM构建134异常-第2张图片



转载请注明:清风亦平凡 » Docker构建VUE项目NPM构建134异常

]]>
https://www.mlplus.net/2023/02/23/docker-build-npm134-error/feed/ 0
2023过年 https://www.mlplus.net/2023/01/24/2023%e8%bf%87%e5%b9%b4/ https://www.mlplus.net/2023/01/24/2023%e8%bf%87%e5%b9%b4/#respond Tue, 24 Jan 2023 13:33:41 +0000 https://www.mlplus.net/?p=4126 时间过得很快,一转眼就到了新的一年。今年公司春节假期放假比往年早很多,2023年1月16号就开始放假了,不晓得是因为疫情原因还是公司提供的福利,不管怎么说感觉很不错的。因为春运的火车票不太好买,所以就多计划了几天,在2013年1月11号就请假回家了。

回到家的第二天就到了医院进行一次检查,针对肺部的检查。由于新冠感染,导致除发烧以外的其他状没有好转,其实也不是没有一点好转,只是一直还是有症状,二十多天咳嗽依然存在。检查结果肺部有两个微小肺结节并且已经钙化,其实我是很担心的 。在新冠之前的一些检查中是没有见过的,我想还是这次新冠感染引起的。医生并没有说太多,只是说还有点炎症,开了一些止咳、镇咳、化痰的药物,并没有关于肺结节相关的药物。经过了解,肺结节是无法逆转的。

在回到老家后2天就先拜访几个长辈,这算是家族中一个规矩吧。在拜访他们之前,我还是确认了自己新冠转阴,否则我还真的担心会带走他们。

来了一些伙伴,重新约定了还款时间。重新约定时间就是为了防止过年去要账吧!其实挺烦人的,2019年借出去的钱,说好的2019年元宵节还给我,现在都2023年了。如果这次约定时间再不还给我,真的要考虑是不是要给他一个传票。这人我以后不打算在与其有其他的金钱往来了!

过年其实我觉得就是一个花钱多节日,在一年当中的春节还是拉动了消费的。每年都要有各种年货的购置,今年也是如此,其实我这个人挺不喜欢逛街的。其他的基本也是准备一些零散而又多的小年货,其实我在这种活动当中没有出什么力。

除夕夜其实也感觉没有什么意思,吃完饭也没有什么节目。至于春晚已经不看好多年了。除夕夜很早的就休息了,长大以后感觉过年好像已经没有了味道,尤其是最近几年就更加没有意思。也许是自己长大了,也许是少了一些人,又或者还是穷。每年农历一月初一都有早起的习俗,吃完饭后就开始到处拜年,去看看各个长辈,去看看那些年纪比较大的老人。初一这一天是一年当中最闲的一天,只有这一天是不允许干活的,可以肆无忌惮的休息。初二这天开始动工了,可以走亲戚或者进行其他工作。也许每年的初二在我们这里才是一个新的开始。

过年其实还是没有什么意思的。嗯!



转载请注明:清风亦平凡 » 2023过年

]]>
https://www.mlplus.net/2023/01/24/2023%e8%bf%87%e5%b9%b4/feed/ 0
疑似新冠感染 https://www.mlplus.net/2022/12/25/%e7%96%91%e4%bc%bc%e6%96%b0%e5%86%a0%e6%84%9f%e6%9f%93/ https://www.mlplus.net/2022/12/25/%e7%96%91%e4%bc%bc%e6%96%b0%e5%86%a0%e6%84%9f%e6%9f%93/#comments Sat, 24 Dec 2022 18:31:58 +0000 https://www.mlplus.net/?p=4052 抗击新冠

独白

如标题所示,本博疑似新冠感染,为何说是疑似呢?因为并没有针对性的检查,没有做核酸,也没有做抗原,所以说是疑似。虽然说是疑似,经过几天的煎熬,这大概也就确认了。

2022-12-20直到晚上回来都没有什么不良症状,看了一会电视剧就躺下休息一会,哪知道就这样睡了。其实睡觉状态其实不太好,感觉又冷又热,但是自己还是没有立刻醒来。直到早上闹钟响起来才起床,感觉有点发热,头有点疼,眼睛也有点不舒服。当时自己猜测可能是发烧了,体温计之前没有买到,所以体温也没有办法的知。想了一下,还是请假吧!万一是新冠岂不是把其他同事给害了?按道理来讲,2022-12-21应该算是第一天,就当作第一天吧!

2022-12-21

今天感觉到好像发热,头有点疼,眼睛有点不舒服。为了避免其他同事被我这疑似新冠感染,就随即申请了居家办公。

为了更好的观测体温,所以还是准备买一直体温计。问了两家药店,一家没有体温计,一家说中午到货。在药店往返四次最终还是买到了一支普通的水银体温计,16元一支,以前同款仅仅2块钱,其中差额可想而知。这个时候已经是中午12点多了!

与预想的一致,的确是发烧了37.8,感觉不是很严重就想着挺一下。时间感觉过的很慢,但似乎又过的很快。开始浑身无力,慢慢的头疼加重腰疼腿疼蛋疼。是的,明显感觉到蛋疼,也没有听谁说过这件事情,是羞于言传吗?15点又量一次体温,体温已经高到38.9了,感觉顶不住了,所以就服用了备用药物《小儿氨酚黄那敏颗粒》进行退烧。这款药物还是不错的,体温很快就降到了38上下浮动。本来是要居家办公的,现在状态也没有办法工作了,无奈的就躺下啦!这样也许会舒服一点。剩下的就是喝水、躺!!!

症状

  • 头疼
  • 腰疼
  • 蛋疼
  • 腿疼
  • 高烧
  • 浑身无力
  • 眼睛不舒服

2022-12-22

今天依旧持续昨天的症状,唯一区别就是各种症状加重。一觉醒来体温干到40+,卧槽!看着体温计这个刻度,我竟然感觉不到自己发烧,感觉这个世界都是不真实的。为了制止这种状态持续发展就再次上退烧药。每次服用药物都没有让人失望,体温慢慢退回38度上下。一整天体温基本维持在38度上下浮动,为了更好的退烧,在安全范围内再次上药。今天居家办公写一点东西,但是也没有坚持太久。剩下的时间也是基本喝水、躺。晚上在彻底入睡之前体温降到了37.7上下。

症状

  • 头疼+
  • 腰疼+
  • 蛋疼+
  • 腿疼+
  • 高烧+
  • 浑身无力+
  • 眼睛不舒服+

2022-12-23

今天发烧算是退下来了,体温在37.5上下。这个体温算是一个好的开始吧!各种疼痛开始减轻。今天居家办公,居家办公一整天。期间在也没有服用任何药物,也只是喝水、吃了些水果。

症状

  • 头疼-
  • 腰疼-
  • 蛋疼-
  • 腿疼-
  • 浑身无力-
  • 眼睛不舒服-

2022-12-24

今天体温已经正常,体温在36.2-36.7之前间浮动。腰疼、蛋疼、腿疼、浑身无力、眼睛不舒服这些症状消失。今天新出现症状咳嗽,咳嗽间断性的咳嗽,同时有一种情况就是但凡说话必然咳嗽一阵,无比难受。今天一整天言语不多,也不想说话。头疼位置是后脑偏右,阵痛以及咳嗽疼痛。体温一直在正常范围内。喝水、吃水果、喝点止咳口服液。

症状

  • 头疼
  • 间断性咳嗽
  • 说话即咳嗽
  • 嗓子不舒服

2022-12-25

今天咳嗽依然持续且加重,嗓子依然不舒服,新增症状鼻塞、流鼻涕、流眼泪、打喷嚏。原来说话即咳嗽、头疼的症状消失。为了缓解鼻塞、流鼻涕的症状,使用了999感冒灵颗粒,不晓得有没有什么效果。试试看吧!卧槽!不晓得还得坚持几天,据说新冠已经可以确认的有一种后遗症,蛮可怕的。

症状

  • 咳嗽+
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕
  • 打喷嚏
  • 流眼泪

2022-12-26

今天的症状与昨天症状一致,没有什么增加或者减少。貌似严重程度发生少许变化,个人也不晓得这种变化是不是好的。鼻塞、流鼻涕、打喷嚏、流眼泪加重,咳嗽有少许减轻。昨天、今天也冲了感冒灵颗粒,貌似没有看到任何的效果。真的很希望这些症状赶紧消失,尽快恢复健康。

症状

  • 咳嗽-
  • 嗓子不舒服
  • 鼻塞+
  • 流鼻涕+
  • 打喷嚏
  • 流眼泪

2022-12-27

今天打喷嚏、流眼泪的情况消失了。但是咳嗽、嗓子不舒服、鼻塞流鼻涕依然存在,不过症状相比昨天有所减轻。目前身体状况来说可能还得几天,我的身体已经虚成这样了吗?

症状

  • 咳嗽
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2022-12-28

今天感觉症状没有增加也没有减少。咳嗽还是那么严重,鼻塞、流鼻涕、嗓子依然不舒服。这都8天了,为何还这样?感觉有必要去医院做一下CT检查,看看咳嗽是不是肺炎的问题。虽然其他症状没有增加,但是鼻炎好像是犯了,不晓得这算不算新增症状。还是一如既往的痛苦。什么时候才是一个终结?

症状

  • 咳嗽
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2022-12-29

今天好像也没有往好的方向改变,咳嗽、鼻塞、流鼻涕、嗓子不舒服一个症状都没有消失。真难搞呀!不晓得哪个人说的就是小感冒,这哪里是小感冒呀?

症状

  • 咳嗽
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2022-12-30

其实我内心是非常不希望这篇博客还有续写,特别是按照天的续写,我更希望这篇博客尽快写总结。但是这总是不能让人如愿,尽管我真的如此厌烦,还是要记录一下。今天症状并没有减轻,依旧是咳嗽比较突出,鼻塞、流鼻涕、嗓子不舒服。这个咳嗽我真的觉得应该去进一步检查一下,是传闻中的《白肺》,还是其他情况。打算就在这两天了!!!!

症状

  • 咳嗽
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2022-12-31

今天竟然也不是总结,其实我也是想的到的,只不过想多一点预期。很多事情往往都带有遗憾,这件事情作为一个普通人,我其实是很无力的 。我很想画一个句号,无奈现实给的是逗号。咳嗽症状依然没有什么好转,鼻塞、流鼻滴、嗓子不舒服症状都也没有什么改善。因为鼻塞、流鼻涕问题,我的鼻炎貌似也复发了。鼻炎相关的并发症好像也出现了,右耳已经开始感觉到闷了!这些能算新冠的症状吗?

新闻上讲很多有基础病或者其他疾病的人没有能顶得住,我突然明白为什么啦。身体不好的人很难顶得住的,因为并发症太麻烦了,搞不好就走了!今天我的话有点多了,希望自己可以顶得住吧!没有想到这个事情要跨年了!!!!!

症状

  • 咳嗽
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2023-01-01

真的没有出意外,这个事情跨年了,状态真的不是太好。今天症状算没有增加吧,与昨天的症状差不太多,也有一些差别。咳嗽这个症状太持久了,都十多天啦!要是能在床上这么持久,会不会笑疯了!要不就不咳嗽,要不就是咳嗽起来要命的咳。鼻塞、流鼻涕还是停不下来,这几个症状与嗓子不舒服比起来,嗓子的问题到是没有太大的事情。卧槽!!!

症状

  • 咳嗽
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2023-01-02

今天症状还是没有消退,不过咳嗽症状有所减轻,也只是减轻一点点,算是一个好的开始吧!希望真是一个好的开始!鼻塞、流鼻涕、嗓子不舒服依然存在。今天针对这个事情不太想多说,心太累了!

症状

  • 咳嗽
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2023-01-03

昨天刚说咳嗽有点减轻,今天咳嗽又加重,真是奇怪了,真烦呀!鼻塞、鼻涕、嗓子不舒服这些症状也没有什么好转。真的好暴躁呀!

症状

  • 咳嗽
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2023-01-04

今天咳嗽没有什么减轻,还是老样子。咳嗽、鼻塞、鼻涕、嗓子不舒服,目前三个症状好像是爱上我了!我在网上找医院挂号,换了好多个医院,挂不上号,全部是约满!深圳医疗资源竟然也是这样。真是见鬼啦!

症状

  • 咳嗽+
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕

2023-01-05

今天我以为症状会有所减轻,为什么会有这样的想法呢?因为早上没有怎么咳嗽,到下班之前都没有咳嗽的那么厉害,看上去好像是减轻了症状。不过最后这最终是一厢情愿了,晚上咳嗽还是那么厉害。鼻塞、流鼻涕、嗓子还是不舒服。今天晚上又新增了症状,打喷嚏、流鼻血。这样看来应该是加重了!今天又继续昨天的挂号行为,找了一些医院,很遗憾依然是约不到。真难呀!希望不会往不好方向发展,我还不想挂壁呀!今天新买了一款止咳的药是《肺宁颗粒》,希望换药后有一个减轻。

症状

  • 咳嗽+
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕
  • 打喷嚏
  • 流鼻血

2023-01-06

今天白天的咳嗽症状有点减轻,基本没有这么咳嗽啦。应该是一个好的开始,其他症状依然存在。鼻塞、流鼻滴、流鼻血、嗓子不舒服依然还有。运动稍微有点重就有点喘,感觉老了好多似的!晚上也没有这么咳嗽,在临睡觉时候看到抖音憋气实验。自己就进行憋气尝试,结果一下子咳嗽将近10分钟,这真的太危险了!

症状

  • 咳嗽-
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕-
  • 打喷嚏
  • 流鼻血

2023-01-07

今天咳嗽好像又少了,算是症状的一个减轻吧!但是除了咳嗽以外,其他的症状并没有看到任何减轻。也许咳嗽的减轻是换药带来的结果,《肺宁颗粒》也许是有用的。闭塞、流鼻滴、流鼻血症状还是持续存在。现在也预约不到医院的号,现在症状有所减轻就继续观察吧!如果可以就去检查一下,都十好几天了。希望越来越好!明天继续观察吧!

症状

  • 咳嗽-
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕-
  • 流鼻血

2023-01-08

今天咳嗽的症状又有所减少。新换的《肺宁颗粒》应该是有效的。虽然咳嗽有所好转,但是其他症状并没有见到减轻。鼻塞、流鼻涕、嗓子不舒服、流鼻血等还没有减轻。鼻塞也许是新冠引起鼻炎复发,鼻塞也导致右耳出现了一些问题,应该是中耳炎。可能还是要去医院才行!真让人厌烦呀!

症状

  • 咳嗽-
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕-
  • 流鼻血

2023-01-09

今天咳嗽继续减轻,这已经算一个好的开始了!不过现在已经没有药了,《肺宁颗粒》已经搞完一盒了,这药还是挺贵的。至于其他症状并没有什么特别大的减轻,流鼻血有所好转,鼻塞、流鼻滴、嗓子不舒服还没有什么改变,这样下去鼻塞的并发症就要来了!哎!

症状

  • 咳嗽-
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕-
  • 流鼻血-

2023-01-10

今天是春节前最后一个天上班,明天就回家了!今天咳嗽症状相比昨天差不多,咳嗽的次数不是很多。其他症状还是存在,并没有任何减轻。

症状

  • 咳嗽-
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕-
  • 流鼻血-

2023-01-11

今天老早就赶车回家。今天上午基本也没有什么咳嗽。相对来说还是不错的。其他症状也没有减轻。晚上不晓得什么原因有咳嗽了起来,明天尽快去医院看一下,不拖啦!

症状

  • 咳嗽+
  • 嗓子不舒服
  • 鼻塞
  • 流鼻涕-
  • 流鼻血-

总结



转载请注明:清风亦平凡 » 疑似新冠感染

]]>
https://www.mlplus.net/2022/12/25/%e7%96%91%e4%bc%bc%e6%96%b0%e5%86%a0%e6%84%9f%e6%9f%93/feed/ 2
Chrome浏览器中的XPath https://www.mlplus.net/2022/12/04/chrome%e6%b5%8f%e8%a7%88%e5%99%a8%e4%b8%ad%e7%9a%84xpath/ https://www.mlplus.net/2022/12/04/chrome%e6%b5%8f%e8%a7%88%e5%99%a8%e4%b8%ad%e7%9a%84xpath/#respond Sat, 03 Dec 2022 16:52:11 +0000 https://www.mlplus.net/?p=4030 背景

某一个应用自动在网页上获取一些文本内容,本来是通过document.querySelector来找指定节点。经过一段时间网页貌似升级了,一些节点的class属性的值会出现随机的变动,每次class属性的值都会不一样。最初的方式就失去了作用,根据节点内容的分析发现可以通过xpath来获取。曾经在IE浏览器上使用过XPath,并且API相当简单。在非IE浏览器上貌似没有这么好用。以下内容在Chrome浏览器进行尝试,经过测试可以完成自己的预期工作。

浏览器支持

Mozilla是根据DOM标准来实现对XPath的支持的。DOM Level 3附加标准DOM Level 3 XPath定义了用于在DOM中计算XPath表达式的接口。遗憾的是,这个标准要比微软直观的方式复杂得多。虽然有好多与XPath相关的对象,最重要的两个是:XPathEvaluatorXPathResultXPathEvaluator利用方法evaluate()计算XPath表达式。

evaluate()方法有五个参数:XPath表达式、上下文节点、命名空间解释程序和返回的结果的类型,同时在XPathResult中存放结果(通常为null)。命名空间解释程序,只有在XML代码用到了XML命名空间时才是必要的,所以通常留空,置为null。返回结果的类型,可以是以下十个常量值之一

参数解释
XPathResult.ANY_TYPE返回符合XPath表达式类型的数据
XPathResult.ANY_UNORDERED_NODE_TYPE返回匹配节点的节点集合,但顺序可能与文档中的节点的顺序不匹配
XPathResult.BOOLEAN_TYPE返回布尔值
XPathResult.FIRST_ORDERED_NODE_TYPE返回只包含一个节点的节点集合,且这个节点是在文档中第一个匹配的节点
XPathResult.NUMBER_TYPE返回数字值
XPathResult.ORDERED_NODE_ITERATOR_TYPE返回匹配节点的节点集合,顺序为节点在文档中出现的顺序。这是最常用到的结果类型
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE返回节点集合快照,在文档外捕获节点,这样将来对文档的任何修改都不会影响这个节点列表。节点集合中的节点与它们出现在文档中的顺序一样
XPathResult.STRING_TYPE返回字符串值
XPathResult.UNORDERED_NODE_ITERATOR_TYPE返回匹配节点的节点集合,不过顺序可能不会按照节点在文档中出现的顺序排列
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE返回节点集合快照,在文档外捕获节点,这样将来对文档的任何修改都不会影响这个节点列表。节点集合中的节点和文档中原来的顺序不一定一样。

JavaScript实现XPath选择节点


function xpathQuery(xpath){
  let resultXpath = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
  let result=[];
  if(resultXpath){
     let item;
     while(item=resultXpath.iterateNext())
     {
        result.push(item);
     }
  } 
  return result;
}

xpathQuery("//div[@class='container-body']/div[contains(@class,'order-item')]");
JavaScript 使用XPath



转载请注明:清风亦平凡 » Chrome浏览器中的XPath

]]>
https://www.mlplus.net/2022/12/04/chrome%e6%b5%8f%e8%a7%88%e5%99%a8%e4%b8%ad%e7%9a%84xpath/feed/ 0
Javascript判断当前页面是否处于激活状态 https://www.mlplus.net/2022/11/21/javascript%e5%88%a4%e6%96%ad%e5%bd%93%e5%89%8d%e9%a1%b5%e9%9d%a2%e6%98%af%e5%90%a6%e5%a4%84%e4%ba%8e%e6%bf%80%e6%b4%bb%e7%8a%b6%e6%80%81/ https://www.mlplus.net/2022/11/21/javascript%e5%88%a4%e6%96%ad%e5%bd%93%e5%89%8d%e9%a1%b5%e9%9d%a2%e6%98%af%e5%90%a6%e5%a4%84%e4%ba%8e%e6%bf%80%e6%b4%bb%e7%8a%b6%e6%80%81/#respond Mon, 21 Nov 2022 05:44:00 +0000 https://www.mlplus.net/?p=4020 背景

现有一个考试项目,当在浏览器进行考试时需要判断用户是否存在切屏,如果切屏就对当前考试进行自动强制交卷。浏览器中可通过window对象的onbluronfocus判断,或者documenthidden属性判断。

获取焦点(onfocus)和失去焦点(onblur)

关于是否失焦点,浏览器对象有onfocus onblur事件可以监听。但是触发这两个事件的前提是页面之前是获取焦点的,就是说要是激活的。也就是说页面刚刚渲染完,用户在没有页面上任何操作时,页面是不会正常监听这两个事件的;或者页面在打开状态下,但是触发了onblur之后并无页面操作的情况下也不会正常监听这两个事件。直到,用户操作页面触发focus,之后离开页面才会触发blur,再次点击到当前页面时才会触发focus,如此反复都会触发相应的事件。

onblur

  • chrome浏览器下,点击console面板也会触发blur事件,前提是之前是focus的状态。
  • 页面最小化;
  • 浏览器切换tab页面;
  • 页面中的任何弹窗;
  • focus状态下切换到其他应用

onfocus

  • 用户存在页面操作(包括页面中js脚本运行。如页面加载完无js运行,用户无操作,则不会触发 );
  • 事件触发前提下,页面最大化;
  • 事件触发前提下,页面从其他tab页切换回当前页面;

onblur与onfocus示例

  
//离开          
window.onblur = function () {
         console&&console.log("切屏了onblur");
 };
 //回来
 window.onfocus = function () {
        console&&console.log("切屏了onfocus");
  };

HTML5新增API

HTML5新增的API, visibilitychange, document.hidden, document.visibilityState来实现相关内容。

visibilitychange

  • 浏览器支持 visibilitychangeHTML5API所以支持持最新浏览器 Chrome, Firefox, IE10+
  • addEventListener添加事件,当页面发生改变就会触发

老版本浏览器如果失效需要添加前缀

  • mozvisibilitychange 火狐
  • msvisibilitychange IE
  • webkitvisibilitychange 谷歌,Safari

document.hidden

hiddendocument的属性,可以判断页面是否显示的是当前的页面。visibilitychange事件就是触发页面可见的事件。当然不同的浏览器内核记得要加前缀。表示页面处于非激活状态,反之处于激活状态。

  • 页面最小化
  • 页面在后台运行
  • 切换tab栏到其他页面

当其hiddenfalse的时候就是当前网页正在被用户浏览,其值为ture就是当前网页进入后台。

document.visibilityState

  • visible 是浏览器当前激活,窗口不是最小化状态
  • hidden 不是当前激活,或者窗口最小化了
  • prerender 重新生成,对用户不可见

visibilitychange事件示例

        
var hiddenProperty = 'hidden' in document ? 'hidden' :
            'webkitHidden' in document ? 'webkitHidden' :
                'mozHidden' in document ? 'mozHidden':null;
        var visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');
        var onVisibilityChange = function () {
            if (!document[hiddenProperty]) {
                console && console.log('页面激活');
            } else {
                console && console.log('页面非激活');
            }
        }
        document.addEventListener(visibilityChangeEvent, onVisibilityChange);

以上两种方式在某些情况下存在一定差异,为了实现一些需求,可能需要组合使用。



转载请注明:清风亦平凡 » Javascript判断当前页面是否处于激活状态

]]>
https://www.mlplus.net/2022/11/21/javascript%e5%88%a4%e6%96%ad%e5%bd%93%e5%89%8d%e9%a1%b5%e9%9d%a2%e6%98%af%e5%90%a6%e5%a4%84%e4%ba%8e%e6%bf%80%e6%b4%bb%e7%8a%b6%e6%80%81/feed/ 0
在非HTTPS站点中使用Content Security Policy引发的问题 https://www.mlplus.net/2022/10/25/csp/ https://www.mlplus.net/2022/10/25/csp/#respond Tue, 25 Oct 2022 08:40:42 +0000 https://www.mlplus.net/?p=4011 背景

有一个客户需要对以前老项目部分功能进行升级,需要升级页面按照最新版本的内容进行更新,测试发现页面无法加载。F12使用开发者工具发现所有资源文件异常,所有的资源文件竟然自动将HTTP协议换成 HTTPS 协议。异常信息如下图所示:

资源加载HTTPS错误

项目目前部署是非HTTPS的,很奇怪为什么会自动转换为HTTPS资源。经过排查在异常页面中发现了问题,在head节点下发现以下代码


<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

以上内容会将HTTP协议自动转换为HTTPS协议。

Content-Security-Policy

Content-Security-PolicyCSP)允许站点管理者控制用户代理能够为指定的页面加载哪些资源。除了少数例外情况,设置的政策主要涉及指定服务器的源和脚本结束点。这将帮助防止跨站脚本攻击(Cross-Site Script)。

CSP 的实质就是白名单制度,大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

两种方法可以启用 CSP。一种是通过 HTTP 头信息的Content-Security-Policy的字段。

另一种是通过网页的<meta>标签。

  • 脚本:只信任当前域名
  • <object>标签:不信任任何URL,即不加载任何资源
  • 样式表:只信任cdn.example.orgthird-party.org
  • 框架(frame):必须使用HTTPS协议加载
  • 其他资源:没有限制

限制选项

资源加载限制

以下选项限制各类资源的加载。

  • script-src:外部脚本
  • style-src:样式表
  • img-src:图像
  • media-src:媒体文件(音频和视频)
  • font-src:字体文件
  • object-src:插件(比如 Flash
  • child-src:框架
  • frame-ancestors:嵌入的外部资源(比如<frame><iframe><embed><applet>
  • connect-srcHTTP 连接(通过 XHRWebSocketsEventSource等)
  • worker-srcworker脚本
  • manifest-src:manifest 文件

default-src

default-src用来设置上面各个选项的默认值。


Content-Security-Policy: default-src 'self

上面代码限制所有的外部资源,都只能从当前域名加载。

如果同时设置某个单项限制(比如font-src)和default-src,前者会覆盖后者,即字体文件会采用font-src的值,其他资源依然采用default-src的值。

URL 限制

有时,网页会跟其他 URL 发生联系,这时也可以加以限制。

  • frame-ancestors:限制嵌入框架的网页
  • base-uri:限制<base#href>
  • form-action:限制<form#action>

其他限制

其他一些安全相关的功能,也放在了 CSP 里面。

  • block-all-mixed-contentHTTPS 网页不得加载 HTTP 资源(浏览器已经默认开启)
  • upgrade-insecure-requests:自动将网页上所有加载外部资源的 HTTP 链接换成 HTTPS 协议
  • plugin-types:限制可以使用的插件格式
  • sandbox:浏览器行为的限制,比如不能有弹出窗口等。

参考

https://www.ruanyifeng.com/blog/2016/09/csp.html



转载请注明:清风亦平凡 » 在非HTTPS站点中使用Content Security Policy引发的问题

]]>
https://www.mlplus.net/2022/10/25/csp/feed/ 0