2009年12月1日星期二

安装Liquid 7.2后导致光驱不可用的解决方法

 

Upgrade the DVD/CD driver to the latest version.

If you have installed any CD/DVD-burning software (Liquid 7.2 Video editing software), please temporarily remove them from Control Panel-> Programs and Features.

Delete Filter Drivers

1.     Click Start, type regedit and press ENTER.

2.     Navigate to the following key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E965-E325-11CE-BFC1-08002BE10318}

3.     Right click the {4D36E965-E325-11CE-BFC1-08002BE10318} entry, choose Export, select Desktop in the Save in box and type backup in File Name. Click Save.

Please Note: The backup file is on the Desktop and named backup.reg. We can simply restore the registry by double-clicking the backup.reg file.

4.     Highlight this key ({4D36E965-E325-11CE-BFC1-08002BE10318}), on the right pane, and then check if Upperfilters and Lowerfilters value are present. If so, please right click on the values and select Delete to remove them.

5.     Restart the computer

Reinstall the DVD ROM

1.     Click Start, type devmgmt.msc and press Enter.

2.     Expand DVD/CD-ROM drives.

3.     Right-click the DVDRAM and click Uninstall.

4.     Restart the computer.

If the issue persists, to get the issue resolved in a timely manner, I suggest contacting DVD manufacturer as soon as possible.

Good luck!

2009年11月9日星期一

“快速启动”里的显示桌面没了!怎么添加?

可以使用记事本等文本编辑器,重新用以下内容建立一个“显示桌面.scf”文件。 

[Shell]
Command=2
IconFile=explorer.exe,3

[Taskbar]
Command=ToggleDesktop

将文件存到文件夹“C:\Document and Settings\Administrator\Application Data\Microsoft\Internet Explorer\Quick Launch”中或创建快捷方式直接拖拽至任务栏中即可。


其中的Administrator是登陆的用户名

2009年10月28日星期三

2009年10月18日星期日

Filter Servlet控制用户权限

//过滤器代码

package cn.cslg.labsys.filter;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.NamingException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.cslg.labsys.db.DBPoolException;
import cn.cslg.labsys.db.JndiBean;

/**
* 过滤器,对用户登录情况进行检查,如果用户未登录,则转到登录页面处理
*
* @author jimshen
*
*/
public class SessionChecker implements Filter {

    private String targetURI;

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // 取得HTTP request/response/session对象
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpSession session = httpRequest.getSession(false);

        // 如果用户已登录,按既定流程运行
        try{
        if (session != null) {
            String user = (String) session.getAttribute("TNum");
            if (user != null) {
                String url = httpRequest.getRequestURI();
                if(pright(url,user)){
                    chain.doFilter(request, response);
                    return;
                }else
                    return;
            }
        }
        }catch(DBPoolException e){
            throw new ServletException(e);
        }catch(NamingException e){
            throw new ServletException(e);
        }catch(SQLException e){
            throw new ServletException(e);
        }
        httpResponse.sendRedirect(targetURI);

    }

    private boolean pright(String url, String tnum) throws DBPoolException,
            NamingException, SQLException {
        Connection conn = null;
        try {
            conn = JndiBean.getConnection();
            String sql="select * from priviledge where  locate(module,?)<>0 and Tnum=?";
            PreparedStatement pstmt=conn.prepareStatement(sql);
            pstmt.setString(1,url);
            pstmt.setString(2, tnum);
            ResultSet rs=pstmt.executeQuery();
            if(rs.next())
                return true;
            rs.close();
            pstmt.close();
            sql="select * from priviledge where locate(module,?)<>0";
            pstmt=conn.prepareStatement(sql);
            pstmt.setString(1,url);
            rs=pstmt.executeQuery();
            if(rs.next())
                return false;
            return true;
        } finally {
            if (conn != null)
                conn.close();
        }
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        targetURI = filterConfig.getInitParameter("targetURI");
    }

    public void destroy() {
    }
}

