The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

#

     摘要: //百度地图的坐标转换,由于百度地图在GCJ02协议的基础上又做了一次处理,变为 BD09协议的坐标,以下是坐标的转化方式,可以方便和其他平台转化jQuery.MapConvert = {    x_pi: 3.14159265358979324 * 3000.0 / 180.0,    /// <summary...  阅读全文
posted @ 2015-01-23 18:56 Eric_jiang 阅读(878) | 评论 (0)编辑 收藏

工作中,使用JAVA的JAXP读取解析XML文件中,就碰到了一件奇件的事。在Web工程中,调试发现JAXP实际使用的是Xerces解析器, 
可是,当将工程中的一个小Swing工具,与Web使用一样的jar包,打成一个可执行的jar包时,调试却发现JAXP实际使用的是Crimson 
解析器,还会发现解析XML文件时出现错误,经过分析,发现Crimson解析器是Sun公司开发的(实际使用发现Crimson没有Xerces解析器稳定), 
打包在JAVA_HOME/lib/dt.jar包中,这个dt.jar被设置在环境变量CLASSPATH中了,当运行可执行的jar包是,JAXP会使用CLASSPATH的解析器, 
在Web工程中的War包则不会。 
通过阅读JDK源码javax.xml.parsers.FactoryFinder,javax.xml.parsers.SAXParserFactory以及DocumentBuilderFactory发现JDK按照如下顺序:

1 系统属性javax.xml.parsers.DocumentBuilderFactory或javax.xml.parsers.SAXParserFactory

2 在jdk-dir/lib/jaxp.properties中设定的javax.xml.parsers.DocumentBuilderFactory或javax.xml.parsers.SAXParserFactory属性

3 运行时jar包中META-INF/services/javax.xml.parsers.DocumentBuilderFactory或javax.xml.parsers.SAXParserFactory文件中设定的值

4. 如果上面的解析器都没有找到,则使用Crimson。如果还没有。。。。。。那报ClassNotFound异常了。

通过JAXP查找解析器的顺序,我们可以使用下面方式来决定,我们使用的实际解析器,
1 在程序中写死实际的解析器

javax.xml.parsers.DocumentBuilderFactory factory= new org.apache.crimson.jaxp.DocumentBuilderFactoryImpl();
2 使用JAXP的 DocumentBuilderFactory 工厂类,如
javax.xml.parsers.DocumentBuilderFactory factory= javax.xml.parsers.DocumentBuilderFactory.newInstance();
再通过下面的方式来指定实际的解析器类
方法一:在运行java时,通过设置java -D javax.xml.parsers.DocumentBuilderFactory=new org.apache.crimson.jaxp.DocumentBuilderFactoryImpl
方法二:在程序中调用System.setProperty(“javax.xml.parsers.DocumentBuilderFactory”,” org.apache.crimson.jaxp.DocumentBuilderFactoryImpl”)
来设定实际的XML解析器.
方法三:编写一个jaxp.properties文件,在其中加入如下内容
javax.xml.parsers.DocumentBuilderFactory=org.apache.crimson.jaxp.DocumentBuilderFactoryImpl
再将此文件放入JAVA_HOME/lib/下
方法四:在打jar包下,在目录META-INF/下新建一个services目录,在此目录新建一个文件名为javax.xml.parsers.DocumentBuilderFactory的文件,
文件内容写上实际使用的解析器类,如写org.apache.crimson.jaxp.DocumentBuilderFactoryImpl
通过,上面,我们就可以对JAXP有一个比较深的了解。其实,JAVA中有许多这种思想的做法,这种思想,指的是什么的,就是平台无关性,发展到不依赖于具体的实现。
如我们熟悉的JNDI,JDBC,JAXP等。JNDI是抽像各种目录服务操作的类库,因为目录服务器厂商太多了,如SUN公司的ldapsdk,还有novell公司等等。JDBC是抽像各种数据库
操作的类库,因为数据库厂商也太多了,如ORACLE,SQLSERVER,MYSQL,INFORMIX等等,JAXP就是抽像各种XML解析器和转换器产品的类库,因为XML解析器和转换器产品够多
的了。

