msgbartop
同一天地间,同一网络下,P9′Blog与您共享今日互联网→WWW.P9.NET.CN
msgbarbottom

02 五 08 OpenBSD 4.3

OpenBSD 项目致力于开发一个自由和免费,多平台的,基于4.4BSD 的UNIX-like操作系统. 我们的努力重点在可移植性, 标准化,正确性, 主动安全性,集成的密码学技术. 大多数运行于 SVR4 (Solaris), FreeBSD, Linux, BSD/OS, SunOS的程序,在OpenBSD下都有相应的二进制仿真程序.OpenBSD系统由于安全、稳定而著称,近10年以来在默认安装配置下只发现了一个远 程漏洞.
下载地址:ftp://ftp.openbsd.org/pub/OpenBSD/4.3/

02 五 08 AJAX不能满足高级用户 须考虑AIR或Silverlight

根据Forrester的最新研究报告,AJAX不能满足大部分高级用户的富网络应用(RIA)性能。
鉴于AJAX的局限,该调查机构建议商业用户考虑使用下一代RIA技术例如Adobe AIR和微软Silverlight工具组合。

该报告称,高级用户发现AJAX应用十分复杂,反应时间缓慢。并且AJAX商业应用的反应时间和用户交互的平均速度十分缓慢。

  报告指出,“当本地渲染复杂的屏幕显示时,需要过多的终端CPU时间。一家欧洲的零售商希望将Visual Basic富客户端迁移到AJAX,据称最初加载屏幕显示需要很长时间。考虑到很多旧的客户端应用的瞬间显示,AJAX令高级用户很苦恼。”

  另外,因为AJAX框架倾向于将所有的商业逻辑保存在服务器上,在每一个输入栏的用户交互都可能需要浏览器和服务器之间的一个通信周期。一些大型的应用经常在一个屏幕上包括50个输入栏。

  因此,AJAX的开发者告诉Forrester,相对于传统的富客户端,他们不得不减少实时输入验证,来满足性能要求。报告说,实时输入验证是高级用户的高优先权。

  Forrester认为AJAX框架厂商努力跨越这些障碍,但是却遇到了更多的问题。例如,带宽的改进却没有使AJAX性能带来期望中的提升,“带宽已经广泛提升,可是人们觉察到很多AJAX应用的速度却没有相应提升。”

  另外,大部分企业桌面使用病毒扫描器分析JavaScript的每行代码,这降低了浏览器的渲染性能。

  如果AJAX厂商和浏览器厂商朝着一个方向努力,这些问题可能解决。但是Forrester强调,事实恰恰相反。微软在开发AJAX的替代品 Silverlight,同时Mozilla缺少足够的开发者解决AJAX的问题。苹果的Safari也没有被软件厂商广泛采用成为浏览器的选择。

  Forrester建议软件厂商专注高级用户的需要,来评估替代AJAX的富客户端平台。大型厂商还可以考虑投资Tamarin——这是Mozilla主持的开源计划,以构建下一代JavaScript引擎。Tamarin还将对未来的Firefox开发做出贡献。

02 五 08 高效使用Linux

越来越多的人愿意尝试linux系统,这些习惯也许会令你事半功倍,找到其中的乐趣。
刚开始使用Linux时你也许会感到不习惯,许多高手也都有这样的经历。毕竟,曾经他们也都是新手。但是现在Linux团体已经在为新用户提供有关指南, 手册和基本的技术文档来使他们尽快上手方面做的相当出色。三年前我首次接触Linux,很多人通过论坛,在线聊天和电子邮件等帮助我,这些“企鹅”们真是 相当热心。

对此,我深感应该为无私帮助我的团体做一些力所能及的贡献,我应该给刚使用Linux的朋友写点什么。这里我编译了七个当我刚入门时别人告诉我的七个习惯。我相信如果你运用了这七个习惯,在你使用Linux时你会感觉更安全,便利,学到很多实用的东西,最终你会发现使用Linux也是那样的愉悦。

1-不要以根用户登录

这是你首先应该注意和遵守的。以前我们可能已经习惯了Windows,我们一直以为权限越高越好,所以我们喜欢以管理员帐户登录。但是这也许是Windows经常被病毒骚扰和不安全的重要原因,现在太多人都在用根用户登录。

权限越高责任越大,拥有管理员权限你需要谨慎对待你所做的任何事情,但是错误还是不可避免。我记得我最先使用的是Suse Linux,有很多事项需要管理但是没有图像用户界面我不知道如何做,于是我天真的注销并登录到了根用户的图形界面。根用户图形界面的默认壁纸是一排排的高亮地雷。这些符号在我脑海里盘旋,我很小心没有终于没有做错什么。
那么以根用户登录有那些危险?

1.你可以想象你在没有保护网的情况下打秋千,会不会感到害怕?这和你以根用户登录的道理是一样的,你会不经意间毁掉你的系统。
2.你可能会不小心运行恶意软件。通常在根用户模式下任何程序的启动都默认给予所有权限的。
3.如果你的系统有安全漏洞没有修补,你就可能被别人完全控制。
4.这是使用Unix的惯例,除非必须那么不要轻易在根用户下运行任何东西。如果一个不是自己触发的程序请求根用户权限,那么你就要小心了。
通常,我们不必登录根用户界面,下面是几条技巧:

*使用“sudo”或“su”命令,并在你完成管理时退出
*如果你不知道如何使用命令行完成这些,你可以使用“gksu”或“kdesu”。比如,按 Alt+F2并打出“gksu nautilus”,并在你完成时马上结束程序

2-合理的命名你的文件

Linux环境下,你可以按照你的意愿命名文件,但是以下两点是不允许的:1)“/”是根目录专用的;2)不要使用无效字符。其它的在技术上都是可以的,但是为了避免以后的麻烦这里有几点经验你可以遵守:

*经验上,只使用字母、数字、连接符(-)和下划线(_)
*避免使用美元符($),括弧和百分号(%)等特殊字符,这些字符对于shell有着特殊意义,可能会引起冲突
*避免使用空格,在终端上处理含有空格的文件是很愚蠢的。你可以用连接符或下划线来代替空格。

这些已经基本上成为我的习惯,并且我在使用Windows和MAC时也不自觉的遵守这些准则。

3-将你的home目录放在一个独立的分区上
这样做会给你很大的灵活性。将home目录放在一个独立的分区上,可以在你重装系统甚至升级你的整个版本而不会丢失你的数据和个人设置。你可以在根目录下重新设置你所需要的而保留home分区。现在你可以将你需要的随意分类而不必担心的数据和个人设置,你可以随时使用它们。
如果碰巧在你安装系统之后才懂得这一点,不要失望。你可以按照Carthik在ubantu Blog上的一片名为“Move /home to it’s own partition”的指导道一步步的完成。

4-合理的灾难管理
Linux是比较强大和稳定的,但是任何系统都会崩溃。在你CTRL-ALT-DEL,重启之前,你应该学会如何处理你遇到的事故。你需要知道如何在不重启的情况下轻松恢复你的系统。我个人认为这种情况分为几个不同的层次,如果前一步不奏效的话请转向下一步:
1.我将“强制关闭”程序放在我的任务栏上,如果哪个程序出现问题可以单击“强制关闭”图标并结束该程序
2.如果上一步不奏效,调用终端,用“ps -A”,记下那个出问题程序的进程号,结束它
3.使用“killall”命令,比如“killall firefox-bin”
4.如果整个图形界面都冻结,你已经不可能调用终端,按CTRL-ALT-F1,这样可以转到另一个终端,这样你就可以使用步骤2和3来结束出问题的程序
5.还不行的话,你可以使用CTRL-ALT-Backspace组合重启你的图形界面,但是要注意的是,这样会结束你正在运行的GUI程序
6.调用CTRL-ALT-F1再使用CTRL+ALT+DEL这样不会立即重启你的系统,只是按照正常模式重启,所以是安全的(假定你想要重启并且CTRL-ALT-F1可用)。
7.如果这一切都不管用,也不用记着按强制重启按钮,尝试Raise a Skinny Elephant

5-主动尝试
你可能对朋友给你设置设计的当前版本和配置很满意,这适合你。这很好,但是可能会有比这更好的。为什么不尝试下Linux和开源的灵活性和丰富性呢?不要害怕尝试不同的程序,图形管理和桌面。实验直到你找到最适合你的。你可以这样想,你现在居住在世界上最好的地方,但是环球旅行也不会有什么坏处的?或许说不定你还可以找到一个更好的居住地,就算不能,你旅行的时间也值得好好品味,你对其它国家,它们的人和风俗,思考方式了解的更多,最终说不定你会喜欢上这样的尝试。你尝试的任何新事物都会增加你的学识,一年左右的时间你将会对Linux和开源世界有一个很好的把握。

我个人曾尝试过至少10种分配方式,4种桌面和五种桌面管理。我最近的文章《 Etymology of A Distro》使我对更多的分配感兴趣,象Zenwalk, Foresight和 Sabayon等。朋友,主动尝试,这对你有好处。
在你尝试之前,你可以参考以下几点:

*设置好你感觉最舒服的系统,因为你需要一个时刻工作的系统。这样你就可以按照下面的几点进行尝试
*你可以利用虚拟机来完成。安装一个Vmware或Virtualbox,用它们来做测试
*如果你不知道如何运用虚拟机,你可以设置一个独立分区来尝试
*最好的,你可以用一个设置好的PC,再有一个当作测试用。这样你就可以随心所欲的进行尝试

6-熟悉使用你的命令行

虽然我不提倡你一定要学习命令行,有太多的文章一直强调学习命令行的重要性。这里我假设你已经知道他的重要性并且已经知道怎样用它处理一些简单的管理任务。你可以按照指导书和手册做相应的配置。但是不要一味的复制和粘贴。就是说,不止不加思考的执行命令许多有自由天性的人劝诫你要尽量深刻的理解每条命令行的含义,它能做什么。为什么手册上这样做的,而不是那样做?理解你所做步骤的基本原理。

过了一段时间你就会感觉你已经能很好的运用它了。

最后你会发现它仅仅是种伪装的语言。每条命令可能只是一些词语的首字母,或一个单词的缩写。你希望你的狗理解“Spike fetch ball”这样的长句,为什么不尝试理解下“sudo mv /file1 /file2”那?

7-为你的用武之地做些准备

我有过很多这样的经历,当有个朋友请求我在他的电脑上做些东西,但是由于他所选择的操作系统会出现糗事。有时候我有急事但是仅有的电脑有很挫的操作系统。不必痛苦,随身戴上你的linux系统,不管是存储在U盘或CD上。有相当多的linux版本很方便的,象Knoppix, DSL和 Puppy Linux等.

很惭愧,事实上我自己还没用上这个习惯,我想我也需要言行一致。

02 五 08 黑莓今年年底推出翻盖手机

黑莓一直以来都在做直板,光是一个触摸设计就让业界兴奋了一阵子,而他们却选择再进一步:翻盖手机,这款手机开发代号Kickstart,BGR已经搞到了最新的真机照片.
这款手机拥有两个LCD,主屏解析度高达480×320,一个轨迹球用于导航,并且RIM还会安排一个新的200万像素摄像头设备进去.这款手机支持HSDPA,黑莓标志性的QWERTY键盘和拥有GPS和microSD扩展.

02 五 08 创力CMS v4.2 正式版

下载地址:http://download.aspoo.com/CreateLiveCMSv4.2_Access.rar运行环境:ASP Access
运行速度与效率:
代码进行全面重整及优化,清除冗余及垃圾代码,清除大部分缓存,部分采用XML缓存,运行速度更快、郊率更高。

全静态HTML文件生成:
可将站点首页、频道首页、各栏目、以及每个内容页都生成静态HTML文件,大大提高浏览速度及搜索量。
HTML生成各频道有14种生成文件存放结构选择,5生成文件命名形式选择,可随意定生成的扩展名,一切更可能的根据您的喜好DIY。
同时将各频道导航、栏目导航、广告等实行JS生成,并调用,更改后并自动刷新JS,不必再全部重新生成HTML。

