2011年1月18日星期二

倒计时

离职倒计时
回家倒计时
新年倒计时
新生活倒计时

重生!重生!重生!!!

2010年11月24日星期三

关于Out of Memory Exception: System.Drawing.Image.FromFile的解决

   这个问题很诡异,在给图片做水印的时候,测试的图片源是jpg的,大小是600多k,连续测试了同样来源大小的图片,还是无解!最后换了一张2M的jpg图片,竟然可以成功加好水印!

   微软的说法是对的“图片格式已经损坏或这个GUI+什么云云”,但是用图片阅读器能打开!怎么算是损坏呢??? 浪费了我2小时时间,最后还是这样莫名其妙的解决了!有点无语。。。

  可见,对比法,充分的测试用例是很有必要的!

2010年11月14日星期日

和自己想象的天空不一样,只有对人生说再见,稍微看到一点未来,还是对说拜拜。

珍惜最后的日子

 现在的地方似乎没有自己想要的东西,开始是因为理想,现在理想不是自己的了,也许从来就不是,我只是棋子,只是工具,他们再怎么样,也跟我无关。我的理想是什么,什么什么要活着,为什么要在这里继续下午,没太多让我留恋的东西了。
 这里的人,这里的事情,马上就要和我没有关系了。可能有所留恋,可能不会太久,太多时候还是孤独奋战,就算来帮手也不能根本改变我的处境还是孤独,一个人的激情,能有多持久呢?显然,没有强大的动力,很难坚持。坚持一年多了,跟自己关系不大理想,如果成了可能我是所谓的功臣,如果败了我就是帮凶,现在像个帮凶,我要离开这里,不要做帮凶!
 珍惜在这里的最后日子!

2010年9月27日星期一

记录网站迁移过程

公司网站9月底到期了,我们选择换了一个新的机房,再者机器也需要更新换代。所以,购入了一台Dell PowerEgde R410,购买还算顺利,花了1W多点。21号新机器入架,装系统,时间太匆匆没来得及在公司装好新的windws Server 2008 R2。烦人的key的问题最后在淘宝上买了个解决了!万能的淘宝啊!

中秋休整了2天后,在同事上班前的最后一个晚上也是boss回公司的前一天通宵完成网站迁移工作!1个人一个晚上没太多准备搞定了,还算顺利!这次升级升级了系统2008 R2,升级了数据库到2008,升级了IIS到7.5,从而某种程度上提高了网站的性能!
期间耗时最多的2个地方是:
 一是:安装php商城的时候死活认不出mysql,最后把全部扩展一起拷贝到system32下,瞎整好了!现在还是不太明白,看来php得研究下了!
 二是:数据迁移比较麻烦,图片啊数据库文件啊!我采用的是各个击破的模式,一个个网站的迁移,一项一项的迁移!
 期间需要动态的修改DNS的A记录!
 这次升级完成了网站文件的动静分离!算是一个小小的进步,另外硬件上提升了不少,磁盘作了RAID1,自己这方面的知识也提高了点!

  之后的工作是艰巨的!技术团队还很不完善,路漫漫啊!
  人的问题现在成了最大的问题!可以也会成为我前途今后考虑的重点!现在你是将帅,你也是兵兵!全面发展是好事也是坏事,我想漫漫的培养自己的管理意识,全局意识!想好做好最好的自己!

 做技术的可能就这个命吧!boss的画饼已经不起作用了!不只是希望得到那么点点,需要更多更多!

  ps:一则广告,最近公司招人。需要前端工程师一枚,.net工程师一枚(1~2年经验,牛逼的应届生也可),有兴趣的哥们发生邮件至xyingjie[at]gmail.com,细谈。期待你的加入!

2010年9月15日星期三

