2008年12月7日星期日

VB编程语言历史(转载)

Visual Basic(VB)是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言。它源自于BASIC 编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建 ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。

1991-西雅图夜空的雷电
随着Windows 3.0的推出,越来越多的开发商对这个图形界面的操作系统产生了兴趣,大量的Windows应用程序开始涌现。但是,Windows程序的开发相对于传统 的DOS有很大的不同,开发者必须将很多精力放在开发GUI上,这让很多希望学习Windows开发的人员却步。1991年,微软公司展示了一个叫Thunder的产品,所有的开发者都惊呆了,它竟然可以用鼠标“画”出所需的用户界面,然后用简单的BASIC语言编写业务逻辑,就生成一个完整的应用程序。这种全新的“Visual”的开发就像雷电(Thunder)一样,给Windows开发人员开辟了新的天地。这个产品最终被定名为Visual Basic,采用事件驱动,Quick BASIC的语法和可视化的IDE。Visual Basic 1.0带来的最新的开发体验就是事件驱动,它不同于传统的过程式开发。同时,VBX控件让可视化组件的概念进入Visual Basic。Visual Basic 1.0是革命性的BASIC,它的诞生也是VB史上的一段佳话。

1992-渐入佳境的Visual Basic
由 于Windows 3.1的推出,Windows已经充分获得了用户的认可,Windows开发也进入一个新的时代。Visual Basic 1.0的功能过于简单,相对于Windows 3.1的强大功能没有发挥出来。所以,微软在1992年推出了新版本Visual Basic 2.0。这个版本最大的改进就是加入了对象型变量,比如
Dim b As CommandButton
Dim c As Control