访问AIX系统中部署在OC4J中的web 模块的页面时遇到这个错误:
javax.xml.parsers.FactoryConfigurationError: Provider null could not be instantiated: 
java.lang.NullPointerException
at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source)
at org.apache.commons.digester.Digester.getFactory(Digester.java:478)
at org.apache.commons.digester.Digester.getParser(Digester.java:683)
at org.apache.commons.digester.Digester.getXMLReader(Digester.java:891)
at org.apache.commons.digester.Digester.parse(Digester.java:1591)
at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1433)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:466)
at javax.servlet.GenericServlet.init(GenericServlet.java:256)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpApplication.loadServlet(HttpApplication.java:2231)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpApplication.findServlet(HttpApplication.java:4617)
……
或者这样的异常:
javax.servlet.jsp.JspException: Can't get definitions factory from context.
at org.apache.struts.taglib.tiles.InsertTag.processDefinitionName(InsertTag.java:583)
at org.apache.struts.taglib.tiles.InsertTag.createTagHandler(InsertTag.java:487)
at org.apache.struts.taglib.tiles.InsertTag.doStartTag(InsertTag.java:451)
at _welcome._jspService(_welcome.java:54)
[SRC:/welcome.jsp:4]

…… 
而当在Windows环境下部署时就没有问题。

这里是因为IBMAIX系统使用的是IBMJDK。而出现这个问题正是因为IBMSUNJDK的差异。 具体是因为$JAVA_HOME/jre/lib/jaxp.properties 这个文件。

这个文件以key=value的形式配置和指定实际使用的XML解析器实现类(譬如:javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl)。在XML解析器初始化之前,JDK首先会搜索Systemproperties寻找解析器的配置项,如果没有则会搜索 $JAVA_HOME/jre/lib 路径下的 jaxp.properties 文件,如果还没有,接下来会在classpath上的.jar包中寻找,仍然没有的话就会使用默认的解析器。

实际上这个文件在SUNJDK中是不存在的。在找不到文件的情况下,最终将使用默认解析器。在IBMJDK中存在 jaxp.properties这个文件。但是这个文件中默认所有的配置项是注释掉的,所以在搜索到此处时,不再继续向下搜索,但是由于读取不到配置项,所以会返回null ,于是出现了上文的第一个错误。第二个异常大概是因为访问使用tiles框架的页面时,由于XML解析器初始化出错,所以tiles框架的配置文件也就读取不了了。

posted @ 2015-01-15 12:42 Eric_jiang 阅读(814) | 评论 (0)编辑 收藏

Windows 强制删除文件及文件夹命令

一、删除文件或目录CMD命令:

rd/s/q 盘符:\某个文件夹  (强制删除文件文件夹和文件夹内所有文件)
del/f/s/q 盘符:\文件名  (强制删除文件,文件名必须加文件后缀名)


XCOPY复制组文件 
COPY复制文件 
拷贝目录和文件——xcopy 
在拷贝单个文件时,可以使用copy命令完成,但当我们要成批拷贝文件,甚至连同子目录一起拷贝时,就要用到xcopy。

 一、Xcopy参数介绍

  命令格式:XCOPY source [destination] 一堆可选的参数

  参数介绍

  source 指定要复制的文件。

  destination 指定新文件的位置和/或名称。

  /A 只复制有存档属性集的文件, 但不改变属性。

  /M 只复制有存档属性集的文件, 并关闭存档属性。

  /D:m-d-y 复制在指定日期或指定日期以后改变的文件。如果没有提供日期,只复制那些源时间比目标时间新的文件。

  /EXCLUDE:file1[+file2][+file3]... 
  指定含有字符串的文件列表。如果有任何字符串与要被复制的文件的绝对路径相符,那个文件将不会得到复制。

  例如,指定如 \obj\ 或 .obj 的字符串会排除目录 obj 下面的所有文件或带有 .obj 扩展名的文件。

  /P 创建每个目标文件前提示。

  /S 复制目录和子目录,除了空的。

  /E 复制目录和子目录,包括空的。 与 /S /E 相同。可以用来修改 /T。

  /V 验证每个新文件。

  /W 提示您在复制前按键。

  /C 即使有错误,也继续复制。

  /I 如果目标不存在,又在复制一个以上的文件, 则假定目标一定是一个目录。

  /Q 复制时不显示文件名。

  /F 复制时显示完整的源和目标文件名。

  /L 显示要复制的文件。

  /G 允许将没有经过加密的文件复制到不支持加密的目标。

  /H 也复制隐藏和系统文件。

  /R 改写只读文件。

  /T 创建目录结构,但不复制文件。不包括空目录或子目录。/T /E 包括空目录和子目录。

  /U 只复制已经存在于目标中的文件。

  /K 复制属性。一般的 Xcopy 会重设只读属性。

  /N 用生成的短名复制。

  /O 复制文件所有权和 ACL 信息。

  /X 复制文件审核设置(隐含 /O)。

  /Y 禁止提示以确认改写一个现存目标文件。

  /-Y 导致提示以确认改写一个现存目标文件。

  /Z 用重新启动模式复制网络文件。

  二、Xcopy命令实例介绍

  ①本机复制文件或文件夹的实例

  Xcopy d:\UpdateFiles e:\123  /s /e /y

  命令解释:将D盘的UpdateFiles文件夹中包含的所有东西,全部复制到E盘的123文件夹内;/s /e /y 参数说明:在复制文件的同时也复制空目录或子目录,如果目标路径已经有相同文件了,使用覆盖方式而不进行提示。

  ②在局域网中的应用实例

  Xcopy \\192.168.0.168\UpdateFiles e:\123  /s /e /y

  命令解释:将192.168.0.168这台计算机的名称为UpdateFiles的文件夹内的所有东西,全部复制到本机的e:\123 文件夹;参数说明:在复制文件的同时也复制空目录或子目录,如果目标路径已经有相同文件了,使用覆盖方式而不进行提示。

