<?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>长夜浅吟</title>
	<atom:link href="http://orz.yehao.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://orz.yehao.me</link>
	<description>那风中的歌声</description>
	<lastBuildDate>Sat, 04 Sep 2010 14:23:45 +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>VPS新安装Apache上网站乱码的解决</title>
		<link>http://orz.yehao.me/http-and-html-charset-problem-on-vps-with-apache/</link>
		<comments>http://orz.yehao.me/http-and-html-charset-problem-on-vps-with-apache/#comments</comments>
		<pubDate>Sat, 04 Sep 2010 14:22:08 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[乱码]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=143</guid>
		<description><![CDATA[开学季事情多，在电脑旁的时间不太多，没怎么更新～ 今天wg提起我的一个论坛有乱码，我想起来是重装Apache以后默认的配置文件httpd.conf的问题。默认设置里有一行： AddDefaultCharset utf-8 它是作用是让你的网站告诉浏览器强制使用utf-8编码显示文章。而我的论坛由于历史原因(&#62;.&#60;)是采用gbk编码的，浏览器自然就把收到的网页解释成乱码了…只要把找到这行删掉或注释掉就可以了，所谓注释掉就是在前面加个#号。为什么这样就可以了呢？ 技术细节 浏览器首先检查收到的HTTP头Content-Type行，如果这行指定了页面编码，则采用此编码。如果使用了“AddDefaultCharset  xxxxx”，那么浏览器收到的就是： Content-Type: text/html; charset=xxxxx 否则是： Content-Type: text/html 对于后者，即没有在HTTP头中指定页面编码的，浏览器会查找HTML源代码中的这样一行，使用其指定的页面编码： &#60;meta http-equiv="Content-Type" content="text/html; charset=xxxxx" /&#62; 如果再找不到，浏览器会尝试自动猜测页面的编码，或根据浏览器语言和编码设置中使用一种默认编码来解释。]]></description>
			<content:encoded><![CDATA[<p>开学季事情多，在电脑旁的时间不太多，没怎么更新～</p>
<p>今天wg提起我的一个论坛有乱码，我想起来是重装Apache以后默认的配置文件httpd.conf的问题。默认设置里有一行：</p>
<blockquote class="code"><p>AddDefaultCharset utf-8</p></blockquote>
<p>它是作用是让你的网站告诉浏览器强制使用utf-8编码显示文章。而我的论坛由于历史原因(&gt;.&lt;)是采用gbk编码的，浏览器自然就把收到的网页解释成乱码了…只要把找到这行删掉或注释掉就可以了，所谓注释掉就是在前面加个#号。为什么这样就可以了呢？<span id="more-143"></span></p>
<h2>技术细节</h2>
<p>浏览器首先检查收到的HTTP头Content-Type行，如果这行指定了页面编码，则采用此编码。如果使用了“AddDefaultCharset  xxxxx”，那么浏览器收到的就是：</p>
<blockquote class="code"><p>Content-Type: text/html; charset=xxxxx</p></blockquote>
<p>否则是：</p>
<blockquote class="code"><p>Content-Type: text/html</p></blockquote>
<p>对于后者，即没有在HTTP头中指定页面编码的，浏览器会查找HTML源代码中的这样一行，使用其指定的页面编码：</p>
<blockquote class="code"><p>&lt;meta http-equiv="Content-Type" content="text/html; charset=xxxxx" /&gt;</p></blockquote>
<p>如果再找不到，浏览器会尝试自动猜测页面的编码，或根据浏览器语言和编码设置中使用一种默认编码来解释。</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/http-and-html-charset-problem-on-vps-with-apache/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>用插件优化WordPress固定链接</title>
		<link>http://orz.yehao.me/wordpress-permalink-plugins/</link>
		<comments>http://orz.yehao.me/wordpress-permalink-plugins/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 04:08:24 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=130</guid>
		<description><![CDATA[WordPress内置的固定链接定制能力已经可以满足基本的SEO需求了，可是如果你纠结于链接结尾少了个斜杠、不能定制个别页面的链接格式、更换格式后原来的链接都失效了等等等等的问题，可以来看看都有啥插件能帮你个忙。 1、Custom Permalinks 恐怖阿，这个插件允许你为每一篇文章、Page、分类、Tag设置不同的固定链接格式，主要是用作调整个别页面的URL。比如，平时我用/2010/08/post/这样的格式，但是有篇文章特别重要，我可以让它就叫/post/。 安装后，原来只能编辑文章Slug的地方现在可以编辑整串URL了，而分类等自定义URL的位置则是在相应编辑页面的底部多出的一栏： 2、wp slug translate 将你的标题翻译通过Google Translate翻译成英语，从而自动生成Slug。对于一些同学来说是省事儿多了。 3、Permalink Trailing Slash Fixer Wordpress中，如果你文章Permalink的结尾没有斜杠（如采用.html作结尾），那么分类、Page、Tag的Permalink结尾就不会有斜杠，以保持一致。可很多人希望后者保留斜杠结尾，怎么办呢？装一下这个小插件吧。 举个例子，如果安装前格式是： 文章: http://example.com/ sample-post.html 分类: http://example.com/category/my-category Tag: http://example.com/tag/my-tag 存档: http://example.com/2009/05 Page: http://example.com/about 安装后就变成这样了： 文章: http://example.com/ sample-post.html 分类: http://example.com/category/my-category/ Tag: http://example.com/tag/my-tag/ 存档: http://example.com/2009/05/ Page: http://example.com/about/ 4、WP No Category Base Wordpress中分类的默认链接格式是[/category/分类名/]。尽管category这个前缀可以改成别的名字，但一般无法去掉。用了这个插件你就可以彻底去掉分类前缀了。 启用前分类URL格式： /category/my-category/ 启用后分类URL格式： /my-category/ 5、jadedcoder Sticky Permalinks 不管你怎么修改文章别名、分类名、固定链接结构，这个插件都可以保证你的旧链接继续有效。不过，不要因为有了它就老修改固定链接结构哦。 警告：它使用302重定向，会引起“重复内容”问题，应改为301永久重定向。 编辑插件的Jcsp.php，找到 wp_redirect( [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress内置的<a title="Wordpress Permalink SEO" href="http://orz.yehao.me/wordpress-permalink-seo/">固定链接定制</a>能力已经可以满足基本的SEO需求了，可是如果你纠结于链接结尾少了个斜杠、不能定制个别页面的链接格式、更换格式后原来的链接都失效了等等等等的问题，可以来看看都有啥插件能帮你个忙。<span id="more-130"></span></p>
<p><strong><a title="Custom Permalinks" href="http://wordpress.org/extend/plugins/custom-permalinks/">1、Custom Permalinks</a></strong><br />
恐怖阿，这个插件允许你为每一篇文章、Page、分类、Tag设置不同的固定链接格式，主要是用作调整个别页面的URL。比如，平时我用/2010/08/post/这样的格式，但是有篇文章特别重要，我可以让它就叫/post/。</p>
<p>安装后，原来只能编辑文章Slug的地方现在可以编辑整串URL了，而分类等自定义URL的位置则是在相应编辑页面的底部多出的一栏：</p>
<p><a href="http://orz.yehao.me/wp-content/uploads/2010/08/custom1.png"><img class="alignnone size-full wp-image-134" title="Custom Permalinks" src="http://orz.yehao.me/wp-content/uploads/2010/08/custom1.png" alt="Custom Permalinks" width="553" height="273" /></a></p>
<p><strong><a title="wp slug translate" href="http://wordpress.org/extend/plugins/wp-slug/">2、wp slug translate</a></strong><br />
将你的标题翻译通过Google Translate翻译成英语，从而自动生成Slug。对于一些同学来说是省事儿多了。</p>
<p><strong><a title="Permalink Trailing Slash Fixer" href="http://wordpress.org/extend/plugins/permalink-trailing-slash-fixer/">3、Permalink Trailing Slash Fixer</a></strong><br />
Wordpress中，如果你文章Permalink的结尾没有斜杠（如采用.html作结尾），那么分类、Page、Tag的Permalink结尾就不会有斜杠，以保持一致。可很多人希望后者保留斜杠结尾，怎么办呢？装一下这个小插件吧。</p>
<p>举个例子，如果安装前格式是：</p>
<blockquote><p>文章: http://example.com/ sample-post.html<br />
分类: http://example.com/category/my-category<br />
Tag: http://example.com/tag/my-tag<br />
存档: http://example.com/2009/05<br />
Page: http://example.com/about</p></blockquote>
<p>安装后就变成这样了：</p>
<blockquote><p>文章: http://example.com/ sample-post.html<br />
分类: http://example.com/category/my-category/<br />
Tag: http://example.com/tag/my-tag/<br />
存档: http://example.com/2009/05/<br />
Page: http://example.com/about/</p></blockquote>
<p><strong><a title="WP No Category Base" href="http://wordpress.org/extend/plugins/wp-no-category-base/">4、WP No Category Base</a></strong><br />
Wordpress中分类的默认链接格式是[/category/分类名/]。尽管category这个前缀可以改成别的名字，但一般无法去掉。用了这个插件你就可以彻底去掉分类前缀了。</p>
<p>启用前分类URL格式：</p>
<blockquote><p>/category/my-category/</p></blockquote>
<p>启用后分类URL格式：</p>
<blockquote><p>/my-category/</p></blockquote>
<p><strong><a title="jadedcoder Sticky Permalinks" href="http://wordpress.org/extend/plugins/jadedcoder-sticky-permalinks/">5、jadedcoder Sticky Permalinks</a></strong><br />
不管你怎么修改文章别名、分类名、固定链接结构，这个插件都可以保证你的旧链接继续有效。不过，不要因为有了它就老修改固定链接结构哦。</p>
<p><strong>警告：它使用302重定向，会引起“重复内容”问题，应改为301永久重定向。</strong></p>
<p>编辑插件的Jcsp.php，找到</p>
<blockquote class="code"><p>wp_redirect( '/' . $permalink );</p></blockquote>
<p>修改为</p>
<blockquote><p>wp_redirect( '/' . $permalink , 301);</p></blockquote>
<p><a title="Dean's Permalink Migration" href="http://wordpress.org/extend/plugins/permalinks-migration-plugin-for-wordpress/">Dean's Permalinks Migration</a>、<a title="Change Permalink Helper" href="http://wordpress.org/extend/plugins/change-permalink-helper/">Change Permalink Helper</a>、<a title="Permalink Redirect" href="http://scott.yang.id.au/code/permalink-redirect/">Permalink Redirect</a>等插件据说也可以维持旧链接的有效性。</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/wordpress-permalink-plugins/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WordPress Permalink SEO</title>
		<link>http://orz.yehao.me/wordpress-permalink-seo/</link>
		<comments>http://orz.yehao.me/wordpress-permalink-seo/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 05:15:52 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Permalink]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[固定链接]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=124</guid>
		<description><![CDATA[Google一下“Permalink SEO”，似乎大家都在积极探讨如何优化Wordpress的固定链接。澄清同学最近就又修改了他的固定链接格式，因为有篇文章提到伪静态比伪目录式的结构更好。这改改去的有意思么？ 有阿！默认的固定链接格式[/?p=文章ID]看上去像是动态生成的页面，对搜索引擎不友好，也违背一般的URL设计理念。选择一个好的URL格式，提升你的Blog文章在搜索引擎中的排名，也避免杂乱无章的URL给用户带来不良印象。来，我们看看怎么启用自定义的Permalink格式，怎么样选择一个好的格式。 一、Permalink的启用 如果你还不知道怎样自定义Permalink，Wordpress的官方文档（中文版）已经介绍得非常详细了，我只概括成两步：首先启用URL重写机制，然后就可以去后台的[Settings-Permalink]处输入合适的格式代码了。 这里有一个重要的概念叫做文章别名（Slug，格式代码是%postname%）。你可以认为这是你给一篇文章起的英文文件名，它一般只包含字母、数字和连字符。通常，你会把文章的中文标题翻译成英文，去掉标点，单词间用连字符分隔，再略加润饰，就变成Slug了。例如这篇文章题为“Wordpress Permalink SEO”，而Slug为wordpress-permalink-seo。 二、Permalink范例 假设有篇文章标题为Permalink SEO，它发表于2010-8-26，文章ID为123。什么样的链接格式比较合适呢？我觉得下面这些都是可以考虑的。 1、/permalink-seo/ 清爽的伪目录式结构，不分层。伪目录式结构具有“统一”的美感，以后我会专门谈谈这个话题。 2、/permalink-seo.html 清爽的伪静态结构，据说百度最喜欢。 3、/permalink-seo--123/ 文章名与文章ID的组合，据说Google News只收录结尾包含数字的URL。 4、/2010/08/permalink-seo/ 按年月归档，目录略深。 5、/201008/permalink-seo/ 按月归档（只分一层）。 三、Permalink优化原则 1、有效，要包含文章关键字： 含有文章别名的URL，如比只有文章ID的好，如因为文章别名可以与搜索关键字相匹配，提高搜索排名。而文章ID没有实际含义，最多只能表示文章发表的顺序。 2、简单，不要使用太深的目录： 百度不喜欢深目录。有人说Google喜欢日期明确的文章，他们选用[/年/月/日/文章别名/]这样的格式。但是日期明确并不一定非要通过分层的URL结构来的来体现，文章内容里本来就有日期信息。尤其“日”这一级特别没必要，你会一天写很多篇文章吗？文章名在URL中所占比重降低，对排名也不利。 3、固定，不要在其中包含分类名： 有人喜欢[/分类名/文章别名/]这样的格式，说是组织严谨。可是，Wordpress是允许“一稿多投”的，即一篇文章可以拥有多个分类。这很合理：假如你的每个分类针对一类读者，想必你有些文章是适合好几类读者的，那就要把它放进多个分类里。 于是，采用[/分类名/文章别名/]的格式，Wordpress会自动选择分类ID最小的那个分类名来生成固定链接。想自己选一个分类名？没门（除非装插件）。希望通过每个分类名都能访问？对不起，如果多个URL指向相同的文章，搜索引擎就会以为你把一篇文章抄了好几篇——这就是Duplicate Content（重复内容）问题，会降低你的文章甚至站点的搜索权重。 关键问题是，如果你想为文章改个分类，那它固定链接也就变了，这还能叫固定链接吗？ 4、保持可用性，修改Permalink结构需有补救措施： 有一句名言叫“好的URL不需要改变 (Cool URLs don't change)”。你应该选择一个好的格式，然后一直沿用。 一旦更改Permalink，以旧格式URL就全部不可用了。这意味着搜索引擎曾收录你的那些文章现在成了尸体，而指向你文章的那些链接也全部变成了死链。这会严重影响你的流量和声誉，所以在你的Blog已有一定流量时不要轻举妄动。 如果你的旧格式与新格式之间有一定的转换规律的话，你可以编写.htaccess或PHP脚本进行HTTP 301重定向，把旧URL重定向到新URL上去。也有一些插件能让你切换Permalink格式后让旧链接继续保持可用。]]></description>
			<content:encoded><![CDATA[<p>Google一下“Permalink SEO”，似乎大家都在积极探讨如何优化Wordpress的固定链接。澄清同学最近就又修改了他的固定链接格式，因为<a title="关于伪静态" href="http://blog.linggan.com/wordpress-seo-permalinks-customize-permalink-structure.html">有篇文章提到伪静态比伪目录式的结构更好</a>。这改改去的有意思么？</p>
<p>有阿！默认的固定链接格式[/?p=文章ID]看上去像是动态生成的页面，对搜索引擎不友好，也违背一般的URL设计理念。选择一个好的URL格式，提升你的Blog文章在搜索引擎中的排名，也避免杂乱无章的URL给用户带来不良印象。来，我们看看怎么启用自定义的Permalink格式，怎么样选择一个好的格式。<span id="more-124"></span></p>
<h2>一、Permalink的启用</h2>
<p>如果你还不知道怎样自定义Permalink，Wordpress的<a title="Using Permalinks" href="http://codex.wordpress.org/Using_Permalinks">官方文档</a>（<a title="使用固定链接" href="http://codex.wordpress.org/zh-cn:%E4%BD%BF%E7%94%A8%E5%9B%BA%E5%AE%9A%E9%93%BE%E6%8E%A5#.E4.BD.BF.E7.94.A8.E6.BC.82.E4.BA.AE.E7.9A.84.E5.9B.BA.E5.AE.9A.E9.93.BE.E6.8E.A5">中文版</a>）已经介绍得非常详细了，我只概括成两步：首先启用URL重写机制，然后就可以去后台的[Settings-Permalink]处输入合适的格式代码了。</p>
<p>这里有一个重要的概念叫做<strong>文章别名</strong>（Slug，格式代码是<em>%postname%</em>）。你可以认为这是你给一篇文章起的英文文件名，它一般只包含字母、数字和连字符。通常，你会把文章的中文标题翻译成英文，去掉标点，单词间用连字符分隔，再略加润饰，就变成Slug了。例如这篇文章题为“Wordpress Permalink SEO”，而Slug为<em>wordpress-permalink-seo</em>。</p>
<h2>二、Permalink范例</h2>
<p>假设有篇文章标题为Permalink SEO，它发表于2010-8-26，文章ID为123。什么样的链接格式比较合适呢？我觉得下面这些都是可以考虑的。</p>
<p><strong>1、/permalink-seo/</strong><br />
清爽的伪目录式结构，不分层。伪目录式结构具有“统一”的美感，以后我会专门谈谈这个话题。</p>
<p><strong>2、/permalink-seo.html</strong><br />
清爽的伪静态结构，据说百度最喜欢。</p>
<p><strong>3、/permalink-seo--123/</strong><br />
文章名与文章ID的组合，据说Google News只收录结尾包含数字的URL。</p>
<p><strong>4、/2010/08/permalink-seo/</strong><br />
按年月归档，目录略深。</p>
<p><strong>5、/201008/permalink-seo/</strong><br />
按月归档（只分一层）。</p>
<h2>三、Permalink优化原则</h2>
<p><strong>1、有效，要包含文章关键字：</strong><br />
含有文章别名的URL，如比只有文章ID的好，如因为文章别名可以与搜索关键字相匹配，提高搜索排名。而文章ID没有实际含义，最多只能表示文章发表的顺序。</p>
<p><strong>2、简单，不要使用太深的目录：</strong><br />
百度不喜欢深目录。有人说Google喜欢日期明确的文章，他们选用[/年/月/日/文章别名/]这样的格式。但是日期明确并不一定非要通过分层的URL结构来的来体现，文章内容里本来就有日期信息。尤其“日”这一级特别没必要，你会一天写很多篇文章吗？文章名在URL中所占比重降低，对排名也不利。</p>
<p><strong>3、固定，不要在其中包含分类名：</strong><br />
有人喜欢[/分类名/文章别名/]这样的格式，说是组织严谨。可是，Wordpress是允许“一稿多投”的，即一篇文章可以拥有多个分类。这很合理：假如你的每个分类针对一类读者，想必你有些文章是适合好几类读者的，那就要把它放进多个分类里。</p>
<p>于是，采用[/分类名/文章别名/]的格式，Wordpress会自动选择分类ID最小的那个分类名来生成固定链接。想自己选一个分类名？没门（除非装插件）。希望通过每个分类名都能访问？对不起，如果多个URL指向相同的文章，搜索引擎就会以为你把一篇文章抄了好几篇——这就是Duplicate Content（重复内容）问题，会降低你的文章甚至站点的搜索权重。</p>
<p>关键问题是，如果你想为文章改个分类，那它固定链接也就变了，这还能叫固定链接吗？</p>
<p><strong>4、保持可用性，修改Permalink结构需有补救措施：</strong><br />
有一句名言叫“好的URL不需要改变 (Cool URLs don't change)”。你应该选择一个好的格式，然后一直沿用。</p>
<p>一旦更改Permalink，以旧格式URL就全部不可用了。这意味着搜索引擎曾收录你的那些文章现在成了尸体，而指向你文章的那些链接也全部变成了死链。这会严重影响你的流量和声誉，所以在你的Blog已有一定流量时不要轻举妄动。</p>
<p>如果你的旧格式与新格式之间有一定的转换规律的话，你可以编写.htaccess或PHP脚本进行HTTP 301重定向，把旧URL重定向到新URL上去。也有一些插件能让你切换Permalink格式后让旧链接继续保持可用。</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/wordpress-permalink-seo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>网页里插的图片设置了大小吗？</title>
		<link>http://orz.yehao.me/remember-to-set-image-width-and-height/</link>
		<comments>http://orz.yehao.me/remember-to-set-image-width-and-height/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 08:23:34 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[排版]]></category>
		<category><![CDATA[网页设计]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=116</guid>
		<description><![CDATA[好端端地读着一篇文章，冷不丁蹦出个图片来把我看到的段落压了下去。我往下滚鼠标轮儿，好让那段落露出来，可又蹦出来一张图片。我接着滚，它又蹦出来，我滚，它还蹦，追着我跑，甩也甩不掉了……想给你的访客带来这样的惊喜么？插图片不设高度就行了。 在网页里插图片，要是设好了大小呢，就会预先留那么块儿位置，等图片下载好就显示在那个预留的位置上。要是没设设好大小呢，预先不留位置，可图片下载了，开始显示了，图片就会挤出一块空位来，把它后面的页面内容都给挤下去。如果插了很多图片，图片们不是同时下载的，那就会出现这个图片挤一下，那个图片挤一下，文章的版面布局一直在变，实在是没法儿看了。 你插入了一张图片，反映到网页的源代码里就是多了一个img标签： &#60;img src="图片地址" width="宽度" height="高度" ... /&#62; &#60;img src="图片地址" height="高度" ... /&#62; &#60;img src="图片地址" ... /&#62; 所谓设好了大小就是指有第一种情况。第二种情况是只设高度，这勉强可以接受，因为网页排版中一般高度固定了，版面就固定了，而宽度可以自动计算出来，与高度保持比例。第三种情况是不设大小，那么网页的排版预先是完全不确定的，要等图片下载了才进行纠正。 为图片设置大小还有个好处，由于图片预先占据了一块位置，如果网络一时抽风图片没加载，访客也能知道这里有一张图片，可能会刷新网页直到看到图片。而如果不设大小，访客可能根本不知道这里有张图片没下载出来，从而错过了精彩的内容。 目前大多数的Blog编辑器都是可以设置图片大小的，甚至默认就为你设置合适的图片大小。而且编辑器可以切换到HTML模式，你可以检查检查对应的那个&#60;img&#62;里头有没有height="某高度值"。如果你是手写HTML代码时，就自己记得设width和height。 有些论坛程序不支持用UBB代码控制图片大小，甚至还有论坛在图片加载完成再用JS把图片调整为适合的宽度，这就让人很不爽了。]]></description>
			<content:encoded><![CDATA[<p>好端端地读着一篇文章，冷不丁蹦出个图片来把我看到的段落压了下去。我往下滚鼠标轮儿，好让那段落露出来，可又蹦出来一张图片。我接着滚，它又蹦出来，我滚，它还蹦，追着我跑，甩也甩不掉了……想给你的访客带来这样的惊喜么？插图片不设高度就行了。<span id="more-116"></span></p>
<p style="text-align: center;"><a href="http://orz.yehao.me/wp-content/uploads/2010/08/image-layout.png"><img class="size-full wp-image-117 aligncenter" title="未设大小的图片造成文章排版不确定" src="http://orz.yehao.me/wp-content/uploads/2010/08/image-layout.png" alt="未设大小的图片造成文章排版不确定" width="230" height="172" /></a></p>
<p>在网页里插图片，要是设好了大小呢，就会预先留那么块儿位置，等图片下载好就显示在那个预留的位置上。要是没设设好大小呢，预先不留位置，可图片下载了，开始显示了，图片就会挤出一块空位来，把它后面的页面内容都给挤下去。如果插了很多图片，图片们不是同时下载的，那就会出现这个图片挤一下，那个图片挤一下，文章的版面布局一直在变，实在是没法儿看了。</p>
<p>你插入了一张图片，反映到网页的源代码里就是多了一个img标签：</p>
<blockquote class="code"><p>&lt;img src="图片地址" width="宽度" height="高度" ... /&gt;<br />
&lt;img src="图片地址" height="高度" ... /&gt;<br />
&lt;img src="图片地址" ... /&gt;</p></blockquote>
<p>所谓设好了大小就是指有第一种情况。第二种情况是只设高度，这勉强可以接受，因为网页排版中一般高度固定了，版面就固定了，而宽度可以自动计算出来，与高度保持比例。第三种情况是不设大小，那么网页的排版预先是完全不确定的，要等图片下载了才进行纠正。</p>
<p>为图片设置大小还有个好处，由于图片预先占据了一块位置，如果网络一时抽风图片没加载，访客也能知道这里有一张图片，可能会刷新网页直到看到图片。而如果不设大小，访客可能根本不知道这里有张图片没下载出来，从而错过了精彩的内容。</p>
<p>目前大多数的Blog编辑器都是可以设置图片大小的，甚至默认就为你设置合适的图片大小。而且编辑器可以切换到HTML模式，你可以检查检查对应的那个&lt;img&gt;里头有没有height="某高度值"。如果你是手写HTML代码时，就自己记得设width和height。</p>
<div id="attachment_118" class="wp-caption alignnone" style="width: 310px"><a href="http://orz.yehao.me/wp-content/uploads/2010/08/no-height.gif"><img class="size-medium wp-image-118" title="图片不设大小对加载效果的影响" src="http://orz.yehao.me/wp-content/uploads/2010/08/no-height-300x259.gif" alt="图片不设大小对加载效果的影响" width="300" height="259" /></a><p class="wp-caption-text">图片不设大小对加载效果的影响</p></div>
<p>有些论坛程序不支持用UBB代码控制图片大小，甚至还有论坛在图片加载完成再用JS把图片调整为适合的宽度，这就让人很不爽了。</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/remember-to-set-image-width-and-height/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>遭遇Virpus网络泥石流，昨日本博被困</title>
		<link>http://orz.yehao.me/virpus-cogent-network-failure/</link>
		<comments>http://orz.yehao.me/virpus-cogent-network-failure/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 05:12:30 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[告示]]></category>
		<category><![CDATA[Cogent]]></category>
		<category><![CDATA[Virpus]]></category>
		<category><![CDATA[故障]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=104</guid>
		<description><![CDATA[最近自然灾害频繁，愈演愈烈，已由天朝波及到美帝。一家知名的VPS主机服务商Virpus Network一向承诺99.9%的上线率，昨日也遭遇了0.1%也就是千年一遇的网络泥石流，已形成堰塞湖，部分服务器受困，与外界断绝联系。专家已将此堰塞湖命名为Cogent Communications。 受此影响，orz.yehao.me等多家知名网站无法对外服务，经济损失达!@#$亿元。 灾后，Virpus领导迅速作出重要指示，全力救援受灾服务器。经过了半天的抢险工作，泄洪槽已打通，受困服务器已被迅速转移并得到妥善安置，服务器纷纷表示对工作影响不大。]]></description>
			<content:encoded><![CDATA[<p>最近自然灾害频繁，愈演愈烈，已由天朝波及到美帝。一家知名的VPS主机服务商Virpus Network一向承诺99.9%的上线率，昨日也遭遇了0.1%也就是千年一遇的网络泥石流，已形成堰塞湖，部分服务器受困，与外界断绝联系。专家已将此堰塞湖命名为Cogent Communications。<span id="more-104"></span></p>
<p><a href="http://orz.yehao.me/wp-content/uploads/2010/08/0002.png"><img class="alignnone size-medium wp-image-105" title="泥石流" src="http://orz.yehao.me/wp-content/uploads/2010/08/0002-300x244.png" alt="泥石流" width="300" height="244" /></a></p>
<p>受此影响，<a title="长夜浅吟" href="http://orz.yehao.me/">orz.yehao.me</a>等多家知名网站无法对外服务，经济损失达!@#$亿元。</p>
<p>灾后，Virpus领导迅速作出重要指示，全力救援受灾服务器。经过了半天的抢险工作，泄洪槽已打通，受困服务器已被迅速转移并得到妥善安置，服务器纷纷表示对工作影响不大。</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/virpus-cogent-network-failure/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>换空间后网站出错？Apache、PHP错误排查（续）</title>
		<link>http://orz.yehao.me/hosting-apache-php-error-2/</link>
		<comments>http://orz.yehao.me/hosting-apache-php-error-2/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 08:40:26 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[主机]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=75</guid>
		<description><![CDATA[自己新搭建的服务器或新更换的主机空间往往会Blog、论坛等PHP程序跑不起来的问题，之前的文章已经介绍了错误排查思路和一些重要步骤。现在，让我们把排查进行到底。 四、PHP脚本测试 静态页面测试通过后，就可以跑个简单的PHP脚本了。在网站上创建内容如下的PHP脚本，并在浏览器中打开查看： &#60;?php phpinfo(); ?&#62; 要是显示出了PHP Info页面，说明你的HTTP服务器已经能与PHP一起工作了。不过建议你仔细看看这个页面上显示的配置信息，说不定能找到些毛病。 若出现500 Internal Server Error、CGI错误（Input File not specified）、403 Forbidden，那就是HTTP服务器中关于PHP的部分配置有误了，去更正一下吧。 五、PHP扩展测试 新搭建的服务器可能忘了打开一些PHP扩展，例如默认情况下mysql扩展就是没打开的。网站上编写如下PHP脚本，并在浏览器中打开查看，就可以看到启用了哪些扩展了： &#60;?php print_r(get_loaded_extensions()); ?&#62; 你会看见所有已加载的PHP扩展的名字。要是没有mysql，那用到数据库的程序肯定都跑不了。有些程序依赖于mbstring扩展来处理多语言问题。记得在php.ini中加载用到的扩展（在php.ini中搜索Dynamic Extensions）。 对于Linux环境，可能需要用： yum install php-扩展名 先安装扩展，才能在php.ini中加载。 六、数据库连接测试 在网站上创建如下PHP脚本并在浏览器中打开： &#60;?php $host = 'localhost'; // 你的数据库服务器，通常不用修改 $user = 'mysql_user'; // 你的数据库用户名 $passwd = 'mysql_password'; // 你的数据库密码 $db = 'foo'; // 你的数据库名 $link = mysql_connect($host, $user, [...]]]></description>
			<content:encoded><![CDATA[<p>自己新搭建的服务器或新更换的主机空间往往会Blog、论坛等PHP程序跑不起来的问题，之前的文章已经介绍了<a title="换空间后网站出错？Apache、PHP错误排查" href="http://orz.yehao.me/hosting-apache-php-error/">错误排查思路和一些重要步骤</a>。现在，让我们把排查进行到底。<span id="more-75"></span></p>
<h2>四、PHP脚本测试</h2>
<p>静态页面测试通过后，就可以跑个简单的PHP脚本了。在网站上创建内容如下的PHP脚本，并在浏览器中打开查看：</p>
<blockquote class="code"><p>&lt;?php<br />
phpinfo();<br />
?&gt;</p></blockquote>
<p>要是显示出了PHP Info页面，说明你的HTTP服务器已经能与PHP一起工作了。不过建议你仔细看看这个页面上显示的配置信息，说不定能找到些毛病。</p>
<p>若出现500 Internal Server Error、CGI错误（Input File not specified）、403 Forbidden，那就是HTTP服务器中关于PHP的部分配置有误了，去更正一下吧。</p>
<div id="attachment_77" class="wp-caption alignnone" style="width: 310px"><a href="http://orz.yehao.me/wp-content/uploads/2010/08/phpinfo.png"><img class="size-medium wp-image-77" title="PHP Info" src="http://orz.yehao.me/wp-content/uploads/2010/08/phpinfo-300x125.png" alt="PHP Info" width="300" height="125" /></a><p class="wp-caption-text">PHP Info</p></div>
<h2>五、PHP扩展测试</h2>
<p>新搭建的服务器可能忘了打开一些PHP扩展，例如默认情况下mysql扩展就是没打开的。网站上编写如下PHP脚本，并在浏览器中打开查看，就可以看到启用了哪些扩展了：</p>
<blockquote class="code"><p>&lt;?php<br />
print_r(get_loaded_extensions());<br />
?&gt;</p></blockquote>
<p>你会看见所有已加载的PHP扩展的名字。要是没有mysql，那用到数据库的程序肯定都跑不了。有些程序依赖于mbstring扩展来处理多语言问题。记得在php.ini中加载用到的扩展（在php.ini中搜索Dynamic Extensions）。<br />
对于Linux环境，可能需要用：</p>
<blockquote class="code"><p>yum install php-扩展名</p></blockquote>
<p>先安装扩展，才能在php.ini中加载。</p>
<h2>六、数据库连接测试</h2>
<p>在网站上创建如下PHP脚本并在浏览器中打开：</p>
<blockquote class="code"><p>&lt;?php<br />
$host = 'localhost'; // 你的数据库服务器，通常不用修改<br />
$user = 'mysql_user'; // 你的数据库用户名<br />
$passwd = 'mysql_password'; // 你的数据库密码<br />
$db =  'foo'; // 你的数据库名</p>
<p>$link = mysql_connect($host, $user, $passwd);<br />
if (!$link) {<br />
&#160;&#160;&#160;&#160;die('Not connected : ' . mysql_error());<br />
}</p>
<p>// make foo the current db<br />
$db_selected = mysql_select_db($db, $link);<br />
if (!$db_selected) {<br />
&#160;&#160;&#160;&#160;die ('Can\'t use db : ' . mysql_error());<br />
}</p>
<p>echo 'Success';<br />
?&gt;</p></blockquote>
<p>若显示Success，说明连上了MySQL服务器并找到了对应数据库；若显示 Can't use db，说明连接上但找不到数据库；若显示Not connected，说明未连接到服务器（找不到服务器或登录验证失败）。</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/hosting-apache-php-error-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>换空间后网站出错？Apache、PHP错误排查</title>
		<link>http://orz.yehao.me/hosting-apache-php-error/</link>
		<comments>http://orz.yehao.me/hosting-apache-php-error/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 13:21:47 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[主机]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=70</guid>
		<description><![CDATA[无论是租用PHP共享主机，还是（在自己电脑上、专用服务器或VPS上）搭建支持PHP的HTTP服务器，还是选择PHP共享主机，一开始往往会遇到网站跑不起来的问题。原来好好的WordPress Blog现在报错了，一直能用的论坛现在一片空白了。别慌，把这篇文章看下来，你的问题基本就找到了。 下面以Apache+PHP+MySQL组合为例（因为是根据我自己的经历总结的），但其它服务组合的问题排查思路是相同的。 一、基本思路 先问自己两个问题： 1、出错的真的是你的服务器吗？ 更换空间常要把域名重新解析到新服务器的IP，可是这个更改还没有生效。又也许你新服务器的80端口根本没有打开。 2、数据库配置好了吗？ 如果是租用空间，你可以尝试用控制面版管理数据库，或直接用mysql命令连接服务器。总之，验证服务器IP、用户名、密码、数据库名的组合。 要是这上面的都OK，就看看下面几步有哪些是你需要的吧： * 调整PHP错误报告参数，显示出所有PHP错误。 * 检查静态网页能否访问。 * 检查简单的PHP脚本能否运行。 * 检查是否加载了需要的PHP扩展模块。 * 检查能否从PHP连接到数据库。 二、启用PHP的错误报告机制 你可以将php.ini里的display_errors设为On，并将error_reporting设为E_ALL &#38; ~NOTICE。如果你在租用共享主机空间，建议你可以通过空间的控制面版调整到这些选项，也可以在发生问题的PHP文件的适当位置加入如下代码，效果是一样的： ini_set('display_errors', 1); error_reporting(E_ALL &#38; ~E_NOTICE); 这样，PHP就会显示出各种脚本错误的详细信息，而不是遇到错误就白屏。 三、静态页面测试 如果连网站上的静态网页都打不开，就更别提PHP程序了。这很大可能是文件系统权限设置有问题（Unix文件属性或NTFS权限），或者HTTP服务器未配置正确。下面是测试方法。 在网站根目录下放置扩展名为.html的静态网页或.txt文本文件。在浏览器中输入相应的URL，看是否能显示文件内容。 要是没显示出正确内容，这就说明你的HTTP服务器配置有误了。如果你使用了.htaccess进行了URL重写或其它配置，问题说不定就在里面，请把.htaccess暂时改名看看错误是不是消失了。如果你不是在租用共享空间，你应该还有权访问HTTP服务器配置文件（如Apache的httpd.conf），这里面可能也藏着错误。 对于500 Internal Server Error错误，通常是Apache版本不兼容或是新服务器上缺少某些模块，这样.htaccess或httpd.conf中的相关配置项就变成了非法内容。对于403 Forbidden错误，还可以检查httpd.conf中是否未给服务器的根目录添加相应的&#60;Directory&#62;配置项。 （待续）]]></description>
			<content:encoded><![CDATA[<p>无论是租用PHP共享主机，还是（在自己电脑上、专用服务器或VPS上）搭建支持PHP的HTTP服务器，还是选择PHP共享主机，一开始往往会遇到网站跑不起来的问题。原来好好的WordPress Blog现在报错了，一直能用的论坛现在一片空白了。别慌，把这篇文章看下来，你的问题基本就找到了。</p>
<p>下面以Apache+PHP+MySQL组合为例（因为是根据我自己的经历总结的），但其它服务组合的问题排查思路是相同的。<span id="more-70"></span></p>
<h2>一、基本思路</h2>
<p>先问自己两个问题：<br />
<b>1、出错的真的是你的服务器吗？</b><br />
更换空间常要把域名重新解析到新服务器的IP，可是这个更改还没有生效。又也许你新服务器的80端口根本没有打开。</p>
<p><b>2、数据库配置好了吗？</b><br />
如果是租用空间，你可以尝试用控制面版管理数据库，或直接用mysql命令连接服务器。总之，验证服务器IP、用户名、密码、数据库名的组合。</p>
<p>要是这上面的都OK，就<b>看看下面几步有哪些是你需要的吧</b>：<br />
* 调整PHP错误报告参数，显示出所有PHP错误。<br />
* 检查静态网页能否访问。<br />
* 检查简单的PHP脚本能否运行。<br />
* 检查是否加载了需要的PHP扩展模块。<br />
* 检查能否从PHP连接到数据库。</p>
<h2>二、启用PHP的错误报告机制</h2>
<p>你可以将php.ini里的display_errors设为On，并将error_reporting设为E_ALL &amp; ~NOTICE。如果你在租用共享主机空间，建议你可以通过空间的控制面版调整到这些选项，也可以在发生问题的PHP文件的适当位置加入如下代码，效果是一样的：</p>
<pre class="code">ini_set('display_errors', 1);
error_reporting(E_ALL &amp; ~E_NOTICE);</pre>
<p>这样，PHP就会显示出各种脚本错误的详细信息，而不是遇到错误就白屏。</p>
<h2>三、静态页面测试</h2>
<p>如果连网站上的静态网页都打不开，就更别提PHP程序了。这很大可能是文件系统权限设置有问题（Unix文件属性或NTFS权限），或者HTTP服务器未配置正确。下面是测试方法。</p>
<p>在网站根目录下放置扩展名为.html的静态网页或.txt文本文件。在浏览器中输入相应的URL，看是否能显示文件内容。</p>
<p>要是没显示出正确内容，这就说明你的HTTP服务器配置有误了。如果你使用了.htaccess进行了URL重写或其它配置，问题说不定就在里面，请把.htaccess暂时改名看看错误是不是消失了。如果你不是在租用共享空间，你应该还有权访问HTTP服务器配置文件（如Apache的httpd.conf），这里面可能也藏着错误。</p>
<p>对于500 Internal Server Error错误，通常是Apache版本不兼容或是新服务器上缺少某些模块，这样.htaccess或httpd.conf中的相关配置项就变成了非法内容。对于403 Forbidden错误，还可以检查httpd.conf中是否未给服务器的根目录添加相应的&lt;Directory&gt;配置项。</p>
<p>（待续）</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/hosting-apache-php-error/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>别在国内买域名：修改注册人得过户</title>
		<link>http://orz.yehao.me/domain-registrant-change/</link>
		<comments>http://orz.yehao.me/domain-registrant-change/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 11:04:41 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[域名]]></category>
		<category><![CDATA[注册]]></category>
		<category><![CDATA[转出]]></category>
		<category><![CDATA[过户]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=64</guid>
		<description><![CDATA[域名是网站的招牌，一定得小心经营，别把牌子砸手里了。在国内注册的域名，由于各种原因，域名注册人可能填的不是自己，相当于房产证登记成别人了。这时要改可就难了。 一、买了域名也不是自己的 朋友Oc在新网互联的代理商处注册的域名又快到期了。说来尴尬，Oc每年都给域名续费，可是域名注册人一栏写的居然不是自己的名字。终于他也恼火了：“把它转到国外去吧，顺便把名字改了。这货改名字还要钱。shit…” 也算是请神容易送神难了，找它注册容易，想走，没门。国内就是这个样，你看几十年前请来的神现在都没送走呢。Oc的域名想转出，还是得先过户，哪有让你转出到国外再随便改名字的便宜事呢。转出域名需要提供注册人身份材料，注册人都不是你，哪来的材料？ 二、修改域名注册人得“过户” 在国内，要是域名注册人的姓名填错了，就得办理所谓的过户手续，过户也要有双方的身份证明等材料。很多人最初随手填个名字也注册通过了，有用英文名的，有用网名的，有瞎编一个公司名的，现在你就得把域名从那些不存在的人或公司转给自己。荒唐吧？注册商没有尽到审核的义务，现在怪到用户头上了。 还有很多名字是根本就是注册商填错的，例如万网曾经把个人申请的域名的注册人一律填写成“Personal”。更过分的是，有的代理商就会故意霸占你的域名，即把他们的名字填在注册人那一栏，就出现了Oc这种你交费他持有的悲惨状况。当你的网站做大，说不定他们就可以从中敲上一笔。 OTL 12:26:15 这个域名注册单位的信息好像不对，上面写的是卢川，这应该是你们负责人随手填的信息吧 OTL 12:26:41 我在域名管理面版里无法修改，你这里可以更正一下吧。 OTL 12:30:42 ？ 行者无疆 12:31:49 这个需要办理过户，过户收费50元 不过是修改一个名字，国内的注册商和代理商就想出了“过户”的名头，为得是牟利和控制用户。索取“过户费”“资料费”“邮寄费”成了创收的手段。而在国外，这本来是跟修改个人签名一样简单的事嘛。]]></description>
			<content:encoded><![CDATA[<p>域名是网站的招牌，一定得小心经营，别把牌子砸手里了。在国内注册的域名，由于各种原因，域名注册人可能填的不是自己，相当于房产证登记成别人了。这时要改可就难了。<span id="more-64"></span></p>
<p><a href="http://orz.yehao.me/wp-content/uploads/2010/08/53344.png"><img class="alignnone size-medium wp-image-65" title="WWW" src="http://orz.yehao.me/wp-content/uploads/2010/08/53344-300x225.png" alt="WWW" width="300" height="225" /></a></p>
<h2>一、买了域名也不是自己的</h2>
<p>朋友Oc在新网互联的代理商处注册的域名又快到期了。说来尴尬，Oc每年都给域名续费，可是域名注册人一栏写的居然不是自己的名字。终于他也恼火了：“把它转到国外去吧，顺便把名字改了。这货改名字还要钱。shit…”</p>
<p>也算是请神容易送神难了，找它注册容易，想走，没门。国内就是这个样，你看几十年前请来的神现在都没送走呢。Oc的域名想转出，还是得先过户，哪有让你转出到国外再随便改名字的便宜事呢。转出域名需要提供注册人身份材料，注册人都不是你，哪来的材料？</p>
<h2>二、修改域名注册人得“过户”</h2>
<p>在国内，要是域名注册人的姓名填错了，就得办理所谓的过户手续，过户也要有双方的身份证明等材料。很多人最初随手填个名字也注册通过了，有用英文名的，有用网名的，有瞎编一个公司名的，现在你就得把域名从那些不存在的人或公司转给自己。荒唐吧？注册商没有尽到审核的义务，现在怪到用户头上了。<br />
还有很多名字是根本就是注册商填错的，例如<a title="万网域名转出" href="http://www.fwolf.com/blog/post/332">万网曾经把个人申请的域名的注册人一律填写成“Personal”</a>。更过分的是，有的代理商就会故意霸占你的域名，即把他们的名字填在注册人那一栏，就出现了Oc这种你交费他持有的悲惨状况。当你的网站做大，说不定他们就可以从中敲上一笔。</p>
<blockquote><p>OTL 12:26:15<br />
这个域名注册单位的信息好像不对，上面写的是卢川，这应该是你们负责人随手填的信息吧<br />
OTL 12:26:41<br />
我在域名管理面版里无法修改，你这里可以更正一下吧。<br />
OTL 12:30:42<br />
？<br />
行者无疆 12:31:49<br />
这个需要办理过户，过户收费50元</p></blockquote>
<p>不过是修改一个名字，国内的注册商和代理商就想出了“过户”的名头，为得是牟利和控制用户。索取“过户费”“资料费”“邮寄费”成了创收的手段。而在国外，这本来是跟修改个人签名一样简单的事嘛。</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/domain-registrant-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>马甲切换器 vs Google多账号登录新功能</title>
		<link>http://orz.yehao.me/multiple-login-google-mj/</link>
		<comments>http://orz.yehao.me/multiple-login-google-mj/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 06:57:12 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Cookie]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[马甲]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=50</guid>
		<description><![CDATA[喜欢穿好几个马甲的同学都是怎么管理不同的账号的呢？对于大多数时间只用某一个真身的人来说，每次上马甲的时候切换一下也没啥大不了的。可如果都跟我似的，两个账号是两手抓，两手都要硬，总不能老登入登出的折腾吧？折腾多了就硬不起来了。得想想办法！ 之前我装了个Opera，别的网站不看，就登那几个常用网站的马甲。专门装个浏览器听起来确实很不低碳，所以有人搞出了马甲切换器，能够允许在一个浏览器里创建多个身份，用不同的身份上网就好比用不同的浏览器上网，保存的登录信息是互不干扰的。Firefox用户可以试试CookieSwap，IE用户去看看SwapCookie吧（这个不一定能用），其它浏览器用户——欢迎投入Firefox阵营。不过，虽说支持多身份、一键切换，可同一时刻还是只能用一个身份，还是得切换，这就是我为什么还留着Opera的原因了。 频繁登录、多个浏览器、额外插件……现在，同时使用多个Google账号的人可以告别这些噩梦了。随便用一个账号登录，然后再启用多账号登录（选择On并全部打勾），就可以开始添加额外的马甲了。 随时点击页面右上角的邮件地址，换个马甲吧（添加马甲也在那里哦）。]]></description>
			<content:encoded><![CDATA[<p>喜欢穿好几个马甲的同学都是怎么管理不同的账号的呢？对于大多数时间只用某一个真身的人来说，每次上马甲的时候切换一下也没啥大不了的。可如果都跟我似的，两个账号是两手抓，两手都要硬，总不能老登入登出的折腾吧？折腾多了就硬不起来了。得想想办法！<span id="more-50"></span></p>
<div class="wp-caption alignnone" style="width: 268px"><a href="../wp-content/uploads/2010/08/15350.png"><img title="CookieSwap" src="../wp-content/uploads/2010/08/15350.png" alt="CookieSwap" width="258" height="174" /></a><p class="wp-caption-text">CookieSwap - Firefox下的马甲切换专家</p></div>
<p>之前我装了个Opera，别的网站不看，就登那几个常用网站的马甲。专门装个浏览器听起来确实很不低碳，所以有人搞出了<strong>马甲切换器</strong>，能够允许在一个浏览器里创建多个身份，用不同的身份上网就好比用不同的浏览器上网，保存的登录信息是互不干扰的。Firefox用户可以试试<a title="CookieSwap (Firefox扩展)" href="https://addons.mozilla.org/en-US/firefox/addon/3255/">CookieSwap</a>，IE用户去看看<a title="SwapCookie" href="http://www.appinn.com/mjchange/">SwapCookie</a>吧（这个不一定能用），其它浏览器用户——欢迎投入Firefox阵营。不过，虽说支持多身份、一键切换，可同一时刻还是只能用一个身份，还是得切换，这就是我为什么还留着Opera的原因了。</p>
<p><a href="../wp-content/uploads/2010/08/accounts_logo.gif"><img title="Google Accounts LOGO" src="../wp-content/uploads/2010/08/accounts_logo.gif" alt="Google Accounts LOGO" width="217" height="40" /></a></p>
<p>频繁登录、多个浏览器、额外插件……现在，<strong>同时使用多个Google账号的人可以告别这些噩梦了</strong>。随便用一个账号登录，然后再<a title="Google Accounts 启用多账号登录" href="https://www.google.com/accounts/MultipleSessions">启用多账号登录</a>（选择On并全部打勾），就可以开始添加额外的马甲了。</p>
<div id="attachment_57" class="wp-caption alignnone" style="width: 403px"><a href="http://orz.yehao.me/wp-content/uploads/2010/08/multilogin_enable1.png"><img class="size-full wp-image-57" title="启用Google多账号登录" src="http://orz.yehao.me/wp-content/uploads/2010/08/multilogin_enable1.png" alt="启用Google多账号登录" width="393" height="324" /></a><p class="wp-caption-text">启用Google多账号登录</p></div>
<p>随时点击页面右上角的邮件地址，换个马甲吧（添加马甲也在那里哦）。</p>
<div id="attachment_54" class="wp-caption alignnone" style="width: 246px"><a href="http://orz.yehao.me/wp-content/uploads/2010/08/multilogin_menu_example.png"><img class="size-full wp-image-54" title="添加/切换Google账号" src="http://orz.yehao.me/wp-content/uploads/2010/08/multilogin_menu_example.png" alt="添加/切换Google账号" width="236" height="110" /></a><p class="wp-caption-text">添加/切换Google账号</p></div>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/multiple-login-google-mj/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>settings.py无法导入：与项目同名的.py文件</title>
		<link>http://orz.yehao.me/settings-py-django-import-2/</link>
		<comments>http://orz.yehao.me/settings-py-django-import-2/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 06:29:11 +0000</pubDate>
		<dc:creator>又一只嘴巴</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://orz.yehao.me/?p=31</guid>
		<description><![CDATA[前文提到，似乎在Django项目中创建与项目名同名的文件，就会引起settings.py导入错误。比如说项目名是helloworld，如果存在helloworld.py，则运行manage.py一定会报如下错误： Could not import settings 'helloworld.settings' (Is it on sys.path? Does it have syntax errors?): No module named settings 就一个同名文件居然有这么大的能耐？ 一、顺藤摸瓜 1、验证：只要存在helloworld.py就报错，无论其内容为何 是这样的。删除helloworld.py就不再报错，而创建一个空的helloworld.py文件都仍然会引起错误。 2、错误消息的来由 最终查到错误消息是由django.conf模块负责显示的： （Settings类的__init__方法） try:     mod = importlib.import_module(self.SETTINGS_MODULE) except ImportError, e:     raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e) self.SETTINGS_MODULE的值就是'helloworld.settings'。 3、import_module函数做了什么？ [...]]]></description>
			<content:encoded><![CDATA[<p>前文提到，似乎<a title="settings.py无法导入：Django之谜 " href="http://orz.yehao.me/settings-py-import-django-1/">在Django项目中创建与项目名同名的文件，就会引起settings.py导入错误</a>。比如说项目名是helloworld，如果存在helloworld.py，则运行manage.py一定会报如下错误：</p>
<pre class="code">Could not import settings 'helloworld.settings' (Is it on sys.path? Does it have syntax errors?): No module named settings</pre>
<p>就一个同名文件居然有这么大的能耐？<span id="more-31"></span></p>
<h2>一、顺藤摸瓜</h2>
<h3>1、验证：只要存在helloworld.py就报错，无论其内容为何</h3>
<p>是这样的。删除helloworld.py就不再报错，而创建一个空的helloworld.py文件都仍然会引起错误。</p>
<h3>2、错误消息的来由</h3>
<p>最终查到错误消息是由django.conf模块负责显示的：<br />
（Settings类的__init__方法）</p>
<pre class="code">try:
    mod = importlib.import_module(self.SETTINGS_MODULE)
except ImportError, e:
    raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)</pre>
<p>self.SETTINGS_MODULE的值就是'helloworld.settings'。</p>
<h3>3、import_module函数做了什么？</h3>
<p>此函数位于django.utils.importlib模块中，代码如下：</p>
<pre class="code">def import_module(name, package=None):
    if name.startswith('.'):
        ...
    __import__(name)
    return sys.modules[name]</pre>
<p>容易看出，对于import_module('helloworld.settings')这一调用，它所做的主要工作就是调用__import__函数加载helloworld.settings模块，并返回该模块对象。</p>
<h2>二、__import__为何失败？</h2>
<p>可以这么想：</p>
<h3>1、正常情况下（项目目录中无hellworld.py）</h3>
<p>sys.path里估计有一项是项目的父目录（helloworld/..）。</p>
<p>__import__会首先查找当前工作目录下有没有helloworld模块，OK没有。<br />
它进而去sys.path中搜索helloworld模块，结果它在项目的父目录中找到了helloworld这个package。<br />
（位于helloworld/../helloworld/__init__.py，等价于helloworld/__init__.py。）</p>
<p>找到了helloworld，进而去找其下的settings模块，找到了。<br />
（位于hellworld/../helloworld/settings.py，等价于helloworld/settings.py。）</p>
<h3>2、如果项目目录中有helloworld.py</h3>
<p>__import__会首先查找当前工作目录下有没有helloworld模块，oh no居然有！<br />
（位于helloworld.py。）</p>
<p>可helloworld.py不是个package，没有下属模块，因此在helloworld中不存在settings模块。<br />
因此报错：找不到settings模块。</p>
<p>真相大白了么？</p>
<h2>三、sys.path里少了什么</h2>
<p>我们删掉那个讨厌的helloworld.py！<br />
好了，运行manage.py shell进入交互控制台后看看sys.path即可。</p>
<pre class="code">E:\Pub\dj11\helloworld&gt;manage.py shell
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
&gt;&gt;&gt; import sys
&gt;&gt;&gt; sys.path
['E:\\Pub\\dj11\\helloworld', 'E:\\Pub\\py26\\lib\\site-packages\\flup-1.0.2-py2.6.egg', 'E:\\Pub\\htdocs\\lab\\py-host', 'E:\\Pub\\dj11\\helloworld\\ E:\\Pub\\
py26\\Lib', 'C:\\WINDOWS\\system32\\python26.zip', 'E:\\Pub\\py26\\DLLs', 'E:\\Pub\\py26\\lib', 'E:\\Pub\\py26\\lib\\plat-win', 'E:\\Pub\\py26\\lib\\lib-tk', 'E
:\\Pub\\py26', 'E:\\Pub\\py26\\lib\\site-packages']
&gt;&gt;&gt;
</pre>
<p>项目目录是E:\Pub\dj11\helloworld，其父目录是E:\Pub\dj11\helloworld\..，即E:\Pub\dj11。<br />
可是sys.path没有这个父目录！</p>
<h2>四、疑点重重</h2>
<p>既然sys.path中没有项目的父目录，<br />
__import('helloworld.settings')肯定会失败的阿：</p>
<p>__import__首先查找当前工作目录下有没有helloworld模块，OK没有。<br />
进而去sys.path中搜索helloworld模块，oh no还是没有。<br />
报错：找不到“helloworld.settings”模块。<br />
（注意了，如果存在helloworld.py，它只会报找不到“settings”模块。）</p>
<p>可是，Django项目就这么神奇的启动起来了，丝毫不抱怨sys.path里缺了什么东西。这又是为什么呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://orz.yehao.me/settings-py-django-import-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

