Ubuntu 13.10 安装 PostgreSql 9.3

PostgreSql 9.3 增加了物化视图功能,但是Ubuntu自带的更新源只提供了 9.1 版本,去PostgreSql 官网看了一下,发现他们对于Ubuntu 只支持LTS版本,对于PPA软件源是不能自动安装的。

但是在http://wiki.postgresql.org/wiki/Apt 中提供了对于其他版本的手动配置功能

1.创建PPA文件

在vim 窗口中输入

2.手动装证书,如果不安装,会提示 “由于没有公钥,无法验证下列签名:NO_PUBKEY  ...”

3.命令行安装

4.安装插件支持,否则创建插件支持时候会报告

安装命令

5.安装 PostGIS

WordPress官方友情链接插件:Link Manager

WordPress官方从WordPress 3.5版本之后,把友情链接功能从核心从核心功能中删除了,这给升级的用户造成了困扰,在WordPress 3.5正式版发布之后,官方也第一时间推荐了一款友情链接插件:Link Manager。

插件使用非常简单,直接安装即可,在插件管理器中查找即可安装,使用这款插件之后,WordPress的友情链接功能又和之前一样了。

Mac OS X 10.9 使用 Hardware Accelerated Execution 之后死机问题

为了加速电脑上面的Android  模拟器,可以使用Intel Atom 模拟器,但是在升级到10.9 之后发生死机问题,开启到一半,电脑整个卡住。搜索了一下,需要到intel 下载针对 10.9 的补丁版本

下载地址为

http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager/

屏幕快照 2013-11-27 上午11.58.54注意 下载 Hotfix for OS X 10.9 only

Java程序执行超时——Future接口介绍

