岁月流转,往昔空明

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks

#

在上一篇刚刚写完以后,群里面的一个前辈看了看了以后笑了笑。他说,你怎么到现在都不知道什么叫三层架构。我说,不是三层,而是四层。

界面 / 界面逻辑 / 业务逻辑 / 数据。 

在桌面领域来说,业务逻辑和数据往往是联系起来的。所以这里的三层架构实际上是界面 / 界面逻辑+中介 / 业务逻辑。之前的错误就在于不小心把业务逻辑和界面逻辑混为一谈了。

在此要狠狠的感谢一下李锦俊(老李的博客)和猴子二位前辈^_^;猴子是界面专家,他对界面开发了如指掌,我的WTL是从他那里才知道的,也是跟他学的,Windows的界面编程遇到的问题他也给我了详细、明确的解答;老李实践经验丰富,他指出了我的编程知识里面很多不合理和理论实际脱节的地方。要不是他们,估计我现在还在苦苦的瞎想呢。
posted @ 2006-12-13 19:54 空明流转 阅读(1252) | 评论 (4)编辑 收藏

但是,随后的几个程序也是如此,不尽人意。其间我也是一直在读关于Command模式和一些程序的代码,但是就是没有能够领悟到应该怎样完成我的程序才算是个较优的选择。

其间问了一些朋友,但是他们给的答复都是,要多写代码才能理解,有时顿悟是很重要的。

实际上,这一切都源自于我对MVC那浅薄的认知。当然,现在也是很浅薄的。我错误的将逻辑控制与界面控制都非常单纯的交给了Control这个部分,从而让本来属于业务和界面控制的代码在M-C处被混合后又不自然的割裂开来。

为什么会做这个失误的判断,我想了很久。

从现在来看,我觉得是因为自己过于重视“耦合”而轻视了内聚。尽管在分成两层以后,逻辑和界面之间的耦合度降低了,但是程序逻辑自身和界面逻辑都不同程度的引入了黏合部位的内容而影响程序的结构。

在总结了以往的经验和教训以后,我现在开始在新的程序里面尝试将程序分成三层。界面一层,界面控制一层,这一层基本上是纯粹的窗口设计代码,以及一些必要的提交到下一层的通知;逻辑-界面的通讯与界面控制一层,这层的职责是加工界面获取的信息,在界面控件间协调控制,并处理消息通知逻辑层,可以视作是视图的“文档”;最后一层是逻辑层。

当然,目前仅仅在几个小程序中采用了这样的设计,也不太清楚副作用究竟怎么样,所以只是说给大家提供一个借鉴而已。至于最重要的经验,那就是,有时候,不能太看重“耦合”了,还是应该关注一下,对象本身的内聚性如何。
posted @ 2006-12-12 22:53 空明流转 阅读(1195) | 评论 (3)编辑 收藏

如上所言,现在回过头来想一想,写不出来好代码也纯属报应。偏偏那时候不晓得这么个道理,反而是拉不出屎来怨茅坑。

好端端的Delphi 5被我骂了个狗血喷头。

现在回过头来想一想出了它的那个狂慢的且尽提示些鸡肋信息的智能感知和代码自动完成功能,还有那拙劣的,有着丑陋的斜体中文和永远都不能支持Tahoma字体的IDE让我觉得不能忍受以外,Delphi没什么不好的。但是就是因为这点原因,连带着BCB也遭了殃。

当然这是在看到了MFC的麻烦以后我才会感觉到的好处。VCL用起来实在是太爽了。

随后在高三下和大一的时候也就开始看一些软件工程和面向对象方面的资料。大一下的时候开始看设计模式和软件过程。

只是熟悉我的人都知道,我这个人纸上谈兵的毛病真不是一般的重。读了那么多的书,从来就没想过该到了改善一下自己写的Win界面程序框架的时候了。其实别说这么高深的东西我不会用,就连匈牙利命名,我都用得不太好。这主要是前面想的名字后面就忘了当时怎么取得了。无奈是我的英语太差所致。当然,再差我也不太会用汉语拼音去给变量取名字。那丫就是折腾自己。起过了,看不懂。

