http://blog.sina.com.cn/jljbabydragon[订阅]
个人资料
友情链接
banum

banum

Khotyn

黄挺

Santorini

小柴

分类
    内容读取中…
评论
读取中...
访客
读取中...
博文
      因为宽带是动态ip地址,而且用了路由器之后,电脑只能获得自己在子网的ip地址,无法获取到外网的ip地址,所以尝试着通过访问外网网页来获取路由器的外网ip地址。
      在网上找到了这个网页,它返回的html代码在body标签中只有访问者的ip,可以很方便的进行解析。下载的任务就交个了libcurl库,它是一个强大的下载库,支持很多不同的协议。根据官方的文档,能够很方便的将页面下载到内存中,而且正好只有body标签里面的数据,免去了字符处理的步骤。关键代码:
char *fetchIP(char *url)
{
char *IP = (char*)malloc(20);
CURL *curl_handle;

struct memStruct memHtml =
{ NULL, 0 };

curl_global_init(CURL_GLOBAL_ALL);
curl_handle = curl_easy_init(); //初始化curl句柄
curl_easy_setopt(curl_handle, CURLOPT_URL, url); //设置url
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUN
安装grub2(1.97beta2)(2009-09-07 08:50)
    曾经基本完成的LFS,上周五突然想到还没有尝试过grub2。无聊时,将以前安装的grub2卸载之后,重新安装,开始grub2的尝试过程。
    安装grub2很方便,如同别的GNU的软件一样,configure && make && make install。不过由于默认的prefix路径是/usr/local,所以在configure的时候修改prefix的默认路径为/usr。然而,grub2默认将grub.d安装在了eprefix/etc路径(默认和prefix相同),所以这样的设置会将grub.d文件夹(包含创建grub.cfg的配置脚本)放到/usr/etc里面。所以,最终我使用的命令是:./configure --prefix=/usr --sysconfdir=/etc && make && make install
    安装了grub的程序之后,最主要的是要生成一系列引导时要使用的文件。参考grub wiki的介绍,执行grub-install /dev/sdd命令,该命令会自动生成.mod文件并创建.img文件,最后写入硬盘的mbr中。不过因为刚开始安装的是grub1.6,它和grub1.7 beta2还是有点区别的。grub 1.6中的grub-install命令,接受的是分区的参数,既根分区所在的块文件(或者
    上次搭建了git平台以后,创建新项目的时候再次push会因为description没有设置而出错。后来看了一下,可以通过在配置文件(gitosis-admin.git里的gitosis.conf文件)中添加项目字段,修改项目的描述信息。如下:
 [repo newRepo]
description = brief description
owner = xxx
这样就添加了一个新的项目newRepo,项目的描述在下面的description字段中写上,这样.git文件里面就会有这个项目的描述(description)了。下面的owner可以说明了这个用户是项目的所有者。
    具体对git项目的配置,可以参考这个页面:http://www.mantisbt.org/wiki/doku.php/mantisbt:gitosis_management
使用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_r((const xmlChar*)(expr.c_str()), xpathCtx);
这样就会返回xpath对象的指针。
        关键就是如何处理这个对象。从API menu中可以看到xmlXPathObject结构主要包含了对象类型和节点集。一般的例子上都是直接获得节点集指针,然后来操纵节
芹菜卖糊烧?(2009-07-02 15:11)
       看了电视上的刀切面,今天心血来潮也想试试看。但是怕做不好,就做了两手准备,让妈妈买了肉饼,可以用来包饺子,弄饺子皮的本事还是有的。
        为了“健康饮食”,和面的水打算用芹菜汁。用搅拌机把芹菜弄碎,全部倒进面粉里。不过……由于只顾着弄芹菜汁,没有注意量,全部倒进去之后发现,水实在太多了。方便起见,前面刀切面和水饺全部推翻,改作“卖个头”<杭>。一边搅拌着面粉,妈妈开始重新准备原料——切南瓜。但最后还是发现水实在太多了,面太稀了,根本就粘不起来。
       只能使用终极杀手锏了。。。
奇怪的软件测试方式(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版本库,里面有账户和代