|
1.在函数中途弹出无模式对话框,之后马上进入挂起等待,导致对话框不被刷新,调用RedrawWindow可以使对话框即时同步被刷新。
2.设主窗口为CMainDialog,在其某函数中弹出模式对话框,该模式对话框将subclass override CMainDialog的窗口函数,并将收到的消息再转给CMainDialog,即,此时CMainDialog仍收到自己注册的消息如WM_TIMER等。 CMainDialog可在OnTimer中处理事件,Process网络消息等等,即,弹出模式对话框,不会导致消息处理和游戏循环的中止。在处理时,即从模式对话框外部,可以结束该对话框,操作对话框的显示内容。
3.限制文本框文字长度EM_LIMITTEXT
4.在窗口A上弹出一个模式对话框B,然后向A发WM_CLOSE,可能导致A关闭而B不关闭,此时在A的WM_CLOSE消息中显示调用DefWindowProc或DestroyWindow可解决
5.WTL下,有些消息设置了bHandled=false,但由于调用时机不对,导致默认的调用不起作用,采用显式调用解决。
6.主框架Frame隐藏时,其类中的MessageBox会有问题(Box的父隐藏),应该使用MessageBox(NULL, ...);否则后来弹出的对话框可能会在任务栏上不可见。
7.MessageBox,DialogBox中Window内部实现了一个消息泵,使得DoModal后程序仍然能接收线程消息,但程序对这个消息泵没有控制权,导致无法响应一些被默认实现的按键消息。
8.http://www.microsoft.com/mind/0499/faq/faq0499.asp 解决WebControl在对话框上按键失灵Bug.
9.重用一个控件子类化对象时,由于上次状态未清空,再次SubclassWindow后,表现时常,如WTL的CBItmapButton,加入状态清除函数。
10.DrawText的DT_WORDBREAK一定要配合DT_EDITCONTROL使用,否则就要**** ms了。
11.TBSTYLE_FLAT的工具栏,为透明背景,背景渲染混乱时子类化TOOLBAR并重载WM_ERASEBKGND消息画上背景.
12.RABAR的BAND的BAND_CLIENTEDGE规定了rabar的边框,竟然那么大.
13.重载Edit NcPaint导致输入汉字时,文字变没,刷新又好,没使用NULL_BRUSH的原因.另MSDN文档关于NcPaint严重错误.
14.非模式对话框的Tab键失效,需要做 virtual BOOL PreTranslateMessage(MSG* pMsg) { return CWindow::IsDialogMessage(pMsg); }
CMessageLoop* pLoop = _Module.GetMessageLoop(); pLoop->AddMessageFilter(this); Refer to MSDN: Dialog Box Programming Considerations
15.Shell dll必须使用Apartment线程模式,否则出错. 16.WTL 程序去除 AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES); 后在某些XP操作系统下,Windows窗口创建失败,而程序Windows窗口根本没有使用扩展Windows控件.
17.wndMain.CreateEx(NULL, NULL, WS_POPUP | WS_MINIMIZEBOX | WS_SYSMENU | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_EX_WINDOWEDGE)模式的窗口销毁Close后不能自己发送WM_QUIT消息,需要程序手动发送::PostQuitMessage(0);
18. When using WTL 7.0 with ActiveX controls under ATL 7.1, the framework will ASSERT inside atlcom.h on the following line: ATLASSERT(!InlineIsEqualGUID(*m_plibid,GUID_NULL) && "Did you forget to pass the LIBID to CComModule::Init?");
This can be solved one of two ways: 1) Change your "Use of ATL" setting to "Dynamic Link to ATL" in your project properties. 2) Change your "Use of ATL" setting to "Static Link to ATL" and instead of using hRes = _Module.Init(NULL, hInstance); line in your _tWinMain, use this instead: GUID guid; hRes = _Module.Init(NULL, hInstance, &guid);
The ATLASSERT is apparently a bug in ATL 7.0/7.1 because everything works right if you pass a non-null GUID to _Module.Init(). Note that some people prefer to pass the actual LIBID instead of a garbage GUID, but this has no effect on whether the framework works correctly or not.
Refered from: http://userpages.umbc.edu/%7Ebcorfm1/wtl.html
19.Edit或RichEdit滚动到最后一行,m_edit.SendMessage(WM_VSCROLL, MAKEWPARAM(SB_BOTTOM, 0), 0);
逻辑先行 每种解决方案体现一种逻辑本质,一种哲学思路. 故在解决一个问题时,可从问题的抽象逻辑本质着手,有效的找到方案.
软件的成功在于可持续发展的生命力(容易而清晰的扩展),对代码绝对的掌控性(除少数大公司的底层外,不用或少用不开源的底层,底层源码也必须清晰可调),绝对清晰的设计逻辑(设计者并不清楚自己设计的逻辑的衍生),避免学究的软件工程(非必要的文档绝对不写,以代码为设计,使用代码技巧表达对项目的控制),整个功能体系严谨无错(如同数学物理考试,题题得分,力争满分)。
重构,重构,再重构.
好的程序写出来有一种感觉,如果感觉不好,坚决推翻,重来.
软件接口设计的根本在于对业务的理解程度,不能为设计而设计,设计应服务于业务.
使用实体Block,全局字符串Buffer是个优秀的方案,指针的优势.如同现实中管理仓库,管理物件.
态度问题:发现一个Bug不应该是给你添麻烦,而是使你的程序更加完美.Bug要找出它的本质逻辑起因.
解决一个问题,不等于你理解了这个问题,理解问题,应该从多个角度去理解,得到一个普遍的真理.
1.禁止图像拖放复制 在BODY标签内加入ondragstart="return false;" 2.禁止出现滚动条 在BODY标签内加入style="overflow-x:hidden; overflow-y:hidden" 3.获取其他Frame页面的变量(要使用函数返回). parent.gameNav.getData() function getMainMenuItem() { return mainMenuItem; } 4.禁用按钮btnLogin.disable=true; 5.为Combobox条项附加数据 <option value="5" selected>项目1</option> 6.取控件内容acc.value
====为Regular DLL工程加入ATL/WTL支持=========================== 1.在工程的stdafx.h中除去#include <windows.h>,加上 #include <atlbase.h> #include <atlapp.h> extern CComModule _Module;或extern CAppModule _Module; 2.在工程主cpp(即main所处的文件中加入: CComModule _Module; 或CAppModule _Module; 3.在main入口中模块加载处加入: _Module.Init(NULL, HINSTANCE(hModule)); 4.在main入口模块撤载处加入 _Module.Term();
====为VC6 ATL DLL工程加入WTL支持============================== 1.在工程的stdafx.h中的加上 #include <atlapp.h> 将extern CComModule _Module;改为extern CAppModule _Module; 2.在工程主cpp,即main所处的文件中改为: CAppModule _Module;
====为VC.NET2003 ATL工程工程加入WTL支持============================== 1.在工程的stdafx.h的#include <atlbase.h>后 加入#include <atlapp.h> 去掉#include <atltypes.h> ================================ ===== 为WTL加 Com 对象 1.创建一个同名ATL COM工程 2.将其idl和rgs文件复制加入到现有工程 3.在主cpp上加: #include "initguid.h" #include "XXX.h" #include "XXX_i.c" 4.加入 BEGIN_OBJECT_MAP(ObjectMap) END_OBJECT_MAP()
====为将MFC工程加入ATL/WTL支持============================== 1.在工程的stdafx.h中尾部加入 #define _WTL_NO_AUTOMATIC_NAMESPACE #include <atlbase.h> #include <atlapp.h> extern WTL::CAppModule _Module;
2.在工程theApp声明下加入: WTL::CAppModule _Module;
3.在InitInstance中部加入 _Module.Init(NULL, theApp.m_hInstance);
4.在ExitInstance中加入 _Module.Term();
====编译器技巧================= ====import语法======================== #pragma message ("TODO: Add the path to <Oledb32.dll>, and <Msado15.dll> via Tools->Options->Directories->Include Files. This is usually <C:\\Program Files\\Common Files\\system\\ole db\\>, and <C:\\Program Files\\Common Files\\system\\ado\\>, respectively.") #import "C:\Program Files\Common Files\system\ole db\Oledb32.dll" raw_interfaces_only exclude("IDBPromptInitialize", "IDataInitialize") no_auto_exclude #import "C:\Program Files\Common Files\system\ado\Msado15.dll" rename("EOF", "adoEOF") rename("BOF", "adoBOF") #import <MsFlxGrd.ocx> raw_interfaces_only
====Select 模板技巧================= 对于在编译时有两种可能的语法,其中一种为错误,可使用Select编译时模板技巧排除,否则编译器同时测试两种语法导致编译错误.
====stlport安装========================== 1. 下载http://stlport.org/archive/STLport-4.5.3.zip及http://linghuye.nease.net/Tools/stlp45andvc71.zip 2. 分别解压,并使用第2个压缩包内的文件: a.替换文件 STLport-4.5.3/stlport/config/stl_msvc.h b.添加文件 STLport-4.5.3/src/vc71.mak 3. 在VS2003的"包含文件目录"中加入STLport-4.5.3/stlport路径,并移至最优先上方. 4. 不欲使用STLport iostreams者,去除stlport/stl_user_config.h文件中"//# define _STLP_NO_OWN_IOSTREAMS 1"行前的"//". 欲使用STLport iostreams者, a.将vc6.mak改名为makefile b.在Visual Studio .NET 2003 命令提示环境中,进入src目录 nmake clean all nmake install ====指针应用=============================== 指针一律初始化NULL,一律delete,因为NULL删除不出错. ====CSrollWindowImpl应用============================ 1.继承于CSrollWindowImpl 2.将OnPaint消息传给CSrollWindowImpl处理. 3.在OnCreate中SetScrollSize. 3.编写void DoPaint(CDCHandle dc) ====C库冲突=========================== 对于引入的C库由于LibC的各种冲突,应在链接设置中忽略LIBCXX.lib. ====mtl vc7.1安装=========================== 覆盖补丁mtl_vc71patch.rar即可. ============================= 如果没有实践上的实例证明效率问题,则易用性最重要. 推论:最初的设计应以易用性为主. ====SOAP使用=================== 1.客户端必须安装Soap发布包,否则失败. '建立Soap客户端连接 Set SoapClient = CreateObject("MSSOAP.SoapClient")
'与服务器公开的WebService服务进行连接,只需一个暴露出来的WSDL文件 '由于WSDL文件在虚拟目录中,外部网络可以直接读取它. Call SoapClient.mssoapinit("http://localhost/WebServices/WebCam/WebCam.WSDL"; )
'直接用soapclient调用COM方法,soapclient此时代表无状态的WenCam对象代理,方法调用同一般的COM调用. '[out,retval]参数结果直接出现在返回值obj中. Set obj = SoapClient.GrabFrame(10)
2.服务器端必须安装Soap Tookit包. a.暴露WSDL文件,在计算机管理->默认网站->新建->虚拟目录. 如上情况必须建两层WebServices/WebCam 将WebCam.WSDL和WebCam.wsml放入虚拟目录WebCam映射到的硬盘目录下(一般也建在wwwroot下). b.由于微软IIS的一些低级Bug,必须重设WSDL执行映射: 在计算机管理中点击你的虚拟目录如WebCam的属性,点击右下的配置按钮,->添加->扩展名填".wsdl"(不填双引号). 动作选"限制为",并填入GET,POST,HEAD,打勾"教本引擎",去勾"检查文件存在". 最后可执行文件填入: C:\Progra~1\Common~1\MSSoap\Binaries\SOAPISAP.dll C:为系统盘,切记千万不要用"浏览"按钮来设,有Bug,而且以上路径不能用长文件路径名. 4.客户端不需要安装dll,服务器端必须注册.
========================================= #include <ft2build.h> #include FT_FREETYPE_H
<ft2build.h>对FT_FREETYPE_H做了宏定义.
=========================================== 特征:若干代码段不断重复,但每段均有细微之处不同. 需要采用多个不同的策略类型完成同一流程的任务 模式:采用Template Method,可以有很多的小型定制函数. 语法:A.虚接口基类重载. B.模板模拟虚接口技法.(推荐) 实例:1.图层面叠加,分裁减,合并,擦除,异或,各叠加的算法流程是统一的. 2.各种几何实体添加,分二点操作,三点操作,多点操作,各操作遵循同一操作规范流程.
=========================================== 特征:根据某一种程序状态,分别实施不同操作. 大量的case句法存在 模式:采用State模式 语法:A.State或Action虚接口类体系. 实例:1.支持50种几何图形的添加编辑操作,用户按下某图形按钮,进入该图形操作状态.使用虚接口分派鼠标事件操作,并继承实现各基本图形的操作.
=========================================== 特征:需要整理杂乱无章的代码. 模式:类封装 语法:类 实例:将杂乱无章的代码封入一个类中,采用static函数,或类函数.尽量提供某统一抽象对象的语义.
=========================================== 特征:A代码系统需要与B代码系统通信,但B系统不愿耦合A系统(不愿include A总体的头文件). 模式:泛用接口 语法:定义一个简单的纯需头文件接口,A系统多重继承实现该接口,并将纯粹的接口交给B. B只需要有接口即可调用.接口文件可由一方或双放方协商定义,并由任何一方保管. 实例:底层C++核心与上层OCX控件交互,不能直接取用OCX组件接口,避免耦合.
=========================================== 特征:复杂WTL程序标准架构 模式: 1. CMainFrame应该是一个全暴露的透明的高层权力和调度机构,程序中所有部件都对其组成非常了解,即一个部件对其所属的CMainFrame的部件都有获取能力,以此获得与各部门协调的能力.CMainFrame主要负责多个部件同时运作时的调度. 2. 有一个最主要控制部件,用于最经常的业务处理,如工作区(树视,列表等)部件. 3. 有必要的组件用模板声明获得对CMainFrame的获取能力.
=========================================== 特征:细节细化 模式: 1.将每个有可能变化的行为定义到函数或类中,不管其有多么地细节,这将大大提高程序的灵活度(单一职责原则)
=========================================== 特征: 对于需要某一以后可能有多个的全局变量,需要在每个类体系对象上加上变量,但为避免烦琐,可以传参数.
=========================================== 1.增加一个类,在类中添加表明该类自己身份的代码. 2.在总登记处登记. 3.添加对这种类型的调度处理.
=========================================== 基接口表明最小化成员应实现的方法,一个纯接口继续派生与基接口,表明额外的接口要求. 使用时利用dynamic_cast<>推导出是否是上层基接口,若是,则可以按照上层接口的规范要求调用.
=========================================== 特征:类体系的基类接口需要某个派生类的定义,但这样会造成"实类"关联. 模式:为该派生类定义另一个虚接口,而该派生类实现两个接口.
=ADT编程=========================================== C++类作为一个躯壳包装内存块,不释放.
=========================================== 良好的 C++ DLL 程序结构,通过C函数将虚接口暴露出来,而C++实现藏于内.
=========================================== 在适当的地方加入虚函数逻辑不会导致系统效率降低.
=========================================== 组合与继承的结合,继承用于将原有接口甚至其实现保留下来,组合用于将实现转发出去. 这样既可以保留原有接口不变,又能方便地添加接口,特别可以融入是另一套接口或其实现. 这样可以既不改变内部原有接口定义,又可以向外提供接口要求外部人员实现之,而后合并. 关键在于继承需要暴露内部接口,组合只需定义一个新的与内部无关的接口.
=========================================== 衡量一个程序重用性标准,有多少代码是与应用相关的.
=========================================== 世界帧进模式 Frame不断向前,物质在各种状态间迁移.,Frame返回false则表明物体生命期结束. 物质本身有个生物钟在Frame中提醒自己的生命.
=========================================== 多线程多进程服务端编程要旨: 1.尽量编写单线程逻辑. 2.借助某部分的单线程逻辑来同步操作步骤,如物理的盯住不变量。 3.对外出口单线程,内部处理多线程. 4.注重逻辑的协调性。
=========================================== 特征:两套魔兽格式解析和显示,版本不同,关键分析点不同,但分析流程相同. 模式:接口+模板 实现:定义纯虚接口描述外部调用,用模板实现该接口,Impl基本解析,而后具体分类实现再继承模板实例.(用模板来泛完成接口基本实现,再派生子类完成细节实现) 语法: struct IMdxBone { virtual void Test() = 0; };
template<class TMDX_BONE> class TMdxBone : public IMdxBone { public: std::vector<TMDX_BONE> m_vecBones;
void Test() { } };
class CMdxBone : public TMdxBone<MDX_BONE_2> { public: };
脚本引擎基本功能语义: 1.分析并执行字符串脚本和文件脚本. 2.从程序内部获取和设置脚本变量 3.从程序内部调用脚本函数,包括参数传递和返回值处理. 4.让脚本获取和设置程序变量 5.让脚本调用程序函数,包括参数传递和返回值处理. 6.类体系的体现和交互,包括2-5的内容.
Luabind非常好地建立了从C++到lua脚本的扩展,但存在几个普遍的问题: 1.C++泛型和接口式编程天生的不兼容性,编译期和运行期多态的本质有别。 2.要使用 Luabind,需要关联lua,特别是几十兆的boost,自己用无所谓,要用于小组开发,god dam n官僚的软件工程。 3.现在相对越来越慢的CPU,大量的泛型技巧的编译速度实在令人难以忍受。 4.接口化引擎是必然的,只有从lua底层作起。
作为一个3D网络游戏程序员,与外挂为敌,是我的职责.
WoW的外挂现在沸沸扬扬,而我却不以为什么.加速爬山穿越外挂只是个小伎俩,而玻璃渣不愿在服务器加上验证,是我也不愿意.行走是网游中最频发的消息,特别是对于WoW这种大型网游,而3D世界的验证总归不是几个加减乘除能计算的,对服务器负担实在太大.为了那些宁愿失去RP而不惜使用外挂的人,而加上验证,而使得大部分不用外挂的玩家游戏体验遭受损失,这是不能容忍的逻辑.古语,防君子不妨小人,亦同此理.解决的方案千千万,何必非用技术手段呢.
中国玩家的素质确实不怎的,包括那些不使用外挂的,看到别人使用外挂就骂娘,心生不平怨恨,现实世界中如此多的杀人抢劫怎不见他义愤填膺,只不过是觉得别人用了外挂,自己的利益受损而不平罢了.别人都用外挂,自己不用就是亏了,所以他也得用才能抚慰他那脆弱的心灵,一点自己的人格主见都没有.古之英雄豪杰者,哪个不是孑然独清,古之魍魉小人者,哪个不是为虎作伥.
其实WoW这个游戏如此之好,何必理他用外挂的体会不到游戏乐趣呢,人见人鄙,又有语,在屈辱中挣来钱,花的也一定不开心.一个人行卑鄙之事,多多少少会受到道德的谴责,人嘛,就这德行.下副本,打对战,作任务,谁愿与一个用外挂的人来往,岂不令英雄蒙羞.
有人认为一个人在网游世界中的行为,不能以此推论一个人在现实世界中的行为,谬已,事物的载体不同,但心灵只有一个,制约一个人行为的始终是他的心灵.
当然,我以为运营商作为一个追逐利益的资本体,利润最大化是他的目的,道德强加不到资本身上,正所谓,一个人要杀一个人是犯法,一万个人要杀一个人就是法律了.这时就要看是遵守了道德的利益大,还是不遵守的利益更大,无可厚非,底下的玩家用自己的利益来衡量运营商的利益,人家当然不会理睬你.
研究私服的人大多是程序员,主要以技术乐趣为主,亦不会去妨害官服的人的利益,有人喜欢玩游戏,有人喜欢玩技术而已,不过其往往成为外挂技术的来源.
有很多人在试外挂,都说自己是试试,这样的人,我也请他去试试吸毒,很好玩的.利益永远是一个人堕落的借口.
命运显露他狰狞的面目,开始指引我前进的方向. 所有的痛苦,所有的欢喜,都指向那自由的彼岸. 如同多年前那一次梦魇般的反抗,为了心灵的自由,我将不惜再次坠入深渊.
一个人在世俗的问题上遭到挫折,就越是引起他在理性思维上的突进,没有比理性的枯燥更能压抑那些卑劣的痛苦.
不要拒绝,不要离别,相偎相依.
颓废使人进步 //========================================= 昔年种柳,依依汉南,今看摇落,凄怆江谭,树犹如此,人何以堪。 //========================================= 对酒当歌,人生几何?譬如朝露,去日苦多。 慨当以慷,忧思难忘。何以解忧,唯有杜康。 //========================================= 君不见黄河之水天上来,奔流到海不复回。 君不见高堂明镜悲白发,朝如青丝暮成雪。 人生得意须尽欢,莫使金樽空对月。 天生我材必有用,千金散尽还复来。 烹羊宰牛且为乐,会须一饮三百杯。 岑夫子,丹丘生,将进酒,君莫停。 与君歌一曲,请君为我侧耳听。 钟鼓馔玉不足贵,但愿长醉不愿醒。 古来圣贤皆寂寞,惟有饮者留其名。 陈王昔时宴平乐,斗酒十千恣欢谑。 主人何为言少钱,径须沽取对君酌。 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。 //========================================= 天下英雄出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。 提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只叹江湖几人回。 //========================================= 绵泊的悲哀浸透我颓废的一生 //========================================= 星垂平野阔,月涌大江流。 //========================================= 夫君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。夫学须静也,才须学也,非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能治性。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及! //========================================= 天行健,君子当自强不息。 //========================================= 蓝水远从千涧落,玉山高并万峰寒。 江间波浪兼天涌,塞上风云接地阴。 万里悲秋常作客,百年多病独登台。 //========================================= 知其然,知其所以然。 //========================================= 得之,我幸;不得,我命,如此而已。 与命运结伴而行。 人生一世,草木一秋。生老病死,如是而已。 //========================================= 明年今日别要再失眠 床褥都改变 如果有幸会面 或在同伴新婚的盛宴 徨徨地等待你出现 明年今日未见你一年 谁舍得改变 离开你六十年 但愿能认得出你的子女 临别亦听得到你讲 再见 在有生的瞬间能遇到你 竟花光所有运气 到这日才发现 曾呼吸那运气 //========================================= 围在城里的人想逃出来, 城外的人想冲进去, 对婚姻也罢, 职业也罢, 人生的愿望大多如此. //========================================= 接受命运无尽的嘲弄 但愿无悔这一生 //========================================= 傲气傲笑万重浪 热血热胜红日光 胆似铁打骨似精钢 胸襟百千丈眼光万里长 誓奋发自强做好汉 做个好汉子每天要自强 热血男子热胜红日光
让海天为我聚能量 去开辟天地为我理想去闯 (碧波高涨) 又看碧空广阔浩气扬 即是男儿当自强 强步挺胸大家做栋梁做好汉 用我百点热耀出千分光 做个好汉子 热血热肠热 //========================================= 君子非能也,擅假于物也. //========================================= 明友已走 刚升职的你举杯到凌晨还未够 用尽心机拉我手 缠在我颈背後 说你男友有事忙是借口 说到终於饮醉酒 情侣会走 刚失恋的你哭乾眼泪前来自首 寂寞因此牵我手 除下了他手信後 我已得到你没有但 你我至少往後成为了蜜友 闭起双眼你最挂念谁 眼睛张开身边竟是谁 感激车站里 尚有月台能让我们满足到落泪拥 不拥有也会记住谁 快不快乐留在身体里 爱若能够永不失去 何以你今天竟想找寻伴侣 谁也会走 刚相恋的你先知我们原来未够 借故松开我的手 藏在贴纸相背後 我这苦心开过没有 但试过散心旅游如何答没有 闭起双眼我最挂念谁 眼睛张开身边竟是谁 感激车站里尚有月台曾让我们满足到落泪 拥不拥有也会记住谁 快不快乐有天总过去 爱若为了永不失去 谁勉强娱乐过谁 爱若难以放进手里 何不将这双手放进心里 时间会走 刚失恋的我开始与旁人携著手 但甚黱可以拥有 缠在那颈背後 最美丽长发未留在我手 我也开心饮过酒
浮夸以至于不稳, 冒进以至于不实, 故愈进越难, 越难越慌, 以至颓唐,不了了之. 故谨之慎之.
人生就是充满希望,人生就是没有希望。
生活与思想的乐趣,可以战胜以往悲哀的记忆。
Destiny with the hidden face decreed that I should come into being,play my little part, and pass again into silence, is it mine either to approve or to rebel?
沧海横流,方显英雄本色。
王侯将相,宁有种乎?
背对名利,面向强敌。
善哉行 上山采薇,薄暮苦饥。溪谷多风,霜露沾衣。野雉群雊,猿猴相追。还望故乡。鬱何垒垒。高山有崖,林木有枝。忧来无方,人莫之知。人生如寄,多忧何为。今我不乐,岁月如驰。汤汤川流,中有行舟。随波转薄,有似客游。策我良马,被我轻裘。载驰载驱,聊以忘忧。
舜发于畎亩之中,傅说举于版筑之间,胶鬲举于鱼盐之中,管夷吾举于士,孙叔敖举于海,百里奚举于市。 故天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。 人恒过,然后能改;困于心,衡于虑,而后作;征于色,发于声,而后喻。入则无法家拂士,出则无敌国外患者,国恒亡。 然后知生于忧患,而死于安乐也。
福州今年的冬天特别的冷,但却不如学生时北京的冬天更肃杀,只是命运的嘲弄却也无尽无休,可爱的代码依旧陪伴着我,如同艺术让人摆脱周遭的庸俗和卑微,在悲伤中仍能感受着生活的美好。 放下乔治吉辛的散文,贝多芬的音乐响起,今年是超越的一年。 |
|