蜗牛从了生活
歪酷博客
日历
网志分类
· 所有网志
· 计算机技术
· 琐碎
· 育儿记录
最新的评论
· 07/05 上海“土著人”...
· 05/31 淘宝上买的,为...
· 05/31 终于入手啦,g...
站内搜索
Google Book Search

友情链接
· 歪酷博客
· 管理我的Blog
· 一步步前行
· 江南西道
· 村里的考拉
· 人生若只如初见
· wisefang的博客
· 天亮说晚安
· My Photos on Flickr
· My Videos on Youtube
· 我的共享界面
· sourceforge.net
· Java开源大全
· 瘾科技
· 与donews交换链接
我的豆瓣秀
· 最近在读...
· 最新想读...

订阅 RSS

0069616

歪酷博客

这山望着那山高
蜗牛从了生活 @ 2009-06-22 17:09

中介指定上海农商银行作为公积金贷款银行,今天下午我提前去办存折,结果发生了不愉快的事情。
银行里人不是很多,我拿的号前面就10个人,不过这家农民经商银行单线程服务客户,办理私人现金业务就一个窗口。
这下有的等了,轮到我时已经过了半小时,我有点不耐烦了。
因为办折和卡要填两张单子,那位姐姐让我先到旁边去填。
填好核对无误后,我就在边上等着,结果被人插了一队,我忍了。
后面一人又想插队时,我眼疾手快见缝插针把我的单子递了进去。
结果,我听到那人在骂:册那娘个×!
我不忍了,我问他:你骂谁呢?
他说:我骂你那(?)(!)
这时误解出现了,他是带问号的,意思是“我又不是骂你”;我是带感叹号的,我理解成“我就是骂你”。
然后外表善良的我不顾读书人的脸面和他对吼起来。
吼着吼着我听明白他说他在骂银行,那我就不做声了。
我不做声之后,那人继续发表着不满,跟他老婆说要把钱都取出来,和农民经商拜拜了。
当时围观群众无数,保安也过来劝解。
他老婆和保安劝他消消气,我忍不住跟他道个歉,说我没听清楚(虽然我相信他心里还是带点骂我的意思的)。
办完存折还让我给姐姐的服务打分,我就楞没找到给等待时间打分的地方。
临走保安跟我点头说你办好啦,我解释了下:等待时间太长,谁心里都有火。他表示同意。



 
蜗牛从了生活 @ 2009-06-16 17:21

周二水族馆半价,我们今天带儿子去看了大鲨鱼。
水族馆里人还是一如既往的多,比水池拥挤多了。
用傻瓜机拍照也挺不适合,不打闪光灯人是黑的,打了闪光灯背景是黑的。
没看到喂食海豹和企鹅,看到了蛙人喂一群小鱼。通过圆拱看上去,蛙人显得很小,是不是鲨鱼们通过圆拱看出来,人咋那么大呢?
儿子骑上了北极熊,那儿没用铁锁围着,应该让小孩骑吧?
水族馆骑北极熊 
一段视频,父子上场。


 
蜗牛从了生活 @ 2009-06-05 14:31

据说今天是晴转多云的天气。
据说天气预报的准确率达80%以上。
我猜明天的天气和今天一样,一年下来准确率也有个80以上。

参考上海出现持续半小时的雨夹冰雹天气(组图)


 
蜗牛从了生活 @ 2009-05-30 21:33

