博文

Install tomcat in ubuntu

1) Find a correct tomcat package to install sudo apt-cache search tomcat 2) Install all Tomcat package with following command sudo apt-get install tomcat5.5-webapps sudo apt-get install tomcat5.5-admin sudo apt-get install tomcat5.5 3) Done apt-get help Ubuntu to configure almost everything and create a script put inside init .d folder for Tomcat auto startup script. we can start/stop/restart Tomcat with following command /etc/init.d/tomcat5.5 start /etc/init.d/tomcat5.5 stop /etc/init.d/tomcat5.5 restart apt-get help to create a share folder in /usr/share also, please access cd /usr/share/tomcat5.5 and issue a ls -lh in /usr/share/tomcat5.5 to find out the rest of the Tomcat location. drwxr-xr-x bin drwxr-xr-x common lrwxrwxrwx conf -> /etc/tomcat5.5 lrwxrwxrwx doc -> ../doc/tomcat5.5 lrwxrwxrwx logs -> /var/lib/tomcat5.5/logs drwxr-xr-x server lrwxrwxrwx shared -> /var/lib/tomcat5.5/shared lrwxrwxrwx temp -> /var/lib/tomcat5.5/temp lrwxrwxr...

Centralized Priority-Widget Engine linux

Keywords: widget Develop HTML widgets with Dojo: http://www.ibm.com/developerworks/edu/wa-dw-wa-dojowidgets.html http://dojocampus.org/explorer/#Dojo_Data Which engine is the best to develop a widget for? http://www.widgipedia.com/forum/read.php?16,276,342 Develop Widgets: http://blog.auinteractive.com/learn-to-develop-widgets Keywords: widget engine All in one: http://en.wikipedia.org/wiki/Widget_engine Keywords: widget engine linux http://linux4world.blogspot.com/2007/10/top-8-widget-engines-for-linux-platform.html http://alp.access-company.com/files/ACCESS_WP_Force_2009-02-11.pdf http://www.kryogenix.org/days/2006/01/22/jackfield-apples-dashboard-for-the-linux-gnome-desktop adobe AIR : http://www.adobe.com/products/air/ Keywords: multi-monitor http://en.wikipedia.org/wiki/Multi-monitor products and adaptor: http://www.multi-monitors.com/SUPER_PC_Multi_Monitor_Adapters_USB_VGA_Matrox_Head2Go_s/22.htm xWindow system: http://en...

