2007年10月30日星期二

正则表达式,相关链接

正则表达式,相关链接
clipped from blog.csdn.net

正则表达式,相关链接
http://blog.csdn.net/laily/category/19548.aspx

http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx 微软的正则表达式教程(五):选择/编组和后向引用

http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx 微软的正则表达式教程(四):限定符和定位符

http://blog.csdn.net/laily/archive/2004/06/30/30517.aspx 微软的正则表达式教程(三):字符匹配

http://blog.csdn.net/laily/archive/2004/06/30/30514.aspx 微软的正则表达式教程(二):正则表达式语法和优先权顺序

http://blog.csdn.net/laily/archive/2004/06/30/30511.aspx 微软的正则表达式教程(一):正则表达式简介

http://blog.csdn.net/laily/archive/2004/06/30/30360.aspx 小程序大作为:高级查找/替换、正则表达式练习器、Javascript脚本程序调试器


正则表达式,正规表达式,正则表达式匹配,正则表达式语法,模式匹配,正规表达式匹配 javascript正则表达式 ASP正则表达式 ASP.NET正则表达式 C#正则表达式 JSP正则表达式 PHP正则表达式 VB.NET正则表达式 VBSCript正则表达式编程 delphi正则表达式 jscript

 blog it

2007年10月29日星期一

Emacs中加入自己编码识别

强大的编辑器要有强大的编码识别能力 -- unicad.el

如果你经常要查看或编辑多种国家语言的文件,那你可能经常碰到乱码的情况。

unicad.el 是从 Mozilla universal charset auto detector 改写过来的 Elisp 程序,在 GNU Emacs 里加载上 unicad 就可以自动识别多种编码,以后再也不会遇到乱码的文件了。把下载到的 unicad.el 复制到 Emacs 的 load-path 里,比如 site-lisp ,在 ~/.emacs 里加上下面这句:

