飘雪

C++博客 首页 新随笔 联系 聚合 管理
  31 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks

#

    刚才下载了一个软件,自带了一个man目录,里面有一些帮助文件,但没有提供makefile把这些帮助文件安装到usr目录。
    查了查man man,发现用“man -l manfilename”就可以查看帮助文件的内容了。
posted @ 2009-02-17 18:38 飘雪 阅读(837) | 评论 (0)编辑 收藏

     摘要: 最近在做嵌入式开发,这个嵌入式平台上,支持标准c库,但不支持mbcs,也不支持unicode。
对中文来说,通常有三种编码方案可供选择:
1. 用mbcs编码存储(gb2312/gbk/gb18030)。
2. 用unicode编码存储。
3. 用utf-8编码存储。  阅读全文
posted @ 2009-02-17 15:44 飘雪 阅读(2124) | 评论 (13)编辑 收藏

    Google Toolbar 5 for IE 出来已经有一段时间了,但for firefox的一直是beta版,所以我也一直没有升级。昨天刚好有闲,就下载下来试了一下。首先是google notebook被集成到toolbar里了,这样也好,省得我多装一个插件了。另一个新特性是“从任何位置访问工具栏设置”,这个功能的想法是相当好,当你换系统的时候始终保持同一个设置,但是发现在ie和firefox之间同步经常有问题,而且响应过慢,算是一个鸡肋功能,空有一个好想法,却没能做得完美。最不能忍受的是calendar按钮显示的样式改了,显示日程的时候经常要loading半天,最后还是什么都没load出来,不像以前,显示格式虽然简单,但是一目了然,速度很快。
    折腾了一个小时,最好还是换到版本3了,还是等Google Toolbar 5完善一下再升级好了。

posted @ 2009-01-16 11:12 飘雪 阅读(226) | 评论 (0)编辑 收藏

示例:
sudo mount -t cifs -o username=DomainName\UserName,password=YourPass //WindowsIP/ShareName /mnt
需要安装smbfs,同时要注意正反斜杠的写法和文件名的大小写
posted @ 2009-01-14 22:07 飘雪 阅读(251) | 评论 (0)编辑 收藏

    前两天试着用Windows Live Writer写博客,感觉微软的软件还是一如既往的好用,微软的确是桌面软件的霸主。但是呢,Live Writer终究是个客户端软件,对于我这样天天都要跨多台机器、跨多个操作系统的用户来说,桌面软件的局限性是显而易见的。我在公司两台机器,家里一台 机器,每台都是windows/linux双系统。比如我在公司写个博客,写了一半回家了,家里却没有这个文件的存档,无法再继续。又比如我在 windows下写了一半,因为工作需要换到linux下了,一会儿工作闲下来又想再写点,我总不能为了写个博客再切换一次系统吧。
    今天听说google doc也能写博客,赶紧试了一下,发现这正是我需要的东西。操作就不说了,跟Live Write类似。这里只说说他最合我心意的功能,第一个自然就是浏览器操作可以跨机器、跨操作系统,最适合我这种老要换系统的人了,第二个就是相当于把所 有的博客都在google存档了,我看了很多博客系统,很多都没有备份功能,而且google docs不用考虑系统崩溃、硬盘损坏、重装系统这些乱七八糟的问题。比较遗憾的是尚不支持同时发布到多个博客。
    感觉google真是互联网时代伟大的公司,想法就是跟微软这种桌面霸主不一样。我现在离不开的google产品或服务有:google reader,gmail,google calendar,google docs,google toolar,google notebook。
     一个小tip,访问google docs请用https,不要用http。不然等你写了一半,突然出现网页无法访问,可别怪我没提醒你呀。
posted @ 2009-01-14 17:19 飘雪 阅读(671) | 评论 (4)编辑 收藏

firefox里的dom没有xml属性,但是有XMLSerializer对象,可以用(new XMLSerializer).serializeToString(dom) 来输出xml的文本内容

posted @ 2009-01-10 22:43 飘雪 阅读(116) | 评论 (0)编辑 收藏

