<?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>新浪UED</title>
	<atom:link href="http://ued.sina.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://ued.sina.com/index.php</link>
	<description>一个关注用户体验、关注工作流、关注作品质量的有爱团队</description>
	<lastBuildDate>Fri, 17 Feb 2012 08:18:21 +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>一个页面重构工程师眼中的“用户体验”</title>
		<link>http://ued.sina.com/index.php/?p=868</link>
		<comments>http://ued.sina.com/index.php/?p=868#comments</comments>
		<pubDate>Wed, 15 Feb 2012 10:13:47 +0000</pubDate>
		<dc:creator>三三大人</dc:creator>
				<category><![CDATA[网页重构]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=868</guid>
		<description><![CDATA[在工业化设计融入人们生活的现今，用户体验一词就常常出现在人们的视线里，随着互联网web2.0时代的到来，大大小小的网站设计中也都开始关注用户体验的方面，对什么是用户体验（百度这四个字，比我写什么解释都好）就不做详细赘述了，相信大家比我了解的更加丰富。 用户体验从产品设计阶段便开始介入进来，如原型设计中交互模式设计、功能实现方式设计都融入了设计人员对用户的关怀，听过这样的一句话：“具有良好用户体验的产品，不仅仅取决于一个有着丰富交互设计经验的产品设计师，还与产品生产过程中的每一个环节是否都具备良好的用户体验意识有一定的关系”。 今天我想从一个页面重构工程师的角度出发，从两个方面去谈谈在我的工作中，我所理解的用户体验，以及我做了哪些和用户体验有关的事情。 一、 从可用到易用的细节处理 1. 按钮、链接、导航菜单的鼠标触发状态、鼠标手型等 随着视觉设计的发展，对按钮、链接、或者导航菜单的表现方式变得异常丰富，比如: 这些图片丰富了对鼠标点击形式的视觉表现力。在基于功能可用的前提下，逐渐通过视觉渲染达到美化的效果，有了精美的设计图后，就需要页面重构工程师们加以切割，在代码化的过程中，通常要做如下考量： 可点击区域大小，例如（下图）尽管风格上似乎按钮只有10*10，但是在实现时，要考虑用户操作起来是不是很容易获取锚点，而不是点来点去找不到 鼠标操作类型的提示，鼠标输入提示、手型提示、文本区域提示、不可点击提示，尽管整个页面的视觉引导更重要，但用户在操作时，人眼一直跟随着鼠标或键盘的操作而转换，如果能伴随着正确的鼠标操作提示，更可增强引导作用。从而提升交互体验。 按钮风格的一致性，按钮当前状态和点击状态的统一，按钮按照功能所作的统一， 设计师天马行空的想象力，赋予了他们创造性，而我们既要保留他们的创造力还要抽象出一些共用特征，在我看来按钮类型有3种，如果能有效区分，对网站的整体风格的建立和强化交互感受方面都会有一定一致性，同时在页面构建过程中会抽离成公用信息，非常便于管理和维护。 1）如确认、取消等，可称之为贯穿型 2）如登录、加关注等，可称之为点睛型，这一型在实际工作中通常从视觉上都略强于贯穿型，所以会建议设计师做一定统一，有时候是风格上，有时候是结构上，再甚者就是大小比例上 3）如发博文、发微博等按钮，可称之为增强型，通常这个类型不会限制设计师按照标准类型去做，即便出来的是个异型，我们还是应该理解的。 4）最后就是无论哪种类型，都要注意是否有鼠标点击的hover状态，即便设计师没有设计，也要做出hover的交互效果，至少是预留，就我而言通常都是在原按钮颜色基础上调整一下颜色深度作为hover状态，大部分按钮我都会考虑做出交互效果，当然也有例外，比如活动专题中的点击区域，通常不会增加点击后的过分明显效果，如果非要做出一点效果，最多是调整一下文字本身的明暗度。（我承认我有些吹毛求疵） 2. 图片的alt解释信息 通常拿到设计需求，我会要求设计师帮助梳理icon，一般会分两类，功能型、注释型。同时要求两种类型图片的像素区间要各自保持一致性，这样一来设计师在整理的过程中就会意识到，有的文字没有必要加注释图片，有的是功能和注释类型的大小、风格可能不一致，梳理过程中设计师会去调整一下，同时也在创意的过程中渗透一些规则。第一、二行是注释型，第三行是功能型 3. 因设计或排版而没有完全显示出来的文字信息的title提示 产品或用户经常抱怨“后面的文字看不到，这到底是什么内容？”之所以出现这样的情况，主要是没有考虑到文字信息出现的位置和当时这些文字的重要性，如果是图片瀑布流，那文字信息的作用只是索引而已，如果是文章列表页或视频列表页、甚至正文页这样的终极页面，标题名称是务必要全部展示的。所以为了避免折磨用户，一定要给显示不完全的信息增加title，在存在缺陷的情况下也能有让用户有些许安慰，否则你就太伤用户的心了。 4. 网站logo的权重设置H1、网站主要标题、标识的权重设置H2-H6、stong、em、b等(对搜索引擎的友好可读性) 考虑各个层面的用户体验，是为了让用户尽量全方位的感受到网页的无边界浏览，在视觉和交互充分发挥作用的背后，代码标签的选择，也从一定层面决定了用户是否能够更好的使用，目前的一些搜索引擎，如Google、Baidu等，在过滤网页信息的过程中，有一套机制去寻找你网页中的主要内容，那些对搜索引擎比较友好的标签会更有利于页面信息的抓取，在用户搜索的过程中，抛开企业间战略合作不谈，也会相对显示在比较靠前的位置（当然如果搜索引擎的广告效益非常好的时候，或许第一屏还是与你无缘，这……你懂的） 5. 网站字色的一致性，链接色、提示色、内容字色等 （降低学习成本，培养用户习惯） 设计一套互动类产品（博客、视频、邮箱）或者用户功能型产品（消费类产品、资讯类产品等）同样面临着一个问题，用户习惯，人其实对规律会更容易产生安全感也更容易增加舒适性。所以在网页的设计过程中，统一视觉感受不仅让用户安心的舒适的去浏览图片文字音乐多媒体等信息，也能培养用户认知。 因此在设计师天马行空的创造力面前，我总是横亘在他们面前的那个规范和逻辑的卫斗士。当设计师天马行空的时候我是不会也不敢去干扰他们，但如果谁告诉我风格确定时，我就会站出来披荆斩棘，要求设计师给出一整套设计规范，例如： • 链接色分主链接色和辅助链接色，建议不要超过2种，增加类功能区域除外 • 文字色也是主辅都要有，同样不要超过两种（其实有多少种都可以，但你要考虑用户花多长时间适应你的五花八门） • 提示信息又分普通提示、正确提示、错误提示、空状态提示等 • 什么图标类型分为功能型图标和注释型图标 6. &#8230; <a href="http://ued.sina.com/index.php/?p=868">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_17_06_50banner.jpg" /><br />在工业化设计融入人们生活的现今，用户体验一词就常常出现在人们的视线里，随着互联网web2.0时代的到来，大大小小的网站设计中也都开始关注用户体验的方面，对什么是用户体验（百度这四个字，比我写什么解释都好）就不做详细赘述了，相信大家比我了解的更加丰富。</p>
<p> <span id="more-868"></span></p>
<p>用户体验从产品设计阶段便开始介入进来，如原型设计中交互模式设计、功能实现方式设计都融入了设计人员对用户的关怀，听过这样的一句话：“具有良好用户体验的产品，不仅仅取决于一个有着丰富交互设计经验的产品设计师，还与产品生产过程中的每一个环节是否都具备良好的用户体验意识有一定的关系”。<br />
今天我想从一个页面重构工程师的角度出发，从两个方面去谈谈在我的工作中，我所理解的用户体验，以及我做了哪些和用户体验有关的事情。</p>
<h3 style="font-weight:bold;">一、	从可用到易用的细节处理</h3>
<h4 style="font-weight:bold;">1.	按钮、链接、导航菜单的鼠标触发状态、鼠标手型等 </h4>
<p>随着视觉设计的发展，对按钮、链接、或者导航菜单的表现方式变得异常丰富，比如:<br />
<img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_16_09_121.jpg" /></p>
<p>这些图片丰富了对鼠标点击形式的视觉表现力。在基于功能可用的前提下，逐渐通过视觉渲染达到美化的效果，有了精美的设计图后，就需要页面重构工程师们加以切割，在代码化的过程中，通常要做如下考量：</p>
<ul>
<li>可点击区域大小，例如（下图）尽管风格上似乎按钮只有10*10，但是在实现时，要考虑用户操作起来是不是很容易获取锚点，而不是点来点去找不到<br />
<br />
<img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_16_09_122.jpg" /></li>
<li>鼠标操作类型的提示，鼠标输入提示、手型提示、文本区域提示、不可点击提示，尽管整个页面的视觉引导更重要，但用户在操作时，人眼一直跟随着鼠标或键盘的操作而转换，如果能伴随着正确的鼠标操作提示，更可增强引导作用。从而提升交互体验。</li>
<li>按钮风格的一致性，按钮当前状态和点击状态的统一，按钮按照功能所作的统一，<br />
设计师天马行空的想象力，赋予了他们创造性，而我们既要保留他们的创造力还要抽象出一些共用特征，在我看来按钮类型有3种，如果能有效区分，对网站的整体风格的建立和强化交互感受方面都会有一定一致性，同时在页面构建过程中会抽离成公用信息，非常便于管理和维护。</li>
</ul>
<ol>
<li style="list-style:none;text-indent:-24px;">1）如确认、取消等，可称之为贯穿型</li>
<li style="list-style:none;text-indent:-24px;">2）如登录、加关注等，可称之为点睛型，这一型在实际工作中通常从视觉上都略强于贯穿型，所以会建议设计师做一定统一，有时候是风格上，有时候是结构上，再甚者就是大小比例上</li>
<li style="list-style:none;text-indent:-24px;">3）如发博文、发微博等按钮，可称之为增强型，通常这个类型不会限制设计师按照标准类型去做，即便出来的是个异型，我们还是应该理解的。</li>
<li style="list-style:none;text-indent:-24px;">4）最后就是无论哪种类型，都要注意是否有鼠标点击的hover状态，即便设计师没有设计，也要做出hover的交互效果，至少是预留，就我而言通常都是在原按钮颜色基础上调整一下颜色深度作为hover状态，大部分按钮我都会考虑做出交互效果，当然也有例外，比如活动专题中的点击区域，通常不会增加点击后的过分明显效果，如果非要做出一点效果，最多是调整一下文字本身的明暗度。（我承认我有些吹毛求疵）</li>
</ol>
<h4 style="font-weight:bold;">2.	图片的alt解释信息</h4>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_16_09_163.jpg" /></p>
<p>通常拿到设计需求，我会要求设计师帮助梳理icon，一般会分两类，功能型、注释型。同时要求两种类型图片的像素区间要各自保持一致性，这样一来设计师在整理的过程中就会意识到，有的文字没有必要加注释图片，有的是功能和注释类型的大小、风格可能不一致，梳理过程中设计师会去调整一下，同时也在创意的过程中渗透一些规则。<br /><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_16_09_164.jpg" /><br />第一、二行是注释型，第三行是功能型</p>
<h4 style="font-weight:bold;">3.	因设计或排版而没有完全显示出来的文字信息的title提示</h4>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_16_09_166.jpg" /><br /><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_16_09_167.jpg" /><br />产品或用户经常抱怨“后面的文字看不到，这到底是什么内容？”之所以出现这样的情况，主要是没有考虑到文字信息出现的位置和当时这些文字的重要性，如果是图片瀑布流，那文字信息的作用只是索引而已，如果是文章列表页或视频列表页、甚至正文页这样的终极页面，标题名称是务必要全部展示的。所以为了避免折磨用户，一定要给显示不完全的信息增加title，在存在缺陷的情况下也能有让用户有些许安慰，否则你就太伤用户的心了。</p>
<h4 style="font-weight:bold;">4.	网站logo的权重设置H1、网站主要标题、标识的权重设置H2-H6、stong、em、b等(对搜索引擎的友好可读性)</h4>
<p>考虑各个层面的用户体验，是为了让用户尽量全方位的感受到网页的无边界浏览，在视觉和交互充分发挥作用的背后，代码标签的选择，也从一定层面决定了用户是否能够更好的使用，目前的一些搜索引擎，如Google、Baidu等，在过滤网页信息的过程中，有一套机制去寻找你网页中的主要内容，那些对搜索引擎比较友好的标签会更有利于页面信息的抓取，在用户搜索的过程中，抛开企业间战略合作不谈，也会相对显示在比较靠前的位置（当然如果搜索引擎的广告效益非常好的时候，或许第一屏还是与你无缘，这……你懂的）</p>
<h4 style="font-weight:bold;">5.	网站字色的一致性，链接色、提示色、内容字色等 （降低学习成本，培养用户习惯）</h4>
<p>设计一套互动类产品（博客、视频、邮箱）或者用户功能型产品（消费类产品、资讯类产品等）同样面临着一个问题，用户习惯，人其实对规律会更容易产生安全感也更容易增加舒适性。所以在网页的设计过程中，统一视觉感受不仅让用户安心的舒适的去浏览图片文字音乐多媒体等信息，也能培养用户认知。<br />
因此在设计师天马行空的创造力面前，我总是横亘在他们面前的那个规范和逻辑的卫斗士。当设计师天马行空的时候我是不会也不敢去干扰他们，但如果谁告诉我风格确定时，我就会站出来披荆斩棘，要求设计师给出一整套设计规范，例如：<br />
• 链接色分主链接色和辅助链接色，建议不要超过2种，增加类功能区域除外<br />
• 文字色也是主辅都要有，同样不要超过两种（其实有多少种都可以，但你要考虑用户花多长时间适应你的五花八门）<br />
• 提示信息又分普通提示、正确提示、错误提示、空状态提示等<br />
• 什么图标类型分为功能型图标和注释型图标</p>
<p><h4 style="font-weight:bold;">6.	各种内容读取花较长时间的模块，在内容尚未加载成功时，先显示图片图片列表页、或视频截图列表页面，在图片尚未加载时显示初始图片，并固定位置，防止满屏跑图</h4>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_16_09_168.jpg" /><br /><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_16_09_169.jpg" /></p>
<h4 style="font-weight:bold;">7.	提示性文字位置在不干扰用户操作的前提下，交互一致性很重要，如固定在某一提示位置或不影响操作的颜色提示等</h4>
<p>在处理表单过程中，会考虑提示信息所在位置，包括默认提示，出错提示，正确提示等，如果提示风格不统一，会中断用户行为，页面表单填写过程中的流畅度非常重要，为什么会提起这一点，因为在实际工作中，如果没有交互设计经验，不论产品还是设计人员都经常会遗漏表单相关的各种提示信息，但这会影响页面构建过程中HTML的结构，因此如果前期发现产品文档，或者设计稿都没有表现出相关内容，不妨提醒他们务必考虑并添加好，减少后期调整页面结构的冗余工作量。<br /><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_17_01_5410.jpg" /></p>
<p>很多人会说这些不是页面范畴，那页面是什么范畴呢，这些知识有产品范畴的、有设计范畴的、有用户研究范畴的、有交互范畴的，在我看来会这些最大的好处是减少你的工作量，我认为这些都是很基础的知识，不是必须掌握的，但最好了解，了解的好处非常显而易见，就是面对不一定靠谱的需求时，可以有的放矢的给出一些意见，从而减少一些返工，或者细碎的体验的增加。</p>
<h3 style="font-weight:bold;">二、从慢慢等待到愉悦点击的变化</h3>
<h4 style="font-weight:bold;">1.页面模块的按需加载</h4>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_17_01_5511.jpg" /><br />
由于互联网产品发展愈来愈趋向于规模化和正规化，在早年间采用全站只加载一个公用样式的时代已经过去了，取而代之的是对性能更优的模块化按需加载模式，如上图所示，模块化显而易见的好处就是代码冗余相对较低，代码量也较小。除此之外模块化的好处还包括：结构清晰，易上手；频繁变更产品需求时的快速维护和开发；快速下线局部模块；动态调整页面模块加载优先级时，无需剥离任何代码；便于多人协同开发；降低多人协同开发时，互相覆盖代码；适合开发大型产品等很多优点。不论对用户，还是对维护开发都是非常有利的。</p>
<h4 style="font-weight:bold;">2.页面公用元素复用</h4>
<dl>
<dt>所谓公用元素，主要指：</dt>
<dd style="list-style:none;padding-bottom:0;">reset类型</dd>
<dd style="list-style:none;padding-bottom:0;">各类文字色</dd>
<dd style="list-style:none;padding-bottom:0;">各类链接色</dd>
<dd style="list-style:none;padding-bottom:0;">浮层框架</dd>
<dd style="list-style:none;padding-bottom:0;">页面主框架</dd>
<dd style="list-style:none;padding-bottom:0;">适用于本站的高复用补丁类型</dd>
</dl>
<h4 style="font-weight:bold;">3.文件调用的层级酌情减小、文件名酌情缩短</h4>
<p>如，image/index/module1/limoumou/icon/fabiaopinglun.jpg   酌情优化目录层级<br />
如，fabiaopinglun_default.jpg 、.CommentListContent_linedot{}   酌情优化文件名长度</p>
<h4 style="font-weight:bold;">4.	请求数量和背景大小均衡处理</h4>
<p>图片请求数方面，有时候你要考虑CSS Sprite 拼合图片减少背景数，同时还要注意拼合图片K数不要太大，以及拼合图片注意纵横比，建议拼竖图（做过实验，同样内容，横图体积大于竖图）<br />
当背景图片需要平铺时，请酌情考虑背景图片大小，比如1px高的虚线，请不要切一个1*2的小图，比如1*10,1*50，主要考量在于1*2的小图的平铺次数。<br />
影响页面性能的因素还有很多，例如hack的使用、position的使用, table的使用等等……关键是保持技术的新鲜，丰富自己的知识。
<p>以上文章只是沉淀了一下过往我在页面重构工作中所领悟的用户体验。略显肤浅，可能大家会质疑，为什么写页面的还要自己加图标状态或者修改局部效果，要知道在早期的互联网在分工上没有现在这样精专的分工，顶多分个前台、后台、产品。当然在当初这些事情不一定有如今的专业深度，但涉猎面的确较如今是更宽阔的。所以早几年开始从事网页制作的朋友，都不会对设计制作界定的那么明显，在图形图片处理方面也是有一定认知和操作能力的。不是为了显摆什么，只是觉得知识的深度和广度同样重要。</p>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=868</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>发现用户言行不一的小技巧之感性篇</title>
		<link>http://ued.sina.com/index.php/?p=842</link>
		<comments>http://ued.sina.com/index.php/?p=842#comments</comments>
		<pubDate>Tue, 14 Feb 2012 12:05:04 +0000</pubDate>
		<dc:creator>heron</dc:creator>
				<category><![CDATA[用户研究]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=842</guid>
		<description><![CDATA[早在19世纪30年代，美国心理学家 Richard LaPiere 就意识到一个人的态度与行为并不总是很牢固地联系在一起。LaPiere 得出这样的结论：如果你想预测一个人在面对某一真实的特定情景或特定人物时将如何表现的话，对假设性情景的口头回答（即用户的态度）是远远不够的。 事实的确如此，人类总有一种惯性，即使有最好的意图，也是说一套做一套。用户也不外乎凡人的本性，那么，我们如何快速的发现用户在进行测试时是真心还是假意呢，下面就是我作为一名小实习生的一些小感想，写出来与各路仙儿分享。 用户真的会“掏钱”吗？ 用户测试的目的究竟是神马？ 通常我们只是停留在了解产品是否易用、好用的层面上，但是，请别忘了还有更深层次，那就是用户对产品是否想用。而前者就是我们通常在做的可用性测试，后者我们姑且称为价值测试。 大多数测试人员最后只是简单询问用户“愿不愿意购买”产品就草草结束了一次用户测试。其实你知道吗？用户的惯性回答“也许”或者“会”，只是用户碍于你的颜面，在对你华丽丽的说“不”而已。 那么，测试人员要怎么问才会得到用户的真正“心意”呢？在这里，前ebay副总裁Marty Cagan给了我们一个简单的评判方法：我们可以抛出一个问题，“你是否愿意把产品推荐给同事（或其他你在意的任何人）”，之后我们再让用户以推荐值自己打分，0代表极不愿推荐，10代表相当愿意推荐。答案很简单，只有用户打9-10分才是真心大爱，表示用户真的会“掏钱”使用我们的产品；用户打5-7分只是出于礼貌的敷衍你，表示对我们的产品根本不感冒。 图一：《启示录—打造用户喜爱的产品》和作者Marty Cagan 总的来说，我们在搞清楚“用户是否会买产品？如果不会，原因是什么？”之前，不能终止用户测试。当用户研究人员的工作告一段落时，产品经理会接手跟进讨论，试图找到问题的答案。开展价值测试时，我们必须对一些细节保持关注，他们往往是成功的关键。在调查“要怎么做，才能说服他们购买该产品”时，我们可能会发现这些人并非我们的目标客户，还有人更需要我们的产品，或者发现产品所解决的问题不是用户所关心的，改进产品，让它真正解决用户的问题，产品才会更有价值。有时是解决方案出了错，有时是盈利模式不对，只要多加留意，稍做调整，结果会好很多。 记忆是“骗人”的 从认知心理学角度讲，我们的记忆不是照片式的，而是不断被建构的，随着信息的不断进入，有可能被悄悄的修改。因此，我们印象中某个用户表达的观点或者意愿，其实和我们记忆中的也许并不一致。此时，完整的记录可以帮助我们避免这一问题。 我们需要对用户的言行有清楚的认识。也许用户自己根本不知道想要什么，这是很多用户的普遍心理。永远不要指责用户的无理取闹，就像不要指责女生的善变。如果你足够把她放在心上，你应该会知道她喜欢什么，想要什么，会买什么。她的每一次浏览，每一次点击，每一次购买其实都在告诉你她喜欢什么，想要什么，这些都是用户给我们的机会，请不要浪费掉。 用户的态度是会随时间改变的，有时可能面对不同情景的压力同一位用户的态度会决然不同。那么什么时候测量态度才能成功地预测行为呢？ 我们最好是在同一时间测量态度和行为。曾有心理学家进行过研究挖掘，得出一些导致态度与行为一致的因素： 1. 态度的显著性 如果你对某个人或某件事的态度非常明确，那么它便具有显著性、重要性，容易从记忆中提取。态度越明确，它就越能预测个体的行为。 2. 情景的压力 在某种特殊的情景中外在压力很大，以至于使人们的内心想法对行为丝毫不产生任何影响。 用户常常言行不一，源于他们很多时候意识不到自己行为的真相。众所周知的例子，Sony公司引入 Boom Box 概念的时候，召集了一些潜在用户组成焦点小组来讨论这个新产品应该是黑色还是黄色。此时每个测试用户都认为消费者应该更倾向于黄色。会议以后，组织者告诉他们在离开前可以免费带走一个 Boom Box 作为回报，结果是每个人拿走的都是黑色！此前对态度的评估竟然完全推翻了真实的行为。 图二：黑色Boom Box 欢迎出声思维 用户在进行测试时出声思维，就是让用户集中于如何与产品进行交互的意识流。这是运用于可用性测试过程获取用户数据反馈的有效方法。如果测试中的氛围比较平等、自然、融洽，用户又特别愿意表达，那么用户就会在进行任务操作的同时，表达他们想做什么、打算如何做、背后的原因是什么。此时，不仅是操作行为、用户表达出来的想法和原因以及语言中透露出的疑惑、失望、不满、惊讶、犹豫等情绪同样是需要我们加以关注的。 出声思维最初由Lewis在IBM公司提出，之后被Ericsson 和Simon进一步修正。该方法要求用户在完成一系列由测试人员设定的任务过程中，口述出自己所看所想所感受的，以帮助我们观察并获得第一手反馈。我们在整个测试过程中被要求，客观全面的记录用户所说的每一句话，不能打断用户的行动和表达。该方法的目的是明确“谁”在完成特定的任务时出现了什么样的“问题”，强调特定的用户和特定的问题。 微表情正在出卖你 &#8230; <a href="http://ued.sina.com/index.php/?p=842">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_14_13_001new.png" /><br />早在19世纪30年代，美国心理学家 Richard LaPiere 就意识到一个人的态度与行为并不总是很牢固地联系在一起。LaPiere 得出这样的结论：如果你想预测一个人在面对某一真实的特定情景或特定人物时将如何表现的话，对假设性情景的口头回答（即用户的态度）是远远不够的。</p>
<p><span id="more-842"></span></p>
<p>事实的确如此，人类总有一种惯性，即使有最好的意图，也是说一套做一套。用户也不外乎凡人的本性，那么，我们如何快速的发现用户在进行测试时是真心还是假意呢，下面就是我作为一名小实习生的一些小感想，写出来与各路仙儿分享。</p>
<h3 style="font-weight:bold;">用户真的会“掏钱”吗？</h3>
<p>用户测试的目的究竟是神马？</p>
<p>通常我们只是停留在了解产品是否易用、好用的层面上，但是，请别忘了还有更深层次，那就是用户对产品是否想用。而前者就是我们通常在做的可用性测试，后者我们姑且称为价值测试。</p>
<p>大多数测试人员最后只是简单询问用户“愿不愿意购买”产品就草草结束了一次用户测试。其实你知道吗？用户的惯性回答“也许”或者“会”，只是用户碍于你的颜面，在对你华丽丽的说“不”而已。</p>
<p>那么，测试人员要怎么问才会得到用户的真正“心意”呢？在这里，前ebay副总裁Marty Cagan给了我们一个简单的评判方法：我们可以抛出一个问题，“你是否愿意把产品推荐给同事（或其他你在意的任何人）”，之后我们再让用户以推荐值自己打分，0代表极不愿推荐，10代表相当愿意推荐。答案很简单，只有用户打9-10分才是真心大爱，表示用户真的会“掏钱”使用我们的产品；用户打5-7分只是出于礼貌的敷衍你，表示对我们的产品根本不感冒。</p>
<div  style="text-align:center"><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_14_12_072.jpg" /><br />图一：《启示录—打造用户喜爱的产品》和作者Marty Cagan</div>
<p>总的来说，我们在搞清楚“用户是否会买产品？如果不会，原因是什么？”之前，不能终止用户测试。当用户研究人员的工作告一段落时，产品经理会接手跟进讨论，试图找到问题的答案。开展价值测试时，我们必须对一些细节保持关注，他们往往是成功的关键。在调查“要怎么做，才能说服他们购买该产品”时，我们可能会发现这些人并非我们的目标客户，还有人更需要我们的产品，或者发现产品所解决的问题不是用户所关心的，改进产品，让它真正解决用户的问题，产品才会更有价值。有时是解决方案出了错，有时是盈利模式不对，只要多加留意，稍做调整，结果会好很多。</p>
<h3 style="font-weight:bold;">记忆是“骗人”的</h3>
<p>从认知心理学角度讲，我们的记忆不是照片式的，而是不断被建构的，随着信息的不断进入，有可能被悄悄的修改。因此，我们印象中某个用户表达的观点或者意愿，其实和我们记忆中的也许并不一致。此时，完整的记录可以帮助我们避免这一问题。</p>
<p>我们需要对用户的言行有清楚的认识。也许用户自己根本不知道想要什么，这是很多用户的普遍心理。永远不要指责用户的无理取闹，就像不要指责女生的善变。如果你足够把她放在心上，你应该会知道她喜欢什么，想要什么，会买什么。她的每一次浏览，每一次点击，每一次购买其实都在告诉你她喜欢什么，想要什么，这些都是用户给我们的机会，请不要浪费掉。</p>
<p>用户的态度是会随时间改变的，有时可能面对不同情景的压力同一位用户的态度会决然不同。那么什么时候测量态度才能成功地预测行为呢？</p>
<p>我们最好是在同一时间测量态度和行为。曾有心理学家进行过研究挖掘，得出一些导致态度与行为一致的因素：<br />
1. 态度的显著性 如果你对某个人或某件事的态度非常明确，那么它便具有显著性、重要性，容易从记忆中提取。态度越明确，它就越能预测个体的行为。<br />
2. 情景的压力 在某种特殊的情景中外在压力很大，以至于使人们的内心想法对行为丝毫不产生任何影响。</p>
<p>用户常常言行不一，源于他们很多时候意识不到自己行为的真相。众所周知的例子，Sony公司引入 Boom Box 概念的时候，召集了一些潜在用户组成焦点小组来讨论这个新产品应该是黑色还是黄色。此时每个测试用户都认为消费者应该更倾向于黄色。会议以后，组织者告诉他们在离开前可以免费带走一个 Boom Box 作为回报，结果是每个人拿走的都是黑色！此前对态度的评估竟然完全推翻了真实的行为。</p>
<div style="text-align:center;"><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_14_12_483.jpg" /><br />图二：黑色Boom Box</div>
<h3 style="font-weight:bold;">欢迎出声思维</h3>
<p>用户在进行测试时出声思维，就是让用户集中于如何与产品进行交互的意识流。这是运用于可用性测试过程获取用户数据反馈的有效方法。如果测试中的氛围比较平等、自然、融洽，用户又特别愿意表达，那么用户就会在进行任务操作的同时，表达他们想做什么、打算如何做、背后的原因是什么。此时，不仅是操作行为、用户表达出来的想法和原因以及语言中透露出的疑惑、失望、不满、惊讶、犹豫等情绪同样是需要我们加以关注的。</p>
<p>出声思维最初由Lewis在IBM公司提出，之后被Ericsson 和Simon进一步修正。该方法要求用户在完成一系列由测试人员设定的任务过程中，口述出自己所看所想所感受的，以帮助我们观察并获得第一手反馈。我们在整个测试过程中被要求，客观全面的记录用户所说的每一句话，不能打断用户的行动和表达。该方法的目的是明确“谁”在完成特定的任务时出现了什么样的“问题”，强调特定的用户和特定的问题。</p>
<h3 style="font-weight:bold;">微表情正在出卖你</h3>
<p>在2009年的美剧《LIE TO ME》里面男主角Lightman说，“普通人在谈话中每十分钟就会撒三次谎”。这部以微表情识谎为题材的美剧引发了大洋彼岸的LIE TO ME门。</p>
<p>微表情，是一个心理学名词。人们通过做一些表情把内心感受表达给对方看，它一般只持续不到五分之一秒，如果超过一秒那就是在撒谎了。微表情一闪而过，通常只有10%的人察觉到，甚至连作出表情的人和观察者都察觉不到。</p>
<p>比起有意识做出的表情，“微表情”更能体现用户真实的感受和动机。 虽然测试人员会忽略“微表情”，但是我们的大脑依然受其影响，而改变对用户表情的理解。所以如果用户很自然地表现“高兴”的表情，且其中不含有“微表情”，就能断定这是真心高兴。但是如果其间有“嗤笑”的“微表情”闪现，就算你没有刻意去察觉，你会更倾向于认为这张“高兴”的面孔是“狡猾的”或“不可信的”。</p>
<div style="text-align:center"><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_02_14_12_484.png" /><br />图三：真的笑容，表现在眼角纹的上翘</div>
<p>需要说明的是，微表情是无意识的，不是通过选择而做出的，因此是用户无法控制的，并且和国籍木有关系。它能够发掘深埋在人类脸部、身体和声音里的线索，然后将用户的真心昭示天下。
<p>下面是一些有趣的用户行为，当用户出现下列行为时，表明他的话是有质疑的，需要我们自己判断或者进一步挖掘可信信息：<br />
1. 问题的生硬重复是典型的撒谎，如“你用过微名片吗？是的，我之前有用过几次”。<br />
2. 嘴角略微翘起or单边耸肩or下意识的摊手or摩挲自己的手or抿嘴两次，都是一种自我安慰的表现。表明用户对刚刚的话毫无信心。<br />
3. 如果用户对我们提出的问题表示不屑，通常这些问题会是用户内心肯定的声音。 <br />
4. 手放在眉骨附近表示用户羞愧回答这个问题，我们需要赶紧换种方式巧妙的引导。<br />
5. 真正的吃惊表情转瞬即逝，超过一秒都是假装的。<br />
6. 当用户想要隐瞒的时候，鼻子下方的海绵体这块就会痒，尤其是男性用户，要小心喽。<br />
7. 用户在陈述时眼球会向左下方看，这代表大脑在回忆，所说的是真话，而谎言是不需要回忆的过程的。<br />
8. 用户在描述一连串测试的流程时，能否流利准确地进行倒叙是判断其是否说谎的标准之一，因为谎言通常都是按时间顺序编造的。 <br />
9. 用户撒谎时并不像惯常理解的那样会回避对方的眼神，反而更需要眼神交流来判断我们是否相信他说的话。所以，必要时刻，请死盯用户。<br />
10. 人在害怕时会出现生理逃跑反应：血液从四肢回流到腿部（做好逃跑准备），随之手的体表温度下降。因此，我们可以在邀请用户前来跟临走时分别与他们握手，作为用户是否说了谎话想快点逃脱的参考。
</p>
<h3 style="font-weight:bold;">总结一下</h3>
<p>本文仅是对用户观察中发现的一些小技巧，在背后其实还有许多的理论支撑，如情绪理论、神经营销与眼动追踪、微表情训练工具(Micro Expression Training Tool, METT)的使用、瞬间互动研究、面部行为代码系统（Facial Action Coding System， FACS）等。但是，无论哪一种方法或者工具，都没有绝对的完美。当我们在真正面对用户的时候，要组合多种研究方法，并根据研究目标和数据整理分析工具以及预算和研究时间等来做合理的取舍。</p>
<p>再次申明，以上仅是将烦人的理论生活化的一些小思路，欢迎探讨，拍砖即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=842</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>iOS Web App初步</title>
		<link>http://ued.sina.com/index.php/?p=812</link>
		<comments>http://ued.sina.com/index.php/?p=812#comments</comments>
		<pubDate>Tue, 10 Jan 2012 11:33:12 +0000</pubDate>
		<dc:creator>shenyue</dc:creator>
				<category><![CDATA[前端开发]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=812</guid>
		<description><![CDATA[iOS Web App开发，配合HTML5，是目前比较热门的话题。今天，先抛开HTML5，我们来尝试在PhoneGap框架上进行简单的开发。 PhoneGap是一个使用HTML，CSS和JavaScript的，创建移动跨平台移动应用程序的快速开发平台。它使开发者能够利用iPhone，Android，Palm，Symbian,WP7,Bada和Blackberry等智能手机的核心功能——包括地理定位，加速器，联系人，声音和振动等，此外PhoneGap拥有丰富的插件，可以以此扩展无限的功能。PhoneGap是免费的，但是它需要特定平台提供的附加软件，例如iPhone的iPhone SDK，Android的Android SDK等。 PhoneGap的优点： 1、兼容性。完全做到了written once, run everywhere。 2、标准化。PhoneGap用W3C标准，特别标准，Web App直接一字不改就能运行。尤其是和JQ Mobile结合在一起使用，实在是威力无穷啊。 3、配合使用JavaScript+HTML5，潜力巨大。 当然目前PhoneGap缺陷还是蛮多的，比如运行速度慢，UI反应延时——这是个致命伤。不过嘛，这种问题是会随着技术的进步而消失的。它的优势是无以伦比的：开发成本低（包括跨平台）。当然，Native App永远会有一席之地，比如高端游戏。 一、 开发准备 1、首先需要一台运行苹果系统的电脑，装好Xcode，如果需要真机调试，还需要开发者证书。 2、去http://phonegap.com/下载最新版的PhoneGap，目前是1.3版本。 3、把下载完的zip文件解压缩，双击运行里面的一个dmg镜像，进行安装。 4、打开Xcode，新建工程，就会看到PhoneGap-based Applicaton，就是它了。 二、 注意事项 1、 用PhoneGap-based Applicaton向导生成工程以后，按command+B，生成一下。打开工程文件所在的目录，就会看见一个www的目录，拖拽到Xcode中，选择引用即可。强调一下，必须选择引用方式，这样www目录在Xcode中是蓝色的。www目录下放的就是web端的一些文件（html/css/js/image）。 2、 在PhoneGap中，如果需要访问外部链接是需要授权的，在phonegap.plist文件中可以看到，有一个ExternalHosts数组，里面可以配置。顺便说一下，Plugins下可以清楚的看到，可以使用iOS的本地核心组件，例如相机，联系人等等。 三、 例子说明 例子很简单，在向导生成的基础上，加上了模拟Path应用程序的左下角的快捷菜单功能，并且通过PhoneGap框架调用iOS的Camera模块。先来看看截图吧： 基于PhoneGap框架的开发非常适合有web开发经验的开发者，因为里面基本上都是Html/CSS/js。比如快捷菜单的功能，在html文件中代码如下： &#60;footer class=&#34;op-footer&#34;&#62; &#60;a href=&#34;javascript:photo();toggle_menu();&#34;&#62;&#60;img id=&#34;path_photo&#34; &#8230; <a href="http://ued.sina.com/index.php/?p=812">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_01_10_12_12iso_banner.png" /></p>
<p>iOS Web App开发，配合HTML5，是目前比较热门的话题。今天，先抛开HTML5，我们来尝试在PhoneGap框架上进行简单的开发。</p>
<p><span id="more-812"></span></p>
<p>PhoneGap是一个使用HTML，CSS和JavaScript的，创建移动跨平台移动应用程序的快速开发平台。它使开发者能够利用iPhone，Android，Palm，Symbian,WP7,Bada和Blackberry等智能手机的核心功能——包括地理定位，加速器，联系人，声音和振动等，此外PhoneGap拥有丰富的插件，可以以此扩展无限的功能。PhoneGap是免费的，但是它需要特定平台提供的附加软件，例如iPhone的iPhone SDK，Android的Android SDK等。</p>
<p><!--more--></p>
<h4>PhoneGap的优点：</h4>
<p>1、兼容性。完全做到了written once, run everywhere。 </p>
<p>2、标准化。PhoneGap用W3C标准，特别标准，Web App直接一字不改就能运行。尤其是和JQ Mobile结合在一起使用，实在是威力无穷啊。</p>
<p>3、配合使用JavaScript+HTML5，潜力巨大。 </p>
<p>当然目前PhoneGap缺陷还是蛮多的，比如运行速度慢，UI反应延时——这是个致命伤。不过嘛，这种问题是会随着技术的进步而消失的。它的优势是无以伦比的：开发成本低（包括跨平台）。当然，Native App永远会有一席之地，比如高端游戏。</p>
<h4>一、	开发准备</h4>
<p>1、首先需要一台运行苹果系统的电脑，装好Xcode，如果需要真机调试，还需要开发者证书。</p>
<p>2、去http://phonegap.com/下载最新版的PhoneGap，目前是1.3版本。</p>
<p>3、把下载完的zip文件解压缩，双击运行里面的一个dmg镜像，进行安装。</p>
<p>4、打开Xcode，新建工程，就会看到PhoneGap-based Applicaton，就是它了。</p>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_01_10_11_29iso_app.png" /></p>
<h4>二、	注意事项</h4>
<p>1、	用PhoneGap-based Applicaton向导生成工程以后，按command+B，生成一下。打开工程文件所在的目录，就会看见一个www的目录，拖拽到Xcode中，选择引用即可。强调一下，必须选择引用方式，这样www目录在Xcode中是蓝色的。www目录下放的就是web端的一些文件（html/css/js/image）。</p>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_01_10_11_29iso_app_1.png" /></p>
<p>2、	在PhoneGap中，如果需要访问外部链接是需要授权的，在phonegap.plist文件中可以看到，有一个ExternalHosts数组，里面可以配置。顺便说一下，Plugins下可以清楚的看到，可以使用iOS的本地核心组件，例如相机，联系人等等。</p>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_01_10_11_29iso_app_2.png" /></p>
<h4>三、	例子说明</h4>
<p>例子很简单，在向导生成的基础上，加上了模拟Path应用程序的左下角的快捷菜单功能，并且通过PhoneGap框架调用iOS的Camera模块。先来看看截图吧：</p>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2012_01_10_11_29iso_app_3.png" /></p>
<p>基于PhoneGap框架的开发非常适合有web开发经验的开发者，因为里面基本上都是Html/CSS/js。比如快捷菜单的功能，在html文件中代码如下：</p>
<pre class="brush: plain;">
&lt;footer class=&quot;op-footer&quot;&gt;
      &lt;a href=&quot;javascript:photo();toggle_menu();&quot;&gt;&lt;img id=&quot;path_photo&quot; class=&quot;path_icon&quot; src=&quot;image/icon/1.png&quot; /&gt;&lt;/a&gt;
      &lt;a href=&quot;javascript:toggle_menu();&quot;&gt;&lt;img id=&quot;path_people&quot; class=&quot;path_icon&quot; src=&quot;image/icon/2.png&quot; /&gt;&lt;/a&gt;
      &lt;a href=&quot;javascript:toggle_menu();&quot;&gt;&lt;img id=&quot;path_place&quot; class=&quot;path_icon&quot; src=&quot;image/icon/3.png&quot; /&gt;&lt;/a&gt;
      &lt;a href=&quot;javascript:toggle_menu();&quot;&gt;&lt;img id=&quot;path_music&quot; class=&quot;path_icon&quot; src=&quot;image/icon/4.png&quot; /&gt;&lt;/a&gt;
      &lt;a href=&quot;javascript:toggle_menu();&quot;&gt;&lt;img id=&quot;path_thought&quot; class=&quot;path_icon&quot; src=&quot;image/icon/5.png&quot; /&gt;&lt;/a&gt;
      &lt;a href=&quot;javascript:toggle_menu();&quot;&gt;&lt;img id=&quot;path_sleep&quot; class=&quot;path_icon&quot; src=&quot;image/icon/6.png&quot; /&gt;&lt;/a&gt;
      &lt;a href=&quot;javascript:toggle_menu();&quot;&gt;&lt;img src=&quot;image/path_menu@2x.png&quot; width=&quot;40&quot; id=&quot;path_button&quot;/&gt;&lt;/a&gt;
&lt;/footer&gt;
</pre>
<p>CSS中的op-footer让按钮在左下角，toggle_menu函数用于扩展和收缩菜单，photo函数调用系统拍照功能。</p>
<pre class="brush: plain;">
function toggle_menu()
{
	if( $('#path_button').hasClass('path-extend') )
	{
		// 收缩
		$('#path_button').removeClass('path-extend');
		$('#path_photo').animate( { 'left' : '10px' , 'top': '10px' } , 200 , function(){} );
		$('#path_people').animate( { 'left' : '10px' , 'top': '10px' } , 180 , function(){} );
		$('#path_place').animate( { 'left' : '10px' , 'top': '10px' } , 160 , function(){} );
		$('#path_music').animate( { 'left' : '10px' , 'top': '10px' } , 140 , function(){} );
		$('#path_thought').animate( { 'left' : '10px' , 'top': '10px' } , 120 , function(){} );
		$('#path_sleep').animate( { 'left' : '10px' , 'top': '10px' } , 100 , function(){} );
	}
	else
	{
		// 扩展
		$('#path_button').addClass('path-extend');
		$('#path_photo').animate( { 'left' : '-5px' , 'top': '-100px' } , 100 , function(){} );
		$('#path_people').animate( { 'left' : '31px' , 'top': '-94px' } , 120 , function(){} );
		$('#path_place').animate( { 'left' : '59px' , 'top': '-78px' } , 140 , function(){} );
		$('#path_music').animate( { 'left' : '82px' , 'top': '-56px' } , 160 , function(){} );
		$('#path_thought').animate( { 'left' : '98px' , 'top': '-25px' } , 180 , function(){} );
		$('#path_sleep').animate( { 'left' : '104px' , 'top': '10px' } , 200 , function(){} );
	}
}
function photo()
{
// 通过PhoneGap框架调用iOS的Camera模块
navigator.camera.getPicture(function(imageURI){$('#refresh_image').attr('src',imageURI);},
function(message) {alert('get picture failed' + message );},
{
			quality: 50,
			destinationType: navigator.camera.DestinationType.FILE_URI,
			sourceType: navigator.camera.PictureSourceType.CAMERA
		}
    );
}
</pre>
<p>可以看到，这些js中的函数都使用到了jQuery，非常方便实用。</p>
<h4>四、	总结</h4>
<p>基于PhoneGap框架的iOS Web App的开发真的很方便实用，把工作量都转移到了Web开发，但也是有代价的，性能上肯定不如Native App高效，在一些用户体验需求不是很强的地方可以考虑使用。</p>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=812</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>使用Node.JS构建Long Polling应用程序</title>
		<link>http://ued.sina.com/index.php/?p=801</link>
		<comments>http://ued.sina.com/index.php/?p=801#comments</comments>
		<pubDate>Fri, 14 Oct 2011 02:25:52 +0000</pubDate>
		<dc:creator>Fisher Ma</dc:creator>
				<category><![CDATA[前端开发]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=801</guid>
		<description><![CDATA[Comet是指基于HTTP长连接的“服务器推”技术，是一种新的web应用架构。基于这种架构开发的应用中，服务器端会主动以异步的方式向客户端程序推送数据，而不需要客户端显示的发出请求。非常适合股票交易行情，聊天室等交互性和实时性要求很强的应用。 长轮询（Long Polling）是Comet的一种实现方式，也是Facebook，Plurk实现动态更新内容的方法，具体原理是发送一个长时间等待的request，当服务器有资料response的时候立刻断掉，接着再发送一个新的request。 我们这里使用新浪微博的openAPI做我们的数据来源，我们需要每隔5秒中推送5条最新的微博内容到客户端，由客户端进行呈现。 我们先来看下前端部分的代码，这里使用YUI3作为基础框架。 &#60;script type=&#34;text/javascript&#34;&#62; YUI().use('jsonp','node-base',function(Y){ var handler = function(response){ var s = ''; for(var i=0;i&#60;response.length;i++){ s +='&#60;li class=&#34;MIB_linedot_1&#34;&#62;'; s +='&#60;div class=&#34;head_pic&#34;&#62;&#60;img src=&#34;'+response[i].user.profile_image_url+'&#34;&#62;&#60;/div&#62;'; s +='&#60;divm class=&#34;MIB_feed_c&#34;&#62;&#60;p class=&#34;sms&#34;&#62;&#60;a href=&#34;#&#34;&#62;'+response[i].user.name+'&#60;/a&#62; : '+response[i].text+'&#60;/p&#62;&#60;/div&#62;' s +='&#60;/li&#62;'; } Y.one('#weibo').prepend(s); Y.jsonp('http://127.0.0.1:8000/stream?callback={callback}',arguments.callee); }; Y.jsonp('http://127.0.0.1:8000/stream?callback={callback}',handler); }); &#8230; <a href="http://ued.sina.com/index.php/?p=801">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_10_14_02_52nodejs.png" alt="使用Node.JS构建Long Polling应用程序" /></p>
<p>Comet是指基于HTTP长连接的“服务器推”技术，是一种新的web应用架构。基于这种架构开发的应用中，服务器端会主动以异步的方式向客户端程序推送数据，而不需要客户端显示的发出请求。非常适合股票交易行情，聊天室等交互性和实时性要求很强的应用。</p>
<p><span id="more-801"></span></p>
<p>长轮询（Long Polling）是Comet的一种实现方式，也是Facebook，Plurk实现动态更新内容的方法，具体原理是发送一个长时间等待的request，当服务器有资料response的时候立刻断掉，接着再发送一个新的request。</p>
<p>我们这里使用新浪微博的openAPI做我们的数据来源，我们需要每隔5秒中推送5条最新的微博内容到客户端，由客户端进行呈现。</p>
<p>我们先来看下前端部分的代码，这里使用YUI3作为基础框架。</p>
<pre class="brush: plain;">
&lt;script type=&quot;text/javascript&quot;&gt;
YUI().use('jsonp','node-base',function(Y){
	var handler = function(response){
		var s = '';
			for(var i=0;i&lt;response.length;i++){
				s +='&lt;li class=&quot;MIB_linedot_1&quot;&gt;';
				s +='&lt;div class=&quot;head_pic&quot;&gt;&lt;img src=&quot;'+response[i].user.profile_image_url+'&quot;&gt;&lt;/div&gt;';
				s +='&lt;divm class=&quot;MIB_feed_c&quot;&gt;&lt;p class=&quot;sms&quot;&gt;&lt;a href=&quot;#&quot;&gt;'+response[i].user.name+'&lt;/a&gt; : '+response[i].text+'&lt;/p&gt;&lt;/div&gt;'
				s +='&lt;/li&gt;';
			}
			Y.one('#weibo').prepend(s);
			Y.jsonp('http://127.0.0.1:8000/stream?callback={callback}',arguments.callee);
		};
		Y.jsonp('http://127.0.0.1:8000/stream?callback={callback}',handler);
	});
&lt;/script&gt;
</pre>
<p>我们看到在浏览器端我们使用JSONP的方式来取得服务器端的数据并执行回调，每次收到服务器端的数据并处理后会再次发起一个JSONP的请求来保持与服务器端的连接。</p>
<p>下面我们看下服务器端的代码是怎么样的，这里不在讲述Node.JS的基础问题，有问题的同学可以去http://nodejs.org查看相关文档和介绍。</p>
<p>首先需要引入Node.JS的相关API</p>
<pre class="brush: plain;">
var http = require('http');
var path = require('path');
var qs = require('querystring');
var fs = require('fs');
var url = require('url');
</pre>
<p>接下来我们要创建一个客户端请求来请求微博openAPI的接口数据。</p>
<pre class="brush: plain;">
var weibo_client = http.createClient(80,'api.t.sina.com.cn');
</pre>
<p>然后创建http服务，发送内容到客户端。</p>
<pre class="brush: plain;">
var server = http.createServer(function(request,response){
	var uri = url.parse(request.url).pathname;
	var callback = qs.parse(url.parse(request.url).query).callback;
	console.log(callback);
	if(uri === '/stream'){
	//定时从api得到需要的数据
	setTimeout(function(){
		var client_request = weibo_client.request('GET','/statuses/public_timeline.json?source=3364481477&amp;count=5',{'host':'api.t.sina.com.cn'});
		//对返回的数据进行处理
		client_request.on('response',function(res){
			var body = '';
			res.on('data',function(data){
				body += data;
			});

			res.on(&quot;end&quot;,function(){
				var weibo = JSON.parse(body);
				if(weibo.length &gt; 0){
					response.writeHead(200,{'Content-Type':'text/javasript'});
					var text = callback + &quot;(&quot;+JSON.stringify(weibo)+&quot;)&quot;;
					console.log(text);
					response.write(text);
					response.end();
				}
			});
		});
		client_request.end();
	},5000);
	}else{
		load_static_file(uri,response);
	}
});
</pre>
<p>在上面的代码中当客户端连接到服务器端请求数据的时候，我们就每隔5秒去请求一次openAPI的接口，获取到最新的5条feed信息，通过监听clientRequest的response事件来获得最新的数据。通过监听clientRequest的end事件对获得的数据转换为JSON格式的字符串并推送到客户端去。</p>
<p>最后我们开启http服务就可以了。</p>
<pre class="brush: plain;">
Server.listen(8000);
</pre>
<p>下面是该程序的所有代码：</p>
<p>Client:</p>
<pre class="brush: plain;">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;weibo stream&lt;/title&gt;
		&lt;link href=&quot;http://img.t.sinajs.cn/t35/style/css/common/index.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; /&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;http://yui.yahooapis.com/3.3.0/build/yui/yui-min.js&quot;&gt;&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;ul id=&quot;weibo&quot; class=&quot;MIB_feed&quot; style=&quot;width:555px;&quot;&gt;&lt;/ul&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
		YUI().use('jsonp','node-base',function(Y){
			var handler = function(response){
			console.log(response);
			var s = '';
			for(var i=0;i&lt;response.length;i++){
				s +='&lt;li class=&quot;MIB_linedot_1&quot;&gt;';
				s +='&lt;div class=&quot;head_pic&quot;&gt;&lt;img src=&quot;'+response[i].user.profile_image_url+'&quot;&gt;&lt;/div&gt;';
				s +='&lt;divm class=&quot;MIB_feed_c&quot;&gt;&lt;p class=&quot;sms&quot;&gt;&lt;a href=&quot;#&quot;&gt;'+response[i].user.name+'&lt;/a&gt; : '+response[i].text+'&lt;/p&gt;&lt;/div&gt;'
				s +='&lt;/li&gt;';
			}
			Y.one('#weibo').prepend(s);
			Y.jsonp('http://127.0.0.1:8000/stream?callback={callback}',arguments.callee);
			};
			Y.jsonp('http://127.0.0.1:8000/stream?callback={callback}',handler);
		});
		&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Server:</p>
<pre class="brush: plain;">
var http = require('http');
var path = require('path');
var qs = require('querystring');
var fs = require('fs');
var url = require('url');

//创建http client服务
var weibo_client = http.createClient(80,'api.t.sina.com.cn');

//读取静态文件
var load_static_file = function(uri,response){
	var filename = path.join(process.cwd(),uri);
	path.exists(filename,function(exists){
		if(!exists){
			response.writeHeader(404,{'Content-Type':'text/plain'});
			response.write('404 Not Found\n');
			response.end();
			return;
		}

		fs.readFile(filename,'binary',function(err,file){
			if(err){
				response.writeHeader(500,{'Content-Type':'text/plain'});
				response.write(err + '\n');
				response.end();
				return;
			}

			response.writeHeader(200);
			response.write(file,'binary');
			response.end();
		});
	});
};

//创建http服务
var server = http.createServer(function(request,response){
	var uri = url.parse(request.url).pathname;
	var callback = qs.parse(url.parse(request.url).query).callback;
	console.log(callback);
	if(uri === '/stream'){
	//定时从api得到需要的数据
	setTimeout(function(){
		var client_request = weibo_client.request('GET','/statuses/public_timeline.json?source=3364481477&amp;count=5',{'host':'api.t.sina.com.cn'});
		//对返回的数据进行处理
		client_request.on('response',function(res){
			var body = '';
			res.on('data',function(data){
				body += data;
			});

			res.on(&quot;end&quot;,function(){
				var weibo = JSON.parse(body);
				if(weibo.length &gt; 0){
					response.writeHead(200,{'Content-Type':'text/javasript'});
					var text = callback + &quot;(&quot;+JSON.stringify(weibo)+&quot;)&quot;;
					console.log(text);
					response.write(text);
					response.end();
				}
			});
		});
		client_request.end();
	},5000);
	}else{
		load_static_file(uri,response);
	}
});

server.listen(8000);
</pre>
<p>该程序在Node.JS v0.4.6版本下测试通过。</p>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=801</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>各浏览器对 window.execScript 方法的支持不同</title>
		<link>http://ued.sina.com/index.php/?p=789</link>
		<comments>http://ued.sina.com/index.php/?p=789#comments</comments>
		<pubDate>Thu, 22 Sep 2011 03:30:02 +0000</pubDate>
		<dc:creator>lixin</dc:creator>
				<category><![CDATA[前端开发]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=789</guid>
		<description><![CDATA[仅 IE 和 Chrome 支持 window.execScript 方法，其他浏览器不支持。IE 和 Chrome 对于此方法中语言类型参数的支持也存在差异。 <a href="http://ued.sina.com/index.php/?p=789">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_09_26_02_32exex.jpg" alt="各浏览器对 window.execScript 方法的支持不同" /><br />
<strong id="standard_reference">问题描述</strong><br />
仅 IE 和 Chrome 支持 window.execScript 方法，其他浏览器不支持。IE 和 Chrome 对于此方法中语言类型参数的支持也存在差异。<br />
<span id="more-789"></span><br />
注：本文所指的Chrome 版本是7.0.552.0 dev，最新版本已经已经不支持该方法</p>
<h2 id="influence">造成的影响</h2>
<p>使用 window.execScript 方法执行一段脚本代码字符串时，在 IE Chrome 浏览器以外的浏览器中可能无法执行，从而造成脚本错误。</p>
<h2 id="impacted_browsers">受影响的浏览器</h2>
<table class="list">
<tbody>
<tr>
<th>所有浏览器</th>
<td></td>
</tr>
</tbody>
</table>
<h2 id="analysis_of_issues">问题分析</h2>
<p>根据 MSDN 中描述，window.execScript 方法会根据提供的脚本语言执行一段脚本代码。window.execScript 方法有两个参数，第一个参数指定被执行的脚本代码段，第二个参数指定脚本代码语言类别 (缺省值为 JScript)。<br />
execScript 方法执行后的代码位于全局作用域下。</p>
<p>更多详细内容参见：<a href="http://msdn.microsoft.com/en-us/library/ms536420%28VS.85%29.aspx">execScript Method </a>。</p>
<p>分析以下代码，看 <strong>window.execScript</strong> 方法在各浏览器的支持情况：</p>
<pre>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;style&gt;
  * { margin:0; padding:0; font:18px 'Trebuchet MS'; }
  table { border-collapse:collapse; }
  table td, table th { border:1px solid black; }
  th { background:#ddd; }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
window.execScript()
&lt;table cellspacing="0" cellpadding="0"&gt;
&lt;script&gt;
  var a, lang = ['<em>JavaScript</em>', '<em>JavaScript1.1</em>', '<em>JavaScript1.2</em>', '<em>JavaScript1.3</em>', '<em>JavaScript1.4</em>', '<em>JScript</em>', '<em>VBS</em>', '<em>VBScript</em>', '<em>abcJavaScriptdef</em>', '<em>Java-Script</em>'];
  for (var i in lang) {
    try {
      a = undefined;
      <span class="hl_1">window.<strong>execScript</strong>('a = 1', lang[i]);</span>
    } catch(ex) {
      a = ex.message;
    }
    document.write('&lt;tr&gt;&lt;th&gt;' + lang[i] + '&lt;/th&gt;&lt;td&gt;' + a + '&lt;/td&gt;&lt;/tr&gt;');
  }
&lt;/script&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>各浏览器执行结果如下：</p>
<table class="compare">
<tbody>
<tr>
<th>脚本语言</th>
<th>IE6 IE7 IE8</th>
<th>Chrome</th>
<th>Firefox Safari Opera</th>
</tr>
<tr>
<th>JavaScript</th>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>JavaScript1.1</th>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>JavaScript1.2</th>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>JavaScript1.3</th>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>JavaScript1.4</th>
<td><span class="hl_1">不支持此语言类型</span></td>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>JScript</th>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持此语言类型</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>VBS</th>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持此语言类型</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>VBScript</th>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持此语言类型</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>abcJavaScriptdef</th>
<td><span class="hl_1">不支持此语言类型</span></td>
<td><span class="hl_2">支持</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
<tr>
<th>Java-Script</th>
<td><span class="hl_1">不支持此语言类型</span></td>
<td><span class="hl_1">不支持此语言类型</span></td>
<td><span class="hl_1">不支持 execScript</span></td>
</tr>
</tbody>
</table>
<p>可见，</p>
<ul>
<li><em>IE6 IE7 IE8</em> 中，支持脚本语言类型为 <em>JavaScript</em>、<em>JavaScript1.1</em>、<em>JavaScript1.2</em>、<em>JavaScript1.3</em>、<em>JScript</em>、<em>VBS</em>、<em>VBScript</em> 的 <strong>window.execScript</strong> 方法。</li>
<li><em>Chrome</em> 中，浏览器判断脚本语言类型参数中是否包含有完整的 <em>javascript</em> 字符串，为真时支持 <strong>window.execScript</strong> 方法。</li>
<li><em>Firefox Safari Opera</em> 中，浏览器不支持 <strong>window.execScript</strong> 方法。</li>
</ul>
<p class="comment">注: 脚本语言类型参数不区分大小写。</p>
<h2 id="solutions">解决方案</h2>
<p>window.execScript 方法不是所有浏览器都支持，需谨慎使用。若需要在其他不支持 window.execScript 方法的浏览器中达到类似的效果，可以使用 window.eval 方法：</p>
<pre>&lt;script type="text/javascript"&gt;
  var jsCode = "var a = 1;";
  if (window.execScript) {
    window.execScript(jsCode, "JavaScript");
  } else {
    window.eval(jsCode);
  }
&lt;/script&gt;</pre>
<div class="appendix">
<h2>测试环境</h2>
<table class="list">
<tbody>
<tr>
<th>操作系统版本:</th>
<td>Windows 7 Ultimate build 7600</td>
</tr>
<tr>
<th>浏览器版本:</th>
<td>IE6<br />
IE7<br />
IE8<br />
Firefox 3.6.10<br />
Chrome 7.0.552.0 dev<br />
Safari 5.0.2<br />
Opera 10.63</td>
</tr>
</tbody>
</table>
<h2>关键字</h2>
<p><!-- keywords begin --></p>
<p>execScript JScript JavaScript eval window 全局</p>
<p><!-- keywords end --></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=789</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>愈伟大愈偷窃</title>
		<link>http://ued.sina.com/index.php/?p=765</link>
		<comments>http://ued.sina.com/index.php/?p=765#comments</comments>
		<pubDate>Mon, 05 Sep 2011 02:33:10 +0000</pubDate>
		<dc:creator>Wangyang</dc:creator>
				<category><![CDATA[视觉设计]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=765</guid>
		<description><![CDATA[和淘宝还有腾讯的朋友闲聊，不经意的又谈到了抄袭、抄习和抄越这几个有意思的字眼。刚好看到Traci Lepore写的Why Great Designers Steal, and Are Proud of It这篇文章，就整理一下和更多人分享。谢绝转载。 强调一下，毕加索的原话其实是&#8221;Bad artists copy, Good artists steal&#8221;，而不是&#8221;Good artists copy, great artists steal&#8221;。也许大部分人意识到抄袭是可耻的，把bad改成good聊以自慰，但是明显的，我们都承认偷窃是更伟大的。 一切革命性的并且成功的设计都不是来自凭空想象。不管你是否已经意识到，你每天接触到的事物都在影响你的创作。对于优秀的设计师来说，关注和吸收新鲜元素确实会激发他们本身的创造性。但是通常而言，不管你称其为抄袭、模仿或者借鉴，大部分人都只是在复制别人的想法。 而毕加索则是一个偷窃别人使自己作品受益的行家里手。在毕加索博物馆举办的名叫“毕加索窥视德加”的展览，更加印证了这一点。沉浸在巴黎的艺术世界中，模仿他人的作品是非常简单的事情。毕加索和德加在巴黎的工作室相隔仅仅几个街区，所以毕加索的作品更容易受德加的影响。但是毕加索和他的朋友们期待成为伟大的艺术家，所以他们没有对德加的作品进行简单的抄袭，而是不断的学习研究德加的作品，发掘他创作的根本动机和意图，并且以更具创造力的的方式诠释出来。 对于这种做法，德加评价到：他们盯着我，并且从我的口袋里掏东西。德加非常了解这种这种看似偷窃的创新，并且非常赞赏毕加索和他的朋友们的做法。毕加索通过这样的偷窃，把自己的作品提升到一个全新的水准，甚至创造出我们熟知的立体主义画派。 毕加索和他的朋友们想要把他们在艺术上的创新扩大影响，他们意识到必须要一个积极的并且更人性的方式让他们身边的艺术家和艺术的受众了解他们的创新。在当时最有影响力的画贩子沃拉尔的帮助下，通过举办画展、频繁曝光等炒作方式，将人们对法国的浪漫主义和印象派绘画的关注，导向了印象派、野兽派、立体主义等新鲜的绘画形式。也正是重新定向了人们的审美标准，毕加索也开始被人们熟知起来。 同大家争论是毕加索从德加那里获得了创意还是毕加索本身的天分促成他的创新一样，在当今的用户体验领域也存在一些争论。以用户为中心的设计或者以特立独行的天才的构想为中心的设计，哪种方式会产生更多革新的创造？ 苹果的乔布斯和任天堂的宫本茂，都是用户体验领域的大师级人物，他们也是所谓创新独行客的杰出代表。《纽约时报》描述乔布斯，在同事眼中是一个永不妥协的人，苹果产品的构想和原型不是展示给焦点小组或者相关人员，而是由乔布斯和他的团队中的少数成员审查定夺。《纽约客》则写到，在调整游戏的过程中宫本全凭自己个人的好恶和直觉。他要求家人和朋友亲身体验游戏。任天堂根本就不采用焦点小组。在苹果和任天堂，内部人士才有机会对新产品先睹为快，除此之外它们就直接诞生于乔布斯和宫本想法和意见。而用户由于缺乏设计技术和市场洞察力，在产品设计过程中始终被控制一个安全距离之外。 User-Led Innovation Can&#8217;t Create Breakthroughs: Just Ask Apple and Ikea一文中提到，用户主导产品不可能取得完全的创新，甚至会影响到创新的进程。用户的洞察力不足以预测未来的产品需求，过分关注用户的话将会错失革新的机会，甚至会导致产品同质化。但是我认为事实并非如此。苹果和任天堂这样的公司确实是与众不同的，但是这并不意味着他们没有关注用户并且尝试了解用户的情感需求，即便是这些情感没有影响到他们创造的东西。 Jake Truemper在Where Innovation &#8230; <a href="http://ued.sina.com/index.php/?p=765">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_09_05_02_34wangyang.png" alt="愈伟大愈偷窃" /></p>
<p style="color:#999">和淘宝还有腾讯的朋友闲聊，不经意的又谈到了抄袭、抄习和抄越这几个有意思的字眼。刚好看到Traci Lepore写的Why Great Designers Steal, and Are Proud of It这篇文章，就整理一下和更多人分享。谢绝转载。</p>
<p><span id="more-765"></span></p>
<p>强调一下，毕加索的原话其实是&#8221;Bad artists copy, Good artists steal&#8221;，而不是&#8221;Good artists copy, great artists steal&#8221;。也许大部分人意识到抄袭是可耻的，把bad改成good聊以自慰，但是明显的，我们都承认偷窃是更伟大的。</p>
<p>一切革命性的并且成功的设计都不是来自凭空想象。不管你是否已经意识到，你每天接触到的事物都在影响你的创作。对于优秀的设计师来说，关注和吸收新鲜元素确实会激发他们本身的创造性。但是通常而言，不管你称其为抄袭、模仿或者借鉴，大部分人都只是在复制别人的想法。</p>
<p style="text-align:center"><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_09_05_02_281.gif" width="408" height="188"  /></p>
<p>而毕加索则是一个偷窃别人使自己作品受益的行家里手。在毕加索博物馆举办的名叫“毕加索窥视德加”的展览，更加印证了这一点。沉浸在巴黎的艺术世界中，模仿他人的作品是非常简单的事情。毕加索和德加在巴黎的工作室相隔仅仅几个街区，所以毕加索的作品更容易受德加的影响。但是毕加索和他的朋友们期待成为伟大的艺术家，所以他们没有对德加的作品进行简单的抄袭，而是不断的学习研究德加的作品，发掘他创作的根本动机和意图，并且以更具创造力的的方式诠释出来。<br />
对于这种做法，德加评价到：他们盯着我，并且从我的口袋里掏东西。德加非常了解这种这种看似偷窃的创新，并且非常赞赏毕加索和他的朋友们的做法。毕加索通过这样的偷窃，把自己的作品提升到一个全新的水准，甚至创造出我们熟知的立体主义画派。</p>
<p style="text-align:center"><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_09_05_02_282.jpg" width="261" height="276" /></p>
<p>毕加索和他的朋友们想要把他们在艺术上的创新扩大影响，他们意识到必须要一个积极的并且更人性的方式让他们身边的艺术家和艺术的受众了解他们的创新。在当时最有影响力的画贩子沃拉尔的帮助下，通过举办画展、频繁曝光等炒作方式，将人们对法国的浪漫主义和印象派绘画的关注，导向了印象派、野兽派、立体主义等新鲜的绘画形式。也正是重新定向了人们的审美标准，毕加索也开始被人们熟知起来。</p>
<p>同大家争论是毕加索从德加那里获得了创意还是毕加索本身的天分促成他的创新一样，在当今的用户体验领域也存在一些争论。以用户为中心的设计或者以特立独行的天才的构想为中心的设计，哪种方式会产生更多革新的创造？</p>
<p style="text-align:center"><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_09_05_02_283.jpg" width="358" height="236" /></p>
<p>苹果的乔布斯和任天堂的宫本茂，都是用户体验领域的大师级人物，他们也是所谓创新独行客的杰出代表。《纽约时报》描述乔布斯，在同事眼中是一个永不妥协的人，苹果产品的构想和原型不是展示给焦点小组或者相关人员，而是由乔布斯和他的团队中的少数成员审查定夺。《纽约客》则写到，在调整游戏的过程中宫本全凭自己个人的好恶和直觉。他要求家人和朋友亲身体验游戏。任天堂根本就不采用焦点小组。在苹果和任天堂，内部人士才有机会对新产品先睹为快，除此之外它们就直接诞生于乔布斯和宫本想法和意见。而用户由于缺乏设计技术和市场洞察力，在产品设计过程中始终被控制一个安全距离之外。</p>
<p>User-Led Innovation Can&#8217;t Create Breakthroughs: Just Ask Apple and Ikea一文中提到，用户主导产品不可能取得完全的创新，甚至会影响到创新的进程。用户的洞察力不足以预测未来的产品需求，过分关注用户的话将会错失革新的机会，甚至会导致产品同质化。但是我认为事实并非如此。苹果和任天堂这样的公司确实是与众不同的，但是这并不意味着他们没有关注用户并且尝试了解用户的情感需求，即便是这些情感没有影响到他们创造的东西。</p>
<p>Jake Truemper在Where Innovation Belongs in User-Centered Design中提出，用户经常说一些与他们的行动完全相反的事情，所以一个好的用户研究人员应该知道如何更关注用户的行动而不是关注他们在说些什么。用户研究人员的另一重要职责，就是全力了解用户言行不一致的真相。焦点小组之类的以用户为中心的研究，非常关注用户所说的，而没有通过行为去验证，因此在大多数情况下并不是最好的选择。Jake Truemper推荐使用人种学的方法，比如说情境访谈，便于让你真实的体验用户的使用感受。他还推荐使用创造人物角色的方法，这种方法可以通过设计过程的的方式，在你还没有接触到用户的时候仍能与用户保持紧密的联系。</p>
<p>乔布斯说过，苹果商店的员工为公司提供了一扇观察用户习惯和了解用户需求的极佳窗口，他自己也时常访问帕拉奥图市的苹果商店，虽然那不是传统意义的市场研究。而宫本茂则建议游戏设计师们脱离自身思维以用户的角度思考问题，他要求年轻游戏设计师们试着转换左右手玩自己设计的游戏，这样他们就能体验初次接触游戏的人是多么的缺乏经验。可以恭维的说乔布斯和宫本的伟大想法都源自个人的远见和设计，但是绝对不能忽略终端用户参与创意的过程，他们可以是顾客、玩家、读者等等任何角色。伟大的想法、优秀的产品、出色的体验皆来源于一种创造，那就是为另一个人带来有趣的、有用的、有意义创造。用户体验的大师们永远清楚自己的方向是服务他者。</p>
<p style="text-align:center"><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_09_05_02_284.jpg" width="343" height="254" /></p>
<p>在The Creative Habit一书中，Twyla Tharp提出搜寻是寻求创意的第一步，也是探索性的第一步。我们搜寻出的最原始实物都来源于我们的经历——早期的记忆、朋友间的交谈、对周边事物的观察。在进行创造的过程中尽可能的获得启发是非常关键的，你在搜寻时所选择的参照物将形成整个创意过程。在最好的事物之间进行搜寻，你就会自动地提高自己所发现创意的质量。毕加索对德加创作的关于巴黎妓女生活写照的《妓院系列》非常迷恋，他想法设法购买到其中若干单版画；塞尚个人画展的中卖出的第一幅作品黑奴，则是被莫奈买走。愈伟大的艺术家，愈擅长从身边寻求灵感，当然，不仅仅是艺术家懂得这样做。</p>
<p style="text-align:center"><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_09_05_02_285.jpg" width="247" height="308" /></p>
<p>你真的相信如果没有索尼的walkman苹果可以发明ipod出来么，你是否留意过因为随之产生的文化转变？乔布斯本身就是最善抄袭的企业先知。他的独到之处就在于他可以从不同的角度看事物，见人所未见，把别人并不特别在意的事物偷学来，反过来以全新的风貌颠覆世界，创造出无人预期的庞大商业潜能。对于偷窃伟大构想这件事，苹果向来并不感到可耻，而苹果最令人称许的是他们进行“不自我设限”的学习模式，他们不仅向同行偷点子，更多时候他们由异业吸收设计元素。伟大的艺术家和可耻的剽窃者只有精神上的一线之差，懂得如何拾人牙慧又能融会贯通才是创新的关键。</p>
<p>很多设计师都懂得参考他人作品来获得新的设计灵感，是否加入了个人的创见则是区别抄袭与偷窃的首要。如果你真的希望做出优秀的设计，希望你行动起来。也可以尝试着偷窃，毕竟很多大师都含蓄的表达了抄袭的重要性。或许你已经这样做了，并且取得了不错的成绩，那么我在文章的结尾加注这样一句，创造的一大秘诀是要懂得如何隐藏你的来源——爱因斯坦。</p>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=765</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>HTML5标签使用的常见误区</title>
		<link>http://ued.sina.com/index.php/?p=726</link>
		<comments>http://ued.sina.com/index.php/?p=726#comments</comments>
		<pubDate>Thu, 11 Aug 2011 05:40:20 +0000</pubDate>
		<dc:creator>Alon Guo</dc:creator>
				<category><![CDATA[网页重构]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=726</guid>
		<description><![CDATA[最近组内进行HTML5标签的学习,方法呢就是大家每人挑选几个标签,自己先去学习,然后给大家作讲解.这个过程大家还是挺有收获的.但是现在HTML5还处在草案阶段,有些新的标签元素的解释也是经常有变化,甚至标签加入移出也很频繁(比如 hgroup),同时现有的大的门户网站在使用HTML5方面也没有很好的范例可以参考,让大家的学习过程更摸索.下面是我在 html5doctor 上面看到的一篇文章,在目前大家懵懂的阶段，可能看看大师的讲解会更容易理解。由于才疏学浅,很多不明白的地方可能只是做了字面上的翻译，不对的地方还请大家多多指教。 下面附上原文地址：Avoiding common HTML5 mistakes 作者 :Richard Clark，有疑问的地方大家可以核对英文。 在这篇文章中，我将给大家分享html5构建页面的小错误和不好的实践方法，让我们在以后的工作中避免这些错误。 不要把 &#60;Section&#62; 当成简单的容器来定义样式 我们经常看到的一个错误，就是武断的将&#60;div&#62;标签用&#60;section&#62;标签来替代，特别是将作为包围容器的&#60;div&#62;用&#60;section&#62;来替换。在XHTML或者HTML4中，我们将会看到类似下面的代码： &#60;!-- HTML 4-style code --&#62; &#60;div id=&#34;wrapper&#34;&#62; &#60;div id=&#34;header&#34;&#62; &#60;h1&#62;My super duper page&#60;/h1&#62; &#60;!-- Header content --&#62; &#60;/div&#62; &#60;div id=&#34;main&#34;&#62; &#60;!-- Page content --&#62; &#8230; <a href="http://ued.sina.com/index.php/?p=726">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img alt="HTML5标签使用的常见误区" src="http://productdesign-wordpress.stor.sinaapp.com/2011_08_12_07_53mistake2.jpg"/>最近组内进行HTML5标签的学习,方法呢就是大家每人挑选几个标签,自己先去学习,然后给大家作讲解.这个过程大家还是挺有收获的.但是现在HTML5还处在草案阶段,有些新的标签元素的解释也是经常有变化,甚至标签加入移出也很频繁(比如 hgroup),同时现有的大的门户网站在使用HTML5方面也没有很好的范例可以参考,让大家的学习过程更摸索.下面是我在 html5doctor 上面看到的一篇文章,在目前大家懵懂的阶段，可能看看大师的讲解会更容易理解。由于才疏学浅,很多不明白的地方可能只是做了字面上的翻译，不对的地方还请大家多多指教。<br />
下面附上原文地址：<a href="http://html5doctor.com/avoiding-common-html5-mistakes/" target="_blank">Avoiding common HTML5 mistakes </a> 作者 :<a rel="author" title="Posts by Richard Clark" href="http://html5doctor.com/author/richc/" target="_blank">Richard Clark</a>，有疑问的地方大家可以核对英文。<span id="more-726"></span></p>
<p>在这篇文章中，我将给大家分享html5构建页面的小错误和不好的实践方法，让我们在以后的工作中避免这些错误。</p>
<h3 style="font-weight:bold;">不要把 &lt;Section&gt;  当成简单的容器来定义样式</h3>
<p>我们经常看到的一个错误，就是武断的将&lt;div&gt;标签用&lt;section&gt;标签来替代，特别是将作为包围容器的&lt;div&gt;用&lt;section&gt;来替换。在XHTML或者HTML4中，我们将会看到类似下面的代码：</p>
<pre class="brush: plain;">
&lt;!-- HTML 4-style code --&gt;
&lt;div id=&quot;wrapper&quot;&gt;
  &lt;div id=&quot;header&quot;&gt;
    &lt;h1&gt;My super duper page&lt;/h1&gt;
    &lt;!-- Header content --&gt;
  &lt;/div&gt;
  &lt;div id=&quot;main&quot;&gt;
    &lt;!-- Page content --&gt;
  &lt;/div&gt;
  &lt;div id=&quot;secondary&quot;&gt;
    &lt;!-- Secondary content --&gt;
  &lt;/div&gt;
  &lt;div id=&quot;footer&quot;&gt;
    &lt;!-- Footer content --&gt;
  &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>现在我看到了下面的代码样子：</p>
<pre class="brush: plain;">
&lt;!-- Don’t copy this code! It’s wrong! --&gt;
&lt;section id=&quot;wrapper&quot;&gt;
  &lt;header&gt;
    &lt;h1&gt;My super duper page&lt;/h1&gt;
    &lt;!-- Header content --&gt;
  &lt;/header&gt;
  &lt;section id=&quot;main&quot;&gt;
    &lt;!-- Page content --&gt;
  &lt;/section&gt;
  &lt;section id=&quot;secondary&quot;&gt;
    &lt;!-- Secondary content --&gt;
  &lt;/section&gt;
  &lt;footer&gt;
    &lt;!-- Footer content --&gt;
  &lt;/footer&gt;
&lt;/section&gt;
</pre>
<p>直观的看，上面的例子是错误的：&lt;section&gt; 并不是一个容器.&lt;section&gt;元素是有语意的区段，帮助构建文档大纲。它应该包含标题。如果你要寻找一个可以包含页面的元素（不论是 HTML 或者 XHTML ），通常的做法是直接对&lt;body&gt;标签定义样式就像<a href="http://camendesign.com/code/developpeurs_sans_frontieres">Kroc Camen</a>描述的那样子，如果你还需要额外的元素来定义样式，使用&lt;div&gt;,就像<a href="http://html5doctor.com/div">Dr Mike </a>阐述的那样, div并没有灭亡，如果这里没有其它更合适的，div可能是你最合适的选择。<br />
记住这点，这里我们重新修正了上面的例子，通过使用两个新角色。（你是否需要额外的&lt;div&gt;取决于你的设计。）</p>
<pre class="brush: plain;">
&lt;body&gt;
  &lt;header&gt;
    &lt;h1&gt;My super duper page&lt;/h1&gt;
    &lt;!-- Header content --&gt;
  &lt;/header&gt;
  &lt;div role=&quot;main&quot;&gt;
    &lt;!-- Page content --&gt;
  &lt;/div&gt;
  &lt;aside role=&quot;complementary&quot;&gt;
    &lt;!-- Secondary content --&gt;
  &lt;/aside&gt;
  &lt;footer&gt;
    &lt;!-- Footer content --&gt;
  &lt;/footer&gt;
&lt;/body&gt;
</pre>
<p>如果你还是无法确定哪一个元素更适合使用，我建议你去查看<a href="http://html5doctor.com/flowchart">HTML5 sectioning content element flowchart</a>来让你继续前行。</p>
<h3 style="font-weight:bold;">只在需要的时候使用 &lt;hgroup&gt;和&lt;header&gt;标签</h3>
<p>使用标记的时候写入了一些并不需要的现象这是不合理的。不幸的是，经常发现大家在并不需要的地方使用&lt;header&gt;和&lt;hgroup&gt;标签。你可以跟进我们关于&lt;header&gt;和&lt;hgroup&gt;的最新进展，下面是我的简单归纳：</p>
<ul>
<li>&lt;header&gt;元素通常是通常作为一组解释或者导航辅助工具,通常包含section的标题.</li>
<li>&lt;hgroup&gt;元素会将当有副标题\子标题,各类标识文字时,对&lt;h1&gt;到&lt;h6&gt;标题进行群组,将其作为section的标题.</li>
</ul>
<h4>过度使用的&lt;header&gt;</h4>
<p>你肯定知道,在一个文档中,可以使用多次&lt;header&gt;标签,下面就是一种很受大家欢迎的模式:</p>
<pre class="brush: plain;">
&lt;!-- Don’t copy this code! No need for header here --&gt;
&lt;article&gt;
  &lt;header&gt;
    &lt;h1&gt;My best blog post&lt;/h1&gt;
  &lt;/header&gt;
  &lt;!-- Article content --&gt;
&lt;/article&gt;
</pre>
<p>如果你的&lt;header&gt;标签只包含一个标题元素时,就不要使用&lt;header&gt;标签了.&lt;article&gt;标签肯定会让你的标题在文档大纲中显现出来,而且因为&lt;header&gt;并不包含多重内容(就像定义中描述的那样子),我们为何要增加而外的代码呢?应该像下面这样简单才可以:</p>
<pre class="brush: plain;">
&lt;article&gt;
  &lt;h1&gt;My best blog post&lt;/h1&gt;
  &lt;!-- Article content --&gt;
&lt;/article&gt;
</pre>
<h4>&lt;hgroup&gt;不合理使用</h4>
<p>在标题的这个主题上,经常看到使用&lt;hgroup&gt;的错误案例.在下面这种情况下你不能将&lt;header&gt;标签和&lt;hgroup&gt;标签一起使用:</p>
<ul>
<li>这里只有一个标题,</li>
<li>或者&lt;hgroup&gt;本身就够了(比如:不需要&lt;hgroup&gt;)</li>
</ul>
<p>第一种情形看上去是下面的样子:</p>
<pre class="brush: plain;">
&lt;!-- Don’t copy this code! No need for hgroup here --&gt;
&lt;header&gt;
  &lt;hgroup&gt;
    &lt;h1&gt;My best blog post&lt;/h1&gt;
  &lt;/hgroup&gt;
  &lt;p&gt;by Rich Clark&lt;/p&gt;
&lt;/header&gt;
</pre>
<p>这种情况下,将&lt;hgroup&gt;移除,只保留标题就好.</p>
<pre class="brush: plain;">
&lt;header&gt;
  &lt;h1&gt;My best blog post&lt;/h1&gt;
  &lt;p&gt;by Rich Clark&lt;/p&gt;
&lt;/header&gt;
</pre>
<p>第二种情况也是包含了他们并不需要的标签.</p>
<pre class="brush: plain;">
&lt;!-- Don’t copy this code! No need for header here --&gt;
&lt;header&gt;
  &lt;hgroup&gt;
    &lt;h1&gt;My company&lt;/h1&gt;
    &lt;h2&gt;Established 1893&lt;/h2&gt;
  &lt;/hgroup&gt;
&lt;/header&gt;
</pre>
<p>当&lt;header&gt;标签的子元素只有&lt;hgroup&gt;的时候,为什么我们还需要一个额外的&lt;header&gt;?如果没有额外的元素放到&lt;header&gt;中(比如&lt;hgroup&gt;的兄弟元素),我们直接将&lt;header&gt;元素去掉就好.</p>
<pre class="brush: plain;">
&lt;hgroup&gt;
  &lt;h1&gt;My company&lt;/h1&gt;
  &lt;h2&gt;Established 1893&lt;/h2&gt;
&lt;/hgroup&gt;
</pre>
<h3 style="font-weight:bold;">不要将所有的链接列表都放到&lt;nav&gt;标签</h3>
<p>在HTML5新增的30个元素中(在我们写这篇文章的时候),我们在构建更具语义\结构化的标签的时候,我们的选择变得太丰富.也就是说我们对现在给我们提供的这些超级有语义的标签,我们可能会滥用.&lt;nav&gt;就是一个很悲剧的例子.在规范中的描述是这样的:</p>
<blockquote><p>The nav element represents a section of a page that links to other pages or to parts within the page: a section with navigation links.</p>
<p>Note: Not all groups of links on a page need to be in a nav element — the element is primarily intended for sections that consist of major navigation blocks. In particular, it is common for footers to have a short list of links to various pages of a site, such as the terms of service, the home page, and a copyright page. The footer element alone is sufficient for such cases; while a nav element can be used in such cases, it is usually unnecessary.<br />
WHATWG HTML spec</p></blockquote>
<p>这里面的关键词是&#8221;重要&#8221;导航.我们可能会对&#8221;重要&#8221;有不同的定义,但是我的理解是:</p>
<ul>
<li>主要导航</li>
<li>网站搜索</li>
<li>二级导航(这个能是有争议的)</li>
<li>页面内链接(比如一篇很长的文章)</li>
</ul>
<p>虽然并没有对错之分,但根据我的理解和一个民意投票让我觉得在下面这些情形下,我不会使用&lt;nav&gt;标签:</p>
<ul>
<li>翻页</li>
<li>社交类的链接（虽然有些社交类的链接也是主要的链接，比如关于我<a href="http://about.me">About me</a>和品味<a href="http://flavours.me">Flavours</a> ）</li>
<li>博客文章的标签</li>
<li>博客文章的分类列表</li>
<li>第三级导航</li>
<li>大页脚</li>
</ul>
<p>如果你不能确定是否使用&lt;nav&gt;，那就先对你问一下下面的几个问题：“者是否是一个主要链接？”，你可以根据下面的几个因素来回答你刚才的问题：</p>
<ul>
<li>如果用&lt;section&gt;和标题标签能够解决你的问题，那就不要去使用&lt;nav&gt;&#8211;<a href="http://krijnhoetmer.nl/irc-logs/whatwg/20091209#l-480">Hixie on IRC</a></li>
<li>你是不是为了增加可访问性而增加的一个快捷跳转链接呢？</li>
</ul>
<p>如果上面的回答都是“不”，那可能就不适合使用&lt;nav&gt;.</p>
<h3 style="font-weight:bold;">&lt;figure&gt;元素的错误</h3>
<p>&lt;figure&gt;和经常与它合伙作案的&lt;figcaption&gt;，是很难掌握的标签，下面是经常看到的一些小错误。</p>
<h4>并不是所有的图片都是figure（注：比较难理解阿，image=图片，figure=图形）</h4>
<p>之前，我曾经说过不要写那些不需要的标签。这个错误也是相同的。我经常看到一个网站上的每张图片都有&lt;figure&gt;标签。这些额外增加的标签并不会给你带来任何的益处，并且还增加了你自己的工作强度和让自己的内容变得更难理解。<br />
在规范中关于&lt;figure&gt;的解释如下：“某些流内容，可以有标题，自我包含并且通常作为一个单元独立于内文档流之外。”在那里有完美的表述，就是它可以被从主内容中移除&#8211;比如放到边拦，而对文档流没有影响。<br />
如果仅仅是一张表现类的图片而且和文档中其他的内容没有关系的话，那就不需要使用&lt;figure&gt;.&#8221;这张图片需要对上下文的内容作出解释吗？&#8221;，如果答案是&#8221;否&#8221;，那就可能不是&lt;figure&gt;(可能是&lt;aside&gt;),&#8221;我能把它移到附录里面吗？&#8221;，如果这两个问题的答案都是&#8221;是&#8221;，那就可能是&lt;figure&gt;.</p>
<h4>你的标志不是一个&lt;figure&gt;</h4>
<p>将上面的延伸开来，对你的logo也是这样。下面是两组我找到的有规律的代码片断：</p>
<pre class="brush: plain;">
&lt;!-- Don’t copy this code! It’s wrong! --&gt;
&lt;header&gt;
  &lt;h1&gt;
    &lt;figure&gt;
      &lt;img src=&quot;/img/mylogo.png&quot; alt=&quot;My company&quot; class=&quot;hide&quot; /&gt;
    &lt;/figure&gt;
    My company name
  &lt;/h1&gt;
&lt;/header&gt;
&lt;!-- Don’t copy this code! It’s wrong! --&gt;
&lt;header&gt;
  &lt;figure&gt;
    &lt;img src=&quot;/img/mylogo.png&quot; alt=&quot;My company&quot; /&gt;
  &lt;/figure&gt;
&lt;/header&gt;
</pre>
<p>这里就不需要说啥了，这是很明显的错误，可能你认为我们说的是不是将logo放在H1标签里面，但是我们在这里并不讨论这个问题。让我们迷惑的是&lt;figure&gt;元素。&lt;figure&gt;标签只用在当有上下文需要说明或者被&lt;section&gt;包围的时候。我这里要说的是你的logo可能很少会被这种情况下使用。很简单，那就不要去这样做，你需要的仅仅是下面的样子。</p>
<pre class="brush: plain;">
&lt;header&gt;
  &lt;h1&gt;My company name&lt;/h1&gt;
  &lt;!-- More stuff in here --&gt;
&lt;/header&gt;
</pre>
<h4>figure只能用在标签上的误解</h4>
<p>另一个对&lt;figure&gt;的误解就是我们通常认为它只能用在图片上面。事实上并不是这样子的，它可以被用在 &lt;video&gt;&lt;audio&gt;, 一个图标 (比如&lt;SVG&gt;, ), 一个引用, 一个表格, 一段代码, 一段散文, 或者任何和这些相关的组合. 不要把你的&lt;figure&gt;标签仅仅局限在图片上。我们网页制作师的任务就是用标签更准确的描述内容。<br />
这里有一篇更深入讲解 &lt;figure&gt;的文章<a href="http://html5doctor.com/figure">I wrote about <code><span class="tag">&lt;figure&gt;</span></code></a>，很值得阅读的。</p>
<h3 style="font-weight:bold;">不要去使用那些不必要的type属性</h3>
<p>这可能是我们最常见的一些问题，它们并不是真正的错误，但我觉得我们的最好实践还是尽量避免这种模式。<br />
在HTML5中，我们并不需要给&lt;script&gt;和&lt;script&gt;增加 type 属性，如果这些从CMS默认添加的内容中移出是很痛苦的事情，那当你手工编码的时候还写入它们或者你能完全的控制你的模板时候你完全可以删掉它们。因为所有的浏览器都会将&lt;script&gt;解析成Javascript和&lt;css&gt;标签是CSS，你不再需要那个type属性了：</p>
<pre class="brush: plain;">
&lt;!-- Don’t copy this code! It’s attribute overload! --&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css/styles.css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/scripts.js&quot;&gt;&lt;/script&gt;
</pre>
<p>现在我们可以写成下面的样子：</p>
<pre class="brush: plain;">
&lt;link rel=&quot;stylesheet&quot; href=&quot;css/styles.css&quot; /&gt;
&lt;script src=&quot;js/scripts.js&quot;&gt;&lt;/script&gt;
</pre>
<p>你也能够对编码的设置作出省略。Mark Pilgrim在Dive into HTML5的语义化一章中作出了解释。</p>
<h3 style="font-weight:bold;">不要包含错误的表单属性</h3>
<p>你可能发现&lt;html5&gt;引入了很多新的表单属性。现在我就给大家讲讲一些不合适的使用。</p>
<h4>布尔值属性</h4>
<p>新引入的标签属性有几个是布尔类型的，它们的标签行为基本接近。这些属性包括：</p>
<ul>
<li>autofocus</li>
<li>autocomplete</li>
<li>required</li>
</ul>
<p>坦白的说，下面的这种情况对我来说并不常见，但我们从 required 作为例子，如下：</p>
<pre class="brush: plain;">
&lt;!-- Don’t copy this code! It’s wrong! --&gt;
&lt;input type=&quot;email&quot; name=&quot;email&quot; required=&quot;true&quot; /&gt;
&lt;!-- Another bad example --&gt;
&lt;input type=&quot;email&quot; name=&quot;email&quot; required=&quot;1&quot; /&gt;
</pre>
<p>基本上看，这段代码并不会带来危害。客户端对 HTML的解析遇到 required 标签属性时，他的功能就会生效。但是当我们将代码修改，录入 required=&#8221;false&#8221; 的情况呢？</p>
<pre class="brush: plain;">
&lt;!-- Don’t copy this code! It’s wrong! --&gt;
&lt;input type=&quot;email&quot; name=&quot;email&quot; required=&quot;false&quot; /&gt;
</pre>
<p>解析的时候依然会遇到 required 属性，虽然你希望加入的行为是 假，它依然会被解析成 真。<br />
这里有三种合理的方法让布尔值生效。（第二种和第三种方案只有你在写 XHTML 解析的时候需要）<br />
我们上面的例子可以写成下面的样子：</p>
<pre class="brush: plain;">
&lt;input type=&quot;email&quot; name=&quot;email&quot; required /&gt;
</pre>
<p>总结<br />
对我来说，我无法将所以得蹩脚的代码模式都展示在这里，但是上面说的这些都是我们经常遇到的。</p>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=726</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>使用css的类名交集复合选择器</title>
		<link>http://ued.sina.com/index.php/?p=687</link>
		<comments>http://ued.sina.com/index.php/?p=687#comments</comments>
		<pubDate>Thu, 21 Jul 2011 02:42:49 +0000</pubDate>
		<dc:creator>Nikai</dc:creator>
				<category><![CDATA[网页重构]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=687</guid>
		<description><![CDATA[首先先看一下基本定义： 复合选择器就是两个或多个基本选择器，通过不同方式连接而成的选择器，主要包括“交集”选择器、“并集”选择器、“后代”选择器。 交集选择器 &#8220;交集&#8221;复合选择器是由两个选择器直接连接构成，其结果是选中二者各自元素范围的交集。其中第一个必须是标记选择器，第二个必须是类别选择器或者ID选择器。这两个选择器之间不能有空格，必须连续书写。 注意其中第一个必须是标记选择器，如p.class1，但有时候会看到.class1.class2，即2个都是类选择器，在其他浏览器中是允许出现这种情况的，但IE6不兼容。如下表： 两个类选择器的“交集”复合选择器浏览器支持表 Mac: Safari 4.0 支持 Mac: Chrome 5.0 支持 Mac: FireFox 3.6 支持 Mac: Opera 10 支持 Win: FireFox 3.6 支持 Win: Opera 10 支持 Win: IE6 不支持 Win: IE7 支持 Win: IE8 支持 复合选择器的使用 &#8230; <a href="http://ued.sina.com/index.php/?p=687">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_21_03_13fuhe.jpg" alt="" /></p>
<h3>首先先看一下基本定义：</h3>
<p>复合选择器就是两个或多个基本选择器，通过不同方式连接而成的选择器，主要包括“交集”选择器、“并集”选择器、“后代”选择器。</p>
<p><span id="more-687"></span></p>
<h4>交集选择器</h4>
<p>&#8220;交集&#8221;复合选择器是由两个选择器直接连接构成，其结果是选中二者各自元素范围的交集。其中第一个必须是标记选择器，第二个必须是类别选择器或者ID选择器。这两个选择器之间不能有空格，必须连续书写。</p>
<p>注意其中第一个必须是标记选择器，如p.class1，但有时候会看到.class1.class2，即2个都是类选择器，在其他浏览器中是允许出现这种情况的，但IE6不兼容。如下表：</p>
<table summary="browser support chart">
<caption>两个类选择器的“交集”复合选择器浏览器支持表</caption>
<tbody>
<tr>
<th>Mac: Safari 4.0</th>
<td>支持</td>
</tr>
<tr>
<th>Mac: Chrome 5.0</th>
<td>支持</td>
</tr>
<tr>
<th>Mac: FireFox 3.6</th>
<td>支持</td>
</tr>
<tr>
<th>Mac: Opera 10</th>
<td>支持</td>
</tr>
<tr>
<th>Win: FireFox 3.6</th>
<td>支持</td>
</tr>
<tr>
<th>Win: Opera 10</th>
<td>支持</td>
</tr>
<tr>
<th>Win: IE6</th>
<td class="no"><strong>不支持</strong></td>
</tr>
<tr>
<th>Win: IE7</th>
<td>支持</td>
</tr>
<tr>
<th>Win: IE8</th>
<td>支持</td>
</tr>
</tbody>
</table>
<h3>复合选择器的使用</h3>
<p>这是个简单的tab菜单：</p>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_21_02_39eg1.png" alt="" /></p>
<p>如下是html代码:</p>
<pre class="brush: plain;">
&lt;ul class=&quot;nav&quot;&gt;
    &lt;li class=&quot;first&quot;&gt;&lt;a href=&quot;&quot;&gt;节目&lt;/a&gt;&lt;/li&gt;
    &lt;li class=&quot;current&quot;&gt;&lt;a href=&quot;&quot;&gt;合集&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;&quot;&gt;草稿&lt;/a&gt;&lt;/li&gt;
    &lt;li class=&quot;last&quot;&gt;&lt;a href=&quot;&quot;&gt;项目&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>为了实现以上效果，我们在css中可以使用复合选择器。</p>
<h3>选择<code>&lt;a&gt;</code> 标签</h3>
<p>可以用一个选择器来定义所有的 <code>&lt;a&gt;</code> 元素, 如下:</p>
<pre><code>.nav li a { }</code></pre>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_21_02_39eg2.png" alt="" /></p>
<h3>选择第一个 <code>&lt;a&gt;</code> 元素</h3>
<p>为了增加列表左上角的圆角效果, 你需要选择第一个 <code>&lt;a&gt;</code> 元素. 这可以用如下的选择器来实现:</p>
<pre>.nav li.first a { }</pre>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_21_02_39eg3.png" alt="" /></p>
<h3>选择最后一个 <code>&lt;a&gt;</code> 元素</h3>
<p>为了增加列表右上角的圆角效果, 你需要选择最后一个 <code>&lt;a&gt;</code> 元素. 这可以用如下的选择器来实现:</p>
<pre>.nav li.last a { }</pre>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_21_02_39eg4.png" alt="" /></p>
<h3>突出显示当前页</h3>
<p>通过改变tab的颜色来显示页面是当前页，我们可以在类名中加入current这个类名来实现，如下：</p>
<pre>.nav li.current a { }</pre>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_21_02_39eg5.png" alt="" /></p>
<h3>为当前页面的左右上角添加圆角样式</h3>
<p>现在有个问题，第一个和最后一个选项被选中的时候拐角是直角的.为了达到选中时候是当前页的样式，拐角也是圆角效果，我们需要给专门给它们写特殊的选择器，由于现在我们的类名都在同一个元素中，所以我们最终可以用交集复合选择器来实现，如下：</p>
<pre>.nav .first.current a { }
.nav .last.current a { }</pre>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_21_02_39eg6.png" alt="" /></p>
<h3>结果</h3>
<p>这看上去很简单，是不是？就像上面提到的，现在的问题是：IE5和IE6都不支持类名交集复合选择器。IE5和IE6在识别类名时候只会识别最后一个类名。效果如下：</p>
<pre>.nav .first.current a { }
.nav .last.current a { }</pre>
<p>IE5和IE6把这2个选择器解析为：</p>
<pre>.nav .current a { }
.nav .current a { }</pre>
<p>这意味着这些浏览器会给所有的当前页都增加圆角效果，效果如下：</p>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_21_02_39eg7.png" alt="" /></p>
<p>在IE7下也是没问题的，说明IE7也支持类名交集复合选择器。</p>
<h3>解决的办法</h3>
<p>可以给第一个和最后一个li单独加一个current的样式，但这样增加了js的负担。</p>
<pre class="brush: plain;">
&lt;ul class=&quot;nav&quot;&gt;;
    &lt;li class=&quot;first first_current&quot;&gt;&lt;a href=&quot;&quot;&gt;节目&lt;/a&gt;&lt;/li&gt;;
    &lt;li class=&quot;current&quot;&gt;&lt;a href=&quot;&quot;&gt;合集&lt;/a&gt;&lt;/li&gt;;
    &lt;li&gt;&lt;a href=&quot;&quot;&gt;草稿&lt;/a&gt;&lt;/li&gt;;
    &lt;li class=&quot;last last_current&quot;&gt;&lt;a href=&quot;&quot;&gt;项目&lt;/a&gt;&lt;/li&gt;;
&lt;/ul&gt;;
</pre>
<pre>.nav .first_current a { }
.nav .last_current a { }</pre>
<h3>讨论</h3>
<p>有一种方法可以让我们不用在页面中增加像first、last这种多余的类名，那就是使用css3的样式。css3让我们选择元素变得越来越简单，实现头尾效果可用如下效果：</p>
<pre>li:first-of-type a { }
li:last-of-type a { }</pre>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=687</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Scrum 实施经验</title>
		<link>http://ued.sina.com/index.php/?p=641</link>
		<comments>http://ued.sina.com/index.php/?p=641#comments</comments>
		<pubDate>Fri, 08 Jul 2011 09:52:55 +0000</pubDate>
		<dc:creator>LiangDong</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[敏捷开发]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=641</guid>
		<description><![CDATA[Scrum是一种迭代式增量软件开发过程，通常用于敏捷软件开发。Scrum在英语的意思是橄榄球里的争球。
虽然Scrum是为管理软件开发项目而开发的，它同样可以用于运行软件维护团队，或者作为计划管理方法：Scrum of Scrums 。 <a href="http://ued.sina.com/index.php/?p=641">继续阅读 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_08_13_20banner2.jpg" /></p>
<h3><strong>什么是 Scrum ?</strong></h3>
<p>Scrum是一种迭代式增量软件开发过程，通常用于敏捷软件开发。Scrum在英语的意思是橄榄球里的争球。<br />
虽然Scrum是为管理软件开发项目而开发的，它同样可以用于运行软件维护团队，或者作为计划管理方法：Scrum of Scrums 。<span id="more-641"></span><br />
相关线上资料：<br />
<a href="http://zh.wikipedia.org/wiki/Scrum" target="_blank">http://zh.wikipedia.org/wiki/Scrum</a></p>
<h3><strong>角色</strong></h3>
<p>Scrum定义了许多角色，根据猪和鸡的笑话分为两组，猪和鸡：</p>
<p>一天，一头猪和一只鸡在路上散步，鸡看了一下猪说，“嗨，我们合伙开一家餐馆怎么样？”，猪回头看了一下鸡说，“好主意，那你准备给餐馆卖什么呢？”，鸡想了想说“餐馆卖火腿和鸡蛋怎么样？”，“我不这么认为”，猪说，“我全身投入，而你只是参与而已”。</p>
<p>这个笑话挺冷的……不过倒是比较准确的划分了项目参与人员。</p>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_08_11_17pic1.jpg" alt="" width="62" height="62" /><strong> 猪组</strong></p>
<p>猪组的成员是在Scrum过程中全身投入项目的各种角色，他们在项目中承担实际工作。他们有些像上边那个笑话里的猪，要把自己身上的肉贡献出来。</p>
<ul>
<li><strong>产品负责人</strong><br />
产品负责人代表了客户的意愿。这保证了Scrum团队在做从业务角度来说正确的事情。产品负责人编写用户故事，排出优先级，并放入产品订单。</li>
<li><strong>Scrum主管（或促进者）</strong><br />
Scrum主管促进 Scrum过程，他的主要工作是去除那些影响团队交付冲刺目标的障碍。Scrum主管并非团队的领导（因为团队是自我组织的），而是一个负责屏蔽外界对开发团队的干扰的角色。Scrum主管确保Scrum过程被按照初衷使用。Scrum主管是规则的执行者。</li>
<li><strong>开发团队</strong><br />
负责交付产品的团队。一个团队通常由5至9名具有跨职能技能的人（设计者，开发者等）组成，承担实际的开发工作。</li>
</ul>
<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_08_11_20pic2.jpg" alt="" width="73" height="73" /><strong> 鸡组</strong></p>
<p>鸡组的成员并不是实际Scrum过程的一部分，但是必须考虑他们。敏捷方法的一个重要方面是使得用户和利益相关者参与到过程中的时间。参与每一个冲刺的评审和计划，并提供反馈对于这些人来说是非常重要的。</p>
<ul>
<li><strong>用户</strong><br />
软件是为了人而开发的。有人说，“假如森林里有一棵树倒下了，但没有被人听到，那么它算是发出了声音吗？”同样地，人们可以说，“假如软件没有被使用，那么它算是被开发出来了么？”</li>
<li><strong>利益相关者（客户，提供商）</strong><br />
影响项目成功的人，但只直接参与冲刺评审过程。</li>
<li><strong>经理</strong><br />
为产品开发团体搭建环境的人。</li>
</ul>
<p><strong>经验：</strong></p>
<ol>
<li>Scrum主管开发的时间可能不会很多，一般来说也不适合参与开发，因为排解外部干扰，解决项目组障碍都会花去很多零碎时间进行沟通以及其他事务，都会干扰个人的正常开发。</li>
<li>建议不要让开发主力担任Scrum主管，应当由擅长沟通，有较深技术底蕴，对产品比较熟悉或者理解深刻的人员担任。</li>
<li> Scrum主管与开发人员是平级的，身份对等，所做的工作更有点偏向于服务形式。其本身基本上可以看做是一个“人形文档”，项目执行中任何需要产品文档的地方，比如咨询，需求变更，新成员培训等等都由Scrum主管负责。</li>
<li> 对一个项目来讲，Scrum主管非常重要，其他成员可以变更，但绝对要避免Scrum主管的变更。Scrum主管的责任也很庞杂，需要擅长处理并发事件的人来担当此角色。</li>
<li> Scrum的效率核心就是“排除干扰”，开发人员可以为一个项目全力以赴。Scrum主管对干扰的排除能力直接决定了项目执行效率。</li>
<li> 所有的分歧交由Scrum主管来敲定，因此其技术能力与现实业务解决能力不能忽视，应当从开发人员中抽取人员负责此工作。考虑到离开开发岗位一段时间，技术能力会有所退化，建议轮岗。</li>
</ol>
<h3><strong>会议</strong></h3>
<p>在冲刺中，每一天都会举行项目状况会议，被称为“scrum”或“每日站立会议”。每日站立会议有一些具体的指导原则：</p>
<ul>
<li>会议准时开始。对于迟到者团队常常会制定惩罚措施（例如罚款，做俯卧撑，在脖子上挂橡胶鸡玩具）</li>
<li>欢迎所有人参加，但只有&#8221;猪&#8221;可以发言。</li>
<li>不论团队规模大小，会议被限制在15分钟。</li>
<li>所有出席者都应站立。（有助于保持会议简短）</li>
<li>会议应在固定地点和每天的同一时间举行。</li>
</ul>
<p>假设会议定在每天下午下班前，在会议上，每个团队成员需要回答三个问题：</p>
<ol>
<li>今天你完成了那些工作？</li>
<li>明天你打算做什么？</li>
<li>完成你的目标是否存在什么障碍？（Scrum主管需要记下这些障碍）</li>
</ol>
<p>每一个冲刺完成后，都会举行一次冲刺回顾会议，在会议上所有团队成员都要反思这个冲刺。举行冲刺回顾会议是为了进行持续过程改进。</p>
<p>会议的时间限制在4小时。</p>
<p><strong>经验：</strong></p>
<ol>
<li>Scrum会议的核心是：不要太长！应当尽量避免任何可能导致会议延长的事情。</li>
<li>项目开发开始前的会议不要过长，主要确定方向，任务与最关键的技术细节。应提供一个技术预备期供大家分享要使用的技术知识或者制定开发规范。</li>
<li>项目开发正式开始前，必须达成必要的开发共识，必须完成基本的开发约定。每个人并不是只维护自己的代码。</li>
<li>Scrum会议的督促作用非常明显，但也会给成员带来相当的压力。在新版会员中心开发过程中，曾发生成员开发压力过高而离职的事件。Scrum主管有必要注意排解成员压力。</li>
</ol>
<p>下面几点有助于降低成员压力：</p>
<ol>
<li>让开发人员领取自己喜欢和擅长的任务。</li>
<li>项目开始前充分预估时间，务必实事求是，并考虑到成员的开发能力。</li>
<li>开发前（或者日常）最好能进行几次技术培训，避免成员在开发中遇到不熟悉的技术。</li>
</ol>
<h3><strong>冲刺订单</strong></h3>
<ul>
<li>冲刺订单（sprint backlog）是大大细化了的文档，包含团队如何实现下一个冲刺的需求的信息。</li>
<li>任务被分解为以小时为单位，没有任务可以超过16个小时。</li>
<li>如果一个任务超过16个小时，那么它就应该被进一步分解。</li>
<li>冲刺订单上的任务不会被分派，而是由团队成员签名认领他们喜爱的任务。</li>
<li>一个任务分为todo ，开发中，自测，提交测试，完成几个阶段。</li>
</ul>
<p><strong>经验：</strong><br />
WEBIM项目实施白板：<br />
<img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_08_11_32pic3.jpg" alt="" /><br />
左边的用户故事，实际上是对冲刺订单的分类。</p>
<p>订单一开始都在 todo 的下面，每个开发人员到实施白板前，审核还有那些订单在todo当中，从中选择自己喜欢或者相对擅长的订单，写上自己的名字，放在开发中，然后回去开发相应组件。</p>
<p>当组件基本开发完毕，就将订单放在自测栏下面。</p>
<p>如果准备将该组件提交测试，就将订单放在测试栏下面。</p>
<p>如果组件通过测试，就放在完成栏下面。这样一个组件就走完了整个开发流程。</p>
<p>实际开发中发现，由于测试实际上是在所有组件都完成开发后才执行的，所以订单放到自测阶段就基本上可以视为开发完毕，开发人员就应该去领新的订单了。</p>
<p>WEBIM项目中订单用便签实现：<br />
<img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_11_02_352011_07_08_11_35pic4.jpg" alt="" /><br />
WEBIM开发中，每个订单对应的是一个开发组件，标记了组件名称，类别，开发人员，预估时间。对应开发组件模型如下：</p>
<table style="height: 282px" width="319">
<tbody>
<tr>
<td>Name</td>
<td>Events</td>
</tr>
<tr>
<td>Extends</td>
<td></td>
</tr>
<tr>
<td>Property</td>
<td>_$events</td>
</tr>
<tr>
<td>Methods</td>
<td>addEvent<br />
removeEvent<br />
addEvents<br />
removeEvents<br />
fireEvent</td>
</tr>
<tr>
<td>SP</td>
<td>0.25</td>
</tr>
</tbody>
</table>
<p>Name为组件名称，也是开发时的小文件名称。<br />
Extends 为该组件继承自哪一个组件。<br />
Property 为组件应当具有的属性。<br />
Methods 为组件应当具有的方法。<br />
SP 为开发该组件可能的耗时。1SP表示1个工作日（单个成员8个工作时）</p>
<p>项目开始前的集中会议非常重要，需要所有开发成员集中在一起执行。<br />
应当集群体之力一起分析项目，拆解组件，但注意非关键性的细节不要过分追究，避免会议耗时。<br />
应当有一个文档保存所有画出的组件模型。</p>
<h3><strong>燃尽图</strong></h3>
<p>燃尽图可以非常形象的表现项目执行进度。<br />
以下图举例：<br />
<img /><br />
X轴原点为项目开始日期，末端为项目结束日期。每天为一格。<br />
Y轴为预估的工作时。</p>
<ul>
<li>在项目准备会议结束时，冲刺订单已经预备好，就可以统计出预估的总工作时，将其标在Y轴顶部。</li>
<li>每天检查实施白板，确认哪些订单已经完成，然后计算剩下的总工作时，然后在图上标记一个点，点的X位置为第二天的日期，Y位置为剩下的总工作时。</li>
<li>在起点坐标（X为开始日期，Y为总时间）和终点坐标（X为结束日期，Y为0）之间画一条直线，这就是理想状况下的项目完成进度曲线。</li>
<li>在项目执行中，发现曲线高于理想曲线，说明项目有可能延期，需要增派援手，或者催促成员加快进度。如果曲线低于理想曲线，说明项目有可能提前完成。</li>
</ul>
<p><strong>经验：</strong><br />
先看一下WEBIM项目的燃尽图：<br />
<img src='http://productdesign-wordpress.stor.sinaapp.com/2011_07_08_11_45pic5.jpg' /><br />
不可思议的是曲线一开始居然还有个增高。这说明一开始时间预估就不完善，开发中增加了预估时间。</p>
<p>一开始认为订单放到完成，才能从工作时中减去时间，但由于测试实际上是在所有组件开发完成后，所以当订单放在自测，就从工作时中减去时间。</p>
<p>这个图后期并没有完成。实际上是因为项目组件提前在12日都开发完成，但是新的问题出现：组件完成后还有一个联调的时间，未被预估在内。还好最终还是保证了项目按期联调完毕。</p>
<p>燃尽图后期的陡峭往往说明了任务分割与时间估算的不完善。但是有时这不可避免，可以考虑用完成度百分比乘以工作任务，或者将任务分阶段（将预备阶段，开发阶段与测试阶段分开）来平缓燃尽图曲线，达到更细致描绘工作进度的目的。</p>
<p>可以考虑联调前的订单被开发完成了70%，联调完毕才标记为100%，然后从总工作时中减去剩下百分比的时间。</p>
<p>一开始预估完总工作时间后，应当乘以一个系数（大于1，从未预估过时间，建议这个系数接近甚至大于2，否则建议为1.5）。以这个时间为总工作时间，以应付项目执行中可能遇到的突发事件。</p>
<h3><strong>总结</strong></h3>
<p>Scrum 效率相当明显，执行过程中可以使成员中开发速度缓慢的地方被迅速暴露出来，使得项目中可能存在的问题被极早暴露，以便进行针对性的解决。</p>
<p>开发中要求成员有充分的自发性，自己如果能提前完成订单，应当负责起其他订单的开发任务，减轻项目整体的开发负担。</p>
<p>一开始的沟通会议非常重要，必须当面进行沟通会议，不可以有缺席。以保证每个成员对项目的细节都有所了解，可以负责任意一个组件的开发。</p>
<p>Scrum不仅仅用于软件开发，它是一种计划管理方式，适用于被限制时间，需要多人协作的团队项目。</p>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=641</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>T恤的设计与制作</title>
		<link>http://ued.sina.com/index.php/?p=606</link>
		<comments>http://ued.sina.com/index.php/?p=606#comments</comments>
		<pubDate>Thu, 07 Jul 2011 08:39:06 +0000</pubDate>
		<dc:creator>hippo</dc:creator>
				<category><![CDATA[视觉设计]]></category>

		<guid isPermaLink="false">http://ued.sina.com/index.php/?p=606</guid>
		<description><![CDATA[做T的想法很早就有了,一直没有空闲去尝试,直到09年5月的那个夏天终于开始了… 主体形象－hippo81性格简单介绍： 这是一只自恋喜欢幻想,并且经常yy的河马.所有的猥琐,悚等的状态在以后都会通过图形设计表现在河马的身上,最后想达到的一种理想状态就是像HELOO KITY,机器猫那样,让人们承认它是有性格和感情的.这张照片拍摄于2009年12月31日,经历半年之后仍然不被大家认同和接受的一天… 一：T恤图案设计 好了,想法都差不多了,就要开始实施设计制作和推广了. 这张图是在网络上发帖的时候做头图用的,不适合印刷成T恤,颜色太多渐变太丰富. 在图案设计的时候需要注意以下几点 1:图案的设计 图案设计因该简洁,大色块,这样容易出比较好的效果. 颜色不宜使用过多这是受技术限制的原因,丝网印刷的特性.三种颜色就已经很多了,如果是单色印从技术的角度上来说可以保证达到最佳的效果.这样印出来的图案和设计稿会相差无几. 2:图案颜色的选择 尽量使用色相明确的色彩,因为颜色的确定是自己去工厂里面调出来的,一般工厂就提供黑 白 红 黄 绿等色相明确的颜色,比如一些高纯度的我们所谓的高级灰,需要自己去调,这个不好掌控,比如我要一个偏黄的暖灰色,白加黑加橘黄,但是实际调出来却是偏绿的灰色,原因是黑色不是没有色彩偏向的,一般黑色偏普兰,或者深红,结果我那次调的黑色是偏兰的,所以出来就变绿了,而且这种颜色调出来以后,在湿润的情况和凉干的情况下对比也会有色彩差别,在光线不同的地方也会有差别.所以尽量少用需要自己调制的颜色,直接拿工厂里面的颜色就上,还有一些就是工厂里面已经调好的灰色,你看到了实际印到T上面的效果,你觉得可以的话,那就可以直接用了. 以上是为了这次印T而准备的一些自己设计的图案,是从一大批里面选择出来觉得比较靠谱的,制作上不会出乱子的,自己能把握住的一些图. 二：T-SHIRT制作 选择好图案以后就是进入工厂和工人一块制作了.那会一般的工厂是300件起印和打板,因为他们进布料是以匹为单位,做得太少了他们亏本还得浪费布料. 1:衣服面料和版型的选择 版型是比较有学问,虽然T的版型一般比较简单,但是在细节上处理的好坏也会直接影响到T穿在身上是否好看和舒服,俺当时的做法就是去品牌店里面找一件觉得不错的,比较潮点的,买回来,让工厂照着它的版型加工就OK了.切记不要选择毫无版型的T,这样的T一般我们叫他老头衫~~ 衣服的面料:一般用作T的布料都是棉,各种各样的棉,竹签棉,纯棉(精梳和普梳)等,每种棉的质感是不一样的,这个可以根据创作需要去选择.以普通的纯棉为例子,按照重量来分可以分为140克到240克六种,正常情况下选择180到220的,180以下的太薄,比较透,正常光线室外能看到肉色~~240的则太厚,夏天穿着会比较热. 2:图案的印刷 现在普及的印刷技术是丝网和热转印,有些技术可以使颜色渐变过度很自然,颜色也可以很丰富,但是没有普及,还有一些特殊的工艺,比如缝纫什么的,不适合咱们个人来批量印刷,这样成本会大大的加高. 丝网印是比较适合个人批量制作一种方式,这种印刷方式出来的图案比较透气,也不容易被洗掉。 缺点就是不能色彩过于丰富,也不能做细腻的颜色渐变。这种印刷方式的基本流程是根据图案上出现的颜色做版（类似纱窗的东西）, 一个颜色一个版, 有图形的部分在版面上漏口会大一些,方便颜色在刷的时候漏到衣服上.然后手工一个版一个版的叠加刷颜色,最终在衣服上拼出你想要的图案. 大概俺能介绍的经验就这么多了，这个过程虽然会很辛苦，但是当时自己那段时间干劲非常的足，可能是做自己喜欢的事的原因吧。希望以上的一些简单介绍能够帮助到各位想做T的朋友：）]]></description>
			<content:encoded><![CDATA[<p><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_11_04_27t.jpg" alt="T恤的设计与制作" />
<p>做T的想法很早就有了,一直没有空闲去尝试,直到09年5月的那个夏天终于开始了… </p>
<p><span id="more-606"></span></p>
<p>主体形象－hippo81性格简单介绍： <br />
  这是一只自恋喜欢幻想,并且经常yy的河马.所有的猥琐,悚等的状态在以后都会通过图形设计表现在河马的身上,最后想达到的一种理想状态就是像HELOO KITY,机器猫那样,让人们承认它是有性格和感情的.这张照片拍摄于2009年12月31日,经历半年之后仍然不被大家认同和接受的一天…<br /><img src="http://varhi.com/wp-content/uploads/2011/07/1.png" /></p>
<p>一：T恤图案设计 <br />
  好了,想法都差不多了,就要开始实施设计制作和推广了.</p>
<p>这张图是在网络上发帖的时候做头图用的,不适合印刷成T恤,颜色太多渐变太丰富.<br /><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_11_08_022.jpg" /></p>
<p><strong>在图案设计的时候需要注意以下几点 </strong></p>
<p>1:图案的设计 <br />
  图案设计因该简洁,大色块,这样容易出比较好的效果. 颜色不宜使用过多这是受技术限制的原因,丝网印刷的特性.三种颜色就已经很多了,如果是单色印从技术的角度上来说可以保证达到最佳的效果.这样印出来的图案和设计稿会相差无几.<br />
  2:图案颜色的选择 <br />
  尽量使用色相明确的色彩,因为颜色的确定是自己去工厂里面调出来的,一般工厂就提供黑  白 红 黄 绿等色相明确的颜色,比如一些高纯度的我们所谓的高级灰,需要自己去调,这个不好掌控,比如我要一个偏黄的暖灰色,白加黑加橘黄,但是实际调出来却是偏绿的灰色,原因是黑色不是没有色彩偏向的,一般黑色偏普兰,或者深红,结果我那次调的黑色是偏兰的,所以出来就变绿了,而且这种颜色调出来以后,在湿润的情况和凉干的情况下对比也会有色彩差别,在光线不同的地方也会有差别.所以尽量少用需要自己调制的颜色,直接拿工厂里面的颜色就上,还有一些就是工厂里面已经调好的灰色,你看到了实际印到T上面的效果,你觉得可以的话,那就可以直接用了.<br /><img src="http://varhi.com/wp-content/uploads/2011/07/3.jpg" /><img src="http://varhi.com/wp-content/uploads/2011/07/4.jpg" /><br />
<img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_11_08_025.jpg" /><img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_11_08_026.jpg" /><br />
<img src="http://productdesign-wordpress.stor.sinaapp.com/2011_07_11_08_177.jpg" /></p>
<p>以上是为了这次印T而准备的一些自己设计的图案,是从一大批里面选择出来觉得比较靠谱的,制作上不会出乱子的,自己能把握住的一些图.</p>
<p><strong>二：T-SHIRT制作 </strong></p>
<p>选择好图案以后就是进入工厂和工人一块制作了.那会一般的工厂是300件起印和打板,因为他们进布料是以匹为单位,做得太少了他们亏本还得浪费布料.</p>
<p>1:衣服面料和版型的选择 <br />
  版型是比较有学问,虽然T的版型一般比较简单,但是在细节上处理的好坏也会直接影响到T穿在身上是否好看和舒服,俺当时的做法就是去品牌店里面找一件觉得不错的,比较潮点的,买回来,让工厂照着它的版型加工就OK了.切记不要选择毫无版型的T,这样的T一般我们叫他老头衫~~</p>
<p>衣服的面料:一般用作T的布料都是棉,各种各样的棉,竹签棉,纯棉(精梳和普梳)等,每种棉的质感是不一样的,这个可以根据创作需要去选择.以普通的纯棉为例子,按照重量来分可以分为140克到240克六种,正常情况下选择180到220的,180以下的太薄,比较透,正常光线室外能看到肉色~~240的则太厚,夏天穿着会比较热.</p>
<p>2:图案的印刷 <br />
  现在普及的印刷技术是丝网和热转印,有些技术可以使颜色渐变过度很自然,颜色也可以很丰富,但是没有普及,还有一些特殊的工艺,比如缝纫什么的,不适合咱们个人来批量印刷,这样成本会大大的加高.</p>
<p>丝网印是比较适合个人批量制作一种方式,这种印刷方式出来的图案比较透气,也不容易被洗掉。 缺点就是不能色彩过于丰富,也不能做细腻的颜色渐变。这种印刷方式的基本流程是根据图案上出现的颜色做版（类似纱窗的东西）, 一个颜色一个版, 有图形的部分在版面上漏口会大一些,方便颜色在刷的时候漏到衣服上.然后手工一个版一个版的叠加刷颜色,最终在衣服上拼出你想要的图案.<br /><img src="http://varhi.com/wp-content/uploads/2011/07/8.jpg" /><br />
<img src="http://varhi.com/wp-content/uploads/2011/07/9.jpg" /><br />
<img src="http://varhi.com/wp-content/uploads/2011/07/10.jpg" /></p>
<p>大概俺能介绍的经验就这么多了，这个过程虽然会很辛苦，但是当时自己那段时间干劲非常的足，可能是做自己喜欢的事的原因吧。希望以上的一些简单介绍能够帮助到各位想做T的朋友：）</p>
]]></content:encoded>
			<wfw:commentRss>http://ued.sina.com/index.php/?feed=rss2&amp;p=606</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>