//过滤器配置(web.xml)
<!-- filter to check user privilidge -->
    <filter>
        <filter-name>SessionChecker</filter-name>
        <filter-class>cn.cslg.labsys.filter.SessionChecker</filter-class>
        <init-param>
            <param-name>targetURI</param-name>
            <param-value>/LabSys/index.jsp</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>SessionChecker</filter-name>
        <url-pattern>/outlines/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>SessionChecker</filter-name>
        <url-pattern>/labfile/*</url-pattern>
    </filter-mapping>

//priviledge表结构
TNum(用户名)    module(模块名,即目录名)
s09002        labfile
s09025        labfile

Remove WPF plugin from FireFox

MS released another .NET extension into Firefox. Mozilla is fighting back and disabling the extension.
http://www.ghacks.net/2009/10/17/mic...n-for-firefox/
Your Firefox may have blocked it already, but here's how to remove it.
* Make sure Firefox is closed
* Del "C:\WINDOWS\Microsoft.NET\Framework\v3.5\Windows Presentation Foundation\DotNetAssistantExtension\*"
* Run regedit and go to “HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins"
* Delete the microsoft.com/WPF,version=3.5 folder

2009年5月30日星期六

Aptana Plugin For Eclipse 1.2.7 破解

针对最新的aptana_update_024747,可以从 http://www.aptana.com/download/下载并安装。

安装完成后,在eclipse/plugins目录中找到 com.aptana.ide.core_1.2.7.024747.jar

用jad或者相关反编译软件反编译 com.aptana.ide.core.licensing.ClientKey 这个类,我用的是 http://proglife.yo2.cn/articles/eclipse%E4%B8%8B%E7%9A%84%E5%8F%8D%E7%BC%96%E8%AF%91%E6%96%B9%E6%A1%88.html 里边的方案进行反编译的。

新建一个Java类ClientKey,将反编译出来的代码粘贴到这个类中,并修改如下:

package com.aptana.ide.core.licensing;

import java.util.Calendar;
import java.util.TimeZone;

public final class ClientKey
{
  public static final String BEGIN_LICENSE_MARKER = "--begin-aptana-license--";
  public static final String END_LICENSE_MARKER = "--end-aptana-license--";
  public static final int PRO = 0;
  public static final int TRIAL = 1;
  private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
  public static final String EMAILS_NON_MATCHING = "EMAILS_NON_MATCHING";
  public static final ClientKey EMPTY_KEY = new ClientKey(1, "any@gmail.com", 0L);
  private String email;
  private long expiration;
  private int type;

  public ClientKey(int type, String email, long expiration)
  {
    this.type = type;
    this.email = email;
    this.expiration = expiration;
  }

  public boolean isCloseToExpiring()
  {
    return false;
  }

  public boolean isValid()
  {
    return true;
  }

  public boolean isCloseToMatching()
  {
    return true;
  }

  public boolean isExpired()
  {
   return false;
  }

  public String getEmail()
  {
      return "any@gmail.com";
  }

  public Calendar getExpiration()
  {
    Calendar expirationCal = Calendar.getInstance();
    expirationCal.add(Calendar.YEAR, 50);
    return expirationCal;
  }

  public boolean isTrial()
  {
    return false;
  }

  public boolean isPro()
  {
    return (!(isTrial()));
  }

  public boolean shouldProPluginsRun()
  {
    if (isPro())
    {
      return true;
    }
    return (!(isExpired()));
  }

  public static String trimEncryptedLicense(String encrypted)
  {
    String newEncrypted = encrypted;
    newEncrypted = newEncrypted.trim();
    newEncrypted = newEncrypted.replaceAll("--begin-aptana-license--", "");
    newEncrypted = newEncrypted.replaceAll("--end-aptana-license--", "");
    newEncrypted = newEncrypted.replaceAll("\\s+", "");
    return newEncrypted;
  }
}

注意红色的是修改的部分。

编译该文件,并用生成的class文件替换com.aptana.ide.core_1.2.7.024747.jar中的ClientKey.class文件。(可用winrar打开后直接拖进去覆盖)。

重新启动eclipse即可生效。效果图如下:

1

2009年5月28日星期四

[整理] 解决digital tv link多换台几次后无声或者无响应的方法

1、在换台前,点击播放器的停止播放按钮停止当前频道的播放,然后用digital tv link 换台,最后点击播放器的播放按钮来播放;

2、经过检查发现,digita tv link 播放时会在dm500s中创建2个streampes 进程,换台时又会再创建2个,这样多次换台,你的dm500s的资源就将耗尽,并出现无声等现象。而,停止键会关闭创建的streampes进程, 这样就不会出现耗费资源的状况了。

你也可以telnet 到dm 上把无响应的streampes进程kill掉,不用重启主机也可以了.

killall streampes

2009年4月30日星期四

[原创]Maya 2009

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.IO;

namespace MayaReg
{
    class Program
    {
        static void Main(string[] args)
        {
            ManagementObjectSearcher sysinfo = new ManagementObjectSearcher(new SelectQuery("Win32_NetworkAdapterConfiguration"));
            foreach (ManagementObject mo in sysinfo.Get())
            {
                if ((bool)mo["IPEnabled"])
                {
                    String hardInfo = mo.Properties["MacAddress"].Value.ToString().ToLower();
                    hardInfo = hardInfo.Replace(":", "");
                    //Console.Write(hardInfo);

                    String s ="FEATURE MayaUnltd sgiawd 2009.000 permanent uncounted 0 \\\n HOSTID=111111111111";
                    s=s.Replace("111111111111", hardInfo);
                    using (StreamWriter sw = new StreamWriter("C:\\FLEXLM\\aw.dat"))
                    {
                        sw.Write(s);
                    }

                    System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
                    Info.FileName = "awkeygen.exe";
                    Info.Arguments = "aw.dat";
                    Info.WorkingDirectory = "C:\\FLEXLM";
                    System.Diagnostics.Process Proc;
                    try
                    {
                        Proc = System.Diagnostics.Process.Start(Info);
                    }
                    catch (System.ComponentModel.Win32Exception e)
                    {
                        Console.WriteLine("系统找不到指定的程序文件。\r{0}", e);
                        return;
                    }
                }
            }
            Console.Write("Maya破解完成,按Enter键退出");
            Console.Read();
        }
    }
}

2009年4月17日星期五

使用VB.NET编写了一个定时登录Dr.COM Hotspot上网验证系统的Windows服务

使用Visual Studio 2005编写,项目类型是Windows服务。
从组件菜单中选择Timer组件,注意默认的Timer组件是System.Windows.Forms.Timer,并不能在服务中使用,要使用System.Timer.Timer组件,可以在工具箱的组件面板上点击右键,出现下面的菜单,选择红色框子圈出的项,从对话框中将需要的组件添加到面板


将正确的Timer组件拖到类的设计面板,设置合适的interval,并将Timer设置为Enable。双击Timer组件,添加代码如下(加粗部分)
Imports System.Text
Imports System.Net
Imports System.Timers
Public Class AutoLogonService
    Protected Overrides Sub OnStart(ByVal args() As String)
        ' 请在此处添加代码以启动您的服务。此方法应完成设置工作,
        ' 以使您的服务开始工作。
    End Sub
    Protected Overrides Sub OnStop()
        ' 在此处添加代码以执行任何必要的拆解操作,从而停止您的服务。
    End Sub
    Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
        Dim MyClient As New WebClient
        Dim MyURL As String
        Dim data As String
        Dim postData As Byte()

        MyURL = "http://10.29.0.250/F.htm"
        data = "DDDDD=你的用户名&upass=你的密码&0MKKey=登录 Login"
        postData = Encoding.ASCII.GetBytes(data)
        MyClient.UploadData(MyURL, "POST", postData)
    End Sub
End Class
右击设计视图选择“添加安装程序”,为该服务添加安装程序,并设置项目、安装程序的名称和相关属性。最后生成Service。
Service的安装
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil c:\Dr.COM.LogonService.exe
Service的卸载
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil c:\Dr.COM.LogonService.exe /u
将服务安装后,可以在管理工具|服务中去启动他,这样,即使机器重启或者长时间没数据流量,也能保证不断网,使得某些需要定时联网的程序正常工作
参考资料
  1. http://support.microsoft.com/kb/842793/zh-cn
  2. http://support.microsoft.com/kb/820639/zh-cn
  3. http://lonely7345.javaeye.com/blog/249015

VB.NET实现Dr.COM自动登录

Imports System.Text
Imports System.Net

Module Module1

    Sub Main()
        Dim MyClient As New WebClient
        Dim MyURL, srcString As String
        Dim data As String
        Dim postData As Byte()
        Dim responseData As Byte()

        MyURL = "http://10.29.0.250/F.htm"
        data = "DDDDD=你的用户名&upass=你的密码&0MKKey=登录 Login"

        postData = Encoding.ASCII.GetBytes(data)
        responseData = MyClient.UploadData(MyURL, "POST", postData)
        srcString = Encoding.UTF8.GetString(responseData)

        'Console.WriteLine(srcString)
        'Console.ReadKey()

    End Sub

End Module

2009年4月13日星期一

无题

127.0.0.1 activate.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 ereg.adobe.com
127.0.0.1 activate.wip3.adobe.com
127.0.0.1 wip3.adobe.com
127.0.0.1 3dns-3.adobe.com
127.0.0.1 3dns-2.adobe.com
127.0.0.1 adobe-dns.adobe.com
127.0.0.1 adobe-dns-2.adobe.com
127.0.0.1 adobe-dns-3.adobe.com
127.0.0.1 ereg.wip3.adobe.com
127.0.0.1 activate-sea.adobe.com
127.0.0.1 wwis-dubc1-vip60.adobe.com
127.0.0.1 activate-sjc0.adobe.com

使用curl实现Dr.COM Hotspot上网验证系统的登录

方便在Linux环境下使用,呵呵

curl -d "DDDDD=你的账号&upass=你的密码&0MKKey=%u767B%u5F55%20Login"  http://10.29.0.250/F.htm

[原创]通过Java程序实现Dr.COM Hotspot的上网验证

package drcom;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class Login {

    String userAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)";
    HttpClient client = new HttpClient();
    static final String TARGET_SITE = "10.29.0.250";
    static final int TARGET_PORT = 80;
    public static void main(String[] args) throws HttpException, IOException {
        Login l=new Login();
        PostMethod method=new PostMethod("http://10.29.0.250/F.htm");
        l.initMethod(method);
        l.fillLogonData(method);
        method.setRequestHeader("Referer","http://10.29.0.250/");
        l.client.executeMethod(method);
        String s=l.getResponse(method);
        System.out.println(s);
    }
    public Login() {
        client.getHostConfiguration().setHost(TARGET_SITE, TARGET_PORT);
    }

    public void initMethod(HttpMethod method) {
        method.setRequestHeader("User-Agent", userAgent);
        method.setRequestHeader("Accept-Encoding", "gzip, deflate");
        method.setRequestHeader("Accept-Language", "zh-cn");
        method.setRequestHeader("Accept", "*/*");
        method.setRequestHeader("Connection", "Keep-Alive");
        method.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
                new DefaultHttpMethodRetryHandler());
    }
    public String getResponse(HttpMethod method) throws IOException {
        InputStream is = method.getResponseBodyAsStream();
        StringBuffer buf = new StringBuffer();
        byte b[] = new byte[16384];
        int len = 0;
        while ((len = is.read(b)) > 0) {
            buf.append(new String(b, 0, len, "gb2312"));
        }
        String response = buf.toString();
        return response;
    }
    public void fillLogonData(PostMethod method) {
        NameValuePair[] data = new NameValuePair[3];
        data[0] = new NameValuePair("DDDDD", "username");
        data[1] = new NameValuePair("upass", "password");
        data[2]=new NameValuePair("0MKKey","登录 Login");
        method.addParameters(data);
    }

}

