2009年6月4日星期四

压抑了两天的心情发泄了一下.

今天去听了黑鬼所在乐队的爵士音乐会,其实想我这种没有什么乐感的人听啥都一样.只是拳皇和碟中谍熟悉的旋律让我有了一丝共鸣.感觉黑鬼的表现还不错,下半场的状态比上半场好.呃,特别值得一提的一点是:黑鬼的交际面很广,亲友团不少美女啊...
回来的时候突然想发泄一下,于是从武汉音乐学院的编钟厅跑步跑到了丁字桥站,花了25min左右跑了5km,很是有点爽.路线如下:
http://picasaweb.google.com/liulei1988/TriStoneLSBlog#5343494706728047410
...
搞不定发图片..郁闷啊

2009年5月26日星期二

libxml安装及使用

libxml是一个linux下的c库,可以用来操作xml文件.
1. libxml的安装.
使用"apt-get install libxml2-dev"安装.
2.libxml的使用.
2.1 libxml中的结构.libxml主要使用如下结构
2.1.1 xmlNode结构,用来表示xml文档中的节点.
struct _xmlNode {
void * _private : application data
xmlElementType type : type number, must be second !
const xmlChar * name : the name of the node
struct _xmlNode * children : parent->childs link
struct _xmlNode * last : last child link
struct _xmlNode * parent : child->parent link
struct _xmlNode * next : next sibling link
struct _xmlNode * prev : previous sibling link
struct _xmlDoc * doc : the containing document
xmlNs * ns : pointer to the associated namespace
xmlChar * content : the content
struct _xmlAttr * properties : properties list
xmlNs * nsDef : namespace definitions on this node
void * psvi : for type/PSVI informations
unsigned short line : line number
unsigned short extra : extra data for XPath/XSLT
}
2.1.2 xmlDoc结构,用来表示整个xml文档.
struct _xmlDoc {
void * _private : application data
xmlElementType type : XML_DOCUMENT_NODE
char * name : name/filename/URI of the document
struct _xmlNode * children : the document tree
struct _xmlNode * last : last child link
struct _xmlNode * parent : child->parent link
struct _xmlNode * next : next sibling link
struct _xmlNode * prev : previous sibling link
struct _xmlDoc * doc : autoreference to itself
int compression : level of zlib compression
int standalone : standalone document
struct _xmlDtd * intSubset : internal subset
struct _xmlDtd * extSubset : external subset
struct _xmlNs * oldNs : Global namespace
const xmlChar * version : the XML version string
const xmlChar * encoding : external initial encoding
void * ids : Hash table for ID attributes if any
void * refs : Hash table for IDREFs attributes
const xmlChar * URL : The URI for that document
int charset : encoding of the in-memory content actua
struct _xmlDict * dict :
void * psvi : for type/PSVI informations
int parseFlags :
int properties :
}
msdn的介绍.
2.2 xml文件的读取
主要使用的函数有:
//用于将xml文件解析成一棵xml树
xmlDocPtr xmlParseFile (const char * filename)
//获取document根节点
xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc)

以下是一个读取xml文件的示例
//xmlReader.c
//you can compile it like "gcc -o xmlReader -I
/usr/include/libxml2 -lxml2 xmlReader.c"
#include <stdio.h>
#include <string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

xmlDocPtr parseDoc(char *docname) {
xmlDocPtr doc;
xmlNodePtr cur;

xmlKeepBlanksDefault(0);
doc = xmlParseFile(docname);
if (doc == NULL ) {
fprintf(stderr,"ERROR: can't parse xml document %s.\n", docname);
return NULL;
}

cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
xmlFreeDoc(doc);
return NULL;
}
//dump the root element;
xmlElemDump(stdout, doc, cur);
//dump the root's first child;
xmlElemDump(stdout, doc, cur->children);
return doc;
}

int main(int argc, char** argv){
xmlDocPtr doc;
if (argc != 2){
fprintf(stderr, "Error: wrong number of arguments.\n");
fprintf(stderr, "Usage: %s \n", argv[0]);
return -1;
}
LIBXML_TEST_VERSION

if ((doc = parseDoc(argv[1])) != NULL){
xmlFreeDoc(doc);
return 0;
}
return 1;
}

