星期一, 五月 08, 2006

Mathematica 如何异步输出图象?

参数DisplayFunction(显示函数)
该参数决定图形的显示与否,当取值为Identity 时,图形不显示出来.
当取值为$DisplayFunction时恢复图形的显示.
1、 图形的组合显示函数Show

Plot的作用可以同时在同一坐标系的同一区间内作出不同函数的图像,但有时需要在同一坐标系的不同区间作出不同函数的图像,或者在同一坐标系作一个函数而要求函数的各个部分具有不同的形态(像分段函数),这个时候就需要使用Show函数.

实验13 在同一坐标系中作出y=ex和y=lnx的图像,并说明它们的图像关于直线y=x对称.
输入:
a=Plot[Exp[x],{x,-2,2},AspectRatio->Automatic,PlotStyle->RGBColor[0,1,0],
DisplayFunction->Identity]
b=Plot[Log[x],{x,0.3,3},AspectRatio->Automatic,PlotStyle->RGBColor[1,0,0],
DisplayFunction->Identity]
c=Plot[x,{x,-2,2},AspectRatio->Automatic,PlotStyle->Dashing[{0.09,0.04}],
DisplayFunction->Identity]
Show[a,b,c,DisplayFunction?$DisplayFunction]

如何设置Mathematica 5 的绘画参数?

Plot[Sin[x], {x, 0, 2Pi}, PlotStyle -> {RGBColor[1,
0, 0], Dashing[{0.03, 0.07}]}
]

星期日, 五月 07, 2006

巧用java来计算对数

巧用java来计算对数

毫无疑问,Java可以计算对数,然而在API中却有惊人的误差。但是如果运用了以下的方法,用Java处理数字所遇到的小麻烦就可以轻而易举的解决了。
  Sun的J2SE提供了一个单一的对数方法??double java.lang.Math.log(double),这很容易使用。请看如下代码:
  double x = Math.log(5);
  等价于下面的数学方程:
  x = ln 5
  或
  x = loge5
  其中e是内皮尔数或自然数。
  如果你想算底不同的对数又该如何做呢?很遗憾,我们还没有办法计算以10为底或以2为底的对数。但是它们却是在计算对数时用的最多的。要想解决这个问题,我们就要回想曾经在学校里学过的数学和对数方程:
  logx(y) =loge(x) / loge(y)
  这只需一段简单的Java程序来实现:
  package com.generationjava.math;
  public class Logarithm {
   static public double log(double value, double base) {
   return Math.log(value) / Math.log(base);
   }
  }
  计算100的以10为底的对数就变为非常简单了:
  double log = Logarithm.log(100, 10); // log is 2.0
  512的以2为底的对数是:
  double log = Logarithm.log(512, 2); // log is 9.0
  下面的两个简单的方法也都是很有用的:
  static public double log2(double value) {
   return log(value, 2.0);
   }
   static public double log10(double value) {
   return log(value, 10.0);
   }

星期二, 五月 02, 2006

Oscar Wilde 王?德 CSI said

http://www.brainyquote.com/quotes/quotes/o/oscarwilde117770.html

野心是失败者最后的庇护所
Ambition is the last refuge of the failure.

星期六, 四月 29, 2006

Fedora 5.0 有关NTFS及FAT文件系统的挂载

1、自己安装时,NTFS内核模块的版本判断及软件包的安装;

首先我们要安装NTFS的内核模块,一种是在线升级,另外一种是下载安装,当然也得与自己的内核相对应才行;

1..1 确立内核版本及下载说明;

[root@localhost beinan]# uname -p -r
2.6.15-1.2054_FC5 i686

如果您是下载内核的模块,应该看好内核版本,上面显示的是内核版本是2.6.15-1.2054_FC5 ,并且是i686的;

下载地址: http://www.linux-ntfs.org/content/view/157/83/

注意:在这页上有好多的版本,比如有smp的,这是多处理器的;有x86_64的,这是64位的CPU的,除非您用的是64位机器的,否则没有必要;

根据上面uname -p -r的输出,我下载了 kernel-module-ntfs-2.6.15-1.2054_FC5-2.1.26-0.rr.10.4.i686.rpm 软件包;


1..2 安装;

您可以点鼠标安装,也可以用命令安装

#rpm -ivh kernel-module-ntfs-*.rpm

星期四, 四月 27, 2006

Python打开文件,接受命令行

# -*- coding: UTF-8 -*-
import os
import sys
import traceback
if len(sys.argv)<2:
print "参数0",sys.argv[0]
print " 必须输入参数"
sys.exit(0)
try:
name =sys.argv[1]
if os.path.exists(name):
input = open(name,'r')
for line in input:
print line,
except Exception,e:
print traceback.print_exc()

星期三, 四月 26, 2006

Python 异常 处理小tips.

# -*- coding: UTF-8 -*-
import traceback
try:
print 1/0
except Exception,e:
print "异常",e
traceback.print_exc()

python 实现一个http client

import sys
import socket
Host="10.2.5.240"
Port=80
mysocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM);
mysocket.connect((Host,Port))
#mysocket.send("HTTP/1.1\n\r");
mysocket.send("GET /ehrm/ HTTP/1.1\n\rHost:10.2.5.34\n\r\n\r");
length=0;
while 1:
text = mysocket.recv(2048)
if not text:
break
print text
length=length+len(text)
print "读取了",length,"字节"
mysocket.close();

Python 函数注释的有趣功能

我们可以给一个函数加上功能说明。
允许用户在使用的时候,可以查看说明
语法: print 函数名.__doc__(注意是两个下画线连起来)
def test():
*** this is a test function
***

星期五, 四月 21, 2006

XP 命令行符号

Syntax : Redirection

   command  >  filename       Redirect command output to a file

command >> filename APPEND into a file

command < filename Type a text file and pass the text to command

commandA | commandB Pipe the output from commandA into commandB

command & command Perform the first command & then perform the second

command 2> filename Redirect any error message into a file

command 2> nul Redirect any error message to NUL

(command) 2> filename Redirect any CMD error into a file

command > fileA 2> fileB Redirect output and errors to separate files

command > file 2> nul Redirect output to a file and suppress any error

(command) > file 2> nul Redirect output to a file and suppress any CMD error

command > file 2>&1 Redirect output and errors to one file

command 2>&1 >filename This will fail!

XP 命令行超级工具

WMIC
Q.得到当前系统运行的所有进程。
WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid

or

WMIC /OUTPUT:C:\ProcessList.txt path win32_process get Caption,Processid,Commandline
或者 tasklist.exe /V得到详细信息。

如果想杀掉一个进程:taskkilll /PID #进程号# 或你知道程序的名字 taskkill /F /IM notepad.exe

星期二, 四月 04, 2006

如何用CSS来改变鼠标的光标形状?

手形 
十字 
文本光标 
等待 
默认 
问号 
左右箭头 
上下箭头 
系统自动给出效果

星期三, 三月 29, 2006

Linux终端输入汉字,保存出现错误.

只需要
1.export LANG=zh
或者
2.export LC_CTYPE=iso-8859-1

vim使用语法加亮 syntax enable

1* 功能激活

一切从一个简单的命令开始:

:syntax enable

大多数情况下,这会让你的文件带上颜色。Vim 会自动检测文件的类型,并调用合适的
语法加亮。一下子注释变成蓝色,关键字变成褐色,而字符串变成红色了。这使你可以
很容易浏览整个文档。很快你就会发现,黑白的文本真的会降低你的效率!

如果你希望总能看到语法加亮,把 "syntax enable" 命令加入到 |vimrc| 文件中。
在当前用户home目录下touch vimrc 然后在里面加入syntax enable 语法

如果你想语法加亮只在支持色彩的终端中生效,你可以在 |vimrc| 文件中这样写:

if &t_Co > 1
syntax enable
endif


如果你只想在 GUI 版本中有效,可以把 ":syntax enable" 放到你的 |gvimrc| 文件中。

2* 颜色显示不出来或者显示出错误的颜色怎么办?

有很多因素会让你看不到颜色:

- 你的终端不支持彩色。
这种情况下,Vim 会用粗体,斜体和下划线区分不同文字,但这不好看。你可能
会希望找一个支持彩色的终端。对于 Unix,我推荐 XFree86 项目的 xterm:
|xfree-xterm|。
- 你的终端其实支持颜色,可是 Vim 不知道
确保你的 $TERM 设置正确。例如,当你使用一个支持彩色的 xterm 终端:

setenv TERM xterm-color

如果是Linux 在当前用户目录下.bash_profile或/etc/bashrc里加入
TERM=xterm-color
export TERM



TERM=xterm-color; export TREM

终端名必须与你使用的终端一致。如果这还是不行,参考一下 |xterm-color|,
那里介绍了一些使 Vim 显示彩色的方法(不仅是 xterm )。

- 文件类型无法识别
Vim 不可能识别所有文件,而且有时很难说一个文件是什么类型的。试一下这个
命令:

:set filetype
.
如果结果是 "filetype=",那么问题就是出在文件类型上了。你可以手工指定
文件类型:

:set filetype=fortran

要知道那些类型是有效的,查看一下 $VIMRUNTIME/syntax 目录。对于 GUI 版本,
你还可以使用 Syntax 菜单。设置文件类型也可以通过 |modeline|,这样,
在你每次编辑它的时候都执行语法加亮。例如,下面这一行可以用
于 Makefile(把它放在接近文首和文末的地方)

# vim: syntax=make

你可能知道怎么检测自己的文件类型,通常是文件的扩展名(就是点后面的
内容)参见 |new-filetype| 可以知道如何告诉 Vim 如何检查一种文件类型。

- 你的文件类型没有语法高亮定义
你可以找一个相似的文件类型并人工设置为那种类型。如果你觉得不好,你可以
自己写一个,参见 |mysyntaxfile|。


