failed to initialize nvml driver/library version mismatch ubuntu

英伟达驱动版本是384.130 显示的NVRM version: NVIDIA UNIX x86_64 Kernel Module是:384.130。 若是旧的版本就会出现如下问题。 这个问题出现的原因是kernel mod 的 Nvidia driver 的版本没有更新,一般情况下,重启机器就能够解决,如果因为某些原因不能够重启的话,也有办法reload kernel mod。 方法如下: 就两步 unload nvidia kernel modreload nvidia kernel mod执行 sudo rmmod nvidia sudo nvidia-smi 若出现问题 $ sudo rmmod nvidia rmmod: ERROR: Module nvidia is in use by: nvidia_modeset nvidia_uvm 这时,就要一点一点的卸载整个驱动了,首先要知道现在kernel mod 的依赖情况,首先我们从错误信息中知道,nvidia_modeset nvidia_uvm 这两个 mod 依赖于 nvidia, 所以要先卸载他们 先查看下有哪些进程使用了 nvidia* ``` sudo fuser -v /dev/nvidia* #查找占用GPU资源的PID sudo lsof -n -w /dev/nvidia* #查找占用GPU资源的PID

vue踩坑填坑(四):在vue单页中修改title

由于在vue单页应用中title只设定在入口文件index.html,如果切换路由,title怎么更换? 在路由router中设置meta: { path:'/chooseBrand', component: resolve => require(['../components/page/ChooseBrand.vue'], resolve), meta: { title: 'title标题' } }, 后面加上: router.beforeEach((to, from, next) => { /* 路由发生变化修改页面title */ if (to.meta.title) { document.title = to.meta.title } next() }) 这样的话在切换路由时就会更换你在meta中设置的title。

vue踩坑填坑(三):语法指令问题

一、v-html和v-text的使用。 v-html可识别html标签,v-text只可赋值文字。 注意:v-html解析的标签不会被vue解析,不可在v-html绑定的标签内使用依赖vue解析的语法。 二、v-for中的数据变化时,存在以下两种情况不会重新渲染页面。 1、当你利于索引改变其中一个值时,例如:vm.items[indexOfItem] = newValue; 2、当你修改数组的长度时,例如:vm.items.length = newLength; 为了解决这两种情况不重新渲染页面的问题,现在对于这两种情况采用以下的写法: 1、对于第一个问题,可以采用强制重新set一下items。 Vue.set(items, index, {'name':'XXX','url':'XXX'); 2、对于第二个问题 items.splice(newLength) 三、v-if和v-show 1、v-if 当值为 true时,显示div ,当值为false时,改元素消失,代码也会消失,相当于将代码删除了,当在为true时,页面会重新渲染div; 而v-show 控制的隐藏出现,只是将css属性设为了display:none 或block; 2、v-if 后还有 v-else 和 v-else-if 条件渲染,这里需要注意的是v-else 必须紧跟 v-if 或v-else-if 

vue踩坑填坑(一):引入模块组件

在webpack+vue开发中,如果在一个vue文件中引入另外一个封装的模块组件的vue文件,则有以下两种方式: 首先想要在以下代码中引入一个封装好的输入框组件input_text.vue: <template> <div> <testComponent></testComponent> </div> </template> 第一种方式: export default { components:{ testComponent:require('../module/input_text.vue').default } } 第二种方式: export default { import testComponent from '../module/input_text.vue' components:{ testComponent } }

JMeter组件之BeanShell PostProcessor的使用场景

背景:JMeter3.2 + fastjson-1.2.47,使用BeanShell PostProcessor组件获取Response中的内容 步骤:直接上代码 1. 场景一:获取请求响应中的数据,并保存 import com.alibaba.fastjson.*; // 引入包。这个包需要先放在:<安装目录>\apache-jmeter-3.2\lib\ext中 // 获取数据 String response = prev.getResponseDataAsString(); // 获取Response JSONObject responseObj = JSON.parseObject(response); // 整个Response作为JSON对象 JSONObject resObj = responseObj.getJSONObject("res"); // 获取某一部分对象。即,json串中{}的内容 JSONArray listArray = resObj.getJSONArray("list"); // 获取列表。即,json串中[]的内容 // 保存数据 // 1) 列表 int len = listArray.size(); for(int i=0; i<len; i++){ temp[i] = listArray.get(i).getString("name"); } vars.put("names", Arrays.toString(temp)); // 保存到JMeter变量中,vars.put只能保存字符串,因此这里使用了toString()进行转换 // 2) String类型 String id = resObj.get("id"); // 获取对象中某一字符串的内容。 vars.put("id", id); // 保存到JMeter变量中,后面的组件可以使用

Js修改密码,并限制为8位长度,包含大小写加数字

function checkPassword() { var oldPassword = $("#oldPassword").val(); var newPass = $("#newPassword").val(); var confirmPass = $("#confirmPassword").val(); if (oldPassword==null) { alert("输入的原密码为空"); return false; } else if (newPass==null || confirmPass==null) { alert("输入的新密码为空"); return false; } else if (newPass != confirmPass) { alert("两次输入的密码不一致"); return false; } else if(checkPass(newPass)<3){ alert("新密码复杂度不够,请重新设置!需至少8位,且包含大小写字母和数字。"); return false; } return true; } function checkPass(pass){ if(pass.length < 8){ return 0; } var str = 0; if(pass.match(/([a-z])+/)){ str++; } if(pass.match(/([0-9])+/)){ str++; } if(pass.

C# Winform 异常: 没有执行权限 的解决方法

写时间:2018年06月13日 03:54:40 前几天博主写关于访问注册表的程序, 却发现读取到的Value值为空, 这就很奇怪了. 检查代码却并未发现有什么问题, 捕获到的异常如下: 异常: System.Security.SecurityException (用户没有读取注册表项所需的权限) 最开始我认为是需要用右键的管理员权限来运行程序, 结果不行. 经查阅资料和以前乱玩项目属性的时候遇到一个以管理员权限来运行的程序的方式, 马上做出修改, 果然成功了. 修改过程如下: 右键项目->属性->安全性->勾上(启用ClickOnce安全设置, 然后立刻取消勾选, 此操作目的是为了让app.manifest文件显示在项目里以方便修改该文件内容) 然后修改项目Properties下面的app.manifest文件(将第11行的配置覆盖到18行) 修改好后程序就可以使用管理员权限来访问一些系统敏感位置了. 更新时间: 2018年9月21日14点47分 注意: 当你编写的程序需要使用管理员权限时, 你的VS在调试时可能会有如下提示 以前我碰到这种情况的时候都是 F7生成-->浏览目录-->双击生成的EXE文件, 然后查看控制台输出和程序运行结果来查看效果的. 小项目还行, 代码不多, 但是到了公司里, 一个解决方案里三十几个项目, 一个文件里几千行无注释代码.......头疼!! 现在我才发现可以直接退出VS, 以管理员权限运行VS就可以继续调试了.

JavaScript获取uuid

var id = uuid(); function uuid() { var withLine = true; //带不带横线 var len = 36; //长度为36 var radix = 16; //16进制 var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); var uuid = [], i; radix = radix || chars.length; if (withLine) { var r; uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; uuid[14] = '4'; for (i = 0; i < len; i++) { if (!uuid[i]) { r = 0 | Math.

eclipse集成Scala,运行Spark项目和&lt;console&gt;:1: error: ';' expected but '.' found. 报错

下载windows环境的scala: 下载地址: https://www.scala-lang.org/download/ 然后运行安装就行了; 安装过程中scala会自动配置windows的环境变量,因此cmd进入dos命令直接输入scala就进入了scala命令行了。 2,eclipse集成scala (1) 在Eclipse中选择Help->Install new Software http://download.scala-ide.org/sdk/helium/e38/scala210/stable/site 然后进入到下图界面: 这个界面据说很慢,要越狱下载,如果想快一点可以越狱,这里我是用的越狱软件是Psiohon,有需要可以留言(试了百度网盘分享,但是有敏感词,分享不成功)。下载后直接点“连接”就行了; 连接成功后就能够很快下载完了。 完成后再中断翻墙软件连接,因为此时eclipse需要联网下载插件里面的东西。不知道为什么不需要翻墙了。 完了会提示重启eclipse。 重启后就能够新建scala工程了。 new--》project--> 下面就可以新建scala文件了,这里选择Scala Object 加入以下内容测试: object MyScala { def myStr(name:String) : String = { s"My name is $name,\n"+ s"i am 25 years old." } def main(args: Array[String]): Unit = {} println(myStr("2018-06-11")) } 保存, 启动scala,这里遇到很大的问题就是直接使用cmd命令进入到scala执行 scala C:\Windows\System32\MyScala.scala 时会报错<console>:1: error: ';' expected but '.' found. 最后百度到一个方法是:要在scala的安装目录的bin下面启动scala然后运行我们写好的文件,截图如下: 成功的: 失败的: 但可以使用:load方式执行。 后来进一步修改才知道,可以再cmd模式执行。不过不要先进入scala命令行模式而是,直接“scala 文件名”运行文件。 如下:

不同触发方式检测运行视觉相机

视场相机分两种方式运行,即监视运行和检测运行。检测运行的时候,需要提供触发信号机器视觉大师对当前图像帧进行检测。触发信号可以是外部设备经过串口等通信端口输入,也可以是程序自己提供窗口有用户手动输入,或程序自动按照一定周期提供。 不同的触发方式均有自己的特定使用场景。a. 外部设备信号触发方式一般在半自动或全自动视觉系统,一键式测量设备等使用。b. 用户手动触发方式用于前期视觉分析和实验。 c. 周期性自动触发用于类似智能视频分析或安防等系统。 选择用户手动触发方式进行检测运行的时候,将出现图一中的触发窗口。点击“下一个”按钮,程序将自动抓取当前图像进行分析处理。 图一: 手工触发窗口 点击“模式->设置”菜单,弹出“选项”窗口,切换到“视场相关”页,点击“相机触发类型”下拉框,选择触发方式如图二a。如果选择自动触发方式,还可以指定自动触发周期,该周期为每分钟产生多少次触发信号。默认情况下,为每分钟60次,即每秒1次。 a. 不同触发类型 b. “视场相关”页选择触发类型 图二: 设置不同相机触发类型 如果当前触发方式为外部触发信号,必须选择外部输入通信设备,否则将无法正常工作。将“选项”窗口当前页面切换到“输入输出”页,如图三。点击选择“外部设备”下拉框,根据不同设备类型需要输入外部信号所在地址类型,数据类型,内存地址等参数。如果使用下降沿触发信号,需要选择“下降沿触发”复选框。 图三: 外部触发时的信号相关参数 本文测试使用的AvizMaster版本为6.0.1228 最新版AvizMaster(机器视觉大师)下载地址:http://www.hdy.net.cn/softshare/ddcam.htm 技术交流QQ群: 295860595 技术支持QQ: 2437711859 微信:a18028535399

java代码连接Hive(开启Kerberos和sentry)

在开启Kerberos认证之后,用户需要进入登入Hive CLI或beeline需要用到keytab。为此,我们现在Kerberos数据库中创建user1和user2两个principal。 生成user1和user2的keytab kadmin.local: xst -norandkey -k user1.keytab user1 Entry for principal user1 with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:user1.keytab. Entry for principal user1 with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:user1.keytab. Entry for principal user1 with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:user1.keytab. Entry for principal user1 with kvno 1, encryption type camellia256-cts-cmac added to keytab WRFILE:user1.keytab. Entry for principal user1 with kvno 1, encryption type camellia128-cts-cmac added to keytab WRFILE:user1.

网站如何注销备案主体

0. 写在前面 注销备案主体/网站的方法有2种。 1.通过接入商注销。这是最方便的方法,前提是记得备案密码。服务接入商往往会提供备案和注销备案的服务,只需要填写相关信息等待接入商审核就可以。 2.通过通信管理局注销。这种方式需要在工作日发送邮件到管局指定邮箱。注意,如果不是工作日期间发送的邮件,工作人员不会处理。 1.开始讲故事 笔者由于备案时预留的邮箱不用了,所以接收不到通信管局发来的找回密码的邮件,不知道为啥,江苏通信管局又步发手机短信,所以,我很是头疼。毅然决然地选择了给管局发邮件申请注销备案主体。 需要准备的材料: 身份证复印件。签字的《注销备案申请表》。 需要注意的事项: 《注销备案申请表》在电脑上填写好后必须打印签字,然后将扫描件存入邮件附件。身份证复印件必须正反面在同一张纸上。邮件必须在工作日发送给管局,休息日接收的邮件不处理。 江苏省通信管理局联系方式 受理部门省通信管理局咨询单位省通信管理局互联网管理处咨询电话025-58500033,025-85039806,025-85039833邮箱beian@jsca.gov.cn 具体可以参考江苏省通信管理局的官方文档。 文档下载 江苏省网站/主体注销申请表 作者:戴翔 电子邮箱:daixiangcn@outlook.com

5G/NR 学习笔记:资源分配

在整个系统的调度过程中,有很多模块共同影响着资源分配的结果,并且各个模块之间相互制约着。 直接影响资源分配的几个因素有: 输入: HARQ进程MCS调度优先级PriorityBuffer管理RB的限制PDCCH反馈 输出/更新: PDCCH分配信息Buffer管理分配信息 几个重要的模块 Modem模块。 1.1 输出: 解调接收到的信号之后,可以计算出SINR,RI,判断CSC。信道质量可以知晓,然后触发链路自适应调整MCS,并且进入HARQ进程(决定是否重传)。 1.2 输入:PDCCH调度器。PDCCH调度器。 2.1 输出:将分配结果告知Buffer管理器;告知Modem新的配置方式setting;反馈结果给资源分配模块。 2.2 输入:资源分配结果的更新。HARQ处理进程。 3.1 输出:是否重传以及重传ID告知资源分配模块。 3.2 输入:Modem的CRC校验。链路自适应。 4.1 输出:MCS告知资源分配模块;MPR告知QoS调度器。 4.2 输入:Modem的CRC校验。QoS调度。 5.1 输出:priority告知资源分配模块。 5.2 输入:来自链路自使用的MPR(Maximum Power Reduction)Buffer管理。 6.1 输出:将Buffer信息告知资源分配模块。 6.2 输入:资源分配模块的分配信息;PDCCH调度器;来自功率控制模块的BSR功率控制。 7.1 输出:RB资源告知资源分配模块 7.2 输入:其他算法

Win10 CompatTelRunner.exe占用磁盘高的解决办法

解决办法: 禁用用户改善反馈 CompatTelRunner.exe 1.右键【我的电脑】--【管理】--【服务和应用程序】--【服务】 2.找到【superfetch】--选中右击【属性】 3.在启动类型中下拉选择--【禁用】--最后点击右下角应用该操作 4.同理找到【windows search】【HomeGroupListener】和【HomeGroupProvider】 ----选中右击【属性】----【禁用】该启动类型--【应用】即可

电路图的电阻值部分是DNP什么意思??

问题:如图所示: 图中大部分电阻值都是都是DNP DNP是英文(Do Not Populate)的意思,译为“不焊接”。 实际使用过程中,在PCB上会留有空焊盘,可以做测试引脚用,或者在信号质量不好时,加焊下拉电阻,调整信号质量。

hu不变矩--python

由于网上关于Hu矩的定义的内容较多,代码实现部分又多为matlab、C++或者opencv等,因此本文将主要介绍如何用python实现Hu矩的提取。后续可能会利用Hu矩进行图片分类以及平移、旋转不变性的实验,有时间做的话到时候会放上来结果。 本篇博客内容参考图像的七个不变矩 可用于图像的匹配中的matlab代码,在其基础上进行修改而成。 #-*-coding:utf-8-*- import cv2 from datetime import datetime import numpy as np np.set_printoptions(suppress=True) def humoments(img_gray): ''' 由于7个不变矩的变化范围很大,为了便于比较,可利用取对数的方法进行数据压缩;同时考虑到不变矩有可能出现负值的情况,因此,在取对数之前先取绝对值 经修正后的不变矩特征具有平移 、旋转和比例不变性 ''' # 标准矩定义为m_pq = sumsum(x^p * y^q * f(x, y)) row, col = img_gray.shape #计算图像的0阶几何矩 m00 = img_gray.sum() m10 = m01 = 0 # 计算图像的二阶、三阶几何矩 m11 = m20 = m02 = m12 = m21 = m30 = m03 = 0 for i in range(row): m10 += (i * img_gray[i]).

java 获取对象属性的 名称、值、类型

在java中我们常用到写文件,那我们怎么样获取一直对象的属性名称、值、类型 /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = o.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(o, new Object[] {}); return value; } catch (Exception e) { log.error(e.getMessage(),e); return null; } } /** * 获取属性名数组 * */ private String[] getFiledName(Object o){ Field[] fields=o.getClass().getDeclaredFields(); String[] fieldNames=new String[fields.length]; for(int i=0;i<fields.

outlook客户端无法连接但是手机和Webmail都能正常使用

昨天晚上9点多,有一个在单位加班的同事发现了这个问题,我登录到邮件服务器看了一下,没有什么异常,正好他也可以联系总部的IT,我只是有部分权限,好多东西也看不到,就觉得总部的实力,解决这个根本不是一个问题。 到了今天早上,上班,还是发现同样的问题,我滴个神,原来老外一直在找客户端的原因,所以,我就开始排查了。 先测试了一下邮件服务器的网络状态,没有问题 DNS解析也对,这两点证明从客户端到服务器通信是正常的,但是服务器就是不响应,问题肯定出在服务器上。 打开服务一看,我滴个神,Microsoft Exchange RPC client服务居然停止的,这个服务默认是自动启动的,那个哥们没事重启了一下服务器,也不检查服务是否正常,总在客户端找原因,方向错了。 哥把那个服务启动了一个,然后就OK啦,只不过同时有那么多连接,这台服务器经历了一次DOS×××。 这个问题很简单,为什么出这个问题就跟IT管理有直接关系了,在一个没有标准化管理体系里,干活全凭工程师的经验,如果这个人脑子走错了路,啥都解决不了。 以后我会出一些关于IT管理的文章,现在好多单位选用的管理人员都是屁股决定脑袋,而不是脑袋决定屁股。事情该怎么做,一定要交给专业的人来弄,别没学过三脚猫的都上场了,一堆啥也不懂的人决定公司IT架构,最后的结果全都会很惨。 转载于:https://blog.51cto.com/shadingyu/2126243

matlab的cell读写

cell存储的内容与数据类型无关,对于大量的不规则数据(不仅仅指的"数")的操作很方便。 1、由txt读入 经常遇到txt内保存的数据类型不统一,格式各异,这时候按cell读入数据就比较方便。 fid = fopen(filename, 'r'); p = textscan(fid, '%s'); 其中filename是txt文件的名称,该操作将txt内的数据按字符串方式读入变量p内。 假设txt内存放内容如下: name age native Jim 23 U.S. Li 25 P.R.C Lucy 21 U.K. 则调用上述程序得到的p的 p = cell {12×1 cell} 既p是只有一个元素的cell,但是这个cell是一个12x1的列向量。 2、数据格式整理 通过“变量名+{index}”的方式可以访问第index个cell的内容,如下所示。 >> p{1} ans = 12×1 cell array 'name' 'age' 'native' 'Jim' '23' 'U.S.' 'Li' '25' 'P.R.C' 'Lucy' '21' 'U.K.' 利用reshape函数整理数据 % 根据元数据格式,整理为4行3列的矩阵 mat_p = reshape(p{1}, 3, 4)'; 整理后的数据格式如图所示: mat_p = 4×3 cell array 'name' 'age' 'native' 'Jim' '23' 'U.

WPF样式中使用BasedOn 注意顺序问题

<Style x:Key="LabelTextBox" BasedOn="{StaticResource DefaultTextBox}" DefaultTextBox的定义,在文件中的位置要放置在饮用它的所有样式之前,否则会无法找到。

Ubuntu修改系统用户名导致重新登录后就算密码输入正确都是无限循环闪一下然后要求重新登录用户名,并且输入错误用户名还会提示的解决方法

直接上教程 1.开机进入系统 不要进那些奇奇怪怪的recovery模式 2.ALT+CRTL+F1 按住这三个键 进入terminal(tty模式) 3.登录用户 用户名为root 4.登录之后 输入 sudo startx 进入了一个新的界面 会突然闪一下 而且鼠标业能用并且会变成光标 叼毛别被吓住了 5.随便找个位置 鼠标右键 打开终端 6.这个步骤可有可无 输入 sudo root 7.接下来的两个步骤就有点熟悉了 sudo gedit /etc/passwd 把用户名改回来 忘记了的话你真的成咸鱼了 8. sudo gedit /etc/shadow 和步骤7一样 改回来 9.重启 三种方法 直接输入reboot回车 或者用之前windows呼出任务管理器的快捷键alt ctrl 点号(delete) 重启 也可以按下主机电源键 反正你怎么开心怎么弄 10.教程到这里了,开机遇到密码错误的话 重复上面的步骤 检查用户名前后面是不是加了奇奇怪怪的东西 如大空格 11.遇到自己实在解决不了的问题 请邮箱35244284@qq.com 

2018汽车之家汽车品牌、车型数据库采集带品牌logo以及车型图

一个项目需要,奈何网上找不到合适的,要么就是没有logo跟车型图片。python撸了一套。 如果你不想自己撸可以直接下载:https://download.csdn.net/download/lengyue1084/10463969 鉴于朋友咨询爬虫问题,2018/12/03号 重新爬取,测试没有问题。下载地址:https://download.csdn.net/download/lengyue1084/10824286 __author__ = 'siyecao' # -*- coding:utf-8 -*- # coding:utf-8 import urllib import urlparse import urllib2 import re import io import os import sys import pymysql from bs4 import BeautifulSoup class CatSpider(): def __init__(self): self.siteURL = 'https://www.autohome.com.cn/grade/carhtml/' self.headers = {'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0'} self.brand_list = [] # def postData(self, url): request = urllib2.Request(url,headers = self.headers) response = urllib2.urlopen(request) html = response.read() return html # def getData(self, html): soup = BeautifulSoup(html, "

Python常用模块之copy、os

Copy python中的赋值方式: mylist = [1, 2, 3, 4, 5] mylist1 = mylist mylist2 = mylist[:] #mylist2 = copy.copy(mylist) 这两种赋值方式的效果相同,mylist1和mylist2中的值都是 [1, 2, 3, 4, 5]。但明显,他们的本质不同: mylist1是在mylist这个变量名的旁边重新贴了一个变量名。也就是说mylist1是变量名mylist所指向的内存新添加的一个标签!mylist1和mylist是不同的地址但指向的是同一个内存!而mylist2是将mylist中存放的所有数据放入mylist2这个变量名所指向的内存中。产生了新的数据! 我们用list对象的pop方法来检验一下mylist1和mylist2之间的区别: mylist.pop() print(mylist1) [1, 2, 3, 4] print(mylist2) [1, 2, 3, 4, 5] ​ mylist1.pop() print(mylist) [1, 2, 3] 可以看出pop掉mylist中的数据,mylist1中的数据也发生了相应改变,pop掉mylist1中的数据,mylist也随之变化。而mylist2中的数据并没有发生任何变化,这也验证了我们上面的分析。 对于列表这种数据结构,mylist2 = mylist[:],等价于mylist2 = copy.copy(mylist),也即切片和copy.copy都是浅拷贝,只copy第一层数据,深层的数据仍然与原来的数据共享内存。再举一例。 import copy numlist = [1, 2, 3, [4, 5, 6]] #用三种方式进行拷贝 numlist1 = numlist numlist2 = numlist[:] numlist3 = copy.

清华大学陈煜波:数字经济与中国市场的数字化转型(附视频&amp;PPT)

后台回复“0607”获取完整版PPT~ 数字经济正逐渐成为全球经济增长重要驱动力,作为数字经济时代的基础战略资源,大数据正在发挥其巨大能量。本场清华大数据“应用·创新”系列讲座,我们荣幸地邀请到了清华大学经济管理学院副院长、教授陈煜波。陈煜波老师基于领英和百度的海量数据,讨论了数字经济和中国市场数字化转型的重要特点等话题。 陈煜波,现任数据科学研究院管理委员会委员、清华大学经济管理学院副院长、教授、互联网发展与治理研究中心主任,国家杰出青年科学基金获得者、国家“万人计划”青年拔尖人才。美国佛罗里达大学管理学博士,东南大学系统工程硕士、工业管理工程学士。加入清华大学前曾任美国亚利桑那大学艾勒管理学院副教授、终身教职。主要研究领域为:大数据与全球互联时代的商业创新;移动互联网环境下的市场变革与商务分析;中国经济的数字化转型;气候变化与可持续发展战略。 视频时长约一个小时,建议使用wifi观看 陈煜波:今天分享的内容主要有以下几点: 数字经济 中国数字经济与发展的现状 中国人工智能的社会认知与应用需求 2016年杭州G20峰会,我们国家作为东道主提出数字经济这一重要概念。其中有两个最核心的因素: 以数字化的信息和知识作为关键的生产要素,以网络信息作为重要的载体 以提高产业生产力作为重要的目标 数字经济实际上是在人类历史上针对农业经济、工业经济的第三层次经济。如果要以数据作为最关键的生产要素,基于数据对经济配置最优资源,提高全要素生产力,我们现在很多基础的经济学,或者从商业模式的创新到经济活动的组织大多会发生变化。 中国数字经济的发展大致经历了三个阶段: 第一个阶段为ICT(即信息通讯技术)驱动的信息化转型。 第二个阶段为互联网驱动的网络化转型。 第三个阶段为大数据人工智能驱动的数字化转型。 中国数字经济的发展跟西方最大差异是什么?中国数字经济发展最基本前提条件是什么?我们是工业化、城镇化、现代农业化和信息化等四化叠加,而西方是先有工业化、城镇化、现代农业化,然后才有信息化。根据我们中国信息化百人会的测算, 2016年中国数字经济占GDP的比重达到了30.2%。 我们中国信息化百人会2017年数字经济报告指出我们现在正经历一个数字经济的拐点,首先面临的就是体系重构:数据驱动、软件定义、平台支撑、服务增值、智能主导。 在动力变革的新阶段,数据作为新的经济引擎动力。在物理世界和决策意识世界里,我们可以通过数字孪生空间,把物理空间数据化,通过对数据最优的分析帮助我们做预测决策。 然后是范式迁移的新阶段。与之前的工业经济相比,数字经济时代的决策范式发生了很大的变化。 与世界各国的数字经济比较,美、中总量处于全世界前两位,但我国的相对量只占30%,落后于一些主要发达国家。当然从另外一个角度来讲,中国的数字化潜力还很大。 中国数字经济发展的显著特点是什么?我认为一个重要特点是从需求端或者消费端向供给端或者生产端转移。中国发展数字经济有一个巨大的优势和特点是我们拥有世界上最大的数字用户的红利。我们作为世界上最大的数据资源大国,拥有庞大的数据资源,但是这个资源是没有被充分挖掘和利用的资源。 我国数字化的转型或者数字经济发展已经开始向深水区或者传统产业渗透。数字经济分为两大类: 一类ICT基础型的数字经济,如软件业、互联网行业、通讯业、信息电子产业。 另一类是融合型的数字经济,即数字经济和传统产业融合。 据相关报告,实际上2016年基础型数字经济的比重占两成左右。而融合型的经济增长高达25.7%,促进数字经济增长贡献将近九成。 下一阶段中国数字经济驱动力是什么?是数字人才。现在经济已经跟传统产业融合,所以我们不仅仅要强调ICT的专业技能的人才,更要强调和那些ICT专业技能互补的相关领域的人才,让他们来促进数字经济转型传统经济。 通过价值链的数字化转型,我们可以把数字人才分成六大类。最上游的是数字战略管理者,包括数字化转型的领导者、数字战略顾问、咨询师、数字化商业模型的倡议倡导者,解决方案规划师等等。再下一步是做产品研发,软件、硬件系统分析师。再往前端是运营和运营维护。最前端是数字营销,社会化媒体经营,精准营销,电子商务。 我们基于领英专业人才用户来估计一下中国数字人才的分布情况。在领英的用户里面大概有多少数字人才呢?在领英的3600万中国用户里面,我们按上面的条件找出72万数字人才。其中位于中国前十位城市的是:上海、北京、深圳、广州、杭州、成都、苏州、南京、武汉、西安。我们可以发现数字人才分布南强北弱,而可喜的是中西部开始崛起,说明中国数字化确实开始全面渗透。 另外我们发现数字人才已经向传统行业渗透,将近一半数字人才仍然在ICT的基础产业,但是制造业占到20.9%,金融业、消费品、医疗行业都有相当比例的数字人才,说明中国在大量传统行业已经开始有很多的数字人才的储备。 在前十名的城市中,数字人才分布在ICT基础型产业,还是融合型产业?我们发现杭州、北京ICT基础产业数字人才最多,上海、广州、苏州是ICT的融合产业数字人才最多,在制造、金融,所谓的“传统”行业的数字人才最多。 但是中国数字人才结构性问题非常突出:不均衡、不充分。我们将近90%的数字人才在产品研发、数字化的运营上,而深度分析不到4%,数字战略管理0.8%,先进制造0.84%,数字营销0.35%。 从数字人才流动看出来,数字人才依然是向一线城市聚集,如上海、深圳、杭州、北京、苏州,而净流出的是成都、西安、武汉、广州、南京,这些城市高校相对发达,但产业相对滞后。 如果数据是数字经济最关键的生产力,那人工智能就是去挖掘我们最核心的生产力。深入洞察中国人工智能的社会认知和应用需求的现状和发展趋势可以帮助个人、企业、投资者和政府,对我国总体和各地的人工智能的发展及社会需求有更清晰的了解和定位。 数字化转型,从ICT驱动、互联网驱动到大数据人工智能驱动都经历社会认知、应用需求,技术供给这三个阶段。应用需求有两种,一种是技术应用需求,另一种是行业应用需求。技术应用需求从人工智能的核心技术如计算机视觉、语音语义识别、深度学习出发找应用场景,行业应用需求聚焦在智能驾驶、安防、金融、商务零售、医疗、制造业等人工智能当前最相关的行业。 我们发现无论是最深层次的技术认知还是最广范围的行业需求应用,都在2017年3月开始进入一个拐点。基于此,我们提出从2017年3月起,中国真正进入了人工智能驱动的经济数字化转型阶段。 各地的人工智能的发展及社会需求有所不同。我们将排名前五十位的城市进行了分析,前十位作为第一梯队,第十一到第三十位作为第二梯队,第三十一到五十位作为第三梯队。在人工智能社会认知和应用需求方面,南强北弱,长三角尤为突出。除了北上广深杭、天津、南京、苏州等沿海发达城市外,成都、武汉、西安、郑州、重庆五个中西部城市排名非常突出。南京和西安在社会认知的排名超过其应用需求的排名,为“社会认知驱动型”城市;郑州、苏州、重庆应用需求的排名超过社会认知排名,为“应用需求驱动型”城市;其他城市在这两个方面都比较均衡。 从技术需求角度来看,西安和南京是“单技术需求驱动型”城市,由深度学习需求来驱动;郑州和武汉是“双技术需求驱动型”城市,郑州由计算机视觉和语音语义技术需求驱动,武汉则由深度学习和计算机视觉需求驱动;北上广深、广州、成都、杭州、天津、重庆和苏州为“全技术需求驱动型”城市。 从行业需求角度来看,北京、上海、深圳、广州、杭州和成都行业应用需求均衡。南京对零售和金融行业应用需求较高,苏州对安防和制造业的行业应用需求高,西安对智能驾驶行业应用需求高。 总的来说,在全国层面,无论从社会认知还是应用需求角度,中国从2017年3月开始正式进入人工智能驱动的经济数字化转型阶段。人工智能的社会认知从基本认知程度发展到深层次专业和技术认知;技术应用需求整体上一直呈上升趋势,行业应用需求在2017 年3月进入跃升期。在区域层面,无论是人工智能社会认知还是应用需求方面,南方城市在排名上都比北方城市具有优势,长三角地区尤为突出。同时,排名靠前的城市集中在北上广深和各省会城市。从技术应用需求角度看,不同城市可分为全技术需求驱动、双技术需求驱动和单技术需求驱动三类。从行业应用需求角度,不同城市可分为全行业需求驱动和部分行业需求驱动两类。 内容整理:王志蒙 后台回复“0607”获取完整版PPT~

[Ionic]上传图片

前言 由于项目中涉及到用户上传修改头像,所以研究一下Ionic中上传图片的实现。 正文 由于代码中注释很详细,直接贴代码和注释 HTML代码: <!-- 下拉刷新加载 --> <ion-content no-margin> <ion-refresher (ionRefresh)="pullDown($event)"> <ion-refresher-content pullingIcon="arrow-dropdown" pullingText="{{Refresh}}" refreshingSpinner="circles" refreshingText="{{Refresh}}"> </ion-refresher-content> </ion-refresher> <!-- 显示图片,若没有图片则显示请从图库中选择一张图片 --> <img src="{{pathForImage(lastImage)}}" style="width:100%;" [hidden]="lastImage === null" /> <h3>请从图库中选择一张图片</h3> </ion-content> <ion-footer> <ion-toolbar color="primary"> <ion-buttons> <button ion-button icon-left (click)="presentActionSheet()"> <ion-icon name="camera"></ion-icon>选择... </button> <!-- 如果没有选择图片,上传按钮为不可用状态 --> <button ion-button icon-left (click)="uploadImage()" [disabled]="lastImage === null"> <ion-icon name="cloud-upload"></ion-icon>上传 </button> </ion-buttons> </ion-toolbar> </ion-footer> .ts代码 import { Component } from '@angular/core'; //判断是哪个平台打开的导入Platform import { IonicPage, normalizeURL, NavController, NavParams, ActionSheetController, ToastController, ModalController, LoadingController, Platform, Loading, ViewController } from 'ionic-angular'; // 导入四个外部加载进来的组件 import { File } from "

图像的纹理特征

提取方法: 灰度共生矩阵-python 灰度梯度共生矩阵–python 纹理特征 纹理特征刻画了图像中重复出现的局部模式与他们的排列规则,常用于图像分类和场景识别。其只能反映物体表面的特性,无法完全反映出物体的本质属性,所以仅仅利用纹理特征无法获得图像的高层次内容。 优点: 1. 具有旋转不变性 2. 具有良好的抗噪性能。 缺点: 1. 当图像的分辨率变化的时候,所计算出来的纹理可能会有较大偏差 2. 有可能受到光照、反射情况的影响 3. 从2-D图像中反映出来的纹理不一定是3-D物体表面真实的纹理 常用的纹理特征提取方法一般分为四大类: 1.基于统计的方法:灰度共生矩阵、灰度行程统计、灰度差分统计、局部灰度统计、半方差图、自相关函数等 优点:方法简单,易于实现。 缺点:无法利用全局信息,与人类视觉模型不匹配;计算复杂度较高,计算耗时。 较为经典的算法为灰度共生矩阵方法,其通过统计不同灰度值对的共现频率得到灰度共生矩阵,基于矩阵可计算出14种统计量:能量、熵、对比度、均匀性、相关性、方差、和平均、和方差、和熵、差方差、差平均、差熵、相关信息测度以及最大相关系数。 灰度梯度共生矩阵将图梯度信息加入到灰度共生矩阵中,综合利用图像的灰度与梯度信息,效果更好。图像的梯度信息一般通过梯度算子(也称边缘检测算子)提取,如sobel、canny、reborts等。 2.基于模型的方法:同步自回归模型、马尔可夫模型、吉布斯模型、滑动平均模型、复杂网络模型等 3.基于结构的方法:句法纹理分析、数学形态学法、Laws纹理测量、特征滤波器等 4.基于信号处理的方法:Radon变换、离散余弦变换、局部傅里叶变化、Gabor变换、二进制小波变换、树形小波分解等 参考: 灰度共生矩阵(GLCM)附Python代码 图像纹理特征总体简述

tomcat按天输出log

按照日期输出log文件 1.设置log4j配置文件 log4j.properties配置 log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.RollingFile.File=../logs/framework.log log4j.appender.RollingFile.Threshold=DEBUG log4j.appender.RollingFile.File.DatePattern=.yyyy-MM-dd-HH log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %-40.40c -%m%n 2.修改CATALINA.SH文件 shift touch"$CATALINA_BASE"/logs/catalina`date+%Y%m%d`.out if["$1"="-security"];th 

串口信号定义和接线方法-5针串口-9针串口-全功能串口

•串口、并口接口定义 并行口与串行口的区别是交换信息的方式不同,并行口能同时通过8条数据线传输信息,一次传输一个字节;而串行口只能用1条线传输一位数据,每次传输一个字节的一位。并行口由于同时传输更多的信息,速度明显高于串行口,但串行口可以用于比并行口更远距离的数据传输。 1、25针并行口插口的针脚功能: 针脚 功能 针脚 功能 1 选通 (STROBE低电平) 10 确认 (ACKNLG低电平) 2 数据位0 (DATAO) 11 忙 (BUSY) 3 数据位1 (DATA1) 12 却纸 (PE) 4 数据位2 (DATA2) 13 选择 (SLCT) 5 数据位3 (DATA3) 14 自动换行 (AUTOFEED低电平) 6 数据位4 (DATA4) 15 错误观点(ERROR低电平) 7 数据位5 (DATA5) 16 初始化成(INIT低电平) 8 数据位6 (DATA6) 17 选择输入 (SLCTIN低电平) 9 数据位7 (DATA7) 18-25 地线路(GND) 2.串行口的典型代表是RS-232C及其兼容插口,有9针和25针两类。 25针串行口具有20mA电流环接口功能,用9、11、18、25针来实现。其针脚功能如下: 针脚 功能 针脚 功能 1 未用 2 发出数据(TXD) 11 数据发送(一)

机器学习和统计学的区别

机器学习跟统计学有很多联系,的确这两个专业有很多共性,但本文尝试列举一些差异,供大家参考和对比,也欢迎大家补充。 机器学习统计学定义机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心。统计学是关于认识客观现象总体数量特征和数量关系的科学。它是通过搜集、整理、分析统计资料,认识客观现象数量规律性的方法论科学。所属学科不是一级学科,通常设在计算机科学、数学或自动化专业下面。机器学习在本科课程中顶多只是一门课,而不是一个独立的专业。本身就是一级学科,国内高校也有把统计学归入数学学科下的,国外高校统计学专业一般设在独立的统计系里。分析数据时关注点模型的泛化能力,预测的精确度/召回率,算法的计算复杂度。模型或参数的显著性水平,置信度,及各种统计量意义。获取模型参数方法根据训练数据集让机器自己学习,其实是一种数值计算方法,给参数初始值后根据损失不断迭代修正参数,使得损失达到最小。往往通过梯度下降等算法搜索损失函数的最小点。根据样本数据进行参数估计,常用MLE和矩估计,讲究估计的无偏性、相合性、P-Value。模型验证方法直接用数据集验证,通常将数据集先分成training data和testing data,把training data上训练得出的模型放到testing data上检验效果。一般不做交叉验证,而用各种统计量、假设检验、拟合优度和置信度来评价模型。交叉验证是一种直观的实证手段,但结果具有偶然性,而统计学讲究数学上的一般性。分类监督学习、无监督学习、强化学习,或者分为统计学习和深度学习。深度学习跟统计学联系不大。有多种分类方法,按学科发展历史分为经典统计学(频率统计学)和贝叶斯统计学,按功能分为描述统计和推断统计,按研究重点分为理论统计学和应用统计学。此外,统计学可应用于不同学科,衍生出统计学分支领域,例如生物信息学、计量经济学、量子力学、随机信号处理等。Python典型的库sklearn, tensorflow, keras, XGBoost等scipy, statsmodels

Go基础(复杂类型):映射

映射 映射将键映射到值。 映射的零值为 nil 。nil 映射既没有键,也不能添加键。 make 函数会返回给定类型的映射,并将其初始化备用。 一、看一个关于映射的例子 package main import "fmt" //定义一个构造 type Vertex5 struct { Lat, Long float64 } //定义一个map,这个map的键是String类型的 var m map[string]Vertex5 func main() { //通过map来返回指定类型的映射 m = make(map[string]Vertex5) //给这个m赋值,键为Bell Gates,只为下面赋的两个 m["Bell Gates"] = Vertex5{ 40.131343, -231.213143, } fmt.Println(m["Bell Gates"]) } 输出结果: {40.131343 -231.213143} 二、映射的文法 映射的文法与结构体相似,不过必须有键名。 package main import "fmt" type Vertex6 struct { Lat, Long float64 } var m6 = map[string]Vertex6{ "Bell Labs": Vertex6{ 40.

RabbitMQ简介

RabbitMQ简介 RabbitMQ是AMQP(Advanced Message Queuing Protocol,高级消息队列协议,一个提供统一消息服务的应用层标准高级消息队列协议)的Erlang的开源实现。 AMQP AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。 转载于:https://www.cnblogs.com/programmersky/p/9140901.html

自创RTSP 服务器 用多款客户端软件测试接入可以,唯独VLC接入不了

自创RTSP 服务器 用多款客户端软件测试接入可以,唯独VLC接入不了,测试可接入的有 海康的VSPlayer,EasyRTSPPro,迅雷影音,ffplay 都正常,就vlc不行,我也查不出啥问题了,有大神解答吗? vlc调试信息 windows版本: packetizer_h264 warning: waiting for SPS/PPS core debug: Buffering 0% packetizer_h264 warning: waiting for SPS/PPS packetizer_h264 warning: waiting for SPS/PPS core debug: Buffering 0% core debug: Buffering 0% packetizer_h264 warning: waiting for SPS/PPS core debug: Buffering 0% packetizer_h264 warning: waiting for SPS/PPS core debug: Buffering 0% packetizer_h264 warning: waiting for SPS/PPS packetizer_h264 warning: waiting for SPS/PPS packetizer_h264 debug: found NAL_SPS (sps_id=0) packetizer_h264 debug: found NAL_PPS (pps_id=0 sps_id=0)

XP系统因以下文件的损坏或丢失,WINDOWS无法启动:\windows\system32\config\system的解决思路实践

故事背景:在合肥项目中,现场一台使用超过6年的工控机,在近段时间内出现上述标题中出现的系统文件丢失问题 ,该问题重启复现,无法通过传统进入安全模式或者最后一次正确配置等方式进行修复,只能通过将repair文件夹下的system文件导入进行修复。具体实现过程如下: 1.先确认是为硬盘或者内存条的使用寿命问题,先将主机除尘,插拔内存条金手指,进行污垢处理,将硬盘线重新插拔紧固。 2.按照其在故障显示界面中提示的那样,将准备好的XP SP2纯净版光盘插入,进入BIOS下,将首选启动项设置为CD-ROM盘启动,然后重启后,系统进入CD...然后,在选择模式下,选择按R进行故障控制台修复。选择此模式后,再接下来会跳出熟悉的CMD窗口,选择操作系统:默认输入1(只有一个的话),然后输入管理员密码(我的为空,直接回车就行),然后正式进入cmd模式的C:\Windows下。在输入: a.cd c:\windows\system32\config\ ren system system.bak(备份原有损坏system文件) b.cd c:\windows\repair copy system c:\windows\system32\config\ (将repair目录下system 复制到config目录下) c.输入exit进行重启,重新设置好BIOS启动项,进行重新加载。 (有网上资料建议将repair下的Security,software,sam,default文件也进行还原,本人也进行亲测,还是看需求,要是想变成纯净的无任何先前安装痕迹可以使用,我的话,还是需要原先的东西,所以只复制了system) 3.重新启动后,此时已可以进入系统中,但是遇到一个问题: 先前的所有的硬件驱动需要重新更新加载一遍,还有就是我的应用软件已无法正确打开,(先前没有重装系统的目的,就是怕里面的资料丢失),令人沮丧,没有办法,只有重装我的应用软件进行修复。在重装之前,最后将磁盘进行碎片整理和磁盘修复,始终怀疑,该问题原因应该是硬盘有坏道。 4.在进行CD-ROM修复之前,有使用过U盘进行启动盘操作,这里有个坑,我的Upan启动盘先前是高版本,使用的UEFI模式,浪费了我大量时间,系统无法正确进入,而且插着该Upan会导致系统每次进入windows xp界面,进度条更新一下,然后反复重启。而后,重刷启动盘为FAT32+IOS模式后,才正确进入启动盘系统。 5.使用启动盘系统后,进行ghost备份(涨点心眼),防备下次再次出现这种问题(当然最好的方法是,备份好以后,更换一个新的好硬盘还原使用) 至此,花费一天的时间,出差倒腾结束,以此作为一个经验之谈。 更多工业交流和工作帮助可以订阅我的个人订阅号哦!

国内可用的ngrok

1、官网看介绍,下载客户端:https://www.ngrok.cc/ 2、注册账号,申请免费渠道: https://www.ngrok.cc/login 3、用渠道ID,启动,映射本地的8080端口 由衷感谢伟大无私奉献的贡献者

目标检测SSD+Tensorflow 训练自己的数据集

1.代码地址:https://github.com/balancap/SSD-Tensorflow,下载该代码到本地 2.解压ssd_300_vgg.ckpt.zip 到checkpoint文件夹下 3.测试一下看看,在notebooks中创建demo_test.py,其实就是复制ssd_notebook.ipynb中的代码,该py文件是完成对于单张图片的测试,对Jupyter不熟,就自己改了,感觉这样要方便一些。 import os import math import random import numpy as np import tensorflow as tf import cv2 slim = tf.contrib.slim import matplotlib.pyplot as plt import matplotlib.image as mpimg import sys sys.path.append('../') from nets import ssd_vgg_300, ssd_common, np_methods from preprocessing import ssd_vgg_preprocessing from notebooks import visualization # TensorFlow session: grow memory when needed. TF, DO NOT USE ALL MY GPU MEMORY!!! gpu_options = tf.GPUOptions(allow_growth=True) config = tf.ConfigProto(log_device_placement=False, gpu_options=gpu_options) isess = tf.

numpy库数组拼接np.concatenate的用法

concatenate功能:数组拼接 函数定义: numpy.concatenate((a1, a2, ...), axis=0, out=None) Parameters: a1, a2, … : 数组序列 除了axis对应的轴,数组其他维度必须一样 axis : 可选,默认是0 out : 多维数组,可选 如果out提供,则结果保存在out中。数组大小必须正确,与真实结果相匹配。 Returns: res : 多维数组 最后拼接好的数组 官方示例: >>> a = np.array([[1, 2], [3, 4]]) >>> b = np.array([[5, 6]]) >>> np.concatenate((a, b), axis=0) array([[1, 2], [3, 4], [5, 6]]) >>> np.concatenate((a, b.T), axis=1) array([[1, 2, 5], [3, 4, 6]]) 我的例子: 共有测试图片6680张。

pandas.read_csv() 报错 OSError: Initializing from file failed,报错原因分析和解决方法

Python版本:Python 3.6 pandas.read_csv() 报错 OSError: Initializing from file failed,一般由两种情况引起:一种是函数参数为路径而非文件名称,另一种是函数参数带有中文。 # -*- coding: utf-8 -*- """ Created on Mon Jun 4 09:44:36 2018 @author: wfxu """ import pandas as pd da1=pd.read_csv('F:\\数据源') da2=pd.read_csv('F:\\2.0 数据源\\工程清单.csv') 这两种情况报错信息都是一样: Traceback (most recent call last): (报错细节不展示) File "pandas/_libs/parsers.pyx", line 720, in pandas._libs.parsers.TextReader._setup_parser_source OSError: Initializing from file failed 对于第一种情况很简单,原因就是没有把文件名称放到路径的后面,把文件名称添加到路径后面就可以了。还可以在代码中把文件夹切换到目标文件所在文件夹,过程太繁杂,不喜欢也不推荐,所以就不做展示了。 第二种情况,即使路径、文件名都完整,还是报错的原因是这个参数中有中文,但是Python3不是已经支持中文了吗?参考了错误原因和pandas的源码,发现调用pandas的read_csv()方法时,默认使用C engine作为parser engine,而当文件名中含有中文的时候,用C engine在部分情况下就会出错。所以在调用read_csv()方法时指定engine为Python就可以解决问题了。 da4=pd.read_csv('F:\\数据源\\工程清单.csv',engine='python') 对于第二种情况还有另外一种解决方法,就是使用open函数打开文件,再取访问里面的数据: da3=pd.read_csv(open('F:\\4.0 居配工程监测\\2.0 数据源\\02.南京新居配工程清单.csv')) 好了这个报错的原因都了解了,解决方法也很简单粗暴,是不是很简短简单!

MediaPlayer(3340): attachNewPlayer called in state ***

E/MediaPlayer(3340): attachNewPlayer called in state 128 使用MediaPlayer播放时第二次播放就遇到这个问题,看了下文档最简单的解决办法就是在每次调用播放之前,先reset一下player,就ok了 ================== ERROR/MediaPlayer(9974): start called in state 64 ERROR/MediaPlayer(9974): error (-38, 0) ERROR/MediaPlayer(9974): Error (-38,0) 刚开始一直不是很清楚到底哪里出了错,于是跑到Android Developer去查了下MediaPlayer这个类,下面是我从上面的截的一部分图 从 图中我们可以看到,MediaPlayer经过创建,初始化后需要调用prepare方法让系统知道它已经准备好可以播放媒体了,然后你就可以start 了,在start后可以发现你可以pause它,也可以stop它,但是仔细看我画红线的地方便可发现当你需要再次start的时候,两者是需要不同操作 的,pause后只需要直接start就行了,但是stop后需要重新prepare后才能start。 接 着回到上面的那个错误,主要就是在start前没有prepare(这个问题倒不是很严重),特别是在你stop后直接就start,这时就会出现上面的 错误,并且媒体不会播放。所以在使用MediaPlayer时一定要注意它的各项流程,否则就会出现莫名奇妙的错误。当然出现上面的错误还有的一个原因便 是你的MediaPlayer对象创建太多了。

VB-Word打开指定目录文件

Function GetAllFiles(ByVal path As String, ByVal results As Collection) Dim files As files Dim folder As folder Dim subFolders As Folders Dim file As file Dim t Set folder = Fso.GetFolder(path) Set subFolders = folder.subFolders() Set files = folder.files For Each file In files If Right(file.Name, 4) = ".doc" Then results.Add (path & "\" & file.Name) ElseIf Right(file.Name, 5) = ".docx" Then results.Add (path & "\" & file.Name) End If Next For Each t In subFolders Call GetAllFiles(path & "

VB-Word添加页眉页脚

Word文档自定义宏添加页眉页脚标识: '给指定目录下Word文件添加文档标识 Sub WordFlag() Dim FolderPicker As Object Dim FilePath As String Set FolderPicker = Application.FileDialog(msoFileDialogFolderPicker) With FolderPicker If .Show = -1 Then FilePath = .SelectedItems(1) Else Exit Sub End If End With Call getAllFile(FilePath) MsgBox ("文档标识添加已完成!") End Sub Sub getAllFile(sFolderPath As String) 'Columns(1).Delete On Error Resume Next Dim f As String Dim file() As String Dim i, k, x x = 1 i = 1 k = 1 ReDim file(1 To i) file(1) = sFolderPath & "

[python]list, tuple, dictionary, set的底层细节

list, tuple, dictionary, set是python中4中常见的集合类型。在笔者之前的学习中,只是简单了学习它们4者的使用,现记录一下更深底层的知识。 列表和元组 列表和元组的区别是显然的:列表是动态的,其大小可以该标;而元组是不可变的,一旦创建就不能修改。 实现细节 python中的列表的英文名是list,因此很容易和其它语言(C++, Java等)标准库中常见的链表混淆。事实上CPython的列表根本不是列表(可能换成英文理解起来容易些:python中的list不是list)。在CPython中,列表被实现为长度可变的数组。 从细节上看,Python中的列表是由对其它对象的引用组成的连续数组。指向这个数组的指针及其长度被保存在一个列表头结构中。这意味着,每次添加或删除一个元素时,由引用组成的数组需要该标大小(重新分配)。幸运的是,Python在创建这些数组时采用了指数过分配,所以并不是每次操作都需要改变数组的大小。但是,也因为这个原因添加或取出元素的平摊复杂度较低。 不幸的是,在普通链表上“代价很小”的其它一些操作在Python中计算复杂度相对过高。 利用 list.insert方法在任意位置插入一个元素——复杂度O(N)利用 list.delete或del删除一个元素——复杂度O(N) 操作复杂度复制O(N)添加元素(在尾部添加)O(1)插入元素(在指定位置插入)O(N)获取元素O(1)修改元素O(1)删除元素O(N)遍历O(N)获取长度为k的切片O(k)删除切片O(N)列表扩展O(k)测试是否在列表中O(N)min()/max()O(n)获取列表长度O(1) 列表推导 要习惯用列表推导,因为这更加高效和简短,涉及的语法元素少。在大型的程序中,这意味着更少的错误,代码也更容易阅读。 >>>[i for i in range(10) if i % 2 == 0] [0, 2, 4, 6, 8] 其它习语 1.使用enumerate.在循环使用序列时,这个内置函数可以方便的获取其索引: for i, element in enumerate(['one', 'two', 'three']): print(i, element) result: 0 one 1 two 2 three 2.如果需要一个一个合并多个列表中的元素,可以使用zip()。对两个大小相等的可迭代对象进行均匀遍历时,这是一个非常常用的模式: for item in zip([1, 2, 3], [4, 5, 6]): print(item) (1, 4) (2, 5) (3, 6) 3.序列解包

目标检测数据集整理

本篇博客主要整理基于深度学习的目标检测所用的数据集, 评价指标见上一篇博客。 参考链接: 1、链接1 2、链接2 3、链接3 1、Pascal VOC VOC综述 VOC数据集是目标检测经常用的一个数据集,从05年到12年都会举办比赛(比赛有task: Classification 、Detection(将图片中所有的目标用bounding box框出来) 、 Segmentation(将图片中所有的目标分割出来)、Person Layout), 然后本篇博客主要整理了VOC2007和VOC2012两个数据集。 然后先介绍一下VOC数据集,以2007版为例。 一共包含了20类。 personbird, cat, cow, dog, horse, sheepaeroplane, bicycle, boat, bus, car, motorbike, trainbottle, chair, dining table, potted plant, sofa, tv/monitor 关于数据集: - 所有的标注图片都有Detection需要的label, 但只有部分数据有Segmentation Label。 - VOC2007中包含9963张标注过的图片, 由train/val/test三部分组成, 共标注出24,640个物体。 - VOC2007的test数据label已经公布, 之后的没有公布(只有图片,没有label) - 对于检测任务,VOC2012的trainval/test包含08-11年的所有对应图片。 trainval有11540张图片共27450个物体。 数据集下载完后会有5个文件夹。Annotations、ImageSets、JPEGImages、SegmentationClass、SegmentationObject。 JPRGImages 包含了所有的图片信息,包含训练集和验证集。 以年份和编号命名,尺寸大约为500*375或者是375*500,训练或者验证时会统一resize。 Annotations 存放的是xml格式的标签文件,每一个xml文件都对应于JPEGImages文件夹中的一张图片 <annotation> <folder>VOC2007</folder> <filename>000005.jpg</filename>#文件名 <source>#文件来源 <database>The VOC2007 Database</database> <annotation>PASCAL VOC2007</annotation> <image>flickr</image> <flickrid>325991873</flickrid> </source> <owner> <flickrid>archintent louisville</flickrid> <name>?

Android问题集锦(八)- Android 微信支付成功后没有回调问题

还在为接入支付烦恼吗,下面只要一行代码即可发起支付。 PayHelper.createWXPayBuilder(this) .setNonceStr("xxxxxx") .setTimeStamp("xxxxxx") .setPrepayId("xxxxxx") .setPartnerId("xxxxxx") .setSign("xxxxxx") .setPayResultListener(new PayResultListener() { @Override public void onCancel() { mTvHello.setText("wx pay cancel"); } @Override public void onSuccess() { mTvHello.setText("wx pay success"); } @Override public void onFailed(String error) { mTvHello.setText("wx pay error: " + error); } }).pay(); 推荐一个封装库 https://github.com/751496032/UMHelper 接入过这么多第三方SDK,最想吐槽的就是腾讯的,文档之类的就不想说了,不管是微信支付还是bugly都是一种折磨,也可能是自己能力欠缺吧…… 在接入到调起支付整个过程还算比较顺利,因为整个统一下单及签名之类的都是在后台返回的,只要拿到参数就可以调起支付,然后正以为可以大功告成时,发现支付成功和取消支付始终无法走到WXPayEntryActivity的onResp()回调函数中,接下来就是痛苦的排查了 首页就是排查WXPayEntryActivity是否存放在包名.wxapi目录下 接着查看了mainfest清单文件Activity声明注册是否正确,最好以全名的方法进行name赋值,防止有多个applicationId时出现一些不必要的问题 同时核对applicationId与微信开放平台的填写的是否一致,以及对应的签名是否正确 经过上面的操作所有的参数及步骤都是正确的,发现还是没有回调,最后在一篇博文说到了mainfest文件清单需要添加 android:exported="true",尝试加进去了 最后测试,欣喜若狂啊,测试通过ok WXPayEntryActivity类的代码最好是别做太多的修改,只需改动两个地方即可: 关于android:exported="true"属性点击打开链接

vue开发组件时踩过的一些坑

开发vue组件踩过的坑 前言 近期又完成一个vue项目,公司好像十分看好vue框架,之后的几个项目也准备使用vue框架。然而回想起之前,使用vue开发组件时遇到的各种bug,心中一阵后怕。在此记录下那些填坑的历程,方便以后查阅。 问题 input输入出现白屏问题 项目要求header部分固定,main部分可以滚动,css3实现main的css: .main{ overflow: hidden; height: calc(100vh - 40px); position: relative; .... } 聚焦时,键盘弹起,屏幕滚动,因此出现白屏。 只需在main的样式中加上:transform: scale(0); 推荐一篇transform对position影响的博客,CSS3 transform对普通元素的N多渲染影响 scroller组件出现白屏问题 项目中使用了better-scroll实现一个上拉加载更多和下拉刷新的组件,测试发现部分手机,无法显示列表。具体原因目前不清楚,但是估计是better-scroll使用了transform的锅。一开始以为是部分手机不支持calc计算,因此在组件的计算属性里计算出屏幕高度,然并卵。可是,将计算的高度发在vue钩子函数mounted中,竟然起作用了,太神奇了 input[type=file]上传 图片问题 开发上传图片组件时,input[type=file]会调用原生相册或者相机,由于安卓和IOS对系统的保护,屏蔽了input[type=file]的功能,这个需要原生代码实现JSON数据量很大(约1.5M),卡屏问题 开发tree组件时,正常情况使用v-show来控制tree的折叠和展开,由于数据量很大,出现卡屏问题。网上搜索了一下,v-if在这种情况会比v-show性能更好。 使用v-if出现当折叠起来的元素被选中时,其子元素没被选中。这时需要操作数据源,将其设置为选中状态。

RecyclerView拖拽排序;

效果就是这样,RecyclerView列表可拖拽排序,可删除,可添加; RecyclerView给我们提供了一个手势器: ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.Callback() { @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { int dragFrlg = 0; if (recyclerView.getLayoutManager() instanceof GridLayoutManager){ dragFrlg = ItemTouchHelper.UP|ItemTouchHelper.DOWN|ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT; }else if(recyclerView.getLayoutManager() instanceof LinearLayoutManager){ dragFrlg = ItemTouchHelper.UP|ItemTouchHelper.DOWN; } return makeMovementFlags(dragFrlg,0); } @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { //滑动事件 下面注释的代码,滑动后数据和条目错乱,被舍弃 // Collections.swap(datas,viewHolder.getAdapterPosition(),target.getAdapterPosition()); // ap.notifyItemMoved(viewHolder.getAdapterPosition(),target.getAdapterPosition()); //得到当拖拽的viewHolder的Position int fromPosition = viewHolder.getAdapterPosition(); //拿到当前拖拽到的item的viewHolder int toPosition = target.getAdapterPosition(); if (fromPosition < toPosition) { for (int i = fromPosition; i < toPosition; i++) { Collections.

Android自定义View - 优惠卷

前言 在写这个之前也是因为在项目中使用到了类似 优惠卷 的这个东西,然后呢我就在网上找了一些demo看,但是发现他们都存在一些缺陷而且比较单一功能太简单。为什么这么说呢,我给大家说明一下,请看下图: 我发现背景被白色半圆覆盖了,随后翻看了一下Api惊喜的发现有一个设置半圆颜色的,我果断设置了一个transparent,运行一看,连白色的圆角都不见了,变成了一整块 ■ 因为在demo中这个圆角是通过调用 canvas 的 drawCircle 方法被绘制出来的,并且绘制在图层之上,所以无法显示出下面的背景图。而且只提供了半圆这一种图形,所以我说相对比较单一。正因如此我来给大家介绍我的 CouponView 最好的Android优惠卷 。先放几张效果图,再讲解实现过程 1.特点 提供了4种边缘图案(圆形,椭圆,三角,正方)可自定义灵活的api支持以剪裁的方案切入,可展示覆盖在下面的背景图使用模板方法设计模式完成本例 2.效果图 已在 Github 开源:CouponView,欢迎 Star ! 3.实现过程讲解 3.1 类文件结构 DrawModel: CouponModel的父类定义一个绘制的框架控制行为,和初始化Paint等工作。 CouponModel: 实现父类的抽象方法,进行具体的绘制 CouponView: view 继承 FrameLayout 负责接收自定义的属性,和处理相关操作,通过调用 DrawModel的模板方法 drawing()实现边缘图形的绘制 3.2源码分析 先来看CouponView 步骤1: 初始化自定义属性 public CouponView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); if (attrs != null) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CouponView, 0, 0); //边缘图形类型 drawType = typedArray.getInt(R.styleable.CouponView_drawShapeType, CIRCLE); //图形与图形之间的间隙 dashGap = typedArray.

django 实现将本地图片存入数据库,并能显示在web上

1. 将图片存入数据库 关于数据库基本操作的学习,请参见这一篇博客:https://www.cnblogs.com/leejy/p/6745186.html 这里我默认,您已经会了基本操作,能在数据库中存图片了,然后,也会用图形界面操作数据库中的数据了 2.这里,我先给出我的代码,能少走些弯路就少走些 a) 项目的urls.py from django.contrib import admin from django.urls import path from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), ]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT) +号后面的一定要写,如果想出来结果的话!否则回报一个 404 的错误 - b) 应用里的models.py from django.db import models # Create your models here. class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __unicode__(self): # 在Python3中使用 def __str__(self): return self.name class IMG(models.Model): img = models.ImageField(upload_to='img') name = models.CharField(max_length=20) def __str__(self): # 在Python3中使用 def __str__(self): return self.

HTML URL 编码

下面是用 URL 编码形式表示的 ASCII 字符(十六进制格式)。 十六进制格式用于在浏览器和插件中显示非标准的字母和字符。 URL 编码 - 从 %00 到 %8f ASCII ValueURL-encodeASCII ValueURL-encodeASCII ValueURL-encodeæ%000%30`%60 %011%31a%61 %022%32b%62 %033%33c%63 %044%34d%64 %055%35e%65 %066%36f%66 %077%37g%67backspace%088%38h%68tab%099%39i%69linefeed%0a:%3aj%6a %0b;%3bk%6b %0c<%3cl%6cc return%0d=%3dm%6d %0e>%3en%6e %0f?%3fo%6f %10@%40p%70 %11A%41q%71 %12B%42r%72 %13C%43s%73 %14D%44t%74 %15E%45u%75 %16F%46v%76 %17G%47w%77 %18H%48x%78 %19I%49y%79 %1aJ%4az%7a %1bK%4b{%7b %1cL%4c|%7c %1dM%4d}%7d %1eN%4e~%7e %1fO%4f %7fspace%20P%50€%80!%21Q%51 %81"%22R%52‚%82#%23S%53ƒ%83$%24T%54„%84%%25U%55…%85&%26V%56†%86'%27W%57‡%87(%28X%58ˆ%88)%29Y%59‰%89*%2aZ%5aŠ%8a+%2b[%5b‹%8b,%2c\%5cŒ%8c-%2d]%5d %8d.%2e^%5eŽ%8e/%2f_%5f %8f URL 编码 - 从 %90 到 %ff ASCII ValueURL-encodeASCII ValueURL-encodeASCII ValueURL-encode %90À%c0ð%f0‘%91Á%c1ñ%f1’%92Â%c2ò%f2“%93Ã%c3ó%f3”%94Ä%c4ô%f4•%95Å%c5õ%f5–%96Æ%c6ö%f6—%97Ç%c7÷%f7˜%98È%c8ø%f8™%99É%c9ù%f9š%9aÊ%caú%fa›%9bË%cbû%fbœ%9cÌ%ccü%fc %9dÍ%cdý%fdž%9eÎ%ceþ%feŸ%9fÏ%cfÿ%ff %a0Ð%d0 ¡%a1Ñ%d1 ¢%a2Ò%d2 £%a3Ó%d3 %a4Ô%d4 ¥%a5Õ%d5 |%a6Ö%d6 §%a7 %d7 ¨%a8Ø%d8 ©%a9Ù%d9 ª%aaÚ%da «%abÛ%db ¬%acÜ%dc ¯%adÝ%dd ®%aeÞ%de ¯%afß%df °%b0à%e0 ±%b1á%e1 ²%b2â%e2 ³%b3ã%e3 ´%b4ä%e4 µ%b5å%e5 ¶%b6æ%e6 ·%b7ç%e7 ¸%b8è%e8 ¹%b9é%e9 º%baê%ea »%bbë%eb ¼%bcì%ec ½%bdí%ed ¾%beî%ee ¿%bfï%ef 

