如何修改mysql数据库编码

修改字符集的方法,就是使用mysql的命令 mysql> SET character_set_client = utf8 ; mysql> SET character_set_connection = utf8 ; 使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8 +--------------------------+---------------------------------+ | Variable_name | &#118alue | +--------------------------+---------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:"mysql-5.0.37"share"charsets" | +--------------------------+---------------------------------+ mysql> SHOW VARIABLES LIKE 'collation_%'; +----------------------+-----------------+ | Variable_name | &#118alue | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 或者打开mysql安装目录,里面有个my.

mysql导出数据不输出标题行

当想使用数据库中的某些数据,想将其导入到文件中,而想去掉第一行的标题是可以加上-N参数 如通过下面命令导出数据: mysql -uuserName -ppasswd -hhost -Pport -Ddatabase -e " select * from tableName" > exportResult.txt 结果为: studentid studentname 1 denny 2 candy 3 noboy ... 如下不想要第1行,即studentid studentname这个表示字段的标题行,可以通过如下方式导出: mysql -N -uuserName -ppasswd -hhost -Pport -Ddatabase -e " select * from tableName" > exportResult.txt 加一个-N参数即达到目的

select into outfile access deny问题

本文转自:http://hatemysql.com/2010/06/29/select-into-outfile-access-deny%E9%97%AE%E9%A2%98/ 为应用建立了rnd的帐号,专门为他们查询线上数据库用的,当然,只有他们上了生产网络以后才能连上数据库,安全方面我们还是很注意的,呵呵。 授权的语句如下: grant select on armory.* to rnd; flush privileges; select查询数据没有问题,但是有的用户有了更多的需求,他想把数据导出来,简单的处理的话,可以用select into outfile导出来。自己指定字段的分隔,行分隔等等。 但是用户一查询就报:access deny的错误,权限不对。 rnd@localhost : armory 09:26:31> select * into outfile ‘/tmp/1.txt’ from os limit 5; ERROR 1045 (28000): Access denied for user ‘rnd’@'%’ (using password: NO) 郁闷的是MySQL没有说缺少了那个权限。 在本机测试了一下, grant all on armory.* to rnd; flush privileges; 给rnd所有的权限以后,还是报权限错误。这个就奇怪了,所有的权限都给它了,还报错?不可理喻阿。 实在搞不定,最后让用户: mysql -urnd -p -e ‘select * from os limit 5;’ >1.txt 的变通方法。 一直被这个纠结着,突然后来有一天,查询了一下MySQL的文档,找到是file的权限没有加上去,但是当时MySQL对应的库的所有权限我都加上去了阿。灵光一闪,file是全局的权限,在MySQL中对单个库是没有这个权限概念的,所以就算我把库上的所有权限给了rnd,file的权限其实还是没有附权给它的。不信的话,我们这就试试: root@localhost : (none) 09:55:14> grant file on armory.

[笔记] 最优化方法 - 凸集

凸集的定义、性质 设 S⊆En ,若对 ∀x(1),x(2)∈S 及 ∀λ∈[0,1] ,都有 λx(1)+(1−λ)x(2)∈S ,则称 S 为凸集。 设S1和 S2 是两个凸集, β 实数,则 - βS1={βx∣x∈S1} 是凸集 - S1+S2={x(1)+x(2)∣x(1)∈S1,x(2)∈S2} 是凸集 - S1−S2={x(1)−x(2)∣x(1)∈S1,x(2)∈S2} 是凸集 - S1⋂S2 是凸集 极点和极方向的定义 极点 设 S 是非空集合,x∈S,若 x 不能表示成S中两个不同点的凸组合,即若假设 x=λx(1)+(1−λ)x(2) ,必推出 x=x(1)=x(2) ,则称 x 是凸集S的极点。 方向 设S S 是闭凸集,dd为非零向量,如果对S S 中的每一个xx,有\{ x + \lambda d \mid \lambda \ge 0 \} \subset S {x+λd∣λ≥0}⊂S ,则称d d 是SS的方向。 设d^{(1)}和d^{(2)}是S的两个方向,若对任何正数\lambda,有d^{(1)} \neq \lambda d^{(2)},则称d^{(1)}和d^{(2)}是两个不同的方向。 设S = \{ x \mid Ax = b, x \ge 0 \} \neq \emptyset,d是非零向量,则d是S的方向 \iff d \ge 0且Ad = 0。

Jmeter介绍

一、添加线程组 一个性能测试请求负载是基于一个线程组完成的。一个测试计划必须有一个线程组。测试计划添加线程组非常简单。在测试计划右键弹出下拉菜单(添加-->Threads(Users)--->线程组)中选择线程组。 线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。 1.线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数 2.准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程 3.循环次数:每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本 这里我们根据20QPS的负载分别设置这三个参数为20、10、10 ====================================================================================== 二、添加HTTP请求 添加完成线程组后,在线程组上右键菜单(添加--->Sampler--->HTTP请求)选择HTTP请求。对于JMeter来说,取样器(Sampler)是与服务器进行交互的单元 一个HTTP请求的配置参数主要包括: 1.名称:本属性用于标识一个取样器,建议使用一个有意义的名称 2.注释:对于测试没有任何作用,仅用户记录用户可读的注释信息 3.服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址 4.端口号:目标服务器的端口号,默认值为80 5.协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 6.方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等 7.Content encoding :内容的编码方式,默认值为iso8859 8.路径:目标URL路径(不包括服务器地址和端口) 9.自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。 10.Use keep Alive :当该选项被选中时,JMeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中 11.Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中 12.同请求一起发送参数:在请求中发送URL参数,对于带参数的URL ,JMeter提供了一个简单的对参数化的方法 13.同请求一起发送文件:在请求中发送文件,默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载。 14用作监视器:此取样器被当成监视器,在Monitor Results Listener 中可以直接看到基于该取样器的图形化统计信息。默认不选中 ================================================================================== 三、设置qps Constant Throughput Timer (常数吞吐量定时器),该定时器可以方便地控制给定的取样器发送请求的吞吐量。右键点击fnng.cnblogs.com ,弹出菜单(添加--->定时器--->Constant Throughput Timer)选择Constant Throughput Timer。

计算机组成原理-存储器

存储器 计算机系统中的记忆设备,用来存放程序和数据。 由于超大规模集成电路的制作技术,使CPU的速度变得惊人的高,而存储器的取数和存数的速度与它很难适配,这使计算机系统的运行速度在很大程度上受存储器速度的制约。 半导体存储器 体积小、功耗低、存取时间短,当电源消失时,所存信息也随即丢失,近年来已研制出用非挥发性材料制成的半导体存储器。 按其功能分为:随机存取存储器(RAM)和只读存储器(ROM)。 RAM 任何一个存储单元的内容都可以随机存取,而且存取时间与存储单元的物理位置无关。当关机或断电时,其中的信息都会随之丢失。 RAM包括DRAM(动态随机存储器)和SRAM(静态随机存储器)。 DRAM主要用于主存(内存的主体部分)SRAM主要用于高速缓冲存储器。 ROM 主要用于BIOS存储器。 主存储器 简称主存或内存包括存储体M、各种逻辑部件及控制电路等。用来存放将要参与运行的程序和数据,可以和CPU直接交换信息。 存储体由许多存储单元组成,每个存储单元又包含若干个存储元件(或称存储基元、存储元),每个存储元件能寄存一位寄存器代码“0”或“1”。一个存储单元可存储一串二进制代码,称这串二进制代码为一个存储字,这串二进制代码的位数成为存储字长。 计算机存储信息的最小单位,称为位(bit,又称比特)存储器中所包含存储单元的数量成为存储容量,计量基本单位是字节(Byte,简称B)1B=8bit,1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB 辅助存储器 主存储器的后援存储器,用来存放当前暂时不用的程序和数据,它不能与CPU直接交换信息。 高速缓冲存储器 主存其速度与CPU速度差距较大,为了使他们之间速度更好地匹配,在主存与CPU之间插入了一种比主存速度更快、容量更小的高速缓冲存储器Cache。

图像处理入门教程

