IDEA常用快捷键以及使用快捷键生成各种循环

常用快捷键: Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件 Ctrl+[ OR ],可以跑到大括号的开头与结尾 Ctrl+F12,可以显示当前文件的结构 Ctrl+F7,可以查询当前元素在当前文件中的引用,然后按 F3 可以选择 Ctrl+N,可以快速打开类 Ctrl+Shift+N,可以快速打开文件 Alt+Q,可以看到当前方法的声明 Ctrl+P,可以显示参数信息 Ctrl+Shift+Insert,可以选择剪贴板内容并插入 Alt+Insert,可以生成构造器/Getter/Setter等(很常用的一个快捷键) Ctrl+Alt+V,可以引入变量。例如:new String(); 自动导入变量定义 Ctrl+Alt+T,可以把代码包在一个块内,例如:try/catch Ctrl+Enter,导入包,自动修正 Ctrl+Alt+L,格式化代码 Ctrl+Alt+I,将选中的代码进行自动缩进编排,这个功能在编辑 JSP 文件时也可以工作 Ctrl+Alt+O,优化导入的类和包 Ctrl+R,替换文本 Ctrl+F,查找文本 Ctrl+Shift+Space,自动补全代码 Ctrl+空格,代码提示(与系统输入法快捷键冲突) Ctrl+Shift+Alt+N,查找类中的方法或变量 Alt+Shift+C,最近的更改 Alt+Shift+Up/Down,上/下移一行 Shift+F6,重构 – 重命名 Ctrl+X,删除行 Ctrl+D,复制行 Ctrl+/或Ctrl+Shift+/,注释(//或者/**/) Ctrl+J,自动代码(例如:serr) Ctrl+Alt+J,用动态模板环绕 Ctrl+H,显示类结构图(类的继承层次) Ctrl+Q,显示注释文档 Alt+F1,查找代码所在位置 Alt+1,快速打开或隐藏工程面板 Ctrl+Alt+left/right,返回至上次浏览的位置 Alt+left/right,切换代码视图 Alt+Up/Down,在方法间快速移动定位 Ctrl+Shift+Up/Down,向上/下移动语句 F2 或 Shift+F2,高亮错误或警告快速定位 Tab,代码标签输入完成后,按 Tab,生成代码 Ctrl+Shift+F7,高亮显示所有该文本,按 Esc 高亮消失 Alt+F3,逐个往下查找相同文本,并高亮显示 Ctrl+Up/Down,光标中转到第一行或最后一行下 Ctrl+B/Ctrl+Click,快速打开光标处的类或方法(跳转到定义处) Ctrl+Alt+B,跳转到方法实现处 Ctrl+Shift+Backspace,跳转到上次编辑的地方 Ctrl+O,重写方法

将labelme标记的数据转为coco格式

将labelme标记的数据转为coco格式 将labelme标记的数据转为coco格式 这次转化主要是为了使用官方的mask_rcnn源码。 coco数据集主要是images,categories,annotations(数据格式都是list) coco是把所有图片的信息都整合在一起了,成了一个dict images:主要有height,width,id,file_name#id是图片id categories:主要有supercategory,id,name#id是category的id annotations:主要有segmentation,iscrowd,image_id,bbox,area,category_id,id 要注意在annotations里id之间的关系 coco的格式是 { images:[{height,width,id,file_name}, {height,width,id,file_name}…] categories:[{supercategory,id,name},{supercategory,id,name}…] annotations:[{segmentation,iscrowd,image_id,bbox,area,category_id,id},{segmentation,iscrowd,image_id,bbox,area,category_id,id}] 转为coco格式 import numpy as np import json import glob class MyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, np.integer): return int(obj) elif isinstance(obj, np.floating): return float(obj) elif isinstance(obj, np.ndarray): return obj.tolist() else: return super(MyEncoder, self).default(obj) class tococo(object): def __init__(self,jsonfile,save_path): self.images = [] self.categories = [] self.annotations = [] self.jsonfile = jsonfile self.save_path = save_path#保存json的路径 self.class_ids = {"

matplotlib绘制饼图

Python数据可视化中在用matplotlib解决问题的时候,通常会遇到以下一些问题: 1.离散型数据都有哪些可用的可视化方法 2.数值型的单变量可用哪些图形展示 3.多维数据之间的图形展现 4.如何将多个图形绘制到一个画框内 下面首先教大家如何画饼图: 代码: # 饼图的绘制 # 导入第三方模块 import matplotlib.pyplot as plt # 构造数据 edu = [0.2515,0.3724,0.3336,0.0368,0.0057] labels = ['中专','大专','本科','硕士','其他'] # 绘制饼图 plt.pie(x = edu, # 绘图数据 labels=labels, # 添加教育水平标签 autopct='%.1f%%' # 设置百分比的格式,这里保留一位小数 ) # 添加图标题 plt.title('失信用户的教育水平分布') # 显示图形 plt.show() 结果: 图中是一个不加任何修饰的饼图,那么如何修饰饼图呢? code: # 添加修饰的饼图 explode = [0,0.1,0,0,0] # 生成数据,用于突出显示大专学历人群 colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定义颜色 # 中文乱码和坐标轴负号的处理 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False # 将横、纵坐标轴标准化处理,确保饼图是一个正圆,否则为椭圆 plt.axes(aspect='equal') # 绘制饼图

在vue中使用高德地图(异步引入方式)

问题来源 项目需要是使用到地图,并不是所有页面都用到,所以采用异步加载当时引入地图 开始 在vue项目目录下创建plugins文件夹,并在里面创建amap.js 文件 /* * 异步创建script标签 */ export default function MapLoader (key) { return new Promise((resolve, reject) => { if (window.AMap) { resolve(window.AMap) } else { var script = document.createElement('script') script.type = 'text/javascript' script.async = true script.src = 'http://webapi.amap.com/maps?v=1.3&callback=initAMap&key=' + key script.onerror = reject document.head.appendChild(script) } window.initAMap = () => { resolve(window.AMap) } }) } – 使用 <template> <div class="test"> <div id="container" style="height:300px;width:300px;"></div> </div> </template> <script> import MapLoader from '@/plugins/amap.

python 之 __new__ 方法理解

python的new方法 使用场景不同效果也不一样 一种是指定元类时候, metaclass=MyType 类型 这种方式 在解释器执行到 metaclass=CrawlerProxyMetaclass 的时候, __new__方法就开始执行! 这里的 __new__方法是用来创建类对象的 class CrawlerProxyMetaclass(type): def __new__(cls, classname, parentclass, attrs): attrs['__crawl_method__'] = [] print('in method new ') count = 0 for key, value in attrs.items(): if key.startswith('crawl_'): attrs['__crawl_method__'].append(key) count += 1 attrs['__crawl_method_count__'] = count return super().__new__(cls, classname, parentclass, attrs) #return type.__new__(cls, classname, parentclass, attrs) 一种普通普通的继承关系 调用父类的__new__方法 这里的__new__方法是用来创建对象实例的 创建对象的时候才会被调用 先看object的 __new__方法 @staticmethod # known case of __new__ def __new__(cls, *more): # known special case of object.

[OpenCV实战]31 使用OpenCV将一个三角形仿射变换到另一个三角形

目录 1 什么是仿射变换? 2 使用OpenCV进行三角形仿射变换 2.1 定义输入和输出 2.2 计算边界框 2.3 裁剪图像和更改坐标 2.4 计算仿射变换矩形 2.5 应用仿射变换到三角形 2.6 屏蔽三角形外的像素 3 代码 4 参考 在本文中,我们会看到如何将一个三角形仿射变换到另一个三角形。在图形学的研究中,研究者常常进行三角形之间的变换操作,因为任意的3D表面都可以用多个三角形去近似表示。同样的,图像也可以分解成多个三角形来表示。但是在OpenCV中并没有直接将三角形仿射变换成另一个三角形的函数。本教程将逐步说明如何将下图中左图中的三角形转换为右图。 在我们深入研究代码之前,我们需要了解仿射变换是什么。 1 什么是仿射变换? 仿射变换是将一个3个点的点集(即三角形)来转换到任意3个点另一点集的最简单的方法。它包含平移(移动),缩放,旋转和裁剪等操作。下图说明了如何使用仿射变换来改变正方形的形状。请注意,使用仿射变换,您可以在任何方向和比例下将正方形的形状更改为平行四边形。然而,仿射变换不够灵活,无法将方形变换为任意四边形。换句话说,在仿射变换之后,平行线继续平行。 在OpenCV中,仿射变换可以用一个2×3的矩阵表示,这个矩阵的前两列表示旋转、缩放、裁剪操作,最后一列表示平移操作。如下公式所示: 给定一点,上面的仿射变换使用下面给出的等式得到点: 2 使用OpenCV进行三角形仿射变换 我们现在知道,要将三角形变形到另一个三角形,我们将需要使用仿射变换。在OpenCV中,warpAffine函数允许您对图像应用仿射变换,但不能对图像内的三角形区域应用仿射变换。 为了克服这个限制,我们在源三角形周围找到一个边界框,并从源图像中裁剪出矩形区域。然后,我们将仿射变换应用于裁剪图像以获得输出图像。前一步是至关重要的,因为它允许我们将仿射变换应用于图像的某一区域,从而提高计算性能。最后,我们通过用白色填充输出三角形内的像素来创建三角形掩模。与输出图像相乘时,此掩模将三角形外部的所有像素变为黑色,同时保留三角形内所有像素的颜色。在我们进入细节之前,让我们读入输入和输出图像,并定义输入和输出三角形。对于本教程,我们的输出图像只是白色,但如果您愿意,可以读取另一个图像。 2.1 定义输入和输出 我们现在需要定义输入图像和输出图像,以及输入输出三角形坐标。我们已准备好完成将输入三角形内的所有像素转换为输出三角形所需的步骤。输入输出设定代码如下: C++: // Read input image and convert to float Mat img1 = imread("robot.jpg"); img1.convertTo(img1, CV_32FC3, 1/255.0); // Output image is set to white Mat imgOut = Mat::ones(imgIn.size(), imgIn.type()); imgOut = Scalar(1.0,1.0,1.0); // Input triangle vector <Point2f> tri1; tri1.

pymysql.err.OperationalError: (1040, u'Too many connections')

本文适用linux系统下的mysql 适用问题:程序连接mysql,且有正常close连接。但是某个时刻报错1040, u’Too many connections’ 产生的原因:客户端程序close,但是mysql依然保持连接,只是连接处于睡眠状态。默认mysql保持连接8小时,超过8小时后连接关闭 问题查看: 连接数据库 mysql -u xxx -p 查看最大连接数和使用连接数 show variables like ‘max_connections’; 显示214,默认保留一个连接给管理员,所以最大连接数为215 show global status like ‘Max_used_connections’; 显示215,当前连接和程序连接 show processlist 可以看到程序不在运行但是有很多程序的连接依然存在 show status like ‘Threads%’; Threads_connected | 57 这个数值指的是打开的连接数; Threads_running | 4 这个数值指的是激活的连接数 从上面可以确定,mysql存在着大量的未激活连接 解决方法: 一、治标法: 重启mysql: service mysql stop service mysql start 二、治本法: 1、修改mysql数据库的连接的保持时间(不推荐) 修改/etc/mysql/my.cnf中[mysqld]下增加 interactive_timeout=600 wait_timeout=600 网上其他教程为连接数据库后修改全局变量,但是出现问题为每次重启数据库,mysql读取配置文件后,设置的值重新设为默认值 2、连接池 3、客户端程序设置连接(我的程序并没有这种设置,唉)

Windows不能在本地计算机启动VMware Workstation Server

vmware workstation server 服务无法启动 当启动windows服务vmware workstation server 时,提示: Windows不能在本地计算机启动VMware Workstation Server,有关更多信息,查阅系统事件日志,如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码-1。 1、进入磁盘C的C:\ProgramData\VMware\hostd目录 2、找到datastores.xml文件删除 现在再重新启动下,应该就OK了。 关注个人公众号【Java软件编程之家】,免费电子书送你,还有完整Docker、ELK、Jenkins相关学习资料

:before和:after的使用方法

伪元素可以让我们很方便的加入一个样式,比如在字体前加一个icon,或者加一个下换线,可以不占一个元素的位置,使用起来也很方便,现在介绍一下使用的方法。 注意::before和:after中的content是必加项 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .test:before { content: "《"; color:red } .test:after { content: "》"; color:red } </style> </head> <body> <div class="test">乔布斯自传</div> </body> </html> 首先我们自定义一个div的标签,然后添加类名,在样式中为 .test:before { content:"《" color:red } .test:after{ content:"》" color:red } 就会在前后出现一个书名号。 然后我们就会在这个elements中看到在元素的上下文中分别有一个::fefore和::after,注意是它没有在div的外边而是在元素的里面,它默认的是 d i s p l y : i n l i n e − b l o c k ( 但 是 我 们 尽 量 给 它 加 上 ) \color{red}{disply:inline-block(但是我们尽量给它加上)} disply:inline−block(但是我们尽量给它加上) 所以是 《 乔 布 斯 传 》 \color{red}{《乔布斯传》} 《乔布斯传》 这样显示。

LaTex 自动化工具——超连接,交叉引用,跳转

文章目录 电子文档与超链接 电子文档与超链接 hyperref宏包可算是LaTeX最为复杂的宏包之一,它提供了大量的选项和命令,完成各种设置和功能,这里主要记录以PDF格式输出时,hyperref有关标签和超链接的一些最基本的功能和设置。 hyperref最基本的用法非常简单,就是直接调用此宏包: \usepackage{hyperef} 如果使用ctex宏包或文档类,则可以加hyperef选项,这样啊ctex宏包会自动根据编码和编译方式选择合适的选项,避免出现乱码: \documentclass[hyperref,UTF8]{ctexart} 引入hyperref后再编译文档时,会根据章节结构,自动生成目录结构的PDF文档标签。同时,正文中的目录和所有交叉引用,都会自动成为超链接,可以用鼠标点击跳转到引用位置。要得到正确的PDF标签,也应至少表一两遍文档。 除了直接加在 \usepackage ,也可以使用 \hypersetup 命令单独设置。 hyperref 的选项大多使用<选项>=<值>的方式设置,如果是布尔类型的真假值选项(true或false),通常可以省略为真的值,常见选项如下: 选项类型默认值说明colorlinks布尔false超链接用彩色显示bookmarks布尔true生成PDF目录书签bookmarksopen布尔false在PDF阅读器中自动打开书签bookmarksnumbered布尔false目录书签带编号pdfborder数 数 数0 0 1当colorlink为假时,超链接由彩色边框包围(不会被打印)。默认值表示1pt宽的边框,可以设置为0 0 0 表示没有边框。pdfpagemode文本在PDF阅读器中的页面显示方式,常用值是FullScreen,表示全屏显示pdfstartview文本Fit在PDF阅读器中的页面缩放大小,默认值Fit表示“适合页面”;常用取值有适合宽度FitH,适合高度FitVpdftitle文本文档标题,会在PDF文档属性中显示pdfauthor文本文档作者,会在PDF文档属性中显示pdfsubject文本文档主题,会在PDF文档属性中显示pdfkeywords文本文档关键字,会在PDF文档属性中显示 除此之外,可以用 \url 命令输出URL地址,同时也具有超链接的功能。与排版纯文本不同,找 \url 命令的参数中,网址允许使用合法符号直接输入,并且默认以打字机字体输出,如果URL地址不需要超链接的效果,可以改用 \nolinkurl 命令。 \href{}{文字} 命令可以用来使文字产生指向URL地址的超链接效果。 \hyperref[<标签>]{<文字>} 命令可以用来产生使文字执行标签的超链接效果,这里方括号中的标签与 \ref 使用的标签相同,不能省略。 \hypertarget{<名称>}{<文字>} 用来给文字定义带有名称的链接点,在文档的其他地方,则可以使用命令 \hyperlink{<名称>}{<文字>} 让另一段文字链接到指定名称的连接点。

多数据提交和还原-前端解决方案

业务场景: 表单页面提交数据保存再次打开此页面请求之前保存的数据,编辑保存 问题: 数据量太大了,有几百个输入框,还有单选,多选,文本域,下拉选项等,一值对应一字段不大可行 解决方案: 对于额外用途的数据(不仅仅在此页面展示),需要和后端定义明确的字段仅在当前页面展示的数据,用 对象转字符串 保存,对象用于存储只在当页展示的数据 具体实现方法(以vue为例): 原数据生产方法:用于返回一个json对象,在数据还原的时候,能找到在页面中所处的位置 function createOriginData (num) { const data = {} for (let i = 0; i <= num; i++) { data[i] = '' } return data } 数据格式: data () { return { formVal: { // 不需在在此定义,比如直接在页面通过 formVal.xxx 赋值的操作 confirmStr: '', // 和后台明确定义的数据,在其他地方有用 tmpStr: '', // 特殊情况需要定义的数据,防止页面报错 tmpArr: [], // 用于页面的数组系列的数据 createObj: createOriginData(10), // 用于仅在当页展示的数据 } } } html: // 可以开始不在formVal设置默认值 <input v-model="

阻止element组件中的<el-input/>的粘贴功能(转)

需求: 阻止element组件中的<el-input/>的粘贴功能 实现思路: <el-input/>组件是由外层<div>和内层的<input>组成的, 根据浏览器的事件传递机制(先捕获,后冒泡): 粘贴的时候会先执行绑定在外层div上的paste事件捕获方法, 然后再到内层的input, 因此可以在组件上捕获监听paste事件, 并阻止向下传播即可 代码实现: <!-- handlePaste方法可以随意写 --> <el-input v-model="input" placeholder="请输入内容" @paste.native.capture.prevent="handlePaste"> </el-input> 事件修饰符说明: native: 表明这个是dom的原生事件,如果不加native, vue会认为paste是一个自定义事件,必须要在组件内手动触发, 那么在粘贴的时候自然就不会触发了capture: 表明这个方法在捕获阶段执行,默认为冒泡执行,参考addEventListener方法中的useCapture参数prevent: 相当于event.preventDefault阻止默认行为, 同时也会阻止事件的向下传递和向上冒泡 转载于:https://www.jianshu.com/p/4d9d83fed298; https://www.jianshu.com/p/4d9d83fed298 转载于:https://www.cnblogs.com/wilsunson/p/10901225.html

arm指令__attribute__((at(addr)))的应用

假如程序设定的起始地址为0,const uint32_t VALID_DATA __attribute__ ((at(0x00010000))) = 0xAABBCCDD;那么你生成的程序的bin文件或者hex文件的大小至少要大于0x10000,并且你从flash的0x2000这个位置下载bin文件,那么你就会在flash的0x12000这个位置读到0xAABBCCDD;至于const的地址小于程序设置的起始地址的时候,生成的bin文件会报错;

在DataFrame中新建列赋值后全部为NaN的问题释疑

在pandas中,有时候我们对一个df以如下方式新创建一个列,然后用一个Series赋值给新建的列,但是发现得到的新列的值全部为NaN,这是什么原因呢? df['newColumn']=df_other['otherColumn'] 注意以上赋值方式中,等号右边为一个Series,这时就需要考虑这个Series的index和df的index是否一致,如果不一致,那么就会造成在不一致的索引上的值全部为NaN,所以这个问题就是由Series赋值,索引不一致造成的。因为Series本身就带有索引,赋值时,还会同时按顺序进行两者的索引匹配,只有索引匹配上的行才会成功赋值,而没有匹配上的就会为NaN。 当我们不想要这种匹配,只想直接把df_other['otherColumn']的值赋给df['newColumn']时,只需去掉索引即可,可以通过list(df_other['otherColumn'])或者df_other['otherColumn'].values等方式进行转化,这样就可以避免这个问题。

protobuf(C++)的使用(windows)

注:这里说的是C++版本的使用。 1.前言 官网:https://github.com/protocolbuffers/protobuf/releases protobuf托管在github,在windows上使用需要自己编译,编译需要借助cmake。大概流程是: a.下载源码-->b.cmake生成vs工程-->c.vs编译(所需lib文件和protoc.exe)-->d.自己的.proto文件生成对应的.h和.cc文件-->e.引入自己的工程使用 还有注意vs的版本和protobuf的版本,编译不成功,大概率是版本的问题。 2.准备(下载源码和工具) (1)protobuf 最新到3.8.0版了,下载的时候,在该版本的最下面有个“尖”号(Assets),展开就看到了: 说明一下:我要使用protobuf的工程是vs2013,我下载的是3.2.0版本。也试过3.7.1版本用cmake生成失败了,下面再说。 (2)cmake 官网:https://cmake.org/download/ 官网下载太慢了,还不如到网上随便找一个。 3.生成vs工程 打开cmake: 选择protobuf下的cmake路径为源码路径,新建文件夹protobuf_win为生成路径。 点击Configure弹出选择vs版本的对话框,(我选vs2013生成成功了) 4.编译protobuf 打开vs工程: 分别编译 libprotobuf和protoc这两个项目: 已debug为例,生成一下文件:libprotobufd.lib、libprotocd.lib和protoc.exe 5.生成***.cc和****.h文件 protobuf使用需要先把消息定义好,然后编译成自己的API,加入到自己的工程中使用。 (1)先编写myproto.proto文件: https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ syntax = "proto2"; package mypb; message helloworld { required int32 id = 1; required string str = 2; optional int32 opt=3; } package 名字叫做 mypb,定义了一个消息 helloworld,该消息有三个成员,类型为 int32 的 id,另一个为类型为 string 的成员 str。opt 是一个可选的成员,即消息中可以不包含该成员。 (2)编译myproto.proto文件: 可以使用dos窗口,进入到当前目录,执行: --cpp_out是输出路径(./为当前路径),其他选项可以使用protoc --help查看 生成文件如下: 6.使用例子 新建工程protobuf,将libprotobufd.lib、libprotocd.lib进入自己的工程,注意这是静态编译的库(也可以在cmake的时候选择动态编译),所以在本工程需要选择静态 另外需要将3.2.0版本(根据自己编译的版本)的源码下的google文件夹引入到自己的工程,在myproto.pb.h中会找这些文件。 #include "stdafx.h" #include <iostream> #include <fstream> #include "

ECharts关系图,节点可拖拽,添加节点和边的点击事件

最近在做一个neo4j前端可视化的任务,对比了ECharts.js,Cytoscape.js和D3.js几个前端可视化工具,最终选择了ECharts.js,百度的一款开源工具,简单好用,比较容易上手。后台采用Python的Django框架,主要用于接收前端的请求,从neo4j数据库获取数据,并将数据传给前端服务器展示。这里只展示ECharts的用法以及自己的一些总结,为以后打下一个基础。首先展示下效果图: EChart.js下载:https://www.echartsjs.com/download.html 点击进入下载页面后,选择一个版本,点击进入相应的github地址,在点击source code(zip),下载完成后将其解压,在dist文件夹下又一个echarts.js文件,这个文件就是我们需要的,将其复制到项目中相应的js目录中即可。 由于这里采用的布局是force,不是通过坐标进行节点的生成,所以不能参考网上其他的采用坐标的节点拖拽。对此百度了许多,最后找到了一种合适的方法。我们需要对源码进行一些修改,只需要注释掉一行代码即可进行拖拽,这个方法主要参考另一位作者:https://blog.csdn.net/qq_38880340/article/details/85683322。打开源码,大概在1317行,将下图所示注释掉之后,选择保存即可。 我们在echarts.js同级目录下新建一个html文件,在head中引入echarts.js,在body中设置一个div,一定要设置这个div的宽和高,不然不会显示出关系图,完整代码如下所示。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Echarts测试</title> <script src="echarts.js"></script> </head> <body> <div id="chart1" style="width: 1600px; height: 900px; margin: 0 auto; border: 2px solid #FF0000;"></div> </body> <script type="text/javascript"> var entityRelation = [{"r": {"name": "推荐食谱"}, "m": {"name": "绿豆薏米饭"}}, {"r": {"name": "推荐食谱"}, "m": {"name": "姜丝萝卜汤"}}, {"r": {"name": "推荐食谱"}, "m": {"name": "葱蒜粥"}}, {"r": {"name": "推荐食谱"}, "m": {"name": "薏米莲子粥"}}, {"r": {"name": "推荐食谱"}, "m": {"name": "赤小豆粥"}}, {"r": {"name": "

linux系统清空日志/var/log/messages

这里先介绍如何恢复被误删除的日志文件: Linux新手容易犯的一个错误是把日志文件给直接删除,而不是删除日志文件的内容。但是直接删除日志文件往往导致新产生的日志记录无法被写入到日志文件中(因为它已经被删除了),而仅仅重新新建(touch)同样名字的文件是解决不了问题的。 首先,在以root用户执行如下lsof命令,查询打开/var/log/messages文件的进程的进程ID(PID): lsof | grep messages 得到rsyslogd 544 syslog 7w REG 8,1 214641 134422 /var/log/messages 从上面命令输出可以看到,这个打开/var/log/messages文件的进程的PID是544,文件/var/log/messages的文件描述符(FD)号是7,根据上述的PID和FD,可以在/proc找到对应的文件: ls -al /proc/544/fd/7 得到l-wx------ 1 root root 64 2012-07-14 14:48 7 -> /var/log/messages 将文件/proc/544/fd/7拷贝到/var/log/messages cp /proc/544/fd/7 /var/log/messages 然后重新启动rsyslog服务即可恢复被误删除的日志文件,并且新的日志记录能够继续被写入日志文件,以root用户运行service命令: service rsyslog restart 最后清空日志文件: cat /dev/null>/var/log/messages 下面介绍正确清空linux系统日志/var/log/messages的方法: 查询打开/var/log/messages文件的进程的进程ID(PID): lsof | grep messages 得到输出: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsyslogd 1455 root 4w REG 8,6 1299113404 2686 messages abrt-dump 1932 root 4r REG 8,6 1299113404 2686 messages 结束生成messages的进程:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte问题的解决方案

近期使用python处理数据,使用python3打开一个txt文件 file1 = open("wenjianming.txt",'r') data = file1.readlines() i = "" for i in data: print(i) 报错如下: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte 是编码的问题,所以将编码改成gbk试了一下 file1 = open("31省市居民家庭消费水平-city.txt",'r','gbk') 报错如下: TypeError: an integer is required (got type str) 又继续百度,查了一下open函数: open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 也就是说在encoding参数前面还得有个buffering,参数值要是个整数,所以改成以下形式: file1 = open("31省市居民家庭消费水平-city.txt",'r',1,'gbk') data = file1.readlines() i = "" for i in data: print(i) 就能够正常输出汉字了

minitools在win10上安装失败

问题描述:win10在安装minitools时会出现失败的情况,这时会提示你去手动安装fastboot驱动。 原 因:这种情况是由于微软出于安全因素强制驱动程序签名导致的。(硬件开发商将自己的硬件设备和相应的驱动程序交给微软的实验室,由实验室对其进行测试,测试合格后实验室将在其驱动程序中添加数字签名。由于数字签名是针对整个驱动程序的所有软件进行的,所以在完成签名后再对驱动程序进行任何更改都会导致签名无效,这样就避免了在驱动程序中添加恶意代码传播病毒等恶意程序的可能性。 ) 解决办法: 暂时禁止/永久禁止(我没试过,不建议永久禁止,存在安全风险。):https://jingyan.baidu.com/article/cd4c2979018215756e6e60ff.html

用matlab实现kpca(核主成分分析法)

核主成分分析法是对非线性的高维数据进行降维的一种方法,理论部分这里就不再介绍了,我是在300×12维的数据上进行降维的,代码如下: data=Untitled; [Xrow, Xcol] = size(data); % Xrow:样本个数 Xcol:样本属性个数 %%数据预处理 Xmean = mean(data); % 求原始数据的均值 Xstd = std(data); % 求原始数据的方差 X0 = (data-ones(Xrow,1)*Xmean) ./ (ones(Xrow,1)*Xstd); % 标准阵X0,标准化为均值0,方差1; c = 20000; %此参数可调 %%求核矩阵 for i = 1 : Xrow for j = 1 : Xrow %k(i,j)=kernel(data(i,:),data(j,:),2,6); K(i,j) = exp(-(norm(X0(i,:) - X0(j,:)))^2/c);%求核矩阵,采用径向基核函数,参数c end end %%中心化矩阵 unit = (1/Xrow) * ones(Xrow, Xrow); Kp = K - unit*K - K*unit + unit*K*unit; % 中心化矩阵 %%特征值分解 [eigenvector, eigenvalue] = eig(Kp); % 求协方差矩阵的特征向量(eigenvector)和特征值(eigenvalue) %单位化特征向量 for m =1 : 300 for n =1 : 300 Normvector(n,m) = eigenvector(n,m)/sum(eigenvector(:,m)); end end eigenvalue_vec = real(diag(eigenvalue)); %将特征值矩阵转换为向量 [eigenvalue_sort, index] = sort(eigenvalue_vec, 'descend'); % 特征值按降序排列,eigenvalue_sort是排列后的数组,index是序号 pcIndex = []; % 记录主元所在特征值向量中的序号 pcn = 3; for k = 1 : pcn % 特征值个数 pcIndex(k) = index(k); % 保存主元序号 end for i = 1 : pcn pc_vector(i) = eigenvalue_vec(pcIndex(i)); % 主元向量 P(:, i) = Normvector(:, pcIndex(i)); % 主元所对应的特征向量(负荷向量) end project_invectors = k*P; pc_vector2 = diag(pc_vector); % 构建主元对角阵 %绘制三维散点图 x=project_invectors(:,1); y=project_invectors(:,2); z=project_invectors(:,3); scatter3(x,y,z,'filled') 因为想实现三维可视化,所以直接取了三个主元。也可以通过求主元贡献率的方法来选取主元个数。最后得到的三维散点图

[坑]WebView之shouldOverrideUrlLoading

WebView 中 shouldOverrideUrlLoading 的作用 回调的时机 根据观察,当页面链接发生变化时,从一个页面变成了另一个页面,就会回调这个。而页面里面加载js,css,图片等内容的时候,不会回调此链接。前提是你的返回值是false。如果是true,也可以让他回调,这里需要你显性的调用view.loadUrl(url),我的理解是当调用loadUrl(url)时,无论如何,他都会自动调用一次该方法。 返回值 官方说明: True if the host application wants to leave the current WebView and handle the url itself, otherwise return false. 如果主机应用程序想要离开当前WebView并处理URL本身,则为True,否则返回false。 如果是true 在重写该方法时,如果不主动去加载(view.load(url)),页面将不会继续加载链接,会停留在第一个页面。如果是false 所有的页面变化会走该方法,页面会正常加载。但是重写loadUrl方法时,发现loadUrl只走第一次。 其他 当显示的在该方法里调用view.loadUrl(url)时,都会走loadUrl();

Kubernetes PersistentVolumes PersistentVolumeClaims and Examples

Figure: PersistentVolumes, like cluster Nodes, do not belong to any namespace, unlike Pods and PersistentVolumeClaims Access Modes A PersistentVolume can be mounted on a host in any way supported by the resource provider. The access modes are: ReadWriteOnce – the volume can be mounted as read-write by a single nodeReadOnlyMany – the volume can be mounted read-only by many nodesReadWriteMany – the volume can be mounted as read-write by many nodes Schedule A PV can specify node affinity to define constraints that limit what nodes this volume can be accessed from.

Eureka, Client, Ribbon之间的缓存和服务实时上下线实现思路分析

在使用Eureka做注册中心时,我平时遇到的最不爽问题,就是无法做到实时上下线。比如,我服务已经正常下线了,为什么上游还能调通?我服务已经上线了,为什么还有等"很久"才能真正被其他服务所"发现"?其实这些都是从Eureka到Client再到Ribbion这条链路中的逐级缓存造成的。 Eureka为什么要使用缓存 比如,对于Eureka来说,Eureka Client获取注册更新信息时,Eureka Server返回的数据其实是从一个默认每30s才更新的缓存获取的。也就是说,如果你服务下了一个,即使client是在服务下线之后发请求查询的注册列表,那这次请求也不会包括服务下线的信息。那么Eureka为什么要搞cache而不是实时的返回注册信息呢?我个人推测了一下,应该是为了在访问注册数据结构时尽量少加锁,从而提升单次请求时的性能。如果没有这层cache, 那么对于服务注册表这个数据结构来说,就会存在并发读写的情况,那就避免不了加锁保护。如果有cache, 是可以做到完全不加锁的。想一下,对于微服务架构来说,特点就是每个服务较轻,但服务数量较多。如果每个服务都定时请求eureka更新注册信息的话,对于Eureka Server来说,确实是可能会造成严重的锁竞争的。除了这个responseCache外,Eureka对于无心跳服务的清理也是默认每60s执行一次的,也就是说对于异常下线的服务(没有主动取消注册,而是中断了心跳),在Eureka Server端最大会有长达 60s + 30s * 3 = 150s的延迟。这里的30s * 3 是3个心跳的周期。 Eureka Client的缓存 Eureka Client默认会对注册信息做30s缓存 ,这个很好理解 ,因为我们当然不希望每次RPC都要重新查一次注册表,这是很浪费的。 这是常规操作,无可厚非。 Ribbon的缓存 这就有点诡异了。Ribbon向上对接Eureka Client, 向下对接实现发起HTTP请求的客户端。ribbon自身也是有30s缓存的,即ribbon会每30s向Eureka Client那里索要注册信息,注意是Eureka Client而不是Eureka Server,这样就更加剧了整个系统对服务上下线感知的延迟。我认为Ribbon这样设计,原因是考虑到了其上游不仅仅是Eureka Client, 还可能是配置文件,或者以编程的方式输入的注册列表,而这些查询是有可能比较耗时的。Ribbon为了兼容这些情况,不得不添加了缓存。 实时上下线思路 只能用消息中间件了。新做一个上下线管理服务,提供HTTP接口来上下线指定服务,当指定要下线A服务时,先向Eureka发请求,将此服务下所有的实例都删掉,然后再向kafka类似这样的消息系统中发一条消息,所有的微服务都要监听此消息队列。 服务收到下线消息时,将指定服务从本地Ribbon服务列表中删除。这里Ribbon的 Loadbalancer提供了markServerDown()方法可以使用,还是容易实现的。 服务收到上线消息时,需要将服务信息添加到Ribbon中,Ribbon虽然也提供了对应的方法,但是参数较为复杂,还需要研究一下。 这些功能可以直接打包成starter, 写好以后各服务直接引用即可。 其实我更希望Eureka官方能出一套解决实时性的方案,然并卵,Eureka已经不维护了

Oracle启动

查看监听: netstat -an |grep LISTEN 启动监听: 切换Oracle用户 lsnrctl start sqlplus / as sysdba --启动数据库 SQL> startup SQL> startup nomount; ORACLE instance started. 强制启动: SQL>STARTUP FORCE 查看数据库中的实例: show pdbs 多实例pdbs的数据库重启 alter pluggable database BSDEV close immediate; alter pluggable database BSDEV open; alter pluggable database 库名 close immediate; alter pluggable database 库名 open;

Django-REST-Framework获取表和关联字段的值

首先在Django项目创建表 安装Django REST Framework: pip install djangorestframework 以书籍和出版社为例(model.py): from django.db import models class Book(models.Model): title = models.CharField(max_length=32) create_time = models.DateField(auto_now_add=True) # 书籍的类型 BookType = models.SmallIntegerField( choices=((1, "原创"), (2, "转载")), default=1 ) # 出版社(一对多) publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE) # 标签(多对多) tag = models.ManyToManyField(to='Tag') # 书籍出版社表 class Publish(models.Model): name = models.CharField(max_length=32) # 书籍标签表 class Tag(models.Model): name = models.CharField(max_length=16) 自己动手在为每张表添加几条记录,并做好关联。 创建一个专门存放序列化类的py文件 serialize.py from app01 import models from rest_framework import serializers class Serialize(serializers.ModelSerializer): # 表中有choices的字段时,此代码是将对应的描述信息显示到页面 BookType = serializers.

select下拉框多选,超级好用!十分强大!

正文: 先说点废话:一个需求,想把select变成下拉多选,网上查找了半天,给出的方案都是自定义一个标签,或者弄个什么ul下面li进行选择,看起来就繁琐,本人只想在select上面做文章,不得已,自己写了一个,只需要在select上加个属性即可,方便实用! 2019.11.30之前,算是selectMultip的第一个版本,没想到用的人还不少,自然也发现了很多隐藏的bug,虽然它比较简单但大家使用时还是有些困惑,基于以上等原因,selectMultip2.0问世(哈哈),2.0做了全面的升级,不仅解决了之前发现的bug,而且新增了api,使用方法还是原来的步骤:1、引入js文件,2、在select标签上添加属性multip,然后调用方法即可(只有两步哦!) 可以先访问一下这里哟:演示地址 (不想访问也可以往下读) 先上图: 这个是选中后的效果,我们用的是select标签,选中后子标签会变成蓝色,如果想取消,再点击一下即可取消。 取值,调用selectMultip.getVal("22")方法即可: 赋值,调用selectMultip.setVal(id,data)即可,第二个参数类型可以是字符串或者数组,如图: 具体取值、赋值、动态加载等可以看下面的说明文档哦! 那现在就开始使用吧(只需要两步): 首先,将下面的js代码复制到一个js文件中(js文件名可以命名为selectMultip哦),并将其引入项目中即可。 (function() { selectMultip = { register: function(id) { //大致思路是:为下拉选创建一个隐藏的子选项,每次单选之后将单选的值追加到隐藏的子选项中,并将子选项选中显示即可 //全局查找所有标记multip的select document.querySelectorAll("[multip]").forEach(function(e) { render(e); }) }, reload: function(id, data, setData) { var htm = ""; for(var i = 0; i < data.length; i++) { htm += '<option value="' + data[i].value + '">' + data[i].text + '</option>' } var e = document.getElementById(id); e.innerHTML = htm; render(e); this.setVal(id, setData); }, setVal: function(id, str) { var type = Object.

TCGA数据库的利用(二)—— 数据处理

上一篇文章介绍的是关于TCGA数据的下载,如果不太清楚怎么下载数据的读者请参考这篇文章:TCGA数据库的利用(一)—— 数据下载!,而本篇文章主要介绍一下数据的处理过程,因为数据下载之后都是单一样本存储而且样本名称都是以非规则性超长字符命名,进行数据分析之前需要把样本名称转化为TCGA样本编号,例如这种形式的:TCGA-A8-A07I-01A-11R-A00Z-07;这里我以乳腺癌的RNA-seq数据作为样例,从数据库中下载了200个乳腺癌样本,每个样本中都含6万多个基因的表达数据。 样本名称转化为TCGA样本编号 数据下载之后如下,每个样本有一个文件夹,里面都会有一个压缩包,解压后会生成一个txt文本,里面含有我们需要的数据; 把每个压缩包的名称变成TCGA样本编号需要借助我们之前从网站下载数据相应的json文件:TCGA数据库的利用(一)—— 数据下载!json文件打开后,会发现每个样本名称跟它的TCGA样本编号被一个大括号所包含,形成一一对应的关系; 这里我就利用了python脚本把样本名与TCGA样本编号建立一个字典,然后进行逐一修改, 修改后的结果如下(注意:修改后的文件还是一个以.gz结尾的压缩包,这里只是修改了前面的名称而已): 数据合并 把下载的所有样本名称转化为TCGA样本编号之后,就需要进行数据整合,把所有样本数据整合到一个文件中; 这里先创建一个空矩阵作为公共矩阵,利用R语言中的gzfile函数读取第一个样本压缩包里面的数据转化为一个二维矩阵,TCGA样本编号设置为数据的列名,基因的ensembl编号设置为数据的行名; 把这个二维矩阵赋给那个公共矩阵,随后的样本数据写一个for循环,读取方式跟第一个相同,不同的是这里创建好的二维矩阵不是赋给公公矩阵,而是以第一列为参照列与前面合成的公共矩阵进行合并,最终可以把最后的矩阵写入一个csv文件夹中; 数据合并结果如下: 基因注释 这一步是把行名为基因的ensembl编号转化为基因官方id,这里利用的是R程序包clusterProfiler和org.Hs.eg.db(这种注释方法会导致注释的基因大大减少): 以上使用的R程序包基本上都需要下载,R语言自身没有,下载方式参照下面的两行代码(把里面的包的名称换成自己需要的名称即可) 最终处理后的数据如下,接下来我们既可以正常地进行分析了,最好在分析之前把处理好的数据备份一下防止数据损坏。 以上涉及的python和R语言代码的完整版,获取方式为:关注微信公众号:小张Python,后台回复关键字 TCGA处理 即可。TCGA系列的下一篇文章将介绍怎么利用程序包limma、edgeR和DESeq2作差异分析,想了解的读者可以提前关注一下。

纯Ubuntu系统重新安装为纯Windows10系统方法

简介 计算机当前操作系统为Ubuntu 18.04,且没有安装双系统,如果想要在此基础上安装再安装Ubuntu+Windows双系统,可参考博文: https://blog.csdn.net/u010598713/article/details/80239727 下面本文将简要介绍如何将计算机重新安装为只有一个Windows系统。注意,重装计算机系统前,务必提前做好数据备份。 安装环境 原操作系统:Ubuntu 18.04 LTS 待安装操作系统:Windows 10 准备工具 一个优盘(用于制作系统启动盘)一台已装有Windows系统的计算,并在其上安装老毛桃U盘启动盘制作工具(装机版,下载地址:http://www.laomaotaoupan.cn/download.html?download=http://down.lmtxz1.net/20181221/LaoMaoTao_STA_bd.exe)待安装的Win10系统镜像文件(推荐使用Ghost系统,作者试验成功的64位Win10 Ghost系统下载地址:http://www.xitongcheng.com/win10/win10_xiazai_4938.html#download) 具体过程 在Windows系统的计算机上按照老毛桃的官方教程(http://www.laomaotaoupan.cn/upzwin10.html)制作win10系统的U盘启动盘将制作好的启动U盘插到待装机的计算机上,重启计算机,进入老毛桃主菜单界面,选择“【02】老毛桃WIN8 PE标准版(新机器)”进入PE系统。打开桌面的“Bootice引导修复”软件,然后选中系统盘。由于当前安装的系统为Ubuntu系统,故此时引导程序为“Grub”。若要将计算机重新安装为纯Windows系统,需要将系统盘的引导程序设置为“Windows NT 6.0”,该引导程序才是适用于Win10的引导程序,关于引导程序的详细介绍,可参考博文:https://blog.csdn.net/xinlan3618/article/details/78860317双击PE桌面的“DiskGenius分区工具”软件,将安装Ubuntu的系统盘的各分区全部删除,并重新建立磁盘分区。具体的操作步骤可参考老毛桃官方教程:http://www.laomaotaoupan.cn/cpfq.html在DiskGenius分区工具中选中系统盘,选择“硬盘->重建主引导记录(MBR)”,为该系统盘修复Win10的主引导记录。双击PE桌面上的“老毛桃PE装机工具”,继续安装本文第1步提到的教程(http://www.laomaotaoupan.cn/upzwin10.html)完成win10 Ghost系统的安装即可。

Java 树的构造算法

连通的定义:从A定点出发能到达B定点,则称A-B连通 连通的基本性质: 自反性:A一定连通A(ps:自己可以和自己PY交易)对称性:如果A和B连通,则B和A也连通(无向的情况下)传递性:如果A连通B,B连通C,则A连通C 树: 大小(size):树的节点数量深度(depth):某个节点到根节点的链接路径的数量高度(height):树所有节点中深度最大的值 森林的构造(目标:深度尽量小,树尽量少): quick-findquick-union加权quick-union路径压缩 实现 quick-find算法(所有具有连通关系的触点都指向终触点,查找触点很快,但连通触点较慢) class UF { int[] id; int count; UF(int N) { id = new int[N]; count = N; } //将所有连通触点指向最后的触点 int find(int p) { return id[p]; } void union(int p, int q) { int pID = find(p);//获取起触点 int qID = find(q);//获取终触点 if (pID == qID) {//如果已经连通,结束 return; } for (int i = 0; i < id.length; i++) {//遍历所有触点 if (id[i] == pID) {//如果有触点指向起触点,说明起触点之前已经和其他触点连接 id[i] = qID; //将所有指向起触点的触点指向终触点 count--;//连通数量减一 } } } boolean connection(int p, int q) { return id[p] == id[q]; } int count() { return count; } } quick-union(所有具有连通关系的触点都指向自己的终触点,连通触点很快,但查找触点较慢) class UF1 { int[] id; int count; UF1(int N) { id = new int[N]; count = N; } //查找触点的根触点,类似递归回溯 int find(int p) { while(p!

Unity2019.1的Package之Animation Rigging v0.1.4 非人型角色的IK!

翻译自: http://tsubakit1.hateblo.jp/ 此人是日本Unity的开发者, 经常分享Unity最新的技术。 AnimationRigging是Animation C# Jobs 程序的功能。例如,设置IK,调整移动。 也有时间轴工作,如尝试对角色的腰添加旋转, 如在一个特定的场景微调一个有趣的功能。 IK 在动画 (Mcacanim) 标准中, 但 Mcanim IK 只对人型角色有效, AnimationRigging 就不一样。 例如,如下图 (显然不是人类型) (动漫玩具) Lacter 的腿运动在 ik 中创造了。 据说在调整了 IK 的功能后, 只显示了脚的最终位置。 用IK移动你的腿 此外,您似乎可以执行各种操作,例如覆盖动画角色的Transform和多个动作的混合。 Blend ConstraintChain IK ConstraintDamped TransformMulti-Aim ConstraintMulti-Parent ConstraintMulti-Position ConstraintMulti-Referential ConstraintMulti-Rotation ConstraintOverride TransformTwist CorrectionTwo Bone IK Constraint 实际上尝试一下 我实际上会使用Kore。这次尝试的功能是TwoBoneIK。IK表达式由两个关节执行。 当移动臂的尖端时,臂的位置被补充以便连接到尖端。 环境测试 .NET 4.xUnity 2019.1Animation Rigging ver 0.1.4 程序 首先做一个手臂。 在根的GameObject“ARMS”下,构建一个父子结构,以便Root> Mid> Tip。此时,如果您转动父游戏对象,请调整网格的位置,以便孩子的骨骼能够精美地转动。 用父子结构制作手臂 接下来,设置Rig。 在ARMS下创建名为Rig的GameObject 并添加Rig组件和TwoBoneIKConstraint组件。 在Rig对象下,创建名为Target和Hint的GameObject并 将这两个游戏对象添加到 TwoBoneIKConstraint 组件上赋值。此时,Target被置于与Tip大致相同的位置 。

UE4添加音乐、音效

目录 一、目的: 1、想:UE4添加音乐、音效 二、参考 1、 三、操作:完成 1、前述: 1、导入音乐 1、创建Cue 1、Cue进行设置 1、创建音乐 1、播放和暂停音乐 一、目的: 1、想:UE4添加音乐、音效 二、参考 1、 三、操作:完成 1、前述: 1、项目月球车有4个音乐,背景音乐、胜利、失败、机械臂动的音乐2、音乐分为几种:我目前考虑:音乐、音效;音乐:不断循环的声音,音效:只是产生一次的3、我不是写在场景中的,场景中的网上有很多的其他方法就不写了 1、导入音乐 因为只是支持wav格式的音乐,用格式工厂将其转换 1、创建Cue 导入了音乐之后,将其右键创建Cue 1、Cue进行设置 因为我的是背景音乐,所以将其设置为循环(后面发现没有循环的节点),音效就不需要了(因为只是播放一次不需要循环) 1、创建音乐 使用创建,右边拖出来做提升为变量 不要勾选,否则播放完了就没有了 1、播放和暂停音乐 1、不能使用stop,否则需要重新创建 2、pause后它还是在播放的,所以需要让其不pause

Ubuntu18.04重启后无法进入图形化界面

如果你没有瞎卸载很多东西的话,先在字符界面输入你的用户名和密码, 先尝试这个命令: sudo systemctl isolate graphical.target 不行的话,我的解决办法:安装图形化界面ubuntu-desktop 或者unity sudo apt-get install ubuntu-desktop sudo apt-get install unity 然后再用命令行命令进入图形化界面 11111、sudo service gdm3 start 没有1111号这个插件的话,可以下载安装,命令如下: sudo apt-get install lightdm 输入上述命令后,会让你选gdm3或者lightdm。建议选择gdm3,因为我ubuntu18.04开始选的是lightdm,结果3天没进去图形化界面,眼睛都哭瞎了。 然后再输入如下命令: sudo service gdm3 start

IE下载文件路径有中文的情况

在IE浏览器中下载文件的时候,路径中有中文的时候请求无法到达后台的情况: 请求路径中需要对中文的内容进行转码: 前段页面: var fileName = "文件名称"; location.href = "/wealth/downloadFile?fileName="+encodeURI(encodeURI(fileName)); 后台接受: String fileName = java.net.URLDecoder.decode(request.getParameter("fileName"), "utf-8"); 发送http请求时,路径中带有中文的情况报错,需要进行转码: /getCandidateList/"+base64.encodeToString(b)(编码后可能会有“/”符号) 去除“/”的方法: base64.encodeBase64URLSafeString(b) 参数b中有中文信息,需要进行转换

MFC 自动获取可用com串口(串口号以及名称)

之前获取串口号都是从注册表中获取,现在用一个新的方法能够获取窗口名称和串口号; 1、首先#include <setupapi.h> 和#pragma comment(lib, "Setupapi.lib"); 不同电脑位置不一样 可以在系统盘C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib(Setupapi.lib) C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include(Setupapi.h) 直接复制到你的工程目录下面,如下: #include <setupapi.h> #pragma comment(lib, "Setupapi.lib") SCtring com1 , com2 , com_1 , com_2; 2、在OnInitDialog()里面添加 HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, NULL, NULL, 0); HANDLE hCom; if (hDevInfo) { int iy = 0; SP_DEVINFO_DATA SpDevInfo = { sizeof(SP_DEVINFO_DATA) }; for (DWORD iDevIndex = 0; SetupDiEnumDeviceInfo(hDevInfo, iDevIndex, &SpDevInfo); iDevIndex++) { TCHAR szName[512] = { 0 }; if (SetupDiGetDeviceRegistryProperty(hDevInfo, &SpDevInfo, SPDRP_FRIENDLYNAME, NULL, (PBYTE)szName, sizeof(szName), NULL)) { _tprintf(_T("

C++将字符串存到数组中

C++将字符串存到数组中 c++在bantu下输入 g++ shuzu.cpp -0 shuzu 运行结果: 代码如下: #include<string> #include<iostream> using namespace std; int main() { //数组中存放带有“”号的字符串 string str[3] = {"\"ert\"","*asd", "cvb"}; string a; for(int i = 0; i < 3; i ++) { cout<< "str[i]:" <<str[i] <<endl; a = str[i]; cout<< "a: "<< a <<endl; } cout<< "-------------- "<< endl; //分割线 //数组中存有字符串 string code[3] = {"e12","d12","q1a"}; for(int i = 0; i < 3; i ++) { cout<< "str[i]:" <<code[i] <<endl; a = code[i]; cout<< "

Matlab基础函数 —— SUM的使用方法

比较SUM (A,1)和SUM(A,2)的不同 令A=[1 2 3;1 2 3],即一个两行三列的数组。 现在我们在matlab软件的命令行里输入上面两个函数,通过结果来比较逗号后面放1与放2的区别: 通过结果我们可以看出sum(A,1)将A的每列之和重新后成一个行向量,列数与A相同;sum(A,2)将A的每行之和重新保存成一个列向量,行数与A相同。

Sigmoid激活函数的理解(函数及其导数的图形表示,作用,优缺点)

Sigmoid函数又称logistic函数,在逻辑回归中经常出现。 公式为: Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间,该函数单调递增且以(0,0.5)对称,在两端变化速度较慢。 它是神经网络中的激活函数,其作用就是引入非线性。 优点: (1)sigmoid函数单调连续,输出范围有限,所以数据在传递的过程中不容易发散 (2)由于输出范围为(0, 1),所以可以在二分类的模型做为输出层,输出表示概率。 (3)求导容易,其导数可由自身表示:f’(x)=f(x)(1-f(x)) 缺点: (1)易造成梯度消失的问题。sigmoid函数和其导数Deriv.Sigmoid的图形如下,导数的值始终小于1且一直在0周围变化,在深层的神经网络中极易造成梯度消失的问题。 (2)不是以0为对称轴(这点在tahn函数有所改善)

WPF DataGridComboBoxColumn的数据绑定

WPF DataGridComboBoxColumn的数据绑定 <!--DataGrid的列并没有数据上下文,所以其ItemsSource绑定要向上查找 --> <DataGridComboBoxColumn Header="省份"> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding DataContext.ProvinceList,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" /> <Setter Property="DisplayMemberPath" Value="ProvinceName"/> <Setter Property="SelectedValue" Value="{Binding Path=Value}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding DataContext.ProvinceList,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" /> <Setter Property="DisplayMemberPath" Value="ProvinceName"/> <Setter Property="SelectedValue" Value="{Binding Path=Value}" /> </Style> </DataGridComboBoxColumn.ElementStyle> </DataGridComboBoxColumn>

eclipse清除workspace历史缓存

问题:在自己的服务器上安copy了一个之前的eclipse文件,发现之前的workSpace自己创建了,很不清爽。 清除方法: 1.打开eclipse下的/configuration/.settings目录下的org.eclipse.ui.ide.prefs文件 2.修改属性‘RECENT_WORKSPACES’的值;(这个就是你全部workSpace的历史记录了,每个历史记录使用\n分割的) 3. 把RECENT_WORKSPACES这项修改为你需要的那些目录,以\n分隔 RECENT_WORKSPACES=D:\workSpace,保存文件然后重新启动eclipse

BigDecimal做除法并保留小数

BigDecimal num1 = new BigDecimal(100); BigDecimal num2 = new BigDecimal(32); System.out.print(num1.divide(num2, 2, RoundingMode.HALF_UP)); RoundingMode.DOWN 直接删除多余的小数位,如2.35会变成2.3 RoundingMode.UP 进位处理,2.35变成2.4 RoundingMode.HALF_UP 四舍五入,2.35变成2.4 RoundingMode.HALF_DOWN 四舍五入,2.35变成2.3,如果是5则向下舍

获取当前项目所有url

文档:获取当前项目所有url.note 链接:http://note.youdao.com/noteshare?id=4d911fef8886f14f6dfaac0d6cdce4dc&sub=4BB3011635404DE2A209870F0EEB40F8

研究生阶段的大数据专业都学习什么科目?

相较本科阶段要学习的计算机编程语言,比如:java,linux,mysql等,研究生的大数据专业会更加深入一点,更多的是接触学习数据的采集与分析(Python、Scala),大数据的存储(hbase、hive、sqoop),学习处理软件,学习数学建模软件等等这方面的东西。 以武汉大学为例: 必修课主要包括:《大数据分析》、《多元统计分析与大数据建模》、《学科前沿进展》 选修课主要包括:《软件项目管理》、《信息安全技术》、《移动服务构架设计》等 学科通开课主要包括:《高级云计算技术》、《数据挖掘与数据仓库》、《高级算法设计与分析》 公共课主要包括:《高等工程数学》《自然辩证法概论》等 目前大数据专业是一个非常火的专业,就今年,国内已有30+所高校(清华、复旦、人大等)设立了此专业,如果想学的话,就趁现在开始打基础! 想要学习、梳理更多关于大数据领域的干货文章,可以看看这个号:计算机信息观察家,入门级小白必备!很多干货文章:大数据是如何存储和管理的?&最全、最好用的大数据工具都在这了!感兴趣的可以看看 转载于:https://www.cnblogs.com/keo1234/p/10821308.html

关于KindEditor 编辑器中表格的问题

#关于KindEditor 编辑器中表格的问题 今天开发项目中有一个需求,需要多个表格联合打印,但是多个表格中又需要有各自独立的表头,起初是直接调用浏览器的打印接口,但是出现的问题是,当需要打印的表格数据多时遇到跨页时会出现表格不会自动分页 出现这种很让人尴尬的情况,由于调用的是浏览器的接口而且大爷的纸张不同也有所区别,因此不能通过写死打印的记录条数来打印,因此想起了Kindeditor 富文本编辑器,手动来换行实现上面的问题 ,功能是实现了,但是引发出了一个问题,通过kindeditor 编辑器编辑后的的html 会丢失一些东西(也许是这个kindeditor 编辑器的bug,纯属个人猜测,不喜勿喷,要脸) 在将html 传入kindeditor 中的部分代码如下图, 但是,通过kindeditor 编辑后,获取html代码变成了。下图 直接将配置的两个style属性给忽略掉了(ps 是看它不爽嘛,哈哈) 导致最后,调用浏览器打印接口的时候,无法固定列宽和自动换行 最后解决的办法(运用比较笨的办法) 再获取通过 kindeditor 编辑后的html 插入 该属性 table-layout:fixed;word-break:break-all; , 后在调用浏览器接口

git:git修改项目的远程url

需要复制一个gitlab的base项目,但由于一些原因复制操作难以实现,所以通过 git clone base项目 ----> git remote 修改远程url ----> git push到目标项目 的方式实现复制过程。git clone和git push不必多说,git remote修改远程url的过程记录如下。 1、git 命令修改 推荐使用git remote命令的方式修改。 1、进入项目目录; 2、删除原有的url: git remote rm origin 3、添加目标项目的url: git remote add origin 目标URL 这里的“目标URL”,就是Git上面的ssh url。 修改完成 2、修改.git/config文件 除了git命令,还可以直接修改git的配置文件。.git是个隐藏文件夹,里面有个文件config,包含git的一些配置。其中,[remote "origin"]下面的就是git remote相关的一些配置。 不推荐直接修改配置文件的方式,万一手残改错了原地爆炸。。。。

解决 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

原文:https://blog.csdn.net/zhanghaipeng1989/article/details/41117887 如果自己的脚本里编码没有问题的话,要看一下设置的header是否存在 ‘Accept-Encoding’:’ gzip, deflate’,这一句话,如果存在,删除即可解决。 发现爬虫爬取的时候失败了,一致报这个错,google搜了几个发现不对,终于找到这个原因了,感谢博主。