东西

“妈,我走了,今天不回来吃饭。”

我冲着正在洗菜的妈妈说到。

“今天又去哪里?不要弄太晚,早点回来。”

每次出门,我妈总是那几句词。

今天约好了同学去看望一位高人。

我的同学叫李悦,他和我住在一个辖区,从小到大,都在同一个学校,他们家人脉很广,每次有什么厉害的人物,总能第一时间想到我。

“今天我们去的地方叫十六寺,我爸让我去给一个叫玄叶的和尚送样东西,其它我不知道,但我总感觉这个叫玄叶的和尚不简单,所以叫上你,你不是学风水的嘛,说不定能有点收获。”

我刚上同学的车,他就迫不及待的和我说道。

“送东西寄快递不就好了嘛,为啥还要你送”

我好奇的问道。

“我也不是很清楚,不过既然让我送,自然有我爸的道理,反正送东西也不是第一次了。”

“那送的东西是啥?”

“我也不知道,哈哈。”

“搞的这么神秘,必有妖。”

虽然有点好奇,但还是没有继续往下问。

开篇

周老六单姓周,真名周老六。

一般名字中含数字的,通常和家里的排行有关系。

周老六家中排行第三,上面还有两个姐姐,分别叫周老大,和周老二。

至于为什么叫老六,据说当年,他父亲特别想要一个儿子,没想到生到他这里就是男孩,他爸觉得这事儿特顺,故给他起名为老六。

周老六从小就受父母宠爱,有好吃的、好穿的,都紧着他。

家中两个姐姐大他好几岁,所以也一起惯着他。现在不是有种说法,叫“妈宝男”,不过在我看来,他属于“四宝男”。

四个人的呵护,让周老六从小就一帆风顺。

小时候上学,早上起来晚了,不是爸妈帮忙请假,就是两个姐姐让他多睡一会儿,所以打小周老六就不明白烦恼是什么。

老话说的好,“不是没烦恼,只是年龄少”。这不,时间一下子来到了2010年。

周老六从寒江大学风水学专业毕业,一直闲在家,爸妈自然是不会催他找工作的,但他总觉得应该做点什么。

大家一定好奇,为什么我对周老六这么熟?没错,我就是周老六,下面我将用第一人称讲述我的故事。

《Java 8 实战》读书笔记

Java  8较之Java 6确实提供了很多新的功能,有些功能实际上是沿用了一些第三方库,比如:Google Guava。核心是函数式编程,其它的功能都是为了支持这个核心功能而提供的。

java 8 实战

一些写代码的思路

  1. 开源软件那么多,能用现成的,绝不重新造轮子。我们要做的,首先是整合,然后才是重新创造。
  2. 歌手界,姚贝娜和周杰伦代表了两种方向,一个是演绎,一个是原创。能做到顶级的,都是很牛逼的。
  3. 自我定位也包含了一种设计,比如在安态的工作,要面对业务、IT高层、限制非常多的开发环境,要有设计、要有架构。
  4. 始终相信行业间,抽象层次高了以后,是相通的,就像第2点说的那样。多学学能看见的牛人,他们在干什么。

写在CSD培训之后

先前参加了公司组织的CSM培训,本身作为一个开发还是有点迷茫的。虽然Scrum敏捷开发实践从整体上,看起来解决了一些问题,但介绍方向偏多,更多的是在介绍敏捷开发方法论。并没有介绍如何实施敏捷开发。CSD培训正好弥补了这一点。

CSD培训总共分三天,三个主题:TDD,重构和持续集成。这三个主题正好解决了我先前的疑惑,分别说一下我的看法。

  • TDD

对TDD印象比较深的是下面这个图。

捕获

这个图展示了,一种开发方式的转变需要付出很大的努力。事实上,TDD也不是非常陌生的东西。但是它会对现有的开发方式有很大的改变。