2.3 xml文件的修改和写入
主要使用的函数有
//新建一个parent的孩子结点,ns是所处的命名空间,无则为NULL.
xmlNodePtr xmlNewChild (xmlNodePtr parent,
xmlNsPtr ns,
const xmlChar * name,
const xmlChar * content)
//新建一个parent的孩子结点,ns是所处的命名空间,无则为NULL.
xmlNodePtr xmlNewTextChild (xmlNodePtr parent,
xmlNsPtr ns,
const xmlChar * name,
const xmlChar * content)
//添加cur为parent的孩子结点
xmlNodePtr xmlAddChild (xmlNodePtr parent, xmlNodePtr cur) int xmlSaveFormatFile //以format知道格式保存doc到文件,format通常为0
const char * filename, xmlDocPtr cur, int format)

以下为一示例
//xmlWriter.c
//you can compile it like "gcc -o xmlWriter -I
/usr/include/libxml2 -lxml2 xmlWriter.c"
#include <stdio.h>
#include <string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

xmlDocPtr parseDoc(char *docname) {
xmlDocPtr doc;
xmlNodePtr cur, node;

xmlKeepBlanksDefault(0);
doc = xmlParseFile(docname);
if (doc == NULL ) {
fprintf(stderr,"ERROR: can't parse xml document %s.\n", docname);
return NULL;
}

cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
xmlFreeDoc(doc);
return NULL;
}
//macro BAD_CAST convert char* to xmlChar*
xmlNewTextChild(cur, NULL, BAD_CAST "Name", BAD_CAST "TextNode");
//create a new node
node = xmlNewNode(NULL, BAD_CAST "Node");
//add Prop="prop" property.
xmlNewProp(node, BAD_CAST "Prop", BAD_CAST "prop");
cur = xmlAddChild(cur, node);
return doc;
}

int main(int argc, char** argv){
xmlDocPtr doc;
if (argc != 2){
fprintf(stderr, "Error: wrong number of arguments.\n");
fprintf(stderr, "Usage: %s \n", argv[0]);
return -1;
}
LIBXML_TEST_VERSION

if ((doc = parseDoc(argv[1])) != NULL){
xmlFreeDoc(doc);
return 0;
}
return 1;
}


2.4 其他操作.
在xml文件中的查找既可以递归遍历xml文件来查找,也可以使用xpath,不过我在使用xpath时总是不能找到一个空集合....

2009年5月15日星期五

再次重装ubuntu+xen遇到的若干问题

1. 编译xen之前需要安装的包
apt-get install make gcc libc6-dev zlib1g-dev python python-dev python-twisted bridge-utils iproute libcurl3 libcurl3-dev bzip2 module-init-tools transfig tgif libncurses5-dev patch libvncserver-dev libsdl-dev libjpeg62-dev bcc bin86 gawk pciutils-dev mercurial build-essential
如果没有安装,可能在编译时出现类似于stderr未定义等错误.

2. 编译时出现如下警告,然后报错退出.
WARNING: `makeinfo' is missing on your system. You should only need it if
you modified a `.texi' or `.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy `make' (AIX, DU, IRIX). You might want to install the `Texinfo' package or
the `GNU make' package. Grab either from any GNU archive site.
这个时候如果apt-get install Textinfo或者apt-get install 'GNU make'的话会提示找不到package.这个时候可以使用apt-get search makeinfo命令,这样就会发现要安装texinfo包.

3.配置vim.

在/etc/vim/下面,有个vimrc文件,这是对所有用户都有效的公共配置文件.

可以在其中加入"syntax on"行来使vim高亮.加入set tabstop=4来使vim中的tab的宽度为4.加入set cindent来使vim使用c/c++的自动缩进方式.

在我的vim里面,在改了syntax on之后,打开vim会报"Sorry, the command is not available in this version: syntax on"错误,这个时候用apt-get install vim更新一下就可以了.

4.xen默认使用的是bridge方式来连接虚拟机网络,而在我的网络环境中,使用bridge无法连接网络.这时可以修改/etc/xen/xend-config.sxp文件.注释掉如下两行
(network-script network-bridge)
(vif-script vif-bridge)
而将如下两行前的#号去掉
(network-script network-nat)
(vif-script vif-nat)
重启后即可使用nat方式联网.

2009年5月8日星期五

今天晚上涨了下信心...

一个多星期没有晚上去练拳了,今天晚上又去练了一下,感觉在师父校正了之后,脚上比原来有感觉了些.看来还是要多转胯,多搞搞低架.
大概八点钟的时候,来了个人,在练缠丝手.似乎是和飘零学咏春的,就上前和他试了试手,感觉力量比较大,不过身法比较死,用力也比较直.在摔的过程中他几次抓住我的手腕,当时想用拿法拿他的手腕,但是怕控制不好,就没有用.不过最后还是摔了他一下.后面才知道这个人是警察.看来这段时间没有白练.嘿嘿...不过要是真的打起来,我估计还是打不过他,力量还是有差别,拳脚也没有他硬...还是要多练习.

