raspberry pi wn725n driver

raspberry pi wn725n driver http://www.raspberrypi.org/phpBB3/viewtopic.php?t=55779 http://lukin.cn/p/Raspberry_Pi_TP-LINK_WN725N_V2.html wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20130209.tar.gz for 3.6.11+ #538 and #541 use 8188eu-20130830.tar.gz for 3.6.11+ #524, #528 or #532 use 8188eu-20130815.tar.gz for 3.6.11+ #371 up to #520 use 8188eu-20130209.tar.gz sudo install -p -m 644 8188eu.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless sudo depmod -a sudo modprobe 8188eu

2013-11-30 · 1 min · 45 words · -

Scala

Scala 发音为/ˈskɑːlə, ˈskeɪlə/ Java VS Scala 从定义上来说,Java是面向对象的编程语言,而Scala是函数式编程语言,这两门语言之间,本身也有一定的关联。 Scala来源于Java,又“高于”Java,在Java之上增加了一层编码的“API”,让程序员可以通过函数式编程的方式来开发程序。 Scala程序最终被编译为.class文件运行在JVM虚拟机中,所以它是JVM下的语言一种,在实际的大数据开发任务当中,Java和Scala都运行于JVM之上,也能更好地集成。 Scala编程语言近来抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。Christopher Diggins认为: 不太久之前编程语言还可以毫无疑义地归类成"命令式"或者"函数式"。Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。 根据David Rupp在博客中的说法,Scala可能是下下一代Java。这么高的评价让人不禁想看看它到底是什么东西。 Scala有几项关键特性表明了它的面向对象的本质。例如,Scala中的每个值都是一个对象,包括基本数据类型 (即布尔值、数字等) 在内,连函数也是对象。另外,类可以被子类化,而且Scala还提供了基于mixin的组合 (mixin-based composition) 。 与只支持单继承的语言相比,Scala具有更广泛意义上的类重用。Scala允许定义新类的时候重用"一个类中新增的成员定义 (即相较于其父类的差异之处) “。Scala称之为mixin类组合。 Scala还包含了若干函数式语言的关键概念,包括高阶函数 (Higher-Order Function) 、局部套用 (Currying) 、嵌套函数 (Nested Function) 、序列解读 (Sequence Comprehensions) 等等。 Scala是静态类型的,这就允许它提供泛型类、内部类、甚至多态方法 (Polymorphic Method) 。另外值得一提的是,Scala被特意设计成能够与Java和.NET互操作。Scala当前版本还不能在.NET上运行 (虽然上一版可以-_-b) ,但按照计划将来可以在.NET上运行。 Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件 (即在JVM上运行的字节码) 。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。用David Rupp的话来说, 它也可以访问现存的数之不尽的Java类库,这让 (潜在地) 迁移到Scala更加容易。 这让Scala得以使用为Java1.4、5.0或者6.0编写的巨量的Java类库和框架,Scala会经常性地针对这几个版本的Java进行测试。Scala可能也可以在更早版本的Java上运行,但没有经过正式的测试。Scala以BSD许可发布,并且数年前就已经被认为相当稳定了。 说了这么多,我们还没有回答一个问题: “为什么我要使用Scala?“Scala的设计始终贯穿着一个理念: 创造一种更好地支持组件的语言。 (《The Scala Programming Language》,Donna Malayeri) 也就是说软件应该由可重用的部件构造而成。Scala旨在提供一种编程语言,能够统一和一般化分别来自面向对象和函数式两种不同风格的关键概念。 https://cloud.tencent.com/developer/article/1758874

2013-11-29 · 1 min · 59 words · -

change, alter, vary, modify

change, alter, vary, modify 这组动词的一般含义是"改变"或"变化". change change 指"使改变得与原物完全不同"或"使发生以新代旧的变化",如: The appearance of the town is quite changed. 这个城镇的外观变化颇大。 是通用词,它有两层基本含义: “变"和"换”.“变"可以指和原来的样子或性质稍有不同,也可以指有本质的差异。 At first, she decided to go to the police, but fearing that she would never see Rastus again-the letter had made that quite clear-she changed her mind. 起初,她决定去警察局,但是她由于担心再也见不到拉斯特斯了-那封信说得相当清楚-她改变了主意。 He then changed into overalls and spent the next eight hours as a dustman. 然后他换上工装裤,作为清洁工人度过接下去的八小时。 alter 语气比 change 正式、温和,通常指部分改变,但保留原有核心。 含义:对细节或外观做修改;更偏“调整”或“修正”。 常用于:衣服尺寸、计划细节、文件内容、行为习惯等。 不会造成根本性改变。 alter 指"局部的、外表的变化, 但特点不变”, 如: ...

