2009年12月23日星期三

取出一个文件夹中所有非源码的文件

 ls ./*.[^c,h]*

一个简单的正则,取出所有不是用c或者h开头,并且后缀是一个或者多个字符的文件,一般就是 .o文件, .la文件, .lo, .y文件这些编译的中间文件.



--
caosuwei

2009年9月29日星期二

秒表

我的诺基亚手机没有秒表,总要找同事借,干脆自己写了一个


精度是 microsecond


#include <iostream>
#include "boost/date_time/posix_time/posix_time.hpp"

using namespace std;
using namespace boost::posix_time;

int main(void){
    ptime start, suspend;
    start = microsec_clock::local_time();
    while(getchar()){
        suspend = microsec_clock::local_time();
        cout<< suspend - start<<endl;
    }
    return 0;
}

然后

g++ timer.cpp -o timer.exe -Ie:\boost_1_39_0\ -O2 -Wall

2009年9月1日星期二

asio中的同步读写操作

写了个利用sina的股票接口读取实时股票信息的程序,练习一下boost::asio的使用.
现阶段我用到的只是里面最简单的同步读写接口,异步方面的还用不上.
当时主要是卡在了asio::read, asio::read_until, ip::tcp::socket::read_some这几个读操作上面了.
最初我是直接把asio::read放到一个while循环里面
while(boost::asio::read(connfd, response_, boost::asio::transfer_at_least(1), error)){
......
}

一直读到无数据可读为止.
后来看到那个可怜的文档里面还有一个completion condition叫transfer_all(),可以不用循环一次读完数据
boost::asio::read(connfd, response_, boost::asio::transfer_all(), error)
但是这两种都会在判断"至少还有一个字节",或者"读完所有"上面等待很长时间.去邮件列表问了,也不知道为什么.只好换一个方法.
还有一个read_until,但是我要读的是个http包,没办法知道最后要读到什么限定符为止.
ip::tcp::socket类有个成员方法是read_some,用来读指定字节的数据.
我最终的方法是用read_until读完全部的http头,取得后面http包的字节数.然后就能用read_some读取指定字节数了.
但是这地方有个问题.
read_until读取的数据要比指定限定符位置的更多.调用完read_until之后需要把读取出来的限定符之后的数据都倒出来,
放到read_some里面的Content-Length参数也需要减去相应的字节数.因为这部分数据已经在read_until操作中读出来了.
处理完数据,取好剩余字节长度,就可以调用read_some了.

2009年7月30日星期四

D-Link DI-524M无线路由不好用

这个无线路由一点都不好用,设置不方便,无线信号不稳定.就我用过的tp-link的和
netgear的来说,d-link的是最差的.你们想买的人还是三思吧
--
caosuwei <caosuwei@gmail.com>

2009年7月29日星期三

asio::read && asio::write

这两个函数的参数中,read使用的是满足MutableBufferSequence的类型, 而write
使用的是满足ConstBufferSequence的类型
而boost::asio::buffer(const std::string &str)返回的是一个const_buffer_1
的类型,这个是个ConstBufferSequence, 也就是说,
std::string response;
count = boost::asio::read(connfd, boost::asio::buffer(response));
这样的语句是无法通过编译的.
变通的办法就是
std::vector<char> vec_response;
count = boost::asio::read(connfd, boost::asio::buffer(vec_response));
Asio中给出的例子也正是这样用的.
但是,为什么boost::asio::buffer(const std::string &str)要返回
const_buffer_1呢?
--
caosuwei <caosuwei@gmail.com>

2009年7月8日星期三

Debian上的ps命令

在Debian上用ps -aux会出一个警告:

Warning: bad ps syntax, perhaps a bogus '-'? See
http://procps.sf.net/faq.html

以前一直没有注意这个警告,今天查了一下man,上面是这样解释的:

ps -aux 和 ps aux是不一样的,POSIX和UNIX标准上,ps -aux是打印出所有属于
username是"x"的用户的进程.如果这个用户不存在的话,作为一个兼容手段,再按照
ps aux执行,并且打印出一个警告信息出来.

$ ps --version
procps version 3.2.7

2009年7月7日星期二

boost::asio的处理模式

今天看了看boost::asio里面附带的几个示例程序.主要是chat那个.

大概了解了点asio的处理这类类似协议解析事件的方法.

解析协议的处理方法,一般做法就是写一个状态机.类似于lighttpd中处理连接的connection_state_machine(),定义了一系列的状态,处理完一段就切换到另一个状态,直至连接终止.

在asio中,对每个异步的调用,比如boost::asio::async_write(), boost::asio::async_read(),函数签名中都有一个handler参数,指定在异步调用完成之后的后续处理.

示例代码中就是在这个参数中指定下一步的处理函数,来完成状态的转换.

2009年6月26日星期五

boost::thread和boost::bind的用法

本来我是这么用的:
class A{
public:
    void do_something(int a){
        cout<<a<<endl;
    }
};

A a1;
A a2;
boost::thread t1(boost::bind(&A::do_something, a1, 1));
boost::thread t1(boost::bind(&A::do_something, a2, 2));

但是这段代码在MinGW g++ 3.4.5上面怎么也编不过.

换个用法:
class A{
    void do_something(int a){
        boost::thread t1(boost::bind(&A::do_something, this, a));
        t1.join();
    }
};
A a1,a2;
a1.do_something();
a2.do_something();
这样写就ok,奇怪,到底是哪个参数写错了?? --
caosuwei

2009年6月22日星期一

strcpy用错了

今天用strcpy的时候犯错误了.
strcpy(&buf[2], buf, 5);
这样出来的结果并不是预期的.

其实以前也遇到过这个问题,但是今天写程序的时候还是写错了,出了bug才想起来这个.还是记下来吧.

--
caosuwei

2009年6月21日星期日

今天google map 总是出错

明明是在这个地方,却总是说我在北理工校园里面
要是就是根本找不到我的位置。
google又出啥问题了??

2009年6月13日星期六

周末在家无聊

上午去了趟北医三院,7点到的,天,排队的就已经到了看不到队尾的程度了,空气污浊,人声嘈杂。最囧的是等排到我的时候,挂号窗口就挂出了免战牌:"运动医学全天已满"。
没办法,又晕头晕脑的坐公交回来。等车的时候还碰着一个医托,问我:"没挂上号吧?"
我:"是啊,人太多了。"
托:"你挂什么科?"
我:"运动医学"
托:"恩,我也是啊,什么毛病?"
我:"脚踝,老毛病了"
托:"恩,我也是啊"
这时候我就又点怀疑这人干吗的了,就随便敷衍了他几句,然后他开始给我推荐什么什么医院好,从哪儿坐车。md,果然是个托,就没理他,走开了。
他们这样是靠什么赚钱呢?
(照片和内容无关)

2009年6月4日星期四

在vs2008里面配置qt环境

在vs2008里面配置qt环境
用VC编译完QT之后有个qmake,可以用来生成makefile,这个能用在gcc或是mingwm上
面.如果加上-t vcapp 就能生成.dsw文件,能用vc6.0以上版本打开.
用法如下:
qmake -project -t vcapp
qmake
就ok了.

但其实这个东西完全可以自己设置一下,也算了解一下Qt的程序是怎么编译出来的.
在工程的属性里面加上相应的
Additional Include Directories 加上
Qt\include\QtCore;Qt\include\QtGui;Qt\include,
c/C++->Perpreocessor->Preprocessor Definitions里面加上
_WINDOWS;UNICODE;QT_LARGEFILE_SUPPORT;QT_DLL;QT_GUI_LIB;QT_CORE_LIB;QT_THREAD_SUPPORT;WIN32
linker->General->Additional Library Directories里面加上Qt\lib,
linker->Input->Additional Dependencies里面加上 Qt\lib\qtmaind.lib
Qt\lib\QtGuid4.lib Qt\lib\QtCored4.lib

以上这些都能在demo里面找到例子,和一般的库的添加过程一样,如果有错都能自己
对照着改正过来.
但其实qmake做的一件最重要的事情是下面这个.
在处理Q_OBJECT宏的方式上,Qt其实是在qmake生成的makefile里面调用了Qt\bin\
moc.exe
默认的处理方式是对包含Q_OBJECT宏的aa.h文件进行处理,生成一个moc_aa.cpp
如果自己配置,就要在这个包含Q_OBJECT宏的aa.h的属性里面加一个Custom Build Step
Custom Build Step->General->Command Line里面加上 moc $(InputFileName) -p
../ > moc\moc_$(InputName).cpp
Custom Build Step->General->Outputs里面加上moc_$(InputName).cpp
这两个文件名可以自己定义.

------------------EOF---------------EOF------------------

2009年5月25日星期一

金山词霸容易把firefox搞死

装了个金山词霸2009,驴子上拖下来的.
本来看中的就是这一版的能在firefox上取词,但是实际上用的时候发现,经常在屏
幕取词的时候会把firefox搞到不能动,甚至直接就挂掉了.
不过其他程序上,取词的速度要比以前的2003快多了,反应很灵敏. :-D

2009年4月17日星期五

ascii的规律

今天看代码,发现这个函数

int light_isalpha(int c) {
c |= 32;
return (c >= 'a' && c <= 'z');
}

才知道ascii码表原来是这样排列的
a-z 是 0110 0001 -- 0111 1010
A-Z 是 0100 0001 -- 0101 1010
大写转小写:
c |= 32
小写转大写:
c &= 223
可是,这样有什么用呢?
--
caosuwei

2009年4月6日星期一

买书

下午在家呆着无聊,去五道口转了转,在光合作用呆了两个多小时,乱翻书.本来想买的书没有买到,倒是看中了一本<隐蔽的秩序>
封面
吃饭的时候看了几页,其实也算是一本对历史的现代解读,很有意思.
========================================================================================
天气热了,建议大家多去五道口转转 :)

2009年4月5日星期日

别人的qmd

音乐雄壮如涛,七点准时播报。时间可以对表,不差一分半秒。
主播堂堂相貌,口若悬河滔滔。首先亮相领导,实践三个代表。
公仆言传身教,屁民上行下效。形势一篇大好,到处红旗飘飘。
偶有少许干扰,群众不屈不挠。寄语港台同胞,祖国佛光普照。
再把外国嘲笑,情况混乱糟糕。欧美上街胡搞,亚非炸弹乱爆。
最后天气预报,顺便插些广告。毕竟市场大潮,央视也要钞票。

2009年4月4日星期六

老BlackzBerry 7290

用了两年了的一个老手机,能上网,但我从来没有折腾过,没摄像头,一切娱乐功能一概没有。
但是打电话,发短信这样的东西却是我见过做得最好的

2009年4月3日星期五

还是不行

一般跟人说话或者通过网络聊天的时候,我随口,随手,出来的都是各种口语,方言词汇
但是唯独跟她,我得字斟句酌,仔细理清条理,明确因果关系,确保没有逻辑上的,语句上的,字词上的,任何的,错误.

--
caosuwei
Sent from Hong Kong, Hong Kong Sar China

2009年4月1日星期三

awk的简单应用

用awk做简单统计工作
举个例子来说,查看当前服务器上登陆的人,分别登陆了几个终端
就可以这样用
finger | sort -k1 |    awk -v name=0 -v count=0 '{if($1!=name){name=$1;print "["name"]";count=1}else{count=count+1}print $3;print ":"count}' > result
-v参数是用来定义变量并初始化的
awk的主程序要用单引号' '引起来
print好像是会自动flush的,一个print就是一行
print字符串的时候用""引起来
 
这个程序只有是sort过之后才会有正确的结果


--
caosuwei
Sent from Wanchai, Hong Kong Sar China