- 博客(2953)
- 资源 (44)
- 收藏
- 关注
原创 (29)C#里简单地使用MySQL数据库
在开发C#的应用程序时,经常会遇到访问MySQL数据库,因为MySQL数据库开源,并且使用多年,发展比较成熟,特别使用在一些网站上面。在这里使用的MySQL的版本为5.7,因此下载的连接器也可以使用比较低一点的版本,这样可以节省下载的文件大小,也方便快速地部署,一般文件越小越好。这里使用的版本是:MySQL :: Download MySQL Connector/NET (Archived Versions)mysql-connector-net-6.9.11.msi使用这个版本,只需要下载8M
2021-11-22 11:24:34 791
原创 (28)部署强命名程序集到GAC
部署强命名程序集到GAC GAC包含很多子目录,这些子目录是用一种算法来产生的,我们最好不要手动将程序集拷贝到GAC中,相反,我们应使用工具来完成这样的工作。因为这些工具知道GAC的内部结构J 在开发和测试中,最常用的工具就是GACUtil.exe。 在GAC中注册程序集跟COM注册差不多,但相对更容易: 1.把程序集添加到GAC中: GACUtil /i sample.dll (参数/i是安装的意思) 2.把程序集移出GAC: GACUtil /u samp...
2021-11-22 08:42:50 218
原创 (27)C#访问SQLite数据库
在软件开发的过程中,偶尔会有一些数据不需要保存到MYSQL这样重量级的数据库,这时就可以采用开源好用的数据库SQLite,这样是比较方便和实用的。速度也比较快,学习速度也比较快。在C#里使用,需要先在工程里安装一个包,如下图搜索System.Data.SQLite:点击右键边的安装,就在项目里安装了System.Data.SQLite,不过,这个库会有一点奇怪的地方,它不会直接看到下载的DLL文件,如果想要引用它,不能直接加载DLL的方式,需要点击右键弹出放到引用,它才会把DLL文件放到工程的目
2021-11-19 14:12:27 918
原创 (26)C# 程序进行签名的过程
如果要开发一些组件,就必须要进行签名,否则放不到GAC,也放不到VS开发工具里面,所以了解一下签名的过程和实现是必要的。程序集强签名1. 什么是程序集强签名在生成程序集时,指定一个私钥文件(该私钥文件为私有,不会对外公开),经过这样的方式编译后的程序集称为强签名程序集。2. 为什么要使用签名l 保证生成的程序集唯一性,强签名的程序集都有一个公钥,只有用特定私钥生成的程序集才会有该公钥。l 防止程序集被非法篡改,一旦强签名后,程序集内部会保存公钥,加载该程序...
2021-11-19 09:49:37 1547
原创 (25)C# error CS0281: 友元访问权限
在编译某源码时,如果不添加签名,就会提示下面的错误:DevExpress.XtraPrinting\DevExpress.Printing.Core\Core\NativePdfExport\PdfExportDocument.cs(90,20,90,37):error CS0281: 友元访问权限由“DevExpress.Pdf.v17.2.Core, Version=17.2.4.0, Culture=neutral, PublicKeyToken=null”授予,但是输出程序集('')的公
2021-11-17 13:35:43 924
原创 (24)C#二维数组,排序功能,使用ArrayList类,checked语句,finally语句
C#语言提供了很多特性,这些特性需要不断地练习,才能学会在不同的场景里使用。比如二维数组,排序功能,使用ArrayList类,checked语句,finally语句等等。下面的例子,就是来演示上述内容的使用,只有不断地通过例子,以及输出内容来反馈,才可以深入地知道每一个知识点的作用。ArrayList类:System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。一、优点1. 支持自动改变大小的功能2. 可以灵活的插入元素
2021-11-15 09:33:34 725
原创 (23)C#中使用Task对象
对于多线程的使用,大家是比较熟悉的领域,也使用比较多,因为那是操作系统层面的封装,所以大家倾向使用线程,不过C#提供了更高级的抽象并行对象—任务对象。这种任务对象与线程的区别在于任务对象提供了更多的功能,比如同步、等待、取消等操作,可以降低对线程的操作难度。下面的演示的结果:下面是演示的例子:using System;using System.Collections.Generic;using System.Linq;using System.Text;using S.
2021-11-12 12:30:45 286
原创 (22)C# 里使用lock语句
在开发的过程中,经常会遇到多线程的情况,比如一个线程运行界面,一个线程去连接网络,一个线程去保存数据到磁盘。如果不相干的线程运行是不需要锁来同步的,因为各自完成自己的事情就好了。但是也有很多种情况下,需要相互同步运行。比如这样一种情况,有多个线程去取银行帐户里的钱,如果判断有钱的情况下就可以取钱出来,如果没有钱就不能取钱,因为没有钱再取钱就变成负的了。如果有多个线程去取钱,由于多线程是乱序和异步执行,所以至于几个线程都运行了判断有钱的语句,就给系统挂起来了,因此这几个线程都可以继续执行取钱的动作,所以钱就会
2021-11-12 11:40:56 487
原创 (21)C# 访问Redis的测试
由于在项目里经常需要与别的厂家进行交互数据,这些数据还比较大的文件,如果采用WebAPI就需要多开发一层,不如直接使用Redis来共享,这样速度快,降低双方开发软件的时间。所以需要C#提供Redis访问的例子,以便双方进行模拟测试。安装Redis的版本,参考下面的连接:爬虫日记(34):爬虫的基本数据库Redis_大坡3D软件开发-CSDN博客接着通过NuGet来下载C#访问的组件:在这里使用的是1.2.6的版本,因为太高的版本不支持.net 45。接着编写使用StackExch
2021-11-10 16:51:02 384
原创 (20) C# 自定义控件--阴历显示方式
本例实现的效果如下图所示:在这个例子里,主要演示了自定义控件的方式,以及界面的操作。算法方面巧妙地使用数据结构来保存农历的日期。DateTimeControl控件的源码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;usin
2021-11-10 16:26:13 651
原创 (19)C# 创建自定义控件
在软件开发的过程中,库作用为常用的组件,但是界面主要是使用控件,因此控件就是软件界面的芯片。我们知道每一代芯片都是从最简单的功能开始,然后一代一代地迭代进步,就可以进入到一个新的高度。为什么会这样呢?如果深入地思考就会发现这是一个知识和经验积累的过程,这样可以让后面使用芯片的人,可以大为减轻对知识和经验的要求,从而提高了产品的稳定性,提高了产品的生产率,所以越来越好。因此软件也是这样,一个公司或者一个社会需要不断地开发一些组件,这样才可以让公司的知识和经验积累起来,才可以提高公司后面的生产率,这样才可以更快
2021-11-09 14:58:41 482
原创 (18) C# 的当前日期根据不同区域来显示
随着国际化的交流活动增加,随着中国软件开发人员不断地增加,已经达到1亿软件相关人员,中国的软件不断出海,在手游、APP、支付、即时通讯、WEB领域不断地增长,已经成为一个大方向。下一步将会承担全球的软件开发,让60亿地球人使用中国软件。那么,我们必须要使用国际化的视野来学习开发软件,这里将来介绍一下不同国际化对时间的区别,因为时间是大家常用的,因此每一个地区都形成了自己的时间格式,都不愿意改变,这是一种习惯的力量,我们无法去引导别人来改变,只能我们去适应多样化的文化。所以对时间的格式,就需要进行不断地练
2021-11-09 09:06:40 237
原创 (17)C#的params参数关键字
在C#里,如果要使用变长的参数,可以使用这个关键字。使用params关键字可以指定采用数目可变的参数的方法参数。 参数类型必须是一维数组。在方法声明中的params关键字之后不允许有任何其他参数,并且在方法声明中只允许有一个params关键字。如果params参数的声明类型不是一维数组,则会发生编译器错误CS0225。使用params参数调用方法时,可以传入:数组元素类型的参数的逗号分隔列表。 指定类型的参数的数组。 无参数。 如果未发送任何参数,则param...
2021-11-05 08:35:44 286
原创 (16)C# TcpClient异步连接和接收数据的小例子
在网络编程里,我们经常要连接服务器,特别在连接的时候,需要等待很长时间,如果是使用界面线程,就会阻塞界面的操作;如果是多个并发的任务,就会阻塞任务的执行。因此,这样对于用户来说,总是体验不好。所以需要针对这种情况进行别的尝试,那么就是采用异步编程,或者采用多线程。在本文里采用异步编程,就可以快捷地解决问题。由于采用了异步编程,所以从TcpClient里回调函数去更新界面时,就不能直接采用阻塞的方式了,需要采用多线程的方式来更新界面,可以参考下面的连接:(2)C# 多线程更新界面的错误方法_大坡3D软件开
2021-11-04 08:29:12 2047
原创 (15) C# 抽取SuperSocket库里的缓冲区类
经常写网络程序的开发人员,就会发现C#里写缓冲区是比较麻烦的,因为它的数组不能动态地增加,每次都需要创建一个新的缓冲区。因此C#比python、C、C++等语言在这方便是有缺陷的,或者说是不足够友好的。所以在这里处理缓冲区的方式,就变得有点复杂了。如果在C++里直接new就可以了,在python里可以直接用+就解决了。为了解决上述的问题,因此深入地钻研了一下supersocket类库,然后看到它是怎么样高效地处理接收缓冲区的,这样处理的方式是有点复杂,但是还是比自己写的要好很多。所以在一些工程里,不需要
2021-11-03 08:26:03 295
原创 (14)C#的网络接收和发送的各种大小端字节转换
由于跨不同的设备进行连接,所以大小端表示的网络协议,就经常会遇到。比如与PLC进行通讯,或者与不同的PC的网络协议通讯。这时候就需要对种数据进行大小端变换,才能把接收到的数据,或者发送过去的数据达到正确的表示。过往对C或C++的方式比较熟悉,但是C#的表示方式又有一些不一样,经过总结和测试,可以归纳为下面的例子:using System;using System.Collections.Generic;using System.Linq;using System.Net;usin.
2021-11-01 08:33:14 3280
原创 (13)C#里使用比较难理解的IList<ArraySegment<byte>>类型
经常做网络开发,需要接收网络的数据,由于TCP的数据是一段一段地接收到的,那么需要把这些数据放到缓冲区,然后又需要把这些数据合并起来使用。因此就会使用IList<ArraySegment<byte>>类型,使用ArraySegment<byte>来保存收到的一段数据,然后使用List来保存所有分段的数据。初学C#的人,使用这个类型,往往比较难理解,所以需要通过例子来练习它。比如怎么样从IList<ArraySegment<byte>>类型.
2021-10-29 08:59:50 1810
原创 欧姆龙的PLC的FINS通讯协议的C例子
近期使用OMRON的PLC,需要与PC进行通讯,一般采用FINS的协议进行,它的通讯格式如下:UDP的格式:C例子:1 #include <errno.h>2 #include <stdio.h>3 #include <sys/types.h>4 #include <sys/socket.h>5 #include <netinet/in.h>6 #include <signal.h>78 #define
2021-10-28 14:46:55 1658
原创 树莓派使用1M CAN通讯
购买硬件:RS485 CAN HAT 是微雪电子为树莓派开发的一款的带 RS485 和 CAN 通信功能的扩展板,具备 RS485、CAN 通信功能。https://www.waveshare.net/wiki/RS485_CAN_HAT使用的树莓派是4B 产品。CAN_HAT模块:具备CAN功能,使用SPI接口CAN控制器MCP2515,搭配收发器SN65HVD230。把树莓派安装最新有resbian系统,这个使用官网上的imager_1.6.2.exe文件。然后使用USB读卡器..
2021-10-26 14:29:38 861 1
原创 (12)C# 抽取SuperSocket库里的日志功能
前面使用SuperSocket库,看到它自动地加载日志库的功能,非常实现用,心里痒痒的。一直想使用它,但是由于它是一个库里,如果全部加载这个库又太大了,这样不太合算。所以就需要把它自动地加载日志的功能抽取出来,这样就方便不需要加载整个库的情况了。在抽取的过程中碰到了几个问题,第一个是不用命名空间:System.ComponentModel.Composition.Hosting碰到这个一阵抓狂,最后发现需要添加这个引用才能使用这个命名空间。就这样折腾几个小时过去了,差点就要放弃这个工作了。第二个
2021-10-20 17:37:21 272
原创 (11)C#使用SunnyUI界面库的两个问题
从界面上看到还是比较漂亮的,如下图:不过在使用的过程中发现有两个问题:一个是\SunnyUI\Units\UJson.cs的编译,这个要选择对的引用文件才可以成功编译,如果编译不过,可以引用下面的:C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Extensions.dll这样可以解决高版本不存在System.Web.Script.Serialization;的问题。二是依
2021-10-19 11:52:38 4478
原创 (10)C#使用SuperSocket库发现一个用法比较怪异
随着C#的语法越来越多,看到别人的代码,就经常发现一些怪异的用法,比如本次碰到的代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using SuperSocket.SocketBase;using SuperSocket.SocketBase.Command;using SuperSocket.ProtoBase;namespace SuperSocket.
2021-10-18 16:50:34 231
原创 (9)C#里发现SuperSocket库不能发现命令的原因
在使用SuperSocket来写服务器的过程中,这是一个非常快速的开发方式,也非常好用。不过学习的曲线有点高,在使用的过程中经常会遇到各种各样的问题。比如当下就遇到一个比较奇怪的问题,明明在项目里添加了命令,但是框架发现不了,这样就比较怪异了。由于SuperSocket是使用反射的机制来查找命令,并且是跨不同的程序集。因此SuperSocket对命令的发现有一定要求,同时要满足下面几个条件:1、继承CommandBase类。2、采用public声明。3、在EXE程序集里,如果不在就需要自行添加到
2021-10-18 14:59:02 256
原创 (8)C#导入库编译出错:请考虑使用 app.config 将程序集“log4net, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a”
当引用SuperSocket类库时,导致编译出下面的提示:请考虑使用 app.config 将程序集“log4net, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a”从版本“1.2.13.0”[]重新映射到版本“2.0.12.0”这时修改如果运行程序,可以打开,但是执行一定位置,就会出错。这时候怎么办呢?最先想到的方法,就是到类库的代码里修改,但是我能找到的位置都修改了,仍然存在这个问题。我们只能采用别的方法了,就是采用同时支持不同的.
2021-10-14 13:50:28 1084
原创 (7)C#的this关键字的三种用法
在使用C#的过程中,发现this关键是比较少用的,但是在下面这三个场合下是必须要使用的,不使用它是解决不了问题。第一种场合就是当类成员变量的名称与函数的参数名称一样。比如下面这种情况:public class Employee{ private string alias; private string name; public Employee(string name, string alias) { // Use this to qualify
2021-10-14 08:24:14 570
原创 (6)C#中using(...){...}的意思
在学习C#的过程中,经常也会碰到using(...) {...}的方式,但是我们碰到最多是这样using命名空间。因为using在C#里有三种作用,第一种是作为:using statement这种方式,就是正确地释放资源,比如继承了IDisposable或者IAsyncDisposable接口的对象,需要在使用完之后,自动释放掉。如下面的例子: private void TestBasicConfig(string configFile) { .
2021-10-13 09:10:05 418
原创 (5)C#网络编程的服务器类TcpListener
在C#的程序开发里,常常需要跟网络打交道,这是不可以避免的事情,因此学会使用C#来编写网络服务器程序是必备的技能。也许有一些人说,我们只需要开发客户端的程序,为什么要学习服务器的开发呢?因为调试客户端的程序需要服务器,在测试的过程里,不可能等别人的服务器开发出来再进行调试,肯定要自己写一个简单的服务器来测试,这是必要的步骤。写TCP服务器,最简单的方式是使用TcpListener。TcpListener和TcpClient类是对Socket的进一步封装,为基于TCP协议的网络通信提供更加便捷的调用方
2021-10-12 08:26:58 971
原创 (4)C#工程文件介绍
在C#创建一个控制台的应用,默认创建的工程如下:Bin目录Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C#编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。Obj目录obj是object的缩写,用于存放编译过程中生成的中间临时文件。其中都有debug和release两个子目录,分别
2021-10-11 08:26:34 1004
原创 (3)C# 多线程更新界面的第二种方法
前面介绍了一种线程来更新界面的方法,如果不是限定采用前面的线程方式,就可以采用更加方便的多线程模型,它就是组件里的backgroundWorker,在界面上可以看到,如下图:可以把这个组件拖到界面上,就可以生成一个线程,它就会叫这样的名称:backgroundWorker1,可以看到它不是放在窗口里,而是摆放在下面:有了这个线程组件之后,我们就可以把需要线程工作的内容放到下面的函数backgroundWorker1_DoWork: private void backgr.
2021-10-09 17:58:34 1225
原创 (2)C# 多线程更新界面的错误方法
由于一个线程的程序,如果调用一个功能是阻塞的,那么就会影响到界面的更新,导致使用人员操作不便。所以往往会引入双线程的工作的方式,主线程负责更新界面和调度,而次线程负责做一些阻塞的工作。这样做了之后,又会导致一个常见的问题,就是很多开发人员会在次线程里去更新界面的内容。比如下面的例子:在上面的例子里,创建Win forms应用,然后增加下面的代码:using System;using System.Collections.Generic;using System.ComponentMod
2021-10-09 13:38:00 6271
原创 Python里 int 和 bytes互转的方法
Python里 int 和 bytes互转的方法在Python3之前,一般是使用下面的方法:>>> import struct>>> struct.pack("B", 2)'\x02'>>> struct.pack(">H", 2)'\x00\x02'>>> struct.pack("<H", 2)'\x02\x00'也就是使用struct.pack方法,它实现了从int到bytes的转换。在Pyt
2021-10-07 09:05:05 5490
原创 (1)C# 创建控制台应用程序
在学习C#语言的时候,首先要学习控制台的应用程序,这样才能专注于语言的学习,减少学习的梯度,也有利于输出自己需要输出的内容。因此第一步学习C#语言时,一定要先使用控制台的应用程序的方式。所以学习本文就是一个好的开始。先下载VS2019,然后点击创建项目:点击下一步,就会创建一个控制台的应用程序。这时控制台的应用程序框架就已经创建好了,只需要输入下面的代码,就可以输出一些文字:using System;using System.Collections.Generic;us
2021-09-30 09:41:08 1995
原创 C# 格式化日期输出
这些知识一定要记住,今天为了一个例子,还找了一会才能正确地格式化输出,看来不常用就会生疏,现在又要把记录在日志里,才能常常地温习一遍。string.Format("{0:d}",System.DateTime.Now) 结果为:2009-3-20 (月份位置不是03)string.Format("{0:D}",System.DateTime.Now) 结果为:2009年3月20日string.Format("{0:f}",System.DateTime.Now) 结果为:2009年3月2
2021-09-28 09:17:03 463
原创 深入浅出matplotlib(106):使用巴特沃斯滤波器进行带通滤波和带阻滤波
前面的例子学习了怎么样处理低通和高通滤波的方法,但是还有另外两种滤波:带通滤波和带阻滤波。现在就来学习这两种方式,先来学习带通滤波,它的意思就是说只有一个区间的频率进行通过,在这范围之外的就不能通过。因此,我们要演示这个功能,先来创建三种频率的混合波形,如下图:从上面的波形来看,是看不出来是什么频率组成的信号,所以真实的信号已经被其它波形干扰,已经失去本来的面貌。由于我们只需要20Hz的波形信号,所以我们不能采用高通滤波,也不能采用低通滤波,必须使用带通滤波才可以把10Hz和50Hz的信号去掉。
2021-09-20 18:55:17 1278
原创 深入浅出matplotlib(105):使用巴特沃斯滤波器分离10Hz和20Hz的信号
在开发各种系统中,经常会遇到系统干扰的情况,比如50Hz的交流电的干扰,又或者大气中传播时会有混入不同的信号。因此我们需要使用各种的滤波器来进行复杂的工作,以便分离出来有用的信号,下面就来举例怎么样使用巴特沃斯滤波器的作用。假如有一个10Hz和一个20Hz的信号一起混合了的正弦信号,那么我们认为20Hz的信号是有用的,10Hz信号是干扰信号,因此我们需要从这里提取出原来20Hz的信号,那么我们需要怎么样做呢?由于20Hz的信号比10Hz信号的频率要高,所以这里我们采用高通滤波器,同时把截止频率设置为15Hz
2021-09-20 11:57:29 1892
原创 深入浅出matplotlib(104):使用scipy.signal.sosfilt函数
在滤波设计里,滤波器会有多种参数保存方式,来源于滤波器的类型比较多,每一种各有优缺点。比如从下面界面看到,就有以下几种:可以看到采用SOS结构保存,也就是Second-order sections的缩写,它其实是Second-order sections representation of the IIR filter,就是采用SOS表示的IIR滤波器。这种表示是采用二阶级联的转置的滤波器(direct-form II transposed structure),对应上图里的就是Direct-For
2021-09-12 12:14:20 1442
原创 深入浅出matplotlib(103):使用巴特沃斯滤波器
在信号处理过程中,经常要使用巴特沃斯滤波器,因为硬件有很多干扰因素。比如工频干扰,在中国基本上都会有50Hz的交流电干扰。接着下来还会器件的干扰,由于采集的信号比较小,放大之后就会带来各种其它信号进行来。又比如采集心电图信号过程中,可能受到肌肉电信号的干扰。由于各种各样的干扰存在,我们需要把这些干扰信号排除掉。很多时候采用硬件来滤波已经不可能,或者采用硬件的成本太贵,这样就需要采用软件的算法来计算这种滤波。而使用滤波器的选择方面,往往会选择巴特沃斯滤波器。巴特沃斯滤波器(Butterworth fi
2021-09-11 22:35:10 763
原创 深入浅出matplotlib(102):理想滤波器
在数字信号处理领域中,数字滤波器占有非常重要的地位。根据其计算方式可以分为FIR(有限脉冲响应)滤波器,和IIR(无限脉冲响应)滤波器两种。理想的低通滤波器频率响应如下图所示:其中为取样频率,为阻带频率。通常为了计算方便,将取样频率正规化为1。于是的含义就是每个取样点所包含的信号的周期数,例如0.1表示每个取样点包含0.1个周期,即一个周期有10个取样点。根据离散傅立叶变换的公式可以求出此理想低通滤波器的脉冲响应为:其中n为负无穷到正无穷的整...
2021-09-11 11:23:17 1112
原创 深入浅出matplotlib(101):研究最有名的滤波函数:sinc函数
在信号处理领域,Sinc滤波器一个全部除去给定带宽之上的信号分量而只保留低频信号的理想电子滤波器。在频域它的形状象一个矩形函数,在时域它的形状象一个Sinc函数。由于理想的 Sinc 滤波器(人们熟知的矩形滤波器)有无限的延迟,所以现实世界中的滤波器只能是它的一个近似,但是它仍然在概念演示或者验证中得到了广泛应用,如采样定理以及Whittaker–Shannon插值公式。由于这个函数使用的地方比较,我们先来学习一下它的图形特征:那条青色的曲线就是有名的sinc函数,而那么蓝线是sin(x)/x的
2021-09-11 11:02:07 2574
原创 深入浅出Flask(52):flask_sqlalchemy的同时连接多个数据库
在开发的过程中,总会遇到复杂的问题,不是想像的那么简单。比如有时候旧的代码是使用SQLite的数据库,现在新的数据库要使用mysql,那么就需要同时连接两个数据库使用。又比如说自己使用的mysql数据库,但是与客户那边进行整合的时候是一个SQL SERVER的数据库。因此同时连接多个数据库的机会还是比较多的,也是一种常常遇到的情况。如果此时使用flask sqlalchemy来开发,就不需要慌张,也不需要害怕,更不有烦恼,因为它已经内部支持多种数据库的连接。Flask提供了一种叫做binds的机制来
2021-09-05 11:55:02 2829 1
python抓取天气并分析 实例源码
2017-08-28
书《深度学习》
2017-03-13
国产8051模拟器
2016-09-10
tinyxml2配套源码
2016-06-27
selenium的浏览器驱动
2016-06-14
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
svm_hog_data.rar
2020-03-02
实现numpy的C++库扩展
2019-11-24
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
胶囊模型的代码
2018-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人