2009年7月21日火曜日

is not allowed to connect to this MySQL server

如果你想连接你的mysql的时候发生这个错误:

ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server

解决方法:
1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"

mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = '%' where user = 'root';mysql>select host, user from user;

2. 授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.40.54' IDENTIFIED BY '123456' WITH GRANT OPTION;

如何用java启动windows命令行程序

这是摘自《More Java pitfalls 中文版》上的例子。

先请编译和运行下面程序:

import java.util.*;
import java.io.*;

public class BadExecJavac2
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t){
t.printStackTrace();
}
}
}
我们知道javac命令,当不带参数运行javac 程序时,它将输出帮助说明,为什么上面程序不产生任何输出并挂起,永不完成呢?
java文档上说,由于有些本地平台为标准输入和输出流所提供的缓冲区大小有限,如果不能及时写入子进程的输入流或者读取子进程
的输出流,可能导致子进程阻塞,甚至陷入死锁。所以,上面的程序应改写为:

import java.util.*;
import java.io.*;

public class MediocreExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t){
t.printStackTrace();
}
}
}

下面是正确的输出:

D:\java>java MediocreExecJavac

Usage: javac
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath Specify where to find user class files
-cp Specify where to find user class files
-sourcepath Specify where to find input source files
-bootclasspath Override location of bootstrap class files
-extdirs Override location of installed extensions
-endorseddirs Override location of endorsed standards path
-d Specify where to place generated class files
-encoding Specify character encoding used by source files
-source Provide source compatibility with specified release

-target Generate class files for specific VM version
-version Version information
-help Print a synopsis of standard options
-X Print a synopsis of nonstandard options
-J Pass directly to the runtime system


Process exitValue: 2

D:\java>

下面是一个更一般的程序,它用两个线程同步清空标准错误流和标准输出流,并能根据你所使用的windows操作系统选择
windows命令解释器command.com或cmd.exe,然后执行你提供的命令。


import java.util.*;
import java.io.*;

class StreamGobbler extends Thread
{
InputStream is;
String type; //输出流的类型ERROR或OUTPUT

StreamGobbler(InputStream is, String type)
{
this.is = is;
this.type = type;
}

public void run()
{
try
{
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
{
System.out.println(type + ">" + line);
System.out.flush();
}
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}

public class GoodWindowsExec
{
public static void main(String args[])
{
if (args.length < 1)
{
System.out.println("USAGE: java GoodWindowsExec ");
System.exit(1);
}

try
{
String osName = System.getProperty("os.name" );
System.out.println("osName: " + osName);
String[] cmd = new String[3];

if(osName.equals("Windows XP") ||osName.equals("Windows 2000"))
{
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
}
else if( osName.equals( "Windows 98" ) )
{
cmd[0] = "command.com" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
}

Runtime rt = Runtime.getRuntime();
System.out.println("Execing " + cmd[0] + " " + cmd[1]+ " " + cmd[2]);
Process proc = rt.exec(cmd);
// any error message?
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");
// any output?
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");

// kick them off
errorGobbler.start();
outputGobbler.start();

// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);

} catch (Throwable t){
t.printStackTrace();
}
}
}
下面是一个测试结果:

D:\java>java GoodWindowsExec "copy Test.java Test1.java"
osName: Windows XP
Execing cmd.exe /C copy Test.java Test1.java
OUTPUT>已复制 1 个文件。
ExitValue: 0

D:\java>

下面的测试都能通过(windows xp+jdk1.5)

D:\java>java GoodWindowsExec dir

D:\java>java GoodWindowsExec Test.java

D:\java>java GoodWindowsExec regedit.exe

D:\java>java GoodWindowsExec NOTEPAD.EXE

D:\java>java GoodWindowsExec first.ppt

D:\java>java GoodWindowsExec second.doc
function TempSave(ElementID) {
CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value);
CommentsPersistDiv.save("CommentXMLStore");
}

function Restore(ElementID) {
CommentsPersistDiv.load("CommentXMLStore");
document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent");
}

Java代码查看Tomcat运行状态

import java.net.URL;
import java.net.URLConnection;
import java.util.Date;

public class Detector {
private static void keepTomcatAlive() throws NullPointerException {
String s;
String t = new String("tomcat5.exe");
boolean isTomcatAlive = false;
java.io.BufferedReader in;
try {
URL url = new URL("http://localhost/heartbeat.htm");
URLConnection con = url.openConnection();
in = new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream()));
con.setConnectTimeout(1000);
con.setReadTimeout(4000);
while ((s = in.readLine()) != null) {
if (s.length() > 0) {
// 如果能够读取到页面则证明可用
return;
}
}
in.close();
} catch (Exception ex) {
}

try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("tasklist");

in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));

while ((s = in.readLine()) != null) {
if (s.startsWith(t)) {
isTomcatAlive = true;
break;
}
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
if (isTomcatAlive) {
System.out.println("<" + new Date() + "> Tomcat is alive but not response!");
stopTomcat();
}
startTomcat();
}

public static void stopTomcat() {
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("net stop \"Apache Tomcat\"");
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
String s;
String t = "成功停止";
boolean restart = false;
while ((s = in.readLine()) != null) {
if (s.indexOf(t) != -1) {
restart = true;
break;
}
}
System.out.println("<" + new Date() + "> Tomcat is stop " + (restart ? "OK" : "ERROR"));
} catch (Exception e) {
e.printStackTrace();
}
}

