博文

目前显示的是 八月, 2006的博文

rich client的代价

nowadays,the web pages become richer and richer.
他们在客户端耗费更多的CPU和内存。
但是,这样却可以减轻服务器的负担。我们需要的是什么?
不仅仅是异步请求局部刷新,更多的是要,任何人,任何浏览器都可以正常的浏
览我的网页。(当然,w3m,lynx这些是永远都无法ajax化的,除非它们也变得richer and richer)

typename

不使用typename,怎么声明一个指向const char* 的常量引用?
也就是说,等价于
typename const char* cT;
const cT& ...

fterm

fterm似乎有很强的抗掉线能力。我这里无论用什么连接telnet都经常掉线
但是fterm除外

快被mysql搞死了

它没有外键的概念
它认为检查表的完整性很影响效率,这种麻烦事情可以交给用户自己去做.然后我要疯掉了
我现在已经几乎不敢用UPDATE方法
因为必须先检索以前的值然后清理掉所有依赖
然后再更新与其这样
我还不如分成两条
一条delete,一条insert,以提高复用减少代码量其实我一共不过9张表
可是我每次插入删除更新操作之前都需要做3-7次有效性检查
对于delete,update,事后还需要清理垃圾数据OMG~....

blogger.com还是不正常

打不开登录页面

写程序的时候养成好习惯,先写注释,后写代码

先把注释写好。
把接口和要做什么在注释中详细说明然后开始留一个空的函数body在那里。等把所有的函数都设计完后,
再开始填补代码

完了

不知道页面哪里出了问题.
占用CPU居然持续在40%以上

堆错误

把一个指针释放两次。
这样的错误很难发现的。
昨天调试了一整天,发现原来是有一个类的成员函数返回了一个指针,我把它释
放了一次,而它自己的destructor也把它delete了一次。
但是,这样的错误很难被发现。因为这个类不是我写的我不了解,而且即使释放
了两次,它在大多数情况下都能正常运行,偶尔不能而已。

怎么加快编译速度

代码一多,怎么加快编译速度就很成问题。我现在开始并不喜欢Makefile的根据后缀名的动态类型推导,因为我必须在CFLAGS和LDFLAGS中写入很多我其实并不需要的信息。我发现,编译速度缓慢很大程度上是因为需要链接的库过多。其次,便是由于Makefile写的时候依赖关系没有写好。例如某个头文件变动后,其实所有include 了此头文件的*.cpp文件都是应该重新编译的,但是我写的Makefile往往做不到这点。如果依赖关系没有写好,就往往得clean all,重新编译所有所要花费的时间是巨大的。如此来看,automake生的makefile的确是比我手写的要优秀的多,我得悉心学习

MSN Spaces to Blogger 搬家工具

http://www.coollittlethings.com/blogconverter/
反正我测试,从来就没成功过

我居然打开了http://www.blogger.com/

!!!!!!!!!!!!!!!
太神奇了!

自动编译本目录下的所有源文件

把每个cpp文件编译成一个exe文件.SUFFIXES:.cpp .o .c .exe .cpp.o: $(CXX) -c -o $(@D)/$(@F) $(CFLAGS) $\< .o.exe: $(CXX) -o $@ $\< $(LDFLAGS) ../libuserpriv.a SRC = $(wildcard \*.cpp)OBJ = $(SRC:.cpp=.o)EXE = $(SRC:%.cpp=%.exe) all:$(EXE) clean: $(RM) core $(OBJECTS) $(EXE)

今天遇到灵异事件了

一个网页,在我机器上用IE访问第一次访问的时候正常,第二次服务器的CGI就吐core关闭IE,再来第一次访问的时候正常,第二次服务器的CGI就吐core在firefox下访问正常,用wget访问正常换台机器,用IE访问一定吐core但是用Firefox访问就正常,一点问题都没有。再换台机器用IE访问一定吐core但是用Firefox访问就正常,一点问题都没有。

Senator智能的过头了

我发现我装了这个家伙后,居然不能在c-mode下搜索关键字,搜索int都不行
靠!

mew又一妙用

C-c , i
就可以
Isearch semantic mode enabled
不知道为什么,默认情况下我的emacs居然没有打开这个模式

唉...

我的很多类都是用宏定义的,然后给这些东西添加的注释就不能在doxygen中显示
出来了

今天一口气写了9个异常类

很简单,用宏定义#ifndef _EXCEPTION_H #define _EXCEPTION_H 1 #include <stdexcept> #include <iostream> #include <string> #define THROW(msg) do{ \ except err(__FILE__,__LINE__,__func__,msg); \ throw err; \ }while(0); #define THROW_1(msg,TYPE) do{ \ TYPE err(__FILE__,__LINE__,__func__,msg); \ throw err; \ }while(0); class except: publicstd::exception{ private: except() throw(); std::string errorMsg; std::string m_file; long m_line; std::string m_func; public: /*! \brief 输出详细的出错信息 */friendstd::ostream& operator<<(std::ostream& os,const except& ex){ std::ios::iostate state = std::ios::goodbit; /* const */std::ostream::sentry ok(os); if ( ok ) { try { os<<"文件:"<<ex.m_file<<" 行:"<<ex.m_line<<" 函数:"<<ex.m_func <<" 错误信息:"<<ex.errorMsg; } catch ( ... ){ try {os.setstate( std::ios::badbit ); } catch (...) {} if ( ( os.exceptions( ) & os.badbit ) !=…

这次换sohu的邮箱发

我相信不会有错了,呵呵
hello!

用mew发送邮件总是失败

Creating an SSL/TLS connection...done
Connecting to the
SMTP server...done
Sending in background...
SMTP connection is
lost