2013-11-24 · 1 min · 162 words · -

JAVA生成随机汉字

JAVA生成随机汉字 http://blog.csdn.net/smilememory/article/details/8053599 首先我们得知道汉字编码的原理。 在国标GB2312-80中规定,所有的国标汉字及符号分配在一个94行、94列的方阵中,方阵的每一行称为一个"区",编号为01区到94区,每一列称为一个"位",编号为01位到94位,方阵中的每一个汉字和符号所在的区号和位号组合在一起形成的四个阿拉伯数字就是它们的"区位码"。区位码的前两位是它的区号,后两位是它的位号。用区位码就可以唯一地确定一个汉字或符号,反过来说,任何一个汉字或符号也都对应着一个唯一的区位码。例如,汉字"辉"字的区位码是2752,表明它在方阵的27区52位。 所有的汉字和符号所在的区分为一下4个组。 (1) 01区到15区 图形符号区,其中01区到09区为标准符号区,10区到15区为自定义符号区。 (2) 16区到55区 一级常用汉字区,包括了3755个一级汉字。这40个区中的汉字是按汉语拼音排序的,同音字按笔画顺序。其中55区的90~94位未定义汉字。 (3) 56区到87区 二级汉字区,包括了3008个二级汉字,按部首排序。 (4) 88区到94区 自定义汉字区 其中,第10区到15区的自定义符号区和第88区到第94区的自定义汉字区可由用户自定义国标码中未定义的符号和汉字。 与汉字的区位码类似的还有汉字机内码,汉字机内码是在汉字的区码和位码上分别加上A0H (这里的H表示前两位数字为十六进制数) 而得到的。使用机内码表示的一个汉字占用两个字节,分别称为高位节和低位节,这两位字节的机内码按以下规则表示。 高位字节=区码+20H+80H(或区码+A0H) 地位字节=位码+20H+80H(或位码+A0H) 例如,汉字"啊"的区位码为1601, 区码和位码分别用十六进制表示即为1001H,它的机内码的高位字节为B0H,地位字节为A1H, 机内码就是B0A1H。 注意: 汉字的机内码都从第十六区B0开始,并且从区位D7开始以后的汉字都是很难见到的复杂汉字,可以将这些汉字排除掉。所以随机生成的汉字机内码的第一位范围在B C D 之间, 如果第 1 为 是D, 则第二位区位码就不能是7以后的十六进制数。由于每个区的第一个位置和最后一个位置是空的,没有汉字,因此随机生成的区位码的第 3 为如果是A, 第4位就不能是0;第三位如果是F,第四位就不能是F。 (以上来自《java web 程序开发范例宝典》明日科技 王国辉 陈丹丹 潘凯华编著 人民邮电出版社) 获得随机汉字的java代码 //获得随机的汉字 private String getRandomChinese(){ Random random = new Random(); int code1,code2,code3,code4;//分别代表四个位码 String checkCode = “”; String[] rBase = {“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“a”,“b”,“c”,“d”,“e”,“f”}; code1 = random.nextInt(3) +11; ...

2013-11-17 · 1 min · 171 words · -

TCP/IP 网络协议的通俗理解, socket,http,soap

