最近的烦恼

看了一部《再见!乌托邦》的纪录片突然让我意识到最近的焦虑并不是因为财务问题,也不是因为工作问题 而是枯燥的生活,每天三点一线的生活,每天固定的时间固定的地点面对着那些固定表情的人,生活失去了激情,被现状所迷惑而失去的目标。滚蛋吧 宅生活 混蛋吧 迷惑我的一切。

3435a857983d334cea9b31e9c65a445a

胆怯&懦弱

胆怯,买了一辆摩托车却因为没正规拍照担心被交警抓所以都不敢到三环线辅路上骑,当初买它不知道是因为耍帅还是因为有了它可以方便去北京周边玩,已经忘记了胆怯已经让我一次又一次的逃避各种骑摩托的机会,不是怕危险就是怕交警,甚至有时候还有点希望它被偷的想法这样就可以有理由不骑它了,真的觉得自己很奇怪既然有各种担心为什么还要买,就是因为自己胆小怕事。 还有去年买了一张复合弓,就在租屋的楼顶射过一只箭,担心砸到别人家的玻璃担心、担心伤到人,因为没有合适的地方玩就一直闲置在家里,也不敢骑上我那摩托车去北京周边,但是真的我喜欢射箭喜欢摩托车,但是就是不敢做,被各种担心所牵绊。还有很多最近准备了一套户外用品准备自己出去登山露营,但是也是因为担心山上太冷怕出事,还有各种自己给自己编的理由,最后还是放弃了自己的计划。这就是我的胆小,我希望自己能勇敢一点,不要因为胆怯而放弃一些我能做到的事情。

懦弱,感情方面自从小学时候向一个同班女生表白被拒绝之后再也没有自信去面对其他喜欢的女生,同事朋友问我为什么不交女朋友的时候我还用各种很可笑的理由来回答,因为我胖 我不帅 我不高 我没钱 我没自信,也许我这样的确实找不到喜欢自己的但是最大的问题还是因为我懦弱不敢面对。说句我喜欢你很简单但每次都有大山般的弱懦挡住自己,不让自己说出心声。

其实我每天都过的很开心,我不喜欢给自己太大的压力,不喜欢尔虞我诈,但是我内心其实是封闭的,我想打开它,做一个真正的自己,无惧生活无惧爱情。

1091694_1316862120IQBs

提高 web 应用性能之 JavaScript 性能调优

文章来自 IBM developerWorks

Web 开发中经常会遇到性能的问题,尤其是针对当今的 Web2.0 应用。JavaScript 是当今使用最为广泛的 Web 开发语言,Web 应用的性能问题很大一部分都是由程序员写的 JavaScript 脚本性能不佳所造成的,里面包括了 JavaScript 语言本身的性能问题,以及其与 DOM 交互时的性能问题。本文主要来探讨一下如何尽可能多的避免这类问题,从而最大限度的提高 Web 应用的性能。

JavaScript 性能调优

JavaScript 语言由于它的单线程和解释执行的两个特点,决定了它本身有很多地方有性能问题,所以可改进的地方有不少。

eval 的问题:

比较下述代码:

清单 1. eval 的问题

				 
 var reference = {}, props = “p1”; 
 eval(“reference.” + props + “=5”) 

 var reference = {}, props = “p1”; 
 reference[props] = 5

有“eval”的代码比没有“eval”的代码要慢上 100 倍以上。

主要原因是:JavaScript 代码在执行前会进行类似“预编译”的操作:首先会创建一个当前执行环境下的活动对象,并将那些用 var 申明的变量设置为活动对象的属性,但是此时这些变量的赋值都是 undefined,并将那些以 function 定义的函数也添加为活动对象的属性,而且它们的值正是函数的定义。但是,如果你使用了“eval”,则“eval”中的代码(实际上为字符串)无法预先识 别其上下文,无法被提前解析和优化,即无法进行预编译的操作。所以,其性能也会大幅度降低。

Read more "提高 web 应用性能之 JavaScript 性能调优"

分析JavaScript的性能

