Saturday, September 29, 2007

Read book: Think like a manager

Read this book:

 

Think Like a Manager: Everything They Didn't Tell You When They Promoted You (Paperback)
by Roger Fritz

Tuesday, September 25, 2007

C++ 风格及流派

我确实没有见过哪一种语言能像C++这样,在代码风格方面表现得如此诡谲和难以捉摸:谁也说不清C++代码究竟能衍生出多少种迥异的风格,但我知道,有许多C++初学者在面对不同风格的C++代码时,经常会误以为自己看到的是好几种完全不同的编程语言??仅此一点就足以提醒我们,研究和廓清C++语言风格的演化和发展规律已是当务之急了。

C++语言风格流变史:

详见:http://vcer.net/1181705404640.html

1. 带类的C――C语言风格的因袭

2. I/O――C++的新形象

3. OWLMFC――窗口环境下的风格变异

4. 模板――现代C++风格的基础

5. ATL――COM时代的另类C++

6. 标准C++――一种全新的语言?

7. 读不懂的代码――兼容并包的语言风格

8. C++Builder――Borland的复兴之路

9. Visual C++ .NET――革命还是叛逆?

c++派说:

1. 经典C++流:类是核心,例程多用C Runtime的,很少用模版,一般是正统教育的结果。

2. 古典C流:基本上当C用,偶尔用用对象,不使用异常,喜欢怀旧。

3. MFC流:秉承MFC的风格,主要使用MFC/ATL对象和Win32 API,不喜欢STL,用很多的宏把IDE的语法提示模块折磨到崩溃。

4. Portable流:以C RuntimeSTL为主要工具,使用类和模版,不跨平台毋宁死。

5. Functional流:以模版和STL为主要武器,大量使用函数式语言的设计方法,并号称这才是真正的C++

6. Win32流:多使用全局函数,偏爱Win32 API,但不排斥C Runtime,通常喜欢轻量级的程序,所以身材也比较苗条。

7. Java流:全面使用Java的风格,不能容许任何全局成员,但允许使用STL的集合类,写很多叫Factory的类。

8. COM流:喜欢AddRef()Release(),大量使用接口,隐藏一切可以隐藏的东西,诵经的时候要把上帝替换成COM

9. 戒律流:追求完美的C++程序,计较每一个constthrow(),极力避免不安全的cast,随身一定要带一本ISO C++手册。

10. 混沌流:其程序无常形,无恒道,变幻莫测,吾不知其名

C++杂思录——风格的选择

http://blog.csdn.net/myan/archive/2004/06/16/1916.aspx

同事离职撰文

公司一同事离职时撰文一篇,太有才了:

 

锦涛三年,余辞同济以游。其时,群雄外包,海内未平,或曰:汉略者,位处东海,其势壮焉,其薪高焉,不若往而投之,大业可图。余善其言,乃以孤穷身入汉略事之,历今两载有余,其间大小近十项目,或盛或衰,或荣或哀,皆犹在目,不足与外人道矣。今既辞归。乃做文志之

Windows消息

 

 

GetMessage

::PeekMessage

 

SendMessage

PostMessage

 

PumpMessage

::TranslateMessage

::DispatchMessage

 

Pretranslatemessage

 

消息泵(CWinThread::PumpMessage)

消息循环,(::GetMessage,::PeekMessage)

消息映射

消息路由

消息队列:消息分为队列消息(进入线程的消息队列)和非队列消息(不进入线程的消息队列)

Friday, September 21, 2007

Network programming-TCP model


Server



  1. Initialize WSA.

  2. Create a socket.

  3. Bind the socket.

  4. Listen on the socket.

  5. Accept a connection.

  6. Send and receive data.

  7. Disconnect.


Client



  1. Initialize WSA.

  2. Create a socket.

  3. Connect to the server.

  4. Send and receive data.

  5. Disconnect.



Server Source Code





#include <stdio.h>
#include "winsock2.h"