TCP/IP 网络协议的通俗理解, socket,http,soap http://blog.csdn.net/eyeooo/article/details/7438267 前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑。主要是因为对网络协议不太熟悉,对一些概念也没弄清楚。后来我花了一些时间去了解这些网络协议,现在对TCP/IP网络协议有了初步的认识,在这里总结出来,可以梳理一下我对网络协议的理解,加深印象. 话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样。一个只懂英语的人,和一个只懂中文的人由于没有共同的语言 (规则) 就没办法沟通。两台电脑之间进行通讯所共同遵守的规则,就是网络协议。 那么谁来制定这个网络协议? 国际标准化组织(ISO)定义了网络协议的基本框架,被称为OSI模型。要制定通讯规则,内容会很多,比如要考虑A电脑如何找到B电脑,A电脑在发送信息给B电脑时是否需要B电脑进行反馈,A电脑传送给B电脑的数据的格式又是怎样的?内容太多太杂,所以OSI模型将这些通讯标准进行层次划分,每一层次解决一个类别的问题,这样就使得标准的制定没那么复杂。OSI模型制定的七层标准模型,分别是: 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。 虽然国际标准化组织制定了这样一个网络协议的模型,但是实际上互联网通讯使用的网络协议是TCP/IP网络协议。 TCP/IP 是一个协议族,也是按照层次划分。共四层: 应用层,传输层,互连网络层,网络接口层。 那么TCP/IP协议和OSI模型有什么区别呢?OSI网络协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP协议参考了OSI模型,但是并没有严格按照OSI规定的七层去划分标准,而只划分了四层,个人觉得这样会更简单点,当划分太多层次时,你很难区分某个协议是属于哪个层次的。TCP/IP协议和OSI模型也并不冲突,TCP/IP协议中的应用层协议,就对应于OSI中的应用层,表示层,会话层。就像以前有工业部和信息产业部,现在实行大部制后只有工业和信息化部一个部门,但是这个部门还是要做以前两个部门一样多的事情,本质上没有多大的差别。TCP/IP中有两个重要的协议,传输层的TCP协议和互连网络层的IP协议,因此就拿这两个协议做代表,来命名整个协议族了,在说TCP/IP协议时,是指整个协议族。 TCP/IP协议分为四个层次,但我们并不需要了解所有层次的协议,我觉得主要关注应用层和传输层的协议就可以了。拿寄送邮件举例, A寄邮件给B,A关心的是用什么格式写什么内容给B (应用层内容) ,是寄挂号信还是寄平信 (传输层内容) ,但是A是不会去关注邮件传送过程中采用了那条路线,邮递员是如何把信件递送到B手里的 (互连网络层,网络接口层) 。 先说传输层,传输层有多个协议,但最主要的是TCP和UDP协议。两则的区别在于TCP协议需要接收方反馈,UDP协议不需要接收方反馈。TCP就像挂号信,A电脑发信息给B电脑后,需要得到B电脑的反馈,这样A电脑就能知道B电脑是否已经收到信息。UDP就像平信,A电脑发信息给B电脑后,B电脑并不给A电脑发聩,A电脑发送信息出去后并不知道B电脑是否已经收到。 因此,TCP传输比UDP传送更可靠,但是TCP传输的效率就不如UDP了。至于,在传送过程中具体选择哪种传送方式,需要具体问题具体分析。在不可靠的网络传送过程中一般选择TCP传送方式。在讲求效率,或者不在乎传送失误的情况下可以选择UDP方式来提高传输速率。 应用层的协议有很多,每一个协议代表一种类型的服务。HTTP协议,万维网服务。FTP协议,文件传送服务。POP3,邮件服务,SOAP协议webService服务。 在理解TCP/IP协议的过程中,我遇到了三个困惑。 1.什么是socket? 以前有听说过socket编程这种说法,也有的说 socket 编程。我在搜索关于socket的资料时,发现有的说socket是指一个连接,有的说socket是一指一个端点。拿打电话做比喻,A电话机和B电话机正在通话,那么socket是指的A和B之间的连接线呢,还是指电话机 (端点) ? 我现在的理解是,socket就是一个连接中的一个端点,一次通讯 (连接) a,b端都会有一个socket。一个socket对应一个连接。 2.http协议属于应用层还是传输层? http 超文本传送协议,听上去像是传输层的协议一样。但事实上大家都知道http和ftp一样都是属于应用层的协议,我先前很纳闷的是,既然是应用层的协议,怎么就取这样一个误导人的名称啊。在对TCP/IP协议还不熟悉的时候,这很容易让人误解和纳闷的。后来,我在wiki上发现这么一段话: http中文译名问题 HTTP 在中国大陆被翻译为"超文本传输协议",因为"transfer"在中文里有"传输"的含意。但依据 HTTP 定制者之一的 Roy Fielding博士的论文[1] (6.5.3节) ,作者专门强调"transfer"表示的是" (表述状态的) 转移" (Representational State Transfer) ,而不是"传输" (transport) 。故其中文译名"超文本传输协议"恰恰引种反映了这种误解。更符合原义的译名应该为"超文本转移协议"。 这段话解除了我的疑惑。那么http协议当然是应用层的协议。 3.SOAP可以使用HTTP协议进行传输吗? 在了解SOAP协议的过程中,看到介绍说soap可以通过tcp,udp,http协议来传送。这也是让人困惑的描述。一看这句话,就会感觉http怎么和tcp,udp协议并列了呢?难道http还是属于传输层的协议?再加上http中文译名的问题,名字听上去像传输层,初学者又要开始头大了。 事实上,http是应用层的协议,这一点可以毫无怀疑。那么现在新的问题来了。soap和http都是应用层协议,怎么说soap能用http协议来传输呢?应用层的协议可以用应用层的协议传送吗? 我查阅了资料,是这样一回事情,soap将信息进行XML的序列化后,再用http协议的方式再打包进行传送,传送的方式还是tcp或者udp。做个比喻就好理解了。tcp 和 udp 都是公路,暂且把tcp认为是一般公路,udp高速公路,soap和http就都是汽车,那么soap和http都可以在tcp和udp上跑。说soap可以通过http来传送,实际就是说soap是小轿车,http是装轿车的卡车,把soap的信息装到http里面,然后再运输,当然走的道路还是tcp或udp。 说soap可以通过http协议来传输,这句话不太准确,比较准确第说法是: soap信息可以通过http协议包装后通过tcp或udp传输。

2013-11-17 · 1 min · 67 words · -

socket, 套接字, 套接口

socket, 套接字, 套接口 应用层通过传输层进行数据通信时,TCP 和 UDP 会遇到同时为多个应用程序进程提供并发服务的问题。多个 TCP 连接或多个应用程序进程可能需要通过同一个 TCP 协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与 TCP/IP 协议交互提供了称为 socket (Socket) 的接口,区分不同应用程序进程间的网络通信和连接。 生成 socket ,主要有3个参数: 通信的目的 IP 地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是"插座"。通过将这3个参数结合起来,与一个"插座"Socket绑定,应用层就可以和传输 层通过 socket 接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。 Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。 Host A上的程序A将一段信息写入Socket中,Socket的内容被Host A的网络管理软件访问,并将这段信息通过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。 要通过互联网进行通信,至少需要一对 socket ,一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为serverSocket。 根据连接启动的方式以及本地 socket 要连接的目标, socket 之间的连接过程可以分为三个步骤: 服务器监听,客户端请求,连接确认。 服务器监听: 是服务器端 socket 并不定位具体的客户端 socket ,而是处于等待连接的状态,实时监控网络状态。 客户端请求: 是指由客户端的 socket 提出连接请求,要连接的目标是服务器端的 socket 。为此,客户端的 socket 必须首先描述它要连接的服务器的 socket ,指出服务器端 socket 的地址和端口号,然后就向服务器端 socket 提出连接请求。 连 接确认: 是指当服务器端 socket 监听到或者说接收到客户端 socket 的连接请求,它就响应客户端 socket 的请求,建立一个新的线程,把服务器端 socket 的描述发给客 户端,一旦客户端确认了此描述,连接就建立好了。而服务器端 socket 继续处于监听状态,继续接收其他客户端 socket 的连接请求。 ...

2013-11-17 · 2 min · 260 words · -

Netty

Netty version latest 4.1.68 current 4.1.22 Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo、Rocketmq、Hadoop等 Netty是由JBOSS提供的一个java开源框架. Netty提供异步的, 事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序. 也就是说,Netty 是一个基于NIO的客户,服务器端编程框架, 使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。 “快速"和"简单"并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。 netty uml @startuml interface ChannelHandlerContext interface ResourceLeakHint class NioEventLoop{ protected void run() private void processSelectedKeys() private void processSelectedKeysOptimized() private void processSelectedKey(SelectionKey k, AbstractNioChannel ch) } class AbstractNioByteChannel class NioByteUnsafe{ public final void read() } class DefaultChannelPipeline{ AbstractChannelHandlerContext head public final ChannelPipeline fireChannelRead(Object msg) } class HeadContext class AbstractChannelHandlerContext { AbstractChannelHandlerContext next AbstractChannelHandlerContext prev DefaultChannelPipeline pipeline ChannelHandlerContext fireChannelRead(final Object msg) AbstractChannelHandlerContext findContextInbound() void invokeChannelRead(final AbstractChannelHandlerContext next, Object msg) void invokeChannelRead(Object msg) boolean invokeHandler() } DefaultAttributeMap<|--AbstractChannelHandlerContext ChannelHandlerContext<|--AbstractChannelHandlerContext ResourceLeakHint<|--AbstractChannelHandlerContext DefaultChannelPipeline <|- AbstractChannelHandlerContext HeadContext <|- DefaultChannelPipeline class SimpleChannelInboundHandler { public void channelRead(ChannelHandlerContext ctx, Object msg) public void channelActive(ChannelHandlerContext ctx) } ChannelInboundHandlerAdapter<|--SimpleChannelInboundHandler class ServerBootstrap class AbstractBootstrap interface Cloneable Cloneable<|--AbstractBootstrap AbstractBootstrap<|--ServerBootstrap @enduml 时序图 @startuml SingleThreadEventExecutor -> NioEventLoop: run() NioEventLoop -> NioByteUnsafe: read() AbstractChannelHandlerContext -> AbstractChannelHandlerContext: ChannelHandlerContext fireChannelRead(final Object msg) AbstractChannelHandlerContext -> AbstractChannelHandlerContext: AbstractChannelHandlerContext findContextInbound(int mask) AbstractChannelHandlerContext -> AbstractChannelHandlerContext: invokeChannelRead(final AbstractChannelHandlerContext next, Object msg) AbstractChannelHandlerContext -> ChannelHandler: invokeChannelRead(Object msg) ChannelHandler --> Handler0: channelRead @enduml https://netty.io/4.1/api/io/netty/channel/ChannelPipeline.html ...

