mysql配置遇到的坑 版本 mysql 8.0.13 启动 docker run --name mysql -p 3306:3306 -v /Users/champly/go/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql 问题一 ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found 解决 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; 原因:当前版本mysql的加密方式不是mysql_native_password,修改为mysql_native_password即可
问题二 ERROR 1045 (28000): Access denied for user 'root'@'172.17.0.1' (using password: YES) 解决: alter user 'root'@'%' identified by '123456'; 原因 修改了加密方式之后要把密码修改回去
然后就可以连接了
之前对某支个股进行预测:LSTM估计股票收盘价
这次尝试建立适用于多支股票的模型。思路是使用多支股票训练一个模型,用前30个交易日的数据预测下一天的收盘价,每支股票只贡献一个样本。
先收集股票数据
import tushare as ts pro = ts.pro_api('f3bbc97d0ffbbed8666e6f7c82e712165950d048987f5d6cfbf1e0ce') #查询当前所有正常上市交易的上交所股票列表 code_list = pro.stock_basic(exchange='SSE', list_status='L', fields='ts_code,symbol,name') print(code_list) for i in range(1400,len(code_list)): print(code_list.iloc[i,0]) data = pro.daily(ts_code=code_list.iloc[i,0], start_date='20180801', end_date='20180912') data.to_excel('C:/Users/Administrator/Desktop/data/' + code_list.iloc[i,0] + '.xlsx') 然后预处理数据
import pandas as pd import os def read_xls(path): data = [] for file in os.walk(path): for each_list in file[2]: #os.walk()函数返回三个参数:路径,子文件夹,路径下的文件,利用字符串拼接file[0]和file[2]得到文件的路径 file_path=file[0]+"/"+each_list f = open(file_path,'rb') df = pd.read_excel(f) df1 = df[['open','high','low','close','vol']] #保留需要的features df1 = df1[::-1] #倒序,使日期靠前的在前面 df1.reset_index(drop=True, inplace=True) #把每行的索引改为“0、1、2……” data.
----更新--------
昨天手贱在外置雷电SSD中安装了苹果内置SSD的驱动,随即就造成了外置显卡的挂载不上,又折腾了大概三个小时,随后想到了应该是操作系统内部资源竞争,造成不挂载外置显卡。随后删除了内置SSD的驱动。然后才挂载外置显卡成功。
还有一点就是,外置显卡尽量就只挂一个外置显卡,如果接键盘和鼠标的话,会有时延。
苹果发布的mac mini 2018 这款产品性能有了极大的提高,配合小巧的机身,和多达4个雷电3 的接口。让我们感觉不论怎么来看都感觉很值。
选配了i7 8GB 内存,128GB SSD的版本,内存可以以后升级。CPU要加到最高,SSD可以用雷电3 外接nvme 的固态。
一切看起来都是那么完美。
但是一直前前后后折腾了快一周的时间,才逐渐对这款产品的一些细节有所了解。
在macOS 下的一些事情就不说了。
主要说明一下在win 下的一些注意的要点。
由于mac mini 2018 出厂就是10.14.1 的版本,所以无论用哪种方法都不能给降级成10.13.6(有N卡驱动)。所以在10.14.1 这个版本中无法egpu NVIDIA 的显卡。
下面有三种解决方案。第一:由于SSD太小,所以我们装完双系统之后,两个系统各自空间太小。真是啥也干不了。
期间装双系统的过程中,好像对win 10的具体版本有明确的要求。这个试了好多次。不然会中途出错。
第二:购买了一个佳宜的雷电3 nvme 硬盘盒子,可以将960 Pro 放入到里面,这个盒子淘宝有售,感觉真是全网最实惠的nvme硬盘盒子了。但是也由于960 Pro 巨大的热量,往往我们摸起来会烫手。
首先我们的方案是先在外置的960Pro盒子中安装macOS Mojave,然后再安装win10 。注意这里无法用官方的bootcamp进行安装。
首先制作一个win10 的U盘安装。这个网上有大量教程,不赘述,然后在macOS Mojave中划分好win10 的分区。随后用win10 U盘启动安装。按住option 按键。然后选择EFI boot。一定要注意win10 的系统版本一定是要1803以上好像是。17.。的版本会出现安装错误。这也是失败了很多次的结论了。随后的win10 安装就一帆风顺了。然后安装bootcamp的Windows支持包。包括了很多的驱动。这时候安装会出现一些错误,无视就可以了。
接下来我们要实现在win下的egpu 的操作。
进入win10 系统之后,插上雷电3 的线。系统会自动识别到显卡,并安装驱动。随后我们需要重启。这时候,如果你的集显和外置显卡都连接上的话,会出现win10 图标闪现,进入不了系统。据说是因为mac 产品在win10 启动的时候,只能启动一种显卡的 显示模式。所以这里会出现卡机。可以的解决方案是 在win10 转圈的时候,插入雷电线,或者开启拓展坞的开关。
这样就能很好的驱动集显和外置独显了。或者将uhd 630的设备禁掉。只用独显也行,但是试了很多次。都得需要开机3-5秒钟的时候插入雷电线或者开启拓展坞的开关。这个着实很难受。体验不完美
首先网上流行的解决方案有一个 在U盘中拷贝进auto egpu efi 的解决方案,网上大神给改的一种解决方案。这种方案的优点是外置EFI启动,不修改系统文件。缺点1:只能实现启动系统内置SSD的系统。不能启动雷电3SSD 的系统。还有强迫症的同学,不能忍受一直外挂一个U盘,占用一个USB口。
改进了之前的模型:LSTM股票预测
这次效果似乎还不太理想,请大家看看有没有改进的方法。
# 导入包 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import tushare as ts import pandas as pd from sklearn.preprocessing import MinMaxScaler #参数设置/parameter setting timesteps = seq_length = 20 #时间窗/window length data_dim = 7 #输入数据维度/dimension of input data output_dim = 1 #输出数据维度/dimension of output data #数据准备/data preparation #变量选取Open,High,Low,Close,Volume等,以浦发银行股票为例 pro = ts.pro_api('f3bbc97d0ffbbed8666e6f7c82e712165950d048987f5d6cfbf1e0ce') #token可以在新版tushare的网站上找到 stock_data = pro.query('daily',ts_code = '600000.SH', start_date = '20000101', end_date = '20181120') stock_data = stock_data[::-1] #倒序,使日期靠前的排在前面 stock_data.
ubuntu系统16.04 ,ROS版本kineticOpenCR固件升级到1.2.1 之后的版本 ,OpenCR固件升级参考安装多机地图合并软件包ros-kinetic-multirobot-map-merge sudo apt-get install ros-kinetic-multirobot-map-merge 1、多机测试 步骤:
[remotePC] 启动rosore roscore [turtlebot3] 启动第一台小车底盘 ROS_NAMESPACE=tb3_0 roslaunch turtlebot3_bringup turtlebot3_robot.launch multi_robot_name:="tb3_0" set_lidar_frame_id:="tb3_0/base_scan" 启动第二台,修改tb3_0为tb3_1 ROS_NAMESPACE=tb3_1 roslaunch turtlebot3_bringup turtlebot3_robot.launch multi_robot_name:="tb3_1" set_lidar_frame_id:="tb3_1/base_scan" 或者[remotePC]在turbot3机型下,启动第一台底盘 roslaunch turbot3_multi multi.launch multi_robot_name:="tb3_0" 启动第二台,修改tb3_0为tb3_1 [remotePC] 启动模型 ROS_NAMESPACE=tb3_0 roslaunch turtlebot3_bringup turtlebot3_remote.launch multi_robot_name:=tb3_0 启动第二台,修改tb3_0为tb3_1 ROS_NAMESPACE=tb3_1 roslaunch turtlebot3_bringup turtlebot3_remote.launch multi_robot_name:=tb3_1 或者[remotePC]在turbot3机型下,启动模型 roslaunch turbot3_multi model.launch multi:="tb3_0" 启动第二台,修改tb3_0为tb3_1打开rqt查看tf树和话题 2、遥控建图 步骤: [remotePC]启动roscore roscore [turtlebot3]启动底盘 ROS_NAMESPACE=tb3_0 roslaunch turtlebot3_bringup turtlebot3_robot.launch multi_robot_name:="tb3_0" set_lidar_frame_id:="tb3_0/base_scan" 启动第二台,修改tb3_0为tb3_1 ROS_NAMESPACE=tb3_1 roslaunch turtlebot3_bringup turtlebot3_robot.launch multi_robot_name:="
导读
对比分析在于看出基于相同数据标准下,由其他影响因素所导致的数据差异,而对比分析的目的在于找出差异后进一步挖掘差异背后的原因,从而找到优化的方法。
来源:诸葛io数据教练丨作者:诸葛io
数据猿官网 | www.datayuan.cn
今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区
上面这张图表是一个常见的柱状图,而柱状图的作用在于直观对比各项数据之间的差异。
上面这张柱状图是针对9月份各渠道获客统计的一个对比分析图表,针对各渠道的下载量、访问量、注册量进行对比。
对比要点一:对比建立在同一标准维度上
在这张图中,首先要关注到的对比要点是各项数据的对比要基于同一维度。这张图是针对9月份的渠道推广效果的对比统计,9月份就是第一个对比标准,也就是时间维度。
在时间维度下,后续对比的结果都是基于这个标准产生的,也就是在9月份这个时间范围内的数据对比,并不能用10月份的数据与这个图表中的数据对比。当然,除了时间维度,也可以使用空间维度,例如渠道A在1-12月每月的数据对比。无论用什么维度,对比要建立在一个大的标准下。
对比要点二:拆分出相关影响因素
在时间这个大维度下,我们对各渠道的获客效果进行了拆分,也就是将获客效果衡量分为了访问量、下载量和注册量。这三个维度的数据作为判断渠道获客的标准,从对比中找出各渠道的优劣。
例如通过这个图表可以看出,渠道A的访问量最高,渠道B的下载量最高,渠道A的注册量最高,那么这样的对比结果能够说明什么问题呢?
我们能够看到,渠道A从访问到下载的流失比较严重,渠道B从下载到注册的流失比较严重,而渠道C在访问量、下载量都低于其他渠道的基础上,渠道C的注册量与渠道A并没有相差太多。
也就是说,我们可以提出一个假设,渠道C的获客效果更好,为了印证这个假设,我们可以在影响因素中再加入渠道投放花费这个维度,如果渠道A的高访问是因为高花费,渠道C的低访问是因为低花费,那么基本可以印证这个假设。
对比要点三:各项数据对比需要建立数据标准
在这张图中能够看到一个比较奇怪的现象,渠道B的下载量比访问量还要高,为什么会这样呢?
我们在这张图表中加入了一个中间标准数据,对各项数据进行了一次标准换算。假设访问量的真实数据为1万是,标准数据为1,下载量的真实数据为1千时,标准数据为1,注册量的真实数据为100时,标准数据为1.
经过标准数据的换算,我们将各项数据放在一张图表上时,对比的差异化会更明显。
so,现在明白对比分析法要怎么做了么?
对比分析法的维度可以分为同比、环比、定基比等不同的对比方法:
同比:例如去年9月与今年9月的对比,同比一般被看做是基于相同数据维度的时间同期对比,也可以看做基于时间维度的影响因素对比,例如相同的营销活动在不同的渠道投放所带来的转化数据,也可以看做是同比。
环比:例如9月份与8月份数据的对比,这是从时间维度的对比,也可以以周期性维度对比,例如第一阶段推广投放了10个渠道,第二阶段推广投放了15个渠道,那么第二阶段与第一阶段环比上涨还是下降,进而找出数据变化的原因。
定基比:定基比是指针对一个基准数据的对比,例如在各推广渠道中,渠道B与渠道A相比,渠道C与渠道A相比,而两者的比值是渠道B与渠道C的定基比。
对比分析在于看出基于相同数据标准下,由其他影响因素所导致的数据差异,而对比分析的目的在于找出差异后进一步挖掘差异背后的原因,从而找到优化的方法。
▲向上滑动
采访/报道/投稿
yaphet.zhang@datayuan.cn
商务合作
18600591561(微信)
长按右方二维码
关注我们ˉ►
一般我们利用HTML中table做表格式,经常会遇到table、tr、td标签的width和height问题,而有时候发现在对tr、td设置宽度或高度时没有效果,其实这就是表格标签的特殊性,他们几个互有联系,互有制约,例如table的宽度限制了tr的宽度,table的高度又受tr高度的影响等等。所以要解决这类问题,需要知道在设置table、tr、td的width和height上需要注意的问题,具体分析可以看下面。
一、table标签的width和height设置
table标签设置的width和height其实都是一个最小值,也就是说当内容总宽度或行总高度没达到设定值时,表格会保持设定时的大小;而当内容分总宽度或行总高度超过设定值时,表格的宽度或高度会根据内容需要扩大。
二、tr标签的width和height设置
tr标签里面的width设置不起任何作用,因为tr的宽度受table宽度的限制,所以tr标签的宽度设置是无法起作用的。
然而,tr标签的height却有几种可能,需要分别讨论一下。
1、当表格中的tr都设置了height具体值,并且设置的总height值小于表格height值时,这时各个tr的height按照设置的值的比例来分配表格height值。
2、当表格中的tr都没设置height具体值时,这时按各tr内容高度的比例来分配表格总高度。
3、当表格中的tr有的设置了具体的数值,有的没有设置具体的数值为默认时,则先保证各个tr的基本需要,即内容所需要的高度,剩下的再满足设置了具体值的tr,之后再全部给没有设置具体值的tr,分配规则还是按内容高度比例。
4、当表格总高度不够,也就是说各tr总高度大于表格总高度时,不够的话如果要满足tr的基本需要,这里会自动延长表格的height的。然后再考虑设置了height的tr,最后考虑没有设置height的tr。
三、td标签的width和height设置
td标签里面的width和height都是起作用的。先看td的width吧,某一个td的width是和所处的一列每个td的width都相关的,取其中最大的width作为这一列中每个td的width,一定要从全局把握某个td的width,不能从这一个的width设置就断言它的宽度就是多少,这样是不准确的。
当我们把每一列的宽度都弄清楚之后,事情就好办了。这时候各个td之间的宽度分配按照第二条中各tr的height分配规律,
有一点不同的是全部是默认的情况下,各td的width不是平均分配,而是根据各自的实际内容按比例分配。
再看看td的height设置吧,各个td的height要看这个td所在的行的最大高度来确定这一行的每个td的height,然后各个行的高度情况和tr中的height分配原则是一样的。
还有一点要注意,就是td的height和tr的height之间的关系。首先肯定是根据内容的需要,在这个基础上,再根据设置的值来确定,哪个设置的值大就按照哪个,如果一个设置了值一个没有设置值,那么按照设置值的算。
参考来源:关于html中table表格tr,td的高度和宽度
通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现 本文使用了正点原子的阿波罗开发板,接下来我将粗略的对STM32F767通过STM32cubeMX进行以太网协议配置。
具体步骤 1.首先使能ETH,模式选择RMII;
2.使能LWIP和FREERTOS;
因为阿波罗的开发板PHY芯片的ETH_DXT1和ETH_DXT0用的是PG13,PG14引脚,和默认的不同,所以这里改一下
3.配置时钟,在这里我放上我自己的时钟配置图,只要不标红就行,我用的是25MHz外部晶振作时钟源 ;
4.配置ETH,由于阿波罗开发板的LAN8720芯片的PHYAD0引脚悬空,故PHY Address设置为0;
5.由于我用的STM32cubeMX的版本是将LAN8742A作为默认芯片,所以我们这里不做修改,只用将内部参数改为LAN8720参数即可;
6.配置LWIP,本人这里不使用DHCP获取IP地址等信息,并且我使用的是TCP,所以未对UDP使能,设置如图;
7.配置FREERTOS,我在这里加了两个线程备用
8.按下生成按钮,生成项目,生成时需要选择编译软件为自己用的软件,本人使用的是V5;
由于阿波罗开发板的PHY芯片的RESET引脚是依靠PCF8574的P7位控制,所以我们要在项目中引入PCF8574的代码,以下代码可以在阿波罗资料盘中找到
打开main.c里的加上#include “pcf8574.h”,并在初始化部分将PCF8574初始化
/* Includes ------------------------------------------------------------------*/ #include "main.h" #include "stm32f7xx_hal.h" #include "cmsis_os.h" #include "lwip.h" #include "gpio.h" /* USER CODE BEGIN Includes */ #include "pcf8574.h" /* USER CODE END Includes */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); void MX_FREERTOS_Init(void); /* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------------------------*/ /* USER CODE END PFP */ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /** * @brief The application entry point.
自学JS,最系统的方法应该就是W3C上的,那么如何来学习呢,大体上看来,网站表述的内容,是先搭好架子,在填充内容,最后以实例去熟悉所学过的内容,在这个过程中我们所接触的知识点可以在参考手册中查询,接下来开始一部分一部分的复习。
一、什么是javascript
JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。 JavaScript 很容易学习。
提示
JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上。 Java(由 Sun 发明)是更复杂的编程语言。 ECMA-262 是 JavaScript 标准的官方名称。 JavaScript 由 Brendan Eich 发明。它于 1995 年出现在 Netscape 中(该浏览器已停止更新),并于 1997 年被 ECMA(一个标准协会)采纳。
正文
第一点、JS实现
内部的JavaScript HTML 中的脚本必须位于 <script> 与 </script> 标签之间。 脚本可被放置在 HTML 页面的 <body> 和 <head> 部分中。
<script> 和 </script> 会告诉 JavaScript 在何处开始和结束。 <script> 和 </script> 之间的代码行包含了 JavaScript:
外部的 JavaScript 也可以把脚本保存到外部文件中。外部文件通常包含被多个网页使用的代码。 外部 JavaScript 文件的文件扩展名是 .
docker compose 在 Docker 容器运用中具有很大的学习意义,docker compose 是一个整合发布应用的利器。而使用 docker compose 时,懂得如何编排 docker compose 配置文件是很重要的。
一. 前言 关于 docker compose 技术可以查看官方文档 Docker Compose
以下的内容是确立在已经下载好 Docker 以及 Docker Compose,可参看 Docker Compose 的官方安装教程 Install Docker Compose
二. Docker Compose 配置文件的构建参数说明 首先,官方提供了一个 docker-compose.yml 配置文件的标准例子
version: "3" services: redis: image: redis:alpine ports: - "6379" networks: - frontend deploy: replicas: 2 update_config: parallelism: 2 delay: 10s restart_policy: condition: on-failure db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks: - backend deploy: placement: constraints: [node.
JavaScript new对象的四个过程 本文实例讲述了JavaScript new对象的四个过程。分享给大家供大家参考,具体如下:
new对象:
function Person(name, age) { this.name = name; this.age = age; } var person = new Person("Alice", 23); new一个对象的四个过程:
1、申请空间,创建一个空对象
var obj = new Object(); 2、改变this指针指向,让Person中的this指向obj,并执行Person的函数体
var result = Person.call(obj); 3、设置原型链,将person的_proto属性指向Person.prototype原型对象,完成继承
obj.__proto__ = Person.prototype; 4、判断Person的返回值类型,如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。【或者理解为:返回完成继承的对象(此对象已拥有Person的属性并可使用Person.prototype的方法)】
if (typeof(result) == "object") person = result; else person = obj; 此外,prototype原型对象可以理解为一个共享空间,保存了一些方法和属性,提供给prototype.constructor构造函数实例的对象使用,有效节省内容。
转载自:https://www.jb51.net/article/144793.htm
发现异常 首先通过我们内部搭建的日志平台发现我们线上环境一个java应用有大量的http接口请求超时,登录linux服务器查看网络环境没有问题,判断是应用自身运行异常,重启应用后发现异常还在,开始查找问题。 初步查找问题 通过指令: jstat -gcutil 查看jvm内存占用和gc情况: 发现老年代内存占用比例过高,并且每次fullGC后并没有有效回收。老年代内存占用百分比变化趋势大致如下: 初步判断大量请求超时和服务瘫痪的直接原因: 每次fullGC后的内存占用越来越高内存占用增长速度越来越快fullGC的频率越来越高最终占用达到100%,服务完全瘫痪 分析处理 使用指令:jmap -histo:live *** | more 查看堆内存中的对象数量和大小 发现Log4jLogEvent这个对象实例很多,占用内存也异常的大,初步分析是异步日志传输速度跟不上,导致日志对象堆积在内存中。尝试使用调整Flume传输日志参数:提高flume单次传输量,减少最大延迟时间重启应用并监控接口调用情况发现应用暂时恢复正常了。 后续分析 在前一步分析内存的同时,使用指令:jmap -dump:format=b,file=heapDump.hprof将实时内存信息导出(dump过程比较慢,所以在问题暂时处理完后进行后续分析),使用mat分析内存结构: 可以看到主要占据堆内存的对象信息,果然是Flume异步传输日志堵塞的问题。 总结 对jvm内存泄露这类问题的解决,主要是要善于利用jvm提供的类似jstat、jmap等工具来分析查找问题。这次问题虽然解决,但是后续还是存在出现此类问题的风险。所以除了加强jvm问题排查能力的同时,我们也将建立应用监控平台的计划提上日程,希望能对jvm内存、线程等应用实时运行指标进行监控,便于尽早发现问题。
以前的学习笔记,整理一下:
java代码的MapReduce打包成jar
报错:
JAVA程序运行时出现:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at PrintWhat.main(PrintWhat.java:14)?
改正:
命令行输入时没有输入参数。
命令行输入时没有输入参数。------------你在main方法中的这句话:int month=Integer.getInteger(args[0]);使得数组args[]被用到了( args[0] ),所以main方法执行时是需要一组String 类型的参数的,为什么? 这个main方法在被调用时其实是需要输入一个String类型的数组的 ↓public static void main (String[] args) {) ------------如果是在命令行编译运行的,需要如此形式才可运行:java PrintWhat 12,23,32只需要在程序名后面空格,跟上若干个参数便可;如果是在Eclipse下编写的,这么做:对着PrintWhat.java 右击 > Run as > Run configurations,在打开的窗口,选择"Arguments"标签,输入一组参数,之后点击"Run"即可
com.packt.ch5.advjoin.redis.MapSideJoinRedis
明天需要注意的问题:
1,启动hadoop集群
2,开启redis
3,注意确定数据nobots_ip_country_tsv.txt里面。
4,看书上的步骤
5记得看书上的结果 看是不是代码的问题
6回复汪版本的问题不需要改正,可以使用即可。
在程序中出现找不到文件的错误但是文件又是真实的存在的,可能是因为文件的权限的问题。需要修改文件的权限。
一、常用斜体语法
常用字体样式设置font-style: italic
兼容各大浏览器
normal : 正常的字体(默认字体样式,可用于去掉html i斜体标签默认斜体样式)
italic : 斜体。对于没有斜体变量的特殊字体,将应用oblique
oblique : 倾斜的字体
二、css斜体案例
我们对divcss5盒子里的文字字体设置为italic斜体,oblique倾斜体,使用font-style:normal去掉html 斜体标签默认斜体样式。
1、css代码:
<style>
.divcss5_italic{ font-style:italic}
.divcss5_oblique{ font-style:oblique}
.divcss5_normal i{ font-style:normal}
/ 去掉divcss5_normal对象I斜体标签默认斜体样式 /
</style>
2、html代码片段:
<div class="divcss5_italic">我被加斜体</div>
<div class="divcss5_oblique">我被加倾斜</div>
<div>我加I标签斜体</div>
<div class="divcss5_normal">I斜体被CSS去掉</div>
3、div css斜体案例截图
CSS font-style斜体字体倾斜体样式(italic oblique normal) 三、总结
让对象盒子里的文字字体为斜体,可以对对应盒子加css样式font-style:italic即可实现对象内文字字体为斜体。同时我们案例也演示了使用CSS去掉斜体样式,使用CSS font-style:normal去掉I斜体标签斜体样式。
实现点击跳转到新页面,可以有两种形式,一个是本地页面打开,一个是本地页面不变跳转到新的页面。
(一)页面点击本地页面打开新页面
引入ant的Button组件
<Button style={{backgroundColor:'#F0F2F5'}} onClick={()=>{window.location.href="https://baidu.com"}} className="r-button" > 引入import {Link} from 'react-router-dom'
<Link to="/new/login/"> <Button className="e-button" type="primary">Back to login page</Button> </Link> (二)本地页面不变跳转到新的页面
<Button style={{backgroundColor:'#F0F2F5'}} onClick={this.handle} className="last-button" > handle=()=>{ const w=window.open('about:blank'); w.location.href="www.baidu.com" } by我还差的很远,我写的不对的地方,请大家指出来,这样我才能够进步啊,给各位大佬递茶
转载于:https://www.cnblogs.com/smart-girl/p/10015535.html
ONNX结构分析 onnx将每一个网络的每一层或者说是每一个算子当作节点Node,再由这些Node去构建一个Graph,相当于是一个网络。最后将Graph和这个onnx模型的其他信息结合在一起,生成一个model,也就是最终的.onnx的模型。
onnx.helper----node、graph、model 在构建onnx模型这个过程中,这个文件至关重要。其中make_node、make_graph、make_model是不可或缺的。make_tensor_value_info和make_tensor是构建graph中所需要用到的。
make_node [类型:NodeProto] make_node(op_type,inputs,outputs,name=None,doc_string=None,**kwargs)
op_type:节点的算子类型 [类型:字符串]
比如Conv、Relu、Add这类,详细可以参考onnx给出的算子列表,这个可以自己赋值,但最好与官网对应上,否则其他框架在跑onnx的时候会不知道这是什么。inputs:存放节点输入的名字 [类型:字符串列表]
每个节点输入的数量根据情况会有不同,比如inputs(2-3),即输入为2个或3个,可选的输入都会标注(optional)。以Conv为例,必有输入X和权重W,偏置B作为可选。outputs:存放节点输出的名字 [类型:字符串列表]
与inputs类似,同样需要根据官网给出的输出个数来设置,大多数情况是一个输出,我暂且还没碰到多输出情况。name:节点名,可有可无,不要和op_type搞混了doc_string:描述文档的字符串,这个默认为None [类型:字符串]kwargs:存放节点的属性attributes [类型:任意]
这个**kwargs**可以是字典形式输入,也可以拆开分别赋值(类型任意),反正不管是什么最后这个node都给你转换成NodeProto的形式。在用IDE的时候,你可以进到一个onnx_ml_pb2.py的文件中,你可以看到诸如AttributeType、DataType、AttributeProto、ValueInfoProto、NodeProto这些描述符号。onnx_ml_pb2.py是由protoc buffer编译器通过onnx-ml.proto生成的。
Attributes在官网也被明确的给出了,一般被标注(default:xxxxx)的可以根据自己的需求不设置,没有标注default的属性则一定需要设置。
以Conv举例:
auto_pad:VALID,dilations:[1,1,1],group:1,kernel_shape:(7,7),pads:[3,3,3,3],strides:(2,2)
可以写成: dict = {"kernel_shape": (7, 7), "group": 1,#default为1,所以可以不写 "strides": (2, 2), "auto_pad": "VALID", "dilations": [1, 1, 1], "pads": [3, 3, 3, 3]}#顺序无所谓 node_def = helper.make_node( NodeType, # 节点名 X_name, # 输入 Y_name, # 输出 **dict ) 也可以写成:
node_def = helper.make_node( NodeType, # 节点名 X_name, # 输入 Y_name, # 输出 kernel_shape = (7,7), strides = (2,2), auto_pad = "
参照:https://www.drivereasy.com/knowledge/err-tunnel-connection-failed-error-chrome-solved/
用的云桌面访问网站,之前一直好好的,今天访问却出现了如下问题,莫名其妙,最后参照上述网站介绍的方法2解决了问题。
无法访问此网站
网址为 https://www.demo.com/login 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。
ERR_TUNNEL_CONNECTION_FAILED
方法2:重置你的TCP/IP和DNS配置
1) 以管理员的方式运行命令行工具cmd.exe;
2) 分别执行以下各行命令,以回车结束:
ipconfig /flushdns nbtstat –r netsh int ip reset
netsh winsock reset 3) 重启生效。
原文地址:https://cloud.tencent.com/developer/ask/176725 在List <String>上添加@NotNull或Pattern约束? 回答 (2)关注 (0)查看 (104) 我们如何确保列表中的各个字符串不为空/空或遵循特定模式
@NotNull List<String> emailIds; 我还想添加一个模式
@Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b.")
但我可以没有它。但我肯定希望有一个约束,它将检查列表中的任何字符串是否为空或空白。Json架构也将如何
"ids": { "description": "The ids associated with this.", "type": "array", "minItems": 1, "items": { "type": "string", "required" :true } } "required" :true does not seem to do the job 写回答关注邀请回答
提问于 2018-08-23
在List <String>上添加@NotNull或Pattern约束? 写回答关注
2 个回答 热门排序
用户回答回答于 2018-08-23
你可以为电子邮件字符串创建一个简单的包装类:
public class EmailAddress { @Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b.") String email; //getters and setters } 然后标记@Valid现有对象中的字段:
@NotNull @Valid List<EmailAddress> emailIds; 然后验证器将验证列表中的每个对象。
架构师的信仰系列文章,主要介绍我对系统架构的理解,从我的视角描述各种软件应用系统的架构设计思想和实现思路。
从程序员开始,到架构师一路走来,经历过太多的系统和应用。做过手机游戏,写过编程工具;做过大型Web应用系统,写过公司内部CRM;做过SOA的系统集成,写过基于Hadoop的大数据工具;做过外包,做过电商,做过团购,做过支付,做过SNS,也做过移动SNS。以前只用Java,然后学了PHP,现在用R和Javascript。最后跳出IT圈,进入金融圈,研发量化交易软件。
架构设计就是定义一套完整的程序规范,坚持架构师的信仰,做自己想做的东西。
关于作者:
张丹(Conan), 程序员/Quant: Java,R,Nodejsblog: http://blog.fens.meemail: bsspirit@gmail.com 转载请注明出处:
http://blog.fens.me/architect-matrix-interview
前言
受矩阵数字经济智库邀请,做一起对于行业发展的专访。专访的过程,涉及了大数据,区块链,宏观经济,个人转型等多个领域,我也是根据个人的理解,对上述的一些问题做了总结。
2018年,我经历了很多,大病初愈,去了微软总部参观,从从银行的舒适区出来,经历区块链快速下跌的市场,关注金融改革,了解中美贸易的影响,看到国内经济的从乱序到稳定。
总结一句话:2018市场的变化真是太快了,各行各业都缺少顶层设计者。
目录
专访背景如何从技术转型量化投资,更需要规范的市场环境顶层设计,是行业发展先行条件 1. 专访背景
十年前,银行核心系统的升级改造促进了大数据的积累;十年后,数字化转型的需求使得大数据在各个行业广泛应用。经过十年的数据积累和科技分析能力的提升,金融大数据的分析和应用已经进入到了一个新的层次,金融改变人们的生活,生活也会改变着金融,而大数据已经成为改变人们的生活和金融行为的重要手段和方式,大数据的应用让金融和人们的生活更加了解、互相改进和互相适应。
应矩阵数字经济智库之约,我们邀请到青萌数海CTO张丹,国内顶尖的R语言专家,金融大数据专家,曾在民生银行等金融机构工作,积累了丰富业务经验和对金融数据深刻理解,共同探讨国内大数据的未来发展。官方文章发布地址。
2. 如何从技术转型
从最初的编程技术入手,作为国内顶尖的R语言专家,张丹无论在技术水平还是作品产出都居于一线水准。之后进入金融领域做量化投资,而目前主要做数据科学相关的行业研究,发现数据规律。
一路跨界,从IT技术到量化投资再到数据科学,张丹认为当一个人在一个领域取得了很深入的理解,包括技术能力、思维模式、业务思路、整个产业的上下游企业关系等,将知识理解形成系统的方法论,作为基础再进入一个新的领域,也会很快成为新领域的专家。
作为技术出身的张丹,对待新事物的认知往往采取理性的态度。对于目前热议的区块链金融,他认为金融是指银行、证券、信托、保险、基金等金融领域,而区块链金融仅仅是利用币的交易属性进行流通。因此,区块链金融应该是金融业务对区块链的金融支持,而不是颠覆传统金融,单独以区块链为基础的金融。只有当投资银行、商业银行、信托等金额机构,对整个区块链的账户体系,资金流转,信用体系等,提供各种各样的金融服务支撑之后,才能开展基于区块链的金融类型服务。
在谈及自己深入研究的大数据领域时,张丹认为大数据是基于技术领域衍生出来的一个概念,同时也是社会所需要的技术。大数据带来了一次生产力的变革,大数据会成为一个长期的机会。在未来,数据会成为每个人所必须的知识。
当我们以大数据的视角去看待日常的生活时,会为我们带来很多的改变。将大数据结合人工智能、物联网等技术,在多方面可以提高人的工作效率。人工智能领域突破,如AlphaGo,会打破了人类固有的认知,进而形成的新的思维方式,是人类应该学习的。
张丹曾在金融行业设计和开发智能投顾系统,他认为的智能投顾是利用已有的金融市场交易规则和评判标准,帮助外行人做投资决策。而之所以可以这样做,是因为投资方法是建立在西方的现代金融学理论之上的,有固定的规则、评价方法、运作模式且已经得到市场的认可,基于这个市场基础,可以利用算法进行建模,提升收益。但国内推出智能投顾问服务,更多是站在卖方市场,缺少对买方的利益的保障。
3. 量化投资,更需要规范的市场环境 张丹所认为的量化投资是对传统投资的提升,并不能代替传统投资的模式。量化投资应与传统投资相辅相成,量化本身不能量化一切东西,还需要人的思考,用量化的工具进行辅助决策,会极大地提升工作效率。
张丹认为近两年中国市场的管制逐渐加强,使得很多可以通过量化、程序化的交易通道被堵塞,导致量化投资受到政策上的影响和限制,但并不影响量化的决策继续进行。对于数字货币交易市场,还处于鱼龙混杂的时期,区块链生态都面临着洗牌,量化投资可以帮助币市恢复理性。让纯投机的人离场,通过更多的数据指标支撑,重新建立数据货币的秩序。
4. 顶层设计,是行业发展先行条件 当谈及金融大数据的未来时,张丹乐观的认为,金融数据会不断延伸到各行各业,及至个人的生活交易。金融大数据也会衍生出各种的数据,在数据量和数据维度方面不断的进行拓展。金融数据的未来会成为一个机会,在如何把握这样的机会上,张丹认为我们应明确区分金融属性的数据和金融业的数据,在此基础上抓住未来的发展机会。
而对于未来区块链行业发展的方向上,他提出,行业内最需要精英进行顶层设计,技术资源和资本是相对丰富的,但真正能调配这些资源的顶层设计者是难求的。
他通过研究公链上数据的交易行为,来评价公链项目的优劣。每条公链都有自己的使命和独特的性质。公链上数据所呈现的行为,应该是反映这个项目的价值观。通过数据分析验证公链项目的言行一致,是判断公链是否是空气项目的重要标准。
行业的发展瞬息万变,但一个行业的发展离不开站在顶端看世界的人,高瞻远瞩的布局会奠定行业的趋势。未来的大数据和区块链等行业会如何发展,让我们拭目以待。
转载请注明出处:
http://blog.fens.me/architect-matrix-interview
This entry was posted in 数字货币, 金融
中文语料预处理 1.由于数字、日期、时间、网址等采用正则表达式,用特殊名字泛化。
类型转化例子数字类型$number如:321日期类型$date如:1995年 2 月 3 日时间类型$time如:3:13网址等类型$literal如:www.csdn.net 2.不要对组织机构名进行捆绑为一个词汇。例如将“东北大学信息学院”最好分成两个词“东北大学”“信息学院”。这样做的好处是为了有助于后面规则抽取模块抽取出更多翻译规则。
英文语料预处理 1.将所有大写字母改为小写字母;
2.将英文句尾结束符与句尾最后一个单词用空格分开;
3.同样将数字、日期、时间、网址等不可枚举的类型进行识别,然后分别采用特殊名字进行泛化处理。
平行语料对照 中文:4 月 14 日我买了 10 本书。
英文:I bought 10 books on April 14.
预处理结果:
中文:$date 我 买 了 $number 本 书 。
英文:i bought $number books on $date .
其他说明:
1) 中文的全角字符可以考虑改写为半角字符来处理;
2) 同一类型的泛化名字在中英文中最好一样,如中文/英文数字=>$number;
3) 也可以采用 CRF 或者语言模型来实现高性能中文分词;
4) 注意区分英文的句尾符号“.”和“Mr. Smith”的“.”;
2.词对齐 giza
3.短语对齐 参考文献:
读书笔记
Linux下统计当前文件夹下的文件个数、目录个数
查看当前目录下的文件数量(不包含子目录中的文件)
ls -l|grep "^-"| wc -l
查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录
ls -lR|grep "^-"| wc -l
查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如果需要查看子目录的,加上R
ls -l|grep "^d"| wc -l
查询当前路径下的指定前缀名的目录下的所有文件数量
#
例如:统计所有以“20161124”开头的目录下的全部文件数量
ls -lR 20161124*/|grep "^-"| wc -l
对每个命令参数做一下说明备注: ls -l 该命令表示以长列表输出指定目录下的信息(未指定则表示当前目录),R代表子目录中的“文件”,这个“文件”指的是目录、链接、设备文件等的总称
grep "^d"表示目录,"^-"表示文件
wc -l 表示统计输出信息的行数,因为经过前面的过滤已经只剩下普通文件,一个目录或文件对应一行,所以统计的信息的行数也就是目录或文件的个数
转载于:https://my.oschina.net/u/2272631/blog/2906827
困扰了我很久的这个问题被解决了 这个东西一直都没有办法解决,让我们在后面想要做到爬取手机应用上的数据根本就做不到。
因为,根据网络上设置的很多方法,改变了ip代理之后,我就发现我的手机上不了网络了。都上不了网络了,我还怎么抓到对应的包呢?所以,在这陷入了深思。
手机上不了网!设置完代理之后手机上不了网!得到的所有包的信息显示的都是加密的(tunnel to)
这样类似的字样,已经把我搞得头都炸了!
解决方案 修改FiddlerScript
也就是改写Fiddler代理脚本。
然后找到 OnBeforeRequest这个函数,用下面的函数来替换原来的函数
目的就是为了欺骗对方的服务器。
修改之后,记得要保存!!!!!
点击左上角的 Save Script 这个按钮
之后,我们就可以发现,手机就变得可以上网了!!!
而且看到对应的包都是没有被加密的! 我仿佛又看到一堆的数据在向我招手!!!
static function OnBeforeRequest(oSession: Session) { // Sample Rule: Color ASPX requests in RED // if (oSession.uriContains(".aspx")) { oSession["ui-color"] = "red"; } // Sample Rule: Flag POSTs to fiddler2.com in italics // if (oSession.HostnameIs("www.fiddler2.com") && oSession.HTTPMethodIs("POST")) { oSession["ui-italic"] = "yup"; } // Sample Rule: Break requests for URLs containing "/sandbox/" // if (oSession.
最近了解到大疆有一款开源的测试工具HttpRunner,可以用于自动化测试和性能测试。先下载了源码,结合HttpRunner文档,实战了下自动化测试部分功能。工具编码风格及自动化测试思路都值得借鉴。提供简洁编写自动化用例的方式,用例编写技术要求低、而且简洁易写。
安装 有网络安装:pip install httprunner (pip install -U httprunner,-U表示升级,第一次装不需要-U),会自动安装需要的相应包,比如har2case等。
无网络安装:需要复制requests/PyYAML/Jinja2/har2case/cocorama/colorlog/requests_toolbelt等包(具体见源码setup.py中install_requires项)到python27对应site-packages目录,如果只是拷贝包,无法使用hrun命令,需要下载源码切换到setup.py目录,python setup.py install,安装,即可使用hrun、har2case命令。
使用命令 har2case -V,hrun -V ,或者--version可查看对应版本。
Httprunner 不仅支持Python3 .4+,2.7也可以,可见setup.py中python_requires。
har文件准备 Charles抓包testerhome,右键export请求,存为har格式。
或者Fiddler抓包,导出session,存为HTTPArchive(har)格式文件。
常用命令 hrun --startproject demo 脚手架功能快速创建项目目录结构,具有测试用例分层机制。
har2case testdemo.har 默认在当前目录生成json文件
har2case testdemo.hartestdemo.yml 生成yaml文件
hrun testdemo.yml 运行yml用例
hrun demo.yml —failfast 失败后不再执行后面步骤。
hrun testcases/testdemo.yml --failfast --log-level debug 运行testcases目录里的testdemo.yml用例,遇到失败用例停止执行,debug模式会在命令框输出更详细信息。
注意:必须在项目目录中debugtalk.py同层目录执行hrun,har2case等命令。
上述命令可以和jenkins结合起来。持续部署。
初始项目结构 debugtalk.py 1、封装底层函数。
2、引入全局变量,import os,os.environ("xxx"),可以引入存在.env文件中的变量。
.env文件:
debugtalk.py:
后面可以使用$Env变量,值为st1。
reports目录 保存生成的测试报告html文件。
.env文件 保存全局数据,比如环境、密码等。
testcases 保存用例,yaml或者json格式文件。
api 用例分层机制,保存具体接口调用、传参、校验等方法,供testcases中testcase使用。
testsuites 测试套件,包含多个测试用例。
一个最基本的用例 - config: name: testset description parameters: - custName: [张一] - var1-var2-var3: ${P(data/t0.
LSTM股票预测
LSTM股票预测 使用开盘价、最高价、最低价、收盘价、交易量预测下一个交易日的收盘价。
模型还不完善,欢迎交流。
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import tushare as ts import pandas as pd from sklearn.preprocessing import MinMaxScaler #参数设置/parameter setting timesteps = seq_length = 20 #时间窗/window length data_dim = 5 #输入数据维度/dimension of input data output_dim = 1 #输出数据维度/dimension of output data #数据准备/data preparation #变量选取Open,High,Low,Close,Volume,以浦发银行股票为例 stock_data = ts.get_k_data('600000',start='2016-01-01',end='2018-11-20') xy = stock_data[['open','close','high','low','volume']] xy = np.array(xy.values) #切分训练集合测试集/split to train and testing train_size = int(len(xy) * 0.
客户访谈:金融/保险业
新金融科技时代,数据的可靠性及平台计算性能是核心要义;新业务上线拓展的迅捷性,更是激烈竞争中重要的取胜之匙。在创新技术驱动业务发展理念的指引下,保险行业新兴寿险企业渤海人寿选择 SmartX 帮助企业率先启用超融合架构,在降低运维成本的基础上同时满足了高性能的需求,大幅提升开发测试效率,用技术利器推动业务不断优化上线,保持持续迅猛增长。
以下是我们对渤海人寿信息技术部负责人的视频访谈及文字实录,客观呈现了超融合在渤海人寿 IT 架构转型升级中的应用实践,以及在提升开发测试效率方面所发挥的价值 。
访谈文字实录
渤海人寿作为首家落户于天津自贸区的保险企业,历时发展了三年。我们公司也早在 2017 年就提出了要转型发展,依托于互联网,依托于新技术的精细化的发展。
互联网的发展现在最大的特点就是快,无论是开发还是测试还是整个上线。所以说也对我们提出来了一个更高的要求,要如何解决快速迭代的问题。
在 2017 年上半年我们做了一个整体的系统的规划,对基础设施也进行了重新规划,引进了很多新的技术,比如超融合、混合云。传统的模式,困扰就是说一开始前期的投入比较大,而且扩展不灵活,整个的故障点非常多。理想的基础架构,肯定是高性能、易扩展、易维护、稳定可靠。
我们现在采用了SmartX Halo 400 的三台机器 (10 个节点),整个将我们原来的开发测试环境,全部移到了超融合的服务器上,解决了我们 30 多套系统,将近 200 套环境的部署和安装。
在虚拟化上面,做到了资源的整个的合理的分配和使用。从整个存储的性能给我们提升了大概有将近 5 倍,可以降低我们的工作量 30%。无论是空间使用率上,还是节能降耗上面,超融合都有它的优势。
当时我们的超融合有国内品牌国际品牌,整个拿来我们都做了一个 POC。综合评比,SmartX 得分是最高的,它是一个专注于超融合技术的公司,同时,SmartX 的知识产权完全是国产,我们金融企业首先一点还是谈稳定,稳定的前提还是要有一个专业的团队来给我们提供专业的服务。
未来两年可能会把超融合引入到生产环境,生产环境我们会建立起私有云,现在我们互联网的业务已经上到了公有云上,后面我们会形成混合云的架构 。
现在大家可能都是在尝试阶段,在生产环境用超融合的的确不多。但是大家都在研究和考量这个新的技术,我觉得这是一个趋势。
案例解析
突破传统屏障,加速业务上线
作为数字金融领域创新科技的积极实践者,渤海人寿陆续推出保险服务云平台、在线理赔、电子签名、人脸识别等服务项目,并通过智能服务、产品创新、资源互联,满足客户的多方面需求,持续构建和完善面向客户、跨平台、多触点的保险服务体系。
随着公司业务规模扩大,系统多样性等要求相应提高,传统的 IT 基础架构难以轻松支撑。尤其对于开发测试来说,其效率直接影响到业务上线速度,影响到系统功能的迭代效率,同时也影响到用户对业务的功能体验,掣肘实际保险业务拓展。
渤海人寿之前开发测试系统采用典型传统 IT 基础架构搭建,即:传统集中式 SAN 存储 + FC SAN 网络 + VMware 虚拟化的组合。由于采用传统存储设备,存储的扩展以及存储性能都无法满足业务需求。
具体痛点如下: 存储扩展能力差
受限于传统存储架构的 scale-up 扩容方式,单台设备的存储容量规模受限于存储控制器,达到单台存储扩容上限时,不得不新购存储设备。此外,还会造成不同存储设备之间资源不能共享,产生数据孤岛。
存储性能不足
对于某些高压力的测试模型,如高并发的数据库业务,在未达到预期业务规模的情况下,存储已经无法提供更高的存储性能和延迟响应。
随着公司业务的快速发展,传统三层式架构 + 虚拟化的模式遇到瓶颈,影响业务系统的开发测试效率和迭代速度,以及最终用户的体验, IT 基础架构的升级迫在眉睫。
超融合为开发测试平台注入全新活力
SmartX 整合软硬件优势,通过 SmartX Halo 400 超融合一体机为渤海人寿重构数据中心基础架构,其中包含 SmartX Elf 虚拟化平台与 SmartX ZBS 分布式块存储等核心软件系统。此解决方案以简捷便利的方案部署、持续稳定的性能输出、灵活动态的扩展管理,有效支持核心业务系统的开发测试环境,以全面满足渤海人寿业务发展的需求。
前言 词嵌入是单词的一种数值化表示方式,一般情况下会将一个单词映射到一个高维的向量中(词向量)来代表这个单词。例如我们将: ‘机器学习’表示为 [1,2,3] ‘深度学习‘表示为[2,3,3] ‘英雄联盟‘表示为[9,1,3] 对于词向量,我们可以使用余弦相似度在计算机中来判断单词之间的距离: ‘机器学习’与‘深度学习‘的距离:
‘机器学习’与‘英雄联盟‘的距离:
通过这篇文章你可以学习到下面内容:
文本的词嵌入是什么,以及它与其他特征提取方法有什么区别。介绍3种主流的从文本数据中学习词嵌入的方法。怎么训练新的词嵌入以及如何在日常的NLP任务中使用预先训练好的词嵌入。 什么是词嵌入? 词嵌入是一种对文本算法学习后的表示形式,甚至,你可以理解为一个单词在算法中的储存形式。大家知道存入计算机的都是0101的数值化序列,这里也是同理,词嵌入就是将文本数值化以方便拟合算法。这种将单词或者文档数字化表示的方式被认为是深度学习在自然语言处理任务中最具有挑战性的问题之一。
使用密集和低维向量的一个好处是方便计算:大多数神经网络工具包不能很好地处理非常高维,稀疏的向量。......密集表示的主要好处是泛化能力,如果我们认为某些特征可能提供类似的线索,那么提供能够捕获这些相似性的表示是值得的。
— Page 92, Neural Network Methods in Natural Language Processing, 2017.
词嵌入实际上是一种将各个单词在预定的向量空间中表示为实值向量的一类技术。每个单词被映射成一个向量(初始随机化),并且这个向量可以通过神经网络的方式来学习更新。因此这项技术基本集中应用与深度学习领域。
这项技术的关键点在于如何用密集的分布式向量来表示每个单词。这样做的好处在于与one-hot这样的编码对比,使用词嵌入表示的单词向量往往只有几十或者几百个维度。极大的减少了计算和储存量。 将词汇表中的每个词与分布式词特征向量相关联...特征向量表示词的不同方面特征,每个词与向量空间中的点相关联。特征的数量......远小于词汇的大小
— A Neural Probabilistic Language Model, 2003.
这种分布式的词向量表示方式依赖于单词的使用习惯,这就使得具有相似使用方式的单词具有相似的表示形式。这个怎么理解呢?回想我们在看游戏直播,IG获得冠军时候的弹幕,很多主播(无论游戏还是娱乐)的直播间都在发‘IG牛逼’和 ‘77777’,所以我们算法能学习到,‘IG牛逼’和 ‘77777’是向量空间中很相近的2个词。
虽然看起来有些粗糙,但是这个方法背后有很深的语言学理论支撑。即Zellig Harris的“distributional hypothesis”。这个假设可以归纳为:具有相似语境的词语具有相似的含义。有关更深入的信息,请参阅Harris的1956年论文 “Distributional structure“。
这种使用语境定义单词的概念可以通过John Firth经常重复的谚语来概括:
You shall know a word by the company it keeps!
— Page 11, “A synopsis of linguistic theory 1930-1955“, in Studies in Linguistic Analysis 1930-1955, 1962.
本文接续上一篇文章《Maven-使用Maven命令编译java代码》
Maven项目中默认的主代码目录是src/main/java,对应的,Maven项目中默认的测试代码目录是src/test/java。因此,在编写测试用例之前,应先创建该目录。
在Java中,由Kent Beck 和Erich Gamma建立的JUnit是事实上的单元测试标准。要使用JUnit,首先需要为项目添加JUnit依赖。
有了这段配置,Maven就能够自动从中央仓库下载junit-4.7.jar
配置中海油一个值为test的元素scope,scope为依赖范围,若依赖范围为test,则表示该依赖只对测试有效。换句话说,测试代码中(即src/main/test中),import JUnit代码是没有问题的,但是如果在主代码(src/main/java)中用import JUnit代码,就会造成编译错误。如果不声明依赖范围,那么默认值就是compile,表示该依赖对主代码和测试代码都有效。
接着就可以编写测试类。在上一篇中写了HelloWorld类,现在要测试该类的sayHello()方法,检查其返回值是否为"Hello Maven"。在src/test/java目录下创建子目录以及测试文件
一个典型的单元测试包含三个步骤:
1.准备测试类及数据
2.执行要测试的行为
3.检查结果
上面的代码首先创建了一个要测试的HelloWorld实例,接着执行该实例的sayHello()方法并保存结果到result变量,最后使用JUnit框架的Assert类检查结果是否为"Hello Maven"。在JUnit4中约定所有需要执行测试的方法都应该以@Test进行标注。
运行mvn clean test执行测试:
从输出中可以看到,Maven执行了clean、resource、compile、testResouirces、testCompile、test任务。需要了解的是Maven在执行测试test之前,它会自动执行项目主资源处理、主代码编译、测试资源处理,测试代码编译等工作,这时Maven声明周期的一个特性。
在这一步可能会遇到一个问题,由于历史的原因,Maven的核心插件之一,compiler插件默认只支持编译Java 1.3,所有如果Java版本较高,在执行测试命令时可能会提示需要使用更高版本以启动注释。这个时候需要配置该插件使其支持Java的更高版本
再次执行上面的mvn clean test命令就可以成功了
测试代码通过编译之后在target/test-classes下生成了二进制文件,紧接着surefile:test任务运行测试,surefile是Maven中负责执行测试的插件,输出测试报告,显示一共运行了多少测试,失败了多少,出错了多少,跳过了多少。
在进行ajax响应后台的数据的时候,出现了415异常
原因是没有maven中没有响应的坐标依赖,没有办法对发送的json进行解析,
导入相关的依赖解决了问题
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency> 转载于:https://www.cnblogs.com/aniymx/p/9985556.html
父组件向子组件传值
组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据
<script> // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: { msg: '这是父组件中的消息' }, components: { son: { template: '<h1>这是子组件 --- {{finfo}}</h1>', props: ['finfo'] } } }); </script> 使用v-bind或简化指令,将数据传递到子组件中: <div id="app"> <son :finfo="msg"></son> </div> 子组件向父组件传值
原理:父组件将方法的引用,传递到子组件内部,子组件在内部调用父组件传递过来的方法,同时把要发送给父组件的数据,在调用方法的时候当作参数传递进去;
父组件将方法的引用传递给子组件,其中,getMsg是父组件中methods中定义的方法名称,func是子组件调用传递过来方法时候的方法名称
<son @func="getMsg"></son> 子组件内部通过this.$emit('方法名', 要传递的数据)方式,来调用父组件中的方法,同时把数据传递给父组件使用 <div id="app"> <!-- 引用父组件 --> <son @func="getMsg"></son> <!-- 组件模板定义 --> <script type="x-template" id="son"> <div> <input type="button" value="向父组件传值" @click="sendMsg" /> </div> </script> </div> <script> // 子组件的定义方式 Vue.
问题 在centos7系统下执行
systemctl status network 显示有标题的错误信息。《Failed to start LSB: Bring up/down networking》 原因是 mac地址的问题
解决方案 1、查看服务对应网卡最新的mac地址 命令:ip addr 查看最新的mac地址
2、禁用 NetworkManager
systemctl stop NetworkManager systemctl disable NetworkManager 3、在网卡配置文件中添加 mac 地址信息
cd /etc/sysconfig/network-scripts/ # 修改ifcfg-XXX文件了,只修改HWADDR就可以了。 HWADDR=14:18:77:66:ac:86 #接下来执行 systemctl restartr network 就正常了。 4、如果还是启动失败,就修改下 grub 菜单
(1) 在 GRUB_CMDLINE_LINUX 中添加 net.ifnames=0 biosdevname=0
[root@localhost ~]# cat /etc/sysconfig/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed ‘s, release .*$,,g‘ /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=128M rd.lvm.lv=centos/root rhgb quiet net.ifnames=0 biosdevname=0" GRUB_DISABLE_RECOVERY="true" (2) 生成菜单
练习13.1 拷贝构造函数是什么?什么时候使用它?
如果一个构造函数的第一个参数是自身类类型的引用,且任何额外的参数都有默认值,则次构造函数是拷贝构造函数。
一个对象作为函数参数,以值传递的方式传入函数体;一个对象作为函数返回值,以值传递的方式从函数返回;一个对象用于给另外一个对象进行初始化(常称为赋值初始化);用花括号列表初始化一个数组中的元素或一个聚合类成员。 练习13.2 解释为什么下面的声明是非法的:
Sales_data::Sales_data(Sales_data rhs); 永远也不会调用成功,为了调用拷贝构造函数,我们需要拷贝它的实参,但为了拷贝实参,我们又需要调用拷贝构造函数,如此无限循环。
练习13.3 当我们拷贝一个StrBlob时,会发生什么?拷贝一个StrBlobPtr呢?
拷贝StrBlob时shared_ptr+1,拷贝StrBlobPtr不会。
练习13.4 假定 Point 是一个类类型,它有一个public的拷贝构造函数,指出下面程序片段中哪些地方使用了拷贝构造函数:
Point global; Point foo_bar(Point arg) // 1 { Point local = arg, *heap = new Point(global); // 2: Point local = arg, 3: Point *heap = new Point(global) *heap = local; Point pa[4] = { local, *heap }; // 4, 5 return *heap; // 6 } Point global; Point foo_bar(Point arg) //1 函数参数 { Point local = arg, *heap = new Point(global); //2,3 赋值初始化 *heap = local; Point pa[ 4 ] = { local, *heap }; //4,5 列表初始化 return *heap; //6 返回值 } 练习13.
分支和循环
一、分支结构
Python中的分之结构只有if语句,没有switch语句. 1、if语句
a.语法:
if 条件语句: 代码段 b.说明:
if - 关键字 条件语句 - 任何有结果的表达式(不管结果是什么类型) : - 固定写法 代码段 - 和if保持一个缩进的一条或者多条语句 c.执行过程:
先判断条件语句的结果是否是True,如果是True就执行代码段,否则就不执行 注意:
如果条件语句的结果不是布尔,会先将结果转换成布尔再判断; 赋值语句不能写在if的后面,其他语句基本上都可以。 2、if-else
a.语法:
if 条件语句: 代码段1 else: 代码段2 b.执行过程:
先判断条件语句的结果是否为True,如果是True就执行代码段1,否则就执行代码段2 3、if-elif-else
a.语法:
if 条件语句1: 代码段1 elif 条件语句2: 代码段2 elif 条件语句3: 代码段3 …… else: 代码段n b.执行过程:
先判断条件语句1的结果是否为True,为True就执行代码段1;否则,就判断条件语句2的结果是否为True,为True就执行代码段2;否则,就判断条件语句3的结果是否为True,为True就执行代码段3;以此类推,如果前面的条件语句都为False,就执行else后面的代码段n 注意:
1.后面条件的判断前提是前面的条件不成立2.这儿的elif根据情况可以有多个 else也可以省略 4、if嵌套
指的是可以在if、elif、else后面的代码段中,都可以再写其他的if语句。 二、for循环
1、for循环
a.语法:
for 变量 in 序列: 循环体 b.说明:
for - 关键字变量 - 变量名 随便命名(满足变量名的要求)in - 关键字序列 - 字符串 列表 元组 字典 集合 迭代器(如:range)循环体 - 和for保持一个缩进的一条或者多条语句(需要重复执行的代码) c.
因做项目需要用到工业相机,现对工业相机镜头参数进行解释说明(部分为普通相机概念),以便了解。
*
一、镜头主要参数 1.焦距(FocalLength)
焦距就是从镜头的中心点到胶平面(胶片或CCD)上所形成的清晰影像之间的距离,注意区分相机的焦距与单片凸透镜的焦距是两个概念,因为相机上安装的镜头是多片薄的凸透镜组成,单片凸透镜的焦距是平行光线汇聚到一点,这点到凸透镜中心的距离。焦距的大小决定着视角大小,焦距数值小,视角大,所观察的范围也大;焦距数值大,视角小,观察范围小,
工业相机镜头焦距的参数用mm(毫米)来划分的, 常规的有6mm, 8mm, 12mm,16mm,25mm ,35mm , 50mm,75mm.一般6mm镜头在15m以内,8mm镜头在20m以内,视角约50度,12mm在30-40m以内,约30度,16mm在40-60以内。
较常见普通相机有8mm,15mm,24mm,28mm,35mm,50mm,85mm,105mm,135mm,200mm,400mm,600mm,1200mm等,还有长达2500mm超长焦望远镜头。镜头根据其焦距的长短,也即拍摄时的视角,可分为标准镜头、广角镜头、和长焦距镜头等。根据焦距能否调节分为定焦镜头和变焦镜头两大类。
标准镜头的视角约50度左右,这是人单眼在头和眼不转动的情况下所能看到的视角,从标准镜头中观察的感觉与我们平时所见的景物基本相同。35mm相机的标准镜头的焦距多为40mm,50mm或55mm。120相机的标准镜头焦距一般为80mm或75mm,相机片幅越大则标准镜头的焦距越大。而数码相机由于其成像介质(CCD或CMOS)有大有小,标准镜头的焦距也不一致。
2.光圈(Iris)
光圈是一个用来控制光线通过镜头,进入机身内感光面光量的装置,它通常是在镜头内,对于已经制造好的镜头,我们不可以随意的改变镜头的镜头,但是可以通过在镜头内部加入多边形或者圆形,并且面积可变的孔径光栅来达到控制镜头通光量,这个装置就是光圈。
光圈是如何控制进光量的呢?我们可以把相机的光圈,想象成人的瞳孔。当光线强烈时,瞳孔会自动变小;当光线变弱时,瞳孔便会自动放大,保证周围的一切在视网膜上能正常成像。
相机的光圈也是基于同样的原理:当光线不足时,我们把光圈调大,自然可以让更多光线进入相机,反之亦然。除了调整进光量之外,光圈还有一个重要的作用:调整画面的景深。
用F表示,以镜头焦距f和通光孔径D的比值来衡量,每个镜头上都标有最大F值,例如:8mm/F1.4代表最大孔径D为5.7mm,F值越小,光圈越大,F值越大,光圈越小。
最佳光圈一般在f/4-f/8
3.景深(Depth of Field,DOF)
景深是指在被摄物体聚焦清楚后,在物体前后一定距离内,其影像仍然清晰的范围。景深随镜头的光圈值、焦距、拍摄距离而变化,光圈越大,景深越小(浅),光圈越小,景深越大(深)。焦距越长,景深越小,焦距越短,景深越大。距离拍摄物体越近时,景深越小,拍摄距离约远,景深越大。
焦点清晰,而前后方景物都比较模糊,它的景深(清晰部分)如下:
浅景深
深情深
尝试改变一下光圈:
光圈->f/1.8
变化光圈->f/22
4.接口(Mount)
相机与镜头的连接方式,常用的包括C、CS、F、V、T2、Leica、M42x1、M75x0.75。
其中,c与cs接口的主要区别在于镜头与摄像机接触面至镜头焦平面的距离不同,c型接口距离为17.5mm,cs型接口距离为12.5mm。
C型镜头与C型摄像机,CS型镜头与CS型摄像机可以配合使用,C型镜头搭配CS型搭配使用增加一个5mm的C/CS转接环就可以啦。
5.对应最大CCD尺寸(SensorSize)
镜头成像直径可覆盖最大CCD芯片尺寸(传感器尺寸,一英寸=25.4mm),主要有:1/2″(eg:应该是1/2英寸,靶面高度应该是6.4,具体计算有待查询)、2/3″、1″和1″以上。
6.分辨率(Resolution)
分辨率代表镜头记录物体细节的能力,以每毫米能够分辨黑白对线的数量为计量单位,“线对/毫米(lp/mm)”,分辨率越高的成像越清晰。我们常说的显示分辨率是屏幕图像的精密度,指图形所能显示像素有多少。
7.工作距离(Workingdistance,WD)
镜头第一个工作面到被测物体距离
8.视野范围(Field of View,FOV)
相机实际拍摄到的区域尺寸。
9.光学放大倍数(Magnification,b)
CCD/FOV,即芯片尺寸除以视野范围。
10、数值孔径(Numerical Aperture,NA)
数值孔径等于由物体与物镜间媒质的折射率n与物镜孔径角的一半(a\2)的正弦值的乘积,计算公式为N.A=n*sina/2。数值孔径与其它光学参数有着密切的关系,它与分辨率成正比,与放大率成正比。也就是说数值孔径,直接决定了镜头分辨率,数值孔径越大,分辨率越高,否则反之。
11、后背焦(Flangedistance)
准确来说,后倍焦是相机的一个参数,指相机接口平面到芯片的距离。但在线扫描镜头或者大面阵相机的镜头选型时,后倍焦是一个非常重要的参数,因为它直接影响镜头的配置。不同厂家的相机,哪怕接口一样也可能有不同的后倍焦。
二、镜头选型 1.选择镜头接口和最大CCD尺寸
镜头接口只要可跟相机接口匹配安装或可通过外加转换口匹配安装就可以了;镜头可支持的最大CCD尺寸应大于等于选配相机CCD芯片尺寸。
2.选择镜头焦距
如图所示,在已知相机CCD尺寸、工作距离(WD)和视野(FOV)的情况下,可以计算出所需镜头的焦距(f)。
3.选择镜头光圈
镜头的光圈大小决定图像的亮度,在拍摄高速运动物体、曝光时间很短的应用中,应该选用大光圈镜头,以提高图像亮度。
4.选择远心镜头
远心镜头是为纠正传统镜头的视差而特殊设计的镜头,它可以在一定的物距范围内,使得到的图像放大倍率不会随物距的变化而变化。远心镜头与传统镜头对比,如图:
…
三、工业相机与普通相机的差别 工业相机是机器视觉系统中的一个关键组件,其本质的功能就是将光信号转变为有序的电信号,选择合适的相机也是机器视觉系统设计中的重要环节,相机的选择不仅直接决定所采集到的图像分辨率、图像质量等。同时也与整个系统的运营模式直接相关。
主要区别主要在:
1.工业相机性能稳定可靠易于安装,相机结构紧凑结实不易损坏,连续工作时间长,可在较差的环境使用,一般的数码相机是做不到这些的,比如:让民用的数码相机一天工作24小时或连续工作几天肯定会受不了的。
2.工业相机的快门时间非常短,可以抓拍高速运动的物体。
例如:把名片贴在电风扇扇叶上,以最大速度旋转,设置合适的快门时间,用工业相机抓拍一张图像,仍能够清晰辨别名片上的文字,用普通相机抓拍是不可能达到这样的效果的。
3.工业相机的图像传感器是逐行扫描的,而普通的图像传感器第隔行扫描的,逐行扫描的图形传感器生产工艺比较复杂,成品率比较低,出货量少,世界上只有少数公司能够提供这类产品,例如Dalsa、Sony而且价格昂贵。
4.工业相机的帧率远远高于普通相机。
我们在写后台接口的时候,通常会定义DTO来接收参数,在DTO中使用注解书写验证的规则;然后在Controller层使用@validated注解来验证自己制定的校验规则。但当我们的接口接收的参数为List<E>时,可以使用本文的方法进行校验。注:工具类部分代码在最后 包含验证规则的实体类:
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; @Data public class SingleDTO { @ApiModelProperty(value = "主键ID", required = true) @NotBlank(message = "缺少参数:主键ID") @Pattern(regexp = "[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}",message = "主键ID格式有误:UUID格式") private String pkId; } 参数校验:
import com.wingconn.aeocustoms.domain.dto.SingleDTO; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.validation.*; import java.util.ArrayList; import java.util.List; import java.util.Set; public class ValidatorUtilsTest { private static final Logger LOGGER = LoggerFactory.getLogger(ValidatorUtilsTest.class); private static Validator createValidator() { Configuration<?> config = Validation.
因为SQLite没有top聚合函数,所以在出现类似于选择成绩排名时,输出第一名时,会有一定的困扰。今天提供一个方法,以供自己以后参考,利用limit。
例如现有一张表中某一列元素为score 可以如此操作 select * from table_name where 1 order by score limit 1;
错误场景一:
import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn_dialog).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showDialog(); } }); } private void showDialog() { /** * 这里不能使用getApplicationContext(),否则会报错。 * 要传入当前Activity来添加这个窗体,将getApplicationContext()改成this即可 */ new AlertDialog.Builder(getApplicationContext()) .setIcon(android.R.drawable.ic_dialog_info) .setTitle("演示") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }).setNegativeButton("取消", new DialogInterface.
最近重新开始用起hexo,但是发现在文章中引用本地图片时总是显示不出来。
问题如下图所示。
花费了许久时间才解决这个问题。
因此将一些解决经验整理出来,希望能帮助到大家。
一、插件安装与配置 首先我们需要安装一个图片路径转换的插件,这个插件名字是hexo-asset-image
npm install https://github.com/CodeFalling/hexo-asset-image --save 但是这个插件的内容需要修改【不然可能会出Bug】
打开/node_modules/hexo-asset-image/index.js,将内容更换为下面的代码
'use strict'; var cheerio = require('cheerio'); // http://stackoverflow.com/questions/14480345/how-to-get-the-nth-occurrence-in-a-string function getPosition(str, m, i) { return str.split(m, i).join(m).length; } var version = String(hexo.version).split('.'); hexo.extend.filter.register('after_post_render', function(data){ var config = hexo.config; if(config.post_asset_folder){ var link = data.permalink; if(version.length > 0 && Number(version[0]) == 3) var beginPos = getPosition(link, '/', 1) + 1; else var beginPos = getPosition(link, '/', 3) + 1; // In hexo 3.
<c:forEach>循环标签可以根据循环条件(通常和el表达式使用,el表达式我们有机会再说,在这里我就默认你会基本的el表达式了),遍历集合并从中取出我们想要的数据。如果在JSP页面中使用JAVA代码来遍历数据,会使页面非常混乱,不利于维护和分析。使用<c:forEach>循环标签可以是页面更加直观、简洁。
<c:forEach>有以下的属性:
items:指定要遍历的集合,相当于下面的str
String[] str={"1","2"};
for(String s:str)
var:设置变量名,并从集合中取出一组数据。相当于上面的s
begin:指定循环的起始位置,如果没有指定,则默认从第一个值开始遍历
end:指定循环的终止位置,如果没有指定,则默认循环到最后一个
step:用于指定循环的步长,例如step=“2”,则会隔一个循环。下面会有例子说明
varStatus:用于指定循环的状态,有一下四个属性值,这个也比较常用,特别是index属性值,表示索引值。
变量 类型 描述
index int 位于原集合中的索引值(从0开始)
count int 位于现在子集合中的索引值(从1开始,如果没有begin、end和step,则和index一样)
first boolean 是否是现在子集合的第一位
last boolean 是否是现在子集合的最后一位
我们现在来进行举例说明,通过以下四种用法组合使用来讲解这个用法:
注意:在jsp页面前要加这个,引入jstl标签库<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
第一种:加入items和var
<%String[] str={"1","2","3","4","5","6","7"}; request.setAttribute("str",str);
%>
<c:forEach items="${str}" var="s">
<c:out value="${s}"></c:out><br><!-- 这个是输出的标签,相当于System.out.println(s); -->
</c:forEach>
输出结果:
第二种:加入Items、var、begin和end
<%String[] str={"1","2","3","4","5","6","7"}; request.setAttribute("str",str);
%>
<c:forEach items="${str}" var="s" begin="1" end="5">
<c:out value="${s}"></c:out><br><!-- 这个是输出的标签,相当于System.out.println(s); -->
</c:forEach>
输出结果:
第三种:加入Items、var、begin、end和step
<%String[] str={"1","2","3","4","5","6","7"}; request.setAttribute("str",str);
%>
<c:forEach items="
2019独角兽企业重金招聘Python工程师标准>>> 可在Pre-request Script中书写JavaScript代码,最后通过调用postman的setGlobalVariable函数置入全局变量:postman.setGlobalVariable("now",Date.parse(new Date())); 这是毫秒数,传到后台编程系统默认的格式
转载于:https://my.oschina.net/u/252854/blog/2875701
脚本没有报错,但是有底色标记部分语句,运行后报错信息如下:
C:\Users\liushuang\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/liushuang/PycharmProjects/11/人员管理/人员清单.py
Traceback (most recent call last):
File "C:/Users/liushuang/PycharmProjects/11/人员管理/人员清单.py", line 2, in <module>
from selenium import webdriver
File "C:\Users\liushuang\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\__init__.py", line 18, in <module>
from .firefox.webdriver import WebDriver as Firefox # noqa
File "C:\Users\liushuang\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 29, in <module>
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
File "C:\Users\liushuang\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 378
def //*[@id="ItemForm"]/div[2]/div[4]/div[1]/div[2]/inputfind_element_by_xpath(self, xpath):
^
SyntaxError: invalid syntax
解决方案:
卸载selenium:pip uninstall selenium
重新安装:pip install selenium
转载于:https://www.cnblogs.com/shimo/p/9951275.html
/************************************************************************/
/* n个字符全排列问题递归版
分析:设str是n个不同字符的字符串,perm(str,k-1,n)为str[0]到str[k-1]的所有字符的全排列
,perm(str,k,n)为str[0]到str[k]的所有字符的全排列,perm(str,k-1,n)处理的字符个数比perm(str,k,n)
少一个。假设perm(str,k-1,n)可求,对于str[k]位置,可以取str[0]到str[k]范围内的任何值,再组合
perm(str,k-1,n),则得到perm(str,k,n)
//摘自天勤考研数据结构之P89
*/
/************************************************************************/
void perm(char str[], int k, int n) { int i = 0, j = 0; char temp; if (0 == k) { for (j = 0; j <= n - 1; ++j) cout << str[j]; } else { for (i=0;i<=k;++i) { temp = str[k]; //str[k]与str[i]交换 str[k] = str[i]; str[i] = temp; perm(str, k - 1, n); temp = str[i]; //str[k]再与str[i]进行交换,变为原来的值 str[i] = str[j]; str[j] = temp; } } }
rebar3使用介绍(四)依赖 声明依赖关系源依赖包依赖Checkout 依赖更新依赖锁文件 Lock File依赖锁管理 依赖关系和配置文件
将始终使用prod应用于其配置的配置文件编译依赖项。没有其他(default当然,除此之外)用于任何依赖。即使它们是为prod依赖项配置的,仍然会将其提取到其声明的配置文件的配置文件目录中。例如,顶层的依赖deps将存放在_build/default/lib/下,而test模式会存放在_build/test/lib/下,并且两者都将在prod应用其配置文件配置的情况下进行编译。
简而言之,deps存放的目录是和当前的执行模式强相关的
解决冲突
与先前版本的rebar不同,有一组严格的规则,其中拿到的依赖关系不会根据提取或更新的时间而改变。对此的算法如下所述: Rebar3认为依赖版本仅供参考。鉴于Erlang社区中现有的开源环境,试图强加语义版本控制或任何其他类似方案通常都在胎死腹中:
人们更新了一些版本但不是全部版本(git标签与分支名称与OTP应用程序版本相比),它们可能相互矛盾;有些人从不更新他们的版本;不是每个人都订阅相同的版本方案;人们在订阅语义版本时会出错;许多应用程序卡在小于的版本中1.0.0,因此被认为永远不稳定;在撰写本文时,大多数情况下使用源依赖关系:因此,找出版本冲突需要从所有依赖项下载所有传递依赖项,以确定它们是否每次都发生冲突。 在rebar3出现之前,依赖关系的任何其他格式都需要对依赖进行全面检查
相反,rebar3将在级别顺序遍历中获取和下载依赖项。这意味着最接近依赖树根的依赖关系是那些将被选择的依赖关系,无论它们是什么版本。
这意味着在项目中声明的rebar.config任何依赖项永远不会被传递依赖项覆盖,并且传递依赖项永远不会被后来遇到的冲突传递依赖项所覆盖。
这也意味着如果你希望使用的版本高于其他所有版本,您只需将其添加到你的rebar.config文件中并选择将保留的内容即可。
将冲突视为错误
如果你希望rebar3在检测到依赖项冲突时立即中止,而不是像往常一样跳过文件并继续,请将该行添加{deps_error_on_conflict, true}.到您的rebar配置文件中。
声明依赖关系 可以在顶级rebar.config文件中声明依赖关系,并使用该rebar3 tree命令进行检查。
通常,Rebar3支持两种类型的依赖项:
源依赖包依赖 这两种处理方式可能略有不同(在下载之前,包提供的信息比源依赖项更多,并且将在本地缓存~/.cache/rebar3/),但它们通常表现相同。
所有依赖项都是项目本地的通常是一个很好的选择,以避免全局库存在版本冲突的常见问题。它还有助于独立项目的Releases。
依赖关系描述可以是以下任何格式:
{deps,[ %% Packages rebar, {rebar,"1.0.0"}, {rebar, {pkg, rebar_fork}}, % rebar app under a different pkg name {rebar, "1.0.0", {pkg, rebar_fork}}, %% Source Dependencies {rebar, {git, "git://github.com/erlang/rebar3.git"}}, {rebar, {git, "http://github.com/erlang/rebar3.git"}}, {rebar, {git, "https://github.com/erlang/rebar3.git"}}, {rebar, {git, "git@github.com:erlang/rebar3.git"}}, {rebar, {hg, "https://othersite.com/erlang/rebar3"}}, {rebar, {git, "git://github.com/erlang/rebar3.git", {ref, "
rebar3使用介绍(三) ascompilecleanctcoverdepsdodialyzeredocescriptizeeunitget-depshelpnewpathpkgsreleaserelupreportshelltartreelockunlockupdateupgradeversionxref 本篇主要介绍rebar3的命令 as 它使配置文件名称和任务列表在该配置文件下运行.
举个例子,你可以配置dev模式和relese模式下不同的配置,然后rebar3 as dev release 就可以按照dev模式发布,同样可以用release发布
rebar.config
{profiles, [ {dev, [ {plugins, [ {rebar3_gpb_plugin, "2.3.2"} ]}, {provider_hooks, [ {pre, [ {compile, {protobuf, compile}}, {clean, {protobuf, clean}} ]} ]} ]}, {test, [ {erl_opts, [nowarn_export_all]}, {ct_opts, [{create_priv_dir, auto_per_tc}, {config, "test/ct.config"}]}, {plugins, [ rebar3_proper ]}, {deps, [ {proper, {git, "git://github.com/proper-testing/proper", {tag, "v1.3"}}} ]}, {extra_src_dirs, ["test/support"]} ]} ]}. 根据profiles字段的值,可以自定义自己的发布模板
compile rebar3的编译命令会自己确保依赖到位,不像rebar需要自己get-deps,除了deps部分其他和rebar一致,编译erl,app.src
clean rebar3 clean 默认只会清理主app下的文件,clean也支持as,rebar3 as test clean 将只会清除test模式下的文件
rebar3使用介绍(二) 全局配置Alias 别名ArtifactsCompilation测试选项CoverDialyzerDistributionDirectories 目录EDocEscriptEUnit最小OTP版本检查OverridesHook 钩子shell钩子功能钩子自写功能中可以hook的点 RELXSHELLXRef 本篇主要介绍rebar3的配置部分 全局配置 rebar3支持全局配置,这也配置生效于环境中的所有rebar3,配置在操作系统的环境变量中,有以下内容:
REBAR_PROFILE=“term” # force a base profile
HEX_CDN=“https://…” # change the Hex endpoint for a private one
REBAR_CONFIG=“rebar3.config” # changes the name of rebar.config files
QUIET=1 # only display errors
DEBUG=1 # show debug output
# “QUIET=1 DEBUG=1” displays both errors and warnings
REBAR_COLOR=“low” # reduces amount of color in output if supported
REBAR_CACHE_DIR # override where rebar3 stores config and cache data
1-svcr110.dll是C+里的一项非常重要的文件,不过很多windows10系统用户在安装软件或者清理垃圾过程中,经常会将其给误删掉。误删掉msvcr110.dll之后,很可能会导致一些软件无法启动,这该怎么办呢,Windows10系统下软件丢失msvcr110.dll问题的解决方法吧!
2
百度直接搜丢失的文件,这里给出链接http://pan.baidu.com/s/1kV6gSbd 直接拷贝该文件到系统目录里:c:\Windows\System32目录。然后打开"开始-运行-输入regsvr32 此文件名称",回车即可解决错误提示
3-如果安装完了 还是报错那就
再提供万能的方法,也能解决其它丢失文件。下载此文件http://pan.baidu.com/s/1jIcwI2q,解压!
本章只谈如何利用router-link传递query参数.暂时不谈编程导航传参.两者差不多.今天把router-link这种传参和获取参数的形式讲解清楚.希望对大家有帮助.
假如目前我们现在需要做一个项目.路由的设计是这样的:
主页:www.wangyiyinyue.com; 首页负责展示专辑封面;点击进去专辑详情页面;
专辑详情页面路由: www.wangyiyinyue.com/zhuanji?zhuanjiName=liudehua&zhuanjiId=12456;
这个时候大概的流程是这样的: 输入网址 首先进入主页; 用户点击某一张专辑;此时需要携带上参数,也就是上面的zhangjiName和zhuanjiId ;进入到专辑详情页;此时需要获取到对应的参数再发送ajax请求;把专辑详情页面的内容请求回来; 为什么要携带上参数呢? 因为进入到书籍详情后,发送ajax需要请求你主页点的对应的那张专辑;所以需要参数来确定是哪种专辑;
首先说传递参数; 利用router-link传递;
书写方式:
<router-link :to="{path: '详情页', query: {zhuanjiName: item.zhuanjiName, zhuanjiId: item.zhuanjiId}}" 去专辑详情页按钮 </router-link>
我这里写的是 item.zhuanjiName 具体怎么获取;需要看你的数据格式; 然后进入专辑详情后 url会变成这样:
www.wangyiyinyue.com/zhuanji?zhuanjiName=liudehua&zhuanjiId=12456;
那我们在专辑详情页怎么获取url上的数据呢?也就是主页传递来的数据;
通过this.$route.query; 来获取; 在console面板输出;query是一个对象; 格式应该是这样的:
{zhuanjiName:name,zhuanjiId:id}; 这个时候你就可以打点调用参数了;
另外这个地方有一个特别需要的注意的点,看好了:
是this.$route.query 不是 this.$router.query;
就差一个字母 千万不要写错.写错了获取不到参数;他俩不是同一个对象;不过this.$router对象里面也可以获取到我们传递的参数;不过需要在打点调用currentRoute对象才能得到query;为了大家看的清楚点儿;我把图片传上去; 请大家看图
第一个对象是this.$route;第二个对象是this.$router; 所以第一个对象我们可以直接再打点获取到query;而第二个对象需要再打点一层currentRoute; 一般我们都是用第一种; 所以这里一定要注意;
今天先写到这儿吧; 下次再聊点儿其他的;有问题大家随时留言;
最近做ionic3 cordova 打包的时候总会遇到这样的问题
报错: Cannot find module ‘…/cordova/platform_metadata’
解决办法 :
1 降级cordova版本为7.1
2升级这个插件 cordova-plugin-add-swift-support 先移除 再添加
cordova plugin rm cordova-plugin-add-swift-support
cordova plugin add cordova-plugin-add-swift-support
然后就成功打包了。
如果你是cordova 8.+版本推荐先用方法二
如果没效果再降级。
如果对你有帮助 点个赞再走啊 mua~~~
ionic3 cordova 安卓软件 安卓设备 android4.4.4
会出现这个问题
出现neterr_connection_refused http://localhost:8080/
Couldnt connect to the sever(http://localhost:8080/)
https://www.npmjs.com/package/cordova-plugin-ionic-webview
进行如下操作
ionic cordova plugin rm cordova-plugin-ionic-webview
ionic cordova platforms remove android
cordova plugin add cordova-plugin-ionic-webview@latest
npm install @ionic-native/ionic-webview@2.2.3
将这个插件升级到最新版本 就可以了
如果有A表和B表,sql server中用:
update A set field2=b.filed2 from A,B where a.field1=b.field1搞定,所以用惯了sql server的更新表语句,再用oracle的那真是特别的拗口。
情景一:如果只是更新固定值,oracle和sql server相差不大:
update A set field2=‘OK’
where exists(select 1 from B where a.field1=b.field1)
情景一:更新内容为关联表中字段
oracle更新关联表的语法有些臃肿。
update A set field2=(select b.field2 from B where a.field1=b.field1)
where exists(select 1 from B where a.field1=b.field1)
对于子查询的值只能是一个唯一值,不能是多值。
另外oracle也变通了方法,用视图的方式简化:
update(select A.field2 as Afield2,B.field2 as Bfiled2 from A,B where A.field1=B.field1)
set Afield2=Bfield2
情景三:更新内容为关联表中多个字段
如果按情景二的语法,是多个字段更新岂不累死人:
update A set field3=(select b.field3,b.field4 from B where a.field1=b.field1),field4=(select b.field4,b.field4 from B where a.
导读:用户画像将产品设计的焦点放在目标用户的动机和行为上,从而避免产品设计人员草率地代表用户。产品设计人员经常不自觉的把自己当作用户代表,根据自己的需求设计产品,导致无法抓住实际用户的需求。往往对产品做了很多功能的升级,用户却觉得体验变差了。
在大数据领域,用户画像的作用远不止于此。用户的行为数据无法直接用于数据分析和模型训练,我们也无法从用户的行为日志中直接获取有用的信息。而将用户的行为数据标签化以后,我们对用户就有了一个直观的认识。
同时计算机也能够理解用户,将用户的行为信息用于个性化推荐、个性化搜索、广告精准投放和智能营销等领域。
作者:马海平 于俊 吕昕 向海
本文摘编自《Spark机器学习进阶实战》,如需转载请联系我们
01 概述
用户画像的核心工作就是给用户打标签,标签通常是人为规定的高度精炼的特征标识,如年龄、性别、地域、兴趣等。这些标签集合就能抽象出一个用户的信息全貌,如图10-1所示是某个用户的标签集合,每个标签分别描述了该用户的一个维度,各个维度之间相互联系,共同构成对用户的一个整体描述。
▲图10-1 用户标签集合
02 用户画像流程
1. 整体流程
我们对构建用户画像的方法进行总结归纳,发现用户画像的构建一般可以分为目标分析、体系构建、画像建立三步。 画像构建中用到的技术有数据统计、机器学习和自然语言处理技术(NLP)等,如图10-3所示。具体的画像构建方法会在本章后面的部分详细介绍。
▲图10-3 用户画像的构建技术
2. 标签体系
目前主流的标签体系都是层次化的,如下图10-4所示。首先标签分为几个大类,每个大类下进行逐层细分。在构建标签时,我们只需要构建最下层的标签,就能够映射到上面两级标签。
上层标签都是抽象的标签集合,一般没有实用意义,只有统计意义。例如我们可以统计有人口属性标签的用户比例,但用户有人口属性标签本身对广告投放没有任何意义。
▲图10-4 互联网大数据领域常用标签体系
用于广告投放和精准营销的一般是底层标签,对于底层标签有两个要求:一个是每个标签只能表示一种含义,避免标签之间的重复和冲突,便于计算机处理;另一个是标签必须有一定的语义,方便相关人员理解每个标签的含义。
此外,标签的粒度也是需要注意的,标签粒度太粗会没有区分度,粒度过细会导致标签体系太过复杂而不具有通用性。
表10-1列举了各个大类常见的底层标签。
标签类别
标签内容
人口标签
性别、年龄、地域、教育水平、出生日期、职业、星座
兴趣特征
兴趣爱好、使用APP/网站、浏览/收藏内容、互动内容、品牌偏好、产品偏好
社会特征
婚姻状况、家庭情况、社交/信息渠道偏好
消费特征
收入状况、购买力水平、已购商品、购买渠道偏好、最后购买时间、购买频次
▲表10-1:常见标签
最后介绍一下各类标签构建的优先级。构建的优先级需要综合考虑业务需求、构建难易程度等,业务需求各有不同,这里介绍的优先级排序方法主要依据构建的难易程度和各类标签的依存关系,优先级如图10-5所示。
▲图10-5 各类标签的构建优先级
基于原始数据首先构建的是事实标签,事实标签可以从数据库直接获取(如注册信息),或通过简单的统计得到。这类标签构建难度低、实际含义明确,且部分标签可用作后续标签挖掘的基础特征(如产品购买次数可用来作为用户购物偏好的输入特征数据)。
事实标签的构造过程,也是对数据加深理解的过程。对数据进行统计的同时,不仅完成了数据的处理与加工,也对数据的分布有了一定的了解,为高级标签的构造做好了准备。
模型标签是标签体系的核心,也是用户画像工作量最大的部分,大多数用户标签的核心都是模型标签。模型标签的构造大多需要用到机器学习和自然语言处理技术,我们下文中介绍的标签构造方法主要指的是模型标签,具体的构造算法会在本文第03章详细介绍。
最后构造的是高级标签,高级标签是基于事实标签和模型标签进行统计建模得出的,它的构造多与实际的业务指标紧密联系。只有完成基础标签的构建,才能够构造高级标签。构建高级标签使用的模型,可以是简单的数据统计,也可以是复杂的机器学习模型。
03 构建用户画像
我们把标签分为三类,这三类标签有较大的差异,构建时用到的技术差别也很大。
第一类是人口属性,这一类标签比较稳定,一旦建立很长一段时间基本不用更新,标签体系也比较固定;第二类是兴趣属性,这类标签随时间变化很快,标签有很强的时效性,标签体系也不固定;第三类是地理属性,这一类标签的时效性跨度很大,如GPS轨迹标签需要做到实时更新,而常住地标签一般可以几个月不用更新,挖掘的方法和前面两类也大有不同,如图10-6所示。
▲图10-6 三类标签属性
1. 人口属性画像
人口属性包括年龄、性别、学历、人生阶段、收入水平、消费水平、所属行业等。这些标签基本是稳定的,构建一次可以很长一段时间不用更新,标签的有效期都在一个月以上。同时标签体系的划分也比较固定,表10-2是MMA中国无线营销联盟对人口属性的一个划分。
大部分主流的人口属性标签都和这个体系比较类似,有些在分段上有一些区别。
性别
男
女
未知
年龄
12 以下
12-17
18-19
20-24
25-29