RAN 的个人资料诱...照片日志列表更多 工具 帮助

日志


2006/2/10

xhtml for .emacs

(defun xhtml ()
  (interactive)
  (insert (concat
           "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n"
           "<!DOCTYPE html\n"
           "PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
           "\"DTD/xhtml1-strict.dtd\">\n"
           "<html xmlns=\"http://www.w3.org/1999/xhtml\" "
           "xml:lang=\"fr\"lang=\"fr\">\n"
           "<head>\n"
           "<title></title>\n"
           "<link rel=\"stylesheet\" type=\"text/css\" href=\"\" />\n"
           "</head>\n"
           "<body>\n\n\n\n\n</body>\n"
           "</html>\n")))
(global-set-key [(control f9)] 'xhtml)
2006/1/26

一晚上的成果

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(column-number-mode t)
 '(cua-mode nil nil (cua-base))
 '(current-language-environment "Chinese-GB")
 '(display-battery-mode nil)
 '(display-time-mode t)
 '(global-font-lock-mode t)
 '(show-paren-mode t))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )

;;加载路径
(add-to-list 'load-path "~/neoemacs/lisp")

;;设置字体 
(set-default-font "-*-Courier New-Regular-r-*-*-14-*-*-*-c-*-fontset-chinese") 

;;禁用启动信息 
(setq inhibit-startup-message t) 

;;关闭烦人的出错时的提示声 
(setq visible-bell t) 


;;把title设置为“文件名@LC's Emacs"
(setq frame-title-format
        '("  GNU Emacs   -   [ " (buffer-file-name "%f \]"
                (dired-directory dired-directory "%b \]"))))