Python 中常见字符编码和解码方面的错误及其解决办法

Python 2.x中的字符编码,设计的的确不好,导致初学者,甚至是即使用Python很长时间的人,都会经常遇到字符编解码方面的错误。 下面就把一些常见情,尽量的都整理出来,并给出相应的解决办法。 看此文之前 Python中字符编码所涉及的背后逻辑(从你输入字符,到终端显示字符的背后过程) 在去了解Python编码解码之前,还有个更加重要,但是很多时候却被其他解释相关知识的人所忽略的问题,那就是: 对于Python中字符串,输入输出的背后逻辑。 即,知其所以然。 此处就简单介绍一下,在Python中,从你所输入的字符串,到显示出字符串,这背后的过程是什么样的。 只有了解了这个大概的过程,和背后的逻辑,你才能真正理解后面的所解释的,字符串编码解码方面的错误,以及如何解决这样的错误。 对于你 你只是看到的是: 你输入了字符串 不论是从Python的IDLE中输入的还是写入到Python文件中的然后你去运行的对应代码,该Python代码,经过Python系统,(此处及之后,我称其为Python解析器),的处理使得你可以看到最终所输出的字符串 不论是在Python的IDLE中看到的还是在windows的cmd中看到的。 对于Python解析器 而Python解析器所干的事情,就是: Python解析器,根据当前的所用的字符串编码类型 此字符串编码类型,是你自己所设置的 不论是在Python的IDLE中,还是Python文件中都是你自己显示指定对应的编码类型的 当然你没显示的指定的话,那就用默认的配置 如果是Python的IDLE,如果你没修改defaultencoding,那么就使用默认的字符编码 可以通过sys.getdefaultencoding()而获得,比如此处获得是:ascii如果是Python文件,如果你没声明文件编码,则使用默认的编码:UTF-8 常见的做法是指定为对应的UTF-8类型:# -*- coding: utf-8 -*- 相关内容,不了解的可参考:【整理】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型去执行你的Python代码 其中,很常见的几种动作是: 打印print对应的所获得的字符 对于字符串打印,Python的逻辑: 如果是Unicode字符串,则可以,自动地,编码为对应的终端所用编码,然后正确的显示出来 比如unicode的字符串,输出到windows的默认编码为GBK的cmd中,则Python可以自动将Unicode编码为GBK,然后输出到cmd中个别特殊情况,也会出错: 当此unicode字符串中包含某特殊字符,而目标终端的编码集合中,没有此字符,则很明显也是无法实现将Unicode编码为对应的特定编码的字符串,无法正确显示的如果是某种编码类型的str,则需要该str的编码类型,和目标终端编码匹配 比如GBK的字符串,输出到windows的默认编码为GBK的cmd,则是可以正常输出的 此处后来经过代码测试,就发现一个有趣或者说诡异的问题,虽然我们python文件声明的UTF-8编码,但是实际上实际上是用GBK编码,而此时,文件中的字符串,很明显是用GBK存储的,所以,将此GBK字符,输出到GBK的cmd中,是可以正常输出的。即,此处字符串的类型,很明显只和文件所用的实际编码有关,而和文件所声明的代码无关。如果是UTF-8的字符串,输出到windows的默认编码为GBK的cmd,就会出错对相应的字符,进行编码(为某种特定类型的字符str),或解码(为对应的unicode类型的字符) 比如将当前的某种编码的字符串,解码为Unicode字符串 很明显,也是要保证,你字符串本身的编码和所指定的编码,两者之间要一致的 比如:decodedUnicode = someUtf8Str.decode("UTF-8")而如果用这样的:decodedUnicode = someGbkStr.decode("UTF-8"),那就会出现错误 所以你要 确保当前输入的字符串的编码,和对应的编码设置一致,才能使得解析器正常解析你的字符串确保输出字符串时,所用字符(的编码)和目标输出所用的编码一致,才能正常在输出终端显示确保字符串本身的编码,和你去解码等操作所用的编码一致,否则很明显会由于编码不一致而无法进行解码(等操作) 常见错误简介 很明显,如果你不遵守上述规则,出现前面编码不一致的情况,那么就会出现一些常见的编码解码方面的错误了。 此处只是简单举例如下: 你python文件本身是GBK的,对应的字符串也是GBK的,然后你指定按照UTF-8解码为对应的Unicode,那么当然会导致人家Python解析器,按照UTF-8编码的方式,去解析你的,实际上是GBK的字符,当然会出错,无法解析了。你所要打印的字符,本身是UTF-8的,但是要打印输出的终端是,windows的cmd,其默认编码为GBK,即将UTF-8的字符,显示到GBK编码的cmd中,当然也会出现错误了你所要打印出来的字符,虽然是unicode,但是其中包含了某些特殊字符,而对应的特殊字符在终端所用的编码中不存在,比如将含某些特殊字符的Unicode字符串,打印到windows的默认编码为GBK的cmd中,而GBK编码集合中,本身就没有这些字符,所以,当然也是无法显示,会出现对应的UnicodeEncodeError的错误的。 所以,诸如此类的问题,如果搞懂了之前的逻辑,那么自然很容易理解其错误的根源,并找到解决办法。 即,知其所以然,之后,更容易,知其然。 下面就来,故意的: 再现,出各种Python 2.x中所常见的字符的编码解码等方面的错误;然后帮你找到问题的根本原因;进而找到问题所对应的解决办法; Python 2.x的字符编码本身的设计的逻辑:str和unicode 想要了解Python 2.x中,字符串编解码的问题和原因,首先搞懂Python 2.x中在字符串的方面是如何设计的,其主要分两大类:str和unicode。 对于str和unicode的确切含义,以及如何互相转换,以及Python 2.x和Python 3.x中的bytes和str,有何区别等内容