最近有人问我图像处理怎么研究,怎么入门,怎么应用,我竟一时语塞。仔细想想,自己也搞了两年图像方面的研究,做个两个创新项目,发过两篇论文,也算是有点心得,于是总结总结和大家分享,希望能对大家有所帮助。在写这篇教程之前我本想多弄点插图,让文章看起来花哨一点,后来我觉得没必要这样做,大家花时间沉下心来读读文字没什么不好,况且学术和技术本身也不是多么花哨的东西。 一、图像处理的应用 这个其实没什么好说的,一种技术的应用价值不是靠嘴上说,而是要看有多少人去搞,很简单的道理。其实我觉得判断一项技术有没有价值、有多大价值的最简单最有效的方法就是看有多少人在研究它。如果大家都在研究,那必然说明它很火,至少目前很火,以后的几年里依然还会火。因此,如果你不确定图像处理是不是有价值,那就查查全国图像处理工程师的数量就行了。 当然这里还是简单提一下。如果你真的只想问“图像处理有什么用?”,相信百度会给出比我更专业的答案。不过作为图像处理的行内人,我还是从几个基本的点来具体说一下。 1、身份认证 21世纪是刷脸的时代,这一点无可厚非。首先是银行,据说重庆的银行已经使用了人脸识别的验证系统来进行辅助的认证。其次是门禁系统,以前是指纹,虹膜,现在就是人脸。指纹、虹膜的识别虽然准确,但是有侵犯性,采集的过程中有侵犯性,验证的过程中也有侵犯性,反正让谁天天录指纹(采集指纹信息),用眼睛瞪摄像头(采集虹膜信息),谁都会觉得不舒服的,况且手还会脱皮。相比之下,人脸的识别就方便多了,拍张照片(采集人脸信息)谁都不会介意。最后是监控,一个摄像头所拍的监控能从不同的角度记录成百上千的人(比如车站等密集场所的监控),让警察去辨认将是一个浩大的工程,要是系统能够自动判别人员信息,无疑会给办案带来极大方便。 2、监控安防 安防监控可以说是图像处理领域最有潜力的应用领域。如今各个城市都在疯狂的安装监控摄像头,全国时刻都有无数的摄像头在录监控,但是安防监控的后端处理却没跟上。什么是后端处理,简单的说就是监控录像的视频处理。注意这里的视频处理可就不止包含人脸识别了,还有行人检测、异常检测、显著性检测、协同跟踪等。人脸识别之前说了,这里简单说说行人异常检测。图像处理中的行人异常检测在外行人眼中是一个非常有魔力的东西。毕竟让摄像头通过监控视频就能判断出当前画面中谁是好人谁是坏人(当然直接分为好人和坏人还是太武断了),在一般思维中貌似是不可能的。但是请不要忽略这样一个事实,就是目前大部分监控视频的分析处理都是由人工来完成的,警察破案时经常动不动就调出最近几天的监控视频,然后从头看到尾,其工程量之大可想而知。也正是这样才催生了人们对智能监控方面的研究,因为有这方面的实际需求。当然我们的视频分析程序不会直接给出诸如“好人or坏人”这样的武断而片面的判断结果。就当前的技术水平而言,能够统计当下监控画面中的人数(行人检测)、定位他们的人脸(人脸检测)、识别他们的身份(人脸识别)、判别他们的表情(表情识别)、检测他们的动作(异常检测),这就已经够了。这样以后人们就不会再面对长达几十甚至上百个小时的监控视频发呆,而是直接分析计算机给出的数据,当前画面中有多少人、都是谁、谁的动作可疑等。总之,接下来智能监控发展会很迅速,因为需求很迫切。 3、深度学习(Deep Learning) 通俗的说一句,“图像处理是深度学习应用的天堂”。深度学习这个概念可能有人不太熟悉,大家可以自行百度,我这里给出一个相对通俗的解释:“如果你不知道什么叫深度学习,就想想《终结者》中的T-800”。当然这句话不是我说的,是出自业界的一位大牛之口。当然这可能有点小片面,不过深度学习确实是公认的新一代人工智能的基础。 这里举两个例子。一是谷歌的人工大脑项目。谷歌公司可以说是深度学习方面的牵头企业了,其在2012年公布的谷歌大脑项目,动用了1.6万个计算节点,训练数周,得到的人工智能模型能够自主识别猫脸图像,为新一代人工智能开辟了道路,之后微软深度学习研究院、百度深度学习研究院等机构都开始大量投入,各个高校也搞得风声水起,原因很简单,大家都知道它会火。 第二就是图像识别方面的竞赛。最有权威的就是ImageNet竞赛。大家在一个拥有上千万张,上千类别的图像数据库上训练和测试自己的算法,比拼识别率。近几年来,摘得桂冠的一直都是深度学习模型,确切的说是卷积神经网络。更多有关ImageNet历年的竞赛信息大家可以自行百度。 说道深度学习在图像处理的应用,不得不提中国的汤晓鸥教授,说他是国内深度学习的领头羊也不为过。他提出的DeepID人脸识别算法(一共分为三代),在一些大规模人脸数据库上的正确率(若LFW库)已经达到了99.75%,单纯从数字上讲的话可以说已经超越了人类的识别率,为此汤教授还开办了公司,开发FaceSDK(虽然还没有公布)。不过拿计算机和人脑相比本身就是不合理的,各有所长嘛。不过可见DeepLearning在图像识别领域的强大威力。至于深度学习与图像处理的关系这里就不用多说了,谷歌大脑识别的是图像,深度学习竞赛用的是图像,DeepID识别的还是图像人脸,虽然深度学习在其他方面诸如语音识别等也有应用,在图像处理依然是其主要的应用领域。 二、图像处理研究工具 图像处理的研究分为算法研究和应用两个部分。用到的主要编程语言有Matlab、C/C++、Python等,原因很简单,它们都有很多相应的第三方库,不用我们从零开始编程。 1、Matlab MathWork公司的Matlab软件可以说是算法研究的利器,它的强大之处在于其方便快捷的矩阵运算能力和图形仿真能力,单从简洁性和封装性来说,确实完爆其他语言。但高度封装必然会相应的损失一部分灵活性,况且Matlab严格的讲更像是一个工具,而非一门编程语言。顺便提一句,它在2015年编程语言排行榜中位于第20名,仅次于IOS开发的Objective-C。 对于算法研究人员(尤其是高校的硕士博士),首选工具自然是matlab,因为它简便快捷,封装性好,更重要的是全世界几乎所有的算法大牛、精英教授都会首先公布对应的Matlab源码,然后在逐步改写成其他语言进行实际应用。所以,如果你想做图像处理方面的研究,Matlab是必须掌握的,而且是熟练掌握。当你有一些想法需要验证时,最好明智的先用matlab编写出来测试。如果你上来就用看似高大上的C++来实验,不仅错误BUG一大堆,到头来可能效果还不佳,就算效果好,时间也会耽搁不少,毕竟算法开发还是要快的,这样才能赶在别人之前发论文。总之,只要是接触图像算法,终究逃不过Matlab,就算你是软件开发的,不研发算法,但总得能看懂别人的Matlab算法吧。 对于之前没怎么接触过Matlab与图像处理的人,在这里推荐一本相关的书籍《MATLAB图像处理实例详解(附光盘)》。这本书对于Matlab图像处理入门还是很有帮助的。记得我当时刚上研究生时就靠两本书入门的,一是冈萨雷斯的《数字图像处理》,二是这本《MATLAB图像处理实例详解》。不过这里友情提示,在看这类教程(不仅仅是Matlab)时千万不要试图去记忆所有的工具函数,这种做法是十分愚蠢的。正确的做法是根据自己的情况快速翻阅这类工具书,可以找出里面的有实际意义的源码来敲一敲练练手感,至于具体的工具函数,只需要知道Matlab提供了这方面的功能就行了,以后用到了再回来查,或者谷歌百度。我觉得在入门阶段,最重要的不是看了多少书,听了多少课,而是尽快自己敲出一段代码,运行出结果,来建立自信和成就感,这才是支持我们走下去的最实在的动力。记得我当时看了没多久就自己敲了一个蹩脚的车牌检测的Matlab程序,现在看来真是漏洞百出,不过当时我真的很兴奋,很有成就感,觉得自己能干这行,对于初学者来说,这种感受弥足珍贵。 2、OpenCv Opencv是Intel公司开发的C++图像处理工具包,形象的理解为就是C++版的Matlab。当初Intel公司开发这个工具包的初衷也是方便大家共享,希望大家能够在一个共同架构的基础上共同建造摩天大楼,而不是各自在自己的地基上盖平房。与Matlab不同,Opencv是面向开发的,稳定性好,异常处理机制周全,但有一点需要注意,由于Opencv是开源的,那么如果你在项目中直接调用了它的API,那就意味着你的项目也必须开源。因此在真正的产品开发过程中,往往需要从Opencv库里面挖代码,而不是直接调用,幸好Intel公司允许我们看源码,自己编译一把就可以了。 说道C++和Opencv,有一个问题不得不提,那就是深度学习领域大名鼎鼎的Caffe框架。这是一个典型的基于C++和OpenCv的深度学习框架,由谷歌深度学习团队、“谷歌大脑”负责人之一贾扬清学者编写,并公布了源码。如今各个深度学习机构都在大量使用这个框架进行研究。 这里同样对推荐两本关于Opencv方面的教程。一本是CSDN博客大牛毛星云写的《OpenCV3编程入门》,这是它根据自己多年的博客整理成的书,很详细,很典型的一本教程,介绍了OpenCv中相对前沿的知识。我翻看过这本教程,中规中矩,里面的代码通俗易懂,尤其适合初学者。当然大家同样要注意不要犯了死读书的毛病,只看它的功能,敲代码练手感即可,不要试图记忆API函数。重要的工具用多了自然会记住,不重要的工具记住了也没用。 这里推荐的第二本书是《图像识别与项目实践――VC++、MATLAB技术实现》,这本书是一本偏向于工程应用的书,我之所以推荐它是因为它给出了很多有新意、能运行的代码。其中里面有一个项目让我印象很深,是一个车牌检测的实例。简单描述一下:由于车牌中的字符数是固定的,因此它通过判断横向区域笔画的跳变数以及笔画宽度来定位车牌区域。这个想法让人耳目一新,并且它还给出了详细代码,我也亲身试验过,效果还不错。 这里同样再强调一下,就是一定要尽早入手写程序,建立自信和成就感。我当时学OpenCv正好用它开发了一个人脸性别识别的系统,是一个本科大学生创新计划的需求,效果还可以。 3、Python Python在今年12月份的编程语言排行榜中名列第5,增长迅速。可以说Python已经逐渐成为当下脚本语言的新标准。Python在图像处理算法方面除了其自身简洁的编程优势外,还得益于两个重要的Python类库——Numpy和Theano。 Numpy是Python的线性代数库,对于矩阵运算能提供很好的支持,并且能够在此基础上进行很多机器学习相关算法的开发仿真,这里推荐一本受到大家广泛认可的书《机器学习实战》,我最近也正在看这本书,里面对好多机器学习领域的经典算法,小到KNN,大到SVM,都给出了详细的介绍以及代码实现(Python版)。Theano是Python的机器学习库,能够方便的实现深度学习(例如卷积神经网络CNN)算法,网上很多对于DeepID算法的复现都是用的这个库。 人觉得单从图像处理的角度评价的话,Python并没有前面两个工具(Matlab和OpenCv)应用广泛,不过作为通用的脚本语言,我觉得每个程序员都应该去了解了解它,毕竟俗话说没有烂的编程语言,只有烂程序员。我在学Python时第一个自己写的程序就是微信打飞机的小程序,在我的博客中有详细的教程,虽然是参照小甲鱼的《零基础入门学习Python》视频教程写的,但还是蛮有成就感的。 三、图像处理研究方法 我觉得,图像处理研究主要可以分为三个部分:基础概念、基本思想、算法研究。 1、基础概念 所谓基础概念,就是图像处理里最基本的知识,比如什么是图像?什么是像素?什么是彩色图像等等。没有一个明确的界限来划定什么是基础概念什么是高级知识,因人而异。了解图像处理的基础知识,有一本书是必读的,就是冈萨雷斯编写的、阮秋琦翻译的《数字图像处理》。这本书已经作为图像处理领域的经典教材使用了三十多年,我自己也把这本书看了好几遍,每一遍都会有新的体会。我觉得每一个搞图像的都应该熟读这本书。书中除了有几章内容在讲小波变换、模式识别等相对抽象的内容外,其他内容相对都是很基础的,本科生水平就能看懂。而且我建议要尽早看这本书,如果是研究生尽量在进入课题之前就看一遍,因为这样一本经典的书在进入课题之后可能就没时间看了,以后也顶多是查阅而已。我当初就是在大四的寒假看完了这本书,以后在图像入门的过程中就显得轻松很多。看完这本书,哪怕是只看前几章,明白了什么是图像(二维或者三维矩阵)、什么是像素、彩色图和灰度图、颜色空间、图像滤波、图像噪声、图像频域变换等概念,将来在进行更深一步的研究的话就会方便很多了。 2、基本思想 刚开始想把这部分内容命名为“基本算法”,意在介绍图像处理中的一些基本算法,后来仔细想想决定不这么写,因为图像处理是一个非常大的概念,图像处理不等于人脸识别,也不等于模式识别,直接介绍诸如图像处理基本算法之类的内容很容易写成空话,没有什么实际意义。读者有兴趣的话可以直接谷歌百度“图像处理十大经典算法”,上面有我想说的内容。 万变不离其宗,算法是死的,重在思想。举个例子,我个人是主攻模式识别方向,在这个方向判断一个学生是否入门有一个非常简单的方法,就是“如果你能把图像很自然的想象成高维空间中的一个点”,那就说明在模式识别方面入门了,可以对图像进行分类了。当然标准不是唯一,在其他领域如目标检测也会有其他的判断标准,总之我们要对图像进行处理,那么图像就不再只是图像,它可能会演变成各种不同形式的概念,可能是点,可能是面,还可能是一个坐标空间。在目标跟踪的经典算法粒子滤波中,将一个个的小图像块看做一个个粒子;在子空间理论中,将一系列图像放在一起构建一个成分主空间(例如主成分分析PCA算法等等。,我不会详细介绍这些算法,说多了就显得抽象老套,但我要说的是我们一定要把图像本身理解好,它是一个图像,是一个矩阵,是一个信息的容器,是一种数据的表现形式,图像不一定都必须在视觉上有意义(比如频域的图像)。 总之图像处理的基本思想还是要立足于图像本身,要深度到图像内部结构中,思维要灵活。我当时做本科毕设时,怎么也不知道图像和高维空间中的点之间有什么对应关系,后来总算有一天,突然就明白了,这也就是所谓的量变产生质变。总之一定要多想,多总结,主动去钻研,才能够真正领悟一些东西。最基本的东西往往蕴藏着深奥的道理,无论你现在多牛多厉害,都不能放掉最本源的东西。多想想图像是什么,有什么本质属性,你可能无法得到准确的答案,但肯定能得到一些有用的感悟(有点像哲学问题了)。 3、算法研究 算法研究应该是图像处理的核心工作,尤其是各大高校的博士硕士。这里我并不想谈那些高大上的算法,我更想说的是一些算法研究的一些基础的东西,比如说一些基础课程,比如说矩阵运算。 研究图像处理的算法,离不开数学。在这里我建议图像处理方面的硕士一定要上两门课:《泛函分析》以及《最优化算法》,有的学校已经将这两门课列为了研究生阶段的必修课程。这两门可可以说是图像处理(至少是模式识别)的基础。我当初没上过最优化算法,但后来也自己补上了,不然真的是寸步难行。至于泛函我当时听课的时候也不是很懂,但是在之后的研究过程中发现很多图像处理的基本知识基本理论都和泛函分析中枯燥的定理如出一辙,没办法,有的东西本身就是枯燥的干货,学着费力,缺它不行。 其次我想说的是矩阵运算。图像就是矩阵,图像处理就是矩阵运算。大家为什么都喜欢用Matlab,就是因为它的矩阵运算能力实在是太强大,在Matlab的世界中任何变量都是矩阵。同样OpenCv之所以能流行,不仅仅是因为它良好的封装性,也是因为它的矩阵格式,它定义了Mat基础类,允许你对矩阵进行各种操作。Python也不例外,它的Numpy就是一个专门的线性代数库。 真正在图像编程过程中,那些看着高大上的API函数归根到底都是工具,查查手册就能找到,真正核心还是在算法,算法是由公式编写的,公式的单元是变量,而图像届的变量就是矩阵。所以,熟练去操作矩阵,求秩、求逆、最小二乘,求协方差,都是家常便饭。所以,如果你有幸能上《矩阵分析》这门课,一定要把它看懂,那里面都是干货。 四、小结 总之,图像处理就是一个典型的门槛低、厅堂深的领域。不需要太多基础,学过线性代数,会一点编程就够了;但是那些算法却深不可测,是个消耗功夫的活儿。在写这篇教程时我说的很直白,就像和大家对话一样,想到什么说什么。在最后我想说两句题外话,就是不仅仅针对图像处理,对于其他新技术的入门学习也是一样,尽快迈出第一步,尽快去建立自信和成就感,让自己有勇气走下去,然后缺什么补什么就行了。我觉得真正让人望而却步的往往不是技术本身,而是我们对自身的不自信。唯有果断开工,才能战胜心魔。 如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢。

我的Pycharm,我做主

之间花了一周多的时间把Pycharm官方帮助文档翻译了一遍,一共43篇博客,累得要屎,感悟颇多。 发牢骚之前先总结点干货,这里把所有的翻译文档列成如下目录,方便大家索引: 最全Pycharm教程(1)——定制外观 最全Pycharm教程(2)——代码风格 最全Pycharm教程(3)——代码的调试、运行 最全Pycharm教程(4)——有关Python解释器的相关配置 最全Pycharm教程(5)——Python快捷键相关设置 最全Pycharm教程(6)——将Pycharm作为Vim编辑器使用 最全Pycharm教程(7)——虚拟机VM的配置 最全Pycharm教程(8)——Django工程的创建和管理 最全Pycharm教程(9)——创建并运行一个基本的Python测试程序 最全Pycharm教程(10)——Pycharm调试器总篇 最全Pycharm教程(11)——Pycharm调试器之断点篇 最全Pycharm教程(12)——Pycharm调试器之Java脚本调试 最全Pycharm教程(13)——Pycharm部署 最全Pycharm教程(14)——Pycharm编辑器功能总篇 最全Pycharm教程(15)——Pycharm编辑器功能之自动生成格式 最全Pycharm教程(16)——Pycharm编辑器功能之代码自动生成 最全Pycharm教程(17)——Pycharm编辑器功能之自动导入模块 最全Pycharm教程(18)——Pycharm编辑器功能之代码拼写提示 最全Pycharm教程(19)——Pycharm编辑器功能之代码折叠 最全Pycharm教程(20)——Pycharm编辑器功能之模板应用 最全Pycharm教程(21)——Pycharm编辑器功能之代码快速修改 最全Pycharm教程(22)——Pycharm编辑器功能之窗口选项卡管理 最全Pycharm教程(23)——Pycharm编辑器功能之代码高亮显示及错误提示机制 最全Pycharm教程(24)——Pycharm编辑器功能之宏定义 最全Pycharm教程(25)——Pycharm编辑器功能之查看帮助文档 最全Pycharm教程(26)——Pycharm搜索导航之文件名、符号名搜索 最全Pycharm教程(27)——Pycharm搜索导航之跳转到声明与定义 最全Pycharm教程(28)——Pycharm搜索导航之搜索应用实例 最全Pycharm教程(29)——再探IDE,速成手册 最全Pycharm教程(30)——Pycharm中的File Watchers 最全Pycharm教程(31)——Pyhcarm实战 最全Pycharm教程(32)——根据FHS在Linux上安装Pycharm 最全Pycharm教程(33)——使用Pycharm编写IPython Notebook文件 最全Pycharm教程(34)——Pycharm内置终端以及远程SSH工具的使用 最全Pycharm教程(35)——Pycharm中使用Vagrant 最全Pycharm教程(36)——Pycharm中Vagrant高级技巧 最全Pycharm教程(37)——Pycharm版本控制之基础篇 最全Pycharm教程(38)——Pycharm版本控制之远程共享 最全Pycharm教程(39)——Pycharm版本控制之本地Git用法 最全Pycharm教程(40)——Pycharm扩展功能之捆绑插件TextMate 最全Pycharm教程(41)——Pycharm扩展功能之便签注释 最全Pycharm教程(42)——Pycharm扩展功能之Emacs外部编辑器 最全Pycharm教程(43)——Pycharm扩展功能之UML类图使用 一、不妥之处 说实话这个教程翻译得还是有一些不完善的地方,主要有一下几点: 1、教程中的跳转链接没有处理好 在翻译过程中只是按照目录翻译了官方文档的内容,至于文档内部的链接地址则没有仔细处理,都是直接跳转到了原有的英文原版的链接界面。对于教程各个篇章之间的链接跳转也没有做详细处理,也是直接跳到了原版。没办法,因为链接实在太多太复杂了,大家直接从这个目录上进入到对应模块吧。 2、部分名词未进行翻译 由于译者经验有限,在加上这里观法给出的帮助文档所涉及的范围实在是太广,以致某些专有名词译者之前并没有接触过,有道、谷歌等翻译机构给出的译文又不尽合理,因此选择了保留原有名词,望相关领域的大牛给予帮助。 3、解释性语言经过适当改动 教程的前半部分一般都是严格按照官方文档的内容进行翻译,包括以下幽默的引用、辅助性的提问等等。在后半部分教程,尤其是后十篇,由于期间回了趟家,课题安排又比较紧,所以加快了翻译进度。对于一些重复性的解释、意义不大的提问等等都予以省略,但主要的操作解释部分的说明依然是完全按照官方文档的说明进行了直译,避免发生歧义。 二、注意事项 1、速成手册 不得不说,这个教程规模实在是有点庞大,不过其中有两篇是独立的速成手册,分别是最全Pycharm教程(29)——再探IDE,速成手册和最全Pycharm教程(31)——Pyhcarm实战,如果你希望尽快掌握Pycharm的基本功能,建议直接阅读这两篇教程即可。 2、版本问题 Pycharm目前已经更新到了5.0版,相对于之前的2.x、3.x版本,在界面设计上有了较大改变,所以在实际操作中可能会出现选项卡找不到的情况。不过Pycharm提供了设置搜索功能,在不能顺利某个设置页时,可以直接在设置对话框的搜索栏中输入对应设置页的名称来进行定位。 如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢。

js中的$.ajax()方法详解

1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 2.type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。 3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。 4.async: 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。 5.cache: 要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。 6.data: 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看 processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。 7.dataType: 要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下: xml:返回XML文档,可用JQuery处理。 html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。 script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。 json:返回JSON数据。 jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。 text:返回纯文本字符串。 8.beforeSend: 要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。 function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 } 9.complete: 要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。 function(XMLHttpRequest, textStatus){ this; //调用本次ajax请求时传递的options参数 } 10.success:要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。 (1)由服务器返回,并根据dataType参数进行处理后的数据。 (2)描述状态的字符串。 function(data, textStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数 } 11.error: 要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: function(XMLHttpRequest, textStatus, errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 } 12.contentType: 要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。 13.dataFilter: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data; } 14.dataFilter: 要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。 function(data, type){ //返回处理后的数据 return data;

Exception in thread "main" java.lang.IncompatibleClassChangeError: net/sf/cglib/core/DebuggingClassW

问题: 今天在运行程序的时候报如下错误。 1. java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor 2. Exception in thread "main" java.lang.IncompatibleClassChangeError: net/sf/cglib/core/DebuggingClassWriter 分析:此问题一看就是cglib和asm版本包有问题了,因此查找自己现在引用的cglib版本是3.1,asm包没有引用。 解决方案:我把cglib版本换成2.2.2,cglib2.2.2会自动引用asm3.1.1包,问题就搞定了。

安装m2crypto报错swig error : Unrecognized option -builtin

M2Crypto 是最完整的为 Python 包装 OpenSSL 的 RSA,DSA,DH,EC,HMACs,消息摘要,对称密码算法(包括AES)的一个库工具。 而自从 M2Crypto 升级到版本 0.22.5 后,用 pip install M2Crypto 命令来安装 M2Crypto 时总是会失败。 在没有升级到此版本之前,使用 pip 安装则是没有问题的。下面来找找原因。 系统环境:CentOS 6.7 x86 失败关键字:swig 失败现象: swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c swig -python -I/usr/include/python2.6 -I/usr/include -includeall -modern -builtin -outdir build/lib.linux-i686-2.6/M2Crypto -D__i386__ -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i swig error : Unrecognized option -builtin Use 'swig -help' for available options. error: command 'swig' failed with exit status 1 这里有个最为明显的错误提示: swig error : Unrecognized option -builtin

android开发步步为营之87:从sdcard或者data文件夹下读写数据

app开发,文件的读写是很常用的一项功能,对于文件的读写,因为raw或者asset下只能放置不大于1M的文件,而且只能读取数据,不能写入数据。所以我们开发应用的时候,一般会将图片,或者从网络下载的数据保存到sdcard或者data/data/文件夹下,本文简单介绍了将一张图片文件分别从sdcard或者data/data文件夹进行读写操作。 第一步:申请相关权限 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 第二步:编写File操作相关类FileUtils.java package com.figo.study.utils; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.os.Environment; import android.util.Log; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; /** * 文件操作相关 */ public class FileUtils { public static String getFilename(String filePath) { if (filePath == null) return null; final int pos = filePath.

在Linux中提示No such file or directory解决方法

编写shell脚本执行一些命令发现很多的地方出现了问题,总是No such file or directory。但是事实上是有的,在网上查找了一些观点,总结一下: (1)在Windows下转换: 利用一些编辑器如Notepat++,UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。 (2) 用vim打开该sh文件,输入: 命令 :set ff 回车,显示fileformat=dos,重新设置下文件格式: 命令 :set ff=unix 保存退出: 命令 :wq 再执行,就可以了 (3)在linux中的权限转换 也可在Linux中转换: 首先要确保文件有可执行权限 #chmod u+x filename 然后修改文件格式

Android录音时,根据PCM数据获取音量值(单位分贝)

Android录音时,根据PCM数据获取音量值(单位分贝) 采样值为16bit时,根据pcm数据获取分贝,可以按如下方法进行计算 private void calcDecibelLevel(short[] buffer, int readSize) { double sum = 0; for (short rawSample : buffer) { double sample = rawSample / 32768.0; sum += sample * sample; } double rms = Math.sqrt(sum / readSize); final double db = 20 * Math.log10(rms); mVolume = (int)db; Log.e(TAG, "calcDecibelLevel:volume = " + mVolume + ", readSize = " + readSize); }

KS8U读卡器

凯盛读卡器KS8U 厂家:http://www.chinaiccard.com/feijiechushiduxieqi/947.html 驱动安装目录的COM目录下有网页调用的例子。 公司网站:http://www.chinaiccard.com/ 开发的时候发现一个问题,连续的调用dc_init,dc_card,dc_load_key等函数是不行的,中间必须延时一段时间。 javascript的函数if中判断是否为真的时候,不要使用!,直接用(false == 表达式)才行 卡类型:Mifare S50(1K)、Mifare S70(4K),目前的用的卡是S70的卡。 本文用 菊子曰发布 转载于:https://www.cnblogs.com/sdsunjing/p/ks8u%e8%af%bb%e5%8d%a1%e5%99%a8.html

H5页面audio多声音解决方法

移动端H5带背景音乐,之后如又有其他声音声音产生的冲突,解决方法。 在线demo:http://www.hui12.com/nbin/csdn/sound/demo.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Audio</title> <script src="jquery-2.1.0.js"></script> </head> <body> <h2>播放暂停->背景音乐,sound1-sound3模拟页面其他音乐</h2> <button class="play">播放</button> <button class="stop">暂停</button> <button class="sound1">sound1</button> <button class="sound2">sound2</button> <button class="sound3">sound3</button> <script type="text/javascript"> $(document).ready(function(){ var $play = $('.play'), $stop = $('.stop'), $sound1 = $('.sound1'), $sound2 = $('.sound2'), $sound3 = $('.sound3'); var sound = (function(){ var s0 = new Audio('s0.mp3'), s1 = new Audio('s1.mp3'), s2 = new Audio('s2.mp3'), s3 = new Audio('s3.mp3'); var isPlay = true; s0.play(); s0.

JS 实现控件拖拽/拖动

下面是实现控件拖拽的完整代码。 (function ($) { var move = false; //标记控件是否处于被拖动状态 var dragOffsetX = 0; //控件左边界和鼠标X轴的差 var dragOffsetY = 0; //控件上边界和鼠标Y轴的差 var dragObj = null; //用于存储当前对象 $.fn.mydrag = function () { dragObj = this; this.mousedown(function (e) { move = true; //获取鼠标和该控件的位置偏移量,并存入全局变量供后续调用 dragOffsetX = e.clientX - e.currentTarget.offsetLeft; dragOffsetY = e.clientY - e.currentTarget.offsetTop; }); $(document).mousemove(function (e) { if (move) { //不断获取鼠标新的坐标,并计算出控件的新坐标 var newX = e.clientX - dragOffsetX; var newY = e.clientY - dragOffsetY; //边界控制,document.

手机访问电脑的本地网站或者服务器

最近开始转向移动开发方向,因此对于一个移动开发的前端来说,使用各种真机来进行自己网站或者系统的界面进行针对性的调试就显的尤为重要了。因此,会经常通过电脑开启一个wifi来供手机进行连接,形成一个小的局域网,然后就通过局域网的ip地址(查询ip地址,cmd——》ipconfig),通过ip地址来进行自己本地服务器中的项目访问。本以为这种小case的东西可以分分钟搞定,可是,可是,可是偏偏就出现了无妨访问的情况。如下图所示: 看到这个就泪奔了,竟然直接访问不到本地服务器啊。对于这种情况有两种解决方案: 方案一:暴力解决(当然不是砸电脑,摔手机)。出现该问题主要是因为你电脑的防火墙将某些端口号的htpp的网络访问协议给屏蔽掉了(一般的电脑操作系统是默认不屏蔽80,8080一些常用的端口的),所以你可以直接将自己的电脑的防火墙全部关闭。然后就可以完美访问了。具体设置路径给一下(方便菜鸟使用):控制面板\所有控制面板项\Windows 防火墙\自定义设置。 下面具体来讲解一下方案二:对于这种暴力方式还是很不友好的。为此,我们可以直接在防火墙中将80和8080端口设置为不屏蔽即可。具体操作如下,首先进入到windows防火墙面板,点击高级设置 进入到高级设置界面,分别在入站规则和出站规则中新建规则,选择端口,点击下一步,然后直接在对应的输入框中输入80,然后默认点击下一步,完成。同样设置8080的这样一个规则。整个设置完成过后,手机就可以通过局域网来进行ip地址的访问了。

工作学习的三大能力

从实习到现在,已经工作超过半年,这段时间感觉懂得了很多,学习上的,生活处事上的,各个上面的,今天先来谈谈我们最关注的在工作学习中我们所要掌握的三大能力: 1:学习能力:我们这个是一个更新换代非常快的行业,竞争激烈,不保持强有力的学习劲头我们很快会被别人挤下去。不是我们现在会了什么就可以放松了,在工作中会遇到各种各样的问题,只有不断的学习,我们才有能力去解决。 2:解决问题的能力:有了很多的知识,我们就要用这些知识去解决遇到的问题。如果只有理论知识,却没有动手实践、解决问题的能力,我认为基本就是纸上谈兵,无用。在工作中,发现问题,然后静下心来去分析,运用自己的知识体系去解决问题;如果还没有具备的知识,又是考验我们学习能力的时候了,去学习,再去解决问题。这样相互促进,更有助于我们能力的提高。 3:沟通交流能力:最直接的,从所有的招聘信息我们可以看到,每个公司都要求有沟通、团结协作的能力。我们在生活工作中不能避免的要与别人交流,这个是最体现我们人格魅力的时候。良好的沟通能力可以更好更快的解决问题。 掌握了上面三个能力,我认为不管在哪里,哪个行业都可以有一个很好的发展。谢谢!

Java 中的三目运算符

三目运算符是我们经常在代码中使用的,a= (b==null?0:1); 这样一行代码可以代替一个 if-else,可以使代码变得清爽易读。但是,三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。前段时间遇到(一个由于使用三目运算符导致的问题,其实是因为有三目运算符和自动拆箱同时使用(虽然自动拆箱不是我主动用的)。 一、三目运算符 对于条件表达式b?x:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式从不会既计算x,又计算y。条件运算符是右结合的,也就是说,从右向左分组计算。例如,a?b:c?d:e将按a?b:(c?d:e)执行。 二、自动装箱与自动拆箱 基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = new Class(parameters); 当我们创建一个Integer对象时,却可以这样: Integer i = 100;(注意:和 int i = 100;是有区别的 ) 实际上,执行上面那句代码的时候,系统为我们执行了: Integer i = Integer.valueOf(100); 这里暂且不讨论这个原理是怎么实现的(何时拆箱、何时装箱),也略过普通数据类型和对象类型的区别。我们可以理解为,当我们自己写的代码符合装(拆)箱规范的时候,编译器就会自动帮我们拆(装)箱。那么,这种不被程序员控制的自动拆(装)箱会不会存在什么问题呢? 三、问题回顾 首先,通过你已有的经验看一下下面这段代码。如果你得到的结果和后文分析的结果一致(并且你知道原理),那么请忽略本文。如果不一致,请跟我探索下去。 Map<String,Boolean> map = new HashMap<String, Boolean>(); Boolean b = (map!=null ? map.get("test") : false); 以上这段代码,是我们在不注意的情况下有可能经常会写的一类代码(在很多时候我们都爱使用三目运算符)。当然,这段代码是存在问题的,执行该代码,会报NPE. Exception in thread "main" java.lang.NullPointerException 首先可以明确的是,既然报了空指针,那么一定是有些地方调用了一个null的对象的某些方法。在这短短的两行代码中,看上去只有一处方法调用map.get("test"),但是我们也都是知道,map已经事先初始化过了,不会是Null,那么到底是哪里有空指针呢。我们接下来反编译一下该代码。看看我们写的代码在经过编译器处理之后变成了什么样。 反编译后代码如下: HashMap hashmap = new HashMap(); Boolean boolean1 = Boolean.valueOf(hashmap == null ? false : ((Boolean)hashmap.

愤怒的小鸟-物理世界Box2d(2)-点击添加精灵,画线

// 如何 实现愤怒的小鸟 里面手一拉就会出现两根随着小鸟动的线条 // 在场景实例化init内 画上两根线,并将其隐藏 auto line_1 = DrawNode::create(); auto line_2 = DrawNode::create(); this->addChild(line_1); this->addChild(line_2); line_1->setVisible(false); line_2->setVisible(false); line_1->setTag(10001); line_2->setTag(10002); // 添加事件的监听,以完成在点击的时候能出现一个小鸟,并且小鸟和线条会随着鼠标的移动而移动 // 并且在点击结束的瞬间给 精灵小鸟 一个力 ,让它能够飞出去 auto listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this); listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); bool HelloWorld::onTouchBegan(Touch* t,Event* e){ bird_Index++; // CCLOG("map: x=%f , y=%f", t->getLocation().x,t->getLocation().y); // addNewPigAtLocation(t->getLocation().x, t->getLocation().y); // 点击添加小鸟 auto bird = Sprite::create("bird1.png"); this->addChild(bird); bird->setTag(1000+bird_Index); CCLOG("index = %d"

Treap(树堆)图解与实现

个人技术博客:http://blog.ztgreat.cn 前面我们介绍了AVL树,伸展树,它们都是二叉搜索树,二叉搜索树的主要问题就是其结构与数据相关,树的深度可能会很大,Treap树就是一种解决二叉搜索树可能深度过大的另一种数据结构。 Treap=Tree+Heap。Treap本身是一棵二叉搜索树,它的左子树和右子树也分别是一个Treap,和一般的二叉搜索树不同的是,Treap纪录一个额外的数据,就是优先级。Treap在以关键码构成二叉搜索树的同时,还满足堆的性质。这些优先级是是在结点插入时,随机赋予的,Treap根据这些优先级满足堆的性质。这样的话,Treap是有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树。其基本操作的期望时间复杂度为O(logn)。相对于其他的平衡二叉搜索树,Treap的特点是实现简单,且能基本实现随机平衡的结构。 Treap维护堆性质的方法只用到了旋转,只需要两种旋转,编程复杂度比Splay要小一些。 这里我们还是先给出treap的结构定义: typedef struct TreapNode* Tree; typedef int ElementType; struct TreapNode { ElementType val; //结点值 int priority; //优先级 Tree lchild; Tree rchild; TreapNode(int val=0,int priority=0) //默认构造函数 { lchild=rchild=NULL; this->val=val; this->priority=priority; } }; 可以看到这个和前面的AVL树以及伸展树基本都是一样的,这里去掉了父节点了,因为父节点的存在只是为了方便我们的操作,这里将不用到父节点统一的进行各项操作。 treap的搜索和一般的BST树是一致的,这里我们就跳过吧,直接说插入操作。和二叉搜索树的插入一样,先把要插入的点插入到一个叶子上,然后跟维护堆一样,如果当前节点的优先级比它父节点优先级小就旋转,如果当前节点是其父节点的左儿子就右旋,如果当前节点是其父节点的右儿子就左旋。(简单点说把优先级小的往上提) 注:这里我们都调整为最小堆的形式。 一、旋转 如果知道AVL树或者伸展树的旋转方式,那么treap的旋转就显得很简单了,这里我们还是用图来展示一下过程: (1)左旋转 黑色的数字是优先级,当插入数值为7优先级为20的结点后,违反了最小堆的定义,所以这里需要进行左旋转,将结点7进行提升一个层次,当然这个左旋转方式有很多种,如果把结点7看做操作对象,那么就需要知道它的父节点以及祖父结点,但是我们在定义中又去掉了父节点指针,这样在获取父节点的是否似乎变得困难了,不妨换个角度,如果我们结点7的父节点为对象,那么只需要知道结点3的父节点就可以操作了,这样的话我们可以通过引用传参数,就可以不用父节点指针,直接进行旋转操作,直接看代码吧 //左旋转 void left_rotate(Tree &node) { Tree temp=node->rchild; node->rchild=temp->lchild; temp->lchild=node; node=temp; } 参数node为需要调整结点的父节点,在图示中也就是结点3,对比图看就明白了,注意这里是指针的引用。 (2)右旋转 同左旋转本质是一样的。 //右旋转 void right_rotate(Tree &node) { Tree temp=node->lchild; node->lchild=temp->rchild; temp->rchild=node; node=temp; } 二、插入 先来看看图解:

MIPI归纳---为什么阻抗为100欧姆

根据LVDS(Low Voltage Differential Signaling)电平定义的。 LVDS差分信号PN两线最大幅度是350mV,内部一个恒流源电流是3.5mA.于是终端匹配电阻是100欧姆 也就是PN之间的等效阻抗是100欧姆。这就是协议规定的。 如果小于100欧姆,终端输出电平幅度不够,loss增大。 如果大于100欧姆,电流源拉出功率(驱动能力)不足,容易被干扰。

Spring核心技术总结一

2019独角兽企业重金招聘Python工程师标准>>> 引言 新人入社后,发现自己真的老了,和年轻人有代沟了,虽然暂时还没有迈入而立之年。Spring核心技术总结一最近一直在学习Spring为了不让自己忘记,就写点吧!说不定对别人也有一些帮助呢!那就更好啦! 我是看了两本Spring电子书,还有很多其他资料才开始敲打的。所以很多内容是照搬的,这点我要说明一下,但是所有内容自认为还是理解之后才开始“忽悠”的。强烈推介《Spring in Action》,不管中文版还是英文版都不错。じゃ、始めましょう。(*^_^*) A)好的设计比实现技术更重要 刚才说了一大堆EJB的坏话,呵呵。有时候系统需要,EJB是必需的。但通常这种情况很少。就像上面说的,我们可能只需要其中很少或者几项EJB服务。但还是采用了EJB,这就是为了技术而技术。Spring,让你的系统按照你的需求尽量简单。 B)接口松散耦合 如果你采用EJB为你的系统提供服务,那么你的组件不光依赖EJB业务接口。还需要从JNDI那里找到EJB对象,然后调用EJB接口,这不是松耦合的系统,相反聚合性很强。 而Sping呢?由Spring容器负责解决依赖关系(容器会为你把需要的依赖注入进去),所以什么主动寻找服务就不再需要啦。 C)易测试性 EJB测试需要启动容器,Spring不需要。 2)Spring是什么? Spring是一个开源框架。由Rod Johnson创建。为了简化企业及系统开发而诞生的。使用Spring,你可以使用简单的javabeans来实现那些以前只有EJB才能实现的功能。 简单的说,Spring是一个轻量级的Ioc和AOP 容器 框架。 A)轻量级 无论从大小还是系统开支来说,Spring都算是轻量级的。整个Spring框架也就是1M多一点的Jar包。Spring的处理开支也非常小。它是非侵入式的:基于Spring开发的系统的对象一般不依赖于Spring的类。 B)反向控制(Ioc) 使用Ioc,对象是被动接受依赖类,而不是主动去寻找。这点和JNDI恰好相反。也就是在容器实例化对象的时候主动将它的依赖注入给它。所以说Spring是通过Ioc(控制反转)来实现依赖注入的。 Ioc意味着关于对象如何得到它的协作对象的责任反转了! C)面向切面(AOP) 通过AOP,将我们的业务逻辑从系统服务(事务管理,Log日志)中分离出来,将我们的关注点只放在业务逻辑部分。在需要系统服务的地点,时间再将系统服务注入进来。 D)容器 Spring是一个容器,是因为它包含并且管理系统对象的生命周期和配置。可以通过配置来设定你的Bean是单一实例(singleton)还是每次请求产生一个实例(prototype). E)框架 使用简单的组件配置组合成一个复杂的系统。也就是说,通过XML文件配置,要啥有啥! 3)Spring的7个模块 Spring由7个模块组成,注意:这7个模块根据系统的需求进行取舍。 AOP模块,O/R映射模块,JDBC和DAO模块,Web Context和Utility模块,Application Context模块,MVC模块,核心容器和支持工具。 A)核心容器 Spring核心容器为Spring框架提供了基础功能。在后面我们会讲到BeanFactory类,它是Spring框架系统的核心。BeanFactory采用工厂模式来实现Ioc. B)Application Context模块 如果说BeanFactory使Spring成为容器的话,那么Application Context模块就是让Spring成为框架的原因。它在BeanFactory基础上进行了扩展,添加了对I18N,系统生命周期事件以及验证的支持。另外,还提供了很多企业级服务,如电子邮件服务,JNDI访问,EJB集成,远程调用以及定时服务。 C)Spring的AOP模块 是Spring应用系统开发切面的基础。 D)JDBC抽象及DAO模块 我记得我以前做的项目中,涉及到数据库操作的时候,总是在程序中写一大堆和业务不相干的代码,什么获得连接,创建语句,处理结果,关闭连接。杂乱不堪!!! 现在Spring的JDBC和DAO模块把这些样板代码抽象出来,让我们的数据库代码变得简单明了。另外,这个模块还创建了一个数据库异常层。 E)O/R映射集成模块 Spring并没有实现自己的ORM解决方案,它为许多流行的ORM框架提供了支持。 F)Spring的Web模块 它是建立在Application Context基础之上,提供了适合Web系统的上下文。该模块还支持多项其他面向Web的任务。还包括对Struts的集成支持。 G)Spring MVC框架 虽然Spring可以和其他MVC框架(struts,Web Work)集成,但它也提供了全功能的MVC框架。 转载于:https://my.oschina.net/u/2308739/blog/523804