;;光标靠近鼠标的时候,让鼠标自动让开,别挡住视线
(mouse-avoidance-mode 'animate)

;;下面的这个设置可以让光标指到某个括号的时候显示与它匹配的括号 
(show-paren-mode t) 
(setq show-paren-style 'parentheses) 

;;设置缺省模式是text,而不是基本模式 
(setq default-major-mode 'text-mode) 
(add-hook 'text-mode-hook 'turn-on-auto-fill) 

;;设置tab为4个空格的宽度,而不是原来的2 
(setq default-tab-width 4) 

;;防止页面滚动时跳动 
(setq scroll-margin 3
      scroll-conservatively 10000)

;; 所有的备份文件转移到~/neoemacs/backups目录下 
(setq make-backup-files t)
(setq version-control t)
(setq kept-old-versions 2)
(setq kept-new-versions 5)
(setq delete-old-versions t)
(setq backup-directory-alist '(("" . "~/neoemacs/backups")))
(setq delete-auto-save-files t)
;; Emacs 中,改变文件时,默认都会产生备份文件(以 ~ 结尾的文件)。可以完全去掉
;; (并不可取),也可以制定备份的方式。这里采用的是,把所有的文件备份都放在一
;; 个固定的地方("~/neoemacs/backups")。对于每个备份文件,保留最原始的两个版本和最新的
;; 五个版本。并且备份的时候,备份文件是复本,而不是原件。

;;不产生备份文件 
;(setq make-backup-files nil) 

;;设置kill-ring-max(我不知道怎么翻译这个词:)为200,以防不测:) 
(setq kill-ring-max 200)

;;显示日期 
(setq display-time-day-and-date t) 
(display-time) 

;;显示时间
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(setq display-time-use-mail-icon t)
(setq display-time-interval 10)

;; 设置时间戳,标识出最后一次保存文件的时间。
(setq time-stamp-active t)
(setq time-stamp-warn-inactive t)
(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S K.T")

;; 默认的日记文件
(setq diary-file "~/neoemacs/diary")

;; 设置所在地的经纬度和地名,calendar 可以根据这些信息告知你每天的日出和日落
;; 的时间。
(setq calendar-latitude +36.60)
(setq calendar-longitude +117)
(setq calendar-location-name "JiNan")

;;保存上次的操作记录到SESSION 
(add-to-list 'load-path "~/neoemacs/backups") 
(require 'session) 
(add-hook 'after-init-hook 'session-initialize) 

(load "desktop") 
(desktop-load-default) 
(desktop-read) 

;;设置默认工作目录 
(setq default-directory "D:/Neosun/Work") 

;;显示列号
(setq column-number-mode t)

;设置默认的列数是123
(setq default-fill-column 12300)

;;设置行号,开启命令:M-x setnu-mode 
(require 'setnu) 

;;'y' for 'yes', 'n' for 'no' 
(fset 'yes-or-no-p 'y-or-n-p) 

;;自动补全
(global-set-key [(meta ?/)] 'hippie-expand)
(setq hippie-expand-try-functions-list 
      '(try-expand-dabbrev
 try-expand-dabbrev-visible
 try-expand-dabbrev-all-buffers
 try-expand-dabbrev-from-kill
 try-complete-file-name-partially
 try-complete-file-name
 try-expand-all-abbrevs
 try-expand-list
 try-expand-line
 try-complete-lisp-symbol-partially
 try-complete-lisp-symbol)
)


(defun hold-line-scroll-up()
  "Scroll the page with the cursor in the same line"
  (interactive)
  (let ((next-screen-context-lines
        (count-lines
         (window-start) (window-end)
         )
        ))
    (scroll-up)
    ))

(defun hold-line-scroll-down()
  "Scroll the page with the cursor in the same line"
  (interactive)
  (let ((next-screen-context-lines
        (count-lines
         (window-start) (window-end)
         )
        ))
    (scroll-down)
    ))

(global-set-key (kbd "M-n") 'hold-line-scroll-up)
(global-set-key (kbd "M-p") 'hold-line-scroll-down)

;;开启tabbar 
(require 'tabbar) 
(tabbar-mode)
(setq tabbar-buffer-groups-function 'tabbar-buffer-ignore-groups)

(defun tabbar-buffer-ignore-groups (buffer)
  "Return the list of group names BUFFER belongs to.
Return only one group for each buffer."
  (with-current-buffer (get-buffer buffer)
    (cond
     ((or (get-buffer-process (current-buffer))
          (memq major-mode
                '(comint-mode compilation-mode)))
      '("Process")
      )
     ((member (buffer-name)
              '("*scratch*" "*Messages*"))
      '("Common")
      )
     ((eq major-mode 'dired-mode)
      '("Dired")
      )
     ((memq major-mode
            '(help-mode apropos-mode Info-mode Man-mode))
      '("Help")
      )
     ((memq major-mode
            '(rmail-mode
              rmail-edit-mode vm-summary-mode vm-mode mail-mode
              mh-letter-mode mh-show-mode mh-folder-mode
              gnus-summary-mode message-mode gnus-group-mode
              gnus-article-mode score-mode gnus-browse-killed-mode))
      '("Mail")
      )
  ((memq major-mode
            '(php-mode html-mode c-mode java-mode text-mode conf-mode lisp-mode))
      '("Mywork")
      )
  ((member (buffer-name)
              '("*w3m*"))
      '("Mywork")
      )
  ((member (buffer-name)
              '("*chat.freenode.net*" "*irc.freenode.net*" "*irc.263.net*" "*bj.irc.263.net*"))
      '("rcirc")
      )
     (t
      (list 
       "default"  ;; no-grouping
       (if (and (stringp mode-name) (string-match "[^ ]" mode-name))
           mode-name
         (symbol-name major-mode)))
      )
     
     )))


;(global-set-key (kbd "") 'tabbar-backward-group) 
;(global-set-key (kbd "") 'tabbar-forward-group) 
;(global-set-key (kbd "") 'tabbar-backward) 
;(global-set-key (kbd "") 'tabbar-forward) 

;; 代码折叠 
(load-library "hideshow") 
(add-hook 'java-mode-hook 'hs-minor-mode) 
(add-hook 'perl-mode-hook 'hs-minor-mode) 
(add-hook 'php-mode-hook 'hs-minor-mode) 
(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)

;;开启图片浏览 
(require 'thumbs) 
(auto-image-file-mode t) 

;; 如果设置为 t,光标在 TAB 字符上会显示为一个大方块 :)。
;;(setq x-stretch-cursor nil)

; 开启语法高亮。
(global-font-lock-mode 1) 

;打开压缩文件时自动解压缩。
(auto-compression-mode 1)                             

; 光标不要闪烁。
;(blink-cursor-mode -1)

; 高亮显示匹配的括号。
(show-paren-mode 1)

; 给出用 M-x foo-bar-COMMAND 输入命令的提示。
;(icomplete-mode 1)

; 打开文件和转换 buffer 的方便模式。
;(ido-mode 1)

;;DIRED CONFIG
(require 'dired)
(require 'dired-x)
;; C-x C-j                 跳转到当前文件所在目录的 dired 缓冲[x]
(global-set-key "\C-x\C-j" 'dired-jump)
(define-key dired-mode-map "b" 'dired-mark-extension)
(define-key dired-mode-map "c" 'dired-up-directory)
(define-key dired-mode-map "e" 'dired-mark-files-containing-regexp)
(define-key dired-mode-map "o" 'chunyu-dired-open-explorer)
(define-key dired-mode-map "r" 'dired-mark-files-regexp)
(define-key dired-mode-map "/" 'dired-mark-directories)
(define-key dired-mode-map "K" 'dired-kill-subdir)
(define-key dired-mode-map [(control ?/)] 'dired-undo)

(defun chunyu-dired-open-explorer ()
 (interactive)
 (let ((file-name (dired-get-file-for-visit)))
 (if (file-exists-p file-name)
 (w32-shell-execute "open" file-name nil 1))))

(setq dired-listing-switches "-avl" ;; ls 文件列表参数
 dired-recursive-copies 'top   ;; 复制目录时,递归复制所有字目录
 dired-recursive-deletes 'top  ;; 删除目录时,递归删除所有字目录
 cvs-dired-use-hook 'always)   ;; 浏览 CVS 时,自动打开 pcl-cvs 界面

;;让emacs在windows上启动时最大化
(defun w32-restore-frame () 
"Restore a minimized frame" 
(interactive) 
(w32-send-sys-command 61728)) 
(defun w32-maximize-frame () 
"Maximize the current frame" 
(interactive) 
(w32-send-sys-command 61488)) 
(w32-maximize-frame)


;;中文设置

;;中文设置
(set-language-environment 'Chinese-GB)
(set-keyboard-coding-system 'chinese-iso-8bit)
(set-selection-coding-system 'chinese-iso-8bit)
(set-terminal-coding-system 'chinese-iso-8bit)
(setq locale-coding-system 'chinese-iso-8bit)
(set-clipboard-coding-system 'chinese-iso-8bit)
(setq current-language-environment "Chinese-GB")
(setq file-coding-system-alist 
    (list file-coding-system-alist 
        `(".*" chinese-iso-8bit))) 


;;SET KEY 
(global-set-key "\C-xk" 'kill-this-buffer) 
(global-set-key "\C-xr" 'replace-string) 
(global-set-key [(f7)] '(lambda ()
    (interactive)
    (insert (format-time-string "%Y年%m月%d日\n1.\n2.\n3."))
    ))
(global-set-key [(f6)] '(lambda ()
    (interactive)
    (insert (format-time-string "%Y-%m-%d %H:%S"))
    ));把插入当前时间绑定到 C-x t
(global-set-key [(f5)] '(lambda ()
    (interactive)
    (insert (format-time-string "%Y年%m月%d日"))
    ))


;;EMACS配色方案,菜单Tools->Color Theme 选择你需要的配色 
(require 'color-theme)
(color-theme-dark-blue2)



;;导出成html高亮显示
(require 'htmlize)

;find next 字母C-c a xxxxx 
(defun wy-go-to-char (n char)
  "Move forward to Nth occurence of CHAR.
Typing `wy-go-to-char-key' again will move forwad to the next Nth
occurence of CHAR."
  (interactive "p\ncGo to char: ")
  (search-forward (string char) nil nil n)
  (while (char-equal (read-char)
       char)
    (search-forward (string char) nil nil n))
  (setq unread-command-events (list last-input-event)))

(define-key global-map (kbd "C-c a") 'wy-go-to-char)
(require 'setnu)


;;php mode
(load-file "~/neoemacs/lisp/php-mode.el")
(autoload 'php-mode "php-mode""PHP Editing Mode" t)
(add-to-list 'auto-mode-alist'("\.php?\'".php-mode))
(add-hook 'php-mode-user-hook
          'turn-on-font-lock
          '(lambda () (define-abbrev php-mode-abbrev-table "ex" "extends"))
          )
;; passwd protect
(add-hook 'comint-output-filter-functions
          'comint-watch-for-password-prompt)

;;鼠标拷贝
(defun mouse-select-and-paste (start-event)
  "Select and paste the word at mouse point."
  (interactive "e")
  (let* ((start-point (posn-point (event-start start-event)))
         beg word)
    (save-excursion
      (goto-char start-point)
      (forward-char 1)
      (skip-chars-backward "a-zA-Z0-9-_")
      (setq beg (point))
      (skip-chars-forward "a-zA-Z0-9-_")
      (setq word (buffer-substring-no-properties beg (point))))
    (kill-new word)
    (insert word)))

(global-set-key   [M-down-mouse-1] 'mouse-select-and-paste)

2006/1/7

简化字在计算机时代的尴尬


繁體字我則堅決依照臺灣的標準。
用“麼”不用“麽”
用“勻”不用“匀”
用“丟”不用“丢”
用“說”不用“説”
用“裡”不用“裏”
用“憑”不用“凴”
用“為”不用“爲”
用“概”不用“槪”
用“強”不用“强”

前面的繁體都是臺灣經過整理以後,後面就作爲異體了~~除了細明體和標楷體和個別字體,後面的字一般都打不出來~~
GB18030裡面很多字就是中港臺日韓混亂的,“說”本來是傳統的寫法,簡化后出了個“说”,“说”的繁體自然就是“説”,然後傳統的“說”又被吸收到18030裡面去了~~

这里,首先列出九十六个汉字(简体):

  厂 摆 板 表 别 卜 才 冲 种 丑 出 当 淀
  冬 斗 恶 发 范 丰 复 干 谷 刮 合 后 胡
  划 回 汇 伙 获 几 家 姜 借 尽 卷 克 困
  适 累 里 历 帘 了 霉 蒙 弥 面 蔑 万 辟
  朴 仆 千 签 纤 秋 曲 舍 沈 胜 松 苏 台
  坛 团 系 咸 向 吁 须 旋 么 叶 佣 游 于
  余 郁 御 愿 云 芸 脏 折 征 症 只 致 制
  钟 朱 术 筑 准

  然后,请让我平静地告诉大家:正是这九十六个简化字,会将我们的汉字引入困境。

  简体字(简化字)作为十几亿中国人的“官方语言”,在过去近五十年间,逐渐为社会公众所广泛承认、接受与普遍使用。这个当初由中华人民共和国文化部、教育部及中国文字改革委员会联合颁布实施的《汉字简化方案》,无疑是非常成功的,简化字笔划简单、书写方便,给人们的工作、学习、生活带来了方便。

  随着现代科技不断发展,人们的生活已与计算机密不可分。在古文典籍的电子化过程中,上述九十六个简体字所引发出来的混乱,却近乎是一种灾难。

  因汉语言文学研究上的需要,古文典籍我们应当以繁体原文形式进行保存,一篇经一校、二校、三校,准确无误的简体字文章,一经电脑程序转换为繁体字,立刻涌现出大量“错别字”:「陸游」成了「陸遊」,「胡適」成了「胡适」,「錢鍾書」成了「錢鐘書」,「怒髮衝冠」成了「怒發衝冠」,「這裡那裡」成了「這里那里」,「為甚麼」成了「為什么」,「九萬里」成了「九万裡」……但愿百年之后,你我归了黄土,不会被发明汉字的祖师爷倉頡先生,指着鼻梁子臭骂,但愿从此你我的脸皮子能磨练得厚一些,再厚一些,丝毫不再觉得愧对华夏祖先。

  其实,话也不必说得那么远。明天请您用电脑输入一篇繁体字的学术文章,发往台湾的学术研究机构;在台湾方面,只要将文章转给任何一名稍有点水平的高中生,他就能一一为您指出:在您的文章当中,可能有多少多少个错别字。……

  这一切,我们并不能责怪程序员或计算机,二者均已尽了力;程序的编制完全忠实于固定算法,电脑运作也完全忠实于程序;若一定要责怪的话,只能怪“天”!只能怪简化汉字改革的推行早了四、五十年。只能怪“我们在一个错误的时机,发动了一场错误的战争”(引用美国官方话语)。

  若计算机的普及早那么四、五十年,若制定《汉字简化方案》的专家学者们用过计算机,反复地论证过“在计算机上处理汉字的问题”,这九十六个简化字所引发的灾难,恐怕就绝不会发生了。

  单纯从技术的角度,我可以明确地这样告诉大家:若维持上述“九十六个简化字”的现状不作任何改变,那么试图通过程序方式自动将简体字准确无误地转换成繁体字,几乎是不可能的!因为简繁体汉字之间快速准确的转换,基于这样一个必要条件:简体字与繁体字应当是一一对应的;就象“汉”对应于“漢”、“华”对应于“華”、“实”对应于“實”这样直截了当;若简体的“系”字,可对应“系係繫”、“于”可对应“于於”……且这种“一对多”的关系是近乎随意的,那么便没有任何电脑程序能够准确地处理了(事实上,人脑进行这种辨别也相当困难——请您试试分辨以下繁体字(一组词里头,只有其中一个是正确的):“陸游”与 “陸遊”、“天台山”与“天臺山”、“五台山”与“五臺山”!)。

  若从经济的角度,即便最终能完美地实现了这样的程序,也将会是一件“劳民伤财”、得不偿失的事情——计算机要经过极其复杂(运行次数近乎天文数字)的运算,才能准确转换一篇几百字的文章。

  古人云:亡羊而补牢,未为迟也。我觉得,要从根本上解决这个问题,其实并不难。只要文化部、教育部等“官方机构”对简化字作一次“有时代特色”的小小的修订(计算机领域的专业术语叫做“补丁(Service Pack)”),将可能引致繁简转换混乱的所有简化字(上述“九十六个简化字”的统计数字,估计仍会有个别遗漏,请以官方统计数据为准),逐一细拆,逐一重新制定相对应的简化字(例如,为“于”与“於”分别制定两个不同的简体字,为“系”“係”“繫”分别制定三个不同的简体字……),并强制全社会推行。

  最后要说一句:这不仅仅是典籍电子化的需要,这也是中华民族子孙万代的需要;我们没有任何理由、任何藉口,让优美的汉语言文字自我们这一代人起断子绝孙!我们没有任何理由、任何藉口,让我们的后人从此再也写不出一篇措辞优雅且没有任何一个错别字的繁体字文章!

  ……五千多年来的华夏祖先们,正默默地躺在黄土之下,默默地注视着我们。

举个小小例子:现在用电脑转换五百字的简体文章为繁体,用时无需0.1秒,而转换之后,校对这五百字繁体文章,则需要近半个小时!若需转换的文章有成千上万甚至上亿字,呜呼,我又要高呼“以有涯随无涯”……之类怪话啦。

简体繁体,都是汉字——为什么要存在这种混乱情形呢?一篇简体字的文章,0.1秒之内,让用繁体字的台湾、香港人也能看得懂,这难道不是一件大好事情么?即便从“一国两制”、“一国两字”的角度看,也是一件功德无量、利国利民的好事情!为什么我们要白白地付出那么多无谓的校对的时间与精力呢?

前面说过,因汉语言文学在学习、研究上的需要,古文典籍应当是以繁体原文的形式保存的。大学念过古典文学、古代汉语的朋友,相信会明白这一点。在古文、古汉语领域,甚至可以这样说:繁体字才是中文系的“官方语言”。

由于存在上述简、繁体字之间转换的混乱,《中华诗词》软件以简体字收录古诗词、文言文,其实是很不“保险”的。即便我们校对得再仔细,有一点是确定的:

我们收录的这些诗词、文章,根本无法准确地转换成繁体,无法忠实地展现其历史原貌。

我个人觉得这是一件令人十分悲哀的事情。这近乎是一种“徒劳”。我自以为在学习祖宗的文学精粹,孰料我所做的这一切,我所学习的这一切,在祖宗的眼中,只不过是一堆数也数不清的错误。

在目前的繁体输入法当中,我们的解决方法也是“以词定字”。当输入者打“这里”时,我们输出“這裡”;打“关于”时,我们输出“關於”……这样可以避开大部分常見的繁简字错误。然而这也仅是“治标”而已,因为输入法的词汇是无法无限制扩充的,即便可以扩充到十万词组,重码也会随之大量增加,多得让人无法接受。

此外还有一个困难。输入法输入繁体字与电脑自动转换繁体字之间,还存在着某种微妙差异。直接输入汉字时,输入者的主动分词与调整,也可起到减少错误的作用。

考虑这一句话:

我在三元里面馆吃面前忘了下醋。

这句子有些古怪,只作为一个特例。输入者能够快速准确地分词(将一个句子,拆分成一个个词组):

我-在-三元里-面馆-吃面-前-忘了-下醋。

而电脑自动分词的结果则可能是这样的:

我-在-三元-里面-馆-吃-面前-忘了-下醋。

“以词定字”自动转换成繁体就会变成这个样子:

我在三元裡面館吃面前忘了下醋。

而正确的繁体字应该是这样的:

我在三元里麵館吃麵前忘了下醋。

——相信电脑,依赖电脑,无疑会是一件危险事情。

有没有想过,现在我们所有中国人都在说白话文,为什么每一所中小学的语文课都在教文言文?现在我们大多数人住的房子有防盗门、防盗网,为什么不给所有古建筑也上一个防盗门、加一道防盗网,多结实多安全啊!现在我们穿的都是衬衫、西裤,为什么拍电视时演员们要穿古装那么别扭(做一套古装,比起做一套时装,不知要贵多少钱!太不值啦!),让演李白、杜甫那几位一律改穿西服、打领带得啦,让杨贵妃穿超短裙,让西施染棕发、穿牛仔裤,让王昭君出嫁时,穿一袭黑色晚礼服……那多帅、多酷啊!

开个玩笑而已。的确历史是严肃的,文字也是严肃的。正因其严肃,我们才需要在某些情形下,忠实地记录、忠实地还原其原始面貌。

本贴强调繁体字并不是要宣扬复古,而是出于研究、整理上的实际需要。笔者试图提出一个最简单的解决方法而已。

有一则笑话是这样的:

前苏联宇航员发现,在太空失重状态下,圆珠笔无法在纸上正常写字,无法及时记录太空实验的结果。于是地面的苏联科学家想尽千方百计,试图解决这个难题。他们耗费了三年时间,斥资几十亿卢布,结果仍然以失败告终。垂头丧气的苏联专家只好偷偷向美帝国主义的科学家们学习:究竟美国人是如何解决这个世纪难题的—— 结果,他们惊讶地发现,美国宇航员用铅笔!

我觉得,与其想尽千方百计,试图编制最复杂的计算机程序来解决这个“超级难题”,莫如修正96个“问题汉字”,那是最简单,而且一劳永逸的解决方法。

(其实这笑话所指并非“技术”,而是当技术、资金投入已近极限,且技术被证明无法解决问题的时候,可能换一个角度、换一种方法,却能轻而易举解决难题。铅笔与圆珠笔,基本上没有什么“技术” 上的可比性;再者,生产铅笔所需要的“技术”,相信也要比圆珠笔要低得多(这从两样商品的价格可大致看得出来)。)


我们不妨对照一下英文ASCII码的排列方式。英文有大写、小写之分,与我们的简体、繁体字有一点点类似。我们在google等搜索引擎中输入大写字母,搜索引擎能自动将这些输入转换成小写(这相当于我们输入简体字、程序能“零时间”地自动转换成繁体字),这归功于英文字母内码的排列方式。虽然我们每个人所用的英文键盘排列方式似乎是无序的,但储存在电脑中的字母,则严格按照字母表顺序,且大、小写字母之间一一对应,总是相隔32位。将一个大写字母的内码值加上32,即可转换成一个小写字母,反之亦然。

虽然英文字母只有26个,而汉字有成千上万,但在处理方法上,我觉得汉字内码的设计,原本也可以参考英文的作法——

以国家规定的《简化汉字方案》为标准,将所有汉字划分为两大类:①简繁异体(同时拥有简体写法与繁体写法的汉字,如“汉”对应“漢”、“华”对应“華”等等),②简繁同体(只有一种写法的汉字,如“定”、“列”、“格”等等)。相应地,在电脑处理时,可以将汉字内码划分为三大区域:

[1]简体字区域(这个区域对应于前面分类①中的简体部分);
[2]繁体字区域(这个区域对应于前面分类①中的繁体部分);
[3]简繁同体汉字区域(这个区域对应于前面分类②中的汉字部分)。

当然,这种处理方法基于如下假设:简/繁体字是一一对应的。

这样一来会有什么好处呢?假设区[1]有4200个简体字,区[2]对应有4200个繁体字,区[3]包括剩余的数万汉字。

当我们输入某个汉字时,若其内码属于区[1],意味着它是一个简体字,想将它转成繁体字,只需将其内码加上4200,即可得到对应的繁体字。

若某个汉字内码>4200,且<8400,那意味着它是一个繁体字,且拥有对应的简体字,想转简体,只需将其内码减去4200,即可得到对应的简体字。

若某个汉字内码>8400,那意味着它是一个区[3]的汉字,无所谓繁简体转换,因为在任何时候都只有一种写法,在繁/简体转换时,电脑只需直接返回该字即可。

那么这种方式的汉字内码是最好处理的。繁体/简体字之间的转换,几乎可以做得跟英文大、小写转换一样漂亮,快速而完美!

问题是,现在的汉字内码的编码方式,居然是以字频+拼音+笔划的方式编排的,丝毫不顾及计算机处理汉字的方式。这套全国通用的计算机内码方案的设计者,估计是一些语言文字方面的专家,然而很遗憾,他们自己可能并不用电脑,更不会用电脑进行程序设计!
2005/12/16

Richard Matthew Stallman--GNU发起人

图像 “http://upload.wikimedia.org/wikipedia/commons/f/f7/Richard_Matthew_Stallman.jpeg” 因其本身有错无法显示。
 

美国人理查德·马修·斯托曼Richard Matthew Stallman,简称 RMS,生于1953年3月16日),自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者。作为一个著名的黑客,他的主要成就包括Emacs及后来的GNU EmacsGNU C 编译器GNU 除错器。 他所写作的GNU通用公共许可证GNU GPL)是世上最广为采用的自由软件许可证,为copyleft观念开拓出一条崭新的道路。

1990年代中期,斯托曼把他大部时间花在作为一个政治运动者,为自由软件辩护,对抗软件概念专利版权法的扩张。他仍在程序设计方面奉献的心力都放在GNU Emacs。他的演讲当中大约半数有收入,这让他能够养活自己。

他最大的影响是为自由软件运动竖立了道德、政治以及法律框架。他被许多人誉为当今自由软件的斗士、伟大的理想主义者,但同时也有人批评他过于固执、观点落伍。

 

经历

斯托曼1953年出生于美国纽约曼哈顿地区,1971年进入哈佛大学学习,同年受聘于麻省理工学院人工智能实验室(AI Laboratory),成为一名职业黑客。

在AI实验室工作期间,斯托曼开发了多种今后影响深远的软件,其中最著名的就是Emacs。斯托曼在AI是一名典型的黑客,是整个黑客文化的一份子。

然而进入八十年代后,黑客社群在软件工业商业化的强大压力下日渐土崩瓦解,甚至连AI实验室的许多黑客也组成了Symbolic公司,试图以专利软件来取代实验室中黑客文化的产物--免费可自由流通的软件。

斯托曼对此感到气愤与无奈。在对Symbolic进行了一段时间的抗争后,他于1985年发表了著名的GNU宣言(GNU Manifesto),正式宣布要开始进行一项宏伟的计划:创造一套完全自由免费,兼容于Unix的操作系统GNU(GNU's Not Unix!)。之后他又建立了自由软件基金会来协助该计划。

他于1989年与一群律师起草了广为使用的GNU通用公共协议证书(GNU General Public License, GNU GPL),创造性地提出了“反版权”(或“版权属左”,或“开权”,copyleft)的概念。 同时,GNU计划中除了最关键的Hurd操作系统内核之外,其他绝大多数软件已经完成。

术语

GNU/Linux

1991年芬兰大学生Linus Torvalds在GPL条例下发布他自己创作的Linux操作系统内核,暂时替代了GNU计划的Hurd内核。至此,GNU计划基本完成,操作系统被命名为GNU/Linux(或简称Linux)。

理察·斯托曼2005年在維基媒體國際大會演講,題目為「版權與社群」
放大
理察·斯托曼2005年维基媒体国际大会演讲,题目为“版权与社群”

自由软件

斯托曼是一名坚定的自由软件运动倡导者,与其他提倡开放源代码的人不同,斯托曼并不是从软件质量的角度而是从道德的角度来看待自由软件。他认为使用专利软件是非常不道德的事,只有附带了源代码的程序才是符合其道德标准的。对此许多人表示异议,并也因此有了自由软件运动与开源软件运动之分。


多项荣誉

Linus Benedict Torvalds--Linux之父

http://upload.wikimedia.org/wikipedia/commons/6/69/Linus_Torvalds.jpeg
 

林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds, 1969年~ ),当今世界最著名的电脑程序员(程序师)、黑客黑客)。Linux内核的发明人及该计划的合作者。托瓦兹利用个人时间及器材创造出了这套当今全球最流行的操作系统操作系统)内核之一。

托瓦兹1969年12月28日出生于芬兰赫尔辛基市。父亲尼尔斯·托瓦兹(Nils Torvalds)是一名活跃的共产主义者及电台记者。托瓦兹家族属于在芬兰占6%的少数民族芬兰瑞典人。他毕业于赫尔辛基大学计算机系,1997年至2003年在美国加州硅谷任职于全美达公司(Transmeta Corporation),现受聘于开放源代码开发实验室(OSDL : Open Source Development Labs, Inc),全力开发Linux内核。与妻子托芙(Tove,芬兰前女子空手道冠军)育有两名孩子。

与很多其他黑客(骇客)不同,托瓦兹行事低调,一般很少评论商业竞争对手(例如微软)产品的好坏,但坚持开放源代码信念,并对微软等对手的FUD战略大为不满。

例如,在一封回应微软资深副总裁Craig Mundie有关开放源代码运动的评论(Mundie批评开放源代码运动破坏了知识产权)的电子邮件中,托瓦兹写道:“我不知道Mundie是否听说过艾萨克·牛顿(Isaac Newton)爵士?他不仅因为创立了经典物理学(以及他和苹果的故事)而出名,也还因为说过这样一句话而闻名于世:我之所以能够看得更远,是因为我站在巨人肩膀上的原故。”托瓦兹又说道:“我宁愿听牛顿的也不愿听Mundie的。他(牛顿)虽然死了快300年了,却也没有让房间这样得臭气熏天。”

参考文献

林纳斯·托瓦兹、大卫·戴蒙(David Diamond)著,梁晓莺译:Just For Fun: Linux创始人托瓦兹自传,台北市经典传讯文化,2001年,ISBN 9574761231