而且有了最原始的“继承”概念,对象型变量分为一般类型(Control和Form)和专有类型(CommandButton和Form1等),一般类型的变量可以引用专有类型的实例,甚至通过后期绑定访问专有类型的属性和方法。还可以通过TypeOf…Is运算符获取对象实例的运行时类型信息(这个功能就是当今C#的is运算符或Java的instanceof运算符)。除了对语言的改进和扩充,Visual Basic 2.0对VBX有了很好的支持,许多第三方控件涌现出来,极大地丰富了Visual Basic的功能。微软还为Visual Basic 2.0增加了OLE和简单的数据访问功能。

1993-数据库组件新添力量
Visual Basic 2.0推出没几个月,微软就发布了新版本的Visual Basic 3.0,可以看出VB这时候旺盛的生命力。乍一看,Visual Basic 3.0的界面没有太大的变化,但其实这个版本是非常及时的。它增加了最新的ODBC2.0的支持,Jet数据引擎的支持和新版本OLE的支持。最吸引人的 地方是它对数据库的支持大大增强了,Grid控件和数据控件能够创建出色的数据窗口应用程序,而Jet引擎让Visual Basic能对最新的Access数据库快速地访问。Visual Basic 3.0还增加了许多新的金融函数。此外还增加了相当多的专业级控件,可以开发出相当水平的Windows应用程序。Visual Basic 3.0是98年以前中国最流行的Visual Basic版本,因为它开发出来的可执行文件非常小,通常能用一张软盘装下。不过,Visual Basic采用虚拟机运行P代码的做法也让很多开发者不满,他们认为这样程序运行的效率很低,这时候Visual Basic的竞争者Delphi也诞生了。

1995-第二次革命性变化,向COM进军。
从 1993年到1995年年中,Visual Basic一直没有新的动静,焦急的开发者都想一窥这个神秘的新版本到底发生了什么变化。Visual Basic 4.0的BETA最后终于和大家见面了。这个版本包含了16位和32位两个版本,16位的版本就像是Visual Basic 3.0的升级版,而32位版则是一场新的革命。首先,人们发现VBX控件不见了,全部换成了OCX控件,这个OCX可能是指OLE Custom Controls,这个OLE已经不是传统的OLE了,用现在的话说,它就是COM控件。第二个最大变化是Visual Basic 4.0所用的语言换成了Visual Basic For Application,这就和Office 95所采用的宏语言统一起来,这个新语言有很多亮点:

1、? 加入了“类模块”。这是面向对象最重要的封装性的基础。
2、? 加入了属性过程,加上函数过程,子程序过程,VB已经有组件开发所需的封装性特征。
3、? 加入了Byte类型、Boolean类型和Object类型。这大大完善了VB的类型系统。
4、? For Each语句和Collection对象。For Each语句给遍历集合类型提供了极大的方便,现在可以在动态增长的Collection上使用For Each,而不用担心集合内容的总数或烦人的下标问题。


这个版本的Visual Basic还能够开发DLL工程,其实就是COM的DLL,可以将书写好的类用这种方式和其他语言共享。

总 之,这个4.0的版本为Visual Basic成为一种COM语言奠定了基础。用Visual Basic 4.0开发基于COM的DLL比任何一种开发工具都方便。但是,Visual Basic 4.0的性能问题变得更加严重了,P-代码的组件成为Visual Basic 4.0严重的性能瓶颈,而且巨大的运行库也让用户感到不满。Visual Basic 4.0对以前版本的支持也不好,使用了大量VBX的项目很难移植到Visual Basic 4.0中。因此,Visual Basic 4.0在中国的普及程度非常低。

1997-Visual Basic的丰收年
1997 年,微软推出了Visual Basic 5.0,这个版本的重要性几乎和4.0一样高。COM(这时候叫ActiveX)已经相当成熟,Visual Basic 5.0当然对它提供了最强的支持。不过,国内还没有意识到COM的重要性前主要对这个版本另一个最大的亮点十分关注:本地代码编译器。Visual Basic 5.0终于在用户的呼声中加入了一个本地代码编译器,它可以让应用程序的效率大大提升。除了这个大家都知道的改进以外,Visual Basic 5.0对Visual Basic For Application语言有重大的完善和丰富:

5、? 事件。Visual Basic 5.0终于允许用户自己创建事件,而且这事件的语法相当强健和完善,这在一种不支持函数回调的语言中是很难得的。现在,VB拥有属性、方法和事件的完整封装性。
6、? 接口。这是VB实现多态性的基础。同时为编写COM组件提供了更多方便。
7、? 枚举。在Visual Basic 5.0中枚举作为Long整型的子类型出现,用枚举可以对常量进行完善的封装。
8、? 类模块的改进。通过类模块的属性可以指定类模块具有多种指定的行为,如私有构造函数等,可以通过这个功能创建符合Singleton和Monostate模式的设计。
9、? Debug.Assert。虽然这个断言系统有点鸡肋,但是总算是给调试带来了方便。
10、 Visual Basic 5.0支持创建自己的集合类。可以创建用于For Each语句的集合类型。
11、新的数据类型Decimal,可以精确地处理有效数位较多的计算。

Visual Basic 5.0的IDE支持“智能感知”,这是一项非常方便开发者的功能,可以不必记住很长的成员名称和关键字,只要按“.”,想要的东西统统弹出来。

Visual Basic 5.0还支持开发自己的ActiveX 控件、进程内的COM DLL组件、进程外的COM EXE组件以及在浏览器中运行的ActiveX文档。这极大丰富了Visual Basic的开发能力,在Internet开发上,Visual Basic 5.0也能有所建树。

1998-企业真正高效的源泉
Visual Basic 6.0作为Visual Studio 6.0的一员发布,证明微软正在改变Visual Basic的产品定位,他想让Visual Basic成为企业级快速开发的利器。Visual Basic 6.0在数据访问方面有了很大的改进,新的ADO组件让对大量数据快速访问成为可能。数据环境和新的报表功能也让数据开发有了全新的体验。Visual Basic 借助COM/COM+强大的功能,可以开发具有N层结构的分布式应用程序。同时,Visual Basic还可以在IIS上开发性能超群的Web应用程序。Visual Basic 6.0在语言方面和IDE方面的改进都不大,但是许多新增的组件成为Visual Basic开发人员手中的利器,如File System Object等。新的字符串函数Split和Replace等也给Visual Basic的程序员带来很大方便。

总之Visual Basic 6.0已经是非常成熟稳定的开发系统,能让企业快速建立多层的系统以及Web应用程序,成为当前Windows上最流行的Visual Basic版本。

2002-第三次革命性变化,向.NET进军
从 1998年发布到2002年正式推出Visual Basic. NET简直吊足了开发者的胃口。从2000年就开始传言的具有继承、Try…Catch语句等新功能的全新VB7.0一直没有露面。直到2001 年,Visual Studio.NET的第一个BETA版问世的时候,所有人都呆了——这是Visual Basic吗?And语句变成了BitAnd,数组只能从0下标开始,而且连Dim语句的意义都变了,几乎所有的窗体控件都变了,Long变成了 Integer而Integer变成了Short,Variant不见了,Static不能用了……简直是翻天覆地,人们已经无暇关注这个版本有什么改 进,转而担心我怎么才能接受这个版本了。其实Visual Basic. NET完全是为了.NET work这一全新的平台而设计的,Visual Basic. NET的设计者一开始没有掌握好新平台和旧语言的平衡。到了BETA2中,很多东西回归了6.0,如BitAnd又变回了And,数组的定义语句也变回了原有的意义,Static也回到了Visual Basic中。但是BETA1惊人的变化让所有的VB开发者怕了,他们觉得这种语言被改的千疮百孔,有些人干脆转去研究传说中的新语言C#。但是 Visual Basic. NET渡过几个BETA版本之后还是找到了正确的定位。Visual Basic. NET有对CLR最完善的支持,同时尽量保留着BASIC易懂的语法风格和易用性。这个版本新增加的功能已经数不清,最重要的几个是:

1、? 继承。至此,Visual Basic完成了向面向对象转变的道路。
2、? 共享成员。
3、? Try…Catch结构化异常处理。
4、? Delegate和Interface。
5、? 名称空间。
6、? 对自由线程的支持。

特别的是,Visual Basic. NET大大减少了Visual Basic语言的关键字,如GoSub、PSet等等。原先的Visual Basic有多达120个关键字,这给写程序带来了很大的不便,现在经过精简,Visual Basic脱下了这个沉重的包袱。

Visual Basic. NET现在是一门现代的、强壮的、面向对象的、简单的可视化开发语言。强大的语言功能吸引了很多开发者。历史是在不断重演的,Visual Basic. NET如今的处境和Visual Basic 4.0很相似,由于兼容性变差,人气也降低了。同时由于依附于.NET work,程序发布造成了一定的困难。现在国内使用Visual Basic. NET的人相对于Visual Basic 6.0来讲显得很少。但是凭借Visual Basic. NET强大的语言功能和MS的支持,Visual Basic. NET一定会显出它的光辉来。

2003-稳中求变的新版本
Visual Basic. NET 2003是一个相当稳重的版本,改变很少,但对小处有很多改进。首先Visual Basic 6.0升级向导做了很大改进,这给从老版本痛苦升级的人带来了更多一些的希望。其次在IDE方面,Visual Basic. NET 2003修正了许多错误,还让事件处理恢复了6.0的开发体验。语言方面只有两项改进:

1、? 在For、For Each语句中声明循环变量。
2、? 增加了数学移位运算符<<和>>。

在 这个比较成熟稳定的新版本下,许多Visual Basic的爱好和开始重新了解Visual Basic. NET,社区里面也渐渐热闹起来。但是,有些使用C#的开发者坚持认为Visual Basic. NET是垃圾,尽管Visual Basic. NET拥有比C#更多的功能和更好的IDE。这说明不了解Visual Basic. NET成为它普及的最大障碍。

2005-完美主义的Visual Basic,能否再现辉煌?
为 了让Visual Basic有最佳的开发体验,Visual Basic 2005的设计者绞尽了脑汁。这次Visual Basic 2005光语言上的改进就足以让Visual Basic的开发人员高兴一阵子。大家可以去看看我那篇介绍Visual Basic 2005新增功能的贴子。挑重要的列在下边:

1、? 泛型
2、? 运算符重载
3、? Partial Type
4、? 窗体的默认实例(让你用VB6的语法使用窗体)
5、? 语法的多种改进
6、? My关键字

现在用Visual Basic 2005只要一行代码就可以读写注册表、访问文件、读写串口、获取应用程序信息...用Visual Basic 2005完全可以称作享受开发。而泛型、运算符重载等功能又可以让Visual Basic的开发人员深入.NET work的全部功能,开发出最优秀的应用程序。

通过几年的发展,它已成为一种专业化的开发语言和环境。用户可用Visual Basic快速创建Windows程序,现在还可以编写企业水平的客户端/服务器程序及强大的数据库应用程序。VB会吸引更多的赞誉和批评,也会继续为广大的用户和程序员使用。


Windows消息

上大学的时候,我没学过VB,但我一直很鄙视VB这门语言。我觉得学着简单,没有用处,而且,你会他也会,看不出什么高深的东西在里面。

自从上了班,开始接触Excel宏,发现在工作中用处很大,有时候你一天的活,写个简单的宏处理一下就完成了,我对VB有点心存感激。虽然宏用的VBA语言和VB在使用时有所不同,但我已经改变了对VB的看法。

昨天下载了吉大的VB视频教程,看样子这个视频已经很久远了,但还是认真的看了两课,有个惊喜的发现:Windows 消息。下面是我的理解。

Windows消息包含了所有的外部输入和内部管理的信息。例如,键盘的输入,鼠标的点击,屏幕的刷新等,如图1所示。









举个例子,如果键盘上K键被按了一下,这个动作触发的Windows消息不仅仅是一个电信号这个简单,他还包含许多信息,比如被按下的是K键,松开的是K键,当前的系统时间等等。Windows将这些信息发送给相应的应用程序,然后应用程序发送给相应的窗口,每个消息都是一个大的结构。

系统将会维护一个或多个消息队列,任何产生的消息都回被放 入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以Windows能够同时进行多个任务。下面的代码演示了消息循环的机制。

int WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
WINDCLASSEX wndclass;
MSG msg;
HWND hwndMain;

// 初始化窗口类
wndclass.style = CS_HREDRAW|CS_VREDRAW;
...

// 注册窗口类
if (RegiserClassEx(wndclass) == 0) return false;

// 创建窗口
hwndMain = CreateWindow( lpszAppName, ...);
if (!hwndMain) return false;

// 显示窗口
ShowWindow(hwndMain, nCmdShow);

// 消息循环
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return (msg.wParam);
}