public static void startTomcat() {
try {
java.lang.Process p = java.lang.Runtime.getRuntime().exec("net stop \"Apache Tomcat\"");
} catch (Exception e) {
e.printStackTrace();
}

windows SC命令详解

SC命令详解(一个很有用的command)
作为一个命令行工具,SC.exe可以用来测试你自己的系统,你可以设置一个批处理文件来使用不同的参数调用 SC.exe来控制服务。
一.SC使用这样的语法:

1. SC [Servername] command Servicename [Optionname= Optionvalues]
2. SC [command]
这里使用第一种语法使用SC,使用第二种语法显示帮助。
下面介绍各种参数。
Servername
可选择:可以使用双斜线,如\\myserver,也可以是\\192.168.1.223来操作远程计算机。如果在本地计算机上操作
就不用添加任何参数。
Command
下面列出SC可以使用的命令。
config----改变一个服务的配置。(长久的)
continue--对一个服务送出一个继续控制的要求。
control----对一个服务送出一个控制。
create----创建一个服务。(增加到注册表中)
delete----删除一个服务。(从注册表中删除)
EnumDepend--列举服务的从属关系。
GetDisplayName--获得一个服务的显示名称。
GetKeyName--获得一个服务的服务键名。
interrogate--对一个服务送出一个询问控制要求。
pause----对一个服务送出一个暂停控制要求。
qc----询问一个服务的配置。
query----询问一个服务的状态,也可以列举服务的状态类型。
start----启动一个服务。
stop----对一个服务送出一个停止的要求。
Servicename
在注册表中为service key制定的名称。注意这个名称是不同于显示名称的(这个名称可以用net start和服务控
制面板看到),而SC是使用服务键名来鉴别服务的。
Optionname
这个optionname和optionvalues参数允许你指定操作命令参数的名称和数值。注意,这一点很重要在操作名称和等
号之间是没有空格的。一开始我不知道,结果………………,比如,start= optionvalues,这个很重要。
optionvalues可以是0,1,或者是更多的操作参数名称和数值对。
如果你想要看每个命令的可以用的optionvalues,你可以使用sc command这样的格式。这会为你提供详细的帮助。
Optionvalues
为optionname的参数的名称指定它的数值。有效数值范围常常限制于哪一个参数的optionname。如果要列表请用
sc command来询问每个命令。
Comments
很多的命令需要管理员权限,所以我想说,在你操作这些东西的时候最好是管理员。呵呵!
当你键入SC而不带任何参数时,SC.exe会显示帮助信息和可用的命令。当你键入SC紧跟着命令名称时,你可以得
到一个有关这个命令的详细列表。比如,键入sc create可以得到和create有关的列表。
但是除了一个命令,sc query,这会导出该系统中当前正在运行的所有服务和驱动程序的状态。
当你使用start命令时,你可以传递一些参数(arguments)给服务的主函数,但是不是给服务进程的主函数。
二.SC create

这个命令可以在注册表和服务控制管理数据库建立一个入口。
语法1
sc [servername] create Servicename [Optionname= Optionvalues]
这里的servername,servicename,optionname,optionvalues和上面的一样,这里就不多说了。这里我们详细说
明一下optionname和optionvalues。
Optionname--Optionvalues
描述
type=----own, share, interact, kernel, filesys
关于建立服务的类型,选项值包括驱动程序使用的类型,默认是share。
start=----boot, sys tem, auto, demand, disabled
关于启动服务的类型,选项值包括驱动程序使用的类型,默认是demand(手动)。
error=----normal, severe, critical, ignore
当服务在导入失败错误的严重性,默认是normal。
binPath=--(string)
服务二进制文件的路径名,这里没有默认值,这个字符串是必须设置的。
group=----(string)
这个服务属于的组,这个组的列表保存在注册表中的ServiceGroupOrder下。默认是nothing。
tag=----(string)
如果这个字符串被设置为yes,sc可以从CreateService call中得到一个tagId。然而,SC并不显示这个标签,所
以使用这个没有多少意义。默认是nothing
depend=----(space separated string)有空格的字符串。
在这个服务启动前必须启动的服务的名称或者是组。
obj=----(string)
账号运行使用的名称,也可以说是登陆身份。默认是localsys tem
Displayname=--(string)
一个为在用户界面程序中鉴别各个服务使用的字符串。
password=--(string)
一个密码,如果一个不同于localsystem的账号使用时需要使用这个。
Optionvalues
Optionname参数名称的数值列表。参考optionname。当我们输入一个字符串时,如果输入一个空的引用这意味着
一个空的字符串将被导入。
Comments
The SC CREATE command perFORMs the operations of the CreateService API function.
这个sc create命令执行CreateService API函数的操作。详细请见CreateService。
例子1
下面这个例子在计算机上建立叫“mirror”的服务建立的一个注册表登记,是自动运行服务,从属于TDI组和NetBios服务。
C:\WINDOWS\system32>sc create mirror binPath= "D:\Ftp\新建文件夹\mirror.exe" type= own start= auto
[SC] CreateService SUCCESS
重启后生效
例子2 删除Mirror服务
C:\WINDOWS\system32>sc delete mirror binPath= "D:\Ftp\新建文件夹\mirror.exe" type= own start= auto
[SC] DeleteService SUCCESS
三. SC QC

这个SC QC“询问配置”命令可以列出一个服务的配置信息和QUERY_SERVICE_CONFIG结构。
语法1
sc [Servername] qc Servicename [Buffersize]
Parameters
servername和servicename前面已经介绍过了,这里不再多说。
Buffersize,可选择的,列出缓冲区的尺寸。
Comments
SC QC命令显示了QUERY_SERVICE_CONFIG结构的内容。
以下是QUERY_SERVICE_CONFIG相应的区域。
TYPE------dwServiceType
START_TYPE----dwStartType
ERROR_CONTROL----dwErrorControl
BINARY_PATH_NAME--lpBinaryPathName
LOAD_ORDER_GROUP--lpLoadOrderGroup
TAG------dwTagId
DISPLAY_NAME----lpDisplayName
DEPENDENCIES----lpDependencies
SERVICE_START_NAME--lpServiceStartName
例1
下面这个例子询问了在上面例子中建立的“mirror”服务的配置:
sc qc
sc显示下面的信息:
SERVICE_NAME: mirror
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : D:\Ftp\
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : mirror
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
mirror有能力和其他的服务共享一个进程。这个服务 不依靠与其它的的服务,而且运行在lcoalsystem的安全上下关系中。这些都是调用QueryServiceStatus基本的返回,如果还需要更多的细节届时,可以看看API函数文件。 mirror
四.SC QUERY
SC QUERY命令可以获得服务的信息。
语法:
sc [Servername] query { Servicename | ptionname= Optionvalues... }
参数:
servername, servicename, optionname, optionvalues不在解释。只谈一下这个命令提供的数值。
Optionname--Optionvalues
Description
type=----driver, service, all
列举服务的类型,默认是service
state=----active, inactive, all
列举服务的状态,默认是active
bufsize=--(numeric values)
列举缓冲区的尺寸,默认是1024 bytes
ri=----(numeric values)
但开始列举时,恢复指针的数字,默认是0
Optionvalues
同上。
Comments
SC QUERY命令可以显示SERVICE_STATUS结构的内容。
下面是SERVICE_STATUS结构相应的信息:
TYPE------dwServiceType
STATE------dwCurrentState, dwControlsAccepted
WIN32_EXIT_CODE----dwWin32ExitCode
SERVICE_EXIT_CODE--dwServiceSpecificExitCode
CHECKPOINT----dwCheckPoint
WAIT_HINT----dwWaitHint
在启动计算机后,使用SC QUERY命令会告诉你是否,或者不是一个启动服务的尝试。如果这个服务成功启动,WIN32_EXIT_CODE区间会将会包含一个0,当尝试不成功时,当它意识到这个服务不能够启动时,这个区间也会提供一个退出码给服务。
例子
查询“mirror'服务状态,键入:
sc query mirror
显示一下信息:
SERVICE_NAME: mirror
TYPE : 10 WIN32_OWN_PROCESS
STATE : 1 STOPPED
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
注意,这里存在一个给这个服务的退出码,即使这个服务部不在运行,键入net helpmsg 1077,将会得到对1077错误信息的说明:
上次启动之后,仍未尝试引导服务。
所以,这里我想说一句,希望大家可以活用net helpmsg,这会对你的学习有很大的帮助。
下面在对SC query的命令在说明一下:
列举活动服务和驱动程序状态,使用以下命令:
sc query
显示messenger服务,使用以下命令:
sc query messenger
只列举活动的驱动程序,使用以下命令:
sc query type= driver
列举Win32服务,使用以下命令:
sc query type= service
列举所有的服务和驱动程序,使用以下命令:
sc query state= all
用50 byte的缓冲区来进行列举,使用以下命令:
sc query bufsize= 50
在恢复列举时使用index=14,使用以下命令:
sc query ri=14
列举所有的交互式服务,使用以下命令:
sc query type= service type= interact

Mysql服务器运行状况监控

#!/bin/bash
#说明:本脚本用于检测MySQL所在服务器的运行状况,包括内存使用情况,磁盘可用空间以及MYSQL的运行状况以及同步状况
#作者:zhanglei
#时间:2009-06-22
############################################################################
#公共变量
S_Host="192.168.28.58" #从机IP
S_User="backup" #从机用户名
S_Pwd="cdelbbs1q2w" #从机密码

#M_Host="192.168.28.37" #主机IP
M_Host="127.0.0.1"
M_User="backup" #主机用户名
M_Pwd="cdelbbs1q2w" #主机

MAILLIST="sqlercn@gmail.com zhangleijs@cdeledu.com"
MAILCMD="$(which mail)"
MAILMESSAGE="/tmp/mysql.fail.$$"

MsqlCMD="$(which mysql)"
LogFile="/script/ChkMysqlServer.log"
#检查同步状态
Repl(){
echo "show master status \G" | ${MsqlCMD} -u${M_User} -p${M_Pwd} -h${M_Host} | egrep "File|Position" |sed -e's/: /=/g' >>/tmp/$$.sh
echo "show slave status \G" | ${MsqlCMD} -u${S_User} -p${S_Pwd} -h${S_Host} | egrep "Master_Log_File|Read_Master_Log_Pos|Slave_IO_Running|Slave_SQL_Running" | grep -v "Relay_Master_Log_File"|sed -e's/: /=/g'>>/tmp/$$.sh

source /tmp/$$.sh
#echo $File,$Position,$Master_Log_File,$Read_Master_Log_Pos
if [[ "$File" != "$Master_Log_File" ]]||[ $Position -ne $Read_Master_Log_Pos ]
then
echo "">>$MAILMESSAGE
echo "Mysql Replication Warning:" >> $MAILMESSAGE
echo "Master LogFile: "$File" Slave LogFile:"$Master_Log_File >>$MAILMESSAGE
echo "Master Pos: "$Position" Slave Pos:"$Read_Master_Log_Pos >>$MAILMESSAGE
fi

if [[ "$Slave_IO_Running" != "Yes" ]]||[[ "$Slave_SQL_Running" != "Yes" ]]
then
echo "">>$MAILMESSAGE
echo "MySQL Replication Error:" >>$MAILMESSAGE
echo "Slave_IO_Running :"$Slave_IO_Running >> $MAILMESSAGE
echo "Slave_SQL_Running :"$Slave_SQL_Running >> $MAILMESSAGE
echo "Date & Time: $(date) :MySQL Replication Error Slave_IO_Running is $(Slave_IO_Running) Slave_SQL_Running is $(Slave_SQL_Running)" >>$LogFile
fi
rm -rf /tmp/$$.sh
}

#检查MYSQL运行状态,只检查本地Mysql的运行状态
ChkMysql(){
#本函数用于检查本地MySQL运行状态,如果发现MySQL不可用则重启MySQL
Start_Run="/script/bash/start_mysql.sh"
Stop_Run=""
MADMIN="$(which mysqladmin)"
MPID="/usr/local/mysql/var/localhost.pid" #pid file location
#$MADMIN -h ${M_Host} -u ${M_User} -p${M_Pwd} ping 2>/dev/null 1>/dev/null
echo "select now();" | ${MsqlCMD} -h ${M_Host} -u ${M_User} -p${M_Pwd} 2>/dev/null 1>/dev/null
if [ $? -ne 0 ]; then
echo "">>$MAILMESSAGE
echo "Error: MySQL Server is not running/responding request">>$MAILMESSAGE
echo "Hostname: $(hostname)" >>$MAILMESSAGE
echo "Date & Time: $(date)" >>$MAILMESSAGE
#If exists mysqld process then try to stop mysql
o=$(ps cax | grep -c ' mysqld$')
if [ $o -eq 1 ]; then
$MADMIN -h${M_Host} -u${M_User} -p${M_Pwd} shutdown
o=$(ps cax | grep -c ' mysqld$')
if [ $o -eq 1 ]; then
pid=`cat $MPID`
kill -9 $pid
pkill -9 mysql
fi
fi
echo "Date & Time: $(date) :Stop Mysql Server" >>$LogFile
# try to start mysql
$Start_Run>/dev/null
o=$(ps cax | grep -c ' mysqld$')
if [ $o -eq 1 ]; then
sMess="MySQL Server MySQL server successfull restarted"
echo "Date & Time: $(date) :Restore Mysql Server Successfull" >>$LogFile
else
sMess="MySQL server FAILED to restart"
echo "Date & Time: $(date) :Restore Mysql Server Failed" >>$LogFile
fi
echo "Current Status: $sMess" >>$MAILMESSAGE
echo "*** This email generated by $(basename $0) shell script ***" >>$MAILMESSAGE
echo "*** Please don't reply this email, this is just notification email ***" >>$MAILMESSAGE
else # MySQL is running :) and do nothing
:
fi
}

#检查服务器磁盘使用情况
ChkDisk(){
df -lhP | sed -e's/%//g' | grep -v Mounted| grep -v 挂载点 |awk '{if($5>80) print "挂载点:"$6"使用比率超过80%"}' > /tmp/mysql.disk$$
if [ -s /tmp/mysql.disk$$ ]
then
echo "">>$MAILMESSAGE
echo "$(date) Disk Usage:">>$MAILMESSAGE
cat /tmp/mysql.disk$$ >>$MAILMESSAGE
echo "Date & Time: $(date) :Disk Usage Warning" >>$LogFile
cat /tmp/mysql.disk$$ >>$LogFile
rm -rf /tmp/mysql.disk$$
fi
}

#检查服务器内存使用情况
ChkMem(){
cat /proc/meminfo | egrep "MemFree|SwapFree" | sed -e's/kB//g' | awk '{if($2<(1*1024*1024)) print $1"少于1G"}' > /tmp/mysql.mem$$
if [ -s /tmp/mysql.mem$$ ]
then
echo "">>$MAILMESSAGE
echo "$(date) Memory Usage:">>$MAILMESSAGE
cat /tmp/mysql.mem$$ >>$MAILMESSAGE
echo "Date & Time: $(date) :Memory Usage Warning" >>$LogFile
cat /tmp/mysql.mem$$ >>$LogFile
rm -rf /tmp/mysql.mem$$
fi
}

#发送邮件
SendMail(){
if [ -s $MAILMESSAGE ]
then
for tomail in $MAILLIST
do
mail -s "MySQL Server Error" $tomail < $MAILMESSAGE
done
rm -rf $MAILMESSAGE
fi
}

澳洲厨师移民--在读TAFE学生的真实感受作者

1,TAFE的简单解释:
澳大利亚 TAFE 体系是完全建立在终身教育理论之上的教育和办学体系。TAFE ( Technical and Further Education )的全称是技术和继续教育学院,它是澳大利亚一种独特的职业教育培训体系, 是澳义务教育后最大的教育与培训组织,国家职业教育和培训(VET)的主要提供者。TAFE 相当于中国的职业学校、技校、中专和高等专科学校的综合体。
现在我在悉尼接触了tafe的学校,所以我有了新的自己的解释:
tafe是实实在在地教你一些技能,但是单凭在课堂上的练习根本不够,所以需要打工,在工作中体会。
读完tafe,已经具备基本的技能完成技术性的工作。
例如,我是读法式西点的,现在只上了一个semester的课,知道怎么做3/4puff pastry,不是用纸跟笔在A4纸上比划,而是准备好材料,进了厨房就知道怎么做出来。没读西点前,只知道吃。
没读tafe前,怕英文差会很难跟不上,现在发觉读tafe很有趣。平时上课在厨房里面上课,还可以亲手整面包,蛋糕出来吃,没有作业,每个星期一个assessment考核评估,到最后考试才笔试加操作结合评估。Pass就这样得到一个证书。可以说有课上的日子,都没饿过,每次都看着食物流口水。
比较读硕士,或者大学的朋友,论文,assessment不断,而且英文要达到的深度要很多,毕竟论文不是200字英语作文了,上千的字数,再加上打工回来的疲劳,要埋首A4纸中的压力,可想而知。
可是说,读tafe真是轻松很多。在学校能跟老师同学沟通,lesson里面的英文不懂,你也可以看着旁边的同学打蛋了,你也打蛋,到加butter那步了,你也可以跟着做。这是夸张点的说法,但是基本一上课就赶鸭子,没有很多时间你去考虑,讲求的是速度,又快又好的完成老师的要求。
怎样达到又快又好,那可以说看课前课后自己下的功夫,那么功夫下多少就看个人。例如别人回家或者打工可以练习做3次patisserie cream,跟我只做一次的就不同效果。例如别人在考试前将Professional baking这本书啃完的成绩就可以跟我忙着打工没看recommend reading就去考试的成绩就可以不同。然后体会,技巧就会有差别。
读tafe等于师父教徒弟,修行靠个人。
2,tafe与移民
tafe跟移民没有关系。tafe的学校没有一入学就跟你说,“嗯,俺们学校包你读完就移民呵。”
对,很多人都说这个,“tafe读完就可以移民的”,是广告、中介,或者其他想法的误导。
读完tafe,只是你有了这个符合移民资格的条件,移民局也没说过,“赶快来,你读完我们的TAFE就给你移民”的话。
申请移民同样当初申请留学那样子,有手续,有评估,有运气,有等待,有希望,也有失望。
3,读完tafe不移民就亏了。
在TAFE的QQ群里,新新了解的tafe的朋友很多时会说这句话,“读完tafe不移民,亏了。”“我读了tafe就为了移民的。” 见论坛: http://bbs.china2ua.com
是的,出国读书,花费人力物力,最紧要的是父母的银两,我们的责任与压力怎么会小。可是我们能不能转个弯想想:
就为了移民,了解这个国家么,爱这个国家么,离开中国值得么?
为了移民,读一个别人告诉我们很好,中介给我们推荐,朋友也读这个的专业,值得么?
为了移民,带着父母的辛苦钱过来读书,一个人重新在全新的国度构建你的生活圈,还有整天担心怎么办,该怎么移民,值得么?
为了移民,所以读书,放弃本在国内可以得到的爱情,值得么?
为了移民,所以读书,移民后就一天都亮了么,人生还要怎么开展么?
所以我要问,不管什么原因来读tafe,花时间,努力去学的一门技术技能,会跟着你一生么?如果你的答案是否定,说“我只是来混个资格申请移民的。”那么我还是建议你考虑清楚了,tafe的证书回去国内可是没有多少用处的。再说,出过国的你还愿意回去只认识怎么洗盘子么。
所以出国,读tafe对我们的影响会是很大的,甚至改变人生的轨迹。
那么移民是什么,移民就是澳洲移民局告诉你,“嗯,你是澳洲的pr了,再等多3年,交多些税,有良好记录,你就是我们的公民了。”人生需要多少次移民?移民后就高枕无忧么?如果你要说我的人生目标就为了成功移民澳洲。那这篇帖子请你忽略。
所以读完tafe,不亏。在国外沉淀的两年,努力已经可以让你在这里立足,找到发展的方向,不愁没有工作,不愁生活费,回国与移民,只是要考虑的一个抉择。
4,tafe好找工作么?
tafe就为了工作,职业而设立的,在澳洲不是我们国内大学生劳动力过剩的社会,在澳洲只有你肯工作,机会很多。有打工,对我们学生20小时的工作限制来说,够解决生活费,会积蓄的还能有钱补贴学费。
还可以做个比较,读西点的学生在面包店打工,比读会计的学生也在面包铺打工来的有意义。前者可以运用自己所学的知识,还能解决生活费,学习压力没那么重,打工心里负担比较轻松。后者打这份工或者为了赚点生活费,或者也对面包店有兴趣了解,或者找到会计相关工作的机会没那么多,学习任务在学校还是一天天压过来的,解决生活也要顾好学习,打工的心里负担自然比较重。
再说,读厨师,读西点的学生,在我看来,填饱肚子已经不用愁了。学校上课有得吃,打工的地方伙食也不差。生活费呢,省了不少。

减肥:巧喝乌龙茶 减掉七十二斤

喝茶好处多,其中一项是减肥。我的英语老师史蒂芬喝乌龙茶,半年内成功甩掉36公斤的赘肉,而且挣脱了“三高”的纠缠,重拾健康。


  42岁的史蒂芬·琼斯去年参加茶会活动,大家兴高采烈地跪坐在地上泡茶、聊天。但对于体重106公斤,身高170厘米的他,却轻松不起来。他挺着啤酒肚,坐在小板凳上,发现每个人看他的眼神都充满怜悯。当时,他的健康亮起红灯,血压高到200多毫米汞柱,血糖和胆固醇也偏高,经常气喘吁吁、满头大汗。种种痛苦都是肥胖惹的祸,使得史蒂芬决心要脱离“胖子一族”。

  后来,史蒂芬彻底改掉了吃宵夜的习惯,晚上8点以后就不再吃任何东西,也不再喝啤酒、可乐,开始每天三餐前后都要喝1杯乌龙茶。


因为,茶会的老师告诉他,茶能去油解腻,减少食物的油脂被人体吸收,容易让人有饱足感。

  与红茶和绿茶相比,乌龙茶除了能减少糖类和脂肪类食物被吸收外,还能加速身体的产热增加,促进脂肪燃烧,减少腹部脂肪堆积。

  在家里,他在冰箱冰了一大壶乌龙茶,方便取用,外出时就把茶装在水壶里,随身携带。如果在外头吃自助餐,他还会跟老板多要个碗或杯子来装茶水,先将食物泡在茶汤中,去掉浮油再吃。

  为了改掉吃宵夜的习惯,史蒂芬转而培养泡茶、养鱼等嗜好。他们夫妻经常找朋友来家里泡茶聊天,或者带着茶具相约到郊外出游。他说:“泡茶会让我凝神专注,忙得不可开交,忘掉食物的诱惑。”

  他最爱的是金萱乌龙和白毫乌龙茶,因为它们含有淡淡的果香和奶香,不用添加任何东西,就很有味。

  半年后,史蒂芬的体重从106公斤减到70公斤,而且一年来,也没有反弹。

2009年7月17日金曜日

鬼谷子 语言沟通技巧

中国民企的行销中的沟通,主要是语言方面的沟通,如何与客户有效地交谈是一项很重要的商业技能。

孔子说过:“言不顺,则事不成”。

鬼谷子人际兵法是古代游说技术的集大成者,古代纵横家们就是凭借出色的口才来说服那些帝王将相们的。

据历史记载,苏秦、张仪等纵横家们的口才都是非常出众、且富有煽动性,他们甚至能够将黑的说成白的,没有的说成有的,充满了诡辩的色彩。

今天的商业,以诚信为本无疑是企业发展的根本动力。

行销中与人沟通,完全不讲策略性是不够的,但是颠倒黑白,混淆视听也是不足取的。

语言才华与个人天赋有关,也与一个人的自身修养、知识积累有关,本章重点不是讨论如何提高语言表达的才华,而是从策略性方面来讨论如何提高语言沟通的效果。

对于绝大多数的行销人员来说,如何说话似乎是一件简单得不能够再简单的事情了,但实际上,我们经常会遇到一些行销人员在与客户交谈中所表现出来的幼稚性。

一次,某公司的行销人员拜访一位客户,这位行销人员问客户:“什么时候讨论我们的产品啊?”

客户说:“要下个月。”

行销人员说:“这么久哇,能不能这个月就讨论呢?”

客户说:“这是我们自己的事情,我们愿意什么时候讨论就什么时候讨论!”

这位行销人员并不气馁,又谈起了别的话题:“某某客户已经与我们合作了,你们也应该与我们合作。”

客户说:“某某客户是个小公司,我们是大公司,请你不要用小公司与我们比较!”

也许你会说这是新手们常犯的毛病,那么我曾经听说过这样一个故事:一次,某经理请客户甲吃饭,由于客户甲与客户乙关系很好,于是一起邀来吃饭。

席间,某经理夸夸其谈,说他们公司多大多大,他本人多有本事,如何会做生意云云。

客户乙属于那种爱较真的性情中人,当某经理说道“没有我搞不定的客户”时,客户乙一拍桌子,指着某经理说道:“如果这样说,我你就搞不定!”

果然,到现在某经理也没有搞定客户乙。

某经理不是没有能力,但是讲话太不注意小节,结果造成了不必要的麻烦,实在应该引以为诫。

鬼谷子认为,嘴巴是用来吃饭的,而不是用来乱讲话的,因为言多必失。

在古代,政治斗争十分残酷,因此,官僚们都是以无事少言、缄默其口作为安身立命的准则。

今天,与客户沟通交谈时,注重说话的策略更显重要,因为你说的每一句话,都可能会使客户产生不同的心理反应。

客户是上帝,甚至是被宠坏的上帝,不恰当的话语:——可以令和睦的关系转为生疏;——可以令生疏的关系转为紧张;——可以令紧张的关系转为破裂。

鬼谷子对于语言的沟通提出了许多充满智慧的见解,对于我们从事行销工作很有帮助。

鬼谷子认为,人之常情是:——说出来的话就希望被别人接受;——做出来的事就希望能够成功。

因此,游说的关键在于掌握扬长避短的策略,例如:——我们极力宣传某种行为的利益,是因为我们可以提供这方面的利益;——我们极力宣传某种行为的危害,是因为我们不擅长这种行为的操作;掌握了扬长避短的沟通策略,就可以有针对性地游说人物了:——与精明的人交谈,要思路广博,多方论证,避免纠缠一点不放; ——与知识广博的人交谈,要善于抓住重点,辨析事理;——与地位高的人交谈,不要表现出一种自卑的气势;——与自觉富有的人交谈,要从人生意义、社会价值等方面来发挥;——与自觉贫穷的人交谈,要从如何获利的角度来探讨;——与地位低下的交谈,要表现出充分的尊重来;——与有魄力的人交谈,要表现出果敢的一面来;——与愚蠢的人交谈,要从最有说服力的几个要点来反复阐述;针对不同的目标对象,有策略地沟通,东西方自古以来都有类似的看法。

古希腊哲学家亚里士多德认为,说服别人就要研究:——“人类性格”的类型与人类感情之间的关系;——“人类性格”的类型与人类道德之间的关系;——“人类性格”的类型与人物年龄之间的联系;——“人类性格”的类型与人类“命运”如:出身、财产、地位之间的联系;等等。

因此,亚里士多德将人物分为:——“青年型”、——“壮年型”、——“老年型”、——“富人型”、——“权贵型”等类型。

并分别对这些类型的人物进行了详细的心理特征描述,与鬼谷子的观点十分相似。

按照人物的:——性格特征;——社会地位;——职业特点;——年龄状况;——智力水平;——气质风格;——经济条件,等内容。

将这些特征、条件综合起来,针对不同的目标个体,采取个性化的沟通策略,无疑是古今不变的沟通秘诀。

除了针对不同的目标人物,采劝看人下菜碟”式的沟通策略外,鬼谷子对于语言沟通的表达形式也做了深入的研究。

例如,语言沟通的三种常见形式是:——陈述观点、——回答问题、——提出反驳。

对于这三种常见的沟通形式,掌握了基本的操作要领,可以有效地与人物沟通,而不会犯下无谓的错误。

下面分别介绍:1、陈述观点鬼谷子认为,与人物沟通,是为了说服别人接受自己的观点,并认同自己。而要达到这样的目的,一定要注意采取有利于对方的沟通方式,令对方觉得所陈述的观点、主张确实有利于对方,是对方所需要的。

这一观点在今天看来,是行销常识了。

诉诸利益,是行销过程中最关键的环节,如果你所诉诸的利益确实是对方所需要的、或最感兴趣的,那么行销就成功一大半了。

然而,对于利益的陈述,不是简单地将利益讲清楚就可以了,还需要在沟通中作进一步地修饰。

鬼谷子式语言沟通的特点是,与人物交谈犹如炒菜,加减佐料,完全视人物的口味来调整,但是菜的性质并没有改变。

现在一些公司要求行销人员学会背诵固定的销售台词,如果行销人员不会临场发挥,只是一味机械地照本宣科,其行销效果如何就不必多说了。

2、回答问题鬼谷子认为,回答问题的要领在于简单明了,尽量不要过于随便地发挥,更不要轻易地表态。

在鬼谷子智能行销工具中,回答客户问题的内容完全是策略上的需要,而不是想怎么说就怎么说,要注意说话的场合与背景。

例如,在回答客户的问题时,有的人生怕回答得不够详细,恨不得把所知道的全都讲出来,这其实是很愚蠢的:——一方面言多必失,话说多了,可能会导致相反的效果;——另一方面,讲得越多,客户对你的心理透视也越深入,就会很被动。

因此,行销中点到为止式的回答技巧是鬼谷子所推崇的。观察那些行销高手们说话,虽然表面上看起来似乎轻松随意,但是仔细分析,你会发现:他们所讲的每句话,并不是随随便便地脱口而说的,而是设下了很多前提,埋下了很多伏笔。

3、提出反驳在鬼谷子看来,提出反驳,目的不在于因此而说服对方,相反,却是一种试探人物心理虚实的策略。

鬼谷子认为,反驳别人的观点,不是说服别人的最好办法,却是了解别人真实想法的有效办法。

行销中,与客户沟通不是举行辩论赛,说服客户不是靠论理明确、论据充分,而是靠客户心甘情愿的认同。

记住,与客户洽谈生意,谈的不是道理,而是合作。道理只是形式,合作才是根本。你把客户说服了并不能够获得合作,你把客户说得心动了才能够获得合作。

因此,鬼谷子反对用反驳的方式来证明自己、打击客户(当然,与竞争对手较量时适当的反驳会很重要),却主张用反驳的方式来刺激对方,从而获得更多的信息。

需要说明的是,鬼谷子的这些语言表达的要领,只适合特定情形下的沟通,而不适合学术辩论会等形式的沟通,因而其特殊的沟通思维方式,与人们平时的习惯性思维是有区别的。

一些人总搞不清楚的是:在不同的环境与情形中,语言沟通的特点是不同的。

甚至有些人以为只要掌握了辩论赛式的口才就足以应付行销工作了,殊不知,有时候这种辩论赛式的语言表达不但于事无补,反而可能会“火上浇油”,令沟通无法有效展开。

鬼谷子式语言表达形式的另一个特点,就是强调语言表达方式的策略性,这种策略性根据我们在行销中的体会,主要表现为:——幽默性、——奇特性等内容。

正如有学者说所言:“当谋略靠幽默的语言来实现时,这幽默的语言本身就是谋略,谋略就是幽默的语言,二者是统一的……幽默的语言必定是精炼含蓄的语言,妙趣横生的语言。”(刘建国《谋略初论》)鬼谷子也认为:——语言的表达贵在奇特性。

下面,我们从将从语言表达的——幽默性、——奇特性两方面来具体分析:1、行销言语的幽默性行销中,与客户沟通,语言的幽默性是十分重要的,因为幽默具有艺术性的含蓄与夸张等特点:——含蓄是幽默的深层;——夸张则是幽默的表层。

含蓄的语言往往暗示性较强,更容易令客户在心里上接受,许多难以用道理说明的事情,用含蓄的幽默表达方式会更方便些。

夸张的语言风格,虽然会导致逻辑上的荒谬,但是却更容易启发客户领悟到荒谬背后的真相,而不至于伤害彼此感情。

同时,夸张还带有某种证明性,可以更吸引他人的注意。

记得有一部外国电影,其中有这样一个情节:一个人当街推销领带,这位老兄在大街上侃侃而谈:“女士们,先生们,现在是卫星发射的时代!”(观众笑)这位老兄更加得意了:“我的领带质量非常的好,昨天我就发射了一条,到现在还没有回收呢!”(观众大笑)幽默感强的行销高手们,往往以自我嘲讽的方式来回避客户的刁难,既避免了难堪,却又不伤和气。

2、行销言语的奇特性策略性语言的另一个特点是语言的奇特性,这种语言风格的奇特性虽然也部分地包含在幽默当中了,却具有更广阔的发挥空间。

语言的奇特性,是指与人们的习惯思维、常识认知等相违背的,一种非常规的、独特的表达方式,其目的是制造出一种出人意料的戏剧性效果。

这种戏剧性的效果,可以令客户的兴趣指数在极短的时间内迅速扩大数倍,将客户的重视程度迅速放大数倍,从而为工作的开展打下良好的基矗需要注意的是,实践中语言的幽默性与奇特性发挥是有一定限度的,过分地追求语言的幽默性与奇特性,有时候反而会影响沟通的效果。

某公司的经理与业务员拜访客户,这位经理开玩笑说:“我代表我们公司来贵单位拜访,是想关心关心你们。”

不料,这位客户今天的心情并不好,于是脸一沉地说:“我很忙,你们给我出去!”

搞得这位经理一脸的难堪。

鬼谷子不愧是语言表达的专家,除了针对不同的语言表达方式提出了应对策略外,还提出了几种可以产生不同效果的语言表达系列套餐。

鬼谷子认为,运用语言来获得他人的喜欢与重视,需要学会:——佞言;——谀言;——平言;——戚言;——静言等五种表达技巧。

因为:——佞言可以表现你的忠诚;——谀言可以表现你的智慧;——平言可以表现你的果断;——戚言可以表现你的可信性;——静言可以表现你的权威性。

对于今天的人们来说,佞言、谀言等都带有贬义色彩,其实鬼谷子的思维方式与今天的思维方式是有所区别的,正如鬼谷子强调“阴谋”,在鬼谷子的字典里“阴谋”是隐性策略的意思,而不是今天汉语中“阴谋诡计”的贬义解释。

上述的五种语言技巧,其功能主要是表现出你的:——忠诚;——智慧;——果断;——可信性;——权威性。

这是五种含有浓厚包装色彩的语言表达技巧,目的是获得他人的好感,或者展示个人魅力以及能力。

当然,究竟向客户表达出你的哪些优点,还需要视具体情况来定。

例如:——如果客户需要你是个忠诚、可信的人,就需要运用语言的策略性来表现出这方面的优点;——如果客户需要你的建议具有权威性,就需要运用语言的策略性来表现出你这方面的优点;等等。

那么,如何具体操作呢?

1、“忠诚”的语言表达技巧操作要领:预先知道客户的意图、需求,只要顺着客户的意图、需求来说话,经过一段时间后,就可以令客户欣赏你的为人了,因为你们的想法与需求是如此的一致。

回顾一下你周围的朋友,你觉得对你最忠诚的朋友是哪些?他们有什么样的特征?

经过思考,你会发现,你认为对你最忠心的朋友,一定是那些最能理解你、并总是和你的行事意图相一致的人。

他们凭什么获得了你的好感呢?

很简单,他们的想法总是与你保持高度的一致,而很少会违背你的意愿。

2、“智慧”的语言表达技巧操作要领:在论述、发表意见时,要表现出你的知识渊博来。虽然你的智慧程度与你的知识面可能无法划等号,但是,在你的客户看来,你广博的知识往往会给客户留下智慧的印象。

行销中,智慧的表现方式不是要求你就某个人生命题讲解得十分透彻,这样很难,而且你的大多数客户也没有这个雅兴,他们中很多是普通人。

因此,只要平时能够表现出你广博的知识面来,就可以给客户一个充满智慧的印象,并开始重视你的为人。

3、“果断”的语言表达技巧操作要领:果断是自信的表现;优柔寡断是不自信的表现。

你的果断表现在:——你的是非观念是否分明?

——你的判断依据是否符合逻辑?

——你的分析能力是否可以洞察问题的本质?

等等。

你平时与客户交流中,如果所作的分析,常常可以洞察事物的本质,并且针对这些分析,可以做出较明确的判断。

那么一段时间后,你在客户心目中无疑会留下十分果断的印象。

4、“可信性”的语言表达技巧操作要领:你的观点是否可信,在于你的证据是否可信,你的论证是否符合逻辑。这需要你列举出一些有说服力的证据,通过论证的方式,将各种方案的优劣、长短逐一比较分析,并从中优选出最佳的方案来。

摆事实,讲道理,这是说服客户最有效的办法。

任何客户都具有精明、理智的一面,如果你能够通过有力证据、有说服力的方案而获得客户的认可,一段时间后,客户对于你的建议的可信性自然提高许多。

5、“权威性”的语言表达技巧操作要领:树立权威的最好办法就是找出其他待选方案的缺点与不足,通过这些比较,自然可以建立起自己的权威性来。当然,有时候如果能够找出权威性的依据自然更好。

所谓“打击别人,抬高自己”。

古代纵横家们,往往善于玩弄诡辩伎俩,无限夸大竞争对手或竞争方案的缺点,同时无限夸大自己方案的优点,通过对于异己力量的打击与自我吹捧,达到树立权威的目的。

当然,这种作法即使一时得逞,终究会被人揭穿的。

行销中,我们主张以诚信为本,对于一些有根有据的东西,可以适当地宣传,但不要超出一个度,否则适得其反。

以上,我们介绍了鬼谷子式语言策略的五个自我表现技巧,对于我们从事行销工作有很大帮助,因为从:——忠诚;——智慧;——果断;——可信性;——权威性五个方面来表现自己,可以在一定程度上获得客户的欣赏与重视,这也是你提高个人魅力的一个有效办法。

但是,客户是很现实的,他们最终还是要通过行动来考核你。

因此,语言表达的威力充其量只是你行销的一个辅助性工具,你还需要不断地用你的行动来“说话”。

以上,我们从策略性的角度将鬼谷子的语言表达艺术做了一点总结,中国古代纵横家们的口才是中华民族文学宝库中的奇葩,许多脍炙人口的文章都出自于纵横家之口,对于纵横家们口才的研究是一个具有相当深度与广度的课题,显然本文只是沧海一粟,难窥全貌,希望有机会与大家共同探讨、切磋。

2009年7月16日木曜日

创建XMLHtttRequest对象(针对mozilla,IE8,FF,IE5,IE5.5,IE6,IE7)

//2、创建XMLHttpRequest对象
//这其实是XMLHttpReqest对象使用最复杂的一步
//针对IE和其他类型浏览器建立这个对象的不同方式写不同的代码

if(window.XMLHttpRequest){
//针对firefox,mozillaz,opera,IE7,IE8
xmlhttp = new XMLHttpRequest();
//用于修复某些Mozillaz浏览器bug
if(xmlhttp.overrideMimeType)
{
xmlhttp.overrideMimeType("text/xml");
}
}
else if(window.ActiveXObject){
//针对IE6,IE5.5,IE5
//两个都可以创建XMLHttpRequest对象,保存在js数组中
var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];

//var activeName= ['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0', //'MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0', //'MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
for(var i =0;i {//取出一个控件名来创建XMLHttpRequest对象,创建成功就终止循环,如果创建失败可以继续创建
//可以抛出异常,继续创建
try{
xmlhttp= new ActiveXObject(activeName[i]);
break;
}catch(e){
}
}

}
//确认XMLHttpRequest对象已经创建成功
if(!xmlhttp)
{
alert("XmlHttpRequest创建失败");
return;
}


//3、注册回调函数,函数名后面不要加括号
//如果加了括号,就变成了调用函数,会把函数的返回值发挥给xmlhttp,没有达到我们的目的
xmlhttp.onreadystatechange=callback;

//4、设置连接信息
//第一个参数设置http请求方式,主要是get和post两种方式
//第二个参数是uri地址
//第三个参数表示异步交互还是同步交互方式,true表示异步,false表示同步
xmlhttp.open("GET","/JQuery/servlet/AjaxServlet?name="+username,true);

//5、发送数据开始和服务器端交互
//同步方式下,send这句话会在服务器端的数据回来后,才执行完
//异步方式下,send会立即执行完
xmlhttp.send(null);
}
//5、写回调函数
//回调函数
function callback(){
//接收相应的相应数据
//判断交互状态已经完成
if(xmlhttp.readyState ==4)
{
//判断http的交互状态
if(xmlhttp.status == 200)
{
//获取服务器端返回的数据
//获取服务器端纯文本数据
var responseText = xmlhttp.responseText;
//将数据显示在页面上
//通过dom获取div元素节点
var divNode =document.getElementById("result");
//设置元素节点的html内容
divNode.innerHTML=responseText;
}
}

}