新手教你OpenVas在KaLi系统里使用

OpenVas在KaLi系统里使用 OpenVAS (Open Vulnerability Assessment System)是开放式漏洞评估系统,其核心部件是一个服务器,包括一套望楼漏洞测试程序,可以检测远程系统和应用程序中的安全问题。注意:OpenVAS Server仅支持Linux系统。官方网站:http://www.openvas.org/ 第一步打开Kali linux 在终端输入命令行 openvas-setup 作用是起到安装初始化 输入openvas-setup 作用是起到安装初始化 如果都连接不上的话在命令行里输入 vim /etc/resolv.conf 进入过后在这里的地址按下a 然后改成4个114 接着按esc+冒号 wq 保存并退出 接下来会看到重置NVT的缓存 如果看到这句话 这表示openvas是安装非常成功的! 然后怎么用呢 接着输入命令行openvas-start 运行过后直接在本机上打开浏览器 输入以上网址 就会看到一个界面 接着登录 第一次的花点击这里可以修改密码 由于密码太长 第一次的密码由于安装初始化过后在这里显示 进入之后再管理本软件这里点击用户 蓝色小图标是设置 把这里选上 然后自己修改,保存用户就行了 接着看下主界面,随便填一个ip,扫面ip出来之后点击这里 点击这里的1 可以看下报告 看这里的颜色会显示出级别不同的漏洞 这里会显示报告的完成度 各种各样的漏洞 用心等待扫面过后的报告 结果没有扫面出漏洞来 作者:CBL .. 问题:为什么用 OpenVas扫描不出漏洞呢OpenVas在KaLi系统里使用毕竟是个免费的软件,会不会是扫描的时候很可能在扫描过程中机子加了防火墙, OpenVas就有可能会绕过防火墙?如果谁懂的话可以指出来教教我,毕竟我是新手往后接触Kali问题、难题还在不断出现。