WinMain函数API

窗口函数,处理系统接收的输入消息和窗口管理消息,VB编写的就是case部分。
MainWndProc(hwnd, msg, wParam, lParam)
{
...
switch(msg)
{
...
case WM_DESTORY: PostQuitMessage(0);
break;
default: return (DefaultWindowProc(hwnd,...));
}
return NULL;
}

当该程序没有消息通知时getMessage就不会返回,也就不会占用系统的CPU时间。在16位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才能够发送下一消息到相应程式,假如一个程序陷如死循环或是耗时操作时系统就会得不到控制权。这种多任务系统也就称为协同式的多任务系统。Windows3.X就是这种系统。而32位的系统中每一运行的程序都会有一个消息队列,所以系统能够在多个消息队列中转换而不必等待当前程式完成消息处理就能够得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT/2000/XP就是这种系统。


未完...

2008年11月22日星期六

我曾经用过的QQ签名:

美好的记忆如烟般轻散
渐渐升华为作日的回忆
平淡似水的大学生活
再也激不起半点波澜
当我坐在电脑前
一种负罪感油然而至
愧对...
我发现自己老了
出现在脑海中更多的是父母和学习
再也没有精力去挽回那无法挽回的青春和今生无法挽回的你...
哎, 青春!


世上最遥远的距离,
不是生与死的距离,
不是天各一方,
而是我就站在你面前,
你却不知道我爱你。


