MSComm32控制的使用

注册MSComm32控件,网上下载这个控件,然后把它拷贝到到C:\Windows\system32文件夹下,我装的是64位的Win7系统,是在C:\Windows\sysWOW64文件夹下,然后打开cmd,写入代码 regsvr32 C:\Windows\system32\MSComm32.ocx然后按enter会提示你注册成功 //旧版本添加 #define _WIN32_WINNT 0x0502 #include <SDKDDKVer.h> MFC添加控件后,移到新的计算机中 1.原因:程序中使用了LZ自己添加到工程的Active控件,而目标机器上没有安装注册该控件。 2.解决方法:将该控件的.ocx文件拷贝到目标机器某个盘,假设 F:\sth.ocx;以管理员身份打开cmd,输入 regsvr32.exe F:\sth.ocx(注意中间有个空格),会提示该控件注册成功。这个时候再双击MFC的exe文件,就可以打开了。 摘自:andyzysraul 原文在这里:http://bbs.csdn.net/topics/390341393 转:http://comm.chinaaet.com/adi/blogdetail/37513.html 图解流程VS2010添加MSCOMM控件 时间就是金钱,好多东西我脑子里实现了,真正画出来只能靠他人给我去执行。。这两天就一妹子在VS2010下通过MSCOMM控件写了一个激光雷达控制的软件。。结果今天这妹子出去快活去了。。工程给我。。我打不开。。、。崩溃的如下: 网上查了些资料,了解到VS2008后,就没有MSCOMM控件了,用户想用只能手动添加,尝试了一番,现在总结一下。。 下载Verision 6.0的MSCOMM包包 我已在我网盘上传了这个控件,需要的可以在这里下载: http://pan.baidu.com/s/1kTqU4TL 其实其中最重要的还是那个mscomm32.ocx文件,VS2010木有这货。 添加到syswow64/32中 下载完毕后,把包里的所有文件拷贝到系统目录c:\windows\syswow64下(32位OS的路劲为c:\windows\systom32),最终如下: 注册mscomm32.ocx文件 有些博客乱七八糟的各种打开COM然后一堆繁琐的注册,我想说一句简单的命令就可以了,如下:Windows打开运行,并注册mscomm32.ocx文件,代码如下:regsvr32 c:\windows\SysWOW64\MSCOMM32.OCX Windows+r调出运行,输入regedit转到注册表中,如下: 找到HEKY_CLASSES_ROOT项下的License项,新建主键为4250E830-6AC2-11cf-8ADB-00AA00C00905,键值为kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun的项目,如下所示(特别注意,不新建或者主键、键值出现错误,VS添加MSCOMM后还是没法找到COM控件的)。 注意这里主键和键值一个都不能错,否则VS2010添加MSCOMM控件后,还是会找不到这个控件。。。。。我以身试法,崩溃过,因为键值缺了一个最后的5. VS2010工具箱中添加COM组件 反应的确超级慢,真的要等一会会儿,然后跳出选择工具箱项,从COM组件中浏览,如下所示: 此时在对话框中右键单击,添加Acticve控件,将会出现Microsoft Communications Control, version 6.0控件。我拖人实现的原来的工程也可以开开心心的打开了啦啦啦。。 最后,偷偷说一句,女孩子编的界面真的完全没有美感啊,我还得搞好的加工一下。。。。。哪天这位女孩看到我的这篇博客,希望不要生气,我也曾偷偷吐槽过。。。 完美强迫症,虽然还是不够完美,晒以晒我修改后的样子,如下:

Android Studio设置默认的签名文件

新浪微博SSO登录,微信分享这些都需要签名打包,才能看到效果,设置默认签名文件为自己的签名jks,这样就不需要打包了。 在app目录下添加你的.jks,然后app的build.gradle文件中的增加以下内容: 第一种: 1 2 3 4 5 6 7 8 9 10 android { signingConfigs { debug { storeFile file("你的.jks") storePassword 'android' keyAlias 'android' keyPassword 'android' } } } 第二种: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 android { signingConfigs { release { storeFile file("你的.jks") storePassword 'android' keyAlias 'android' keyPassword 'android' } } buildTypes { debug { signingConfig signingConfigs.release } } } 这样编译出来的debug版本直接用的是你的正式签名

Visual Studio中检测内存泄漏的方法

方法一: #define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> //在入口函数中包含 _CrtDumpMemoryLeaks(); //即可检测到内存泄露 //以如下测试函数为例: int main() { char* pChars = new char[10]; _CrtDumpMemoryLeaks(); return 0; }运行程序会在Output窗口得到: 注意: 1.在VS2013下测试的时候,_CrtDumpMemoryLeaks();这句必须放在函数结束处,放在主函数入口处输出窗口不会输出内存泄露信息 2.{}中的数字指明这块内存是程序中总计第几个被申请的,这种方法没有行号和其他信息输出。我们可以定义: #ifdef _DEBUG #define New new(_NORMAL_BLOCK, __FILE__, __LINE__) #endif #define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> //在入口函数中包含 _CrtDumpMemoryLeaks(); //即可检测到内存泄露 //以如下测试函数为例: int main() { char* pChars = New char[10]; _CrtDumpMemoryLeaks(); return 0; } Output窗口得到: 方法二: #define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> //在入口函数中包含 _CrtDumpMemoryLeaks(); //即可检测到内存泄露 //定义函数: inline void EnableMemLeakCheck() { _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF); } //该函数可以放在主函数的任意位置,都能正确的触发内存泄露输出 //以如下测试函数为例: int main() { EnableMemLeakCheck(); char* pChars = new char[10]; //_CrtDumpMemoryLeaks(); return 0; }方法三:直接定位指定内存块错误的代码行 在内存泄漏情况复杂的时候,可以用以下方法定位内存泄漏,这是通用的内存泄漏追踪方法中最有效的手段。

VS2013 CUDA的语法高亮和语法检查错误问题