刘军宁∶中华文明到了最危险的时候!

   中国人在食品中完成了化学扫盲,从大米中认识了石蜡,从火腿中认识了敌敌畏;从咸鸭蛋、辣椒酱里认识了苏丹红,从火锅里认识了福尔马林,从银耳、蜜枣里认识了硫磺,从木耳里认识了硫磺酸。今天,三鹿又让同胞知道了三聚氰胺的化学作用。
   外国人喝牛奶结实了,中国人喝牛奶结石了。日本人一天一杯牛奶,振兴了一个民族,中国人一天一杯牛奶,早熟了一个民族。


   段子里提到的事例表明,中国在今天面临的根本危机是道德危机。这个危机不是表现为信仰与道德的真空,而是表现为信仰与道德变成精神废墟。具体地说,中国在今后以至于更长的一段时间内,最大的最根本的危机是与信仰与道德有关的精神危机。纵然是严刑峻法也已经无法改变这样一个最直观的事实∶中国是世界上最大的真贪官、假商品、假文凭、假发票、真(假)防伪商标等的最大生产国。每次官民冲突、每个建筑物的垮塌、每个环境灾难背后无不暴露出巨大的道德亏空。由于种种原因,从数千年乃至数十年以来整个社会的道德赤字与坏账还在加速积累。中国发生的没有道德底线的事情,目不暇接,更多的、正在发生的甚至不为人们所知。

最近各种灾难与事端的密集爆发,说明中国已经到了道德亏空的密集还账期。许多中国人的道德底线已荡然无存。信仰的缺失与道德的赤字正在转化成一桩桩人为的灾难。整个社会开始为多年累计的信仰危机和道德沦丧承受沉重的代价,而这仅仅是个开始。信仰危机还在探底过程中。按照目前的趋势,中国人的道德状况还会进一步恶化。在现在的中国,没有信仰、不讲道德的人如鱼得水,有信仰讲道德的人寸步难行。中华文明到了最危险的时候,因为中国人到了最缺失信仰与道德的时候!

从现在到未来的相当一段时间内,中国人将继续生活在道德与信仰的废墟中。说是废墟,而不是真空,是因为废墟中尚有很多有价值的东西,生活在废墟中的许多个体还是有信仰有道德的,只是由权力主导的道德与信仰系统因坍塌而在整体上变成一个废墟,整个社会也因此陷入一种信仰崩溃和道德失范的混乱状态。目前的信仰与道德危机是数千年的旧正统与六十年的新正统作为价值系统的坍塌所引发的精神危机。尽管这两种价值系统在现实中常常互相支撑,但是丝毫也未能扭转各自主体已经瓦解与坍塌的现状。分别历时数千年与六十年的精神主体结构为什么会瓦解与坍塌?我以为,这是因为这两种价值都不能提供信仰与道德规范的终极源泉。本质上,它们都是国家机器用来巩固政权维持统治的宣教手段。它们不是民间自发认可的,而是通过国家机器强加的价值系统。任何不是自由选择的信仰都是伪信仰。

中国历史上的道德纲常多半是统治者强加的道德。而且这些道德都是为统治机器服务的,不论是历史上的三从四德还是现时代的标兵楷模。这是中国长期道德危机的根本原因所在。把掌权者的主义当做国民的信仰,并禁止其它信仰,必然导致全社会在信仰上的丧失,导致国民道德与精神的全面退化。中国的危机,从十九世纪中叶起,就已经不仅仅是体制的危机,更是精神的危机,是国家主导的价值系统崩溃所引发的道德与信仰的危机!

中国在传统上是个世俗社会,绝对多数人没有整全的信仰。可以说,信仰的问题在中国从未真正解决过。与世界上的许多国家相比,不论是传统的儒家思想,还是后来的马克思主义,都是世俗的意识形态。近来大行其道的国学,作为中国传统文化的缩影,其中也难觅宗教的踪影。专制极权是导致中国人缺失信仰的主要根源之一。在每个王朝后期的政权危机背后的,本质上都是人心的危机、信仰的危机、道德的危机。统治本身就没有道德基础,政治权力自然不允许公民树立信仰与道德。为什么许多国人无信仰无道德底线?因为有信仰要付出的成本太高;为什么不道德?因为讲道德的代价太大。问题是,如果没有信仰、没有道德,全民将承受代价将最大化。没有信仰即没有正义。没有信仰的社会,即是正义失落道德匮乏的社会。

几千年旧的信仰被暴力革命打得落花流水,几十年的疑似信仰又落了空,真正的信仰却领不到准生证。这就是现状。在中国,信仰与道德的失落与长期占统治地位的意识形态有关。这样的意识形态把物质摆在第一位,完全排斥精神、宗教、信仰。如果一个社会真有一群先锋队的话,如果这个先锋队的成员又不能自由信仰的话,那么这个社会的主体就没有信仰。一种主义,一种政治意识形态,通常只代表一种理想,一种利益诉求。信仰不同于理想。乌托邦的理想梦境不可能作为人们心目中牢不可破的“信仰”。信仰也不同于科学。任何主义只要一旦被宣称为是科学,就不具有成为信仰或宗教的可能。因为科学是经验的。要么说它是科学,要么说它是信仰。把经验的东西当作信仰是虚假的信仰。

