用vim来解决wordpress的代码高亮和缩进

Posted 4 CommentsPosted in Vim

因为要经常在post中贴一些代码出来,为了美观,安装了WP-Syntax插件来高亮代码,但是wordpress的visual编辑器实在是太逊了,经常把整齐的代码搞的一团糟,虽然有语法高亮,但是仍然惨不忍睹。 终于再无法忍受,寻觅其他解决的办法。平时编辑代码都是用vim的,突然想到vim有一个功能可以把编辑的文本转换为HTML格式,这不正是我想要的吗!vim的语法高亮能力可不是一般的强悍,用vim编辑代码那可是相当的舒适。 终于可以抛弃wordpress的visual编辑器了。在vim里面执行:TOhtml就可以把当前编辑的文本转换为HTML页面,转换结果相当的好,也可以用:m,nTOhtml把一个范围内的文本转换为html。 因为我的vim用的自己修改的desert256配色方案,背景是黑色的,所以转换出来的html在白色背景下略显刺眼。 UPDATE: 最新版的vim默认使用CSS来生成html代码,这样嵌入wordpress会有问题,可以在~/.vimrc文件里面设置变量关闭CSS来解决问题 :let g:html_use_css=0

轻量级开源C++ GUI开发框架KWinUI发布

Posted 3 CommentsPosted in KWinUI

windows平台上的GUI框架已经有很多了,为什么还会有KWinUI? 答案就是轻量,高效,线程安全,并且可以完全掌控。 比较各种GUI Framework的优劣是没有太多意义的,存在的东西都有它存在的合理性和适用的范围。从来没有能满足所有需求的东西,C++亦如是,虽然它是如此的强大。KWinUI来源自开发实践,是做一个项目过程中产生的。对于一个界面并不算复杂的小项目来说,那些重量级的framework太过沉重了,而每次用SDK来写界面,显然又过于繁琐了,所以有了KWinUI。KWinUI使用C++来包装windows SDK,并没有使用太复杂的技术,太复杂的我也不会:),主要使用了thunk技术和C++模板的静多态特性,并且仔细考虑了线程安全,毕竟在这个多核的时代,如果不是线程安全的就显得不那么in。 跨平台不是KWinUI的诉求,现在不是、将来也不是,现在就有很多十分优秀的跨平台GUI开发框架,比如VCF,wxWidget,gtk+,QT等。KWinUI更像是一个自娱自乐的产物,只是觉得它可能对其他一些人也有用处,所有采用lgpl协议将它公布于众,如果能对其他人有些微的帮助,那么开放它的目的就达到了。采用lgpl的好处就是你可以放心的使用KWinUI,就是在商业程序中使用也没有问题。但是如果你对KWinUI做了更好的修改,最好公布一下修改的代码,以便给其他人以帮助。就算KWinUI真的没啥价值,这样发布应该也不会对别人造成什么伤害,权当娱乐一回吧,呵呵。 KWinUI的主要特性如下: 轻量、高效、资源占用少、线程安全、使用简单,差不多就这些了。 KWinUI因为使用了模板技术,所以就是一堆头文件和几个cpp文件,使用起来相当简单,后面我会继续发几个简单的sample来演示如何使用KWinUI。 如果非要有一个版本号的话,那么就定为 0.1.0吧,因为KWinUI实在是挺稚嫩的。 如果有人对KWinUI有兴趣,欢迎对它进行进一步的修改。 KWinUI的全部源程序从此下载,很小的,我保证你瞬间就能下载下来:)

关于C和C++的布尔类型,_Bool和bool

Posted 2 CommentsPosted in Lang

C++内置对布尔类型的支持,其关键字是bool,C语言直到C99标准才增加了对布尔类型的支持,关键字为_Bool,因为bool已经被C++ 用了,所以选了这个十分奇怪的关键字。在这之前C程序员对布尔类型的模拟是相当混乱的。为了在C和C++程序中以统一的方式使用布尔类型,同时提高可移植性,可以采用下面的方式:

likely,unlikely宏与GCC内建函数__builtin_expect()

Posted Leave a commentPosted in GNU/Linux

先罗嗦几句 最近在读linux 2.6 内核,虽然以前已经看了很多相关的知识,<<linux内核完全注释(0.11)>>也看了2,3遍,但读2.6内核仍然感到很吃力。面对2.6如此庞大的内核,信心真的不是很足,而且好像也没有很好的、有帮助的论坛来一起探讨,哎!现在正在边看<<情景分析>>,边看最新的内核,自<<情景分析>>出版以来,内核已经有了很多的变化,好难读啊!如果这样读下去算不算“皓首穷经”呢,不得而知了!

