“抛砖引砖”—在SOA博客圈开博仪式上的致辞

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiazhang/article/details/1187404

2006年8月28日 北京520网吧

各位博友和IT界的同仁们,大家下午好!

今天很高兴有机会在这里跟大家交流。我今天先抛出三篇薄(博)文,既是抛砖引玉,也可叫“抛砖引砖”。 什么叫抛砖引砖呢?就是我提个观点,大家可以畅所欲言去讨论和争论。 有些人会有不同观点,可能有大板砖拍过来。 “大板砖”是文革时的北京老话,用砖头打架,狠的将砖头放在“绿军(用)挎(包)”里抡着打人,勇往无比,所向披靡。

我在薄文里面提出,现在软件业进入新的发展的时期,国外很多软件公司对中国的软件业非常看好,到中国来投资中国的软件公司,中国的软件园也纷纷成立。这样将来可能形成所谓的软件三国时代,传统上有美国、欧洲,在亚洲这边中国和印度都很有发展潜力,看看谁能够把荆州拿到手,成为能够三足鼎立的蜀国。这是我抛出的砖,我预计一定会有板砖拍回来,比如说为什么不提日本和澳大利亚等。但我记得好像三国时除了刘备,还有刘璋、张鲁。至于谁是谁,那就仁者见仁了。

在SOA方面,SAP在谈企业面向服务的架构(Enterprise SOA), 并将之付于行动,取得了关键性的进展。 原来传统上企业IT要么自主开发软件,要么外包购买。现在我们用NetWeaver平台,SAP在这个平台上开发软件, 用户既可以买现成的软件,也可以在这个平台上充分利用企业服务组合自己的应用,其它独立的开发商又可以在这个平台上开发商业软件,这样形成活跃的生态圈,大家在里面共同繁荣。正因为SOA是一个平台的东西,是一个要建成社区大家共同分享共同贡献的东西,所以我们推动建立了这个SOA博客圈,欢迎大家广泛深入地讨论。 我在博客里面把SOA称为是软件发展的荆州,是军家必争之地,谁得到了它就可以获得软件发展的优势。但您可能有不同观点,也许您本来看好的就是许都。除我们一家之砖外,我们知道SOA这个概念其他IT厂商也在谈,也就是还用不同式样、尺寸、材料和颜色的砖。

博客(Blog)是个好东东,从侠客、黑客、骇客到播客,一脉相承,都很不赖。博客是非常好的交流形式,可以很快地把信息传达给大家,解决了原来信息不对称的问题。 所以博客进一步发扬了互联网的传统,在一定程度上实现了信息的民主化,让大家更广泛和及时地占有信息,真理越辩越明。 但我有时看到个别人,因为做博客用的是匿名,就完全不负责任地发表意见,这样就不大好。 明处拍砖可以,暗处扔黑砖,则胜之不武。 希望我们的SOA博客圈高手云集,仁者无敌。

国外如美国有很多专业IT评论家,我印象较深的一位叫Guy Kawasaki, 是日裔美国人。Kawasaki与Steve Jobs(乔布斯)共同创建苹果电脑公司之后,成为了IT业著名的评论家,美国的IT杂志每期都有他的专版,IT界有什么新变化新动向,所有的事情都可以在他那里评论得活灵活现。 今天圈内认真负责的博客,也许明天就会成为IT评论家,成为终极博客。 这样既可以发挥个人特长并有个自由的职业,同时又可以对IT业做出影响和贡献。希望我们的SOA博客圈能出几个这样的高手能人。

抛砖引砖, 砖多了,可以众志成城。 谢谢大家。

©张侠,2006  转载请署明作者。
展开阅读全文

CSDN 产品博客开博啦!

01-07