或者颜色是错的:

- 彩色的文字难以辨认
Vim 自动猜测你使用的背景色。如果是黑的(或者其它深色的色彩),它会
用浅色作为前景色。如果是白的(或者其它浅色),它会使用深色作为前景
色。如果 Vim 猜错了,文字就很难认了。要解决这个问题,设置一下
'background' 选项。对于深色:

:set background=dark

而对于浅色:

:set background=light

这两个命令必须在 ":syntax enable" 命令前调用,否则不起作用。如果要在
这之后设置背景,可以再调用一下 ":syntax reset"。

- 在自下往上滚屏的过程中颜色显示不对。
Vim 在分析文本的时候不对整个文件进行处理,它只分析你要显示的部分。这
样能省不少时间,但也会因此带来错误。一个简单的修正方法是敲 CTRL-L。
或者往回滚动一下再回来。要彻底解决这个问题,请参见 |:syn-sync|。有些
语法定义文件有办法自己找到前面的内容,这可以参见相应的语法定义文件。
例如,|tex.vim| 中可以查到 Tex 语法定义。


3* 使用不同颜色

*:syn-default-override*

如果你不喜欢默认的颜色方案,你可以选另一个配色方案。在 GUI 版本中可以使用
Edit/Color 菜单。你也可以使用这个命令:

:colorscheme evening

"evening" 是配色方案的名称。还有几种备选方案可以试一下。在 $VIMRUNTIME/colors
中可以找到这些方案。

等你确定了一种喜欢配色方案,可以把 ":colorscheme" 命令加到你的 |vimrc| 文件中。

你可以自己编写配色方案,下方如下法面:

1. 选择一种接近你的理想的配色方案。把这个文件拷贝到你自己的 Vim 目录中。在 Unix
下,可以这样:

!mkdir ~/.vim/colors
!cp $VIMRUNTIME/colors/morning.vim ~/.vim/colors/mine.vim

在 Vim 中完成的好处是可以利用 $VIMRUNTIME 变量。

2. 编辑这个配色方案,常用的有下面的这些条目:

term 黑白终端的属性
cterm 彩色终端的属性
ctermfg 彩色终端的前景色
ctermbg 彩色终端的背景色
gui GUI 版本属性
guifg GUI 版本的前景色
guibg GUI 版本的背景色

例如,要用绿色显示注释:

:highlight Comment ctermfg=green guifg=green

属性是 "bold"(粗体)和 "underline" (下划线)可以用于 "cterm" 和 "gui"。
如果你两个都想用,可以用"bond,underline"。要获得详细信息, 请参考
|:highlight| 命令。

3. 告诉 Vim 总使用你这个配色方案。把如下语句加入你的 |vimrc| 中:

colorscheme mine

如果你要测试一下常用的配色组合,用如下命令:

:edit $VIMRUNTIME/syntax/colortest.vim
:source %

这样你会看到不同的颜色组合。你可以很容易的看到哪一种可读性好而且漂亮。


4* 是否使用色彩

使用色彩显示文本会影响效率。如果你觉得显示得很慢,可以临时关掉这个功能:

:syntax clear

当你开始编辑另一个文件(或者同一个文件),色彩会重新生效。

*:syn-off*
如果你要完全关闭这个功能:

:syntax off

这个命令会停止对所有缓冲的所有语法加亮。

*:syn-manual*
如果你想只对特定的文件采使用语法加亮,可以使用这个命令:

:syntax manual

这个命令激活语法加亮功能,但不会在你开始编辑一个缓冲时自动生效(译者注:Vim
中,每个被打开的文件对应一个缓冲,后面的章节中你会接触到这方面的内容)。要在当
前缓冲中使用加亮,需要设置'syntax'选项:

:set syntax=ON


5* 带颜色打印

*syntax-printing*

在 MS-Windows 版本中,你可以用如下命令打印当前文件:

:hardcopy

这个命令会启动一个常见的打印对话框,你可以通过它选择打印机并作一些必要的设置。
如果你使用的是彩色打印机,那么打印出来的色彩将与你在 Vim 中看到的一样。但如果
你使用的是深色的背景,它的颜色会被适当调整,以便在白色地打印纸上看起来比较舒
服。

下面几个选项可以改变 Vim 的打印行为:
'printdevice'
'printheader'
'printfont'
'printoptions'

要仅打印一定范围内的行,可以用可视模式选择需要打印的行在执行打印命令,例如:

v100j:hardcopy

"v" 启动可视模式,"100j" 向下选中100行,然后执行 ":hardcopy" 打印这些行。当
然,你可以用其它命令选中这100行。

如果你有一台 PostScript 打印机,上面的方法也适合 Unix 系统。否则,你必须做一些额
外的处理:你需要先把文件转换成 HTML 类型,然后用 Netscape 之类的浏览器打印。

如下命令把当前文件转换成 HTML 格式:

:source $VIMRUNTIME/syntax/2html.vim

你发现它会嘎吱嘎吱执行一阵子,(如果文件很大,这可能要花点时间)。之后,
Vim 会打开一个新的窗口并显示 HTML 代码。现在把这个文件存下来(存在哪都不要紧,
反正最后你要删掉它的):

:write main.c.html

用你喜欢的浏览器打开这个文件,并通过它打印这个文件。如果一切顺利,这个输出应
该与 Vim 中显示的一样。处理完后别忘
了删掉那个 HTML 文件。

除了打印,你还可以把这个 HTML 文件,放到 WEB 服务器上,让其他人可以通过彩色
文本阅读

星期一, 三月 27, 2006

Mathematica 5.2如何把结果图形保存到文件里。

Q:Mathematica 5.2如何把结果图形保存到文件里?

A:Display["c:\\temp\\graph.gif",Plot[Cos[x],{x,0,2PI}],"GIF"]

星期五, 三月 24, 2006

初识 python

文件保存UTF8格式
helloworld.py
#-*- coding: UTF8 -*-
print u"你好,世界"

星期三, 三月 22, 2006

Windows目录共享的问题

出现错误:

"
不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接。中断与此服务器或共享资源的所有连接
,然后再试一次..."
方法:
net use ;列出所有共享的网络清单
net use 共享文件名 /delete

再重新共享 资源:
net use g: \\机器名\目录 /user:"用户名" 密码

星期二, 三月 21, 2006

利用CachedRowSetImpl构造新的结果集合

问题:利用CachedRowsetImpl的off-line的特性,把几个小的ResultSet
集合拼凑成一个大的结果ResetSet集合。
public CachedRowSetImpl AppendRowSetRecord(CachedRowSetImpl Ori,CachedRowSetImpl fresh) throws Exception
{
if(Ori.size()==0 || Ori==null)
{
System.out.println("Ori is null");
return fresh;
}
fresh.beforeFirst();
if(Ori!=null && Ori.size() != 0)
{
Ori.beforeFirst();
if (!((fresh.getMetaData().getColumnCount())==(Ori.getMetaData().getColumnCount())))return Ori;
}
while(fresh.next())
{
Ori.afterLast();
Ori.moveToInsertRow();
for(int i=1;i<=fresh.getMetaData().getColumnCount();i++)
{
Ori.updateObject(i,fresh.getObject(i));
}
Ori.insertRow();
Ori.moveToCurrentRow();
}

Ori.beforeFirst();
return Ori;
}

星期五, 三月 10, 2006

Mathematica 5.2 has big bug

Sinc[x_] := Sin[x]/x
InverseFourierTransform[Sinc[x/(2*Sqrt[6])]^6, x, w]

Mathematica 5.2 give anwser:

Out[3] = 0

Other version has correct anwser:



星期四, 三月 09, 2006

星期一, 二月 27, 2006

GCD的缩写含义

令m与n为两个整数,如果b同时整除m与n,我们称b为m,n的公约数。
m与n的最大的哪个公约数称为m与n的最大公约数.
the Greatest Common Divisor(最大公约数)
the Least Common Multiple(最小公倍数).

MatheMatica 几个函数小记

Floor[x] 不比x大的最大整数. <= 也叫做"最小整数函数"
Ceiling[x] 不比x小的最小整数.>=x也叫做"最大整数函数"
Round[x] 接近x的整数,如果x是在两个数的中间比如5.5,那么Round返回最靠近的偶数:6.

星期四, 二月 23, 2006

mathematics 5.2 常用小tips

清除所有全局变量,需要用反单引号`

.? `* 显示所有全局变量
.Clear["`*"] shift+enter

如何利用mathematica Export输出数据到外部文件?

例子:

list = {{1.3332, 2.5, 3.12, 5.5}, {2.5, 7.8, 9.90, 2.47894}, {7.3444, 5.778,
2.11, 3}}
SetDirectory["C://"]

Export["test.csv", list, "CSV"]

(shift+enter) to execute.

相关文档:http://documents.wolfram.com/mathematica/functions/Export

星期三, 二月 22, 2006

如何用mathematics 5.2 画一个棋盘?