2009年4月8日星期三

XP远程桌面登录问题的解决方案

新安装的系统,Windows XP,远程桌面有问题,表现为本地桌面或者远程桌面只能有一个用户登录,如果一方登录了,另一方同时登录,则会造成黑屏或者主机无响应。

解决方案:

将下面的内容保存为reg文件并导入到注册表,重新启动系统即可。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"SessionImageSize"=dword:00000020

2009年4月2日星期四

Failed shutdown of Apache Portable Runtime

新安装的机器,在MyEclipse中停止Tomcat服务器时出现如下信息
[org.apache.catalina.core.AprLifecycleListener]-[INFO] Failed shutdown of Apache Portable Runtime

解决方法:

(1)安装Tomcat时预先安装native1.dll 或者

(2)去 http://tomcat.heanet.ie/native/ 下载编译好的 tcnative-1.dll 文件,放到Tomcat的bin目录下

2009年3月27日星期五

Linux下安装iscsi-initiator

转自 http://clusters.blog.51cto.com/632801/123773

1.1 连接ISCSI

操作系统:redhat linux AS 5(默认安装)

Iscsi包:  iscsi-initiator-utils-6.2.0.742-0.5.el5.i386.rpm

1.1.1 安装rpm包
[root@linux ~]# rpm –ivh iscsi-initiator-utils-6.2.0.742-0.5.el5.i386.rpm

运行此命令后,会生成一个目录/etc/iscsi,该目录下有两个文件:

Initiatorname.iscsi和iscsid.conf

1.1.2 启动ISCSI服务

安装完iscsi服务默认是关闭的,需要手工启动

[root@linux ~]# cd /etc/init.d

[root@linux ~]# ./iscsi start

1.1.3 搜寻盘阵
运行以下命令搜寻target,即目标端:存储设备

[root@linux ~]#iscsiadm --mode discovery --type sendtargets --portal 192.168.1.221

以上IP即是存储设备IP

1.1.4 显示盘阵
显示存储端target name

[root@linux ~]# iscsiadm --mode node

显示结果与在7612i串口 iscsi management→iscsi node名字相同

1.1.5 登陆盘阵
target登陆
[root@linux ~]#iscsiadm --mode node --targetname targetname --portal 192.168.1.221:3260 --login

经过以上几步,fdisk–l就可以看到所挂接分区了!!!

(为确保重启后也能看到,再修改一下/etc/iscsi/iscsid.conf
[root@linux ~]# vi /etc/iscsi/iscsid.conf
iscsiadm --mode node --targetname targetname --portal 192.168.1.221:3260 –login
添加到该文件中的开始部分
设置服务启动chkconfig --level 35 iscsid .)

其实这个文件大多数内容处于被注释状态,该命令添加位置应该影响不大.然后重启电脑后直接fdisk –l 依然可以看到所挂接的分区。至此iscsi所有操作完成,但挂载的分区不是linux所识别,必须使用FDISK进行磁盘分区。
1.2 设置分区
1.2.1 使用fdisk命令进行磁盘分区

fdisk是各种Linux发行版本中最常用的分区工具,是被定义为Expert级别的分区工具。我们可以通过fdisk来分区使用iscsi设备。它还包括一个二级选单,首先输入命令,然后出现问答式界面,用户通过在这个界面中输入命令参数来操作fdisk。

# fdisk /dev/hdb

运行后出现fdiak的命令提示符:

Command (m for help):

使用n命令创建一个分区,会出现选择主分区(p primary partition)还是扩展分区(llogical)的提示,通常选用主分区。然后按照提示输入分区号(Partion number(1-4):)、新分区起始的磁盘块数(FirstCylinder)和分区的大小,可以是以MB为单位的数字(Last cylindet or +siza or +sizeM or+sizeK:)。例如:

[root@linux ~]#fdisk /dev/sdb

查看分区,如果是第一次操作时,显示为无。

Command (m for help):p

Disk /dev/sdb:255 heads, 63 sectors, 4427 cylinders

Units = cylinders of 16065 * 512 bytes

Device Boot    Start       End    Blocks   Id  System

建立分区

Command (m for help):n

Command action

e   extended

p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-4427, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-4427, default 4427):

Using default value 4427

保存分区信息

Command (m for help):w

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING:If you have created or modified any DOS 6.x

partitions, please see the fdisk manual page for additional

information.

Syncing disks.
1.2.2 现在验证新分区:

[root@linux ~]# fdisk /dev/sdb

The number of cylinders for this disk is set to 4427.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):p

Disk /dev/sdb:255 heads, 63 sectors, 4427 cylinders

Units = cylinders of 16065 * 512 bytes

Device Boot    Start       End    Blocks   Id  System

/dev/sdb1             1      4427  35559846   83  Linux

Command (m for help):q
1.2.3 格式化分区

[root@localhost ~]# mkfs -t ext3 /dev/sdb1

mke2fs 1.39 (29-May-2006)

Filesystem label=OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

214761472 inodes, 429495759 blocks

21474787 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=0

13108 block groups

32768 blocks per group, 32768 fragments per group

16384 inodes per group

Superblock backups stored . blocks:

            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

            4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,

            102400000, 214990848

Writing inode tables: done                          

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

1.2.4 设定加载点:

文件系统必须有一个挂载点,它只是一个空的目录,新文件系统在这里与系统目录树“相连”。经过以上的操作,我的 Linux服务器已经连接到 iSCSI 储存设备, 并且如同Linux 本机上面的一个 SCSI 硬盘一样。 使用的方式几乎一模一样。

假设iSCSI 主机挂载到 /cluster/raid 目录下:

[root@linux ~]# mkdir /cluster/raid

[root@linux ~]# mount  /dev/sda1 /cluster/raid

[root@linux ~]# df

Filesystem       1K-blocks          Used    Available  Use%  Mounted .

/dev/hda1         10080488       2950408     6618012   31%   /

tmpfs              5036316         81172     4699312   0%    /dev/shm

/dev/sda1       1914788196      27040372  1790482212   2%    /cluster/raid
1.2.5 设定自动挂载:

在机器重新启动后自动加载分区,你必须在/etc/fstab中加入相应分区,但分区类型必须市"_netdev".例如加载的分区sdb1:

[root@linux ~]# vi /etc/fstab

/dev/sdb1   /cluster/raid   ext3    ­_netdev     0   0

/dev/sdc1   /data/sdc1      ext3    _netdev     0   0

/dev/sdd1   /data/sdd1      ext3    _netdev     0   0
1.2.6 查看挂载分区:

[root@localhost ~]# df -h

文件系统              容量    已用     可用     已用%      挂载点

/dev/sda1              64G    5.6G      55G     10%         /

tmpfs                 1.7G       0     1.7G      0%         /dev/shm

/dev/sdb1             1.6T    197M     1.5T      1%         /data/sdb1

/dev/sdc1             1.6T    197M     1.5T      1%         /data/sdc1

[转载] openfiler的权限控制

openfiler的共享使用初看起来比较简单,但实际上具体的搭配相当灵活,有时候让人觉得有些混乱,无所适从。

