FreeTextbox的Bug?

很奇怪,上个贴子居然不能回复。里面确实有段手写的Javascript编码,但不应该影响表单提交啊。懒得去修改了,因为重新进入Edit Mode的话,”&lt;”会变成“<”,修改起来太麻烦。跟开心核实了一下,据说FreeTextbox确实有这个Bug。

找出问题所在了,因为HTML编码里,在下方文本框/提交按钮前有个</FORM>,:-), 现在去掉了

动态控件,编码生成过程,神秘的Container变量

这几天有几人在问类似的问题,“动态加载控件,为什么控件事件不能触发了?”,问题是他们都是在

if (!IsPostBack)
{
        //动态产生或装载控件
        //也许需要连接控件事件处理函数
       //加到父控件的Controls
}

里生成或装载了动态控件。当控件在客户端触发,postback到服务器端时,IsPostBack==true,这些控件没有被重新生成,怎么能触发事件?所以答案是,当你需要动态生成或装载控件时,应该在if (!IsPostBack)之外做。我问为什么想在if (!IsPostBack)之内做呢?回答是想只生成一次,跟在ASPX页面里一样

<form id=”form1″ runat=server>
<asp:Button id=”Button1″ runat=”server” Text=”Button1″ OnClick=”Button_Click”/>

#%&%#&%^#&,你怎么会认为这个控件只生成一次呢?这些玩意也不是魔术,想生成一个Button对象,你需要用

Button btn = new Button();

需要触发它的Click事件,你需要用

btn.Click += new EventHandler(YourHandler);

即使象包含

<asp:Button id=”Button1″ runat=”server” Text=”Button1″ OnClick=”Button_Click”/>

的页面,它也是被转化成C#或VB文件,编译成assembly,然后再被执行的啊

不信?加一个页面,TestControls.aspx:

<%@ Page Debug=”true” %>
<%@ Import Namespace=”System.Data”%>
<%@ Import Namespace=”System.Data.SqlClient”%>

<form id=”form1″ runat=server>
<asp:Button id=”Button1″ runat=”server” Text=”Button1″ OnClick=”Button_Click”/>
<asp:DataGrid id=”DataGrid1″ runat=”server” AutoGenerateColumns=”false” GridLines=”Both”>
<Columns>
 <asp:TemplateColumn HeaderText=”Name”>
 <ItemTemplate><%# DataBinder.Eval(Container.DataItem,”Name”)%></ItemTemplate>
 </asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>

void Button_Click(Object sender, EventArgs e)
{
  Button btn = (Button)sender;
  Response.Write(btn.Text + ” is clicked
“);
}

void Page_Load(Object sender, EventArgs e)
{
  
 Button btn = new Button();
 btn.ID = “Button2”;
 btn.Text = “Button2”;
 btn.Click += new EventHandler(Button_Click);
 form1.Controls.Add(btn);
   if (!IsPostBack)
   {
 SqlDataAdapter da = new SqlDataAdapter(“select Name=au_fname + ‘ ‘ + au_lname from authors”, “server=localhost;database=pubs;uid=sa;pwd=;”);
 DataTable dt = new DataTable();
 da.Fill(dt);
 DataGrid1.DataSource = dt.DefaultView;
 DataGrid1.DataBind();
   }
 
//}//这是故意的

function ShowAutoCode()
{
var e = document.getElementById(“dvAutoCode”);
if (e.style.display == “”) e.style.display = “none”;
else e.style.display = “”;
}

把最后一个“}”注释掉,然后在浏览器里向你的服务器调用TestControls.aspx,你将看到编译错误,按 ,你将看到:

Line 1:    //------------------------------------------------------------------------------
Line 2:    //
Line 3:    //     This code was generated by a tool.
Line 4:    //     Runtime Version: 1.1.4322.573
Line 5:    //
Line 6:    //     Changes to this file may cause incorrect behavior and will be lost if
Line 7:    //     the code is regenerated.
Line 8:    //
Line 9:    //------------------------------------------------------------------------------
Line 10:
Line 11:   namespace ASP {
Line 12:       using System;
Line 13:       using System.Collections;
Line 14:       using System.Collections.Specialized;
Line 15:       using System.Configuration;
Line 16:       using System.Text;
Line 17:       using System.Text.RegularExpressions;
Line 18:       using System.Web;
Line 19:       using System.Web.Caching;
Line 20:       using System.Web.SessionState;
Line 21:       using System.Web.Security;
Line 22:       using System.Web.UI;
Line 23:       using System.Web.UI.WebControls;
Line 24:       using System.Web.UI.HtmlControls;
Line 25:       using ASP;
Line 26:
Line 27:       #line 2 "E:\labs\aspnet\TestControls.aspx"
Line 28:       using System.Data;
Line 29:
Line 30:       #line default
Line 31:       #line hidden
Line 32:
Line 33:       #line 3 "E:\labs\aspnet\TestControls.aspx"
Line 34:       using System.Data.SqlClient;
Line 35:
Line 36:       #line default
Line 37:       #line hidden
Line 38:
Line 39:
Line 40:       [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
Line 41:       public class TestControls_aspx : System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState {
Line 42:
Line 43:           private static int __autoHandlers;
Line 44:
Line 45:
Line 46:           #line 6 "E:\labs\aspnet\TestControls.aspx"
Line 47:           protected System.Web.UI.WebControls.Button Button1;
Line 48:
Line 49:           #line default
Line 50:           #line hidden
Line 51:
Line 52:           private System.Web.UI.DataBoundLiteralControl __control5;
Line 53:
Line 54:
Line 55:           #line 9 "E:\labs\aspnet\TestControls.aspx"
Line 56:           private System.Web.UI.WebControls.TemplateColumn __control3;
Line 57:
Line 58:           #line default
Line 59:           #line hidden
Line 60:
Line 61:
Line 62:           #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 63:           private System.Web.UI.WebControls.DataGridColumnCollection __control2;
Line 64:
Line 65:           #line default
Line 66:           #line hidden
Line 67:
Line 68:
Line 69:           #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 70:           protected System.Web.UI.WebControls.DataGrid DataGrid1;
Line 71:
Line 72:           #line default
Line 73:           #line hidden
Line 74:
Line 75:
Line 76:           #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 77:           protected System.Web.UI.HtmlControls.HtmlForm form1;
Line 78:
Line 79:           #line default
Line 80:           #line hidden
Line 81:
Line 82:           private static bool __initialized = false;
Line 83:
Line 84:           private static System.Collections.ArrayList __fileDependencies;
Line 85:
Line 86:
Line 87:           #line 15 "E:\labs\aspnet\TestControls.aspx"
Line 88:
Line 89:   void Button_Click(Object sender, EventArgs e)
Line 90:   {
Line 91:     Button btn = (Button)sender;
Line 92:     Response.Write(btn.Text + " is clicked<BR>");
Line 93:   }
Line 94:
Line 95:   void Page_Load(Object sender, EventArgs e)
Line 96:   {
Line 97:
Line 98:    Button btn = new Button();
Line 99:    btn.ID = "Button2";
Line 100:   btn.Text = "Button2";
Line 101:   btn.Click += new EventHandler(Button_Click);
Line 102:   form1.Controls.Add(btn);
Line 103:   if (!IsPostBack)
Line 104:      {
Line 105:   SqlDataAdapter da = new SqlDataAdapter("select Name=au_fname + ' ' + au_lname from authors", "server=localhost;database=pubs;uid=sa;pwd=;");
Line 106:   DataTable dt = new DataTable();
Line 107:   da.Fill(dt);
Line 108:   DataGrid1.DataSource = dt.DefaultView;
Line 109:   DataGrid1.DataBind();
Line 110:     }
Line 111:
Line 112:
Line 113:  //}
Line 114:
Line 115:
Line 116:          #line default
Line 117:          #line hidden
Line 118:
Line 119:          public TestControls_aspx() {
Line 120:              System.Collections.ArrayList dependencies;
Line 121:              if ((ASP.TestControls_aspx.__initialized == false)) {
Line 122:                  dependencies = new System.Collections.ArrayList();
Line 123:                  dependencies.Add("E:\\labs\\aspnet\\TestControls.aspx");
Line 124:                  ASP.TestControls_aspx.__fileDependencies = dependencies;
Line 125:                  ASP.TestControls_aspx.__initialized = true;
Line 126:              }
Line 127:              this.Server.ScriptTimeout = 30000000;
Line 128:          }
Line 129:
Line 130:          protected override int AutoHandlers {
Line 131:              get {
Line 132:                  return ASP.TestControls_aspx.__autoHandlers;
Line 133:              }
Line 134:              set {
Line 135:                  ASP.TestControls_aspx.__autoHandlers = value;
Line 136:              }
Line 137:          }
Line 138:
Line 139:          protected ASP.global_asax ApplicationInstance {
Line 140:              get {
Line 141:                  return ((ASP.global_asax)(this.Context.ApplicationInstance));
Line 142:              }
Line 143:          }
Line 144:
Line 145:          public override string TemplateSourceDirectory {
Line 146:              get {
Line 147:                  return "/labs/aspnet";
Line 148:              }
Line 149:          }
Line 150:
Line 151:          private System.Web.UI.Control __BuildControlButton1() {
Line 152:              System.Web.UI.WebControls.Button __ctrl;
Line 153:
Line 154:              #line 6 "E:\labs\aspnet\TestControls.aspx"
Line 155:              __ctrl = new System.Web.UI.WebControls.Button();
Line 156:
Line 157:              #line default
Line 158:              #line hidden
Line 159:              this.Button1 = __ctrl;
Line 160:
Line 161:              #line 6 "E:\labs\aspnet\TestControls.aspx"
Line 162:              __ctrl.ID = "Button1";
Line 163:
Line 164:              #line default
Line 165:              #line hidden
Line 166:
Line 167:              #line 6 "E:\labs\aspnet\TestControls.aspx"
Line 168:              __ctrl.Text = "Button1";
Line 169:
Line 170:              #line default
Line 171:              #line hidden
Line 172:
Line 173:              #line 6 "E:\labs\aspnet\TestControls.aspx"
Line 174:              __ctrl.Click += new System.EventHandler(this.Button_Click);
Line 175:
Line 176:              #line default
Line 177:              #line hidden
Line 178:              return __ctrl;
Line 179:          }
Line 180:
Line 181:          private System.Web.UI.Control __BuildControl__control5() {
Line 182:              System.Web.UI.DataBoundLiteralControl __ctrl;
Line 183:              __ctrl = new System.Web.UI.DataBoundLiteralControl(1, 1);
Line 184:              this.__control5 = __ctrl;
Line 185:              __ctrl.DataBinding += new System.EventHandler(this.__DataBind__control5);
Line 186:              return __ctrl;
Line 187:          }
Line 188:
Line 189:          public void __DataBind__control5(object sender, System.EventArgs e) {
Line 190:              System.Web.UI.WebControls.DataGridItem Container;
Line 191:              System.Web.UI.DataBoundLiteralControl target;
Line 192:              target = ((System.Web.UI.DataBoundLiteralControl)(sender));
Line 193:              Container = ((System.Web.UI.WebControls.DataGridItem)(target.BindingContainer));
Line 194:
Line 195:              #line 10 "E:\labs\aspnet\TestControls.aspx"
Line 196:              target.SetDataBoundString(0, System.Convert.ToString(DataBinder.Eval(Container.DataItem,"Name")));
Line 197:
Line 198:              #line default
Line 199:              #line hidden
Line 200:          }
Line 201:
Line 202:          private void __BuildControl__control4(System.Web.UI.Control __ctrl) {
Line 203:
Line 204:              #line 9 "E:\labs\aspnet\TestControls.aspx"
Line 205:              this.__BuildControl__control5();
Line 206:
Line 207:              #line default
Line 208:              #line hidden
Line 209:              System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));
Line 210:
Line 211:              #line 9 "E:\labs\aspnet\TestControls.aspx"
Line 212:              __parser.AddParsedSubObject(this.__control5);
Line 213:
Line 214:              #line default
Line 215:              #line hidden
Line 216:          }
Line 217:
Line 218:          private void __BuildControl__control3() {
Line 219:              System.Web.UI.WebControls.TemplateColumn __ctrl;
Line 220:
Line 221:              #line 9 "E:\labs\aspnet\TestControls.aspx"
Line 222:              __ctrl = new System.Web.UI.WebControls.TemplateColumn();
Line 223:
Line 224:              #line default
Line 225:              #line hidden
Line 226:              this.__control3 = __ctrl;
Line 227:
Line 228:              #line 9 "E:\labs\aspnet\TestControls.aspx"
Line 229:              __ctrl.HeaderText = "Name";
Line 230:
Line 231:              #line default
Line 232:              #line hidden
Line 233:
Line 234:              #line 9 "E:\labs\aspnet\TestControls.aspx"
Line 235:              __ctrl.ItemTemplate = new System.Web.UI.CompiledTemplateBuilder(new System.Web.UI.BuildTemplateMethod(this.__BuildControl__control4));
Line 236:
Line 237:              #line default
Line 238:              #line hidden
Line 239:          }
Line 240:
Line 241:          private void __BuildControl__control2(System.Web.UI.WebControls.DataGridColumnCollection __ctrl) {
Line 242:
Line 243:              #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 244:              this.__BuildControl__control3();
Line 245:
Line 246:              #line default
Line 247:              #line hidden
Line 248:
Line 249:              #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 250:              __ctrl.Add(this.__control3);
Line 251:
Line 252:              #line default
Line 253:              #line hidden
Line 254:          }
Line 255:
Line 256:          private System.Web.UI.Control __BuildControlDataGrid1() {
Line 257:              System.Web.UI.WebControls.DataGrid __ctrl;
Line 258:
Line 259:              #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 260:              __ctrl = new System.Web.UI.WebControls.DataGrid();
Line 261:
Line 262:              #line default
Line 263:              #line hidden
Line 264:              this.DataGrid1 = __ctrl;
Line 265:
Line 266:              #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 267:              __ctrl.ID = "DataGrid1";
Line 268:
Line 269:              #line default
Line 270:              #line hidden
Line 271:
Line 272:              #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 273:              __ctrl.AutoGenerateColumns = false;
Line 274:
Line 275:              #line default
Line 276:              #line hidden
Line 277:
Line 278:              #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 279:              __ctrl.GridLines = System.Web.UI.WebControls.GridLines.Both;
Line 280:
Line 281:              #line default
Line 282:              #line hidden
Line 283:
Line 284:              #line 7 "E:\labs\aspnet\TestControls.aspx"
Line 285:              this.__BuildControl__control2(__ctrl.Columns);
Line 286:
Line 287:              #line default
Line 288:              #line hidden
Line 289:              return __ctrl;
Line 290:          }
Line 291:
Line 292:          private System.Web.UI.Control __BuildControlform1() {
Line 293:              System.Web.UI.HtmlControls.HtmlForm __ctrl;
Line 294:
Line 295:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 296:              __ctrl = new System.Web.UI.HtmlControls.HtmlForm();
Line 297:
Line 298:              #line default
Line 299:              #line hidden
Line 300:              this.form1 = __ctrl;
Line 301:
Line 302:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 303:              __ctrl.ID = "form1";
Line 304:
Line 305:              #line default
Line 306:              #line hidden
Line 307:              System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));
Line 308:
Line 309:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 310:              __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n"));
Line 311:
Line 312:              #line default
Line 313:              #line hidden
Line 314:
Line 315:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 316:              this.__BuildControlButton1();
Line 317:
Line 318:              #line default
Line 319:              #line hidden
Line 320:
Line 321:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 322:              __parser.AddParsedSubObject(this.Button1);
Line 323:
Line 324:              #line default
Line 325:              #line hidden
Line 326:
Line 327:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 328:              __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n"));
Line 329:
Line 330:              #line default
Line 331:              #line hidden
Line 332:
Line 333:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 334:              this.__BuildControlDataGrid1();
Line 335:
Line 336:              #line default
Line 337:              #line hidden
Line 338:
Line 339:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 340:              __parser.AddParsedSubObject(this.DataGrid1);
Line 341:
Line 342:              #line default
Line 343:              #line hidden
Line 344:
Line 345:              #line 5 "E:\labs\aspnet\TestControls.aspx"
Line 346:              __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n"));
Line 347:
Line 348:              #line default
Line 349:              #line hidden
Line 350:              return __ctrl;
Line 351:          }
Line 352:
Line 353:          private void __BuildControlTree(System.Web.UI.Control __ctrl) {
Line 354:
Line 355:              #line 1 "E:\labs\aspnet\TestControls.aspx"
Line 356:              this.__BuildControlform1();
Line 357:
Line 358:              #line default
Line 359:              #line hidden
Line 360:              System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));
Line 361:
Line 362:              #line 1 "E:\labs\aspnet\TestControls.aspx"
Line 363:              __parser.AddParsedSubObject(this.form1);
Line 364:
Line 365:              #line default
Line 366:              #line hidden
Line 367:
Line 368:              #line 1 "E:\labs\aspnet\TestControls.aspx"
Line 369:              __parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n"));
Line 370:
Line 371:              #line default
Line 372:              #line hidden
Line 373:          }
Line 374:
Line 375:          protected override void FrameworkInitialize() {
Line 376:              this.__BuildControlTree(this);
Line 377:              this.FileDependencies = ASP.TestControls_aspx.__fileDependencies;
Line 378:              this.EnableViewStateMac = true;
Line 379:              this.Request.ValidateInput();
Line 380:          }
Line 381:
Line 382:          public override int GetTypeHashCode() {
Line 383:              return 2057729977;
Line 384:          }
Line 385:      }
Line 386:  }
Line 387:  