Hadoop-2.7.1安装与配置

Hadoop-2.7.1安装与配置 前面我们说了,旧版hadoop-1.2.1的安装配置,这也是好几年前的版本了吧。而现在最新版本是hadoop-2.7.1 。虽然,大体上hadoop的安装步骤基本一致,但是最新版本与hadoop-1.2.1不管是目录结构,亦或是脚本什么的都有了个很大的改变。所以,我便有写了一篇关于hadoop-2.7.1的安装配置博客。当然,最好的教程还是在官网,所以本文仅供参考,真正可行的还是在官网: http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/SingleCluster.html 一、准备 jdk-7u17-linux-x64.tar.gz hadoop-2.7.1.tar.gz 二、jdk、ssh安装 可以参考前面的安装步骤: http://cyw.iteye.com/blog/2251727 三、安装hadoop-2.7.1 1、将hadoop-2.7.1.tar.gz放在桌面,打开终端,cp到喜欢的目录之下。比如我安装在/home/hadoop/目录下 cp hadoop-2.7.1.tar.gz /home/hadoop/ 2、解压安装hadoop-2.7.1 sudo tar -zxvf hadoop-2.7.1.tar.gz 3、进入hadoop-2.7.1文件夹,配置环境变量,打开etc/hadoop/hadoop-env.sh。 sudo gedit etc/hadoop/hadoop-env.sh 在文件里编辑如下JAVA_HOME变量,改为自己的java安装目录: export JAVA_HOME=/usr/lib/java/jdk1.7.0_17 4、进入hadoop文件夹 bin/hadoop 输出如下: 5、如果是单机模式的话,这是便可以使用了: 6、如果是伪分布式的话,则还需要配置一些。打开etc/hadoop/core-site.xml sudo gedit etc/hadoop/core-site.xml 编辑内容如下: <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> 7、打开etc/hadoop/hdfs-site.xml sudo gedit etc/hadoop/hdfs-site.xml 编辑内容如下: <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> 8、此时,hdfs的配置已经完成。可以开启namenode 、secondarynomenode、datanode了。此时,hadoop-2.7.1建议我们使用hdfs而不是hadoop脚本,而且部分hdfs的操作放在sbin目录的脚本里面。所以: #格式化namenode bin/hdfs namenode -format #开启hdfs的相关节点 sbin/start-dfs.sh #关闭hdfs节点 sbin/stop-dfs.sh 可以使用浏览器url:localhost:50070进行web查看管理。 9、配置yarn计算框架(算是Map/Reduce的升级版) 打开etc/hadoop/mapred-queues.xml.template sudo gedit etc/hadoop/mapred-queues.xml.template 编辑内容如下:

【D3.js数据可视化实战】--(2)本地时间轴

背景需求绘制效果实现思路关键技术完整代码 背景需求 使用D3绘制图表一般都会绘制一个坐标轴,但是用D3画过图的同学都知道默认情况下绘制的坐标轴刻度是英文的。但是我们要的刻度是中文的。怎么办呢?且看本文讲解如何绘制本地时间轴。 绘制效果 实现效果如何,先来一睹为快! 默认格式化: d3.time.format("%b %Y") 本地格式化: zh.timeFormat("%Y年%b") 实现思路 思路很简单: 定义简体中文本地化用本地时间格式化函数格式化数轴的刻度值 关键技术 定义新的简体中文本地化 //简体中文本地化 var zh = d3.locale({ decimal: ".", thousands: ",", grouping: [3], currency: ["¥", ""], dateTime: "%a %b %e %X %Y", date: "%Y/%-m/%-d", time: "%H:%M:%S", periods: ["上午", "下午"], days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], shortDays: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "

MATLAB数字图像处理(二)直方图

(一) 绘制直方图 概念:这里的直方图,主要指图像灰度直方图,它在图像处理中有一定的应用。比如用直方图均衡来增强图像的对比度。 图像灰度直方图:一副数字图像有[0~255]灰度级,直方图定义如下: h(gk)=nk 其中, gk 是第k个灰度级(如:255), nk 是该灰度级的个数。 归一化直方图定义如下: p(gk)=h(gk)n=nkn 即:第k个灰度级出现的数量,比上所有灰度级数量总和。 MATLAB中绘制图像灰度直方图: 函数imhist(): h=imhist(img,b); 其中:img是输入图像,b是容器,容器简单说就是分几块显示。设置2,则分成两块显示。设置3,则3块。默认为256即256个灰度级。 若要得到归一化后的图像,那么可利用如下语句。 h_normal=imhist(img,b)/numel(img); 其中numel(img)是求出所有灰度级数量总和,即图像总像素数。 接下来,让我们实际生成一副直方图。 代码如下: f=imread('Moon Phobos.tif');%读入图片 imhist(f)%图像 直方图 axis([0 255 0 6000])%设置x、y轴坐标范围 通过直方图我们可以看书,图像的灰度级主要集中在两端,分布不够均匀,造成了原图较暗的部分看不清楚。下面将利用直方图均衡化,解决该问题。 (二)直方图均衡化 直方图均衡化的概念,其实很简单,具体概念就不说了。直接说个人理解。 将 设有 图像共有4个灰度级且归一化,为1/4占50个,2/4占50个,3/4占100个,1占50个。直方图归一化1/4~0.2,2/4~0.2,3/4~0.4,1~0.2。 首先1/4灰度级为, s1 =0.2,约等于1/4,即灰度级为1/4的对应0.2。 2/4灰度级, s2 =0.2+0.2,等于1/2,即灰度级为1/2的对应0.2。 3/4灰度级, s3 =0.2+0.2+0.4,等于1,即灰度级为1的对应0.4(3/4的灰度级)。 1灰度级 , s4 =0.2+0.2+0.4+0.2=1,等于1,即灰度级为1的对应0.4+0.2=0.6。 最后求解的灰度级为1/4~0.2,2/4~0.2,1~0.6。 在MATLAB中,函数histeq(f,nlev)可以完成此功能。其中个f为输入图像,nlev为输出图像灰度级。 实例如下: f=imread('Moon Phobos.tif'); figure,imshow(f),title('原图'); figure,imhist(f),title('直方图') g=histeq(f,256); figure,imshow(g),title('增强后'); figure,imhist(g),title('直方图均衡'); 可以看到,原来有些背面看不见的纹路也可以用观察到了。