房子也买不到,偶只能打打游戏麻痹自己:(
PC方向盘


 
蜗牛从了生活 @ 2009-05-26 20:56

晚上看到某电视台播出一则广告:墙上画的是人类从猴进化成人的过程,也是从半蹲到直立的过程,一男的本来是直立着走路,碰到卖盗版的便蹲下身去,又变成了猴子。
买盗版的就是只猴子。怎么像是一种歧视。


 
蜗牛从了生活 @ 2009-05-09 00:33

换子疑云》:
谁和差佬作对,谁就是精神病。你不认还不行。你不认,20年代的洛杉矶精神病院给你喂药给你通电,60年代的疯人院再给你切除额叶。你认了,你合该在那儿呆到没有危害再出来。这招,挺好的,我们一直用它。

午夜巴塞罗那》:
Vicky就是个贱人。终于被人搞了一次之后,人又不给她电话,失落了。
Cristina就是个蠢货。什么都尝试,什么都不是自己想要的。
Elena就是个疯子。不是在街上打架就是在床上3P。
Judy就是个王婆。自己奸情被人发现后,就极力怂恿别人制造奸情。
Antonio就不说了。就像那些待在一夜情QQ群里的人。
Woody就是Antonio他爹,年纪这么大了,还老做和Elena。。。春梦。
总结:基本上是一件蝇营狗苟男盗女娼的事。


 
蜗牛从了生活 @ 2009-04-03 15:16

一有电话,儿子总是抢着要接,所以早想给家里换个免提电话机。前两天在dd上下了单,订了一本书、一副耳塞和一部中诺C099电话机。这部话机图片看着挺漂亮,免提的按钮也很明显,LCD屏幕够大,都中我的意。今天到货一试,“免提”状态下能听到对方的声音,但对方听不到我的声音。折腾半天没搞出什么名堂,就拨了中诺的售后电话。不知道是不是中午休息,电话一直拨不通,两点钟的时候终于接上头了,对方告诉我说这个型号的话机没有免提【送话】功能。我恍然大悟了一下,dd网页上的介绍确实没有说它是免提的,这才明白“自以为是”免提的含义。算了,将就着用用了。
题外:这个话机没有电池LCD也能工作,只是少了部分功能。我去楼下买电池的时候,问老板有没有五号电池,然后看着这些电池的个头觉得似乎7号的更合适,买了3节。付钱的时候老板还提醒我这是7号的,我说我就要这般大小的。回来一装,如同苍蝇戴豆壳,小了。只好再跑一趟。



 
蜗牛从了生活 @ 2009-03-29 22:55

兄弟我要将项目迁移到C++Builder2009上目前还有两个障碍:1. VCLSkin5,2. log4cpp1.0支持Unicode。
今天又搜了一把vclskin的破解,出来一个新的破解工具(没破解时窗口标题总是显示"VCLSkin Demo"),在c++builder中导入破解控件后,每次拉VclSkinData控件时也拉一个crack控件。试了一下,英文标题和长度超过5个汉字的中文标题,末尾会被截断。不满意。
log4cpp1.0是不是支持Unicode,不知道。参考了徐明刚(浅谈log4cpp接口字符串参数类型的设计)的意见,修改了CategoryStream.hh。

// 将 宽字节wchar_t* 转换 单字节char*
inline char* UnicodeToAnsi( const wchar_t* szStr )
{
  int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );
  if (nLen == 0)
  {
   return NULL;
  }
  char* pResult = new char[nLen];
  WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
  return pResult;
}
//----------------------------------------------------------------------------------

/* 为UnicodeString特化 */
#if LOG4CPP_HAS_WCHAR_T != 0
//  template<typename T>
  CategoryStream& operator<<(const String& t) {
   if (getPriority() != Priority::NOTSET) {
    if (!_buffer) {
     _buffer = new std::ostringstream;
     //if (!(_wbuffer = new std::wostringstream)) {
      // XXX help help help
     //}
    }
    char* p = UnicodeToAnsi(t.w_str());
    (*_buffer) << p;
    delete [] p;

   }
   return *this;
  }
#endif



 
蜗牛从了生活 @ 2009-03-18 17:47

手头在写的几个VCL程序都使用log4cpp 1.0记录日志,其中有一个要求将日志写入Rolling File和一个VCL控件(TRzMemo)。
有两种思路:一是重定向std::cout到VCL控件,二是自己写一个log4cpp的Appender。
将std::cout重定向到文件比较简单:
  std::ofstream log("foo.log");
  std::streambuf *oldbuf = std::cout.rdbuf(log.rdbuf()); 
  std::cout << "This will output to file" << std::endl;
  std::cout.rdbuf(oldbuf);   // 还原
将std::cout重定向到VCL控件就比较麻烦,需要将std::basic_streambuf子类化,重写overflow函数,以下代码可以将数据逐行输出到TRzMemo中: 
#ifndef MemoBufferH
#define MemoBufferH 
                        