参看加亮的编码句子。

去除那个注释,然后请求该页,你在C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files下能找到一个cs文件,内含同样的编码,注意要加

<%@ Page Debug=”true” %>

是否曾经疑惑过DataGrid模板里的Container是什么玩意?哪里也找不到它的定义?看看上面加亮的编码,原来它是个局部变量名!

System.Web.UI.WebControls.DataGridItem Container;

真正的MVP

最近有一堆关于MVP的讨论,本来我很少读无聊的帖子,而且不想陷入无谓的争论,但看到开心因此退出博客堂,如鲠在喉,不得不说几句。

自1993年起微软建立的MVP项目,是为了表彰那些在微软的相关技术社区里始终如一地、志愿帮助别人解决技术问题的热心人所设。MVP是由微软支持工程师,产品组经理以及其他MVP,基于Recognized,Credible,Accessible三个标准,推荐产生。这些标准涉及MVP的政治思想/道德水平/为人准则,甚至平常的言论么?不!MVP是热情与技术并重,跟其他东西无关。如果你还想以其他东西来衡量一个MVP,那么请向微软建议,让他们在中国改选新长征突击手或劳动模范算了。

我与开心从未见过面,只在网上认识,但一直对他的技术很钦佩,也深为他的热情所感动,因此曾给他介绍工作,甚至还想给他介绍对象!后来推荐开心连任MVP时,我是这样写的,开心既在论坛热心助人,又在网上写了很多技术文章,还组织活动推广微软技术,开心才是名符其实的MVP。后来开心汉化.TEXT,一手创建博客堂,吸引了国内一群优秀技术人员和不少微软开发人员的加盟。开心因为加盟微软,才被取消MVP称号,但开心热情依旧,乐于助人。没想到一些无聊的争论变成了对他的人身攻击,导致开心退出博客堂,这无疑是博客堂的一大损失。请注意,博客堂是以技术为主的weblog站,不是自由论坛,所以请你不要发表不妥当的回复。