bug找到了

原来不是二维数组的问题,而是我在循环变量上犯了一点小错误<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><head><title>select</title><scripttype="text/javascript"src="/js/dojo/dojo.js"></script><scripttype="text/javascript"> dojo.require("dojo.event.*"); // sophisticated AOP event handling dojo.require("dojo.io.*"); // for Ajax requests functioninit(e){ loadSelectionValues("/cgi-bin/privmgr/mysql_tableList.cgi","mysql_tableList"); } dojo.addOnLoad(init); functionloadSelectionValues(dateUrl,selectName){ dojo.io.bind({ url: dateUrl, load: function (type,value,evt) { var i; var selectName0=document.getElementById(selectName); for(i=0;i!=value.length-1;++i){ selectName0.options[i+1] = new Option(value[i][0]); selectName0.options[i+1].value = value[i][1]; } …

唉……

原来javascript没有二维数组

动态载入下拉菜单的数据

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><head><title>select</title><scripttype="text/javascript"src="/js/dojo/dojo.js"></script><scripttype="text/javascript"> dojo.require("dojo.event.*"); // sophisticated AOP event handling dojo.require("dojo.io.*"); // for Ajax requests functioninit(e){ loadSelectionValues("/cgi-bin/privmgr/mysql_tableList.cgi","mysql_tableList"); } dojo.addOnLoad(init); functionloadSelectionValues(dateUrl,selectName){ dojo.io.bind({ url: dateUrl, load: function(type,value,evt){ var i; var selectName0=document.getElementById(selectName); for(i=1;i<=value.length;++i){ selectName0.options[i] = new Option(value[i][0]); selectName0.options[i].value =value[i][1]; } }, mimetype: "text/json", encoding: "GB2312" }); } functiontest(obj){ …

用oe写blog

字体和颜色都很容易设置

刚写个字符转换的函数

/*! \brief 将一个字符从一种编码转换到另外一种编码 * * \param \li \c val 要转换的字符。例如36229 * \param \li \c encTo 转换为什么编码格式,例如"GB2312" * \param \li \c encFrom val的编码格式。例如"UTF-16" * \return 转换的结果,例如"超" * */ std::string convChar(uint32_t val,const char* encTo,const char* encFrom){ iconv_t pt=iconv_open(encTo,encFrom); if(pt== (iconv_t)-1){ std::cout<<"iconv_open 失败"<<std::endl; } iconv(pt,NULL,NULL,NULL,NULL); uint8_t x[8]; uint8_t* p=x; *(reinterpret_cast<uint16_t*>(p))=0xfeff; p+=2; *(reinterpret_cast<uint32_t*>(p))=val; p+=4; *(reinterpret_cast<uint16_t*>(p))=0; const char * str=(const char*)x; char* out=new char[100]; size_t b=100; const char** in=&str; size_t lenin=sizeof(x); char* buf=out; int ret=iconv(pt,in,&lenin,&out,&b); if(ret){ std::cout<<"转换失败\n"; switch(errno){ case E2BIG: THRO…

iconv示例

#ifdef HAVE_CONFIG_H #include <config.h> #endif #include <iostream> #include <string> #include <iconv.h> #include <errno.h> int main(){ // iconv_t pt=iconv_open("GB2312","UTF-8"); iconv_t pt=iconv_open("UTF-16","GB2312"); if(pt== (iconv_t)-1){ std::cout<<"iconv_open 失败"<<std::endl; } iconv(pt,NULL,NULL,NULL,NULL); const char * str="好"; char buf[100]; char* out=new char[100]; size_t b=sizeof(out); const char** in=&str; size_t lenin=strlen(str); int ret=iconv(pt,in,&lenin,&out,&b); if(ret){ std::cout<<"转换失败\n"; switch(errno){ case E2BIG: std::cout<<"There is not sufficient room at *outbuf.\n"; break; case EILSEQ: std::cout<<" An invalid multibyte sequence has " "been encountered in the input.\n"; break; case EINVAL: …

庆祝wallop复活

哈哈!!!!

用gdb调试程序的时候字符串太长就不显示了怎么办?

例如
(gdb) p s
$2 = 0x80b34ac "SELECT count(*) FROM `Priv_UserInfo` left join Priv_UserRole u\
sing (UserId) left join Priv_RolePriv on ( Priv_RolePriv.RoleId = Priv_UserRol\
e.RoleId ) left join Priv_PrivInfo on (Priv_RolePriv.PrivId "...
最后我想出了一个很搞笑的解决方案
p s+100
哈哈
就是后100个字符了

今天人品比较差

Debugger segmentation Fault (core dumped)

wallop down了

"We're sorry, Wallop is temporarily down for maintenance. Check back soon!"

原来gcc不支持template typedef

template <typename T,typename T2> class A{ int a; }; template <typename T> typedefclass A<T,int> B; 不行啊
看来vc还是蛮先进的

getElementById的奇怪现象

我的一个div是通过dojo的ContentPane异步载入的。
载入的是另外一个html页面(其实只是一段html代码片段)。
我发现,在父页面中不能通过getElementById中查找子页面的对象。可能仅仅是因为子div是动态载入的。(其实事实上这仅仅是一个页面,而不想iframe是两个页面)
但是在div中可以访问父页面的全局变量。
然后更奇怪的是。
我把div中的table分成了thead和tbody两部分。
结果tbody中的元素即使在子div中也无法用getElementById访问。
无论是IE6sp1还是firefox1.5都是如此。

红色的windows media player

今天在公司的电脑上装了个windows media player 10 英文版,因为不是在微软的官方网站上下载的,不知道为什么,居然是红色的界面。
很不习惯