2009年7月15日水曜日

Windows环境比较好用的SSH和SFTP客户端组合

远程维护linux就必须用到ssh,客户端选择什么呢?
如果你使用的是Linux客户端,可以直接使用命令行下的SSH客户端,如果用Windows,则推荐免费版本的Putty,Putty已经开发多年,支持大多数常用功能,支持公钥认证(PublicKey),许多功能请查看http://www.chiark.greenend.org.uk/~sgtatham/putty/。 有了ssh,文件传输如何解决呢?命令行虽然简单可行,可图形界面还是更直观一些,比较好的选择是WinSCP,可以和Putty结合使用,效果感觉很不错。
Putty 还有个同胞兄弟portaputty,Host Key是存储在文件中而不是注册表,这样你可以把整套客户端都放在U盘里,走哪儿带到哪儿,非常方便,portaputty基于putty源码修改,不过目前在其网站上看到的是2006年最后更新,目前putty最新版本是2007年4月29日更新的0.60版本。

另外几种选择:
Axessh: http://www.labf.com/nfsaxe/index.html,该公司提供的另外几个产品也挺不错,nfsAxe有windows平台下的nfs server以及client,tftp,ftp client等
Tunnelier:http://www.bitvise.com 自带sftp功能,个人可以免费使用,不过登录ssh是直接使用的dos窗口方式,不太喜欢。
SecureCRT:个人感觉最好用,不过注册费用也不低,同时销售SecureFX(sftp客户端)
其他还有一些就不一一列举了,