GUI之窗口过程thunk

Posted Leave a commentPosted in KWinUI

thunk是什么?查字典只能让人一头雾水。thunk是一段插入程序中实现特定功能的二进制代码,这个定义是我下的,对不对各位看官请自己斟酌,呵呵。 我这里要讲的是窗口回调专用thunk,thunk的核心是调用栈动态修改技术。地球人都知道,windows的窗口回调函数是一个全局函数,类成员函数 是不可以作为窗口回调函数的,因为它有this指针,这给我们用C++来包装窗口带来不小的麻烦。你说什么?用一个全局函数或类的静态成员函数来做窗口回 调函数?这肯定没问题。但是这样带来的麻烦也许比你想象的要多,想想我们的GUI Framework不会只有一个类,而是一个类层级结构,会有许许多许多、形形色色的widget,每个都是一个窗口。对象与窗口之间的映射可能就是个不 小的问题,像MFC那样搞?太落伍了吧!用thunk就要简单的多。WTL用了thunk,但是不够彻底。 废话少说,先贴出thunk核心代码。

Visual C++ 2008 Express编译boost 1.39 regex库遇到的问题及解决办法

Posted 1 CommentPosted in Lang

最近在玩boost,用vc++ 2008 express编译最新版本1.39时遇到一点小问题,记录于此。 分别下载了zlib,bzip2和icu,python暂时不玩,没接触过。我喜欢静态链接程序,根据官方文档的提示,在console输入如下指令,为了输入方便,最好写个bat脚本: bootstrap bjam -sBZIP2_SOURCE=D:/libs/bzip2-1.0.5 -sZLIB_SOURCE=D:/libs/zlib-1.2.3 -sHAVE_ICU=1 -sICU_PATH=D:/libs/icu link=static runtime-link=static threading=multi –without-python console窗口一阵晃动后吐出了这么三行error: error: link=shared together with runtime-link=static is not allowed error: such property combination is either impossible error: or too dangerious to be of any use 百思不得其解,明明我的link选项只有static,哪来的shared啊,郁闷啊郁闷,反复折腾后,发现,如果没有ICU选项,则不会出现此错误提示。 用vim打开boost_1_39_0\libs\regex\build\jamfile.v2,搜索一下/\<shared\>,果然在文件底部,218,223和229行链接选项被写死为shared。那就去掉这该死的shared,重新来过,bjam终于开始正常工作了。 编译带ICU选项的regex还会遇到一点儿小问题。boost.regex期望的icui18n.lib和icudata.lib与编译后的ICU库的名字并不相同,简单修改一下就可以了,如下: libs\icu\lib\icuin.lib -> icui18n.lib libs\icu\lib\icudt.lib -> icudata.lib 测试了boost 1.39官方文档的regex测试程序,静态链接,一切OK。

BASH脚本中使用正则表达式检查IP地址和端口号

Posted Leave a commentPosted in GNU/Linux

新版本bash(可能从3.0以后)内置了运算符 =~ 来支持正则表达式匹配。请注意此运算符只能用在[[…]]表达式中,而不能用在[…] 中。bash内置支持的好处在于使用方便和效率提升,不需要fork一个process即可以进行正则表达式匹配。但是似乎bash对正则表达式的支持不很完善,比如用 转义符\d无法匹配单个数字,必须用 [0-9]来匹配才行,比较罗嗦。

Ubuntu:Partition table entries are not in disk order

Posted Leave a commentPosted in GNU/Linux

前几天刚安装了ubuntu 9.04,在分区的时候,先从磁盘的最后面划出大约2G的空间做了swap,然后再分的/,/var,/tmp,/home。安装好了才发现,虽然swap在磁盘的最后面,其设备号却为/dev/sda6,排在其他分区的前面,sda1和sda5为XP使用的分区。虽然看着有些不爽,但是不影响使用,也就没管它。 今天用sudo fdisk -l查看分区表的时,在打印的分区列表最后面有一句话:Partition table entries are not in disk order,又勾起了我的洁癖,决定把分区表顺序调整过来。 sudo fdisk /dev/sda进入fdisk的shell,然后输入f回车就可以把分区顺序调整过来了,然后输入w保存退出。因为root分区的设备号从(hd0,6)变成了(hd0,5),所以grub就会无法找到root分区,从而无法进行引导。 用ubuntu 9.04的livecd引导进入系统,进入grub,然后root (hd0,5),setup (hd0) 就可以了。 ubuntu9.04是用uuid来标示分区的,所以/etc/fstab和/boot/grub/menu.lst不用更改就可以顺利的启动系统了。