Camtasia Studio 6

下周要负责录一个内部产品的Tutorial,于是先行用Camtasia Studio来录了一个测试教程,还是蛮好用的。

缺点有:

Smart Focus显得移动过于频繁;

生成Flash预加载缓冲内容过多,将近5%;(不知有没有配置选项)

机器embeded的话筒录下来,感觉完全是另外一个人的声音;

突然发现,”嗯啊哈”的,如此之多,呵呵。

附测试结果:【教程整个很白痴,纯粹测试性质】

http://www.axqd.net/hotkey/ for Hotkey Power on http://www.axqd.net/

PS: 工作后真是没法坚持定期写Blog了,一切随缘吧,想起了又无事,就多写几篇。

Windows Update Services概述—微软系列讲座3

主讲人:王辉
职业:微软认证讲师—苏州索迪高级培训中心
本次讲座不涉及
WUS Chain

防火墙需求
80 443
WUS可使用自定义端口(若80占用,8530,不可配置)

http://www.microsoft.com/windowsserversystem/content/sus/popper.html

SUS
必须先下载全部补丁,才能下载catelog

只有使用SUSLogView等第三方工具检测用户更新

windowsupdate.log,对域的话用MBSA,不够友好

不能对微软应用、驱动程序分发update

在WUS部署中使用计算机分组

Approve时对某组进行应用:
如:测试组;高危组
内置:All Computers Group;Unassigned Computer
实现分组:
Server-Side Client-Side(使用组策略修改)
WUS数据库

WMSDE=MSDE(WINDOWS)只能在server2003上,连接数目,数据库大小没有限制
MSDE(SQL)可以在2000/server2003上,5个连接数目,数据库2G
SQL SERVER 2000(SP3a)

数据库存放的信息:
WUS服务器配置信息
每个更新的metadata(即catalog)
客户端信息及客户端需要哪些更新

更新分为两部分:
1、metadata
2、文件

磁盘空间:最小6G 建议30G

可以从微软的更新站点下载WUS批准的安装,即从WUS下载catalog,而从微软下载文件,以节约外网带宽

Store update file on WUS/Microsoft

带宽优化
* 自动批准检测和自动批准安装
* 可以按更新类型设定是否对某些类别自动批准/安装
* 批准删除

管理员可以先批准检测,用户可以先收到catalog,然后管理员可以根据用户的选择的报表选定某些批准安装

延时下载更新:即只有批准安装的更新才会下载

一般自动批准检测,再手工批准安装

批准状态:

可以根据计算机组更改批准状态

设置最后期限:(DeadLine)

如果用户过了这个时间还没有安装,则强制安装

如果发现office的更新在客户端无法安装,那么先需要在客户端安装windows installer 3.0

Express installation files
比较差异,生成diff文件,然后更新
节约局域网带宽,浪费广域网带宽,从微软网站下载的文件更大

使用BITS(后台只能传输服务)进行所有文件的传输工作
断点续传、带宽控制(如果目前使用60%带宽,则WUS只使用40%带宽)

强大的report功能
report详尽,并且支持filter
客户端更新状态报告

管理与internet断开的网络
导出与导入:建议使用增量备份
1、比对export和import服务器同步高级选项,保证设置一致
2、复制更新:
* 使用ntbackup备份export服务器存放更新的文件夹,默认为WUSWusContent
* 在import服务器使用ntbackup还原备份,还原时选择“Alternate location”路径不变
3、复制metadata
* 从export服务器数据库导出
* wusutil export c:export.cab c:export.log
* 将metadata导入import服务器
* wusutil import c:export.cab c:export.log

数据库一定要独立(不能一个sql支持多个WUS)

硬件考虑
500客户端以下:
CPU 最小 300MHz 推荐 1G
RAM 最小 256MHz 推荐 1G
DB 最小 WMSDE/MSDE 推荐 WMSDE/MSDE

500客户端以上
CPU 最小 1G 推荐 2G
RAM 最小 1G 推荐 1G
DB 最小 SQLSERVER2K 推荐 SQLSERVER2K

磁盘 最少6G 推荐30G

软件:
IIS5.0
BITS2.0
Server2003:.Net Framwork1.1 SP1
2000:IE6.0SP1
.net Framwork1.1 SP1
SQL Server 2000 Desktop Engine(MSDE2000)
WUS自动配置:ASP.Net version 1.1
WMSDE

selfupdate client
2000sp3
xpsp2
server2003

每隔22个小时检测,可通过组策略调整

下载后会再次确认在服务器是否依然有效且被批准

最新的管理模板(%windir%infwuau.adm)可从sp2中获得

即时检测wuauclt.exe /detectnow

客户端cookie过期,其中包含组成员信息(client side)

远程的SQL Server限制:

前端或后端的服务器都不可以为win2000 server
前端或后端的服务器都不可以为域控制器
后端数据库不可以为wmsde或者msde

实现步骤:

在前端服务器安装WUS
wussetup.exe /F
在后端服务器安装WUS
wussetup.exe /B
在后端服务器设置权限
配置前端服务器使用后端

装后端服务器前一定要先把准备工作做好,如sql服务器、sp等等
wussetup.exe /B /V “CONTENT_LOCAL=1″ CONTENT_DIR=”E:WUS”

local_machinesoftwareMicrosoftWindowsUpdateServicesServerSetupSqlServerName

最后启动WUS服务

灵活利用组策略做网络管理—微软系列讲座2

主讲人:孔文达
职业:微软金牌讲师(有这种职业吗?晕~~)
MSN:[email protected]
EMAIL:[email protected]

随堂笔记(较乱,请见谅!)

[组策略功能]
软件安装
开机、登陆、注销、关机脚本
文件重定向
控制IE属性
控制用户操作系统的诸多属性

[组策略组成(嵌入形式)]
GPO(Group Policy Object)
存储于活动目录数据库中的对象
包括以下两部分:
1、GPC(Container):存储于活动目录数据库,保存版本信息,如是否改变等等,占用空间较小;
2、GPT(Template):存储于SYSVOL文件夹(安装活动目录时创建)中,包含调整的所有内容;
SYSVOL目录包含以下最为重要两个文件:
Default Main Policy
Default Domain Control Policy

[组策略应用]
结构:
Site
Domain
OU
OU…
如果设置冲突,则按如下原则解决:
下级优先:OU>Domain>Site

[组策略的存储]
域控制器选项:
PDC模拟器:第一台DC
活动目录管理单元:当前DC
任何可用域控制器:所有当前有效DC

