Android EditText得到和失去焦点时,自定义处理内容

Android EditText得到和失去焦点时,自定义处理内容 当android的Edittext得到/失去焦点时,需要自定义一些处理内容时,需要对EditText对象的Focus进行监听处理。 在Activity中,做以下处理: 1.取得EditText对象。 2.为取得的对象添加setOnFocusChangeListener(),重写里面的方法。 如下: EditText loginPwd = (EditText) findViewById(R.id.editText); editText.setOnFocusChangeListener(new android.view.View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(hasFocus) { // 此处为得到焦点时的处理内容 } else { // 此处为失去焦点时的处理内容 } } });

Servlet之间传递数据

转自:http://jallay.iteye.com/blog/256004 1:如何让用户的请求数据从一个Servlet传递给另一个Servlet 第一种方式:通过超链接传递数据 第二种方式:通过表传递取参数。 第三种方式:通过setAttribute("name",value)与getAttribute(name value)传递参数 1)通过超链接获得参数: 需要在超链接后面给定要传递参数的值。但长度有限制 Java代码 package testParameter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestA extends HttpServlet{ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out=response.getWriter(); String name="hello,everyone"; out.println("<html>"); out.println("<body>"); out.println("<a href='/JSP/test?id="+name+"'>this is a test</a>"); out.println("<body>"); out.println("</html>"); out.flush(); } } 通过request.getParameter("id")获得参数的值: Java代码 package testParameter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.

MDK软件中解决Error: L6218E: Undefined symbol main (referred from rtentry2.o)

自己在做《ARM处理器裸机开发实战——机制而非策略》一书的流水灯实验时,出现了以下错误: ledtest.axf: Error: L6218E: Undefined symbol main (referred from rtentry2.o) 错误提示为“main这个符号未定义”,网上查了一下原因,大多数是因为未加main.c文件于工程中或main单词拼写错误。然而,自己的程序并没有出现上述这两种情况,思考了一下,可能是因为《ARM处理器裸机开发实战——机制而非策略》这本书自定的启动代码是根据ADS1.2软件编写的(自定义的启动代码里定义了Main()),而自己现在的运行环境为MDK软件,应该需要的是main()函数。 如何解决呢? 在好友于维晓的指导下,在http://www.realview.com.cn/down-list.asp?id=544官网下载了基于S3C2440的NandFlash程序。 把其中的S3C2440A.s(该启动代码里定义了main()函数)复制到原工程中,删除了其它的启动代码,重新编译,通过!

epoll机制:epoll_create、epoll_ctl、epoll_wait、close

在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明: #define__FD_SETSIZE 1024 表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这个数目,但这似乎并不治本。 epoll的接口非常简单,一共就三个函数: 1.创建epoll句柄 int epfd = epoll_create(intsize); 创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大。这个参数不同于select()中的第一个参数,给出最大监听的fd+1的值。需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,是能够看到这个fd的,所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。 函数声明:int epoll_create(int size) 该 函数生成一个epoll专用的文件描述符。它其实是在内核申请一空间,用来存放你想关注的socket fd上是否发生以及发生了什么事件。size就是你在这个epoll fd上能关注的最大socket fd数。随你定好了。只要你有空间。可参见上面与select之不同 2.将被监听的描述符添加到epoll句柄或从epool句柄中删除或者对监听事件进行修改。 函数声明:int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 该函数用于控制某个epoll文件描述符上的事件,可以注册事件,修改事件,删除事件。 参数: epfd:由 epoll_create 生成的epoll专用的文件描述符; op:要进行的操作例如注册事件,可能的取值EPOLL_CTL_ADD 注册、EPOLL_CTL_MOD 修 改、EPOLL_CTL_DEL 删除 fd:关联的文件描述符; event:指向epoll_event的指针; 如果调用成功返回0,不成功返回-1 int epoll_ctl(int epfd, intop, int fd, struct epoll_event*event); epoll的事件注册函数,它不同与select()是在监听事件时告诉内核要监听什么类型的事件,而是在这里先注册要监听的事件类型。 第一个参数是epoll_create()的返回值 , 第二个参数表示动作,用三个宏来表示 : EPOLL_CTL_ADD: 注册新的fd到epfd中; EPOLL_CTL_MOD: 修改已经注册的fd的监听事件; EPOLL_CTL_DEL: 从epfd中删除一个fd; 第三个参数 是需要监听的fd , 第四个参数 是告诉内核需要监听什么事件 ,structepoll_event结构如下: typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t; struct epoll_event { __uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ }; events可以是以下几个宏的集合:

java向字符串数组中动态添加字符串

在向字符串数组中动态添加字符串中遇到了错误。 我已开始是这样做的 String [] result; int n=5; for(int i=0;i<n;i++) { result[i]=String.valueOf(i); }; 最后发现这样确实是有错的。修改成 int n=5; String [] result=new String[n]; for(int i=0;i<n;i++) { result[i]=String.valueOf(i); }; 就没有问题了

linux 挂载错误解决mount: cannot mount block device

[root@centos5 ~]# iptables -F INPUT [root@centos5 ~]# iptables -F OUTPUT [root@centos5 ~]# setenforce 0 [root@centos5 ~]# mount -t cifs //192.168.1.119/sharefile /var -o username=user%123 mount: block device //192.168.1.119/sharefile is write-protected, mounting read-only mount: cannot mount block device //192.168.1.119/sharefile read-only [root@centos5 ~]# mount.cifs //192.168.1.119/sharefile /var -o username=user%123 -bash: mount.cifs: command not found 解决: [root@centos5 ~]# yum -y install cifs* [root@centos5 ~]# mount -t cifs //192.168.1.119/sharefile /var -o username=user%123 搞定

Android 系统时间设置

一、自动确定时间 /** * Get if the user prefers the date, time and timezone to be automatically fetched from the network * @param context Context * @return ture=yes, false=no */ public static boolean getTimeSettingAuto(Context context) { //Settings.System.AUTO_TIME was deprecated in API level 17. //Use Settings.Global.AUTO_TIME instead. int state = Settings.System.getInt(context.getContentResolver(), Settings.System.AUTO_TIME, 1); return (state == 1) ? true : false; } public static void setTimeSettingAuto(Context context, boolean isAuto) { Settings.System.putInt(context.getContentResolver(), Settings.

让WTL支持CString和CRect,CPoint等类

// 在Stdafx.h 中加入下面四句,像这个样子 #define _WTL_NO_CSTRING #define _WTL_NO_WTYPES #include <atlstr.h> #include <atltypes.h> #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h>

windows 7 多国语言包官方下载资源共享(32/64位)

Download Official 32-bit (x86) Windows 7 SP1 MUI Language Packs Arabic / 阿拉伯语: windows6.1-kb2483139-x86-ar-sa_5add6e4a36127029d431ba98d99708c44ef9b53f.exe Bulgarian / 保加利亚语: windows6.1-kb2483139-x86-bg-bg_a8a5013e477366119cfdc5fbda43b904755db450.exe Chinese (Simplified) / 简体中文: windows6.1-kb2483139-x86-zh-cn_ae61ea226215f96fc95be33201ffc96755ac7eb5.exe Chinese (Traditional) / 繁体中文: windows6.1-kb2483139-x86-zh-hk_411a6bb68728f12f5ced712d9a33fee9ebe0b0b3.exe Croatian / 克罗地亚语: windows6.1-kb2483139-x86-hr-hr_685e217ce007af8005db4726087893d04e19dade.exe Czech / 捷克语: windows6.1-kb2483139-x86-cs-cz_bb5061f4bd24437dd31a3714e1b54318ced7e63a.exe Danish / 丹麦语: windows6.1-kb2483139-x86-da-dk_67fecaab0a940e2e537bc8dcd8a9ebb8ab4ed102.exe Dutch / 荷兰语: windows6.1-kb2483139-x86-nl-nl_b7e1c3046b218fb45a665ab5f5ed8a5ea8125760.exe English / 英语: windows6.1-kb2483139-x86-en-us_783d6dd59e2ec8fb0995a059c9c121795bde46c8.exe Estonian / 爱沙尼亚语: windows6.1-kb2483139-x86-et-ee_d0f798de315b696bf560b559f6f90064687c0b7b.exe Finnish / 芬兰语: windows6.1-kb2483139-x86-fi-fi_5259ca6a22a981dbdee352dde5b8e65c2fddd407.exe French / 法语: windows6.1-kb2483139-x86-fr-fr_f57427487dfc2f49da67cac22480ab1f48983d22.exe German / 德语: windows6.1-kb2483139-x86-de-de_acb9b88b96d432749ab63bd93423af054d23bf81.exe Greek / 希腊语: windows6.1-kb2483139-x86-el-gr_5aeecda7e1d689a083975128901da8156751dfc5.exe Hebrew / 希伯来语:

80C51 单片机 继电器控制灯的亮灭

#include<reg52.h> #include<intrins.h> sbit light=P2^4; //将light设置为P2的第4位,该IO口连接继电器。 #define uchar unsigned char #define uint unsigned int void delay(uint ms); void main() { while(1) { light=0; //灯灭 delay(200); light=1; //灯亮 delay(300); } } void delay(uint ms) //延时函数 { uint i,j; for(i=ms;i>0;i--) for(j=200;j>0;j--); } 此时,proteus中的仿真图如下: 下面是继电器处的放大图:

jQuery UI的日期时间控件(年月日时分秒)

jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用它来构建具有很好交互性的web应用程序。所有插件测试能兼容:IE 6.0+, Firefox 3+, Safari 3.1+, Opera 9.6+, 和 Google Chrome。 其中日期时间控件的外观很漂亮,但是需要导入几个jquery的包才行,在IE6中运行稍微有些慢 view source print ? 01<!-- import package --> 02<script type="text/javascript" src="JS/jquery.js"></script> 03<script type="text/javascript" src="JS/jquery-ui-1.7.3/ui/jquery-ui-1.7.3.custom.js"></script> 04<script type="text/javascript" src="JS/jquery-ui-1.7.3/ui/ui.datepicker.js"></script> 05<script type="text/javascript" src="JS/jquery-ui-timepicker-addon.js"></script> 06<link type="text/css" href="CSS/jquery-ui-1.7.3/redmond/jquery-ui-1.7.3.custom.css" rel="stylesheet" /> 07 08<script type="text/javascript"> 09 $('#dyStartDateTime').datetimepicker({ 10 showSecond: true, 11 changeMonth: true, 12 changeYear: true, 13 timeFormat: 'hh:mm:ss', 14 dateFormat: 'yy-mm-dd' 15 }); 16 $('#dyEndDateTime').datetimepicker({ 17 showSecond: true, 18 changeMonth: true, 19 changeYear: true, 20 timeFormat: 'hh:mm:ss', 21 dateFormat: 'yy-mm-dd' 22 }); 23</script>

解决Source Insight自动缩进及TAB键扩展为4个空格问题

1. SMART TAB的用法. 解决自动缩进. 新开一个PROJECT后,点Options->Document Options,弹出对话框后先在左上角选好要用的Document Type,主要就是设C Source File和C++ Source File,选好后点右边中间的Auto Indent调整缩进。单选里一定要点Smart,右边有两个复选框Indent Open Brace和Indent Close Brace,具体效果是如何的可以看SIS的HELP。 勾选Auto Indent和SMART的效果:在C程序里, 如果遇到行末没有分号的语句,如IF, WHILE, SWITCH等, 写到该行末按回车,则新行自动相对上一行缩进四列。 勾掉indent Open Brace和Indent Close Brace的效果:继上一段,在相对缩进行里, 如果输入"{"或"}", 则自动和上一行列对齐。 2. TAB键=4个SPACE 写代码时候很头痛的问题是在SIS界面里,即使设置好了Tab Width=4,按四个空格所显示的缩进,和按TAB键的缩进位置是不同的,后者要更靠里面三个字符的位置,但在左下角看到的Col=5都是一样的。这样 的代码在SIS里看了不对齐,到PB里看了却是对齐的。而SIS里面看着对其的代码,在PB里面会差三格。现在发现Options-> Document Options里面的右下角Editing Options栏里,把Expand tabs勾起来,然后确定。OK,现在TAB键的缩进和四个空格的缩进在SIS里面看起来就对齐咯!

mysql 日期比较及日期函数用法

原文地址:http://www.111cn.net/database/mysql/46892.html 假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2013-01-12' 对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这是你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理: 代码如下 select * from product where Date(add_time) = '2013-01-12' 再来一个,如果你要查询2013年1月份加入的产品呢? 代码如下 select * from product where date(add_time) between '2013-01-01' and '2013-01-31' 你还可以这样写: select * from product where Year(add_time) = 2013 and Month(add_time) = 1 这些你该知道mysql日期函数在对你处理日期比较问题的作用了吧? 其date_col的值是在最后30天以内: 代码如下 mysql> SELECT something FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30; DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。 代码如下 mysql> select DAYOFWEEK('1998-02-03'); -> 3 WEEKDAY(date) 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

经常遇到Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be e

遇到问题描述: 运行android程序控制台输出 [2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error has occured. [2012-07-18 16:18:26 - ] You must restart adb and Eclipse. [2012-07-18 16:18:26 - ] Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be executed. 解决问题: 百度google大家多说的是任务管理器 kill掉adb 或者重启adb server,但我任务管理器就没有adb ,猜测是某个程序占用了adb端口。于是按此思路查找。 5037为adb默认端口 查看该端口情况如下: netstat -aon|findstr "5037" TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 6540 发现6540占用了 5037端口,继续查看6540的task,发现是wandoujia .如下所示 tasklist|findstr "6540" wandoujia_daemon.exe 6540 Console 1 4,276 K

所有人围成一个圈,数到3的人就退出,问最后留下的那个人的位置在那里

约瑟夫环问题-所有人围成一个圈,数到3的人就退出,问最后留下的那个人的位置在那里? 第一种方法 public class Count3Quit{ public static void main(String []args){ //定义一个数组用来当做500个人.并且初始化为true表示都在圈内 boolean arr[] =new boolean[500]; for(int i=0; i<arr.length; i++){ arr[i]=true; } //定义一个总人数 int count=arr.length; //定义一个索引位置,表示当前在那个位置 int index=0; //计数器,数到3退出 int countNum=0; //如果只剩下最后一个人就退出循环 while(count>1){ if(arr[index]==true){ //如果当前的这个人在圈内就开始数数 countNum++; if(countNum==3){ countNum=0; // 如果数到3了就要把计数器归0 arr[index]=false; //表示这个人已经退出 count--; //总人数减去一个 } } index++; if(index==arr.length){ index=0; } } //找到最后一个在圈子内的人的下标位置 for(int i=0 ;i<arr.length; i++){ if(arr[i]==true){ System.out.println("最后剩下的一个人在第"+(i+1)+"个位置"); } } } } 第二种方法(面向对象的思想) public class Count3Quit2 { public static void main(String[] args) {

Allegro 强制刷新铜皮 skill 添加方法

Allegro的菜单并不是固定不变的,用户可以自己添加、删除命令或者是更换顺序。 在D:\Cadence\SPB_16.5\share\pcb\text\cuimenus 目录下 找到allegro.men文件 编辑: 在 POPUP "&Shape" BEGIN 下方添加一句:MENUITEM "Refresh All Shapes", "skill axlShapeDynamicUpdate( nil t )" 保存即成功。

人体姿态估计(human pose estimate)

人体姿态估计后,可以做很多有意思的应用。 网上找到的了一些据2D图片估计姿态的一些算法,很好玩 Demo http://www.vision.ee.ethz.ch/~hpedemo/

Linux内核模块编程入门——Hello World

在学习C/C++语言,入门的程序都是输出hello world,那么学习内核模块编程,也从输出Hello World开始。 首先,从最简单模块开始。 1)编写程序hello-1.c #include <linux/module.h> #include <linux/kernel.h> int init_module(void) { printk(KERN_INFO "Hello World 1.\n"); return 0; } void cleanup_module(void) { printk(KERN_INFO "Goodbye world 1.\n"); } 内核模块必须至少有两个函数:一个“开始”(初始化)函数——称之为init_module(),当模块加载(insmod)到内核时,将调用该函数;一个“结束”(清理)函数——称之为cleanup_module(),当卸载模块(rmmod)时将调用该函数。 然而,从内核2.3.13开始,已经对这种情况进行了改进,可以使用任何函数名作为模块的初始化函数和清理函数,接下来再讲解。 一般地,init_module()要么在kernel中注册一个处理程序,要么用它自己的代码取代内核中的代码。 cleanup_module()函数所做的工作与init_module()的相反。这样以使模块可以安全的卸载。 最后,每个内核模块需要包含linux/module.h,我们也需要包含linux/kernel.h,该宏仅仅用于printk()的log等级的宏扩展,像KERN_ALERT,KERN_INFO等。 2)编写Makefile obj-m += hello-1.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 内核模块的编译方式和常规的用户应用程序有一点不同,前者,内核版本需要我们更多的关注存在在Makefiles中的设置,尽管分层的组织使很多的冗余设置累积在底层的Makefile中,以使Makefile变得很大,而且很难维护,幸运的是,有一种成为kbuild的东西解决了这问题,它可以让外部加载模块的构建过程可以完整的整合到标准内核构建机制中,学习更多关于如何编译不是官方内核的模块,可以参考文件/linux/Documentation/kbuild/modules.txt。 对于上面的Makefile中的内容,只有第一行是必须的,“all”和“clean”目标的加入纯粹是为了方便。 更多的关于内核模块的Makefiles细节见linux/Documentation/kbuild/makefiles.txt。在开始编写Makefile之前阅读一下该文件以及相关的文件,将会节省大量的工作。 3)编译&加载 首先,编译,如下图: 注意到内核2.6之后引入了一种新的文件命名规定:内核模块现在有了一个.ko扩展名(取代了老版的.o扩展名),容易与传统的目标文件区分开来,原因是包含附加的.modinfo部分(附加的关于模块的信息)。 使用modinfo hello-1.ko来查看模块的信息,如下图: 加载最新编译的模块到内核中,使用如下的命令: insmod ./hello-1.ko 所有加载到内核的模块在/proc/modules文件中列出,如下图: 4)模块卸载 使用命令: rmmod hello-1 查看/var/log/syslog,查看系统日志文件。如下:

Ajax之包含的技术

AJAX:(Asynchronous JavaScript and XML) 并不是一项 新技术 ,其实是多种技术的综合,包括Javascript、XHTML和CSS、DOM、XML和XMLHttpRequest. • 服务器端语言:服务器需要具备向浏览器发送特定信息的能力。 Ajax与服务器端语言无关。 • XML (eXtensible Markup Language,可扩展标记语言) 是一种描述数据的格式。 AJAX 程序需要某种格式化的格式来在服务器和客户端之间传递信息,XML 是其中的一种选择 • XHTML(eXtended Hypertext Markup Language,使用扩展超媒体标记语言)和 CSS(Cascading Style Sheet,级联样式单) 标准化呈现; • DOM(Document Object Model,文档对象模型) 实现动态显示和交互; •使用XMLHTTP组件 XMLHttpRequest对象进行 异步数据读取 •使用 JavaScript绑定和处理所有数据

【数据结构】之二叉树的java实现

二叉树的定义: 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。 这个定义是递归的。由于左、右子树也是二叉树, 因此子树也可为空树。下图中展现了五种不同基本形态的二叉树。 其中 (a) 为空树, (b) 为仅有一个结点的二叉树, (c) 是仅有左子树而右子树为空的二叉树, (d) 是仅有右子树而左子树为空的二叉树, (e) 是左、右子树均非空的二叉树。这里应特别注意的是,二叉树的左子树和右子树是严格区分并且不能随意颠倒的,图 (c) 与图 (d) 就是两棵不同的二叉树。 二叉树的遍历 对于二叉树来讲最主要、最基本的运算是遍历。 遍历二叉树 是指以一定的次序访问二叉树中的每个结点。所谓 访问结点 是指对结点进行各种操作的简称。例如,查询结点数据域的内容,或输出它的值,或找出结点位置,或是执行对结点的其他操作。遍历二叉树的过程实质是把二叉树的结点进行线性排列的过程。假设遍历二叉树时访问结点的操作就是输出结点数据域的值,那么遍历的结果得到一个线性序列。 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作: (1)访问结点本身(N), (2)遍历该结点的左子树(L), (3)遍历该结点的右子树(R)。 以上三种操作有六种执行次序: NLR、LNR、LRN、NRL、RNL、RLN。 注意: 前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。 由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtlee)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。 二叉树的java实现 首先创建一棵二叉树如下图,然后对这颗二叉树进行遍历操作(遍历操作的实现分为递归实现和非递归实现),同时还提供一些方法如获取双亲结点、获取左孩子、右孩子等。 java实现代码: package study_02.datastructure.tree; import java.util.Stack; /** * 二叉树的链式存储 * @author WWX */ public class BinaryTree { private TreeNode root=null; public BinaryTree(){ root=new TreeNode(1,"rootNode(A)"); } /** * 创建一棵二叉树 * <pre> * A * B C * D E F * </pre> * @param root * @author WWX */ public void createBinTree(TreeNode root){ TreeNode newNodeB = new TreeNode(2,"

excel vba真正的动态数组实例-按需定义数组大小

excel vba真正的动态数组实例 一、动态数组的定义 动态数组的定义,一开始不需要给数组标明上界和下界。直接定义即可,如下面的代码: Dim MyStr() As String 这样,就定义了一个动态数组及其名称:MyStr(),现在,该数组的上界下界都是个未知数,也就是说,数组中到底有没有内容或到底有什么内容,是个未知数。 因此,要使用动态数组,就必须对其定义好下界和上界。 二、给动态数组确定下界和上界 给动态数组重新确定下界和上界,那么,分两种情况。 ①保留原值 采用此代码:ReDim Preserve MyStr(n) 'n为数组长度 ②不保留原值 采用此代码:ReDim MyStr(n) 'n为数组长度 ③以上两种情况的实例 下面我们看如上两种情况的小实例: 比如: Dim MyStr() As String ReDim MyStr(2) MyStr(0)=”1” MyStr(1)=”2” 现在,这个动态数组有两个值了,分别是0和1,现在,我们再重新确定该数组的长度。 当然,重新确定自然又有两种情况了。 A、保留原有数据 ReDim Preserve MyStr(3) '原来长度是2,现在重新确定为3,并且,保留原有的数据。 MyStr(2)=”3” '现在,该数组就有三个值了,分别是: MyStr(0)为1、MyStr(1)为2、MyStr(2)为3 B、不保留原有数据 如果我们使用如下代码 ReDim MyStr(3) MyStr(2)=”3” 现在,该数组的长度尽管为3,但是,里面却只有一个数据了,那就是,MyStr(2)的值是3,而MyStr(0)和MyStr(1)里面,什么都没有。 关键字:Preserve的作用就的保留原有值,请根据需要加以取舍。 三、动态数组与EXCEL的结合使用实例 Dim n As Integer n = 0 Dim MyStr() As String For i = 1 To Sheet1.UsedRange.Rows.Count For j = 1 To Sheet1.

MySQL-5.6.13免安装版配置方法

1. 下载MySQL Community Server 5.6.13 2. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是: "D:\Program Files\MySQL\mysql-5.6.13-win32" 将解压目录下默认文件 my-default.ini 拷贝一份,改名 my.ini 复制下面的配置信息到 my.ini 保存 #如果没有my-default.ini,可自己新建my.ini或者从其他地方中获取 ######################################################### [client] port=3306 default-character-set=utf8 [mysqld] port=3306 character_set_server=utf8 basedir=D:\Program Files\MySQL\mysql-5.6.13-win32 #解压目录 datadir=D:\Program Files\MySQL\mysql-5.6.13-win32\data #解压目录下data目录 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [WinMySQLAdmin] D:\Program Files\MySQL\mysql-5.6.13-win32\bin\mysqld.exe ######################################################### 3. 添加环境变量 操作如下: 1)右键单击我的电脑->属性->高级系统设置(高级)->环境变量 点击系统变量下的新建按钮 输入变量名:MYSQL_HOME 输入变量值:D:\Program Files\mysql-5.6.11-winx64 #即为mysql的自定义解压目录。 2)选择系统变量中的Path 点击编辑按钮 在变量值中添加变量值:%MYSQL_HOME%\bin 注意是在原有变量值后面加上这个变量,用;隔开,不能删除原来的变量值, 4. 将mysql注册为windows系统服务 1)从控制台进入到MySQL解压目录下的 bin 目录下: 2)输入服务安装命令: mysqld install MySQL --defaults-file="D:\Program Files\MySQL\mysql-5.6.13-win32\my.ini" #解压目录下修改的my.ini文件 安装成功后会提示服务安装成功。 #注:my.ini文件放在MySQL解压后的根目录下 #移除服务命令为:mysqld remove 5. 启动MySQL服务 方法一: 启动服务命令为:net start mysql 方法二: 打开管理工具 服务,找到MySQL服务。 通过右键选择启动或者直接点击左边的启动来启动服务。 6.

http://blog.sina.com.cn/s/blog_3fe961ae01012tid.html

2xx 成功 200 正常;请求已完成。 201 正常;紧接 POST 命令。 202 正常;已接受用于处理,但处理尚未完成。 203 正常;部分信息 — 返回的信息只是一部分。 204 正常;无响应 — 已接收请求,但不存在要回送的信息。 3xx 重定向 301 已移动 — 请求的数据具有新的位置且更改是永久的。 302 已找到 — 请求的数据临时具有不同 URI。 303 请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。 304 未修改 — 未按预期修改文档。 305 使用代理 — 必须通过位置字段中提供的代理来访问请求的资源。 306 未使用 — 不再使用;保留此代码以便将来使用。 4xx 客户机中出现的错误 400 错误请求 — 请求中有语法问题,或不能满足请求。 401 未授权 — 未授权客户机访问数据。 402 需要付款 — 表示计费系统已有效。 403 禁止 — 即使有授权也不需要访问。 404 找不到 — 服务器找不到给定的资源;文档不存在。

Setup Factory操作注册表

Setup Factory是一款非常好用的打包软件,其操作注册表也是非常简单的。 1.在注册表中创建“键”(Registry.CreateKey) Registry.CreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\JMElectVersion"); 2.判断是否存在指定的注册表键,返回true 或 false(Registry.DoesKeyExist) local IsJMElectVersion = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, "SOFTWARE\\JMElectVersion"); 3.返回指定注册表值的数据(Registry.GetValue) local JEtInstallPath = Registry.GetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\JMElectVersion", "JMElectInstallPath",true); if(JEtInstallPath ~= "")then --判断键值是否存在 --说明该键值存在 end 4.返回包含给定的会话变量的内容的字符串(SessionVar.Expand) local JMElectProductName = SessionVar.Expand ("%ProductName%"); 5.添加 (或连接) 两个字符串,并返回结果为一个新字符串(String.Concat) String.Concat("检测到已安装该软件",",如果重装则不能改变安装目录。若要改变目录,请先卸载后再安装。确定要重装吗?"); 6.显示带有消息信息的对话框(Dialog.Message) Qid = Dialog.Message(JMElectProductName, String.Concat("检测到已安装该软件",",如果重装则不能改变安装目录。若要改变目录,请先卸载后再安装。确定要重装吗?"), MB_OKCANCEL, MB_ICONQUESTION, MB_DEFBUTTON1); if(Qid == IDCANCEL) then -- Qid为全局变量,其他窗体可用,变量名不能包含在内部定义的名称,见后面说明。 Application.Exit(); else //进行操作 local resultAppFolder = Registry.GetValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\JMElectVersion", "JMElectInstallPath", true); -- 获取原来的安装目录,如果不设此项,则可从卸载键里分解。 SessionVar.Set("%AppFolder%", resultAppFolder); -- 将安装目录设置成原来的安装目录 end end 7.运行可执行文件(File.Run)

时间精确到us

LARGE_INTEGER litmp; LONGLONG QPart1, QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp);// 获得计数器的时钟频率 dfFreq = (double)litmp.QuadPart; QueryPerformanceCounter(&litmp); // 获得初始值 QPart1 = litmp.QuadPart; for (int i = 0; i < nSize; i++) { pThis->m_pszBuffer[nHeadSize + i] = ulaw2alaw(pszBuf[i]); } QueryPerformanceCounter(&litmp); // 获得终止值 QPart2 = litmp.QuadPart; dfMinus = (double)(QPart2 - QPart1); dfTim = (dfMinus / dfFreq) * 1E6; ::RunLogFile("音频数据大小:%d,转码耗时:%.0lf us", nSize, dfTim);

AIX DNS服务器配置

实验环境: AIX: os版本:AIX 5L for POWER V5.1 IP address:192.168.0.5 假设域名:king.com 主机名:pp.king.com 作为一个域名服务器,要具有正解和反解的功能才叫一个完整的服务器。现在有很多,尤其是win的DNS服务器很多都没有反解的功能。 现在进入正题 架设一部完整的DNS服务器主要需要设定6个文件: named.conf #主要的设定文件 named.ca # 本机端的正解文件 本机端的反解文件 domain name的正解文件 domain name的反解文件 一台AIX V5.1安装完成后,就已经安装好了DNS软件bind,并已经启动。 可以用这个命令去查看: # l***c -s named Subsystem Group PID Status named tcpip 15666 active 默认会安装两个版本,bind4和bind8,当然现在的最新版本已经有bind9,可是我们用自带的bind8就可以了。 初始的时候系统会默认使用bind4,那么我们现在执行以下命令开始使用bind8: # rm /usr/sbin/named /usr/sbin/named-xfer ln -s /usr/sbin/named8 /usr/sbin/named ln -s /usr/sbin/named8-xfer /usr/sbin/named-xfer 检查: # named -v named 8.2.2-P5+Fix_for_CERT_till_01_30_01 Sun Apr 8 08:05:23 CDT 2001 build@builder07.austin.ibm.com:/…/austin.ibm.com/fs/proj/p1/aix/aix510 /com4/CMVC/obj/power/tcpip/usr/sbin/named8 现在我们来编写配置文件。(配置方法与Solaris的配置方法一样) 1、首先是最主要的设置文件,其他的文件全靠它定义,才能生效。

activiti创建数据库表

方法一:直接执行activiti-engine-x.jar 中 /org/activiti/db/create下的DDL语句脚本 方法二: 把activiti-engine的jar放到classpath下 添加对应的数据库驱动 把Activiti配置文件 (activiti.cfg.xml) 放到 classpath下, 指向你的数据库(参考数据库配置章节) 执行 DbSchemaCreate 类的main方法 例如: ProcessEngineConfiguration .createProcessEngineConfigurationFromResourceDefault() .setDatabaseSchemaUpdate(ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE) .setJdbcUrl("jdbc:h2:tcp://localhost/activiti") --执行数据库 .buildProcessEngine();

ios 使用webview播放视频需注意

videoWeb是个webView #pragma mark UITableViewDelegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ videoWeb = [[UIWebView alloc] initWithFrame:CGRectMake(10,0,3,2)]; videoWeb.hidden =NO; videoWeb.delegate =self; [self.view addSubview:videoWeb]; excellentModel.urlArr 里面是视频的url数组 NSURL *url = [NSURL URLWithString:[excellentModel.urlArr objectAtIndex:indexPath.row]];//创建URL NSURLRequest* request = [NSURLRequest requestWithURL:url]; [videoWeb loadRequest:request]; } #pragma mark UIWebDelegate - (void)webViewDidFinishLoad:(UIWebView *)webView{ videoWeb =nil; }

windows server backup 作业执行失败后的恢复

当Windows server backup执行作业失败,想要停止比较麻烦,点击取消备份进度条无限循环中…… 执行命令wbadmin stop job也是永远等待的状态。 可以通过停止Block Level backup engine service来解决。 重新启动此服务后,不用重新启动服务器,就可以重新来配置失败的作业了。 小技巧分享给大家~~ 转载于:https://blog.51cto.com/wang11/1298653

【send/sendto/sendmsg系统调用】

功能描述: 发送消息。send只可用于基于连接的套接字,send 和 write唯一的不同点是标志的存在,当标志为0时,send等同于write。sendto 和 sendmsg既可用于无连接的套接字,也可用于基于连接的套接字。除了套接字设置为非阻塞模式,调用将会阻塞直到数据被发送完。 用法: #include <sys/types.h> #include <sys/socket.h> ssize_t send(int sock, const void *buf, size_t len, int flags); ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); ssize_t sendmsg(int sock, const struct msghdr *msg, int flags); 参数: sock:索引将要从其发送数据的套接字。 buf:指向将要发送数据的缓冲区。 len:以上缓冲区的长度。 flags:是以下零个或者多个标志的组合体,可通过or操作连在一起 MSG_DONTROUTE:不要使用网关来发送封包,只发送到直接联网的主机。这个标志主要用于诊断或者路由程序。 MSG_DONTWAIT:操作不会被阻塞。 MSG_EOR:终止一个记录。 MSG_MORE:调用者有更多的数据需要发送。 MSG_NOSIGNAL:当另一端终止连接时,请求在基于流的错误套接字上不要发送SIGPIPE信号。 MSG_OOB:发送out-of-band数据(需要优先处理的数据),同时现行协议必须支持此种操作。

android APK应用安装过程以及默认安装路径

一:安装过程 APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。 Android应用安装有如下四种方式 1. 系统应用安装――开机时完成,没有安装界面 2. 网络下载应用安装――通过market应用完成,没有安装界面 3. ADB工具安装――没有安装界面。 4. 第三方应用安装――通过SD卡里的APK文件安装,有安装界面,由packageinstaller.apk应用处理安装及卸载过程的界面。 应用安装的流程及路径 应用安装涉及到如下几个目录: system/app 系统自带的应用程序,无法删除 data/app 用户程序安装的目录,有删除权限。 安装时把apk文件复制到此目录 data/data 存放应用程序的数据 Data/dalvik-cache 将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一) 安装过程:复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。 卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。 一、系统应用安装: PackageManagerService处理各种应用的安装,卸载,管理等工作,开机时由systemServer启动此服务 (源文件路径:android\frameworks\base\services\java\com\android\server\PackageManagerService.java) PackageManagerService服务启动的流程: 1. 首先扫描安装“system\framework”目录下的jar包 1. scanDirLI(mFrameworkDir,PackageParser.PARSE_IS_SYSTEM, scanMode | SCAN_NO_DEX); 2.第二步扫描安装“system\app”目录下的各个系统应用 scanDirLI(mSystemAppDir,PackageParser.PARSE_IS_SYSTEM, scanMode); 3.第三步扫描“data\app”目录,即用户安装的第三方应用 scanDirLI(mAppInstallDir, 0, scanMode); 4.第四步扫描" data\app-private"目录,即安装DRM保护的APK文件(目前没有遇到过此类的应用)。 scanDirLI(mDrmAppPrivateInstallDir,0, scanMode | SCAN_FORWARD_LOCKED); 安装应用的过程 1.scanDirLI(Filedir, int flags, int scanMode) 遍历安装指定目录下的文件 2.scanPackageLI(FilescanFile, File destCodeFile, FiledestResourceFile, int parseFlags, int scanMode) 安装package文件 3.scanPackageLI( File scanFile, File destCodeFile, FiledestResourceFile, PackageParser.

VBScript中Msgbox函数的用法

MsgBox(prompt[, buttons][, title][, helpfile, context]) [用途]:弹出对话框,并获取用户的操作结果。 [参数说明]: propmt:对话框中展示的文本内容。 buttons:对话框中的按钮组合、默认按钮以及提示图标式样,可选项。 title:对话框的标题,可选项。 helpfile:帮助文件,该选项必须与"context"成对出现,可选项。当启用时,对话框中会多出一个“帮助”按钮。 context:上面给出的帮助主题的上下文编号,必须与"helpfile"成对出现,可选项。 其中,"buttons"的值略微复杂因为它的值包含了三重含义: 第一重含义,定义按钮组合: 内容 值 描述 vbOKOnly 0 只显示确定按钮。 (默认) vbOKCancel 1 显示确定和取消按钮。 vbAbortRetryIgnore 2 显示终止、重试和忽略按钮。 vbYesNoCancel 3 显示是、否和取消按钮。 vbYesNo 4 显示是和否按钮。 vbRetryCancel 5 显示重试和取消按钮。 ==================================== 第二重含义,定义提示图标样式: 内容 值 描述 vbCritical 16 显示临界消息图标。 vbQuestion 32 显示警告询问图标。 vbExclamation 48 显示警告消息图标。 vbInformation 64 显示提示消息图标。 ==================================== 第三重含义,定义默认按钮: 内容 值 描述 vbDefaultButton1 0 第一个按钮是默认按钮。(默认) vbDefaultButton2 256 第二个按钮是默认按钮。 vbDefaultButton3 512 第三个按钮是默认按钮。 vbDefaultButton4 768 第四个按钮是默认按钮。

android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用

android中,如果使用imageButton可以在drawable 中设置一个selector,但是imageView设置不起作用,只要把Imageview的src给去掉就成了,src捕获了background本应获得焦点导致,具体原因可查看这两者的区别。 <ImageView android:id="@+id/mute_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:background="@drawable/ic_mute_selector" android:clickable="true" android:contentDescription="@string/app_name" android:src="@null" />

微信公众平台菜单创建

直接贴代码 package com.kkxxbb; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.PostMethod; public class WeixinMenu { public static void main(String[] args){ String token ="你的token值"; String url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+token; /** * 设置菜单 */ String responeJsonStr = "{"+ "\"button\":["+ "{"+ "\"type\":\"click\","+ "\"name\":\"来一段\","+ "\"key\":\"KKXXBA_ALL\""+ "},"+ "{"+ "\"name\":\"分类\","+ "\"sub_button\":["+ "{"+ "\"type\":\"click\","+ "\"name\":\"个性签名\","+ "\"key\":\"KKXXBA_T1\""+ "},"+ "{"+ "\"type\":\"click\","+ "\"name\":\"哈哈笑话\","+ "\"key\":\"KKXXBA_T2\""+ "},"+ "{"+ "\"type\":\"click\","+ "\"name\":\"开心段子\","+ "\"key\":\"KKXXBA_T3\""+ "}]"+ "},"+ "{"+ "\"type\":\"click\","+ "\"name\":\"关于我们\","+ "\"key\":\"KKXXBA_ABOUT\""+ "}]"+ "}"; HttpClient client = new HttpClient(); PostMethod post = new PostMethod(url); post.

ThinkPad 0A36414 蓝牙无线激光鼠标在win7上无法使用的问题

在京东上买了一个ThinkPad 0A36414 蓝牙无线激光鼠标,在办公室直接连接了三星盖世三和小米2,都可以直接在安卓上显示一个鼠标,操作毫无问题,相当好用啊。 回家后连接ThinkPad T410i,蓝牙可以搜索的到鼠标,但是连接并配对过程非常慢,然后配置成功,鼠标毫无反应!!看了说明书,联想的说明书大大的一张纸,一大片英文,很不明了。耐心读了英文,需要到官网上下载Thinkpad Bluetooth Laser Mouse,到官网查看,只有硬件配置,鼠标性能等信息,没有下载链接,搜索也没有搜到相关信息,联想的网站和说明说一样混乱!!! 中间各种折腾,百度也没有下载到Thinkpad Bluetooth Laser Mouse。自己仔细想了想,既然手机可以直接连接蓝牙鼠标,win7自带的蓝牙驱动也应该可以直接连接蓝牙鼠标,根本不需要联想的Thinkpad Bluetooth Laser Mouse,很可能是联想系统自动的蓝牙驱动的问题,从控制面板中删除了联想自动的蓝牙驱动。。。重新连接蓝牙鼠标,还是毫无反应,最后win7直接无法连接到蓝牙鼠标了。 中间又是各种折腾,下面给出最终的解决方案。 1:先关闭蓝牙的系统硬件开关,然后重新打开 2:再次在win7上搜索蓝牙设备,然后就可以重新搜到蓝牙鼠标了 3:右键蓝牙鼠标并选择属性,如下图 选择“键盘、鼠标等的驱动程序(HID)”后,win7自动更新了HID设备驱动。 4:再次搜索蓝牙设备,然后连接,蓝牙鼠标终于可以使用了。

LTE

http://www.tutorialspoint.com/lte/lte_layers_data_flow.htm:详细介绍了数据流在LTE各层中的流向以及pdu、sdu的解释等。 异频或异系统重选小区 对于异系统或者异频点的小区之间的重选 在sib5里面 InterFreqCarrierFreqList { dl-CarrierFreq 38250 //邻小区的频点 q-RxLevMin -64 //用来计算邻小区Squal threshX-High 11,//如果邻小区的优先级高于服务小区且目标小区是utran或lte,则当邻小区的Squal> threshX-High 且目标小区的 Srxlev> threshX-High 时会重选到这个小区 threshX-Low 11,//如果邻小区的优先级低于服务小区且目标小区是utran或lte,则当邻小区的Squal> threshX-Low 且服务小区的Squal<threshServingLow 时会重选到这个小区 } threshServingLow这个值在sib3里面广播 cellReselectionServingFreqInfo { threshServingLow 3 //当服务小区的Squal<threshServingLow时可能会有重选 cellReselectionPriority 7 //服务小区重选时的优先级 s-NonIntraSearch 5 //当邻小区优先级低于或等于服务小区且是异频之间时,如果服务小区的Srxlev> s-NonIntraSearch时是不会执行小区重选测量的。如果没有广播这个值,也会执行性测量 } 如果邻小区优先级高于服务小区,则一定会执行小区重选测量。 同频重选 Sib3里有一个 s-IntraSearch-v920 { s-IntraSearchP-r9 30 //相当于文档中提到的SIntraSearchP s-IntraSearchQ-r9 8 //相当于文档中提到的SIntraSearchQ } 当服务小区的 Srxlev>SIntraSearchP 并且Squal>SIntraSearchQ时是不会执行同频之间的测量的 RLC UM的发送实例做的事情有: 对从协议栈上层传入RLC的SDU 进行分段、级联,同时增加RLC头 RLC的头部包括sequence number and length indicators (LI) UM的接收实例要做的事情有: 根据SN(sequence number)重新排序收到的PDU 去除RLC的头部信息之后,将RLC的pdu的data 部分 重新收集到一起,之后再去除分段和解开级联信息,然后传给PDCP

利用word2vec对关键词进行聚类

继上次提取关键词之后,项目组长又要求我对关键词进行聚类。说实话,我不太明白对关键词聚类跟新闻推荐有什么联系,不过他说什么我照做就是了。 按照一般的思路,可以用新闻ID向量来表示某个关键词,这就像广告推荐系统里面用用户访问类别向量来表示用户一样,然后就可以用kmeans的方法进行聚类了。不过对于新闻来说存在一个问题,那就量太大,如果给你十万篇新闻,那每一个关键词将需要十万维的向量表示,随着新闻数迅速增加,那维度就更大了,这计算起来难度太大。于是,这个方法思路简单但是不可行。 好在我们有word2vec这个工具,这是google的一个开源工具,能够仅仅根据输入的词的集合计算出词与词直接的距离,既然距离知道了自然也就能聚类了,而且这个工具本身就自带了聚类功能,很是强大。下面正式介绍如何使用该工具进行词的分析,关键词分析和聚类自然也就包含其中了。word2vec官网地址看这里:https://code.google.com/p/word2vec/ 1、寻找语料 要分析,第一步肯定是收集数据,这里不可能一下子就得到所有词的集合,最常见的方法是自己写个爬虫去收集网页上的数据。不过,如果不需要实时性,我们可以使用别人提供好的网页数据,例如搜狗2012年6月到7月的新闻数据:http://www.sogou.com/labs/dl/ca.html 直接下载完整版,注册一个帐号,然后用ftp下载,ubuntu下推荐用filezilla 下载得到的数据有1.5G 2、分词 我们得到的1.5的数据是包含一些html标签的,我们只需要新闻内容,也就是content其中的值。首先可以通过简单的命令把非content的标签干掉 cat news_tensite_xml.dat | iconv -f gbk -t utf-8 -c | grep "<content>" > corpus.txt 得到了corpus.txt文件只含有content标签之间的内容,再对内容进行分词即可,这里推荐使用之前提到过的ANSJ,没听过的看这里: http://blog.csdn.net/zhaoxinfan/article/details/10403917 下面是调用ANSJ进行分词的程序: import java.util.HashSet; import java.util.List; import java.util.Set; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StringReader; import java.util.Iterator; import love.cq.util.IOUtil; import org.ansj.app.newWord.LearnTool; import org.ansj.domain.Term; import org.ansj.recognition.NatureRecognition; import org.ansj.splitWord.Analysis; import org.ansj.splitWord.analysis.NlpAnalysis; import org.ansj.splitWord.analysis.ToAnalysis; import org.

Geohash距离估算

http://www.cnblogs.com/LBSer/p/3298057.html 一、经纬度距离换算 a)在纬度相等的情况下: 经度每隔0.00001度,距离相差约1米; 每隔0.0001度,距离相差约10米; 每隔0.001度,距离相差约100米; 每隔0.01度,距离相差约1000米; 每隔0.1度,距离相差约10000米。 b)在经度相等的情况下: 纬度每隔0.00001度,距离相差约1.1米; 每隔0.0001度,距离相差约11米; 每隔0.001度,距离相差约111米; 每隔0.01度,距离相差约1113米; 每隔0.1度,距离相差约11132米。 二、Geohash距离换算(使用base32编码) 如果geohash的位数是9位数的时候,大概为附近2米 下表摘自维基百科:http://en.wikipedia.org/wiki/Geohash geohash length lat bits lng bits lat error lng error km error 123±23±23±2500255± 2.8± 5.6±630378± 0.70± 0.7±7841010± 0.087± 0.18±2051213± 0.022± 0.022±2.461515± 0.0027± 0.0055±0.6171718±0.00068±0.00068±0.07682020±0.000085±0.00017±0.019 转载于:https://www.cnblogs.com/LBSer/p/3298057.html

北疆

日期 行程 景点 住宿 9月21日 抵达乌鲁木齐,集合 9月22日 乌市—布尔津 武装青年旅馆 9月23日 布尔津—贾登峪—半路客栈 白桦林、布拉勒汉桥、喀纳斯河大拐弯 半路客栈 9月24日 半路客栈—禾木 两河汇合口、禾木河谷、禾木大桥 禾木驿客栈客栈 9月25日 禾木 禾木驴友驿站 9月26日 禾木—小黑湖 小黑湖 9月27日 小黑湖—喀纳斯 毡房 9月28日 喀纳斯 神仙湾、月亮河、卧龙湾、观鱼亭 待定 9月29日 喀纳斯—白哈巴—五号界碑 白哈巴 待定 9月30日 白哈巴—布尔津 五彩滩 彭阳饭店 10月1日 布尔津—北屯—富蕴 可可托海 毡房 10月2日 返乌鲁木齐 待定 行程安排 日期 交通 日程安排 9月22日 班车 乌市——布尔津 包车行程: 途经乌伦古湖,可停留。下午16:00后,到五彩滩看日落(约30公里,包车),宿布尔津 班车行程: 乌鲁木齐火车站步行至“火车南站”,乘坐52路区间(或 52路, 8路, brt-1路) 3站,在“碾子沟站”下车,步行乌鲁木齐碾子沟客运站约410米 乌市碾子沟客运站(地址:黑龙江路49号,咨询电话:0991-96513、2041868,售票时间:10:00-11:00)前往布尔津,预计里程600KM,预计到达时间20:00,车票150元 发车班次:11:15、20:20、20:40(是否需要让丐叔朋友提前买票?) Tips:想要多采购零食干粮的可以直接在布尔津采购,价格和乌鲁木齐市的差不多。布尔津有个河畔夜市,是卖烤鱼的,是当地的冷水鱼,味道和四川的肯定不一样。特点是贵! 看日落,安排住宿 住宿 【武装青年旅馆】 三人间90元/间 双人间60元/间 9月23日

如何设置allegro的快捷键

zz : http://yuandi6.blog.163.com/blog/static/207265185201210245435397/ 修改变量文件,设置自定义快捷键。 Allegro可以通过修改env文件来设置快捷键,这对于从其它软件如protle或PADS迁移过来的用户来说,可以沿用以前的操作习惯,还是很有意义的。 先说一下Allegro的变量文件,一共有2个,一个是用户变量,一个是全局变量。 用户变量文件的位置,通过系统环境变量设置:系统属性-高级-环境变量,其中的Home值就是env所在目录。要注意的是,这里也有两个变量,一个是用户变量一个是系统变量,在用户变量里设置了Home之后就不需要在系统变量里再设置了,如果同时设置的话,会以用户变量的为准而忽略系统变量。比如我在用户变量里设置的Home目录为d:\temp,那么env文件就位于d:\temp\pcbenv内。 如果没有在系统属性里设置Home变量的路径,那么对于XP,会自动在C:\documents and settings\用户文件夹\pcbenv内产生env文件。对于2000,pcbenv目录位于C盘根目录下。 全局变量的位置,固定为软件安装目录内,比如我的就是:d:\cadence\spb_15.7\share\pcb\text内。 通常建议修改用户变量env文件,而不要修改全局变量env文件,至于为什么,我也不知道:) 另外,这2个env文件,用户变量的优先级更高,就是说如果2个文件中的设置出现冲突,那么以用户变量env文件为准。 好了,搞清楚env文件的位置后,我们就可以来修改了。 用户变量env文件,是类似于下面的格式: source $TELENV ### User Preferences section ### This section is computer generated. ### Please do not modify to the end of the file. ### Place your hand edits above this section. ### set autosave_time = 15 set autosave 我们要设置的快捷键必须放置在### User Preferences section之前。 设置快捷键指令格式 : alias 快捷键 执行的命令 例:alias Del delete 我的部分快捷键: alias Pgup zoom in

DRAM的信号完整性 .

DRAM的信号完整性 RAM的种类 目前D厂常用的是SDRAM、DDR、DDR2,DDR3还用不到。SRAM容量不能满足要求,成本又太高。 DRAM,每个内存单元更少的电路实现,内存单元基于电容器上贮存的电荷,典型的DRAM 单元使用一个电容器及一个或三个FET(场效应晶体管)制成。低成本、高密度,缺点:信息易丢失。 SRAM,每单元六个FET 器件。与DRAM 相比,SRAM 使用起来更简便,接口更容易,数据访问时间更快。 DRAM读取具有破坏性,也就是说,在读操作中会破坏内存单元行中的数据。因此,必需在该行上的读或写操作结束时,把行数据写回到同一行中。这一操作称为预充电,是行上的最后一项操作。必须完成这一操作之后,才能访问新的行,这一操作称为关闭打开的行。 DDR2 SDRAM 较DDR SDRAM 有多处改进。DDR2 SDRAM时钟速率更高,从而提高了内存数据速率。随着时钟速率提高,信号完整性对可靠运行内存变得越来越重要。随着时钟速率提高,电路板上的信号轨迹变成传输线,在信号线末端进行合理的布局和端接变得更加重要。 目前DRAM的信号带宽: DDR SDRAM 数据速率内存时钟 DDR-266 266 Mb/s/ 针脚133 MHz DDR-333 333 Mb/s/ 针脚166 MHz DDR-400 400 Mb/s/ 针脚200 MHz DDR2 SDRAM 数据速率内存时钟 DDR2-400 400 Mb/s/ 针脚200 MHz DDR2-533 533 Mb/s/ 针脚266 MHz DDR2-667 667 Mb/s/ 针脚333 MHz DDR2-800 800 Mb/s/ 针脚400 MHz DDR2-1066 1066 Mb/s/ 针脚533 MHz DDR3 SDRAM 数据速率内存时钟 DDR3-800 800 Mb/s/ 针脚400 MHz

cognos配置邮件自动发送功能

关于cognos自动发送邮件的介绍网上介绍很多,这里就不多说了。主要说下今天遇到的情况: 今天尝试设置cognos的邮件自动发送功能,配置好了SMTP和邮箱的账号和密码,导致但是测试总是失败。上报邮箱验证不通过,查了很多资料但是都没有说清楚。最后发现很有可能是这个邮箱没有开启SMTP协议。(一般邮箱接收的协议有SMTP和POP3协议)导致该邮箱不能通过验证。 这里如果设置了邮箱自动发送功能一定要开启对应的邮箱协议,切记

排序算法的归纳与比较,还有相关视频哦【for_wind】

好久没有看算法相关的东西,把以前的笔记整理一下,当作复习。加油~~//for_wind 排序算法的归纳与比较 名称插入排序合并排序堆排序快速排序计数排序基数排序桶排序思路通过比较在已排序的数组A[1,...,j-1]中插入新数据A[j],形成新的已排序数组A[1,...,j](分解)分成2个子序列; (解决)对子序列递归地进行排序 (合并)合并已经排序的子序列先建堆,交换根元素A[i]和A[n],更新保持堆性质,重复以上,直到堆大小从n-1减为2(分解)划分 (解决)递归调用 (合并)无,因为就地排序假设元素均介于0到k的整数。 利用数组下标假设n个d位数,每个位数k种可能的值。 按位排序(从低到高)假设输入元素独立均匀地分布在区域[0,1)上,划分该区域为桶,分别排序策略增量法 原地排序 稳定分治 非原地排序 稳定 原地排序 不稳定分治 原地排序 不稳定特殊假设 非原地排序 稳定特殊假设 非原地排序 稳定特殊假设 非原地排序 稳定运行时间o(n^2)o(nlgn)o(nlgn)o(n^2) o(nlgn)o(k+n)o(d(k+n)) o(b(r)*r(k+2^r))o(n)要点 合并步骤最关键堆的操作随机化划分确定小于等于i的元素个数先按最低的有效位排序 应用情况基本已排序 优先级队列 参考思路中假设参考思路中假设参考思路中假设 其他: 前4种是比较排序,比较排序可视为决策树(一颗满二叉树)。排序算法的执行对应于遍历一条从树的根到页节点的路径。一个比较算法最坏情况比较次数与其决策树的高度相等,为lgn。为此,任意一个比较算法最坏的情况下都需要o(nlogn)次比较。此外,堆排序和合并排序是渐进最优的比较排序算法。而后三种算法,下界o(nlogn)对其不适用。 相关视频《6分钟演示15种排序算法》:点击打开链接 。值得一看,另外一笑。嘻嘻。

VBO的详解

有时候你不得不承认,OPENGL的开发真的不如DIRECTX,特别对于入门的人来说,一个简单的概念可以让我嚼上几天不得骑姐。 VBO可以说是OPENGL中里程碑似的东西,通过VBO我们可以把需要渲染的图元的顶点信息,直接上传存储在GPU的显存中。由于最早的OPENGL不支持实例化绘制,导致在绘制大量相似图元的时候,需要反复向GPU提交代码渲染,这点在 OpenGL中的二次方图元和实例化绘制已经提到过了,会严重导致瓶颈效应,而VBO的诞生正好解决了这一问题,当然这特性需要OPENGL3.1以上或者扩展的支持。 说到VBO自然要说到VAO,但是实际上两者可以完全不相关,只是了解了VAO的机制,跟容易了解VBO而已。说到底,VBO就是通过那几个函数,在GPU显存中创建一块BUFFER,用于存储和顶点以及其属性相关的信息。了解了VAO并且了解了顶点数组和顶点索引以后,我们才可以进一步去了解VBO的使用。 所谓的顶点数组,就是如下的东西: GLfloat vertices[] = { -1.0, -1.0, -1.0 , -1.0, -1.0, 1.0 , -1.0, 1.0, -1.0 , -1.0, 1.0, 1.0 , 1.0, -1.0, -1.0 , 1.0, -1.0, 1.0 , 1.0, 1.0, -1.0 , 1.0, 1.0, 1.0 , }; 上面是一个立方体的一共8个顶点,而顶点索引即如下 static GLshort frontIndices[] = {0, 1, 3, 2}; 上面这个索引只包含了立方体的四个顶点即其中一个面而已 然后我们将这些个顶点数组和顶点索引上传至GPU的显存,如下 glGenBuffers(3,buffers);//创建3块buffer glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);//先将第一块buffer绑定到当前 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),vertices, GL_STATIC_DRAW);//将顶点数组放入这个buffer glVertexPointer(3, GL_FLOAT, 0, 0);//指定这个buffer的格式,3代表3个float值为一个顶点,第一个0代表跨度,这里数值是紧密排列的,最后一个是数组的入口地址*point,由于已经将buffer绑定到当前,所以填0 glEnableClientState(GL_VERTEX_ARRAY);//使用这个buffer,一定不要忘记 glBindBuffer(GL_ARRAY_BUFFER, buffers[1]);//这里开始是将第二块buffer绑定到当前,上传color数据,和顶点的做法一样,不多赘述了 glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW); glColorPointer(3, GL_FLOAT, 0, 0); glEnableClientState(GL_COLOR_ARRAY); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[2]);//将第三块buffer绑定到当前,用于上传存储顶点索引的数据,因此BUFFER类型变更为GL_ELEMENT_ARRAY_BUFFER glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(frontIndices),frontIndices,GL_STATIC_DRAW);//同样是对buffer进行填充 经过以上代码,某个图元的顶点位置以及颜色和索引信息就已经放入GPU了,接下来只要在display函数中,调用glDrawElements就可以绘制了 glDrawElements(GL_QUADS, 4, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0));//由于索引定义的是4个点,因此第一个参数mode是四边形,第二个是索引的size,第三个是索引的数据类型。注意! glDrawElements只接受3种数据类型,当时我因为指定索引类型为GL_INT导致无法绘制被卡住了N长时间,坑人啊!最后一个是指针地址,由于当前绑定的buffer是buffer[2],因此填0即可。 最后别忘记了,VBO是需要glew库支持的,所以要记得在头文件中添加 需要补充的是,关于另外一个函数:glVertexAttribPointer 这个函数可以在很多人的代码中见到,普遍是用于GLSL。什么是GLSL,想想我就头大,简单图形的绘制完全用不到自己编写渲染器,自定义的渲染器这块内容我觉得和OPENGL本身一样水深的很,如果不是从事3D游戏开发,完全没必要去碰。言归正传,因为大量的这个函数的例子都出现在GLSL中,所以我也是费了很大的劲才搞清楚如何将它用在简单的OPENGL函数中。 简单的来说,它和之前我们用的 glVertexPointer是同一个东西,只是如果用了 glVertexAttribPointer,那么我们就不需要死板的只指 定vertice为顶点位置,而是可以创建一个包含了所有顶点位置+顶点颜色+顶点法线+顶点xxx的数组,通过一次将其送入显存,然后调用 glVertexAttribPointer索引其属性就可以实现。比方说我有个attrib[]数组,前3位为位置,后面依次为颜色,法线,这样子就有3个index,依次为0,1,2.

和菜鸟一起学linux之DBUS基础学习记录

D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统,包括: 1、函数库libdbus ,用于两个应用程序互相联系和交互消息。 2、一个基于libdbus构造的消息总线守护进程,可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。 3、基于特定应用程序框架的封装库或捆绑(wrapper libraries or bindings )。例如,libdbus-glib和libdbus-qt,还有绑定在其他语言,例如Python的。大多数开发者都是使用这些封装库的API,因为它们简化了D-Bus编程细节。libdbus被有意设计成为更高层次绑定的底层后端(low-levelbackend )。大部分libdbus的 API仅仅是为了用来实现绑定。 总线 在D-Bus中,“bus”是核心的概念,它是一个通道:不同的程序可以通过这个通道做些操作,比如方法调用、发送信号和监听特定的信号。在一台机器上总线守护有多个实例(instance)。这些总线之间都是相互独立的。 一个持久的系统总线(system bus): 它在引导时就会启动。这个总线由操作系统和后台进程使用,安全性非常好,以使得任意的应用程序不能欺骗系统事件。它是桌面会话和操作系统的通信,这里操作系统一般而言包括内核和系统守护进程。这种通道的最常用的方面就是发送系统消息,比如:插入一个新的存储设备;有新的网络连接;等等。 还将有很多会话总线(session buses): 这些总线当用户登录后启动,属于那个用户私有。它是用户的应用程序用来通信的一个会话总线。同一个桌面会话中两个桌面应用程序的通信,可使得桌面会话作为整体集成在一起以解决进程生命周期的相关问题。这在GNOME和KDE桌面中大量使用。 对于一些远程的工作站,在system bus中可能会有一些问题,例如热插拔,是否需要通知远端的terminal,这会使得kernel暴露一些设备的能力,不过,我们现在关心D-Bus,是因为手持终端设备的使用,这些将不会出现。在Internet Tablet,也包括我们的手机系统,所有的应用程序都是使用一个用户ID运行的,所以只有一个会话通道,这一点是和Linux桌面系统是有明显区别的。 D-Bus是低延迟而且低开销的,设计得小而高效,以便最小化传送的往返时间。另外,协议是二进制的,而不是文本的,这样就排除了费时的序列化过程。从开发者的角度来看,D-BUS 是易于使用的。有线协议容易理解,客户机程序库以直观的方式对其进行包装。D-Bus的主要目的是提供如下的一些更高层的功能: A、结构化的名字空间 B、独立于架构的数据格式 C、支持消息中的大部分通用数据元素 D、带有异常处理的通用远程调用接口 E、支持广播类型的通信 Bus daemon总线守护 Bus daemon是一个特殊的进程:这个进程可以从一个进程传递消息给另外一个进程。当然了,如果有很多applications链接到这个通道上,这个 daemon进程就会把消息转发给这些链接的所有程序。在最底层,D-Bus只支持点对点的通信,一般使用本地套接字(AF_UNIX)在应用和bus daemon之间通信。D-Bus的点对点是经过busdaemon抽象过的,由busdaemon来完成寻址和发送消息,因此每个应用不必要关心要把消息发给哪个进程。D-Bus发送消息通常包含如下步骤(正常情况下): 创建和发送消息 给后台bus daemon进程,这个过程中会有两个上下文的切换。 后台bus daemon进程会处理该消息,并转发给目标进程,这也会引起上下文的切换目标程序接收到消息,然后根据消息的种类,做不同的响应:要么给个确认、要么应答、还有就是忽略它。最后一种情况对于“通知”类型的消息而言,前两种都会引起进一步的上下文切换。 综上原因,如果你准备在不同的进程之间传递大量的数据,D-Bus可能不是最有效的方法,最有效的方法是使用共享内存,但是对共享内存的管理也是相当复杂的。 D-Bus进程通信简单框架 D-Bus常见概念 原生对象和对象路径 所有使用D-BUS的应用程序都包含一些对象, 当经由一个D-BUS连接收到一条消息时,该消息是被发往一个对象而不是整个应用程序。在开发中程序框架定义着这样的对象,例如JAVA,GObject,QObject等等,在D-Bus中成为native object。 对于底层的D-Bus协议,即libdbus API,并不理会这些native object,它们使用的是一个叫做object path的概念。通过object path,高层编程可以为对象实例进行命名,并允许远程应用引用它们。这些名字看起来像是文件系统路径,例如一个对象可能叫做“/org/kde/kspread/sheets/3/cells/4/5”。易读的路径名是受鼓励的做法,但也允许使用诸如“/com/mycompany/c5yo817y0c1y1c5b”等,只要它可以为你的应用程序所用。Namespacing的对象路径以开发者所有的域名开始(如 /org/kde)以避免系统不同代码模块互相干扰。 简单地说:一个应用创建对象实例进行D-Bus的通信,这些对象实例都有一个名字,命名方式类似于路径,例如/com/mycompany,这个名字在全局(session或者system)是唯一的,用于消息的路由。 方法和信号Methodsand Signals 每一个对象有两类成员:方法和信号。方法就是JAVA中同样概念,方法是一段函数代码,带有输入和输出。信号是广播给所有兴趣的其他实体,信号可以带有数据payload。 在 D-BUS 中有四种类型的消息:方法调用(method calls)、方法返回(method returns)、信号(signals)和错误(errors)。要执行 D-BUS 对象的方法,您需要向对象发送一个方法调用消息。它将完成一些处理(就是执行了对象中的Method,Method是可以带有输入参数的。)并返回,返回消息或者错误消息。信号的不同之处在于它们不返回任何内容:既没有“信号返回”消息,也没有任何类型的错误消息。 接口Interface 每一个对象支持一个或者多个接口,接口是一组方法和信号,接口定义一个对象实体的类型。D-Bus对接口的命名方式,类似org.freedesktop.Introspectable。开发人员通常将使用编程语言类的的名字作为接口名字。

python学习总结--数字

Python中主要的数据类型有:数字、字符串、列表、元组、字典、文件等。下面对数字进行介绍和总结 数字 1. 基本概念 Python是面向对象的语言,数字也是对象,它是不可变的。当给变量重新赋值时,是将变量指向了另一个对象,原来的对象并没有被改变。这一点与c有很大的区别。 2. 数字的类型 Python支持多种数字类型:整型、长整型、浮点型、复数、布尔型、十进制浮点型 整型int 如:711 -19 017 0x18 Python中的整型等价于C中的长整型,在32位计算机中占用4个字节。取值范围是-2^31~ 2^31-1 长整型long 如:16384L -0x4E8L 017L -2147483648l 052144364L 长整型一般以L结尾,表示其为长整型。取值范围只与机器的内存有关,可以表示无限大的数,远远超过了c的长整型 目前,整型与长整型在慢慢统一,当整型数据范围溢出时,会自动转换为长整型 浮点型float 如:0.0 -29.2 98e3*1.0 -238. -1.28E-9 Python中的浮点型数据类似与C中的双精度浮点型double,可以用十进制或科学计数法表示。 十进制浮点型decimal 由于计算机的精度问题,导致小数的表示存在误差,如0.1在计算机中的表示是0.1000000000000001。0.1+0.1+0.1-0.3应该是0.结果却不是。 >>> 0.1+0.1+0.1-0.3 5.551115123125783e-17 为此引入Decimal类型的小数进行解决。 >>> from decimal import Decimal >>> printDecimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3') 0.0 Decimal是一个类,使用时需进行导入,然后通过字符串创建decimal对象。注意decimal类型的数据不可以和普通浮点数进行运算。Decimal类型的数据支持算术运算,不支持位运算等。 >>> 1+Decimal('1.0') Decimal('2.0') >>> 1.0+Decimal('2.0') Traceback (most recent call last): File"<pyshell#17>", line 1, in <module> 1.0+Decimal('2.0') TypeError: unsupported operand type(s) for +: 'float'and 'Decimal'

各种符号的英语文读法

英语中各种符号的读法 各种符号的英语文读法: 'exclam'='!' 'at'='@' 'numbersign'='#' 'dollar'='$' 'percent'='%' 'caret'='^' 'ampersand'='&' 'asterisk'='*' 'parenleft'='(' 'parenright'=')' 'minus'='-' 'underscore'='_' 'equal'='=' 'plus'='+' 'bracketleft'='[' 'braceleft'='{' 'bracketright'=']' 'braceright'='}' 'semicolon'=';' 'colon'=':' 'quote'=''' 'doublequote'='"' 'backquote'=''' 'tilde'='~' 'backslash'='\' 'bar'='|' 'comma'=',' 'less'=' 'period'='.' 'greater'='>' 'slash'='/' 'question'='?' 'space'=' '  ̄ hyphen 连字符 ' apostrophe 省略号;所有格符号 — dash 破折号 ‘ ’single quotation marks 单引号 “ ”double quotation marks 双引号 ( ) parentheses 圆括号 [ ] square brackets 方括号 Angle bracket {} Brace 《 》French quotes 法文引号;书名号

强大的Android系统,可自由修改手机型号、SDK版本号等信息。

从所周知,Android是个开源代码的系统,可供大家自由开发。本人一直都用着国产神器,价钱便宜,但是功能强大,今天特发奇想地想修改一下系统所显示的手机型号等,这样在使用一些社交软件的时候,所显示出的手机型号就牛B了,明明就是一个不知名的国产品牌手机 ,硬是变成iPhone 5s ......在此记录一下在网上查找到的修改方法,其实很简单。 首先要确保你的手机已经取得Root权限,如果还没有取得,推荐使用百度一键Root工具。 然后下载安装RE管理器。打开re管理器,进入system文件夹。然后挂载为读写状态 然后长按build.prop,选择以文本编辑方式打开:ro.product.model=iPhone 5这里就是修改你想显示的手机型号。 ro.product.manufacturer = iPhone6 (对于安卓手机,一般会获取这个属性-制造商也就是手机品牌) # begin build properties (开始设置系统性能) # autogenerated by buildinfo.sh (通过设置形成系统信息) ro.build.id=GRI40 (版本ID) ro.build.display.id=(版本号) ro.build.version.incremental=eng.buildbot.20110619.060228 (版本增量) ro.build.version.sdk=10 (sdk版本) ro.build.version.codename=REL (版本代号) ro.build.version.release=110(Android 2.3.4系統无需修改,也可改为3.0装装B) ro.build.date=Sun Jun 19 06:02:58 UTC 2011 (制作者制作的时间,可修改2011年X月X日 某某某制作) ro.build.date.utc=0 ro.build.type=user ro.build.user=buildbot ro.build.host=bb1 ro.build.tags=test-keys ro.product.model=iPhone 5 ro.product.brand=华尔社 (手机品牌,改为中国山寨机) ro.product.name=htc_buzz (手机正式名称,改为小文明用语) ro.product.device=buzz (采用的设备,改为China G8) ro.product.board=酷睿I7 (采用的处理器,改为China 800.8Ghz) ro.product.cpu.abi=armeabi-v6j (cpu的版本) ro.product.cpu.abi2=armeabi (cpu的品牌)