(require 'unicad)

如果你觉得检测过程拖慢了打开文件的速度,可以 byte-compile 这个文件:

M-x byte-compile-file <RET> /path/to/unicad.el

超载地址 http://cid-3643184002e3d5e6.skydrive.live.com/self.aspx/Public/unicad.zip

--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

Emacs code-publish

;;; code-publish.el --- convert codes into html, used for msn space
;; Because of the limited allowed file types,
;; if the extension of this file is not .el, please change it manually.

;; Author: Qichen Huang <jasonal00+emacs at gmail.com>
;; Version: 0.2

;;; Commentary:
;; (require 'code-publish)

;; Usage:
;; M-x code-publish
;; the converted html code will be copied to kill-ring,
;; which could be directly pasted onto msn space as html code.

;; History:
;; 14.08.2006 Version 0.2
;; 14.08.2006  Added: tag <div>
;; 28.07.2006 Version 0.1

;;; Code:

(defun code-publish ()
  "Convert region between mark and point into HTML, save the result into kill ring."
  (interactive)
  (kill-new (code-publish-region (mark) (point)))
  (message "Code convert completed."))



(defvar font-header "<font size=\"2\">")
(defvar div-header "<div style=\"background-color:rgb(255,255,224);\">")
(defvar footer "</div></font>")
(defvar tag-open "<span style=\"font-family: Courier New,Courier,Monospace;")
(defvar tag-close ">")
(defvar tag-end "</span>")
(defvar newline-tag "<br>")
(defvar space "&nbsp;")
(defvar space2 "&nbsp;&nbsp;")
(defvar space4 "&nbsp;&nbsp;&nbsp;&nbsp;")

(defvar code-builtin-color       " color: rgb(0,139,0);\"")
(defvar code-comment-color       " color: rgb(205,0,0); font-style: italic;\"")
(defvar code-constant-color      " color: rgb(47,79,79);\"")
(defvar code-doc-color           " color: rgb(0,139,0);\"")
(defvar code-function-name-color " color: rgb(0,0,255); font-weight: bold;\"")
(defvar code-keyword-color       " color: rgb(160,32,240);\"")
(defvar code-preprocessor-color  " color: rgb(250,128,114);\"")
(defvar code-string-color        " color: rgb(0,139,0);\"")
(defvar code-type-color          " color: rgb(0,0,128);\"")
(defvar code-variable-name-color " color: rgb(139,90,40);\"")
(defvar code-warning-color       " color: rgb(255,0,0);\"")
(defvar code-default-color       " \"")

(defun code-publish-region (begin-point end-point)
  (let ((beg (min begin-point end-point))
        (end (max begin-point end-point))
        (str "")
        (tmp nil)
        (result nil)
        (tface nil)
        (color "")
        )
    ;;(beginning-of-buffer)
    (unless (= beg end)
      (save-excursion
        (setq result (concat result font-header))
        (setq result (concat result div-header))
        (goto-char beg)
        (while (< (point) end)
          (setq tmp (next-single-property-change (point) 'face))
          (unless tmp
            (setq tmp end)) ;; there is no face change, set tmp to end point
          ;; no cross-line properties
          (when (> tmp (line-end-position))
            (setq tmp (line-end-position))) ;; New line
          ;; skip spaces and tabs
          (save-excursion
            (goto-char tmp)
            (when (looking-at "[ \t]+")
              (re-search-forward "[ \t]+" (line-end-position) t)
              (setq tmp (point))))
          (when (> tmp end)
            (setq tmp end))
          (setq str (buffer-substring-no-properties (point) tmp))
          (while (string-match "<" str)
            (setq str (replace-match "&lt;" t nil str)))
          (while (string-match ">" str)
            (setq str (replace-match "&gt;" t nil str)))
          (while (string-match "  " str)
            (setq str (replace-match space2 t nil str)))
          (while (string-match "\t" str)
            (setq str (replace-match space4 t nil str)))
          (setq tface (get-text-property (point) 'face))
          (when (listp tface)
            (setq tface (car tface)))
          (cond
           ((eq tface font-lock-builtin-face)
            (setq color code-builtin-color))
           ((eq tface font-lock-comment-face)
            (setq color code-comment-color))
           ((eq tface font-lock-constant-face)
            (setq color code-constant-color))
           ((eq tface font-lock-doc-face)
            (setq color code-doc-color))
           ((eq tface font-lock-function-name-face)
            (setq color code-function-name-color))
           ((eq tface font-lock-keyword-face)
            (setq color code-keyword-color))
           ((eq tface font-lock-preprocessor-face)
            (setq color code-preprocessor-color))
           ((eq tface font-lock-string-face)
            (setq color code-string-color))
           ((eq tface font-lock-type-face)
            (setq color code-type-color))
           ((eq tface font-lock-variable-name-face)
            (setq color code-variable-name-color))
           ((eq tface font-lock-warning-face)
            (setq color code-warning-color))
           (t (setq color code-default-color)))
          ;; (setq color "<span color=\"\">")
          (setq result (concat result tag-open color tag-close str tag-end))
          (when (= tmp (line-end-position))
            (setq result (concat result newline-tag))
            (setq tmp (+ 1 (line-end-position))))
          (goto-char tmp))
        (setq result (concat result footer))
        result
        ))))

(provide 'code-publish)

;;; ################ code-publish ends here #######################

Emacs中建立文件自动关联mode

一次性关联
(
setq auto-mode-alist
;; 将文件模式和文件后缀关联起来。
( append '(("\\.py\\'" . python-mode)
("\\.s?html?\\'" . html-helper-mode)
(" \\.asp\\'" . html-helper-mode)
("\\.phtml\\'" . html-helper-mode)
("\\.css\\'" . css-mode) )
auto-mode-alist)
)
单个文件关联
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))


--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

【转帖】如何不重新启动 Emacs 就让 .emacs 的配置起作用

我刚刚使用 Emacs 的时候,总是

vi ~/.emacs

然后重新启动 emacs ,效率很低 ,暗自嘟囔, emacs 怎么没有这种功能,不重起,就自动更新 .emacs 的设置 呢?

后来我发现,这个功能完全没有必要,我的做法是:

  • 用 emacs 打开 .emacs 文件,C-x C-e 光标前面的运行一条语句。立即生效。
  • 选择一个 region , M-x eval-region
  • M-x load-file ~/.emacs
  • M-x eval-buffer

都是立即生效,可以马上试验一条语句的效果。 例如,在任何一个文件中,写

(setq frame-title-format "emacs@%b")

把光标停在在这条语句后面, C-x C-e ,马上看到 emacs 的 标题栏上发生变化。

我用这种方法调试我的每一个小的配置文件,按上篇文章说的方法, 把他放在 ~/Emacs/myconfig/my-site-start.d 中。



--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

Emacs 在窗口的标题栏上显示文件名称

在窗口的标题栏上显示文件名称
(setq frame-title-format "%n%F/%b")
% 后面跟一个特殊字符表示特殊的意义。

--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

Emacs中保存 session 和 desktop

保存 session 和 desktop . 每次关闭 emacs 后, 在打开 emacs 时,恢复很多很多东西, 就像你没有关闭 emacs 一样

(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(load "desktop")
(desktop-load-default)
(desktop-read)
;

第一次使用的时候,要运行 M-x desktop-save 命令.



--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

2007年10月27日星期六

探究X Window System运行原理与启动过程

探究X Window System运行原理与启动过程
http://linux.shangdu.com/news_pub.asp?id=851

第一次在Debian下装XFree86,startx启动了twm,装了gnome 后startx启动了gnome环境,为什么?装gnome 时修改了什么文件以及X环境是怎么起来的?本来是想搞清这几个文题开始研究这个题目的,没想到还学到了很多别的东西^_^本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System。

一) 基本运行原理

        X Window System采用C/S结构,但和我们常见的C/S不同。常见的C/S结构中,称提供服务的一方为server,即服务器端(如HTTP服务,FTP服务等),使用服务的称为client,即客户端。但在X Window System中,client是执行程序的一方,在上面执行各种X程序,而server则是负责显示client运行程序的窗口的一方。
       X Window System的组成可以分为X server,X client,X protocol三部分。X server主要控制输入输出,维护字体,颜色等相关资源。它接受输入设备的输入信息并传递给X client,X client将这些信息处理后所返回的信息,也由X server负责输出到输出设备(即我们所见的显示器)上。X server传递给X client的信息称为Event,主要是键盘鼠标输入和窗口状态的信息。X client传递给X server的信息则称为Request,主要是要求X server建立窗口,更改窗口大小位置或在窗口上绘图输出文字等。X client主要是完成应用程序计算处理的部分,并不接受用户的输入信息,输入信息都是输入给X server,然后由X server以Event的形式传递给X client(这里感觉类似Windows的消息机制,系统接收到用户的输入信息,然后以消息的形式传递给窗口,再由窗口的消息处理过程处理)。X client对收到的Event进行相应的处理后,如果需要输出到屏幕上或更改画面的外观等,则发出Request给X server,由X server负责显示。
          常见的情况是X server与X client都在同一台电脑上运行,但他们也可分别位于网络上不同的电脑上。在X Window System中,X client是与硬件无关的,它并不关心你使用的是什么显卡什么显示器什么键盘鼠标,这些只与X server相关。我们平常安装完XFree86后运行xf86config或xf86cfg进行的配置实际上只是与X server有关,可以说就是配置X server吧,不配置照样可以运行X client程序(如:xeyes -display xserver:0就可以在xserver这台机器上的0号屏幕(屏幕编号displaynumber为0)上显示那对大眼睛了)。
         X protocol就是X server于X client之间通信的协议了。X protocol支持现在常用的网络通信协议。我只能测试TCP/IP,可以看到X server侦听在tcp 6000端口上。那X protocol就是位于运输层以上了,应该属于应用层吧?。
         总结下运行过程吧:

  1. 用户通过鼠标键盘对X server下达操作命令
  2. X server利用Event传递用户操作信息给X client
  3. X client进行程序运算
  4. X client利用Request传回所要显示的结果
  5. X server将结果显示在屏幕上

二) 启动过程

         我们从控制台进入X一般是用startx命令。下面就从startx分析起。首先man startx和man xinit可以看到staratx和xinit的使用方法:
startx [[client] options .....] [-- [server] options ....]
xinit [[client] options ] [-- [server] [display] options]
把上面[client]和[server]分别称为client程序和server程序。man手册里写明其必须以/或者./开头。
         下面看看startx这个脚本,中文为我加的注释,这个脚本是安装x-window-system-core后得到的,都是XFree86,不同发行版的linux里该脚本应该大同小异:


#!/bin/sh
userclientrc=$HOME/.xinitrc #用户的client定义文件
userserverrc=$HOME/.xserverrc #用户的server定义文件
sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc #系统的client
sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc #系统的server
defaultclient=/usr/X11R6/bin/xterm #默认的client程序
defaultserver=/usr/X11R6/bin/X #默认的server程序
defaultclientargs="" #下面定义了client和server的参数变量
defaultserverargs=""
clientargs=""
serverargs=""
#如果用户client文件存在则使用用户文件里定义的client,否则使用系统定义的client
if [ -f $userclientrc ]; then
defaultclientargs=$userclientrc
elif [ -f $sysclientrc ]; then
defaultclientargs=$sysclientrc
fi
#如果用户server文件存在则使用用户文件里定义的server,否则使用系统定义的server
if [ -f $userserverrc ]; then
defaultserverargs=$userserverrc
elif [ -f $sysserverrc ]; then
defaultserverargs=$sysserverrc
fi
#下面循环处理client和server的参数
whoseargs="client"
while [ x"$1" != x ]; do #若第一个参数为空,退出循环
case "$1" in
# '' required to prevent cpp from treating "/*" as a C comment.
/''*|\./''*) #如果$1是/*或者./*形式(xinit程序要求其参数里的client程序和server程序必须以/或./开头,否则会被视为client程序和server程序的参数,见man xinit)
if [ "$whoseargs" = "client" ]; then #如果当前是在处理client的参数
if [ x"$clientargs" = x ]; then #如果clientargs为空,则赋值$1给client变量,也即上面#startx使用方法里的[client]参数
client="$1"
else
clientargs="$clientargs $1" #否则clientargs赋值为$clientargs $1,即上面#startx使用#方法里的options参数
fi
else #当前在处理server的参数,代码的含义同上
if [ x"$serverargs" = x ]; then
server="$1"
else
serverargs="$serverargs $1"
fi
fi
;;
--)#如果$1为--,则表示开始处理server的参数,--为client和server参数的分界
whoseargs="server"
;;
*)
if [ "$whoseargs" = "client" ]; then #处理给client程序的参数
clientargs="$clientargs $1"
else #处理给server程序的参数
# display must be the FIRST server argument
#屏幕编号必须为第一个给server程序的参数,以:x的形式(x为数字),这可从上面startx和xinit
的使用方法的区别看出,xinit多了个[display],这里即过滤出这个[display]。试试看这两个命令:
xinit /usr/bin/X11/xeyes -display localhost:1 -- /usr/bin/X11/X :1 -dpi 70&
xinit /usr/bin/X11/xeyes -display localhost:1 -- /usr/bin/X11/X -dpi 70 :1&
即可看出不把屏幕编号作为第一个server参数的后果
if [ x"$serverargs" = x ] && expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then