现在许多国人对目前在精神、道德和信仰领域出现的危机已似乎有了比较普遍的共识,但是对造成危机的原因却有重大的分歧。有一种观点认为,中国人今天的道德与信仰状态是市场经济和资本主义造成的。这种看法是非常错误的。我认为,中国人今天的道德与信仰状态不是经济发展与生活富裕导致的,而是对道德与信仰的禁锢造成的,是权力对道德的压制造成的阻碍自由信仰的不是市场,不是金钱,而是政治权力。没有市场经济,中国照样有信仰危机;没有市场,人都活不下去了,精神还空虚吗?如果不空虚,那也是动物意义上的不空虚。信仰危机与市场经济无关。在世界范围内,市场经济与宗教信仰从来都并行不悖。倒是在实行计划经济和公有制的地方,信仰与宗教都荡然无存。不是市场阻止信仰,而是权力阻止信仰。况且,中国还不能算是一个市场经济的国家。中国的燃油价格和许多商品的价格是发改委定的,中国的民企五百强利润总和不及两个国企,能说中国是市场经济体吗?相反,在中国,市场经济像信仰自由一样,都受到了政治权力的严重阻碍。若不是中国有了一点点市场经济,中国今天更是信仰的荒漠。表面上看,国人没有信仰与贪图货利是联系在一起的。但是我们不该就此得出货利或金钱是导致信仰失落的原因。抢劫犯盗抢珠宝,我们能说是珠宝造就了盗窃犯吗?我们能以销毁珠宝来作为根治抢劫行为的解决方案吗?

为什么信仰会繁荣或衰败?答案隐藏在信仰自身的属性之中。人和其他动物的根本区别在于人有信仰,而其他动物没有。道德的源头是信仰。没有信仰就没有道德底线。信仰是一个人活着的精神寄托。没有真正的信仰,人们就没有正义感责任感,就会无所顾忌,无所敬畏,无有廉耻。信仰指向的是“意义”,并赋予人的生命以意义。因为人的存在是需要意义的。信仰不是现实的,而是超现实的;不是经验的,而是先验的。信仰是人对于无限、永恒、生命的终极价值与意义的追求。信仰涉及的是相对于经验科学而言的超验真理。信仰深深植根于人性之中。因为人在本性上总是在探寻意义,挣脱有限走向无限,趋向超越。信仰必须是由衷的、自觉自愿的、认可、相信、敬仰、崇拜和追求。依靠强迫、利诱、欺骗不能产生真正的信仰,也不能维持和改变信仰。信仰与道德的短缺,归根到底是自由的短缺。

所以,真正的信仰必须是自由选择的信仰,而不是政治权力强加的信仰。信仰是理性与信念的产物,而不是强制与暴力的产物。同样,强制与暴力也不可能阻止信仰。因此,不仅要尊重与保护信仰自由,而且应该把信仰自由钦入到政治制度、政治秩序中去。只有信仰自由,才能产生好的信仰,才能淘汰抑制不良的信仰;没有信仰自由,只有坏的信仰。没有超验,没有信仰,就没有个人的自由。道德问题离不开自由,离不开相应的政体。自由是道德赖以存活的氧气,不论公德与私德。没有自由,任何德性都将窒息。所以,我们说人需要信仰,不是说需要被统治机器强加一个信仰,不是“被信仰”,而是每个人去自由选择自己的信仰,寻找自己的精神锚地。

如果说货利是人类生存的物质支柱,信仰则是人类生存的精神支柱。那么,在中国,解决信仰危机的方案,不是去通过拆除人类生存的物质支柱来加固精神支柱,不是放弃经济发展,而是归还属于每个人的思想、信仰自由。一个国家的未来,在于其精神的根基与力量,而不在于政府权力。中国的精神重建,中国的有限政府,中国的市民社会都离不开信仰自由。一个国家的根本力量,不在于其物质的或军事的力量,而在于其精神的、信仰的力量。没有信仰自由、没有精神信仰的国家,再大也是小国!没有信仰自由,不论人均GDP多高,国民在精神上和道德上依然是贫困的。国人常说,财大压身,对一个国家也是如此。没有精神与信仰的厚度,也难有物质财富的高度。即使有了,也会被压垮!有了信仰自由,一个人、一个社会信仰什么就会有答案,大家就会自由地去选择、去获得自己的信仰。唯有自由选择的信仰才有可能成为真正的信仰,中国人才有可能走出现在的精神废墟,藉由信仰自由获得真正的信仰与道德!