#include "RzEdit.hpp"
#include <streambuf>
//---------------------------------------------------------------------------
/*
 * 流缓冲子类:逐行输出到TRzMemo
 * 将标准输出重定向到TRzMemo的使用方法:
 * 程序启动时,写下:
 * TMemoBuffer *MemoBuffer = new TMemoBuffer(memMessages);
 * streambuf *outbuf = std::cout.rdbuf(MemoBuffer);
 * streambuf *errbuf = std::cerr.rdbuf(MemoBuffer);
 * 程序退出时,写下:
 * std::cout.rdbuf(outbuf);
 * std::cerr.rdbuf(errbuf);
*/
class TMemoBuffer : public std::streambuf
{
public:
 TMemoBuffer(TRzMemo* mem) : Memo(mem), Pos(0), BufferSize(128)
 {
  Buffer = new char[BufferSize];
 }
 ~TMemoBuffer()
 {
   delete [] Buffer;
 }
protected:
 // central output function
 virtual int_type overflow(int_type c)
 {
  if (c != EOF)
  {
   // 缓冲区不够用时,自动增长
   if(Pos >= BufferSize)
   {
    BufferSize *= 2;
    char* OldBuffer = Buffer;
    Buffer = new char[BufferSize];
    memcpy(Buffer, OldBuffer, BufferSize / 2);
    delete [] OldBuffer;
   }
   // 遇到行尾时输出到Memo
   if(c == '\n')
   {
    Memo->Lines->Add(AnsiString(Buffer, Pos));
    Pos = 0; // Pos指向第一个位置
   }
   else   // 否则,添加到缓冲区
   {
    Buffer[Pos++] = c;
   }
  }
  return c;
 }
private:
 TRzMemo* Memo;    // 输出到此Memo
 char* Buffer;    // 行缓冲区
 int Pos, BufferSize;  // 缓冲区当前位置和长度
};
#endif
现在可以很好地将std::cout重定向到Memo中了。不过与log4cpp配合时却出了问题。
我的log4cpp通过配置文件来驱动,配置文件中有两个Appender:ConsoleAppender和RollingFileAppender。
后者可以正常工作,这里按下不表,前者却没法重定向到Memo中。
查看了PropertyConfiguratorImpl.cpp的内容,在构造ConsoleAppender时实际上是生成了OstreamAppender的实例:
appender = new OstreamAppender(appenderName, &std::cout);
而OstreamAppender在处理输出时调用如下代码:
(*_stream) << _getLayout().format(event);
这里的_stream指向std::cout。
按道理这里做的事情也就是std::cout << “something”;但不知道为什么我的TMemoBuffer::overflow没有被调用。

折腾一阵找不出原因,觉得尝试第二种思路。
编写了一个TMemoAppender : public LayoutAppender,在virtual void _append(const LoggingEvent& event);中将数据输出到TRzMemo中。这么使用TMemoAppender,log4cpp::Category::getRoot().addAppender(new TMemoAppender("name", memPointer));。
编译顺利通过,但程序运行时却怪样迭出:在毫不相关的代码处出现EInvalidPointer异常,或者程序运行到某一步就停住了,程序主窗口也没有显示。
又折腾一阵,还是找不出原因。还是采用第一种思路,但不用配置文件,而是由程序来初始化log4cpp。使用OstreamAppender将数据输出到std::cout。居然成功了,依然找不出原因,代码如下:
 // stdout输出重定向到Memo
 TMemoBuffer *MemoBuffer = new TMemoBuffer(memMessages);
 outbuf = std::cout.rdbuf(MemoBuffer);
 errbuf = std::cerr.rdbuf(MemoBuffer);

 // 配置Log4cpp,通过OstreamAppender输出到std::cout(进而由TMemoBuffer重定向到Memo),
 // 通过RollingFileAppender输出到RollingFile
 // 注意:这里不使用配置文件
 log4cpp::Category::getRoot().setAdditivity(false);
 log4cpp::Category::getRoot().setPriority(log4cpp::Priority::DEBUG);

 log4cpp::PatternLayout *Layout = new log4cpp::PatternLayout;
 Layout->setConversionPattern("%d [%-5p] %m%n");

 log4cpp::OstreamAppender *osAppender = new log4cpp::OstreamAppender("OstreamAppender", &std::cout);
 osAppender->setLayout(Layout);
 log4cpp::Category::getRoot().setAppender(osAppender);

 log4cpp::RollingFileAppender *rfAppender
  = new log4cpp::RollingFileAppender(
        "RollingFileAppender",
        (gBaseDir + "log\jstMockX.log").c_str(),
        100000,       // maxFileSize
        5);             // maxBackupIndex
 rfAppender->setLayout(Layout);
 log4cpp::Category::getRoot().addAppender(rfAppender);




 
蜗牛从了生活 @ 2009-02-27 23:19

我以前用电动剃须刀的时候,儿子常要拿去装样剃几下,有次居然伸出舌头来舔,剃出了几个血点点。那把电动的后来越来越钝,我便换成吉列锋速3。前两天儿子又拿去玩,我忙着上网也没在意,忽然看到剃刀上有黑红色的东西,开始还以为是刀片生锈了,很快猛的想起是不是儿子又在刮胡子了。扳过儿子的小脑袋一看,果然下巴上血淋淋地,我的肾上腺素一下子上来了。赶紧拿餐巾纸给他擦,本来没哭的,擦着疼哭了。又剪了点医用纱布给他擦,还好只有浅浅的三四道痕子。后来问他还要不要玩剃须刀,他连连摇头说不要了。不过到了睡觉的时候,他又高高兴兴地给自己剪起指甲来了,指甲刀夺也夺不下来。
附:儿子要求包扎伤口,我给他拍照留念。
刮胡子受伤了