假期意识流

意识流

—假期生活乱纪

这个假期不堪回首,单调得可怕,除了4本书之外,记忆中仅存的就全是某大学的研究生会的网站了。网站说来更不堪回首,完全算得上“赶鸭子上架”的典型(我“可爱”的姐在网站“八字还没有一撇”的时候,居然就敢将“网站建设费”挥霍一空,后来备受挫折后,无力还债,于是栽赃到了我的头上- -!)。下面将网站建设过程中的点点滴滴乱纪下来,想到哪里写到哪里,逻辑未免混乱,各位大虾莫要见笑。目的也很简单,让各位看看一个新手眼中的网站建设过程。

1、 研究生会:

因为这个网站,我就已经堂而皇之成为某大学研究生会编制中的一员,这种“海纳百川”的“气势”令我无不拜倒- -!

2、 网站需求:

刚开始的网站需求很“明确”—“美观、大方、展现当代研究生风采”。让我感到在这种“派头”的指导老师手下干起事情来一定比较“自由”,但是后来事实证明我错了,这种指导老师也有开始变“聪明”的时候。

需求增加了一条—“采用最新的Asp.Net技术,并且务必使用SQL Server最新版本”,我在深入理解这条需求之后,对于各个软件、框架的版本甚是犹豫,不知beta版是否也计算在内- -!

3、 美工:

这个我没有发言权,反正阿梅和阿楠看过(因为当时我不会用PS分页- -!)

4、 VS .NET环境:

由于以前习惯于Borland的BCB,于是“疏”在于没RAD就不活了,“密”在于任何东西都希望有根有据,简单明了。对于VC++6.0从未涉猎,因为当时第一印象就觉得不像是拿来编程的,加之MFC的封装没有一定的实力,定会感到极其莫名其妙,那消息映射的编程方式更是使得局势错综复杂,不像VCL里面虽然依然有很多不懂,但至少容易把握过程。

介于上述原因,所以当我观之Visual Studio .NET的时候还是大吃一惊,惊叹微软也终于RAD了一把。于是看了本《C# Primer》上手就干。

但是现实总是残酷的,虽然很多东西感觉用起很顺手,但还是有很多极其不习惯:

首当其冲的就是一个解决方案里面的类、函数等等,不用.h,不用#include好像就能够在各个文件中可见,原因可能是采用namespace的组织方式,但是老是觉得没有#include <*.h>就是不爽(我理想中的世界应该是把文件include过来后,再在namespace里面避免污染,而不要在一个解决方案里面的文件到处都可见似的)。

其次就是所谓的大名鼎鼎的“Code Behind”,这个倒是在很大程度上解决了网页程序设计中的版权问题,并且使代码和外观分离,便于和传统窗口编程靠拢。但是对于新手而言,在不具备驾驭的能力的情况下,无非是场灾难,代码直接生成DLL,不用export,不用声明,只需assembly一下,就可以使用,随便咋看都极其莫名其妙。

介于以上,我终于放弃了使用VS .NET,本来想选择同出Borland之手的C# Builder,但是令人郁闷的是没有找到注册码- -!所以最后我还是选择了以前写ASP程序时候采用的Dreamweaver+EditPlus+MSDN,本来记事本足已,但是少了调试器,要是连行号都看不到,那我还是直接跳楼算了。

5、 风格:

回头看我写的代码,感觉很多地方看起来还是像用ASP写的:P,不过因为毕竟是ASP.NET的东西,还是初步感受了一下ASP.NET的便利,诸如:DataGrid、DataList、Page_Load、还有在连接SQL数据库时候的便利等等等等。

6、 语言:

这个是我最无语的一点,由于C# 是刚学的,所以开始的时候还是在尝试VB,在花了很长时间都没有发现下面代码为什么通不过之后,我还是痛下决心用C# 吧- -!

#region code
<script language=”VB” runat=server>
sub foo(object sender,eventargs e)
{
//----------
}
</script>
#endregion

接踵而来的转化工作,幸好还不算很困难,但确实很烦,下面将我在转化时的主要工作总结一下:

a) 大小写:VB里面的标识符不区分大小写,如:page_load、datagrid也可以通过,但是到了C# 里面就必须区分大小写了(这里是改得最郁闷的了,对照到MSDN一个一个挨到改,想当初写VB Script的时候不偷懒就好了)