希望开心,不要因为一些无聊之人的话就此退却了。感觉你很累,先休息一段时间吧,然后尽快重返博客堂。我们始终认为你是我们的榜样,你才是我们心目中真正的MVP!

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

附言(2004/04/13 9:50PM)

我个人的理解,MVP的精神就在于始终如一地、志愿帮助别人解决技术问题,与大家分享你的知识,没有其他别的东西。 如果你认为我的理解有误,请指出。

开心在这方面做的很好,所以我说,开心是真正的MVP,但这并不是说别的MVP就不是MVP了。我写本文的原因就在于,觉得开心,因为一些人的话语,不再做这些事情了,不值得,博客堂需要开心才能更好地成长。

我关注的MVP团体,是个共同地、热心帮助用户解决技术问题的团体,愿意与他们相互交流共同提高技术水平,但我很在乎有些MVP不懂装懂、误导用户的行为。但至于MVP们的个人观点,平常说什么做什么,大家都是成年人了,我既管不着,也无心置评,最多作为朋友私下评论/劝说一番,因为这些东西与技术无关,而且谁都知道在网上也争不出什么道理来的,再说MVP作为一个团体也不是打群架的组织。希望网友对MVP有个现实的理解,而不是追求什么“完美的MVP” (说实话,我都不知道“完美的MVP”的涵义)