忧郁的蓝色
我喜欢蓝色
但我不知道自己为什么忧郁
总有一些莫名的伤感涌上心头
也许为父母老去的岁月
也许为妹妹艰辛的工作
也许为寻找生命中另一半产生的忧愁...


和你爱的人在一起是快乐的
和爱你的人在一起是幸福的
我只想让你幸福
我只想得到快乐
快乐着你的快乐...
幸福着你的幸福...


总有那么一抹深刻的记忆永驻心间
总有那么一股无法道出的热情萦绕身边
心心相通无须任何证明,时间是一位阅尽沧桑的老人,将见证这一切的一切。
日子就这样快乐的从我面前跳过
突然一天
我感到拥有你们这些朋友真好!!

我们常常懊悔没有珍惜往日的时光
傻傻的憧憬辉煌的未来
而忽视了现在
把握好现在
不要让眼前的生活成为另一段没有被珍惜的时光

2008年11月21日星期五

世界上最精打细算的酒店!

   一天和朋友去酒店吃饭,发现侍者的夹克口袋里都多放了把勺子.感觉挺奇怪,就找来一个熟识的侍者问问.
   那侍者回答说:"我们老板经过统计,发现顾客用餐的时候有百分之33.333的几率会出现把勺子掉在地上的现象.如果侍者放把备用勺子,那就可以节省下去厨房拿新勺子的时间,可以让劳动生产率提高百分之17.365".
   我听了赞赏不已:"这老板真是精明".
   这时候,朋友忽然发现每个侍者的西裤拉链外都有一根细绳子,好奇心又起,就又问.
   那侍者一边把备用勺子递给一桌刚把勺子掉在地上的顾客一边说:"我们老板经过观察计算,发现我们每天平均要去小便5.125次,而每次小便完要花1.360分钟洗手和烘干.于是顾问就建议我们系上这绳子,每次方便的时候便可直接把"那活儿"拉出来,避免手的接触,这样不但省下洗手烘干时间,提高劳动生产率.而且可以节省酒店的水电费".
   听到这里,我对酒店的精打细算更加佩服了,可是随之产生了一个疑问:"那你们方便完,怎么能不用手把"那活儿"放回去呢".
   那侍者环顾左右,盯了一眼正在用备用勺子喝汤的那桌.凑近我耳朵,小声说道:"我不知道别人怎么做的,但是我用的是那把备用勺子..........".