Class.forName用途及与new辨析

Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。 至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方法了,不过要再加一点。 A a = (A)Class.forName("pacage.A").newInstance(); 这和你 A a = new A(); 是一样的效果。 关于补充的问题 答案是肯定的,jvm会执行静态代码段,你要记住一个概念,静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。 Class.forName(xxx.xx.xx) 返回的是一个类 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段 动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象 String str = 用户输入的字符串 Class t = Class.forName(str); t.newInstance(); 在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的 区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用 等软件设计思想。 Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如: class c = Class.forName(“Example”); factory = (ExampleInterface)c.newInstance(); 其中ExampleInterface是Example的接口,可以写成如下形式: String className = "Example"; class c = Class.forName(className); factory = (ExampleInterface)c.newInstance(...

拜占庭将军问题 The Byzantine Generals Problem

拜占庭帝国就是5~15世纪的东罗马帝国,拜占庭即现在土耳其的伊斯坦布尔。我们可以想象,拜占庭军队有许多分支,驻扎在敌人城外,每一分支由各自 的将军指挥。将军们只能靠通讯员进行通讯。在观察了敌人以后,忠诚的将军们必须制订一个统一的行动计划——进攻或者撤退。然而,这些将军中有叛徒,他们不 希望忠诚的将军们能达成一致,因而影响统一行动计划的制订与传播。问题是:将军们必须有一个协议,使所有忠诚的将军们能够达成一致,而且少数几个叛徒不能 使忠诚的将军们做出错误的计划——使有些将军进攻而另一些将军撤退了。 抽象出来,可以表述成: 拜占庭将军问题 :设计一个协议,一个司令要送一个命令给他的n-1个副官,使得 IC1. 所有忠诚的副官遵守同一个命令。 IC2. 假如司令是忠诚的,则每一个忠诚的副官遵守他送出的该命令。 约定:忠诚的将军将遵守协议,而叛徒则可能破坏协议,尽可能的干绕其它人的判断。叛徒是匿名的。而且最后不需要确定谁是叛徒。 注意司令也有可能是叛徒,所以IC2与IC1是不同的。 递归设计协议OM(n, m)为 OM(n, 0): 司令发送命令给所有副官。 副官按照接收到的命令行事。 OM(n, m): 司令发送命令给所有副官,设副官i收到命令vi。 分为独立的n-1轮:对每个副官i,将其视为司令,使用协议A(n-1, m-1)将vi发送到所有其它副官。 这样每个副官都收到n-1条信息,每个副官都按照出现次数更多的命令行事(如果进攻和撤退的命令一样多,则默认取撤退)。 递归证明 引理:当n>2m+k,n个将军中至多k个叛徒,协议A(n, m)满足IC2,即司令是忠诚的,每个忠诚的副官将会执行司令的命令。 进而说明: 当n>3m时,n个将军,且至多m个叛徒,协议A(n, m)可以同时满足IC1和IC2。 更深刻的结论: 当n<=3m时,n个将军中的m个叛徒可以让将军们无法达成一致,也就是满足IC1和IC2的协议不可能存在。 参考: The Byzantine Generals Problem , the first paper involved 可信计算VII:拜占庭将军问题 Byzantine failure -- Wikipedia, the free encyclopedia

Java地址传递引用传递辨析

在Java中方法参数的传递,对象是传递引用,基本数据类型是传递值。而且一直一来都似乎没有人提出过疑问。 直到最近,才发现,这错了!在方法中,Java语言中对象传递的是地址,而不是引用,这两个概念是有非常大的差别的,我相信熟悉c++的人都应该知道。 例如下面:假设对象Test有name的属性。 public void call(Test t) { Test t2 = new Test(); t2.setName("cba'); t.setName("abc"); t = t2 ; } public static void main(String[] arg) { Test obj = new Test(); call (obj) ; System.out.println("obj"+obj.getName()); } 这 个时候,你们可以发现,打印出来的是"abc" ,而不是"cba",原因是这样的,在这次调用中,等于声明了两个变量obj , t,它们指向的是同一个地址,调用call方法,只是将obj指向的地址传递给了t,而obj本身并没有传递过去(也就是没有传递引用),当你重新赋值的 时候(也就是将对象引用指向其他存储空间),等于只影响了t,而没有影响obj。 这样的传递方式只能称之为址传递,或者是引用对象传递,而不嫩说是传递引用或者引用传递。 我不知道这究竟属于翻译的错误,还是我们理解的错误。但是这样的问题在c++中是有明显的区分的(通过*与&) 通过以下测试: public class Test{ String name; public void call(Test t) { Test t2 = new Test(); t2.setName("cba"); //t.setName("uuu"); //这两个测试了t是地址传递,不是引用传递。 t = t2 ; //t.setName("uuu"); //这两个测试了t是地址传递,不是引用传递 } public void setName(String n){this.name=n;} public String getname(){ ...

(转)NP&NP-Complete

你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实 都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已 经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。接下来你可以看到,把NP问题当成是 NPC问题是一个多大的错误。 还是先用几句话简单说明一下时间复杂度。时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多 快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间 是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复 杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插 入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复 杂度,甚至O(n!)的阶乘级复杂度。不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。同样地,O (n^3+n^2)的复杂度也就是O(n^3)的复杂度。因此,我们会说,一个O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,尽管 在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n^3)的复杂度将远远超过O(n^2)。我们也说,O(n^100)的复杂度小 于O(1.01^n)的复杂度。 容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(n^a)等,我们把它 叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当 我们在解决一个问题时,我们选择的算法通常都...

Java jar with package

First, create a txt file called manifest.txt in the same folder as the .class file . Then type Main-Class: ExhaustiveSearch 1)note that myClass not myClass 2)note that after myClass there is a new line 3)note if this class, say ExhaustiveSearch is in a package, then the manifest.txt must be in the package folder , then type in Main-Class: exhaustive/ExhaustiveSearch Second, jar class file and manifest file with jar -cvmf manifest.txt app1.jar *.class or jar -cvmf manifest.txt app1.jar ExhaustiveSearch.class 1)note that if ExhaustiveSearch.class is in a package (not mean folder, although in the file system a package is represent as a folder), then you must jar them outside the package (because then you can jar the package together). 2) for example in path E:\java_workspace\Knapsack\bin\exhaustive\ExhaustiveSearch.class when you want to jar this, you have to create manifest.txt in folder bin. Then you type jar -cvmf manifest.txt app1.jar exhaustive/ExhaustiveSearch.clas...