MATLAB数字图像处理(一)图像的基本操作

写在前头:说到数字图像处理,不得不提起MATLAB。这是一款非常方便的仿真软件,绝大多数的图像处理可以用MATLAB完成。 有人问,处理图片,用PS岂不是更好。两者各有优点,如果需要将10000幅图片转换成灰度图像并保存呢?MATLAB只需要一段很短的程序运行几秒就可以完成这个工作。 本文基于MatlabR2012a,将由浅入深写下去。 MATLAB中图像的基本操作 1、读取、显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片。其中读取函数imread()原型: imread: A = imread(filename, fmt) A是结构体名,用来存储读入的图像数据。filename是读取的文件名,文件名要用”括起来。fmt是读取文件的类型如:jpg、png等等,这个参数可以不输入,由MATLAB自动判断。 显示函数imshow()原型: imshow: imshow(I) I为读取后保存在MATLAB中的结构体名。 程序实例: A=imread('1.jpg');%读取名为1.jpg的图片 imshow(A)%显示图片 2、将灰度图片变成负片 对图像进行操作,实际上是将图像看成许多个像素点,对每个像素点进行操作。在计算机系统中,灰度图片被看成是许多个由值在[0~255]之间的像素点组成的图像,255表示白色,0表示黑色,黑白之间存在256个灰度级。 负片是指将原灰度图白色的地方变成黑色,黑色的地方变成白色。也就是将0变成255,255变成0。MALTAB的imadjust()函数提供了该功能。其函数原型: imadjust: J = imadjust(I,[low_in; high_in],[low_out; high_out]) 其中,I为原灰度图像,low_in,high_in为输入图像的低和高灰度级,设置为[0,1]表示从0~255的归一化,low_out,high_out为输出图像的低高灰度级。 若是想将图片转换为负片,那么将[low_in; high_in]设置为[0,1],将[low_out; high_out]设置为[1,0]。即原来输入为0的地方变成1输出,输入为1的地方变成0输出。 实例: A=imread('1.jpg'); imshow(A)%显示原图 A1=imadjust(A,[0,1],[1,0]);%将灰度级对调 figure,imshow(A1)%显示负片 3、彩色图片转换成灰度图片 我们在计算机中看到的大多数彩色图片是基于RBG三通道的图片,红绿蓝三种颜色,每一种取值均为[0~255]。通过255*255*255,可以构成庞大的颜色群。而灰度图像只有256个灰度级。通过以下公式可以将RGB转换成灰度 GRAY=0.2989 R + 0.5870 * G + 0.1140 * B* MATLAB中提供的函数rgb2gray为我们提供了将彩色图片转换成灰度图片的功能。函数原型: I = rgb2gray(RGB) 实例: A=imread('001.png');%原彩色图片 imshow(A) A_gray=rgb2gray(A);%转换成灰度图片 figure,imshow(A_gray)

Android 源码镜像

https://lug.ustc.edu.cn/wiki/mirrors/help/aosp Android 镜像使用帮助 按照 Google 官方教程 https://source.android.com/source/downloading.html 将 https://android.googlesource.com/platform/manifest 替换为 git://mirrors.ustc.edu.cn/aosp/platform/manifest。 具体做法摘录如下(以防墙抽风): 首先下载 repo 工具。 mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo ## 如果上述 URL 不可访问,可以用下面的: ## curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo 然后建立一个工作目录(名字任意) mkdir WORKING_DIRECTORY cd WORKING_DIRECTORY 初始化仓库: repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest ## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的: ## REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo' 如果需要某个特定的 Android 版本(Android 版本列表): repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-4.0.1_r1 同步源码树(以后只需执行这条命令来同步): repo sync 已有仓库如何改用科大源 如果您已经从官方同步了 AOSP 仓库,现在希望使用科大的 AOSP 仓库,请修改 .