[组策略四大功能]

1、GPMC—编辑组策略的软件,推荐使用
2、软件安装
只是显示在开始程序里面,并提示新安装了程序,但是只有第一次使用才会进行安装
计算机配置:开机时生效
用户配置:登陆时生效
3、设定开机、登陆、注销、关机脚本
4、文件夹重定向
个人文件夹都存在指定位置了,方便管理,用户文件,即使管理员也不能查看
只能指定如下文件:
Application Data
桌面
我的文档
开始菜单
5、控制用户操作系统的诸多属性
举例:
软件限制策略
删除运行…

WMI筛选器
如:判断C:剩余空间
SELECT * FROM win32_logicaldisk WHERE name = “c” and freespace < 100000000(字节)

注意:组策略可自己扩展

[常用工具]
WMI tools:辅助写WMI筛选器
WinInstallLE:制作msi
DCGPOFix(resource-kit):生成刚才提到的误删除的两个极其重要的默认的policy

[常见问题]
设置了 并且注销重新登陆后依然没有生效?
法一、等待2小时
法二、使用命令gpupdate /force强制客户端和DC同步

SMS在企业中的应用—微软系列讲座1

今天在网上逛,突然发现有关于SMS的在线讲座,想到翔帅叫看看关于SMS的咚咚,顺便进去听了听。中国人讲的,不过ppt和操作系统是英文的:(

感觉还不错,不过就是普通话太差。待会儿我会把我的随堂笔记贴在下面,比较乱,希望大家不要介意哈,一个字,一个字打得哦,连复制都不行(视频),我容易吗我?呜呜…

听完后,感觉要想应用sms,现在还不现实,因为现在网管会整个网络系统还没有采用域来管理,所以如果用SMS的话,只有采用最低效的Network模式(详见笔记),意义不大。

算了,不想说了,感冒阿,太惨了!!!贴!!!

===== 华丽的分界线 =====

SMS在企业中的应用

中科院软件研究所 史震

一、体系架构:

* 操作架构

Based on Windows Server 2003:
Like DNS,DHCP,ISA Server(Security),SQL Server(DataBase),SMS Server

* 应用程序架构

Based on Application Center 2000

* 信息流架构

Based on Exchange2003

二、SMS应用范围:

* Asset Management:Hardware
* Software Distribution:Software
* Security Update:Update(Better than SUS:Not only Server SP,Office SP)
* Remote Computer Support:Remote Help
* Mobility Support:移动用户流量本地化

三、Features of SMS:

* Hardware and software inventory:

Hardware software change
Software inventory
Example:
Forbidden QQ,MSN LIKE Program

* Software Distribution:

Noman setup
活动目录中的组策略只能基于域来分发软件,如果只属于某个工作组则无能为力了

* Software metering:

盗版软件
软件使用信息,使用者,启动、停止时间、频率
Example:
某台计算机安装了Office2000但一直没有使用,或使用特别少,再购买时减少购买Office2003数量

* Remote Tools:

减少时间成本

* Software Update Management:

Test
Distribution
Compared to SUS:
Not only Windows Service Pack
But also Office,SQL,Exchange,RRS Service Pack

四、Administrative Support Features:

* Reporting:

IE Explorer report viewer:
1、软件,硬件资产清单;
2、计算机详细配置、状态
3、分发软件、分布时问题,软件使用情况

Feature:
1、可定制
2、可Filter:

如:没有安装xp SP2的计算机

* Status viewing:

某个组件执行特定活动的特征串

* Performance viewing:

Example:大量广播排查

* Backup and recovery tools:

备份恢复SMS站点

* Remote Control

五、Mixed version Hierarchy Considerations:

Certain operating systems and features are no longer supported

SMS 2.0 ok,SMS 2003 no:

* Windows 3.1,3.1.1,95,Before NT 4.0 sp5 pre,ME,XP Home Edition,PE,
* Novel
* Before Sql 7.0 sp2
* SBS(Small Bussiness Server)
* Alpha CPU System

六、Explaining SMS Hierarchies

SMS Site:

* 管理资源
* 三位代码唯一标示
* 主(父子)、辅站点(子)
* 主:数据库支持,存储数据,SQL Server,管理工具
* 父子信任关系
* 有广域网连接时考虑分层结构

七、Key Components:

* Site Server

* Site System Roles:
Client Access Point
Management Point
Reporing Point
Distribution Point
Server Locator Point

* Site Database

* Advanced Client:2000 later

* Legacy Client:windows98,NT 4.0 SP6

* Client — Site System Roles — Site Server — Database

八、Services that Site System Provide:

*  CAP(Client Access Point): For Legacy Client
Legacy Client通过活动目录AB的查询找到SLP(Server Locator Point),然后找到CAP

* Distribute Point:
安装软件时

*  Management Point:For Advanced Client

* Reporing Point:
直接访问数据库

九、The Role of an SMS Client

* 安装SMS Client Agent

* Key Tasks:

* 接受处理SMS数据指令

* 扫描信息,报告SMS站点服务器

* 安装程序和更新

十、What are Collections?

* 对特定资源的划分

* 创建集合(在服务器端):

* Example:
对All Windows XP System Collection分发XP SP2
创建发现模式—创建Collection(通过模式)

十一、Explaning SMS Site-to-Site Communication

* Consideration for creating multiple site:

Network Performance
Number of resources(数据库宿主主机性能)
Features required by users(SMS2003 plus SMS2.0)
International consideration(语言考虑)
Corporate structure
Domain structure(也可考虑修改不合理的域结构)

* How information flows form site to site:

Management Instructions and Data:From parent to Child
Resource Report and Client data:From Child to parent

十二、Explaining SMS Site:

* What are SMS Site Boundaries?
活动目录站点边界(AD Name)
Legacy:必须位于AD内
Advanced:Mobile,可指定

* 资源搜集模式:
Network网络发现:Based on IP Address,多个LAN,多个站点,信息统一于父站点
AD系统发现:从AD数据库中读取
AD User发现
AD System Group发现
Windows User Domain Account发现
Windows Group Domain Account发现
Heartbeat发现:必须维持联系(一般都要启用)

十三、答疑时间:

1、SMS,MOM(Microsoft Operations Manager)差别?
SMS静态、MOM动态

关于google的网页快照

使用过google的人都有一个感觉,爽!

但是有时也不是那么的爽,比如:虽然所有result下面都有网页快照,但从来都打不开(这样的坏处是:有时候result的连接已经失效了,但是明明看到下面节选里面有自己想要的内容,却看不完,这种问题本来可以通过网页快照解决的)

举个例子:

http://64.233.167.104/search?q=cache:JF2VBe-v3KQJ:a.wholelottanothing.org/+nothing&hl=zh-CN

上面就是一个网页快照的连接(搜nothing显示的第一个链接的网页快照),返回Connection reset by peer

怎么办啊,怎么办?

在网上找了找解决办法

如下:

http://64.233.167.104/search?god=axqd&q=cache:JF2VBe-v3KQJ:a.wholelottanothing.org/+nothing&hl=zh-CN

怎么样,打开了吧,呵呵,不要问我为什么,其实只要url里面不要包含“search?q=”字段就行了,上面再其中嵌入“god=axqd”就是为了把“search?q=”伸开!

以后可以尽情享受google的网页快照功能了吧!

在C++ Builder中利用串行通信控件编程

摘要:串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。本文介绍了在C++ Builder中如何利用串行通信控件进行串行通信编程。

一、引言

目前,在用计算机进行数据传输时,常用的是串行通信方式。用C++ Builder来编写串行通信程序时,可以调用Windows API函数,也可以利用VB中的MSComm控件。 利用 API函数编写实际应用程序时,往往要考虑多线程的问题,这样编出来的程序不但十分庞大,而且结构比较复杂,继承性差,维护困难。但是使用串行通信控件就相对简单一些,而且功能强大,性能安全可靠。本文就简单的介绍一下在C++ Builder中利用MSComm控件进行编程。

二、MSComm控件的常用属性和事件

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

事件驱动方式

在使用事件驱动法设计程序时,每当有新字符到达,或端口状态改变,或发生错误时,MSComm控件将解发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。这种方法的优点是程序响应及时,可靠性高。

查询方式

查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。

1.MSComm 控件的常用属性

CommPort属性:设置或返回通讯端口号,可以设置为1到16之间的任何值,本系统采用缺省值2;
Settings属性:以字符串形式设置或返回波特率、奇偶校验、数据位和停止位,本系统采用缺省值”9600,n,8,1″;
PortOpen属性:设置或返回通讯口的状态以及打开和关闭端口,可通过把该属性设置为true或者false来打开或者关闭端口;
InBufferSize和OutBufferSize属性:分别设置接收和发送缓冲区分配的内存数量,单位为字节,缺省值分别为1024byte和512byte;
InputLen属性:确定希望从接收缓冲区移出的字符数量,当InputLen=0时,一次把接收缓冲区的字符全部移出;
Input属性:从接收缓冲区中读出数据,然后将该数据从缓冲区移走。
OutPut属性:向发送缓冲区传递待发送的数据。
InBufferCount和OutBufferCount属性:分别确定当前驻留在接收缓冲区等待被取出和发送缓冲区准备发送的字符数量,这两个属性设置为0,接收和发送缓冲区的内容将被清除;
InputMode属性:设置接收传入数据的格式,设置为0采用文本形式,设置为1采用二进制格式,本系统设置为二进制格式进行发送和接收;
SThreshold属性:保存一个产生发送OnComm事件的界限值,本系统设置该属性为0,发送数据时不产生OnComm事件;
RThreshold属性:设定当接收几个字符时触发OnComm事件,本系统设置该属性为1,每接收一个字符就产生一个OnComm事件;

2.MSComm控件的事件
MSCOMM控件只使用一个事件OnComm,用属性CommEvent的十七个值来区分不同的触发时机。主要有以下几个:

(1)CommEvent=1时:传输缓冲区中的字符个数已少于Sthreshold(可设置的属性值)个。
(2)CommEvent=2时:接收缓冲区中收到Rthreshold(可设置的属性值)个字符,利用此事件可编写接收数据的过程。
(3)CommEvent=3时:CTS线发生变化。
(4)CommEvent=4时:DSR线发生变化。
(5)CommEvent=5时:CD线发生变化。
(6)CommEvent=6时:检测到振铃信号。

另外十种情况是通信错误时产生,即错误代码。

三、程序的实现

1.注册MSComm控件

众所周知,C++Builder本身并不提供串行通讯控件MSComm,但我们却可以通过注册后直接使用它。启动C++Builder5.0后,然后选择C++Builder主菜单中的Component菜单项,单击Import Active Control命令,弹出Import Active窗口,选择Microsoft Comm Control6.0,再选择Install按钮执行安装命令,系统将自动进行编译,编译完成后即完成MSComm控件在C++Builder中的注册, 系统默认安装在控件板的Active页,接下来我们就可以像使用C++Builder本身提供的控件那样使用新注册的MSComm控件了。(前提条件是你的机子上安装了Visual Basic,或者有它的库)

2.具体实现

新建一个工程Project1,把注册好的MSComm控件加入到窗体中,然后再加入5个ComboBox用来设置串口的属性,4个Button分别用来”打开串口” “关闭串口””发送数据””保存数据” ,2个Memo控件分别用来显示接收到的数据和发送的数据。再加入一个Shape控件用来标明串口是否打开。

ComboBox1用来设置串口号,通过它的Items属性设置1,2,3,4四个列表项分别表示COM1,COM2,COM3,COM4口。 ComboBox2用来设置波特率,ComboBox3用来设置奇偶校验位,ComboBox4用来设置数据位,ComboBox5用来设置停止位。他们的缺省值分别是9600,n,8,1。

Button1用来打开串口,Button2用来关闭串口,Button3用来发送数据,Button4用来保存数据。Memo1用来显示发送的数据,Memo2显示接收的数据。Shape1的Shape属性设置为stCircle。
下面给出部分源码:

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
if(MSComm1->PortOpen==true)
{
Button1->Enabled=false;
Button2->Enabled=true;
Button3->Enabled=true;
Button4->Enabled=true;
Shape1->Brush->Color=clGreen;
}
else
{
Button2->Enabled=true;
Button2->Enabled=false;
Button3->Enabled=false;
Button4->Enabled=false;
Shape1->Brush->Color=clRed;
}
}
void __fastcall TForm1::Button1Click(TObject *Sender) / /打开串口
{
if(MSComm1->PortOpen!=true)
{
MSComm1->CommPort=StrToInt(ComboBox1->Text);//选择串口号
MSComm1->Settings=
ComboBox2->Text+","+
ComboBox3->Text+","+
ComboBox4->Text+","+
ComboBox5->Text; file://设置串口的属性波特率、奇偶校验、数据位和、//停止位。
MSComm1->InputMode=0;//设置传入数据的格式,0表示文本形式
MSComm1->PortOpen=true;//打开串口
Button1->Enabled=false;
Button2->Enabled=true;
Button3->Enabled=true;
Button4->Enabled=true;
Shape1->Brush->Color=clGreen;
}
}
void __fastcall TForm1::Button2Click(TObject *Sender) / /关闭串口
{
if(MSComm1->PortOpen!=false)
{
MSComm1->PortOpen=false;
Button1->Enabled=true;
Button2->Enabled=false;
Button3->Enabled=false;
Button4->Enabled=false;
Shape1->Brush->Color=clRed;
}
else
{
Button1->Enabled=false;
Button2->Enabled=true;
Shape1->Brush->Color=clRed;
}
}

MSComm控件的Input和Output属性在Object Inspector中是看不到的,而且在C++Builder环境下这两个属性已不在是VB、VC中的原类型,而是OleVariant类型,也就是 Ole万能变量,这就需要我们在发送接收数据时要把数据转换成Ole类型。

void __fastcall TForm1::Button3Click(TObject *Sender) file://发送Memo2中的数据
{
MSComm1->Output=StringToOleStr(Memo2->Text); file://把AnsiString型转化成//Ole形式。
}

通过OnComm事件接收数据,必须把MSComm的RThreshold属性设置为大于0,只有这样在接收到字符时才会产生一个OnComm事件。

void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
AnsiString str; file://声明一个AnsiString类型的变量
OleVariant s; file://声明一个用于接收数据的OleVariant变量。
if(MSComm1->CommEvent==comEvReceive)
// 接收缓冲区中是否收到Rthreshold个字符。
{
if(MSComm1->InBufferCount)// 是否有字符驻留在接收缓冲区等待被取出
{
s=MSComm1->Input;//接收数据
str=s.AsType(varString); file://把接收到的OleVariant变量转换成AnsiString类型
Memo1->Text=Memo1->Text+str;//把接收到的数据显示在Memo1中。
}
}
}

要保存数据应该再加入一个SaveDialog模块

void __fastcall TForm1::Button4Click(TObject *Sender)
file://把Memo1中的数据保存在指定的文件中
{
AnsiString filename1;
SaveDialog1->Filter="Text files (*.txt)|*.txt|All files (*.*)|*.*";//文件类型过滤器
SaveDialog1->FilterIndex=2;
if(SaveDialog1->Execute())
{
filename1=SaveDialog1->FileName;
Memo1->Lines->SaveToFile(filename1);//把收到的数据保存在文件filename1中
}
}

四、结束语

上面给出了C++ Builder中利用MSComm控件进行串行通信编程的实现和部分源码,有了上面的参照读者可以根据实际需要编写出具有发送文件和接收文件功能的程序。

Serial Communication with Borland C++ Builder

David Poinsett
November 1999
[email protected]

Introduction…

I wish this site had been around when I was trying to figure out how to make serial communications work in Windows95. I, like many programmers, was hit with the double-whammy of having to learn Windows programming and Win95 serial comm programming at the same time. I found both tasks confusing at best. It was particularly frustrating because I had, over the years, written so much stuff (including lots of serial comm software) for the DOS environment and numerous embedded applications. Interrupt driven serial comm, DMA transfer serial comm, TSR serial comm, C, assembler, various processors…you name it, it had written it. Yet, everything I knew seemed upside-down in the message-driven-callback world of Windows.

After spending lots of money on books and seemingly endless effort, I have finally gotten enough of a handle on Win95 and serial comm programming to write something usable in this environment. Borland’s C++ Builder has done a lot to help make Win95 programming easier and, once you know the tricks, the serial communications stuff is pretty easy, too.

The purpose of this site is to spare you hardship of my early efforts and get you up and running with your Win9x/NT serial comm programming as quickly as possible. If you’re already familiar with using BCB to develop Windows programs, the example code should be plenty to get you going. You can also download the source code in BCBComm.zip. Good luck.

The Example…

In the example that follows we’re going to write a bare-bones program to do serial communication. It will consist of a Form with a Memo object (for text I/O) and a Thread object that handles incoming serial data. There are no menus or other features to distract us from focusing on the serial comm aspect of the program. Obviously, you’ll want to add these and other elements to a fully functioning program.

Fire up BCB and start a New Project. Place a Memo object on Form1. Using the Object Inspector, set Memo1 properties as follows:

Alignment = alClient
MaxLength = 0
ScrollBars = ssVertical
WantReturns = true
WantTabs = false
WordWrap = true

Next, under the File | New menu, add a Thread Object. Use TRead for the class name when asked.

You should now have two Unit files: Unit1.cpp for Form1 activity and Unit2.cpp for the thread.

Using the Object Inspector again, create event handlers for the following events. The easiest way to create events handlers is as follows:

Go to the event tab sheet in Object Inspector.
Find the event of interest.
Double-click the blank space next to the event name.
If you follow this scheme, Object Inspector will create and automatically name the event handlers to the same name used in our examples. OK, here are the objects and the events we need to handle:

Form1 OnCreate
Form1 OnClose
Memo1 OnKeyPress

The framework for Unit1.cpp is now in place. Using the following listing as a guide, fill in Unit1.cpp with the following code. Be sure to note the #includes and global variables. If the framework for event handlers is missing in your program, DO NOT put it there by typing in the framework code! Go back and figure out what you missed. BCB MUST CREATE THE FRAMEWORK FOR YOU.

The Main Form…