void main() {

// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");

// Create a socket.
SOCKET m_socket;
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

if ( m_socket == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return;
}

// Bind the socket.
sockaddr_in service;

service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr( "127.0.0.1" );
service.sin_port = htons( 27015 );

if ( bind( m_socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) {
printf( "bind() failed.\n" );
closesocket(m_socket);
return;
}

// Listen on the socket.
if ( listen( m_socket, 1 ) == SOCKET_ERROR )
printf( "Error listening on socket.\n");

// Accept connections.
SOCKET AcceptSocket;

printf( "Waiting for a client to connect...\n" );
while (1) {
AcceptSocket = SOCKET_ERROR;
while ( AcceptSocket == SOCKET_ERROR ) {
AcceptSocket = accept( m_socket, NULL, NULL );
}
printf( "Client Connected.\n");
m_socket = AcceptSocket;
break;
}

// Send and receive data.
int bytesSent;
int bytesRecv = SOCKET_ERROR;
char sendbuf[32] = "Server: Sending Data.";
char recvbuf[32] = "";

bytesRecv = recv( m_socket, recvbuf, 32, 0 );
printf( "Bytes Recv: %ld\n", bytesRecv );

bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );

return;
}


Client Source Code







#include <stdio.h>
#include "winsock2.h"

void main() {

// Initialize Winsock.
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
printf("Error at WSAStartup()\n");

// Create a socket.
SOCKET m_socket;
m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

if ( m_socket == INVALID_SOCKET ) {
printf( "Error at socket(): %ld\n", WSAGetLastError() );
WSACleanup();
return;
}

// Connect to a server.
sockaddr_in clientService;

clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );
clientService.sin_port = htons( 27015 );

if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return;
}

// Send and receive data.
int bytesSent;
int bytesRecv = SOCKET_ERROR;
char sendbuf[32] = "Client: Sending data.";
char recvbuf[32] = "";

bytesSent = send( m_socket, sendbuf, strlen(sendbuf), 0 );
printf( "Bytes Sent: %ld\n", bytesSent );

while( bytesRecv == SOCKET_ERROR ) {
bytesRecv = recv( m_socket, recvbuf, 32, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
printf( "Connection Closed.\n");
break;
}
if (bytesRecv < 0)
return;
printf( "Bytes Recv: %ld\n", bytesRecv );
}

return;
}


Tuesday, September 18, 2007

C++ exception

A Crash Course on the Depths of Win32™ Structured Exception Handling

http://www.microsoft.com/msj/0197/exception/exception.aspx

 

How a C++ compiler implements exception handling

http://www.codeproject.com/cpp/exceptionhandler.asp

 

Monday, September 10, 2007

理想团队

下午参加了部门内Team Lead的管理方面的培训,大家讨论了下理想团队的条件,列举如下:

         有共同目标

         计划

         执行力

         良好的制度

         Open,积极的氛围

         公平的激励机制

         凝聚力

         信任

         分工明确

         好的领导

         畅通的沟通平台

         允许多样化

 

Thursday, September 6, 2007

趋势

 

触摸技术

Microsoft Surfacehttp://www.microsoft.com/surface/

Autodesk touch wall: http://www.youtube.com/watch?v=ArlmuNJ2NBc

QQ: http://labs.qq.com/e/16/

 

内文广告

Contera: http://www.kontera.com/default.aspx

宏界:http://www.vogate.com/

Clickeye: http://www.clickeye.cn/

 

Web App

IM: http://wwwl.meebo.com/

Best4c: http://best4c.cn/

 

 

3D:

SecondLife:  http://secondlife.com/

3D Search engine:  http://shape.cs.princeton.edu/search.html

SpaceTime: http://www.spacetime.com/

 

 

附:

未来网络发展的十大趋

http://www.techweb.com.cn/world/2007-09-06/251639.shtml

1.     语义网

2.    人工智

3.    虚拟世

4.    移动技术

5.    注意力经

6.    作为网络服务的网

7.    在线视频/网络电

8.    互联网应

9.    国际网

10. 个性

Tuesday, September 4, 2007