james 安装

James3.x Apache James(Java Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP、POP3与NNTP等多种邮件相关协议。 目前James有稳定版还stable版本2.3.2和beta版beta3.James2.x版本开发于Avalon(Java Apache Server Framework)框架之上,James3.x开发自Spring框架之上。同时为了解决性能问题,在James3.x上加入Queue机制(ActiveMQ)进行邮件的异步处理。同时3.x配置文件对2.x的配置文件进行了拆分,故James2.x和James3.x有较大的区别。本文将以项目中使用的版本James Server 3.0-beta3的环境配置进行描述。 一、简单安装 1.OS:Ubuntu11.04 2.JDK1.6+,(jdk-6u26-linux-i586.bin) a.将jdk安装到usr下面: /usr/jdk1.6.0_26/ b.配置/etc/profile,如下: Java代码 export JAVA_HOME=/usr/jdk1.6.0_26 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin c.使配置文件生效: Java代码 root@master# source /etc/profile d.校验: Java代码 root@master:/# java -version java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode) root@master:/# 3. James3 安装 a.下载:james-3.0-beta3| http://apache.etoak.com//james/apache-james/3.0beta3/apache-james-3.0-beta3-app.tar.gz b.解压并将解压的文件cp到要安装的路径 Java代码 tar -zxvf apache-james-3.0-beta3-app.tar.gz root@master#: cp -rf apache-james-3.0-beta3 /opt/james3.0 c.

MySQL之SQL分析三部曲实际案例

------------------------------------------------------------正文------------------------------------------------------------ 由于是生产环境下进行的,截图和SQL都隐去了一些信息 背景:有用户在抱怨生产系统上,某一个Web的页面太慢,忍无可忍 问题分析过程:略 问题聚焦:最终确定是某一个SQL语句太慢,查询时间用了4s(慢查询日志给出的信息) 罪魁祸首的SQL语句: select col1,col2......colN from tom inner join toa on tom.id = toa.id left join tov on tom.id = tov.id inner join toi on tom.id = toi.id left join fo on tom.stype = 2 and fo.id = tom.id WHERE ( tom.ostatus = 1 and tom.sid in ( 1 , 2 , 3) and tom.ptime >= '2333-01-01 09:41:58.056' and tom.ptime <= '2333-02-01 09:41:58.056' and tom.otype != 2 and toi.

MySQL索引选择不正确并详细解析OPTIMIZER_TRACE格式

一 表结构如下: CREATE TABLE t_audit_operate_log ( Fid bigint(16) AUTO_INCREMENT, Fcreate_time int(10) unsigned NOT NULL DEFAULT '0', Fuser varchar(50) DEFAULT '', Fip bigint(16) DEFAULT NULL, Foperate_object_id bigint(20) DEFAULT '0', PRIMARY KEY (Fid), KEY indx_ctime (Fcreate_time), KEY indx_user (Fuser), KEY indx_objid (Foperate_object_id), KEY indx_ip (Fip) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 执行查询: mysql> explain select count(*) from t_audit_operate_log where Fuser='XX@XX.com' and Fcreate_time>=1407081600 and Fcreate_time<=1407427199\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t_audit_operate_log

eq_range_index_dive_limit决定COST估算方式

在MySQL的官方手册上有这么一句话: the optimizer can estimate the row count for each range using dives into the index or index statistics. 这是在说: 优化器为每一个范围段(如“a IN (10, 20, 30)”是等值比较, 括3个范围段实则简化为3个单值,分别是10,20,30)估计每个范围段(用范围段来表示是因为MySQL的“range”扫描方式多数做的是范围扫描,此处单值可视为范围段的特例)中包括的元组数, 而估计方法有2种,一是dive到index中即利用索引完成元组数的估算,简称index dive; 二是使用索引的统计数值,进行估算: 相比这2种方式,在效果上: 1 index dive: 速度慢,但能得到精确的值(MySQL的实现是数索引对应的索引项个数,所以精确) 2 index statistics: 速度快,但得到的值未必精确 简单说,选项 eq_range_index_dive_limit 的值设定了 IN列表中的条件个数上线,超过设定值时,会将执行计划从 1 变成 2。 为什么要区分这2种方式呢? 简单地说: 1 查询优化器使用代价估算模型计算每个计划的代价,选择其中代价最小的 2 单表扫描时,需要计算代价;所以单表的索引扫描也需要计算代价 3 单表的计算公式通常是:代价=元组数*IO平均值 4 所以不管是哪种扫描方式,都需要计算元组数 5 当遇到“a IN (10, 20, 30)”这样的表达式的时候,发现a列存在索引,则需要看这个索引可以扫描到的元组数由多少而计算其索引扫描代价,所以就用到了本文提到的“index dive”、“index statistics”这2种方式。 MySQL据此,提供了一个参数“eq_range_index_dive_limit”,指示MySQL在这种情况下使用哪种方式。用法如下: This variable indicates the number of equality ranges in an equality comparison condition when the optimizer should switch from using index dives to index statistics in estimating the number of qualifying rows.

VS2008 C++数组定义上限

今天,在新建的MFC单文档应用程序中,在函数里面定义了一个double型数组,大小是512*512,程序编译可以通过,但是一运行就出现“未处理的异常: 0xC0000005: 读取位置 0x00560000 时发生访问冲突。”缩小数组大小为100*100,可以正常运行。这是什么原因呢? 网上百度了一下,原来是因为数组定义在函数体内部,其空间大小是在堆栈区进行分配的,数组过大会造成堆栈溢出,堆栈空间有限。将数组定义在全局数据区,就没有问题了。 试着在将double型数组定义为全局变量,大小512*512,编译顺利通过,运行也能成功。 原来如此,学习了,Mark一下。 ——每天进步一点点,学习一点点,终有一天,可以成为大神。(来自编程小白)

python中pyserial模块使用方法

一、概述 pyserial模块封装了对串口的访问。 二、特性 在支持的平台上有统一的接口。 通过python属性访问串口设置。 支持不同的字节大小、停止位、校验位和流控设置。 可以有或者没有接收超时。 类似文件的API,例如read和write,也支持readline等。 支持二进制传输,没有null消除,没有cr-lf转换。 三、系统要求 python 2.3及以上版本,包括py3k。 四、使用方法和实例 1、导入pyserial模块 import serial 2、打开串行口 // 打开串口0, 9600,8N1,连接超时0.5秒 import serial ser=serial.Serial("/dev/ttyUSB0",9600,timeout=0.5) #使用USB连接串行口 ser=serial.Serial("/dev/ttyAMA0",9600,timeout=0.5) #使用树莓派的GPIO口连接串行口 ser=serial.Serial(1,9600,timeout=0.5) #winsows系统使用com1口连接串行口 ser=serial.Serial("com1",9600,timeout=0.5) #winsows系统使用com1口连接串行口 ser=serial.Serial("/dev/ttyS1",9600,timeout=0.5) #Linux系统使用com1口连接串行口 print ser.name #打印设备名称 print ser.port #打印设备名 ser.open () #打开端口 s = ser.read(10) #从端口读10个字节 ser.write("hello") #向端口些数据 ser.close() #关闭端口 data = ser.read(20) #是读20个字符 data = ser.readline() #是读一行,以/n结束,要是没有/n就一直读,阻塞。 data = ser.readlines()和ser.xreadlines() #都需要设置超时时间 ser.baudrate = 9600 #设置波特率 ser.isOpen() #看看这个串口是否已经被打开 3、获得串行口状态 串行口的属性: name:设备名字 portstr:已废弃,用name代替 port:读或者写端口 baudrate:波特率 bytesize:字节大小 parity:校验位 stopbits:停止位 timeout:读超时设置 writeTimeout:写超时 xonxoff:软件流控 rtscts:硬件流控 dsrdtr:硬件流控 interCharTimeout:字符间隔超时 属性的使用方法: ser=serial.

JPA-DATA学习

And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd);Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr);Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min);LessThan --- 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max);GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull();IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();NotNull --- 与 IsNotNull 等价;Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user);NotLike --- 等价于 SQL 中的 "

LibMMSeg

转自:http://www.coreseek.cn/opensource/mmseg/#coreseek_mmseg_complex 感谢,为了方便学习 LibMMSeg 简介 LibMMSeg 是Coreseek.com为 Sphinx 全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用Chih-Hao Tsai的MMSEG算法。 MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching Algorithm Published: 1996-04-29 Updated: 1998-03-06 Document updated: 2000-03-12 License: Free for noncommercial use Copyright 1996-2006 Chih-Hao Tsai (Email: hao520 at yahoo.com ) 您可以在Chih-Hao Tsai's Technology Page找到算法的原文。 LibMMSeg 采用C++开发,同时支持Linux平台和Windows平台,切分速度大约在500K/s(酷睿 2.4G);截至目前版本LibMMSeg没有为速度做过特殊优化,进一步的提升切分速度仍有空间。 下载 下载 Coreseek-3.2.14+MMSeg 3.2.14,mmseg-3.2.14.tar.gz mmseg for node.js MMSeg 的 Node.js 插件,由 zzdhidden 开发。 https://github.com/zzdhidden/mmseg-node

ubuntu 启动项创建器 选择不了CD镜像,IOS镜像的解决方法

自己系统是ubuntu14.04 , 想使用 ubuntu自带的启动项创建器(usb-creator-gtk)做一个CDLinux的U盘启动项, 打开程序后发现U盘识别了, 在添加镜像的时候,发现怎么也添加不上,很是不解, google 和百度上都没有这样的问题, can't select ISO. 后来再ubuntu社区里找到了答案: 有人说这个制作u盘启动 的工具只能识别ubuntu的镜像包, 不能识别其他的类型的镜像,我亲自试了下,果然不行,比如centos ,fedora,windows 当然 CDLinux的也不行. 这方面 此软件做的不行呀,也没有个提示之类的,让用户用的莫名其妙的~~~~~ 所以只有找其他工具来制作这个u盘启动了 这里提供一种方法: 使用unetbootin sudo apt-get install unetbootin

windows 彻底删除360文件 360zipext.dll 等等

360的软件 老是在我不知道的情况下安装360卫士和360浏览器 妈...的 恶心死我了.. 用QQ管家粉碎也弄不了 比如360zipext.dll,360UDiskGuard64.dll等,怎么也删不了 一个方法: 1 .用windows资源管理器找到你要删除的文件的地址 地址栏复制一下 2 .Windows 任务管理器 进程里 找到explorer.exe 点击 右键结束进程 这是没桌面了 不要担心 3 .按 win+R ,进入cmd 复制这个地址 cd d:\360\... 回车 然后d:回车 进入那个文件夹的当前位置 dir一下 可以看到要删除的文件 4 .del 文件名 或者del *.* 5 .然后再win+R 键入explorer 桌面又回来了 ok

