Monday, June 30, 2008

呼叫转移

make

原来make也有呼叫转移的功能...

Vim的diff模式常用命令

:diffsplit {filename}
进入diff模式, 默认是水平分割, 但我比较喜欢垂直分割, 可以在.vimrc中添加set diffopt=vertical

[c & ]c
在差异的部分进行跳转

:diffget
用另一个缓冲区来修改当前缓冲区, 消除不同之处, 仅对光标所在行附近有影响

:diffput
用当前缓冲区来修改另一个缓冲区, 消除不同之处, 仅对光标所在行附近有影响

:diffupdate
刷新

C++学习笔记(七) -- 虚继承中的初始化

在虚派生中, 由最低层派生类的构造函数初始化虚基类. 无论虚基类出现在继承层次中任何地方, 总是在构造非虚基类之前构造虚基类.

from: 《C++ Primer》(第四版)

Saturday, June 28, 2008

Vimfox

Vimperator

这几天在网上看很多大段的内容, 又懒得去碰鼠标的滚轮, 于是就想只依托键盘来滚动页面, 但那几个方向键按起来是非常得不爽, 滚动一点都不平滑, 再加上Vim也用习惯了, 就去整了这么一个插件.

好了, 现在向大家隆重推出史上最牛X的插件--Vimperator
使用甚是简单, 请参阅:help

C++学习笔记(六) -- 继承中的重载

C++中不允许重载基类中的函数, Java中可以. 原因在于, C++中基类与派生类的作用域不同, 通过派生类的对象调用与基类中同名的函数时, 编译器只会在派生类中寻找该函数, 若函数参数不匹配, 则会发生编译错误. 如需重载, 可以在派生类中使用using声明扩展基类中函数的作用域.

Friday, June 27, 2008

Thursday, June 26, 2008

彩蛋收集计划 II

Ubuntu
彩蛋-01

彩蛋-02

彩蛋-03
Alt+F2: free the fish

彩蛋-04
Alt+F2: gegls from outer space

彩蛋-05

彩蛋-06

彩蛋-11
apt-get --help

OpenOffice
彩蛋-07
彩蛋-08
在Calc的单元格中输入: =Game("StarWars")

Firefox
彩蛋-09

彩蛋-10

Tuesday, June 24, 2008

果冻

爱心果冻-01
某人的爱心果冻, 上面还有我的牙印.

爱心果冻-02
看来某人以后不能单独食用了

Monday, June 23, 2008

大·海

大海
昨天在学校里突然听到了《大·海》的插曲, 吉田洁的日本人はるかな旅中的那首Tvエンディングテーマ, 不知是不是刚刚才见了兰的关系, 我又感到了当初听到这个插曲的感觉, 1分48秒那个宏大的转折, 就像听龙猫, 听天空之城, 听久石让, 我会想要闭上眼睛, 感觉全身的毛孔都在呼吸, 一种莫名的亢奋.

期待《大·海》

Saturday, June 21, 2008

让Pidgin聊天发送消息使用Ctrl+Enter

修改~/.gtkrc-2.0文件, 如果没有, 则手动创建一个.
binding "my-bindings"
{
  bind "Return" { "insert-at-cursor" ("\n") }
  bind "<ctrl>Return" { "message_send" () }
}
widget "*pidgin_conv_entry" binding "my-bindings"

Saturday, June 14, 2008

在Window$中使用Vim的taglist插件

1. 到这里下载ctags, 然后解压到任意非中文路径目录, 推荐根目录, 这样在后面修改_vimrc文件时也会方便些.
2. 在_vimrc文件中添加
let Tlist_Ctags_Cmd = 'D:\ctags\ctags.exe'
3. 下载taglist, 放到$VIM/vim71/plugin中.
4. 在Vim中输入:Tlist就可打开taglist.

不过我发现在Window$中不能使用taglist来浏览包含在中文路径中的源文件, 也不知这是为什么.

Friday, June 13, 2008

纪念日

FK

Emacs中文字体调整