2013-11-17 · 2 min · 273 words · -

Java 强引用, 软引用, 弱引用, 虚引用

Java 强引用, 软引用, 弱引用, 虚引用 强引用 StrongReference 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 Object o=new Object(); // 强引用 如果不使用时,要通过如下方式来弱化引用,如下: o=null; // 帮助垃圾收集器回收此对象 显式地设置o为null,或超出对象的生命周期范围,则gc认为该对象不存在引用,这时就可以回收这个对象。具体什么时候收集这要取决于gc的算法。 在一个方法的内部有一个强引用,这个引用保存在栈中,而真正的引用内容 (Object) 保存在堆中。当这个方法运行完成后就会退出方法栈,则引用内容的引用不存在,这个Object会被回收。 但是如果这个o是全局的变量时,就需要在不用这个对象时赋值为null,因为强引用不会被垃圾回收。 强引用在实际中有非常重要的用处,举个ArrayList的实现源代码: private transient Object[] elementData; public void clear() { modCount++; // Let gc do its work for (int i = 0; i < size; i++) elementData[i] = null; size = 0; } 在ArrayList类中定义了一个私有的变量elementData数组,在调用方法清空数组时可以看到为每个数组内容赋值为null。不同于elementData=null,强引用仍然存在,避免在后续调用 add()等方法添加元素时进行重新的内存分配。使用如clear()方法中释放内存的方法对数组中存放的引用类型特别适用,这样就可以及时释放内存。 软引用 SoftReference 如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。 它兼有了StrongReference和WeakReference的好处,既能停留在内存中,又能在内存不足时去处理。 String str=new String(“abc”); // 强引用 SoftReference softRef=new SoftReference(str); // 软引用 ...

2013-11-17 · 1 min · 121 words · -

亚马逊土耳其机器人

亚马逊土耳其机器人 亚马逊土耳其机器人 (Amazon Mechanical Turk) 是一个Web服务应用程序接口 (API) ,开发商通过它可以将人的智能整合到远程过程调用 (RPC) 。亚马逊土耳其机器人利用人的网络来执行不适合计算机执行的任务。亚马逊调用那些计算机很难完成但"人工的人工智能"却能很容易执行的任务。执行人工智能任务 (HIT) 的人可能会被要求写产品描述,对移动语音搜索查询作出回应或选择某一主题的最佳照片等等。 下面是它的工作过程: 当用户提出一个要求,应用程序就会将这一请求发送到执行任务的人。人就会对此作出应答,然后服务器将回应传给请求者。土耳其工人的工资是按成功完成人工智能任务来计算的。亚马逊 (Amazon) 通过收取成功完成请求者人工智能任务的百分之十的价格来获利。 土耳其机器人 (Mechanical Turk) 这个名字是从18世纪的一个国际象棋游戏机器人得来的,这个机器人在欧洲参观并与名人比赛下象棋,其中包括拿破仑和本•富兰克林。每场演出之前,观众都可以检查土耳其机器人,以查看它的许多职能齿轮和杠杆。然而,和所有神奇的事物一样,土耳其机器人只是一种幻想。其实在机器人中有一个真人躲在一个秘密隔间中,是他在操纵机器人和玩象棋。 亚马逊 (Amazon) 选择土耳其机器人 (Mechanical Turk) 这个名字来命名他们的网络服务,是因为人类的智慧隐藏在最终用户,这样服务看起来就像是自动进行的。

2013-11-17 · 1 min · 26 words · -

java 循环/loop while,for,foreach