根据我的理解,他的共享权限在3个地方进行限制:

第一,general里面的local network部分的ip设置,这个ip实际上是针对所有访问openfiler的用户的,不单单是对共享的限制,就是说,在这里你添加了ip,其他的pc才能根openfiler进行通信。

第二,就是在make share里面的host access configuation部分,针对某个客户端的具体访问进行设置,按协议来分,cifs/smb、nfs、http和ftp,并且可以设置3中访问级别,none、ro和rw。需要注意的是,每次更改后,最好点上restart services再确定修改,否则的话可能会出现修改无效。

第三,就是group access configuation配置了,这部分最让人糊涂,因为他有个pg项,就是primary group,很长一段时间里,都没搞清楚这个是什么意思,到底有什么用,至少对我是这样。就字面来说,因为openfiler的user是可以加入多个组的,因此必须有个pg属性,但是具体的使用权限体现在那里呢?

在 openfiler中,group access的级别是高于host access的,对于ftp协议,host access的作用仅限于控制用户是否能访问openfiler,如果是none,就不能访问,如果是ro或者rw,就可以访问,因此,使用ftp时, ro和rw是相同的(对于host access中的这是来说),然后具体的是读还是读写有group access里面的设置决定。

在过了host access这一关后,pg属性的作用就会体现出来。举例来说,假定现在有两个共享文件夹,121和222,有两个用户,user1和user2,分别属于组aaa和bbb,也是主组。我们现在对121的make share进行设置。把pg设置在aaa上,那么aaa下的用户user1就有相应的权限,none、ro或者rw,然后对bbb设置none、ro或者 rw。此时,就设置的权限看来,user2也有对121的访问权限,none、ro或者rw之一。这时候用user2这个帐户来登录ftp,你会发现,你根本就看不到121这个文件夹……也就是说,pg属性的组才拥有文件夹的所有权限。

而在nfs协议访问,不存在ftp的这个问题,因为他不需要用户先登录,因此,设置的host access中的ro或rw就会体现出作用,也就是说,使用ftp时,ro和rw要用group access中的设置。

其实,如果更深入一点的话,这种变化你可以在文件夹的uid和gid属性中体现出来,改变不同的权限,这两个值就会相应改变,这两个属性是最可靠的,上面的分析都是根据他们而来。linux下面的权限管理,相当丰富,可以做到很具体的设置,但是也相当复杂,需要慢慢研究。

[转载] 用Openfiler打造中小企业网络存储服务器

转自 http://liuyuanljy.blog.51cto.com/607434/124593

Openfiler是一个强大的基于WEB浏览器的网络存储软件,Openfiler能够在一个单一的框架中提供对基于文件的网络附加存储和基于块的存储区域网络的支持。

Openfiler是在rPath Linux基础上开发的,它能够作为一个独立的Linux操作系统发行。企业版本有三十天的试用期,其它版本是支持开放原代码的。它支持使一台X86-64的系统变为一台支持高达64TB的企业SAN或NAS存储服务器。

Openfiler支持的绝大部分的基于文件的网络协议,它们包括Network File System(NFS)3,Server Message Block/Common Internet File System(SMB / CIFS )(服务器消息块/常见的网际网路档案系统) ,Web-based Distributed Authoring and Versioning基于Web的分布式创作和版本控制( WebDAV )的,即HTTP / 1.1 ,文件传输协议( FTP ) ,和iSCSI 。你还可以使用廉价磁盘冗余阵列0、1 、5、6和10来配置你的磁盘系统 。 openfiler ,它甚至可以结合的验证机制,如轻量级目录访问协议( LDAP ) , Active Directory及网络信息服务( NIS )和Hesiod来进行安全型存储设备存取。

像其它专业的存储服务器一样,Openfiler同样提供文件快照方式来保证数据易于恢复。无论如何,Openfiler提供与专业存储服务器一样的功能、性能及可用性,同时,使用它的花费却远远低于专业的存储服务器。

要想使用Openfiler来打造一台企业级存储服务器,那么对于所使用的硬件就有一定的要求。当然,我在这里所列出的硬件列表,只是我个人所使用的设备,对于你,可以根据自己企业的实际需求,来定制你的系统硬件。但是,硬件的选择也与所使用的存储连接方式有关。当然,硬件性能越高,性能也越好,但是,与此相同的是,其造价也相应增加。当然,对于一个中小企业来说,要打造一台存储服务器,下列的硬件是有必要的2.0GHZ的处理器,1GB以上的内存,至少5GB的剩余磁盘空间,你还需要一块RAID硬件控制卡,卡应当按磁盘连接类型来定。以及最好是1000Mbit的以太网卡。当然,即然是用来做存储服务器,那么你所需要的磁盘是必需的。为了适合做RAID,你最少需要三块独立的磁盘。我的系统使用了三块250G的SATA接口的磁盘。

当你将硬件准备好后,接下的就是得到Openfiler的安装包。它有两种类型,主要取决于你想以普通方式还是以虚拟机方式运行它。可以根据你的需要下载它的相应版本。它所支持的虚拟机包括VMWARE、XEN等。我下载了它的安装ISO,其文件大小为332MB。你可以至www. Openfiler.com去下载。

由于Openfiler是作为一个独立的基于LINUX内核的系统发布的,因此,安装它就如安装一个基本的LINUX发行版本相同,例如REDHAT发行版本。这对于一些读者来说很容易,但是,在安装过程中,还有一些必需注意的部分,就是在安装过程中,你应当指将Openfiler安装到一个指定的磁盘的分区当中。同时,你还应当说输入一些必要的住处,它会在适当的时候给你相应的提示,例如ROOT密码、时区等等。以及在安装时为Openfiler存储服务器的以太网卡指定一个固定IP地址,这样有利于你在以后使用WEB浏览器来管理它。当所有工作完成后,Openfiler安装文件将全部自动完成最后的安装。你所有做的,就是先等待它安装完成后开始着手设置它。在我的AMD3200+ 1G内存、80GSATA磁盘上安装花费差不多达一个小时。

当Openfiler安装完成后,你可以在你的局域网中的任何一台与它同一个网段的主机中,打开任何一个浏览器,在地址栏中输入:https:// Openfiler主机IP地址:446,就可以通过WEB方式对Openfiler进行配置管理。你可以放心的是,Openfiler是通过安全套接字(SSL)来与Openfiler主机的446端口通信的。连接后,将会出现一个常规的登录窗口,要你输入登录用户名和密码,如果你是初次对Openfiler进行配置,那么你可以输入它的默认用户名“openfiler”和默认密码“password”来进行首次登录。在登录后,你首先要做的,就是将这些默认的用户名和密码进行更改。登录后,你将看到一个WEBGUI接口,在此窗口中,你将会开始创建企业网络存储器的工作。

第一步,创建存储卷。单击WEB GUI窗口中的“VOLUMES TAB”标签,然后单击“BLOCK”设备,此时,你就可以选择要创建的物理磁盘。你可以选择系统上磁盘的表现方式,例如SDA、SDB或SDC等。磁盘可以是一个物理磁盘,也可以是一个磁盘阵列的成员。如果你想配置RAID,你应当选择“member of an array”项。

一旦你选择好的磁盘安装方式,在这里选择了RAID方式,那么你接下来就可以开始对所选择的磁盘选择一种RAID方式。至于你使用何种方式的RAID,得看你使用了几块磁盘,以及以后的需要等来定。例如你可以将某块磁盘只作为一各备用方式而非成员方式加入系统RAID中。