BizTalk Server 2004简体中文评估版虚机下载

我的同事刘斌想为广大BizTalk Server 2004的爱好者提供一个BizTalk Server 2004简体中文评估版的虚机,该虚机上的已经安装有Windows Server 2003、InfoPath、Visio以及BizTalk Server 2004等产品,均是评估版,到期日期是5月30日,可以通过更改系统时间使其继续运行,压缩包为4G左右,解开后将近7G左右。

由于开心目前没有足够的FTP空间提供,请哪位朋友提供一个FTP空间供我们上传该虚机(请不要提供非法软件FTP空间)。

同时,希望发表http://blog.joycode.com/roy/posts/18502.aspx#18539评论的朋友john_masen能够通过联系给我发封邮件,有事想向您请教。

本贴为临时贴,将在得到FTP空间后删除,请见谅。

另外,提供FTP空间的朋友,请注明您愿意将您的FTP空间提供给其它朋友共享软件使用。

Hello From Seattle


见到了陈铭,等会儿一起去设在华盛顿州会议暨贸易中心的高峰会注册处注册,晚上微软中国请客, 笑脸

晚上见到包括梁振,jiangsheng等其他中国MVP了,还有我们可爱的Grace MM

展波,星期三晚上请我们吧,笑脸

晚会由Grace MM和韩国的MVP Lead Justin主持。第一个节目是由印度MVP Lead主持的抽奖活动,我们的阎宏同志,Patterns方面的专家,是中奖人之一。第二个节目,Grace放了一段介绍中国的录像,真棒,我们怀疑在桥上跑步的是Grace MM。第三个节目,Grace拉中国MVP集体上台合唱<<茉莉花>>。惭愧,我本来就五音不全,这回真是滥竽充数。第四个节目,台湾MVP们穿着山地人的服装,大跳山地舞。第五个节目,澳大利亚MVP Lead带领大家一起玩BINGO游戏,优胜者为韩国人。

