2008年12月17日星期三

使Windows XP快上几倍的三招

1、减少开机磁盘扫描等待时间,开始→运行,键入:chkntfs /t:0

2、删除系统备份文件:
  在各种软硬件安装妥当之后,其实XP需要更新文件的时候就很少了。开始→运行,敲入:sfc.exe /purgecache 然后回车即可,近3xxMb。

3、压缩文件夹: 这是一个相当好的优化,Windows XP内置了对.ZIP文件的,我们可以把zip文件当成文件夹浏览。不过,系统要使用部分资源来实现 这一功能,因此禁用这一功能可以提升系统性能。实现方法非常简单,只需取消zipfldr.dll的注册就可以了,点击开始――运行,敲入: regsvr32 /u zipfldr.dll。然后回车即可。



2008年12月16日星期二

如何去掉WindowsXP非正版验证标志

方法一:
新建文本文件,输入下面这些内容或者复制到记事本
ON ERROR RESUME NEXT
Dim VOL_PROD_KEY
if Wscript.arguments.count<1 then
VOL_PROD_KEY=InputBox("Powered By www.pcpxp.com"&vbCr&vbCr&" 本程序将自动替换你当前 Windows 的序列号,通过微软验证完全正版。"&vbCr&vbCr&"序列号(OEM版无效,默认版本为 XP VLK):","Windows XP序列号自动更换器","MRX3F-47B9T-2487J-KWKMF-RPWBY")
if VOL_PROD_KEY="" then
Wscript.quit
end if
else
VOL_PROD_KEY = Wscript.arguments.Item(0)
end if
VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-","") 'remove hyphens if any
for each Obj in GetObject("winmgmts:{impers}").InstancesOf ("win32_WindowsProductActivation")
result = Obj.SetProductKey (VOL_PROD_KEY)
if err = 0 then
Wscript.echo "OK!去微软验证吧!"
end if
if err <> 0 then
Wscript.echo "替换失败!输入的 CD-KEY 与当前的版本不匹配。"
Err.Clear
end if
Next
然后将以上文本保存为 key.vbs 双击执行即可。
这样您的电脑就可以通过windows XP的正版验证啦
方法二:
1运行regedit进入注册表,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon,删除它,重新启动。wgatray.exe就不会自动启动了,讨厌的“你可能是盗版软件的受害者”也就不见了。 2把系统盘:\windows\system32中的wgatray.exe删除,烦人的“”没有了。(建议在安全模式下进行:启动电脑中按F8进入安全模式) 3彻底清除相关多余垃圾,运行搜索文件wgatray,在另外的文件夹下还有,统统删除。
方法三:
首些找一个正版的CD-KEY:MRX3F-47B9T-2487J-KWKMF-RPWBY(这个我用过,可以的),花您五分钟加重启。 点击 “开始”=>“运行” 在运行中输入“regedit”,完成后点击“确定” 进入注册表编辑器后,选择“编辑”=>“查找” 在“查找目标”中输入“OOBETimer”,完成后点击“查找下一个” (找不到?) 正在查找,请您稍等…… 找到OOBETimer! 对着它点击右键选择“修改二进制数据” 在“数值数据”中,至少修改一个字节(即任意一个英文字母或数字),如把FF改为F2等。之后点击“确定” 完成后退出注册表 单击开始 => 运行 输入%systemroot%\system32\oobe\msoobe.exe /a 选择通过电话激活以后点击下一步 点击“更改产品密钥” 输入新的产品密钥以后选择“更新” 然后选择以后提醒我 重启计算机 这样就完完全全的成为正版用户了。微软在线更新、正版增值计划等等,只有正版用户才能享受的待遇,您即刻便能享受! 100%OK的``我自己也是这样改的`

2008年11月26日星期三

利用JavaMail收/发Gmail邮件(SSL)


转[http://www.cnblogs.com/ufoer23/archive/2006/04/06/368728.html]
与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此常规的JavaMail程序是无法收发邮件的,下面是使用JavaMail如何收取Gmail邮件以及发送邮件的代码:



1. 邮件收取


package lius.javamail.ssl;

import java.io.UnsupportedEncodingException;
import java.security.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;

/**
 * 用于收取Gmail邮件
 * @author Winter Lau
 */
public class GmailFetch {
 
 public static void main(String argv[]) throws Exception {

  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

  // Get a Properties object
  Properties props = System.getProperties();
  props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.pop3.socketFactory.fallback", "false");
  props.setProperty("mail.pop3.port", "995");
  props.setProperty("mail.pop3.socketFactory.port", "995");

  //以下步骤跟一般的JavaMail操作相同
  Session session = Session.getDefaultInstance(props,null);

  //请将红色部分对应替换成你的邮箱帐号和密码
  URLName urln = new URLName("pop3","pop.gmail.com",995,null,
    "[邮箱帐号]", "[邮箱密码]");
  Store store = session.getStore(urln);
  Folder inbox = null;
  try {
   store.connect();
   inbox = store.getFolder("INBOX");
   inbox.open(Folder.READ_ONLY);
   FetchProfile profile = new FetchProfile();
   profile.add(FetchProfile.Item.ENVELOPE);
   Message[] messages = inbox.getMessages();
   inbox.fetch(messages, profile);
   System.out.println("收件箱的邮件数:" + messages.length);
   for (int i = 0; i < messages.length; i++) {
    //邮件发送者
    String from = decodeText(messages[i].getFrom()[0].toString());
    InternetAddress ia = new InternetAddress(from);
    System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');
    //邮件标题
    System.out.println("TITLE:" + messages[i].getSubject());
    //邮件大小
    System.out.println("SIZE:" + messages[i].getSize());
    //邮件发送时间
    System.out.println("DATE:" + messages[i].getSentDate());
   }
  } finally {
   try {
    inbox.close(false);
   } catch (Exception e) {}
   try {
    store.close();
   } catch (Exception e) {}
  }
 }
 
 protected static String decodeText(String text)
   throws UnsupportedEncodingException {
  if (text == null)
   return null;
  if (text.startsWith("=?GB") || text.startsWith("=?gb"))
   text = MimeUtility.decodeText(text);
  else
   text = new String(text.getBytes("ISO8859_1"));
  return text;
 }

}

2. 发送邮件

package lius.javamail.ssl;

import java.security.Security;
import java.util.Date;
import java.util.Properties;

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.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 使用Gmail发送邮件
 * @author Winter Lau
 */
public class GmailSender {

 public static void main(String[] args) throws AddressException, MessagingException {
  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
  // Get a Properties object
  Properties props = System.getProperties();
  props.setProperty("mail.smtp.host", "smtp.gmail.com");
  props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.smtp.socketFactory.fallback", "false");
  props.setProperty("mail.smtp.port", "465");
  props.setProperty("mail.smtp.socketFactory.port", "465");
  props.put("mail.smtp.auth", "true");
  final String username = "[邮箱帐号]";
  final String password = "[邮箱密码]";
  Session session = Session.getDefaultInstance(props, new Authenticator(){
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(username, password);
      }});

       // -- Create a new message --
  Message msg = new MimeMessage(session);

  // -- Set the FROM and TO fields --
  msg.setFrom(new InternetAddress(username + "@mo168.com"));
  msg.setRecipients(Message.RecipientType.TO,
    InternetAddress.parse("[收件人地址]",false));
  msg.setSubject("Hello");
  msg.setText("How are you");
  msg.setSentDate(new Date());
  Transport.send(msg);
 
  System.out.println("Message sent.");
 }
}

2008年11月25日星期二

如何使用Oracle SQLDeveloper 中连接MS SQLServer和MySQL数据库


一、连接至MySQL数据库

1.下载mysql的jdbc驱动, http://dev.mysql.com/downloads/ 免费,嘿嘿。

2.解压zip文件(我下载的版本是mysql-connector-java-5.1.5),我们要用的是mysql-connector-java-5.1.5-bin.jar文件。

/** 添加MySQL JDBC驱动的方法

a、将这个jar文件放在你的
   \Tomcat6.0\lib下(Tomcat6版本)          
   \Tomcat5.5\commom\lib(Tomcat5.5或者5.0的版本)

b、也可以通过配置环境变量classpath,修改。

c、如果用的是Eclipse(MyEclipse),JB,NB可以导入包。

注意:这个文件可以放到3个不同的位置,作用范围也不同:

  如果是linux系统:
     /usr/java/jdk/jre/lib/ext――――――所有Java应用
     /usr/local/resin/lib―――――――――所有JSP/Servlet应用
     网站根目录/WEB-INF/lib 单个网站
     如果放到resin的目录,重新启动resin即可:/etc/init.d/resin restart

  如果是Win2000系统,放到类似的目录,如:

D:\jdk\jre\lib\ext     D:\resin\lib    网站根目录\htdocs\WEB-INF\lib
*/

3. 运行SQL developer,选择菜单"Tools->Preferences",在打开的窗口中选择"database->Third Party JDBC Drivers"然后点击"Add Entry...",选择 mysql-connector-java-5.1.5-bin.jar (从你解压的文件夹中选择),点击确定。

4.然后新建连接,一切OK


二、连接到Ms SQL Server数据库

1.首先要到 http://sourceforge.net 下载 net.sourceforge.jdbc.driver,本人使用的版本是 jtds-1.2.2.jar


2.将压缩包中的jtds-1.2.2.jar复制到"<sql developer>/sqldeveloper/lib"文件夹或任意文件夹,也可以只解压缩在本地也可 :)


3. 运行SQL developer,选择菜单"Tools->Preferences",在打开的窗口中选择"database->Third Party JDBC Drivers"然后点击"Add Entry...",选择 jtds-1.2.2.jar (从你解压的文件夹中选择),点击确定。

4.然后新建连接,一切OK。

/** 如果连接不上SQL SERVER可能需要执行以下步骤:

    1. 把JtdsXA.dll copy到<SQL SERVER 2000>\bin目录中
    2. 以 sa login SQL Query Analyzer, 执行 instjtds.sql (执行一次失败可以执行多次,嘿嘿)
    3. 做好一切后, 打开 sqldeveloper.exe, 创建新的Connection
    4. 在 ORACLE SQL Developer中, 点File->New->选中 Database Connection,点确定
         在弹出的UI中选择"SQLServer"页签, 再填写相关的Loginner及Pwd和Connection Name后
         点一下Retrieve database按钮, 然后在其旁边的下接框中选取想要连接的Database就可以
         了
    5. 注意:密码一项不能为NULL, 密码为NULL的loginner需要更改密码后才能连接

*/

本文出自 "小脚丫" 博客,请务必保留此出处http://82584.blog.51cto.com/72584/108051

Ubuntu8.10上安装Oracle SQL Developer乱码解决


在Oracle下了一个1.5.1 No JRE版的。解压后./sqldeveloper.sh无法运行,终端的信息是ClassPath没有设置。查了一下资料,要顺利用起来,还需要分别做这么几件事情:
1、设置ClassPath
修改/sqldeveloper/bin/sqldeveloper.conf
在最后加一行SetJavaHome /usr/lib/jvm/java-6-sun/

2、因为用的zip解压包,因此记得$sudo chmod 744 sqldeveloper.sh

3、查询出来的字体是方块
原因很简单,JDK中不带中文字体,我们需要给它添加一下。
$cd $JAVA_HOME/jre/lib/fonts/
$sudo mkdir fallback
拷贝字体文件到这个目录下,8.10的字体目录在/usr/share/fonts/truetype/wqy下
$sudo cp /usr/share/fonts/truetype/wqy/wqy-zenhei.ttf /usr/lib/jvm/java-6-sun/jre/lib/fonts/fallback/
$sudo mkfontscale
$sudo mkfontdir

2008年11月17日星期一

VM packs下载(installAnywhere打包需要的内置jre)


http://www.acresso.com/downloads/downloads_7150.htm

为mysql添加root远程登录权限


默认情况下,MySQL之允许本地登录,需要修改/etc/mysql/my.cnf文件:
注释这一行:
bind-address=127.0.0.1 ==> #bind-address=127.0.0.1
对于需要远程登录的用户执行如下命令:
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "yourpasswd";
mysql> flush privileges;

Cron 表?? Cookbook


七. Cron 表达式 Cookbook

此处的 Cron 表达式 cookbook 旨在为常用的执行需求提供方案。尽管不可能列举出所有的表达式,但下面的应该为满足你的业务需求提供了足够的例子。

・分钟的 Cron 表达式

表 5.1. 包括了分钟频度的任务计划 Cron 表达式用法        表达式
每天的从 5:00 PM 至 5:59 PM 中的每分钟触发        0 * 17 * * ?
每天的从 11:00 PM 至 11:55 PM 中的每五分钟触发        0 0/5 23 * * ?
每天的从 3:00 至 3:55 PM 和 6:00 PM 至 6:55 PM 之中的每五分钟触发        0 0/5 15,18 * * ?
每天的从 5:00 AM 至 5:05 AM 中的每分钟触发        0 0-5 5 * * ?
 
・日上的 Cron 表达式

表 5.2. 基于日的频度上任务计划的 Cron 表达式用法        表达式
每天的 3:00 AM         0 0 3 * * ?
每天的 3:00 AM (另一种写法)         0 0 3 ? * *
每天的 12:00 PM (中午)        0 0 12 * * ?
在 2005 中每天的 10:15 AM        0 15 10 * * ? 2005

・周和月的 Cron 表达式

表 5.3. 基于周和/或月的频度上任务计划的 Cron 表达式用法        表达式
在每个周一,二, 三和周四的 10:15 AM        0 15 10 ? * MON-FRI
每月15号的 10:15 AM          0 15 10 15 * ?
每月最后一天的 10:15 AM        0 15 10 L * ?
每月最后一个周五的 10:15 AM         0 15 10 ? * 6L
在 2002, 2003, 2004, 和 2005 年中的每月最后一个周五的 10:15 AM         0 15 10 ? * 6L 2002-2005
每月第三个周五的 10:15 AM        0 15 10 ? * 6#3
每月从第一天算起每五天的 12:00 PM (中午)        0 0 12 1/5 * ?
每一个 11 月 11 号的 11:11 AM        0 11 11 11 11 ?
三月份每个周三的 2:10 PM 和 2:44 PM        0 10,44 14 ? 3 WED

八. 创建一个即刻触发的 Trigger

有时候,你需要立即执行一个 job。例如,想像一下,你正在构建一个 GUI 程序并允许用户能立刻执行。另一个例子,你或许已经检测到了某个 Job 未执行成功,因此你想要即刻重跑一次。在 Quartz 1.5,有几个方法被加入到了 TriggerUtils 类中,使得实现那些事很容易了。代码 5.4 展示了如何部署一个 job,只让它立即执行一次。

代码 5.4. 你可以用 TriggerUtils 来立即执行一个 Job

   1. public class Listing_5_4 {  
   2.      static Log logger = LogFactory.getLog(Listing_5_4.class);  
   3.  
   4.     public static void main(String[] args) {  
   5.          Listing_5_4 example = new Listing_5_4();  
   6.          example.runScheduler();  
   7.     }  
   8.  
   9.     public void runScheduler() {  
  10.          Scheduler scheduler = null;  
  11.  
  12.          try {  
  13.               // Create a default instance of the Scheduler  
  14.               scheduler = StdSchedulerFactory.getDefaultScheduler();  
  15.               scheduler.start();  
  16.               logger.info("Scheduler was started at " + new Date());  
  17.  
  18.               // Create the JobDetail  
  19.               JobDetail jobDetail = new JobDetail("PrintInfoJob",  
  20.                                            Scheduler.DEFAULT_GROUP,  
  21.                                            PrintInfoJob.class);  
  22.  
  23.               // Create a trigger that fires once right away  
  24.               Trigger trigger = TriggerUtils.makeImmediateTrigger(0, 0);  
  25.  
  26.               trigger.setName("FireOnceNowTrigger");  
  27.  
  28.               scheduler.scheduleJob(jobDetail, trigger);  
  29.          } catch (SchedulerException ex) {  
  30.              logger.error(ex);  
  31.          }  
  32.     }  
  33. }  

public class Listing_5_4 { static Log logger = LogFactory.getLog(Listing_5_4.class); public static void main(String[] args) { Listing_5_4 example = new Listing_5_4(); example.runScheduler(); } public void runScheduler() { Scheduler scheduler = null; try { // Create a default instance of the Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); logger.info("Scheduler was started at " + new Date()); // Create the JobDetail JobDetail jobDetail = new JobDetail("PrintInfoJob", Scheduler.DEFAULT_GROUP, PrintInfoJob.class); // Create a trigger that fires once right away Trigger trigger = TriggerUtils.makeImmediateTrigger(0, 0); trigger.setName("FireOnceNowTrigger"); scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException ex) { logger.error(ex); } } }

在代码 5.4 中,TriggerUtils 的 makeImmediateTrigger() 方法被用来立即执行一个 Job。第一个参数是将要触发的次数。第二个参数是执行的间隔时间。为方便起见,这个方法的签名显示如下:

public static Trigger  makeImmediateTrigger(int repeatCount, long repeatInterval);

TriggerUtils 类提供了许多便利的方法简化了 Trigger 的使用。确切地检查一下这个工具类中看看是否有你想要的东西。你还将在本书上看到更多的使用 TriggerUtils 的例子。

2008年11月16日星期日

关于ubuntu 下安装virtualbox


一、安装
1. 下载安装包。建议下载 Deb 包。
2. 准备依赖。VirtualBox 的正常使用需要 libxalan110 和 libxerces27 这两个包。所以,你要先行安装它们,可以使用下面的指令:
sudo apt-get install libxalan110 libxerces27
3. 安装编译工具及相关包。在安装过程中,要编译 VirtualBox 所用的内核模块。为此,你需要准备基本的编译工具及包,你可以使用下列指令来安装它们:
sudo apt-get install build-essential linux-headers-`uname -r`
4. 现在,转到所保存 VirtualBox 安装包的目录,通过下面的指令来安装它:
sudo dpkg -i VirtualBox_1.x.x_Ubuntu_feisty_i386.deb
在安装的过程中,VirtualBox 会要求你接受许可协议。另外,安装程序也会创建 vboxusers 用户组,并编译所需的内核模块。
5. 现在,你还不能启动 VirtualBox,因为你的当前用户还不属于 vboxusers 用户组。你可以使用下面的指令来将当前的用户(请使用你的用户名代替指令中的"youruser")添加到 vboxusers 用户组中:
sudo adduser youruser vboxusers
virtualbox 屏幕下移问题:
如果虚拟机的分辨率接近x的分辨率而导致部分界面在x边沿时,全屏后原来窗口管理器 title 的地方变为黑色条状区域,屏幕下移,windows的开始菜单显示在下一个桌面。
解决方法:全屏前把分辨率调小,全屏后右键把显示器分辨率调到同x一致,这样就不会有屏幕偏移。
二、桥接网络配置
一般而言,安装完VirtualBox设定网路时选择默认的NAT模式,Guest就可顺利联网了,但是这种方式比较死板,要作更有弹性的变化,应该采用桥接模式(Bridged),这里的桥接模式就如同VMware中的Bridged模式,Host与Guest在局域网(LAN)中的地位是相等的。
参考 virtualbox 安装后放在 VirtualBox 目录中的用户手册文件 UserManual.pdf 配置如下:
1. 在基于 Debian 和 Ubuntu 的系统上,首先要安装含有建立虚拟网络设备 ( TAP interfaces ) 的工具 uml-utilities 和桥接工具 bridge-utils:
sudo apt-get install uml-utilities
sudo apt-get install bridge-utils
为了使你的虚拟机能够访问网络接口,你必须将运行虚拟主机的用户的用户名(通常是你的ubuntu登录用户名)添加到uml-net用户组(请用你的用户名替换其中的"vboxuser"):
sudo gpasswd -a vboxuser uml-net
注意:为了使改动生效,请重新启动你的电脑。
2. 向你的 Debian 或者 ubuntu 操作系统描述你要添加的虚拟网络设备,编辑 /etc/network/interfaces:
sudo vim /etc/network/interfaces
在打开的文件后面添加下面的内容,将虚拟网络接口命名为 "tap0",指定该接口IP配置方法为手动,并指定使用该接口的用户(请用你的用户名替换其中的 "vboxuser"):
auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user vboxuser
3. 首次使用需要激活刚才建立的虚拟网络接口和网络桥:
sudo /sbin/ifup tap0
sudo /sbin/ifup br0
这个步骤只需要做一次,下次主机重新启动时,这个接口和桥将自动激活。
4. 另外还需要在 /etc/network/interfaces 中加入如下内容,建立一个名叫 "br0" 的桥,该桥的IP配置方法为通过DHCP配置,主机中的所有网络接口,也包括tap0这个虚拟网络接口,都将建立在这个桥之上:
auto br0
iface br0 inet dhcp
bridge_ports all tap0
在这里你可以根据自己的网络状况做相应的更改,你可以使网络桥使用静态 IP:
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
5. 让 virtualbox 使用这个虚拟网络接口,启动 virtualbox,在主界面上选中要使用刚才建立的虚拟网络接口tap0的虚拟机,点"设置",在弹出的窗口中选"网络",选中其中一块网卡(通常为 "网络适配器 0"),选中"启用网络适配器","连接到"后面选 "Host Interface",选中"接入网线",然后在"主机网络界面名称"中填入刚才建立的虚拟网络接口的名字 "tap0",确定。同样的你也可以使用 VBoxManage 的命令行工具(将 "My VM" 换成你的虚拟机名字 ):
VBoxManage modifyvm "My VM" -hostifdev1 tap0
最后,配置主机和虚拟机的网络,使主机和虚拟机在同一个网段,这样主机和虚拟机就成了局域网中地位相同的两台机器了,可以互相访问了。
三、撤销网络桥
1. 禁用网桥和虚拟网卡:
sudo /sbin/ifdown br0
sudo /sbin/ifdown tap0
2. 将前面修改的 /etc/network/interfaces 文件还原

2008年11月10日星期一

Linux环境下MySQL数据库大小写区分问题

1、Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;

2、用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;

lower_case_table_names参数详解:

lower_case_table_names = 0

其中 0:区分大小写,1:不区分大小写

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名与表名是严格区分大小写的;

2、表的别名是严格区分大小写的;

3、列名与列的别名在所有的情况下均是忽略大小写的;

4、变量名也是严格区分大小写的;

MySQL在Windows下都不区分大小写。

3、如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:

A、创建时设置:

CREATE TABLE T(

A VARCHAR(10) BINARY

);

B、使用alter修改:

ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;

C、mysql table editor中直接勾选BINARY项。


Linux下启动/关闭/重启Mysql

命令:
/etc/init.d/mysql   start|stop|restart|reload|force-reload

2008年11月5日星期三

ubuntu 安装RAR 压缩/解压缩程序


RAR 压缩/解压缩程序
    Windows下的常用压缩格式zip,我们的应用程序 -> 附件 -> 归档管理器是可以解决的,但是另一种常用压缩格式rar在默认情况下就没有安装,我们这里安装程序RAR来解决这个问题,在命令行输入:
    sudo apt-get install rar
    来下载安装他,然后建立软链接
    sudo ln -fs /usr/bin/rar /usr/bin/unrar
    这样,以后只要在命令行输入unrar,就可以解压或者压缩文件了,安装完成后,归档管理器也同时集成了rar组件。

2008年11月4日星期二

Notes 8.0.1 for Linux(Ubuntu8.10)安装

随着 Linux 桌面级应用的普及,IBM 推出了基于 Linux 平台的多语言本地化版本的 Notes,给客户带来更多的体验和应用,下面我们开始 Notes on Linux 之旅。

从 Lotus Notes 8.0 开始,IBM 发布了支持 Linux 平台的多语言本地化版的客户端(标准版),除传统的 Notes 功能外还提供了许多新特性包括 IBM Lotus Productivity 工具、 Activities 、 IBM Lotus Samtime 以及 Composite Application Editor 选装, 其安装程序采用了 ISMP (Install Shield Multi-Platform) 技术,提供直观简易快捷的安装方式,用户无论是在 Windows 平台还是 Linux 平台都会得到一致的安装体验。本文以简体中文的安装为例详细介绍了 Notes 8.0.1 在 Linux 平台的安装配置卸载过程,并讨论了在安装使用中可能出现的问题。

Notes 8.0.1 for Linux 语言分组

最新发布的 8.0.1 提供了除英文外 25 门语言的本地化版本,安装包分为 8 组( CD/eSD ):

  • 简体中文、繁体中文、日文、韩文
  • (巴西)葡萄牙语,法语,西班牙语
  • 意大利语,德语,加泰罗尼亚语( Catalan )
  • 丹麦语,荷兰语,挪威语,芬兰语,瑞典语
  • 捷克语,葡萄牙语
  • 波兰语,俄语
  • 希腊语,匈牙利语,土耳其语
  • 斯洛伐克语,斯洛文尼亚语,泰语




回页首


Notes 8.0.1 for Linux 安装需求

1. Notes 8.0.1 for Linux 安装需求

项目 描述
操作系统
  • RHEL5.1 Desktop ( 禁用 AIGLX 和 SELinux )
  • SLED10 SP1 XGL
处理器 兼容 Intel Pentium 或者更高
Pentium 4, 1.2GHz 或者更高
内存 最小 512 MB,推荐 1G 或更高
硬盘空间 安装目录( /opt )最小 1.5 G
浏览器 Mozilla firefox 1.5.x.x(GTK2 build)
Mozilla SeaMonkey 1.0.xx(GTK2 build)
Mozilla Runtime Environment(xulrunner) 1.8.0.x (GTK2 build)





回页首


Notes 8.0.1 for Linux 本地化版本安装

对于 Notes8.0.1 for Linux 本地化版本 客户可以采用图形化界面安装或者 Smart Upgrade 模式。这里主要介绍一下如何通过图形化界面安装。

注意 : Notes 8.0.x for Linux 不支持从 Notes 7.x 升级,必须安装到其他目录或者先卸载然后开始安装。

表 2. Notes 8.0.1 for Linux 安装包目录结构

+-deploy
| +-extras
| | …
| +-install.xml
| +-install_xx.properties
+-plug-in_customization.ini

+-installdata
+-setup.sh
+-updateSite.zip

可执行文件 setup.sh 是安装程序的入口。

图形化安装

如果获得正确的 Notes 8.0.1 产品版本,在 CD 或以解包的安装程序中,可以找到安装程序 setup.sh ,以 root 用户身份并且选用期望使用的语言(如下例中选择简体中文)登录 Linux 系统,双击或者通过命令 ./setup.sh 来开始安装。


需要切换到英文环境,否则会有乱码。
需关闭桌面特效,否则会出现弹出的安装向导画面是空的(系统-》首选项-》外观-》视觉效果-》选择无)

装完后还要把安装目录权限改一下,否则无法运行:
sudo chown -R username:usergroup /opt/imb/lotus/notes
sudo chown -R username:usergroup /etc/lotus/notes
sudo chown -R username:usergroup /home/username/lotus/notes

注意 :必须用 root 用户安装。

当初始化完成后, 用户会得到一个 Lotus Notes 8.0.1 安装的欢迎界面, 如 图1 所示


图 1. Lotus Notes 8.0.1 安装的欢迎界面
Lotus Notes 8.0.1 安装的欢迎界面

这里点击 ‘取消(C)’ 退出安装,点击‘下一步(N) >’将得到 Lotus Notes 8.0.1 安装的软件许可证协议界面,如 图 2 所示。


图 2. Lotus Notes 8.0.1 安装的软件许可证协议界面
Lotus Notes 8.0.1 安装的软件许可证协议界面

这个界面上,用户可以点击 ‘打印’ 打印整个许可证协议, 通过点击 ‘English’ 显示英文的许可证协议内容, 点击 ‘请阅读非 IBM 条款’获知相关协议内容。

如 果用户选择 ‘我不接受许可证协议中的任何条款’,点击 ‘下一步(N) >’ 会弹出一个对话框来让用户进一步确认是否拒绝这个许可协议,如果确认拒绝则退出安装, 如果不拒绝则返回本界面。如果用户同意接受这个许可协议,点击 ‘下一步(N) >’ 会弹出安装位置界面,指定安装位置后,点击 ‘下一步(N) >’ 会弹出安装选择语言本地化数据界面,如 图3 所示。


图 3. Lotus Notes 8.0.1 安装语言本地化数据界面
Lotus Notes 8.0.1 安装语言本地化数据界面

这 个界面上,用户通过复选框可以选择安装一个或多个语言本地化数据。点击 ‘下一步(N) >’ 会弹出安装可选功能部件界面,用户通过复选框可以选择安装零个或多个功能部件(“活动” | “Sametime” | “IBM Lotus Symphony” | “组合应用程序编辑器”)后,点击 ‘下一步(N) >’ 会弹出安装总结界面,如 图 4 所示


图 4. Lotus Notes 8.0.1 安装总结界面
Lotus Notes 8.0.1 安装总结界面

点击 ‘安装(I)’ 弹出安装进度界面。最后,安装程序提示一个安装成功的界面,如 图5 所示


图 5. Lotus Notes 8.0.1 安装成功界面
Lotus Notes 8.0.1 安装成功界面

点击 ‘完成’ 结束安装。

Smart Upgrade 安装

Smart Upgrade 安装需要 Domino 管理员配置相应的服务,客户端会得到提示有高版本可用或者可以通过 Smart Upgrade 菜单项来升级,这里就不详细描述了。





回页首


文件结构

当安装完成后,如果使用默认安装目录,会发现 /opt/ibm/lotus/notes/res/zh_CN/etc/lotus/notes/data/shared/MUI/zh_CN ,其中 ‘zh_CN 是在 图3 中所选的安装本地化数据语言的代码,如果选中多个,则这里会并列出现多个类似目录。在前者目录下是包含了本地化数据的资源文件,后者则包含了本地化数据的数据库模板文件。





回页首


配置使用

当 Notes 8.0.1 for Linux 安装完成后,可以在系统应用程序的‘新应用程序’及‘办公’分组中找到 ‘Lotus Notes 8’ 图标,如图 6 所示


图 6. Lotus Notes 8 图标
Lotus Notes 8 图标

注意: Lotus Symphony 系列应用程序是选装了 IBM Lotus Symphony 功能部件的话才会出现。

Louts Notes for Linux 只允许非 root 用户使用,作为 root 用户不可以运行,否则会出现警示窗口,如图 7 所示


图 7. 警示窗口
警示窗口

用户点击 ‘确定’ 后关闭。

重新以非 root 用户并选择简体中文作为语言登陆系统,双击 ‘ Lotus Notes 8 ’ 图标,出现 Lotus Notes 8 配置的闪屏界面 ,如图 8 所示


图 8. Lotus Notes 8 配置的闪屏界面
Lotus Notes 8 配置的闪屏界面

无需任何操作用户会得到下一个 IBM Lotus Notes 8.0.1 配置的欢迎界面,如图 9 所示


图 9. Lotus Notes 8 配置的欢迎界面
Lotus Notes 8 配置的欢迎界面

这里点击 ‘取消’ 退出配置,点击‘下一步(N) >’将得到 Lotus Notes 8.0.1 配置的用户信息界面,如 图10 所示。


图 10. Lotus Notes 8 配置的用户信息界面
Lotus Notes 8 配置的用户信息界面

这个界面上,用户输入使用的姓名, 如果选择 ‘连接到 Domino 服务器(W)’ ,需要输入 Domino 服务器名称,也可以先不连接任何服务器。点击 ‘下一步(N) >’ 会弹出选择用户 Notes 标识文件界面,如图 11 所示


图 11. Lotus Notes 8 配置的 Notes 标识文件界面
Lotus Notes 8 配置的 Notes 标识文件界面

这个界面上,用户输入使用的 Notes 标识文件或者使用 ‘浏览(B)…’ 选择自己的表示文件。点击 ‘下一步(N) >’ 会弹出确认是否将标识文件拷贝到 Notes 目录中,确认后,会弹出配置其他服务界面,如图 12 所示


图 12. Lotus Notes 8 配置其他服务界面
Lotus Notes 8 配置其他服务界面

这个界面上, 用户如果有需要配置其他服务,选择相应的服务,点击 ‘下一步(N) >’ 进行相应的配置,如果没有则 点击 ‘完成(F) >’ 会弹出 Notes 设置完成界面,如图 13 所示


图 13. Lotus Notes 8 设置完成界面
Lotus Notes 8 设置完成界面

点击 ‘确定(O)’ 后, Lotus Notes 8.0.1 展现出来,可以开始全新体验了,如图 14 所示


图 14. Lotus Notes 8.0.1
Lotus Notes 8.0.1




回页首


卸载

Lotus Notes 8 支持图形和静默模式的卸载方法。当用户要卸载客户端时,必须以 root 用户来执行,在 Lotus Notes 8 安装目录下有 uninstaller.bin ,默认安装目录下是 /opt/ibm/lotus/notes/_uninstall/uninstaller.bin。

图形模式卸载

双击运行 uninstaller.bin ,初始化完成后出现 Lotus Notes 8.0.1 卸载欢迎界面,如图 15 所示


图 15. Lotus Notes 8.0.1 卸载的欢迎界面
Lotus Notes 8.0.1 卸载的欢迎界面

这里点击 ‘取消(C)’ 退出卸载,点击‘下一步(N) >’将弹出卸载进度界面,如图 16 所示


图 16. Lotus Notes 8.0.1 卸载的进度界面
Lotus Notes 8.0.1 卸载的进度界面

稍候之后,出现卸载完成界面,如图 17 所示


图 17. Lotus Notes 8.0.1 卸载的完成界面
Lotus Notes 8.0.1 卸载的完成界面

点击 ‘完成(F)’ 结束卸载。

静默模式卸载

执行命令:
#_uninstall/uninstaller.bin –silent

卸载程序执行完以后,会有一些日志留在程序安装路径,这些文件需要手动删除。另外,在每个配置运行客户端的用户目录下也会生成各自的一些文件,那些文件也需要手动删除。





回页首


常见问题

  1. Q1: 为什么安装界面出现非正确的本地化语言?
  2. A1: 首先检查系统中 locale 是否正确;其次是否拿到正确的安装包(具体参见 Notes 8.0.1 for Linux 语言分组 );另外 Install Shield 不支持泰文和加泰罗尼亚语( Catalan ),所以使用正确的 locale 和安装包这两门语言的安装界面将保持英文。

Q2: 同时安装了多门语言,为什么配置后切换 locale 出现混杂语言界面?

A2: 在 Notes 客户端一个屏显示的内容实际是来自多个组件完成的,对每个用户当配置客户端时生成了一些数据库,如 bookmark.nsf , names.nsf 等,这些都是根据当时的会话 locale 生成的,当切换去另一个locale 启动 Notes 时,这些已经生成的数据库是不会自动再生成另一语言的,所以在一些界面会看到混杂的文字,解决方案是可以用安装的语言模板替换已生成的数据库设计;也可以 删除用户目录下的 lotus 目录, 然后重新配置生成。





回页首


结束语

本文以简体中文为例详细讨论了 Lotus Notes 8.0.1 for Linux 的本地化版本安装和配置、卸载过程以及常见问题。





回页首


参考资料

学习

获得产品和技术

讨论



关于作者


王振荣,IBM 软件开发中心软件工程师,负责 Notes8 Linux 本地化版本的开发和测试,有丰富的 Notes/Domino GVT、NLV 经验。