Kirk Pepperdine在一篇新文章中详细讨论了关于JavaScript性能的主题。他的第一个发现是JavaScript引擎规范要比JVM的脆弱的多。有太多的JavaScript实现,各自具有不同的执行环境。除了这一点外,他还深入了下列主题:

    Getters/Setters

    ……我所遭遇的最具争议的一项建议,在Java世界里已经很久没人提起过了。这项建议是,应该避免使用getter和setter,而应当采用直接访问来避免方法调用的额外开销。这项建议错在哪里?更重要的是,它对在哪里?在Java中使用getter和setter是被普遍认可的……

    Ajaxian和JQuery的创建者John Resig曾经讨论过getter和setter。就像这个网站所演示的,是出于性能上的考虑。

    由于缓存造成的糟糕的局部基准评测(Micro-benchmark

    ……由于JavaScript引擎中少得多的动态优化,有人会觉得局部基准评测要比在Java中容易得多。虽然问题是不同的,但是JavaScript的局部基准评测也没那么容易。糟糕的局部基准评测的最普遍的原因是缓存。在Web世界中缓存无处不在,伴随始终。而且通常它隐藏的很深……

Read more "分析JavaScript的性能"

离开武汉的这2年!(未完待续)

转眼离开武汉工作已经2年了,回忆这2年的时光一幕幕难忘的画面浮现在眼前,从最初在软帝和徐云飞出差到上海。住的是杨浦区基本每天都会去吃楼下的铁板烧。因为不习惯上海的厕所每天跑去对面商场上厕所。到上海没有想像中的宾馆没有豪华的单间2个人住着一个不到8平米的小单间而且还没有大门钥匙如果回晚了就得从厨房的窗户翻进房里。因为无聊有租屋没网络每周六周日会和徐一起跑去网吧玩一整天。在上海被外包的第一家公司叫感信科技,每天8号线从市光路坐到芦恒路走2公里到漕河泾开发区,一个常驻公司内部不到10人的公司,单总是我们的总负责一个很随和也很可爱的人,还有陈涛一个写了5年程序的大哥人也很不错,后来来了一个江历的小财务因为都是新入职的员工所以混的还是比较熟的也可能是因为徐经常很饥渴的去搭讪她所以印象比较深一点,因为我们从武汉外包去上海的本来工资很低在上海消费太高每月吃饭钱都不够还得向家里人伸手要,后来实在觉得太憋屈决定离开现在的公司在上海找份工作长期发展,离职的过程也是很曲折的当时提出离职软帝是不同意的,但是天高任我飞岂是一句不同意就能留住我的,当时公司还派了公司所谓的上海分部的员工也是上海唯一的一个固定员工来安抚我的情绪,然后去对面英业达聊了将近2小时扣的不能在扣的增加了饭补谈话无果我也依然决定离开这个公司,向感信说明了我的想法后很意外的单总居然想留我做他们本公司的员工,前前后后的交谈确实也给出了让我一惊的待遇5XXX的工资+包住宿在当时我的工龄来说这已经是很优厚的待遇了,但是最后我还是拒绝了其原因是因为我的待遇提高让徐很郁闷,还有一个原因是因为在离职期间我也拿到了一家公司的offer已经答应人家去也不好意思反悔,最后就以想做B/S开发为由离开这家公司,这段回忆其实是我这2年中最苦的,低工资、蚁族都不如的住宿条件,但是我相信这些经历不管是在我的事业道路上还是人生道路上都是有着不可取代的帮助,所以我不抱怨反而感到幸运。

Read more "离开武汉的这2年!(未完待续)"

CSS语义化标准化命名规则

CSS语义化标准化命名规则

一般而言,CSS类名的语义化声明方式应当考虑你的页面中某个相对元素的”用意”,独立于它的”定位”或确切的特性(结构化方式)。像left-bar, red-text, small-title…这些都属于结构化定义的例子。

让我们看看下面这个例子:

 

Read more "CSS语义化标准化命名规则"

Log4Net使用指南

声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4)。
请在这里下载示例代码

1 简介

1.1 Log4net的优点:

几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。

经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。

Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。

1.2 Log4net的安装:

用户可以从http://logging.apache.org/log4net/下载log4net的源代码。解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。

 

2 Log4net的结构

log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).

2.1 Logger

2.1.1 Logger接口

Logger是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。

Logger提供了多种方式来记录一个日志消息,你可以在你的应用程序里创建多个Logger,每个实例化的Logger对象都被log4net框架作为命名实体(named entity)来维护。这意味着为了重用Logger对象,你不必将它在不同的类或对象间传递,只需要用它的名字为参数调用就可以了。log4net框架使用继承体系,继承体系类似于.NET中的名字空间。也就是说,如果有两个logger,分别被定义为a.b.c和a.b,那么我们说a.b是a.b.c的祖先。每一个logger都继承了祖先的属性 Read more "Log4Net使用指南"