前后还有微软MVP项目的负责人以及亚太地区负责人很风趣的讲话,特别是Sean,在早先注册处放了一段十分搞笑的有关MVP的I Feel Great的录像,引来成千MVP们的阵阵大笑

XCP将代替TCP?

[via Tim Bray] 根据这里,XCP – XML Control Protocol将代替传统的Transmission Control Protocol,应该是愚人节笑话,但Tim Bray居然也帮着开这种玩笑?

昨天看到的一个东西才逗呢,[via Dino Esposito] Christian Nagel写了一个《Microsoft to remove the Calculator from Windows》的 贴子,说因为微软在操作系统里捆绑了计算器,某个国家Repeou的软件公司Nisbum写的计算器销路不好,所以Repeou威胁微软,要求微软发布两款操作系统,一款有计算器,另一款没有计算器,否则就要收取微软每年全球销售额的10%作为罚款。。。

明眼人一看就知道是讽刺欧盟的决定的,但居然有人信以为真,去查Repeou和Nisbum是否存在。。。

生日快乐

夜深人静的时候,饿着肚子,一个人为自己庆祝生日,是不是很可笑呀?笑脸

仍然禁不住兴奋,为自己书写新的祭文,以延续两年一祭的习惯。

生命中的没有特殊的日子,其实我知道自己每一天都快乐,而且知道自己会在未来的日子当中仍然会保持快乐的心情,去迎接各种挑战。