然后,你就可以在同一个标签下开始创建逻辑卷。当创建逻辑卷时,你可以为它指事实上一种文件系统,例如XFS或EXT3及ISCSI。要注意的是,当你使用ISCSI共享时,你只能为它们指定同样的文件系统。

当你创建完逻辑卷后,你就可以为它们创建SMB或WEBDAV共享。在共享选项卡中,选择你已经建立的逻辑卷,然后创建一个共享文件夹。然后,你可以指定你的共享文件夹使用SMB、NFS、WEBDAV或RSYNC来连接这些共享文件夹。同时,你至少要为存储服务器指定一个网络或某强网络主机,不然,任何网络主机也不能访问它。你可以在网络选项卡中设备存储服务器所处的网段。我指定了192。168。1。0/24来为共享文件夹的网段。以及使用控制访问当您想要使用的验证机制,如LDAP和Active Directory和你想每个用户或组访问。我选择了公众查阅。检查本地子网配置,并允许读/写( RW光碟)获得使用SMB和WebDAV

如果你要配置ISCSI卷,首先要确保ISCSI服务器已经启用。在ISCSI卷,添加一个openfiler作为一个目标。在此选项卡你可以改变一些ISCSI配置。但是,最后,你得去logical unit number (LUN)映射你所创建的卷与ISCSI绑定。

这样,所有设置工作差不多已经完成。很简单吧。

当所有设置工作完成后,你就可以连接到你的存储服务器,我使用SMB连接映射共享文件夹,必需使用下列格式:\\192.168.100.50\store1.nas.test1。

如果使用WEBDAV的话,你必需使用另一种方式。例如https://192.168.100.50/mnt/store1/nas/test1

如果要使用ISCSI,你还需要在客户端安装一个ISCSI的发起者。例如在WINDOWS下使用ISCSI连接存储服务器时,你得下载一个WINDOWS下的ISCSI初始化器装载器,然后安装,才可以使用存储服务器的IP地址来连接它,然后,在WINDOWS 的资源管理器中就会多出一个ISCSI分区,iSCSI协议可以使用SAN技术,所有操作就如同操作本地磁盘分区一样。

openfiler中的HTTP/WebDAV

WebDAV(Web-based Distributed Authoring and Versioning)是基于 HTTP 1.1 的一个通信协议。它为 HTTP 1.1 添加了一些扩展(就是在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法),使得应用程序可以直接将文件写到 Web Server 上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。这个协议的出现极大地增加了 Web 作为一种创作媒体对于我们的价值。基于 WebDAV 可以实现一个功能强大的内容管理系统或者配置管理系统。

openfiler支持HTTP/WebDAV。

Windows 2000/XP 安装后已经具备访问基于 WebDAV 协议的 Web 文件夹的功能,而且可以把 Web 文件夹映射为一个本地文件夹,支持拖放、拷贝/粘贴等等功能,使用起来非常方便。

在 Windows 2000/XP 中添加 Web 文件夹的方法是:

打开“网上邻居”

添加网上邻居,在“请键入网上邻居的位置”中输入 Web 文件夹的 URL,例如 http://nas/mnt/myvg/myvol1/sharedfolder,其中nas是openfiler服务器的IP地址或者域名,myvg是所创建的卷组,myvol1是创建的卷,sharedfolder是设置的共享文件夹。然后按照向导的提示继续做就可以了,非常的简单。
配置好了以后你就可以把这个 Web 文件夹当作本地文件夹一样使用了。

如果是使用SMB也可以访问共享文件夹,格式为 \\nas\myvg\myvol1\sharedfolder

注意,必须为openfiler设置用户和网络ACL后才能访问共享文件夹。

openfiler安装之后Rsync Server无法启动的解决方法

after running an update from a new install of Openfiler, ENABLE of RSYNC service does not work. It remains disabled after clicking ENABLE. The function worked before the update.

There's a stuck /var/lock/subsys/rsync file, remove it and the rsync should work.

2009年3月26日星期四

openfiler的internal LDAP server配置

openfiler用户帐户通过LDAP或者Windows活动目录等来配置。

这里说明一下使用内置的LDAP Server的设置。

首先,在Accounts标签页中配置LDAP

勾选LDAP和use local LDAP server,BASE DN一栏填写(假设你机器的域名是nas.yourdomain.com.cn)dc=nas,dc=domain,dc=com,dc=cn;Root Bind DN一栏填写dc=openfiler,dc=nas,dc=domain,dc=com,dc=cn;提交修改。

切换到services标签,enable ldap server。

回到Accounts标签页,即可在右侧的Administration中添加group和user。

openfiler默认在Root Bind DN一栏中的内容是openfiler,如果按照默认的提交,将会造成OpenLDAP配置文件slapd.conf错误。LDAP服务器无法启动。

openfiler的安装

想知道openfiler是什么,请Google。

之前在一台DELL PowerEdge 2950上安装了openfiler做实验,只尝试了基本的安装,没有深入研究配置。这台机器的磁盘配置是2个500G的SAS,可配置成RAID0或者RAID1。

近日,在一台新的2950上安装openfiler,想作为实际应用。用openfiler 2.3启动机器,在复制文件之前都没有问题,安装系统正确地识别出了硬盘。但是在复制文件时出错,居然是“out of disk space”。天哪,那个服务器可是6个750G的SAS硬盘。

在安装过程中发现,系统发现的虚拟驱动器不是通常我认为的1个(因为是做RAID5,我以为是把6个硬盘都弄到一个虚拟驱动器了),进入PERC 6/i的配置程序删除两个虚拟驱动器,并新建一个虚拟驱动器,将所有的磁盘加入。

开始安装系统,使用自动分区,/boot和swap使用默认大小,/在自动分区后改成4096MB足够了。(一定要改,剩下的空间不要分配,在安装完openfiler之后用于添加volume) 系统安装正常,重启后,从浏览器进入 https://IP:446,默认用户名openfiler,密码password。接下来在Volumes标签页中选择Block Devices,将剩余未分配的空间生成Physical Volume。发现无论如何,剩下的3.4TB的空间都无法分配,最多只能创建1.4TB的Volume。