display="$1"
else #处理屏幕编号以外的参数
serverargs="$serverargs $1"
fi
fi
;;
esac
shift #所有参数左移一次
done
# process client arguments
if [ x"$client" = x ]; then #如果client程序为空
# if no client arguments either, use rc file instead
if [ x"$clientargs" = x ]; then #且clientargs为空,赋值$defaultclientargs给client程序
client="$defaultclientargs"
else
client=$defaultclient #使用默认的client程序
fi
fi
# process server arguments处理server参数,同上
if [ x"$server" = x ]; then
# if no server arguments or display either, use rc file instead
if [ x"$serverargs" = x -a x"$display" = x ]; then
server="$defaultserverargs"
else
server=$defaultserver
fi
fi
#…………省略授权代码若干

xinit $client $clientargs -- $server $display $serverargs #把处理过的参数交由xinit程序处理
#…………


由上面代码可以得出startx主要是置X client和X server所在的位置,并处理相关参数,最后交给xinit处理。可以看出startx 设置X client的位置是先搜寻$HOME/.xinitrc,然后是/etc/X11/xinit/xinitrc;设置X server的位置是先搜寻$HOME/.xserverrc,然后是/etc/X11/xinit/xserverrc。这就解释了我们平常为什么说启动X Window时用户目录下的.xinitrc和.xserverrc文件优先级要高。所以我们用startx命令启动X时,如果用户目录存在. xinitrc和.xserverrc文件,则实际上等价于命令xinit $HOME/.xinitrc -- $HOME/.xserverrc 。如果用户目录不存在那两个文件,则等价于xinit /usr/X11R6/lib/X11/xinit/xinitrc -- /usr/X11R6/lib/X11/xinit/xserver。别的情况类推。
        至于xinit,则根据startx传过来的参数启动X server,成功后根据xinitrc启动X client。
        以上即为X Window System的启动过程,startx只是负责一些参数传递,真正的X启动由xinit实现。实际上可以分为启动X server和启动X client两部分。下面在用户目录下构造.xinitrc(即X client)和.xserverrc(即X server)文件。在.xserverrc里写入/usr/bin/X11/X :1。.xinitrc里写入/usr/bin/X11/xeyes -display localhost:1。这就是最简单的X server+ X client了,只不过把屏幕编号从默认的0改为了1,这里X server即是/usr/bin/X11/X 程序,X client即是/usr/bin/X11/xeyes 程序。
         总结下单机用startx启动过程吧:

  1. startx置X client和X server的位置,处理参数并调用xinit
  2. xinit根据传过来的参数启动X server,成功后呼叫X client
  3. 根据xinitrc设置相关资源,启动窗口管理器,输入法和其他应用程序等X client程序。

         但还未搞清楚gnome是怎么起来的!gnome当然属于X client了,看上面启动过程第(3)步。
这里分两种情况看吧,第一种是用系统的xinitrc文件。看/etc/X11/xinit/xinitrc文件(我的sarge装x-window- system-core和gnome-core),里面只包含了. /etc/X11/Xsession一句话。接着看/etc/X11/Xsession这个脚本,只看关键部分吧。最后面有:

SESSIONFILES=$(run_parts $SYSSESSIONDIR)
if [ -n "$SESSIONFILES" ]; then
for SESSIONFILE in $SESSIONFILES; do
. $SESSIONFILE
done
fi
exit 0

接着看run_parts(),位于本文件中间:

run_parts () {
# until run-parts --noexec is implemented
if [ -z "$1" ]; then
internal_errormsg "run_parts() called without an argument."
fi
if [ ! -d "$1" ]; then
internal_errormsg "run_parts() called, but \"$1\" does not exist or is" \
"not a directory."
fi
for F in $(ls $1); do
if expr "$F" : '[[:alnum:]_-]\+$' > /dev/null 2>&1; then
if [ -f "$1/$F" ]; then
echo "$1/$F"
fi
fi
done
}

大概意思就是run_parts () 把$SYSSESSIONDIR目录下的文件名取出来赋值给$SESSIONFILES,然后循环运行该目录下的文件。看看该目录,即 /etc/X11/Xsession.d目录,可以看到几个以数字开头的文件,实际上这些数值就表示了这几个文件被运行的优先级,数字小的优先级高,因为在上面的run_parts () 里是用ls命令显示该目录下的文件,所以前面数字小的被ls时显示在前面,所以被

for SESSIONFILE in $SESSIONFILES; do
. $SESSIONFILE
done

这个for循环执行时也先被执行。看到/etc/X11/Xsession.d目录下有个55gnome-session_gnomerc文件,里面提到了STARTUP变量。然后运行:

xdkui@Debian:/etc/X11/Xsession.d$ grep STARTUP *


看到50xfree86-common_determine-startup文件。里面有

if [ -z "$STARTUP" ]; then
if [ -x /usr/bin/x-session-manager ]; then
STARTUP=x-session-manager
elif [ -x /usr/bin/x-window-manager ]; then
STARTUP=x-window-manager
elif [ -x /usr/bin/x-terminal-emulator ]; then
STARTUP=x-terminal-emulator
fi
fi

即设置启动程序,实际上设置STARTUP变量,如果以上程序都没有找到,则会报错退出,即X环境没有被启动。再运行

xdkui@Debian:/etc/X11/Xsession.d$ grep STARTUP *


看到优先级最低也即最后被运行的99xfree86-common_start文件,里面只有一句话:

exec $STARTUP

好了,到这里就启动我们的X client了,终于完了^_^。

         总结下这第一种方式的启动过程,简单的说就是依次顺序查找/usr/bin/x-session-manager ,x-window-manager,/usr/bin/x-terminal-emulator 这三个文件。如果存在则启动之,也即X client。如果三个都不存在则报错退出了。看/usr/bin/x-session-manager文件可以看到是个符号连接,最终连接到 /usr/bin/gnome-session,也就是gnome 了。至于我们在gnome 启动时可能会设置启动输入法等程序,那就归gnome-session管了,也就不再分析了。可以试着把/usr/bin/x-session- manager 改为指向xfce4-session(如果安装了的话) ,再startx就会启动xfce4环境了。大概RedHat的switchdesk工具就是改这个连接实现的吧?。或者删掉/usr/bin/x- session-manager ,再startx,只启动了/usr/bin/x-window-manager 所指向的window manager了吧,我这里是blackbox。

           下面看第二种情况,即用户目录的xinitrc文件$HOME/.xinitrc。对比hiweed-debian-desktop_0.55_i386,存在$HOME/.xinitrc文件,在里面有exec xfce4-session。故其X client可以说最主要的x-session-manger是从$HOME/.xinitrc启动的。也就不会经过上面第一种情况的执行过程了。

          终于把gnome(或者说x-session-manger)的启动过程弄明白了,下面说点别的吧。xinit程序同时启动X server和X client,这在单机上还可。要是位于网络上的两台电脑分别是client和server,则xinit就无能为力了。这时就得靠纯"手工"来启动X 了。下面简单的"手工"启动X server和X client:在CUI模式下运行命令:

xdkui@Debian:~$X :1&

看到了一个灰色的全屏幕和一个鼠标指针,这就是X server了,其屏幕编号为1。下面构造X client,按Ctrl+Alt+F1回到刚才的CUI(Ctrl+Alt+F7对应本机的第一个启动的X server,Ctrl+Alt+F8对应第二个,有人说F7对应屏幕编号为0的X server实际上是不对的,如果第一个启动的屏幕编号为1,第二个启动的编号为0,则F7对应1屏幕,F8对应0屏幕),运行命令: xdkui@Debian:~$xeyes -display localhost:1&
然后按Ctrl+Alt+F7,看到我们的X client也就是xeyes了吧。再回到CUI,运行

xdkui@Debian:~$X&

开启一个屏幕编号0的X server,CUI下再运行

xdkui@Debian:~$xterm&

这时Ctrl+Alt+F7对应屏幕编号1;而F8对应屏幕编号0,且其X client为xterm。先退出上面的两个X server,下面复杂点手动启动我们的gnome吧,首先

xdkui@Debian:~$X&


然后

xdkui@Debian:~$gnome-session

看到的就和用startx 启动的X一样了,这时X server是X这个程序,X client是gnome-session及其启动的窗口管理器等程序。看到这里感觉xinit用处并不大(??不知是否正确),简单的脚本就可以实现。本来想把xinit反汇编了分析下,可懒得搞了^_^这是位于本机的情况,对于X server和X client位于不同主机的情况见下面本文第三部分。
个人感觉对于X Window System,搞清楚X server与X client关系很重要。一般X server很简单,就是/usr/bin/X11/X程序;X client则花样繁多,从高级的CDE,GNOME,KDE,到低级一点的只有twm,Window Maker,blackbox等窗口管理器,再到最简陋的只有xterm,rxvt,xeyes等单个x程序。正是由于X client的各种搭配,使得我们的X Window System看起来多样化。这可能也是X Window System最大的卖点之一吧 ^_^

三) 跨网络运行X Window System

        一般用来做服务器的系统(Linux,FreeBSD,Solaris等等) 都不会装X server,甚至很多都没有显示器。这样可以在这些系统里安装简单的X client,以GUI的方式远程显示在管理员们所坐的X server里。我们实验室用FreeBSD做网关,提供WWW,FTP服务,一般在管理员的本地机器起个X server,然后ssh或telnet上网关运行X client程序显示在本地显示器上,当然,也可用XDMCP(X Display Manager Control Protocol),man xsession里提到/etc/X11/Xsession一般被startx(我的/etc/X11/xinit/xinitrc里调用 Xsession脚本)或display manager调用,但有的display manager只调用Xsession而不是xinitrc,故为了startx和display manager两种方式下都可正常启动GUI,最好把X client启动的程序放在Xsession文件里。远程运行X client程序需要设置DISPLAY环境变量,设置为 主机名称:屏幕编号(如192.168.1.2:0,则表示X server是192.168.1.2这台机器上的0号屏幕);或是给X client程序加个—display参数。由于条件限制,只测试了位于TCP/IP网络环境,X server为192.168.1.2,X client为192.168.1.1。

1) Windows系统做X server

a) 用ssh或telnet方式
       Windows下面的X server软件有很多种,我这里使用X-win32。在Windows里运行X-win32程序,则相当于本地机器是个X server。远程登录上Debian(我这里是用VMware仿真网络环境,直接进虚拟机即可^_^),运行:

xdkui@xclient:~$export DISPLAY=192.168.1.2:0
xdkui@xclient:~$xterm&


这时即在Windows里的X server里看到了xterm了,至于X client还运行什么程序就看你的需要了,文件管理器阿,资源查看器等。当然,这里X-win32要设置好授权,好像默认是禁止接入控制,即任何X client都可使用这个X server。
b) XDMCP方式
        常见的Display Manager有xdm,gdm,kdm等。我这里使用的是gdm。需要修改gdm的配置文件/etc/X11/gdm/gdm.conf,修改[xdmcp]段的Enable=true,使得可以远程登录,在X client运行gdm。
在X-win32里建一个XDMCP的session,查询方式,填入IP为运行gdm的机器地址。连接,即可看到登录界面,下面的就不用说了,享受吧

2) Linux与Linux互联

a) ssh或telnet方式
         在linux 本地起个X server,需要注意授权问题,建立文件/etc/X0.hosts,填入X client的IP192.168.1.1,其中X0.hosts表示本地第0个屏幕允许连接的X client地址,建立X1.hosts文件则是本地第1个屏幕允许连接的X client地址,以此类推,man xserver里有。运行

xdkui@xserver:~$X&

运行该程序时别加-nolisten参数,否则不会在网络上侦听。
这个时候Ctrl+Alt+F7是X server,返回Ctrl+Alt+F1还可以ssh上X client机器上。
然后登录上X client,运行

xdkui@xclient:~$xterm –display 192.168.1.2:0

即可在本地的X server里看到xterm了,如果有的话,还可把gnome-session也显示在本地来。同样可以在linux里的VMware里做这个测试,需要用点手腕了^_^见下
b) XDMCP方式
         在我们的X client里运行gdm(别忘了修改gdm.conf),然后在本地X server的CUI下面运行X -query 192.168.1.1(X client开gdm机器的地址)。可以看到登录界面了吧。
我是在linux里的VMware里做的测试,说说所用的手腕吧。在Ctrl+Alt+F1的CUI下正常运行startx&启动GUI,这时 Ctrl+Alt+F7即为我的X server,X client启动的gnome,然后在这里运行VMware打开Debian虚拟机,并运行gdm。然后回到Ctrl+Alt+F1,运行X :1 -query 192.168.1.1。看到登录界面了吧。这时Ctrl+Alt+F7为我的0号屏幕,里面运行了虚拟机。Ctrl+Alt+F8为1号屏幕,在远程 GUI登录X client。相当于我在本地起了两个X server。

X Window System设计的真是相当神奇,使用方法更是眼花缭乱。佩服………

PS:这篇文章参考了人民邮电出版的《X Window彻底研究》,有小部分是里面的原话。有兴趣可以看看,不过里面只有2~3章值得一看,不到一个小时即可翻完,但确有助于理解X Window System。打了这么多字,希望对想了解的朋友有帮助,不然可就辛苦我了阿,小弟水平有限,如有错误之处,还请指正^_^



--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/
 
2007-10-27

2007年10月24日星期三

编程内核


 make-kpkg --revision tchai.0818 \
          --append-to-version .kov \
          --config menuconfig \
            kernel_image modules_image


make-kpkg --rootcmd fakeroot \
          --revision tchai.0818 \
          --append-to-version .kov \
          --config menuconfig \
            kernel_image modules_imageo