一直尝试想让Emacs用上文泉驿正黑的矢量字体, 可一直就没成功过, 于是最后认定文泉驿正黑暂时还不支持在Emacs中的显示, 就又去找了zhuqin的史上最伪合成字体——DejaVu Sans YuanTi, 修改.emacs文件, 搞定.
(set-fontset-font (frame-parameter nil 'font)
  'unicode '("DejaVu Sans YuanTi" . "unicode-bmp"))

Thursday, June 12, 2008

使用JDEE编译时报错不支持现有Java版本的解决办法

当刚刚安装完JDEE, 如果没有做任何设置, 那么当编译Java文件时JDEE会显示一个错误, 说不支持现在的Java版本, 具体的解决办法是:
xiaogaozi@LAN:~$ java -version
java version "1.6.0_06"
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
Java HotSpot(TM) Server VM (build 10.0-b22, mixed mode)
记下其中的版本号, 然后在Emacs中执行
M-x costomize-variable <RET> jde-jdk-registry
将其中的Version项修改为刚才记下的版本号就行了.

Wednesday, June 11, 2008

Emacs 常用命令 (持续更新)

C-x C-f
打开文件

C-x C-s
保存, 输入"!"保存所有缓冲区

C-x d
Emacs中的目录管理, 类似Vim的":e .", 下面是一些常用命令:
^访问目录的父目录
q退出缓冲
R重命名
D删除文件
C-x C-f创建文件
+创建目录
g刷新缓冲所有文件 (这很有用, 当你新建了文件以后, 需要手动刷新)


C-@
用来作为一个选定区域的开始标记, 由于对于现在的键盘来说, 要按出这个组合键实在是很麻烦, 在Emacs中文站上找到一行.emacs的配置, 把这个组合键替换成了C-x <SPC>, 但是因为这个组合键同GDB的设置断点的组合键冲突, 于是我稍微修改了一下:
;; Replace `C-@' to `C-^'.
(global-set-key (kbd "C-^") 'set-mark-command)


M-w
复制选定的文本, 这里有一个简单的Emacs Lisp函数可以实现当没有选定任何本文的时候, 使用M-w来选定一行文本:
;; Make `M-w' can copy a line.
(defun xiaogaozi-kill-ring-save (&optional n)
  "If region is active, copy region. Otherwise, copy line."
  (interactive "p")
  (if mark-active
      (kill-ring-save (region-beginning) (region-end))
    (if (> n 0)
        (kill-ring-save (line-beginning-position) (line-end-position n))
      (kill-ring-save (line-beginning-position n) (line-end-position)))))
(global-set-key (kbd "M-w") 'xiaogaozi-kill-ring-save)


C-x h
选定整个缓冲区

C-w
剪切选定的文本

C-y
粘贴

C-/
撤销

C-x r k
剪切选定的矩形区域

C-x r y
粘贴

C-x r t STRING <RET>
替换选定矩形区域

C-x r o
在选定矩形区域前插入一个空格

C-x r M-w
复制选定的矩形区域, 但这需要插件的支持, 可以在这里下载rect-mark.el, 然后修改.emacs文件:
;; rect-mark.el
;; Support for marking a rectangle of text with highlighting.
(define-key ctl-x-map "r\C-@" 'rm-set-mark)
(define-key ctl-x-map [?r ?\C-\ ] 'rm-set-mark)
(define-key ctl-x-map "r\C-x" 'rm-exchange-point-and-mark)
(define-key ctl-x-map "r\C-w" 'rm-kill-region)
(define-key ctl-x-map "r\M-w" 'rm-kill-ring-save)
(define-key global-map [S-down-mouse-1] 'rm-mouse-drag-region)
(autoload 'rm-set-mark "rect-mark"
  "Set mark for rectangle." t)
(autoload 'rm-exchange-point-and-mark "rect-mark"
  "Exchange point and mark for rectangle." t)
(autoload 'rm-kill-region "rect-mark"
  "Kill a rectangular region and save it in the kill ring." t)
(autoload 'rm-kill-ring-save "rect-mark"
  "Copy a rectangular region to the kill ring." t)
(autoload 'rm-mouse-drag-region "rect-mark"
  "Drag out a rectangular region with the mouse." t)


C-x r <SPC> X
保存当前光标位置到寄存器X

C-x r j X
跳转到寄存器X存储的位置

C-x r s X
保存选定区域到寄存器X

C-x r i X
插入寄存器X中保存的内容

M-% STRING <RET> NEWSTRING <RET>
普通的查找替换, 选定特定区域之后就只会在其中查找.

C-M-% REGEXP <RET> NEWSTRING <RET>
支持正则表达式的查找替换, 其余同上.

C-M-n
跳转到下一个匹配的括号

C-M-p
跳转到上一个匹配的括号

M-g M-g
跳转到指定行

M-;
多行注释, 如果没有选中任何区域, 则在当前行尾添加注释.

C-M-\
多行缩进

Tuesday, June 10, 2008

ng

今天才发现原来一直以来用得最多的一个字"嗯"的拼音居然是ng, 以前一直都打成en的, 唉, 浅薄了, 还专门去翻了一下词典, 果然是ng, 而且有三种声调, 分别是二声, 三声和四声. en的读音里只有这个"恩", 看来还是SCIM的智能拼音强大, 以前都错怪它了, 现在看来只有它最规范, 什么XX拼音的就不说了.

Vim 常用命令 (持续更新)

"+x
剪切

"+y
复制

"+gP
粘贴

:ls
列出缓冲区列表

:buffer #
打开相应缓冲区号中的文件

:bnext
:bprevious
:bfirst
:blast


:pwd
显示当前目录

:cd 目录名
改变当前目录

:e 文件名
在当前目录创建文件

:wa
保存所有已经命名的缓冲区

:e .
打开目录列表, 这个插件很神奇, 很强大, 这里有几个常用的命令:
- 访问目录的父目录
c 将你浏览的目录设为当前目录
R 为文件重命名
D 删除文件
d 建立新目录
<c-l> 刷新列表

在头文件上输入gf命令, Vim会寻找并打开文件, 如果该头文件不在此目录中, 则可以通过
:set path+=目录名
的方式添加需要查找的路径.

m{a-zA-Z}
在当前光标位置设置标记, 若是大写字母则是跨文件标记.

'{a-zA-Z}
跳转到相应标记的位置


'' 注意: 这是两个单引号
可以在两个最近的跳转位置中来回跳转

"xy
抽取选定文本到寄存器x

"xp
将寄存器x中的内容放到当前光标之后

:reg
显示所有编号和命名寄存器的内容

=
多行缩进

替换块
CTRL-V选定块后, 按c输入替换文本, 然后<Esc>

[[ & ]]
这会跳到上一个或是下一个在第一列的{, 如果你的代码风格是函数块开头的{都是单独占据一行的话, 那么这个命令就可以在所有函数块间跳转了.

gd
将光标放在某变量上, 可以使用这个命令跳转到定义该变量的位置.

Sunday, June 8, 2008

使用WAMP搭建本地服务器

最近在编动态网页, 需要首先搭建一个本地服务器作为测试场所, 以下是一些基本的设置.

1. Apache
安装很简单, 一路next, 到需要填网址那一步时, 全部写成localhost. 安装完以后需要修改配置文件.
$ cat httpd.conf
DocumentRoot 修改为网站的主目录

同时添加
<Directory "网站主目录">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

2. PHP
安装时记得把MySQL的模块支持选上. 如果你不是将Apache安装在默认的安装路径, 那么在安装结束时会有一个错误提示, 提示你需要手动去修改httpd.conf文件, 但经过我的测试, 不需要修改.

3. MySQL
安装同样很简单, 完毕后运行设置向导, 几乎可以按默认的设置配置.

P.S. 我在使用时曾经遇到过一个错误, 显示为
Can't connect to MySQL server on 'localhost' (10061)
在网上搜寻很久都没有找到解决办法, 最后干脆把MySQL重装了一遍, 结果这个错误神奇地消失了, 于是我觉得最好先安PHP, 再安MySQL.

Friday, June 6, 2008

神奇的 static

术语"static"有一段不寻常的历史. 起初, C引入关键字static是为了表示退出一个块后依然存在的局部变量. 在这种情况下, 术语"static"是有意义的: 变量一直存在, 当再次进入该块时, 仍然存在. 随后, static在C中有了第二种含义, 表示不能被其他文件访问的全局变量和函数. 为了避免引入一个新的关键字, 关键字static被重用了. 最后, C++第三次重用了这个关键字, 与前面赋予的含义完全不一样, 这里将其解释为: 属于类且不属于类对象的变量和函数. 这个含义与Java相同.

from: 《Java2核心技术 卷I: 基础知识》(第7版) P111

Monday, June 2, 2008

The Matrix

The Matrix
很显然, 这不是一部伟大的电影, 导演把大部分的时间都放在展现无与伦比的特效上了, 而那个本身就不是很明确的主题则显得可有可无.

在这部电影中我个人比较喜欢的是背景环境的设定, 除了这个带有强烈科幻色彩的故事背景外, 其余的都是好莱坞惯有的情节了, 随便找一部来都会跟这部3部曲差不多, 恐怕唯一的区别是这部电影很长. 如果你确实想看特效, 那我推荐你去看星战.

故事的时间发生在未来, 二零几几年我忘了, 人类成功发明人工智能(AI), 使得机器人有了很高的智慧. 然后由于某个未知的原因, 机器人开始统治人类, 人类开始生活在由Matrix创造的虚拟世界中生活, 而全然不知. 他们的原始身体插满了信号传输线, 整天泡在营养池里, 思想却以为自己正在地球的某个角落或快乐, 或痛苦地生活着, 全人类都被放在了像上面那张图中一样的高楼里, 过着被Matrix麻醉的寄生生活.

然后的然后, 就是一群醒来的人类开始反抗, 追寻自由.

Sunday, June 1, 2008

C++学习笔记(五) -- inline函数

编译器隐式地将在类内定义的成员函数当作内联函数.

Web 是神通广大的

今天很郁闷, 到网上到处收刮Window$下的网页制作软件, 找到一个Amaya, W3C出品, 我得承认这个软件对于现在的我来说确实是太难用了, 虽然它有所见即所得功能, 不知道W3C的大牛们都是怎么使用的. 还有一个KompoZer, 这个软件的使用也不是很方便, 主要是不习惯, 我比较喜欢像Bluefish那样可以在代码层上帮助你的软件, 毕竟我也只是个新手.

说实话, 就我现在的水平, 想要制作一个漂亮的网站也只能是Ctrl+C, 再Ctrl+V, 关于语言的知识实在是匮乏, 我对那啥实训已经没什么兴趣了, 无非又是一次重复的过程, 没有学到真正的知识, 以后面临的就是巨大的困难, 那种模仿秀, 或者说抄袭式的制作真的意义不大. 程序需要融入自己的灵魂, 其它事情也是, 否则剩下的就只有空洞与空虚, 由一行行毫无感情的字母堆砌着.

好好学电脑! 好好学Web!