﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Shao Fan-随笔分类-其他</title><link>http://www.blogjava.net/shaofan/category/7890.html</link><description>关于JAVA与软件工程</description><language>zh-cn</language><lastBuildDate>Mon, 14 Mar 2011 00:21:10 GMT</lastBuildDate><pubDate>Mon, 14 Mar 2011 00:21:10 GMT</pubDate><ttl>60</ttl><item><title>关于DOM的另一篇</title><link>http://www.blogjava.net/shaofan/archive/2007/04/01/107803.html</link><dc:creator>shaofan</dc:creator><author>shaofan</author><pubDate>Sun, 01 Apr 2007 10:45:00 GMT</pubDate><guid>http://www.blogjava.net/shaofan/archive/2007/04/01/107803.html</guid><wfw:comment>http://www.blogjava.net/shaofan/comments/107803.html</wfw:comment><comments>http://www.blogjava.net/shaofan/archive/2007/04/01/107803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shaofan/comments/commentRss/107803.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shaofan/services/trackbacks/107803.html</trackback:ping><description><![CDATA[
		<p>DOM (Document Object Model)是一套语言无关的XML解析的接口定义。它定义了在XML解析中需要的类型，方法，以及属性，比如如何获得一个XML标签，如何改变标签的内容，如何改变它的属性，等等。</p>
		<p>DOM只是一个定义，并不是具体的实现，它的目的就是为了让大家在各个平台上都能用相同的方式来处理XML，这样一来，我只要了解DOM，基本上在各个平台上都可以方便的处理XML，而不用重新学习了。比如说，Java, JavaScript, Python都有DOM的实现，用它们来处理XML，方式基本上都是一样的（当然也有非DOM的XML解析方式）。在Java下，实现DOM的类库就有很多，比如JDom,Xerces， 用GOOGLE一搜就一大把。现在Java 5.0内置的就是Xerces。而JavaScript本身就内置了DOM的实现。Python也默认安装了DOM的库。</p>
		<p>正因为DOM致力于实现各个平台上对XML一致的处理方式，它定义了一堆自己的接口。因此在用DOM的时候，会有很多非NATIVE的东东。比如说，返回节点的子节点的方法，childNodes，返回的类型是NodeList。我第一次在Java上用，就以为是返回一个List，然后用get(n)方法来取得某元素。而实际上NodeList是用item(n)的方法来取得某元素的。这就让我觉得很怪。而DOM正是用这种方式来获得“语言无关”的能力的。</p>
		<p>DOM是用IDL(Interface Definition Language)来定义的。完整的定义可以在这里找到 <a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html">http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html</a>。IDL也很容易看懂。定义的1.1节列出了所有的接口。</p>
		<p>这些接口里，最重要而且常用的是Node,NodeList,Document,Element,Text,Attr这几个。DOM把XML文档看作一棵树，树上的每个元素都是Node。每个Node都属于某个类型，比如Element,attribute,text等。这些类型就表明这个节点在XML文档里的类型了。</p>
		<p>比如Node里有个属性：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">  readonly attribute unsigned </span>
				<span style="COLOR: #0000ff">short</span>
				<span style="COLOR: #000000">  nodeType;<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p>根据这个定义，对于取得的节点，我们就可以通过读取nodeType这个属性来判断这个节点的类型。在Java里，所有的属性都是用getter来取得的，因此对某节点n，就可以用n.getNodeType()取得它的类型。Node接口里也定义了类型常量：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">  const unsigned short      ELEMENT_NODE                   = 1;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      ATTRIBUTE_NODE                 = 2;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      TEXT_NODE                      = 3;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      CDATA_SECTION_NODE             = 4;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      ENTITY_REFERENCE_NODE          = 5;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      ENTITY_NODE                    = 6;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      PROCESSING_INSTRUCTION_NODE    = 7;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      COMMENT_NODE                   = 8;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      DOCUMENT_NODE                  = 9;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      DOCUMENT_TYPE_NODE             = 10;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      DOCUMENT_FRAGMENT_NODE         = 11;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  const unsigned short      NOTATION_NODE                  = 12;</span>
		</div>
		<p>用这些常量和和n.getNodeType()的结果比较，就可以知道它是不是某种类型。</p>
		<p>Node接口中也定义了一些方法，比如：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000"> Node     appendChild(in Node newChild)    raises(DOMException);</span>
		</div>
		<p>表明appendChild方法需要一个Node类型的参数，返回一个Node。 具体的说明可以点文档上的链接进去，也很容易看懂。</p>
		<p>Node接口里定义了操纵节点的方法，比如增加子节点，返回父节点，插入新节点，返回节点类型，等等。Document,Element等接口都继承Node接口，因此在它们上面都可以使用操纵节点的方法。</p>
		<p>
				<strong>Document</strong>:代表整个XML文档。所有DOM元素都不能用类似Java里new的方式来生成，而是要通过调用Document里的相应方法来生成。因此它提供了生成诸如Element, Attr, Text的方法。比如createElement, createTextNode, createComment等。它也提供了名为getElementsByTagName的方法，用来通过标签名称来取得其对象。比如getElementByTagName("ul")就可以获得所有ul标签。它也提供一些文档的属性，比如xmlEncoding,inputEncoding等。它的一个属性,documentElement代表文档的根节点。所有对XML元素的操作，基本上都是从Document开始的。</p>
		<p>
				<strong>Element</strong>:代表一个XML标签。它可以有属性，子标签，等。比如&lt;ul id="booklist"&gt;&lt;li&gt;hello&lt;/li&gt;&lt;/ul&gt;。标签ul是一个Element,它有一个属性叫id，属性的值是booklist。它有一个子结点li。li也是一个标签，它也有个子节点hello，是一个Text类型的节点。这个接口提供操纵其标签属性的方法，比如getAttribute,setAttribute,removeAttribute等。它也提供了和Document中一样的getElementsByTagName的方法，用来获得在这个节点下的元素。</p>
		<p>
				<strong>Attr</strong>:代表标签中的属性。比如上面的id。它也是一个Node。它有名字，值，也可以获得它的所属标签。</p>
		<p>
				<strong>Text</strong>:代表一段文字，比如上面的hello，它也一个Node，但比较特殊，它不是直接继承Node，而是继承CharacterData接口，后者继承了Node。但是它不能有子节点。</p>
		<p>用JavaScript给一个例子。假设有一个HTML文档：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;&lt;</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;&lt;</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">Try DOM</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">title</span>
				<span style="COLOR: #0000ff">&gt;&lt;/</span>
				<span style="COLOR: #800000">head</span>
				<span style="COLOR: #0000ff">&gt;&lt;</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ul</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">li</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">hello</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">li</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">li</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">world</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">li</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">ul</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">body</span>
				<span style="COLOR: #0000ff">&gt;&lt;/</span>
				<span style="COLOR: #800000">html</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<p>下面是增加一个li的JavaScript方法：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">ulList </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> document.getElementsByTagName(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">ul</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ul     </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ulList.item(</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />txt    </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> document.createTextNode(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">I am new li</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />li     </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> document.createElement(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">li</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />li.appendChild(txt);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ul.appendChild(li);</span>
		</div>
		<p>用Java来写，是这样：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">NodeList ulList </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> document.getElementsByTagName(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">ul</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Node        ul       </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ulList.item(</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Text          txt      </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> document.createTextNode(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">I am new li</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Element    li        </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> document.createElement(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">li</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />li.appendChild(txt);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />ul.appendChild(li);</span>
		</div>
		<p>可以看到处理方式和数据类型都是一样的。如果要了解更多，可以看看DOM的定义，都是IDL。</p>
<img src ="http://www.blogjava.net/shaofan/aggbug/107803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shaofan/" target="_blank">shaofan</a> 2007-04-01 18:45 <a href="http://www.blogjava.net/shaofan/archive/2007/04/01/107803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux中对不同版本的软件进行管理(update-alternatives)</title><link>http://www.blogjava.net/shaofan/archive/2006/12/25/89801.html</link><dc:creator>shaofan</dc:creator><author>shaofan</author><pubDate>Sun, 24 Dec 2006 17:43:00 GMT</pubDate><guid>http://www.blogjava.net/shaofan/archive/2006/12/25/89801.html</guid><wfw:comment>http://www.blogjava.net/shaofan/comments/89801.html</wfw:comment><comments>http://www.blogjava.net/shaofan/archive/2006/12/25/89801.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/shaofan/comments/commentRss/89801.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shaofan/services/trackbacks/89801.html</trackback:ping><description><![CDATA[<p>我的博客已搬家，请移步到 <a href="http://shao-fan.com/blog">http://shao-fan.com/blog</a> 阅读最新内容！<br />
</p>
<p><br />
</p>
<p>Ubuntu/Debian中的update-alternative用来对系统中不同版本的同个软件进行管理。<br />
比如，系统中可能装有GNU的Java编译器，和SUN的Java编译器。可以用update-alternatives来设置当前使用它们中的哪一个。</p>
<p>它的原理是在/usr/bin中建立一个link，指向/etc/alternatives中的一个文件，而些文件又是一个link，指向当前使用的命令。比如java命令，查看如下：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<span style="color: #000000;">&nbsp;$&nbsp;which&nbsp;java<br />
/usr/bin/java<br />
$&nbsp;ls&nbsp;-l&nbsp;/usr/bin/java<br />
lrwxrwxrwx&nbsp;/usr/bin/java&nbsp;-&gt;&nbsp;/etc/alternatives/java<br />
$&nbsp;ls&nbsp;-l&nbsp;/etc/alternatives/java<br />
lrwxrwxrwx&nbsp;/etc/alternatives/java&nbsp;-&gt;&nbsp;/usr/lib/j2re1.5-sun/bin/java<br />
$&nbsp;ls&nbsp;-l&nbsp;/usr/lib/j2re1.5-sun/bin/java<br />
-rwxr-xr-x&nbsp;/usr/lib/j2re1.5-sun/bin/java</span>
</div>
<p>参数--display可以某个软件的当前配置，如：</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<span style="color: #000000;">&nbsp;$&nbsp;/usr/sbin/update-alternatives&nbsp;--display&nbsp;java<br />
java&nbsp;-&nbsp;status&nbsp;is&nbsp;auto.<br />
link&nbsp;currently&nbsp;points&nbsp;to&nbsp;/usr/lib/j2re1.5-sun/bin/java<br />
/usr/lib/kaffe/bin/java&nbsp;-&nbsp;priority&nbsp;300<br />
slave&nbsp;java.1.gz:&nbsp;/usr/share/man/man1/java.kaffe.1.gz<br />
/usr/lib/j2re1.5-sun/bin/java&nbsp;-&nbsp;priority&nbsp;315<br />
slave&nbsp;java.1.gz:&nbsp;/usr/lib/j2re1.5-sun/man/man1/java.1.gz<br />
Current&nbsp;`best'&nbsp;version&nbsp;is&nbsp;/usr/lib/j2re1.5-sun/bin/java.</span>
</div>
<p>status有auto和manual两种。一旦用户更改了系统的默认设置，它就变为manual。在auto的状态下，系统会根据几套配置的priority来判断当前应该使用哪套配置。</p>
<p>每套配置可以设定多个link，它们被称为slave。上面的例子中，有两套java的配置。一套是/usr/lib/kafe/bin/java，另一套是/usr/lib/j2re1.5-sun/bin/java，它们各有一个slave。在些例中这些slave设置的是java命令的 manual。当更改了配置时，用man命令查看的帮助也会相应更改。</p>
<p>参数--config可以用来更改当前的配置。</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<span style="color: #000000;">&nbsp;$&nbsp;sudo&nbsp;/usr/sbin/update-alternatives&nbsp;--config&nbsp;java&nbsp;<br />
There&nbsp;are&nbsp;2&nbsp;alternatives&nbsp;which&nbsp;provide&nbsp;`java'.<br />
Selection&nbsp;Alternative<br />
-----------------------------------------------<br />
1&nbsp;/usr/lib/kaffe/bin/java<br />
*+&nbsp;2&nbsp;/usr/lib/j2re1.5-sun/bin/java<br />
Press&nbsp;enter&nbsp;to&nbsp;keep&nbsp;the&nbsp;default*,&nbsp;or&nbsp;type&nbsp;selection&nbsp;number:&nbsp;1<br />
Using&nbsp;`/usr/lib/kaffe/bin/java'&nbsp;to&nbsp;provide&nbsp;`java'.</span>
</div>
<p>参数--install用来设置一套新的配置。具体参见 <a href="http://blog.stevenkroon.com/2006/08/29/debian-update-alternatives/">http://blog.stevenkroon.com/2006/08/29/debian-update-alternatives/</a></p>
<img src ="http://www.blogjava.net/shaofan/aggbug/89801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shaofan/" target="_blank">shaofan</a> 2006-12-25 01:43 <a href="http://www.blogjava.net/shaofan/archive/2006/12/25/89801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Firefox无法保存设置的问题</title><link>http://www.blogjava.net/shaofan/archive/2006/07/24/59866.html</link><dc:creator>shaofan</dc:creator><author>shaofan</author><pubDate>Mon, 24 Jul 2006 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/shaofan/archive/2006/07/24/59866.html</guid><wfw:comment>http://www.blogjava.net/shaofan/comments/59866.html</wfw:comment><comments>http://www.blogjava.net/shaofan/archive/2006/07/24/59866.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/shaofan/comments/commentRss/59866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shaofan/services/trackbacks/59866.html</trackback:ping><description><![CDATA[最近Firefox出了点问题。我这里用http proxy上网，连接设置里要设置相应的proxy。但发现每次重启ff，连接设置都被重置为“直接连接”。即使改回“通过proxy连接”，下次重启又被重置了。<br /><br />马上google一把，发现类似的问题大致有两种解决办法：<br />1.进入safe mode，会出现一个对话框，把三个选项都勾上，重启。<br />2.在地址栏输入about:config，会出现所有的配置，把要改的改了即可。<br />3.直接修改prefs.js文件。<br /><br />但这三个方法对偶的FF都不管用。<br /><br />最后的解决方法是，删除<br />C:\Documents and Settings\&lt;user name&gt;\Application Data\Mozilla\Firefox\Profiles\&lt;xxxxxxxx.default&gt;\ <br />下的user.js，然后再修改prefs.js。然后一切都正常了。<br /><br />原来，ff最基本的配置文件是prefs.js。而user.js的优先级应该是比prefs.js高，因此每次重启它都从user.js读取配置。而通过正常途径，如在选项菜单里改设置，无法在user.js里保存（不知道为什么）。所以就造成了每次重启配置被重置的情况，其实就是设置无法被保存。把user.js删掉以后，ff就从prefs.js里读取配置了，而且新的设置也可以正常保存。<br /><br />不管是从选项菜单里修改配置，还是以上的第二种方法，最终的结果都是配置被保存在prefs.js文件里，效果都是一样的。<br /><br />目前已知的会私自修改FF配置的软件只有Hide IP Plantium，而以上情况正是在安装Hide IP Plantium以后出现的。用的时候要注意。<br /><br />相关的讨论在mozillazine里有很多。不得不承认，这类的英文资源要比中文的多得多。看这里的详细讨论：<br /><a target="_blank" href="http://forums.mozillazine.org/viewtopic.php?t=413875&amp;postdays=0&amp;postorder=asc&amp;postsperpage=15&amp;start=15">http://forums.mozillazine.org/viewtopic.php?t=413875&amp;postdays=0&amp;postorder=asc&amp;postsperpage=15&amp;start=15</a><br /><br /><img src ="http://www.blogjava.net/shaofan/aggbug/59866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shaofan/" target="_blank">shaofan</a> 2006-07-24 18:21 <a href="http://www.blogjava.net/shaofan/archive/2006/07/24/59866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>近日学习CSS的一些零碎笔记</title><link>http://www.blogjava.net/shaofan/archive/2006/06/21/54103.html</link><dc:creator>shaofan</dc:creator><author>shaofan</author><pubDate>Tue, 20 Jun 2006 22:22:00 GMT</pubDate><guid>http://www.blogjava.net/shaofan/archive/2006/06/21/54103.html</guid><wfw:comment>http://www.blogjava.net/shaofan/comments/54103.html</wfw:comment><comments>http://www.blogjava.net/shaofan/archive/2006/06/21/54103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shaofan/comments/commentRss/54103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shaofan/services/trackbacks/54103.html</trackback:ping><description><![CDATA[1.理解页面流(flow)，理解几种不同的定位方式：static, relative, absolute等<br />Positioning and other definitions:<a target="_blank" class="" title="" href="http://css.maxdesign.com.au/floatutorial/definitions.htm">http://css.maxdesign.com.au/floatutorial/definitions.htm</a>  <br /><br />2.HTML页面表达内容逻辑，把样式控制写到CSS文件中<br /><br />3.浮动(float)的DIV要配合width属性来用<br /><br />4.怎样控制层的位置：用float，padding，width，height这些属性来控制<br />Float Tutorial: <a target="_blank" class="" title="" href="http://css.maxdesign.com.au/floatutorial/index.htm">http://css.maxdesign.com.au/floatutorial/index.htm</a><br /><br />5.设置可见的border或background-color来帮助排版<br /><br />6.出现内层的DIV跑到外层之外的情况时，可以在外层DIV的&lt;/DIV&gt;前加上一个clear层来解决问题。就是这样：<br />   &lt;div class="container"&gt;<br />    ...<br />    ...<br />    &lt;div class="clear"&gt;&lt;/div&gt;<br />  &lt;/div&gt;<br /><br />  css:<br />  .clear{<br />    clear:both;<br />  }<br /><br />7.样式表的选择符(Selector)：<br />   Type/Class/ID等<br />  Selector Tutorial:<a target="_blank" class="" title="" href="http://css.maxdesign.com.au/selectutorial/index.htm">http://css.maxdesign.com.au/selectutorial/index.htm</a><br /><br />8.关于表单的样式设计：<br />让我们更好的设计表单:浅议Web的表单设计 <a target="_blank" class="" title="" href="http://tech.163.com/06/0529/04/2I8UPHTB0009158Q.html">http://tech.163.com/06/0529/04/2I8UPHTB0009158Q.html</a><br />用CSS制作具有亲和力的表单 作者：greengnn <br /><a target="_blank" class="" title="" href="http://www.jluvip.com/blog/article.asp?id=192">http://www.jluvip.com/blog/article.asp?id=192</a><br /><br />9.各种浏览器对各种标签用不同的方式渲染，如p, h1, ul等，它们会有不同的padding和margin，为了在各种浏览器下都正常的显示，可以把它们清零，如：<br />*{<br />    padding:0;<br />    margin:0;<br />}<br /><br />10.使用list来显示数据或菜单<br />List Tutorial:<br /><a target="_blank" class="" title="" href="http://css.maxdesign.com.au/listamatic/">http://css.maxdesign.com.au/listamatic/</a><br /><a target="_blank" class="" title="" href="http://css.maxdesign.com.au/listamatic2/">http://css.maxdesign.com.au/listamatic2/</a><br /><a target="_blank" class="" title="" href="http://css.maxdesign.com.au/listutorial/">http://css.maxdesign.com.au/listutorial/</a><br /><br />11.关于各种标准，布局，技巧等的网站：<br />网页设计师：<a target="_blank" class="" title="" href="http://www.w3cn.org/">http://www.w3cn.org/</a><br />CSS教程：<a target="_blank" class="" title="" href="http://www.netvtm.com/w3s/css/">http://www.netvtm.com/w3s/css/</a><br />网页制作指导 - 致力于网页制作知识的普及：<a target="_blank" class="" title="" href="http://www.jianzhan8.cn/">http://www.jianzhan8.cn/</a><br />当然还有必不可少的经典论坛blueidea：<a href="http://www.blueidea.com/bbs/list.asp?GroupName=%CD%F8%D2%B3%B1%EA%D7%BC%BB%AF%D7%A8%C0%B8">http://www.blueidea.com/bbs/list.asp?GroupName=%CD%F8%D2%B3%B1%EA%D7%BC%BB%AF%D7%A8%C0%B8</a><img src ="http://www.blogjava.net/shaofan/aggbug/54103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shaofan/" target="_blank">shaofan</a> 2006-06-21 06:22 <a href="http://www.blogjava.net/shaofan/archive/2006/06/21/54103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>休息两周！</title><link>http://www.blogjava.net/shaofan/archive/2006/03/20/36223.html</link><dc:creator>shaofan</dc:creator><author>shaofan</author><pubDate>Mon, 20 Mar 2006 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/shaofan/archive/2006/03/20/36223.html</guid><wfw:comment>http://www.blogjava.net/shaofan/comments/36223.html</wfw:comment><comments>http://www.blogjava.net/shaofan/archive/2006/03/20/36223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shaofan/comments/commentRss/36223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shaofan/services/trackbacks/36223.html</trackback:ping><description><![CDATA[两周休假，不更新咯！休息一下！<img src ="http://www.blogjava.net/shaofan/aggbug/36223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shaofan/" target="_blank">shaofan</a> 2006-03-20 10:30 <a href="http://www.blogjava.net/shaofan/archive/2006/03/20/36223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>易用的界面，简单的一步</title><link>http://www.blogjava.net/shaofan/archive/2006/03/10/34588.html</link><dc:creator>shaofan</dc:creator><author>shaofan</author><pubDate>Thu, 09 Mar 2006 22:39:00 GMT</pubDate><guid>http://www.blogjava.net/shaofan/archive/2006/03/10/34588.html</guid><wfw:comment>http://www.blogjava.net/shaofan/comments/34588.html</wfw:comment><comments>http://www.blogjava.net/shaofan/archive/2006/03/10/34588.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/shaofan/comments/commentRss/34588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shaofan/services/trackbacks/34588.html</trackback:ping><description><![CDATA[<p><font size="2">本文译自</font><a href="http://www.joelonsoftware.com/design/1stDraft/03.html"><font size="2">Joel on Software</font></a><font size="2">，同时发表在其</font><a href="http://local.joelonsoftware.com/mediawiki/index.php/Main_Page"><font size="2">wiki</font></a><font size="2">上。关于作者本人，请看<a href="http://www.joelonsoftware.com/AboutMe.html">这里</a>。由于Joel对于他人对其作品的转载有较严限制，转载及引用者请参阅其声明：</font><a href="http://local.joelonsoftware.com/mediawiki/index.php/Main_Page"><font size="2">Linking, Quotation, and Reprinting</font></a><font size="2">。这是我翻译的第一篇文章，有些地方我也不是很肯定，请多多指正！</font><br><br>(第一稿) </p>
<div style="float: left;"><img style="width: 357px; height: 157px;" src="http://www.joelonsoftware.com/i/head.jpg"></div>
<div style="clear: none;">
<p><br>在飞机控制的设计中，糟糕的可用性会致使飞机发生CFIT：<a href="http://www.flightsafety.org/cfit1.html">可控飞行撞地</a>。 </p>
<p>可能可用性在你的产品中不是那么关键。如果幸运的话，你在可用性设计中的错误可能只会使人失去四肢，或甚至只是拇指。没什么更糟的了。 </p>
<p>事实上，如果极端幸运，那么糟糕的可用性设计除了会使人难受，没有其他后果。用户试着去做一些事情，或者失败，或者挣扎着去用，很直接的后果就是他们会为此感到不悦。在将来的文章里，我会讲讲此事在心理上的原因，但现在，这样说就足够了：使用户不悦的原因，很可能并非完全如你所想。 </p>
<p>可用性，确实是一个“好”设计的核心。在将来，我会花很多时间来讲述这个问题。 </p>
<p>好消息是：我可以很轻松地教你关于可用性设计的话题。让我们开始吧： </p>
<p><i>当一件东西能够以被期待的方式运行，那它就是易用的。</i> </p>
<p>就是这样！这就是关于可用性的一切！像Hillel所说，其它的一切都是解说词。 </p>
<p>让我们来看一个简单的例子。 </p>
<p><br></p>
<p><b>哪个更好用：Windows还是Mac?</b> </p>
<p><br></p>
<p>在为人们设计产品时，有一个假想用户是很有帮助的。所设想的用户越是实际，提供的帮助越大。 </p>
<p>我的假想用户就是彼特。 </p>
<p>有一天，彼特的朋友，吉娜叫他来帮忙。吉娜有一台Macintosh的iBook，因为她喜欢白色的电脑。当彼特坐下开始试着用吉娜的Macintosh时，他很快就感到有点沮丧了。“我讨厌这些东西，”他说。虽然最后成功地帮吉娜解决了问题，他却觉得高兴不起来。“Macintosh的用户界面真是笨拙至极。” </p>
<p>笨拙？为什么会这样说呢？每个人都知道，Macintosh有着优雅易用的用户界面，对不对？难道它不是那种易用性的范例吗？ </p>
<p>好吧。让我们来看看。 </p>
<p>在Macintosh上，如果你想改变窗口的大小，你必须拖它的右下角。而在Windows上，在任何一个边上拖动鼠标，都可以改变窗口大小。当彼特帮吉娜时，他试着拖右侧的边来让窗口变宽。结果，整个窗口都跟着动了，而不是他想要的“改变大小”。 </p>
<p>在Windows上，当出现一个消息框时，你只要按tab键移动焦点到所需的按钮上，然后按一下空格键就可以按到那个按钮。但在Mac上，空格键不起那样的作用。当彼特得到一个警告，他就试着像他过去六年里下意识的做的那样，按空格键来关掉消息框。第一次，机器没有任何反应，他以为是键盘有问题，于是更大力地又按了一次。结果还是一样。最后他只能用鼠标了。这是另一个小小的挫折。 </p>
<p>彼特还习惯用Alt+F4来关闭窗口。在Mac上，这恰恰是用来调整声音音量的。这次，彼特想点击桌面上的IE图标，而这个图标刚好被另一个窗口遮住了一部份。于是他按Alt+F4关闭窗口的同时立即双击图标所在的位置。结果是声音音量变大了，而窗口并未被关掉。而他的双击点在了他想关掉的那个窗口的帮助按钮上，把帮助窗口打开了。好了，他现在需要关闭两个窗口了。 </p>
<p>这也是一个小小的挫折吧，但是，这确实让彼特更加郁闷了。这天结束的时候，彼特的脾气很不好。他试着控制那些东西，却都没有反应。空格键和Alt+F4都“不起作用”----就像它们坏了一样。窗口也不听话，连调整大小都不行。真差劲。就算这些想法都是下意识的，这些“失去控制”的细微感受也最终使他感到不快。“我还是喜欢我自己的电脑”，彼特想，“它被我设置的完美无缺，总能按照我想的方式去运行。而这些Mac真是难用。真是让人不爽。如果Apple这些年多花些心思在MacOS上，而不是搞iPod那些那些玩意，他们的操作系统也不会这么糟糕了。” </p>
<p>好了。我们比彼特清楚。他虽然有这些种种感受，但事实上对Mac用户来说，Mac确实很好用。完全可以用任意键来关闭窗口。微软的程序员很可能觉得，让用户拖动任意边都可以调整窗口大小的功能真的很不错。而Apple程序员很可能认为，拖动任意边来移动窗口位置的功能很有创意。 </p>
<p>那些盲目信仰某种OS的网站上的关于用户界面的争论，都没有说到点子上。Windows更好，是因为给你更多手段来调整窗口大小。那又怎样？这并不是问题所在。真正的问题是，UI是否以用户预期的方式来响应他们的操作。如果不是，那么用户就会觉得他们无法控制它，并觉得自己会难以达成目的。就是这样了。当一件东西能够以被期待的方式运行，那它就是易用的。你可以把这句话反着纹在你的额头上，这样你在镜子里就可以看到它。 </p>
<p>如果你继续关注将来的文章，那么你会发现，我所告诉你的关于可用性设计的一切，都可以追溯到这个简单的法则。如果哪天外星人在你的花园里着陆，把你扔到了名叫Kij8zxwrk的星球，在那里你无法连接到地球的互联网，因为数据包传送到地球所花时间太长导致TCP/IP无法正常工作，那么你所知道的东西也足以让你找到一份相当体面的可用性设计师的工作了。 </p></div><img src ="http://www.blogjava.net/shaofan/aggbug/34588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shaofan/" target="_blank">shaofan</a> 2006-03-10 06:39 <a href="http://www.blogjava.net/shaofan/archive/2006/03/10/34588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>