//---------------------------------------------------------------------------
#include <vclvcl.h>
#pragma hdrstop
#include "Unit1.h"
// YOU MUST INCLUDE THE HEADER FOR UNIT2 (THE THREAD UNIT)
#include "Unit2.h"
// GLOBAL VARIABLES
HANDLE hComm = NULL;
TRead *ReadThread;
COMMTIMEOUTS ctmoNew = {0}, ctmoOld;
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DCB dcbCommPort;
// OPEN THE COMM PORT.
// REPLACE "COM2" WITH A STRING OR "COM1", "COM3", ETC. TO OPEN
// ANOTHER PORT.
hComm = CreateFile("COM2",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
// IF THE PORT CANNOT BE OPENED, BAIL OUT.
if(hComm == INVALID_HANDLE_VALUE) Application->Terminate();
// SET THE COMM TIMEOUTS IN OUR EXAMPLE.
GetCommTimeouts(hComm,&ctmoOld);
ctmoNew.ReadTotalTimeoutConstant = 100;
ctmoNew.ReadTotalTimeoutMultiplier = 0;
ctmoNew.WriteTotalTimeoutMultiplier = 0;
ctmoNew.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hComm, &ctmoNew);
// SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
// THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
// IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
// THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
// ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.
dcbCommPort.DCBlength = sizeof(DCB);
GetCommState(hComm, &dcbCommPort);
BuildCommDCB("9600,N,8,1", &dcbCommPort);
SetCommState(hComm, &dcbCommPort);
// ACTIVATE THE THREAD. THE FALSE ARGUMENT SIMPLY MEANS IT HITS THE
// GROUND RUNNING RATHER THAN SUSPENDED.
ReadThread = new TRead(false);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
// TERMINATE THE THREAD.
ReadThread->Terminate();
// WAIT FOR THREAD TO TERMINATE,
// PURGE THE INTERNAL COMM BUFFER,
// RESTORE THE PREVIOUS TIMEOUT SETTINGS,
// AND CLOSE THE COMM PORT.
Sleep(250);
PurgeComm(hComm, PURGE_RXABORT);
SetCommTimeouts(hComm, &ctmoOld);
CloseHandle(hComm);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)
{
// TRANSMITS ANYTHING TYPED INTO THE MEMO AREA.
TransmitCommChar(hComm, Key);
// THIS PREVENTS TYPED TEXT FROM DISPLAYING GARBAGE ON THE SCREEN.
// IF YOU ARE CONNECTED TO A DEVICE THAT ECHOES CHARACTERS, SET
// Key = 0 WITHOUT THE OTHER STUFF.
if(Key != 13 && (Key < ' ' || Key > 'z')) Key = 0;
}
//---------------------------------------------------------------------------

Now we turn our attention to the thread code in Unit2.cpp. The framework should already be in place. Use this listing as a guide and fill in Unit2.cpp with the following code.

The Thread…