2010年9月11日星期六

概念:NOSQL数据库

NOSQL(Not Only SQL,不限于SQL)是一类范围非常广泛的持久化解决方案,它们不遵循关系数据库模型,也不使用SQL作为查询语言。
简单地讲,NOSQL数据库可以按照它们的数据模型分成4类:
  1. 键-值存储库(Key-Value-stores)
  2. BigTable实现(BigTable-implementations)
  3. 文档库(Document-stores)
  4. 图形数据库(Graph Database)

2010年8月26日星期四

运用NCrawler、HtmlAglityPack、NPOI抓取网页

首先需要到codeplex上下载最新的NCrawler、HtmlAglitypack、NPOI,

其次研究下NCrawler的demo,理解其处理流程,基本接口的功能。NCrawler是很方便扩展的,只要实现自己的IPileStep即可,另外个人觉得propertyBag[index],这个索引相当的有用,在应用的时候,我增加了一个新的propertyBag["html"]方便在自己的IPipleStep下处理html,提取想要的数据保存至excel中。

再次其中遇到一个htmlAglitypack的问题,初次使用了,他的demo也超级简单,当html不是太规范的时候,htmlAglitypack -》 selectnodes 是失效的,不起作用的, 我遇到的情况是下载的html中 包含大量的 ‘\r\n’,全部replace后,再处理,过滤,问题就不大了!

最后提取的数据是保存到excle里面,NPOI真的很好用,对基本的需求基本都OK,他的文档例子也超级丰富,我只看了现在需要的例子,全面的发掘他的功能还有看有没有机会了。

NCrawler的作者真的超级热情的,提问很快就会被答复 ,如果你有疑问,在其codeplex,讨论区,可以先搜索想要找的答案,一般的类似blacklist,正则过滤,等都能找到,要是没有就new post吧。

总结下,这次抓取了某网站的某些数据近万条,开发到测试历时2天,自己感觉还是比较满意,特别是最后优化抓取速度的时候,采用blacklist + InMemory 方式速度提高了N倍。。。
也小小满足了吧。

夜深了。。。

再看看,Solr,Solr.net... 研究下这个超级的FullTextIndex Server。。。


加油!

2010年8月21日星期六

