<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Norris&#039;s Landscape</title>
	<atom:link href="http://www.norris2u4.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.norris2u4.com</link>
	<description>Share My RIA&#039;s Ideas &#38; Researches</description>
	<lastBuildDate>Wed, 01 Sep 2010 04:13:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>9月18日 第5届 FLASH开发者交流会</title>
		<link>http://www.norris2u4.com/?p=406</link>
		<comments>http://www.norris2u4.com/?p=406#comments</comments>
		<pubDate>Wed, 01 Sep 2010 04:13:40 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[SWFSH]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=406</guid>
		<description><![CDATA[活动在线报名地址：http://www.wedoswf.com/events/1 主讲者和专题介绍 Adobe 平台技术 主讲人：Gary Zhu -   Adobe 平台技术总监 Gary 多年工作于 Adobe 公司工作，从事软件产品和平台技术的发展与推广工作。此次Gary远道而来，将为我们介绍 Adobe 平台技术的发展和Flash移动应用软件的开发。 程序接口的另类理解与使用 主讲人：孙毅 曾就职五分钟，任Flash部门主管，并开发《绿豆蛙—漂流岛社区》等项目；现就职八方视界，任Flash部门高级主管，并负责其产品《唯智学园》Flash部分主程，以及Flash性能等各方面研究。 孙毅的博客：http://www.xiaos8.com Flash Media Server 开发经验谈 主讲人：沈先彬 从事FLASH 游戏与AIR应用开发，参与开发项目有 梦境世界 三十六计等，目前在开发WEBGAME。 沈先彬的博客：http://blog.sina.com.cn/shenxianbin Flash RIA的可用性 主讲人：刘轩飞 晒台网首席产品管，10年前端设计和开发经验，信仰互联网，以提供最佳互联网用户体验为己任 刘轩飞的博客：http://www.xuanfei.me 麻球大赛优秀作品介绍 主讲人：廖湘宁 廖湘宁多年来从事视频互动创意与游戏开发，目前在麻球网担任开发者社区经理，负责麻球网(Mochi Media)平台的本土化研发与推广工作。 廖湘宁的博客: http://www.xncat.com 麻球参赛游戏蛛蛛冒险的开发与设计经验分享 主讲人：徐黎明 曾任TCL教育互联 研发主管，广州市远程教育中心 开发主管。涉足麻球平台之后，钟情于游戏开发，创办Tinime 工作室。 麻球参赛游戏DNF，梦幻塔防，吖凡哒哒技术与美工经验分享 主讲人：商文烨 中国第三代闪客，个人作品获得过无数奖项并在中央电视台播出，06年担任搜狐17173频道主管并连续4年获得搜狐最佳称号，2009年成立传奇网科，旗下传动力工作室便是当今最脍炙人口的休闲小游戏开发团队！ 商文烨的博客: http://t.qq.com/shangwenye 议程安排 2010年9月18日 星期六 12:30 ~ 13:00 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://i889.photobucket.com/albums/ac91/wedoswf/banner_flashcamp.gif" rel="lightbox[406]"><img title="第五届SWFSH活动" src="http://i889.photobucket.com/albums/ac91/wedoswf/banner_flashcamp.gif" alt="" width="730" height="95" /></a></p>
<p><strong>活动在线报名地址：<a href="http://www.wedoswf.com/events/1">http://www.wedoswf.com/events/1</a></strong></p>
<p><strong>主讲者和专题介绍</strong></p>
<ul>
<li><strong>Adobe 平台技术</strong><br />
主讲人：Gary Zhu -  <img src="http://i889.photobucket.com/albums/ac91/wedoswf/logo_adobe.png" alt="" /> Adobe 平台技术总监<br />
Gary 多年工作于 Adobe 公司工作，从事软件产品和平台技术的发展与推广工作。此次Gary远道而来，将为我们介绍 Adobe 平台技术的发展和Flash移动应用软件的开发。</li>
<li><strong>程序接口的另类理解与使用</strong><br />
主讲人：孙毅<br />
曾就职五分钟，任Flash部门主管，并开发《绿豆蛙—漂流岛社区》等项目；现就职八方视界，任Flash部门高级主管，并负责其产品《唯智学园》Flash部分主程，以及Flash性能等各方面研究。<br />
孙毅的博客：<a href="http://www.xiaos8.com/">http://www.xiaos8.com</a></li>
<li><strong>Flash Media Server 开发经验谈</strong><br />
主讲人：沈先彬<br />
从事FLASH 游戏与AIR应用开发，参与开发项目有 梦境世界 三十六计等，目前在开发WEBGAME。<br />
沈先彬的博客：<a href="http://blog.sina.com.cn/shenxianbin">http://blog.sina.com.cn/shenxianbin</a></li>
<li><strong>Flash RIA的可用性</strong><br />
主讲人：刘轩飞<br />
晒台网首席产品管，10年前端设计和开发经验，信仰互联网，以提供最佳互联网用户体验为己任<br />
刘轩飞的博客：<a href="http://www.xuanfei.me/">http://www.xuanfei.me</a></li>
<li><strong>麻球大赛优秀作品介绍</strong><br />
主讲人：廖湘宁<br />
廖湘宁多年来从事视频互动创意与游戏开发，目前在麻球网担任开发者社区经理，负责麻球网(Mochi Media)平台的本土化研发与推广工作。<br />
廖湘宁的博客: <a href="http://www.xncat.com/">http://www.xncat.com</a></li>
<li><strong>麻球参赛游戏蛛蛛冒险的开发与设计经验分享</strong><br />
主讲人：徐黎明<br />
曾任TCL教育互联 研发主管，广州市远程教育中心 开发主管。涉足麻球平台之后，钟情于游戏开发，创办Tinime 工作室。</li>
<li><strong>麻球参赛游戏DNF，梦幻塔防，吖凡哒哒技术与美工经验分享</strong><br />
主讲人：商文烨<br />
中国第三代闪客，个人作品获得过无数奖项并在中央电视台播出，06年担任搜狐17173频道主管并连续4年获得搜狐最佳称号，2009年成立传奇网科，旗下传动力工作室便是当今最脍炙人口的休闲小游戏开发团队！<br />
商文烨的博客: <a href="http://t.qq.com/shangwenye">http://t.qq.com/shangwenye</a></li>
</ul>
<p><strong>议程安排</strong></p>
<p>2010年9月18日 星期六</p>
<ul>
<li>12:30 ~ 13:00 参会人员签到，入场</li>
<li>13:15 ~ 15:00 主题讨论</li>
<li>15:00 ~ 15:15 茶歇和聊天</li>
<li>15:15 ~ 17:30 主题讨论</li>
<li>18:00 技术交流和讨论</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=406</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GENERATION GAP</title>
		<link>http://www.norris2u4.com/?p=399</link>
		<comments>http://www.norris2u4.com/?p=399#comments</comments>
		<pubDate>Sun, 15 Aug 2010 06:44:15 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[封装、面向对象]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=399</guid>
		<description><![CDATA[1 什么是GENRATION GAP？ 当你看到GENERATION GAP这两个单词时，你脑海反射出来的第一印象是什么呢？ —— 代沟。（Generation gap refers to the distance and contradiction(矛盾) between the old and the youth） 但事实上，在这里，GENERATION GAP只是其中一个因为缺乏足够的已知应用而被冷落的模式。对的，它就是一个设计模式。 模式名 GENERATION GAP 类别 类结构 意图 无论自动生成的代码会生成多少次，对它的修改或扩展自需要进行一次。 动机 通常我们更喜欢让计算机帮我们生成代码，只要生成的代码满足下面的条件： 正确 足够高效 功能完整 可维护 但事实上，我们是不可能用这些工具来自动地完成一个像样的应用程序的，我们必须通过老办法——也就是用编程语言手工地编写程序——来实现一些功能。这是因为工具会用高层的方法来表现应用程序。由于工具所使用的抽象必然与编程语言所使用的抽象不同，因此得到的结果是两种抽象混杂在一起，这破坏了应用程序的可扩展性和可维护性。 Flash CS IDE就是一个构建工具，它可以为我们创建完整的用户界面，但我们依然必须为这些界面添加一些实现逻辑，这样界面才能跑起来。 构建工具可以让我们选出一些对象并将它们“导出”,接下来，我们可以对这些导出的元件进行命名，这样我们就可以在应用程序中引用它们了。 但为了保证构建工具生成的组装组件的代码所实现的逻辑足够精准，我们就必须得对构建工具生成的代码进行修改，使之满足我们的需要。随着我们对代码实现的逻辑的要求提高，我们需要对代码进行修改的频密度就必然会等比上升，直到完成整个应用程序为止。 此时，我们若对程序界面进行修改，或许我们只需要修改几个界面代码而已，这是最理想的状况，但若果这个修改因为我们之前对构建工具代码的修改而无法实现呢？那么我们就必须对后加代码动刀了，这就会产生问题，轻则会迫使我们把改动重新加到生成的代码中，重则会导致我们的改动完全丢失。 有几个方法可以解决这个问题 —— 构建工具可以将它生成的代码标记为用户可以修改或者用户不可以修改，通常是给代码加上严禁修改的警告。但它的缺点也很明显： 1、 杂乱。虽然这种方法比起即兴的修改有所改进，但手工编写的代码与生成的代码仍然混杂在一起。能得到的最好结果也就是代码看起来混乱，而最差的情况下，人们可能会使用工具来让代码更加容易阅读，比如根据要求隐藏或突出显示代码中不同部分。但是，工具很少能完全掩盖问题。 2、 容易出错。因为对代码的修改仅仅是通过约定来加以约束的，所以编译器无法检查出非法的修改。如果我们犯了错误，修改了不应该修改的代码，那么代码生成工具后来可能会把我们的改动覆盖掉。 完美的解决方案：把生成的代码与手工编写的代码分离开。 但严格意义上的分离可能并不容易实现，因为手工修改的代码经常需要访问生成的代码中不对外公开的部分。事实上，构建工具生成的代码应该拥有两个类，一个是核心类，另一个是核心类的子类，我们暂称它为“扩展类”。此时，我们的修改只需要对“扩展类”动刀即可，我们无需对核心类进行操作，这样就可保证生成代码的完整性。只有当我们对用户界面做很大的改动时，我们才需要对原来的改动进行修补。 1.1 GENERATION GAP的特点 1.适用性 [...]]]></description>
			<content:encoded><![CDATA[<h3>1 什么是GENRATION GAP？</h3>
<p>当你看到GENERATION GAP这两个单词时，你脑海反射出来的第一印象是什么呢？ —— 代沟。（<em>Generation gap</em> refers to the distance and contradiction(矛盾) between the old and the youth）</p>
<p>但事实上，在这里，GENERATION GAP只是其中一个因为缺乏足够的已知应用而被冷落的模式。对的，它就是一个设计模式。</p>
<p><strong>模式名</strong></p>
<p>GENERATION GAP</p>
<p><strong>类别</strong></p>
<p>类结构</p>
<p><strong>意图</strong></p>
<p>无论自动生成的代码会生成多少次，对它的修改或扩展自需要进行一次。</p>
<p><strong>动机</strong></p>
<p>通常我们更喜欢让计算机帮我们生成代码，只要生成的代码满足下面的条件：</p>
<ul>
<li>正确</li>
<li>足够高效</li>
<li>功能完整</li>
<li>可维护</li>
</ul>
<p>但事实上，我们是不可能用这些工具来自动地完成一个像样的应用程序的，我们必须通过老办法——也就是用编程语言手工地编写程序——来实现一些功能。这是因为工具会用高层的方法来表现应用程序。由于工具所使用的抽象必然与编程语言所使用的抽象不同，因此得到的结果是两种抽象混杂在一起，这破坏了应用程序的可扩展性和可维护性。<span id="more-399"></span></p>
<p>Flash CS IDE就是一个构建工具，它可以为我们创建完整的用户界面，但我们依然必须为这些界面添加一些实现逻辑，这样界面才能跑起来。</p>
<p>构建工具可以让我们选出一些对象并将它们“导出”,接下来，我们可以对这些导出的元件进行命名，这样我们就可以在应用程序中引用它们了。</p>
<p>但为了保证构建工具生成的组装组件的代码所实现的逻辑足够精准，我们就必须得对构建工具生成的代码进行修改，使之满足我们的需要。随着我们对代码实现的逻辑的要求提高，我们需要对代码进行修改的频密度就必然会等比上升，直到完成整个应用程序为止。</p>
<p>此时，我们若对程序界面进行修改，或许我们只需要修改几个界面代码而已，这是最理想的状况，但若果这个修改因为我们之前对构建工具代码的修改而无法实现呢？那么我们就必须对后加代码动刀了，这就会产生问题，轻则会迫使我们把改动重新加到生成的代码中，重则会导致我们的改动完全丢失。</p>
<p>有几个方法可以解决这个问题 —— <span style="text-decoration: underline;">构建工具可以将它生成的代码标记为用户可以修改或者用户不可以修改，通常是给代码加上严禁修改的警告</span>。但它的缺点也很明显：</p>
<p>1、 杂乱。虽然这种方法比起即兴的修改有所改进，但手工编写的代码与生成的代码仍然混杂在一起。能得到的最好结果也就是代码看起来混乱，而最差的情况下，人们可能会使用工具来让代码更加容易阅读，比如根据要求隐藏或突出显示代码中不同部分。但是，工具很少能完全掩盖问题。</p>
<p>2、 容易出错。因为对代码的修改仅仅是通过约定来加以约束的，所以编译器无法检查出非法的修改。如果我们犯了错误，修改了不应该修改的代码，那么代码生成工具后来可能会把我们的改动覆盖掉。</p>
<p>完美的解决方案：把生成的代码与手工编写的代码分离开。</p>
<p>但严格意义上的分离可能并不容易实现，因为手工修改的代码经常需要访问生成的代码中不对外公开的部分。事实上，构建工具生成的代码应该拥有两个类，一个是核心类，另一个是核心类的子类，我们暂称它为“扩展类”。此时，我们的修改只需要对“扩展类”动刀即可，我们无需对核心类进行操作，这样就可保证生成代码的完整性。只有当我们对用户界面做很大的改动时，我们才需要对原来的改动进行修补。</p>
<h3>1.1 GENERATION GAP的特点</h3>
<p>1.适用性</p>
<p>当下列条件都成立时可以用云GENERATION GAP。</p>
<p>(1) 代码是自动生成的。<br />
(2) 生成的代码可以被封装在一个或多个类中。<br />
(3) 上一次生成代码时得到的接口和实例变量在重新生成代码时通常会得以保留。<br />
(4) 生成的类通常尚未集成到已有的类层次中。如果它们已集成到已有的类层次中，而我们的编程语言又不支持多接口继承，那么代码生成工具必须允许我们为它生成的任何基类指定父类。</p>
<p>2.结构</p>
<p style="text-align: center;"><a href="/wp-content/uploads/2010/08/GENERATION_GAP.jpg" target="_blank" rel="lightbox[399]"><img class="alignnone" title="Generation Gap" src="/wp-content/uploads/2010/08/GENERATION_GAP.jpg" alt="" width="465" height="176" /></a></p>
<p>3.参与者</p>
<p>1) 核心类</p>
<ul>
<li> 一个抽象类基类，其中包含工具生成的代码。</li>
<li> 这个类从来不会被手工修改。</li>
<li>在工具重新生成代码时会被覆写。</li>
</ul>
<p>2) 扩展类</p>
<ul>
<li>核心类的一个再简单不过的子类。</li>
<li>实现对核心类的扩展和修改。程序员可以修改扩展类来增加状态，并/或扩展、修改或覆盖核心类的行为。</li>
<li>在重新生成代码时，扩展或修改得以保留。</li>
</ul>
<p>3) Client</p>
<ul>
<li>只实例化和使用扩展类</li>
</ul>
<p>4.协作</p>
<ul>
<li>扩展类从核心类处继承由工具生成的行为，并对它的行为进行覆盖或扩展。</li>
<li>核心类将选定的功能暴露和/或委托给扩展类，这样扩展类就可以对它的行为进行修改或扩展。</li>
</ul>
<p>5.效果</p>
<p>GENERATION GAP提供了下列好处：</p>
<p>(1)  解除了改动与生成的代码之间的耦合。<br />
(2)  改动可以有权访问实现细节。<br />
(3)  此后重新生成代码不需要再次进行改动。<br />
(4)  核心类和扩展类可以分别开发和测试。</p>
<p>通过对核心类和扩展类的功能进行解耦，GENERATION GAP促进了无冲突的协作和集成。只要开发人员确定了核心类的接口，它们就可以独立地工作和测试了。</p>
<h3>1.2 GENERATION GAP的缺点</h3>
<p>(1)  使类的数量加倍。<br />
(2)  将生成的类集成到已有的类层次中可能比较困难。（只有代码生成工具允许用户为核心类指定父类，这个问题就能得以解决）</p>
<h3>1.3GENERATION GAP的实现</h3>
<p>(1)  禁止对核心类进行修改。<br />
(2)  控制对核心类的内部访问。<br />
(3)  命名的约定。（核心类和扩展类的命名应该能反映出它们的来源以及两者之间的关系）<br />
(4)  核心类操作的粒度。（各种操作的粒度必须足够精细，这样程序员才能够精确地覆盖他们想要覆盖的功能，并重用其余的功能）</p>
<h3>2 总结</h3>
<p style="text-align: center;"><span style="color: #3377dd;"><strong>如果你想生成任何类型的面向对象的代码，请试一试GENERATION GAP。</strong></span></p>
<p><span style="color: #3377dd;"><strong><br />
</strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=399</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>分享：一个不错的Flash Game</title>
		<link>http://www.norris2u4.com/?p=396</link>
		<comments>http://www.norris2u4.com/?p=396#comments</comments>
		<pubDate>Wed, 21 Jul 2010 06:39:22 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=396</guid>
		<description><![CDATA[博客已经沉寂很久了，时隔将近一个季度后才再次拾笔书写博文，我深感惭愧。 本篇博文是关于一个Flash小游戏，或与个人喜好相关，致使我对该小游戏甚为推崇，但对于这个Flash小游戏，我还是希望拿出来跟大家一起分享，不论是它的美工风格还是它的逻辑代码实现，完全可以用‘精细“二字来形容。 希望大家能从中获得更多的灵感，做出更好的Flash产品。]]></description>
			<content:encoded><![CDATA[<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.0000park.com/wp-content/games/Coma_MOCHILoadSound.swf" /><param name="quality" value="high" /><embed type="application/x-shockwave-flash" width="550" height="400" src="http://www.0000park.com/wp-content/games/Coma_MOCHILoadSound.swf" quality="high"></embed></object></div>
<p>博客已经沉寂很久了，时隔将近一个季度后才再次拾笔书写博文，我深感惭愧。</p>
<p>本篇博文是关于一个Flash小游戏，或与个人喜好相关，致使我对该小游戏甚为推崇，但对于这个Flash小游戏，我还是希望拿出来跟大家一起分享，不论是它的美工风格还是它的逻辑代码实现，完全可以用‘精细“二字来形容。</p>
<p>希望大家能从中获得更多的灵感，做出更好的Flash产品。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=396</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>推荐两本书</title>
		<link>http://www.norris2u4.com/?p=385</link>
		<comments>http://www.norris2u4.com/?p=385#comments</comments>
		<pubDate>Wed, 12 May 2010 07:29:38 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=385</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160; // 一些想法 关于second game theory 在阅读JEFF FULTON和STEVE FULTON所著的《Flash Games》一书时，书中提出了一个甚为独特的理论“second game theory”，什么是“second game theory”呢？ 在我们第一次接触游戏开发时，我们所开发的第一个游戏程序往往是粗糙的，常常没有我们预想的那么完美，所以，有些人在第一个游戏程序完成后，就停下来不断地补充和完善。一直以来，尤其是我们中国人，都是很推崇那种坚持不放弃和铁杵磨成针的作风，但对于游戏开发，JEFF和STEVE都认为第一个游戏开发出来后，应该要放下，进入第二个游戏的编写工作。 我也认同他们的这一观点，为什么呢？因为每当你完成一个作品，你所编写的代码、你的程序的进程处理、你的代码库、你对对象模型的理解、你的游戏策划的想法、你的游戏画面的设计等等都会得到一个更高层次的提升，这些是一直执着于同一游戏的你所不能获得的。我们开始进行我们第二个作品的开发时，我们就有了第一个作品作为我们的对比蓝图，我们能用一种全新的思维去开发一个比原来更好的作品，It would be Better！也许，你第一个游戏是一个射击游戏，但你的第二个游戏可能就是一个华丽的拳击游戏了。所以，你要有一个更好的入门，应该放下首个作品，以第二个作品为基础来开始你的执着。 关于游戏框架 游戏框架是用来做什么的呢？游戏框架的诞生，其离不开20世纪60年代末至20世纪70年代初盛行的“软件危机”一词，更好的代码复用，逐渐成为软件进行工程开发的主导思路，而游戏框架就是另一个实现“代码复用”的命名而已。我们需要游戏框架来给我们架建一个大楼的壳，至于里面的室内布局什么，只有有了这个壳，什么事都会变得有条理，更简单。游戏框架可以管理我们软件的代码和功能函数，初始时，我们的框架可能很少，它随着你的refine，它就会越来越完善，它是会成长的。当然它也会变老。软件跟人一样，也有属于它的一个生命周期，影响这个生命周期的长短有很多因素。但决定它的死亡时间，我认为还是市场，市场的导向会结束某一个软件的生命周期。所以，软件是重生还是埋葬，市场是最主要的指导因素。]]></description>
			<content:encoded><![CDATA[<div align="center"><img alt="" src="http://farm5.static.flickr.com/4037/4600295395_4f990b77b3_m.jpg" title="Search Engine Optimization for Flash" class="alignnone" width="161" height="240" />&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://farm2.static.flickr.com/1398/4600294375_361f9e4869_m.jpg" title="Flash Games" class="alignnone" width="181" height="240" /></div>
<p>// 一些想法<br />
<strong>关于second game theory</strong><br />
在阅读JEFF FULTON和STEVE FULTON所著的《Flash Games》一书时，书中提出了一个甚为独特的理论“second game theory”，什么是“second game theory”呢？<br />
<span id="more-385"></span>在我们第一次接触游戏开发时，我们所开发的第一个游戏程序往往是粗糙的，常常没有我们预想的那么完美，所以，有些人在第一个游戏程序完成后，就停下来不断地补充和完善。一直以来，尤其是我们中国人，都是很推崇那种坚持不放弃和铁杵磨成针的作风，但对于游戏开发，JEFF和STEVE都认为第一个游戏开发出来后，应该要放下，进入第二个游戏的编写工作。<br />
我也认同他们的这一观点，为什么呢？因为每当你完成一个作品，你所编写的代码、你的程序的进程处理、你的代码库、你对对象模型的理解、你的游戏策划的想法、你的游戏画面的设计等等都会得到一个更高层次的提升，这些是一直执着于同一游戏的你所不能获得的。我们开始进行我们第二个作品的开发时，我们就有了第一个作品作为我们的对比蓝图，我们能用一种全新的思维去开发一个比原来更好的作品，It would be Better！也许，你第一个游戏是一个射击游戏，但你的第二个游戏可能就是一个华丽的拳击游戏了。所以，你要有一个更好的入门，应该放下首个作品，以第二个作品为基础来开始你的执着。<br />
<strong>关于游戏框架</strong><br />
游戏框架是用来做什么的呢？游戏框架的诞生，其离不开20世纪60年代末至20世纪70年代初盛行的“软件危机”一词，更好的代码复用，逐渐成为软件进行工程开发的主导思路，而游戏框架就是另一个实现“代码复用”的命名而已。我们需要游戏框架来给我们架建一个大楼的壳，至于里面的室内布局什么，只有有了这个壳，什么事都会变得有条理，更简单。游戏框架可以管理我们软件的代码和功能函数，初始时，我们的框架可能很少，它随着你的refine，它就会越来越完善，它是会成长的。当然它也会变老。软件跟人一样，也有属于它的一个生命周期，影响这个生命周期的长短有很多因素。但决定它的死亡时间，我认为还是市场，市场的导向会结束某一个软件的生命周期。所以，软件是重生还是埋葬，市场是最主要的指导因素。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=385</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>关于底层Byte的一些用法</title>
		<link>http://www.norris2u4.com/?p=379</link>
		<comments>http://www.norris2u4.com/?p=379#comments</comments>
		<pubDate>Fri, 23 Apr 2010 17:25:31 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Byte]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=379</guid>
		<description><![CDATA[最近比较忙，所以，博客都有好几天没打理，这里给大家道一个谦！ 现在是凌晨1：15分，有点晚了，太晚休息不利于健康，嗯，那一本《What can you do with bytes ?》的书，关于Byte的那一本，我读了还是觉得很不错，比较实用，结合计算机基础知识与Flash来讲。当然，对于那些对计算机基础(具体是数字逻辑那块)很扎实的同学，这一本书，或许你会认为它是在炒冷饭，但也请你也静下心来，看一看，温故而知新，若你能结合它提出你的新想法，请告诉我，作为一名CN IT 工作者，我为你感到骄傲！ \(^o^)/ I am Norris 早上11点04分： 先做一些小概念复习吧—— Byte是什么？ #Byte其实是一个计算机存储信息大小的单位，翻译成中文，意思是字节，对，Byte就是字节，1kb =1024 b, b就是Byte，而1 Byte(字节) = 8 Bit(位)，位就是Bit，具体单位转换请参看字节_百度百科 接下来，我们可以想想为什么要认识Byte？ #计算机的底层都是以Byte在传输数据，虽然我们不会说Byte国的语言，但我们有老朋友阿C、阿C++、阿汇编叔叔等为我们做翻译，所以我们在建造计算机王国时还是能轻松搭建起来，但是，如果你是认识Byte语言，是否会觉得少了翻译员在中间传话后，工作更快了？ 所以，你要更牛B地构建你的计算机世界，你就得认识Byte。 小插曲：Byte有8个Bit，最大位放在最左边，最小位放在最右边. 从右到左渐渐变Big.Byte是二进制的，而我们日常生活用的最多的是十进制和六十进制，所以你还得学会如何转换进制，具体的转换方法，请参考这里。 一些CPU运算会使用小端排序读取字节，而另一些则可能使用大端排序读取字节.所以，在发送数据到目标计算机前，先对Byte进行排序是十分有必要的，具体参考《What can you do with bytes ?》第一章12-13页。 另外，进行Byte运算，你必然少不了与按位运算符打交道（与、或、非、异或、移位）&#8230; ①在性能方面，使用移位来执行乘法或者除法运算会更加的高效(参考《What can you do with bytes ?》第一章第15页）： [cc lang="ActionScript"]var started:Number = getTimer(); var value:int = 8; var [...]]]></description>
			<content:encoded><![CDATA[<p>最近比较忙，所以，博客都有好几天没打理，这里给大家道一个谦！</p>
<p>现在是凌晨1：15分，有点晚了，太晚休息不利于健康，嗯，那一本《What can you do with bytes ?》的书，关于Byte的那一本，我读了还是觉得很不错，比较实用，结合计算机基础知识与Flash来讲。当然，对于那些对计算机基础(具体是数字逻辑那块)很扎实的同学，这一本书，或许你会认为它是在炒冷饭，但也请你也静下心来，看一看，温故而知新，若你能结合它提出你的新想法，请告诉我，作为一名CN IT 工作者，我为你感到骄傲！</p>
<p>\(^o^)/ I am Norris</p>
<p><span id="more-379"></span>早上11点04分：</p>
<p>先做一些小概念复习吧——<br />
     Byte是什么？  #Byte其实是一个计算机存储信息大小的单位，翻译成中文，意思是字节，对，Byte就是字节，1kb =1024 b, b就是Byte，而1 Byte(字节) = 8 Bit(位)，位就是Bit，具体单位转换请参看<a href="http://baike.baidu.com/view/60408.htm?fr=ala0_1_1">字节_百度百科</a></p>
<p>接下来，我们可以想想为什么要认识Byte？ </p>
<p>#计算机的底层都是以Byte在传输数据，虽然我们不会说Byte国的语言，但我们有老朋友阿C、阿C++、阿汇编叔叔等为我们做翻译，所以我们在建造计算机王国时还是能轻松搭建起来，但是，如果你是认识Byte语言，是否会觉得少了翻译员在中间传话后，工作更快了？  所以，你要更牛B地构建你的计算机世界，你就得认识Byte。</p>
<p>小插曲：Byte有8个Bit，最大位放在最左边，最小位放在最右边.  从右到左渐渐变Big.Byte是二进制的，而我们日常生活用的最多的是十进制和六十进制，所以你还得学会如何转换进制，具体的转换方法，请<a href="http://baike.baidu.com/view/18536.htm">参考这里</a>。</p>
<p>一些CPU运算会使用小端排序读取字节，而另一些则可能使用大端排序读取字节.所以，在发送数据到目标计算机前，先对Byte进行排序是十分有必要的，具体参考《What can you do with bytes ?》第一章12-13页。</p>
<p>另外，进行Byte运算，你必然少不了与按位运算符打交道（与、或、非、异或、移位）&#8230;</p>
<p>①在性能方面，使用移位来执行乘法或者除法运算会更加的高效(参考《What can you do with bytes ?》第一章第15页）：<br />
[cc lang="ActionScript"]var started:Number = getTimer();<br />
var value:int = 8;<br />
var result:int;<br />
for ( var i:int = 0; i< 5000000; i++ )<br />
result = value / 4;<br />
// outputs : 2<br />
trace( result );<br />
//outputs : 617<br />
trace( getTimer() - started );[/cc]<br />
</br>上面，我们进行了500万次除法运算，运算花费总时间为617毫秒。</br></br><br />
[cc lang="ActionScript"]var started:Number = getTimer();<br />
var value:int = 8;<br />
var result:int;<br />
for ( var i:int = 0; i< 5000000; i++ )<br />
result = value >> 2;<br />
// outputs : 2<br />
trace( result );<br />
//outputs : 586<br />
trace( getTimer() &#8211; started );[/cc]<br />
</br>上面，我们使用了移位运算符，对于同样的运算量，结果最后的总花费时间为586毫秒，足足省下了31毫秒。</br></br></p>
<p>②在一些情况，我们可能需要优化空间以便尽可能多的了用空间。举个例子，一个含有8位的字节，在每一位中，0代表false，1代表true.Bit技术将允许我们在一个uint类型值中(32位)存储32种状态，而不用我们创建一个布尔值数组。使用这个技巧十分有利于数据传输。<br />
下面我们创建了一个Bit的写入和读取的类方法：<br />
[cc lang="ActionScript"]package com.norris2u4.byte<br />
{<br />
	import flash.geom.Point;</p>
<p>	/**<br />
	 *  @auther Norris<br />
	 *  @Date  2010年4月24日9:28:21<br />
	 *  描述：该类主要实现了，字节中，Bit的写入和读取<br />
	 */<br />
	public class BitWriter<br />
	{<br />
		private var buffer                    :uint = 0;       // 由位组成的位元组<br />
		public var length                    :uint = 0;       // 移位的长度<br />
		private var pointer                  :uint = 0;       // 虚拟指针位置，默认为最右边( 即0 )	</p>
<p>		public function writeBit(pBit:int):uint<br />
		{<br />
			/** 方法：向Buffer中写入一位Byte，默认从最右边开始 **/<br />
			// 若输入Byte小于0或者大于1，则抛出异常，否则返回成功写入Byte的新Buffer<br />
			if(0 > pBit || 1< pBit) throw new Error(" 参数必须为0或者1 ");<br />
			return buffer |= (pBit << (length = pointer++));<br />
		}</p>
<p>		public function readBit():uint<br />
		{<br />
			/** 方法：从Buffer中读出一位Byte，默认从最右边开始 **/<br />
			// 若虚拟指针所指向的位置大于位元组的长度，则抛出异常，否则返回该位置的Byte<br />
			if(pointer > length) throw new Error(&#8221; 目标读取位置超出位元组的长度 &#8220;);<br />
			return uint( (buffer &#038; (1 << pointer++)) != 0 );   // ？为什么与0做一个等价判断呢？<br />
		}</p>
<p>		public function set position(pPosition:uint):void<br />
		{<br />
			/** 方法：设置虚拟指针的指向位置 **/<br />
			pointer = pPosition;<br />
		}</p>
<p>		public function get position():uint<br />
		{<br />
			/** 方法：获取虚拟指针的指向位置 **/<br />
			return pointer;<br />
		}<br />
	}<br />
}[/cc]<br />
</br>接下来，我们测试一下这个方法</br><br />
[cc lang="ActionScript"]package<br />
{<br />
	import com.norris2u4.byte.BitWriter;</p>
<p>	import flash.display.Sprite;<br />
	import flash.events.Event;</p>
<p>	public class Byte_Project extends Sprite<br />
	{<br />
		private var writer                      :BitWriter;                        // 读取位和写入位的方法类</p>
<p>		public function Byte_Project()<br />
		{<br />
			// 如果舞台存在，则调用初始化函数init();<br />
			if (stage) init();<br />
			else addEventListener(Event.ADDED_TO_STAGE, init);    // 监听器，实现舞台显示的初始化<br />
		}</p>
<p>		/** 方法：实现舞台的初始化 **/<br />
		private function init(e:Event = null):void<br />
		{<br />
			removeEventListener(Event.ADDED_TO_STAGE, init);       // 删除舞台初始化的监听器<br />
			writer = new BitWriter();    //  实例化BitWriter()类<br />
			write();                             //  写入位<br />
			read();                             //   读取位<br />
		}</p>
<p>		/** 方法：向位元组Buffer写入位Byte **/<br />
		private function write():void<br />
		{<br />
			// 输出 : 1<br />
			trace(writer.writeBit(1).toString(2));<br />
			// 输出 : 11<br />
			trace( writer.writeBit ( 1 ).toString ( 2 ) );<br />
			// 输出 : 111<br />
			trace( writer.writeBit ( 1 ).toString ( 2 ) );<br />
			// 输出 : 111<br />
			trace( writer.writeBit ( 0 ).toString ( 2 ) );<br />
			// 输出 : 10111<br />
			trace( writer.writeBit ( 1 ).toString ( 2 ) );<br />
		}</p>
<p>		/** 方法：从位元组Buffer中读出位Byte **/<br />
		private function read():void<br />
		{<br />
			if(writer.position != 0) writer.position = 0;<br />
			for(var i:int=0; i <= writer.length; i++)<br />
			{<br />
			   trace(writer.readBit());<br />
			}<br />
		}<br />
	}<br />
}[/cc]<br />
或许你现在可能还有疑惑，建这么一个方法，能不能说点实际的用途啊？</p>
<blockquote><p>举个例子，在我们通过按钮来操控游戏时，若使用byte来控制按钮的状态(组合按钮，例如同时按下K+Y放一个大绝招)，这将比设置多个Boolean值要来得方便，一个Byte就能判断了。一个uint类型有32Bit，对于键盘上26字母和一些Ctrl和Alt的功能键组合，我觉得足够了。<br />
通过这个技术，我们就能仅仅用几个Bit，就能完全反应一个键盘上所有按键的状态。(Norris真是对Thibault Imbert无比的膜拜，十分有才的想法)，具体例子参照Thibault Imbert博客(wiiflash.bytearray.org)上的WiiFlash游戏.</p></blockquote>
<p>键盘按键的具体操作代码或者可以参考该书第一章(20页)，-_-|||这是C#代码来的，不过，你把它当成伪代码看就是了&#8230;</p>
<p>暂时先写到20页的叙述先&#8230;   (2010年4月24日11:36:23)</p>
<p>待续&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=379</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>关于BitmapData.getPixel32()的Alpha通道问题</title>
		<link>http://www.norris2u4.com/?p=370</link>
		<comments>http://www.norris2u4.com/?p=370#comments</comments>
		<pubDate>Mon, 19 Apr 2010 00:21:56 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=370</guid>
		<description><![CDATA[昨天，YBoy在腾讯微博发了一个问题，是关于BitmapData.getPixel32()？题目是《BitmapData.getPixel32() 返回值不准确，为什么？》 问题描述：当alpha 通道为 0xFF，我们用getPixel32()获取得到的某个值就是正确值，但若alpha 通道不为 0xFF时，我们会发现，这个值用getPixel32()获取会出现失真的情况，就算我们已经是setPixel32()一个固定点的颜色，情况也还是这样，为什么会返回的RGB会失真？ 备注:BitmapData.getPixel32() 方法可以获得某像素点的 ARGB 颜色值，它包含 Alpha 通道数据和 RGB 数据。 测试数据： ①RGB值相同而Alpha值不同的情况： [cc lang="actionscript"]var bmd:BitmapData = new BitmapData(100, 100, true, 0); bmd.setPixel32(0, 0, 0&#215;01536435); // 把坐标为(0, 0)的点设置颜色值 0×01536435 trace(bmd.getPixel32(0, 0).toString(16)); // 输出 1000000 ，明显有偏差 var bmd3:BitmapData = new BitmapData(100, 100, true, 0); bmd3.setPixel32(0, 0, 0&#215;21536435); // 把坐标为(0, 0)的点设置颜色值 0×21536435 trace(bmd3.getPixel32(0, [...]]]></description>
			<content:encoded><![CDATA[<p>昨天，YBoy在腾讯微博发了一个问题，是关于BitmapData.getPixel32()？题目是<a href="http://riaoo.com/?p=1646">《BitmapData.getPixel32() 返回值不准确，为什么？》</a></p>
<blockquote><p>问题描述：当alpha 通道为 0xFF，我们用getPixel32()获取得到的某个值就是正确值，但若alpha 通道不为 0xFF时，我们会发现，这个值用getPixel32()获取会出现失真的情况，就算我们已经是setPixel32()一个固定点的颜色，情况也还是这样，为什么会返回的RGB会失真？</p></blockquote>
<p>备注:BitmapData.getPixel32() 方法可以获得某像素点的 ARGB 颜色值，它包含 Alpha 通道数据和 RGB 数据。</p>
<p><span id="more-370"></span>测试数据：<br />
①RGB值相同而Alpha值不同的情况：<br />
[cc lang="actionscript"]var bmd:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd.setPixel32(0, 0, 0&#215;01536435); // 把坐标为(0, 0)的点设置颜色值 0×01536435<br />
trace(bmd.getPixel32(0, 0).toString(16)); // 输出 1000000 ，明显有偏差</p>
<p>var bmd3:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd3.setPixel32(0, 0, 0&#215;21536435); // 把坐标为(0, 0)的点设置颜色值 0×21536435<br />
trace(bmd3.getPixel32(0, 0).toString(16)); // 输出 21556436 ，明显有偏差</p>
<p>var bmd6:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd6.setPixel32(0, 0, 0&#215;51536435); // 把坐标为(0, 0)的点设置颜色值 0×51536435<br />
trace(bmd6.getPixel32(0, 0).toString(16)); // 输出 51526535 ，明显有偏差</p>
<p>var bmd9:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd9.setPixel32(0, 0, 0&#215;81536435); // 把坐标为(0, 0)的点设置颜色值 0×81536435<br />
trace(bmd9.getPixel32(0, 0).toString(16)); // 输出 81536535 ，明显有偏差</p>
<p>var bmd10:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd10.setPixel32(0, 0, 0&#215;98536435); // 把坐标为(0, 0)的点设置颜色值 0×98536435<br />
trace(bmd10.getPixel32(0, 0).toString(16)); // 输出 98526536 ，明显有偏差[/cc]<br />
<br/>②Alpha值相同而RGB值不同的情况：<br />
[cc lang="actionscript"]var bmd11:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd11.setPixel32(0, 0, 0&#215;83536435); // 把坐标为(0, 0)的点设置颜色值 0×83536435<br />
trace(bmd11.getPixel32(0, 0).toString(16)); // 输出 83546335 ，明显有偏差</p>
<p>var bmd21:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd21.setPixel32(0, 0, 0xf3536435); // 把坐标为(0, 0)的点设置颜色值 0×f3536435<br />
trace(bmd21.getPixel32(0, 0).toString(16)); // 输出 f3536335 ，明显有偏差</p>
<p>var bmd31:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd31.setPixel32(0, 0, 0&#215;43536435); // 把坐标为(0, 0)的点设置颜色值 0×43536435<br />
trace(bmd31.getPixel32(0, 0).toString(16)); // 输出 43546335 ，明显有偏差[/cc]<br />
<br/>③特殊情况，Alpha为FF和00：<br />
[cc lang="actionscript"]	var fullbmd:BitmapData = new BitmapData(100, 100, true, 0);<br />
fullbmd.setPixel32(0, 0, 0xff536435); // 把坐标为(0, 0)的点设置颜色值 0×ff536435<br />
trace(fullbmd.getPixel32(0, 0).toString(16)); // 输出 ff536435，没有偏差</p>
<p>var emptybmd:BitmapData = new BitmapData(100, 100, true, 0);<br />
emptybmd.setPixel32(0, 0, 0&#215;00536435); // 把坐标为(0, 0)的点设置颜色值 0×00536435<br />
trace(emptybmd.getPixel32(0, 0).toString(16)); // 输出 0[/cc]</p>
<p>结论：三种不同情况的测试，除了Alpha值为FF的情况，RGB返回的结果都存在失真，并且，但Alpha值为00时，我们还看到RGB返回的值竟然为0；</p>
<p>寻找问题的解决方案：<br />
解答①，颜色值被压缩，相邻值颜色甚为接近，当取值时，FP会出现判断失误？</p>
<div align="center"><img src="http://www.norris2u4.com/wp-content/uploads/2010/04/getPiexl32-300x179.gif" alt="" title="getPiexl32" width="300" height="179" class="aligncenter size-medium wp-image-371" /></div>
<p><br/><br />
进行验证：<br />
[cc lang="actionscript"]	var bmd10:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd10.setPixel32(0, 0, 0&#215;98536435); // 把坐标为(0, 0)的点设置颜色值 0×98536435<br />
trace(bmd10.getPixel32(0, 0).toString(16)); // 输出 98526536 ，明显有偏差<br />
var bmd110:BitmapData = new BitmapData(100, 100, true, 0);<br />
bmd110.setPixel32(0, 0, 0&#215;98536435); // 把坐标为(0, 0)的点设置颜色值 0×98536435<br />
trace(bmd110.getPixel32(0, 0).toString(16)); // 输出 98526536 ，明显有偏差[/cc]<br />
这个结论是假的！同时getPixel32时，我们发现取得的值是一样的。</p>
<p>解答②，这是一个Bug？而且还是长年累月积累下来并没有解决的Bug？<br />
只要我们Google一下“getpixel as3 inaccurate”(请Google in US)，你就会发现一大堆这问题，但貌似解答的方法甚为少，貌似这是Alpha通道引发的一个Bug，一直悬而未决&#8230;.<br />
参考地址： <a href="http://built4flash.stackexchange.com/questions/130/png-getpixel-problem-returning-wrong-color-value">点击</a><br />
官方那边还没有给出一个回应？貌似这个问题更多是出现在PNG格式的图像的getPixel上，在这个上，我们可以理解为图像不同颜色压缩机制存异，导致出现偏差，但如果在我们刚才的测试中，我们就算在Bitmap上setPixel了，也未能获取正确值。</p>
<p>可见，这是Alpha的问题，估计是官方为了适应不用格式的图像文件(PNG、JPG）的颜色压缩方法，从而致使，这个Alpha返回了不准确值。</p>
<p>4月19日晚补充一下:<br />
早上Y.Boy提出在 getPixel32 时，其实是还原ARGB数据。确实，这个想法可以解释Alpha为00值时RGB返回值为0，但我们若Alpha值为非FF和非00时，这个判断就失效了。期待Adobe能尽快修复这个Bug吧&#8230;</p>
<p>引用Y.Boy总结一句：“别指望 BitmapData 能准确存储每点像素的原始颜色值.”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=370</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PS CS5, 我的用后感</title>
		<link>http://www.norris2u4.com/?p=345</link>
		<comments>http://www.norris2u4.com/?p=345#comments</comments>
		<pubDate>Fri, 16 Apr 2010 12:12:04 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[PS]]></category>
		<category><![CDATA[CS5]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=345</guid>
		<description><![CDATA[今天真高兴，下载了三天，终于下载完Adobe CS5大师系列套装，不过12G的容量确实让人汗颜啊-_-&#124;&#124;&#124;(其实我只需要里面的几个软件而已，像AE那个，我没兴趣了)&#8230; 作为一名PS的老手，第一次接触已经是我初三的时候了(几年？额2003年吧，那时候还是Photoshop 7&#8230;) 对比PS CS4，第一感觉是CS4时代的臃肿消失了，内存和CPU的占用感觉比CS4时少了很多，打开和操作很快很好，其次，界面人性化了很多，在顶栏加入了很多辅助性的小功能，例如快速显示网格等(上图先)&#8230; 上图是整个PS CS5 的应用程序功能界面，跟CS4很类似&#8230; 为了成为一只名副其实的小白鼠，我决定试试CS5的抠图功能，效果惊人，10分钟左右就抠出一张图(补充一句，我用的只是传统的钢笔工具去抠，暂未使用到Adobe官方对外宣传的PS CS5最新的图像处理算法功能)，大家请看下面的效果图： 欢呼~ &#124; 关于Flash CS5，我稍后会进行测试，到时候给大家放上一些满为期待的功能效果画面吧! 欲了解Flash CS5新功能的朋友，请前往Morris同学的博客查看：《What’s new about Flash CS5 IDE》&#8230;]]></description>
			<content:encoded><![CDATA[<p>今天真高兴，下载了三天，终于下载完Adobe CS5大师系列套装，不过12G的容量确实让人汗颜啊-_-|||(其实我只需要里面的几个软件而已，像AE那个，我没兴趣了)&#8230;<br />
作为一名PS的老手，第一次接触已经是我初三的时候了(几年？额2003年吧，那时候还是Photoshop 7&#8230;)<br />
对比PS CS4，第一感觉是CS4时代的臃肿消失了，内存和CPU的占用感觉比CS4时少了很多，打开和操作很快很好，其次，界面人性化了很多，在顶栏加入了很多辅助性的小功能，例如快速显示网格等(上图先)&#8230;<br />
<span id="more-345"></span>
<div align="center"><img src="http://www.norris2u4.com/wp-content/uploads/2010/04/Adobe-PS-CS5.gif" alt="http://www.norris2u4.com/wp-content/uploads/2010/04/Adobe-PS-CS5.gif" title="Adobe Photoshop CS5" width="640" height="400" class="aligncenter size-full wp-image-346"/></div>
<p>上图是整个PS CS5 的应用程序功能界面，跟CS4很类似&#8230;<br />
为了成为一只名副其实的小白鼠，我决定试试CS5的抠图功能，效果惊人，10分钟左右就抠出一张图(补充一句，我用的只是传统的钢笔工具去抠，暂未使用到Adobe官方对外宣传的PS CS5最新的图像处理算法功能)，大家请看下面的效果图：</p>
<div align="center"><img src="http://www.norris2u4.com/wp-content/uploads/2010/04/PS-CS5的抠图.jpg" alt="http://www.norris2u4.com/wp-content/uploads/2010/04/PS-CS5的抠图.jpg" title="PS CS5的抠图" width="295" height="519" class="aligncenter size-full wp-image-347"/></div>
<p>欢呼~  </p>
<div align="center"><img src="http://www.norris2u4.com/wp-content/uploads/2010/04/96o-234x300.jpg" alt="http://www.norris2u4.com/wp-content/uploads/2010/04/96o-234x300.jpg" title="原照片" width="234" height="300" class="aligncenter size-medium wp-image-352"/>   |   <img src="http://www.norris2u4.com/wp-content/uploads/2010/04/96-234x300.png" alt="http://www.norris2u4.com/wp-content/uploads/2010/04/96-234x300.png" title="PS后的照片" width="234" height="300" class="aligncenter size-medium wp-image-351"/></div>
<p>关于Flash CS5，我稍后会进行测试，到时候给大家放上一些满为期待的功能效果画面吧!</p>
<p>欲了解Flash CS5新功能的朋友，请前往Morris同学的博客查看：<a href="http://warwithinme.com/2010/04/flash-cs5/">《What’s new about Flash CS5 IDE》</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=345</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>关于RIA</title>
		<link>http://www.norris2u4.com/?p=332</link>
		<comments>http://www.norris2u4.com/?p=332#comments</comments>
		<pubDate>Thu, 15 Apr 2010 12:33:41 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=332</guid>
		<description><![CDATA[如何评判一个应用是否为RIA，很多人都有不同的看法，有人认为RIA就是Ajax、Flex、jQuery等技术制造出来的产品。用这些技术制造出来的产品，尽管骤眼一看确实比传统的Web界面绚丽，但这并不能说明它就是一个RIA.. 【 RIA = Ajax、Flex、jQuery&#8230;等技术的产出品 】 我认为这是一种误解&#8230; 你可能不是大师，但你也可以用自己的心去思考和挖掘RIA的真正含义，所以我想把我的理解写出来跟大家探讨探讨。 关于RIA，我想用一个Slideshare的PPT来阐述一下我的想法： View more presentations from Norris Lin.]]></description>
			<content:encoded><![CDATA[<p>如何评判一个应用是否为RIA，很多人都有不同的看法，有人认为RIA就是Ajax、Flex、jQuery等技术制造出来的产品。用这些技术制造出来的产品，尽管骤眼一看确实比传统的Web界面绚丽，但这并不能说明它就是一个RIA..</p>
<p>【   RIA = Ajax、Flex、jQuery&#8230;等技术的产出品   】  我认为这是一种误解&#8230;</p>
<p>你可能不是大师，但你也可以用自己的心去思考和挖掘RIA的真正含义，所以我想把我的理解写出来跟大家探讨探讨。</p>
<p>关于RIA，我想用一个Slideshare的PPT来阐述一下我的想法：<br />
<span id="more-332"></span>
<div align="center" style="width:680px" id="__ss_3733328"><object width="680" height="568"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ria-100415054644-phpapp01&#038;stripped_title=ria-3733328" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ria-100415054644-phpapp01&#038;stripped_title=ria-3733328" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="680" height="568"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/NorrisLin">Norris Lin</a>.</div>
</div>
<div align="center"><embed type="application/x-shockwave-flash" src="http://www.google.com/reader/ui/3247397568-audio-player.swf?audioUrl=http://gyssien.readyhosting.com/anh/imyours.mp3" width="400" height="27" allowscriptaccess="never" quality="best" bgcolor="#ffffff" wmode="window" flashvars="playerMode=simple&#038;autoPlay=true" /><br/><br/><img alt="" src="http://www.ladybrillestars.com/wp-content/uploads/2010/02/Jason-Mraz.jpg" title="I'm Yours -Jason Mraz " width="150" height="150" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=332</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe CS5 现场发布视频</title>
		<link>http://www.norris2u4.com/?p=314</link>
		<comments>http://www.norris2u4.com/?p=314#comments</comments>
		<pubDate>Tue, 13 Apr 2010 11:02:54 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[PS]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[CS5]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=314</guid>
		<description><![CDATA[北京时间2010年4月13日中午时分，Adobe中国正式发布了Adobe CS5，或者有很多爱好者因为某些原因未能顺利观看了这场期待已久的盛况，有感于此，我计划在这里放上今天首播的Vedio，并提供一个该Vedio的高清下载链接【269M】。I hope you like it! 视频下载地址 出于对Adobe CS5原作者们的尊重，我决定把Adobe CS5 Beta版的下载链接删了！有需要的朋友，真的喜欢研究它，请留下你的Email地址，我会稍后send给你的&#8230; Beta版12G共三个ISO镜像文件，这里是第一个镜像文件的截图：]]></description>
			<content:encoded><![CDATA[<p>北京时间2010年4月13日中午时分，Adobe中国正式发布了Adobe CS5，或者有很多爱好者因为某些原因未能顺利观看了这场期待已久的盛况，有感于此，我计划在这里放上今天首播的Vedio，并提供一个该Vedio的高清下载链接【269M】。I hope you like it!</p>
<div align="center"><object width="480" height="400"><param name="movie" value="http://www.tudou.com/v/yCfie-lmbGc"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="opaque"></param><embed src="http://www.tudou.com/v/yCfie-lmbGc" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed></object></div>
<p><span id="more-314"></span><br />
<a href="http://content.tv.adobe.com/adobetv2/cs5OnDemand/501_CS5_OnDemand_40610_FINAL_atv640x360_550vbr-e.flv">视频下载地址</a></p>
<p>出于对Adobe CS5原作者们的尊重，我决定把Adobe CS5 Beta版的下载链接删了！有需要的朋友，真的喜欢研究它，请留下你的Email地址，我会稍后send给你的&#8230;</p>
<p>Beta版12G共三个ISO镜像文件，这里是第一个镜像文件的截图：<img src="http://www.norris2u4.com/wp-content/uploads/2010/04/CS5.png" alt="" title="CS5" width="254" height="57" class="aligncenter size-full wp-image-330" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=314</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://content.tv.adobe.com/adobetv2/cs5OnDemand/501_CS5_OnDemand_40610_FINAL_atv640x360_550vbr-e.flv" length="282106541" type="video/x-flv" />
		</item>
		<item>
		<title>Xmind画过的一些图</title>
		<link>http://www.norris2u4.com/?p=300</link>
		<comments>http://www.norris2u4.com/?p=300#comments</comments>
		<pubDate>Mon, 12 Apr 2010 11:16:57 +0000</pubDate>
		<dc:creator>Norris</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.norris2u4.com/?p=300</guid>
		<description><![CDATA[之前用Xmind思维图工具画的一些图，因为都是去年写些的东西，所以这里就一并发给大家它吧！我的朋友们，这些东西，也许能给你们带来一些帮助，希望你们都能走得更好！另外，我之前一直在研究AlivePDF这个类库，计划最近联系原作者，希望改一下类库，添加对中文的支持&#8230; AlivePDF这个开源类库，我也画了一些架构图，主要是前面几个类，整理好后，我会联系作者，如果没什么问题，我会放出给大家的！^_^!]]></description>
			<content:encoded><![CDATA[<p>之前用Xmind思维图工具画的一些图，因为都是去年写些的东西，所以这里就一并发给大家它吧！我的朋友们，这些东西，也许能给你们带来一些帮助，希望你们都能走得更好！另外，我之前一直在研究AlivePDF这个类库，计划最近联系原作者，希望改一下类库，添加对中文的支持&#8230;</p>
<div align="center"><a href="http://farm5.static.flickr.com/4049/4514371458_cdc249db74_o.jpg" target="_blank" rel="lightbox[300]"><img alt="" src="http://farm5.static.flickr.com/4049/4514371458_cdc249db74_o.jpg" title="Flex机制" class="alignnone" width="376" height="500" border="0"/></a></div>
<p><span id="more-300"></span>
<div align="center"><a href="http://farm3.static.flickr.com/2332/4514371456_ecd2efd796_b.jpg" target="_blank" rel="lightbox[300]"><img alt="" src="http://farm3.static.flickr.com/2332/4514371456_ecd2efd796_b.jpg" title="Flex的Preloader" class="alignnone" width="500" height="185" border="0"/></a></div>
<div align="center"><a href="http://farm5.static.flickr.com/4040/4514371452_534ed9a016_o.jpg" target="_blank" rel="lightbox[300]"><img alt="" src="http://farm5.static.flickr.com/4040/4514371452_534ed9a016_o.jpg" title="时间自加算法" class="alignnone" width="500" height="492" border="0"/></a></div>
<div align="center"><a href="http://farm3.static.flickr.com/2343/4514371450_3090a6f2b9_b.jpg" target="_blank" rel="lightbox[300]"><img alt="" src="http://farm3.static.flickr.com/2343/4514371450_3090a6f2b9_b.jpg" title="时间自加算法" class="alignnone" width="500" height="398" border="0"/></a></div>
<p>AlivePDF这个开源类库，我也画了一些架构图，主要是前面几个类，整理好后，我会联系作者，如果没什么问题，我会放出给大家的！^_^!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.norris2u4.com/?feed=rss2&amp;p=300</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->