mindterm 一个Java开发的SSH客户端

http://www.freedownloadscenter.com/Best/free-ssh-gui.html 有较详细的列表。

2009年7月14日火曜日

linux系统备份

如果您在此得到您需要的东西请回到首页点一下右侧我的广告,这个月的杂志实在很需要您的点击啊:)!

最近由于总是要对linux server进行改造加上家里的也是在尝试新软件,不得不对系统做一下整体备份.

要不然说不上那天系统被我失手挂掉,后悔也晚了!!



看了很多关于linux备份的文章,也提到了很多软件.

但最简单灵活的还是用tar比较好.

今天备份的是家里的OS.

Debian etch

通过systemrescuecd livecd引导系统后,将移动硬盘挂上然后通过cfdisk /dev/sda将移动硬盘重新分驱划出部分做备份.

mkfs.ext3 /dev/sda将移动硬盘格式化

然后fdisk -l 查看一下欲备份系统在磁盘所在的分区.

由于我的OS是刚刚开始学习Debian就安装好的,所以都在一个目录下.

/dev/hda1


挂载分区

在livecd的/mnt的虚拟磁盘上创建两个文件夹/back和/linux

mount /dev/sda1 /mnt/back 将移动硬盘挂到/mnt/back上

mount /dev/hda1 /mnt/linux 将原系统(欲备份系统)挂到/mnt/linux上