[b][color=#FF0000]CSDN产品官方博客[/color][/b]:[url=http://blog.csdn.net/csdnproduct]http://blog.csdn.net/csdnproduct[/url]rnrnCSDN产品博客是CSDN的产品事业部开设的官方博客,是CSDN会员和我们产品事业部门进行沟通的官方渠道。在产品博客中,我们产品团队将和会员分享在CSDN网站的产品设计,研发和网站运营方面做出的工作,以及对CSDN网站未来的发展计划。同时,我们也非常希望会员们能够通过产品博客给我们团队的工作提出各种各样的建议和批评,鞭策我们把CSDN网站做的更好。rnrnCSDN产品事业部是负责网站产品的部门,主要工作职责是CSDN网站的产品设计,网站研发和社区运营,整个部门由8个小型团队组成,分别是:产品设计团队,视觉设计团队,3个研发团队,社区运营团队和网站运维团队。rnrn在2011年,我们团队将对CSDN网站的社区产品线进行逐步的改进和升级,除了目前已经上线的新版本的CSDN搜索频道之外,我们还将在本周六升级CSDN用户登录系统,加强CSDN帐户的安全性和系统的性能。除此之外,在2011年,我们还将升级CSDN博客产品,解决博客的用户可用性和性能问题;升级CSDN下载频道,提供更好的资源分享和推荐功能;升级CSDN个人空间和网摘,加强用户关系的维系和建设;改造CSDN论坛,让会员更好的利用论坛功能,进行技术交流和问题的解答。rnrn千里之行,始于足下。承载着CSDN1400多万会员的期望,我们将通过不懈的努力工作和执着的产品追求,一步一步将CSDN网站建设成为一个真正“给力”的IT专业技术综合性门户网站。rnrn转:[url=http://blog.csdn.net/csdnproduct/archive/2011/01/07/6122942.aspx]http://blog.csdn.net/csdnproduct/archive/2011/01/07/6122942.aspx[/url]rnrn 论坛

关于软件工艺,C语言[不抛砖,盼引玉]

07-05

大家好!rnrn 我是一名参加工作4年的IT民工,目前在一家中型企业从事嵌入式软件开发维护工作。我们使用的语言工具为C语言,软件平台是风河公司的vxWorks,产品为一款工业级小型终端设备。rnrn 我在软件开发维护的工作中,发现很多bug并不是大的技术缺陷造成的,而是由于不好的代码风格造成的。而我们公司对于代码风格也有一定的规定和要求,但是各个产品组并不是很统一,感觉各有利弊。我想把我有疑问的几点提出来,希望工作经验丰富的老师能够结合自己的经验,给出一些指导。不胜感激。rnrn 1,关于命名规则。我们采用的是 “类型+含义”的方式,比如 char cOperateType。但是有的时候名字会比较长,如果采用缩写,含义又有可能不清晰。rnrn 2,关于头文件。头文件是否应该和实现文件一一对应?哪些东西应当放在头文件里?如果需要引用外部函数或外部全局变量,是该引用其头文件还是直接在本文件声明?各有什么利弊呢?rnrn 3,关于封装。C的封装性比较差,但是软件工程模块化设计又要求有比较好的封装,用什么样的规则能够比较好的实现呢?现在我们的工程耦合性很强,经常是改动了1处牵动了全身。大家对于封装性都是持肯定态度的,但是苦与没有找到很好的方法,有没有比较好的规则可以遵守呢?rnrn 4,关于数据结构的定义。我们现在基本有两种观点:一,定义一个大的数据结构,包含了主要的控制字段、数据区地址、函数方法指针等,从主函数下去,几层函数的接口都使用这个结构的指针;二,将各控制信息、数据区打散,函数方法就地使用(要求函数方法全部声明为外部)。第1种方法感觉封装性好,但是程序阅读的时候有点困难,而且调试的时候不太方便(带着一个大结构走,主机反应速度变慢);第2种方法感觉信息全部暴露。请专家予以指导。rnrn 5,关于pclint。我们没有使用pclint,其他组有使用的。我感觉lint工具太过于严格,不知道用过的前辈有什么感受,或者有什么建议。rnrn 另外,我们的软件规模大约30万--50万,C语言,嵌入式软件。rn 论坛

通用打包和解包(Socket) 抛砖引你的玉

03-10

Socket编程很简单,但网上质量高的代码并不多见,因为一个好的通信程序,要有很多相关的技能,例如报文的解析,打包和解包,多线程并发,通信同步控制等。我这里只有一个砖(.h)的文件,希望高手能编写玉(.cpp)拿出来给大家学习。rn rn#ifndef __MS_PACKET_H__rn#define __MS_PACKET_H__rnrn#define PACKET_API //__declspec(dllexport)rnrn#include // MFC socket extensionsrnrn#pragma warning(disable: 4251) //export dll safely warningrn#pragma warning(disable: 4786) //stl debug warningrnrn//Packet Item Data Typern#define PIT_BINARY USHORT(0) //二进制类型,字符串也用这个类型标识rn#define PIT_ULONG USHORT(1) //无符号长整型rn#define PIT_INT USHORT(2) //有符号整型rn#define PIT_FLOAT USHORT(3) //浮点数类型rnrn#ifndef RC_OKrn#define RC_OK 0rn#endifrnrn#ifndef RC_FAILEDrn#define RC_FAILED -1rn#endifrnrn#include rn#include rn#include rn#include rn#include rnrnusing namespace std;rnrn//SOCKET TYPErn#define SKT_TCP UCHAR(0) //TCPrn#define SKT_UDP UCHAR(1) //UDP, 都没有返回, 短连接rnrn//RESPONSE TYPE, only SKT_TCPrn#define RPT_UNRESPONSE UCHAR(0) //没有回应rn#define RPT_RESPONSE UCHAR(1) //有回应rnrn//LINK TYPE, only SKT_TCPrn#define LKT_SHORT UCHAR(0) //短连接rn#define LKT_LONG UCHAR(1) //长连接rnrn rnrn rn rn//删除部分是监控程序用到的,已经重新定义过了rn/*rn#define CMD_WM_GET 0x00000101 //WarningMonitor向模块取信息rn#define CMD_WM_GET_RESP 0x80000102 //模块向WarningMonitor回信息rn#define CMD_WM_SYS_MSG 0x00000103 //模块主动向WarningMonitor报告信息rn#define CMD_WM_FAILED_DATA 0x00000104 //模块主动向WarningMonitor 报告丢失数rn*/rnrn//Item IDrn#define ITEM_SRC_MODULEID 0x0001 //UINT 源模块标识rn#define ITEM_DST_MODULEID 0x0002 //UINT 目标模块标识rn#define ITEM_TRANSACTIONID 0x0003 //STRING 事务标识rn#define ITEM_MSGID 0x0004 //BINARY(8) CMPP 定义的MSGIDrn#define ITEM_ORIGIN_SERVICECODE 0x0005 //STRING(Max21) 接入号rn rnrn rn//以下是监控程序用到的宏rn#define CMD_WM_GET_STATUS 0x00000101 //WarningMonitor向模块取状态信息rn#define CMD_WM_GET_STATUS_RESP 0x80000101 //模块向WarningMonitor返回状态信息rnrn#define CMD_WM_GET_LIST 0x00000102 //WarningMonitor向模块取队列状态信息rn#define CMD_WM_GET_LIST_RESP 0x80000102 //模块向WarningMonitor返回队列状态信息rnrn#define CMD_WM_GET_FLOW 0x00000103 //WarningMonitor向模块取流量信息rn#define CMD_WM_GET_FLOW_RESP 0x80000103 //模块向WarningMonitor返回流量信息rnrn#define CMD_WM_SYS_MSG 0x00000104 //模块主动向WarningMonitor报告状态信息rn#define CMD_WM_FAILED_DATA 0x00000105 //模块主动向WarningMonitor 报告丢失数rn#define CMD_WM_APP_STATUS 0x00000106 //报告业务程序状态rnrn#define ITEM_WM_LEVEL 0x0101 //UINT 模块的告警序号,监控模块可根据些值判断是否重启rn#define ITEM_WM_MSG 0x0102 //STRING Max500 报告系统日志rn#define ITEM_WM_FAILED 0x0103 //BINARY Max3000 报告丢弃内容rn rn rn //发送接收队列状态 rn#define ITEM_WM_LIST_ACCEPT 0x0121 //UINT 接收队列总条数rn#define ITEM_WM_LIST_SEND 0x0122 //UINT 发送队列总条数rn#define ITEM_WM_SLOW_SEND 0x0123 //UINT 低优先级发送队列条数rn#define ITEM_WM_NORMAL_SEND 0x0124 //UINT 正常发送队列条数rn#define ITEM_WM_FAST_SEND 0x0125 //UINT 高优先级发送队列条数rn rn//end of 监控程序用到的宏rnrnrn#define MAX_THREAD_COUNT 256rnrn#define ERR_RECV_FAILED -101rn#define ERR_SETBODY_FAILED -102rn#define ERR_FAILED_RETRY 101rn#define ERR_NORESPONE 102rn// This class is exported from the Packet.dllrnrnnamespace Packetrnrn //包头结构rn typedef struct tagHEADrn rn ULONG uCommand; //命令rn ULONG uSequence; //包序号(长连接)rn USHORT usBodyLength; //包体长度rn UCHAR ucResponseType; //0:不用返回; 1:要返回rn UCHAR ucLinkType; //0:短连接; 1:长连接rn HEAD, *pHEAD;rnrn //项目头结构rn typedef struct tagITEMrn rn ULONG uID; //项目标识rn USHORT usDataType; //项目数据类型rn USHORT usDataLength; //项目长度rn ITEM, *pITEM;rnrn //数据项的类,内容使用rn class PACKET_API CItemrn rn public:rn CItem();rn virtual ~CItem();rn CItem(const CItem& item);rn const CItem& operator=(const CItem& item);rnrn //外部调用的方法rn public:rn //设置有符号整型的数据rn int SetInt(IN ULONG uID, IN INT uData);rn //取有符号整型的数据rn int GetInt(OUT ULONG &uID, OUT INT& uData);rn //设置浮点型的数据rn int SetFloat(IN ULONG uID, IN FLOAT uData);rn //取浮点类型的数据rn int GetFloat(OUT ULONG &uID, OUT FLOAT& uData);rn //设置无符号长整型的数据rn int SetULong(IN ULONG uID, IN ULONG uData);rn //取无符号长整型的数据rn int GetULong(OUT ULONG &uID, OUT ULONG& uData);rn //设置字符串型的数据rn int SetString(IN ULONG uID, LPCTSTR lpszData);rn //取字符串型的数据rn int GetString(OUT ULONG &uID, OUT char** ppData);rn //取字符串型的数据rn //设置二进制型的数据rn int SetBinary(IN ULONG uID, IN LPCTSTR lpszData, IN USHORT usDataLength);rn //取二进制型的数据rn int GetBinary(OUT ULONG &uID, OUT char *lpszData, IN OUT USHORT &usDataLength);rn //取项目头结构指针rn ITEM* GetItemHeadPtr() return &m_Item; ;rn //取项目数据指针rn char* GetItemDataPrt() return m_pData; ;rnrn 呀,文件太长,发不完,谁如果有兴趣能完成这些代码,来信跟我要全部的头文件吧。tracy10@hotmail.com 论坛

没有更多推荐了,返回首页