在openfiler社区中找到这篇文章(https://forums.openfiler.com/viewtopic.php?id=3169):

The short of it:
MSDOS - Bootable, must be less than 2TB
GPT - Not bootable, support for > 2TB
The longer explanation and what to do about it:
What this means is that if you've got a single volume on your system that is > 2TB, or you plan to later expand your array past 2TB, then you cannot boot from it.  The solution is to open up your RAID controller BIOS and do one of the following:
1. If your controller does not have an "OS Volume" option and does not support multiple arrays across a given disk: a. boot from something else and use all your drives for data storage, or b. pick two drives and stick them in RAID 1 for your OS and then take the rest of your drives and put them in a RAID level of your choice for your data.
2. If your controller supports an "OS Volume" (I know 3Ware has this, others probably do as well): Create a single array of all your disks and then specify an "OS Volume" of 4-8GB.
3. If your controller does not support an "OS Volume" but can create multiple arrays on a set of disks: Create a small RAID 1 array of 4-8GB across ALL your disks for the OS and then use the remainder of the space in a RAID level of your choice for your data volumes.
The end result should be that you've got a small volume (probably /dev/sda) for your OS and then a large volume (probably /dev/sdb) for your data.
When installing, allow the installer to initialize the OS volume (/dev/sda) but NOT the data volume (/dev/sdb).  If you allow the initialization of the data volume then it will receive an MSDOS table and will act oddly when trying to create a > 2TB PV on it later (this can be fixed if you've already passed this point, though it will require the wipe of your data volume).

于是,再次进入PERC 6/i的配置程序重新创建虚拟驱动器,其中一个虚拟驱动器使用所有磁盘,RAID5,大小设置为6GB;另一个虚拟驱动器也使用所有磁盘,RAID5,使用所有剩余空间。重新安装系统,将系统安装在/dev/sda上。重新启动系统。

参照文章(https://forums.openfiler.com/viewtopic.php?id=3174),SSH登录到openfiler机器:

fdisk does not work with gpt partition tables (use parted) and I've got no idea why you're trying to create a file system directly on the disk (OpenFiler uses LVM).
1. Type "parted /dev/sdb" (assuming your raid volume is sdb)
2. Type "print"
3. If the output says "Disk label type: msdos" then type "mklabel gpt"
4. Type "quit"
From there you should be able to create a PV in the web interface to use the entire volume.

参照上面的4步完成GPT。

使用浏览器登录进入openfiler管理界面,这时可以在Volumes标签页中将所有的剩余空间创建为一个Physical Volume。 之后,再添加Volume Group。然后在Physical Volume中为特定的用途添加不同类型的Volume。

2009年3月23日星期一

马云的懒人论

马云曰:

世界上很多非常聪明并且受过高等教育的人,无法成功。就是因为他们从小就受到了错误的教育,他们养成了勤劳的恶习。很多人都记得爱迪生说的那句话吧:天才就是99%的汗水加上1%的灵感。并且被这句话误导了一生。勤勤恳恳的奋斗,最终却碌碌无为。其实爱迪生是因为懒的想他成功的真正原因,所以就编了这句话来误导我们。

很多人可能认为我是在胡说八道,好,让我用100个例子来证实你们的错误吧!事实胜于雄辩。

世界上最富有的人,比尔盖茨,他是个程序员,懒的读书,他就退学了。他又懒的记那些复杂的dos命令,于是,他就编了个图形的界面程序,叫什么来着?我忘了,懒的记这些东西。于是,全世界的电脑都长着相同的脸,而他也成了世界首富。

世界上最值钱的品牌,可口可乐。他的老板更懒,尽管中国的茶文化历史悠久,巴西的咖啡香味浓郁,但他实在太懒了。弄点糖精加上凉水,装瓶就卖。于是全世界有人的地方,大家都在喝那种像血一样的液体。

世界上最好的足球运动员,罗纳尔朵,他在场上连动都懒的动,就在对方的门前站着。等球砸到他的时候,踢一脚。这就是全世界身价最高的运动员了。有的人说,他带球的速度惊人,那是废话,别人一场跑90分钟,他就跑15秒,当然要快些了。

世界上最厉害的餐饮企业,麦当劳。他的老板也是懒的出奇,懒的学习法国大餐的精美,懒的掌握中餐的复杂技巧。弄两片破面包夹块牛肉就卖,结果全世界都能看到那个M的标志。必胜客的老板,懒的把馅饼的馅装进去,直接撒在发面饼上边就卖,结果大家管那叫PIZZA,比10张馅饼还贵。

还有更聪明的懒人:

懒的爬楼,于是他们发明了电梯;

懒的走路,于是他们制造出汽车,火车,和飞机;

懒的一个一个的杀人,于是他们发明了原子弹;

懒的每次去计算,于是他们发明了数学公式;

懒的出去听音乐会,于是他们发明了唱片,磁带和CD;

这样的例子太多了,我都懒的再说了。

还有那句废话也要提一下,生命在于运动,你见过哪个运动员长寿了?世界上最长寿的人还不是那些连肉都懒的吃的和尚?

如果没有这些懒人,我们现在生活在什么样的环境里,我都懒的想!

人是这样,动物也如此。世界上最长寿的动物叫乌龟,他们一辈子几乎不怎么动,就趴在那里,结果能活一千年。他们懒的走,但和勤劳好动的兔子赛跑,谁赢了?牛最勤劳,结果人们给它吃草,却还要挤它的奶。熊猫傻了吧唧的,什么也不干,抱着根竹子能啃一天,人们亲昵的称它为“国宝”。

回到我们的工作中,看看你公司里每天最早来最晚走,一天像发条一样忙个不停的人,他是不是工资最低的?那个每天游手好闲,没事就发呆的家伙,是不是工资最高,据说还有不少公司的股票呢!

我以上所举的例子,只是想说明一个问题,这个世界实际上是靠懒人来支撑的。世界如此的精彩都是拜懒人所赐。现在你应该知道你不成功的主要原因了吧!

懒不是傻懒,如果你想少干,就要想出懒的方法。要懒出风格,懒出境界。像我从小就懒,连长肉都懒的长,这就是境界。

2009年3月19日星期四

锐捷S2026G交换机管理IP设置

vlan 256

int vlan 256

ip address 192.168.0.1 255.255.255.0

最重要的设置默认网关

ip default-gateway 192.168.1.254

保存设置并重启交换机(reload)即可

2009年3月15日星期日

拖延症

Procrastination的形成
  1. 一个人认为自己5天之内可以做完一件事情,所以在离deadline还有15天的时候
  一点不着急,直到最后只剩5天了才开始。
  2. 这种紧迫感和焦虑往往促发人的斗志,会让自己觉得,自己只有在压力状态下才有做事情的状态。
  3.最后拿到成绩的时候,成绩往往不是很差,这样子就强化了自己最适合在deadline之前短期高压的状态下工作的心态,并且对以后的行为不断进行自我暗示。这一个部分写得非常符合大部分有拖沓习惯的中国学生的经历。因为中国学生往往非常聪明,所以哪怕最后只剩一点点时间了,也会完成得不错;从而自认为自己最适合这样子的工作状态。周而复始,反复循环。
  Procrastination的其他特点
  1. 没有自信。因为每次完成任务都达不到自己最高的能力,对自我能力的评估会越来越低。
  2. 我太忙。我一直拖着没做因为我一直很忙。
  3. 顽固。你催我也没有用。我准备好了自然会开始做。
  4. 操控别人。他们着急也没用,一切都要等我到了才能开始。
  5. 对抗压力。因为每天压力很大,所以要做的事情一直被拖下来。
  6. 受害者心态。我也知道自己怎么会这样,别人能做得自己做不到。
  Procrastination的浅层原因
  1. 太难
  2. 太耗时间
  3. 没有相关知识技能
  4. 害怕别人知道自己做不好
  Procrastination深层原因,以及解决方法
  1.完美主义。所有事情都要达到一个很高的境界,要一次做好,所以不愿意匆匆忙忙开始,要万事俱备才行。解决方法:对自己说现在的状态就已经很好,可以开始了。每有一点进展都鼓励自己。意识到一点错误都不犯是不可能的。伟大的作家,诗人,艺术家都是断断续续完成他们的杰作的,自己也可以如此。
  2. 抵制与敌意。这个老师对我态度太差了,所以我不高兴作他布置的作业。解决办法:要意识到,不完成作业受害的是自己。不能仅仅因为一个老师的态度而影响到自己的前途。
  3.容易颓废。任务太难了,或者别人都不需要做我干吗要做,不能忍受持续做这件事情,等明天再做吧。但是往往明天到了,心里还是不高兴做,又继续往后推。解决办法:寻找一切可以找到的帮助,设法降低事情的难度,取得进展;暂时推迟自己想要放弃的心态,每天能多做一点就多做一点。这一点也很符合很多中国学生的现状。因为不是人人都对自己的课题感兴趣的,所以容易产生厌倦感,所以不容易定下心来完成相关任务。解决的办法如上所说,向别人寻求帮助,听取建议,同时可以把任务分成比较容易的小块,化整为零,告诉自己其实每一个小部分都很容易就能完成。
  4. 自我贬低。如果常常不能很好地完成任务,自己对自己的能力的估计会越来越低,即使以后完成好了,也认为是运气。解决办法:接受别人对自己工作的赞扬;自己对自己进行勉励。
  治疗的步骤:
  1. 意识到自己的拖沓是完全没有必要的。
  2. 把拖沓的原因一条条写出来
  3. 一条条克服这些原因
  4. 开始做事
  本文译自 Procrastination: Ten Things To Know 。
  拖拉是阻碍个人成功的绊脚石,却时常出现在我们左右。
  作者是两位对拖拉 (Procrastination) 进行研究的心理学教授,希望大家能从中有所收获,
  译者MetalDudu@Blog
  1. 百分之二十的人认为自己是长期拖拉的人。对他们来说拖拉是一种生活方式,虽然并不适应它。这种状态充满了他们的生活。他们不能按时付帐单,他们忘了买音乐会的门票,他们直到圣诞前一天才去买礼物……
  2. 拖拉并非不重要,虽然通常我们不把它当作一个严重问题。它其实是一个自我调节的深奥问题。通常我们都宽容别人拖拉的借口,这也是问题的根源。
  3. 拖拉并不是时间管理或者计划方面的问题。拖拉并不因个人对时间的估计能力而不同,虽然这些人会更乐观一些。Ferrari 博士强调说:“要一个拖拉的人做一个有计划的人,就像让一个长期消沉的人马上振奋起来一样。”
  4. 拖拉不是天生的。它是从周围的人学来的,但并不直接。它可能来自强权的家教,拖拉甚至可能是一种反抗的形式。这种家庭环境下,朋友对拖拉者的宽容会助长这种习惯。
  5. 拖拉的饮酒者会有更高的酒精需求量。拖拉的人会喝的更多,这是自我调节有问题的表现。
  6. 拖拉的人对自己撒谎。比如“我更想明天做这件事”,或者“有压力我才能做好”,但实际上并非如此。拖拉者的另一个谎言是时间压力会让他们更有创造力,其实这只是他们的感觉而已,他们是在挥霍时间。
  7. 拖拉的人不断找消遣的事儿,特别是自己不需要承诺什么。查看电子邮件就是绝佳的目标,这样的事情成为他们调节情绪(比如害怕失败)的一个途径。
  8. 拖拉并非一模一样。拖拉的人有不同的原因,Ferrari 博士定义了三种基本的拖拉者:
  * 鼓励型,或者说找刺激型,他们盼着最后几分钟忙碌带来的快感
  * 逃避型,他们回避失败的恐惧,甚至害怕成功,但实际上他们非常关心别人怎么看自己,他们更希望别人觉得他不够努力而不是能力不足。
  * 决心型,他们没法下决心。不下决心就可以回避对应对事情的拖拉。
  9. 拖拉带来的损失巨大。健康是其中之一,研究表明拖拉的人更容易患病。拖拉也影响人的情绪,也会破坏团队协作和人际关系。
  10. 拖拉会改变人的行为,但不会耗费多少精神力量。这并不意味着一个念头就能马上改变。这个问题可以通过高度规范的认知行为治疗来解决。
    对行事拖拉的人进行劝诫就如同让抑郁症患者高兴起来那么困难。”法拉利教授认为,劝导对拖拉症患者来说作用微乎其微,关键还是要靠自己下定摆脱拖拉惯性的决心,这需要很大的精神动力才能完成。试着结合以下10个窍门,可能会更容易一些。记住,每达到其中一项,你就离成功进了一步。
  明日复明日 “拖延病”的处方
  case 1:我经常担心事做的不够完美。但尽力做了完美主义者,可做事的效率不是很高。
  经常接到任务以后,心里想的是尽快完成,可总是一拖再拖。为什么?
  →病名:担心引起的拖延病。
  →处方:总想把事情做的完美一些,但压力越大就越担心做不好事迟迟不敢付出行动。总是把万事的结果定为,不是成功就是失败、只要作错了一点,做的再好也都是错的。出了事就算不是自己的责任也会揽到自己身上。首先得醒悟“自找担心”是多么消极的事情。
  假如,在准备报告时,最初就能写出完美的报告是不可能的。一定会有一些偏差也有理论上说服力较小的地方。所以,完美是不存在的。追寻一下到现在为止你所做过是事有多少事是完美的,一定没有特别完美的事。但一定也没耽误什么事。
  case 2:一旦接到什么任务总会担心“我一定能做好吗?做错了教授会不会责备我?”在想这些的时候时间已悄悄溜走了。
  →病名:自我指责的拖延病
  →处方:对过去一些失败的记忆会变成一种压力。想治好自我指责的病,可以把责任都推托
  到别人身上。不要因为善良的自卑感而把一切问题都自己扛。这样只会让你的自信心下降。
  轻视自己之前先把责任都推到别人身上吧!然后,用另一种方式解释自己的失败。比如:在小组功课中有了一个好的创意。但因为没有时间,结果在报告中露掉了。在这种情况发生的时候,如果是自我指责的人就会想:“哎!因为没有发表这个创意,以后教授知道了会不会扣我的学分呢?”取代上面想法的应该是“我真了不起,能有这么好的创意。”或“下次写报告时用就可以了。那一定比这次轻松多了。”
  case 3:我特别的执着,一旦问题袭来的时候就感到不安和急躁。问题解决之前做不好任何事情。
  →病名:执着引起的拖延病
  →处方:“怎么会这样?”“到底那时候为什么那么做?”即使在过去的事情里找原因也不会有什么改变。澄清一件事也解决不了问题。因为事情是由几种因素合成的。什么时候才能把事情一一都弄清楚呢?在公司写企划案的时候写不好的原因也有很多种。期限太短或过去写过一次结果被上司责骂了一顿,留下了创伤。还有就是还没找到资料等等。澄清问题对以后没有任何帮助。所以,要往可以解决问题的方向行动。做企划案时应该想:“这次应该跟其他公司比较着做看看了。”如果这样想着行动的话一定有效。
  case 4:我总是没有自信,怎么努力也改不了。为了从苦海中摆脱出来看过不少有关的书籍但都徒劳无功。因为没有自信做起事也不顺利。不知道能不能改变一下这样的我。
  →病名:封闭自我印象引起的拖延病
  →处方:在苦恼的边缘走不出来的人是因为被自己错误的想法封锁住了。一定要从误区的牢笼里走出来。为了打破错误的想法扪心自问一下自己“假如,我是能做到○○事的人,应该先想些什么?先做些什么?”假如,做报告的时候,因为忙于某些事迟迟没做出来。这时,应该想“如果我是个做报告的能手,应该先做什么事呢?”考试成绩不好,但还得向父母交代的时候应该想“假如,我是个成绩不好,但能向父母主动表白的人,应该先做什么事?”想这些问题的时候,不能用太长的时间。第一个想到的就是正确答案。所以直接实第一个想发就可以了。
  case 5:我在所有决定中没有自信。当决定了做某件事的时候,往往因为不确定是对的还是错的而烦恼。这样一来事就一拖再拖。不是因为我懒,而是因为每次都不能付出行动。所以人们都说我办事的效率不高。
  →病名:不安感或懒惰引起的拖延病
  →处方:你在想自己的想法对不对那是因为“为了想这个办法用了那么长时间,付出了那么大的努力,但要是失败了怎么办?就不就功亏于溃了吗?”因为这些不安感一直浮现在脑海里。所以不想做任何事情。假如,要学习但桌子很乱找书都很不容易。明知道应该收拾一下,但怕麻烦迟迟不行动。这时候,父母要唠叨个不停,就有了叛逆的心理更是不收拾。这时你应该冷静下来好好想一想。是打扫一下好还是睁一只眼闭一只眼过的好。然后再决定。把最初的想法扭转过来很难,但一旦习惯了就觉得行动比拖延更轻松。

2009年2月23日星期一

使用XPATH从XML/XHTML中提取数据

import java.io.StringReader;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class Evaluation {
    public static String extractString(String xmlStr, String xpath)
            throws XPathExpressionException {
        XPathFactory factory = XPathFactory.newInstance();
        XPath xp = factory.newXPath();
        XPathExpression xpe = xp.compile(xpath);
        InputSource is = new InputSource(new StringReader(xmlStr));
        String result = xpe.evaluate(is);
        return result;
    }

    public static NodeList extractNodeList(String xmlStr, String xpath)
            throws XPathExpressionException {
        XPathFactory factory = XPathFactory.newInstance();
        XPath xp = factory.newXPath();
        XPathExpression xpe = xp.compile(xpath);
        InputSource is = new InputSource(new StringReader(xmlStr));
        NodeList result = (NodeList) xpe.evaluate(is, XPathConstants.NODESET);
        return result;
    }

    public static String extractString(Node node, String xpath)
            throws XPathExpressionException {
        XPathFactory factory = XPathFactory.newInstance();
        XPath xp = factory.newXPath();
        XPathExpression xpe = xp.compile(xpath);
        return xpe.evaluate(node);
    }
}

一个困扰了很久的XML类冲突问题的解决

有一个使用XML技术的项目,其中使用到了ASF的xerces软件包,在J2SE模式下,该程序运行正常,但是当将项目中的类导入了J2EE项目中,部署到Tomcat后无法将JSP页面转换为servlet,出现以下的错误

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: (class: org/apache/xerces/jaxp/DocumentBuilderImpl, method: parse signature: (Lorg/xml/sax/InputSource;)Lorg/w3c/dom/Document;) Incompatible object argument for function call
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:272)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause



java.lang.VerifyError: (class: org/apache/xerces/jaxp/DocumentBuilderImpl, method: parse signature: (Lorg/xml/sax/InputSource;)Lorg/w3c/dom/Document;) Incompatible object argument for function call
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
org.apache.jasper.xmlparser.ParserUtils.parseXMLDocument(ParserUtils.java:92)
org.apache.jasper.compiler.JspConfig.processWebDotXml(JspConfig.java:76)
org.apache.jasper.compiler.JspConfig.init(JspConfig.java:197)
org.apache.jasper.compiler.JspConfig.findJspProperty(JspConfig.java:249)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:112)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:276)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:264)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:303)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.