无限频道复制功能:
可无限复制文章、下载、图片、影视等模版,复制出来的频道,完全独立设置,独立模版。

各频道完全独立的强大JS功能:
强大的Js设置,采用标签式管理,可自定义显示内容及HTML代码,让您非常容易的做出自己个性的Js。
同时,Js每天会自动刷新,让您免去了每次都要进后台点刷新Js的烦恼。
再配合无限频道复制,做一个自己个性的大站已不是梦想。

系统安全:
CLCMS以安全为基础,密码采用MD5加密,保证用户资料安全,程序代码中设计周密,可自动屏蔽恶意攻击代码,更集成防SQL注入程序。从而可全面防止各种SQL注入攻击手段,并进行记录在案,保证了系统的安全和稳定运行。更详细的管理事件记录,管理员每一步后台操作都记录在案。同时官方不断的更新,安全无后顾之忧!

模板化体系:
界面和程序分离,所有模块均通过标签调用,集成类同Macromedia Dreamweaver
一样简单的可视模板编辑方式,修改模板容易、快捷。

数据管理:
提供强大的数据备份和恢复功能。可以在线备份、恢复、压缩数据库。
查看系统空间占用情况、系统初始化、查看服务器信息及到在线直接执行SQL语句。

02 五 08 VB6在拖托盘中写入应用程序图标

1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False

  2、菜单:工程–添加模块 按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas

  3、在Module1中写下如下代码:
  

  [code]Option Explicit

  

  Public Const MAX_TOOLTIP As Integer = 64

  Public Const NIF_ICON = &H2

  Public Const NIF_MESSAGE = &H1

  Public Const NIF_TIP = &H4

  Public Const NIM_ADD = &H0

  Public Const NIM_Delete = &H2

  Public Const WM_MOUSEMOVE = &H200

  Public Const WM_LBUTTONDOWN = &H201

  Public Const WM_LBUTTONUP = &H202

  Public Const WM_LBUTTONDBLCLK = &H203

  Public Const WM_RBUTTONDOWN = &H204

  Public Const WM_RBUTTONUP = &H205

  Public Const WM_RBUTTONDBLCLK = &H206

  

  Public Const SW_RESTORE = 9

  Public Const SW_HIDE = 0

  

  Public nfIconData As NOTIFYICONDATA

  

  

  Public Type NOTIFYICONDATA

   cbSize As Long

   hWnd As Long

   uID As Long

   uFlags As Long

   uCallbackMessage As Long

   hIcon As Long

   szTip As String * MAX_TOOLTIP

  End Type

  

  Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

  Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
[/code]
  
 4、在Form1的Load事件中写下如下代码:

  

  [code]Private Sub Form_Load()

  

   '以下把程序放入System Tray====================================System Tray Begin

   With nfIconData

    .hWnd = Me.hWnd

    .uID = Me.Icon

    .uFlags = NIF_ICON or NIF_MESSAGE or NIF_TIP

    .uCallbackMessage = WM_MOUSEMOVE

    .hIcon = Me.Icon.Handle

    '定义鼠标移动到托盘上时显示的Tip

    .szTip = App.Title + "(版本 " & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar

    .cbSize = Len(nfIconData)

   End With

   Call Shell_NotifyIcon(NIM_ADD, nfIconData)

   '=============================================================System Tray End

   Me.Hide

  End Sub [/code]

  5、在Form1的QueryUnload事件中写入如下代码:

  

  [code]Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

  Call Shell_NotifyIcon(NIM_Delete, nfIconData)

  End Sub [/code]

  6、在Form1的MouseMove事件中写下如下代码:

  

  [code]Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

   Dim lMsg As Single

   lMsg = X / Screen.TwipsPerPixelX

   Select Case lMsg

    Case WM_LBUTTONUP

     'MsgBox "请用鼠标右键点击图标!", vbInformation, "实时播音专家"

     '单击左键,显示窗体

     ShowWindow Me.hWnd, SW_RESTORE

     '下面两句的目的是把窗口显示在窗口最顶层

     'Me.Show

     'Me.SetFocus

     '' Case WM_RBUTTONUP

     '' PopupMenu MenuTray '如果是在系统Tray图标上点右键,则弹出菜单MenuTray

     '' Case WM_MOUSEMOVE

     '' Case WM_LBUTTONDOWN

     '' Case WM_LBUTTONDBLCLK

     '' Case WM_RBUTTONDOWN

     '' Case WM_RBUTTONDBLCLK

     '' Case Else

   End Select

  End Sub [/code]

  7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。单击此图标,Form1就自动弹出来了。

