Saturday, December 27, 2008
好玩的终端Google
前几天发现了一个好玩的网站, 它提供Google的搜索服务, 也许你会说这没什么, 随便哪里都有. 但这个网站可不一样, 它是纯命令行的搜索. 网页模拟成了终端, 而你需要输入相应的命令. 偶尔用用还是很有趣的.
好用的画流程图的软件--Dia
为了课程设计去搜寻了一下能在Linux下用的画流程图的工具, 试用了几个网上介绍的, 觉得Dia是一个比较简单方便的软件. Dia有Linux, Window$和Mac版本, 界面风格类似GIMP, 并且画好的流程图可以导出为多种格式.
$ sudo apt-get install dia
Monday, December 22, 2008
Sunday, December 21, 2008
关于在Emacs中注释代码
"// "
, 然后我就可以很方便地添加注释了. 可今天很神奇, 突然就从"// "
变成"/* */"
了, 这样很是不爽. 看了下Emacs的帮助文档, 发现无论是"// "
, 还是"/* */"
, 都是由两个变量来控制的. 一个叫做comment-start
, 另一个是comment-end
, 分别控制开头和结尾. 比如说"/* */"
这个, 它的comment-start
就是"/* "
, 而comment-end
则是" */"
. 所以只需要在我的配置文件的C Mode里面添加下面两行就行了:(setq comment-start "// ")
(setq comment-end "")
另外在看帮助的时候, 又学到了一招. 比如说下面的情况:
/*光标在中间那行, 当我输入完注释以后回车想输入下一行, 却发现Emacs不会自动跳到相应的位置并且添加那个星号, 在Vim里就可以. 难道Emacs不支持? 其实不是, 你不需要使用回车来换行, 当你想要输入下一行注释时, 按M-j就行了, 效果和Vim中是一样的, 呵呵~
* ...
*/
P.S. 之所以用Emacs来写注释, 一是因为M-;这样按着很爽很方便, 还有一个就是那些注释会对得很整齐, 以前不知道这是为什么, 今天发现原来也是因为一个变量的缘故:
comment-column
. 这个变量的默认值是32, 每行注释都会从32列开始, 所以会很整齐了.
Wednesday, December 17, 2008
学习了SVN
先学习了SVN, 现在的主流版本控制系统之一.
$ sudo apt-get install subversion然后强烈推荐一本SVN的教程: Version Control with Subversion, 这本书虽然有中译本, 但版本太老了, 还是讲1.4的 (现在SVN的版本是1.5.1), 所以还是看原版吧. 绝对是本好书, 光看已经由O'Reilly出版了就知道了. 还是要感谢下作者, 将这本书免费地放到网上 (其实这本书就是由SVN来管理的).
最后写几个著名的代码托管网站, 可能大家都比较了解了, 或者就正在使用着:
- Google Code
- Launchpad (教育网有点慢)
Monday, December 15, 2008
无神
Sunday, December 14, 2008
在bash中使用遍历补全功能
需要先修改一个文件:
$ sudo vim /etc/inputrc在那个if判断后面添加就行了, 因为我用的是Emacs的键绑定, 最后重启就生效了, 使用C-o来遍历补全.
...
# some defaults / modifications for the emacs mode
$if mode=emacs
# traversing complementation
"\C-o": menu-complete
...
Saturday, December 13, 2008
Wednesday, December 10, 2008
懒人的工具: GNOME Do
$ sudo apt-get install gnome-do使用Super+空格来呼唤出GNOME Do, Esc退出. 一定要记得去勾选适合自己的插件哦, 这样GNOME Do的威力才能更好地发挥出来呢. 下面是一些截图:
输入gvim就帮我自动定位到了:
我输入gnome-do, 然后按Tab转到下一级选项就可以用上下方向键来选择了, 看到第二个了吗? 那个就是使用apt来安装你输入的字符串, 还是很方便的~
Saturday, December 6, 2008
直接在Nautilus中打开终端
昨天看joy演示时觉得这功能不错, 以前只知道ROX-Filer有这功能, 原来Nautilus也有.
$ sudo apt-get install nautilus-open-terminal重启即可.
关于使用ctags浏览代码的一些笔记
2010.11.22 10:20更新: 今天才发现我当初是没有弄清楚Vim寻找tags文件的方式, 现在看来, 只需要在源码根目录执行"ctags -R
", 然后每次都使用这一个tags文件即可. 因此下面的做法相当于画蛇添足, 现仅留作存档.
2010.11.22凌晨更新: 下面的脚本中由于find
用到了扩展的POSIX正则表达式, 因此请注意检查你系统中的find
是否支持, 比如BSD系统自带的find
就只支持标准的正则表达式.
昨天本来想看下xlockmore的源码的, 开始以为Vim + Tag List就差不多了, 后来发现不行的, 源码里面包含了一些include
文件中的类型定义啊, 函数定义啊这些的, 想去看下原型都不行.
ctags
, 在我正在查看的源文件的目录下生成了一个tags文件. 这下好了, 可以跳转查看了, 不过马上新的麻烦又来了. 我还想在这个新跳转的文件中继续跳转, 但由于它同刚才的不在同一个目录, 所以Vim找不到相应的tags文件. 真是麻烦, 看来必须在每一个目录下都生成一个tags文件才行, 不过我很懒, 不想手动进入每一个目录, 然后重复执行那行命令. 查了一会儿ctags
的man page, 没找到想要的功能, 又Google了一下, 还是没找到, 倒是找到了和我遇到相同麻烦的人, 呵呵~ 问了下joy, 貌似他也不是很清楚, 于是我就干脆写个脚本算了. 把这个脚本放在包含所有源码的根目录执行就行了.
#!/bin/bash if which ctags > /dev/null; then echo "Hey, I get it!" > /dev/null else echo "ctags is needed" exit 1 fi base_dir=`pwd` extension="\([cC]\|[cC][pP][pP]\|[hH]\)" cd "$base_dir" for dir in `find . -type d`; do cd "$dir" file=`find . -maxdepth 1 -regex ".*\.${extension}" -execdir echo 'found' \; -quit` if [ -n "$file" ]; then echo "$dir" ctags -R "$base_dir" fi cd "$base_dir" done exit 0顺便记下在Vim中通过tags文件跳转的命令:
g^] 跳转
^T 跳回
然后还有个cscope
, 可以用来搜索源码, 还没怎么用过.
P.S. xlockmore的源码看着真是费劲, n多的宏定义和typedef
, 害得我头都看晕了...
Thursday, December 4, 2008
让GTK+程序使用Emacs的键绑定
$ cat ~/.gtkrc-2.0
# Emacs-like Keybindings
include "/usr/share/themes/Emacs/gtk-2.0-key/gtkrc"
gtk-key-theme-name="Emacs"
Tuesday, December 2, 2008
Saturday, November 22, 2008
在Emacs中使用矢量字体
配置.Xresources
$ cat ~/.Xresources然后
Xft.antialias:1
Xft.hinting:1
Xft.hintstyle:hintfull
Emacs.FontBackend:xft
$ xrdb ~/.Xresources
Monday, November 10, 2008
参加三叶草Linux方向考核的一些总结
首先了解了indent这个软件. 以前在桃源上看过joy写的介绍, 没用过, 这次题上有, 就去下来用了用. 只需要简单地配置一下就可以使用了, 不过只能用来缩进C语言, 这个范围有点窄了. 但某些地方还是要比我自己配置的在Vim和Emacs里的缩进要先进一点, 以后可以这两种方法结合着用. 配置参考了joy写的, 自己查了点也添了进去:
$ cat ~/.indent.pro
-bl // Put braces on line after if, etc.
-bli0 // Indent braces n spacs.
-bls // Put braces on the line after struct declaration lines.
-c32 // Put comments to the right of code in column n.
-cd32 // Put comments to the right of declarations in column n.
-cp32 // Put comments to the right of #else and #endif statements in column n.
-i4 // Set indentation level to n spaces.
-kr // Use Kernighan & Ritchie coding style.
-nce // Do not cuddle } and else.
然后根据joy的题的要求写了一个将Window$下的文本文件转换为Linux下的格式的脚本. 功能很简单, 不过有时候也挺实用的, 现在还只能处理单个文件, 准备以后加入批处理功能.
最后这个和这次的题没有多大关系, 只是因为上次看joy演示的时候很好奇那个在Emacs中自动添加文件头的东西. 于是先去网上找了下, 找到一个叫做template的插件. 虽然不是joy那个, 不过发现这个插件的好处就是可以自动帮我在tex文件的开头插入导言区, 这下可省事多了, 呵呵~ 然后问了joy, 知道了那个插件叫做auto-header.el. 最开始还下了一个错误的版本, 导致Emacs启动错误, 推荐大家在这里下载. 这个的配置参考猫猫的配置.
$ cat ~/.emacs
;; template
(require 'template)
(template-initialize)
;; auto-header.el
(require 'auto-header)
(setq header-full-name "Dreamseeker"
header-email-address "gaochangjian<at>gmail<dot>com"
header-copyright-notice "Copyleft (c) INF, Dreamseeker"
header-update-on-save '(filename modified counter copyright)
header-field-list '(filename
blank
description
blank
author
created
blank
modified_by
modified
blank
status
update
blank
copyright))
;; auto update the number of count
(global-set-key (kbd "s-h") (lambda ()
(interactive)
(if (header-exists-p)
(header-update-count)
(header-make t))))
Sunday, November 9, 2008
终于MPlayer可以全屏了
$ cat ~/.mplayer/config
zoom=yes
Friday, November 7, 2008
BRAND SHINING DAY
Sunday, November 2, 2008
用Emacs听歌
好了, 该介绍今天的主角了: EMMS. 解压放到你的Emacs的load-path就行了, 下面是我的.emacs中的配置:
;; EMMS参考了这篇文章.
(add-to-list 'load-path "/usr/share/emacs/site-lisp/emms/")
(require 'emms-setup)
(emms-standard)
(emms-default-players)
(setq emms-repeat-playlist t
emms-source-file-default-directory "/home/xiaolan/music/"
emms-lyrics-coding-system nil ;; let emacs to identify the encode of lyrics
emms-lyrics-dir "/home/xiaolan/music/lyrics")
;; show info at mode-line
(require 'emms-mode-line)
(emms-mode-line 1)
;; show time of music
(require 'emms-playing-time)
(emms-playing-time 1)
;; show lyrics
(require 'emms-lyrics)
(emms-lyrics 1)
;; auto identify encode
(require 'emms-i18n)
;; auto save and import playlist
(require 'emms-history)
(emms-history-load)
键绑定是必须设置的, 不然每次都手动敲, 会累死你的.
(global-set-key (kbd "<f6>") 'emms-play-directory)
(global-set-key (kbd "<f5>") 'emms-playlist-mode-go)
这是截图, 有显时间和歌词功能:
Thursday, October 30, 2008
Window$与Linux的启动速度不完全比较分析报告
先说下系统环境: Linux是Arch, 2.6.27的内核, Window$是XP Professional SP3. 计算的标准是从计算机加电自检开始计时, 到完全进入图形界面, 并且可以正常开始工作. 下面就是我的计时结果:
Linux 42s
Window$ 1m8s
差别其实也不是很大, 本来以为Window$再怎么也得要个一两分钟, 差不多Window$到登录界面的时候就用了40s左右, 剩下的就是Window$独特的漫长的自启动程序的加载过程, 这个Linux下也有, 不过至少少了个杀毒软件的启动时间. 还好这机器被腐蚀得还不是很严重, 只有两三个启动程序.
Intel的那个6s启动的Netbook想想还是比较吓人的.
Wednesday, October 22, 2008
Monday, October 20, 2008
停刊了
神经漫游者
赶到Ray的讲座时已经讲完了, 我还答应Ray说应该会来的呢, 只看到一群人围着似乎是Ray的笔记本在那演示着什么. 不过那特效也挺华丽的就是了, 好多以前都没见过. 然后看到一个貌似Ray的人, 不知猜对了没. 对于Ray, 我有点抱歉, 本来上个月就兴致勃勃地说好去捧场的呢, 结果谁又能预料今天发生的一切呢.
今天真是不寻常的一天.
Oct 19 2008
Sunday, October 19, 2008
终于用上xeCJK!
$ xetex --version感觉就是一个字: 爽! 哈哈~
XeTeX 3.1415926-2.2-0.999.6 (Web2C 7.5.7)
kpathsea version 3.5.7
Copyright 2008 SIL International.
Kpathsea is copyright 2008 Karl Berry and Olaf Weber.
There is NO warranty. Redistribution of this software is
covered by the terms of both the XeTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the XeTeX source.
Primary author of XeTeX: Jonathan Kew.
Kpathsea written by Karl Berry, Olaf Weber, and others.
Compiled with ICU version 3.8.1 [with modifications for XeTeX]
Compiled with zlib version 1.2.3; using 1.2.3.3
Compiled with FreeType2 version 2.3.7; using 2.3.7
Compiled with fontconfig version 2.6.0; using 2.6.0
Compiled with libpng version 1.2.29; using 1.2.32
Compiled with xpdf version 3.02pl2
顺便记下Arch下安装LaTeX+XeTeX+常用宏包的过程:
$ sudo pacman -S texlive-core texlive-latexextra
然后到CTeX论坛上下载xeCJK, 将相应文件放到texlive的安装目录里, 刷新文件名数据库:
$ sudo mktexlsr
最后就是修改导言区了:
\usepackage{xeCJK}
\setmainfont[BoldFont=Adobe Heiti Std]{Adobe Song Std} % 设置默认的英文字体
\setCJKmainfont[BoldFont=Adobe Heiti Std]{Adobe Song Std} % 设置默认的中文字体
很简单是吧? Just enjoy.
关于Arch的二三事 (续)
安装完以后配置X还是比较方便的, 毕竟有工具可以自动生成配置文件, 我是用的hwd来配置xorg.conf的. 比较麻烦的地方可能就是显卡了, 毕竟我的是ATI的显卡, 不像NVIDIA的用官方工具来自动配置就好了. 我选择安装的是开源的驱动, 然后参考这篇Wiki稍微修改了一下xorg.conf, 不然进X就是黑屏. 不过我感觉我现在的配置还没有完全发挥显卡的效果, 看以后再仔细研究下.
然后是SCIM的配置, 安装很简单啦, 主要是配置, 详情请参考这篇Wiki.
对于经常使用bash的人来说, 自动补全肯定会是一个有用的功能. 强烈建议安装bash-completion这个包, 可以增强bash的自动补全, 比如说可以实现在sudo之后的命令自动补全. 安装好以后, 再修改.bashrc使得一直都生效:
. /etc/bash_completion
在我刚安装好GVIM之后, 打开却发现和以前的很不一样. 首先没有菜单, 然后它也没有按照我选的颜色方案正确显示, 而是什么灰色背景的颜色配置, 显得很难看. 菜单问题在网上找到了解答, 是通过修改.gvimrc解决:
$ cat ~/.gvimrc而颜色问题则困扰了我一段时间, 后来无意中发现Vim的一个全局配置文件/etc/gvimrc, 才找到了问题的根源. 原来是这个文件修改了颜色的配置, 遂注释掉相应部分, 于是我熟悉的界面又全部回来了.
set encoding=utf8
set langmenu=zh_CN.UTF-8
set imcmdline
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
还有一些杂感. 为了看chm文件安装了CHM Reader, 不过却什么都显示不了, 不知道是不是又是因为64位的缘故, 现在在用kchmviewer, 说实话, qt的界面不是很喜欢就是了. 为了能够听到我心爱的CD们, 开始我还去手动挂载光驱呢, 结果失败, 普通CD就可以顺利挂载, 音频CD却不行, 最后还是依靠强大的Rhythmbox搞定了, 这软件听CD必备啊.
由于课程的缘故, 现在的配置还不能完全调整到和以前一样, 我也在一点一点地完善中, 不过还是能够从中学到很多的, 让这个系统慢慢地符合我的习惯就行了.
Wednesday, October 8, 2008
关于Arch的二三事
困扰我最久的是挂载U盘、移动硬盘的问题, 首先你可以根据这篇Wiki配置hal. 不过手动mount很烦的, 刚好在LinuxSir上找到了一个可以实现自动挂载并且支持热插拔的方法:
$ cat /etc/udev/rules.d/10-automount.rules我觉得这个还不错, 很方便, 那个文件是我自己建的, 本来是没有的. 如果你要手动挂载的话, 那么推荐你用pmount, 这个可以允许非root用户挂载可移动设备, 而且没有乱码, 也没有权限问题.
KERNEL=="sd[b-z]", NAME="%k", SYMLINK+="usbhd-%k", GROUP="users", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[b-z][0-9]", SYMLINK+="usbhd-%k", GROUP="users", NAME="%k"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mkdir -p /media/usbhd-%k"
ACTION=="add", KERNEL=="sd[b-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat",
RUN+="/bin/mount -t vfat -o rw,utf8=true,codepage=936,noauto,flush,quiet,nodev,
nosuid,noexec,noatime,dmask=000,fmask=111 /dev/%k /media/usbhd-%k", OPTIONS="last_rule"
ACTION=="add", KERNEL=="sd[b-z][0-9]", RUN+="/bin/mount -t auto -o rw,locale=zh_CN.UTF-8,noauto,
sync,dirsync,noexec,nodev,noatime /dev/%k /media/usbhd-%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/umount -l /media/usbhd-%k"
ACTION=="remove", KERNEL=="sd[b-z][0-9]", RUN+="/bin/rm -rf /media/usbhd-%k", OPTIONS="last_rule"
然后是URxvt, 以前在Ubuntu下是用.Xreources作为配置文件名的, 但到了Arch发现用这个文件名不起作用, 于是找到方法修改为.Xdefaults即可.
在启动的时候还遇到了一个诡异的问题, 错误提示如下:
clocksource tsc unstable开始还以为是升级出现的问题, 因为我每次都是升完级重启以后就出现这个错误, 然后系统就进不了了. 为此我重装了至少两三次(真有毅力 - -), 最后无奈Google了一下, 发现居然是AMD+ATI的问题, 而且解决方法也是如此简单, 当时就想晕了... 在grub的启动菜单的kernel中加一个参数clocksource=acpi_pm就行了.
话说用64位系统就是跟自己过不去... 我算是体会到了. 最难的一个问题就是QQ, 现在流行有三种方法: Eva, 官方QQ, Pidgin. 因为Eva用习惯了, 我理所当然地去仓库中找, 好吧, 官方的没有, 那我去AUR找, OK, 找到了, 有两个, 选了最近的那个, 另外一个貌似已经过期了. 然后就提示什么什么依赖不能满足, 于是我一个一个地去安, 每个都还挺大, 真是花时间... 再安, 这次安上了, 运行起来似乎也很正常, 又看到了熟悉的登录界面, 然后我点登录, 只见什么东西一闪就关了, 然后在终端里看到一堆的错误, 我晕, 这要折腾到什么时候啊~ 于是我毅然决然地决定放弃AUR的包了, 那咱就将就用下官方的吧, 以前在Ubuntu下也是64的, 也能用上, 于是我满怀希望去下好, 解压运行, 我看到的又是一堆错误, 这次连登录界面都没看到... 很好很强大, 于是我还剩下一个Pidgin了, 这次很顺利, 安装登录都是, 然后我以为我终于可以安心的时候, 我发现Pidgin自动退出了, 我又开, 过了一会儿, 它又自动退出, 我再开, 它还是退出, 它是故意的... 为了一个QQ, 真是太难了. 就在我决定放弃, 以后安个虚拟机来运行QQ的时候, 我在LinuxSir上看到这样一个帖子, 用16楼给的链接下了一个Eva的包含PKGBUILD和gcc补丁的档案, makepkg遇到了一个小错误, 可以按照那个帖子中的办法解决, 然后应该就很顺利了, 最后我终于用上了Eva, 哈哈~
暂时想到这些, 睡了先, 明天再写.
Monday, September 22, 2008
may the source be with you
给程序员的七个建议
(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大家不妨试试高德纳所著The Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面有一定的功力了。
(2)多实战。通过编程的实战积累经验、巩固知识。很多中国大学毕业生缺乏编程和调试经验;学习C语言,考试过关就算学会了;课题项目中,只要程序能够编译,运行,并且输入输出满足要求就算了事。这些做法是不行的。写程序的时候,大家必须多想想如何把程序写得更加精炼、高效、高质量。建议大家争取在大学四年中积累编写十万行代码的经验。我们必须明白的是:好程序员是写出来的,不是学出来的。
(3)求实干。不要轻视任何实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实干作风与敬业精神。我发现不少程序员对于知识的掌握很肤浅,不求甚解,没有好奇心,不会刨根问底。比如,学会了C++,是否了解一个对象在编译后,在汇编代码中是如何被初始化的?这个对象的各个成员在内存中是如何存放的?当一个成员函数被调用时,编译器在汇编代码中加入了哪些额外的动作?虚函数的调用是如何实现的? 这些东西恐怕在编程语言或编译原理中都没有详细提到,只有通过踏实的实干才能真正掌握。
(4)重视数学学习。数学是思维的体操,数学无处不在。学计算机至少要学习离散数学、概率论、布尔代数、集合论和数理逻辑。这些知识并不难,但是对你未来的工作帮助会很大。 尤其当你对一些“数学密集型”的领域如视频、图像处理等有兴趣时,这些知识将成为你手中的利器。
(5)培养团队精神,学会与人合作。今天的软件工程早已经不是一个人可以单独操作的,而必须靠团队合作才能成功。不懂得合作的人是不能成大器的。大家要多去寻找可以与人一起做项目的机会。
(6)激励创新意识,培养好奇心,不要死记硬背。没有掌握某种算法技术的根本原理,就不会有应变和创新的能力。想成为一位好程序员(其实从事任何一个行业都是如此),重要的是要养成钻研,好奇,创新,动手,合作的优秀习惯,不满足于填鸭,不满足于考试交差,不满足于表象。这不是学几门课能够一蹴而就的。
(7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的公司,在一个好的“老板”指导下完成真正会被用户使用的程序。
Sunday, September 21, 2008
这几天使用LaTeX的一些新感受
期间也发现有一些遗忘的地方, 于是我这几天干的最多的一件事情就是在CTeX论坛上搜和在Google上搜, 对于以前的一些东西又有了新的理解.
先来说说代码显示吧, 以前用了一个很笨的方法来做出那种灰色背景的效果, 结果在排大猫的那段很长很长的代码时出现了问题. 那代码要跨页, 所以以前的表格方法不能把代码全部显示出来, 导致大量代码被丢弃了, 很显然这种方法已经行不通了. 于是上网去找解决方案, 找到一个listings的宏包, 看介绍不错, 还支持语法高亮呢. 然后就兴致勃勃地用上了, 实现灰色背景还是很简单的, 可一编译又发现了一个很严重的问题, 如果某行代码太长超过一行了, 虽然listings可以自动换行, 但那行就没有灰色背景了! 这样的效果可想而知, 于是我还很认真地花了一些时间去把listings的说明文档好好看了一遍, 想找找有没有什么解决的办法, 结果还是失败了, 不过看CTeX论坛上也是有些人遇到这种情况, 而有些人正常, 难道是人品问题 (- -)? 没办法, 为了好的代码显示效果, 只能另辟蹊径了. 恐怕我当初也不会想到, 最后的方法竟然如此简单, 仅仅是把代码放在一个shaded环境里就行了, 如下:
\usepackage{color}放在导言区就行了, 然后像这样处理代码:
\usepackage{framed}
\definecolor{shadecolor}{gray}{0.85}
\begin{shaded}什么跨页, 什么换行, 一切都搞定, 哈哈~
\begin{verbatim}
...
\end{verbatim}
\end{shaded}
然后还是讲讲代码, 当初我在排第一段代码的时候就遇到了困难, 因为这里面有中文注释... 以前从来没考虑过这种事情, 查了下, 是verbatim环境使用的字体Typewriter不支持显示中文的缘故, 这也是LaTeX默认用来显示代码的字体. 不过看别人用CJK的显示都是正常的, 看来CJK确实要高级些, 没办法, 谁叫咱用的是XeTeX, 毕竟现在还不是很成熟. 我想用xeCJK啊, 残念, 编译不出来就这样, 唉~ 然后在这里找到了解决办法:
\setsansfont{DejaVu Sans YuanTi Mono}只好忍痛替换了tt字体, 用上了猪猪的强大字体, 等宽加中文都支持.
\makeatletter
\def\verbatim@font{\sffamily\small}
\makeatother
因为杂志的栏目分类不能出现编号, 所以默认的那种是不行的, 下面是解决:
\phantomsection % 让目录中的链接正确
\section*{\textcolor{darkgreen}{\textbf{本刊致谢}}} % 不显示编号, 并且不出现在目录中
\addcontentsline{toc}{section}{卷首语} % 添加到目录中
\sectionmark{卷首语} % 页眉
关于浮动环境, 这个以前真的是很头疼的, 往往它不会按照所设想的位置放置, 搞得某些图片直接占据了一整页. 然后某天在CTeX上看到一个很强大的回复, 可以把浮动环境放在任何你需要的地方, 一个字, 爽! 如下:
\usepackage{float}
\begin{figure}[H] % 就是这个神奇的H
...
\end{figure}
还有一个计数器的问题, 因为杂志有一个封面, 所以会占据掉一整页. 这样正文就是从第2页开始计数了, 虽然是个小问题, 不过还是希望能够符合习惯点. 解决也很简单的, 这还得归功于图书馆的那本强大的LaTeX书, 如下:
\setcounter{page}{0}这句就将页码的计数器设置为0了, 所以放在第2页的代码前面就行了.
P.S. 因为杂志的缘故, 认识了joy, 牛逼的Emacs, Python, shell脚本使用者, 好好学习, 天天向上.
Wednesday, September 17, 2008
使用OO遇到的Java运行环境错误
javaldx: Could not find a Java Runtime Environment!开始以为是Java的环境变量配置错误, 又按照Ubuntu Wiki上的设置重新检查了一次, 结果还是出现那个提示, 后来在Ubuntu官方论坛上找到了解决办法:
sudo apt-get install openoffice.org-java-common
Sunday, September 14, 2008
Wednesday, September 10, 2008
URxvt & PyPanel & Openbox的一些配置
$ cat ~/.XresourcesPyPanel的部分配置, 只是把我修改过的贴了出来, 其它的都是默认的:
! font
URxvt.font:xft:Bitstream Vera Sans Mono:pixelsize=13:antialias=true,
xft:WenQuanYi Zen Hei:pixelsize=13:antialias=true
! color
URxvt.foreground:#ffffff
URxvt.background:#2e3436
URxvt.color0:#2e3436
URxvt.color1:#cc0000
URxvt.color2:#4e9a06
URxvt.color3:#c4a000
URxvt.color4:#3465a4
URxvt.color5:#75507b
URxvt.color6:#06989a
URxvt.color7:#d3d7cf
URxvt.color8:#555753
URxvt.color9:#ef2929
URxvt.color10:#8ae234
URxvt.color11:#fce94f
URxvt.color12:#729fcf
URxvt.color13:#ad7fa8
URxvt.color14:#34e2e2
URxvt.color15:#eeeeec
! follow URL
URxvt.urlLauncher:firefox
URxvt.matcher.button:1
URxvt.perl-ext-common:matcher
! scrollbar
URxvt.scrollBar:True
URxvt.scrollBar_right:True
URxvt.scrollBar_floating:False
URxvt.scrollstyle:plain
URxvt.saveLines:500
$ cat ~/.pypanelrcOpenbox:
#------------------------------------------------------------------------------
# Colors: Format is hex triplet - 0xrrggbb
#------------------------------------------------------------------------------
BG_COLOR = "0x000000" # Panel background and tinting color
TASK_COLOR = "0xffffff" # Normal task name color
FOCUSED_COLOR = "0x33ccff" # Focused task name color
SHADED_COLOR = "0x808080" # Shaded task name color
MINIMIZED_COLOR = "0x808080" # Minimized task name color
DESKTOP_COLOR = "0xffffff" # Desktop name color
CLOCK_COLOR = "0xffffff" # Clock text color
LINE_COLOR = "0x606060" # Vertical line color
#------------------------------------------------------------------------------
# Panel Spacing and Location Options: Measured in pixels
#------------------------------------------------------------------------------
P_LOCATION = 1 # Panel placement: 0 = top, 1 = bottom
P_WIDTH = 1400 # Panel width: 0 = Use full screen width
P_START = 20 # Starting X coordinate of the panel
P_SPACER = 0 # Spacing between panel objects
P_HEIGHT = 24 # Panel height
#------------------------------------------------------------------------------
# Panel Text Font: This option takes either a traditional or Xft font string
# Ex: "-schumacher-clean-medium-r-normal-*-12-*-*-*-*-*-*-*"
# "aquafont-8"
#------------------------------------------------------------------------------
FONT = "DejaVu Sans YuanTi-11"
#------------------------------------------------------------------------------
# Background Alpha/Shade Level: 0 (Fully Translucent) -> 255 (Fully Opaque)
# BG_COLOR is used for tinting
#------------------------------------------------------------------------------
SHADE = 255
#------------------------------------------------------------------------------
# Misc. Options: 1 = Enabled/Yes, 0 = Disabled/No
#------------------------------------------------------------------------------
ABOVE = 1 # Panel is always above other apps
APPICONS = 1 # Show application icons
AUTOHIDE = 0 # Autohide uses the CLOCK_DELAY timer above
SHADOWS = 0 # Show text shadows
SHOWLINES = 1 # Show object seperation lines
SHOWBORDER = 0 # Show a border around the panel
#------------------------------------------------------------------------------
# Panel Layout: -----------------------------------
# [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ]
# -----------------------------------
#
# The panel layout is split into 5 sections numbered 1, 2, 3, 4 or 5 as shown
# in the diagram above. Each of the following objects can be enabled by
# assigning it a section number or disabled by assigning it 0:
#------------------------------------------------------------------------------
DESKTOP = 0 # Desktop name section
LAUNCHER = 0 # Application launcher section
TASKS = 3 # Task names section
TRAY = 4 # System tray section
CLOCK = 5 # Clock section
$ cat ~/.config/openbox/autostart.sh
#!/bin/bash
# PyPanel
if which pypanel > /dev/null; then
pypanel &
fi
# use feh to set the background
if [ -f $HOME/.fehbg ]; then
eval `cat $HOME/.fehbg` &
fi
# D-bus
if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
eval `dbus-launch --sh-syntax --exit-with-session`
fi
# Make GTK apps look and behave how they were set up in the gnome config tools
if which gnome-settings-daemon >/dev/null; then
gnome-settings-daemon &
fi
# Preload stuff for KDE apps
if which start_kdeinit >/dev/null; then
LD_BIND_NOW=true start_kdeinit --new-startup +kcminit_startup &
fi
Arch Linux & Openbox
花了两天下午折腾了下Arch和Openbox (以下简称Ob), Arch还是比较简单的, 具体安装到一些配置可以参考这篇Wiki, 那个启动速度的确很爽, 准备有时间了就把现在的电脑格了, 装上Arch.
Ob倒是花了些时间, 主要是以前对于DE和WM的区别不是很了解. 这个一定要装上ObConf, 我主要用来更换主题和更改字体. 那些菜单什么的配置, gtk主题的配置可以参考Toy的文章. panel用的是PyPanel, 稍微花了点时间配置, 主要是颜色, 对RGB不敏感啊... 用的ROX-Filer做的file manager, 这个看ee的介绍貌似很强大, 快捷键那是一套一套的, 不过还是鼠标点习惯点. 还有URxvt, 这个刚开始觉得也太难看了吧, 然后就Google了半天, 找到一些好的配置, 自己修改了一下, 主要把颜色改成GNOME中的Tango配色方案. 差不多就这些了, 我平时用的软件少, 暂时还没有遇到什么大的问题, 毕竟那是以后的事情了. 下篇会贴一些上面提到的一些软件的配置.
Tuesday, September 9, 2008
彩色man的less替代方案
# colorful man page
export PAGER="/usr/bin/less -s"
export BROWSER="$PAGER"
export LESS_TERMCAP_mb=$'\E[01;34m'
export LESS_TERMCAP_md=$'\E[01;34m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;33m'
Saturday, September 6, 2008
珍惜
Saturday, August 30, 2008
C++学习笔记(十) -- 通过多态访问私有成员
// -1156203886以上代码的输出结果为"in Derived", 最开始我一直想不通为什么可以在类的外部访问一个私有成员函数, 经过一番搜索以后, 知道了原因.
#include <iostream>
using namespace std;
class Base
{
public:
virtual ~Base() {}
virtual void debugPrint() const
{
cout << "in Base" << endl;
}
};
class Derived : public Base
{
private:
void debugPrint() const
{
cout << "in Derived" << endl;
}
};
int main()
{
Base* aPo = new Derived();
aPo->debugPrint();
return 0;
}
这段代码的问题在于, 编译时是不会有错误的, 因为那个指针的静态类型是指向基类的对象的, 而基类中的虚函数是public的, 可以直接在外部访问, 这在编译器看来是没有一点错误的. 然而动态绑定却是在实际运行时, 这时候指针就转到子类里了, 它不会判断这个成员到底是私有还是公有的, 所以就输出了上面的结果. 有人把这看成是C++的一个bug, 也有人认为这符合OO的思想, 向类的用户隐藏了细节, 唯一不对的是这样的编程风格.
Friday, August 29, 2008
Sunday, August 24, 2008
几款修改音频tag的小软件
1. mid3v2
这是一个在终端下运行的小软件, 安装方法是:
sudo apt-get install python-mutagen使用方法:
$ mid3v2 -a 陈绮贞 -A 失败者的飞翔 -t 失败者的飞翔 失败者的飞翔.mp3
2. Ex Falso
这是以GTK+作为前端的软件, 因为图形化的界面, 所以操作会相对mid3v2简便一些, 同时这个软件也支持多个文件修改为相同的tag.
sudo apt-get install exfalso这是界面截图:
综上, 这些全都是专门用来修改tag信息的, 当然, 一些播放器也有这个功能, 比如Audacious. 而且清一色的Python, 看来我暂时是用不上了, 还是先去学点原理吧.
Saturday, August 23, 2008
配置LaTeX & XeTeX & AUCTeX
这几天折腾了一下LaTeX, 对于其中的概念也有了一些了解. 这篇日志主要是说下在Ubuntu 8.04下配置LaTeX+XeTeX环境的过程, 还有Emacs里的AUCTeX的配置.
- 首先是LaTeX与XeTeX的安装
- AUCTeX
$ sudo apt-get install texlive texlive-latex-extra texlive-xetex lmodern
当时为了安装最新的XeTeX, 花了很多时间在编译安装上, 最后只弄好一个半成品, 无法使用. 于是决定舍弃zhspacing宏包, 直接装了源里的XeTeX.
经过以上步骤后, 应该就可以正常编译TeX文件了, 用XeTeX调整字体也很爽. 如果你也使用Emacs来编辑TeX文件的话, 那么一定要安上AUCTeX这个扩展, 下面是一些配置详情.
$ sudo apt-get install auctex
安装好以后, 重点是配置.emacs文件, 因为AUCTeX本身是不支持通过xelatex编译的.
;; AUCTeX
(defun auctex ()
(add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex%(mode)%' %t; %`xelatex%(mode)%' %t" TeX-run-TeX nil t)) ;; 这里我编译了两次
(setq TeX-command-default "XeLaTeX") ;; 设定默认编译命令为XeLaTeX
(setq TeX-save-query nil) ;; 保存之前不询问
(setq TeX-show-compilation t)) ;; 在新窗口显示编译过程
(add-hook 'LaTeX-mode-hook 'auctex)
(custom-set-variables
'(TeX-output-view-style (quote (("^dvi$nnnnnnn" ("^landscape$" "^pstricks$\\|^pst-\\|^psfrag$") "%(o?)dvips -t landscape %d -o && gv %f") ("^dvi$" "^pstricks$\\|^pst-\\|^psfrag$" "%(o?)dvips %d -o && gv %f") ("^dvi$" ("^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" "^landscape$") "%(o?)xdvi %dS -paper a4r -s 0 %d") ("^dvi$" "^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" "%(o?)xdvi %dS -paper a4 %d") ("^dvi$" ("^a5\\(?:comb\\|paper\\)$" "^landscape$") "%(o?)xdvi %dS -paper a5r -s 0 %d") ("^dvi$" "^a5\\(?:comb\\|paper\\)$" "%(o?)xdvi %dS -paper a5 %d") ("^dvi$" "^b5paper$" "%(o?)xdvi %dS -paper b5 %d") ("^dvi$" "^letterpaper$" "%(o?)xdvi %dS -paper us %d") ("^dvi$" "^legalpaper$" "%(o?)xdvi %dS -paper legal %d") ("^dvi$" "^executivepaper$" "%(o?)xdvi %dS -paper 7.25x10.5in %d") ("^dvi$" "." "%(o?)xdvi %dS %d") ("^pdf$" "." "acroread %o %(outpage)") ("^html?$" "." "netscape %o")))))
最后那个有点长, 主要是没有找到合适的方法像添加XeLaTeX一样只需要写新增的条目, 所以这里就把原有的和修改以后的都写了出来. 其实只改了一个地方, 已经用红色标注出来了, 就是在使用C-c C-v
预览PDF文件的时候使用什么软件来打开. 我这里就是acroread, 你用的其它的话, 可以相应修改.
这样修改好以后, 以后就可以直接使用C-c C-c
编译, C-c C-v
预览, C-c `
在错误间跳转了.
8月5日更新:
如果不是用的源安装的LaTeX, 比如我为了用上最新版的XeTeX, 就选择单独安装TeX Live. 这时再用源安装AUCTeX的时候, 会因为依赖关系而又把源里的LaTeX相关包给装上, 囧
$ echo $PATH
/home/xiaogaozi/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
嘿嘿, 我的TeX Live的可执行文件都放在了/usr/local/bin里, 而源里安装的放在了/usr/bin, 自然优先级不同啦~
但是TeX Live中的
install-info
文件会导致源安装AUCTeX的时候失败, 所以如果是先安装的TeX Live, 再安装AUCTeX, 就需要先把TeX Live的install-info
"消灭"掉:
$ sudo mv /usr/local/bin/install-info /usr/local/bin/install-info.bak
附上我的TeX文件模板, 很杂, 也许有的在article上能用上, 而有的则只能在book上用上.
\documentclass[adobefonts]{ctexart} \CTEXoptions[captiondelimiter={\quad}] \usepackage{amsmath} % AMS的数学宏包 \usepackage{amssymb} % AMS的数学符号宏包 \usepackage{graphicx} % 插入图片需要的宏包 \usepackage{float} % 强大的浮动环境控制宏包 \usepackage{framed} % `shaded'环境需要用到 \usepackage{enumitem} % 增强列表功能 \usepackage{alltt} % 在`alltt'环境中为等宽字体, 但可以使用LaTeX命令 % \usepackage{shortvrb} % 简化\verb的写法 % \MakeShortVerb{\|} \usepackage{color} % 可以定义各种颜色 \usepackage[x11names]{xcolor} % 下面的RoyalBlue3颜色需要用到的宏包 % 自定义的几种颜色 \definecolor{shadecolor}{gray}{0.85} % \definecolor{darkblue}{rgb}{52,101,164} % \definecolor{darkgreen}{rgb}{78,154,6} % % 设置背景颜色 % \definecolor{bisque}{rgb}{.996,.891,.755} % \pagecolor{bisque} \usepackage[pdfauthor={Dreamseeker}, pdftitle={For Alist}, colorlinks=true, urlcolor=blue, linkcolor=RoyalBlue3]{hyperref} % 为超链接设置颜色, 修改PDF文件信息 \title{\textbf{For Alist}} \author{Dreamseeker} % \date{} \usepackage[pagestyles]{titlesec} % 定制页眉页脚 % % 设置页眉页脚 % \newpagestyle{main}{% % \sethead[$\cdot$~\thepage~$\cdot$][][\thesection\quad% % \sectiontitle]{\thesection\quad\sectiontitle}{}{% % $\cdot$~\thepage~$\cdot$} % \setfoot{}{}{}\headrule} % \pagestyle{main} % \renewpagestyle{plain}{\sethead{}{}{}\setfoot{}{}{}} \pagestyle{plain} \usepackage[top=1in,bottom=1in,left=1.25in,right=1.25in]{geometry} % 设置页边距 \setlength{\belowcaptionskip}{1em} % 设置caption之后的距离 % XeTeX logo \def\XeTeX{\leavevmode \setbox0=\hbox{X\lower.5ex\hbox{\kern-.15em\reflectbox{E}}\kern-.1667em \TeX}% \dp0=0pt\ht0=0pt\box0} % For LaN \newcommand{\LaN}{L{\scriptsize\hspace{-0.47em}\raisebox{0.23em}{A}}\hspace{-0.1em}N} \begin{document} \maketitle \tableofcontents \newpage \end{document}
另外推荐下好用的LaTeX, XeTeX入门文档:
- The (Not So) Short Introduction to LaTeX2e, 一个比较全面的文档, 是一个老外写的, CTeX论坛翻译的在这里下载, 版本相对老一点. 我刚开始看的就是这个, 觉得还是要边看边动手, 而且要勤动手, 毕竟说全面, 也只是相对下面两个文档的, 对于初学者来说, 里面很多讲得也不是很详细的, 毕竟这些都是比较短小的文档. 因为是老外写的, 所以看完以后你还是不会知道怎样在文档中输出中文.
- LaTeX Notes, 清华的一个老师写的LaTeX笔记, 比较务实地将经常用到的命令都讲了出来, 而且内容整体上比上一个新, 所以上一个主要是用来掌握基础, 看完你基本上可以写一个格式和这个PDF差不多的文章了. 最后还专门讲了一下中文化的一些内容, 不过现在用XeTeX了, 也基本上用不上了, 回顾下历史也是不错的.
P.S. 文中古诗无数, 附精美照片一张. - XeTeX/LaTeX中文排版之胡言乱语, 这个作为了我的XeTeX入门教程, 其实XeTeX的主要学习的地方还是在导言区. 这是一个很短小的文档, 总共只有7页, 对于提高排版质量有一定用处.
Tuesday, August 19, 2008
Saturday, August 16, 2008
C++学习笔记(八) -- cin状态错误造成的死循环
int i;上面这段代码中, 在要求输入i的地方, 如果输入了非数字, 就会造成死循环. 具体原因在于非数字字符仍然保留在缓冲区中, 所以当下一次cin读取的时候, 就直接从缓冲区中读取, 这样一直循环, 每次都是读取的非数字字符, 造成了死循环. 修改else里面的语句为:
while (1)
{
cout << "input a number: ";
cin >> i;
if(cin && i >= 0 && i <= 100)
break;
else
{
cin.clear();
cout << "error" << endl;
}
}
elseignore()的作用主要是从缓冲区中取字符并丢弃, 就起到了刷新缓冲区的作用.
{
cin.clear();
cin.ignore(1024, '\n');
cout << "error" << endl;
}
Friday, August 15, 2008
Emacs和Vim中将tab转化为空格
在.emacs中添加:
(setq-default indent-tabs-mode nil)对于已经保存好的文件, 可以选中需要转化的区域, 然后:
M-x untabify
Vim:
在.vimrc中添加:
set expandtab对于已经保存好的文件, 可以选中需要转化的区域, 然后:
:retab
笑笑
如果你已经不能控制
每天想我一次
如果你因为我而诚实
如果你看我的电影
听我爱的CD
如果我能带你一起旅行
如果你决定跟随感觉
为爱勇敢一次
如果你说我们有彼此
如果你会开始相信
这般恋爱心情
如果你能给我如果的事
Wednesday, August 13, 2008
Saturday, August 9, 2008
今天体验了一下w3m
Adobe的Flash插件在Linux上的表现实在是差, 直接导致上新浪这类类似的大型门户时, CPU轻轻松松就接近100%. 以前没有看门户的习惯, 这几天奥运了, 想上去看点新闻, 无奈太高的CPU占用率使得打开一个网页需要极强的耐心和信心. 于是请出以前就听说过的w3m, 反正我也只是想看点文字, 那上面的图片啊, 视频啊什么的, 都不大感兴趣. 用起来还是很简单的, 没有想象中的那么难使用, 不过那里面的键绑定实在是多, 选了几个常用的:
h, j, k, l
这几个和Vim中的一样, 移动光标
C-t
在新标签中打开链接
C-q
关闭当前标签
{
前一个标签
}
后一个标签
C-v
下一页
b
上一页
q
退出
o
设置w3m的选项
H
帮助
Tuesday, August 5, 2008
crash
一瞬间的我变得那么无助, 只能感受到背后的阳光和前方消失的背影. 我呆呆地望着头顶悬停的蜻蜓, 似乎一切都正在离我远去. 胸腔内好像有什么东西没有密封好, 渗透了那么一点酸酸的液体在我的血管中回环. 我凭什么拥有爱一个人的权力...
Wednesday, July 30, 2008
GNOME下修改KDE程序的字体
[General]
XftHintStyle=hintmedium
StandardFont=DejaVu Sans YuanTi,9,-1,5,50,0,0,0,0,0
activeFont=DejaVu Sans YuanTi,9,-1,5,50,0,0,0,0,0
fixed=Bitstream Vera Sans Mono,9,-1,5,50,0,0,0,0,0
font=DejaVu Sans YuanTi,9,-1,5,50,0,0,0,0,0
menuFont=DejaVu Sans YuanTi,9,-1,5,50,0,0,0,0,0
taskbarFont=DejaVu Sans YuanTi,9,-1,5,50,0,0,0,0,0
toolbarFont=DejaVu Sans YuanTi,9,-1,5,50,0,0,0,0,0
Wednesday, July 23, 2008
Tuesday, July 22, 2008
MLDonkey自动退出的解决办法
首先将原有的MLDonkey删除, 然后到http://sourceforge.net/project/showfiles.php?group_id=156414这里下载MLDonkey.
1. ./configure --enable-ocamlver=3.10.2 # 如果你没有安装OCaml 3.10.2, 那么中途会有一个询问是否去网上下载并安装, y即可P.S. MLDonkey的编译真先进, 用着就一个感觉: 爽, 差不多和apt一样智能了.
2. make
3. 这里不需要执行sudo make install了, 执行sudo cp mlnet /usr/bin
Thursday, July 17, 2008
Wednesday, July 16, 2008
亲爱的Vi$ta, 我重百你
另附上名言警句一句: 外事不决问Google, 内事不决问百度.
Sunday, July 6, 2008
Saturday, July 5, 2008
彩色man
sudo apt-get install most创建.mostrc
$ cat ~/.mostrc修改.bashrc
% Color settings
color normal lightgray black
color status yellow blue
color underline yellow black
color overstrike brightblue black
% less-like keybindings
unsetkey "^K"
unsetkey "g"
unsetkey "G"
unsetkey ":"
setkey next_file ":n"
setkey find_file ":e"
setkey next_file ":p"
setkey toggle_options ":o"
setkey toggle_case ":c"
setkey delete_file ":d"
setkey exit ":q"
setkey bob "g"
setkey eob "G"
setkey down "e"
setkey down "E"
setkey down "j"
setkey down "^N"
setkey up "y"
setkey up "^Y"
setkey up "k"
setkey up "^P"
setkey up "^K"
setkey page_down "f"
setkey page_down "^F"
setkey page_up "b"
setkey page_up "^B"
setkey other_window "z"
setkey other_window "w"
setkey search_backward "?"
setkey bob "p"
setkey goto_mark "'"
setkey find_file "E"
setkey edit "v"
# most
export PAGER='/usr/bin/most -s'
export BROWSER='/usr/bin/most -s'
Thursday, July 3, 2008
Game: Help 小明.
小明初学 C 语言,写了个程序,想打印 99 个 '#'. 程序如下:
int i, n=99; main() { for(i=0; i<n; i--) { printf("#"); } }
但是这个程序是错的.
Question 1: 请大家帮他改正, 但只允许 1) 删除一个字符 or 2) 增加一个字符 or 3) 改变一个字符
Question 2: 同样的限制条件, 使得只打印一个 '#'
Qeustion 3: 同样的限制条件, 打印 100 个 '#'
------------ DONT SPOIL THE FUN ---------------
---- 华丽的分界线, 请大家确保对上述每个问题思考 10 分钟再往下看 ----
Question 4: 请大家用自己喜爱的 scripting language 编个程序来解决以上 3 问
Monday, June 30, 2008
Vim的diff模式常用命令
:diffsplit {filename}
进入diff模式, 默认是水平分割, 但我比较喜欢垂直分割, 可以在.vimrc中添加
set diffopt=vertical
[c & ]c
在差异的部分进行跳转
:diffget
用另一个缓冲区来修改当前缓冲区, 消除不同之处, 仅对光标所在行附近有影响
:diffput
用当前缓冲区来修改另一个缓冲区, 消除不同之处, 仅对光标所在行附近有影响
:diffupdate
刷新
C++学习笔记(七) -- 虚继承中的初始化
from: 《C++ Primer》(第四版)
Saturday, June 28, 2008
Vimfox
这几天在网上看很多大段的内容, 又懒得去碰鼠标的滚轮, 于是就想只依托键盘来滚动页面, 但那几个方向键按起来是非常得不爽, 滚动一点都不平滑, 再加上Vim也用习惯了, 就去整了这么一个插件.
好了, 现在向大家隆重推出史上最牛X的插件--Vimperator
使用甚是简单, 请参阅
:help
C++学习笔记(六) -- 继承中的重载
using
声明扩展基类中函数的作用域.
Friday, June 27, 2008
Thursday, June 26, 2008
彩蛋收集计划 II
Alt+F2: free the fish
Alt+F2: gegls from outer space
apt-get --help
OpenOffice
在Calc的单元格中输入:
=Game("StarWars")
Firefox
Wednesday, June 25, 2008
Tuesday, June 24, 2008
Monday, June 23, 2008
Saturday, June 21, 2008
让Pidgin聊天发送消息使用Ctrl+Enter
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插件
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
Emacs中文字体调整
(set-fontset-font (frame-parameter nil 'font)
'unicode '("DejaVu Sans YuanTi" . "unicode-bmp"))
Thursday, June 12, 2008
使用JDEE编译时报错不支持现有Java版本的解决办法
xiaogaozi@LAN:~$ java -version记下其中的版本号, 然后在Emacs中执行
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)
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
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
from: 《Java2核心技术 卷I: 基础知识》(第7版) P111
Monday, June 2, 2008
The Matrix
很显然, 这不是一部伟大的电影, 导演把大部分的时间都放在展现无与伦比的特效上了, 而那个本身就不是很明确的主题则显得可有可无.
在这部电影中我个人比较喜欢的是背景环境的设定, 除了这个带有强烈科幻色彩的故事背景外, 其余的都是好莱坞惯有的情节了, 随便找一部来都会跟这部3部曲差不多, 恐怕唯一的区别是这部电影很长. 如果你确实想看特效, 那我推荐你去看星战.
故事的时间发生在未来, 二零几几年我忘了, 人类成功发明人工智能(AI), 使得机器人有了很高的智慧. 然后由于某个未知的原因, 机器人开始统治人类, 人类开始生活在由Matrix创造的虚拟世界中生活, 而全然不知. 他们的原始身体插满了信号传输线, 整天泡在营养池里, 思想却以为自己正在地球的某个角落或快乐, 或痛苦地生活着, 全人类都被放在了像上面那张图中一样的高楼里, 过着被Matrix麻醉的寄生生活.
然后的然后, 就是一群醒来的人类开始反抗, 追寻自由.
Sunday, June 1, 2008
Web 是神通广大的
说实话, 就我现在的水平, 想要制作一个漂亮的网站也只能是Ctrl+C, 再Ctrl+V, 关于语言的知识实在是匮乏, 我对那啥实训已经没什么兴趣了, 无非又是一次重复的过程, 没有学到真正的知识, 以后面临的就是巨大的困难, 那种模仿秀, 或者说抄袭式的制作真的意义不大. 程序需要融入自己的灵魂, 其它事情也是, 否则剩下的就只有空洞与空虚, 由一行行毫无感情的字母堆砌着.
好好学电脑! 好好学Web!
Friday, May 30, 2008
真实
Thursday, May 29, 2008
辩
正方观点: 承诺是可以瞎说的, 誓言是可以胡扯的, 我爱你是可以说着玩的, 钱是不能没有的.
反方观点: (沉默是金)
正方大便: 请问反方一辩, 恋爱是为了满足生理需求, 还是心理需求呢?
反方一辩: 未来需求.
正方二便: 请问对方辩友, 两个人相爱最需要什么呢?
反方二辩: 两颗心.
正方三便: 我抗议! 反方辩友连问题都不提一个, 让我去网上找的那么多资料一点都用不上.
反方三辩: 请问f-u-c-k是什么意思?
"现在请双方做最后总结陈词"
正方死便: 综上所述, 我方的观点是爱情七十二计, 就是一场游戏, 谢谢~
反方四辩: 拉巫是埃文斯, 萌妮是希特.
"最后的结果是"
"正方获胜!!!"
"请听各位评委的发言"
评委甲: 反方就是一群傻逼, 鉴定完毕.
评委乙: 正方就是一群天才, 绝对顺应时代发展, 鉴定完毕.
评委丙: 现在很流行"耍"朋友.
...
评委癸: 人之初, 性本善.
"感谢各位收看此次我辩我辩我辩辩辩论赛"
Wednesday, May 28, 2008
很可耻地睡过鸟
Monday, May 26, 2008
mylove
xiaogaozi@LAN:~$ sudo apt-get install mylove
[sudo] password for xiaogaozi:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
读取状态信息... 完成
E: 无法找到软件包 mylove
Flash 显示中文为方格的解决办法
$ sudo vim /etc/fonts/conf.d/49-sansserif.conf修改最后一个
<string>
对中的"sans-serif"为"WenQuanYi Zen Hei", 重启浏览器即可.署名-非商业性使用-相同方式共享 |
Sunday, May 25, 2008
C++学习笔记(四) -- 头文件包含定义
from: 《C++ Primer》(第四版) P59
还是会寂寞
词、曲: 陈绮贞
早已忘了想你的滋味是什么 因为每分每秒都被你占据在心中
你的一举一动牵扯在我生活的隙缝 谁能告诉我 离开你的我 会有多自由
也曾想过躲进别人温暖的怀中 可是这么一来就一点意义也没有
我的高尚情操一直不断提醒着我 离开你的我 不论过多久 还是会寂寞
别对我小心翼翼 别让我看轻你 跟着我 勇敢地走下去
别劝我回心转意 这不是廉价的爱情 看着我 对我说真爱我
神经漫游者
2小时39分前, 我回到现实, 我相信爱, 相信梦想, 相信这美好的一切. 我想, 我听到了到现在为止最温暖的话语.
Saturday, May 24, 2008
C++学习笔记(三) -- cin的布尔值
首先 cin 是 istream 类的一个对象, 而 istream 类继承于 ios_base 类, 于是 ios_base 的状态决定了 cin 为 true 或者 false.
ios_base 类中有四个状态标志 (state flag), 分别是: eofbit, failbit, badbit, goodbit. 当前三个标志的值为0, 即为 false 时, goodbit 为 true. 这就决定了 cin 为 true 还是 flase.
VirtualBox 安装完毕后的一些设置
最近在玩虚拟机, 不收费的里面, 也就VirtualBox最简单, 但安装完毕后我们还得进行一些必要的设置, 不过如果你安装的是Window$版, 以下步骤可以省略.
- 将当前用户添加进vboxusers群组. 这是最基本的一个设置, 否则你连虚拟机都启动不了.
- 解决VirtualBox访问USB子系统失败
- 首先建立usbfs群组
$ sudo groupadd usbfs
- 然后将当前用户添加进usbfs群组
$ sudo usermod -a -G usbfs `whoami`
- 获取usbfs群组的GID
$ cat /etc/group | grep "usbfs"
比如在我的机器上显示的是usbfs:x:1001:xiaogaozi
那么usbfs的GID就是1001 - 修改/etc/fstab文件
$ sudo vim /etc/fstab
在末尾添加none /proc/bus/usb usbfs devgid=<yourgid>,devmode=664 0 0
- 重启
- 对于 Ubuntu 8.04, 会遇到在虚拟机中无法使用键盘的情况, 解决办法是
$ sudo usermod -a -G vboxusers `whoami`
P.S. 有人说 OSE (Open Source Edition) 不支持USB, 没试过, 也不知正确与否.
$ sudo apt-get install scim-bridge-client-qt然后注销就可以了.
Monday, May 19, 2008
Sunday, May 18, 2008
Friday, May 16, 2008
elf
Dear elf, I wish you have a beautiful dream.
Wednesday, May 14, 2008
MPlayer中文字幕乱码解决办法
subcp=cp936 # cp936=gb2312 subfont-text-scale=5
然后如果是Ubuntu 9.10之前版本的系统, 需要链接一个中文字体 (命令如下), 这样中文字幕就不会出现乱码了.
$ cd ~/.mplayer $ ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttf subfont.ttf而Ubuntu 9.10则不需要链接中文字体 (因为链接了也没用...), 在使用
mplayer
播放时加上"-ass
"参数即可, 比如:
$ mplayer -ass filename
我们都还在
2008年5月12日14点28分, 四川汶川发生震级8级地震, 截至今天死亡人数超过1.2万.
2008注定是荣耀与灾难交辉的一年, 灾难的是中国人的土地, 荣耀的是中国人的心.
这世界混乱了, 感受着那种仿佛暴风雨来临前的震动, 我背上书包, 往某个方向走着. 好多人, 我的快速穿行似乎不合时宜, 人们应该静静地呆在一个地方, 然后等待. 等待, 这个词恐怕是这几天来经历过最多的. 快接近了, 我暂时停下了脚步, 戴上了眼镜, 我得有一个工具帮助我从混乱的人群中发现什么. 她们说她去了那边, 我拨开人群, 那里人更多, 没有, 我呆呆地站在那里, 也许在那边. 我的手指在白色的按键上重复地按着, 该死的移动, 狭小的学校到处挤满了人, 钟楼有了很明显的裂缝, 开始封锁寝室了, 在这等等吧, 终于发出去了一条. 一个女生一直在一旁唧唧歪歪, 一个女生拿着自己的手提, 还有她的小白兔. 想起了萌芽的一篇小说《寻找雅格布》, 我的内心是否也有一个声音在大声呼喊, 然后无助地看着它在人群中淹没, 不过我是幸运的, 一直都是, 我找到了你.
我好开心, 因为有你在这里.
Saturday, May 10, 2008
MLDonkey相关设置
以下操作基于Web界面
Options:
client_name -> yourname
max_hard_upload_rate -> 20
max_hard_download_rate -> 0
ED2K-max_connected_servers -> 200
ED2K-force_client_high_id -> true
ED2K-force_high_id -> true
enable_kademlia -> true
Servers:
Import Server.met -> http://www.emule.org.cn/server.met
然后打开"~/.mldonkey/downloads.ini"文件, 找到web_infos, 修改"server.met"后的值为"http://www.emule.org.cn/server.met", 删除 ("guarding.p2p", 96, "http://www.bluetack.co.uk/config/level1.gz"); 一行.