2009年4月26日星期日

可乐中的阿斯巴甜

今天突然在群里看到一条消息,说是不要喝零度的可口可乐.说是因为零度的可乐里含有阿斯巴甜,而"阿斯巴甜(含苯丙氨酸),属于一种代糖""代糖已经被认为成一种神经毒素,损害神经系统".当时反正无聊,就上网找了一下相关资料.感觉这个说法是不大靠谱,阿斯巴甜和糖精还是相对安全的。

在National Cancer Institute的网站上说,阿斯巴甜在1981年FDA做的试验中被证实是无害的, 但是在1996年又有人提出报告说1975到1992年脑瘤患者的增多可能和阿斯巴甜有关,但是NCI的研究数据再次证明脑瘤患者的增多的时间段和阿斯巴 甜的使用的时间段不吻合.最近,NCI从NIH-AARP的死亡数据以及对几十万人的健康状况的研究表明,阿斯巴甜和淋巴癌,白血病以及脑瘤无关.在FDA的网站上有更多的介绍,http://www.cfsan.fda.gov/~lrd/tpaspart.html.以及一份FDA关于阿斯巴甜的说明,http://www.fda.gov/fdac/features/1999/699_sugar.html.ps.如果患有苯丙酮酸尿先天性异常的人食用就会出问题了.

从使用层面上来说,现在在米国,欧盟,澳大利亚等西方国家的官方网站中都声明阿斯巴甜是安全的,灰常好的代替糖的食品添加剂.反正有能带来甜味,又基本没有什么热量.可见澳大利亚关于食品标准的网站,http://www.foodstandards.gov.au/newsroom/factsheets/factsheets2007/aspartameseptember203703.cfm.

至于可口可乐为什么要搞这种无糖的可乐,估计是由于很多人认为糖是导致肥胖的罪魁祸首,可口可乐为了迎合市场而搞了这个么东西.其实我觉得这种可乐远没有 传统的可乐好喝.而且增肥的主要物质还是脂肪,而不是碳水化合物,更科学来说应该是不健康的饮食习惯和不锻炼导致的.少喝可乐还不如少喝奶茶呢,一瓶普通 可乐大概是270卡路里,一倍奶茶大概是330卡路里...

再次去听音乐会

昨天和一众人等跑去听一流行钢琴的音乐会,场面甚是热闹,才发现我们学校还有这么多音乐爱好者,而我则纯粹是一个凑热闹者.

黑鬼曾经对我说过"流行音乐的祖宗就是爵士乐,爵士乐的特点就是即兴.上一秒弹的下一秒就忘了``再弹就不可能一样了`".昨天能给我这感觉的恐怕也就那 个弹'生日快乐'的兄弟了.不过让我最有共鸣的还是魂斗罗和超级玛丽的音乐啊...至于弹得好不好,我也听不出来,唯一发现的是某首曲子弹出问题了.不过 我最期待的马克西姆的'出埃及记'也没有让我很有感觉,估计还是现场气氛问题吧.看来玩艺术这玩意儿,周围环境是很重要的啊,或者说是欣赏艺术要周围的环 境配合才有感觉吧...

不过说起来,码代码这玩意儿也码出艺术来,就像看'代码之美',里面有不少东西还是让人觉得看得很漂亮的.不过我觉得艺术就是每个人都有自己心中美的标 准,每个人玩的都是有自己风格的漂亮,这东西还真没有什么标准可言,靠得都是心去感悟.而在现在这个时代,一旦扯到钱这个东西了,就要商业化,要工程化, 工程化的东西都不能看个人的心境了.啥都要有标准,大家都按着一个方法来就不会出错了,最好是每项工作都极简单,都能重复.搞成工厂那种流水化能精确控制 最好.所以我觉得很多东西一扯到钱,就不好玩了...

嘿嘿,扯远了.其实最近的目标就是努力当好一个职业人.以后如果还是打工的话就想办法为老板挣钱,如果能自己当老板了就发奋为自己挣钱.等什么时候真能放下了,再考虑回湖南买个小房,开个小书店,享受一下生活,欣赏一下艺术.顺便去兄弟们家里讨点酒喝...

最后,期待一下黑鬼6月4号的音乐会...

vmware cpu100%问题

环境:
windows xp sp3
vmware 6.51
ubuntu 8.04

问题:
cpu突然就100%了.搞了半天。

解决方法:1.关闭虚拟机,
2.修改虚拟机的内存大小,我是改小了,从512改成456
3.重启