初步判断是因为类的版本有冲突引起的问题。这个问题困扰了很久也没有解决,后来下载了新的xerces软件包替换了原来的版本,居然问题就解决了。



注意:在更换xerces软件包之后要clean以下项目,否则还会出现这个错误

2009年2月16日星期一

改变Microsoft SQL Server 数据库中表的所有者

exec   sp_msforeachtable   'sp_changeobjectowner   "?","dbo"'

2009年2月15日星期日

Kingston DataTraveler 贺岁版4G量产

量产前通过芯片精灵得知芯片型号: UP12~UP14

找到了群联v1.78的量产工具 ,在量产工具里设置好VID =0DD8 PID = 1000,并选中Preformat(预格式化),进行第一次量产,量产失败。
重新拔插U盘,提示找到新硬件"USB DISK 30X"。

[PenDriveMP]
IC Type=PS2233
Used MPTool=Last Version
[Parameter Mark]
Parameter Type=F1_MP_21
[Customize Info]
USB VID=0x0dd8
USB PID=0x1000
String Product Name=DISK CD
String Manufacturer Name=USB
Inquiry Version=PMAP
[Configuration]
Reset Serial Number=0
CDROM Size=2048
[TestItemOption]
Do Preformat Test=1
[Extra]
Mode=21
[Misc]
Privacy Volume Label=USB DISK CD
CDROM Image=F:\winxp_20090201.iso
[Advance]
Tick=1
FC1=0xff
FC2=0x01
[Firmware]
ISP=0