SAP客户标准信用额度修改和创建

好吧,前提要说一下,信贷是到客户的信贷范围级别的。 FUNCTION zfm_credit. *"---------------------------------------------------------------------- *"*"本地接口: *" TABLES *" T_TAB STRUCTURE ZJKS001 OPTIONAL *" T_TAB_I STRUCTURE ZJKS002 OPTIONAL *"---------------------------------------------------------------------- DATA:gs_zsds001 TYPE zsds001. DATA:gs_zsds002 TYPE zsds002. DATA:lv_func TYPE char50."结构ID DATA:s_tab TYPE zjks001."表头结构 DATA:s_tab_i TYPE zjks002."表体结构 DATA:gt_table TYPE ddfields, gs_table TYPE dfies. DATA:gs_knka TYPE knka, gs_knkk TYPE knkk, gv_knka TYPE knka, gv_knkk TYPE knkk, gv_upd TYPE cdpos-chngind. DATA:gv_name1 TYPE kna1-name1. DATA:gt_kna1 TYPE TABLE OF zsknb1, gs_kna1 TYPE zsknb1. DATA:lv_line TYPE i. DATA:gs_zsds003 TYPE zsds003.

Java反射之 getMethod() 与invoke的使用

1、forName 方法 forName是一个静态方法,其作用:通过调用来获取类名对应的Class对象,同时将Class对象加载进来。 如果将类名保存在字符串(如xml)中,就可以在程序运行时,动态调用加载。 注意:只有调用的参数是类名或者方法时,才可用。 2、newInstance()方法 作用:将对象实例化。返回类型为Object。与new的区别在于,new可以带参,而newInstance()不可以,一边初始化无参类。通常与forName()配合使用。 例: String str = "java.util.Date"; Class cl1= Class.forName(str);//加载java.util.Date类 Object obj = cl1.newInstance();//实例化cl1 3、getMethod()方法 getMethod方法与getField方法类似,getField方法根据表示域名的字符串,返回一个Field对象。而getMethod方法则根据方法名称和相关参数,来定位需要查找的Method对象并返回。 getMethod与getDeclareMethods方法的区别在于,后者返回一个Method对象数组,需要自己在结果中查找所需Method对象。 原型: Method getMethod(String name,Class...parameterTypes) 参数解释:name: method的名称 parameterTypes:method的参数类型的列表(参数顺序需按声明method时的参数列表排列) 返回:符合method名称和参数的method对象 抛出错误:NoSuchMethodException 原因:没有找到所要查询的Method对象 或 Method名称为“<init>”或“<clinit>” NullPointerException 原因:所要查询的Method对象的名称为null SecurityException 原因:调用的类或其父类没有调用权限 例: Method m1 = Employee.class.getMethod("getName"); Method m2 = Employee.class.getMethod("raiseSalary",double.class); 上面例子分别获得了Employee类的getName方法和raiseSalary方法的 方法指针m1,m2。 4、invoke方法 作用:调用包装在当前Method对象中的方法。 原型:Object invoke(Object obj,Object...args) 参数解释:obj:实例化后的对象 args:用于方法调用的参数 返回:根据obj和args调用的方法的返回值 抛出错误:IllegalAccessException 原因:Method对象强制Java语言执行控制 或 无权访问obj对象 IllegalArgumentException 原因:方法是实例化方法,而指定需要调用的对象并不是实例化后的类或接口 例: Class l = Class.forName("test1.A"); Object obj1 = l.

由Java里static引发的感受

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">市面上各种所谓的Java宝典和Java学习书籍对static的理解可谓是各有千秋啊,有的人说不该翻译为静态变量,他和静态没有关系,他的实质就是属于类本身的。有的人说,翻译的对,就该叫“静态”。于是乎,这些人都互相文字攻击,声称自己理解的透彻。</span> 谈观点之前,有个前提,如果你是什么计算机基础的人都没有,涉足计算机这个行业,不管是软件也好还是硬件也罢,要想混的久远,那么就不要浮躁,不要以为会用Java编写个小项目就精通Java,不要以为高级语言已掌握,打遍天下都不怕。其实你只是个“工程师”这三个字里第一个字“工”,就好比你会砌砖砌瓦,你会用米尺丈量房屋建造过程中的各种方式等等,你只是混在行业的底层。我认为真正的想在行业混的人,就不该去质疑要不要学《数据结构和算法分析》,《计算机组成原理》,《编译原理》,《操作系统》,《计算机网络》,更不要总在论坛问来问去这个难不难要不要学......之类的话。没人帮了你职业未来,你想混的好,就不要有这么多问题,你有这会儿担忧的功夫都已经把数据结构第一章学完了。如果再犹豫几天,你本应有时间把接下来的几章都过一遍了,犹豫什么啊? 为什么考软件或者计算机之类的研究生的时候以上几门课都会成为初试的科目?又为什么出去好点的大公司面试的时候都先考考你以上几门专业课的知识?而后才看看你用哪些高级语言做过些什么项目经历,开发过什么类型的项目等等。就是因为他们的重要好比盖房子的“砖瓦“。这些知识点相互联系交叉,都要学到融会贯通的程度才行。修炼出来后你学高级语言也好,学高级数据库也罢,都是相当高效的。简单具体例子。我同学好多是本科其他专业,研究生转入本行业,刚刚开始就上手Java编程,对那些稍微专业点的术语都感觉步履维艰,再加上稍微涉及点内存分析的知识,就已经要被打败了,于是乎他一遍又一遍地学,看视频。我想说,你在看10遍,100遍视频也学不好,送他四个字:空中楼阁。你懂得。 作为初学者的我(本科计算机相关专业:电子信息工程),对于static的探究可谓是坚持不懈打破沙锅问到底啊,所以谈谈我的感受。接下来我从static这个关键字来说一说我以上观点的论据。Java语言与其他语言的区别是Write Once, Run Anywhere ,这里就有问题了,编译!那个鼓吹说学高级语言的程序员不需要了解内存,编译原理。我想说,那你永远别说自己想成为Java工程师。为什么?慢慢你就知道了。科普一下啊: 静态和动态的区别:在为一个语言设计一个编译器时,我们所面对的最重要的问题之一是编译器能够对一个程序做出哪些判定。如果一个语言使用的策略支持编译器静态决定某个问题,那么我们说这个语言使用了静态策略,或者说这个问题可以在编译时刻决定。另外一方面,一个只允许在运行程序的时候做出决定的策略被称为动态策略,或者被认为需要在运行的时刻做出决定。 我们继续说Java,他的JVM即Java Virtual Machine 帮他做了很多事情,大多数人都知道,但是做了什么事情呢?如何做的呢?详细请见《深入java虚拟机 第二版》这本书。在这里我只简单说下Java虚拟机内存分配问题。内存有堆内存,栈内存。堆内存里新生代和老年代,一般Java对象的创立是放在新生代中的,老年代放的就是static修饰的属于类本身的变量或者方法。为什么属于类本身,注意static修饰的变量或者方法,不是指的作用域,而是编译器确定用于存放被声明的对象的内存位置方式,可以在程序运行之前的编译时刻(compile time)决定,这个名称是相对于只允许在运行程序的时候做出决定的策略的动态策略而来的。 例如: public static int x; 使用x成为一个类变量,也就是不管创建了多少个这个类的对象,只存在一个X的拷贝。此外,编译器可以确定内存中 的被用于存放整数X的位置。反过来,如果这个声明中省略了”static“,那么这个类的每个对象都会有他自己的用于存放X的位置,编译器没有办法在运行程序之前预先确定所有这些位置。 (注:我提到的专业词汇你不懂的话马上去恶补一下Java虚拟机的知识,花不了多长时间,绝对对你理解Java中那些死规定和语法有很大的帮助。那么如果你看Java虚拟机某些章节是发现计算机组成原理里的某些知识你又不明白,还是那句话,回去恶补,直到任督二脉都打通为止)

如何用C++函数实现类似三目运算符的功能

问题引出 今天aikilis问了我二个问题: 1 下面这段代码合法吗? ( i > 0 ? i : j ) = 1; 2 如何用一个原型为quest(bool,type,type)的函数实现三目符的功能? 经试验,第一个问题的答案是肯定的,虽然原来从没这么用过。 第二个问题确实费了很多脑筋。 三目符的性质 void test0() { int i = 0, j = 0, k; ( i > 0 ? i : j ) = 3; // ok ( i > 0 ? i : 2 ) = 3; // error ( i > 0 ? 1 : j ) = 3; // error ( i > 0 ?

HTTP Error 12057 - SSL Revocation(解决geen的问题)

This error is happening because the program GenoPro uses a secure encrypted protocol (SSL) to connect to the server GenoPro.com. Under rare conditions, your computer may display the error below because it is unable to validate the SSL certificate. HTTP Error 12057: Unable to validate the revocation of the SSL certificate because the revocation server is unavailable You will only see the error if you are working with secure sockets (https protocol).

20150904看电影学英语

report for duty 前来报到at stake 危急时刻the hell 究竟 there is no shame of ……没什么可丢脸的determined 坚定的one too many 很多次i`ll say 我看也是fair enough 同意,接受 (表达理解了,接受了别人的意见,决定,行为)pull off 靠边停车 ,pull it off 圆满成功,圆满地实现了

20150902 --Oracle学习笔记

第二天 基本概念–数据库服务器、数据主和表的关系 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每个应用创建一个数据库。 为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。 数据库服务器、数据库和表的关系如图所示: 基本概念–数据在数据库中的存储方式 数据存在方式(主要是以表的形式) 表的管理–创建表(基本语句) 建表的基本语法: create table table_name( field1 datatype, field1 datatype, field1 datatype, … ) 注:table_name表名;field指定列名(字段名);datatype指定列类型(字段数据类型) 注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。 例:user对象 id int name string password string birthday date 快速入门示例: SQL> create table users( id number, name varchar2(32), password varchar2(32), birthday date); Id Name Password birthday 表的管理–oracle常用数据类型 分类 数据类型 说明 文本、二进制类型 char(size) char(20) varchar(size) varchar(20) nchar(n) nvarchar2(n) clob(character large object) blob(binary large object) 定长 最大2000字符 变长 最大4000字符 Unicode数据类型,定长 最大2000字符 Unicode数据类型,变长 最大4000字符 字符型大对象,最大8TB 二进制数据 可以存放图片/声音 8TB 数值类型 number(p,s) p为整数位,s为小数位.