使用libxml2解析xpath(2009-07-02 15:47)
看了libxml2官方网站上关于xpath的实例,还是不能很好的了解libxml是如何解析xpath并返回结果的。因为这些例子全部都是获取节点的名称,而我最终要使用的是直接通过xpath获得节点的属性值。
解析xpath前面的步骤和网站上的例子相同,首先先使用
doc = xmlParseFile(filename.c_str());
解析xml文件(我设置传递的文件名是string类型的),在用然后再用
xpathCtx = xmlXPathNewContext(doc);
获得xpath的上下文。解析xpath的时候,使用
xmlXPathObjectPtr xpathObj = xmlXPathExpression((const
xmlChar*)(expr.c_str()), xpathCtx);
这样就会返回xpath对象的指针。
关键就是如何处理这个对象。从API
menu中可以看到xmlXPathObject结构主要包含了对象类型和节点集。一般的例子上都是直接获得节点集指针,然后来操纵节点
看了电视上的刀切面,今天心血来潮也想试试看。但是怕做不好,就做了两手准备,让妈妈买了肉饼,可以用来包饺子,弄饺子皮的本事还是有的。
为了“健康饮食”,和面的水打算用芹菜汁。用搅拌机把芹菜弄碎,全部倒进面粉里。不过……由于只顾着弄芹菜汁,没有注意量,全部倒进去之后发现,水实在太多了。方便起见,前面刀切面和水饺全部推翻,改作“卖个头”<杭>。一边搅拌着面粉,妈妈开始重新准备原料——切南瓜。但最后还是发现水实在太多了,面太稀了,根本就粘不起来。
只能使用终极杀手锏了。。。
奇怪的软件测试方式(2009-06-08 23:46)
众所周知,一个软件的发布,往往要经过Alpha, Beta,
RC等版本(各种测试版的名称可能不同,但一般都有这么几个过程),每种版本测试的人数量越来越多,专业能力越来越弱。也就是说,前面的几种测试版,都是针对特定人群的,一般要到RC开始才适合普通用户使用。
但是,有的软件却反其道而行之,将最初的测试版本直接给用户使用,像腾迅还只把作为测试版的新版QQ给会员使用。也就是说这些花了钱的用户反而还要帮忙测试软件质量,直到最后正式发布。
一般软件在推出新版本时,一定会吹捧自己的新功能或重大改进,来吸引用户使用最新的测试版程序。但像QQ这样找个新功能体验的名头让付费会员测试,太不道德了。
编译安装第二个mysql(2009-06-03 20:50)
linux的作业要自己编译一个mysql,但是我的系统上已经有一个mysql了,再编译一个,最麻烦的地方不在于编译,而是让两个共存。
前面的编译环节和普通安装没有什么区别,还是configure,make,make
install。其中configure的时候,选择一下安装的位置,否则可能导致原来的文件被覆盖(使用--prefix选项)。我的破电脑make的时候花了不少时候(具体多少我也不清楚,开始编译之后就去吃饭了),安装好之后,按照mysql的手册复制support-files/my-medium.cnf到安装目录里面的var目录下(没有安装数据库的时候这个文件夹不存在,自己在安装根目录下创建一个),然后修改里面的客户端通信使用的socket文件的名字sed
-i -e 's/mysql.sock/mysql1.sock/'
/opt/mysql/var/my.cnf,这里把socket文件改成了mysql1.sock(原来的mysql默认的socket文件是mysql.sock,不修改会导致两个socket文件冲突)。如果要同时通过网络监听,可能还需要修改里面的监听端口,反正我只是当成作业演示一下,所以监听端口就没有修改。
后面的操作和手册上一样,偷懒了下,没有导出环境变量,所以要输入绝对路径。先改变了文件夹的拥有者,
昨天在做图像处理的东西,要实现图片的缩放和平移。处理的算法不是很难,但是测试的时候发现缩小之后图片只有下面一半能够显示,放大的时候只有上面一般正常。
首先调试图像处理的算法,看了半天没有错误,另外一半的像素是能够访问到的,倒是取出来的时候已经有问题了。再调试像素获取的部分,也不太会不正常,毕竟有一半的像素获取是正常的。
花了很长时间,终于发现了问题的所在。在加载了bmp图片之后,我把加载的图片通过赋值运算符(operator=)复制了一份,原始的作为存档,已方便恢复初始状态。但是bmp加载的类里面没有重载operator=这个运算符,因此使用了默认的复制方式。默认的复制方式不会将指针指向区域内存的值进行复制,而是简单的复制了指针地址,也就是说虽然复制了一份bmp图像数据,但是在操作的时候修改的是同一块内存区域,导致前面的修改影响到了后面的读取。
解决方法就是自己重载operator=,把里面的指针全部用memcpy函数复制内存数据,这样才真正坐到了保留了一个副本。看来以后类的私有变量里有指针的都要考虑到这个问题啊。
前几天在手机上安装了Nokia Sports
Tracker,一直没有怎么使用过。回家了,照例晚饭后要去散步,就当测试一下这个软件好了。
开启软件以后,非常方便,可以直接选择New
Workout进行一向运动,然后可以选择运动种类、是否在线共享、是否自动记圈等功能,然后就可以开始了。在这个界面,程序已经开始搜索gps卫星了,准备开始以后,显示gps
fixed,就说明已经找到卫星,开始gps定位了。
程序开始的同时,也就开始散步了,不时拿出手机来看看,还可以知道已经走的距离,最近的平均速度(这个需要在设置里面进行设置),走的时间,还有走的路线。路线只有一条gps定位的行走路线,没有地图,这个不知道可不可以进行设置或者自行安装地图(只看见设置中可以设置地图种类,没有尝试过)。
回到家里,停止了这次workout之后,可以查看运动日记。里面完整的记录了本次workout的详细数据,包括了n张图和几张表格。里面可以看见路程、时间、平均速度、最高速度等参数,还有速度-时间图、速度-距离图、海拔-距离图等。还能够将数据上传到Nokia的网站上或者导出,导出的种类也有很多,貌似还可
前段时间一直在用google
code,大概了解了svn的使用方法(其实也没有怎么了解,因为使用了eclipse的svn插件,没有手动使用svn命令过)。想在家里的龙芯上也弄个版本管理软件,这样既可以控制平时写的软件的版本,同时也实现了对这些程序的备份。
以前在自己的电脑上搭建过svn服务器,所以这次想尝试一下搭建git的服务器。git是分布式的版本控制软件,因此本身没有很强的服务器概念。因此选择了gitosis这个软件。
安装这个软件非常方便,直接用apt-get就可以了,很久没有刷新软件源了,导致第一次安装没有成功,重新刷新一下就好了。安装完之后,按照http://en.gentoo-wiki.com/wiki/Gitosis这篇wiki的指示配置gitosis。不过其中有一点需要说明的是,debian安装的gitosis创建的组和用户都是gitosis,因此wiki上描述的远程路径帐户名都要改为gitosis。
在本地用ssh-keygen生成一对密钥对之后,把公钥上传到龙芯上,然后用那把公钥初始化版本库,这样我这台电脑就是这个版本库的拥有者了。初始化之后,就可以通过gitosis账户远程clone一个gitosis-admin.git版本库,里面有账户和代
spring使用中遇到的问题(2009-05-28 21:56)
使用springBind绑定的表单域有时会无法封装到绑定的类中,但是该值仍然可以通过request来获取。最奇怪的是,发生这样的情况后,作为controller中函数参数传入的BindResult对象已经有错(hasErrors为true,errorCount为1)。同样的Velocity模板,在有的功能上很正常,在有的功能上就出这样的问题,不知道Spring内部是怎样处理这种表单绑定为JavaBean的。现在只能用很恶心的方法来暂时修补,判断JavaBean中是否有值,没有的话,从request中获取过来放入Javabean中,同时,通过比较BindigResult中错误数量的变化来判断是否通过验证器验证。
spring使用中遇到的问题(2009-05-15 21:09)
-
控制器绑定链接的函数,里面的参数列表如果要用到BindResult(用于验证器验证后获取验证结果),这个变量必须紧跟在被验证对象(command)之后,否则在进行验证时会抛出异常。
-
如果在视图解析器(我们用的是velocity)中设置了属性exposeSessionAttributes为true之后,所有的session中的变量都会在传给视图(velocity模板)时被合并到model中。这时如果在控制器中使用了@sessionAttributes注解(会把session中指定的变量存到model中),在最后合并model的时候会报Cannot
expose session attribute 'xxx' because of an existing model object
of the same
name异常。查看了AbstractTemplateView.java文件后,发现spring在合并的时候还判断了allowSessionOverride这个属性,如果为false,就会抛出上面提到的异常。所以这种情况下,还要在配置文件的viewResolver中添加allowSessionOverride属性,value为true,这样即使遇到重复的值,也会直接使用Map中的put方法将旧值覆盖。
唉,项目规定要用oracle,我这种内存小、cpu主频低的电脑真的不太想用这个大型的数据库。
没办法,评审的时候可能要用到我的电脑,只能先把数据库配置好。
安装oracle还是非常方便的,因为opensuse有SUSE企业版的支持,官方提供了一个rpm包(orarun),安装了这个包之后,稍微修改一些环境变量,其他的内核参数都会自动修改。具体的安装方法在:http://en.opensuse.org/Oracle_on_openSUSE
运行了oracle之后(由orarun安装的启动脚本,可以在/etc/init.d/下运行oracle或直接使用rcoracle启动),所有的参数都会被修改,oracle用户和dba用户组都会被创建,只要在database/install/oraparam.ini中把认证的系统版本修改为自己的系统就可以了,具体的上面的网址上有介绍。使用oracle用户登录后,运行oracle安装程序后,所有中文会乱码,最简单的方法就是把oracle用户的语言设置为英文(export
LANG=us_EN),这样安装语言就变成了英文。
安装完之后,因为我建的默认数据库的sid和项目配置文件中的不同,所以准备新建一个数据库。还是要用oracle用户登录,使用dbc