项目调试过程中。出现闪退。最后根据logcat日志分析来分析去,目标锁定到了这句话上:load: id=gralloc != hmi->id=gralloc 。
根据度娘说,这个错误一般出现在初始化UI时,错误被手机给拦截了;还有种说法是说是缺少SD卡读写权限造成的。
后来找了一个方法能查看究竟错误是什么的方法:
1,在拨号界面输入:*#*#2846579#*#*之后进入“工程菜单”
,2,工程菜单选择1.后台设置--->3.LOG设置--->勾选AP日志
后来一看日志是在初始化Activity前接收了个Intent传过来的map。结果前一页并没有传,结果这个map是空的。然后我用这个null的map去创建了一个concrrentMap。导致系统出了空指针异常。
如有知情大神,请明示到底是什么问题。拜过先!
说明 本文提供的代码仅供参考。不建议用于生产环境。
可能有些地方在最新版本的Auto.js上面需要做修改,才能运行。
Auto.js简介 Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作。
与“按键精灵”不同的是,它的模拟动作并不是简单的使用在界面定坐标点来实现,而是类似与win一般,找窗口句柄来实现的。
Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。
推荐教程 Auto.js Pro安卓全分辨率免ROOT引流脚本开发视频教程(HD超清1080p)
开发文档 Auto.js Pro开发文档
文档尚在完善中,可能有文档描述和代码实际行为有出入的情况。
为什么要使用Auto.js Pro开发脚本,有什么特点? 吸引我使用Auto.js Pro的原因有很多。最主要的几个原因是:
Auto.js Pro能开发免ROOT的安卓脚本Auto.js Pro基于节点操作,能开发全分辨率的脚本,自动适配各种安卓机型Auto.js Pro丰富的UI组件,能自定义各种样式的安卓界面Auto.js Pro使用的javascript的语法比较优雅,代码可读性强Auto.js Pro的命令库非常的丰富,接口比较多Auto.js Pro脚本文件体积比较小。1000行的代码,打包后的apk文件只有3-5M,还没有广告 免责声明 本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途。
示例代码 // 此代码由飞云脚本圈www.feiyunjs.com整理提供 function copy(fromPath, toPath) { /*格式:H.copy(原文件路径,要复制到的路径);*/ /*解释:复制文件或文件夹 返回是否复制成功*/ var rp = /^([/][^\/:*?<>|]+[/]?)+$/; var rp1 = /^([/][^\/:*?<>|]+)+$/; var rp2 = /^([/][^\/:*?<>|]+)+[/]$/; try { if (rp.test(fromPath) == false || files.exists(fromPath) == false) throw "非法原文件地址,H.copy(?,);" + fromPath; if (rp.test(toPath) == false) throw "
序言 组长说要使自己对产品在技术层面有一个清晰且足够的了解,最好自己动手开发一个迷你产品,例如todolist,因为公司有提供员工自学使用的服务器,所以我就来试试了,而且一步一步的记录自己的学习过程,这个过程有请教问题、出现的问题、解决问题的方法和用到的技术栈等等。
以下开发步骤序号不代表产品开发绝对的顺序,是博主第一次学习走的顺序,仅供参考,建议先阅读黑色标题后再细读。
说明:博主使用的编程工具是vs code(https://code.visualstudio.com/),打开的命令窗口都是从vs code里打开,执行安装依赖的窗口也是从vs code里打开的。示例图如下:
GIF展示图如下:
一、预备工作 1. 服务器预备工作 生产环境(本部分初次建议不要阅读)
1.1 登录服务器(使用的是腾讯云,jumpserver;也可以是阿里云服务器,这里以腾讯云服务为例),进入到“我的资产”,可查看自己的服务器,然后点击“连接”进入到命令窗口(因为我司已配置服务器名称、ip,至于怎么配置可百度或者向他人寻求帮助)
1.2 进入之后,切换到超级用户,不然会有很多的限制。操作命令:su - root ,然后它会提示你要输入密码,这个密码是你在配置服务器的时候设置的,或者自动生成的,总之需要你自己记下来。随后切换成功后,输入命令:ls ,可查看root用户下的所有文件和文件夹。
1.3 这个时候最好新建一个文件夹用于保存你的项目代码,以博主为例。输入命令:mkdir self-study-tc ,回车后再输入:ls ,再次回车后可查看到自己新建的文件夹。
1.4 进入创建的文件夹,输入命令:cd self-study-tc ,这个时候由于该文件夹为空,输入ls不会有任何文件显示,至此,服务器的预备工作第一阶段已完成。 本地环境
1.5 根据自己的电脑配置去官网下载对应最新版本mysql(https://dev.mysql.com/downloads/mysql/),下载后解压到你想存放的路径(以我为例:D:/mysql-8.0.16-winx64),然后打开cmd,根据该链接(https://www.runoob.com/mysql/mysql-install.html)且依据计算机的配置和自己的sql安装路径选择对应的操作。但这个链接的坑有点多,个人建议最好的方式就是根据你电脑的配置去百度一下最好,比如win10的操作系统就搜索 “ win10 mysql-8.0.16 安装教程 ”,然后再查看文章。个人推荐这个链接:
https://jingyan.baidu.com/article/ab0b5630377e5ac15afa7d30.html
1.6 先不论大家在1.5节里的操作是否一切正常(我遇到了很多的坑,特别是设置root用户和密码的时候坑很多,密码最好设置简单点,比如:123456),我推荐的链接进行至第八个步骤即可,如果你能和图示显示的结果一致,那说明你的mysql已经安装并可以正常启动了。
上图表示你已经启动了数据库,并且能够登录数据库,即数据库部分的初始配置已经全部完毕。 1.7 下载sqlyog(使用方便),然后创建一个新连接,输入你的账号root和密码,如果能连接成功那就万事大吉(mysql服务已启动为前提),如果没有,而且报2058的错误,那么可以参考链接:https://www.cnblogs.com/hualalalala/p/9344772.html。如果是其他的错误,不好意思,你需要自己上网搜索答案。
1.8 创建成功之后,自己新建一个表,然后填充一些测试数据,便于前端获取数据,使接口对的上。
2. 前端预备工作1(传统方法搭建React-Native App移动端项目,非移动端项目可跳过不看) 2.1 环境搭建,具体的环境搭建这里不再赘述,可参考官网链接:https://reactnative.cn/docs/getting-started.html ,请注意,该过程是一个比较繁琐且麻烦的过程,需要较好的耐心一步一步走,不出意外的话会很顺畅的安装完成,如果遇到问题则需要自己慢慢搜索答案去解决。
上述过程一直进行到编译并运行应用,在这个步骤,android studio会报需要硬件加速器的错误,这个时候一般是你的电脑并未将电脑的virtualization technology打开,因此你需要重启你的电脑并进入到bios界面,重启的时候按F1健(这个是我的电脑:联想的快捷键,你们的要自己上网搜索),进入之后,其实在网上有很多种答案,说是在security/virtualization technology这里,但是很奇葩的是我的电脑并不是!还以为我的电脑并不支持VT呢!后台是我的师傅在CPU setup里找到的,真鸡儿坑!
2.2 前端项目搭建之后的文件夹目录如下,另外服务开启后,模拟器上显示的页面与官网不一样,但殊途同归。
2.3 安装成功并运行后的安卓模拟机显示图:
3. 前端预备工作2(新式工具expo搭建React-Native App移动端项目,非移动端项目可跳过不看) 3.1 介绍。在搭建react native app项目时推荐使用最新的Expo工具链。你可以完全不用去了解Xcode相关开发环境。Expo CLI会为你设置好开发环境,方便你快速开发App。 如果你熟悉原生的开发过程,推荐使用React Native CLI,即上述“2.
Windows10安装的时候,出现ERROR CODE:0x8007025D
大概提示为:windows 无法安装所需的文件。请确保安装所需的所有文件可用,并重新启动安装。
本人在出现这个问题的原因,是因为U盘的'文件系统格式'不正确,这里给出我的步骤,希望能帮助到大家解决问题.
合理的使用工具制作'启动盘'(如:Rufus、UltraISO...)
修改BIOS中的GPT/MBR选项(根据具体情况修改)
(重要)
3.1 在CMD下使用convert x: /fs:ntfs(ps. x:为u盘的磁盘驱动号)
3.2 使用解压文件打开*.ISO文件,将其source目录中的install.esd解压并替换掉u盘的source目录下的install.esd(ps. 后缀可能不同,具体来说就是一个'有几G大小的install文件')
希望本文可以作为参考,帮到大家.
转载于:https://www.cnblogs.com/PisecesPeng/p/11174541.html
图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。
轮对踏面用阈值分割也可以,出现损伤的地方就是1,其它为0
要得到轮对踏面要进行边缘分割。
图像分割_百度百科 https://baike.baidu.com/item/图像分割/10986705?fr=aladdin
明天接着看,仰之弥高钻之弥坚!
报错 Traceback (most recent call last): File "D:/PyCharm 5.0.3/WorkSpace/2.NLP/9.DL在NLP中的应用/4. VectorizerVisualization.py", line 45, in <module> lines.append(preprocessing(line)) File "D:/PyCharm 5.0.3/WorkSpace/2.NLP/9.DL在NLP中的应用/4. VectorizerVisualization.py", line 18, in preprocessing text2 = ' '.join(' '.join([' ' if ch in string.punctuation else ch for ch in text]).split()) File "D:/PyCharm 5.0.3/WorkSpace/2.NLP/9.DL在NLP中的应用/4. VectorizerVisualization.py", line 18, in <listcomp> text2 = ' '.join(' '.join([' ' if ch in string.punctuation else ch for ch in text]).split()) TypeError: 'in <string>' requires string as left operand, not int 原因
日常开发中可能很少会用到spring rest docs来创建API文档,因为spring boot容易集成的原因,大家可能还是比较倾向于使用swaggerUI文档框架了,spring rest docs有一个好处是需要写单元测试(这个是很多开发人员不愿意的,包括我 -_-),还有个人觉得从界面和展示效果,我还是比较喜欢spring rest docs。在开发中接口文档是必不可少的,至于选择哪一种,就自由选择了。
下面只要是以一个简单的例子来介绍怎么样去使用spring rest docs来生成文档的。
第一步先保证这些依赖引入,至于可以结合spring boot里面是starter来引入,如1.5.12.RELEASE
<properties> <!--spring restdocs--> <spring-restdocs.version>1.2.4.RELEASE</spring-restdocs.version> <!--asciidoctor--> <asciidoctor-maven-plugin.version>1.5.6</asciidoctor-maven-plugin.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.restdocs</groupId> <artifactId>spring-restdocs-mockmvc</artifactId> <version>1.2.4.RELEASE</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> <version>${asciidoctor-maven-plugin.version}</version> <executions> <execution> <id>generate-docs</id> <phase>prepare-package</phase> <goals> <goal>process-asciidoc</goal> </goals> <configuration> <backend>html</backend> <doctype>book</doctype> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.springframework.restdocs</groupId> <artifactId>spring-restdocs-asciidoctor</artifactId> <version>${spring-restdocs.version}</version> </dependency> </dependencies> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>copy-resources</id> <phase>prepare-package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.
文章目录 安装Go(版本1.12.5) 的开发环境与插件安装Go的开发环境配置Visual Studio Code的插件 升级Go语言版本至1.17为什么要升级Go语言版本?安装Go 1.17的开发环境dlv-dap 在线安装go env 查看环境变量 参考文章 配置项值操作系统Ubuntu 18.04 64位机器CPUintel x86 64位Go版本1.12.5Go升级版本1.17 安装Go(版本1.12.5) 的开发环境与插件 安装Go的开发环境 登录Go语言中文网下载安装包.解压安装. cd Downloads/ sudo tar -C /usr/local/ -xzf go1.12.5.linux-amd64.tar.gz 配置环境变量 打开bash配置文件
#bash vim ~/.bashrc 或者 #zsh vim ~/.zshrc 添加配置
export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH 保存文件后,使文件生效
source ~/.bashrc or source ~/.zshrc # 国内配置golang代理 go env -w GOPROXY=https://goproxy.cn,direct 可以使用 go env 查看环境变量
Goproxy.cn
配置Visual Studio Code的插件 在Visual Studio Code的插件里,搜索Go,点击安装插件:
由于网络原因会出现部分插件安装失败:
Installing github.
个人博客
mmap函数使用 分类: Linux/Unix C/C++ 2008-01-22 17:03 6089人阅读 评论(1) 收藏 举报 unix 编程 null 网络 UNIX网络编程第二卷进程间通信对mmap函数进行了说明。该函数主要用途有三个:
1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;
2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;
3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。
函数:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 参数start:指向欲映射的内存起始地址,通常设为 NULL,代表让系统自动选定地址,映射成功后返回该地址。
参数length:代表将文件中多大的部分映射到内存。
参数prot:映射区域的保护方式。可以为以下几种方式的组合:
PROT_EXEC 映射区域可被执行
PROT_READ 映射区域可被读取
PROT_WRITE 映射区域可被写入
PROT_NONE 映射区域不能存取
参数flags:影响映射区域的各种特性。在调用mmap()时必须要指定MAP_SHARED 或MAP_PRIVATE。
MAP_FIXED 如果参数start所指的地址无法成功建立映射时,则放弃映射,不对地址做修正。通常不鼓励用此旗标。
MAP_SHARED对映射区域的写入数据会复制回文件内,而且允许其他映射该文件的进程共享。
MAP_PRIVATE 对映射区域的写入操作会产生一个映射文件的复制,即私人的“写入时复制”(copy on write)对此区域作的任何修改都不会写回原来的文件内容。
MAP_ANONYMOUS建立匿名映射。此时会忽略参数fd,不涉及文件,而且映射区域无法和其他进程共享。
MAP_DENYWRITE只允许对映射区域的写入操作,其他对文件直接写入的操作将会被拒绝。
MAP_LOCKED 将映射区域锁定住,这表示该区域不会被置换(swap)。
参数fd:要映射到内存中的文件描述符。如果使用匿名内存映射时,即flags中设置了MAP_ANONYMOUS,fd设为-1。有些系统不支持匿名内存映射,则可以使用fopen打开/dev/zero文件,然后对该文件进行映射,可以同样达到匿名内存映射的效果。
参数offset:文件映射的偏移量,通常设置为0,代表从文件最前方开始对应,offset必须是分页大小的整数倍。
返回值:
若映射成功则返回映射区的内存起始地址,否则返回MAP_FAILED(-1),错误原因存于errno 中。
错误代码:
EBADF 参数fd 不是有效的文件描述词
EACCES 存取权限有误。如果是MAP_PRIVATE 情况下文件必须可读,使用MAP_SHARED则要有PROT_WRITE以及该文件要能写入。
EINVAL 参数start、length 或offset有一个不合法。
EAGAIN 文件被锁住,或是有太多内存被锁住。
ENOMEM 内存不足。
java.lang.NoSuchFieldError异常
今天碰到这个异常,搞了大半天,头大,一步一步排查,原因是因为我把swing的项目整合到javaFX相关的项目中,两个项目都用到了很多第三方jar包,还有自己写的jar包,最终通过测试,找出来是其中一个jar包冲突,版本不一致导致的,删除低版本的,从新编译,问题解决。
odoo安装和服务器部署 转载自:原文,并记录了一些自己在实操过程中常出现的一些问题及解决方法。
仅针对odoo12和ubuntu18.04
由于ubuntu禁用了root账户,初始账户可通过sudo来获得root权限,也可通过修改root密码进入root账户
sudo passwd root su root 安装进行之前,切换到根目录
更新apt sudo apt update sudo apt upgrade -y 安装postgres数据库 下载并创建数据库,并让当前用户成为数据库超级用户
sudo apt install postgresql -y sudo su -c "createuser -s $USER" postgres#指定定当前用户为postgresql的超级管理员账户 安装postgresql 10:
apt install postgresql-10-postgis-2.4 -y 有时postgres数据库服务没有启动,采用如下命令启动:
/etc/init.d/postgresql start 在WSL上,如果windows上安装了postgres,linux也安装了,linux的数据库服务可能无法启动,此时可修改数据库端口
vim /etc/postgresql/11/main/postgresql.conf 配置文件中默认端口号为5432:
port = 5432 可修改为5433或者5434(在odoo.conf文件中需要配置)
安装系统依赖 sudo apt update sudo apt upgrade sudo apt install git -y # 安装Git sudo apt-get install git python3-dev python3-pip -y sudo apt install build-essential libxslt-dev libzip-dev libldap2-dev libsasl2-dev libssl-dev -y 安装wkhtmltox wget "
方法一
计算图片在灰度图上的均值和方差
当存在亮度异常时,均值会偏离均值点(可以假设为128),方差也会偏小;通过计算灰度图的均值和方差,评估图像是否存在过曝光或曝光不足 int light(string imgName)
{
//Mat 转 IplImage
Mat M= imread(imgName);
IplImage *image = &IplImage(M);
IplImage * gray = cvCreateImage(cvGetSize(image), image->depth, 1);
//转为灰度图片
cvCvtColor(image, gray, CV_BGR2GRAY);
double sum = 0;
double avg = 0;
CvScalar scalar;
int ls[256];
for (int i = 0; i<256; i++)
ls[i] = 0;
for (int i = 0; i<gray->height; i++)
{
for (int j = 0; j<gray->width; j++)
{
scalar = cvGet2D(gray, i, j);
Linux基本操作 一、登录二、Linux命令操作1. Linux目录结构1.1 目录结构1.2 切换目录(重点) 2. 操作目录3. 操作文件4. 压缩与解压缩5. 其它常用命令6. 权限管理(了解)6.1 权限介绍6.2 权限管理 三、远程连接工具 一、登录 输入用户名root,输入密码(输入的密码不显示),回车
二、Linux命令操作 1. Linux目录结构 1.1 目录结构 Linux的目录结构,不区分磁盘,所有的文件(夹)是一棵巨大的树形结构。
/bin:可执行命令所在的文件夹/sbin:超级管理员的命令所在的文件夹/etc: 操作系统的配置文件的文件夹–安装JDK配置环境变量,需要修改/etc下边的配置文件/usr: unix shared resources,系统共享资源–安装软件通常安装在usr里边/home:家目录 每个用户在/home下都有自己的专有文件夹,登录之后默认进入这个文件夹–是当前用户的家目录 /root:超级管理员root的家目录 1.2 切换目录(重点) 切换目录: 语法:cd 目录位置 change directory 常用: cd /开头的目录:绝对路径的方式进行目录切换cd ./开头:相对路径方式,切换到同级某一个文件夹里cd ../开头:相对路径方式,切换到上级某一个文件夹里cd ~:直接切换到当前用户的家目录里 查看当前所在的目录: 语法:pwd print working dirctory 2. 操作目录 完成练习
切换到当前用户的家目录 cd ~在家目录里创建一个文件夹:heima mkdir heima查看家目录里都有哪些文件夹 ll拷贝heima文件夹,得到一个新的文件夹:itheima cp -r heima itheima把itheima文件夹改名成itcast mv itheima itcast把itcast移动到/根目录 mv itcast /删除文件夹itcast rm -rf itcast 创建文件夹(重点)
如果小米手机想要登录谷歌账户却显示:
或者登录谷歌账户一直“正在核对信息”。
解决方案:请勿使用运行在路由器上的飞机软件,断开手机wifi,使用移动数据再运行安卓端的飞机APP。
然后就可以成功登录谷歌账号。然后就可以运行路由器端木第子,使用带飞机的wifi了。
RNN 递归神经网络(RNN)相对于MLP和CNN的主要优点是,它能够处理序列数据,在传统神经网络或卷积神经网络中,样本(sample)输入与输出是没有“顺序”概念的,可以理解为,如果把输入序列和输出序列重新排布,对整体模型的理论性能不会有影响。RNN则不同,它保证了输入和输出至少有一端是有序列特征的。
传统的神经网络结构可以归纳会下图左边的形式,隐藏层h的状态是不保存的,而在RNN中,每一个时间步的隐藏层状态都是由上一层的输入和上一个时间的状态共同计算得到。
RNN算法的细节这里就不赘述,RNN的缺点在于,误差反向传播时,由于时间步t的梯度是由t时的状态h分别对前面所有时间步的状态求导,再相乘得到,在状态权重的模大于1时,若时间步t较长,梯度就会消失(趋近于0),即长期的依赖很小,相反,在状态权重的模小于1时,若时间步t较短,梯度就会爆炸(很大),即短期的依赖很大。具体分析请[参考文献]。(http://ARXIV.org/pdf/1211.5063.pdf),解决这一问题有两个主要的方法:
截断的时间反向传播法(TBPTT):将梯度限制在某个范围,这种做法简单粗暴,却能解决梯度爆炸和消失的问题,但是限制了梯度的传播;长短期记忆(LSTM) LSTM LSTM最先是被引入来解决梯度小时问题,LSTM在神经网络中是一个特殊的隐藏层,他将时间步t的隐藏层状态更新结构表示如下:
图来源以及LSTM的原理介绍可以参考
LSTM由三个门来控制细胞状态,这三个门分别称为遗忘门、输入门和输出门。
遗忘门:允许记忆单元在有限增长的情况下重置信元状态。遗忘门类似于一个过滤器,决定上一个时间步的信元状态C能否通过输入门:负责根据输入值和遗忘门的输出,来更新信元状态C输出们:更新隐藏单元的值
当然,LSTM的形式也是存在很多变式的,不同的变式在大部分任务上效果都差不多,在一些特殊任务上,一些变式要优于标准的LSTM 利用LSTM进行时间序列预测 一般在时间序列预测上,常用的方法主要有ARIMA之类的统计分析,机器学习中经典的回归分析等
统计分析中(如ARIMA),将时间序列分为三个部分:趋势,季节性和波动,通过统计学算法将序列分离,得到每个部分的模型再相加,但是模型对于序列的方差、均值平稳性以及自相关性都有很高的要求,否则模型偏差会很大。回归分析注重模型偏差和方差,对特征的要求也很高,回归分析中处理非线性问题是一个很艰难的过程。 这里采用LSTM来进行时间序列预测,结构为:
训练数据生成—>隐藏输入层—>LSTM神经层—>隐藏输出层(全连接层)—>结果
当然,也可以根据任务增加隐藏层,LSTM层以及全连接层的数量。
tensorflow中已经为我们准备好了LSTM层的接口,根据需要配置即可。
这里列举几个重要的注意点:
首先要理解什么是序列和序列化数据,比如如果我要预测24小时的天气,那将会有很多种方案,每种方案的序列化都不一样,若模型输出就是24小时的序列,那么输入序列可以是 t-1之前任意长度的序列,输出序列是t > t+23;也可以输入序列为t-24之前的序列来预测t时候的值,进行24次预测;也可以用t-1之前的序列要预测t时,每次预测结果再代入输入中预测t时刻之后的值。总之,每种做法效果不一样,具体问题还需要具体分析;TIME_STEPS参数,可以理解为时间步,就是你需要几个时刻的样本来预测,INPUT_SIZE 为每个样本的维度,如果你的样本数据是一个单一序列,没有其他特征的话,则可设置为1;OUTPUT_SIZE 为输出的维度,就是输出序列的长度;如果输出也是一个序列的话,可以将y的维度设置为[None,TIME_STEPS,OUTPUT_SIZE] import numpy as np import tensorflow as tf import matplotlib.pyplot as plt %matplotlib inline #------------------------------------Generate Data-----------------------------------------------# TIME_STEPS = 20 BATCH_SIZE = 1 INPUT_SIZE = 1 OUTPUT_SIZE = 1 CELL_SIZE = 50 LEARNING_RATE = 0.001 EPOCH = 100 LAYER_NUM =3 # 参数说明:TIME_STEPS:输入序列的时间步,; # INPUT_SIZE:输入序列中每个向量的维度 # BATCH_SIZE:训练的批次 # OUTPUT_SIZE:输出序列的向量维度 # CELL_SIZE:LSTM神经层的细胞数,也是LSTM层的输入和输出维度(这两个维度相同),也即为LSTMCell中的num_units参数; # LEARNING_RATE:tensorflow中optimizer的学习率; # EPOCH:迭代次数或训练次数;; # LAYER_NUM:LSTM神经层的层数。 # #生成训练数据和测试数据 def generate(seq,time_step,output_size): X = [] Y = [] for i in range(len(seq)-time_step-output_size): X.
输出日志到log文件中
nohup sh test.sh>history.log 2>&1 &
数据的搜寻并替换
sed ‘s/要被取代的字串/新的字串/g’ fileName.txt
查看系统盘大小:
df -h
查看目录大小:
du -h
查看最大目录:
du -h -x --max-depth=1
查看进程端口号:
netstat -nalt |grep 9047
查看CPU个数:
#cat /proc/cpuinfo | grep “physical id” | uniq | wc -l
uniq命令:删除重复行;wc –l命令:统计行数*
查看CPU核数:
cat /proc/cpuinfo | grep “cpu cores” | uniq
cpu cores : 4
查看CPU型号:
#cat /proc/cpuinfo | grep ‘model name’ |uniq
model name : Intel® Xeon® CPU E5630 @ 2.
odoo ORM API 基于odoo 12.0
odoo中的模型,一个很重要的特点就是,它即是定义模型的类,又是数据记录的集合,这一特性可以很方便的在模型中直接定义数据记录集的操作。例如赋值、修改、删除、计算等等。这些特性都需要odoo提供的ORM API来实现,具体方式是在函数定义前加上API的装饰器。
常用装饰器 @api.one:表示确定只有一条记录,模型类函数中self代表一条数据集,可直接采用self.<字段名>进行增查改删的操作吗,但是官方不提倡使用api.one装饰器
@api.multi:表示多条记录,此时函数的self代表的是一个数据集,通常可采用 for record in self 来循环对数据集操作,也可以使用self.ensure_one()函数达到api.one的目的。
@api.model:类装饰器,这里的self就不再是数据集,而是类本身,相当于python中的@classmethod,@api.model装饰器不能用于按钮的点击操作逻辑函数,应使用api.multi
@api.depends:用于计算字段,形式为@api.depends(‘field1’,‘field2’…),用于标示哪些字段参与了计算字段的计算,同时函数内计算字段必须被赋值,否则会报错
@api.constraints:用于评估和检查,使用形式同@api.depends,若记录修改时,检查不通过,则不会修改记录
@api.onchange:用于用户在交互时自动更新关联字段,self指的是一条记录,可返回一个报告修改信息字典{‘title’:‘message title’,‘message’:‘message body’}
ORM方法 orm操作数据集 基本方法 <model>.create(values) :增<model>.write(values) :改<model>.unlink():删
这三种模型写入数据的操作是models.Model自带的函数,用户可以根据需要重写该方法 shell命令
启动odoo的shell调试器(需要安装watchdog包),在终端输出以下命令进入shell:odoo-bin shell -d (数据库名) -c /etc/odoo/odoo.conf #ubuntu or debian系统 python odoo-bin shell -d (数据库名) #windows系统 进入shell后,输入命令:>>>self res.users(1,) >>>self._name 'res.users' >>>self.name 'Administrator' shell中的self即为管理员账户,shell中可以通过env函数查询数据集:>>>self.env['res.users'].search([],limit=1)#通过模块名查找,如果不加limit=1,返回结果是一个列表 res.users(1,) >>>self.env['sale.order'].browse()#通过模块名查找 res.users(1,) >>>self.env.ref('base.user_root')#通过外部ID查找 res.users(1,) self.env种包含了如下几个属性: env.cr 当前数据库光标env.user 当前会话用户的记录env.uid 当前会话用户的ID,相当于env.user.idenv.context 会话的上下文不可变字典env.sudo(user) 通过参数指定的用户返回用户所属的环境信息,如果不传参,默认返回管理员账户的环境env.with_context(dict) 可以使用参数中的字典中的值给上下文环境中的值替换env.with_context(key=value……) 同上 事务底层SQL 通过ORM API来执行数据库相关的操作:
self.env.cr.execute(sql) #直接执行sql语句 self.
作者| 猪哥
来源 | 裸睡的猪
第一章主要讲解爬虫相关的知识如:http、网页、爬虫法律等,让大家对爬虫有了一个比较完善的了解和一些题外的知识点。
今天这篇文章将是我们第二章的第一篇,我们从今天开始就正式进入实战阶段,后面将会有更多的实际案例。
爬虫系列文章的第一篇,猪哥便为大家讲解了HTTP原理,很多人好奇:好好的讲爬虫和HTTP有什么关系?其实我们常说的爬虫(也叫网络爬虫)就是使用一些网络协议发起的网络请求,而目前使用最多的网络协议便是HTTP/S网络协议簇。
一、Python有哪些网络库 在真实浏览网页我们是通过鼠标点击网页然后由浏览器帮我们发起网络请求,那在Python中我们又如何发起网络请求的呢?答案当然是库,具体哪些库?猪哥给大家列一下:
Python2: httplib、httplib2、urllib、urllib2、urllib3、requests
Python3: httplib2、urllib、urllib3、requests
Python网络请求库有点多,而且还看见网上还都有用过的,那他们之间有何关系?又该如何选择?
httplib/2:
这是一个Python内置http库,但是它是偏于底层的库,一般不直接用。
而httplib2是一个基于httplib的第三方库,比httplib实现更完整,支持缓存、压缩等功能。
一般这两个库都用不到,如果需要自己 封装网络请求可能会需要用到。
urllib/urllib2/urllib3:
urlliib是一个基于httplib的上层库,而urllib2和urllib3都是第三方库,urllib2相对于urllib增加一些高级功能,如:
HTTP身份验证或Cookie等,在Python3中将urllib2合并到了urllib中。
urllib3提供线程安全连接池和文件post等支持,与urllib及urllib2的关系不大。
requests:
requests库是一个基于urllib/3的第三方网络库,它的特点是功能强大,API优雅。
由上图我们可以看到,对于http客户端python官方文档也推荐我们使用requests库,实际工作中requests库也是使用的比较多的库。
综上所述,我们选择选择requests库作为我们爬虫入门的起点。另外以上的这些库都是同步网络库,如果需要高并发请求的话可以使用异步网络库:aiohttp,这个后面猪哥也会为大家讲解。
二、requests介绍 希望大家永远记住:学任何一门语言,都不要忘记去看看官方文档。也许官方文档不是最好的入门教程,但绝对是最新、最全的教学文档!
1.首页 requests的官方文档(目前已支持中文)链接:http://cn.python-requests.org
源代码地址:https://github.com/kennethreitz/requests
从首页中让HTTP服务人类这几个字中我们便能看出,requests核心宗旨便是让用户使用方便,间接表达了他们设计优雅的理念。
注:PEP 20便是鼎鼎大名的Python之禅。
警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。
2.功能特性 都说requests功能强大,那我们来看看requests到底有哪些功能特性吧:
Keep-Alive & 连接池
国际化域名和 URL
带持久 Cookie 的会话
浏览器式的 SSL 认证
自动内容解码
基本/摘要式的身份认证
优雅的 key/value Cookie
自动解压
Unicode 响应体
HTTP(S) 代理支持
文件分块上传
流下载
连接超时
分块请求
支持 .netrc
requests 完全满足今日 web 的需求。Requests 支持 Python 2.
传一个参数 //html {{aa | filterAa}} //js filters:{ filterAa(aa){ // 这额aa就是过滤器传入的参数 } } 传2个参数 //html {{aa | filterAa(bb)}} //js filters:{ filterAa(aa,bb){ // 这额aa就是过滤器传入的第一个参数 // 这额bb就是过滤器传入的第二个参数 } } 传3个参数 //html {{aa | filterAa(bb,cc)}} //js filters:{ filterAa(aa,bb,cc){ // 这额aa就是过滤器传入的第一个参数 // 这额bb就是过滤器传入的第二个参数 // 这额cc就是过滤器传入的第三个参数 } } 。。。
觉得有帮助的小伙伴右上角点个赞~ 扫描上方二维码关注我的订阅号~
首先发一下kafka安装包
链接:https://pan.baidu.com/s/1zPuA1kdBYp8AdpXwRGjzcw 提取码:sv0v kafka的安装 上传压缩包到虚拟机中 将压缩文件移动到/root/目录:mv kafka_2.12-1.1.0.tgz /root/kafka_2.12-1.1.0.tgz进入 /root/目录:cd root解压:tar zxvf kafka_2.12-1.1.0.tgz重命名:mv kafka_2.12-1.1.0 kafka 编辑 server.properties 文件: vi /root/kafka/config/server.properties在 server.properties 中加入以下代码:listeners=PLAINTEXT://192.168.141.1:9092(一定要用绝对地址) 配置对外开放端口: iptables -I INPUT 1 -p tcp --dport 9092 -j ACCEPT(用阿里云的需要这样配置) kafka的使用 启动服务 (运行 kafka 需要使用 Zookeeper,所以需要先启动一个 Zookeeper 服务器,可以使用 kafka 自带打包和配置好
的 Zookeeper)
进入 kafka 目录:cd /root/kafka启动 Zookeeper 服务器:bin/zookeeper-server-start.sh config/zookeeper.properties打开一个新窗口进入 /root/kafka/目录 cd /root/kafka (启动 kafka、zookeeper 服务都要在此目录)启动 kafka 服务: bin/kafka-server-start.sh config/server.properties &打开一个新窗口,进入/root/kafka 目录: cd /root/kafka创建一个名为“test”的 Topic,只有一个分区和一个备份: bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic
自动包装&自动拆包 Integer 是包装类,与int不是一种数据类型,本不能一起做运算,但是java设计了一种功能叫做自动包装。
从java5.0版本以后开始提供了自动包装功能,可以简化编码
简单理解就是包装类型和基本类型之间可以自动转换类型赋值。
自动包装:将基本类型自动包装为包装类型;
自动拆包:将包装类型自动转化为基本类型。
举个例子:
自动包装 int m = 2; Integer n = m; System.out.println(n); System.out.println(Integer.valueOf(m)); 这里m赋值给n的时候就是把int类型的m自动包装成了Integer类型,实际是调用了Integer类的静态方法valueOf,实际运算就是Integer n = Integer.valueOf(m)
自动拆包 Integer x = 1; int y = x + 1; 这里算x+1时,就把x从Integer转换成了int类型,具体实现就是调用了Integer的valueOf方法,实际的运算是:
x.intValue()+1,这个过程就叫做自动拆包
再看一个例子: Integer a = 1; Integer b = 1; if(a==b) { System.out.println("a=b"); }else { System.out.println("a!=b"); } 先说答案,结果是a=b
已习惯性思维来看好像就是两个数字比较相等,没什么值的思考的。但是a和b其时是两个对象,两个对象比较相等本应该用equals,用==比较其实是比较的地址,Integer对象也是对象,本不能这样比较,但是JVM对它做了处理,编译时把a和b都做了自动拆包,调用了他们的intVlaue方法。所以这里要明白他俩其实不是直接比较的。
另外,两个包装类也同样可以使用equals做比较。
Integer和int的选择:
这两个都是表示数字,有一个区别是int的默认值是0,Integer的默认值是null,0是数字而null却不是。
比如设计一个网站,要用户提供数据,然而用户输了个0,这时你用int怎么判断0是默认值还是用户输入的呢,而用Integer就很明显,只要不是null就是有输入。 一个易犯错误: Integer a = null; if(a==0){ System.out.pringln("a=0"); } 运行结果,第二行会报空指针异常。
这个问题是我刚刚遇到的,a实际是取自数据库,嫌麻烦输入数据的时候有些没有填,所以它的值就是null。开始怎么也想不明白判断相等怎么会报空指针呢!后来终于搞明白了。
a是Integer类型,和数字比较会调用a.intValue()方法,当a是null时当然会报空指针。
当点击自动编写‘提示写操作超时失败’要怎么样才能解决,下面我给大家分享一下!
方法/步骤 首先我们点击操作
选择操作选项
看看箭头所指的几个地方是不是都没打上勾
我们把这几个地方打上勾
再回到主界面,打开要烧写的程序
点击自动
开始擦除,然后是查空
查空完成就自动烧写程序!问题解决了!
步骤阅读 转载于:https://www.cnblogs.com/h2zZhou/p/11152038.html
show index from tbl_name\G;
里面的每个字段信息各代表什么呢?
DROP TABLE IF EXISTS t;
CREATE TABLE t(
a int not null,
b varchar(2000) ,
c int not null,
d int,
e varchar(200),
primary key(a),
key idx_b(b),
key idx_c(c),
key idx_c_b(c,b),
unique key(d),
key idx_e(e(10))
)engine=innodb;
mysql>show index from t;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
InnoDB的锁机制:
数据库使用所是为了支持更好的并发,提供数据的完整性和一致性。InnoDB是一个支持锁的存储引擎,锁的类型有:共享锁(S)、排它锁(X)、意向共享锁(IS)、意向排它锁(IX)。为了支持更好的并发,InnoDB提供了非锁定读:不需要等待访问行上的锁释放,读取行的一个快照。该方法是通过InnoDB的一个特写:MVCC实现的。
InnoDB的锁分类:
Record Lock:行锁:单个行记录上的行锁
Gap Lock:间隙锁,锁定一个范围,但不包括记录本身
Next-Key Lock:Gap+Record Lock,锁定一个范围,并且锁定记录本身
无索引+RC/RR
当对无索引的字段进行更新时(RR级别),通过锁主键的方式,来锁住所有记录,RC级别不会锁所有记录。
构建表及初始化数据:
mysql -uroot -p USE test; DROP TABLE IF EXISTS t_none; CREATE TABLE `t_none` ( `id` int(11) NOT NULL, `mem_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; INSERT INTO t_none VALUES(1,1),(3,3),(5,5),(9,9),(11,11); REPEATABLE-READ(RR)默认级别
Session A
Session B
root@localhost[zjkj]:10:53:18>prompt A>>
PROMPT set to 'A>>'
A>>select @@session.tx_isolation;
root@localhost[(none)]:11:02:58>prompt B>>
PROMPT set to 'B>>'
B>>select @@session.tx_isolation;
A>>begin;
Query OK, 0 rows affected (0.
安装部分就不演示:非常的简单,和其他安装软件一样。
配置cloud1连接虚拟机
只允许SSH登录:
1、user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh
2、aaa
local-user zhangsan password simple zhangsan
local-user zhangsan service-type ssh
local-user zhangsan privilege level 15
3、stelnet server enable 开启ssh服务
ssh user zhangsan authentication-type password 配置ssh用户的认证方式
ssh user zhangsan service-type stelnet
使用secure CRT中的ssh2连接设备
华为交换机基础命令总结:huawei H3C <Huawei>system-view 进入系统模式
[Huawei]sysname A5-24U-5700-TOP 配置设备名称
interface GigabitEthernet 0/0/1 进入接口配置模式
display 显示、查看配置命令
user-interface vty 0 4 进入线路模式
例如:user-interface con 0
authentication-mode password 配置密码验证方式
set authentication password cipher cisco123 设置登录密码
分布式架构的架构稳定性 接上一期架构性能,本期讲架构稳定性
1.服务拆分 服务拆分主要有两个目的:一是为了隔离故障,二是为了重用服务模块。但服务拆分完之后,会引入服务调用间的依赖问题。
2.服务冗余 服务冗余是为了去除单点故障,并可以支持服务的弹性伸缩,以及故障迁移。然而,对于一些有状态的服务来说,冗余这些有状态的服务带来了更高的复杂性。其中一个是弹性伸缩时,需要考虑数据的复制或是重新分片,迁移的时候还要迁移数据到其它机器上。
3.限流降级 当系统实在扛不住压力时,只能通过限流或者功能降级的方式来停掉一部分服务,或是拒绝一部分用户,以确保整个架构不会挂掉。这些技术属于保护措施。
4.高可用架构 通常来说高可用架构是从冗余架构的角度来保障可用性。比如,多租户隔离,灾备多活,或是数据可以在其中复制保持一致性的集群。总之,就是为了不出单点故障。
4.高可用运维 高可用运维指的是 DevOps 中的 CI/CD(持续集成 / 持续部署)。一个良好的运维应该是一条很流畅的软件发布管线,其中做了足够的自动化测试,还可以做相应的灰度发布,以及对线上系统的自动化控制。这样,可以做到“计划内”或是“非计划内”的宕机事件的时长最短。
上述这些技术非常有技术含量,而且需要投入大量的时间和精力。
软件下载链接:
链接:https://pan.baidu.com/s/11-iexIMF5xYXxIMl85Lcrg
提取码:flmf
复制这段内容后打开百度网盘手机App,操作更方便哦
qt.qpa.screen: QXcbConnection: Could not connect to display Could not connect to any X display.
解决方案很简单:
export DISPLAY=':0.0'
如果不行的话则尝试
export DISPLAY=':1.0'或export DISPLAY=':2.0'
至于为何时1.0或2.0或0.0,
可以在终端执行:
echo ${DISPLAY}
显示的是什么配置成什么就行了
Graph Convolutional Neural Networks for Web-Scale Recommender Systems 用于Web级推荐系统的图形卷积神经网络 ABSTRACT Recent advancements in deep neural networks for graph-structured data have led to state-of-the-art performance on recommender system benchmarks. However, making these methods practical and scalable to web-scale recommendation tasks with billions of items and hundreds of millions of users remains a challenge.
Here we describe a large-scale deep recommendation engine that we developed and deployed at Pinterest. We develop a data-efficient Graph Convolutional Network (GCN) algorithm PinSage, which combines efficient random walks and graph convolutions to generate embeddings of nodes (i.
MySQL 最大使用内存 select (@@key_buffer_size+ \ @@innodb_buffer_pool_size+ \ @@tmp_table_size+ \ @@query_cache_size+ \ @@innodb_log_buffer_size+ \ @@max_connections*( \ @@read_buffer_size+ \ @@read_rnd_buffer_size+ \ @@sort_buffer_size+ \ @@join_buffer_size+ \ @@binlog_cache_size+\ @@thread_stack) \ )/1024/1024 as “MYSQL_Service_Max_Mem”; 1、key_buffer_size (MyiSAM)
对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。
如果你使它太大,系统将开始换页并且真的变慢了。严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。
对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M),可通过以下方法查询是否合理
mysql> show status like '%key_read%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Key_read_requests | 8000 | | Key_reads | 5 | +-------------------+-------+ 2 rows in set (0.01 sec) 一共有 Key_read_requests 个索引请求,一共有发生了 Key_reads 次物理IO,
Key_reads/Key_read_requests = 0.
夏天来了,天气突然热起来了,笔记本也发烫了,风扇却还是不紧不慢的的转着。
SpeedFan下载地址:https://speedfan.en.softonic.com/
使用教程:
0、选择芯片:
1、百度经验:https://jingyan.baidu.com/article/c35dbcb024180b8917fcbc6d.html
2、SpeedFan怎么设置cpu风扇调速:https://www.kafan.cn/edu/88029121.html
malloc: void* malloc (size_t size); 这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。
如果开辟成功,则返回一个指向开辟好空间的指针。 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。 如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。 free: free函数用来释放动态开辟的内存。 如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。 如果参数 ptr 是NULL指针,则函数什么事都不做。
malloc和free都声明在 stdlib.h 头文件中。 #include <stdio.h> int main() { //代码1 int num = 0; scanf("%d", &num); int arr[num] = {0}; //代码2 int* ptr = NULL; ptr = (int*)malloc(num*sizeof(int)); if(NULL != ptr)//判断ptr指针是否为空 { int i = 0; for(i=0; i<num; i++) { *(ptr+i) = 0; } } free(ptr);//释放ptr所指向的动态内存 ptr = NULL;//有必要 return 0; } calloc: 原型: void* calloc (size_t num, size_t size); 函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0。 与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。 realloc: realloc函数的出现让动态内存管理更加灵活。 有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时候内存,我 们一定会对内存的大小做灵活的调整。那 realloc 函数就可以做到对动态开辟内存大小的调整。 原型: void* realloc (void* ptr, size_t size); ptr 是要调整的内存地址 size 调整之后新大小 返回值为调整之后的内存起始位置。 这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间。 realloc在调整内存空间的是存在两种情况: 情况1:原有空间之后有足够大的空间
#include <iostream> #include <stdio.h> using namespace std; int IsPairFive(int *number,int length) { if(number==NULL||length<1) return 0; int flag[14]={0}; int NumZero=0; int numOther=0; for(int i=0;i<5;i++) { flag[number[i]]++; if(flag[number[i]]>1&&number[i]>0)return 0; } int k=1; while(flag[k]==0) k++; printf("%d\n",k); int cont=k+5; for(;k<=13&&k<cont;k++) { if(flag[k]==0) NumZero++; else if(flag[k]==1) numOther++; } printf("%d %d %d\n",numOther,flag[0],NumZero); if(NumZero<=flag[0]&&numOther+flag[0]==5) return 1; return 0; } int main() { int *number={0}; if(IsPairFive(number,5)==1) { printf("YES\n"); } else printf("NO\n"); return 0; } 转载于:https://www.cnblogs.com/xiaofeiwang/p/3825013.html
这套笔记是跟着七月在线机器学习中的数学第二期的学习而记录的,主要记一下我再学习机器学习的时候一些概念比较模糊的地方,具体课程参考七月算法官网:
七月
数理统计和参数估计部分
一. 概率与数理统计 首先,看一下概率与统计的关注点
1概率论问问题的方式: 已知总体的所有可能性,求某种事件发生的概率,如图所示:
已知小桶中小球的总数和白球和黑球的个数,从小桶中取球,求取出白球或黑球的概率
2 数理统计问问题的方式(相关资料) 已知总体服从某种分布,抽取样本,根据样本估计总体的分布方式,如图:
现在,我们不知道小桶中有多少个小球,我们从小桶中取出一些小球,根据这些小球中白球黑球的数据,估计小桶中黑球白球的分布情况。
3. 概率统计与机器学习之间的关系: 对于一个有监督的训练模型,如下图所示:
对于一个有监督的学习模型,我们已知一些有标签的样本,通过这些样本,构造出一个模型,来估计未被标记的样本,正如有图所示。
机器学习的训练过程,类似于统计的过程,预测过程,类似于计算概率的过程。
其次,在样本中,每个样本都用其自身的特征和对应的标签,假设每一行表示一个样本,如下图:
其中,每一列对应一个分布。标签也是一个分布。因此,可以基于各个分布的特性来苹果模型和样本
总结下概率统计和机器学习的关系
i. 统计估计的是分布,机器学习训练出来的是模型,模型可能包含了很多分布。
ii.训练与预测过程的一个核心评价指标就是模型的误差
iii. 误差本身就可以是概率的形式,与概率紧密相关
iv. 对误差的不同的定义方式就演化成不同损失函数的定义方式。
3. 协方差:(关于期望方差之类的内容,这里不再说明)
定义 Cov(X,Y) = E{[X-E(X)][Y-E(Y)]} =E(XY)-E(X)E(Y)
协方差评价两个随机变量之间的关系,是两个随机变量具有相同方向变化趋势的度量
Cov(X,Y)>0, 则其变化趋势相同
Cov(X,Y)<0, 其变化趋势相反
Cov(X,Y)=0. X与Y不相关
协方差的上界:|Cov(X,Y)| <=两个变量标准差的乘积
4. 独立与不相关:
不相关,是说明X,Y 没有线性关系,即线性不相关,但是他们有没有非线性关系是不能保证的。
5. 贝叶斯公式的思考
P(A|D) = P(D|A)P(A)/P(D)
P(A|D):在给定条件D的时候A发生的概率,
D为已知的样本,
因此P(A|D)表示给定样本之后,计算分布的参数, 哪组参数取的概率越大,哪组参数就是最有可能被我们估计的那个值。
即: 给定某些样本D,在这些样本中计算结论A1, A2,...An出现的概率,P(Ai|D)。
maxP(Ai|D) = maxP(D|Ai)P(Ai)/P(D) -------> max(P(D|Ai)P(Ai)) //P(D)为常数,样本本身发生的概率
-------> max(P(D|Ai)) //假设在没有任何先验信息的情况下,P(Ai)近似等概率出现
声明:现大部分文章为寻找问题时在网上相互转载,在此博客中做个记录,方便自己也方便有类似问题的朋友,故原出处已不好查到,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明。谢谢。 本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数。
1、建用户:
adduser phpq //新建phpq用户
passwd phpq //给phpq用户设置密码
2、建工作组
groupadd test //新建test工作组
3、新建用户同时增加工作组
useradd -g test phpq //新建phpq用户并增加到test工作组
注::-g 所属组 -d 家目录 -s 所用的SHELL
4、给已有的用户增加工作组
usermod -G groupname username
或者:gpasswd -a user group
5、临时关闭:在/etc/shadow文件中属于该用户的行的第二个字段(密码)前面加上*就可以了。想恢复该用户,去掉*即可。
或者使用如下命令关闭用户账号:
passwd peter –l
重新释放:
passwd peter –u
6、永久性删除用户账号
userdel peter
groupdel peter
usermod –G peter peter (强制删除该用户的主目录和主目录下的所有文件和子目录)
7、从组中删除用户
编辑/etc/group 找到GROUP1那一行,删除 A
或者用命令
gpasswd -d A GROUP
8、显示用户信息
id user
cat /etc/passwd
更详细的用户和用户组的解说请参考
Linux 用户和用户组详细解说
Wndows中Window Management 的设计 是很符合OO思想。 首先每个Window的定义由WNDCLASS结构定义。在WNDCLASS中我们需要给出 Window class name, Window的class style, 以及Wndow Procedure,WNDCLASS还提供了申请 extra class bytes 和extra window byte的能力。这两个空间可以类比的理解为class static fields和 object fields。和一般的class定义一样,WNDCLASS结构定义了Window对象的状态和行为。 这样凡是同类的Window不论它的位置,大小以及窗口属性如何都可以使用同一个WNDCLASS. 而对于行为有所不同的Window我们亦可以通过Sub-classing的方式通过改变其中一些消息 的行为得到所需的效果,这个方式事实上等同于override virtual method了,当然还有super-classing的说法。 每一个WNDCLASS在使用之前必须先注册到Win32 User Module中,随后用户即可使用CreateWindow创建Window实例了,值得注意的是在CreateWindow是我们并不是获取该WNDCLASS结构的指针来说明所使用的WNDCLASS的,而是通过Window class name, 如果将这些API在C#里面重写一下就可以看到一个很熟悉的设计。 class WindowManager { public static void RegisterWindowClass(WindowClass wc); public static IWindow CreateWindow(string windowClassName, CreateWindowParameters params); //... } 没错,Factory method, 事实上我们也正是靠这个方式重用了Common Controls. 这里我将返回的HWND写成IWindow接口,因为我觉得hwnd对于一系列Window function就如同this指针对于成员方法一般。hwnd应该被认为是C函数中的this指针,而不是Window对象的私有数据成员,事实上Window对象的数据封装做的非常到位,没有暴露出一个内部数据结构。 思路断掉了,以后再写。。。 转载于:https://www.cnblogs.com/jonnyyu/archive/2005/08/23/220550.html
在Window上主要有三种方法得到Client Area的一个HDC句柄。
1.在WM_PAINT消息中调用 BeginPaint()方法,BeginPaint方法返回一个当前无效区域的HDC句柄,并把该无效区域设置为有效区域。所谓无效区域就是需要应用程序重新绘制的区域,反之则为有效区域。BeginPaint被调用时同时返回了一个PAINTSTRUCT结构,其中给出了本次重绘的Clip Rectangle,所有在这个rectangle之外的绘制操作都不会显示。值得注意的是Petzold在砖头里面反复强调在WM_PAINT消息处理函数中BeginPaint方法需要和EndPaint方法配对使用,还有BeginPaint中返回的HDC不能缓存起来使用。
2.调用GetDC(hwnd)/ReleaseDC()来获取释放对应Client Rectangle的HDC句柄, 这个句柄没有什么预定义的Clip rectangle, 整个Client Rectangle都可以绘制。但是GetDC()得到的句柄也同样不能缓存起来,也就是说GetDC和ReleaseDC函数要在一个消息处理函数中配对出现。
一个类似的API是GetWindowDC(),它用于获取整个Window的DC,(client area + non-client area)
和GetDC一样必须在一次WndProc执行中释放掉,不能缓存。
3.调用CreateDC方法。。。还没看到,以后再写。
转载于:https://www.cnblogs.com/jonnyyu/archive/2005/08/24/221409.html
r.js 可以打包(可以实现前端文件的压缩与合并).客户端尽量遵循 amd 规范. 推荐使用 requirejs 规范.
requirejs 简单教程:
http://www.runoob.com/w3cnote/requirejs-tutorial-1.html
http://www.runoob.com/w3cnote/requirejs-tutorial-2.html
http://www.requirejs.cn/
多使用已有的轮子.
比如:jquery,underscore等.
underscore.js 简单教程 http://www.css88.com/archives/5443
客户端模块化编写方法
http://www.ruanyifeng.com/blog/2012/11/require_js.html
转载于:https://www.cnblogs.com/daihanlong/p/6220219.html
cmake的常用命令 cmake_minimum_required
message
project
set
add_executable
add_compile_options
add_subdirectory
add_library
target_link_libraries
include_directories
add_definitions
cmake常见变量 PROJECT_BINARY_DIR
PROJECT_SOURCE_DIR
LIBRARY_OUTPUT_PATH
EXECUTABLE_OUTPUT_PATH
见github
cmake中一些预定义变量
PROJECT_SOURCE_DIR 工程的根目录
PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build
CMAKE_INCLUDE_PATH 环境变量,非cmake变量
CMAKE_LIBRARY_PATH 环境变量
CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR target编译目录
使用ADD_SURDIRECTORY(src bin)可以更改此变量的值
SET(EXECUTABLE_OUTPUT_PATH )并不会对此变量有影响,只是改变了最终目标文件的存储路径
CMAKE_CURRENT_LIST_FILE 输出调用这个变量的CMakeLists.txt的完整路径
CMAKE_CURRENT_LIST_LINE 输出这个变量所在的行
CMAKE_MODULE_PATH 定义自己的cmake模块所在的路径
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块
EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH 重新定义目标链接库文件的存放位置
PROJECT_NAME 返回通过PROJECT指令定义的项目名称
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 用来控制IF ELSE语句的书写方式
系统信息
CMAKE_MAJOR_VERSION cmake主版本号,如2.8.6中的2
CMAKE_MINOR_VERSION cmake次版本号,如2.8.6中的8
CMAKE_PATCH_VERSION cmake补丁等级,如2.8.6中的6
CMAKE_SYSTEM 系统名称,例如Linux-2.6.22
CAMKE_SYSTEM_NAME 不包含版本的系统名,如Linux
CMAKE_SYSTEM_VERSION 系统版本,如2.6.22
CMAKE_SYSTEM_PROCESSOR 处理器名称,如i686
UNIX 在所有的类UNIX平台为TRUE,包括OS X和cygwin
Emacs 之查看帮助 Table of Contents 1. Emacs 入门 1.1. 查看简单的帮助1.2. 执行elisp代码 1 Emacs 入门 1.1 查看简单的帮助 C-h f ;;查看函数的文档 (describe-function)C-h k ;;查看某个快捷键对应的命令 (describe-key)C-h w ;;查看某个命令对应的快捷键 (where-is)C-h m ;;查看某个mode的文档 1.2 执行elisp代码 在语句后面C-x C-e (eval-last-sexp)执行 上一条命令M-x eval-buffer 可以执行当前buffer内的elisp代码选中一个 region 后,M-x eval-region 可以执行这个region内的代码 Author: dai
Created: 2016-04-14 Thu 00:41
Emacs 24.5.1 (Org mode 8.2.10)
Validate
转载于:https://www.cnblogs.com/daihanlong/p/5389525.html
有时候编程需要处理一行字符串,包括空格连接起来的一行。直接用cin的话读到空格就会停止。
实用的方法是使用getline函数配个stringstream流操作,简易代码如下。
#include <iostream> #include <sstream> #include <string> using namespace std; int main() { string str; while(getline(cin,str)) { cout<<endl; istringstream get(str); string substring; while(get>>substring) { cout<<substring<<endl; } } return 0; } 上面的程序中,首先使用getline读取一行字符串,然后使用istringstream get(str)将读取的str与get关联,然后就可以循环的从get中读取数据。非常方便。
参考 C++primer 第五版 P288
转载于:https://www.cnblogs.com/xindufresne/p/4703379.html
start from init_mlt_rwlock();
1.初始化mlt表的读写锁。
2.初始化互斥锁Priorty_lock,使rpc线程优先于main函数的thread。
2.5调用init_migrate_ls()函数,将Migrate_ls.state置为1(修改的时候加上互斥锁)
3.得到本地的MDS的id,得到主MDS的id(通过调用conf_get_num()函数)
4.创建添加mds的新线程,线程入口地址是newmdsadd_prc()函数。(ps:如果rpc调用已经存在则无动作,否则是第一次加入mfs,因此创建新线程)
5.摧毁优先锁Priorty_lock(代码中连续两行,
pthread_mutex_lock(&Priorty_lock);
pthread_mutex_unlock(&Priorty_lock);
中间没有语句,没做任何修改,不知道时候我的源码有误?
)
6.对线程初始化,分配空间
7.设置以分离状态启动线程。
8.如果当前id和主id相同,创建新线程,线程入口地址指向setup_kernel_mlt()函数。
9.setup_kernel_mlt函数以读写方式打开getmlt 文件。然后把cmd值,初始为1(表示是生成的主的MDS) 写入getmlt文件。(getmlt文件里到底是什么内容?/proc/fs/spnfs/getmlt) 该函数实际上就是往getmlt文件里写入“1”。
10.调用gen_mlt().生成mlt表?。rrdserver是用来监控负载的服务器。
11.gen_mlt()函数调用mlt_init()对mlt表进行初始化(每台MDS都对应一个mlt表,该函数的作用就是把mlt表的内容都读出来,生成另一个mlt表?如果是第一个MDS,自己生成?)。读出,MLT表的位置,MDS的版本号,数量,然后将加入
MDS监控负载的服务器地址,以及DS上对应在的MDS的ip都分别对应上去,修改。将数据弄完之后,调用
mlt_init(master_id);(mds_state==1的时候表示是主mds)
调用dispatch_dir(dirstr,n%MLT_BUCKET_COUNT)函数,这个函数主要是对Directory进行操作。
12.创建线程,ping_all_tid.这里应该就是我们搭系统的时候一直看到的主MDS一直再ping的样子。
13.当前ID不是主ID的时候。首先调用get_master_ip()函数得到主ID.
14.调用newmdsadd_prog_rpc(master_ip,add_type)。(此函数未找到函数体)
15.如果线程master_ping_test_thread不存在,则创建该线程,入口地址从sub_ping_test_thread()开始执行。
16.调用spnfs_msg_handler(struct spnfs_client *scp, struct spnfs_msg *im)
该函数迎来获取msg的信息,主要是哪种请求操作,是spnfsd_layoutgetget(),spnfsd_layoutcommit(),return
getdeviceiter,getdeviceinfo,move ,setattr,open,close.....etc.
17.调用spnfscb(int fd, short which, void *data) 。这个看不太懂。(程序结构很混乱)
18.mydaemon(int nochdir, int noclose)在父进程和子进程之间创建一个管道文件,当子进程撤销或者往管道里写入“1”的时候,父进程结束等待,否则,父进程将一直等待。
19.release_parent()撤销父进程。
20.read_config()这个函数对应着读取config文件,内容包括条带大小,条带密度,管道文件的目录,等信息。还包括,读取DS的IP地址,端口号,路径DS挂载的目录,保存到DataServers
21.dump_config().输出上面的函数读到的信息,如,Verbosity,条带尺寸,密度,DS数目,,,,
22.do_mounts()。主要做一些挂载的操作。先创建文件 对应 mkdir -p [挂载目录]
mount -t nfs4 192.168.1.27:/ /spnfs/192.168.1.27/ 实现这些操作。
23.Send_invalid_msd(int signum) 读取pipe文件,由pipefspath给出路径,检测是否可以正常读出,atomicio(write, fd, &im, sizeof(im))这个函数上面也出现过,不是太懂,找不到函数原型。
http://my.oschina.net/ilivebox/blog/289670
gulp-nodemon
http://www.zhihu.com/question/32123388?sort=created
使用gulp压缩合并AngularJS项目中js http://hicc.me/minify-concat-angular-js-with-gulp/
转载于:https://www.cnblogs.com/benchan2015/p/4962893.html
Contents
Mathematical AnalysisReal AnalysisFunctional AnalysisMatrix Analysis Mathematical Analysis 1.[2014-08-29] $f$ is uniformly continuous on $[a,b]$, and $\int_a^\infty {f\left( t \right)dt} $ is convergent. Prove that $f\left( x \right) \to 0$ as $x \to \infty $.
2.[2014-09-06] Suppose $f$ is continuous on$[a,b]$ and differentiable in $(a,b)$. If there exists $c \in (a,b)$ s.t. $f'\left( c \right) = 0$, prove that there exists $\zeta \in \left( {a,b} \right)$ s.t. $f'\left( \zeta \right) = \frac{{f\left( \zeta \right) - f\left( a \right)}}{{b - a}}$.
如果你是用Visual Studio自带的打包项目打包了一个Installer,并且生成的.msi和setup.exe安装文件,并且在项目安装系统必备环境中选择了"Visual C++ 2010运行库(x86)",那你一定会发现,点击setup.exe安装以后,如果再次点击setup.exe安装文件,一定会需要再次安装C++运行环境,好像每次都不能通过C++已安装的前提条件。
原因是,居然是微软的C++运行环境产品Product Code改了!
解决方案如下
找到这个文件
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\vcredist_x86\product.xml 查找到里面的这一段 <InstallChecks> <MsiProductCheck Property="VCRedistInstalled" Product="{6EE91C1A-A2E7-38CD-AEBB-3B900A4D8868}"/> </InstallChecks> 把里面的Product改成 <InstallChecks> <MsiProductCheck Property="VCRedistInstalled" Product="{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}"/> </InstallChecks> 转载于:https://www.cnblogs.com/vanpan/archive/2012/09/01/3583038.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ceshi</title> <script type="text/javascript" src=".\build\three.js"></script> <script src=".\examples\js\controls\TrackballControls.js"></script> <script src=".\examples\js\controls\DragControls.js"></script> <style> body { margin: 0; overflow: hidden; } </style> </head> <body> <!-- 作为Three.js渲染器输出元素 --> <div id="WebGL-output"> </div> <!-- 第一个 Three.js 样例代码 --> <script type="text/javascript"> var cube = new Array(100); var rotx = new Array(100); var roty = new Array(100); var rotz = new Array(100); var camera, scene, renderer; var controls; var objects = []; var fov = 45; var near = 0.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Diagnostics; using System.Windows.Forms; namespace WindowsFormsApplication3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Process[] ps = Process.GetProcessesByName("chrome"); if (ps.Length > 0) { foreach (Process p in ps) p.Kill(); } } } } 转载于:https://www.cnblogs.com/tiandsp/p/7440455.html
#include <iostream> #include <string> #include <set> using namespace std; int main() { string name[]={"tian","dsp","sp","ti"}; set<string> setname; for (int i=0;i<4;i++) setname.insert(name[i]); set<string>::iterator it; for (it=setname.begin();it!=setname.end();it++) cout<<*it<<" "; it=setname.find("dsp"); cout<<endl; cout<<*it<<endl; setname.erase(it); for (it=setname.begin();it!=setname.end();it++) cout<<*it<<" "; cout<<endl<<setname.size()<<endl<<endl; for (int i=0;i<4;i++) if (setname.count(name[i])>0) cout<<name[i]<<" in set"<<endl; else cout<<name[i]<<" not in set"<<endl; setname.clear(); if (setname.empty()) cout<<"empty"<<endl; system("pause"); return 0; } 转载于:https://www.cnblogs.com/tiandsp/archive/2012/07/26/2610272.html
clear all; close all; clc; step=0.1; %迭代步长 num=15; %数据个数 k=100; %迭代次数 set=[ 0.4 0.05 1; - 0.2 0.75 1; 0.5 0.1 1; - 0.1 0.7 1; 0.3 0.2 1; - 0.15 0.9 1; 0 0.8 1; 0.4 0.3 1; -0.2 0.87 1; 0.4 0.1 1; -0.2 0.9 1; -0.2 0.4 1; -0.1 0.4 1; 0.3 0.9 1; -0.5 0 1]; for i=1:num plot(set(i,1),set(i,2),'ro'); hold on; end axis([-0.5 0.5 0 1]); %axis([-0.