备份整个系统

cd /mnt/linux

tar -cz --exclude=mnt --exclude=proc -pivf /mnt/back/backup.tar.gz * (排除/mnt和/proc)



还原

cd /mnt/linux

tar xzvf /mnt/back/backup.tar.gz



如果想将系统备份到光盘上就需要将tar包分割

tar -cz --exclude=mnt --exclude=proc -pivo * | split -a 1 -b 650m - /mnt/back/backup.tar.gz-

这样会在/mnt/back/里生成几个backup.tar.gz-a, backup.tar.gz-b 等等的包,最大为650m.



还原分割包

cd /mnt/linux

cat /mnt/back/backup.tar.gz-* | tar xzvf -

ubuntu network is unreachable 解决记

由于自己的本本经常要在好几个地方用,所以每到一个地方就得重新配置一下网络。
当配置完ip和DNS后,内网的机器都可以ping通,网关也能ping通,但是ping 外网的就是不行·
一直提示 network is unreachable
此问题的解决方法就是:增加一个缺省的网关。

总结一下,步骤如下:
1.配置ip,配置 /etc/network/interfaces 文件
2.然后是DNS,配置 /etc/resolv.conf

例如:
配置静态IP地址
sudo vim /etc/network/interfaces
内容如下:
auto lo
iface lo inet loopback

