涛's profile秋叶无痕PhotosBlogLists Tools Help

Blog


    May 26

    毕业十年:软件是饭碗,爱拼才会赢!(转)

                   

    同宿舍的哥们打电话过来,邀请一起参加大学毕业十年的同学聚会,才猛然意识到毕业十年了,心里莫名地一动,似有所感,似有所悟,人生能有几个十年?十年了,我们做了些什么?我们在做什么?我们还要做什么?我们成功了吗?什么是成功?…….太多太多的问号,刹那间涌现心头,无法阻挡,无处躲藏,确确实实,那么多年了,无论在学校里、家里、公司里,还是在朋友圈里,我们总无法逃避这些问题,周围的人总喜欢将我们比来比去,于是我们感觉好累好压抑,我们好象都不是在为自已活着, 我们一而再再而三地彷徨、奋斗、思考……

     

    毕业十年,我都是做软件技术的,从软件开发到软件管理到软件销售到软件企业管理,我的十年都与软件有关,甚至我的老婆也是搞软件测试的,我的整个世界都充满了软件,我的创业也是从软件开始,第一次失败了,第二次重来,还是软件,就是现在的FasterSoft,它在稳定发展着,我不知道它能走到什么地方,但我知道自已会一直坚持下去,因为除了软件,我一无所有,除了技术,我一无所长……

     

    毕业十年,我是一个从农村里爬出来的幸运儿,现在我能用软件技术在这座城市里立足,我已经非常知足了,我从不苛求人们眼中的成功,相比我那些还在农村里垦田种地放牛养猪的小学同学们,我觉得自已在某些方面已经成功了,因此在我抚摸着键盘,敲出一行一行代码的时候,我的心里充满了喜悦与幸福,我深爱着这些代码,深爱着这些代码编译成的软件,并相信一句话:“落后并不可怕,可怕的是不再追赶,失败并不可怕,可怕的是不再奋起,别人睢不起自已并不可怕,可怕的是自已瞧不起自已”……

     

    毕业十年,我需要总结一下,为了能留下点什么,也为了让未来的路更加好走。

     

    一.做人第一,做事第二

       

    这是阿蒙的一贯原则,实际上很多人也都知道这么一个原则,但最重要的是我们能否一直坚持下去。在这个物欲横流的社会,能真正做到这一点的人似乎越来越少了,有的人为了达到目标而不择手段,有的人压根不知如何做人,一切以自我为中心,自私自大自狂,我们有时不得不面对这种人,我们能做的是保护好自已,同时避免污染自已。另一方面,我也将这个原则应用到FasterSoft的管理当中,一个员工即使是技术再厉害,能力再强,业绩再突出,但如果在做人方面出了问题,比如勾心斗角,调拔离间,没有责任感,同事关系紧张,以自我为中心等,那么我也会痛下决心,将其清除。

     

    二.孜孜不倦,坚持不懈

     

    这一点讲的是一种精神,这种精神在我的很多BLOG文章里都反复提起,它对我而言非常地重要,我自认为自已从来都不是那种聪明伶俐的家伙,我所就读的大学院校也毫不起眼,也没有什么人看好过我的未来,我自已其实也不知道我未来能做什么以及做到什么程度,但我有两点是可以看得到并做得到的,即勤奋刻苦和持之以恒,我相信“勤能补拙”、“业精于勤”,“坚持就是胜利”,我将这些当作自已的座右铭,在艰难困苦、失败挫折时,我总坚信能冲破一切,我觉得只要拥有这两种精神,即使我无法达到人们认为的成功,我也无怨无悔,实际上从我本人的性格来说,我也极少奢望成功,也较少去想象成功的模样,我一直以来的追求就是寻找一份自已喜欢的工作,然后用“勤奋+坚持”将它做好,其他的就顺其自然。

     

    三.目标明确,行动迅速

     

    这些字眼有点象政府官员的腔调,如果你有兴趣,你可以去阅读一些政府官员的讲话稿,我想类似的字眼会很多,呵呵,并不是说这些字眼不好,而是它们太空洞,太虚假,你可以不停地说,但说后你做不做得到,那又是另一回事。在我们的一生中,我们在不同的阶段不同的场合会制定很多很多的目标,小学时的目标是考上重点初中,初中时的目标是考上重点高中,高中时的目标是考上重点大学,大学时的目标是毕业后在重点企业找个重点工作,工作后的目标就变得越来越多,比如想找个女朋友恋一下爱,想学好某一门技术,想升官发财,想创业,想结婚,想有个宝宝,想孝顺父母,想报效祖国……无可置疑,这是常人的目标与道路,我们中的大部分人可能都是这么想这么做的,天才偏才庸才毕竟是少数,更多的人都是平平淡淡的,更多的生活都是平平稳稳的,阿蒙也一样,毕业十年,再回想过往的这些目标,已经实现了70%左右,就非常地知足与快乐,我想最重要的一点就是行动迅速,目标的设定是简单与快速的,但关键是你的行动是否迅速与持续,我们不能做“语言的巨人行动的矮子”,我们需要围绕着我们的目标踏踏实实地奋斗到底,尽管达到目标的道路是多么地曲折与艰辛,尽管我们努力了但不一定成功,但我们永不放弃坚持到底。

     

    四.虚心学习,厚道做人

     

    每一个人都有自已的优点缺点,因此每一个人都可以成为别人学习的对象,谦虚是一种美德,无论面对什么样的人,我们都能保持一种虚心学习的态度,想方设法从对方那里学到好的东西,我一直以来都非常佩服我的母亲,她虽然目不识丁,但她在农村里可以将一头又瘦又弱的小猪养成一头又胖又壮的大猪,这是一件非常了不起的事情,在这期间她所付出的心血与所倾注的爱是漫长与巨大的,每到开学时,那头可爱的猪就成了我学费的重要来源,看着猪被卖掉或宰杀,母亲都很伤感地流泪,我也能感受到母亲对我的爱是远远超过对那头猪的爱,因此我会更加地努力学习……同时,从小到大,母亲的纯朴、善良、坚强、勤劳也深深地影响着我,我想一个人最大的财富并不是你现在拥有什么样的资产,而是你拥有什么样的性格与品质。

     

    五.学会感恩,善待苦痛

     

    感恩是一种生活态度,是一份铭心之谢。我们都应该学会感恩。当我们呱呱坠地来到这个世界,什么都还没来得及做的时候,他就已经开始享受前人赋予的一切成果了。生活中,我们每天享受阳光、蓝天、白云以及清洁的环境清新的空气,我们要感谢自然界,感谢那些辛勤工作的清洁工作者;工作中,我们每天坐在明窗净几的办公室里,敲打着键盘,编着代码,我们要感谢公司,感谢同事……所有这些,我们都应感谢。学会感恩,就会懂得尊重他人,发现自我价值。人生漫长,我们难免失败,难免挫折,有时甚至天灾人祸,面对苦痛,面对苦难,我们需要坚强不屈,需要克服困难,需要勇往直前,我们要从苦痛中奋起,从苦难中重生,我们会变得更加坚强更加不可战胜!

     

     

    毕业十年,回忆过去的点点滴滴,无论喜怒哀乐酸甜苦辣,都是那么地令人感动,因为那是自已亲自走过的道路,辉煌也好,平淡也好,顺利也好,曲折也好,都是真实的、生动的、坚定的……

     

    毕业十年,我们学会珍惜,珍惜亲情,珍惜友情,珍惜工作,珍惜现在所拥有的一切,我们学会了感恩,感恩社会,感恩父母,感恩老师,感恩公司,感恩所有与自已相关的人与事……

     

    毕业十年,正值祖国多事之秋,一月的雪灾,三月的暴乱,四月的列车相撞,五月的地震,但我们看到了中国人的团结、坚强与友爱,看到了社会各界的互助与互爱,是的,面对灾难,我们的眼里充满了泪水,但透过泪光,我们看到了希望,中国人永远都不会被打倒,面对各种各样的艰难险阻,我们总能坚持不懈勇往直前。

    April 09

    日报/4/10/2008

           
                              在c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32()四种转换的区别

    1、(int)是一种类型转换;当我们从int类型到long,float,double,decimal类型,可以使用隐式转换,但是当

    我们从long类型到int类型就需要使用显式转换,否则会产生编译错误。
    2、int.Parse()是一种类容转换;表示将数字内容的字符串转为int类型。
    如果字符串为空,则抛出ArgumentNullException异常;
    如果字符串内容不是数字,则抛出FormatException异常;
    如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常;
    3、int.TryParse 与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。最后一个参数为输出值,如果转换失败,输出值为 0
    4、Convert.ToInt32()是一种类容转换;但它不限于将字符串转为int类型,还可以是其它类型的参数;
    比较:
    Convert.ToInt32 参数为 null 时,返回 0;
    int.Parse 参数为 null 时,抛出异常。

    Convert.ToInt32 参数为 "" 时,抛出异常;
    int.Parse 参数为 "" 时,抛出异常。

    Convert.ToInt32 可以转换的类型较多;
    int.Parse 只能转换数字类型的字符串。

     

                                          关于对象直接量(JS第四版50页3.5.2)

           定义对象直接量的语法,使你能创建对象并定义它的属性。对象直接量由一个列表组成,列表元素用冒号分隔的属性/值对,元素之间用逗号隔开了,整个列表包含在花括号之间。For Exemple:var point = {x:2.3,y:-1.2}; 对象直接量也可以嵌套,例如:var rectangle = { upperLeft:{x:2,y:2},lowerRight:{x:4,y:4}};  最后说明的是:对象直接量中的属性值不必是常量,它可以是任意的JavaScript表达式。  例如 EDoc2里面的:

    /**
     * Copyright (c) 2007 XXXX.Crop. All rights reserved.
     * @Author dxh
     */

    // EDoc2.Department
    JueKit.Type.registerNamespace("EDoc2");

    EDoc2.Department = JueKit.Type.createClass("EDoc2.Department", null,
    {
     ctor : function(data)
     {
      this._data = data;
      this.isChildrenDepartmentsLoaded = false ;
      this.isUsersLoaded = false;  
      //var dvDeptUser = new EDoc2.DepartmentUserDataView(this);
    //  this._defaultView = dvDeptUser;
     },
     
     get_defaultView : function()
     {
      return this._defaultView;
     },
     // IDataRow Members
     getColValue : function(name)
     {
      if(name == "id")
      {
       return this._id;
      }
      if(name == "type")
      {
       return EDoc2.MemberType.department;
      }
      return this._data.loginName;
     },
     get_childDepartmentLoaded : function()
     {
    //  if ( this.isChildrenDepartmentsLoaded )
    //  {
    //   return true;
    //  }
      if(!this._departments)
      {
       // 如果没有加载直接返回false
       return false;
      }
      
      return true;
      // 否则判断缓存是否过期
      if(new Date() - this._tmFoldersLoad > EDoc2.OrgnizationClient._cacheExpired)
      {
       return false;
      }
      return true;
     },
     
     get_childUsersLoaded : function()
     {
    //  if ( this.isUsersLoaded )
    //  {
    //   return true ;
    //  }
      if(!this._users)
      {
       // 如果没有加载直接返回false
       return false;
      }
      return true;
      // 否则判断缓存是否过期
      if(new Date() - this._tmFilesLoad > EDoc2.theOrgMng._cacheExpired)
      {
       return false;
      }
      return true;
     },
     
     notifyDepartmentsLoad : function(departments)
     {
      this._tmFoldersLoad = new Date();
      this._departments = [];
      
      var department;
      for(var i=0; i<departments.length; i++)
      {
       department = EDoc2.theOrgMng._departments[departments[i].id];
       
       if(department)
       {
        department._data = departments[i];
       }
       else
       {
        department = new EDoc2.Department(departments[i]);
        EDoc2.theOrgMng._departments[department._data.id] = department;
       }
       this._departments[this._departments.length] = department;   
      }
     },
     
     notifyUsersLoad : function(users)
     {  
      this._tmFilesLoad = new Date();
      this._users = [];
      
      var user;  
      for(var i=0; i<users.length; i++)
      {   
       user = EDoc2.theOrgMng._users[users[i].id];
       
       if(user)
       {
        user._data = users[i];
       }
       else
       {
        user = new EDoc2.User(users[i].id,users[i]);
        EDoc2.theOrgMng._users[user._data.id] = user;
       }
       this._users[this._users.length] = user;
      } 
     },

     loadChildren : function(loadType, cbFunc, oScope)
     {
      // 如果不指定加载的类型,默认加载部门
      loadType = parseInt(loadType);

      if(!loadType)
      {
       loadType = EDoc2.LoadChildrenType.loadDepartments;
      }

      // 如果已经加载过部门,则不再加载
      if(this.get_childDepartmentLoaded())
      {
       loadType &= ~EDoc2.LoadChildrenType.loadDepartments;
      }
      // 如果已经加载过用户,则不再加载
      if(this.get_childUsersLoaded())
      {
       loadType &= ~EDoc2.LoadChildrenType.loadUsers;
      }
      // TODO:职位
      
      if(loadType)
      {
       var func = function(text)
       {
        this.__cbLoadChildrenS(text);
        cbFunc.call(oScope, this);
       };
       EDoc2.theOrgMng.postBack("LoadDepartmentChildren", {deptId : this._data.id, loadType : loadType}, func, this);
      }
      else
      {
       cbFunc.call(oScope, this);
      }
     },
     
     __cbLoadChildrenS : function(text)
     {
      var result = text.toObject();
      
      var loadType = 0;
      if(result.departments)
      {
       loadType |= EDoc2.LoadChildrenType.loadDepartments;
       this.notifyDepartmentsLoad(result.departments);
       
      }
      if(result.users)
      {
       loadType |= EDoc2.LoadChildrenType.loadUsers;
       this.notifyUsersLoad(result.users);
       
      }
      this.isChildrenDepartmentsLoaded = true ;
      this.isUsersLoaded = true;   
      EDoc2.theOrgMng.notifyChildrenDepartmentLoaded(this, loadType);
     }
    });

    JueKit.Type.extend(EDoc2.Department.prototype, JueKit.Collection.LinkedListNode.prototype);

     

    还有 剩余 (1) interface 和 class的区别的问题
    (2) 复习继承的概念  C++支持多重继承  JAVA和C#不支持

    DSC03760

    April 02

    & 和 | 的用法

           很丢人,居然连这个都忘记了,还是写下吧,不要以后又忘记了!是关于 & 位于 和 | 或者 的 用法。
           比如: 10 & 1  , 10的机器码是1010 , 1的机器码是0001,
            1010
          &0001   因为&是上下找相同的数字且为都为‘1’  然后再计算
       得出0000  所以结果为 0
    同样1010
        &0010  结果就为2   ;因为在第二位都为1。而且有用法是判断 if(N&1) 的情况。
     
    而 | 正好相反  是相加。DSC03736
    March 26

    e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.Item

                  e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.Item的意思
    2007-08-27 17:05

    1.(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
    ----指触发对象的类型是DadaList里的基本行或是替换行(简单的说是DataList里的所有数据项内容)

    2.e.Item.ItemType == ListItemType.Header -----指触发对象的类型是DadaList里的标题行的内容
    进行判断以后,可以 对相应的数据对象进行操作

    ListItemType 枚举    [C#]请参见
    System.Web.UI.WebControls 命名空间 | DataGridItem.ItemType | DataListItem.ItemType | RepeaterItem.ItemType
    要求
    命名空间: System.Web.UI.WebControls

    全部显示

    指定列表控件中项的类型。
    备注
    ListItemType    枚举表示可以包含在列表控件中的不同项,例如 DataGrid、DataList 和 Repeater。典型的列表控件由包含此枚举所表示的元素的单元格组成。

    成员
    成员名称            说明
    AlternatingItem    交替(从零开始的偶数索引)单元格中的项。它是数据绑定的。
    EditItem     列表控件中当前处于编辑模式的项。它是数据绑定的。
    Footer     列表控件的页脚。它不是数据绑定的。
    Header     列表控件的页眉。它不是数据绑定的。
    Item    列表控件中的项。它是数据绑定的。
    Pager     页导航,显示定位到与 DataGrid 控件关联的不同页的控件。它不是数据绑定的。
    SelectedItem     列表控件中的选定项。它是数据绑定的。
    Separator    列表控件中项之间的分隔符。它不是数据绑定的。

    (e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
    是判断项是控件内容中的项或交插项
    “e.Item.ItemType == ListItemType.Header”
    是判断项是不是控件的表头

    March 10

    ref/out

                                                    C#中ref和out的区别  
    最近在许多论坛上看到关于了ref和out的区别,发现解释的都不非常理想。
      我想抄写点官方的解释,然后再来我自己的解释

    //如下

    方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
    当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
    若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
    不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
    属性不是变量,不能作为 out 参数传递。

             方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
    若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。
    传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。
    属性不是变量,不能作为 ref 参数传递。

    //上面的理解起来非常不好理解。下面我说说我自己的看法。

    首先:两者都是按地址传递的,使用后都将改变原来的数值。很多人在论坛上解释说out是按数值传递,是错误的。简单的测试后可以知道out使用也能改变数值的,所以肯定是按照地址传递的。
    其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,rel是有进有出,out是只出不进。经典!!!

    February 22

    电子地图

          JavaScript做电子地图,好强!Map!驾驶线路