删除一个或数个文件。

一、Del参数介绍


DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
  names         指定一个或数个文件或目录列表。通配符可被用来
                删除多个文件。如果指定了一个目录,目录中的所
                有文件都会被删除。
  /P            删除每一个文件之前提示确认。
  /F            强制删除只读文件。
  /S            从所有子目录删除指定文件。
  /Q            安静模式。删除全局通配符时,不要求确认。
  /A            根据属性选择要删除的文件。
  attributes      R  只读文件                     S  系统文件
                  H  隐藏文件                     A  存档文件
                  -  表示“否”的前缀
如果命令扩展名被启用,DEL 和 ERASE 会如下改变:
/S 开关的显示句法会颠倒,即只显示已经
删除的文件,而不显示找不到的文件。
posted @ 2015-01-15 10:56 Eric_jiang 阅读(186) | 评论 (0)编辑 收藏

有时候我们需要设置一个alarmmanager事件
但是如果这个事件的时间是凌晨三点 我们不可能等到凌晨三点吧
adb中提供了查看alarmmanager的命令
adb shell dumpsys alarm
通过这命令可以查看被放到定时队列里面的事件

    RTC_WAKEUP #1: Alarm{52c2ad84 type 0 com.sina.weibo}     type=0 when=+3m1s330ms repeatInterval=0 count=0     operation=PendingIntent{529fa514: PendingIntentRecord{52a7b220 com.sina.weibo broadcastIntent}} 

如果我们就可以看到其中一个微博的alarm 如果我们想看他intent的详细信息
就可以用下面这个命令
adb shell dumpsys activity intents
然后找到里面id是52a7b220 的那一段

  * PendingIntentRecord{52a7b220 com.sina.weibo broadcastIntent}     uid=10073 packageName=com.sina.weibo type=broadcastIntent flags=0x0     requestCode=1383195892 requestResolvedType=null     requestIntent=act=AlarmTaskSchedule     sent=true canceled=false