用芯片精灵检测。芯片型号变成了PS2134。 使用ps2233 v1.03进行第二次量产,等待了很长时间(因为要写入的光盘镜像比较大!)。

量产后,VID = 0DD8 PID = 1000,芯片型号: PS2232/PS2233

写入的可启动光盘应该能满足平时维护机器的需要了。还剩下2G空间作为U盘使用。 :p

说明如下:

一、系统简介:
1、原生NTFS,我的文档、收藏夹、桌面默认在D盘
2、支持64位和多核CPU,支持SATA、RAID、SCSI设备
3、彻底禁止自动运行(防 Autorun 病毒的蔓延)
4、部署中自动清除Autorun病毒残余
5、Ghost版集成Office 2003 SP3三大件
6、集成至200901的安全补丁,免序列号,免激活
7、光盘内置tools包含基本常用工具

二、刻录说明:
首先用Hash V1.04校验ISO文件的MD5值,在确认MD5正确后,运行UltraISO最新版——工具——刻录光盘映像——写入速度:16X——写入方式:光盘一次写入——映像文件:*.iso——刻录。

三、安装说明:
首先在BIOS中设置光驱优先启动,然后放入光盘并重启机子。当出现光盘引导菜单后,会有多种选择,任选其一即可。

四、光盘启动菜单:
(A)安装win xp sp3  采用WinXP SP3 MSDN官方原版制作,集成部分SRS驱动
(B)安装Ghost XP SP3 采用WinXP SP3 MSDN官方原版制作
[1]DOS工具箱
[2]Ghost克隆
[3]Paragon分区
[4]acronis分区
[5]PE光盘版
[6]NTFS启动盘
[7]清除系统密码

2009年2月5日星期四

手工制作铅笔套

笔套

找一张软硬适中的薄硬纸板,按照上图进行裁剪(单位为毫米),裁去阴影部分。将长边卷到铅笔上,卷紧,接头处用手艺白胶或者其他东西固定。将阴影部分之间的窄条折过来,用白胶粘到卷好的笔套上。完毕。

使用彩虹表的NTLM、MD5破解工具 rcracki

基本用法:

rcracki_mt -t 4 -l e:\hash.txt e:\rainbow\ntlm\*

2009年1月6日星期二

[转]适合孩子的开源程序语言

过去几年出现了许多面向儿童的开源程序语言和工具,原因是现在的编程环境已对生手变得过于复杂。这些开源工具有些是提供一种全新的设想和创造游戏或动画的方式,有些是基于现代语言和环境重新创造出一个类BASIC的环境。

Scratch

由MIT的Lifelong Kindergarten group开发,是基于Squeak的图形程序环境,风格类似Lego。建立的程序是用鲜艳的代码块拼接起来,其特别定制的界面允许程序员将图形和声音组合,创造简易动画。所有基本程序结构,如循环和if语句,都为不同的块类所支持和组合,如Motion,Sensing,和Sound。Scratch只支持Windows和Mac OS X,暂时没有正式的原生Linux版。它采用Scratch许可证发布,程序上传是遵循创作共用相同方式共享许可证。

Alice

Scratch针对的是2D图形、文本和所有“平面”的概念,而Alice是用3D游戏和视频方式传授编程基础。它是卡耐基梅隆大学的研究人员用Java开发的,与Scratch有类似的拖拉界面。发布使用的是Alice许可证,支持全平台。

Shoes

基于Ruby语言的开源工具包,外观就是一个基本的文字编辑器,因此也最为接近传统的编程方法,有着与Ruby相似的语法,同样支持全平台。

其它适合儿童的非开源语言有Greenfoot,Phogram,和微软的Small Basic。