2008年11月19日星期三

爱情C语言

RESULT love(boy, girl)
   {
    if( boy.有房() AND boy.有车() )
    {
     boy.Set(Nothing);
     return girl.嫁给(boy);
    }
    else if (girl.愿意等() )
    {
     next_year:
     for( day=1; day<=365; day++)
     {
      if( day == 情人节 )
       if( boy.GiveGirl(玫瑰) )
        girl.感情++;
       else
        girl.感情--;
      if( day == girl.生日)
       if( boy.GiveGirl(玫瑰) )
        girl.感情++;
       else
        girl.感情--;
      boy.拼命赚钱();
     }
      年龄++;
      girl.感情--;
      if( boy.有房() AND boy.有车() )
      {
      boy.Set(Nothing);
      return girl.嫁给(boy);
     }
     else if( boy.赚钱 > 100,000 AND girl.感情 > 8 )
      goto next_year;
     else
    return girl.goto( another_boy);
    }
    return girl.goto( another_boy);
   }

关于2006年12月的毕业设计的牢骚

今天整理电脑时发现了以前的日记,那时因为课程设计的原因,弄得一肚子的气,最后都写到日记上了。发在这里,以示纪念。

经过3周令人窒息的课程设计,终于迎来了验收的这一天,今天应该是个值得庆幸的日子,过完下午课程设计验收这一关,紧张的生活将告一段落,开始筹划以后考试的事情了..

我的高中老师就说过这么一句话,青春是任何人都不能任意挥霍的岁月。

这句话我到大学才明白,很多人都说,年轻人,多闯闯,不经历风雨怎么见彩虹,失败乃成功之母,可是,我想说的就算经历风雨也不一定能见彩虹。

人生是短暂的,没有给你足够的时间去体验成功,我们常常从一个失败中走出,得到短暂的满足,然后走向令一个失败,假如在80岁的人生中有79个年头是失败的,人生还有什么意义呢?

回想起每次验收时,我感觉自己是个多磨多难的孩子,刚学会站的时候,老师说你怎么不会走啊,刚学会走时,老师说你怎么不会跑啊,刚学会跑时,老师又说,都有交通工具了,你还跑什么...