开心就好,继续上路!笑脸

二十八岁祭

生日快乐,开心就好。

虽然明知今天并不是自己的真实生日,可是还是想对自己说这么一句。

我有三个生日,一个是身份证的生日,就是愚人节第二天,当时办身份证的时候,不知道怎么回事,竟然写错了。其实我的生日是四月六日,这是我的阳历生日,是我自己最隆重庆祝的生日。不过我父母却喜欢在我阴历生日的时候为我庆祝,或者老辈人对阴历更加感兴趣吧,甚至连我年龄他们也用虚岁来计,今年,我虚岁三十了。

三十岁了,老了…

一个外地来京打拼的程序员,从1999年义无反顾的投入IT圈,为此辛勤奋斗了整整五年,终于一只脚跨入了自己梦寐以求的微软公司,成了为盖茨打工的人。曾经何时,微软是我那么遥不可及的梦想,而现在,我每天就在微软的Office里面工作,与一群真正的微软同事合作,想想是多么不可思议的事情。每一天我都生活在兴奋中,兴奋自己获得了这么多,当然,偶尔也有小小的失落,因为自己毕竟还是v-的员工,所以我仍然在努力!

三十岁了,该收获了…

三十岁前,我有了现在的女朋友,她的体贴与善解人意,经常让疲惫的我,在夜深人静的时候感觉到幸福。小我四岁的她,有着孩子一样的脾气,她的幸福是我打拼的目标及动力。生活在继续,或者在我下一“祭”的时候,我们的感情就开始开花结果了吧?

三十岁了,该考虑前途了…

对于程序员来说,三十岁真的是一道坎。我能否跨得过去?在我身后,那么一大批后生都在奋勇无畏的拼搏着,如果不努力,总会有一天,会被他们挤进山沟中。可是步履不再似以前骄健,思路不再像原来敏捷。我是不是该换个方向了?

三十岁了,仍然激情满怀…

三十岁的我,仍然有着后生的锐气,有着年少时的浪漫。前段时间,与一位年长同事在夜以继日的加班时,他的Laptop里面传出来了S.H.E.的《Super Star》,说这首歌让他想起自己年轻的时候,而且他笔记本里面就只有这一首歌。于是,我也爱上了这首歌,喜欢在工作的时候,翻来复去的听。

三十岁了,我还年轻,开心永远是仗剑环视江湖的侠客,我有自己的新目标。有了目标的开心,不再盲从,敢于横扫出现在自己路上的一切荆棘,以我一贯的傲气走出自己的一条江湖不归路。三十岁,有什么不可以?

其实,我才二十八!!!二十八的我,在为自己的生日祝福,期待着两年后的我,又将是一番什么样的情景,是否如现在霸气,是否如现在激情满怀?

以此为祭…

(去日留痕二十六岁祭)