到了大二,要开始交作业了。我又不是计算机或者相关专业,要求也不高,就是用VB随便弄点什么工程程序就K.O.。照理说VB很简单。但是我不太喜欢VS6的界面,正好那段时间又开始跟一个前辈学WTL,有界面高手愿意用业余时间知道我,我当然不能浪费这么个机会。于是开始用它写了一个很简单的随机地形生成器。

这对我的界面程序经历来说,是一条分水岭。从那个程序开始,我开始在学习,如何将界面逻辑和程序逻辑区分开。

但是实际上这次实践并不是很成功。我在设计框架时,没能考虑的很周全,因此只做出了两层的结构。这样一方面,程序逻辑为了照顾界面,做出了不少的与逻辑关系并不密切的接口,而界面为了容纳自身的全部逻辑,以及与程序逻辑黏合,也有大量的非内聚代码充斥其中。这不得不让我开始考虑一些更好的程序设计的办法和方案。

posted @ 2006-12-12 10:18 空明流转 阅读(1069) | 评论 (3)编辑 收藏

我接触程序的时间也不算长,也不算太短。从高一开始接触Pascal,完全是为了竞赛。只是最后这竞赛也没吃到什么好果子。高一下的时候有些经不住Win32窗口程序的诱惑,开始摆弄Delphi。但是无奈当时水平实在太差(连类和对象都分不清楚),肯定也就写不出来什么像样的程序。

高三开始学习C++,也是从 cout << "Hello World!" << endl 开始的。

所以许多年来,我一直都局限于程序自身,但是从来就没有完整的没有什么Bug的完成一款桌面程序。从Delphi,到C++Builder,到VB,到MFC,到WTL,到Python,莫不是如此。

究其原因是因为我一直以来就没怎么深刻理解Windows消息机制,每次写Win32程序都要对界面琢磨半天,可能还要搞大量的Prototype来证明方案的可行;写完了又花费大把大把的时间去调试界面程序。而且又往往会在使用的时候才发现问题。

早先用Delphi的时候,我犯了一个极度愚蠢的错误,就是错误的把程序的界面框架当作了程序框架。换句话说,一个最明显的情况也就是,把所有的代码/逻辑都放在了EventHandler里面。这样做的坏处不言而喻。稍微有点工程意识的,都知道这样做是很不好的。逻辑按照逻辑,界面逻辑按照界面逻辑,这之间应当是松耦合的。
posted @ 2006-12-11 22:55 空明流转 阅读(1884) | 评论 (8)编辑 收藏

最近考研紧迫。
只是我还是没能顶住诱惑,仍然不时琢磨一下毕业设计的问题。

毕业设计我觉得自己十有八九是要弄个什么程序的。然后就在考虑界面和语言的事情。
现在供我选择的也不是很多,Delphi,C++,Python,VB,C#。

一贯不喜VB,自己的VB也不是太好,向我的VB工作范围仅限于VBA那点活计;
C#吧,刚刚学,.net用的也不行,要是对付毕业设计,估计还要费一番心力,仅作备用。。。
Delphi,以前学的就不好,很久没摸过了又,基本上忘干净了。
C++,太麻烦。。。

然后发现自己看起来知道的不少,其实都他妈浅尝辄止。
遂想找个更方便的。然后想起来Python,写起来挺方便,格式也挺好看。下载了wxPython。才发现自己不是一般的菜。一个晚上过去了都没弄出来一个像样的窗口。
而且还出现了几个莫名的错误。PyScripter的IDE样子挺好,但是稳定性不行。

写了一段代码,死活过不去,对话框正确的显示关闭,但是进程就是不结束。看起来是死循环了。
import wx

class MyApp(wx.App):
  
def OnInit(self):
    self.dlg 
= wx.Dialog(None)
    self.dlg.ShowModal()
    self.Destroy()
    
return True

if __name__ == '__main__'
  app 
= MyApp()
  app.MainLoop()

要是把Dialog改称Frame就正常了。
或者也可以把Dialog放在MainLoop之前也可以。

原因未找到。不过至少大家在写得时候别让Dialog作为主窗口就没事。估计可能是由于Dialog的消息机制跟Frame有些区别。。。也希望高人指点。
posted @ 2006-12-09 21:21 空明流转 阅读(896) | 评论 (2)编辑 收藏

昨天同学的机器中了一个病毒,忙了一个多小时终于解决了。此病毒Kaspersky 2006-12-4病毒库无法检测出。

病毒症状:系统启动并运行一段时间以后,出现进程cmd.exe,并极度占用CPU。

原因:cmd以/c的方式执行%temp%\_xiaren.bat 并循环删除 %TEMP%\HELP.EXE,从而造成进程长时间大量占用CPU。

解决方法:
1. 使用具有管理员权限的帐号进入安全模式,推荐为命令行状态的安全模式,且不使用已经中毒的帐户。
2. 开启命令行。
3. 进入中毒帐户的temp文件夹,先使用dir/a察看并确认存在两个病毒文件help.exe和helper.exe,使用命令del/a help.exe的方式删除这两个文件。如果查找的到文件却提示无法删除,请先用attrib -r -h -s help.exe的命令处理help.exe 和 helper.exe,再使用del help.exe删除它们。
4. 进入D盘,按照上述方法删除myplay.pif和autorun.inf文件。
5. 在注册表项中搜索值myplay.pif,并将所对应的项删除。

posted @ 2006-12-04 10:30 空明流转 阅读(1439) | 评论 (0)编辑 收藏

以下是目录。。。也许会对大家编排文档有帮助。。。


├─Graphics
│  ├─Scene
│  ├─Themes
│  ├─APIs
│  ├─ATI
│  ├─Demo
│  ├─Global Illumination
│  ├─Shader
│  ├─Fundamental Math
│  ├─Texture and Pixels
│  ├─Light and Shadows
│  ├─Polygon and Model
│  └─NV
│      ├─SIGGRAPH_2005
│      ├─EG_2004
│      ├─SIGGRAPH_2002
│      ├─GDC_2003_Presentations
│      ├─GDC_2006_Presentations
│      ├─GDC_2K_Presentations
│      ├─SIGGRAPH_2001
│      ├─GDC_1999
│      ├─GPU Gems 
2 样稿
│      ├─Tech Presentation
│      │  ├─
2001
│      │  ├─
2003
│      │  ├─2004B
│      │  ├─2004A
│      │  ├─
2005
│      │  └─
2006
│      ├─SIGGRAPH_2006
│      ├─Papers
│      ├─GDCE_2003_Presentations
│      ├─GDC_2004_Presentations
│      ├─SIGGRAPH_2003_Presentations
│      ├─SIGGRAPH_2004_Presentations
│      ├─GDC_2005
│      ├─I3D_2005
│      ├─6800_Leagues
│      ├─ChinaJoy
│      ├─CEDEC_2006
│      ├─GDC_2002_Presentations
│      └─GDC_2001_Presentations
├─Net
│  ├─Socket
│  ├─WebService
│  ├─Deployment and Hardware
│  ├─Security
│  └─Protocal
│      ├─TCP_IP
│      └─RPC
├─Database
│  ├─Management
│  └─Development
├─UI
│  ├─Windows Forms
│  ├─Web GUI
│  └─3D GUI
├─Framework
│  ├─COM
│  ├─CORBA
│  └─DotNet
├─Programming Language
│  ├─C and C
++
│  ├─C#
│  ├─GPGPU
│  ├─Delphi
│  ├─Script Language
│  ├─Assembly
│  └─Market Language
├─AI
├─Security
├─General Algorithm
├─Enterprise Solution
├─Optimization
│  ├─Intel
│  └─AMD
└─OS Development and Management
    ├─Windows
    └─Unix and Linux
posted @ 2006-12-03 22:46 空明流转 阅读(1754) | 评论 (2)编辑 收藏

NVDIA CUDA
---------GPU计算的革命

NVIDIA CUDA技术是基础的新的计算架构,这个架构将使用GPU来解决一些消费、商业和技术工业领域复杂的计算问题。CUDA(计算标准设备架构)技术将通过革命性的计算架构来使用NV的gpu的强大的处理能力,从而给数据密集型的应用提供了完全不受限制的全新的计算能力。该架构将通过标准的c语言来提供大量的高性能指令以及简洁的程序开发方式,从而允许开发者创建一个解决办法,该办法将消耗更少的时间为数据密集型的处理提供足够精确的解答。

什么是CUDA?

使用了CUDA的GPU计算通过标准的C语言将下一代NV GPU的总多计算特性结合到一起。在这之前的GPU是基于“流式着色程序”的,CUDA则使用C语言,通过“线程”来创建应用程序,这类似于CPU上的多线程程序。相比较于仅能有很少线程同时工作的多核CPU的而言,NV GPU的特性可以让CUDA同时执行数千个线程,这将令我们的应用能处理更多的信息流。

CUDA所提供的最重要的创新在于,它使得工作在GPU上的线程可以协作解决问题。在线程间通讯实现以后,CUDA将允许应用程序更加高效的执行。由NV GPUs的支持,CUDA有一个直接在GPU上的并行计算缓存,它用于保存频繁使用的信息。在GPU上保存信息可以让计算线程即刻得到共享数据而不是去漫长的等待off-chip的DRAM上的数据。它能让用户实时的计算出复杂问题的答案。

通过CUDA应用程序所能获得的好处

CUDA GPU运算广泛适用于需要处理大量数据的应用。例如,在游戏中我们可以使用CUDA来让GPU承担整个物理计算,而玩家将会获得另他们感到惊奇的性能和视觉效果。另外,用于产品开发和巨量数据分析的商业软件也可以通过它来使用一台工作站或者服务器完成以前需要大规模的计算系统才能完成的工作。这一技术突破使得客户可以任何地方进行实时分析与决策。同时,一些以前需要很先进的计算技术来达到的强大计算能力的科学应用程序,也不再受限在计算密度上;使用CUDA的计算可以在现有的空间里为平台提供更强大的计算性能。

为何使用CUDA?

性能:NV GPU为数据密集型的应用提供了超乎想象的性能。CUDA给了我们一个标准的、广泛使用的解决方案来给予新的应用前所未有的计算能力。
兼容性:使用CUDA C-Compiler开发的程序将向后兼容NV的GPU。开发人员在GPU计算方面所做的投资将立刻在现有GPU的性能上得到回报,同时也将一定会在NV以后的高性能技术中获得收益。
生产力:开发者现在可以使用工业化的标准的C语言来使用他们所希望获得的GPU的计算能力。CUDA提供了完整的开发解决方案,这一方案整合了CPU和GPU,这将令开发人员非常迅速地为他们的客户提供最新的特征和更多的价值。
伸缩性:使用CUDA开发的应用程序在性能和特性上可以应用于全线的NV的GPU,从嵌入式GPU到使用多GPU的高性能专业图形解决方案。CUDA事实上已经可以在从大型的计算设备到个人消费级产品的任何层次的系统中运行。

使用CUDA的软件开发

CUDA开发包是一个完整的使用GPU的软件开发方案。在SDK包含了标准的FFT和BLAS库、使用NV GPU的C编译器和运行时驱动。CUDA运行时驱动是与常用的同DX和GL协同工作的驱动独立的。同时CUDA对Linux和XP的支持也是相同的。

技术特性

CUDA为线程计算提供了一个统一的硬件和软件解决方案来使用支持CUDA的GPU

可支持CUDA的GPU为高性能计算提供并行数据缓冲和线程执行管理器的支持

可以在GPU上使用的标准C语言

提供了标准数值库FFT和BLAS

为计算提供了独立的CUDA驱动

优化了GPU和CPU之间的数据通信路径

CUDA驱动可以在图形设备之间互操作

支持 LINUX 与 XP 操作系统

从高性能的专业图形解决方案到移动和嵌入式GPU均能使用

为高计算密度程序内建多GPU支持

为程序开发和优化提供硬件调试的性能测试的支持

posted @ 2006-11-20 11:55 空明流转 阅读(4475) | 评论 (7)编辑 收藏

CUDA

NVIDIA CUDA
Revolutionary GPU Computing
NVIDIA® CUDA™ technology is a fundamentally new computing architecture for the GPU to solve complex computational problems across consumer, business, and technical industries.  CUDA (compute unified device architecture) technology gives data-intensive applications access to the tremendous processing power of NVIDIA graphics processing units (GPUs) through a revolutionary computing architecture unleashing entirely new capabilities.  Providing orders of magnitude more performance and simplifying software development through the standard C language, CUDA technology enables developers to create solutions for data-intensive processing to produce accurate answers, in less time. 


If you are interested in developing with CUDA please join our
registered developer program to get started.


What is CUDA technology?

GPU computing with CUDA technology is an innovative combination of computing features in next generation NVIDIA GPUs that are accessed through a standard ‘C’ language.  Where previous generation GPUs were based on “streaming shader programs”, CUDA programmers use ‘C’ to create programs called threads that are similar to multi-threading programs on traditional CPUs.  In contrast to multi-core CPUs, where only a few threads execute at the same time, NVIDIA GPUs featuring CUDA technology process thousands of threads simultaneously enabling a higher capacity of information flow.

One of the most important innovations offered by CUDA technology is the ability for threads on NVIDIA GPUs to cooperate when solving a problem.  By enabling threads to communicate, CUDA technology allows applications to operate more efficiently.  NVIDIA GPUs featuring CUDA technology have a Parallel Data Cache that saves frequently used information directly on the GPU.  Storing information on the GPU allows computing threads to instantly share information rather than wait for data from much slower, off-chip DRAMs.  This advance in technology enables users to find the answers to complex computational problems in real-time.


What applications benefit from CUDA?

CUDA GPU computing is suitable for a wide range of applications that process massive amounts of information.  For example, game applications take advantage of CUDA technology by leveraging the NVIDIA GPU to run the entire physics computation, letting gamers experience amazing performance and visual effects.  In addition, commercial software applications used for product development or large data analysis, previously required a large scale computing system to run applications, can now benefit from using a standard workstation or server enabled with CUDA technology.  This breakthrough in technology enables customers to make real-time analysis and decisions from anywhere.  In addition, scientific applications which require the most intensive technical computing capability are no longer constrained by compute density; computing with CUDA provides a platform with a higher level of performance from the same space requirements.


Why Use CUDA technology?

Performance. NVIDIA GPUs offer incredible performance for data-intensive applications.  CUDA technology provides a standard, widely available solution for delivering new applications with unprecedented capability.

Compatibility. Applications developed with the CUDA C-compiler are compatible with future generation GPUs from NVIDIA.  Developers investing in GPU computing will immediately benefit from the performance of current GPUs and be confident in NVIDIA’s future investment in high performance technology for GPU computing.

Productivity. Developers wanting to tap into the NVIDIA GPU computing power can now use the industry standard “C” language for software development.  CUDA provides a complete development solution that integrates CPU and GPU software to enable developers to quickly provide new features and greater value for their customers.

Scalability. Applications developed with CUDA technology scale in performance and features across the full line of NVIDIA GPUs from embedded form factors to high performance professional graphics solutions using multiple GPUs.  The power of CUDA performance is now available in virtually any class system from large, computing installations to consumer products. 


Developing with CUDA