iface eth0 inet static
address 172.16.15.97
netmask 255.255.248.0
gateway 172.16.15.253
auto eth0

配置DNS
vim /etc/resolv.conf
增加以下内容:
nameserver 211.95.193.97
nameserver 211.92.8.161

3.增加默认网关
route add default gw 172.16.15.253

4.重新启动网络配置
sudo /etc/init.d/networking restart

2009年7月10日金曜日

JavaMailによるシンプルなメール送信サンプル

[いがぴょんの日記v2,diary,igapyon,JavaMail,Java,mail,メール,サンプル,blancoMail] JavaMailを調査しました。 , シンプルなメール送信サンプルについて SSLあり、なしの両方を試作しました。また添付ファイルについても調べました。
ニュース: Ubuntu 9.04 (Jaunty Jackalope) 正式版リリース 04/24
Debian ベースの Linux ディストリビューションのひとつである Ubuntu の最新版がリリースです。

インディックスページへ戻る
Java: JavaMail 調査

blanco Framework の blancoMail に関して 上司の許可を得たので開発に着手することになりました。

blancoMail の開発に先立ち、まずは JavaMailの一次情報源は何かを調べました。すると 当然ですが Sunのサイトに行き着きます。

* JavaMail
http://java.sun.com/products/javamail/

現時点では JavaMail API 1.4 リリースとの記載があり、最新版は 1.4とのことです。
また、2006.04.19時点で JavaMailはオープンソース化されているようです。オープンソース化については 知りませんでした (あるいは忘れ去っていました)。このような素晴らしいプロダクトがオープンソース化されることは喜ばしいことです。

そして、JavaMailについての 「公式な」 ドキュメント及びチュートリアルについては下記にあります。

* JavaMail API documentation
http://java.sun.com/products/javamail/javadocs/index.html
* JavaMail Tutorial
http://java.sun.com/products/javamail/learning/tutorial/index.html

JavaMail のインストール

JavaMailは ダウンロードして利用することになります。 (早期に Java SE に統合されることを希望しています)

現時点では 最新安定版は 以下のバージョンとなります。

* JavaMail 1.4
o URL http://java.sun.com/products/javamail/
o バージョン: 1.4
o ファイル名: javamail-1_4.zip
o リリース日付: 2006.04.25
o 目当てとなるファイル
+ dsn.jar
+ imap.jar
+ mailapi.jar
+ pop3.jar
+ smtp.jar

