开发工具与关键技术:Visual Studio 2015
作者:Mr_恺
撰写时间:2019.04.12
如果你想要禁用一个输入框input,只需要简单添加disableo属性,这不仅会禁用输入框,还会改变输入框的样式以及当鼠标的指针悬停在元素上时鼠标指针的样式
在Asp.Net Mvc中,新增或修改时,大多算都是通过页面获取值,然后通过ajaxSubmit方法提交表单到控制器中进行数据的新增保存或修改保存。
但是我们在提交的模态框表单中的某一个input输入框加上一个disableo属性,
则打开出来的新增或修改的模态框,编号这个input输入框是灰色的,是禁用的状态:
我们在新增保存或修改保存时,获取不到给加上disableo属性的input的值,是空的,因为它已经给禁用了:
在页面都获取不到值,连判断的语句也过不去:
现在我把判断语句去掉,演示给我们看看,在页面都获取不到值,则在通过ajaxSubmit方法提交表单到控制器也获取不到值,EmployeeNumber肯定为空:
这样的话肯定新增保存或修改保存是失败的,
解决方法:
1、 把disableo属性去掉
2、 在控制器自行写一个编号排序的方法,然后返回视图显示出来,但是页面一样是无法传送到控制器,要在控制器查询出来编号,把在控制器自行写一个编号排序的方法赋值给它。
无论用源码安装的方式和宝塔安装MySQL,会出现一些必要的头文件在安装目录下存在,但是没有在include 的mysql目录下。
其实解决办法很简单。安装libmysqlclient-dev
执行安装命令
sudo apt-get install libmysqlclient-dev 安装完之后,重新进入mysql目录下就有相应的头文件了,如果是用远程调试工具的话,需要重新开启一下项目刷新一下,
1、什么是scoketio? 由于浏览器端对HTML5的支持不一,为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验,于是socket.io诞生。
Socket.IO包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。
2、本质 Socket.io将Websocket和轮询 (Polling)机制以及其它的实时通信方式封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码。也就是说,Websocket仅仅是 Socket.io实现实时通信的一个子集。
它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5,应该可以满足绝大部分需求了。
3、socket的组成 Socket.IO 由两部分组成:
1.一个服务端用于集成 (或挂载) 到 Node.JS HTTP 服务器: socket.io
2.一个加载到浏览器中的客户端: socket.io-client
3.开发环境下, socket.io 会自动提供客户端。
4、socket的基本使用 提示:由于开发环境下, socket.io 会自动提供客户端。所以我们只需要安装一个socket.io模块即可。
① 新建一个package.json文件
npm init --yes
② 安装express与socket.io模块
cnpm i express socket.io -S
5、群聊实现 后端代码
let app = require("express")();// 获取express模块实例 let http = require('http').Server(app);// 将express模块实例作为回调构建http模块实例 let io = require('socket.io')(http);// 将http模块实例作为回调构建socket.io模块实例 // 使用http模块开启后端服务(原生node+express的结合) http.listen(3000, function () { console.log('listening on http://127.0.0.1:3000') }) //设置路由,构建后端接口 app.get('/', function (req, res) { res.
前言:
在VMware运行Ubuntu虚拟机时,开机之后忘记密码怎么办?
环境:Ubuntu版本:ubuntu-16.04.6-server-amd64;VMware版本:14.1.1 build-7528167
解决办法:
第一种方式:
1,重启Ubuntu虚拟机,长按shift(要选中虚拟机哦),进入如下界面
2,上下箭头选择Advanced options for Ubuntu ,enter键进入如下界面
3,选择第二个高级模式(带有recovery mode) ,enter进入Recovery Menu界面;进入之后如下图所示
4,选择上图中的root Drop to root shell prompt 也就是获取root权限,进入选项,输入root(linux系统创建的时候默认创建的超级用户名:root)
5, 敲入:passwd "用户名"之后再敲两次密码就可以修改用户名密码了。如下是我修改root账户密码
6,按ctrl+alt+del重启系统,即可使用刚刚设置的密码。 第二种方式
如果上面的方式不能修改root密码,或者出现其他问题,可以参考以下方式;
1,通过第一种方式进入步骤2后,输入e,进入编辑启动项模式;(提示信息还有输入c 进入命令行)
2, 输入e健之后
3, 通过上下左右键移动光标,找到linux /boot/....... ro recovery nomodeset ...所在的行,如下
4, 删除蓝框的recovery nomodeset,再将这一行的后面输入quiet splash rw init=/bin/bash
5,根据提示按F10或者Ctrl + x重启进入修改密码页面,如下图: 6,输入passwd "用户名" ,用户名可是root,也可以是其他账户名;回车,根据提示输入两次新密码就可完成修改;如下图说明修改成功;注意Linux系统输入密码的时候不显示;
异常:
如果出现如下图说明,没有修改成功
需要限执行:mount -o rw,remount / 命令后再重复上面步骤6即可;
如果对您有所帮助的话
不妨加个关注,点个赞哈,您的每个小小举动都是对我莫大的支持!如果能一键三连,感激不尽!
<li class="licence"> <span class="type_key type_img_key"> 证件照片: </span> <div class="type_img"> 营业执照 <input type="file" id="subImg" onchange="selectImage(this)"> <div class="img"><img src="" alt=""></div> </div> <label for="subImg" class="sub_img"> 上传图片 </label> </li> .licence{ @include clear; width: 100%; padding-bottom: 10px; .type_img{ @include whl(198px,126px); font-size: 14px; color: #333333; text-align: center; padding:0; position: relative; input[type="file"]{ position: absolute; width:100%; top:0;left: 0;right: 0;bottom: 0; margin: auto; opacity: 0; z-index: 9; cursor: pointer; } .img{ position: absolute; top: 0; left: 0; bottom: 0; right: 0; z-index: 4; padding:5px; } &:after{ display: none; content: "
问题描述:有一批样本x,每个样本都有几个固定的标签,如(男,24岁,上海),需要从中抽取一批样本,使样本总的标签比例满足分布P(x),如(男:女=49%:51%、20岁:30岁=9%:11%、..........)
采用KL-散度作为优化目标函数。
KL-散度又叫相对熵
KL-散度在机器学习中,P用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1] KL-散度直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。
公式:
使用SciPy中的optimize.minimize来进行优化。
def minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None): 几个重要的参数:
fun:目标函数(he objective function to be minimized);
x0:参数初始值(Initial guess. Array of real elements of size (n,));
bounds:参数取值范围限制(Bounds on variables for L-BFGS-B, TNC, SLSQP and trust-constr methods.)
constraints:约束函数(Constraints definition (only for COBYLA, SLSQP and trust-constr)
Constraints for COBYLA, SLSQP are defined as a list of dictionaries. Each dictionary with fields: type : str Constraint type: 'eq' for equality, 'ineq' for inequality.
给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串。
示例:
输入: S = "ADOBECODEBANC", T = "ABC" 输出: "BANC" 说明:
如果 S 中不存这样的子串,则返回空字符串 ""。如果 S 中存在这样的子串,我们保证它是唯一的答案。 1 //使用滑动窗口 2 //我们最开始先扫描一遍T,把对应的字符及其出现的次数存到 HashMap 中。 3 // 4 //- 然后开始遍历S,就把遍历到的字母对应的 HashMap 中的 value 减一,如果减1后仍大于等于0,cnt 自增1。 5 // 6 //- 如果 cnt 等于T串长度时,开始循环,纪录一个字串并更新最小字串值。然后将子窗口的左边界向右移,如果某个移除掉的字母是T串中不可缺少的字母,那么 cnt 自减1,表示此时T串并没有完全匹配。 7 // 8 //解法一: 9 10 class Solution { 11 public: 12 string minWindow(string s, string t) { 13 string res = "
一. << 是左移运算符
二. 1<<5就是1左移5位,右边以0填满,1<<5 = 100000
三. 需注意:这个10000是二进制,100000-1 = 11111是二进制的减法
在过去的某一天(2019.3.19),有个学弟问了一个关于python list中的一个问题:
比如我们已知一个列表 [3,4,5,6,5,4,3] 我们想删除第一个为3的元素。 我们尝试了如下几种方式:
In [1]: print [3,4,5,6,5,4,3].remove(3) None In [2]: list = [3,4,5,6,5,4,3] In [3]: print list.remove(3) None In [4]: list.remove(3) In [5]: print list [4, 5, 6, 5, 4] 结果如下:
为什么会有上述的结果呢?
list.remove(3) 会默认删除第一个为3的元素,直接通过 print 打印的是 remove 函数的默认的返回值,而 remove 函数默认有个初始值为 None ,你需要先执行覆盖的命令,再去打印。
理解的一个难点就是 函数执行的先后顺序 ,这一点可能很多朋友会忽略的一个问题,就像自动贩卖机一样,你得要先投币,系统确认收款后再让你指定的物品掉落,从而完成这样一笔交易。
想要得到 被删除指定元素后的列表 也是如此,你得要先删除,再去打印出来,程序设计的思路亦或若此。
转载于:https://www.cnblogs.com/ECJTUACM-873284962/p/10705122.html
解决全局的jackson日期转换和解析
因为项目有些特殊,需要解析各种格式的日期类型转换,后来发现jackson在日期转换上没法满足需要。 遂重写了com.fasterxml.jackson.databind.util.StdDateFormat 和com.fasterxml.jackson.databind.DeserializationContext。 我的版本是jackson-databind-2.8.10 起初因为需要“yyyy-MM-dd HH:mm:ss”的日期格式直接显示,直接使用了@JsonFormat注解,设置“yyyy-MM-dd HH:mm:ss”,时区加八个小时。 但是被注解后,不管是解析还是json串,都一律是这个格式。只要不是这个格式那就是六亲不认!比如别人的api中接收我的格式时报错“Can not parse date “xx”: not compatible with any of standard forms (xxxx,xxxx)”,我的格式接收别人的api报错 “Failed to parse Date value ‘xx’: yyyy-MM-dd HH:mm:ss”。 于是我尝试在objectMapper中设置全局的DateFormat:
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/"); } @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper(); //json中多余的参数不报错,不想要可以改掉 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //设置全局的时间转化 SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"
FPGA的管脚主要包括:用户I/O(User I/O)、配置管脚、电源、时钟及特殊应用管脚等。其中有些管脚可有多种用途,所以在设计FPGA电路之前,需要认真的阅读相应FPGA的芯片手册。
下面以ALTEra公司的Cyclone系列FPGA为例,介绍FPGA的各种功能管脚。
(1)用户I/O。
I/Onum(LVDSnumn):可用作输入或输出,或者双向口,同时可作为LVDS差分对的负端。其中num表示管脚序号。
一般在绘制FPGA原理图时,将同一种功能和用途的管脚放在一个框图中,如图2.3所示是用户I/O的原理图。
(2)配置管脚。
MSEL[1..0]:用于选择配置模式。FPGA有多种配置模式,比如主动、被动、快速、正常、串行、并行等,可以此管脚进行选择。
DATA0:FPGA串行数据输入,连接至配置器件的串行数据输出管脚。
DCLK:FPGA串行时钟输出,为配置器件提供串行时钟。
nCSO(I/O):FPGA片选信号输出,连接至配置器件的nCS管脚。
ASDO(I/O):FPGA串行数据输出,连接至配置器件的ASDI管脚。
nCEO:下载链器件使能输出。在一条下载链(Chain)中,当第一个器件配置完成后,此信号将使能下一个器件开始进行配置。下载链的最后一个器件的nCEO应悬空。
图2.3 FPGA用户I/O原理图
nCE:下载链器件使能输入,连接至上一个器件的nCEO。下载链第一个器件的nCE接地。
nCONFIG:用户模式配置起始信号。
nSTATUS:配置状态信号。
CONF_DONE:配置结束信号。
如图2.4所示是FPGA配置管脚原理图。
图2.4 FPGA配置管脚原理图
(3)电源管脚。
VCCINT:内核电压。通常与FPGA芯片所采用的工艺有关,例如130nm工艺为1.5V,90nm工艺为1.2V。
VCCIO:端口电压。一般为3.3V,还可以支持选择多种电压,如5V、1.8V、1.5V等。
VREF:参考电压。
GND:信号地。
(4)时钟管脚。
VCC_PLL:锁相环管脚电压,直接连VCCIO。
VCCA_PLL:锁相环模拟电压,一般通过滤波器接到VCCINT上。
GNDA_PLL:锁相环模拟地。
GNDD_PLL:锁相环数字地。
CLKnum(LVDSCLKnump):锁相环时钟输入。支持LVDS时钟输入,p接正端,num表示PLL序号。
CLKnum(LVDSCLKnumn):锁相环时钟输入。支持LVDS时钟输入,n接负端,num表示PLL序号。
PLLnum_OUTp(I/O):锁相环时钟输出。支持LVDS时钟输入,p接正端,num表示PLL序号。
PLLnum_OUTn(I/O):锁相环时钟输出。支持LVDS时钟输入,n接负端,num表示PLL序号。
如图2.6所示是FPGA时钟管脚原理图。
图2.5 FPGA电源管脚原理图 图2.6 FPGA时钟管脚原理图
另外,FPGA的管脚中,有一些是全局时钟,这些管脚在FPGA中已经做好了时钟树。使用这些管脚作为关键时钟或信号的布线可以获得最佳性能。
(5)特殊管脚。
VCCPD:用于选择驱动电压。
VCCSEL:用于控制配置管脚和锁相环相关的输入缓冲电压。
PORSEL:上电复位选项。
NIOPULLUP:用于控制配置时所使用的用户I/O的内部上拉电阻是否工作。
TEMPDIODEn/p:用于关联温度敏感二极管。
有两次在读取tfrecord中的数据时报shape的问题了!
是什么原因呢? 慢慢debug才发现原来是数据类型的原因!!
在写入tfrecord时也就是将数据tobytes()的时候数据的类型是float32
但是在训练前读取tfrecord中数据tf.decode_raw时,用的是:
tf.decode_raw(frames, np.uint8)!!! np.uint8指的是数据流输出np.uint8类型数据,因此前后的shape肯定不一致。
正确做法是将导入tfrecord和导出tfrecord的数据类型一致,如果想使用tf.decode_raw(frames, np.uint8)则在写入tfrecord时也就是将数据tobytes()的时候将数据变为uint8即可
我们知道linux是一个多用户的操作系统,也就是说在linux系统中存储着很多不同用户的用户名及密码。那么如果某一个用户的密码忘记了怎么办呢?
首先我们得知道,在linux系统中,用户名被存放在了/etc/passwd这个文件中;密码存放在/etc/shadow中。知道这两条重要的信息,那么后面的事情就简单很多了。
如果我们要查看某个用户的密码,我们得先登陆为超级用户才可查看:
su root
然后输入超级用户的登陆密码,紧接着,我们需要查看/etc/shadow中对应用户的密码:
cat /etc/shadow | grep *** #注意,我这里的***为用户名,即需要查看哪个用户名,这里就替换为该用户名
以我这里为例(我去掉了自己的用户名和密码密文): 我们可以看到出来了一串字符,明显不是我们当初用的密码啊,这是怎么回事呢?这是因为为了安全,系统将我们的明文密码进行了加密。既然加密了,我们是不是要进行解密啊 。既然要解密,我们就得知道我们的系统使用了什么加密方式。我们输入以下指令:
authconfig --test | grep hashing
可以看到,我这里显示的密码加密方式为MD5,那就好办了,我们可以回到之前的问题了,我们只需要将我们的密文密码进行MD5解密即可得到我们实际的密码了。
我们回到之前的那一串字符串。在这里,我们对刚才的字符串进行一定的解释 。
(我们拿一串字符进行举例)
xxx:$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.:17969:0:99999:7::: 上面字符串的格式为(大家有兴趣的朋友可以做详细了解,我们只需要找到我们的密文密码):
{用户名}:{加密后的口令密码}:{口令最后修改时间距原点(1970-1-1)的天数}:{口令最小修改间隔(防止修改口令,如果时限未到,将恢复至旧口令):{口令最大修改间隔}:{口令失效前的警告天数}:{账户不活动天数}:{账号失效天数}:{保留}
【注】:shadow文件为可读文件,普通用户没有读写权限,超级用户拥有读写权限。如果密码字符串为*,则表示系统用户不能被登入;如果字符串为!,则表示用户名被禁用;如果字符串为空,则表示没有密码。
我们可以使用passwd –d 用户名 清空一个用户的口令密码。
这样我们就清楚了, 上面的一串字符中,“xxx”为用户名,“$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.”即为密文密码。
好了,现在我们拿到了密文密码,接下来我们就可以用它进行MD5解密。
我们可以在网上搜一个在线MD5解密工具,然后将我们的密文密码复制过去,你会惊奇的发现,我们的明文密码就这样拿到了,是不是很有意思呢?感兴趣的朋友可以自行测试。
情景:主工程调用封装的DLL,其中DLL里面有对话框,也就是说主工程调用DLL里的导出类的成员函数,成员函数再启动对话框。(直接导出(AFX_EXT_CLASS)对话框类的话会报错,具体还没研究)
DoModal()总是弹不出对话框,DoModal()返回值为-1,开始以为是资源ID等一系列的问题。MFC对话框DoMoal返回-1
检查了好几遍,又重新建对话框类,也还不行。但是主工程的对话框可以正常弹出。
后来考虑DLL导出有问题,重新建工程,终于发现工程建错了,晕!!!
MFC有三种DLL:MFC的3种DLL
之前选的第一种:MFC regular dll,后来选第三种:MFC extension dll可以正常弹出对话框了。
问题是解决;但仍然不是很清楚其内部的关联,下面可以参考研究:
Regular DLL(MFC规则DLL)、MFC...Extension DLL(MFC扩展DLL 区别
AFX_MANAGE_STATE(AfxGetStaticModuleState())的作用
MFC DLL 不能正确调用的问题 + AFX_MANAGE_STATE(AfxGetStaticModuleState());
[经验总结] MFC DLL——Regular DLL and Extension DLL(
加了AFX_MANAGE_STATE(AfxGetStaticModuleState());会有断言(有可能加的方式不对)
查了一下说是没有初始化,
加了:
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
//??_Module.LogEvent(_T("MFC初始化错误!"), EVENTLOG_ERROR_TYPE );
return;
}
还是弹不出对话框,没时间研究了,有空再看。
最近开始使用SSM(springMVC+spring+mybatis)组合框架开发一些小项目,为便于后面开发使用,故特此写一个小的demo
首先,我们来看目录结构
第一步:创建SSM项目,项目名为TestDemo
第二步:导相关jar包(jar包下载地址:https://mvnrepository.com/tags/maven),这里默认都会,就不做详细解释
第三步:配置相关配置文件:这里我分为spring-mvc.xml、spring.xml、spring-mybatis.xml以及config.properties四个配置文件分别配置spring-mc,spring以及mybatis框架
spring-mvc.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<!-- 扫描包路径 -->
<context:component-scan base-package="com.fy"/>
<!-- 视图映射设定 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 处理静态资源 -->
<mvc:default-servlet-handler/>
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
<property name="favorParameter" value="false" />
<property name="ignoreAcceptHeader" value="false" />
</bean>
</beans>
spring.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="
学习来自:https://www.cnblogs.com/zingp/p/8666214.html 感谢!
思路:
考虑的四则运算符号 : ["+", "-", "*", "/", "(", ")"] 获取表达式字符串 --》表达式切分 (请注意区分 减号"-", 与负号"-" ) --》 先出初切: formula_list = [i for i in re.split('(\-\d\.?\d*)', formula) if i] 然后再判定: if re.search('[\+\-\*\/\(]$', final_formula[-1]): 其他正常切分就行: item_split = [i for i in re.split('([\+\-\*\/\(\)])', item) if i] 得到合适的 字符子串 --》 区分 属于 数字栈 还是 操作符栈 -》存好后运算逻辑 遍历表达式split后结果,如果数字来了需要压栈,进入 num_stack,如果运算符来了,判定: 第一个运算符 直接压栈新的后面的运算符来了,先拿出之前的运算符栈中最后的运算符弹出,比较优先级 如果优先级相同,数字栈弹出后两个元素与老运算符操作 -> 得到的结果压入数字栈如果优先级不同,新的运算符压栈注意,如果老运算符弹出为“(”, 新运算符目前为“)”,-> 弹出老的"(", 丢弃新的“)”所有item结束后,数字栈和运算符栈中可能还有元素,再搞一波,最后结果在 num_stack中 代码:
import re def calculate(n1, n2, operator): if operator == "
这里可能是数据库的问题
先查询数据库的mysql.user 表单
mysql> select user, plugin from mysql.user; 发现是这里的错误 关于auth_socket 请自行查看官方说明
把这里改一下就可以了
update mysql.user set authentication_string=PASSWORD('newPwd'), plugin='mysql_native_password' where user='root'; flush privileges; 再重新启动服务就可以了
systemctl stop mariadb systemctl start mariadb
重写初始化方法使用,使其能够创建默认初始值 用一个内部类重写他的init方法
import java.util.HashMap; import java.util.Map; public class MyExecuteContext { //让ThreadLocal里面有一个默认的类即在初始化时 new 出来 protected final static ThreadLocal<Map<Object, Object>> threadContext = new MapThreadLocal(); private static class MapThreadLocal extends ThreadLocal<Map<Object, Object>> { @Override protected Map<Object, Object> initialValue() { return new HashMap<>(); } } public static void main(String[] args) { Map<Object, Object> objectObjectMap = threadContext.get(); System.out.println(objectObjectMap==null); } }
但是获取String evkey = requestMap.get(“EventKey”);的时候只有十位数字:
例如:scene_id= “4028098169dd83ab0169dda9e23c0006”,获取到的EventKey只是4028098169
此问题已经解决
是因为在获取ticket 得时候,因为我的sceneId是String串,双引号缺失的问题导致的,这块要注意.
如:此处
字体库的图标是从https://www.iconfont.cn/下载来的。使用的是扩展名为TTF的字体库文件。把TTF文件导入到项目资源中。
Graphics这个类有个方法DrawString,可以把文字直接画出来。但是效果不是很好,需要对最后画出来的图片做处理。最直观的影响最终效果的是:图片带着空白部分。
字体图标库处理:
1.定义枚举类:
/// <summary> /// 图标枚举 /// </summary> public enum IconFontChars { _None = 32, /// <summary> /// AI /// </summary> AI = 0xec66, /// <summary> /// api接口 /// </summary> apiJK_api接口 = 0xe697, /// <summary> /// API接入 /// </summary> APIJR_API接入 = 0xec19, /// <summary> /// 方块+(原名称) /// </summary> FK_方块 = 0xec06, /// <summary> /// 方块- /// </summary> FK_方块1 = 0xec07 } 上面这个枚举是写了一个工具,把下图的UniCode部分提取出来
工具下载
2.定义图标类:
public class IconFont { /// <summary> /// 默认字体图标 /// </summary> private IconFontChars _Icon = IconFontChars.
eNB是什么 eNB简单说就是代表基站,是UE(用户)与核心网之间的桥梁;eNB相互之间通过X2接口通信;
eNB的作用 ●无线资源管理功能:无线承载控制、无线接入控制、连接移动性控制、UE上下行资源动态分配和调度等。
●用户数据流的加密和IP报头压缩。
●当UE附着时所提供的信息不能确定到达某个MME的路由时,eNB为UE选择一个MME。
●将用户平面数据路由到相应的S-GW。
●MME发起的寻呼消息的调度和发送。
●MME或O&M发起的广播信息的调度和发送。
●用于移动性和调度的测量以及测量报告配置。
●MME发起的PWS(PublicWarningSystem,公共预警系统,包括ETWS和CMAS)消息的调度和发送。
●CSG处理。
eNB之间X2通信 eNB之间通过X2可以获取UE信息,让UE快速接入其他eNB。
苏宁接口:http://quan.suning.com/getSysTime.do
淘宝接口:http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp
苏宁接口时间是标准的字符串模式,可以直接使用,淘宝接口返回的是Long型,比较大小比较方便
Jmeter的聚合报告参数详解:
#在执行前,需要设置好一个csv空文件,将执行结果刷到该文件中,方便演示各参数实例计算值,导出的报告示例如下#
Label:就是请求名称
#Samples:总线程数,值 = 线程数 * 循环次数
Average:单个请求的平均响应时间,值 = 总运行时间 / 发送到服务器的总请求数,截图中的值是这么计算出来的
>login:(6 + 15) / 2 = 10.5 约等于10
>j_acegi_security_check:(102 + 121) / 2 = 111.5 约等于111
>总体:(10 + 111) / 2 = 60.5 约等于61
Median、90%line、95%line、99%line分别代表50%的用户响应时间、90%的用户响应时间、95%的用户响应时间、99%的用户响应时间,也就是有百分之多少的请求小于这个值。其中,90%line是性能测试中比较重要的一个衡量指标。
Min:最小响应时间
Max:最大响应时间
Error%:错误率,发生错误的请求 / 总请求数,上面示例中错误率为0,再看下面这个示例 login的错误率 = 32 / 500 =0.064
Throughput:吞吐量,表示每秒完成的请求数。我们重新跑任务来演示吞吐量是怎么计算出来的
login请求是这么计算的:
最后一个线程的启动时间1554690590634 + 最后一个线程执行了多久的时间4 -第一个线程的启动时间1554690589729 = 909 毫秒 = 0.909s
总线程数10 / 线程持续运行的时间0.909s = 11.0/sec
也就是login的吞吐量是每秒11个请求
注意总体吞吐量是对所有请求中的第一个、最后一个请求启动时间来计算的,而不是简单的对各个请求吞吐量相加求平均值。
KB/sec:以每秒发送的千字节为单位测量的吞吐量【这个值怎么计算出来的还没研究出来,知道的小伙伴评论区告诉我一下啊】
**最后这两个一个是每秒多少请求 一个是每秒多少字节 注意区别
本文转载自昔日暖阳,原文地址:http://www.osheep.cn/4802.html
什么场景下可能用到?
1、最近为了部署一个Python应用到腾讯云服务器,在使用pip安装依赖模块时,总是因为需要HTTPS访问,无法安装模块。2、当然,如果你再python应用中无法进行请求https的链接,并提示SSL模块无法使用,这个依然适用。3、python3.7版本要求openssl的版本在1.0.2以上,所以就装呗。4、… 小提示:
首先要安装openssl,因为python3需要引用openssl模块,但是CentOS需要的openssl版本最低为1.0.2,但是CentOS 默认的为1.0.1,所以需要重新更新openssl
下面就直接出击了,一遍下来,稳妥!
一、安装openssl1.1.1版本 (1)使用yum安装相关依赖包,如果服务器yum有问题,找我上一篇文章处理。 yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++ (2)下载、解压缩、自定义安装 # 下载 wget http://www.openssl.org/source/openssl-1.1.1.tar.gz # 解压缩 tar -zxvf openssl-1.1.1.tar.gz # 进入目录安装 cd openssl-1.1.1 # 进行配置下,自定义 ./config --prefix=$HOME/soft-repos/openssl shared # 编译并安装 make && make install # 配置到用户环境变量,随处使用 echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/soft-repos/openssl/lib" >> $HOME/.bash_profile # 是环境变量配置生效 source $HOME/.bash_profile 二、安装python3.7.2版本 (1)安装相关依赖包,如果服务器yum有问题,找我上一篇文章处理。 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel -y yum install python-pip -y (2)下载并安装 # 下载3.
使用条件编译指令
例如:
a.h: int fun(); b.h: #include "a.h" c.h: #include "a.h" main.c: #include "b.h" #include "c.h" ...... //编译时就会出现重复包含/定义错误 可以加入条件编译指令#ifndef #endif
a.h: #ifndef A_FUN #define A_FUN int fun(); #endif b.h: #include "a.h" c.h: #include "a.h" main.c: #include "b.h" #include "c.h" ...... //编译时就会出现重复包含/定义错误 给出几个建议:
可以将要包含的头文件统一include到 .c/.cpp文件中,这样就会单独解析,不会发生错误。
或者直接include在头文件中,然后.c/.cpp文件里include自己的头文件,但头文件的函数要加上条件编译指令。例如:
b.h: #include "a.h" #include "c.h" b.c: #include "b.h"
好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。
目录 打开WICED选择SDK包SDK例程代码入口编译和下载 简介 WICED Studio是Cypress继承自Broadcom的开发环境,适用于cypress收购broadcom IOT的单芯片开发;当然现在cypress已经发布了整合PSoc Creator和WICED的全新开发环境Modus Toolbox.以后再讲Modus Toolbox。
如果你用过eclipse或者居于eclipse开发而来的IDE,那么你是用WICED Studio没有任何压力,WICED Studio也是在eclipse基础上开发而来。作为一款功能强大并且开源的软件,很多厂商的IDE都是在它的基础上开发而来,例如英飞凌的 DAVA、Dialog的 SmartSnippets Studio等;
一、打开WICED Studio如下界面; 二、选择SDK包; 三、SDK例程; 目前WICED6.2自带CYW20706/CYW20719/CYW20735等芯片的SDK
四、代码入口; 以"app/snip/hal/gpio"为例:
很多MCU工程师习惯了找"main",用WICED的话别找了,找不到,WICED的main函数放在底层;
APPLICATION_START( ) { wiced_set_debug_uart( WICED_ROUTE_DEBUG_TO_PUART ); wiced_hal_puart_select_uart_pads( WICED_PUART_RXD, WICED_PUART_TXD, 0, 0); WICED_BT_TRACE( "GPIO application start\n\r" ); wiced_bt_stack_init( sample_gpio_app_management_cback,NULL,NULL); } APPLICATION_START( )是整个代码的上层入口;
在这里,一般会设置debug模式;设置buff pool;设置transport;设置蓝牙协议栈的回调函数sample_gpio_app_management_cback(),这个回调函数将处理蓝牙协议栈的message。
APPLICATION_START( )跑完后;底层将返回一个"BTM_ENABLED_EVT"的message;应用层执行sample_gpio_app_management_cback(),在BTM_ENABLED_EVT下完成用户应用代码的初始化。
/* Bluetooth stack enabled */ case BTM_ENABLED_EVT: /* Initializes the GPIO driver */ wiced_bt_app_hal_init(); /* Sample function configures LED pin as output * sends a square wave on it * if testing pin 31 then disable puart*/ gpio_test_led( ); /* Sample function configures GPIO as input.
ApiBoot是一款基于SpringBoot1.x,2.x的接口服务集成基础框架, 内部提供了框架的封装集成、使用扩展、自动化完成配置,让接口开发者可以选着性完成开箱即用, 不再为搭建接口框架而犯愁,从而极大的提高开发效率。
ApiBoot DataSource Switch 顾名思义,DataSource Switch是用于数据源选择切换的框架,这是一款基于Spring AOP切面指定注解实现的,通过简单的数据源注解配置就可以完成访问时的自动切换,DataSource Switch切换过程中是线程安全的。
添加依赖 使用DataSource Switch很简单,在pom.xml配置文件内添加如下依赖:
<!--ApiBoot DataSource Switch--> <dependency> <groupId>org.minbox.framework</groupId> <artifactId>api-boot-starter-datasource-switch</artifactId> </dependency> 复制代码 ApiBoot所提供的依赖都不需要添加版本号,具体查看ApiBoot版本依赖
集成数据源实现 目前ApiBoot DataSource Switch集成了Druid、HikariCP两种数据源实现依赖,在使用方面也有一定的差异,因为每一个数据源的内置参数不一致。
Druid:参数配置前缀为api.boot.datasource.druidHikariCP:参数配置前缀为api.boot.datasource.hikari 具体使用请查看下面功能配置介绍。
配置参数 参数名参数默认值是否必填参数描述api.boot.datasource.primarymaster否主数据源名称api.boot.datasource.druid.{poolName}.url无是数据库连接字符串api.boot.datasource.druid.{poolName}.username无是用户名api.boot.datasource.druid.{poolName}.password无是密码api.boot.datasource.druid.{poolName}.driver-class-namecom.mysql.cj.jdbc.Driver否驱动类型api.boot.datasource.druid.{poolName}.filtersstat,wall,slf4j否Druid过滤api.boot.datasource.druid.{poolName}.max-active20否最大连接数api.boot.datasource.druid.{poolName}.initial-size1否初始化连接数api.boot.datasource.druid.{poolName}.max-wait60000否最大等待市场,单位:毫秒api.boot.datasource.druid.{poolName}.validation-queryselect 1 from dual否检查sqlapi.boot.datasource.druid.{poolName}.test-while-idletrue否建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。api.boot.datasource.druid.{poolName}.test-on-borrowfalse否申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。api.boot.datasource.druid.{poolName}.test-on-returnfalse否归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。api.boot.datasource.hikari.{poolName}.url无是数据库连接字符串api.boot.datasource.hikari.{poolName}.username无是用户名api.boot.datasource.hikari.{poolName}.password无是密码api.boot.datasource.hikari.{poolName}.driver-class-namecom.mysql.cj.jdbc.Driver否数据库驱动类全限定名api.boot.datasource.hikari.{poolName}.property无否HikariCP属性配置 HikariCP数据源是SpringBoot2.x自带的,配置参数请访问HikariCP。
单主配置 ApiBoot DataSource Switch支持单主数据源的配置,application.yml配置文件如下所示:
api: boot: datasource: # 配置使用hikari数据源 hikari: # master datasource config master: url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: 123456 复制代码 修改主数据源名称 master为默认的主数据源的poolName,这里可以进行修改为其他值,不过需要对应修改primary参数,如下所示:
api: boot: datasource: # 主数据源,默认值为master primary: main # 配置使用hikari数据源 hikari: # main datasource config main: url: jdbc:mysql://localhost:3306/test?
本部分Matlab中的函数创建非常重要,主要分为三个小部分:
(本部分主要参考了Matlab文件的讲述:https://ww2.mathworks.cn/help/matlab/function-basics.html)。
一、函数基本知识 function语法:function [y1,...,yN] = myfun(x1,...,xM),其中[y1,...,yN]为输出量,myfun为函数名,(x1,...,xM)为函数输入量。
有效的函数名称以字母字符开头,并且可以包含字母、数字或下划线。
三个小注意事项:
注意事项一:可以将函数保存在以下位置:
1、只包含函数定义的函数文件中。文件的名称应与文件中其函数的名称一致。
2、包含命令和函数定义的脚本文件中。函数必须位于该文件的末尾。脚本文件不能与文件中的函数具有相同的名称。R2016b 或更高版本的脚本中支持函数。
注意事项二:文件可以包含多个局部函数或嵌套函数。为提高可读性,可使用 end 关键字来表示文件中每个函数的末尾。以下情况下需要 end 关键字:
文件中有任意函数包含嵌套函数。
该函数是脚本文件内的局部函数。
注意事项三:
需要在代码文件中创建函数
下面是示例部分:
(1)创建仅包含一个输出的函数
在命令行中调用函数average
(2)脚本文件中创建函数
(3)包含多个输出的函数
(4)函数文件中的多个函数
注意事项:
局部函数仅可供同一文件中的其他函数使用。
函数只能在文件中创建,不能在命令行中创建。
有效的函数名称以字母字符开头,并且可以包含字母、数字或下划线。
两种创建方式:在脚本中仅有函数命令,需要在命令行调用函数;在脚本中既有函数命令还有函数的调用命令,那么直接保存完脚本文件后,点击运行或者在命令行中输入脚本文件名称,然后点击enter。
二、在编译器中运行函数 在名称为 myfunction.m 的程序文件中创建函数。
function y = myfunction(x) y = x.^2 + x; 将键入要运行的代码替换为允许运行函数的表达式。
y = myfunction(1:10) 也可以在同一行输入多条命令,例如
x = 1:10; y = myfunction(x) 对于更复杂的多行命令,可创建单独的脚本文件,然后运行脚本。
三、函数类型 (1)文件中的局部函数和嵌套函数
程序文件可以包含多个函数。局部和嵌套函数可用于将程序分为更小的任务,使读取和维护代码变得更容易。
在仅包含函数定义的函数文件中,局部函数可以任意顺序出现在文件中主函数的后面。在包含命令和函数定义的脚本文件中,局部函数必须位于文件末尾。
例如,创建一个名为 myfunction.m 的函数文件,其中包含主函数 myfunction 以及两个局部函数 squareMe 和 doubleMe:
文章目录 一、描述二、常用参数三、参数详解3.1 新增 /Create3.1.1 描述3.1.2 使用帮助3.1.3 常用参数3.1.4 实例 3.2 查找 /Query3.2.1 描述3.2.2 使用帮助3.2.3 常用参数3.2.4实例 3.3 删除 /Delete3.3.1描述3.3.2使用帮助3.3.3常用参数3.3.4实例 一、描述 SCHTASKS:允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任务
二、常用参数 /Create 创建新计划任务。 /Delete 删除计划任务。 /Query 显示所有计划任务。 /Change 更改计划任务属性。 /Run 按需运行计划任务。 /End 中止当前正在运行的计划任务。 /ShowSid 显示与计划的任务名称相应的安全标识符。 /? 显示此帮助消息。 三、参数详解 3.1 新增 /Create 3.1.1 描述 允许管理员在本地或远程系统上创建计划任务 3.1.2 使用帮助 SCHTASKS /Create /? 3.1.3 常用参数 /SC schedule 指定计划频率:MINUTE、 HOURLY、DAILY、WEEKLY、MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT. /MO MINUTE: 1 到 1439 分钟。 HOURLY: 1 - 23 小时。 DAILY: 1 到 365 天。 WEEKLY: 1 到 52 周。 MONTHLY: 1 到 12,或 FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。 /ST starttime 指定运行任务的开始时间:时间格式为 HH:mm (24 小时时间),例如 14:30 表示 2:30 PM。如果未指定 /ST,则默认值为当前时间。 /ET endtime 指定运行任务的结束时间:时间格式为 HH:mm (24 小时时间),例如 14:50 表示 2:50 PM。 /TN taskname 指定唯一识别这个计划任务的名称。 /TR taskrun 指定在这个计划时间运行的程序的路径和文件名。例如: C:\windows\system32\calc.
安装 node-sass 的时候总是会各种不成功,大部分安装不成功的原因都源自这里,因为 GitHub Releases 里的文件都托管在 s3.amazonaws.com上面,而这个网址在国内总是网络不稳定,所以我们需要通过第三方服务器下载这个文件。
方法一:使用淘宝源
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
npm config set phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
npm config set electron_mirror=https://npm.taobao.org/mirrors/electron/
npm config set registry=https://registry.npm.taobao.org
这样使用 npm install 安装 node-sass、electron 和 phantomjs 时都能自动从淘宝源上下载。
方法二:安装cnpm >>> 也是淘宝源的做法
npm install -g cnpm
cnpm install 这样也可以成功安装node-sass
方法三:使用VPN
npm config set proxy (http://127.0.0.1:1080)此处是VPN的代理地址
npm i node-sass
# 下载完成后删除 http 代理
npm config delete proxy
环境linux
近日由于无法判断一个网络问题故此要长ping一个地址,但有一个问题出现,当出现网络异常的时候即使ping的时候发现了超时却无法记录具体是什么时间点发生的异常,也就是说无法记录ping的时间点。
根据这个问题我详细查询了ping命令的参数,可以出没有任何参数可以使ping命令在执行的时候带有时间记录,但查询了各类资料和函数后发现可以用组合命令来实现为的需求。
引用此博客内容https://blog.csdn.net/lxypeter521/article/details/80942888
可以对ping命令和其他函数进行组合从而实现带时间的ping。
呈现如下结果:
ping 192.168.0.1 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }'
PING 192.168.0.1 (10.37.190.10) 56(84) bytes of data. 16:24:25
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.693 ms 16:24:25
把信息输入到文本
ping 192.168.0.1 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }' > ping.log
把任务放到后台运行
ping 192.168.0.1 | awk '{ print $0"\t" strftime("%H:%M:%S",systime()) }' > ping.log &
然后处于学习的目的查询了strftime函数的用法,发现这个函数还有好多参数可用。
转换控制符见下表
转换控制符说明 %a
星期几的简写形式
%A
星期几的全称
%b
月份的简写形式
%B
月份的全称
%c
一 、roc曲线 roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。 横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例;(1-Specificity)纵轴:真正类率(true postive rate TPR)灵敏度,Sensitivity(正类覆盖率) 2.针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况,命名时都以其预测的类为主要主题,再以实际分类定义其真假。
若一个实例是正类并且被预测为正类,即为真正类(True Postive TP)TP:正确的肯定数目若一个实例是正类,但是被预测成为负类,即为假负类(False Negative FN)FN:漏报,没有找到正确匹配的数目若一个实例是负类,但是被预测成为正类,即为假正类(False Postive FP)FP:误报,没有的匹配不正确若一个实例是负类,但是被预测成为负类,即为真负类(True Negative TN)TN:正确拒绝的非匹配 列联表如下,1代表正类,0代表负类:
预测合计10实际1True Postive TPFalse Negative FNactual positive (TP+FN)0False Postive FPTrue Negative TN actual negative (FP+TN)
合计predicted positive(TP+FP)predict negative(FN+TN) 由上表可得出横,纵轴的计算公式:
(1)真正类率(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占所有正实例的比例。Sensitivity
(2)负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例占所有负实例的比例。1-Specificity
假设采用逻辑回归分类器,其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。
如下面这幅图,(a)图中实线为ROC曲线,线上每个点对应一个阈值。
二 如何画roc曲线
假设已经得出一系列样本被划分为正类的概率,然后按照大小排序,下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。
接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。
每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:
AUC(Area under Curve):Roc曲线下的面积,介于0.1和1之间。Auc作为数值可以直观的评价分类器的好坏,值越大越好。
首先AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
在此推荐scikit-learn中关于计算AUC的代码。
三、 为什么使用Roc和Auc评价分类器 既然已经这么多标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化。下图是ROC曲线和Presision-Recall曲线的对比:
在上图中,(a)和(c)为Roc曲线,(b)和(d)为Precision-Recall曲线。
(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果,可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线变化较大。
参考文章:
[1] 机器学习之分类器性能指标之ROC曲线、AUC值
1.到官网下载:https://miktex.org/
接着就傻瓜式安装即可(安装好后,它默认配置了环境变量)
随便一个目录创建hello.tex文件,记事本打开,编辑保存:
\documentclass{article} \begin{document} hello \Latex \end{document} cmd进入目录:
编译tex,并输出成pdf格式
latex hello.tex dvipdfmx hello.dvi 创建批处理文件 : hello.bat
latex hello.tex dvipdfmx hello.dvi del *.aux *.dvi *.log 今天先到这里。
Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法:
方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:
复制代码 代码如下:
cd /data/shell ./hello.sh ./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录 (/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。
方法二:以绝对路径的方式去执行bash shell脚本:
复制代码 代码如下:
/data/shell/hello.sh 方法三:直接使用bash 或sh 来执行bash shell脚本:
复制代码 代码如下:
cd /data/shell bash hello.sh 或
复制代码 代码如下:
cd /data/shell sh hello.sh 注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三 是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用 指定bash路径自然也好理解了啊,呵呵……。
方法四:在当前的shell环境中执行bash shell脚本:
复制代码 代码如下:
cd /data/shell . hello.sh 或
复制代码 代码如下:
cd /data/shell source hello.sh 前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。
方法五:在shell中启动另外的shell
在运行shell脚本时候,有三种方式来调用外部的脚本,exec(exec script.sh)、source(source script.sh)、fork(./script.sh) 1、exec(exec /home/script.sh): 使用exec来调用脚本,被执行的脚本会继承当前shell的环境变量。但事实上exec产生了新的进程,他会把主shell的进程资源占用并替换脚本内容,继承了原主shell的PID号,即原主shell剩下的内容不会执行。
2、source(source /home/script.sh)
使用source或者“.”来调用外部脚本,不会产生新的进程,继承当前shell环境变量,而且被调用的脚本运行结束后,它拥有的环境变量和声明变量会被当前shell保留,类似将调用脚本的内容复制过来直接执行。执行完毕后原主shell继续运行。
3、fork(/home/script.sh)
直接运行脚本,会以当前shell为父进程,产生新的进程,并且继承主脚本的环境变量和声明变量。执行完毕后,主脚本不会保留其环境变量和声明变量。
总结:这样来看fork最灵活,source次之,exec最诡异。
查看哪个用户用的什么shell登录:
1.echo $SHELL #查看当前登录的用户所用的shell
1.下载。
2.双击安装。
3.默认安装完成,无需配置环境变量。
在终端查看Java -version
https://wenku.baidu.com/view/ef3c4d4da8956bec0975e3d0.html
一、概念 在设计商品SKU之前,首先让我们熟悉一下SKU和相关的一些概念。
二、什么是SKU SKU=Stock Keeping Unit(库存量单位)
同一型号的商品,或者说是同一个产品项目(商品条形码是针对企业的产品
项目来进行定义的),因为产品与产品之间有某些属性不同,用以区别开这些
不同商品的属性即商品变异属性,又称作SKU属性,因为它决定了SKU
的绝对数量。
参考说明
百度上有一篇文章也有阐述,可以做关联阅读,我就不重复贴上了。
https://wenku.baidu.com/view/9e8de10e6c85ec3a87c2c5c5.html
三、什么是SKU属性和选项 比如某件衣服有多种颜色、多种尺码,这些属性会直接关联价格和库存的,
系统会根据该商品关联的SKU属性的某个组合生成SKU。 比如某个款式的衬衫,有XL/L/XXL三种大小,有红黄蓝三种颜色。
对应这里例子,尺码和颜色都是是SKU属性。
对应尺码的XL/L/XXL等,都是SKU属性选项。
【注】上述的属性不一定在任何时候都是SKU属性,看实际的商品情况和设置。
比如对于尺码,某种商品是均码的。那么就不需要创建尺码这个SKU属性了,
而是设置为普通属性,仅作为显示用。
四、什么是商品SKU 商品SKU实际上就是SKU,为了避免误解和SKU属性混淆,我用商品SKU来命名,
表示从属于商品的、实际销售和存储的子实体。
一个商品SKU,表示该商品关联的若干SKU属性的的属性值的某个组合所形成的
子实体。
如对应上面的例子,其中的一种组合 XL + 红色 就会形成一个商品SKU。然后,
我们可以在该实体上管理价格、库存、专门的图片等信息。
转载于:https://www.cnblogs.com/BrokenHeart/p/10632523.html
之前的版本使用
现在直接使用CanvasContext.font即可
例如
this.ctx2.font = 'normal bold 40px sans-serif';
两篇论文都是一两周前阅读的,作个笔记供以后参考。
EDSR
EDSR是一个加强的用于SR的深度残差网络,主要是在SRResnet的基础上进行改造的。
1.Introduction
首先介绍了deepnet的局限性。
模型的重构性能对较小的体系结构变化很敏感,相同模型基于不同的初始化和训练技巧可以得到不同等级的性能表现。大多数现行的SR算法将不同的scale视为独立的问题,并没有利用SR间不同scale的关联,所以每一种scale都需要单独训练。(我看的好多文章明明都支持多种缩放因子啊。感觉都是硬找创新点) VDSR模型是可以同时解决不同scale问题的,这说明尺度特定的模型的训练是有冗余的,但是VDSR的LR是需要通过bicubic成HR尺寸的,没有直接在LR空间进行计算,损失了LR空间的图像细节并增大了计算复杂度。
为了解决这个问题呢,作者主要采用了以下两点:
移除了不必要的模型,主要就是移除了BN设计了带有一个单一主分支的基准(多尺度 —— multi-scale)模块 ,含有 B = 16 的残差模块,所以大部分参数都可以在不同尺度间进行共享, 2.Related work
提出MSE或者L2 loss可能并不能保证在PSNR和SSIM上有更好的性能,所以这里采用了L1 Loss函数。
3.Proposed Methods
3.1 EDSR
提出了一个增强版的结构简单的残差网络模型
为啥去掉BN呢?https://blog.csdn.net/prinstinadl/article/details/80835088
去掉BN后,相同的计算资源下,EDSR就可以堆叠更多的网络层或者使每层提取更多的特征,从而得到更好的性能表现。但是增加特征图的数量将使训练过程不稳定,作者提出了一个residual scaling来解决该问题。在每个residual block的最后一个卷积层后添加一个constant scaling layer,可以帮助稳定训练(尤其是在应用很多的filter时)
当训练缩放因子为×3,×4的EDSR时,作者用预训练过的×2的网络来初始化模型参数。这个策略加速了训练并且提升了最后的性能表现。对于×4,使用预训练×2的模型训练过程中会收敛很快。
3.2 MDSR
在MDSR网络头部设置了一个预处理模块,用来减少输入图像不同尺寸的差异,每个预处理模块包含两个卷积核为5×5的残差块。在MDSR的末尾,不同的scale-upsampling模型平行设置来处理各种尺度的SR预测。
MDSR withB = 80 and F = 64.
4.训练细节
训练使用48×48的RGB图像输入,训练完×2的模型后,将其用作预训练网络来训练其他缩放因子,采用ADAM优化方法。
EDSR的数据增强思路是将输入的LR图像通过翻转及旋转的几何变换来生成7个LR图像,最后将这个8个LR图像生成的SR图像通过逆几何变换获得原始图像。最后,将转换后的输出加权平均来得到自相似结果。
5.Conclusion
在Residual block中删除了BN,卷积完成后也不Relu。并控制了残差规模来降低训练复杂度。MDSR具有尺度相关的模块和共享的主网络,能够在统一的框架内有效地处理各种尺度的超分辨率问题
negative log likelihood 文章目录 negative log likelihood似然函数(likelihood function)OverviewDefinition离散型概率分布(Discrete probability distributions)连续型概率分布(Continuous probability distributions) 最大似然估计(Maximum Likelihood Estimation,MLE)对数似然(log likelihood)负对数似然(negative log-likelihood)Reference 似然函数(likelihood function) Overview 在机器学习中,似然函数是一种关于模型中参数的函数。“似然性(likelihood)”和"概率(probability)"词意相似,但在统计学中它们有着完全不同的含义:概率用于在已知参数的情况下,预测接下来的观测结果;似然性用于根据一些观测结果,估计给定模型的参数可能值。
Probability is used to describe the plausibility of some data, given a value for the parameter. Likelihood is used to describe the plausibility of a value for the parameter, given some data.
—from wikipedia [ 3 ] ^[3] [3]
其数学形式表示为:
假设 X X X是观测结果序列,它的概率分布 f x f_{x} fx依赖于参数 θ \theta θ,则似然函数表示为
为什么同样在web工程webContent目录下建了一个html页面,http://localhost:8080/springmvcDemo/index.html访问却报404?
为什么在web工程webContent目录下建了一个jsp页面,http://localhost:8080/springmvcDemo/index.jsp可以直接访问?
【分析】
该web工程使用spring+spring mvc+mybatis框架,在工程web.xml文件中配置了spring mvc的前置控制器DispatcherServlet,如下图所示:
DispatcherServlet会对匹配的请求进行拦截,当拦截的url-pattern设置的是 / 时,就不会匹配到*.jsp的URL,但会匹配*.html和形如/user的URL,所以,当拦截到*.html后,就会进入spring mvc的DispatcherServlet类,然后去寻找controller,接着找不到对应的controller,资源找不到、所以报404。
【解决方法】
方法一:将上面方框中的代码注释掉;
方法二:web.xml添加如下代码(激活defaultServlet来处理静态文件):
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>
注意:考虑性能问题,最好将上面代码写在spring mvc的DispatcherServlet的前面,否则程序需要先执行DispatcherServlet拦截*.html请求,然后再执行defaultServlet时,又放开*.html请求,多走了一步。
<spring-mvc.xml>配置文件中配置视图解析器
在方法二中,我们在后缀中配“.html”时。在访问http://localhost:8080/spingmvcDemo/index时会默认访问index.html
在方法二中,我们在后缀中配“.jsp”时。在访问http://localhost:8080/spingmvcDemo/index时会默认访问index.jsp
问题描述: Built-in MKV Source::Japanese, Japanese DTS 5.1, 1.5 mbit (Audio 1) <Default>
Built-in AVI<->AC3/DTS::XForm Out
==========================
当前音频无法播放。
DirectX 驱动程序未正确安装或音像设备被禁用。
==========================
原因分析: 系统无法解码DST音频格式,因为DST格式需要解码才有多声道音频信号出来。
解决办法: 安装终极解码器,目前最新版链接:https://pan.baidu.com/s/1LWg7xlhxwNlrtXX9luBlKw 提取码:7sdh 安装使用默认安装即可,存储路径可以自己选择。解码中心的设置根据自己需求随时都可以设置。
终极解码器简介: 终极解码是一款全能型、高度集成的解码工具,自带三种流行播放器(mpc/kmp/bsp)并对wmp提供良好支持。终极解码可在简、繁、英3种语言平台下实现各种流行视频音频的完美回放及编码功能。终极解码若与realplayer同时使用,请在安装时不要选择 real解码器,quicktime播放器设置类似,让你轻松播放各种非主流的视频格式。
有时候看个技术文章,需要复制下示例代码进行调试,但是复制出来的代码就硬是给你改成一串,不让你好好调试。
要注册也注册了,要登陆也登陆了,复制点代码还是那么一串,有意思吗?何必这么苦苦为难好不容易抽点空出来学习的农民呢?
要对付这个小伎俩也不是什么难事,记下来分享给有需要的同学。
1.把浏览的页面另存为保存为本地文件
2.用Notepad++打开,全局替换"|"为""
3.定位到需要复制的地方(先copy原页面一小段要定位的文字,然后用find在文本里定位到)
4.完整地复制你城要复制的内容。
目前,大多数图神经网络模型都有一个通用的架构。我将它们称为图卷积神经网络(GCNs),这些模型是可卷积的,因为滤波器参数在图中所有位置或者一个局部位置上( Duvenaud et al., NIPS 2015)都可以共享。
对于这些模型,它们的目标是要学习图G=(V,E)上的信号或特征的一个映射。它们的输入包括:
每一个节点i的特征描述xi,可以写成一个N*D的特征矩阵(N表示节点数,D表示输入的特征数)矩阵形式的图结构的特征描述,通常是以邻接矩阵的形式(或者其他的形式) 模型会产生一个节点级别的输出Z(一个N*F的特征矩阵,其中F表示每一个节点的输出特征数)。图级别的输出可以通过引入一些池化操作来建模(Duvenaud等, NIPS 2015)。
每一个神经网络层可以写成这样一个非线性函数:
这里 , (Z也可以作为图级别的输出),L是层数,这个模型主要在于f()怎样选择以及参数化。
GCN第二部分:简单例子
作为示例,考虑下边这样一个简单的单层前向传播的形式:
这里,W是l层神经网络的参数矩阵,( ) 是非线性激活函数比如ReLU。这个模型尽管简单但是却非常有效(我们马上就会介绍)。
但是首先,让我们来看一下这个简单模型的两个限制:首先,和A相乘意味着对于每个节点,我们都整合了它的邻居节点的特征向量,但是却不包括这个节点本身(万一图中有自环存在)。我们可以通过在图中强行加入自环来解决这个问题,也就是给矩阵A加上一个单位阵。
第二个限制是A通常是非归一化的,因此和A相乘会完全改变特征向量的尺度(可以通过看A的特征值来理解)。归一化使A的各行和为1,比如,这里D是节点度的对角矩阵,这样就解决了这个问题。那么与相乘也就是对邻居节点的特征取平均。实际上,当我们使用对称归一化时,比如(这将不再仅仅是相邻节点的平均值),动力学会更加的有趣。
结合这两种技巧,我们基本上得到了[Kipf & Welling (ICLR 2017)]文章中的传播规则:
这里,是单位阵,是矩阵的节点度对角矩阵。
GCN第三部分:空手道俱乐部网络的嵌入
空手道俱乐部图,颜色表示通过基于模块化的聚类获得的社团
现在让我们来看一下,上边简单的GCN模型是怎样在一些知名的数据集上表现得如何,比如Zachary的空手道俱乐部网络数据(见上图)。
我们使用一个三层GCN,随机初始化权重。在训练权重之前,我们将图的邻接矩阵和X=I(即单位阵,因为我们没有任何的节点特征)输入模型。这个3层的GCN在前向过程中做了三次传播并且有效的对每个节点的3阶邻居进行了卷积(所有的节点可达3阶)。值得注意的是,这个模型生成的这些节点的嵌入和图的社区结构非常类似(见下图)。还记得我们完全随机初始化的权重并且现在还没有进行任何的训练更新。
使用GCN(随机初始化权重)做空手道俱乐部网络中的节点嵌入
这似乎有点令人惊讶,最近一篇论文提出的DeepWalk模型 (Perozzi et al., KDD 2014)通过复杂的非监督的训练过程也可以学习到一个相似的嵌入。使用这个简单的未经训练的GCN模型几乎“免费”的获得了这样的嵌入,这怎么可能呢?
我们可以通过将GCN模型解释为网络图上的著名的Weisfeiler-Lehman(WL)算法的广义可微分版本来理解。1维的WL算法是这样的:
对图上的所有节点:得到邻居节点的特征根据更新节点特征,这里hush()是一个一个单射散列函数迭代k次直到收敛 实际上,WL算法为大多数图分配一个独特的特征。也就是说每一个节点都被分配到一个可以唯一描述它在图中的角色的特征。例外是像网格(grid)、链(chain)等高度规则的图。对于大多数不规则的图,这个特征分配可以用来检验图同构(比如两个图是否相同,取决于节点的排列)。
回到我们图卷积层传播规则上(现在从向量角度来看):这里j是邻居节点的索引,是边的正则化常量,来源于GCN模型中用到的对称正则化邻接矩阵。我们现在看到,这种传播规则可以解释为原始WL算法中使用的哈希函数的可微分和参数化(即)变体。如果我们现在选择一个合适的正交的非线性并且初始化随机的权重矩阵(比如,使用(Glorot & Bengio, AISTATS 2010)的初始化方式),在实践中这个更新规则最后会稳定下来(归功于的正则化)。
经过观察,我们得到了非常有意义的平滑的嵌入,然后我们可以将嵌入后的距离解释为局部图结构的(不)相似性!
GCN第四部分:非监督学习
由于我们模型中所有的内容都是可微分的和参数化的,所以我们可以添加标签,训练模型并观察嵌入效果。我们可以使用Kipf & Welling (ICLR 2017)文章中介绍的GCN的半监督学习算法。我们只需为每个节点标注类别或者社团(下面视频中突出显示的节点),然后开始进行多次迭代的训练。
用GCN进行半监督分类:300次训练迭代中隐空间的动态变化,每个类别有一个标签,带标签标的节点突出显示。
我们注意到,这个模型直接产生了一个二维的可以直接可视化的隐空间。我们观察到这个3层的的GCN模型尝试线性区分社团,每类社团给出一个标签。考虑到该模型并没有输入节点的特征描述,所以这个结果可以说是非常卓越的。同样的,初始化的节点特征是可以提供的,在(Kipf & Welling, ICLR 2017)这篇文章的实验中我们确实是提供了的,因此在图数据的分类上达到了最好的效果。
结论
对这个问题的研究才刚刚开始,过去几个月已经看到了令人兴奋的发展,但是目前为止我们可能只是抓住了这个模型的表面。图神经网络如何进一步解决一些特定类型的问题仍然有待观察,比如有向和关系图的学习,如何利用学到的网络嵌入等等。这里的论文清单绝对不是最全面的,我预计在不久的将来会有更多有趣的应用和扩展。如果你有一些令人兴奋的想法或问题需要分享,请在下面的评论中告诉我们!
补充说明
这篇博客文章并不是对图神经网络领域的详尽回顾,因为为了使这篇文章更具可读性并且具有一个连贯的故事线,我忽略了一些近期和较早的论文。 但是如果你想深入研究这个主题,并且全面了解目前为止已经研究过的内容和正在研究的内容,那么我在这里提到的论文是一个很好的开端。
参考文献
Bruna et al., ICLR 2014, http://arxiv.
本项目借用 逛丢 网站的部分数据,仅作为 flutter 开发学习之用。 逛丢官方网址:https://guangdiu.com/ flutter windows开发环境设置
flutter 项目实战一 新建 flutter 项目
flutter 项目实战二 网络请求
flutter 项目实战三 json数据解析以及Gson格式化flutter 项目实战二 网络请求
flutter 项目实战四 列表数据展示
flutter 项目实战五 item 点击跳转,webview加载
flutter 项目实战六 drawer侧边栏
flutter 项目实战七 bottomNavigationBar
flutter 项目实战八 下拉刷新 上拉加载
flutter 项目实战九 小时风云榜
在上一部分完成了列表数据的展示,我们可以将item的数据抽出来作为一个单独的widget ,这样在其他的地方我们也直接可以引用了。
新建 index_item.dart
class IndexItem extends StatelessWidget{ RstData rstData; IndexItem({this.rstData}):assert(rstData!=null);//参数rstData必填且不为空 @override Widget build(BuildContext context) { // TODO: implement build return _listItem(this.rstData); } //list列表的item Widget _listItem(RstData rstdata){ return Container( height: 110,//设置item的高度 margin: EdgeInsets.
本项目借用 逛丢 网站的部分数据,仅作为 flutter 开发学习之用。 逛丢官方网址:https://guangdiu.com/ flutter windows开发环境设置
flutter 项目实战一 新建 flutter 项目
flutter 项目实战二 网络请求
flutter 项目实战三 json数据解析以及Gson格式化flutter 项目实战二 网络请求
flutter 项目实战四 列表数据展示
flutter 项目实战五 item 点击跳转,webview加载
flutter 项目实战六 drawer侧边栏
flutter 项目实战七 bottomNavigationBar
flutter 项目实战八 下拉刷新 上拉加载
flutter 项目实战九 小时风云榜
先放上 本人 使用 kotlin 开发的逛丢的页面,kotlin开发的源码以及相关说明将在其他部分给出。
我们会按照此列表展示,但是UI会略有修改。
appBar部分为一个 Image 与 title ,不用详细的分解。
列表的Item 分解示意图如下
说名一下,row是横向排列的控件,column是竖向排列的控件。container 可设置边框边距等属性。
开始代码实现步骤。
新建一个 home_index.dart文件
class HomeIndex extends StatefulWidget{ @override State<StatefulWidget> createState() { // TODO: implement createState return IndexWidget(); } } class IndexWidget extends State<HomeIndex>{ @override Widget build(BuildContext context) { // TODO: implement build return null; } } flutter 页面新建的时候可以选择继承 StatefulWidget 以及 StatelessWidget,StatelessWidget是无状态值得,即不可使用setState更新变量,我们需要在获取数据之后来刷新页面加载数据,所以我们使用 StatefulWidget .
本项目借用 逛丢 网站的部分数据,仅作为 flutter 开发学习之用。 逛丢官方网址:https://guangdiu.com/ flutter windows开发环境设置
flutter 项目实战一 新建 flutter 项目
flutter 项目实战二 网络请求
flutter 项目实战三 json数据解析以及Gson格式化flutter 项目实战二 网络请求
flutter 项目实战四 列表数据展示
flutter 项目实战五 item 点击跳转,webview加载
flutter 项目实战六 drawer侧边栏
flutter 项目实战七 bottomNavigationBar
flutter 项目实战八 下拉刷新 上拉加载
flutter 项目实战九 小时风云榜
在 flutter 项目实战二 网络请求 中已经可以获取到具体的网络数据了,但是如果需要有效的使用数据就必须对获取到的JSON数据进行解析。
首先我们导入 json 解析用到的依赖
import 'dart:convert' show json; 修改 _getHttpData() 方法
void _getHttpData() async { String url="getlist.php"; FormData formData=FormData(); formData.add("markid", "5685521"); Response resp=await HttpUtil().post(url,data: formData); print(resp.
public LoginResult Login()
{
LoginParam param = new LoginParam
{
userName = "zhangsan",
password = "000000"
};
LoginResult rdata = new LoginResult();
Stream cResponseStream = null;
HttpClient cHttpClient = null;
HttpContent cHttpContent = null;
StreamReader cStreamReader = null;
HttpResponseMessage cResponse = null;
HttpClientHandler cHttpHandler = null;
string sJson = "";
string sHttpUrl = "http://192.168.1.132:8020/api/user/login";
try
{
cHttpHandler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
cHttpClient = new HttpClient(cHttpHandler);
1、备份系统自带的yum源
[root@ ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下载和自己操作系统版本对应的yum源
[root@ ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2573 100 2573 0 0 11103 0 --:--:-- --:--:-- --:--:-- 11090
3、运行yum makecache生成缓存
[root@yaxon ~]# yum makecache
已加载插件:fastestmirror
base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/8): extras/7/x86_64/prestodelta | 48 kB 00:00:00 (2/8): extras/7/x86_64/other_db | 86 kB 00:00:01 (3/8): extras/7/x86_64/filelists_db | 485 kB 00:00:08 (4/8): updates/7/x86_64/prestodelta | 399 kB 00:00:07 (5/8): updates/7/x86_64/other_db | 341 kB 00:00:05 (6/8): updates/7/x86_64/filelists_db | 2.
@TOfC
Android 开发SDK编辑错误The command "PATH …exited with code 1 由于SDK配置问题导致编译报错的解决方法。错误提示如下:
[Exec Error] The command "PATH
C:\Program Files\Java\jdk1.7.0_71\bin;
C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE7\IDE_spoof;
C:\Program Files (x86)\CodeGear\RAD Studio\5.0\bin;
C:\Users\Public\Documents\RAD Studio\5.0\Bpl;
C:\Program Files (x86)\Intel\iCLS Client;
C:\Program Files\Intel\iCLS Client;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0;
C:\Program Files (x86)\Intel\Intel® Management Engine Components\DAL;
C:\Program Files\Intel\Intel® Management Engine Components\DAL;
C:\Program Files (x86)\Intel\Intel® Management Engine Components\IPT;
C:\Program Files\Intel\Intel® Management Engine Components\IPT;
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn;
C:\Program Files\Microsoft SQL Server\100\Tools\Binn;
C:\Program Files\Microsoft SQL Server\100\DTS\Binn;
2019 年第 32 篇,总 56 篇文章
本文大约 1w 字,建议收藏阅读
上周结束了如何构造一个机器学习项目的系列文章,当然还有一篇简单的总结以及介绍一些入门的学习资料,不过还在整理,应该这周内会整理好的。
现在是系统的整理学习 Python 的内容,所以打算继续开启一个或者两个系列文章,基础入门和进阶两个方面。
基础入门部分初步计划介绍以下内容,当然后续可能会有些变动。
简介和环境配置
变量和简单的数据类型
列表和元组
字典
if 条件语句
for / while循环语句
函数
类
文件和异常
测试代码
本文是基础入门的第一篇文章,主要简单介绍 Python 和它的优缺点,然后整理了安装的方法,包括在 Linux、Window 和 Mac 上的环境配置。
1. 简介和环境配置 1.1 简介 Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。目前是最常用也是最热门的一门编程语言之一,应用非常广泛。
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
优点:
Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
缺点:
运行速度比 C++、C#、Java 慢。这是缺乏即时优化器;