2011年1月2日 | 标签:

前几天有人在 Stack Exchange 上提了一个问题 How can a new programmer impress the software engineer (boss)?(作为新手程序员如何给软件工程师出身的老板留下好印象?),Joel Spolsky(Joel on Software 的主人,《软件随想录》的作者) 看到了这个问题,他没有正面回答,而是在下面讲了悲催的程序员阿士顿的故事。我很喜欢这个故事,于是就大概翻译过来分享一下。翻译得很仓促,错误难免,见谅。

正文:

我告诉过你有关阿士顿的事情吗?

阿士顿是一个典型的吃玉米长大的农场男孩,他的父母曾经是嬉皮士,从来没有真正地同心协力过,直到有一天他的妈妈继承了密歇根农村的15亩地。然后 他全家搬到了那里,买了一对奶山羊,靠在农贸市场把有机山羊奶酪卖给雅皮士们谋生。

那个时候阿士顿才10岁,他需要每天早晨4点起床给那些该死的山羊挤奶,这活非常累。阿士顿很喜欢上学,因为上学就意味着不需要跪在羊粪里工作了。整个高 中他都异常努力,希望可以拿到一所名牌大学的奖学金,然后他就可以离开农场了。在大学里,他发现大学生活比农场的生活轻松多了,所以搞不明白为什么每个人 不能像他那样每科都拿到A。他选择了软件工程作为自己的专业,因为他深信一个工程师绝对不需要早晨4点就起床。

阿士顿就这样从学校毕业了,他对软件产业并没有很多了解,所以他去了招聘会,申请了3份工作,并且都拿到了 offer 。然后他挑了一个给钱最多的offer:年薪高达 32,000美元,这是一家位于密歇根西南部的大家具公司,为全世界的企业生产办公小隔间(cubicle farm)。入职之后,因为阿士顿再也不想回到农场了,所以他决定给他的老板查理谢尔曼留下一个好印象。

“这个可不简单”,坐在他隔壁的同事杰夫说:“她在这里也算是个传奇人物了。”

“你的意思是?” 他说。

阅读全文…

2010年12月26日 | 标签: ,

单态模式:

许多用户在很多时候虽然已经使用了单态模式,但有可能还没有意识到自己使用的就是单态模式。

例如,用某一个类来保存游戏仲的分数,只需要这个类的一个实例就可以了,只需要一个实例记录游戏总分就足够了,

使用两个实例记录总分没有意义。同样,播放音乐,警告信息等。

单态模式有两个主要特征:

1.在某一时刻,类有且仅有一个实例。

2.类中应该有唯一的全局访问点

在使用单台模式中,只需要记住,在任何时刻只能有一个实例。 阅读全文…

2010年12月26日 | 标签: ,

工厂方法模式的目的就是减少客户端与它使用的类的依赖。

工厂方法模式在客户端与使用它的泪之间加入了一个媒介,这个媒介由名为Creator的类来充当。

简单来说,就是在客户端和他们使用的产品类之间架设一道防火墙。

( 工厂方法模式将创建对象和使用对象的过程分离开来 )

工厂方法模拟的逻辑类型

工厂方法模式的类图

FactoryMethod() 工厂方法主要的功能就是实例化产品类并返回实例化后的对象。

虽然FactoryMethod方法在Creator类中声明的,但它的具体实现却是在ConcreteCreator中

阅读全文…

2010年12月21日 | 标签: ,

学习程序已经有一段时间了,觉得有必要学习设计模式,提高自己的代码水平。

网上找到一本不错的书,遂向大家介绍介绍。

《ActonScript3.0设计模式》注意:是山德斯(Sanders.W.) (作者), 古曼娜提(Cumaranatunge.C.) (作者),方红琴 (译者)

阅读全文…

2010年12月5日 | 标签: ,
2010年11月18日 | 标签: ,

前些天因为由于需要,研究了一些组件库,查看了一些不同类型的组件库,但由于很多组件库比较复杂,

不适合新手的我学习,后来发现了这个轻量级的UI组件库MinimalComps.

MinimalComps是由Keith Peterss 大师(个人超崇拜他,哈哈)编写, 代码优美,使用简单,

用于学习组件的代码编程和使用都很好。

这个UI组件库,直接使用是不支持中文的,但它是开源的,所以想当然你可以改写代码,使之支持中文。

网上也有很多更改使之支持中文的方法,大概就是把字体嵌入设置更改,Ok。

类文档:http://www.minimalcomps.com/documentation
类库:http://code.google.com/p/minimalcomps/
作者博客:Keith Peterss 阅读全文…

2010年11月18日 | 标签:

当我们编写组件等图形类是,如果更新一个属性时立刻更新图形,先看如下伪代码:

function draw()
{
	图形绘制
}
function set width( value:Number )
{
	_width = value;
	draw();
}

如上,如果更改多项类似width属性时,将需要在同一帧上运行多次draw。这样做效率很低

阅读全文…

2010年10月29日 | 标签:

文档中的解释

numLines 定义多行文本字段中的文本行数。

scrollV 属性可帮助用户定位到长篇文章的特定段落.

maxScrollV scrollV的最大值。

下面从例子中解释:

package
{
	import flash.display.Sprite;
	import flash.text.TextField;
	public class Main extends Sprite
	{
		private var _tf:TextField ;
		public function Main()
		{
			/*if(_tf == null)
			{
				_tf = new TextField();
			}*/
			_tf = new TextField();
			_tf.text = "aaaaaaaddddffffffffffffcccccccccccccccccgggggggggggggggccccccccccccttttttcccccccccccccccccccccccfffffffffff";
			_tf.wordWrap = true;
			_tf.multiline = true;
			//_tf.height = 50;
			_tf.width = 50;
			addChild(_tf);
			//_tf.scrollV=2;
			trace("numLines: "+_tf.numLines);
			trace("maxScrollV: "+_tf.maxScrollV)
			//定为长文本从第几行开始显示
			trace("scrollV: "+_tf.scrollV)
 
		}
	}
}

输出:

numLines: 13
maxScrollV: 8
scrollV: 1

屏幕上显示的文本为7行,而文本中总共有13行,

通过设置scrollV可以规定文本从指定的行显示

(比如设置scrollV=3,则文本从第三行开始显示,所要显示的行数不会因此改变)

scrollV默认值为1.

maxScrollV在该例子中为7,表明scrollV最大也只可以设置为7,

屏幕上显示的文本可以是第1-7,2-8,3-9,4-10,5-11,6-12,7-13

所以maxScroll为7。

因此在不知道文本显示多少行可以利用这三个变量求出显示的行数:

var visibleLines:int = _tf.numLines – _tf.maxScrollV + 1;

2010年10月28日 | 标签:

(我是as3实现,其实不熟,无奈,数据结构的学习笔记)

已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。例如,设:
LA=(3,5,8,11)
LB=(2,6,8,9,11,15,20)

LC=(2,3,5,6,8,8,9,11,15,20)

提示:设两变量值i和j,指向LA,LB两线性值的数据元素
放入LC前 有两种情况 当a<=b时 当a>b时

//将两个数据表合并成一个线性表,新的线性表仍按值非递减有序排列
 
import flash.utils.getTimer;
//应用开始时的毫秒数
var startTime:int = getTimer();
//两线性表的数据元素
var arr1:Array = new Array(3,5,8,11);
var arr2:Array = new Array(2,6,8,9,11,15,20);
//输出新的线性表
var result:Array = new Array();
//运行函数
MergeList(arr1,arr2);
 
trace("最后结果:"+result);
 
trace( "运算花费时间:"+ (getTimer()-startTime) +"毫秒");
 
function MergeList(arr1:Array,arr2:Array):void
{
	var i:int = 0;
	var j:int = 0;
	while( (i<arr1.length)&&(j<arr2.length) )
	{
			if( arr1[i]<=arr2[j] )
			{
				result.push(arr1[i]);
				i++;
 
			}
			else
			{
				result.push(arr2[j]);
				j++;
			}
	}
	//多余的数据元素,直接插入到最尾
	while(i<arr1.length)
	{
		result.push(arr1[i]);
		i++;
	}
	while(j<arr2.length)
	{
		result.push(arr2[j]);
		j++;
	}
 
}
2010年10月25日 | 标签:

Sprite类和Shape类会根据图形的绘制更改自身的长宽。

以下是在flash中的一个测试代码:

import flash.display.*;
import flash.events.MouseEvent;
var wid:Number = 200;
var sprite:Sprite = new Sprite();
 
sprite.x =10;
sprite.y =10;
addChild(sprite);
 
sprite.graphics.beginFill(0xd0d0d0);
sprite.graphics.drawRect(0,0,wid,100);
sprite.graphics.endFill();
trace(sprite.width);
stage.addEventListener(MouseEvent.CLICK,onClick);
 
function onClick(event:MouseEvent):void
{
 wid = 300*Math.random();
 sprite.graphics.clear();
 sprite.graphics.beginFill(0xd0d0d0);
 sprite.graphics.drawRect(0,0,wid,100);
 sprite.graphics.endFill();
 trace(sprite.width);
 
 }