‘java 循环/loop while,for,foreach’ while( 布尔表达式 ) { //循环内容 } do { //代码语句 }while(布尔表达式); JAVA for循环执行顺序 及 i++和++i的区别 1.i与i++的区别是: ++i 是先执行 i=i+1 再使用 i 的值,而 i++ 是先使用 i 的值再执行 i=i+1。 2.但是如果不了解 for 循环的执行顺序则容易出错。 for循环的执行顺序如下: for(sta1;sta2;sta3) { sta4; } 1.进入循环执行sta1;//只是进入的时候执行. 2.执行sta2;//条件为真才执行sta4,不然就跳出for了. 3,执行sta4; 4,执行sta3; 5,再回到第2步开始执行 Java5新特征之foreach语句使用总结 foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。 foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。 foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为"foreach"语句。从英文字面意思理解foreach也就是"for 每一个"的意思。实际上也就是这个意思。 foreach的语句格式: for(元素类型t 元素变量x : 遍历对象obj){ 引用了x的java语句; } 下面通过两个例子简单例子看看foreach是如何简化编程的。代码如下: 一、foreach简化数组和集合的遍历 import java.util.Arrays; import java.util.List; import java.util.ArrayList; /** Created by IntelliJ IDEA. User: leizhimin Date: 2007-12-3 Time: 16:58:24 Java5新特征之foreach语句使用总结 */ public class TestArray { ...

2013-11-16 · 2 min · 350 words · -

centos8 kvm

centos8 kvm sudo yum update sudo yum install @virt After installation, verify that Kernel modules are loaded lsmod | grep kvm Also install useful tools for virtual machine management. sudo dnf -y install libvirt-devel virt-top libguestfs-tools virt-install osinfo-query os virt-install \ --name roy-dev \ --ram 2048 \ --vcpus 2 \ --network network:default \ --os-type=fedora34 \ --disk path=/home/roy/vm.qcow2,format=qcow2,bus=virtio,cache=none,size=16 \ --graphics none \ --location=https://mirrors.163.com/fedora/releases/34/Server/x86_64/os/ \ --extra-args="console=tty0 console=ttyS0,115200" https://computingforgeeks.com/how-to-install-kvm-on-rhel-8/ https://computingforgeeks.com/how-to-mount-vm-virtual-disk-on-kvm-hypervisor/ static ip if you did not set HostName, set it like follows [root@localhost ~]# hostnamectl set-hostname dlp.srv.world ...

2013-11-10 · 2 min · 268 words · -

网络地址转换 NAT,Network Address Translation

网络地址转换 NAT,Network Address Translation NAT 属接入广域网(WAN)技术, 是一种将私有(保留)地址转化为公有(合法)IP地址的转换技术, 它被广泛应用于各种类型Internet接入方式和各种类型的网络中。 原因很简单,NAT 不仅完美地解决了 IP 地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。 基本网络地址转换 (Basic NAT) 是一种将一组 I P地址映射到另一组 IP 地址的技术,这对终端用户来说是透明的。 网络地址端口转换 (NAPT) 是一种将群体网络地址及其对应 TCP/UDP 端口翻译成单个网络地址及其对应TCP/UDP端口的方法。 这两种操作,即传统 NAT 提供了一种机制,将只有私有地址的内部领域连接到有全球唯一注册地址的外部领域。 由于保密原因或 IP 在外网不合法,网络的内部 IP 地址无法在外部网络使用,就产生了 IP 地址转换的需求。局域网络以外的网络的拓扑结构能以多种方式改变: 公司更换供应商;重组公司主干网络或者供应商合并或散伙。一旦外部拓扑结构改变,本地网络的地址分配也必须改变以反映外部变化。通过将这些变化集中在单个地址转换路由器中,局域网用户并不需知道这些改变。基本地址转换允许主机从内部网络中透明地访问外部网络,并容许从外部访问选定的本地主机。对于一个机构其网络主要用于内部服务而仅有时用于外部访问, 这种配置是很适用的。 使用这种转换方法是有一定限制的,即会话的请求及响应的发送必须经过相同的 NAT路由器。在边界路由器上安装 NAT 能确保这一过程,边界路由器在该域中是唯一的,而所有经过的 IP 包要么来自于此域要么到达此域。此外还可使用多重 NAT 设备确保这一过程。 NAT 解决方法有其不足之处,仅以增强的网络状态作为补充,而忽略了 IP 地址端对端的重要性。结果是,由于存在 NAT 设备,由 IPSec 保证的端对端 IP 网络级安全无法应用到终端主机。此方法的优势是不需要改变主机或路由器就可以直接安装 NAT 。 转换方式 NAT的实现方式有三种,即静态转换 Static Nat、动态转换 Dynamic Nat和端口多路复用OverLoad。 静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。 动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。 端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。 相关实现 ...

2013-11-10 · 1 min · 206 words · -

vmpk

vmpk Virtual MIDI Piano Keyboard is a MIDI events generator and receiver. It doesn’t produce any sound by itself, but can be used to drive a MIDI synthesizer (either hardware or software, internal or external). You can use the computer’s keyboard to play MIDI notes, and also the mouse. You can use the Virtual MIDI Piano Keyboard to display the played MIDI notes from another instrument or MIDI file player. To do so, connect the other MIDI port to the input port of VMPK. (http://vmpk.sourceforge.net/) ...

2013-11-09 · 1 min · 99 words · -

DM, DE, WM

display manager(DM), 显示管理器, sddm, gdm3, lightdm DE(Desktop Environment) DE就是 KDE Gnome Xfce这类大而全的软件, 每个DE都包含了WM , kde 的wm 是kwin, gnome也有自己的wm, 除此之外, DE还包含了很多其他的配套软件, 而WM只是DE的子集.DE的优点在于用户友好, 桌面配套软件高度图形化, 符合很多从windows来的用户的使用习惯, 并且有丰富的特效. 但是DE的缺点很明显也很致命: 复杂 并且窗口操作效率和windows一样低下或者在经过用户设置后要稍微好一些. WM(window manager) sddm gdm - GNOME Display Manager kdm - KDE Display Manager xdm - X Display Manager 我们先不讨论xdm/gdm/kdm这些东西。而是先看看启动X最直接的方式。首先来认识两个重要的文件,一个是X视窗启动文件-xinitrc,另外一个就是X视窗资源文件-Xdefaults. X视窗启动文件-xinitrc 事实上,我们一般执行startx来启动X Window System,其中startx就是xinit的前端界面[front-end].倘若我们以startx或xinit启动X,这指令会启动X server并且会执行$HOME/.xinitrc文件内的所设置的指令。倘若 $HOME没有这个文件,则系统会使用内定的的配置文件/etc/X11/xinit/xinitrc。而事实上xinitrc文件一般只包含有启动X时所要执行clients的shell script,里面定义一些指令和shell script,让X启动时,可以遵照里面的shell script来启动必要的应用程序。 例如我的简单而又实用的的$HOME/.xinitrc的内容如下: LANG=zh_CN.GB2312 LC_ALL=zh_CN.GB2312 LC_CTYPE=zh_CN.GB2312 KDE_LANG=zh_CN.GB2312 export LANG LC_ALL LC_CTYPE KDE_LANG export XMODIFIERS=@im=Chinput /usr/bin/chinput & exec kde3 killall chinput 对于更为详细的 $HOME/.xinitrc,你可以找更专业的书籍来看,我的目标是越简单越好。前面的大家应该都比较清楚吧。先设一些环境变量,再设下一些输入法(我用的是智能五笔), 接下来是启动视窗管理程序kde3,注意了: kde3用shell script的exec描述所执行的,这造成执行xinit程序的shell会被执行kde3的shell所取代。所以一旦kde3程序结束,就会跳出 shell,相对地,xinit将会跟着结束,X Server将关闭。这正是 X Window Manager 执行的方式。必须确定在.xinitrc中最后执行的是指令是以exec为开头的的命令执行X Windows Manager,而且不应该加上&放在一些背景执行,不然,那些指令也毫无意义。后面的killall chinput是告诉要结束chinput,不然极有可能会因为chinput的原因,会造成一些问题。这是最为简单的桌面设置。倘若你还要启动更多的程序和设置,都可以在前面加的。只要你在你的$HOME/.xinitrc文件中稍加增加便可做到,但要记住加在X Window Manager执行段落之前。 ...

2013-11-08 · 3 min · 545 words · -

form表单target的用法

form表单target的用法 偶然有一机会发现form表单的target的用法,可以实现当前页表单提交而不进行跳转刷新。代码如下,首页在页面里准备一form表单和一iframe Java代码 <img alt="收藏代码" src="http://vsp.iteye.com/images/icon_star.png" /> <form action="提交的action" method="post" target="theID"> ..................... </form> 提交到action后,action返回一串javascript语句 Java代码 <img alt="收藏代码" src="http://vsp.iteye.com/images/icon_star.png" /> String script = "<script>alert('ok!');</script>"; response.getOutputStream().write(script.getBytes("utf-8")); alert(‘ok’)将在当前页执行。原理是form提交后的结果在target指定的iframe里执行 而iframe将其隐藏。这样提交后的效果就和无刷新的效果一样。 http://vsp.iteye.com/blog/1570466

2013-11-06 · 1 min · 27 words · -

Add ISO image to apt sources.list

Add ISO image to apt sources.list http://linuxconfig.org/add-iso-image-to-apt-sourceslist Here is a way how to include Debian/Ubuntu ISO image into your /etc/apt/sources.list file. This kind of hack can prove handy in terms of reducing package download during the installation or if you do not have CD/DVD drive available ( or is broken ) on your system. Let’s assume that we have a Debian ISO image downloaded at the location: /mnt/storage/iSO/debian-i386-DVD-1.iso. As a first step we need to create a mount point to where this ISO image will be mounted to: ...

2013-11-01 · 1 min · 170 words · -

结构化,半结构化和非结构化数据

结构化,半结构化和非结构化数据 相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等。 字段可根据需要扩充,即字段数目不定,可称为半结构化数据,例如Exchange存储的数据。 非结构化数据库 在信息社会,信息可以划分为两大类。一类信息能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号;而另一类信息无法用数字或统一的结构表示,如文本、图像、声音、网页等,我们称之为非结构化数据。结构化数据属于非结构化数据,是非结构化数据的特例。 随着网络技术的发展,特别是Internet和Intranet技术的飞快发展,使得非结构化数据的数量日趋增大。这时,主要用于管理结构化数据的关系 数据库的局限性暴露地越来越明显。因而,数据库技术相应地进入了"后关系数据库时代",发展进入基于网络应用的非结构化数据库时代。所谓非结构化数据库, 是指数据库的变长纪录由若干不可重复和可重复的字段组成,而每个字段又可由若干不可重复和可重复的子字段组成。简单地说,非结构化数据库就是字段可变的数 据库。 http://blog.csdn.net/wenqin2006/article/details/2368871

2013-10-26 · 1 min · 10 words · -

chrome 扩展/插件

chrome 扩展/插件 SwitchyOmega

2013-10-23 · 1 min · 3 words · -

TCP Keep-Alives

TCP Keep-Alives https://zhuanlan.zhihu.com/p/28894266 https://datatracker.ietf.org/doc/html/rfc1122#page-101 当客户端端等待超过一定时间后自动给服务端发送一个空的报文,如果对方回复了这个报文证明连接还存活着,如果对方没有报文返回且进行了多次尝试都是一样,那么就认为连接已经丢失,客户端就没必要继续保持连接了。如果没有这种机制就会有很多空闲的连接占用着系统资源。 KeepAlive并不是TCP协议规范的一部分,但在几乎所有的TCP/IP协议栈(不管是Linux还是Windows)中,都实现了KeepAlive功能。 如何设置它? 在设置之前我们先来看看KeepAlive都支持哪些设置项 KeepAlive默认情况下是关闭的,可以被上层应用开启和关闭 tcp_keepalive_time: KeepAlive的空闲时长,或者说每次正常发送心跳的周期,默认值为7200s(2小时) tcp_keepalive_intvl: KeepAlive探测包的发送间隔,默认值为75s tcp_keepalive_probes: 在tcp_keepalive_time之后,没有接收到对方确认,继续发送保活探测包次数,默认值为9(次) 在Linux内核设置 KeepAlive默认不是开启的,如果想使用KeepAlive,需要在你的应用中设置SO_KEEPALIVE才可以生效。 查看当前的配置: cat /proc/sys/net/ipv4/tcp_keepalive_time cat /proc/sys/net/ipv4/tcp_keepalive_intvl cat /proc/sys/net/ipv4/tcp_keepalive_probes 在Linux中我们可以通过修改 /etc/sysctl.conf 的全局配置: net.ipv4.tcp_keepalive_time=7200 net.ipv4.tcp_keepalive_intvl=75 net.ipv4.tcp_keepalive_probes=9 添加上面的配置后输入 sysctl -p 使其生效,你可以使用 sysctl -a | grep keepalive 命令来查看当前的默认配置 如果应用中已经设置SO_KEEPALIVE,程序不用重启,内核直接生效

2013-10-20 · 1 min · 41 words · -

JRE和JDK的区别

JRE和JDK的区别 JDK JDK 是整个Java的核心,包括了Java运行环境(JRE) (Java Runtime Envirnment), 一堆Java工具和Java基础的类库 (rt.jar) 。不论什么Java应用服务器实质都是内置了某个版本的JDK.最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM (Java Virtual Machine) 运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说,我们还是需要先把Sun JDK掌握好。 JDK一般有三种版本: SE (J2SE) ,standard edition,标准版,是我们通常用的一个版本EE (J2EE) ,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序,ME (J2ME) ,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序Java开发工具 (JDK) 是许多Java专家最初使用的开发环境。尽管许多编程人员已经使用第三方的开发工具,但JDK仍被当作Java开发的重要工具。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心Java API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。Java API包括一些重要的语言结构以及基本图形,网络和文件I/O.一般来说,Java API的非I/O部分对于运行Java的所有平台是相同的,而I/O部分则仅在通用Java环境中实现。 作为JDK实用程序, 工具库中有七种主要程序。 Javac, Java, appletviewer, Javadoc, Jdb, Javah, Javap; [[jdk-tool#jdk tool java tool jvm tool]] JRE JRE (Java Runtime Environment,Java运行环境) ,运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。是Sun的产品,包括两部分: JavaRuntimeEnvironment和JavaPlug-inJavaRuntimeEnvironment (JRE) 是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具——编译器、调试器和其它工具。JRE需要辅助软件 ——JavaPlug-in——以便在浏览器中运行applet.J2RE是Java2 Runtime Environment,即Java运行环境,有时简称JRE.如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发 Java软件,请下载JDK.在JDK中附带有JRE.注意由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行 Applet,务必安装一个JRE或JDK.

2013-10-20 · 1 min · 62 words · -