相互学习、共同进步

不积细流,难以成江海;不积畦步,难以成千里----------小邓^_^
posts - 8, comments - 3, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2006年6月8日

在ASP.NET中上传图片并生成缩略图的C#源码 <FONT size=4><FONT size=4><FONT size=4>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Drawing.Imaging;

namespace eMeng.Exam
{
/// <summary>
/// Thumbnail 的摘要说明。
/// </summary>
public class Thumbnail : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Label1.Text = "<h3>在ASP.NET里轻松实炙趼酝?lt;/h3>";
Button1.Text = "上载并显示缩略图";

}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
HttpFileCollection MyFileColl = HttpContext.Current.Request.Files;
HttpPostedFile MyPostedFile = MyFileColl[0];

if (MyPostedFile.ContentType.ToString().ToLower().IndexOf("image") < 0)
{
Response.Write("无效的图形格式。");
return;
}
GetThumbNail(MyPostedFile.FileName, 100, 100,
MyPostedFile.ContentType.ToString(), false, MyPostedFile.InputStream);
}
private System.Drawing.Imaging.ImageFormat GetImageType(object strContentType)
{
if ((strContentType.ToString().ToLower()) == "image/pjpeg")
{
return System.Drawing.Imaging.ImageFormat.Jpeg;
}
else if ((strContentType.ToString().ToLower()) == "image/gif")
{
return System.Drawing.Imaging.ImageFormat.Gif;
}
else if ((strContentType.ToString().ToLower()) == "image/bmp")
{
return System.Drawing.Imaging.ImageFormat.Bmp;
}
else if ((strContentType.ToString().ToLower()) == "image/tiff")
{
return System.Drawing.Imaging.ImageFormat.Tiff;
}
else if ((strContentType.ToString().ToLower()) == "image/x-icon")
{
return System.Drawing.Imaging.ImageFormat.Icon;
}
else if ((strContentType.ToString().ToLower()) == "image/x-png")
{
return System.Drawing.Imaging.ImageFormat.Png;
}
else if ((strContentType.ToString().ToLower()) == "image/x-emf")
{
return System.Drawing.Imaging.ImageFormat.Emf;
}
else if ((strContentType.ToString().ToLower()) == "image/x-exif")
{
return System.Drawing.Imaging.ImageFormat.Exif;
}
else if ((strContentType.ToString().ToLower()) == "image/x-wmf")
{
return System.Drawing.Imaging.ImageFormat.Wmf;
}
else
{
return System.Drawing.Imaging.ImageFormat.MemoryBmp;
}
}

private void GetThumbNail(string strFileName, int iWidth, int iheight,
string strContentType, bool blnGetFromFile, System.IO.Stream ImgStream)
{
System.Drawing.Image oImg;

if (blnGetFromFile)
{
oImg = System.Drawing.Image.FromFile(strFileName);
}
else
{
oImg = System.Drawing.Image.FromStream(ImgStream);
}
oImg = oImg.GetThumbnailImage(iWidth, iheight, null, IntPtr.Zero);
string strGuid = System.Guid.NewGuid().ToString().ToUpper();
string strFileExt = strFileName.Substring(strFileName.LastIndexOf("."));
Response.ContentType = strContentType;
MemoryStream MemStream = new MemoryStream();
oImg.Save(MemStream, GetImageType(strContentType));
MemStream.WriteTo(Response.OutputStream);
}

}
}
</FONT></FONT></FONT><FONT color=#ff0000 size=4></FONT><FONT size=4>功能:
1。把图片文件(JPG GIF PNG)上传,
2。保存到指定的路径(在web.config中设置路径,以文件的原有格式保存),
3。并自动生成指定宽度的(在web.config中设置宽度)
4。和指定格式的(在web.config中指定缩略图的格式)
5。和原图比例相同的缩略图(根据宽度和原图的宽和高计算所略图的高度)
6。可以判断是否已经存在文件
7。如果不覆盖,则给出错误
8。如果选中"覆盖原图"checkbox,则覆盖原图。
9。可以根据要求,在webform上设置1个以上的file input和相应的checkbox
10。并在文件上传完毕后,显示原图的文件名,尺寸,字节,和
11。缩略图的文件名尺寸。
12。缩略图的文件名格式:原图+"_thumb."+指定格式,如:test.jpg_thumb.gif,以便于管理。