The CUDA software development kit (SDK) is a complete software development solution for programming CUDA-enabled GPUs.  The SDK includes standard FFT and BLAS libraries, a C-compiler for the NVIDIA GPU and a runtime driver.  The CUDA runtime driver is separate standalone driver that interoperates with OpenGL and Microsoft® DirectX® drivers from NVIDIA.  CUDA technology is equally supported on both the Linux and Microsoft® Windows® XP operating systems.


Technology Features

• Unified hardware and software solution for thread computing on CUDA-enabled NVIDIA GPUs

• CUDA-enabled GPUs support the Parallel Data Cache and Thread Execution Manager for high performance computing

• Standard C programming language enabled on a GPU

• Standard numerical libraries for FFT and BLAS

• Dedicated CUDA driver for computing

• Optimized upload and download path from the CPU to CUDA-enabled GPU

• CUDA driver interoperates with graphics drivers

• Supports Linux and Windows XP operating systems

• Scales from high performance professional graphics solutions to mobile and embedded GPUs

• Native multi-GPU support for high density computing

• Supports hardware debugging and profiler for program development and optimization


If you are interested in developing with CUDA please join our registered developer program to get started.

posted @ 2006-11-19 20:19 空明流转 阅读(1263) | 评论 (0)编辑 收藏

Scenario 3:Communication --- 和我类似的人

这次用户大会的主题,叫做“Communicating Our World”,中文主题叫“GIS——沟通世界的语言”。会议之前如果有预约的话,在现场能得到一些资料,会议论文集,一个记录本,一个包,一只笔。记录本的封面,写了中文的会议主题,笔身上则印刷了英文的会议主题,相辅相成。

李老爷子和Uncle Jack各自都说的自己的话题,我这种小辈听都听不懂,倒是会议主持和经理陈子坦同志很强调的,我记住了:会议中的讲座和演示不是最重要的,最重要的是,交流,业界人士之间的交流和沟通。

然后就把大把大把的钞票塞到您老的口袋里,我心里面其实是这样想的。

话是这么说,但是要真动起嘴来还真有些拘谨,尤其是我这种小P孩样,别人还不都爱理不理的。事实也差不多就是如此。

为什么说差不多呢,因为这次参加的3000+的人里面,有很多都是北京的高校的学生,所以放眼望去,平均年龄还是不高的。女生不少,美女没见着。

真正在会后有点交流的,就是跟一北大新一代GIS实验室的和一个武大重点室毕业的,因为都还是学生或刚毕业没多久,所以还是比较投味的。(我是这么感觉,估计人家就比较厌倦,因为我实在太菜了)然后三个人就好端端的痛骂了一番国内的GIS业界和一些该死的保守的技术。说是说三个人,其实我也就是一听众,两位前辈在,我就只有听取教诲的份。他们的反应就是:

1. 现在的GIS,行业应用都在做,但是公众用户的应用(例如导航什么的)做的还是太少,因此GIS没有一条完整的产业链(缺乏最下游的厂商和客户);
2. GE(google earth)给GIS学术界和GIS厂商兜头一瓢冷水,他们才发觉,行业应用不是全部;
3. 民用的数据太少,由于国家的保密政策所限,实际可以用于民用系统的大中比例尺数据几乎是零,仅有的数据供应商都是按照GE的方式提供数据;
4. 行业还是浮躁了一点,没有心思作技术,为应用而应用;
5. Mobile GIS,随着中国的3G的成熟,市场前景不错。
6. 大规模的民用服务,性能是严重瓶颈。

差不多就是这样了。不过,面对这个问题,不同的人存在着不同的观点。不过这些都不重要,有反思,就会有发展。我也和他们一样在寻求解答,只是,在这一点上,他们比我所处的位置更高,也就看得更远。

羡慕,些许嫉妒,总是希望有一天,能和他们站在同样的舞台上,引吭高歌。

posted @ 2006-11-13 19:59 空明流转 阅读(388) | 评论 (0)编辑 收藏

仅列出标题
共12页: First 4 5 6 7 8 9 10 11 12