1. 在vs2013里面设置vc++文件支持.cu;cuh;文件高亮。方法:工具->选项->文本编辑器->文件扩展名。 添加扩展名cu和cuh,对应编辑器是C++。 2.在工程属性的VC++目录->包含目录中添加:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include和C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK\C\common\inc 3. 完成以上步骤之后,还可能会发现一些__global__等下面是有红色波浪线的语法检查错误。 解决方法是:加上#include “device_launch_parameters.h”。 参考: http://ju.outofmemory.cn/entry/97435

JDBC 读取数据库中的表信息和字段信息

一、获取Connection public static Connection getConnect() { Connection con = null; try { Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection(url, name, password); } catch (Exception e) { e.printStackTrace(); } return con; } 二、获取表信息和列信息 try { Connection con = getConnect(); DatabaseMetaData metaData = con.getMetaData(); ResultSet resultSet = metaData.getTables(null, "%", "%", new String[] { "TABLE" }); while (resultSet.next()) { String tableName = resultSet.getString("TABLE_NAME"); if ("tb_sm_module".equals(tableName)) { ResultSet resultCol = metaData.getColumns(null, "%", tableName, "%"); while (resultCol.next()) { String columnName = resultCol.

dom4j的使用心得

一、创建document对象 1.读取XML文件,获得document对象 SAXReader reader = new SAXReader(); Document document = reader.read(new File("csdn.xml")); 2.解析XML形式的文本,得到document对象. String text = "<csdn></csdn>"; Document document = DocumentHelper.parseText(text); 3.主动创建document对象. Document document = DocumentHelper.createDocument(); //创建根节点 Element root = document.addElement("csdn"); 二、配置document的doctype // 添加doctype DefaultDocumentType docType = new DefaultDocumentType(); docType.setName("mapper"); docType.setPublicID("-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3- mapper.dtd"); document.setDocType(docType); 三、document对象操作节点 // 创建文档并写入磁盘中 Document document = getMyBatisDocument(); // 创建mapper节点 Element mapper = document.addElement("mapper"); mapper.addAttribute("namespace", Config.getProperty("dao") + "." + myTable.getBeanName() + "Dao"); // 创建resultMap节点 Element resultMap = mapper.

WINDOWS中NEXUS的安装使用【ATCO整理】

一、介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。Nexus 使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。Nexus支持WebDAV与LDAP安全身份认证。 Nexus的下载地址是:http://www.sonatype.org/nexus/archived/,WINDOWS下载的是ZIP包,如:nexus-2.11.0-02-bundle.zip(文件名带有bundle表示该文件集成了web服务器,也就不需要再部署到其他中间件上面了)。 到官网上将ZIP的压缩包下载下来解压之后发现有两个文件夹,一个是nexus-2.11.0-02,另一个是sonatype-work;第一个文件夹包含了Nexus运行所需要的文件,是运行Nexus必须的;第二个文件夹目录包含Nexus生成的配置文件、日志文件、仓库文件等,当需要备份Nexus的时候,默认备份的是此目录文件。 二、设置环境变量 找到nexus目录下nexus-2.11.0-02中的bin文件夹,将至bin的目录路径加入到操作系统的path变量中。 三、启动 在nexus-2.11.0-02中的bin文件夹的jsw文件夹中,按操作系统放置了一些可执行脚本,可按情况双击运行,也可在命令行进行。 打开cmd命令行,输入nexus命令,会看到如下提示:start/stop/restart/install/uninstall,只要在nexus命令后面加这些命令中的其中之一即可,如下图所示,先安装,然后启动,成功之后可以打开浏览器:http://localhost:8081/nexus/#welcome,看到欢迎界面。 单击右上角的“Log In”按钮进行登录,Nexus的默认管理员账户密码为admin/admin123。 四、配置Nexus 登录进去之后,可以看到有repositories,点击,发现Releases和Snapshots仓库,其中Releases表示内部的模块中Release模块的发布仓库,Snapshots表示发布内部的Snapshot模块的仓库。3rd party表示第三方依赖的仓库,这三种都是hosted类型的仓库,其中Proxy类型的仓库表示从远程中央仓库中寻找数据的仓库。 我们可以从上图中看到四种仓库类型:group(仓库组)、hosted(宿主)、proxy(代理)和virtual(虚拟)。其中每种类型的Format有Maven1或者Maven2,这里我们不看Maven1的。仓库的Policy(策略)表示该仓库为发布(Release)版本还是快照(Snapshot)版本仓库。 在图5中,Nexus列出了默认的几个仓库: Public Repositories:仓库组,将所有策略为Release的仓库聚合并通过一致的地址提供服务。 3rd party:一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件。 Apache Snapshots:策略为Snapshots的代理仓库,用来代理Apache Maven仓库的快照版本构件。 Central:该仓库代理Maven的中央仓库,策略为Release,只会下载和缓存中央仓库中的发布版本构件。 Central M1 shadow:maven1格式的虚拟类型仓库。 Codehaus Snapshots:代理Codehaus Maven仓库快照版本的代理仓库。 Release:策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件。 Snapshots:策略为Snapshots的宿主类型仓库,用来部署组织内部的快照版本构件。 五、下载索引 点击左侧的Views/Repositories->下面出现Repositories->点击右边的Central->点击下面的Configuration 将Download Remote Indexes值改为true,点击“save”后,点击左边的“Administration”->"Scheduled Tasks"链接,如果没有出现“Update Repositories Index”处于Running状态,那么需要在Public Repositories行右击,点击"Update Index"。 然后再点击Schedule Tasks就可以看到有任务处于Running状态了。 等到索引下载完成之后,就可以在"Repositories"界面中,选择Browser Index选项卡,可以看到Maven中央仓库内容的树形结构,如下图所示。 在左边的搜索框中输入Spring关键字,然后搜索,会出现一大堆与Spring相关的结果。 六、私有仓库配置 在MAVEN目录下的Settings.xml中配置远程仓库,Maven的Settings.xml中提供的profile是一组可选的配置,可以用来设置或者覆盖配置默认值,在Setting.xml文件中加入以下代码, <profiles> <profile> <id>local_nexus</id> <repositories> <repository> <id>local_nexus</id> <name>local_nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>local_nexus</id> <name>local_nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>local_nexus</activeProfile> </activeProfiles> 上面的配置中,使用了一个id为local_nexus的profile,这个profile包含了相关的仓库配置,同时配置中又使用了activeProfiles元素将nexus这个profile激活,这样当执行Maven构建的时候,激活的profile会将仓库配置应用到项目中去。

iOS 让数字保持两位数格式

NSLog(@"%02ld",2); NSLog(@"%0.2f",0.2656); NSLog(@"%0.2f",0.2646); 注意的是%0.2f 是会对数字进行一个四舍五入 2016-06-20 14:57:28.506 App[4010:98217] 02 2016-06-20 14:57:28.507 App[4010:98217] 0.27 2016-06-20 14:57:28.507 App[4010:98217] 0.26

PHP的面向对象编程思想

这篇文章介绍了在PHP中的面向对象编程(OOP,Object Oriented Programming)。同时演示了如何通过使用一些OOP的概念和PHP的技巧来减少编码和提高质量。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,随着项目越来越大,使用OOP可能会有帮助,OOP代码很容易维护,容易理解和 重用。这些就是软件工程的基础。在基于web的项目中应用这些概念就成为将来网站成功的关键。 最后,本文向你展示了PHP更高级的一些OOP技术,如序列化(Serializing),拷贝和克隆等。 面向对象编程的概念: 不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面: 抽象数据类型和信息封装 继承 多态 在PHP中是通过类来完成封装的: &lt;?php class Something { // 在OOP类中,通常第一个字符为大写 var $x; function setX($v) { // 方法开始为小写单词,然后使用大写字母来分隔单词,例如getValueOfArea() $this-&gt;x=$v; } function getX() { return $this-&gt;x; } } 当 然你可以按自已的喜好进行定义,但最好保持一种标准,这样会更有效。数据成员在类中使用"var"声明来定义,在给数据成员赋值之前,它们是没有类型的。 一个数据成员可以是一个整数,一个数组,一个相关数组(associative array)或者是一个对象。方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用$this-&gt;name,否则对一个方法 来说,它只能是局部变量。 使用new操作符来创建一个对象: $obj=new Something; 然后你可以使用成员函数通过: $obj-&gt;setX(5); $see=$obj-&gt;getX(); 在 这个例子中,setX成员函数将5赋值给对象的成员变量x(不是类的),然后getX返回它的值5。可以象:$obj-&gt;x=6那样通过类 引用方式来存取数据成员,这不是一个很好的OOP习惯。我强烈建议通过方法来存取成员变量。如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用 方法,你将是一个好的OOP程序员。不幸的是,PHP不支持声明私有成员变量,所以不良代码在PHP中也是允许的。继承在PHP中很容易实现,只要使用 extend关键字。 &lt;?php class Another extends Something { var $y; function setY($v) function getY() { return $this-&gt;y; } } "Another"类的对象现在拥有了父类(Something)的全部的数据成员及方法,而且还加上了自已的数据成员和方法。 你可以使用 $obj2=new Something; $obj2-&gt;setX(6); $obj2-&gt;setY(7); PHP 现在还不支持多重继承,所以你不能从两个或两个以上类派生出新的类来。你可以在派生类中重定义一个方法,如果我们在"

为什么PHP要学习面向对象编程

先讲一个自己看到故事吧: 你可能会直接在Web页面上书写大量的代码,因为PHP本身就有这样的功能;你也可能会在文件中添加工具函数(如数据库访问代码),然后把文件放到页面上去,不知不觉中写出来的Web应用程序也可以正常运行。你很陶醉在这里面,因为你的站点看起来是那么的奇妙,站点运行良好,客户也很开心,站点的用户也愿意为之付费。 然而在开始一个新的开发阶段时,再去看看以前的代码,问题就出现了。现在你有了一个更大的开发团队、更多的用户和更充足的预算。在没有任何预警的情况下,事态开始恶化,就像你的项目中了毒一样。 新加入的程序员开始费力的去理解你的代码,尽管你看起来就是几分钟能搞定的事情,虽然代码有些绕。他将花费你难以想象的时间去成为一个合格的团队成员。 要做一个简单改变,你发现必须更新20多个页面。这样原本计划一条的内容,实际上却花费了3天。 一个程序员保存了他对某个文件的修改,而实际上你在以前对这个文件进行了大量的修改,于是你以前的修改全部作废。这个损失在3天内也没有被发现,因为你有本地的副本,你一直在自己的代码上工作。当你发现这个问题的时候,你又花费一条来理清这个文件的头绪,以便第三个程序来说使用它使能按兵不动。 由于站点受欢迎,访问量增加,因此你需要把代码迁移到新的服务器上去。因为你不想重写迁移到新服务器的所修改的代码,所以迁移过程必须暂停开发工作。 最后你开始第二个阶段,并且头一天半一切正常。在你就要下班离开办公室时出现了第一个bug报告,几分钟后客户打电话来投诉。他和第一个报告的bug很相似,但经过更详细的调查,你发现这是由另一个引起类似行为的bug。你开始回忆在本阶段开始时的简单修改导致对整个项目其余部分所做的大量修改。 这时你认识到有些修改还不彻底。可能出错的原因是有的在最初被忽略了,或是有问题的文件在合并的时候被覆盖了。你急忙的进行必要的修改来解决问题。你脚不沾地的忙于测试所做的修改,但只是简单的复制和粘贴,这样应该不会有什么问题吧? 第二天早上你到达办公室时发现,购物车模块儿一整晚都不能运行了。你最后一分钟的修改漏掉了一个引号,所以代码不能用了。自然,在你酣睡的时候,其它时区的顾客并没有在睡觉,他们本来是有可能在你的网店上消费的。你解决了问题,安抚了客户,并且集合队伍开始另一天的救火行动。 许多php项目就是这样由一个个的小项目慢慢变成了令人恐惧的怪兽,由于表现层中也包含应用程序逻辑,随着数据库查询、用户验证、表单处理等工作的进行代码从一个页面复制到另一个页面,重复现象很早就开始在代码中蔓延。每当改动这些代码块之一,那么代码块出现的每个地方都需要改动,否则就会出现bug。当然,面向对象的好处远远不只是便于维护代码,他所体现的面向对象的思想将一个体系分作很多的个体,这样来,别人只需要知道怎么调用你所写的类或对象,并不一定要去理解他是怎么去实现的,除此自外,所积累的类变多了,所体现的就不是开始的感觉很费时,反而是可以在多个页面都能使用类中的方法时效率得到提高。 但事物总是没有绝对的,过度的依赖OOP也会存在弊端,当若是想通往PHP中高级的道路(当然自己现在连初级也算不上,但我会为之努力),OOP定将是不可或缺的。

Android简单的ViewPager指示器

平常写项目在写介绍页,或者一些简单的轮播图的时候,总会需要搭配指示器来标明当前在什么位置.写法也比较多,刚好自己需要用到,以前用的一些方法,用起来需要配置好多东西,有些大材小用,所以来简单的实现一个.效果图如下: 一、简单分析与代码实现 因为比较简单,所以就简单的分析一下: 1)每一个指示器项有两种状态,普通状态和选中状态,所以需要准备两种状态的图片. 2)指示器的个数和ViewPager的页数要保持一致.可以引用ViewPager对象,来获取ViewPager的页数.从而创建指示器. 3)指示器要跟随ViewPager的移动来动态的改变状态.同样可以引用ViewPager对象,对ViewPager进行监听,处理指示器的状态改变. 有了思路,就来具体实现一下,提出一些自定义属性,在attr文件中定义: <?xml version="1.0" encoding="utf-8"?> <resources> <!--IndicatorView相关--> <!--普通指示器图片--> <attr name="normalDrawable" format="reference"/> <!--选中指示器图片--> <attr name="selectDrawable" format="reference"/> <!--指示器间隔--> <attr name="indicatorInterval" format="dimension"/> <!--普通指示器颜色--> <attr name="normalColor" format="color"/> <!--选中指示器颜色--> <attr name="selectColor" format="color"/> <!--圆点弧度--> <attr name="indicatorRadius" format="integer"/> <declare-styleable name="IndicatorView"> <attr name="normalDrawable"/> <attr name="selectDrawable"/> <attr name="indicatorInterval"/> <attr name="normalColor"/> <attr name="selectColor"/> <attr name="indicatorRadius"/> </declare-styleable> </resources> 新建一个IndicatorView继承自LinearLayout即可,因为需要对ViewPager进行监听,所以实现一下ViewPager的监听.定义变量并获取自定义属性: /** * 轮播图圆形指示器 * Created by junweiliu on 16/6/15. */ public class IndicatorView extends LinearLayout implements ViewPager.

android studio2.0遇到的问题及解决方案记录及 .9.png制作

问题一:【Error:Execution failed for task ':app:mergeDebugResources'. > Crunching Cruncher top1_bg.9.png failed, see logs】 采用网友方法一: ”在主工程文件夹下的build点gradle文件里,加两句 aaptOptions点cruncherEnabled = false aaptOptions点useNewCruncher = false 例如我的改了之后就变成这样了: android { compileSdkVersion 22 buildToolsVersion "23.0.1" aaptOptions.cruncherEnabled = false aaptOptions.useNewCruncher = false defaultConfig { minSdkVersion 5 targetSdkVersion 17 } more............ 然后就好了,随便怎么clean,怎么重新构建,都OK无报错。” 加上后 我的项目代码如下: 不识别这两个属性,build后项目报错: Error:Execution failed for task ':robot:mergeDebugResources'. > E:\Users\Administrator\AndroidStudioProjects\MyApplication\robot\src\main\res\drawable\title_bar.9.png: Error: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'e:\Users\Administrator\AppData\Local\Android\sdk\build-tools\23.0.1\aapt.exe'' finished with non-zero exit value 42 或者报: 后来看到帖子发现应该加: android { compileSdkVersion 22 buildToolsVersion '23.

强悍的 Ubuntu —— 粘贴板

Windows 用户应该都有切肤之痛,就是新的 ctrl + c 会覆盖之前复制的内容。Ubuntu 强大的粘贴板实在是方便和有用。 1. 查看全局的粘贴板内容 使用 ctrl + ;(此为 fcitx 自带剪贴板插件) :查看粘贴板的内容,此时显示的就不只有一条内容,一般而言是最近的五次复制的内容。使用数字键进行选择。 2. 使用 parcellite $ sudo apt-get install parcellite $ parcellite

VS中VC++目录中的$是什么意思

$(VC_ExecutablePath_x64); //项目是x64平台 $(WindowsSDK_ExecutablePath); $(VS_ExecutablePath); $(MSBuild_ExecutablePath); $(VC_IncludePath); $(VCInstallDir)UnitTest\include; etc. $是宏替换符号,后面的字符都宏(Micro) 随便对项目属性->VC++下的某一个目录进行编辑,都会在右下角看到一个“宏”,点开之后就可以看到了。某一些是从环境变量中继承的,比如PROCESSOR_IDENTIFIER:Intel64 Family 6 Model 58 Stepping 9, GenuineIntel和CUDA_PATH。 原回答:https://social.msdn.microsoft.com/Forums/en-US/11b7b72d-d093-41c4-9310-3dd944d5e3e8/vc-directories?forum=vcgeneral 既然说到这了,那就把VC++的这些个目录和宏再理解一下: 1.可执行文件目录:生成VC++项目期间,搜索可执行文件时使用的路径 1.1 $(VC_ExecutablePath_x64):D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin,这里包含了VS的编译器cl.exe、链接器lk.exe和相应的dll。 1.2 $(WindowsSDK_ExecutablePath): c:\Program Files (x86)\Windows Kits\8.1\bin\x64\ ,这里包含了Windows Driver Kit(WDK) 1.3 $(PATH):这个是环境变量->系统变量->PATH一致。包含了c:\Windows\System32,D:\opencv\build\x86\vc12\bin,D:\opencv\build\x64\vc12\bin等,这里存放的也是一些DLL文件。将工程Build后,Exe文件会动态加载其中的dll。这里面有个问题就是如果这些Path中有重复的文件怎么办,加载哪一个? 2.包含目录:生成VC++项目期间,搜索包含文件时使用的路径 2.1 $(VC_IncludePath):包含了VC的一些.h文件,比如stdio.h和sstream等。 2.2 $(WindowsSDK_IncludePath):WDK的一些头文件 2.3 其他:比如我们添加的OpenCV的一些头文件路径D:\opencv\build\include\opencv\ 3.库目录:生成VC++项目期间,搜索库文件时使用的路径 3.1 $(VC_LibraryPath_x64):包含了VC的一些.lib文件 3.2 $(WindowsSDK_LibraryPath_x64):包含了WDK的一些lib文件 3.3 其他:我们添加的OpenCV的一些Lib路径,比如d:\opencv\build\lib\Debug;D:\opencv\build\install\x64\vc12\lib 注意,库目录只是指明了lib的路径,具体用哪一个lib,需要在链接器->附加依赖项中添加,比如opencv_calib3d249d.lib等。 已经有了库目录,为什么还要附加依赖项?下面有两个解释,不妨参考下: http://stackoverflow.com/questions/4066405/when-to-use-the-visual-studio-additional-dependencies https://www.zhihu.com/question/21735299

Android带有边框的RelativeLayout、LinearLayout

平常开发的时候总会遇到一些分割线,之前都是用一个View或者一个ImageView来绘制一条比较细的分割线,时间长了再去修改代码,有的时候就去要看一下,也比较乱.所以就打算写一个带有边框的ViewGroup方便日常开发. 一、代码实现 代码很简单,直接放下代码: 定义一下自定义属性,在attr文件: <!--边框的粗度--> <attr name="borderStrokeWidth" format="float"/> <!--边框颜色--> <attr name="borderColor" format="color"/> <!--底边边线左边断开距离--> <attr name="borderBottomLeftBreakSize" format="dimension"/> <!--底边边线右边断开距离--> <attr name="borderBottomRightBreakSize" format="dimension"/> <!--是否需要上边框--> <attr name="needTopBorder" format="boolean"/> <!--是否需要左右边框--> <attr name="needLeftAndRigtBorder" format="boolean"/> <!--是否需要下边框--> <attr name="needBottomBorder" format="boolean"/> <declare-styleable name="BorderRelativeLayout"> <attr name="borderStrokeWidth"/> <attr name="borderColor"/> <attr name="borderBottomLeftBreakSize"/> <attr name="borderBottomRightBreakSize"/> <attr name="needTopBorder"/> <attr name="needLeftAndRigtBorder"/> <attr name="needBottomBorder"/> </declare-styleable> 定义一个BorderRelativeLayout继承自RelativeLayout: package com.junweiliu.widget; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.widget.RelativeLayout; import com.junweiliu.R; /** * Created by junweiliu on 16/6/3.

Socket编程时recv函数错误:Transport endpoint is not connected的解决

今天在做socket网络通信实验时,server端执行到recv函数处报错:Transport endpoint is not connected。 以下是server和client的源码: server.c 1 #include <stdio.h> 2 #include <arpa/inet.h> 3 #include <sys/socket.h> 4 #include <string.h> 5 #include <unistd.h> 6 #include <stdlib.h> 7 #define SERVER_PORT 5000 8 9 10 int main(){ 11 /*地址初始化*/ 12 struct sockaddr_in serveraddr; 13 struct sockaddr_in clientaddr; 14 memset(&serveraddr,0,sizeof(serveraddr)); 15 serveraddr.sin_family = AF_INET; 16 serveraddr.sin_addr.s_addr = INADDR_ANY; 17 serveraddr.sin_port = htons(SERVER_PORT); 18 bzero(&(serveraddr.sin_zero),8); 19 //1.create sock 20 int sock,conn,sbind,lis; 21 char buf[32]; 22 sock = socket(AF_INET,SOCK_STREAM,0); 23 if(sock ==-1){perror("

android Rect四个参数介绍

这个构造方法需要四个参数这四个参数 指明了什么位置 ?我们就来解释怎么画 这个 矩形 这四个 参数 分别代表的意思是: left top right bottom 上下左右呗。啊,不是 是 左 上 右 下。 下面给大家解释 left : 矩形左边的X坐标 150 —->图片中的A点 top: 矩形顶部的Y坐标 75 —->图片中的B点 right : 矩形右边的X坐标 260 —–>图片中的C点 bottom: 矩形底部的Y坐标 120 ——->图片中的D点 不知道大家到这里 能不能马上就能想象出 这个矩形应该在屏幕的什么位置 我是不能 就在纸上画了画 下边来张图 我模拟器的 屏幕是 320*480 我也是 画一个大概的位置 主要是明白 那几个点在什么地方。 在图中 我分别以 A B C D 代表 那四个点 图片中红色的部分就是我们要画的矩形。 canvas.clipRect(10, 10, 280, 260) 这个裁剪画布的方法 的参数含义和 我们new Rect(150, 75, 260, 120) 的参数含义是一样的。

浅谈数据分析和数据建模

浅谈数据分析和数据建模 大数据应用有几个方面,一个是效率提升,帮助企业提升数据处理效率,降低数据存储成本。另外一个是对业务作出指导,例如精准营销,反欺诈,风险管理以及业务提升。过去企业都是通过线下渠道接触客户,客户数据不全,只能利用财务数据进行业务运营分析,缺少围绕客户的个人数据,数据分析应用的领域集中在企业内部经营和财务分析。 数字时代到来之后,企业经营的各个阶段都可以被记录下来,产品销售的各个环节也被记录下来,客户的消费行为和网上行为都被采集下来。企业拥有了多维度的数据,包括产品销售数据、客户消费数据、客户行为数据、企业运营数据等。拥有数据之后,数据分析成为可能,企业成立了数据分析团队整理数据和建立模型,找到商品和客户之间的关联关系,商品之间关联关系,另外也找到了收入和客户之间的关联关系。典型的数据分析案例如沃尔玛啤酒和尿布、蛋挞和手电筒,Target的判断16岁少女怀孕都是这种关联关系的体现。 关联分析是统计学应用最早的领域,早在1846年伦敦第二次霍乱期间,约翰医生利用霍乱地图找到了霍乱的传播途径,平息了伦敦霍乱,打败了霍乱源于空气污染说的精英,拯救了几万人的生命。伦敦霍乱平息过程中,约翰医生利用了频数分布分析,建立了霍乱地图,从死亡案例分布的密集程度上归纳出病人分布同水井的关系,从而推断出污染的水源是霍乱的主要传播途径,建议移除水井手柄,降低了霍乱发生的概率。 另外一个典型案例是第二次世界大战期间,统计分析学家改造轰炸机。英美联盟从1943年开始对德国的工业城市进行轰炸,但在1943年年底,轰炸机的损失率达到了英美联盟不能承受的程度。轰炸军司令部请来了统计学家,希望利用数据分析来改造轰炸机的结构,降低阵亡率,提高士兵生还率。统计学家利用大尺寸的飞机模型,详细记录了返航轰炸机的损伤情况。统计学家在飞机模型上将轰炸机受到攻击的部位用黑笔标注出来,两个月后,这些标注布满了机身,有的地方标注明显多于其他地方,例如机身和侧翼。有的地方的标注明显少于其他地方,例如驾驶室和发动机。统计学家让军火商来看这个模型,军火商认为应该加固受到更多攻击的地方,但是统计学家建议对标注少的地方进行加固,标注少的原因不是这些地方不容易被击中,而是被击中的这些地方的飞机,很多都没有返航。这些标注少的地方被击中是飞机坠毁的一个主要原因。军火商按照统计学家的建议进行了飞机加固,大大提高了轰炸机返航的比率。以二战著名的B-17轰炸机为例,其阵亡率由26%降到了7%,帮助美军节约了几亿美金,大大提高了士兵的生还率。 一数据分析中的角色和职责 数据分析团队应该在科技部门内部还在业务部门内部一直存在争议。在业务部门内部,对数据场景比较了解,容易找到数据变现的场景,数据分析对业务提升帮助较大,容易出成绩。但是弊端是仅仅对自己部门的业务数据了解,分析只是局限独立的业务单元之内,在数据获取的效率上,数据维度和数据视角方面缺乏全局观,数据的商业视野不大,对公司整体业务的推动发展有限。业务部门的数据分析团队缺少数据技术能力,无法利用最新的大数据计算和分析技术,来实现数据分析和建模。数据分析和计算依赖于科技部门,效率较低,无法打通各个环节和实现效率和收益最优。 数据分析和挖掘部门位于科技部门,优点是直接可以了解所有数据,利用最新的大数据计算分析技术来进行数据分析和建模,数据视野好。面对全局数据建立数据采集和分析系统,系统复用程度高,降低重复投资,效率高。但是团队人员商业敏感度低,过度关注技术和架构,重视技术的领先和处理效率,数据商业敏感度低,不重视数据商业化场景,对业务理解程度不够,支持力度不如前者。科技部门愿意搭建一个大数据平台,让业务部门自己去寻数据场景,业务部门在数据商业化过程中也会遇到环节不畅通,效率低下的问题。 数据分析团队应该属于独立的部门,为所有的业务部门提供服务,具有独立的技术团队,可以搭建独立的大数据计算和分析平台,利用最新的数据处理技术来建立模型进行分析。另外数据分析团队的人应来源于业务部门,具有高度的数据商业敏感度,可以将业务部门的需求分解为数据需求,将业务场景同数据场景以及数据分析相结合起来。 数据分析是一项实践性很强的工作,涉及到很多交叉学科,需要不同的岗位和角色,来实现不同的性质的工作。基本的岗位和角色如下 1 数据库(仓库)管理员DBA DBA最了解企业内部的数据和可用的数据资源,包括数据的存储细节和数据字典,另外其对数据的采集、清洗和转化起到关键作用。 DBA为数据科学家和数据分析师提供加工好的原始数据,这些数据是数据分析和建模的基础,DBA做了数据分析工作中最重要的基础工作,完成了大量的脏活和累活。 2 业务专家 业务专家的优势是数据的商业敏感度,了解业务需求,可以将业务需求转化为数据需求,进一步找到数据应用场景。另外业务专家也可以通过对数据的分析,找到新的商业机会,同业务部门一起制定商业计划,利用数据分析推动业务增长。 业务专家的经验对于数据分析和建模是非常关键的,他们可能是风险管理人员、欺诈监测专家、投资专家等。数据建模来源于业务经验和业务知识,正是业务专家的专业分析找到了业务规律,从而找到了建模方向,并对建模工作给出建议和解释。 3 数据科学家 过去统计分析依赖于统计分析工具,大数据时代之后,数据量级的提升和数据类型的复杂程度,让很多传统的统计分析工具无法完成分析计算。这个时候,数据科学家出现了,他们可以利用自己的专业技能帮助业务专家和数据分析人员进行建模和计算。 过去数据统计分析建模常用SPSS,SAS,MATLAB等工具,现在基于大数据平台的分析建模可以使用Spark+Scala/Python/R/Java。数据科学家了解模型和算法,可以直接承担建模和调优工作,懂得选择合适的算法来进行计算,提高效率。 4数据分析师 数据分析师站在数据和商业的角度来解读数据,利用图标和曲线等方式向管理层和业务人员展现分析结果,揭示数据分析产生的商业机会和挑战。 数据分析师将杂乱的数据进行整理后,将数据以不同的形式展现给产品经理、运营人员、营销人员、财务人员、业务人员等。提出基于数据的结果和分析建议,完成数据从原始到商业化应用到关键一步,数据分析师的数据敏感度、商业敏感度、分析角度、表达方式对于商业决策很重要。 5 运营专家 数据分析结果和商业决策出来之后,运营专家负责实现商业决策。通过有计划的运营活动,将数据分析的结果应用到实际的商业活动之中,运营专家是实现数据变现最后一公里的关键人物。 运营专家属于业务人员,实际上参与业务运营活动,利用数据分析结果,实现业务场景和数据场景的结合,实现数据商业化应用。 二数据分析之前的各项准备工作 数据分析团队各成员确定之后,将进行下一项工作,就是找到有价值的数据进行分析了。数据是分析的基础,因此数据的质量、数据的相关度、数据的维度等会影响数据分析的结果影,其中GIGO(垃圾进垃圾出)对于数据分析结果影响最大。 1 数据源选择 数据分析团队面对大量的数据源,各个数据源之间交叉联系,各个数据域之间具有逻辑关系,各个产品统计口径不同,不同的时间段数值不同等。这一系列问题多会影响数据分析结果,因此确定数据源选择和数据整理至关重要。 DBA可以基于数据分析需要,找到相关数据,建立一张数据宽表,将数据仓库的数据引入到这张宽表当中,基于一定的逻辑关系进行汇总计算。这张宽表作为数据分析的基础,然后再依据数据分析需要衍生出一些不同的表单,为数据分析提供干净全面的数据源。宽表一方面是用于集中相关分析数据,一方面是提高效率,不需要每次分析时都查询其他的数据表,影响数据仓库效率。 2 数据抽样选择 简单的数据分析可以调用全体数据进行分析,数据抽样主要用于建模分析,抽样需考虑样本具有代表性,覆盖各种客户类型,抽样的时间也很重要,越近的时间窗口越有利于分析和预测。在进行分层抽样时,需要保证分成出来的样本比例同原始数据基本一致。 3 数据类型选择 数据类型分为连续型和离散型,建模分析时需要确定数据类型。进行业务收入趋势分析、销售额预测分析、RFM分析时,一般采用连续型变量。信用评级、分类预测时一般采用离散变量。 4 缺失值处理 数据分析过程中会面对很多缺失值,其产生原因不同,有的是由于隐私的原因,故意隐去。有的是变量本身就没有数值,有的是数据合并时不当操作产生的数据缺失。 缺失值处理可以采用替代法(估值法),利用已知经验值代替缺失值,维持缺失值不变和删除缺失值等方法。具体方法将参考变量和自变量的关系以及样本量的多少来决定。 5 异常值检测和处理 异常值对于某些数据分析结果影响很大,例如聚类分析、线性回归(逻辑回归)。但是对决策树、神经网络、SVM支持向量机影响较小。 一般异常值是指明显偏离观测值的平均值,例如年龄为200岁,平均收入为10万元时,有个异常值为300万元。第一个异常值为无效异常值,需要删掉,但是第二个异常值可能属于有效异常值,可以根据经验来决定是否保留或删掉。 6 数据标准化 数据标准化的目的是将不同性质、不同量级的数据进行指数化处理,调整到可以类比的范围。例如在建立逻辑回归模型时,性别的取值是0或以,但是收入取值可能就是0-100万,跨度较大,需要进行标准化。 一般可以采用最佳/最大标准化(Min-Max 标准化法)将数值定在0和1之间,便于计算。Z分数法和小数定标标准化法也可以采用。 7 数据粗分类(Categorization)处理 归类和分类的目的是减少样本的变量,常有的方法由等间距分类,等频数分类。可以依据经验将自变量分成几类,分类的方法可以不同,建议采用卡方检验来决定采用哪种分类方法。连续型变量可以用WOE变化方法来简化模型,但降低了模型的可解释性。 8 变量选择 数据分析过程中会面对成百上千的变量,一般情况下只有少数变量同目标变量有关,有助于提高预测精度。通常建模分析时,有意义的变量不会超过10-15个,称他们为强相关变量(聪明变量)。可以利用变量过滤器的方法来选择变量。常见的变量过滤器应用场景如下。 连续型目标变量(CLV,LGD) 离散型目标变量/分类变量 (欺诈否/响应否/信用评分/流失否) 连续型变量 皮尔森系数 费西尔数 离散型变量 费希尔分数/方差分析ANOVA 信息差/IV

无线宽带和有线宽带、光纤宽带有什么不同?

宽带:有无线宽带、有线宽带、光纤宽带等分类。 无线宽带 无线宽带包括两种,一种就是手机上网,当然现在也可以用上网卡通过笔记本电脑上网。另外一种就是现在非常时髦的无线局域网,又叫做WiFi的东西。 有线宽带 有线宽带有好多中,比较常见的一是ADSL,原来电信运营商为了充分利用现有的电话线而开发的一种技术。因为利用了住宅中已经有的电话铜线,所有建设成本比较低。但传输速率一般只能达到几兆,虽然理论上可以达到更高的速率,但在实际应用中,很多家庭的铜线质量不好,达不到理论的最大值。 另外一种常见的是小区宽带,利用的是以太网技术,平均每用户的传输速率可以达到十兆左右。 去年三网融合闹得热火朝天,广电也可以利用现有的有线电视使用的同轴电缆提供电信服务,特别是上网业务。广电入户的基本技术方案主要是EOC,就是Ethernet Over Cable。根据用户数量的不同,一般每用户也可以达到十几兆。上海电信宽带用户从1月1日起可免费申请带宽升级,免费提速最高网速可达20M。 光纤宽带 最先进的技术是光纤,按照光纤到用户的距离,可以分为光纤入户(FTTH)和光纤到大楼(FTTB)。采用光纤入户技术以后,用户的传输速率可以达到百兆以上。“光纤到户”,网速最高达100兆。 有高人总结过,有线的带宽是无限的,无线的带宽是有限的。 4兆的网络光纤和4兆的ADSL宽带有啥区别 光纤上下行速率对等,ADSL不管几M.上行都是50K.很垃圾,有的选当然不用ADSL用光纤。光纤的响应延时很低,游戏中很爽。 延迟不一样。上传不一样,ADSL的为512K到1M。下载ADSL受传输介质影响大。

拨号上网和宽带区别

连接方式和带宽不一样: 拨号是用电话线,带宽14kbps-56kbps(Modem不同速度不同),而宽带用网线连到Adsl Modem,再连到电话线,须向营运商申请,带宽1-3Mbps都有,带宽大的速度快。 另外,拨号是模拟信号,也就是说电脑将数字信号通过modem转为模拟信号,然后通过电话线路进行传输,在电信那里再转为数字信号,而宽带传输的就是数字信号。 还有,拨号所用的频率和电话的频段一样,所以在用拨号上网时,是不能打电话的,而ADSL的频率远高于电话的频段,所以在通过宽带上网时是可以打电话的。 扩展: 常见的上网方式有如下几种: (1)使用MODEM拨号上网 (2)使用ADSL宽带拨号上网 (3)使用网线接入局域网 (4)使用无限网卡接入无线网络 (5)使用手机上网包括以手机作为MODEM拨号上网和以手机进行GPRS上网,还有手机直接拨号上网 如果是笔记本上网,那上网方式又可分为如下几种: (1)直接将电话线插在笔记本上进行MODEM拨号上网 (2)直接插网线(双绞线)进行ADSL或局域网接入 (3)直接打开无限网络设置进行无线上网 (4)使用手机和手机数据线及其驱动光盘进行手机上网(不过资费要比(1)——(3)高) 56K MODEM上网 虽然现在宽带很流行,但对于很多没有开通宽带的城市郊区或小乡镇读者而言,56K MODEM依然是其上网时的首选。56K MODEM是将电脑通过电话线连接到另一台电脑或一个电脑网络的装置,它的作用是将电脑的数字信号转换为能够依电话线路传输的模拟信号,通过网络传递到另外的电脑或服务器;对于接受到的模拟信号,则由它再解调为数字信号,以便电脑能够识别。 此外,目前一些调制解调器还具有传真功能,可用来接收和发送传真,有些型号还具有语音功能,可以方便地实现语音信箱等功能。56K指的是Modem与ISP之间建立网络连接时的速率,它是一个理论值,在实际的上网过程中,由于电话线路质量及网络传输的忙碌程度不同,实际的网速 在很多情况下达不到其额定值(最高能达到52K、而在边远地区最多能达到14-36K就不错了),所以其在多数上网应用中已显得力不从心。 适合人群:已有MODEM(如笔记本电脑内置),在国庆期间偶尔上网的用户,当然,你也可买一块新MODEM或淘一块人家不用的二手猫来用,其投入也不多,大概20-100元左右。现在采用56K MODEM上网除了廉价的包月方式外,一般都使用的是公用通用帐号和密码(如帐号16300;密码16300),不需要单独的申请,这样即使你是带着笔记本到异地去旅游,只要小旅店里有电话你就可用其上上网,收下EM,看看有没有好友QQ消息等等。 DSL上网 ADSL其实是DSL的一种, ADSL宽带 上网是目前各城市城镇上网接入主推的主流。大家知道,数字用户线DSL(Digital Subscriber Line)是一种不断发展的高速上网宽带接入技术,该技术采用较先进的数字编码技术和调制解调技术在常规的电话线上传送宽带信号。 目前已经比较成熟并且投入使用的的数字用户线方案有ADSL、HDSL、SDSL和VDSL(ADSL的快速版本)等,这些方案都是通过一对调制解调器来实现,其中一个调制解调器放置在电信局,另一个调制解调器放置在用户一端。 在使用DSL浏览因特网时,不需要另外再缴纳电话费,因为通过ADSL上网并没有经过电话交换网接入Internet,只占用PSTN线路资源和宽带网络资源,所以只需要缴纳ADSL月租费。 ISDN上网 ISDN(Integrated Services Digital Network,综合业务数字网),与56K MODEM相比,其具有以下几个优点: 一、ISDN实现了端到端的数字连接,而MODEM在两个端点间传输数据时必须要经过D/A和A/D转换; 二、ISDN可实现双向对称通信,并且最高速度可达到64Kbps或128Kbps。而56K MODEM属不对称传输,56K猫的下传(网到用户)速度为56Kbps,而上传(用户到网)速度只有33.6Kbps; 三、ISDN可实现包括语音、数据、图像等综合性业务的传输,而56K MODEM却无法实现; 四、ISDN可以实现一条普通电话线上连接的两部终端同时使用,可边上网边打电话、边上网边发传真、或者两部计算机同时上网、两部电话同时通话等。 ISDN在很多推广的地方都实行的是较廉价的包月制(设备由ISP免费租用),而单独计费的话ISDN的上网费用在使用1B通道64K时费用和MODEM相当。 适合人群:适合于宽带没有开通地区的贸易型企业、股票证券交易所、金融保险机构、机关、医院、学校以及个人电脑用户使用。特别是对于乡镇或城市边缘宽带不能覆盖的网吧、网上炒股等用户的吸引力较大。