//---------------------------------------------------------------------------
#include <vclvcl.h>
#pragma hdrstop
// YOU MUST INCLUDE THE HEADER FOR UNIT1
#include "Unit1.h"
#include "Unit2.h"
extern HANDLE hComm;
char InBuff[100];
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall TRead::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
__fastcall TRead::TRead(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TRead::DisplayIt()
{
// NOTE THAT IN THIS EXAMPLE, THERE IS NO EFFORT TO MONITOR
// HOW MUCH TEXT HAS GONE INTO Memo1. IT CAN ONLY HOLD ABOUT 32K.
// ALSO, NOTHING IS BEING DONE ABOUT NON-PRINTABLE CHARACTERS
// OR CR-LF'S EMBEDDED IN THE STRING.
// DISPLAY THE RECEIVED TEXT.
Form1->Memo1->SetSelTextBuf(InBuff);
}
//---------------------------------------------------------------------------
void __fastcall TRead::Execute()
{
//---- Place thread code here ----
DWORD dwBytesRead;
// MAKE THE THREAD OBJECT AUTOMATICALLY DESTROYED WHEN THE THREAD
// TERMINATES.
FreeOnTerminate = true;
while(1)
{
// TRY TO READ CHARACTERS FROM THE SERIAL PORT.
// IF THERE ARE NONE, IT WILL TIME OUT AND TRY AGAIN.
// IF THERE ARE, IT WILL DISPLAY THEM.
ReadFile(hComm, InBuff, 50, &dwBytesRead, NULL);
if(dwBytesRead)
{
InBuff[dwBytesRead] = 0; // NULL TERMINATE THE STRING
Synchronize(DisplayIt);
}
}
}
//---------------------------------------------------------------------------

One last thing…

To do a synchronized call to DisplayIt() from within the thread’s Execute() function, DisplayIt() it must be declared as a __fastcall type in the header file. Here’s how to do it.

Open the header file “unit2.h” and add the DisplayIt() line as shown below:

//---------------------------------------------------------------------------
class TRead : public TThread
{
private:
protected:
void __fastcall DisplayIt(void); // ADD THIS LINE
void __fastcall Execute();
public:
__fastcall TRead(bool CreateSuspended);
};
//---------------------------------------------------------------------------

Notes…

As mentioned earlier this example focuses strictly on the core elements that make the serial communication functions work. In its present form it’s unlikely to be particularly useful or acceptable in an actual application. In other words, you need to add what’s missing. If you’ve followed along this far, that should not be too difficult. To minimize any confusion on what’s missing, I’ll highlight some of the areas that should be addressed:

There is little or no provision for error handling
The 32K display limit of the Memo object is not handled
For proper text display in Memo, ignore linefeeds and replace carriage returns with a CR-LF pair
Menus
Storing incoming serial data to disk
Sending disk contents out serial port
Handshaking
Protocol (Xmodem, Zmodem, etc.)
There are several ways to test your work. One method is to perform a loop-back test by jumping pins 2 and 3 on your computer’s RS-232 connector. With the loop-back connection anything you type into the Memo area will be echoed back.

Here are some online references that you might find useful:

Serial Communications in Win32 . This is a comprehensive reference.
www.ontrak.net . Excellent example of simple serial port access.
www.temporaldoorway.com . Good example of threaded serial program with overlapped I/O.
www.codeguru.com . Yet another example (more for VC++).
Good luck.
==============================================================================

路由器、集线器、交换机有何不同

令狐冲十四岁那年进入华山,那年懒珊八岁,岳不群白天给两人指点剑法,晚上令狐冲给小师妹讲故事哄她入睡。后来,岳不群陆续收了劳德诺,陆大有等徒弟,又忙于修炼紫霞神功,就没有时间指点徒弟。于是他做了一个hub,从此华山派实现教育电子化,岳不群在网上同时给每个徒弟授课,这种方法很快在五岳剑派内部推广。为了在五岳剑派之间互连,嵩山派掌门左冷禅研制出路由器,使得五岳剑派之间可以互联互通。

令狐冲晚上就通过网络给小师妹讲故事。

很快, 懒珊已经十六岁,变成了一个亭亭玉立的小?娘了。令狐冲发现自己?目光总是不由自主的在小师妹身上停留,每次和小师妹在一起的时候,总能听到自己强烈的心跳声,经过了一段时间的茶饭不思后,终于有一天晚上,令狐冲在网上给小师妹发了一首情意绵绵的诗:你是风儿我是沙,你是蜜蜂我是花,你是梳子我是头发,你是牙膏我是牙刷。

第二天,华山派开例会,令狐冲怀着忐率不按的心情来到了会议室,发现小师妹红着脸躲在师父后面,而其它的师弟都在偷偷朝自己笑,开完会,一个调皮的师弟就过来叫牙刷师兄,赶紧蒙面逃走。问陆大有,才知道是劳德诺用一个叫netxray的工具把自己在网上的大作全抓了出来。令狐冲悔恨万分,于是,闭门研究 rfc,成功的研制出lanswitch。它能够识别设备mac地址,这样,令狐冲发送给小师妹的数据只有她一个人能够收到。令狐冲晚上可以在网上放心的给小师妹讲故事,偶尔手痒还能敲几句平时心里想又说不出口的话来过瘾,然后,红着脸想象小师妹看到后的表情。

lanswitch是二层交换设备,它可以理解二层网络协议地址mac地址。二层交换机在操作过程中不断的收集资料去建立它本身的地址表,这个表相当简单,主要标明某个mac地址是在哪个端口上被发现的,所以当交换机接收到一个数据封包时,它会检查该封包的目的mac地址,核对一下自己的地址表以决定从哪个端口发送出去。而不是象hub那样,任何一个发方数据都会出现在hub的所有端口上(不管是否为你所需)。这样,lanswitch在提高效率的同时,也提高了系统的安全性。

接下来的一年,岳不群大量招收门徒,华山派得以极大的壮大,所使用的lanswitch也多次级连。但门徒中难免鱼龙混杂,当时华山派一批三、四代弟子崇拜万里独行田伯光,成立了一个田协,经常广播争论比赛八百米还是一千米很合理的问题;第三代弟子中有一个叫李洪至的,每天在华山派内部广播发轮大法;更让令狐冲受不了的是,随着师父年龄的增大,变得越来越罗嗦,每句话都要重复二十遍,然后在网上广播。令狐冲想和小师妹,陆大有等人专门使用一个广播域,但如果另外使用一个lanswitch的话,师父肯定不会同意,于是,他修改了lanswitch的软件,把小师妹,陆大有等人和自己划成一个虚拟网 (vlan),其它人使用另外的vlan,广播包只在vlan内发送,vlan间通过路由器连接。岳不群也深受田协,李洪至其害,但为与左冷禅抗争,用人之际,只能隐忍,知道了这件事,大为高兴,但仍为令狐冲私自修改软件一事,罚他到思过崖面壁一年,一年之内不得下山。
在华山派内重新使用vlan进行子网划分,分为五个子网,师父和师娘,小师妹还有林平之在一个vlan,发轮功弟子用一个vlan;田协弟子用一个 vlan,其它弟子用一个vlan,而思过崖上也有单独的一个vlan。令狐冲到了思过崖,并不难过,终于,世界安静了,依靠左冷禅的路由器,令狐冲还可以每天在网上给小师妹讲故事,聊天。

局域网交换机的引入,使得网络节点间可独享带宽,但是,对于二层广播报文,二层交换机会在各网络节点上进行广播;同时,对于二层交换机无法识别的mac地址,也必须在广播域内进行广播。当多个二层交换机级连时,二层交换网络上的所有设备都会收到广播消息。在一个大型的二层广播域内,大量的广播使二层转发的效率大大减低,为了避免在大型交换机上进行的广播所引起的广播风暴,需要在一个二层交换网络内进一步划分为多个虚拟网(vlan)。在一个虚拟网(vlan)内,由一个工作站发出的信息只能发送到具有相同虚拟网号(vlanid)的其他站点,其它虚拟网(vlan)的成员收不到这些信息或广播帧。采用虚拟网(vlan)可以控制网络上的广播风暴和增加网络的安全性。不同虚拟网(vlan)之间的通信必须通过路由器进行。

但是幸福永远是短暂的,接下来总是无尽的烦恼。随着整个五岳剑派势力的增大,路由器的速度越来越慢。令狐冲发现每次给小师妹讲故事时,小师妹的回答总是珊珊来吃,而且话也很少,总是”嗯”,”噢”或者”我听着呢”。终于有一天,路由器再也ping不通的,令狐冲三天没有得到小师妹的消息,对着空空的显示屏,再也忍不住,在一个下着雪的晚上,偷偷下山找小师妹,到了小师妹窗前,发现小师妹正在网上和小林子热烈的聊天,全没注意一边的自己,内心一阵酸痛,回到思过崖,大病一场。病好后潜心研究,终于有一天,做出来一个路由器,这时,令狐冲发现,此时华山派已经有了三十个vlan,路由器必须为每个vlan分配一个接口,接口不够用,而且,两个子网内通过路由器的交换速度远远低于二层交换的速度。二层交换机划分虚拟子网后,就出现了一个问题:不同虚拟子网之间的转发需要通过其它路由器来实现。二层交换机的不同vlan节点间的转发需要通过路由器设备来实现大大浪费了端口,而路由器的高成本,低效率又使它无法满足大量子网情况下的三层转发需求,三层交换的概念就在这种情况下被提了出来。

这天晚上,令狐冲心灰意懒,借酒消愁,这时,一个黑影出现在他的面前,原来是一个道风仙骨的老人,正是风清扬。风清扬听了令狐冲的疑惑,说:路由器接口不够,把路由器做在lanswitch内部不就可以了;交换速度慢,是因为路由器查找的是网段路由,而lanswitch直接查mac对应出端口,当然速度快。为什么不能直接根据ip地址查到出端口呢?令狐冲一听,大为仰慕,但还是不明白,ip地址那么多,而且经常变化,如何能够直接查到出端口呢?风清扬说:

“你先坐下,让我来问你,华山派有多少弟子?”
“一万六千左右。”
“你全知道他们住哪里吗?”
“不知道。”
“岳不群要你找一个不知道住哪里的人,如何去找?”
“查华山派电话号码查询系统,找到他的地址,然后去找他。”
“如果你回来后再让你找这个人,又如何去找?”
“如何…查华山派电话号码查询系统,找到他的地址,然后去找他。”
“你不知道到这个人的地址吗?”
“知道,但师父说,华山派的地址那么多,而且经常变化,不用知道地址。”
“岳不群这小子,把徒弟都教成木头了!我问你,你自己认为应该如何找?”
“直接去找!”
“好!你这人还不算太苯。那你知道了一个人的地址后,是不是永远记住了?”
“有的人记住了。其它的都忘了。”
“为什么忘了?”
“因为我记不了那么多人,而且一段时间没有去找他。”
“华山派电话号码查询系统里的地址是如何获得的?”
“我在空旷处大喊一声他的名字,他听到后就会来找我,告诉我他的地址。”

风清扬又问了大把类似脑筋急转弯的问题,然后风清扬说:”现在你明白根据ip地址直接查出端口的道理了吗?等到你明白这个道理,你自然会做出三层交换机来”,令狐冲仔细回忆了今天的话,终于明白了和二层转发由mac地址对应到出端口的道理一样,三层转发也可以直接由ip地址对应到出端口,ip地址的路由可以通过arp来学习,同样需要老化。这样,vlan间转发除第一个包需要通过arp获得主机路由外,其它的报文直接根据ip地址就能够查找到出端口,转发速度远远高于路由器转发的速度。抬头看时,风清扬已经走了。

一年后,令狐冲下思过崖,成功的推出quidway s8016路由交换机。实现了vlan间的互通,并且与嵩山,黑木崖等路由器实现互通。三层交换机是在二层交换机的基础上增加三层交换功能,但它不是简单的二层交换机加路由器,二而是采用了不同的转发机制。路由器的转发采用最长匹配的方式,实现复杂,通常使用软件来实现,。而三层交换机的路由查找是针对流的,它利用cache技术,很容易采用asic实现,因此,可以大大的节约成本,并实现快速转发。
很多文章会提及三层交换机和路由器的区别,一般的比较是三层交换机又快又便宜。这些话没有错,但场合是汇聚层。我们看到,在汇聚层,面向三层交换机直接下挂的主机,因为能够获得其主机路由,所以三层交换机能够实现快速查找;而对于通过其它路由器连接多个子网后到达的主机,三层交换机和路由器的处理是一样的,同样采用最长匹配的方法查找到下一跳,由下一跳路由器进行转发。

因此,通常的组网方式是在骨干层使用gsr,汇聚层使用三层交换机。当然,对于一个小型的城域网,也可以直接拿三层交换机组网,不需要gsr。

Gmail试用报告

首先,进行一下Gmail扫盲吧

一、Gmail是什么?

Gmail简单的说就是Google提供的大容量免费邮箱(什么?Google是什么?还是去问浏览器吧)

来初步领略一下Gmail的风采

Gmail Login

Gmail Inbox

够漂漂吧!

二、Gmail有什么特别之处?

1、大容量免费邮箱

Gmail提供1G的免费邮箱容量,并且不限制附件数量,大小(基本上可以当网络硬盘用了)这是Gmail的最大特点,正是这一特点决定了Gmail的诸多过人之处,这是Gmail的基石!

当然1G也不是不可逾越的。当你容量接近1G时,Gmail会在下图所示地方警示,如果超出了,Gmail会保留一段时间您的邮件。如果不理睬,发往你帐号的邮件会被退回,你不能再收到邮件。

Gmail Capacity

2、以label代替文件夹

可能刚开始的时候会有些不适应,但是随着使用的深入,以及对Gmail理念的接受程度的加深,你会越来越觉得这一变化的必要性。一个邮件可以被标上多个label,但是一个邮件却无法属于多个文件夹。

Gmail Label

3、以Google强大的搜索性能代替手工找寻

邮件的搜索带来的便利是巨大的,它使得你不会再为找到一封很久以前重要的邮件而眼睛都看大了。其实仔细想想,在对网络资源的搜索如此普及的今天,对于邮件的搜索还几乎处于空白,实在是有些不可思议。再者,Google的搜索引擎的能力,我就不用多废话了。

Gmail Search Bar

点击Show search options后如下图,足可见功能之强大。

Gmail Advanced Search

点击Create a Filter,如下图:

Gmail Filter

搜索的内容会以高亮显示哦!!!

如果你嫌麻烦,那么看下图:

Gmail Select

直接选Select总简单了哈!

目前测试阶段的Gmail还不支持搜索附件内容,但是以后会加入这一功能。(BTW:如果附件是txt,Gmail会默认展开,这点在我看来不知安全性方面是否考虑欠妥)

此外Gmail的搜索功能是精确组合搜索,不支持拼写容错及其他相应咚咚。

需要特别注意的是,如果你的label包含空格,则须如下录入:

from:Bob label:my-friends

4、以archive代替删除

由于耽心误删除,人们往往花很多精力在邮件的删除工作中。在大容量和搜索的强力支持下,存档使邮件简单的从你面前消失,达到人们希望删除达到的目的,而又没有误删除的担忧。所有的存档邮件可在All Mail中看见,并且在搜索的时候也可列入搜索范围。

Gmail Archive

5、提供snippets(摘录)功能

这个功能的有点不用多说了吧,现在的人们都懒,写完正文都懒得写subject,即使被迫填写,也词不达意得乱写一通。有了这个功能,打开一封邮件之前便能知道他得大概内容,实在可谓“科技以人为本”。不说了,看图看图(在第6点内的图)。

6、用Conversation组织邮件

不多说了,看图:(还可以看到snippets哦—-注意看名字右边的内容缩略)

Gmail Conversation

三、如何拥有Gmail?

由于Gmail目前还处于测试阶段,而且确实不错,空间又大,所以没有提供注册按钮,而采用一传多的方式。如果您想要拥有Gmail,则只有找到 Gmail invatation(中国人美其名曰“蛋”)。Gmail invatation只会发给Gmail现有用户,发放方式是随机发布(呜呜,我都还没有生蛋,我们同学才一天就生了,郁闷,看来碰到一只公鸡了)

Gmail Invitation

这个就是我们同学生蛋后的截图。如果他邀请我,我就会收到这样一封信。

I've been using Gmail and thought you might like to try it out. Here's
an invitation to create an account.
-----------------------------------------------------------------------
Shen Hong has invited you to open a free Gmail account. The invitation
will expire in three weeks and can only be used to set up one account.
To accept this invitation and register for your account, visit
http://gmail.google.com/gmail/**************************
Once you create your account, Shen Hong will be notified with
your new @gmail.com address so you can stay in touch with Gmail!
If you haven't already heard about Gmail, it's a new search-based webmail
service that offers:
- 1,000 megabytes (one gigabyte) of free storage
- Built-in Google search that instantly finds any message you want
- Automatic arrangement of messages and related replies into
"conversations"
- Text ads and related pages that are relevant to the content of your
messages
Gmail is still in an early stage of development. If you set up an
account, you'll be able to keep it even after we make Gmail more
widely available and as one of the system's early testers, you will
be helping us improve the service through your feedback. We might ask
for your comments and suggestions periodically and we appreciate your
help in making Gmail even better.
Thanks,
The Gmail Team
To learn more about Gmail before registering, visit:
http://gmail.google.com/gmail/help/benefits.html
(If clicking the URLs in this message does not work, copy and paste them
into the address bar of your browser).

点击链接接受invatation就可以启用Gmail,并且指定您所用的用户名。

想要invatation?找我?呵呵,我也没有。有个网站gmailswap,上面有很多好心的人。

另外水木清华上面也有不少蛋,“只要功夫深,铁杵磨成针”!

四、使用Gmail有哪些注意事项?

1、建议采用https://gmail.google.com登录而不是http://gmail.google.com,这除了安全方面的考虑外,对Gmail而言更特别的是,二者的稳定性不同,前者更加稳定,不容易出错。

2、如果使用过程中遇到“oop…”错误或者邮件显示不完整,首先应该检查浏览器得设置

Internet选项=>高级=>使用TLS1.0,SSL2.0,SSL3.0

Gmail Internet Options

Gmail使用了这些协议( SSL(Security Socket Layer)加密套接字协议层是世界上部署最为广泛的安全协议,每种商业测览器和服务器都在其内部使用SSL来支持安全的Web交易,TLS(Transport Layer Security)是SSL的后继。)

如果依然出错,应再检查代理服务器的设置,可能不支持TLS,则需要更换代理服务器。可以试试关闭浏览器(注意是关掉所有窗口),再重新登录。浏览器建议使用IE,对其他的浏览器Gmail虽然也称能支持,但测试证明支持基本不是很好,经常出错。

另外其他的一些Gmail问题,可能大多数都跟浏览器有关:

清除浏览器Cache经常会有意想不到的用处。

把google.com加入安全站点也不乏为解决之道。只要您能够信任google。

Gmail Trust Site

3、虽然Gmail目前还处于测试阶段,用英文编写,并且界面也为英文,但是由于Gmail Translation Work得开展,内部收发其他语言的文字,已经没有问题了:

Simplified Chinese (HZ & GBK)
Cyrillic/Ukrainian (KOI8-U)
Vietnamese (TCVN)
Hebrew (ISO-8859-8-I)
Nordic (ISO-8859-10)
Armenia (ARMSCII-8)
Thai (windows-874)

如果你收到或者发出的依然为乱码,请检查浏览器设置

查看=>编码=>Unicode(UTF-8)

这是Gmail所采用的编码方式。

如果依然不能解决乱码,那么可能是邮件客户端的问题,可以选择more opinions

Gmail More Options

然后再选择’Show original’ 直接查看邮件源码

4、Gmail的常用快捷键(注意需要在Gmail里设置后才能使用)

c 写信
u 收件箱列表
/ 搜索(不到长城非好汉,不用搜索非用Gmail),这个也是vi里面的搜索符号吧,呵呵~
n 下一封信
p 上一封信
k 下一个的对话
j 前一点的对话
o/Enter 打开对话或者展开对话
y 存档
x 选择对话
s 将信或者对话标星
r 回复
f 转发
! 报告垃圾邮件
跳出输入状态(只有这样才能使用快捷键,废话)

5、如何删除邮件?

如果你有洁癖,那么就用move to trash吧!

Gmail Trash

6、目前Gmail还处于测试阶段,所以没有提供pop3等等服务,不过由于Gmail理念的特殊性,我很怀疑stable版是否会提供这些功能。

==============================================================================

Gmail 就介绍到这里,其实写这篇报告时,我再一次被Gmail所感动,希望我能够将这种感动传达给读者您。

Email,也许平常看来普普通通的东西,但只要深入分析用户需求,不先入为主,不闭门造车,真正在心中建立“以人文本”的信念,自己多一分汗水,让用户获得更多的便利,便能获得成功,赢得尊重。所以说用户就是上帝,用户的苛刻不需要理由!

您也许现在同我一样感受到,Email的革命即将到来,而Gmail便是这场革命的引领者,弄潮儿。任何事情只要走在前面,引领潮流,成为标准,我相信,就一定能够获得巨大的成功。因此,平凡的一样东西,或许我们应该更深入的思考它,对他进行革命,从而走向成功。

有的东西,我们也许认为很正常,很合理,即使有时会感到别扭,但也先入为主的认为是自己的问题,是没有办法解决的。但事实上,往往是大众意识的力量在阻止我们对问题的根源有正确的认识。

回顾历史,马列主义诞生之前,工人们虽然也觉得很累,很痛苦,但是却没有意识到问题的根源,还以为是自己工作方式方法的问题,甚至对资本家的提供的安栖之所心存感激,认为这些都很合理;但是,马克思、恩格斯却摆脱了这种大众观念的枷锁,意识到了剩余价值的存在,从意识形态,行为方式上进行了一场大革命。他们获得了巨大的成功!

眼观现在,Gmail之前,人们整天花大力气去把邮箱整理的井井有条,结果一然为了找到一封邮件大费周遭。虽然觉得很麻烦,但却依然认为非常正常,非常合理,甚至为此欣喜;但Gmail的需求分析师们摆脱了大众意识的重重阻碍,意识到了这种方式的及其不合理之处;并且更为重要的是,他们敢于花大力气,大资本来改变人们几十年来对使用邮件的错误的行为方式和理念,也就是所谓的意识形态的东西。让人们意识到真正的邮件应该是轻松惬意的使用,而不是去算计还剩多少空间,去小心翼翼的防止误删除。来了邮件就收到,看了就放到,要找就搜到,学会享受生活,品味生活,从烦杂的工序中走出来,把这些都交给 Gmail的设计者们去实现。看似低效(因为实现复杂,花费精力大),实际上是最大程度的高效(因为功能的复用)。

总之,我们网管会不求有这般大动作,但我认为应该有这种魄力与精神!应该有这样的信念与理念!对工作更加的兢兢业业!

希望此文能为此献上一份力!!希望大家能够通过此文开始真正接触Gmail,使用Gmail,学会享受生活,品味生活,并在工作中,为别人如此这般创造条件!