0%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@startmindmap
* 阴阳五行学
** 维度
*** 两仪
*** 四象
*** 八卦 乾 坎 艮 震 巽xùn 离 坤 兑
*** 术数

** 历史
*** 《周易》
* 道教神话体系
** 天人
** 神兽 神木 仙山 矿藏 神魔
** 干支纪年
*** 甲 乙 丙 丁 戊 己 庚 辛 壬 癸
*** 子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥
** 星宿 [[https://zhuanlan.zhihu.com/p/582989560 星图]] [[https://zhidao.baidu.com/question/451326733.html?fr=search&word=%D0%C7%CB%DE%B7%D6%D2%B0+%BB%F9%D3%DA&ie=gbk 分野]]
*** 东·青龙 角 亢 氐 房 心 尾 箕
*** 北·玄武 斗 牛 女 虚 危 室 壁
*** 西·白虎 奎 娄 胃 昴mǎo 毕 觜zī 参
*** 南·朱雀 井 鬼 柳 星 张 翼 轸
** 劫数
*** 三灾
** 临兵斗者皆阵列在前
* 修仙文学体系
** 境界
*** 练气 筑基 金丹 元婴 出窍 分神 合体 渡劫 大乘 《飘渺之旅》
*** 品阶 宗师
** 进阶套路


@endmindmap

图像的线性变换

基于图像矩阵与代数的点运算

  • a=1, b=0: 恒等
  • a<0: 黑白翻转
  • |a|>1: 增加对比度
  • |a|<1: 减小对比度
  • b>0: 增加亮度
  • b<0: 减小亮度

QQs :在.net程序中,处理因网络连接问题或者服务端故障造成的请求异常,应该捕获异常类型?
ChatGPT :

在处理因网络连接问题或者服务端故障造成的请求异常时,应该捕获相应的异常类型,以便能够进行正确的处理和响应。

在.Net中,常见的网络连接相关的异常包括SocketException、WebException、HttpRequestException等。这些异常通常都是由于网络连接问题或者服务端故障造成的。

在捕获这些异常时,可以根据具体的情况进行处理。例如,在SocketException中,可以根据不同的SocketError类型进行不同的处理,如SocketError.ConnectionReset、SocketError.ConnectionRefused等等。在WebException中,可以根据StatusCode、Response等内容进行判断和处理。

需要注意的是,捕获网络连接异常时,不应该过于通用,而是应该针对性地捕获相关的异常类型。过于通用的捕获会导致程序无法准确地判断和处理异常,从而可能造成不必要的后果。

QQs :开发异常处理逻辑时,如何模拟socket exception的异常场景?
ChatGPT :

要模拟socket exception的异常场景,可以使用一些技巧来使网络连接不可用或出现异常。

  1. 使用无效IP地址:使用一个无效的IP地址来模拟连接被拒绝的情况。可以使用“0.0.0.0”或“localhost”等无效的IP地址。

  2. 使用无效的端口号:使用一个未使用的端口号来模拟连接失败的情况。可以使用大于65535或小于0的端口号,或者使用已被占用的端口号。

  3. 断开网络连接:可以断开计算机连接网络的网线或关闭Wi-Fi,模拟网络连接失败的情况。

  4. 阻止网络流量:可以使用网络防火墙或代理服务器等工具来阻止网络流量,模拟无法连接到网络的情况。

  5. 模拟超时:可以使用延迟工具或人为地使服务器响应变慢,模拟连接超时或响应超时的情况。

需要注意的是,在进行模拟异常的时候,应该先测试代码是否可以正确处理常规情况下的流程,避免把程序带入模拟异常的陷阱中。同时,需要保证模拟异常的环境不能影响其他程序的正常运行。

QQs :举例的SocketException和WebException,能给出具体代码吗?
ChatGPT :

当Socket遇到连接重置或连接拒绝时,可以通过SocketException捕获异常并进行相应处理。例如:

1
2
3
4
5
6
7
8
9
10
11
try {
// Socket连接代码
} catch(SocketException ex) {
if(ex.SocketErrorCode == SocketError.ConnectionReset) {
// 处理连接重置异常
} else if(ex.SocketErrorCode == SocketError.ConnectionRefused) {
// 处理连接拒绝异常
} else {
// 处理其他Socket异常
}
}

当网络请求发生错误时,可以通过WebException捕获异常并进行相应处理。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
try {
// 发送网络请求代码
} catch(WebException ex) {
if(ex.Status == WebExceptionStatus.ProtocolError) {
var response = ex.Response as HttpWebResponse;
if(response != null) {
if(response.StatusCode == HttpStatusCode.NotFound) {
// 处理页面未找到异常
} else {
// 处理其他HTTP状态码异常
}
} else {
// 处理其他协议异常
}
} else if(ex.Status == WebExceptionStatus.ConnectFailure) {
// 处理连接失败异常
} else {
// 处理其他WebException异常
}
}

需要注意的是,在处理异常时,需要根据具体的异常类型、异常代码等信息进行判断和处理,从而保证能够处理所有可能出现的异常情况。

参考C++版Determining object color with OpenCV
参考python多边形形状及颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# coding=utf-8
# 导入一些python包
from scipy.spatial import distance as dist
from collections import OrderedDict
import numpy as np
import cv2

# 创建一个颜色标签类
class ColorLabeler:
def __init__(self):
# 初始化一个颜色词典
colors = OrderedDict({
"red": (255, 0, 0),
"green": (0, 255, 0),
"blue": (0, 0, 255)})

# 为LAB图像分配空间
self.lab = np.zeros((len(colors), 1, 3), dtype="uint8")
self.colorNames = []

# 循环 遍历颜色词典
for (i, (name, rgb)) in enumerate(colors.items()):
# 进行参数更新
self.lab[i] = rgb
self.colorNames.append(name)

# 进行颜色空间的变换
self.lab = cv2.cvtColor(self.lab, cv2.COLOR_RGB2LAB)

def label(self, image, c):
# 根据轮廓构造一个mask,然后计算mask区域的平均值
mask = np.zeros(image.shape[:2], dtype="uint8")
cv2.drawContours(mask, [c], -1, 255, -1)
mask = cv2.erode(mask, None, iterations=2)
mean = cv2.mean(image, mask=mask)[:3]

# 初始化最小距离
minDist = (np.inf, None)

# 遍历已知的LAB颜色值
for (i, row) in enumerate(self.lab):
# 计算当前l*a*b*颜色值与图像平均值之间的距离
d = dist.euclidean(row[0], mean)

# 如果当前的距离小于最小的距离,则进行变量更新
if d < minDist[0]:
minDist = (d, i)

# 返回最小距离对应的颜色值
return self.colorNames[minDist[1]]

approxPolyDP 多边形逼近

参数1是源图像的某个轮廓;参数2(epsilon)是一个距离值,表示多边形的轮廓接近实际轮廓的程度,值越小,越精确;参数3表示是否闭合。

contourArea 区域面积

double contourArea(InputArray contour, bool oriented = false);

contour,输入的二维点集(轮廓顶点),可以是 vector 或 Mat 类型。
oriented,面向区域标识符。有默认值 false。若为 true,该函数返回一个带符号的面积值,正负取决于轮廓的方向(顺时针还是逆时针)。若为 false,表示以绝对值返回。

arcLength 曲线长度

arcLength 函数用于计算封闭轮廓的周长或曲线的长度。

double arcLength(InputArray curve, bool closed);

curve,输入的二维点集(轮廓顶点),可以是 vector 或 Mat 类型。
closed,用于指示曲线是否封闭。

关于冷启动

启动 WPF 应用程序所需的时间可能存在极大差异。冷启动发生在系统重启后第一次启动应用程序时,或启动应用程序、将其关闭,然后在很长一段时间后再次启动应用程序时。 应用程序启动时,如果所需的页面(代码、静态数据、注册表等)不在 Windows 内存管理器的待机列表中,会发生页面错误。 需要磁盘访问权限,以便将这些页面加载到内存中。

当已将主要公共语言运行时 (CLR) 组件的大多数页面加载到内存中时,则发生热启动,这样可节省宝贵的磁盘访问时间。 这就是为什么再次运行托管的应用程序时,该程序的启动速度更快的原因。

QQs: 冷启动是关于app资源从硬盘到内存的访问权的unefficient

使用初始屏幕增强体验

在app启动就绪之前,渲染一个初始屏幕以安慰等待用户

添加图像资源(BMP、GIF、JPEG、PNG 或 TIFF 格式)到项目,在解决方案资源管理器中打开图像Properties—>Build Action选择SplashScreen

I/O

重新启动后,立即启动 WPF 应用程序,并决定用于显示的时间。 如果应用程序的所有后续启动(热启动)相较之下快很多,则冷启动问题很可能是 I/O 所致。

模块加载

进程资源管理器 Procexp.exe
命令行工具 tasklist /M (显示进程调用的dll)

CSS Modules:CSS Modules将CSS文件的类名作为局部作用域进行处理,以避免全局命名冲突,同时方便了在组件中使用CSS。在React中,您可以使用Webpack和css-loader来加载CSS Modules。

Styled Components:Styled Components是一个CSS样式解决方案,它通过将CSS作为模板字符串嵌入到JavaScript中来直接在组件中定义样式,从而使组件的样式与其它代码逻辑紧密耦合。

CSS-in-JS:CSS-in-JS是使用JavaScript来动态地管理CSS样式的方法。这种方法的好处是可以通过JavaScript组合样式,动态修改样式以及动态响应用户交互。

Jenkins的Master/Slave相当于Server和agent的概念,Master提供web接口让用户来管理Job和Slave,Job可以运行在Master本机或者被分配到Slave上运行。一个Master可以关联多个Slave用来为不同的Job或相同的Job的不同配置来服务。

其显而易见的意义在于使用同一个管理界面调用不同的开发环境

新建节点

在开发环境上安装一个jenkins作为slave
在服务器jenkins上添加slave node: Dashboard > Manage Jenkins > Manage Nodes and Clouds
jenkins slave new node.png
create后进行slave node配置

  • Remote root directory 这个是slave上的jenkins工作目录,job会在此拉取项目并构建
  • Labels 标签 将多个slave标记为一组 用于创建job时选择宜用的slave
    jenkins slave configure.png
    如果需要调用slave机器上应用,可能需要设置环境变量,如使用某路径下的签名软件对构建的程序打签名,路径变量在此处
    调用git拉取代码也要指定路径,否则会在master上看到无法定位到git
    jenkins slave environment.png

保存后会提供 连接命令,需要在slave端执行

使用slave构建

plantuml

流程图

1
2
3
4
5
6
7
8
9
start
if(account cache exist?) then (no)
:return null;
stop
else (yes)
:start silent request;
:get result or exceptions;
:return result;
stop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
start
:declare timer; CancellationTokenSource;
:declare TaskComplationSource;
if(account cache exist?) then (no)
:return null;
stop
else (yes)
:declare silentRequestTask,
input cancellation token;
:parallel execuate silentRequestTask
and TaskComplationSource.Task;
fork
:execuate silentRequestTask;
fork again
:TaskComplationSource.Task;
end fork
:when any task returns;
if(silentRequestTask complete?) then(yes)
:get result or exceptions;
:return result;
:release timer;
:close error dialog if opened;
stop
else (no)
:throw OperationCancelException;
:set isAuthenticationCancel flag to true;
:return null;
stop

时序图

1
2
Main -> PubClientApplication
Main -> Timer

思维导图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@startmindmap
*[#409EFF] vue3-auth
**[#79bbff] 登陆认证
***_ 登陆和登出
***_ 用户注册
***_ 用户状态和信息保存
**[#79bbff] 权限鉴定
***_ 用户权限获取
***_ 页面访问权限(菜单权限)
***_ 页面功能权限(按钮权限)
**[#79bbff] 角色管理
***_ 角色新增
***_ 角色修改
***_ 角色删除
***_ 角色绑定权限
***_ 角色绑定维度
**[#79bbff] 用户管理
***_ 用户新增
***_ 用户修改
***_ 用户删除
@endmindmap

神经网络

神经网络15分钟入门

v2-0ced86f32dfa241fc9de10421edbd9b4_720w.webp
如图所示两层神经网络
隐藏层 H = W1X+b1
输出层 Y = W2
H+b2

CNN

Convolutional Neural Networks 卷积神经网络