02 五 08 利用VB函数Dir()实现递归搜索目录

我在很久以前就实现了这个方法了。它没有采用任何的控件形式,也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数。事实上,直接采用Dir()函数是不能进行自身的递归的调用的,但我们可以采用一种办法把Dir将当前搜索目录的子目录给保存下来,然后在自身的search(strPathName)递归函数中依次进行递归的调用,这样就可以把指定的目录搜索完毕。
具体代码如下:
[code]'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'函数GetExtName
'功能:得到文件后缀名(扩展名)
'输入:文件名
'输出:文件后缀名(扩展名)

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Function GetExtName(strFileName As String) As String
 Dim strTmp As String
 Dim strByte As String
 Dim i As Long
 For i = Len(strFileName) To 1 Step -1
  strByte = Mid(strFileName, i, 1)
  If strByte <> "." Then
   strTmp = strByte + strTmp
  Else
   Exit For
  End If
 Next i
 GetExtName = strTmp
End Function

Public Function search(ByVal strPath As String, Optional strSearch As String = "") As Boolean
 Dim strFileDir() As String
 Dim strFile As String
 Dim i As Long

 Dim lDirCount As Long
 On Error GoTo MyErr
 If Right(strPath, 1) <> "\" Then strPath = strPath + "\"
 strFile = Dir(strPath, vbDirectory or vbHidden or vbNormal or vbReadOnly)
 While strFile <> "" '搜索当前目录
 DoEvents
  If (GetAttr(strPath + strFile) And vbDirectory) = vbDirectory Then '如果找到的是目录
   If strFile <> "." And strFile <> ".." Then '排除掉父目录(..)和当前目录(.)
    lDirCount = lDirCount + 1 '将目录数增1
    ReDim Preserve strFileDir(lDirCount) As String
    strFileDir(lDirCount - 1) = strFile '用动态数组保存当前目录名
   End If
  Else
   If strSearch = "" Then
    Form1.List1.AddItem strPath + strFile
   ElseIf LCase(GetExtName(strPath + strFile)) = LCase(GetExtName(strSearch)) Then
    '满足搜索条件,则处理该文件
    Form1.List1.AddItem strPath + strFile '将文件全名保存至列表框List1中
   End If
  End If
  strFile = Dir
 Wend
 For i = 0 To lDirCount - 1
  Form1.Label3.Caption = strPath + strFileDir(i)
  Call search(strPath + strFileDir(i), strSearch) '递归搜索子目录
 Next
 ReDim strFileDir(0) '将动态数组清空
 search = True '搜索成功
 Exit Function
MyErr:
 search = False '搜索失败
End Function[/code]

02 五 08 vb编程的七个优良习惯

1、"&"替换"+".

  在很多人的编程语言中,用“+”来连接字符串,这样容易导致歧义。良好的习惯是用“&”来连接字符串.

  不正确:[code]dim sMessage as string
sMessage="1"+"2"[/code]

正确:[code]dim sMessage as string

sMessage="1" & "2"[/code]
注意:"&"的后面有个空格.

2.变量命名大小写,语句错落有秩

  下面大家比较一下以下两段代码:

  读懂难度很大的代码:
[code]dim SNAME as string
dim NTURN as integer