posted @ 2015-01-06 15:26 Eric_jiang 阅读(452) | 评论 (0)编辑 收藏

 
1、AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作。在使用Intent的时候,我们还需要在执行startActivity、startService或sendBroadcast才能使Intent有用。而PendingIntent的话就是将这个动作包含在内了。
定义一个PendingIntent对象。
PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,0);
2、AlarmManager的常用方法有三个:
(1)set(int type,long startTime,PendingIntent pi);
该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。
(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。
(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。
3、三个方法各个参数详悉:
(1)int type: 闹钟的类型,常用的有5个值:AlarmManager.ELAPSED_REALTIME、 AlarmManager.ELAPSED_REALTIME_WAKEUP、AlarmManager.RTC、 AlarmManager.RTC_WAKEUP、AlarmManager.POWER_OFF_WAKEUP。
AlarmManager.ELAPSED_REALTIME表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
AlarmManager.ELAPSED_REALTIME_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;
AlarmManager.RTC表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;
AlarmManager.RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;
AlarmManager.POWER_OFF_WAKEUP表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;
(2)long startTime: 闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关,如果第一个参数对 应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(相对于 系统启动时间来说),比如当前时间就表示为:SystemClock.elapsedRealtime();如果第一个参数对应的闹钟使用的是绝对时间 (RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本属性就得使用绝对时间,比如当前时间就表示 为:System.currentTimeMillis()。
(3)long intervalTime:对于后两个方法来说,存在本属性,表示两次闹钟执行的间隔时间,也是以毫秒为单位。
(4)PendingIntent pi: 绑定了闹钟的执行动作,比如发送一个广播、给出提示等等。PendingIntent是Intent的封装类。需要注意的是,如果是通过启动服务来实现闹钟提 示的话,PendingIntent对象的获取就应该采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用 PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用 PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。
4.举例说明:定义一个闹钟,5秒钟重复响应。
(1)MainActivity,在onCreate中完成:
 
 //创建Intent对象,action为ELITOR_CLOCK,附加信息为字符串“你该打酱油了”   
 Intent intent = new Intent("ELITOR_CLOCK");  
 intent.putExtra("msg","你该打酱油了");    
   
 //定义一个PendingIntent对象,PendingIntent.getBroadcast包含了sendBroadcast的动作。   
 //也就是发送了action 为"ELITOR_CLOCK"的intent   
 PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,0);    
   
 //AlarmManager对象,注意这里并不是new一个对象,Alarmmanager为系统级服务   
  AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);    
    
  /设置闹钟从当前时间开始,每隔5s执行一次PendingIntent对象pi,注意第一个参数与第二个参数的关系   
 // 5秒后通过PendingIntent pi对象发送广播   
 am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),5*1000,pi);  
那么启动MainActivity之后,由于定义了AlarmManager am,并且调用了am.setRepeating(...)函数,则系统每隔5s将会通过pi启动intent发送广播,其action为ELITOR_CLOCK。所以我们需要在Manifest.xml中注册一个receiver,同时自己定义一个广播接收器类。
(2)定义一个广播接收器类MyReceiver,重写onReceive()函数。
 
public class MyReceiver extends BroadcastReceiver  
{  
  
    @Override  
    public void onReceive(Context context, Intent intent)  
    {  
        // TODO Auto-generated method stub   
        Log.d("MyTag", "onclock......................");  
        String msg = intent.getStringExtra("msg");  
         Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();  
     }  
   
 }  
(3)在Manifest.xml中注册广播接收器:
 
 <receiver android:name=".MyReceiver">  
         <intent-filter>  
            <action android:name="ELITOR_CLOCK" />  
        </intent-filter>  
 </receiver>  
 
 
 
 
posted @ 2015-01-05 16:59 Eric_jiang 阅读(343) | 评论 (0)编辑 收藏

当我们从网上下载的原版苹果系统是DMG格式的,要做系统引导必须做成ISO才能做系统盘,所以本文介绍在Windows7下如何来制作苹果系统光盘,各位黑苹果的童鞋要注意了。

  准备以下三个东西。

  1、苹果OS10.8种子下载 OS X 10.8 正式版种子.torrent

  2、 制作光盘工具UltraISO UltraISO破解带注册码.zip

  3、7zip http://www.7-zip.org/

  用种子下载整个镜像,是InstallESD.dmg,用7zip打开。

  

点击查看原始图片

 

  进入 InstallMacOSX.pkg 目录 提取 InstallESD.dmg 这个才是真正的镜像文件。

  

点击查看原始图片

 

  我们可以改个名字,再进行格式转换。

  

点击查看原始图片

 

  转换成标准ISO,这个ISO才是我们要的光盘文件,可以来引导安装苹果系统。

  

点击查看原始图片

 

  介绍完毕,各位想装苹果系统要注意,使用原版苹果系统都要提取转换镜像,适用于OS X 10.7\OS X 10.8.

posted @ 2014-12-31 10:49 Eric_jiang 阅读(286) | 评论 (0)编辑 收藏

中文名称:11.28补丁包1.1a Mac OS X Tiger 10.4.3 For x86 PC破解版
英文名称:Mac OS X Tiger 10.4.3 For x86 PC patch
资源类型:ISO
版本:11.28升级补丁包1.1a
地区:大陆
语言:普通话
软件介绍:这个ISO映像已经打好11.28日发布的1.1a补丁包,可以支持8XX板安装。
地址如下:http://www7.rapidupload.com/file.php?filepath=1416
我用以下的方法,已经安装成功,感觉兼容性比以前版本好多了,以及对中文、输入法的支持等,赶快下载体验一下吧