有时还是直接编译成binary-arch好,还可以生成kernel-headers,方便其它模块的编译, 比如alsa
nvidia等。。。

对于2.4的,偶经常是
$make-kpkg --rootcmd fakeroot binary-arch
对于2.6的,
$make-kpkg --rootcmd fakeroot --initrd binary-arch

需要的时候直接dpkg -i安装上。

make-kpkg --revision $1 --append-to-version $2 kernel_image modules_image



--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

直接从XP/W2K下通过硬盘启动来进行Ubuntu网络安装

直接从XP/W2K下通过硬盘启动来进行网络安装

只需要下载6M的文件,就可以从XP/W2K下通过硬盘启动来进行网络安装。
一:安装GRUN
  1. 下载GRUB   GRUB
  2. grldr 复制到 C:\,编辑C:\BOOT.INI,加入一行:
    C:\GRLDR="GRUB"
    注意:在下载的过程中,IE有时会自动加上.Dat的扩展名,如果如此,将文件名 grldr.dat 改为 grldr .

二:下载并设置安装包

1.   下载 netboot.tar.gz

2.   解压缩,提取 ubuntu-install/i386/ 目录下的 linuxinitrd.gz 到 C:\

三:重新启动计算机,按 c 进入 grub 命令行 根据下载的文件存放的位置,输入并回车:
    grub>kernel (hd0,0)/linux root=/dev/ram ramdisk_size=20000 devfs=mount,dall

    grub>initrd (hd0,0)/initrd.gz

    grub>boot

    这样,就可以开始安装了。

    注意:如果使用代理服务器或自己内部的源,有可能出现长时间的停顿,一共会出现两次。第一次手工设置完毕镜像后,如果出现停顿,使用 Alt+F2 切换到其它的控制台,使用 ps -LA 查看全部进程,将两个 wget 的进程 kill 掉,就可以再使用 alt+F1 切换回去,进行下一步的代理服务器设置,第二次也是在设置镜像之后。同样切换到控制台使用 ps -LA 查看全部进程,将一个最后名为 http 的进程 kill 掉,就可以同样再使用 alt+F1 切换回去开始安装系统了。

--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

做张grub启动盘

http://dev.csdn.net/article/70/70523.shtm

有时候我们的电脑可能出现系统无法引导的情况,比如说你重装了windows,把MBR给重写了,又比如像我今天这样,把装了grub的系统给格了,电脑启动后无法读到引导信息出错,什么系统都进不了了。
这时你当然可以用安装时或什么管你什么时候做的启动盘启动LINUX(然后再进行修复),用windows启动盘启动windows。
但这样你得至少做两张启动盘啊(呵呵,当然用loadlin之类的也行,不过我觉得更麻烦)。而且你每装一个LINUX就得做一张启动盘,不是很麻烦吗?
其实没有那么麻烦,只要你用grub做的引导,就很容易了,那么就是做一张grub启动盘.
这样你就相当于把grub装到了软盘上,利用一些grub命令就可以做到你的MBR没有被破坏前能做的所有事。而且,你在A机器上做的启动盘还可以拿到B、C、D……等等其它机器上用。
制作方法:

首先你用的引导程序必须是grub。
确认了这一点之后进入/boot/grub目录:
cd /boot/grub
然后把stage1和stage2两个文件写到你的软盘上去(呵呵,当然别忘了把软盘放进去哦):
dd if=stage1 of=/dev/fd0 bs=512 count=1
dd if=stage2 of=/dev/fd0 bs=512 seek=1

这样一张grub引导盘就做好了,下面就谈谈使用方法(虽然很简单,但还是怕有人不清楚)