早在我最初实习的公司里面,整个公司都在围绕着一款操作系统(Elastos)进行开发。测试对于整个系统的重要性不言而喻,任何小的修改都有可能导致整个系统跑不起来。当时的策略是,公司内有一个很大的测试部门会参与到测试用例的编写,除此之外,研发自己也会写很多的单元测试工具。由于Elastos项目开始的较早(2000),很多工具需要自己开发和集成。开发、测试、运维集合在一起,才能确保系统的正确性。

但在后面的很长一段时间,我所在的公司都在从事应用层面的开发。单元测试就不显得那么重要了,很多时候,功能能用就可以了。甚至在小一点的团队里面,测试是不需要的,研发会代替测试的工作。

对于敏捷开发而言,迭代频繁了,单元测试也显得更重要了,每一轮迭代需要确保以前做的功能是好的。另外,开发方式上也有变化。更多的是简化功能实现,不再设计很复杂的实现了,能满足现有的需求即可。

  • 重构

上面的TDD其实是基于如下的开发方式的:

捕获2

研发先按使用场景编写单元测试,然后再实现功能,最后跑单元测试,直到全部通过。在这个过程中会遇到一个常见的问题,代码在编写的过程中,会变的很乱。这个我在之前的开发中就有遇到过。解决这个问题的方法很简单,就是重构。反正有单元测试用例,重构的过程也变得很简单,而且不用担心会把功能改坏。从研发角度而言,问题会从代码层面转嫁到单元测试用例层面,即你需要完善用例,确保覆盖到尽可能多的可能性,从而保证代码的正确性。

对于重构,我是有研究的。在几年前,我就意识到写代码的层面,大致分四种:重构、设计模式、框架、软件架构(具体可以参见这里)。这四个层面实际上是用来应对需求的不确定性的程度,对于需求的稳定程序,给予不同的设计思路。

关于重构的另外一点是,它除了适用于自己写代码之外,还适用于对已有旧代码的维护。关于这一点,我以前没有深入的思考过,好在这一次有人总结了一些经验,作为书分享出来了(修改代码的艺术),我觉得这也是我对重构这一部分比较大的收获之一。

  • 持续集成

持续集成这一块,看似属于运维层面,因为用到了一些运维的工具。但我认为,这一块仍然和研发有十分重要的关联。

如果一个团队二三十个人,开发一个框架,这个时候,持续集成的作用就很大了。它可以确保,单个成员修改的代码,不会影响到其它的功能。下面这张图很好的展示了持续集成的作用:

捕获3

在我现在的公司,这一块是归运维团队管的。所以,基本上无法实施学到的东西。最多就是可以给运维团队一些建议。

最后要说的是CSD培训是CSM培训很好的补充,对研发有很大的启发性。实际上,在实施敏捷开发的过程中,好的实践总会慢慢涌现出来的。你所要做的就是,随时准备着,迎接能提升你效率的方式、方法。

SUI,自定义弹出框的内容

SUI中,使用$.promt()弹框并包含一个输入框的源码仅供参考。然后再用$.modal()来自定义对话框。


$.prompt = function (text, title, callbackOk, callbackCancel) {
	if (typeof title === 'function') {
		callbackCancel = arguments[2];
		callbackOk = arguments[1];
		title = undefined;
	}
	return $.modal({
		text: text || '',
		title: typeof title === 'undefined' ? defaults.modalTitle : title,
		afterText: '<input type="text" class="modal-text-input">',
		buttons: [
			{
				text: defaults.modalButtonCancel
			},
			{
				text: defaults.modalButtonOk,
				bold: true
			}
		],
		onClick: function (modal, index) {
			if (index === 0 && callbackCancel) callbackCancel($(modal).find('.modal-text-input').val());
			if (index === 1 && callbackOk) callbackOk($(modal).find('.modal-text-input').val());
		}
	});
};

关于Win2008计划任务运行Bat脚本

需要设置权限为Administrators组,且选择最高权限。具体参考这里:windows2008计划任务不能定时执行解决思路

“二.创建任务 在图一界面点击右边的创建任务,打开创建任务对话框,输入任务名字,在图二中更改用户或组中,一定要选择administrators,在配置下面选择windows Servertm 2008R2,同时选择使用最高权限运行,点击确定后如图三。”