firefox里的onreadystatechange要全小写才可以,我记得以前IE里用的是onReadyStateChange啊,今天居然在firefox下不行,弄了半天,原来要全部小写,奇怪呀。
posted @ 2009-01-10 22:13 飘雪 阅读(679) | 评论 (0)编辑 收藏

    最近谷歌金山词霸用得很不爽,听说有道词典做得不错,今天下载了个试试。有道有个生词自动同步到服务器的功能,赶紧填上用户名密码测试一下,结果老是说用户名密码不对,我就奇了怪了,自己的密码还能记错啊。只好来到网易通行证的注册页面,重新注册一个吧,填上自己的老用户名,结果显示此用户名可用,看来原来的老帐号果然是被网易删了。
    算来我也是网易免费邮箱的第一批用户了,最近是有段时间没用,帐号就这么被删了,它的注册页面也没有说帐号多长时间不活动就删除呀。你丫太狠了,还好我没存什么重要东西在里面。
   

posted @ 2009-01-09 15:53 飘雪 阅读(618) | 评论 (7)编辑 收藏

    我平时上班时喜欢在线听个收音机。当然了,网页版的在线收音机不考虑,因为总要打开一个网页,经常一不小心就关了。以前用过龙卷风收音机,但是经常关闭程序之后进程不结束,而且它自带的电台地址都不公开,看着心烦。作为一个firefox的忠实用户,自然希望用一个firefox扩展来实现收音机功能。在Firefox Add-ons网站上找了找,还真有这么一个插件,其中的收音机功能能够满足我的需求,但它带了太多的私货,有天气预报、rss阅读,尤其是带了一个搜索框,还不能关掉。本来firefox已经自带了一个搜索框,我装的google toolbar上也有一个,再来一个搜索框,整个界面没法看了,最终还是放弃了这个插件。
    身为一个刀客...咳,错了,身为一个Geeker,这种情况下自然别无选择,只好自己动手了。虽然以前并没有做过firefox的扩展,不过我想这应该难不倒一个Geeker。
    首先自然是来到mozilla的关于扩展/插件开发的官方网站Extension development,文档不错,大致看了看,很简单嘛。说起来就是用XUL定义界面,用javascript响应事件,然后用几个配置文件把这些串起来。XUL可以现学现卖,不行咱还可以从别人的扩展抄嘛,javascript自然不在话下,虽然很久没看过了,写几个简单函数那还不是小菜。网站上有现成的Tutorials,不到半小时,一个界面雏形连带基本的事件响应就出炉了。界面很简单,播放、停止、音量按钮各一个,再加一个选台框和一个信息显示栏。
     接下来就是收音机功能了。思路照样也很简单,用javascript创建一个Media Player对象,然后用这个对象播放mms流就可以啦,核心代码就几行:

var url ="";
var wmp = new window.GeckoActiveXObject('{6BF52A52-394A-11d3-B153-00C04F79FAA6}');
wmp.url 
= url;

    写完收工,马上测试,我靠,见鬼了,GeckoActiveXObject出错,错误是:uncaught exception: [Exception... "Unable to create an instance of the desired COM classCOM Error Result = 80004005"  nsresult: "0x80570039 (NS_ERROR_XPC_COM_CREATE_FAILED)" 。又仔细检查了一遍代码,没错呀,应该就是这么写的。
    这下可真成卡门了,我迷迷糊糊觉得这应该跟权限、策略设置什么的有点关系,可是不知道从哪儿下手,google上翻了一圈,也没找到点建设性的意见。没办法,又打开我装的其他扩展,看别人是怎么搞的,其中一个跟我想要的功能类似的一个扩展,光js文件就有4万多行,UltraEdit打开都一顿一顿的,也看了一遍,还挑出其中的代码测了一下,都不行。在这儿就卡了一下午,只好翻别人的插件,希望能找到点头绪。最后还真翻出来点东西,在一个插件下发现有components目录,里面有两个文件,npmozax.dll和nsAxSecurityPolicy.js,从文件名看起来似乎跟安全策略有关,打开看了看,没啥特别的,一不做二不休,把整个components目录拷到自己的目录下,试了试,嘿嘿,行了。真是柳暗花明又一村啊,我觉得关于安全策略之类的mozilla的网站上应该会讲到吧,也许是我不仔细,没有找到,但是居然用拷贝两个文件的方法解决了,具体原理以后有时间再看吧,先能用再说。
    最后,秀一下我纯手工打造的收音机,虽然目前难看了一点,但是能用,以后有空再改得好看点
 

    今天光搞这个该死的权限就用了一天,工作进度落下一大截,明天一定好好工作。

posted @ 2009-01-08 23:54 飘雪 阅读(2059) | 评论 (8)编辑 收藏

    改进log4c的时间戳结构:

    log4c里对于事件时间戳的定义是这样的:
1 #ifndef _WIN32
2     struct timeval evt_timestamp;
3 #else
4     FILETIME evt_timestamp;
5 #endif
   
    这个不用说是很恶了,存的是各个平台的api得到的原始时间,格式化的时候还要按不同平台写不同的格式化代码,而我们输出日志的时候通常是按年月日时分秒的结构来输出,存一个通用的结构更好,time.h里就有一个比较好的结构struct tm, 可以使用gmtime或localtime来得到。

 1 struct tm {
 2         int tm_sec;     /* seconds after the minute - [0,59] */
 3         int tm_min;     /* minutes after the hour - [0,59] */
 4         int tm_hour;    /* hours since midnight - [0,23] */
 5         int tm_mday;    /* day of the month - [1,31] */
 6         int tm_mon;     /* months since January - [0,11] */
 7         int tm_year;    /* years since 1900 */
 8         int tm_wday;    /* days since Sunday - [0,6] */
 9         int tm_yday;    /* days since January 1 - [0,365] */
10         int tm_isdst;   /* daylight savings time flag */
11         };

    时间精确到秒,而且可惜的是,这些函数的跨平台性不够好,windows ce上就没有,所以定义一个通用的时间结构如下:

 1 typedef struct 
 2 {
 3     int tm_milli;   /* millisecond - [0,999] */
 4     int tm_sec;     /* seconds after the minute - [0,59] */
 5     int tm_min;     /* minutes after the hour - [0,59] */
 6     int tm_hour;    /* hours since midnight - [0,23] */
 7     int tm_mday;    /* day of the month - [1,31] */
 8     int tm_mon;     /* months since January - [0,11] */
 9     int tm_year;    /* years since 1900 */
10     int tm_wday;    /* days since Sunday - [0,6] */
11     int tm_yday;    /* days since January 1 - [0,365] */
12 } log4c_common_time_t;

    跟struct tm相比,增加了一个tm_milli,因为依赖平台相关api的话,可以取到更精确的时间。这样输出的时候把它的fields格式化就可以了。

    接下来就是取当前时间戳的函数来,跟平台相关,支持struct tm,localtime的版本如下,精度为秒:

 1 void xp_gettimeofday(log4c_common_time_t* p,void* reserve)
 2 {
 3     struct tm tm;
 4     time_t t = time(0);
 5     tm = *localtime(&t);
 6 
 7     p->tm_hour    = tm.tm_hour;
 8     p->tm_isdst   = tm.tm_isdst;
 9     p->tm_mday    = tm.tm_mday;
10     p->tm_milli   = 0;
11     p->tm_min     = tm.tm_min;
12     p->tm_mon     = tm.tm_mon;
13     p->tm_sec     = tm.tm_sec;
14     p->tm_wday    = tm.tm_wday;
15     p->tm_yday    = tm.tm_yday;
16     p->tm_year    = tm.tm_year + 1900;
17 }

    Windows CE使用的版本如下,精度为毫秒,当然windows也可以使用:

 1 void xp_gettimeofday(log4c_common_time_t* p)
 2 {
 3     SYSTEMTIME time;
 4     GetSystemTime(&time);
 5     p->tm_milli    = time.wMilliseconds;
 6     p->tm_sec    = time.wSecond;
 7     p->tm_min    = time.wMinute;
 8     p->tm_hour    = time.wHour;
 9     p->tm_mday    = time.wDay;
10     p->tm_mon    = time.wMonth;
11     p->tm_wday    = time.wDayOfWeek;
12     p->tm_year    = time.wYear;
13 }


posted @ 2009-01-05 11:32 飘雪 阅读(1457) | 评论 (1)编辑 收藏

仅列出标题
共4页: 1 2 3 4