30个提高Web程序执行效率的好经验


  1. 尽量避免使用DOM。当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用。使用设置innerHTML的方法来替换document.createElement/appendChild()方 法。
  2. eval()有问题,new Fuction()构造函数也是,尽量避免使用它们。
  3. 拒绝使用with语句。 它会导致当你引用这个变量时去额外的搜索这样的一个命名空间,with里的代码在编译时期是完全未知的。
  4. 使用for()循环替代for…in循 环。因为for…in循环在开始循环之前需要Script引擎创建一个含有所有可循环属性的 List,需要多检查一次。
  5. try-catch语句放在循环外面,不要放在循环里面,因为异常是很少发生的,放在外面避免每次都要执行 它们。
  6. 甚至圣经里都提到过这个 – 不要全局的。全局变量的生命周期贯穿整个脚本的生命周期,而本地变量的存在范围随着本地命名空间的销毁而消失。当在函数或其它地方引用一个全局变量时,脚 本引擎需要搜索整个全局命名空间。
  7. fullName += 'John'; fullName += 'Holdings';执行速度快于fullName += 'John' + 'Holdings';
  8. 如果你需要把多个字符串连接起来,最好是把他们做成一个数组,然后调用join()方法实现这个操作。这种方式在生成HTML片段时尤其 有效。
  9. 对于简单的任务,最好使用基本操作方式来实现,而不是使用函数调用实现。例如val1 < val2 ? val1 : val2;执行速度快于Math.min(val1, val2);,类似的,myArr.push(newEle);慢于myArr[myArr.length] = newEle;
  10. 将函数的引用作为参数传递到setTimeout()setInterval()里优于将函数名作为字符串参数传递(硬编码)。例如,setTimeout(”someFunc()”, 1000)执行效率慢于setTimeout(someFunc, 1000)
  11. 当进行遍历操作时避免使用DOM操作。通过像getElementsByTagName()这 种方法得到的DOM元素队列都是动态的;有可能在你还没有对它遍历完成时,它已经被改变。这有可能导致死循环。
  12. 当你对对象的成员(属性或方法)进行反复操作时,先存储对它们的引用。例如var getTags = document.getElementsByTagName; getTags(’div’);
  13. 在任何的代码段里,在局部变量范围外存放一个这个局部变量的引用。例如
    function foo(arr) {
    var a = ’something’;

    //变量 ‘a’ 对于下面的一段就是范围外变量,这个变量的引用在很多情况下会有用处。
    for (var i = 0, j = a, loopLen = arr.length; i < loopLen; i++) {
    //do something
    }
    }
  14. for(var i=0; i < someArray.length; i++) {…}的执行效率慢于for (var i=0, loopLen=someArray.length; i<loopLen; i++) {…}
  15. 在HTTP头信息里加入缓存控制过期和最大存活时间标记。
  16. 优化CSS。要使用<link>方式,而不要使用@import方式。请参考这个优秀的文档http://www.slideshare.net/stubbornella/object-oriented-css
  17. 使用CSS技术来优化图片资源
  18. 用GZip方式压缩 .js 和 .css 文件。如果你使用的是Apache,在 .htaccess 里设置压缩方式,你的HTML, XML 和 JSON 也同时会被压缩。
    AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/json
  19. 使用JavaScript压缩工具。除了使用YUI和JSMin外,你还可以试一试Google Closurehttp://closure-compiler.appspot.com/home (感谢: James Westgate, 一位读者)
  20. 优化每个页面上的各种资源,把它们拆分到各个子域上,这么它们就能够并行下载。请参考http://yuiblog.com/blog/2007/04/11/performance-research-part-4/
  21. 将CSS样式表放在页面的最顶端,这样能方便包括IE在内的浏览器进行解析。
  22. 尽量将DOM结构保持的越简单越好。DOM的体积会影响相关的操作效率,像查找, 遍历,DOM改动都有影响。document.getElementsByTagName(’*').length这 个值越小越好。
  23. 注意你使用的选择器。例如,如果你想获取一个ul下的直接子元素,使用jQuery(”ul > li”)而不要使用jQuery(”ul li”)
  24. 当切换元素的可见性时(display),请记住:element.css({display:none})的 速度快于element.hide() 和 element.addClass(’myHiddenClass’)。 除非在一个循环里,我选择element.addClass(’myHiddenClass’), 这样会使代码更简洁 – 不要使用 inline CSS 和 JavaScript。
  25. 当你使用完对DOM的引用变量后,要把它置为NULL。
  26. 使用AJAX时,GET的执行效率高于POST。所以要尽量使用 GET 方式。只是要注意一点,IE只允许你用GET传送2K的数据。
  27. 小心使用脚本动画。没有硬件的支持,动画会执行的很慢。尽量避免使用那些没有实际价值的动画效果。
  28. 如果你的background-image对于这个图片的容器太小的话,请避免使 用background-repeat。如果你的背景图片需要来回填充很多次才能充满背景,那么将background-repeat属性设置成background-image 和repeat-x 或 repeat-y来 达到填充背景的效果的做法是不明智的,这种填充方式的效率特别的低。你应该尝试使用一个足够大的图片来做background-image并 且使用background-repeat: no-repeat
  29. 布局时不要使用<table>。 <table>在浏览器完全把它画出来之前需要反复绘制好几次。因为DOM中<table>是很少见的一种之后输出的会影响之前输出的显示效果的元素。对于表格数据来说,你可 以使用table-layout:fixed; 这是一种更有效的现实算法,根据CSS 2.1技术说明,这种写法可以让表格一行一行的输出。
  30. 尽可能的使用原始JavaScript。限制JavaScript框架的使用。

--
道不远人,人自远。

2010年8月19日星期四

我的blogger又复活了

在百度空间有的地盘,还有QQ空间,不是他们不好,是他们不够自由,总是被和谐,不安全。。。

之后我自己的网站也要上去,努力学习php、mysql中!

加油!