JavaMailを利用するためには、JavaMail本体とは別に JavaBeans Activation Framework (JAF) と呼ばれるものが必要です。

* JavaBeans Activation Framework (JAF)
o URL: http://java.sun.com/products/javabeans/jaf/
o バージョン: 1.1
o ファイル名: jaf-1_1-fr.zip
o 目当てとなるファイル
+ activation.jar

ここで得られたファイルについて、classpathが通っているる場所に格納します。これで JavaMail API が利用可能になります。
シンプルな JavaMail メール送信サンプル

ここまで得られた情報源などをもとに、私なりに シンプルな JavaMail によるメール送信サンプルを作ってみました。

まず SSL無し版のメール送信サンプルを作りました。

SimpleSendMail.java

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* シンプルなメール送信サンプル。
*/
public class SimpleSendMail {
// 日本語メールの場合には ISO-2022-JPがオススメ。
// UTF-8だと受信時に文字化けしてしまうメーラが世の中には依然として存在しています。
private static final String ENCODE = "ISO-2022-JP";

public static void main(final String[] args) {
System.out.println("メール送信開始");

new SimpleSendMail().process();

System.out.println("メール送信終了");
}

public void process() {
final Properties props = new Properties();

// 基本情報。ここでは niftyへの接続例を示します。
props.setProperty("mail.smtp.host", "smtp.nifty.com");
props.setProperty("mail.smtp.port", "25");

// タイムアウト設定
props.setProperty("mail.smtp.connectiontimeout", "60000");
props.setProperty("mail.smtp.timeout", "60000");

// 認証
props.setProperty("mail.smtp.auth", "true");

final Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("NIFTYのID", "password");
}
});

// デバッグを行います。標準出力にトレースが出ます。
session.setDebug(true);

// メッセージ内容の設定。
final MimeMessage message = new MimeMessage(session);
try {
final Address addrFrom = new InternetAddress(
"送信者○○○@nifty.ne.jp", "送信者の表示名", ENCODE);
message.setFrom(addrFrom);

final Address addrTo = new InternetAddress("受信者○○○@gmail.com",
"受信者の表示名", ENCODE);
message.addRecipient(Message.RecipientType.TO, addrTo);

// メールのSubject
message.setSubject("初めてのメール", ENCODE);

// メール本文。setTextを用いると 自動的に[text/plain]となる。
message.setText("こんにちは。\nごきげんよう。\nさようなら。", ENCODE);

// 仮対策: 開始
// setTextを呼び出した後に、ヘッダーを 7bitへと上書きします。
// これは、一部のケータイメールが quoted-printable を処理できないことへの対策となります。
message.setHeader("Content-Transfer-Encoding", "7bit");
// 仮対策: 終了

// その他の付加情報。
message.addHeader("X-Mailer", "blancoMail 0.1");
message.setSentDate(new Date());
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

// メール送信。
try {
Transport.send(message);
} catch (AuthenticationFailedException e) {
// 認証失敗は ここに入ります。
System.out.println("指定のユーザ名・パスワードでの認証に失敗しました。"
+ e.toString());
} catch (MessagingException e) {
// smtpサーバへの接続失敗は ここに入ります。
System.out.println("指定のsmtpサーバへの接続に失敗しました。" + e.toString());
e.printStackTrace();
}
}
}

次に SSLを利用した版を作りました。(上記のソースコードに追記した形になっています。)
smtpサーバの接続情報によって SSL無し、有りの いずれのソースコードを利用するのかを選択してください。

SimpleSendMail.java

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* シンプルなメール送信サンプル。
*/
public class SimpleSendMail {
// 日本語メールの場合には ISO-2022-JPがオススメ。
// UTF-8だと受信時に文字化けしてしまうメーラが世の中には依然として存在しています。
private static final String ENCODE = "ISO-2022-JP";

public static void main(final String[] args) {
System.out.println("メール送信開始");

new SimpleSendMail().process();

System.out.println("メール送信終了");
}

public void process() {
final Properties props = new Properties();

// 基本情報。ここでは gmailへの接続例を示します。
props.setProperty("mail.smtp.host", "smtp.gmail.com");
// SSL用にポート番号を変更。
props.setProperty("mail.smtp.port", "465");

// タイムアウト設定
props.setProperty("mail.smtp.connectiontimeout", "60000");
props.setProperty("mail.smtp.timeout", "60000");

// 認証
props.setProperty("mail.smtp.auth", "true");

// SSL関連設定
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", "465");

final Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("送信者○○○@gmail.com", "password");
}
});

// デバッグを行います。標準出力にトレースが出ます。
session.setDebug(true);

// メッセージ内容の設定。
final MimeMessage message = new MimeMessage(session);
try {
final Address addrFrom = new InternetAddress(
"送信者○○○@gmail.com", "送信者の表示名", ENCODE);
message.setFrom(addrFrom);

final Address addrTo = new InternetAddress("受信者○○○@gmail.com",
"受信者の表示名", ENCODE);
message.addRecipient(Message.RecipientType.TO, addrTo);

// メールのSubject
message.setSubject("初めてのメール", ENCODE);

// メール本文。setTextを用いると 自動的に[text/plain]となる。
message.setText("こんにちは。\nごきげんよう。\nさようなら。", ENCODE);

// 仮対策: 開始
// setTextを呼び出した後に、ヘッダーを 7bitへと上書きします。
// これは、一部のケータイメールが quoted-printable を処理できないことへの対策となります。
message.setHeader("Content-Transfer-Encoding", "7bit");
// 仮対策: 終了

// その他の付加情報。
message.addHeader("X-Mailer", "blancoMail 0.1");
message.setSentDate(new Date());
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

// メール送信。
try {
Transport.send(message);
} catch (AuthenticationFailedException e) {
// 認証失敗は ここに入ります。
System.out.println("指定のユーザ名・パスワードでの認証に失敗しました。"
+ e.toString());
} catch (MessagingException e) {
// smtpサーバへの接続失敗は ここに入ります。
System.out.println("指定のsmtpサーバへの接続に失敗しました。" + e.toString());
e.printStackTrace();
}
}
}

当初想像していたよりは、すんなりと動作させることが出来ました。

ちなみに、session.setDebug(true) を指定して 実際のsmtpプロトコルのやりとりを観察することは とても重要です。これは JavaMailを利用して実装する人の責務だと考えます。
例えば、このサンプルソースの実行を試す際には、デバッグトレースを true に指定して、どのようなやりとりが smtpサーバとの間で行われているのかを観察すべきです。そして送信先のメールソフト側で実際に受信されたメールの内容をチェックすることも忘れてはなりません。メールソフトによっては 実際のメールのヘッダ部分を表示する機能を備えていますので、ヘッダ部分の表示をONに設定して意図したとおりのメール電文が受信側に届いているかどうかを確認しておきましょう。

関連するリソース

* ‘愛’で学ぶ文字コードと文字化けの常識
http://www.atmarkit.co.jp/fjava/rensai4/programer06/programer06_1.html

関連する日記

* 2007/09/05 日記: Java: JavaMailによるシンプルなメール受信サンプル

JavaMail メール送信の際の文字化け

2007.09.05追記 ケータイメールなどでは、Content-Transfer-Encoding が quoted-printable のものを適切に処理できないものが存在します。比較的新しい機種でも そのような実装のものがありました。(それが端末側の問題なのか、通信キャリア側のサーバの変換時の問題なのかについては、私は把握していません)
ここまでで示したサンプルレベルでも、quoted-printable に起因するメールの文字化け対策についての考慮が必要なのだ、ということです (問題を見つけたので、サンプルソースには当面の対策を ほどこしました)。quoted-printable のレベルでダメとなると、難易度が高いですね…。
とりあえず quoted-printable を処理できないメールソフトなんてものが、いまだに世の中に多く存在しているのだ、というのは 私にはとても意外でした。quoted-printable なんて かなり古い時期から存在していた指定内容だったように記憶しているのですが… (でもここは うろ覚えです)
添付ファイル付きの JavaMail メール送信サンプル

添付ファイル処理について 簡単に実装してみました。

こっちの方は プレーンテキストメールの送信に比べると 実装が やや厄介でした。API仕様にトラップがあるように感じました (苦笑)。
まあ、一度作ってしまうことができたので、あとの応用は 比較的簡単そうです。

変更点のみ

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.mail.Address;
import javax.mail.AuthenticationFailedException;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.mail.util.ByteArrayDataSource;

…中略…

// 変更点: ここから
// message.setTextの代わりに、添付ファイル処理を記述する

final Multipart multipart = new MimeMultipart();

// テキスト部分
final MimeBodyPart textPart = new MimeBodyPart();
textPart.setText("こんにちは。\nごきげんよう。\nさようなら。", ENCODE);

// TODO Content-Transfer-Encoding の 7bit への上書きが必要かどうかは未調査。

multipart.addBodyPart(textPart);

// 添付ファイル部分
final BodyPart attachmentPart = new MimeBodyPart();
// 常にバイナリデータであるものとしてファイルを添付する。
try {
attachmentPart.setDataHandler(new DataHandler(
new ByteArrayDataSource(new BufferedInputStream(
new FileInputStream("添付ファイル名.txt")),
"application/octet-stream")));
} catch (IOException e) {
e.printStackTrace();
return;
}

// 添付ファイル名をセット
// MimeUtility.encodeText は 添付ファイル名にascii以外の文字が入る場合の対策。
attachmentPart.setFileName(MimeUtility.encodeText("添付ファイル名.txt", ENCODE, null));
multipart.addBodyPart(attachmentPart);

message.setContent(multipart);

// 変更点: ここまで

MimeUtility.encodeText の動きは とても良くできています。与えられた文字列について、エンコードが必要な場合のみエンコードし、エンコードが不要な場合にはエンコードしない、という仕様になっていました。こういう小さな気遣いが メール送信の実装には必要なのです!
ドメイン付きホスト名が要求される場合への対応

未確認情報

メールサーバによっては、ドメイン付きホスト名が要求される場合があります。JavaMail のデフォルトではそのコンピュータのホスト名がセットされるのですが、これがドメイン付では無い場合に メールサーバへの HELLOコマンド時に拒否される場合があるようです。この場合には自ホスト名をドメイン付きホスト名に変えてやれば良いです。プロパティにホスト名をセットすると、この問題を回避できるようです。(ただし、私は手元に再現環境が無いので確認を取っていません)

* mail.smtp.localhost プロパティ: ここに ドメイン付きホスト名をセット。

文字化け対策

ISO-2022-JP に関連して文字化けに遭遇する場合があります。Microsoft Outlookと同等の挙動をどうしても実現したい、そういった場合には、ISO-2022-JP を x-windows-iso2022jp として JavaVMごと動作させるという荒技があります。

* 2007/04/27 日記: Java: Outlook 風の JISコード (ISO-2022-JP) を利用するための x-windows-iso2022jp というエンコーディング

この方法を推奨しているわけでは無いです。しかし、世の中には どうしても Outlookと挙動を合わせたいというニーズが意外に多いようなのです…。
世間のニュースから

* GNU GPLv3 日本語訳
http://opentechpress.jp/opensource/article.pl?sid=07/09/02/130237
GNU GNU General Public Licenseバージョン3 (GPLv3)の日本語全訳とのことです。

いがぴょんについて
Last modified: $Date: 2009/05/06 21:30:27 $

寻找最快的debian源sources.list

  ubuntu和debian都有很多的源和镜像,也有不少的国内镜像。一些爱好者为了寻找镜像已经自己“憋”出来了一些pl脚本用于寻找最快的镜像。实际上debian的爱好者早准备了更厉害的武器等你来用,就是apt-spy(是间谍还是小偷?哈哈)

  切记先备份你机器里的源列表。误区:通常大家都在交流使用国内的哪个源速度比较快,实际上很多国外源的访问速度是国内的很多倍。记得曾经用过国外某大学的源,速度是200k以上。日本的部分源可以达到500k以上。最近发现台湾的主镜像在我这里下载速度居然是1084k,达到1M每秒。不忙的时候,试试看,如果时间够多,可以考虑不限定为亚洲,这样有可能找到更快的镜像源。

  转自官方的一部分说明:

  `apt-spy'会根据站点回应时间和带宽自动创建`sources.list'。

  #sudo apt-get install apt-spy

  #sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak //backup

  #man apt-spy //获取详细的使用方法

  #sudo apt-spy update //更新您的镜像列表文件 /var/lib/apt-spy/mirrors.txt

  #sudo apt-spy -d testing -a Asia

  //在亚洲区寻找速度最快的testing版镜像,并生成 sources.list文件,也可使用 -o 参数指定写入文件

  apt-spy 是一个管理安装媒体的程序,使用方法简单介绍一下:

  使用方法: apt-spy [options]

  选项:
  -d distribution 选择 debian 的发行版本,例如 stable 。除升级外,必须使用此参数。

  -a area 选择进行测试的区域,例如 Aisa 。

  -c config 指定配置文件。

  -e number 指定测试的服务器数量。

  -f file 测试时抓取制定的文件(文件相对 debian base 的路径)。

  -i file 指定输入的文件,配合 -w 参数使用。

  -m mirror-list 指定要升级的镜像列表文件。

  -o output-file 重定向输出到指定文件。

  -p proxy 指定使用的代理服务器,需要遵从 [server]:[port] 的格式。

  -s country_list 指定要进行测试的国家。不能和 -a 参数同时使用。

  -t time 指定进行测试时每台服务器的超时时间,只能是正整数。

  -u update-URL 从指定的 URL 获得镜像列表更新。

  -w file 输出 -i 参数提供的服务器列表中速度最快的前几台镜像服务器(缺省是前 5 台)。

  -n number 制定 -w 参数输出的服务器数量。

  -v 输出版本信息。

  -h 输出当前帮助信息

  update 升级镜像站点列表。

  有意思的是网上常见的文档都只介绍了很少几个参数的作用,所以看到好多“二手文档”里面说测试镜像服务器速度的时候(apt-spy -d testing -A Asia)需要很长时间。其实,只要加一个参数 -t 指定超时时间就可以大大加速这个过程(至少快 10 倍)。


apt-get install apt-spy
mv /etc/apt/sources.list /etc/apt/sources.list.bak
apt-spy -d testing -t 5 -a Asia
vim /etc/apt/sources.list

deb http://ftp.tw.debian.org/debian experimental main contrib non-free
deb http://ftp.tw.debian.org/debian unstable main contrib non-free
deb http://ftp.tw.debian.org/debian-multimedia unstable main

2009年7月6日月曜日

澳洲教师紧缺 未来4年需增数千人

澳洲在未来4年需要新增2500多名公立中小学教师以应对教师短缺的局面。

《南澳时报》刊登了一份由阿德雷德大学所作的研究,文章指出今年南澳的教师人数缺口为364人。

该项研究是应澳洲教育部的要求所做,研究指出到2012年,南澳州教师的需求量将会增加75%(即需新增640名教师)。

教师人员短缺已经造成某些教师身兼多职,学校校长也警告说如果雇用教师的人数不达标的话,学校可能会减少授课科目。

澳洲教育部预测:教育专业毕业生的数目增加可以弥补教师短缺的现状,但是,校长和教师工会表示因为有源源不断的教师专业的学生从事其他高薪职业,所以这个目标实现不了。

《南澳时报》昨天刊登了一篇调查指出:20个澳洲的县和北部郊区已经出现了教师短缺的问题特别是数学、科学、技术研究和语言课程缺少授课教师。

南澳中学校长协会Jim Davies表示:“找到教授这些学科的教师十分困难。我们现在正在和高薪产业和就业前景良好的产业(如地质科学和工程)争夺人才。同时,有许多教师正计划退休,还有的教师正在服兵役。学校很难找到短期顶替他们工作的人。”

根据教师注册委员会2007年的报告,目前该机构在南澳共有36206名注册教师,年龄段在50—70的教师人数为17363名(约占到了总人数的一半)。

根据信息自由的原则,《南澳时报》刊登了一则教育部2006年的文件,该文件指出:“7年之后,教师的平均年龄将会达到49岁……,随着教师的退休,教师人员将会出现短缺。”

《南澳时报》昨天联系了20名市级和县级的学校校长,其中一名不愿透露姓名的校长表示:“除了英语、社会和环境课,其余的科目都不好教。”

另一名受访人表示:“下学期学校缺好几名教师,但是我们不知道上哪去找教师。”

澳大利亚教育协会的调查显示47%(约1/2)的县级学校和33%(约1/3)的市级学校现在都面临教师短缺的问题。

调查指出:1/3的县级学校因为教师短缺而减少授课科目。

1/3的县级学校在让没有相应科目授课资格的教师授课。

1/4的学校被迫多次刊登广告招聘教师。

澳大利亚教师协会南澳分会主席Correna Haythorpe 表示:“这一现象令人警觉。公立中小学校的教师将会于6月17日(周二)举行罢工活动,要求加薪21%,改善工作环境,制定吸引和留住教师的激励性计划。“学校不能更改课程,教师被迫教授非自己所学专业的课程会面临更大的压力。 ”

之前,维多利亚州的教师争取到了澳大利亚最高的薪酬待遇,这是一件具有里程碑意义的事件。

教育部女发言人表示:“根据预测,届时会有足够的毕业生填补教师空缺。新增教师和现有教师再加上已经落实的教师优惠性待遇政策……教师的人手足够了。我们已经制定了一系列政策吸引某些科目的教师,包括县级教师奖学金……我们正在制定其他的激励性措施吸引包括数学、科学等难点科目的教师,并吸引教师前往条件困难的县级学校前去教学。”