且不说验收的老师水平怎么样,至少该尊重别人的劳动成果!如果我得程序是从别人那copy过来的,你怎么说都行,骂我一顿我也没有怨言,可辛辛苦苦忙乎了3个星期,整整3个星期,21个白天晚上,就被老师一个你的逻辑还没弄清楚给打发了,就算我得思维不够严密、算法不够出色、代码不够规范,我也总有一些进步的地方啊,可就是一票否决,一个功能不实现就挂你,你做的再好有点疏漏就摆出不让你过的姿态,我真想知道课程设计的初衷是什么...

再说说老师,验收的老师首先应该对学生用的技术熟悉吧,你什么都不知道,怎么验收。其次,应该对课程设计的题目熟悉吧,每个题目因该花一些时间去思考,这样才能服众,要不更不能验收了,对题目要求的算法或者流程都不清楚,怎么验收。验收我的那个老师竟然说借书和还书就像我们登陆自己的邮箱发邮件一样,在网上就能完成,如果那样行的话,学校就没必要有图书馆了,也不用购书了,倒是省了很多钱。

昨天下午验收时是让我开了眼界,真正领教了什么是图书馆里系统的真正“算法”。

老师总该鼓励一些通过自己的劳动和智慧做出的东西,我们虽然都不小了,但在老师眼里,我们还是乳臭未干的编码者,我们在成长的道路上需要的是鼓励,而不是劈头而来的呵斥和批评。我们尊敬你不是应为你的权力比我们大,比我们年长,而是你是一位知识渊博的授人以渔的智者。

信心每个人都有,当我们遇到一件以前曾经没有成功的事情时,你的信心还是100%吗?

我也只会在这里发发感慨,不过那些“无知”的老师们也该好好审视一下自己了,不要再抹杀我心中老师神圣的形象,更不要再扼杀祖国未来的希望!!

2008年11月1日星期六

日语名字

我的:ば しゅう てき/じゃく
老婆的 :り ひん えい

2008年10月26日星期日

复读机

公交车上超挤,有一女人站在门口,
从车后面挤过来一个GG要下车,
跟那女的说了一句“让一下,下车”,那个女滴木有动。
GG挤过去时就踩到她了。
结果那女人好厉害的,不停的骂“神经病啊你!神经病啊你!~~”,还超大声,搞得全车都看呀。
GG一直木有说话,下车时忍不了了,回头对那女人说,“复读机呀你!”
全车人暴笑~!
后边有几个搞笑的小孩,不停的伴演刚才的一幕,
甲说“你神经病呀你!。。。。。乙说“你复读机呀你”。。。。。。
全车人暴笑~!
后来,有个小MM也要下车,挤过去怯怯滴说“偶~偶~偶想下去,偶不是神经病~!”
全车人再次暴笑~!
那个女人木有说话,可是从边上飘来一句话“你是不是没电了”
全车人暴笑不止~!

2008年10月19日星期日

手机换号

今天换了手机号码,老婆也是。备份一下,免得以后忘记。
卡号: 9688H, 9689H
puk: 10663723, 38130322
pin初始为1234
联通大众卡,月租15,接听免费,白天市话3毛,长途3毛,晚上市话2毛,长途1毛5。办理定向长途全天1毛5。
明天开始就用新号了,哈哈哈.....

晕,刚发现,每个卡里只有50元,明天要去找丫的

2008年10月6日星期一

此版本之魔兽争霸III需要特定语言版本之Windows

中文xp下能够正常玩的魔兽争霸,在英文xp下会出现以下问题,弹出一个对话框:“此版本之魔兽争霸III需要特定语言版本之Windows”。
解决方法:
1. 1.20或1.21版本,打开game.dll文件,将字符串“3D04080000742A3D04”中的74修改为EB,保存。
2. 1.22版本, 打开game.dll文件,将字符串“3D04080000741B3D0410000074143D040C0000740D”中的第一个74修改为EB,保存。
修改后游戏正常运行。
补充,game.dll文件可以用UltraEdit软件打开。

2008年8月7日星期四

我的博客出炉了

明天奥运会开幕,期待中...