b) 索引(Item):VB里面使用object(index)就可以索引了,但是到了C#里面索引可必须使用object[index]符号,不过如果你使用Item调用就一致了,不过新手一般都不会那样做。

其他可能还有很多转化工作,不过我倒是幸运的没有碰到。

7、 基本代码组织方式:

由于那个网站大量的都是带图像文本处理,所以基本上前台采用的是把分页后形成的静态页面里面的动态部分挖空,以iframe填充之,iframe的src里面要不就指向list.aspx文件(显示前多少项,以及more按钮),并传入类别、css、行数、列数作为参数控制外观;要不就指向multilist.aspx文件(显示所有内容,以DataGrid进行分页控制),传入的外观控制参数一致。并且二者都接受hot=1参数,若设置了,则排序的方式由order by subdate desc变为order by 点击次数 desc

8、 前台:

前台如前述方式架构,我觉得最有用的就是DataGrid与DataList的基本使用及外观控制,如果实在觉得不方便,新手还是用<ItemTemplate>来得快:),另外在进行数据绑定的时候,我基本上就只用到了下面一条语句:

<%# ((DataRowView)Container.DataItem)["foo"] %>

9、 后台管理:

a)FreeTextBox:

说起后台管理自然想到了熟悉的DormForce Blog的后台,那里的那个输入控件,令人感觉甚爽,在IE里面察看源,发现名字叫做FreeTextBox- -!这个名字实在是…

于是Google后下载了一个,感觉封装得很好,使用也很方便,直接register就可以用了,令我倍感ASP.NET还是很爽的,也对Web Control产生了一丝眷恋。但是问题也出来了,他的“插入图片”按钮令人极其郁闷,只能插入图片URL,而没有提供上传,本来想在FTB控件旁边单独提供一个UploadImg按钮,提供上传然后返回URL,供使用FTB插入之需。

但是在看了“宝玉”的文章后突然发现FTB对于Button提供了接口ToolBarButton,于是可以把上传的工作集成到按钮里面。用宝玉提供的方法,在VS .NET里面“依样画葫芦”很快便搞定了,其实就是直接从ToolBarButton直接继承构造新的Button就可以了。

但是问题是我没有用Code Behind的方式,而且找了半天也没有发现,如果不用Code Behind,把类的定义写在哪里?所以只有自己想办法,看了半天英文版的FTB帮助,终于找到了方法:

<FTB:TOOLBARBUTTON title="插入图片"
runat="server" ScriptBlock="myOpenFunc();" ButtonImage="insertimage" />

其中的ButtonImage指定名称后会自动从aspnet_client目录调用图片资源,若要更换可以直接替换文件即可,不过注意保持长宽比(不然会很难看的)。另外我感觉aspnet_client这个名字很可疑,可能有特殊的用途,诸如用于客户端的啥子东西,没有敢改名字:(

其中的ScriptBlock直接在FTB生成的Html页面里面加入内容,如上例就生成如下咚咚:

… = new FTBButton(… function(){myOpenFunc();} …)…

myOpenFunc()为调用此FTB控件页面上<script>内定义的函数。藉由此实现runat=server代码对于本机函数的调用,即通常所谓的Response.Write法。

另外,我还需要从本机函数调取runat=server中控件的属性。想了半天,找到了如下的不是办法的办法:

function myOpenFunc(){
var dt=eval('myForm.myDataTable');
var tempurl='../inc/uploadimg.aspx?tab=';
tempurl = tempurl+dt.value;
window.open(tempurl,'_uploadimg','width=300 height=50');
}

其中myForm、myDataTable分别为runat=server里面Form和DropDownList的Id名称,使得本机获得的html页面里的form和select的id为这二者,从而为本机函数的实现提供可能性。

在uploadimg.aspx中只需完成上传文件,调用opener.top.InsertText(…)方法传入图片地址即可,而在myOpenFunc()所在页面中定义InsertText方法完成插入。

b) 编辑区域:

编辑区域的实质,宝玉已经说得比较清楚了,其实就是一个document.designMode设为on的Iframe。因此可以方便的用本机函数进行各种编辑工作以及调用focus()获取焦点。

c) DropDownList的数据绑定:

由于需要,选定一个DropDownList后要对另外一个重新进行数据绑定,实现方式如下:

指定DropDownList的属性OnSelectedIndexChanged=”SelectionChangeFunc” AutoPostBack=”true”,SelectionChangeFunc会传送给一个delegate型别从而起到类似函数指针的作用。

void SelectionChangeFunc(Object sender, System.EventArgs e)
{
myDataClass.DataSource = CreateDataSource(...);
myDataClass.DataTextField = "TextField";
myDataClass.DataValueField = "ValueField";
myDataClass.DataBind();
myDataClass.SelectedIndex = 0;
}
ICollection CreateDataSource(…)
{
System.Data.DataTable myDt = new System.Data.DataTable();
myDt.Columns.Add(new System.Data.DataColumn("TextField", typeof(String)));
myDt.Columns.Add(new System.Data.DataColumn("ValueField", typeof(String)));
...
myDt.Rows.Add(CreateRow("…", "…", myDt));
...
System.Data.DataView myDv = new System.Data.DataView(dt);
return myDv;
}
System.Data.DataRow CreateRow(String Text, String Value, System.Data.DataTable dt)
{
System.Data.DataRow myDr = dt.NewRow();
dr[0] = Text;
dr[1] = Value;
return myDr;
}

d) DataGrid的CommandButton:

column字段:<asp:ButtonColumn HeaderText="Del Button"
Text="Del" CommandName="DelBtn" />

指定DataGrid属性OnItemCommand=”Grid_DelCommand”

通过Grid_DelCommand函数处理所有的CommandButton信息,而Grid_DelCommand函数只需根据CommandName指定的值选择操作即可。

void Grid_DelCommand(Object sender, DataGridCommandEventArgs e)
{
if(((LinkButton)e.CommandSource).CommandName == "DelBtn")
{
...
}
}

这里有两个问题:

其一,好像DataGrid被提交的时候也会调用此OnItemCommand函数,因为当时由于只有一个command,没有用if判断CommandName值的时候,一提交就要出错,而且是在这个函数里面出错的。所以建议就算只有一个command也用if后者select判断一下。

其二,我本来是把<asp:ButtonColumn>定义为“PushButton”的,但是在进行强制类型转换的时候没有找到相应的类型,不管是Button、PushButton都不对,所以只好换用默认的LinkButton才调试通过。

e) DataGrid的分页:

设置DataGrid的

AllowPaging=True
PagerStyle-Mode=NumericPages
PagerStyle-HorizontalAlign=Right
OnPageIndexChanged=”Change_Page_Index”属性

定义下列函数:

void Change_Page_Index(Object sender, DataGridPageChangedEventArgs e)
{
myDataGrid.CurrentPageIndex=e.NewPageIndex;
...
myDataGrid.DataBind();
}
void PagerButtonClick(Object sender, EventArgs e)
{
String arg = ((LinkButton)sender).CommandArgument;
switch(arg)
{
case ("next"):
if (myDataGrid.CurrentPageIndex < (myDataGrid.PageCount - 1))
myDataGrid.CurrentPageIndex ++;
break;
case ("prev"):
if (myDataGrid.CurrentPageIndex > 0)
myDataGrid.CurrentPageIndex --;
break;
case ("last"):
myDataGrid.CurrentPageIndex = (myDataGrid.PageCount - 1);
break;
default:
myDataGrid.CurrentPageIndex = Convert.ToInt32(arg);
break;
}
myDataGrid.DataBind();
}

这里注意的是换了页要重新DataBind()一下。

f) SQL:

不多说了,下面是我觉得常用的函数:

System.Data.DataSet MyQuery(String querystring)
{
String connectionString = @"...";
System.Data.IDbConnection dbConnection = new
System.Data.SqlClient.SqlConnection(connectionString);
System.Data.IDbCommand dbCommand = new
System.Data.SqlClient.SqlCommand();
dbCommand.CommandText = querystring;
dbCommand.Connection = dbConnection;
System.Data.IDbDataAdapter dataAdapter = new
System.Data.SqlClient.SqlDataAdapter();
dataAdapter.SelectCommand = dbCommand;
System.Data.DataSet dataSet = new System.Data.DataSet();
dataAdapter.Fill(dataSet);
return dataSet;
}
int MyDelete(String delString)
{
String connectionString = @"...";
System.Data.IDbConnection dbConnection = new
System.Data.SqlClient.SqlConnection(connectionString);
System.Data.IDbCommand dbCommand = new
System.Data.SqlClient.SqlCommand();
dbCommand.CommandText = delString;
dbCommand.Connection = dbConnection;
int rowsAffected = 0;
dbConnection.Open();
try
{
rowsAffected = dbCommand.ExecuteNonQuery();
}
finally
{
dbConnection.Close();
}
return rowsAffected;
}
int MyInsert(...)
{
String connString = "...";
System.Data.IDbConnection dbConnection = new
System.Data.SqlClient.SqlConnection(connString);
String queryString = "INSERT INTO [...]([...], ...) VALUES (";
queryString +="@..., ...)";
System.Data.IDbCommand dbCommand = new
System.Data.SqlClient.SqlCommand();
dbCommand.CommandText = queryString;
dbCommand.Connection = dbConnection;
System.Data.IDataParameter dbParam_... = new
System.Data.SqlClient.SqlParameter();
dbParam_...ParameterName = "@...";
dbParam_...Value = ...;
dbParam_...DbType = System.Data.DbType.String;
dbCommand.Parameters.Add(dbParam_...);
...
int rowsAffected = 0;
dbConnection.Open();
try {
rowsAffected = dbCommand.ExecuteNonQuery();
}
finally {
dbConnection.Close();
}
return rowsAffected;
}

10、 其他点点滴滴:

a) 去掉图片加链接后外包框:

<img border=0>

b) 去掉IE图片悬停工具栏:

<img galleryimg=”no”>或者<meta http-equiv="imagetoolbar" content="no">

c) 去掉链接点击后的虚线:

<a href="…" onFocus="this.blur()"></a>

d) 使iframe自适应长宽:

<iframe src="..."
onload="this.height =
this.document.body.offsetHeight;this.width=this.document.body.offsetWidth;">
</iframe>

另外千万注意不要漏了</iframe>,网页被撑开了,我查了半天才发现是这个原因。

e) 连续滚动:

一般的marquee会两次滚动间会有一段时间的空白,采用此处的代码可以使得其连续滚动。

上面这些就是这个网站的点点滴滴,没有什么技术含量,只是写篇乱纪,以标明这个颓废的寒假。

绚色你的生活

# DO NOT EDIT THIS FILE! It was created by Ethereal
@[email protected] eq 80 or tcp.port eq 443@[22328,55704,24713][65083,65535,42083]
@[email protected] eq 53 or udp.port eq 53@[63477,65535,101][0,32767,0]
@Bad [email protected] or icmp@[0,0,0][57311,25186,25957]
@Microsoft@smb or nbns@[0,5080,65535][65535,65535,65535]
@IPX@ipx@[60652,0,1542][65535,65535,65535]
@DHCP@bootp@[39064,15934,40863][65535,65535,65535]
@Intel ANS probes@ans@[56173,56173,56173][0,0,0]
@Background Noise@stp or arp or eth.dst eq ff:ff:ff:ff:ff:ff@[65535,65535,65535][26214,26214,26214]
炫色1

# DO NOT EDIT THIS FILE! It was created by Ethereal
@httptcp@ tcp.srcport == 80 or tcp.dstport == 80@[38385,62683,65534][0,0,0]
@DNS@dns@[19194,65534,32100][0,0,0]
@ARP@arp@[65202,65533,24456][0,0,0]
@icmp@icmp@[65534,8609,6712][0,0,0]
@STP@stp@[65534,65534,65534][8262,42200,9408]
@[email protected] == 139 or tcp.dstport == 139 or tcp.srcport == 138 or tcp.dstport == 138 or tcp.srcport == 137 or tcp.dstport == 137 or udp.srcport == 139 or udp.dstport == 139 or udp.srcport == 138 or udp.dstport == 138 or udp.srcport == 137 or udp.dstport == 137@[7961,5947,65534][64045,65535,62556]
@smtp@ tcp.srcport == 25 or tcp.dstport == 25@[65534,10208,51170][62059,62059,62059]
@pop@ tcp.srcport == 110 or tcp.dstport == 110@[65534,7268,54440][0,0,0]
@nntp@nntp@[49886,47154,63549][992,992,992]
@snmp@snmp@[62556,52730,2142][7636,32644,64045]
@igmp@igmp@[45944,5999,65534][0,0,0]
@telnet@ tcp.srcport == 23 or tcp.dstport == 23@[9274,47661,3862][0,0,0]
@tftp@tftp@[59220,3637,65534][0,0,0]
@ftp@ftp@[62721,6393,65534][0,13490,65038]
@Q931@q931@[14275,65534,25039][0,0,0]
@rsvp@rsvp@[60324,7655,65534][63348,65535,9481]
@CMIP@ udp.srcport == 164 or udp.dstport == 164@[47957,9122,9122][60977,63600,0]
@tcp@tcp@[40555,49091,65534][0,0,0]
@udp@udp@[39040,49264,65534][64542,64542,64542]
炫色2