China VS German


超简洁图片版中德文化比较:


http://msn.bbs.ynet.com/viewthread.php?tid=459060


真的非常形象 :) 毕业后进公司一直跟德国的team一起开发,跟德国人已经打了两年多的交道了,虽然多半是通过mail,AIM,telephone等形式的,但是映像还是非常强烈的。



Sunday, September 2, 2007

Notes for Engineering Excellence Traning

Engineering Excellence Traning

People, process, Tools

Advanced  Debuging

 

By Raymond Zhang张银

CPU 的调试支持INT1,INT 3

软件支持调试应该由架构师通盘考虑

Method for fixing bugs: intuition, Diagnostics, Leap of faith, Head in sand, Scientific approach.

软件断点

Int3

         机器码为1字节,即0xCC

         没有数量限

         局限性

属于代码类断点,即可以让CPU执行到代码段内的某个地址时停下来,不适用于数据段和I/O空间.

对于在中执行的程序,比如或其他固件程序,无法动态增加软件断点,硬件断点

Debug Release的区别之一:一个变量如果没有初始化,则在debug中编译器会初始化,而在release版中则不会被初始化(耗费时间),这也是为什么有时在deb ug中是好的而release版中出错的原因之一

CPU的调试寄存器

软件断点设置的是代码段的地址,硬件断点则可以是,代码段,数据段,I/O段的地址

Exception and interuption

高级语言的Exception都来自CPU Exception, 0 Divide-By-Zero, 1 Debug Exception, etc.比如,如果一个指针没有真正指向一个有效地址,这时往指针强行写值,CPU就会抛出Page Fault(14) exception

 

Best Practices:

Design code so bugs are easy to isolate:

         Assertions

         Tracing

         Logging

         Error Messages

         IDs,在代码内部给每个错误分配一个错误ID,帮助开发人员定位源代码

 微软自带一个工具可以看window内核的tracing 信息,什么工具

Write complete unit tests.

Set compiler to its pickiest mode.

Use tools to ensure good code coverage. i.e: Magellan from MSR.

Time spent on quality saves time later!

函数返回值都是放在Ax寄存器中

Windows中的异常

Win32, CLR.Net异常(异常代码e0434f4d) ,C++(0x06d7363)

JIT调试器的设置!与WindbgVS.net结合 cmd:  windbg -i

Dr.Watson

Msdn杂志有调试专

 

《成功人士的七个习惯

Communication:

Listenning skills:

         Value the opinions of others

         Be considerate, don't interrupt.

         Non-verbal message are important also.

Asking questions:

         Make the point.

Persuasion:

Know your audience.

Three type of people

 

Software Lifecycle.

Planning, definition, design, implement, test, CCB, RTM

Milestone,spec,

Feature meeting

unit test, code review.

Code complete, feature complete,

Bug tracking,Bug bush, trigle meeting(PM, Dev,QA)

Soft CCB, Hard CCB

Performance, Security in software lifecycle.

Milestone Quality(MQ), Quality gates

 

Priorities and Time Management.

Make decision: Pugh concept Selection process.

浪费时间: interrupt.

Suggestion:

2 tasks at a time.

Batch process.

Use Outlook's task list.

 

Design

Successful design strategy: simply!

Design Process: basic design, draft, iterator, UML, TDD

Design issue:

         Performance,

         Usability

         Reliability

         Internationalization

         Localizability.

         Security.

Design by Contract.

Design Pattern.

Prototyping.

Documentation.

 

TDD

Unit test.

Performance testing practices.

 

C++ Object model:

每个函数都会被分配一个stack

Compilercompile的过程中将每一个函数需要的stack空间算好了,这些信息就存在exe文件中。然后在运行时再分配空间

对于if else这样的分支,现代编译器都会将这样的block当成一个函数,然后在Active stack中为其分配statck空间

Stack空间是提前分配好了的,即stack是静态存储空间,在运行时已不可改变

内存分配的两个原则: new谁释放。构造函数中分配,析构函数中释放