利用Java获取网络标准时间

import java.net.*;
import java.io.*;
public class DaytimeClient
{
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		String[] hostname = new String[]{"", "time.windows.com","time.nist.gov","time-nw.nist.gov","time-a.nist.gov","time-b.nist.gov"};
		int i = 1;
		boolean RecvFlag = false;
		if(args.length > 0)
		{
			hostname[0] = args[0];
			i = 0;
		}
		while(i <=5 && !RecvFlag)
		{
			try
			{
				Socket timeSocket = new Socket(hostname[i], 13);
				InputStream timeStream = timeSocket.getInputStream();
				StringBuffer time = new StringBuffer();
				int c;
				while((c=timeStream.read()) != -1)
					time.append((char)c);
				String timeString = time.toString().trim();
				System.out.println("It is " + timeString +" at " + hostname[i] +" on port " + timeSocket.getPort());
				RecvFlag = true;
				timeSocket.close();
			}
			catch(UnknownHostException e)
			{
				System.out.println("Failed to get the information from " + hostname[i]);
				System.out.println(e);
				i++;
			}
			catch(Exception e)
			{
				System.out.println("Failed to get the information from " + hostname[i]);
				System.out.println(e);
				i++;
			}
		}
		if(i == 6)
			System.out.println("Failed to get the information please check your network settings.");
		else
			System.out.println("Complete.");
	}
}

JavaApplet程序编译注意事项

首先附上一JavaApplet的Helloworld程序,及在html中的嵌入代码:
源代码路径:JavaAppletsrcHelloworld.java
JavaAppletbinJavaTest.html

import java.awt.*;
import java.applet.*;
public class HelloWorld extends Applet
{
	public void paint(Graphics g)
	{
		g.drawString("Hello World!", 5, 35);
	}
}
<HTML>
<HEAD><TITLE>JavaApplet-Text</TITLE></HEAD>
<BODY>
<applet code = "HelloWorld.class" width = 200 height = 200></applet>
</BODY>
</HTML>

要使上述代码正常运行要注意以下几点:
1、Helloworld.java编译成功后会在…bin中生成Helloworld.class文件,要将html文件同class文件放在同一目录下。若不在同一目录,则要在html中加入”codebase”代码,即

<applet code = "HelloWorld.class" codebase= "location" width = 200 height = 200></applet>

2、确保Java是最新版
3、在控制面板->程序->Java->安全设置中,把安全等级调到最低
4、不要为Helloworld创建包(package),否则要在html中指定包名。P.S.目前DS还不会指定包名=。=!

MC中水方块的分析

最近玩《我的世界》(MineCraft)发现了一个有趣的现象:一桶水引发了一场山洪

先详细讲一下这个有趣的现象。本人打了一桶水上山,然后直接把水倒在了平地上,注意是平地,紧接着这个“水方块”就像一个泉眼一样产生水流并以最短的路径一路向山下流去,源源不断,直至流到山脚,沿途淹没了山腰上的一切,一切……

出于好奇,本人又做了众多试验,基本搞清楚了这种BUG现象形成的原因。

首先,我们做一些基本的猜想。MC是用Java这种面向对象的语言编写而成,故我猜想MC中每个“方块”都从属一个基类,该类至少包含了以下成员:位置坐标(应该是三维坐标)。然后“水方块”是这个基类下的一个派生类。那么“水方块”这个派生类究竟有哪些(函数)成员,导致了这个有趣的现象呢?下面根据实验我们一步步的分析。

实验一:取水。

不是所有的水都可以用水桶取到的,只有哪些“不流动的水”(以下简称“静水”)可以被水桶取到,而那些”流动的水“(以下简称”流水“)不能被取到。故这里总结猜想出:只有”静水“是”水方块“派生类的对象,具有该类的全部功能,而”流水“只是附在其他派生类,如:岩石,土,砖等的一个函数,其伪代码描述为:如果方块周围有”静水“,且”静水“的高度大于本方块的高度,本方块显示出”流水“状态(后面简称”流水效应“);水桶只能取到“静水”,也就是“水方块”类中由函数:水桶空+右键点击=水桶满+水方块消失。

实验二:超平坦地面上倒水。

在一块超平坦的地面上倒一块”静水“(不要吐槽我用的量词!),发现”流水效应”是有范围的,范围是“静水”周围7格(按路径算,斜线算直角边的格数),并且“流水”的高度是递减的。故上面说到的“流水效应”函数完善如下:增加一个变量:流水强度。且净水的流水强度为8,依次递减1。如果方块周围的方块(取流水强度大的)流水强度大于1,本方块显示出”流水“状态,且流水强度减一。

实验三: 一阶高度倒水。

在“流水效应”范围内存在高度变化(本实验中为一阶),出现了两个现象:一、“流水效应”不再是盲目地向四周扩散,而是仅向梯度下降最快的方向流,如果有多个方向下降率相等,则向这几个方向均有流水。二、流下去后,由于没有进一步的梯度,流水发生扩散,且以流下点为中心,周围7格扩散。至此函数业已很复杂,不给予伪代码描述(Hamilton~help me~),请读者自行体会。

从上面3个实验及总结看出,如果山够陡,即梯度变化发生在“流水效应”范围内,那么发生山洪是必然的。大家可以根据这几个特点,做些小利用~

实验四:验证性试验,多阶梯度倒水

验证了之前的结论。

MC还有更多的好玩的现象,大家继续发现总结。

VHDL中整形变量转换为标准逻辑变量应注意的问题

VHDL中的数据转换函数conv_std_logic_vector的用法

std_logic_arith程序包里定义的数据转换函数:conv_std_logic_vector(int_var,bit_len)–INTEGER,SINGER,UNSIGNED转换成std_logic_vector

由于参考书上都没有具体说明,本以为是将原来的数据类型按位矢量输出,结果按这种用法编写的滤波器在接实际信号时,却使用输出图像全部反色,经modelsim波形仿真之后,才发现滤波器结构是正确的,可是调用了转换函数之后,结果非预期效果。

对该转换函数做了测试之后,才发现:该函数的转换结果是将被转换的数据先转换成2进制补码形式,然后取其低“位长”,作为输出。

如:a<=conv_std_logic_vector(-79,6)—-(-79)2c=(10110001)

b<=conv_std_logic_vector(-2,6)—–(-2)2c=(11111110)

c<=conv_std_logic_vector(100,6)—–(100)2c=(01100100)

输出结果:a=110001,b=111110,c=100100