public void UploadFile(object sender, System.EventArgs e)
{

string imgNameOnly, imgNameNoExt, imgExt;
string imgThumbnail;
int erroNumber = 0;
System.Drawing.Image oriImg, newImg;
string strFePicSavePath = ConfigurationSettings.AppSettings["FePicSavePath"].ToString();
string strFePicThumbFormat = ConfigurationSettings.AppSettings["FePicThumbFormat"].ToString().ToLower();
int intFeThumbWidth = Int32.Parse(ConfigurationSettings.AppSettings["FePicThumbWidth"]);
string fileExt;

StringBuilder picInfo = new StringBuilder();

if(Page.IsValid)
{


for(int i = 0;i < Request.Files.Count; i++)
{
HttpPostedFile PostedFile = Request.Files[i];
fileExt = (System.IO.Path.GetExtension(PostedFile.FileName)).ToString().ToLower();

imgNameOnly = System.IO.Path.GetFileName(PostedFile.FileName);
if(fileExt == ".jpg" || fileExt == ".gif" || fileExt == ".png")
{

if(System.IO.File.Exists(strFePicSavePath + imgNameOnly) && (checkboxlistRewrite.Items[i].Selected == false))
{
erroNumber = erroNumber + 1;
picInfo.Append("<b>错误:</b>文件("+ (i+1) +") " + imgNameOnly + " 已经存在,请修改文件名<br/>" );
}
}
else
{
erroNumber = erroNumber + 1;
picInfo.Append("<b>错误:</b>文件("+ (i+1) +") " + imgNameOnly + " 扩展名 " + fileExt + " 不被许可<br/>" );
}

}

if(erroNumber > 0)
{
picInfo.Append("<font color=red>全部操作均未完成,请修改错误,再进行操作</font><br/>");
}
else
{
for(int i = 0;i < Request.Files.Count; i++)
{

HttpPostedFile PostedFile = Request.Files[i];
imgNameOnly = System.IO.Path.GetFileName(PostedFile.FileName);
imgNameNoExt = System.IO.Path.GetFileNameWithoutExtension(PostedFile.FileName);
imgExt = System.IO.Path.GetExtension(PostedFile.FileName).ToString().ToLower();


oriImg = System.Drawing.Image.FromStream(PostedFile.InputStream);
newImg = oriImg.GetThumbnailImage(intFeThumbWidth, intFeThumbWidth * oriImg.Height/oriImg.Width,null,new System.IntPtr(0));
switch(imgExt)
{
//case ".jpeg":
case ".jpg":
oriImg.Save(strFePicSavePath + imgNameOnly , System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case ".gif":
oriImg.Save(strFePicSavePath + imgNameOnly , System.Drawing.Imaging.ImageFormat.Gif);
break;
case ".png":
oriImg.Save(strFePicSavePath + imgNameOnly , System.Drawing.Imaging.ImageFormat.Png);
break;
}

//oriImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameNoExt + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

switch(strFePicThumbFormat)
{
//jpeg format can get the smallest file size, and the png is the largest size
//case "jpeg":
case "jpg":
newImg.Save(strFePicSavePath + imgNameOnly + "_thumb.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
imgThumbnail = imgNameOnly + "_thumb.jpg";
break;
case "gif":
newImg.Save(strFePicSavePath + imgNameOnly + "_thumb.gif",System.Drawing.Imaging.ImageFormat.Gif);
imgThumbnail = imgNameOnly + "_thumb.gif";
break;
case "png":
newImg.Save(strFePicSavePath + imgNameOnly + "_thumb.png",System.Drawing.Imaging.ImageFormat.Png);
imgThumbnail = imgNameOnly + "_thumb.png";
break;
default:
newImg.Save(strFePicSavePath + imgNameOnly + "_thumb.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
imgThumbnail = imgNameOnly + "_thumb.jpg";
break;

}//switch

picInfo.Append("<b>文件 名:</b>" + imgNameOnly + " ( " + oriImg.Width + " x " + oriImg.Height + " ) " + PostedFile.ContentLength/1024 + "KB<br/>");
picInfo.Append("<b>缩略图名:</b>" + imgThumbnail + " ( " + newImg.Width + " x " + newImg.Height + " )<br/><br/>");

oriImg.Dispose();
newImg.Dispose();

}//for
picInfo.Append("<font color=red>所有操作成功</font><br/>");

}// if erronumber = 0

 

}
else
{
picInfo.Append("<font color=red>有错误,请检查。操作未成功</font><br/>");

}

lblPicInfo.Text = picInfo.ToString();

}
</FONT>

posted @ 2006-06-08 13:42 小邓 阅读(562) 评论(1) 编辑

 装箱和拆箱:任何值类型、引用类型可以和object(对象)类型之间进行转换。装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中。被装箱的类型的值是作为一个拷贝赋给对象的。如:
int i = 10;
object obj = i; //隐式装箱
object obj = object(i); //显式装箱
if(obj is int) //int
       Console.WriteLine(“OK”);

Console.WriteLine(obj.GetType()); //System.Int32

有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。

拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:
int i = 10;
object obj = i;
int j = (int)obj;
有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。

拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:
int i = 10;
object obj = i;
int j = (int)obj;

posted @ 2006-06-08 13:38 小邓 阅读(124) 评论(0) 编辑

      我的女友很优秀,很出色,直至如今我仍想不出对她不一往情深的理由,她的优秀让我对所有感情的诱惑都不屑一顾,我们深深的倾情于对方,在校园那段美丽而又浪漫的日子里,我们身边全是羡慕的眼光。曾有一个喜欢我的女孩儿气乎乎的说我们的爱不会是永远,女友冲她做了个鬼脸,说我们是最幸福的一对。

  在学校的时光过得开心而又潇洒,几乎每一次我们都是挽着手一起去上晚自习,无论再冷再热的天气我们都会换着时间在对方宿舍楼下等待。下雪的时候她为了我去学织手套,结果手都扎破了,为这些我幸福得炫耀了好多天。我们一起去食堂打饭,一起看电影,一起逛街,所有能在一起的时间我们都没有错过。我很喜欢我去打蓝球她在旁边拎着手服为我加油的样子,我很怀念她坐在我的旧单车后面轻轻依*的感觉,我为她偷过花园里的玫瑰,为她和别人比赛爬高,结果我摔下来头都破了……。那些日子,是我一生的最快乐。

  毕业后,我们为了能在一起和各自的家人都闹翻了,他们说我们不会幸福,可那根本无济于事,没人能拦住我们。

  可是,我们从搬进租来房子的第一天起,就默不作声的坐了半天,因我们第一次知道了什么都没有的滋味,她的父母是机关干部,她是他们唯一的女儿;我的家人做生意,而我也是独子,衣来伸手,饭来张口的待遇一去不复返,好在我们是相爱的,我们是真心的,于是相视着笑了,拍拍手,开始了新的生活。

  社会给我们上了生动的一课。我们真正知道了有学历找工作也并非那么符合心愿,从起初的高不成低不就惭惭变成能挣钱的都干,体会了生活的艰辛,领教了现实的残酷,然而我们很开心,因为我们能在一起。

  第一个月发工资我给她买了条围巾,买了份烤鸭和饺子,她却哭了,像个委屈的孩子的在我怀里泣不成声,我的心酸透了,那一刻,我很难过。

  在寒冬的夜里,我们围着电暖哭取暖,她作出以苦思甜状*在我的肩头,她美丽的大眼睛里的那种眼神让我感觉很忧伤,我伏在她耳边说一定要让她过上好日子,我们一定会像从前那样让人羡慕的。她说能相爱已经是很幸福的事情了,我们还奢求什么呢?只要你能留在我的身边,只要我们永远都能这样相偎着互相取暖,只要你发工资还能记得给我买烤鸭和饺子,我就是世上最幸福的女人,再说那些有钱人未必会像我们这样相亲相爱,记住,我们是最幸福的一对,无论发生什么事情我都不要你离开我!

  她的话让我心头一热,紧紧的拥住她,我不敢让她看到我的眼泪,因为她喜欢坚强的男孩儿。我在心里一遍一遍告诉自己要努力,那晚我们再次海誓山盟,那晚我们幻想未来,那晚我们相约一辈子不离不弃。

  我想我们的爱够轰轰烈烈了,我想我们的情足以让天地动容了,可就在那晚,房东太太催我们交房租,我们的幸福很让她感动,但她眼睛里更多的是同情和怀疑。

  我们每次很穷的时候都会情不自禁的说起在学校的浪漫时光,那时我们不开心的时候只需在校园迷人的小路上拉着手走一段就没事了,那年的圣诞夜我跑遍了城市所有的精品屋才找到她喜爱已久的八音盒,那时她最爱给我讲王子与公主的故事,那时我的皮肤哪怕蹭破一块皮她也会心疼得掉眼泪。

  可是现在,我所能够给她的幸福只是在发工资时才舍得买的一份烤鸭和饺子。

  尽管生活慢慢的好起来,但这种所谓的进步只是相对于以前的寒酸。我们惭惭都有了个稳定的工作,也攒了一些钱,但从那时开始我们谈的最多的却成了如何买房子,我们幻想着有一天能有自己漂亮的私家车,她说她给我看中了一套皮尔。卡丹西服,她说要把我打造成一个完美男人。

  可我知道,每次路过美容店的时候她都很忧伤,当我看到她那美丽的容颜因缺少保养而有些黯然的时候,我一下子感觉到了自己在这个社会里的渺小,惭愧呀,但却只能苦笑!于是那天我花了六百块钱给她买了点美容用的东西,她高兴得像个孩子那样又蹦又跳,此情此景,我唯一能做的也许只能是长叹一口气吧!

  我去过她就职的那家广告公司,那些不漂亮的女人们背着意大利真皮皮包,穿着上千元的套装。我也去过她同事的家,那些漂亮房子里有着超大屏幕的背投影电视,有着可以将整个人都埋进去的舒适的沙发,有浪漫的灯光,有红酒,甚至养着名贵的狗。女主人在炫耀着她的名牌袜子,她价值昂贵的首饰,这一切,只是因为她们找了个有钱的老公,面对满屋子的时尚,我偷偷的脸红了。

  她们兴高采烈的谈论着一部最新引进大片,而我却想到了女友在菜市场为了一毛两毛钱和人讨价还价的模样,别人说这么漂亮的女孩儿还这么小气时她的无地自容;记得有天她偷偷对着镜子流泪,因为她那纤细而又娇嫩的手因洗衣而变得苍白,因为……,我不知道能够列举出多少因为,但我知道,这一切,只是因为我们还没有能够过上像在家里那样的生活,因为我们没有钱;记起挤公交车的尴尬;记起她委屈而又不欲外露的神情。

  我看了女友一眼,她双腮酡红,过了一会儿她提出有事要先告辞,我知道她是为我着想,我也清晰的记得,那一晚,我们都失眠了。

  从此她成了幸福但不快乐的女孩儿,她像我一样拼命的工作,打拼在这个现实的社会里,每天一下班都已是一身一心的疲惫,望着她曾经天真单纯而今写满倦意的脸庞,望着她为了不让我难过而强自微笑的表情,我的心碎了。

  于是我拼命的挣钱,像牛一样勤耕不辍,拉着我们的感情前行。我们的事业是有希望的,因为我们有才华,因为我们很努力,但成功却是一个漫长的过程。生活过的好一些了,但我们都知道在我们工作的那个圈子,我们依旧是贫下中农,我偷偷的学会了喝酒、抽烟。

  在二年七个月零十三天的那个晚上,她走了,留下一封让我心碎而又无奈的信,她说:宝贝儿,我很爱你,你知道的,我很爱你!为了你,我可以什么都不顾,为了你,我可以毫不犹豫的牺牲自己,你是我的一切,是我的幸福,可正是因为这份爱才让我决定离开你,我将所有的眼泪都留在了这间屋子里,我将所有的情谊都刻在了心里,可我不忍再看你为了让我过的好一点而不要命的工作,我不忍再看你在压力下日惭消瘦,你知道吗?每次你偷偷的喝酒回来,我的心都在痛啊!

  我很无奈,我们都很无奈,因为我不知道,没有钱,我们能爱多久?

  当初,为了你我留了下来,如今,为了你我要离开,我的背包里装满了让人心醉的回忆,也许有一天我还会回来,因为我爱你,没有你,我的生命便没有色彩,可是现在让我走吧,那样你会轻松一点,我们都会轻松一点,好吗?

  照顾自己……
                 
  “是啊!没有钱,我们能爱多久?”

  在她走后,我反复的吟念这句让人心酸的台词,眼泪再次无声的滑落……

posted @ 2006-06-08 11:34 小邓 阅读(75) 评论(1) 编辑

2006年5月7日

摘要: owc控件是microsoft office 图表控件(owc10为ofiiceXP的组件、owc11为office2003的组件,组件的路径为C:\Program Files\Common Files\Microsoft Shared\Web Components\11\owc11,帮助文件的路径为C:\Program Files\Common Files\Microsoft Shared\We...阅读全文

posted @ 2006-05-07 09:00 小邓 阅读(293) 评论(0) 编辑

2006年3月20日

什么是WEB2.0?

  要理解WEB2.0,先得看WEB的历史。 World Wide Web,简称WWW,是英国人TimBerners-Lee 1989年在欧洲共同体的一个大型科研机构任职时发明的。通过WEB,互联网上的资源,可以在一个网页里比较直观的表示出来;而且资源之间,在网页上可以链来链去。在WEB1.0上做出巨大贡献的公司有Netscape,Yahoo和Google。 Netscape研发出第一个大规模商用的浏览器,Yahoo的杨致远提出了互联网黄页, 而Google后来居上,推出了大受欢迎的搜索服务。

  搜索最大的贡献是,把互联网上海量的信息,用机器初步分了个线索。但是,光知道网页里有哪些关键字,只解决了人浏览网页的需求。所以,Tim-Berners-Lee在提出WWW不久,即开始推崇语义网(Semantic Web)的概念。为什么呢?因为互联网上的内容,机器不能理解。他的理想是,网页制作时和架构数据库时,大家都用一种语义的方式,将网页里的内容表述成机器可以理解的格式。这样,整个互联网就成了一个结构严谨的知识库。从理想的角度,这是很诱人的,因为科学家和机器都喜欢有次序的东西。Berners-Lee关心的是,互联网上数据,及能否被其它的互联网应用所重复引用。举一个例子说明标准数据库的魅力。有个产品叫LiberyLink。装了它后,到Amazon上去浏览时,会自动告诉你某一本书在用户当地的图书馆能否找到,书号是多少等。因为一本书有统一的书号和书名,两个不同的互联网服务(Amazon 和当地图书馆数据库检索)可以公享数据,给用户提供全新服务。

  但是,语义网提出之后,曲高和寡,响应的人不多。为什么?因为指望要网页的制作者提供这么多额外的信息去让机器理解一个网页,太难;简直就是人给机器打工。这违反了人们能偷懒就偷懒的本性。看看Google的成功就知道。 Google有个Page Rank技术,将网页之间互相链接的关系,用来做结果排序的一个依据,变相利用了网页制作人的判断力。想一想网页的制作者们,从数量来说,比纯浏览者的数量小得多。但Google就这一个革新,用上了网页的制作者的一部份力量,已将其推上了互联网的顶峰。

   所以互联网下一步,是要让所有的人都忙起来,全民织网,然后用软件,机器的力量使这些信息更容易被需要的人找到和浏览。如果说WEB1.0是以数据为核心的网,那我觉得WEB2.0是以人为出发点的互联网。 我们看一看最近的一些WEB2.0产品,就可以理解以上观点。

  Blog: 用户织网,发表新知识,和其他用户内容链接,进而非常自然的组织这些内容。

  RSS: 用户产生内容自动分发,定阅

  Podcasting: 个人视频/声频的发布/定阅

  SNS: blog+人和人之间的链接

  WIKI: 用户共同建设一个大百科全书

  从知识生产的角度看,WEB1.0的任务,是将以前没有放在网上的人类知识,通过商业的力量,放到网上去。WEB2.0的任务是,将这些知识,通过每个用户的浏览求知的力量,协作工作,把知识有机的组织起来,在这个过程中继续将知识深化,并产生新的思想火花;

  从内容产生者角度看,WEB1.0是商业公司为主体把内容往网上搬,而WEB2.0则是以用户为主,以简便随意方式,通过blog/podcasting 方式把新内容往网上搬;

  从交互性看,WEB1.0是网站对用户为主;WEB2.0是以P2P为主。

  从技术上看,WEB客户端化,工作效率越来越高。比如像Ajax技术, GoogleMAP/Gmail里面用得出神入化。

  我们看到,用户在互联网上的作用越来越大;他们贡献内容,传播内容,而且提供了这些内容之间的链接关系和浏览路径。在SNS里面,内容是以用户为核心来组织的。WEB2.0是以用户为核心的互联网。

  那么,这种意义上的WEB2.0,和Tim Berners-Lee的语义网,有什么不同呢?语义网的出发点是数据的规整及可重复被机器调用,提出使用语义化的内容发布工具, 试图从规则和技术标准上使互联网更加有序。 Google等搜索引擎,在没有语义网的情况下,尽可能的给互联网提供了线索。 WEB2.0则是鼓励用户用最方便的办法发布内容(blog/podcasting),但是通过用户自发的(blog)或者系统自动以人为核心(SNS)的互相链接给这些看似凌乱的内容提供索引。 因为这些线索是用户自己提供,更加符合用户使用感受。互联网逐渐从以关键字为核心的组织方式和阅读方式,到以互联网用户的个人portal(SNS)为线索,或者以个人的思想脉络(blog/rss)为线索的阅读方式。WEB2.0强调用户之间的协作。WIKI是个典型例子。从这个角度看,互联网是在变得更有序,每个用户都在贡献:要么贡献内容,要么贡献内容的次序.

  对下一代互联网的看法,还会有很多的讨论。有一点可以肯定,WEB2.0是以人为核心线索的网。提供更方便用户织网的工具,鼓励提供内容。根据用户在互联网上留下的痕迹,组织浏览的线索,提供相关的服务,给用户创造新的价值,给整个互联网产生新的价值,才是WEB2.0商业之道。

posted @ 2006-03-20 16:26 小邓 阅读(136) 评论(0) 编辑

2006年3月16日

1、总结自己一天任务的完成情况

最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多

2、考虑自己明天应该做的主要工作

把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作

3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法

出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢

4、考虑自己一天工作完成的质量和效率能否还能提高

一天只提高1%,365天你的效率就能提高多少倍你知道吗? (1+0.01)^365 = 37 倍

5、看一个有用的新闻网站或读一张有用的报纸,了解业界动态

闭门造车是不行的,了解一下别人都在做什么,对自己能带来很多启示

6、记住一位同事的名字及其特点

你认识公司的所有同事吗?你了解他们吗?

7、清理自己的代码

今天完成的代码,把中间的调试信息,测试代码清理掉,按照编码风格整理好,注释都写好了吗?

8、清理自己的桌面

当日事当日毕,保持清洁干劲的桌面才能让你工作时不分心,程序员特别要把电脑的桌面清理干净

程序员每月该做的事

1、至少和一个同事一起吃饭或喝茶
不光了解自己工作伙伴的工作,还要了解他们的生活

2、自我考核一次
相对正式地考核自己一下,你对得起这个月的工资吗?

3、对你的同事考核一次
你的同事表现怎么样?哪些人值得学习,哪些人需要帮助?

3、制定下月的计划,确定下月的工作重点

4、总结自己工作质量改进状况
自己的质量提高了多少?

5、有针对性地对一项工作指标做深入地分析并得出改进的方案
可以是对自己的,也可以是对公司的,一定要深入地分析后拿出自己的观点来。要想在老板面前说得上话,做的成事,工作上功夫要做足。

6、与老板沟通一次
最好是面对面地沟通,好好表现一下自己,虚心听取老板的意见,更重要的是要了解老板当前关心的重点

程序员每年该做的事

1、年终总结
每个公司都会做的事情,但你真正认真地总结过自己吗?

2、兑现给自己、给家人的承诺
给老婆、儿子的新年礼物买了没有?给自己的呢?

3、下年度工作规划
好好想想自己明年的发展目标,争取升职/加薪、跳槽还是自己出来干?

4、掌握一项新技术
至少是一项,作为程序员一年要是一项新技术都学不到手,那就一定会被淘汰。
掌握可不是看本书就行的,要真正懂得应用,最好你能够写一篇教程发表到你的blog

5、推出一种新产品
可以是一个真正的产品,也可以只是一个类库,只要是你创造的东西就行,让别人使用它,也为世界作点贡献。当然如果真的很有价值,收点注册费也是应该的

6、与父母团聚一次
常回家看看,常回家看看

posted @ 2006-03-16 17:13 小邓 阅读(55) 评论(0) 编辑

ASP.NET 是一种建立动态Web应用程序的技术。它是.NET 框架的一部分,您可以使用任何.NET兼容的语言来编写ASP.NET应用程序。 使用Visual Basic .NET, C#, J#, ASP.NET 页面(Web Forms) 进行编译可以提供比脚本语言更出色的性能表现。Web Forms 允许您在网页基础上建立强大的窗体。当建立页面时, 您可以使用ASP.NET 服务端控件来建立常用的UI元素,并对它们编程来完成一般的任务。这些控件允许您使用内建可重用的组件和自定义组件来快速建立Web Form,使代码简单化。

ASP.NET 提供了一种编程模型和结构,对比原来的Web技术来说,它能更快速、容易地建立灵活、安全和稳定的应用程序。
  

posted @ 2006-03-16 16:19 小邓 阅读(172) 评论(0) 编辑

[摘要]:今天给某大型门户打热线电话,咨询些问题。坐席人员告诉了我如何操作去解决,第一步、第二步、第三步;首先、其次、再次,说的很清晰。但是我很懒,就说,那么你帮我去设置吧。通常,这个时候坐席人员有三种方法,一种是问我的帐号,然后以高级用户身份替我设置好;另一种方法是问我的帐号和密码,然后以我的身份替我设置好;还有一种处理方法是说抱歉,先生我不能替您做,请您用自己的帐户登陆然后亲手设置。这三种方法都不好,第一种让人觉得这个门户不再值得信任;第二种更觉得不可信任了;第三种拒人于千里之外,客户太受打击。
那个坐席mm却使用了一种我从不曾想到的方法!
她说,先生,请问您的帐号和前4位密码!
wonderful!
这就是解决方案:假设密码字段总长度为12,至少6位,那么密码分前4位和后8位这两部分并分别存储到两列之中。用户登陆时两个字段都使用,高级用户更改低级用户的设置时需要得到低级用户的前4位明文密码。

posted @ 2006-03-16 16:04 小邓 阅读(65) 评论(1) 编辑