Plot[{d, 0, 10}, {y, 0, 10}, GridLines -> {{0, 1, 2, 3, 4,5, 6, 7, 8, 9, 10}, {0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}, AspectRatio -> 1,PlotRange -> {{0, 10}, {0, 10}}, Axes -> False]

星期一, 二月 13, 2006

Maven 2.0 tips:如何定义一个pom.xml Scope的变量?

Q:Defined a Pom.xml Scope Variable for refer in furture
in pom.xml Syntax like follow:

<properties>
<jboss.home>/path/to/jboss</jboss.home>
<jboss.client.home>${jboss.home}/client</jboss.client.home>
</properties>

星期五, 二月 10, 2006

Maven 2.0:如何在pom.xml定义项目全局变量?

问题:Maven 2.x中,需要在整个项目中用变量方式来表示某个可能
动态改变的内容。比如项目版本号,日期等
例子:
在项目资源文件中application.properties中,有如下定义.
# application.properties
application.name=${pom.name}
application.version=${pom.version}

需要在pom.xml中如下定义:
<project>
<version>1.0-SNAPSHOT</version>
<name>Office Automation System</name>
<sourceDirectory>
D:/Project/employee/src
</sourceDirectory>
<resources>
<resource>
<directory>resources/</directory>
<filtering>true</filtering>
</resource>
</resources>
</project >

命令行运行: mvn process-resources 就会在target/classes目录中发现application.properties中发现:
# application.properties
application.name=Office Automation System
application.version=1.0-SNAPSHOT

星期四, 二月 09, 2006

Maven.如何在把便宜时候需要引用的第三方库?

pom.xml中用以下语句:
引用groovy脚本语言库

<dependencies>
<dependency>
<groupId>ehrm.groovy</groupId>
<artifactId>groovy</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\ThirdPart\groovy-all-1.0-beta-7.jar</systemPath>
</dependency>
</dependencies>

Maven如何道到一个plugin的所有配置参数。

如下语法:

D:\Project\mvn2.0\OAS>mvn projecthelp:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin -Dfull=true

maven-compiler-plugin 是你想查看的plugin的名字。

不过结果可能为ToDO.如下
Description of Plugin
-----------------------------------------------

Group Id: org.apache.maven.plugins
Artifact Id: maven-compiler-plugin
Version: 2.0
Goal Prefix: compiler

Mojos:
-----------------------------------------------

TODO!
-----------------------------------------------

TODO!
-----------------------------------------------


Maven 2.0.2使用的一些经验.

Maven 2.0.2的设计思想又变化了一点。

尽量在pom.xml中保留全部的 设置信息.

1.如何在pom.xml中修改 compile的默认encoding 设置.
需要在pom.xml加入如下:
<project>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!--source>1.5</source>
<target>1.5</target-->
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>

或者:通过设置环境变量的方式.
MAVEN_OPTS="-Dfile.encoding=UTF-8" (行不通,待定)
....


2.maven 2.0中如何为特定的用户编写setting

Maven 2.0.2使用的一些经验.

Maven 2.0.2的设计思想又变化了一点。

尽量在pom.xml中保留全部的 设置信息.

1.如何在pom.xml中修改 compile的默认encoding 设置.
需要在pom.xml加入如下:

....


org.apache.maven.plugins
maven-compiler-plugin

UTF-8




....


2.maven 2.0中如何为特定的用户编写setting

Maven Pom.xml 结构.

星期三, 一月 18, 2006

NetBean 5.0 Extension Module 开发指南

http://platform.netbeans.org/tutorials/nbm-server-plugin.html#gettingtoknowthesample

星期五, 十二月 30, 2005

JSF 1.1和JSF 1.2 在支持EL能力上的差别

根据规范:

jsf 1.1

Value Binding Expression Syntax
The syntax of a value binding expression is identical to the syntax of an expression
language expression defined in the JavaServer Pages Specification (version 2.0),
sections 2.3 through 2.9, with the following exceptions:
  1.  The expression delimiters for a value binding expression are “#{“ and “}” instead
  2.  Value binding expressions do not support EL functions.


jsf 1.2

provided by version 2.1 of the JavaServer Pages specification. The EL is described in a
separate specification document delivered as part of the JSP 2.1 spec. Please consult that
document for complete details about the EL.

JSF 1.2中, JSP 1.2和JSP 2.1在EL 引擎上完全统一了,不像以前JSP和JSF是各自的EL引擎。

JSF 1.1中不支持 自定义EL function 的能力。所以必须通过其他技术手段来完成。


星期三, 十二月 28, 2005

CachedRowSet (New Version) NullPointerException

Simplest Solution is:

Java Forums - CachedRowSet (New Version) NullPointerException: Locale.setDefault(Locale.ENGLISH

MyEclipse Deploy Web Module include External Package in war lib.

Deployment by deploy policy.

http://myeclipseide.com/enterpriseworkbench/help/index.jsp?topic=/com.genuitec.myeclipse.doc/html/quickstarts/webprojects/index.html

星期二, 十二月 27, 2005

Eclipse 热键

3.1 有点不同

Eclipse优点:免费、程序代码排版功能、有中文化包、可增 
设许多功能强大的外挂、支持多种操作系统(Windows、 
Linux、Solaris、Mac OSX)..等等。 

发这张帖子的目的是希望能将Eclipse的一些使用技巧集 
合起来...欢迎大家继续补充下去(由于Eclipse的版本众多 
,希望补充的先进们能顺便说明一下您所使用的版本) 

Eclipse网站  http://www.eclipse.org/
(使用版本:Eclipse 2.1.2 Release + 中文化) 

热键篇: 
Template:Alt + / 
修改处:窗口->喜好设定->工作台->按键->编辑->内容辅助。 
个人习惯:Shift+SPACE(空白)。 
简易说明:编辑程序代码时,打sysout +Template启动键,就 
会自动出现:System.out.println(); 。 
设定Template的格式:窗口->喜好设定->Java->编辑器->模板。 

程序代码自动排版:Ctrl+Shift+F 
修改处:窗口->喜好设定->工作台->按键->程序代码->格式。 
个人习惯:Alt+Z。 
自动排版设定:窗口->喜好设定->Java->程序代码格式制作程序。 
样式页面->将插入tab(而非空格键)以内缩,该选项取消勾选 
,下面空格数目填4,这样在自动编排时会以空格4作缩排。 

快速执行程序:Ctrl + F11 
个人习惯:ALT+X 
修改处:窗口->喜好设定->工作台->按键->执行->启动前一次的启动作业。 
简易说明:第一次执行时,它会询问您执行模式, 
设置好后,以后只要按这个热键,它就会快速执行。 
..我觉得很顺手^___^ 

自动汇入所需要的类别:Ctrl+Shift+O 
简易说明: 
假设我们没有Import任何类别时,当我们在程序里打入: 

BufferedReader buf = 
new BufferedReader(new InputStreamReader(System.in)); 

此时Eclipse会警示说没有汇入类别,这时我们只要按下Ctrl+Shift+O 
,它就会自动帮我们Import类别。 

查看使用类别的原始码:Ctrl+鼠标左键点击 
简易说明:可以看到您所使用类别的原始码。 

将选取的文字批注起来:Ctrl+/ 
简易说明:Debug时很方便。 
修改处:窗口->喜好设定->工作台->按键->程序代码->批注 

视景切换:Ctrl+F8 
个人习惯:Alt+S。 
修改处:窗口->喜好设定->工作台->按键->窗口->下一个视景。 
简易说明:可以方便我们快速切换编辑、除错等视景。

myEclipse如何增加JSF能力

首先添加一个Web Project后,
web.xml和face-config.xml 并没有包含jsf必须的配置功能。

必须通过手工要myEclipse加入该配置文件:

在项目文件夹上老鼠右键 myEclipse Add JSF Capabilities...
然后选择合适的servlet-mapping url-pattern就可以了。

如图:

如何改变JSF默认的错误提示信息.

在JSF 规范里给出的错误提示字典如下:
javax.faces.Message.properties 里.这是Sun JSF IMPL实现里的资源.

myfaces相应的资源名可能有不同.


# ==============================================================================
# SPECIFICATION DEFINED MESSAGES
# ==============================================================================


# ==============================================================================
# Component Errors
# ==============================================================================

javax.faces.component.UIInput.CONVERSION={0}Conversion error occurred.
javax.faces.component.UIInput.REQUIRED=Validation Error\: {0}Value is required.
javax.faces.component.UISelectOne.INVALID=Validation Error\: {0}Value is not valid
javax.faces.component.UISelectMany.INVALID=Validation Error\: {0}Value is not valid

# ==============================================================================
# Validator Errors
# ==============================================================================

javax.faces.validator.NOT_IN_RANGE=Validation Error\: {2}Specified attribute is not between the expected values of {0} and {1}.
javax.faces.validator.DoubleRangeValidator.MAXIMUM=Validation Error\: {1}Value is greater than allowable maximum of "{0}"
javax.faces.validator.DoubleRangeValidator.MINIMUM=Validation Error\: {1}Value is less than allowable minimum of ''{0}''
javax.faces.validator.DoubleRangeValidator.TYPE=Validation Error\: {0}Value is not of the correct type
javax.faces.validator.LengthValidator.MAXIMUM=Validation Error\: {1}Value is greater than allowable maximum of ''{0}''
javax.faces.validator.LengthValidator.MINIMUM=Validation Error\: {1}Value is less than allowable minimum of ''{0}''
javax.faces.validator.LongRangeValidator.MAXIMUM=Validation Error\: {1}Value is greater than allowable maximum of ''{0}''
javax.faces.validator.LongRangeValidator.MINIMUM=Validation Error\: {1}Value is less than allowable minimum of ''{0}''
javax.faces.validator.LongRangeValidator.TYPE=Validation Error\: "{0}" Value is not of the correct type.


# ==============================================================================
# IMPLEMENTATION DEFINED MESSAGES
# ==============================================================================

com.sun.faces.ASSERTION_FAILED=Assertion Failed
com.sun.faces.ATTRIBUTE_NOT_SUPORTED=Attribute ''{0}'' not supported for component type ''{1}''.
com.sun.faces.CANT_CONVERT_VALUE=Can''t convert property: ''{0}'' to value type: ''{1}''.
com.sun.faces.CANT_CLOSE_INPUT_STREAM=Unable to close input stream.
com.sun.faces.CANT_CREATE_LIFECYCLE_ERROR=Can''t create Lifecycle for id: ''{0}''.
com.sun.faces.CANT_INSTANTIATE_CLASS=Can''t instantiate class: ''{0}''.
com.sun.faces.CANT_INTROSPECT_CLASS=Can''t introspect class: ''{0}''
com.sun.faces.CANT_PARSE_FILE=Can''t parse file: ''{0}''.
com.sun.faces.COMPONENT_NOT_FOUND_ERROR=Component Not Found for identifier: ''{0}''.
com.sun.faces.COMPONENT_NOT_FOUND_IN_VIEW_WARNING=Unable to find component with ID ''{0}'' in view.
com.sun.faces.CONTENT_TYPE_ERROR=Unrecognized Content Type.
com.sun.faces.CONVERTER_NOT_FOUND_ERROR=Converter Not Found for identifier: ''{0}''.
com.sun.faces.DUPLICATE_COMPONENT_ID_ERROR=Duplicate component ID ''{0}'' found in view.
com.sun.faces.EMPTY_PARAMETER=Parameter is empty
com.sun.faces.ENCODING_ERROR=Unrecognized Character Encoding.
com.sun.faces.ERROR_GETTING_VALUE_BINDING=Can''t get ValueBinding for value: ''{0}''.
com.sun.faces.ERROR_GETTING_VALUEREF_VALUE=Can''t get value from value binding expression: ''{0}''.
com.sun.faces.ERROR_OPENING_FILE=Can''t open configuration file: ''{0}''.
com.sun.faces.ERROR_REGISTERING_DTD=Can''t register DTD: ''{0}''.
com.sun.faces.ERROR_SETTING_BEAN_PROPERTY=Can''t set managed bean property: ''{0}''.
com.sun.faces.FACES_CONTEXT_CONSTRUCTION_ERROR=Construction Error: One or more input parameters may be null.
com.sun.faces.FACES_SERVLET_MAPPING_CANNOT_BE_DETERMINED=Unable to determine FaceServlet mapping for servlet path ''{0}''.
com.sun.faces.FILE_NOT_FOUND=File Not Found for file: ''{0}''.
com.sun.faces.ILLEGAL_ATTEMPT_SETTING_STATEMANAGER=Illegal attempt to set StateManager after a response has been generated.
com.sun.faces.ILLEGAL_ATTEMPT_SETTING_VIEWHANDLER=Illegal attempt to set ViewHandler after a response has been generated.
com.sun.faces.ILLEGAL_CHARACTERS_ERROR=Characters not allowed.
com.sun.faces.ILLEGAL_IDENTIFIER_LVALUE_MODE=Illegal use of implicit object identifier in lValue mode: ''{0}''
com.sun.faces.ILLEGAL_MODEL_REFERENCE=Illegal Model Reference in this context for expression ''{0}''.
com.sun.faces.ILLEGAL_VIEW_ID=Illegal view ID ''{0}''. The ID must begin with ''/''
com.sun.faces.INVALID_EXPRESSION=Invalid expression: ''{0}''.
com.sun.faces.INVALID_INIT_PARAM=Invalid initialization parameter: ''{0}''.
com.sun.faces.INVALID_MESSAGE_SEVERITY_IN_CONFIG=Invalid Message severity ''{0}'' defined in configuration.
com.sun.faces.INVALID_SCOPE_LIFESPAN=The scope of the referenced object: ''{0}'' is shorter than the referring object
com.sun.faces.LIFECYCLE_ID_ALREADY_ADDED=LifecycleId already added for id: ''{0}''.
com.sun.faces.LIFECYCLE_ID_NOT_FOUND=LifecycleId not found for id ''{0}''.
com.sun.faces.MAXIMUM_EVENTS_REACHED=Maximum number of events ''{0}'' reached.
com.sun.faces.MISSING_CLASS_ERROR=Missing Class: Can''t load class ''{0}''.
com.sun.faces.MISSING_RESOURCE_ERROR=Missing Resource: Can''t get ResourceBundle.
com.sun.faces.MODELUPDATE_ERROR=Model Update failure for value ''{0}'' in model''{1}''.
com.sun.faces.NAMED_OBJECT_NOT_FOUND_ERROR=Expression Error: Named Object: ''{0}'' not found.
com.sun.faces.NOT_NESTED_IN_FACES_TAG_ERROR=Not nested in a UIComponentTag Error for tag with handler class: ''{0}''.
com.sun.faces.NULL_BODY_CONTENT_ERROR=BodyContent is null for tag with handler class: ''{0}''.
com.sun.faces.NULL_COMPONENT_ERROR=Construction Error: Component argument is null.
com.sun.faces.NULL_CONFIGURATION=No Configuration loaded for the application.
com.sun.faces.NULL_CONTEXT_ERROR=Argument Error: Context argument is null.
com.sun.faces.NULL_EVENT_ERROR=Argument Error: Event argument is null.
com.sun.faces.NULL_FORVALUE=Component "{0}" not found
com.sun.faces.NULL_HANDLER_ERROR=Argument Error: Handler argument is null.
com.sun.faces.NULL_LOCALE_ERROR=Argument Error: Locale argument is null.
com.sun.faces.NULL_MESSAGE_ERROR=Argument Error: Message parameter cannot be null
com.sun.faces.NULL_PARAMETERS_ERROR=Argument Error: One or more parameters are null.
com.sun.faces.NULL_REQUEST_VIEW_ERROR=Argument Error: Request View argument is null.
com.sun.faces.NULL_RESPONSE_STREAM_ERROR=Argument Error: ResponseStream argument is null.
com.sun.faces.NULL_RESPONSE_VIEW_ERROR=Argument Error: ResponseView argument is null.
com.sun.faces.NULL_RESPONSE_WRITER_ERROR=Argument Error: ResponseWriter argument is null.
com.sun.faces.OBJECT_CREATION_ERROR=One or more confgured application objects could not be created. Check your web application logs for details.
com.sun.faces.PHASE_ID_OUT_OF_BOUNDS=PhaseId out of bounds for id: ''{0}''.
com.sun.faces.RENDERER_NOT_FOUND=Renderer not found for Renderer type: ''{0}''.
com.sun.faces.REQUEST_VIEW_ALREADY_SET_ERROR=State Error: RequestView has already been set for this request.
com.sun.faces.SAVING_STATE_ERROR=Error while saving state in ''{0}'': ''{1}''.
com.sun.faces.SUPPORTS_COMPONENT_ERROR=Argument Error: ''{0}'' is not supported for this renderer.
com.sun.faces.TYPECONVERSION_ERROR="{2}" Conversion Error setting value ''{0}'' for ''{1}''.
com.sun.faces.VALIDATION_COMMAND_ERROR=Validation error. ''{0}'' must have value or image attribute.
com.sun.faces.VALIDATION_EL_ERROR=Validation error. Expression invalid for:''{0}''
com.sun.faces.VALIDATION_ID_ERROR=Validation error. The following JSF tags are required to contain IDs:''{0}''
com.sun.faces.VALIDATOR_NOT_FOUND_ERROR=Validator Not Found for identifier: ''{0}''.


com.sun.faces.CYCLIC_REFERENCE_ERROR=Possible cycle reference to managed bean "{0}"


修改为自己的本地语言的 必须要设置.
web.xml里设置的:
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>

faces-config.xml
文件里的配置部分,如下:

<faces-config>
<application>
<locale-config>
<default-locale>zh</default-locale>
</locale-config>
<message-bundle>org.wxk.HelloWorld</message-bundle>
</application>
</faces-config>

JSF 常见问题站点

http://jsf-faq.com/

一些奇怪的问题,我碰到的问题没有,没碰到的一大堆。

JBoss JavaServerFace 里的配置诡异.

在JBoss 4.0.3 sp1里配置JSF,不用Myfaces用Sun实现的版本。
经常出现以下两个错误:

1.:JavaServerFace:Cannot find FacesContext
NullPointer 错误
2.
java.lang.NoClassDefFoundError: org.apache.myfaces.taglib.core.ViewTag


通过web.xml里如下配置,依然不能解决问题。

<listener>
<listener-class>
com.sun.faces.config.ConfigureListener
</listener-class>
</listener>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>

原因在于我们对这段话的理解,同JSF规范里定义的语义的不一致。
这个mapping只是询问我们,给包含JSF标签的jsp起一个别名
实际的文件后缀都是jsp,如果一个jsp里包含了JSF的标签。就不能按照
普通jsp来解释,必须通过把用同名文件但是后缀是mapping的文件来告诉web container
用JSF来解释这个JSP。
比如:index.jsp包含了JSF标签,如果我们直接引用http://localhost:8080/HelloWorld/index.jsp
则出现Cannot find FacesContext错误。
但如果我们使用:
1.
http://localhost:8080/HelloWorld/faces/index.jsp
2.http://localhost:8080/HelloWorld/index.jsf

都能得到正确的结果!!!

错误2:
java.lang.NoClassDefFoundError: org.apache.myfaces.taglib.core.ViewTag
在删除Jboss自带的Myface的执行包后,依然不能解决问题,需要删除tmp和work目录。
重新启动Jboss来解决.

BTW:如果以上配置依然不能解决问题,在tomcat里,需要删除tmp和work目录后,重新
启动,就可以解决这个问题。Opensource的hot deploy的不稳定可见一斑了。:(

诡异!!


星期四, 十二月 22, 2005

好的翻译

Java Enterprise Design Patterns

Versioned Object:版本化的对象


星期三, 十二月 21, 2005

可免费使用的BPEL

Oracle BPEL Engine
http://www.oracle.com/technology/products/ias/bpel/index.html

Jbmp.org
Jboss?Open source Engine.

星期六, 十二月 17, 2005

Workflow 和BPM 一些词汇翻译

http://www.ftponline.com/china/print.aspx?TotalPage=7&ID=34#

workflow 和 BPM,Orchestration 翻译为协调或流程编排

非常棒的翻译方法.

星期三, 十二月 14, 2005

Eclipse 的学习日记

如何关掉Eclipse的自动编译功能?当我想编译的时候手动编译?

从菜单 Window > Preferences > General > Workspace > 去掉Build automatically复选框
当你想编译的时候,按下Ctrl+B功能键盘.或者选择 Project >Build All 菜单命令

小秘密: 当你关闭 "auto compile" 功能的时候最好打开自动保存功能Window > Preferences > General > Workspace > 选择 Save automatically before build

help Search 关键词:compile my Java program

星期四, 十二月 08, 2005

JBoss JBPM 学习手册(一).

: 准备:

  1. 下载 以下5个包:



JBoss jBPM 3.0.2 17.6 MB 2005-11-17 LGPL Notes Download
JBoss jBPM Starters Kit 3.0.2 88.3 MB 2005-11-17 LGPL Notes Download
JBoss jBPM Process Designer Plugin 3.0.5 26.2 MB 2005-11-17 LGPL Notes Download
JBoss jBPM BPEL Extension 1.0 alpha 3 11 MB 2005-09-05 Custom Notes Download
JBPM DB 3.0.2 8.3 MB 2005-11-17 Custom ... Download


2.下载JBOSS 4.0.3SP1(最新)
http://www.jboss.org

3.下载 j2sdk 5.0(最新)
http://java.sun.com


4.下载Eclipse(JBOSS提供的Process DesignerEclipsePlug-in)
http://www.eclipse.org

5.下载mySQL5.0或其他数据库

http://www.mysql.com
mySQL 5.0 终于具有完全的功能了,包括sub select,Trigger,Procedure,UTF8支持


2005年末是个让人兴奋的年尾,OpenSource Database终于遇到了最强的阻击,
OracleMicrosoft都推出了有限制的企业Express版本。Oracle 10g Express
Microsoft SQL 2005 Express都是免费使用,发布安装的,不过数据容量限制在4GB,对大多数论坛或small application 是足够了.

6.下载mySQL或其他数据库JDBC Driver的支持.

7.下载 ant 1.6.2(最新)
http://ant.apache.org/


:安装
1.安装J2SDK
2.安装 mySQL 建立一个新的databasejbpm
安装Jbossjboss docs\examples\jca 目录下 复制mysql-ds.xml jbpm目录下的
deploy目录下,然后打开mysql-ds.xml,修改里面的:
<connection-url>jdbc:mysql://mysql-hostname:3306/jbossdb</connection-url>
主机为localhostDatabase Scheme为实际的Scheme,这里为jbpm

3.安装Eclipse 3.1
4.安装ant 1.6.2 ,并将路径加入到系统PATH变量中

5.安装 JBPM 3.06. JBPM安装

展开jbpm-3.0.2.zip 到一个目录下,修改build.properties
修改:ant.home jboss.home 为实际的路径
在当前目录下运行ant,编译.
再运行.ant ?buildfile build.deploy.xml jpm 发布到JBOSS目录下.
安装结束后,在jboss server目录下多了一个jbpm的目录,这就是
build.deploy.xml所做的工作。

6. 安装其他数据库
展开jbpm-db-3.0.2.zip,然后修改, jbpm-db-3.0.2.zip.dir\mysql\ hibernate.properties文件中的:
hibernate.connection.url=jdbc:mysql://localhost:3306/jbpm
hibernate.connection.username=root
hibernate.connection.password=
运行 ant mysql.script开始mysql脚本的安装和测试

如果顺利,则全部准备工夫完成了

.运行

3.1 启动 jboss

命令行 {jboss_home}\bin\run.bat ?c jbpm (注意:启动jbpm)
注意后台输出屏幕应该没有任何错误信息.
通过:http://localhost:8080/jbpm 出来jbpmWeb 页面了

.开发 Hello World工作流.
(pengding……..)

星期五, 十一月 18, 2005

Javascript:getElementByID getElementByName

得到当前form元素的表现层对象。

可以通过.getElementByID
或.document.forms['name'].elements['tagname']

来得到

星期六, 十一月 05, 2005

Tips:不能预先确定的动态数组.

Q:需要一个长度不固定,完全需要动态变化的array对象。

A:使用:java.io.ByteArrayOutputStream
最后使用ByteArrayOutputStream.toByteArray,得到最终的数组

典型代码:

protected Class getClassFromJar(InputStream is, String className) throws Exception
{
System.out.println("getClassFromJar try find "+className);
JarInputStream jis = new JarInputStream(is);
String rname = className;
rname = rname.replace ('.', '/') + ".class";//重要,必须还原为目录格式
JarEntry entry=null;
Class tmp=null;
while ((entry = jis.getNextJarEntry()) != null)
{
System.out.println(entry.getName());
if(entry.isDirectory()) continue;
if(entry.getName().equals(rname))
{
System.out.println("find it!!!!");
// int size=(int)entry.getSize();
// if(size==-1)throw new Exception("size is -1");
// System.out.println("size:"+size);
int status;
byte[] b= new byte[4096];
ByteArrayOutputStream buf = new ByteArrayOutputStream();
while((status = jis.read(b))!=-1)
{
System.out.println("read ..."+status);
buf.write(b,0,status);
}
System.out.println("All Read is "+buf.size());
byte[] classByte= buf.toByteArray();
buf.close();
tmp = defineClass(className,classByte,0,classByte.length);
jis.close();
return tmp;
}
}
return tmp;
}

星期日, 十月 30, 2005

One-Jar Open source

最近因为弄JNI,必须解决一个技术问题,就是自动加载

包含在可执行Jar中的动态库(.dll或.so).

这个问题2年前就碰到过类似的问题,不过当时是用编写脚本用 -

Xbootclasspath/a:作为加载第三方不包含在Jar文件中的class的方法。


虽然可以解决问题,很不完美。

后来用System.load来动态加载JNI的动态库,解决了这个问题后。

突然想到这个老问题,继续尝试以前想到的用ClassLoader来解决这个问题。

具体方法是:把包含在jar文件中的第三方jar包,展开到当前目录或系统临时目录

下,通过loadClass来加载这些包。

任务将近完成的时候,觉的这种方法依然要依赖用户的运行环境,如果是个限制

严格的环境,在临时展开这些class的时候,会出现运行时RuntimeException

终于在google发现了一个 one-jar的方法,是直接通过InputStream来加载

class,这是很大的进步了。仔细看看作者的实现。

http://one-jar.sourceforge.net/

星期六, 十月 29, 2005

JNI 常见问题 FAQ.

JNI 常见问题 FAQ.

  1. 如何从JNI返回一个字符串?
注意:所有JNI Method都有同样的参数, JNIEnv * env, jobject obj
JNIEnv是个系统的工具对象(ToolKit).
可以使用下列语法得到返回一个Java String
C 语法:
jstring str = (*env)->NewStringUTF(env,(char *)变量);

Java JNI 基本使用说明

Java JNI 解说.
步骤:

  1. 先建立一个标准java Class
通过native表明方法是平台相关的.
class TestNative {
     private native void print(); //注意方法声明
     public static void main ( String [ ] args ) {
           new TestNative().print();  //注意调用方法
     }
     static {
           System.loadLibrary ("helloWorld"); // 注意Load 动态库的语法.
     }
}
  • 注意:根据Java JNI 规范,
loadLibrary 根据平台不同会把 库名字修改为本地的lib名字.WindowsLib的名字同参数名字相同后缀上.dll.Unix类的平台下,往往修改为:lib参数名.so的最终名字。比如helloWorldUnix必须把文件名修改为libhelloWorld.so并设置LD_LIBRARY_PATH=包含这个.so的路径,才不会出现java.lang.UnsatisfiedLinkError的异常
  • 生成C用头文件

  • javac TestNative.java

  • javah ?jni TestNative
2.2后会产生一个头文件:TestNative.h内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestNative */

#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     TestNative
* Method:    print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_TestNative_print
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
注意红色的: Java_TestNative_print 函数名的生成是按照JNI规范产生的
模式为Java_类名_方法名.

  1. 编辑对应的C代码:
#include <stdio.h>
#include "TestNative.h" //这行必须加入

JNIEXPORT void JNICALL
Java_TestNative_print ( JNIEnv* env, jobject obj )
{
      printf ( "Hello, Native!\n" ) ;
     return ;
}

  1. 编译源程序(注意生成的动态库的命名规则
Linux :
[root]# gcc TestNative.c -o libhelloWorld.so -shared -I /usr/java/j2s
dk1.4.2/include/linux/ -I /usr/java/j2sdk1.4.2/include/
Window:..
  1. 设置路径
Linux:
export LD_LIBRARY_PATH= .so文件所在目录名
  1. java TestNative 得到结果
  Hello, Native!
    

星期四, 十月 27, 2005

JVM Memory Model

JVM Memory Model

Thread可执行的操作:
use(使用)
assign(赋值)
load
store,
lock,
unlock
useassign
Main Memory SubSystem 可执行的操作:
read,
write,
lock,
unlock

这些操作都是Atomic的操作
Main Memory:主内存
Working Memory:工作区内存
关于这些Operation的定义说明:
  • use 动作:使用一个Threaduse 动作把当前Thread里的变量内容传送到Thread的执行引擎.这个动作发生在ThreadJVM指令中使用该变量的值的时候.

  • assign 动作:赋值 一个Threadassign动作 传送Thread引擎的变量值到Threadcopy变量里.这个动作在Thread执行JVM赋值指令的时候.

  • read 动作:读 主内存用稍侯的load动作传送原版变量的值到thread的工作区内存.

  • load 动作:载入 一个Thread把一个值从主内存通过read动作放到thread的工作区的复制的变量

  • store动作: 存储  一个Thread的存储动作是用下面的Write操作传送Thread工作区的复制变量值到主内存。

  • write 动作:写入  主内存的写入动作是通过store动作放一个值从Thread工作区复制变量到在主内存里的原版变量里

  • lock 动作:缩定 Thread和主内存紧密偶合的同步 lock动作造成Thread得到了一个特定锁的声明

  • unlock 动作:解锁 Thread和猪内存的紧密同步,让Thread释放关于特定锁的声明


(image placeholder)


http://java.sun.com/docs/books/vmspec/2nd-edition/html/Threads.doc.html

8.7 Rules for volatile Variables
如果一个变量被申明为volatile,哪个对操作这个变量的Thread有多了额外的约束
T 是个线程.
VWVolatile变量

  • A use operation by T on V is permitted only if the previous operation by T on V was load, and a load operation by T on V is permitted only if the next operation by T on V is use. The use operation is said to be "associated" with the read operation that corresponds to the load.

  • A store operation by T on V is permitted only if the previous operation by T on V was assign, and an assign operation by T on V is permitted only if the next operation by T on V is store. The assign operation is said to be "associated" with the write operation that corresponds to the store.

  • Let action A be a use or assign by thread T on variable V, let action F be the load or store associated with A, and let action P be the read or write of V that corresponds to F. Similarly, let action B be a use or assign by thread T on variable W, let action G be the load or store associated with B, and let action Q be the read or write of W that corresponds to G. If A precedes B, then P must precede Q. (Less formally: operations on the master copies of volatile variables on behalf of a thread are performed by the main memory in exactly the order that the thread requested.)

星期三, 十月 26, 2005

关于Class literal 的一些说明

关于Class literal 的一些说明

JLS 2.0 15.8.1 Lexical Literals 章节说明了”literal”的特定含义
A literal (§3.10) denotes a fixed, unchanging value.
A literal 表示一个固定的,不能改变的值.
因为如此我们把 literal翻译为常数
故此:我们把 Class Literal 翻译为 类常数

JLS 2.0 15.8.2 章节有如下话:
15.8.2 Class Literals(类常数)
A class literal is an expression consisting of the name of a class, interface,
or primitive type followed by a ‘.’ and the token class. The type of a class
is Class. It evaluates to the Class object for the named type (or for void)
defined by the defining class loader of the class of the current instance.
翻译如下:
类常数是有类(class),接口(class)或基本类型(primitive type)的名字接着句号”.”class
记号.

Class的类型是Class. 它相等于对应着名字标记的类型的Class对象(或者void).
这是有当前实例所定义的class Loader来定义的。

Jdk 5.0 的泛性中.class的 类常数表示方法频频使用。设计的目的,还是为了解决,在
reflection 技术中,关于使用基本类型(int,boolean….)作为参数的问题.
比如一个用int作为参数的Method通过.Class.getMethod(String methodName,Class[] param)
因为int本身不是一个Object也没有显式的定义申明,所以重载.class可以把int转换为
Class对象。
基本类型和Class之间的对应关系如下:
        boolean.class   ==   Boolean.TYPE
        char.class      ==   Character.TYPE
        byte.class      ==   Byte.TYPE
        short.class     ==   Short.TYPE
        int.class       ==   Integer.TYPE
        long.class      ==   Long.TYPE
        float.class     ==   Float.TYPE
        double.class    ==   Double.TYPE
        void.class      ==   Void.TYPE

Java Open Source的 Portlet The Portals Pluto Site

http://portals.apache.org/pluto/powered_by_pluto.html

以及企业Portal:
http://portals.apache.org/jetspeed-2

Java Reflection (Java反射)性能说明

Java Reflection in ActionReflection Cost比较昂贵的说法一直很流行。
其实,如果没有太多的getMethod方法的调用。
直接运行方法的cost和通过invoke()Cost基本是一样的。
但在某些情况下,反射书写的代码更加紧凑和幽雅。
比如在实现SQL Type -->Java Type之间的Mapping的时候.
需要更新ResultSetupdateXXX 方法组的时候。
BTW:性能测试代码:
public class TestReflection
{

public static void main(String[] args) throws Exception
{
Object object = new Object();
Class c = Object.class;

int loops = 100000;

long start = System.currentTimeMillis();
for( int i = 0; i < loops; i++ )
{
object.toString();
}
System.out.println( loops + " 正常方法调用:" + (System.currentTimeMillis() - start) + " milliseconds." );
java.lang.reflect.Method method = c.getMethod( "toString", null );

start = System.currentTimeMillis();
for( int i = 0; i < loops; i++ )
{
method.invoke( object, null );
}

System.out.println( loops + " 通过反射调用方法但没有查找方法过程:" + (System.currentTimeMillis() - start) + " milliseconds." );
start = System.currentTimeMillis();
for( int i = 0; i < loops; i++ )
{
method = c.getMethod( "toString", null );
method.invoke( object, null );
}
System.out.println( loops + " 通过反射调用方法包含查找方法过程:" + (System.currentTimeMillis() - start) + " milliseconds." );
}
}
测试结果:
C:\temp>java TestReflection
100000 正常方法调用:109 milliseconds.
100000 通过反射调用方法但没有查找方法过程:125 milliseconds.
100000 通过反射调用方法包含查找方法过程:312 milliseconds.

C:\temp>java -version
java version "1.4.2_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_09-b05)
Java HotSpot(TM) Client VM (build 1.4.2_09-b05, mixed mode)

C:\temp>d:\java\jdk1.5.0_05\bin\java TestReflection
100000 正常方法调用:94 milliseconds.
100000 通过反射调用方法但没有查找方法过程:110 milliseconds.
100000 通过反射调用方法包含查找方法过程:328 milliseconds.    

机器配置: 2.6G CPU.512M Memeory. WindowXp sp2

可见在调用次数非常少的情况下,花费的多余时间是可以忽略不计的。
在调用次数非常多的时候,必须注意要减少getMethod 寻找方法的
调用.

有关Java 系统级别和架构上的一些问题。

这里回答了很多经典的Java系统级别的问题:

http://www.javaolympus.com/J2SE/JavaPerformance/JavaReflectionPerformance.jsp

星期日, 十月 23, 2005

FreeMind - free mind mapping software

http://freemind.sourceforge.net/wiki/index.php/Main_Page

Freemind是一实用的开源思维导图/心智(MindMap)软件.它可用来作为:
1.管理项目(包括子任务的管理,子任务的状态,时间记录,资源链接管理).
2.笔记或知识库.
3.头脑风暴(Brain storm)
4.结构化的存储小型数据库.

星期四, 十月 20, 2005

HSQLDB vs Oracle

sqltool.rc 语法,用于SQLTools命令行输入数据.

urlid crm
url jdbc:hsqldb:/temp/testdb
username sa
password

注意:SQLTool命令行,默认commit是不自动提交的,需要设置为--autoCommit

如:
C:\Documents and Settings\William Wang>java -Dsqlfile.charset=UTF-8 -Xms512m -Xm
x512m -jar E:\hsqldb\lib\hsqldb.jar crm test.sql
,倒入了58770条记录。
查看可以使用:
C:\Documents and Settings\William Wang>java -jar e:\hsqldb\lib\hsqldb.jar --sql

速度非常快。

"select count(*) from att_M_dailyattendance" crm


HSQLDB Cached Table的索引都在.data文件里,如果建立索引(index),文件几乎要增加一倍啊。

太可怕了。不过在记录58000条左右的时候,建立索引前和索引后,查询速度几乎没什么变化 啊。
使用分页速度到是没什么变化。
SELECT LIMIT 1 10 * FROM ATT_M_DAILYATTENDANCE

HSQLDB vs MYSQL

语法非常接近。

从Mysql 倒出的Schema Create Script只要简单的调整后就可以了。


从command Line 运行HSQLDB脚本的语法:

java -jar $HSQLDB_HOME/lib/hsqldb.jar urlid file.sql

urlid通过hSQLDB Admin UI 建立的。

HSQLDB对Mysql的default ''的语法理解有点问题,似乎要把mysql脚本中非整数(int)的default语句要全部删除,才可以。
用 UltraEdit regular Expression表达:
find:NOT NULL^(*^),
replace: ^1 NOT NULL,

星期二, 十月 18, 2005

Swing Jpanel任意绝对定位

1.调用setLayout(null);把Layout设置为null
2.添加到JPanel里的组件,使用setBounds(x,y,width,height)来定位。
x,y是相对与左上角(0,0)来定位的。

Very Easy!!!!!!!!!!:)

星期五, 十月 14, 2005

Oracle 10g 企业管理工具

今天装上Oracle 10g,晕了,找不到,企业管理器(Enterprise Manager).

Google了1个多小时,才知道,原来Oracle改变了管理器的UI

全用Web Page来做了,emctl (em=Enterprise Manager)

晕啊,怎么一点兼容性都不考虑啊。

1.emctl start dbconsole
出来如图的说明

Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://IMAGE:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control ...OracleDBConsolecrm 服
务正在启动 ...............
OracleDBConsolecrm 服务已经启动成功。

2.在Browser用地址:http://IMAGE:1158/em/console/aboutApplication
开始了管理的学习任务,

3.再大叹一声,晕啊。
Oracle 8i,9i,10G,越来越不认识了。
Online DBA Help:http://download-west.oracle.com/docs/cd/B12037_01/server.101/b10742/toc.htm

Unix下如何使用Java 颜色控制码?

Unix Console的AscII颜色控制码的格式是.^[[fg;bgm

fg=前景
bg=后景

fg和bg的手册有相关手册可以查找.标准的字符颜色控制码为^[[0;0m

^[对应的是ASCII 27,(char)0x1b

所以可以用以下代码在Unix环境下打印出来有颜色的提示:

if(System.getProperty("os.name").toLowerCase().indexOf("windows") == -1)System.out.println((char)0x1b+"[1;31m hello World! "+(char)0x1b+"[0;0m");



HSQLDB的排名很高啊。可以用来做企业数据库

http://jdj.sys-con.com/general/readerschoice.htm

Product Company Points
Birdstep RDM Embedded 7.1 Birdstep Technology
24
IBM Informix IDS v10 IBM
79
Daffodil DB Daffodil Software Ltd.
82
ObjectDB for Java/JDO ObjectDB
90
db4o db4objects
97
EAC MySQL Cluster Emic Networks
108
PointBase Embedded PointBase / DataMirror Corp.
139
Oracle Database Lite 10g Oracle Corporation
146
JDataStore 7 High Availability Edition Borland Software
165
Berkeley DB Java Edition Sleepycat Software
175
Sybase Adaptive Server Enterprise (ASE) Sybase, Inc.
258
HSQLDB HSQLDB Development Team
441
IBM DB2 Universal Database IBM
1110
Oracle Database 10g Oracle Corporation
2780

排名第三啊

星期三, 十月 12, 2005

如何在FireFox中播放MP3?

<object id="PlayerEx3" classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="296" height="65"> <param name="autoStart" value="false" /> <param name="LOOP" value="false" /> <param name="URL" value="http://sunose.sitesled.com/music/vitas/TheChorus.m3u" /> <embed LOOP="false" autostart="false" showstatusbar="1" src="http://sunose.sitesled.com/music/vitas/TheChorus.m3u" type="application/x-mplayer2" width="296" height="65" controls="ImageWindow,ControlPanel,StatusBar,TACCtrl" > </embed></object>

星期五, 十月 07, 2005

Netbean 5.0 beta Release.

但是安装后,启动Netbean 5.0 beta,则IDE 处于Freeze 状态。

反复安装几次,依然如故.

最后下载了Jdk 5.0 update 5 才解决了问题。

愚昧。这种东西也能说成是beta?

Sun的产品质量越来越糟糕了。

星期日, 九月 25, 2005

The Return of the King-王者归来--NetBean IDE 5.0 Preview.

这是一款真正重量级的IDE,几乎横扫目前主流IDE的优良Features.

主要增加的最新Feature.
1.Import Jbuildx and IDEA Project
2.Deploy JBoss.weblogic多个Application Server.
3.J2EE Support.
4.UI Native support.
5.Netbase Plugin development wizard(like as Eclipse plug-in wizard)
Cool!

..

不足:
1.source editor 不支持 multi-shortkey-template switch 必须:Turbo C/Visual Studio/CUA 如果Jbuilder

2.Source Code Verify有某些Bug,比如can't Reached java statement check 算法有些问题。

3.Open java source file not open as UNICODE,default is ISO8859-1
this is cause many issue.
4.其他Application Server deployment 的支持需要大大增加.

如果NetBeans 5.0能解决掉上续的不足,这是一款能统一JAVA IDE的工具。

星期一, 九月 19, 2005

Groovy shell 运行Script泄露内存问题.

When you create a Script, and then call run() on that Script, it is important to remove any entries created in the MetaClassRegistry after you are done. This is done by calling InvokerHelper.removeClass(script.getClass()). If you do not, the MetaClassRegistry will keep growing until you run out of memory.

Secondly, make sure that the GroovyShell is non-static, i.e. garbage collectable. Otherwise the GroovyClassLoader associated with the GroovyShell will hold on the all the classes (scripts) ever created.


来自:

Groovy shell 运行Script泄露内存问题.

When you create a Script, and then call run() on that Script, it is important to remove any entries created in the MetaClassRegistry after you are done. This is done by calling InvokerHelper.removeClass(script.getClass()). If you do not, the MetaClassRegistry will keep growing until you run out of memory.

Secondly, make sure that the GroovyShell is non-static, i.e. garbage collectable. Otherwise the GroovyClassLoader associated with the GroovyShell will hold on the all the classes (scripts) ever created.


来自:

星期五, 九月 16, 2005

程序的安全性

应用程序会随时间而演进,新的功能会逐次被加入、错误也逐一被修正,而安全性威胁也会逐步演进。因此,您必须定期对安全性威胁和应用程序安全性服务进行检视,以确保应用程序不致于暴露在不必要的风险下。
维持警觉
下面列出您可采取的步骤,以维持应用程序之安全性:
加入安全性批注至您的原始程序代码
在设计和撰写程序代码的阶段中,您会做出许多关于应用程序安全性实作 (Implementation) 的决定。未来继续维护您原始程序代码的开发人员,不一定完全了解这些决定或原始程序代码修改部分的枝节。您可以在原始程序代码内加入批注,说明您的假设、程序代码意图和任何外部安全性措施 (例如档案的存取控制清单,即 ACL 和验证方法等) 的相依性,减轻此风险。
回归测试错误修复
无可避免地,在应用程序发行之后,仍然会发现一些错误。而当您修复某个错误后,也可能会导致更多之前被修复错误遮蔽的错误浮现。在发行错误修复之前,请进行应用程序回归测试,以确保该修复不会损害到应用程序的安全性。
回归测试平台变更
软件错误难以避免,同样地,执行应用程序的平台以及软件互动的应用程序也免不了会有错误。在修补平台或是自用应用程序以外的应用程序时,请务必了解这些变更对应用程序的影响。例如,您的应用程序可能不经意地倚赖平台先前的不良行为 (Broken Behavior),做为安全性设计的一部份。
监视支持要求
您会在设计应用程序时假设其使用方法。若要验证这些假设,您应监视支持要求和讨论区,以评估真实世界的使用情况。例如,您的应用程序可能会要求使用者所不愿意或无法实作的安全性设定,这将会导致支持问题的增加。
开发良好的稽核原则
好的稽核原则会要求您记录系统上发生的重要事件并且适时对它们进行评估。适时的审核追踪记录有助于找出加害者。延迟的审核追踪记录通常则会延误修复安全性问题时机,加害者早已完成所有的破坏性动作。
监视找不到的错误
系统监视程序中的 Web 服务效能对象包含显示找不到的错误的计数器。找不到的错误是指无法满足客户端要求,因为它们包括了一个对不存在之网页或档案的参考(这些错误有时是以其 HTTP 状态码 404 来描述)
许多找不到错误的发生是由于网页和档案已被删除或移往别处,但是有些则是由于使用者尝试存取未经授权的文件所造成 (这些「禁止存取」错误的程序代码编号为 403。在大多数的浏览器上,403 错误与 404 错误的报告方式大多不同 ,且不会出现在 Not Found Errors/sec 计数器结果中)
您可以使用 Web 服务对象的 Not Found Errors/sec 计数器,追踪服务器上找不到错误的发生率。另外一种作法是,设定系统监视程序警示,在找不到错误发生率超过临界值时,通知系统管理员处理。
找不到错误的增加,有可能表示移动档案却没有更新档案连结。不过也有可能是表示尝试存取受保护的文件 (例如使用者清单和档案目录) 失败。
请勿储存机密
如果可能,请尽量避免储存敏感性信息。机密数据的管理通常是设计安全系统时,最困难的部份之一。
鼓励使用最小权限
请将您的应用程序设计成需要最少量的存取权限。以此作法,可减少攻击者利用您的应用程序做为平台,对任一计算机进行攻击之可能性。同时,若您的应用程序要求使用者以高优先权限账户登入,例如具有管理员权限的账户,这可能让使用者暴露于其它的攻击途径。
评估潜在损坏
Microsoft 在评估潜在的安全性弱点时,使用 DREAD 这个前缀缩写字。此前缀缩写字描述下列因素:
潜在损坏 (Damage Potential)
重现性 (Reproducibility)
可擅用性 (Exploitability)
受影响的使用者 (Affected Users)
发现性 (Discoverability)
每个因素的等级可从 1 (最低) 10 (最高)。根据每个因素的分数,可计算出该弱点的总分,并做出主观性判断。最后,是否修复它的决定也取决于其它难以具体化之因素,例如对于声誉的影响。
潜在损坏
若此弱点遭擅用,最坏的结果会是什么?
注意???下列的等级为范例定义。
  1. 10 - 攻击者完全控制计算机。

  2. 2 9 - 每个数字代表递增的破坏程度。

  3. 1 - 攻击者仅能读取或写入少数不造成损害的信息 (如果有的话)
重现性
利用此弱点重现攻击的难易度?
  1. 10 - 每次攻击都会成功。

  2. 2 9 - 每个数字代表递增的重现性难易度。

  3. 1 - 重复测试但发生次数极少。
可擅用性
根据此弱点进行攻击的难易度?
  1. 10 - 只需要极少甚至不需要知识或时间。

  2. 2 9 - 每个数字代表递增的可擅用性难易度。

  3. 1 - 需要大量的人物力和财力。
受影响的使用者
可能受此弱点影响的使用者百分比?
  1. 10 - 91-100%

  2. 2 9 - 每个数字代表递增的受影响使用者百分比 (例如 210-19%320-29%,其余依此类推)

  3. 1 - 0-9%
发现性
找出此弱点的难易度?
  1. 10 - 有大量公开发行的信息。

  2. 2 9 - 每个数字代表递增的公开程度。

  3. 1 - 相当隐密,几乎没有人知道它的存在。
请参阅
安全性

保持安全性术语.

保持安全
应用程序会随时间而演进,新的功能会逐次被加入、错误也逐一被修正,而安全性威胁也会逐步演进。因此,您必须定期对安全性威胁和应用程序安全性服务进行检视,以确保应用程序不致于暴露在不必要的风险下。
维持警觉
下面列出您可采取的步骤,以维持应用程序之安全性:
加入安全性批注至您的原始程序代码
在设计和撰写程序代码的阶段中,您会做出许多关于应用程序安全性实作 (Implementation) 的决定。未来继续维护您原始程序代码的开发人员,不一定完全了解这些决定或原始程序代码修改部分的枝节。您可以在原始程序代码内加入批注,说明您的假设、程序代码 意图和任何外部安全性措施 (例如档案的存取控制清单,即 ACL 和验证方法等) 的相依性,减轻此风险。
回归测试错误修复
无可避免地,在应用程序发行之后,仍然会发现一些错误。而当您修复某个错误后,也可能会导致更多之前被修复错误遮蔽的错误浮现。在发行错误修复之前,请进行应用程序回归测试,以确保该修复不会损害到应用程序的安全性。
回归测试平台变更
软件错误难以避免,同样地,执行应用程序的平台以及软件互动的应用程序也免不了会有错误。在修补平台或是自用应用程序以外的应用程序时,请务必了解 这些变更对应用程序的影响。例如,您的应用程序可能不经意地倚赖平台先前的不良行为 (Broken Behavior),做为安全性设计的一部份。
监视支持要求
您会在设计应用程序时假设其使用方法。若要验证这些假设,您应监视支持要求和讨论区,以评估真实世界的使用情况。例如,您的应用程序可能会要求使用者所不愿意或无法实作的安全性设定,这将会导致支持问题的增加。
开发良好的稽核原则
好的稽核原则会要求您记录系统上发生的重要事件并且适时对它们进行评估。适时的审核追踪记录有助于找出加害者。延迟的审核追踪记录通常则会延误修复安全性问题时机,加害者早已完成所有的破坏性动作。
监视找不到的错误
系统监视程序中的 Web 服务效能对象包含显示找不到的错误的计数器。找不到的错误是指无法满足客户端要求,因为它们包括了一个对不存在之网页或档案的参考(这些错误有时是以其 HTTP 状态码 404 来描述)。
许多找不到错误的发生是由于网页和档案已被删除或移往别处,但是有些则是由于使用者尝试存取未经授权的文件所造成 (这些「禁止存取」错误的程序代码编号为 403。在大多数的浏览器上,403 错误与 404 错误的报告方式大多不同 ,且不会出现在 Not Found Errors/sec 计数器结果中)。
您可以使用 Web 服务对象的 Not Found Errors/sec 计数器,追踪服务器上找不到错误的发生率。另外一种作法是,设定系统监视程序警示,在找不到错误发生率超过临界值时,通知系统管理员处理。
找不到错误的增加,有可能表示移动档案却没有更新档案连结。不过也有可能是表示尝试存取受保护的文件 (例如使用者清单和档案目录) 失败。
请勿储存机密
如果可能,请尽量避免储存敏感性信息。机密资料的管理通常是设计安全系统时,最困难的部份之一。
鼓励使用最小权限
请将您的应用程序设计成需要最少量的存取权限。以此作法,可减少攻击者利用您的应用程序做为平台,对任一计算机进行攻击之可能性。同时,若您的应用程序要求使用者以高优先权限帐户登入,例如具有管理员权限的帐户,这可能让使用者暴露于其它的攻击途径。
评估潜在损坏
Microsoft 在评估潜在的安全性弱点时,使用 DREAD 这个前缀缩写字。此前缀缩写字描述下列因素:
潜在损坏 (Damage Potential)
重现性 (Reproducibility)
可擅用性 (Exploitability)
受影响的使用者 (Affected Users)
发现性 (Discoverability)

每个因素的等级可从 1 (最低) 到 10 (最高)。根据每个因素的分数,可计算出该弱点的总分,并做出主观性判断。最后,是否修复它的决定也取决于其它难以具体化之因素,例如对于声誉的影响。
潜在损坏
若此弱点遭擅用,最坏的结果会是什么?
注意 下列的等级为范例定义。
? 10 - 攻击者完全控制计算机。
? 2 到 9 - 每个数字代表递增的破坏程度。
? 1 - 攻击者仅能读取或写入少数不造成损害的信息 (如果有的话)。
重现性
利用此弱点重现攻击的难易度?
? 10 - 每次攻击都会成功。
? 2 到 9 - 每个数字代表递增的重现性难易度。
? 1 - 重复测试但发生次数极少。
可擅用性
根据此弱点进行攻击的难易度?
? 10 - 只需要极少甚至不需要知识或时间。
? 2 到 9 - 每个数字代表递增的可擅用性难易度。
? 1 - 需要大量的人物力和财力。
受影响的使用者
可能受此弱点影响的使用者百分比?
? 10 - 91-100%
? 2 到 9 - 每个数字代表递增的受影响使用者百分比 (例如 2:10-19%、3:20-29%,其余依此类推)。
? 1 - 0-9%
发现性
找出此弱点的难易度?
? 10 - 有大量公开发行的信息。
? 2 到 9 - 每个数字代表递增的公开程度。
? 1 - 相当隐密,几乎没有人知道它的存在。

如何在HSQL中判定一个Table是否已经建立.

--使用如下SQL,可以得到一个Schema里是否已经建立了一个table

select * from information_SCHEMA.SYSTEM_TABLES
where TABLE_SCHEM='PUBLIC' and table_name='USER'

PUBLIC是HSQL Schema的名称
USER是已经建立的table的名称.

非常cool.


星期四, 九月 08, 2005

如何想HSQLDB插入binary数据?

1.使用SQLTOOL。
在系统用户目录下建立:sqltool.rc文件,包含如下格式文字:
urlid SELF
url jdbc:hsqldb:file:D:/temp/testdb
username sa
password

java -classpath D:\hsqldb\lib\hsqldb.jar org.hsqldb.util.SqlTool SELF
使用\bl,\bp命令
2.\bl d:/a3.jpg
3.\bp
4.insert into table('wxk',?);注意?号。

星期日, 八月 28, 2005

如何通过Gtalk同朋友共享美妙音乐?

如何通过Gtalk同朋友共享美妙音乐?

Windows XP下的设置步骤
1.首先打开音量控制器,双击状态行上的音量图标,如图一,会弹出图二窗口

图一

图二
2.选择图二中的选项 菜单里的 属性(如图二),弹出图三.

图三
3.选择录音 ,然后选择 波形输出混音,如图三,在选择确定按钮弹出图四

图四

4.如图四 选择波形输出混音,并关闭该窗口
5.打开Gtalk,选择在线的朋友,在窗口里点Call按钮,如图五

图五

6.连通后,用Window MediaPlay或RealPlay打开音乐,则对方的朋友同时也可以听到了

缺点:
此时麦克风录音在window录音机里失去录音效果了。如果需要麦克风录音,
必须重复1,2,3 选择 麦克风

附录:经过测试,这个原理是通用的在MSN 7.5 测试也是可以的。哈哈

星期四, 八月 25, 2005

如何使用maven编译Project

1.学习如何使用Maven
Maven pdf手册,Getting Start 2.2 Building a Project
给出了步骤。
自然首先是安装,建立Maven使用的依赖的package.
1.1
建立一个目录 mkdir d:\project\maven cd\d:\proeject\maven
使用命令:maven genapp 一路回车按到底。maven开始从网络上下载需要的jar包(如果是第一次运行maven)
1.2
maven genapp后,在当前目录下生成了

1.3 应用其他编译需要的包或class.
看了许久,发现大多数都用,重新定义maven.dependency.classpath的方法。
需要在当前目录下建立maven.xml文件,如下:
























<pathelement path="D:/Project/employee_ejb/classes/"/>
<pathelement path="C:/ThirdPart/ehrm_EJB.jar"/>
<pathelement path="C:/ThirdPart/EJBMD_ehrm_menu.jar"/>
<pathelement path="C:/ThirdPart/gpejb.jar"/>
<pathelement path="C:/ThirdPart/gp_MailClass.jar"/>
<pathelement path="C:/ThirdPart/groovy-all-1.0-beta-7.jar"/>
<pathelement path="C:/ThirdPart/javadbf-0.4.0.jar"/>
<pathelement path="C:/ThirdPart/jdbf.jar"/>
<pathelement path="C:/ThirdPart/mailerEjb.jar"/>
<pathelement path="C:/ThirdPart/mr.jar"/>
<pathelement path="C:/ThirdPart/mysql-connector-java-3.0.8-stable-bin.jar"/>
<pathelement path="C:/ThirdPart/poi-2.5.1-final-20040804.jar"/>
<pathelement path="C:/ThirdPart/rowset1.0.1.ehrm.jar"/>
<pathelement path="C:/jboss-3.2.3/lib/jboss-jmx.jar"/>
<pathelement path="C:/jboss-3.2.3/lib/jboss-system.jar"/>
<pathelement path="C:/ThirdPart/commons-fileupload-1.0.jar"/>
</path>
</preGoal>
</project>



星期日, 八月 21, 2005

哈哈,新西兰小国家的卫星技术好厉害啊.

最近在玩NASA的WorldWind,想看清楚New ZeaLand的地图,才发现.

http://forum.worldwind.arc.nasa.gov/index.php?act=Attach&type=post&id=1203

worldwind://goto/world=Earth&lat=-41.27978&lon=174.77643&alt=344&dir=101.0&tilt=40.0

http://www.nztopoonline.linz.govt.nz/wmsconnector/com.esri.wms.Esrimap?ServiceName=nztopo_wms&

安装了Worldwind后,再下载这个可以看到New ZeaLand:

http://www.worldwindcentral.com/wiki/World_Wind_Central_Add-on_Pack

在worldwind里,选择哪个图标上面标志有:Aerial Visible字样的Icon.就可以看到了,需要从worldCentral里下载图象数据.