后台ui大全(有这些你就够了)

做过后台开发的都知道,我们后台ui基本上都是去拖一个现成的ui框架,然后我们在此基础上改改就差不多了,那该如何选择合适的后台ui呢,哥们那你走运了,我最近整理了最近用的比较多的后台ui,希望有你喜欢的一款。(后面有下载链接) 目录 1.Hplus 2.AceAdmin(中/英文) 3.inspinia_admin (中/英文) 4.H-ui.admin 5.AdminLTE …… 如果没积分的可以留下你的邮箱,我看到了会发给你!我尽快传到github上去。 一,前言 我想大部分人都用过EasyUI吧,一切都好,但感觉有点土了,想换成现在流行的Bootstrap为基础的后台UI风格,想满足的条件应该达到如下几个: 1. 美观、大方、简洁 2. 兼容IE8、不考虑兼容IE6/IE7,因为现在还有很多公司在使用Win7系统,系统内置了IE8 3. 能通过选项卡打开多个页面,不想做单页,iframe也没关系 4. 性能好,不要太笨重 5. 最好以Bootstrap为基础 6. 还希望在以后别的系统中能够复用。 二,后台UI介绍 1.Hplus H+是一个完全响应式,基于Bootstrap3.3.6最新版本开发的扁平化主题,她采用了主流的左右两栏式布局,使用了Html5+CSS3等现代技术,她提供了诸多的强大的可以重新组合的UI组件,并集成了最新的jQuery版本(v2.1.4),当然,也集成了很多功能强大,用途广泛的jQuery插件,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。 官网:http://www.zi-han.net/theme/hplus/ H+与Metronic与INSPINIA非常像,插件非常多,收费998人民币。 下载地址: https://download.csdn.net/download/m0_37499059/10449035 这款我也挺喜欢的,很多开源项目也都是用它 2.AceAdmin(中/英文) 响应式Bootstrap网站后台管理系统模板ace admin,非常不错的轻量级易用的admin后台管理系统,基于Bootstrap3,拥有强大的功能组件以及UI组件,基本能满足后台管理系统的需求,而且能根据不同设备适配显示,而且还有四个主题可以切换。以前收费,好像最新版不再收费了。 官网:http://ace.jeka.by/ 功能强大,组件多,美观,只是用了很多不同的插件,兼容性不错。 下载地址: https://download.csdn.net/download/m0_37499059/10449063 3.inspinia_admin (中/英文) INSPINIA是平面设计理念的管理模板。它是充分响应的由Bootstrap3 +框架开发的模板,HTML5和CSS3。它有很多可重用的UI组件和集成了最新的jQuery插件。它可以用于所有类型的web应用程序自定义管理面板中,项目管理系统,管理仪表板,应用程序的后端,CMS或CRM。 官网:http://wrapbootstrap.com/preview/WB0R5L90S 页面规范、精致、细腻、美观大方;功能强大、非常全,收费,今天的价格是$18。 下载地址: https://download.csdn.net/download/m0_37499059/10449117 4.H-ui.admin H-ui前端框架是在bootstrap的思想基础上基于 HTML、CSS、JAVASCRIPT开发的轻量级web前端框架,开源免费,简单灵活,兼容性好,满足大多数中国网站。分了前端UI与后端UI。 官网:http://www.h-ui.net/H-ui.admin.shtml 后台,http://www.h-ui.net/ 前台 曾经一个项目后台ui就用他,感觉用的人少,名气小,资料不全,配套组件不多,但国人的产品符合国人的口味 下载地址: https://download.csdn.net/download/m0_37499059/10449140 5.AdminLTE AdminLTE 是一个基于Bootstrap 3.x的免费主题,它是一个完全响应式管理模板。高度可定制的,易于使用。适合从小型移动设备到大的台式机很多的屏幕分辨率。 官网:http://almsaeedstudio.com/preview/ 响应式布局,支持多种设备 打印增强 丰富可排序的面板组件 18个插件与3个自定义插件 轻量、快速 兼容主流浏览器,IE8不兼容 下载地址: https://download.csdn.net/download/m0_37499059/10449182