在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实 现,可以来进行异步计算。
Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时 间之后,我就便可以从Future那儿取出结果。就相当于下了一张订货单,一段时间后可以拿着提订单来提货,这期间可以干别的任何事情。其中Future 接口就是订货单,真正处理订单的是Executor类,它根据Future接口的要求来生产产品。
Future接口提供方法来检测任务是否被执行完,等待任务执行完获得结果,也可以设置任务执行的超时时间。这个设置超时的方法就是实现Java程 序执行超时的关键。
Future接口是一个泛型接口,严格的格式应该是Future,其中V代表了Future执行的任务返回值的类型。 Future接口的方法介绍如下:

  • boolean cancel (boolean mayInterruptIfRunning) 取消任务的执行。参数指定是否立即中断任务执行,或者等等任务结束
  • boolean isCancelled () 任务是否已经取消,任务正常完成前将其取消,则返回 true
  • boolean isDone () 任务是否已经完成。需要注意的是如果任务正常终止、异常或取消,都将返回true
  • V get () throws InterruptedException, ExecutionException 等待任务执行结束,然后获得V类型的结果。InterruptedException 线程被中断异常, ExecutionException任务执行异常,如果任务被取消,还会抛出CancellationException
  • V get (long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException 同上面的get功能一样,多了设置超时时间。参数timeout指定超时时间,uint指定时间的单位,在枚举类TimeUnit中有相关的定义。如果计 算超时,将抛出TimeoutException

Future的实现类有java.util.concurrent.FutureTask即 javax.swing.SwingWorker<t,v>。通常使用FutureTask来处理我们的任务。FutureTask类同时又 实现了Runnable接口,所以可以直接提交给Executor执行。使用FutureTask实现超时执行的代码如下:

不直接构造Future对象,也可以使用ExecutorService.submit方法来获得Future对象,submit方法即支持以 Callable接口类型,也支持Runnable接口作为参数,具有很大的灵活性。使用示例如下:

转自 http://westyi.iteye.com/blog/714935

proguard 代码混淆简介

  • proguard 原理

Java代码编译成二进制class 文件,这个class 文件也可以反编译成源代码 ,除了注释外,原来的code 基本都可以看到。为了防止重要code 被泄露,我们往往需要混淆(Obfuscation code , 也就是把方法,字段,包和类这些java 元素的名称改成无意义的名称,这样代码结构没有变化,还可以运行,但是想弄懂代码的架构却很难。 proguard 就是这样的混淆工具,它可以分析一组class 的结构,根据用户的配置,然后把这些class 文件的可以混淆java 元素名混淆掉。在分析class 的同时,他还有其他两个功能,删除无效代码(Shrinking 收缩),和代码进行优化 (Optimization Options)。
缺省情况下,proguard 会混淆所有代码,但是下面几种情况是不能改变java 元素的名称,否则就会这样就会导致程序出错。
一, 我们用到反射的地方。
二, 我们代码依赖于系统的接口,比如被系统代码调用的回调方法,这种情况最复杂。
三, 是我们的java 元素名称是在配置文件中配置好的。
所以使用proguard时,我们需要有个配置文件告诉proguard 那些java 元素是不能混淆的。

  • proguard 配置

最常用的配置选项
-dontwarn 缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类,没有正确引用。如果不配置的话,系统就会报错。
-keep 指定的类和类成员被保留作为 入口 。
-keepclassmembers 指定的类成员被保留。
-keepclasseswithmembers 指定的类和类成员被保留,假如指定的类成员存在的话。

  • proguard 问题和风险

代码混淆后虽然有混淆优化的好处,但是它往往也会带来如下的几点问题
1,混淆错误,用到第三方库的时候,必须告诉 proguard 不要检查,否则proguard 会报错。
2,运行错误,当code 不能混淆的时候,我们必须要正确配置,否则程序会运行出错,这种情况问题最多。
3,调试苦难,出错了,错误堆栈是混淆后的代码 ,自己也看不懂。

为了防止混淆出问题,你需要熟悉你所有的code ,系统的架构 ,以及系统和你code的集成的接口,并细心分析。 同时你必须需要一轮全面的测试。 所以混淆也还是有一定风险的。 为了避免风险,你可以只是混淆部分关键的代码,但是这样你的混淆的效果也会有所降低。

  • 常见的不能混淆的AndroidCode

Android 程序 ,下面这样代码混淆的时候要注意保留。
Android系统组件,系统组件有固定的方法被系统调用。
被Android Resource 文件引用到的。名字已经固定,也不能混淆,比如自定义的View 。
Android Parcelable ,需要使用android 序列化的。
其他Anroid 官方建议 不混淆的,如
android.app.backup.BackupAgentHelper
android.preference.Preference
com.android.vending.licensing.ILicensingService
Java序列化方法,系统序列化需要固定的方法。
枚举 ,系统需要处理枚举的固定方法。
本地方法,不能修改本地方法名
annotations 注释
数据库驱动
有些resource 文件
用到反射的地方

  • 如何实施

现在的系统已经配置为混淆时候会保留
Android系统组件
自定义View
Android Parcelable
Android R 文件
Android Parcelable
枚举
各个开发人员必须检查自己的code 是否用到反射 ,和其他不能混淆的地方

目前系统不检查的第三方库为

  • proguard 参数

  • 解决export打包的报错

这个时候export提示“conversion to Dalvik format failed with error 1”错误,网上说法有好多种,最后我还是把proguard从4.4升级到4.8就解决了。官方地址是http://proguard.sourceforge.net。上面的配置文件参数可以在这里查阅。
升级办法很简单,就是把android sdk目录下的tool/proguard目录覆盖一下即可。

  • 打包出来的程序如何调试

一旦打包出来,就不能用eclipse的logcat去看了,这里可以用android sdk中ddms.bat的tool来看,一用就发现和logcat其实还是一个东西,就是多了个设备的选择。

  • 使用 gson 需要的配置

当Gson用到了泛型就会有报错,这个真给郁闷了半天,提示“Missing type parameter”。最后找到一个资料给了一个解决办法,参考:http://stackoverflow.com/questio ... sing-type-parameter

增加如下配置

另外如果用到了JsonObject,上面给的东西还不够,还要加上
# 用到自己拼接的JsonObject

建议减少这些依赖包混淆带来的麻烦,干脆都全部保留不混淆。例如

使用libgdx需要的配置

参考http://code.google.com/p/libgdx-users/wiki/Ant

验证打包效果
利用了apktool的反编译工具,把打包文件又解压了看了一下,如果包路径、类名、变量名、方法名这些变化和你期望一致,那就OK了。命令:

  • 配置实例

使用Maven构建Struts2项目

1. 新建一个基本的Web项目

这和前面讲的是一样的,可以参考前面的博客

2. 添加Struts2依赖

这里主需要在pom.xml中添加一个struts-core的依赖即可:

之后,Maven会自动从网上下载struts2需要的其他依赖包,可以看一下这里:

1365857845_8824

3. 新建一个Action

struts.xml

web.xml

index.jsp

login.jsp

login_success.jsp

项目结构如下图所示:

1365858256_5114

使用Maven 构建 Servlet的例子

按照前面的 使用Maven构建Web项目 来创建一个Web项目,然后创建下面的例子

1.在src/main/java下,新建一个Servlet

 

2. 修改web.xml

3.修改pom.xml

 

4. 新建JSP

login.jsp

 

5. 测试

1365863970_1170

1365863980_8926

1365863994_9037

项目结构如下图所示:

1365864022_9970

参考

http://blog.csdn.net/yuguiyang1990/article/details/8797153

wordpress代码高亮插件Crayon Syntax Highlighter使用教程

如何安装?

在wp后台安装插件处,搜索Crayon Syntax Highlighter插件,你会看到一个满分的该插件,直接安装即可,wp会帮你下载并解压安装的。

如何设置?

在wp后台右边菜单栏 设置->Crayon 中,又该插件的详细设置选项。不懂的选项大家可以多试试。

如何使用?

使用方法与SyntaxHighlighter 类似,同样是在html编辑模式下,使用该类语言的标签,比如你的代码是C++,

[C++]

your code

[/C++](只是个例子)

代码效果:

相信这种方式还是比较简单吧。

如果你还嫌麻烦,那么请使用可视化模式下的工具吧,安装完Crayon后,可视化编辑第一行菜单最后一个是该插件的选项,你可以点击它,直接拷贝你想高亮的代码进入就可以了,效果如下图所示,可视化编辑,更方便了。

Crayon

参考

[WP插件]wordpress代码高亮插件Crayon Syntax Highlighter使用教程

使用Maven构建Web项目

参考 http://blog.csdn.net/yuguiyang1990/article/details/8796410

1.新建Maven项目

1.1 File -> New -> Other

1365863541_5385

1.2 选择Maven Project ,单击Next

1365863553_1351

1.3 保持默认即可,单击Next

1365863566_6467

1.4 选择Archetype为 web app,单击Next

1365863577_7171

1.5 输入一些必要信息,单击Finish

1365863587_8509

1.6 项目结构如下图:

1365863599_9491

或者如下图

在Mac下面的Eclipse Kepler中目录的位置有所变化

screenshot

2.配置项目(某些修改实际工作中用不到,以下仅供参考

现在开始修改一些配置

2.1 在项目上右键单击,添加Source Folder

Maven的项目有一些约定:src/main/java , src/main/resources , src/test/java , src/test/resources .那么,添加这些文件夹:(注意,创建文件夹有可能失败,比如Kepler 上面,此时,到目录下面直接创建文件夹然后刷新Eclipse项目就可以了

1365863613_2412

输入Source Folder 的名字

1365863628_6400

创建完之后的目录结构:

1365863640_6524

2.2 修改Build Path 配置

在项目上,右键单击,选择 Build Path ->Configure Build Path

1365863656_2376

选择 Source标签,会显示4个Source Folder ,修改他们的 OutPut folder :

1365863670_3566

双击每个文件夹的Output folder,选择路径

src/main/java,src/main/resources,选择target /classes;
src/test/java ,src/test/resources, 选择target/test-classes;

1365863682_6273

修改完成后如下图所示:

1365863693_6468

修改JDK版本:选择 libraries 标签,选中JRE library,单击Edit按钮

1365863704_4952

选择系统默认的就可以了,单击 Finish 按钮:

1365863729_2512

最后,单击OK即可:

1365863769_4461

完成后,项目结构如下图:

1365863781_4158

2.3 将项目转换为Dynamic Web Project

在项目上右键单击,选择 Properties:

1365863806_5537

在左侧选择 Project Facets,单击右侧的 ”Convert faceted from “链接:

1365863817_6166

修改Java为你当前项目的JDK,并添加Dynamic Web Module ,最后单击”Further Configuration available“ 链接:

1365863830_6294

修改Content directory 为 src/main/webapp ,单击OK:

1365863840_2584

在一次单击OK,完成操作:

1365863853_7859

2.4 设置部署程序集(Web Deployment Assembly)

在项目上右键单击,选择Properties,在左侧选择Deployment Assembly

1365863864_8268

此处列表是,部署项目时,文件发布的路径。
1,我们删除test的两项,因为test是测试使用,并不需要部署。
2,设置将Maven的jar包发布到lib下。
Add -> Java Build Path Entries -> Maven Dependencies -> Finish
设置完成效果图
1365863878_5803

单击OK

完成后,项目结构如下图所示:

1365863887_1279

就这样,使用Maven构建的一个Web项目就完成了。

Linux SVN提交时强制写日志

SVN默认可以不写注释提交,有时候可能忘记写注释,有的人也没有写注释的习惯,导致翻看history的时候都不知道做了哪些更改,可以依照以下步骤修改SVN配置,强制提交SVN前写注释

步骤:

1.进入svn/code/hooks目录,在svn版本库的hooks文件夹下面,复制模版pre-commit.tmpl

2.编辑pre-commit文件:

上面这几行注释掉(前面加#符号),在此位置添加如下几行: