ZOJ System Upgraded

前几天访问ZOJ的时候无法访问,今天再次访问ZOJ的时候发现ZOJ已经升级了,并且将网站移到了一个新的onlinejudge目录下,之前ZOJ所使用的UI是PHP写的,从升级后页面的后缀来看使用的 JSP开发的,跟之前在浙大参加省赛时所见到的界面一样,可能是同一个。至于内核是否有所改善不得而知,从代码的提交页来看,目前仍只支持C、C++、 Pascal三种语言,似乎这次升级并只是界面上的改变,并不涉及判题的核心部分。但是对于多年来ZOJ不能保存Cookie这一点来说,这次升级改善了很多地方,最值得期待的就是一次登录认证后不需要每次提交代码都得输入用户名密码,不过我还是希望ZOJ保留以前那种提交时输入用户名密码的接口,以便于一些第三方工具可以向服务器提交代码。从ZJU发布的公告来看,这次升级不仅是系统的升级,还更换了新的服务器。但从我目前的体验来看,并没有感觉到速度的提高,与之相关的是服务器目前极其不稳定,时常会遇到临时不可用的情况。
-EOF-

为GAE添加 Favicon.ico和robots.txt

将robots.txt及favicon.ico文件放到static目录下,并在app.yaml文件中添加如下代码即可。

1
2
3
- url: /(robots.txt|favicon.ico)
  static_files: static/\1
  upload: static/(robots.txt|favicon.ico)

或者你可以按照这个方式i添加。
-EOF-

Google App Engine 开发控制台

一直都在想在开发Google App Engine程序的时候怎么才能像Administration Console中的Data Viewer一样查看到本地数据的存储情况,今天在胡搞的时候发现原来Google App Engine SDK中自带了一个Development Console,其中包含Datastore Viewer和Interactive Console两个小工具。Datastore Viewer与Data Viewer类似,但是要Viewer的Entity Kind名称需要自己手工填写,而不是像管理员控制台中通过下拉菜单选择,并且不能使用GQL语言来查询,当然,稍加完善即可做得像管理员控制台中一样的功能,说不定Google会在以后的某一个SDK更新版本中提供相似的功能呢。而Interactive Console则是管理员控制台中没有的,但它其实与Sample App Code中的shell类似,通过Web界面直接在服务器上运行Python代码,并且它比shell高级了些,可以运行一小段程序,而不只是单单的一句。但是它目前也有个小BUG,只能在IE(6?7?)下工作,如果提交的代码出错的话,在FF及Chrome不能显示Traceback信息(没对该部分信息传输进行headers指定的缘故)。
我将该Administration Console代码冲SDK中分离了出来,可以作为独立APP运行,点此下载
-EOF-

JAVA求素数算法实现

尽管求素数在程序设计里面是基础的基础,但是对于一些初学者来说还是很难,而这类问题不管是面向对象语言还是面向过程语言的实现方法大至都是相同的,我这里写了JAVA语言的实现,供参考。
一般的求素数算法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Prime {
 
	/**
	 * 一般求素数方法
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		for (int i = 2; i < 100; i++) {
			int j;
			for (j = 2; j < (int) (Math.sqrt(i) + 1); j++)
 
			{
				if (i % j == 0) {
					break;
				}
			}
 
			if (j > (int) Math.sqrt(i)) {
				System.out.print(i + " ");
			}
		}
 
	}
 
}

筛法求素数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Prime2 {
 
	/**
	 * 筛法求素数
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 100;
		int[] array = new int[n];
		for (int i = 2; i < n; i++)
			array[i] = i;
		for (int i = 2; i < n; i++) {
			if (array[i] != 0) {
				int j, temp;
				temp = array[i];
				for (j = 2 * temp; j < n; j = j + temp) {
					array[j] = 0;
				}
			}
		}
		for (int i = 0; i < n; i++) {
			if (array[i] != 0) {
				System.out.print(i + " ");
			}
		}
 
	}
 
}

-EOF-

用 notepad2替换系统的notepad

微软自带的notepad固然小巧,但是在很多时候都太局限,比如说没有代码高亮,没有行号。notepad2也同样小巧,但是更强大,因此用它替换系统的记事本是个不错的选择,在http://sourceforge.net下载notepad2后,更名notepad.exe,安装下面的顺序替换系统的notepad文件即可。

1
2
3
c:\windows\system32\dllcache
c:\windows\system32\
c:\windows\

为了方便起见,我们可以新建一个bat文件,内容为:

1
2
3
copy notepad.exe C:\windows\notepad.exe 
copy notepad.exe C:\windows\system32\notepad.exe 
copy notepad.exe C:\windows\system32\dllcache\notepad.exe

将bat文件与Notepad2放在同一个文件夹,双击运行即可。

注意:系统会弹出“Windows文件保护”提示窗口,请选择”取消”,保留文件即可。
-EOF-