首先用这张启动盘启动后会出现一些关于grub的信息,然后就是如下:
grub>
这就是在等你输入grub命令来启动系统。
对于LINUX,一般需要如下三个命令:
root,kernel,boot.
ROOT命令就是让你告诉GRUB,你的LINUX系统装在哪个分区,KERNEL命令就是让你指出用哪个内核启动,BOOT当然就是开始引导啦。
举个例子:
grub>root (hd0,
File system Type is ext2fs.(这一行告诉你文件系统是什么,详细的显示内容可能跟我写的不一样)
grub>kernel /boot/vmlinuz ro root=/dev/hda9
grub>boot

这样你的LINUX系统就启动了,注意的一点是GRUB中关于分区的叫法跟LINUX有点不一样,比如上面的(hd0,就表示hda9.是的,hdX就代 表第X+1个硬盘,hd0就代表第1个硬盘(相当于hda),8就代表第9个分区(GRUB中的表示方法跟C语言有点像,下标是从0开始的),(hd0, 当然就是代表hda9啦。
知道这些应该知道怎么引导LINUX系统了吧?注意一点,如果你不清楚具体的内核文件名(比如有的可能是vmlinuz-2.4.20什么的),那么你可 以用TAB键自动补全,相当方便,你只要打入kernel /boot/vm然后再按一下TAB键,那么就会显示全部在/boot/下以vm开头的文件。

引导其它系统就方便多了(比如windows,FreeBSD等),你要做的也是三个命令,ROOT跟BOOT命令跟LINUX一样,反正就是用ROOT 命令指定你装的这个系统所在的分区,BOOT命令就是开始引导系统。不同的是把引导linux的kernel命令改成chainloader +1命令。例如:

grub>root (hd0,0)
File System Type Vfat
grub>chainloader +1
grub>boot


呵呵,好了,把你做好的grub启动盘好好保存起来吧,以后装LINUX的时候它如果问你要不要做启动盘时你都可以大胆地说:NO!。因为你的这张grub启动盘基本上可以应付大部分无法启动的情况了。
呵呵,不过这种启动盘无法应付严重的系统错误(比如内核文件受到破坏什么的等等),但是这样的情况我还没有遇见过,我需要启动盘的情况往往是因为引导程序出了问题,比如重装WINDOWS,比如GRUB被我搞掉了等等。'



--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

2007年10月22日星期一

一个muse设置和例子

;;-*- elisp -*-
;;-*- encoding: UTF-8 -*-

(require 'muse-mode)
(require 'muse-wiki)
(require 'muse-html)
(require 'muse-latex)
(require 'muse-texinfo)
(require 'muse-docbook)

;; 我的 MUSE 工程设置。
(require 'muse-project)
(setq muse-project-alist
'(("ExaosWiki" ;; 我的个人 Wiki
("~/Documents/MyWiki" :default "index")
(:base "html" :path "~/Documents/MyWiki/html")
;(:base "pdf" :path "~/Documents/MyWiki/pdf")
(:base "latexcjk" :path "~/Documents/MyWiki/tex")
)
("WorkWiki" ;; 我的工作 Wiki
("~/Documents/MyWorkWiki" :default "index")
(:base "html" :path "~/Documents/MyWorkWiki/html")
;(:base "pdf" :path "~/Documents/MyWorkWiki/pdf")
(:base "latexcjk" :path "~/Documents/MyWiki/tex")
)
))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq muse-wikipedia-country "zh") ;; WikiPedia 的国家代码
(setq muse-file-extension "wiki") ;; 文件扩展名
(setq muse-mode-auto-p t) ;; 自动加载 muse-mode
;; Muse LaTeX CJK 设置
(setq muse-latexcjk-encoding-default "{GBK}{song}") ; "{UTF8}{song}")
(setq muse-latexcjk-footer "
%\\end{CJK*}
\\end{document}
")
(setq muse-latexcjk-header "%\\documentclass{article}
\\documentclass{ctexart}
%\\usepackage[encapsulated]{CJK}
%\\usepackage{ucs}
%\\usepackage[utf8x]{inputenc}
\\usepackage{indentfirst}
\\usepackage[CJKbookmarks=true]{hyperref}
\\usepackage[pdftex]{graphicx}
\\newcommand{\\comment}[1]{}

\\begin{document}
%\\begin{CJK*}(muse-latexcjk-encoding)

\\title{(muse-publishing-directive \"title\") }
\\author{(muse-publishing-directive \"author\")}
\\date{(muse-publishing-directive \"date\")}

\\maketitle

(and muse-publish-generate-contents
(not muse-latex-permit-contents-tag)
\"\\\\tableofcontents
\\\\newpage\")

")



--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

procmail使用

procmail不区分大小写,它使用Unix最常用的模式匹配方式进行匹配特定的邮件。因此使用这些匹配模式和procmail规则,可以定义一个更复杂的.procmailrc:

  
PATH=$HOME/bin: /usr/bin: /usr/ucb: /bin: /usr/local/bin:.
SHELL=/bin/sh
MAILDIR=$HOME/mail
DEFAULT=$MAILDIR/mailbox
LOGFILE=/dev/null
SENDMAIL=/usr/lib/sendmail
:0:
* ^From.*badguy     
/dev/null/
:0c:
* ^(From|Cc|To).*freebsd.org
| gzip >> freebsdmail.gz
:0:
* ^From.*@hotmail.com
* ^Subject:.*(joke|funny)
{
  :0 c
  ! friend1@hotmail.com friend2@usa.net
  :0
  joke
}
:0
* ^Subject:.*order
* !^FROM_DAEMON
* !^X-Loop: marketing@company.com
{
  :0 h c
  | (formail -r -A"X-Loop: marketing@company.com " ; \
  cat /market/acknowlegement.txt ) | $SENDMAIL -t
  :0 c
  ! market2@company.com
  :0
  market
}

  这个配置文件的第一部分中设置了几个环境变量,用于设置procmail的运行环境,其中将 MAILDIR设置为~/mail,与pine使用的目录相同,因此这将使pine能直接读取procmail处理过的邮件。

  第二部分中为邮件定义了三个不同的过滤规则及相应的处理操作,第一个规则将来自badguy 的邮件滤掉(输出到/dev/null);第二个规则将与freebsd.org的通信使用gzip保存到freebsdmail.gz 中,用于保存相应maillist的邮件;第三个规则将某个使用hotmail帐号的朋友,并使用joke或funny标题给自己发送笑话的邮件同时转给其他几个朋友,并同时保存在joke文件夹中;最后一个规则是设置了一个自动回复邮件系统,对于使用order做标题,并且没有FROM_DAEMON行(自动邮件回复程序使用FROM_DAEMON 作标记,通常不需要回复这些的邮件,否则会造成回复循环),并且没有包括X-Loop行的邮件进行处理:

  首先将X-Loop行添加到邮件中(使用formail将它们添加到mail的信封上),以免造成对同一个邮件的循环处理,然后将文件/market/acknowlegement.txt发回给发送者;并以及转发邮件,在market中保存邮件。

  根据这些规则,使用Procmail就能完整的处理各种邮件,减轻电子邮件不断增多而造成的困扰。

Procmail的使用

       Procmail 是一个邮件过滤工具,可以根据邮件的发信人、主题、长度以及关键字 等对邮件进行排序、分类、整理等工作,特别是在你订阅了邮件列表的时候显得 非常有用。
 

Procmail 的配置文件是 ~/.procmailrc 。配置非常简单,首先是一些选项,后 面则是一些过滤规则,如:

# -*- Conf -*-
MAILDIR=$HOME/Maildir/
ORGMAIL=/var/mail/$USER
LOGFILE=$HOME/.maillog
SHELL=/bin/zsh
LOCKFILE=$HOME/.lockmail
VERBOSE=no

# webmaster always sends junk mail~~
:0
* ^From:
webmaster@st\.zju\.edu\.cn
/dev/null

# all other mail goes to inbox
:0:
inbox/

Procmail 使用 recipe 来决定处理哪些邮件以及如何处理他们。一个 recipe 有这种格式:
:0 [flags] [ : [locallockfile] ]
<zero or more conditions (one per line)>
<exactly one action line>
conditions 以 * 开头,为其后到行尾的所有内容,当然除去头和尾的空格。它会送入 egrep 做正则表达式匹配。若conditions以 ! 开始,表示其后条件的反;若以 $ 开始,表示其后的部分要用sh来扩展;若以 ? 开始,表示使用其后跟的命令的返回值做判断;若以 < 或 > 开始,表示邮件长度。

接下来是 action line 。如果以 ! 开头,则对邮件进行 forward 到指定的地 址;如果是以 | 开头则是启动相应的程序;以 { 开头则可以指定嵌套的 recipe ;其他情况则被视为本地邮箱,如果是一个目录,则表示 maildir 格式, 否则是 mbox 格式。

flags 具体可以参见 man procmailrc ,后面如果加上冒号则表示对文件进行锁 定,这样可以避免同时运行几个 Procmail 操纵相同的文件的时候造成混乱。这里给出几个: D 表示大小写敏感模式;c 表示处理邮件的复件,在一个嵌套的recipe块中可以产生连续处理的效果。
 
几个常用的环境变量,具体的请参考man手册。
MAILDIR :当前目录
DEFAULT :缺省的mailbox文件
LOGFILE :信息记录文件
SENDMAIL :指定forward用的程序:处理的命令其实是: "$SENDMAIL" $SENDMAILFLAGS "$@"
LINEBUF:指定一行可以容纳的最多字符数
 
还有一些预定义好的表达式可以用:
^TO_ :匹配收件人包含后面跟的address
^TO :匹配收件人包含后面跟的word
^FROM_DAEMON :可以匹配大部分的自动邮件,
^FROM_MAILER :可以匹配大部分的系统产生的邮件
 
在表达式中,若有 \/ 出现,则这个表达右边的匹配部分会放入变量 MATCH 中。
 
几个好的例子:
 

# DISPLAY from and subject ON THE SCREEN!
:0 c
* ^Subject:.*\/.*
{
    SUBJECT=$MATCH

    :0 ih
    * ^From: .*\/[^<]*
    | echo "$SUBJECT from $MATCH"
}

 

              :0
              * ^From.*peter
              * ^Subject:.*compilers
              {
                 :0 c
                 !
william@somewhere.edu

                 :0
                 petcompil
              }

 

对系统邮件,存入 postm 中
              :0:
              * ^FROM_MAILER
              postm
 

              :0 Whc: vacation.lock
               # Perform a quick check to see if the mail was addressed to us
              * $^To:.*\<$\LOGNAME\>
               # Don't reply to daemons and mailinglists
              * !^FROM_DAEMON
               # Mail loops are evil
              * !^X-Loop: your@own.mail.address
              | formail -rD 8192 vacation.cache

                :0 ehc         # if the name was not in the cache
                | (formail -rI"Precedence: junk" \
                     -A"X-Loop: your@own.mail.address " ; \
                   echo "I received your mail,"; \
                   echo "but I won't be back until Monday."; \
                   echo "-- "; cat $HOME/.signature \
                  ) | $SENDMAIL -oi -t

copy all you mail to your an other account

              :0 c
              * !^X-Loop:
yourname@your.main.mail.address
              | formail -A "X-Loop: yourname@your.main.mail.address" | \
                 $SENDMAIL -oi
yourname@the.other.account

  sends  back at most one file per request, it ignores the body of incoming mails, the Subject: line has to look  like "Subject: send file the_file_you_want" (the blanks are significant), it does not return files that have names starting with a dot, nor does  it allow  files  to be retrieved that are outside the fileserver directory  tree (if you decide to munge this example, make sure you do  not  inadvertently loosen this last restriction).
              :0
              * ^Subject: send file [0-9a-z]
              * !^X-Loop:
yourname@your.main.mail.address
              * !^Subject:.*Re:
              * !^FROM_DAEMON
              * !^Subject: send file .*[/.]\.
              {
                MAILDIR=$HOME/fileserver # chdir to the fileserver directory

                :0 fhw                   # reverse mailheader and extract name
                * ^Subject: send file \/[^ ]*
                | formail -rA "X-Loop:
yourname@your.main.mail.address"

                FILE="$MATCH"            # the requested filename

                :0 ah
                | cat - ./$FILE 2>&1 | $SENDMAIL -oi -t
              }

--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

开通Yahoo邮箱的POP3功能



雅虎邮箱,终生伙伴!

2007年10月21日星期日

[转]图解我的股票买卖思路

图解我的股票买卖思路 [原创 2007-10-21 15:06:39 ] 发表者: 涨停教主

上周末《与朋友们告个别》中,对其中的两个股票买卖操作,希望股友们能解读出其中的买卖依据,可惜应者寥寥,现在图解一下当时我的思路,供朋友们参考,如果有高手读到本文,鄙人还是希望能看到不同角度的真知灼见

     一、002154的买卖思路

   1、买入前的K线图分析和分时图

查看更多精彩图片
查看更多精彩图片

    2、卖出时K线图分析和分时图

查看更多精彩图片
查看更多精彩图片

      二、 600477的买卖思路

    1、买入前K线图分析和分时图

查看更多精彩图片
查看更多精彩图片



   2、卖出时的K线分析和分时图

查看更多精彩图片
查看更多精彩图片



--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

买卖股票思路

上周末《与朋友们告个别》中,对其中的两个股票买卖操作,希望股友们能解读出其中的买卖依据,可惜应者寥寥,现在图解一下当时我的思路,供朋友们参考,如果有高手读到本文,鄙人还是希望能看到不同角度的真知灼见

     一、002154的买卖思路

   1、买入前的K线图分析和分时图

查看更多精彩图片
查看更多精彩图片

    2、卖出时K线图分析和分时图

查看更多精彩图片
查看更多精彩图片

      二、 600477的买卖思路

    1、买入前K线图分析和分时图

查看更多精彩图片
查看更多精彩图片



   2、卖出时的K线分析和分时图

查看更多精彩图片
查看更多精彩图片



--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

2007年10月19日星期五

你的MSN和GTalk可以做什么?

1、当然是聊天;
2、GTalk可以直接与MSN,Yahoo,ICQ通话;
3、发布MiniBlog到Twitter类网站,国内的有:zuosa.com,fanfou.com,叽歪,微客等;
4、发布博客到wordpress类,livejournal,Blogger等;这里要用到IMified网站的服务;
     在IMified中,还有很多其它的服务, 如del.icio.us等可以用,并且它有开放的API可以用
5、利用http://scheduler.lenovolabs.com/,做事务、任务管理
6、利用http://www.9fav.com/,收藏书签

--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

看看你的E-Mail可以做什么?

1、当然是收发邮件了;
2、可以注册、使用MSN和Google的相关服务;
     这样,对Google的Group,你可以用E-Mail进行收发操作;
3、发布Blog;
     支持的博客系统包括:blogger.com 和 MSN Spaces。需要做相关设置
4、传送照片到网络相册中;
     支持的系统包括:yupoo,flickr,photobucket等
5、上传文件到网络硬盘;
     支持的系统包括:box.net,esnips.com


--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

Zoundry的MSN空间的设置


原来用户名要用你空间的名字,如我的空间地址是 http://ustc-num.spaces.live.com/ ,那么用户名是ustc-num;而密码用的是你的空间设置中:"选项->电子邮件发布"页面中的"机密字"。空间的API地址是: https://storage.msn.com/storageservice/MetaWeblog.rpc




Technorati : ,
Del.icio.us :

2007年10月15日星期一

年轻漂亮MM想嫁有钱人 金融家的回复令人拍案叫绝

一个年轻漂亮的美国女孩在美国一家大型网上论坛金融版上发表了这样一个问题帖:我怎样才能嫁给有钱人?
  
    "我下面要说的都是心里话。本人25岁,非常漂亮,是那种让人惊艳的漂亮,谈吐文雅,有品位,想嫁给年薪 50万美元的人。你也许会说我贪心,但在纽约年薪100万才算是中产,本人的要求其实不高。
  
    这个版上有没有年薪超过 50万的人?你们都结婚了吗?我想请教各位一个问题——怎样才能嫁给你们这样的有钱人?我约会过的人中,最有钱的年薪 25万,这似乎是我的上限。要住进纽约中心公园以西的高尚住宅区,年薪25万远远不够。我是来诚心诚意请教的。有几个具体的问题:一、有钱的单身汉一般都在哪里消磨时光? (请列出酒吧、饭店、健身房的名字和详细地址。)二、我应该把目标定在哪个年龄段?三、为什么有些富豪的妻子看起来相貌平平?我见过有些女孩,长相如同白开水,毫无吸引人的地方,但她们却能嫁入豪门。而单身酒吧里那些迷死人的美女却运气不佳。四、你们怎么决定谁能做妻子,谁只能做女朋友? (我现在的目标是结婚。)"——波尔斯女士
  
    下面是一个华尔街金融家的回帖:
  
    "亲爱的波尔斯:我怀着极大的兴趣看完了贵帖,相信不少女士也有跟你类似的疑问。让我以一个投资专家的身份,对你的处境做一分析。我年薪超过50万,符合你的择偶标准,所以请相信我并不是在浪费大家的时间。
  
    从生意人的角度来看,跟你结婚是个糟糕的经营决策,道理再明白不过,请听我解释。抛开细枝末节,你所说的其实是一笔简单的"财""貌"交易:甲方提供述人的外表,乙万出钱,公平交易,童叟无欺。但是,这里有个致命的问题,你的美貌会消逝,但我的钱却不会无缘无故减少。事实上,我的收入很可能会逐年涕增.而你不可能一年比一年漂亮。
  
    因此,从经济学的角度讲,我是增值资产,你是贬值资产,不但贬值,而且是加速贬值!你现在25,在未来的五年里,你仍可以保持窈窕的身段,俏丽的容貌,虽然每年略有退步。但美貌消逝的速度会越来越快,如果它是你仅有的资产,十年以后你的价值甚忧。
  
    用华尔街术语说,每笔交易都有一个仓位,跟你交往属于"交易仓位"(tradingl position),一旦价值下跌就要立即抛售,而不宜长期持有——也就是你想要的婚姻。听起来很残忍,但对一件会加速贬值的物资,明智的选择是租赁,而不是购入。年薪能超过50万的人,当然都不是傻瓜,因此我们只会跟你交往,但不会跟你结婚。所以我劝你不要苦苦寻找嫁给有钱人的秘方。顺便说一句,你倒可以想办法把自己变成年薪50万的人,这比碰到一个有钱的傻瓜的胜算要大。
  
    希望我的回帖能对你有帮助。如果你对"租赁"感兴趣,请跟我联系。"——罗波.坎贝尔(J·P·摩根银行多种产业投资顾问)

--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

2007年10月14日星期日

淘宝上让人喷饭的卖家买家对话

买家: 请问欧版和行货为什么要分开卖?
卖家:因为粘在一起不方便使用
买家:。。。。。。。。
 
买家:老板,你说欧版质量好,还是行货质量好?
卖家:也许是欧版的吧!
买家:为什么?
卖家:因为我只见过行货有专门的维修中心。
 
买家:老板,能不能帮我挑一部最好的?
卖家:好的,我把几百部手机组织起来,让它们先海选后PK 。
 

买家:老板,这个手机的铃声怎么样?
卖家:绝对能响
 

买家:掌柜的,这个手机的最大优点是什么?
卖家:可以打电话。
买家:?!哦有什么缺点呢?
卖家:不能剃须!
买家:!?
 

买家:老板现在什么手机最贵?
卖家:诺基亚 1100
买家:不会吧,那个才 300 多!
卖家:你镀层金,镶两颗钻石就齐活了。
买家:倒!
 
买家: 3230
卖家: 9@9t
买家:诺基亚
卖家:飞利普
买家:你说什么啊?
卖家:你不是在对暗号吗?
买家:晕!
 
买家:老板,我同学说的,你们这里买的手机,即使从 4 楼上掉下来摔坏了,你们也可以换的,是这样吗?
卖家:你们应该多关心一下这位同学,不要让他一个人呆着,多陪他说说话,参加一些集体活动。如果还不见有什么好转的话,可以送到医院观察一下。
买家:哦。。。。。。
 
买家:老板这款手机有货吗?
卖家:没有了
买家:为什么没货啊!
卖家:因为缺货了
买家:哦!为什么会缺货呢?
卖家:因为断货了。
买家:哎,怎么会断货呀!
卖家:因为没货了
买家:哦。。。。那什么时候有货啊?
卖家:到货的时候
 
买家:老板,有巧克力吗?
卖家:有,德芙的,还有金帝的
买家:我是说手机!!!
卖家:哦,经你这么一提醒我才知道我是卖手机的
 
买家:老板,那你再给说说怎么分辨这个原装电池和组装电池
卖家:你把电池扔到火堆里,原装的爆炸声音更响些
 

买家:老板,你是深圳人吗?
卖家:你见过深圳人吗?
买家:没有
卖家:那我也没有
买家:那你怎么会去深圳呢?
卖家:还不是为了给深圳的经济建设添砖加瓦。
买家:。。。。。。
 

买家:这么贵的手机,我还不如买个笔记本电脑
卖家:也对,我想象你站在人群中,把笔记本翻开,贴在耳朵边听电话的造型一定很酷。
 

买家:有人吗?
卖家:不好意思,我只卖手机!
 

买家:老板,这个手机的通话质量好吗?
卖家:三星的一般都很好的
买家:我已经买的好几部手机都不行,听不清楚别人说什么。
卖家:哦
买家:你推荐我应该买什么
卖家:助听器
 
买家:老板,问你个问题?大陆行,港行,亚太行,欧行的,哪个的质量更好?
卖家:都一样,行行出状元嘛!
 
买家:老板可以见面交易吗?
卖家:你在哪里?
买家:武汉
卖家:我在深圳,你愿意过来吗?
买家:我怎么可能走得开呢?
卖家:你就离不开那片热土?
买家:???
卖家:有热干面吃的土地
买家:。。。。。。。。。。。
 

买家:老板,有什么手机最耐用?
卖家:只有相对耐用的,没有绝对耐用的
买家:为什么?
卖家:你见过谁家有祖传的手机
 
买家:哥哥,你给我说说智能手机和非智能手机有什么区别啊!?
卖家:就以闹钟为例,一般的手机到点就闹,闹得醒闹不醒不管,智能手机见闹不醒你,会打电话给你们单位领导请假。
买家:哦。。。。。。。。。。
 

买家:多少钱?
卖家: 2560
买家: 2000 卖不卖?
卖家:好的,支持支付宝吗,给我来一打
买家:什么?
卖家:我觉得你的价格更实惠。
 
买家:老板,你们卖手机赚钱吗?
卖家:那是相当的赚
买家:那一个月能赚多少?
卖家:你先买部手机,让我先赚点钱,把昨天的饭钱结了再告诉你
 

买家:老板,我们这里不到快递,还有什么办法能更快送到吗?
卖家:你包个飞机,然后空投
 

买家:老板,这个手机有红色吗?
卖家:没有的,厂家没有出过
买家:哎,我是女孩想要红的,怎么办呢?
卖家:你可以定做
买家:真的吗,要多少钱?
卖家:一部到不要多少钱,就是 5000 部起定
买家:哦,那谢谢了,我再考虑下
卖家:好的,考虑好了,带够钱了来
 
买家:有 MOTO 的 998 吗
卖家:不好意思,我不是收藏家
 
买家:今天还能发货吗?
卖家:应该没问题
买家:听说你们那边刮台风了
卖家:是的,前几天特别厉害
买家:有多厉害?
卖家:我们这里郊区的农民刮完台风都要到拿梯子到房顶去打水
买家:为什么啊?
卖家:他家井给刮到房顶去了!
 
买家:掌柜的,问下你,你说这网上有骗子吗?
卖家:那是肯定的
买家:哦,那你给我说说有什么特征?
卖家:有什么特征我就没时间归纳了,但被骗的人一定有一个特征
买家:什么?
卖家:相信天上会掉馅饼
 
买家:请问手机你们售出之后,用什么方法保证质量?
卖家:祈祷
 
买家:请问用 EMS 多少钱
卖家: 20
买家:邮局是不是按重量的吗?就一个读卡器还要这么多?
卖家:出租车不会因为你的距离短而不收你起步价
 
买家:多少钱?
卖家: 1780
买家:怎么这么便宜,我有点担心
卖家:这样吧,为了避免你不必要的担心,我受累点,我去改成 1980
买家:。。。。。。。。。
 

买家:老板,这个手机大概有多重
卖家: 60 多克
买家:哎,其他都好,我就是嫌太轻了
卖家:你可以绑在哑铃上使用

--
一步一步教你从互联网赚钱 http://www.zqzn.com/index.asp?rid=key480769
投资理财 http://li-cai.blogspot.com/

2007年10月11日星期四

IMifield是个有趣的东东



IMifield是个好东东,可以到Twitter,到Blogger,到NotePad,到很多网站,到Livejournal等,好呀