if NTURN=0 then
if SNAME="sancy" then
end if
Do while until NTURN=4
NTRUN=NTURN+1
Loop
End if[/code]
容易读懂的代码:
[code]dim sName as string
dim nTurn as integer

if nTurn=0 then

 if sName="sancy" then

 end if

 Do while until nTurn=4
  nTurn=nTurn+1
 Loop
End if[/code]

3.在简单的选择条件情况下,使用IIf()函数

  繁琐的代码:[code]if nNum=0 then
 sName="sancy"
else 
 sName="Xu"
end if[/code]

简单的代码:

sName=IIF(nNum=0,"sancy","Xu")

4.尽量使用Debug.print进行调试

  在很多初学者的调试中,用MsgBox来跟踪变量值.其实用Debug.print不仅可以达到同样的功效,而且在程序最后编译过程中,会被忽略.而MsgBox必须手动注释或删除.
不正确:

MsgBox nName

正确:

Debug.pring nName

5.在重复对某一对象的属性进行修改时,尽量使用with….end with

  6.MsgBox中尽量使用图标

  一般来说

  vbInformation用来提示确认或成功操作的消息
  vbExclamation用来提示警告的消息
  vbCritical用来提示危机情况的消息
  vbQuestion用来提示询问的消息

  7.在可能的情况下使用枚举

  枚举的格式为[code]public enum
...
end enum[/code]
好处是加快编译速度

02 五 08 VB中通过相对路径引用标准DLL

很长时间以来,都认为只能通过绝对路径引用标准DLL中的函数。其实,你也可以用相对路径。很简单的,现在就尝试一下吧。

  1)绝对路径方法

  比如你的DLL文件位于c:\testDLL\debug\testDLL.dll

  一般来说,你需要在VB中作如下声明

Declare Sub mytest Lib "c:\testDLL\dubug\testDLL.dll" (ByVal x As Long)

  另外的一个变通方法是把testDLL.dll放在windows的系统目录下,这样,你就可以直接引用文件名了。不过,需要把一个文件放到windows系统目录下,很是不爽!

  2)相对路径方法

  看看我们如何用相对路径,假设你的DLL文件位于c:\testDLL\debug\testDLL.dll,你的VB程序位于目录c:\testDLL\vbClient
你可以在VB程序中作如下声明:

Declare Sub mytest Lib "../dubug/testDLL.dll" (ByVal x As Long)

  如果直接运行你的VB程序,系统会提示错误:找不到../dubug/testDLL.dll.

  为了使上面的声明其作用,先暂时关闭你的VB工程。然后用一个文本编辑器(notepad,editplus,etc)打开工程文件(就是那个后缀是vbp的家伙),通常vbp文件由几个部分组成,比如我的vbp有两部分:

Type=Exe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINDOWS\System32\stdole2.tlb#OLE Automation
Form=Form1.frm
Module=Module1; Module1.bas
Startup="Form1"
ExeName32="Project1.exe"
Command32=""
Name="Project1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="American Standard"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1

[MS Transaction Server]
AutoRefresh=1

  你要做的就是在第一部分MaxNumberofThreads=1后添加一行DebugStartupOption=0。这样,vbp文件就会像下面这样:

……(前面的都一样,故省略)
ThreadPerObject=0
MaxNumberOfThreads=1
DebugStartupOption=0

[MS Transaction Server]
AutoRefresh=1

  OK.That's all!!重新用VB开发环境打开你的工程然后运行。奇迹发生了吧!

02 五 08 Google Earth 4.3.7204 Beta

Google Earth是一款由Google公司开发的的虚拟地球仪软件, 它把卫星照片、航空照相和GIS布置在一个地球的三维模型上.Google Earth使用了公共领域的图片、受许可的航空照相图片、KeyHole间谍卫星的图片和很多其他卫星所拍摄的城镇照片.
1、为全球各大城市增加了照片级的建筑物模型
2、带有阳光效果的清晨和黄昏视角
3、可从外太空直接俯冲至街头
下载地址:http://dl.google.com/earth/GE4/GoogleEarthWin.exe