# DO NOT EDIT THIS FILE! It was created by Ethereal
@Linksys [email protected] contains 00:04:5A || eth.addr contains 00:06:25 || eth.addr contains 00:0C:41 || eth.addr contains 00:0F:66@[65535,50372,0][0,0,0]
@d-Link [email protected] contains 00:05:5D || eth.addr contains 00:0D:88 || eth.addr contains 00:0F:3D || eth.addr contains 00:00:50:BA || eth.addr contains 00:80:C8@[65535,50372,0][0,0,0]
@Netgear [email protected] contains 00:09:5B@[65535,50372,0][0,0,0]
@Unwanted Protocals@spx || ipx || aarp || aim@[65535,65535,65535][65535,0,0]
@SpanningTree Topology [email protected] == 0x80@[0,0,0][65535,63222,0]
@HSRP state change@ hsrp.state != 8 && hsrp.state != 16@[0,0,0][65535,63222,0]
@ospf state change@ ospf.msg != 1@[0,0,0][65535,63222,0]
@MS Master Browser [email protected]@[62965,63222,42148][65535,0,0]
@NW [email protected] || cdp || hsrp || vrrp || ospf || bgp || eigrp || rip || rtmp || eth.addr == 01:00:0c:cc:cc:cc@[43573,39932,39932][0,0,0]
@IP Time-to-Live < [email protected] < 5@[63736,26728,34952][0,0,0] @TCP [email protected]@[63736,26728,34952][0,0,0] @Bad IP [email protected]_bad@[63736,26728,34952][65535,65535,65535] @Bad UDP [email protected]_bad@[63736,26728,34952][65535,65535,65535] @Bad TCP [email protected]_bad@[63736,26728,34952][65535,65535,65535] @TCP Seg [email protected]@[63736,26728,34952][65535,65535,65535] @TCP Seg [email protected]@[63736,26728,34952][65535,65535,65535] @TCP Long Frag [email protected]@[63736,26728,34952][65535,65535,65535] @[email protected] & 0x02@[36663,59478,37540][607,3474,607] @[email protected] & 0x04@[61717,47055,24609][0,0,0] @[email protected] & 0x01@[56433,42925,57086][0,0,0] @HTTP@http@[30428,62589,62589][0,0,0] @TCP@tcp@[57455,60592,62451][0,0,0] @UDP@udp@[52264,63736,63736][0,0,0] @arp@arp@[65140,65535,49151][0,2987,65535] 炫色3

选一款喜欢的,然后开始绚色生活吧!
不过要是阿梅能帮忙配配色就更好了,呵呵!(题外)

润新楼下打架啦—现象陈述篇

2004年9月19日 下午5:30左右 阴

床下看书,有欲望…,遂上厕所。听到楼下传来争吵声,我从4楼的窗台望下,见两中年妇女正死死拉住一个赤裸上体的男子吵闹。人群瞬间开始聚集,不久就围了一大堆人,人们边看边聊,不亦乐乎。这时,一辆110警车从旁边开过,停在红旗门口,下来一警察,买东西去也。双方此时已开始没休止的漫骂,女方终于忍不住了,二人开始合攻男子,男子被迫还手。人群开始向外扩散,但是并未走远,转身一起强烈指责那名男子。这时,我开始一边看着停在润新楼下的 110警车,一边拨打一直打不通的110。十分钟后,另外一组110警摩到来,将因不堪忍受群攻而早已跑进旁边宿舍小区躲藏的男子抓出。我回到床前,继续看书….

under construction…

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,学会享受生活,品味生活,并在工作中,为别人如此这般创造条件!