安装简介(如下说明为单硬盘XP(2K/2K3)和MAC共存安装):
VM安装,这个步骤较复杂,只能简说一下,安装方法很多,只能择其一说一下。
  用VM(好像5.0以上版本)安装,既可以安装在客户机上,也可以安装在实体机上。
  在客户机上安装非常简单,就不说了。
  用VM安装在实体机上,网上也已经很多了,就简单说一下。
(1) 在装之前,用PQ8分区大师(最好汉化的)先分出一个6G以上(一般10G以上最好)空白分区,分区切记一定要在扩展分区之前,否则不能安装。
(2) 然后创建主分区:  
  #在PQ中创建主分区,要选择未格式化的主分区,然后再打开PQ目录下的PTEDIT32.EXE,将要安装MAC的空白分区的类型改为AF(所在分区的第一个框)。
  或者#也可以用XP下的DISKPART工具来更改分区类型符(较麻烦),在PQ分出空白分区(1)之后,执行:
    DISKPART
    SELECT DISK 0(本说明只讲单硬盘,如果为双硬盘的第二个,则为DISK 1)
    SELECT PARTITION X(X为你的空白分区号,可用LIST PARTITION 来查看号码)
    CREATE partition primary ID=AF
 这样就建立了一个分区类型为AF(HFS)的MAC分区了。
(3) 要装上DEAMON TOOL虚拟光驱,将转换好的ISO文件导入虚拟光驱中。
在VM中新建客户机,一路选择其它,内存越大越好,客户机建立后,在配置中删除虚拟硬盘,然后添加硬盘设备,将刚分出的MAC分区选择上。
(4) 之后用记事本打开你的VM虚拟机下的.vmx配置文件,添加一行:paevm=true
之所以这样,是因为10.4.3版的Tiger要求CPU的PAE(Physical Address Extension)支持(用HWINF32可以查看),所以没有PAE的机子还是用VM安装。
(5) 之后启动VM,将DEAMON TOOL的光驱导入VM光驱中,启动安装。
如果出现 "Cannot load /com.apple.Boot.plist"这样的错误信息,可以在启动提示时按F8然后输入: 
代码: kernel=mach_kernel.xxx 
其中"xxx"对应不同的kernel(只针对下载Maxxuss的kernel)。
进入设置,选择你适合的内核设置,有如下几种内核选择:
      mach_kernel (默认): 同 mach_kernel.sse2 一样 
      mach_kernel.sse2: 支持 SSE2 CPUs, 需 NX/XD CPU 支持(在XP中可以打开控制面板-系统 -高级-数据执行保护,看你的CPU是不是支持DEP,支持DEP就有NX/XD) 
     mach_kernel.nonx: 支持 SSE2 CPUs, 不需要 NX/XD CPU 支持 
     mach_kernel.orig: 原来的内核, SSE3 CPUs 带 NX/XD 支持的 
(6) 在进入安装界面后,选择上面的disk utility,将要安装的分区(会突显)erase,然后安装就可以了。
之后就可以尽情享受了MAC了。
具体安装方法很多,大家可以用GOOGLE搜索一下!
有些骡友提了很多问题,确实很白
其实我懂的也不是太多,尽能力总结答复一下:
只有是SSE2 或 SSE3的机子,AMD的机子是兼容SSE2/SSE3的,也应该都是可以安装的。
MAC Tiger可以实体安装,也可以用VM模拟安装做客户机,在VM上安装时,要在.vmx配置文件上加上一行 "paevm=true" 。先将ISO文件导入Daemon Tools 虚拟光驱中, 不要用 VMWare CD/DVD 光盘驱动器模拟. 
实体刻盘安装,要机子支持PAE,所以还是建议在VM中安装,然后在实体中运行。
这个版本的MAC是至今为止,中文化程度最好的一个,性能的提升也是最好的。
MAC上的软件相当丰富,只要你努力去搜寻,因为MAC机本来是专于多媒体,所以这方面的软件很多。
这个补丁是第一版的,以后还会继续完善,只要能装上,以后升级补丁可以单独下,然后在MAC中打补丁也是一样的。
MAC系统不光是界面好,而且装在PC上启动运行也是相当快的,反正在我的本本上比XP要快,并不是像人所说的,装在PC上很慢。这个补丁包就是可以保证性能的! 
posted @ 2014-12-31 10:46 Eric_jiang 阅读(251) | 评论 (0)编辑 收藏

在英文输入法模式下:

0-9 对应的keyCode是 48-57

 

在中文输入法模式下:

数字和字母的按键,以及tab键的keyCode为229

回车的回车的 keyCode 为8

 

 

以后在JS中少用按键的keyCode来判断数字的输入

直接用String.fromCharCode的方法来获得输入的字符,然后进行正则表达式的判读

 

 

找到一种可以屏蔽复制,拖曳的方法,并且只能输入数字,而且使用能让输入法的框消失

  1. onkeypress="return event.keyCode>=48&&event.keyCode<=57||event.keyCode==46" onpaste="return !clipboardData.getData('text').match(//D/)" ondragenter="return false" style="ime-mode:Disabled"  
另外注意,小键盘的onKeyPress 和 onKeyDown的 keyCode是不一样的
posted @ 2014-12-31 10:11 Eric_jiang 阅读(351) | 评论 (1)编辑 收藏

Android SDK的tools目录下提供了一个sqlite3.exe工具,这是一个简单的sqlite数据库管理工具。开发者可以方便的使用其对sqlite数据库进行命令行的操作。

程序运行生成的*.db文件一般位于"/data/data/项目名(包括所处包名)/databases/*.db",因此要对数据库文件进行操作需要先找到数据库文件:

1、进入shell 命令

adb shell

2、找到数据库文件

#cd data/data #ls                --列出所有项目 #cd project_name   --进入所需项目名 #cd databases     #ls                --列出现寸的数据库文件

3、进入数据库

#sqlite3 test_db   --进入所需数据库

会出现类似如下字样:

SQLite version 3.6.22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>

至此,可对数据库进行操作。

 

4、sqlite常用命令

>.databases        --产看当前数据库 >.tables           --查看当前数据库中的表 >.help             --sqlite3帮助 >.schema            --各个表的生成语句
posted @ 2014-12-30 15:40 Eric_jiang 阅读(184) | 评论 (0)编辑 收藏

因CooCox用户数及影响力越来越大,CooCox团队也逐渐提高了对软件及代码协议的重视。在收集整理的过程中,一些归纳好的信息和大家分享一下。

首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
license.jpeg 

以下是上述协议的简单介绍:
BSD开源协议
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

    如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
    如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
    不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

Apache Licence 2.0
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

    需要给代码的用户一份Apache Licence
    如果你修改了代码,需要再被修改的文件中说明。
    在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
    如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
GPL

我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。

由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

LGPL
LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

MIT
MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.

MPL
MPL是The Mozilla Public License的简写,是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益。同著名的GPL许可证和BSD许可证相比,MPL在许多权利与义务的约定方面与它们相同(因为都是符合OSIA 认定的开源软件许可证)。但是,相比而言MPL还有以下几个显著的不同之处:

◆ MPL虽然要求对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享源代码。但是,在MPL 许可证中对“发布”的定义是“以源代码方式发布的文件”,这就意味着MPL允许一个企业在自己已有的源代码库上加一个接口,除了接口程序的源代码以MPL 许可证的形式对外许可外,源代码库中的源代码就可以不用MPL许可证的方式强制对外许可。这些,就为借鉴别人的源代码用做自己商业软件开发的行为留了一个豁口。
◆ MPL许可证第三条第7款中允许被许可人将经过MPL许可证获得的源代码同自己其他类型的代码混合得到自己的软件程序。
◆ 对软件专利的态度,MPL许可证不像GPL许可证那样明确表示反对软件专利,但是却明确要求源代码的提供者不能提供已经受专利保护的源代码(除非他本人是专利权人,并书面向公众免费许可这些源代码),也不能在将这些源代码以开放源代码许可证形式许可后再去申请与这些源代码有关的专利。
◆ 对源代码的定义
而在MPL(1.1版本)许可证中,对源代码的定义是:“源代码指的是对作品进行修改最优先择取的形式,它包括:所有模块的所有源程序,加上有关的接口的定义,加上控制可执行作品的安装和编译的‘原本’(原文为‘Script’),或者不是与初始源代码显著不同的源代码就是被源代码贡献者选择的从公共领域可以得到的程序代码。”
◆ MPL许可证第3条有专门的一款是关于对源代码修改进行描述的规定,就是要求所有再发布者都得有一个专门的文件就对源代码程序修改的时间和修改的方式有描述。
posted @ 2014-12-30 14:10 Eric_jiang 阅读(299) | 评论 (0)编辑 收藏

仅列出标题
共57页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 Last