<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.upsuper.org.cn/styles/feedsky1.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.upsuper.org.cn" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/upsuper" type="application/rss+xml"></fs:self_link><lastBuildDate>Fri, 12 Mar 2010 03:06:09 GMT</lastBuildDate><title>鬼の领地</title><description>the place where there are some ghost appearing...</description><image><url>http://www.feedsky.com/feed/upsuper/sc/gif</url><title>鬼の领地</title><link>http://blog.upsuper.org</link></image><link>http://blog.upsuper.org</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><xhtml:meta name="robots" content="noindex"></xhtml:meta><language>en</language><pubDate>Fri, 12 Mar 2010 04:21:08 GMT</pubDate><item><title>关于博客定位的一点想法</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340976679/5141978/1/item.html</link><content:encoded>&lt;p&gt;今天看到我最初分的那些分类，突然开始思考，我的这个博客到底应该如何定位定位呢？&lt;/p&gt;
&lt;p&gt;纵观我现在的这个博客里的主题，很显然已经大规模偏向技术了，但最初我只是想把他当作一个个人博客，写什么都可以的博客。然而我现在已经把这个博客几乎变成了纯粹展示我技术探索的博客了，而生活相关的内容已经移到了校内网上面去。&lt;/p&gt;
&lt;p&gt;前一段时间在构思一篇文章叫做“我不当 geek”（还没写），核心思想就是逃离现在这种高度 geek 化的社交状态。&lt;/p&gt;
&lt;p&gt;现在想想觉得，这个博客既然是我的个人的博客，而且是数据完全掌握在我手上的博客，不受其他人支配的博客，我想我可以把我生活中的各种东西也同时复制到这里来留档。反正，其实我最早想的就是，我的博客是记录我自己的，写给自己看的。嗯……&lt;/p&gt;
&lt;p&gt;决定了，今天把校内上自认为写的很好的内容复制到这里来~&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340976679/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340976679/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340976679/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340976679/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/a-thought-of-the-position-of-this-blog/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>今天看到我最初分的那些分类，突然开始思考，我的这个博客到底应该如何定位定位呢？
纵观我现在的这个博客里的主题，很显然已经大规模偏向技术了，但最初我只是想把他当作一个个人博客，写什么都可以的博客。然而我现在已经把这个博客几乎变成了纯粹展示我技术探索的博客了，而生活相关的内容已经移到了校内网上面去。
前一段时间在构思一篇文章叫做“我不当 geek”（还没写），核心思想就是逃离现在这种高度 geek 化的社交状态。
现在想想觉得，这个博客既然是我的个人的博客，而且是数据完全掌握在我手上的博客，不受其他人支配的博客，我想我可以把我生活中的各种东西也同时复制到这里来留档。反正，其实我最早想的就是，我的博客是记录我自己的，写给自己看的。嗯……
决定了，今天把校内上自认为写的很好的内容复制到这里来~&lt;img src=&quot;http://www1.feedsky.com/t1/340976679/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340976679/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340976679/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340976679/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>随笔写写</category><category>My Blog</category><category>geek</category><pubDate>Fri, 12 Mar 2010 11:06:09 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/a-thought-of-the-position-of-this-blog/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1102</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/a-thought-of-the-position-of-this-blog/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340976679/5141978</fs:itemid></item><item><title>BMP to HTML 小程序</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340470890/5141978/1/item.html</link><content:encoded>&lt;p&gt;什么叫 BMP 到 HTML 呢……？就是生成一个网页，里面用不同颜色的字符拼出那个图片……很无聊的功能嗯，而且原理上说，生成的 HTML 文件如果要表现整个 BMP 的所有细节，大小肯定大大超过原 BMP 文件……&lt;/p&gt;
&lt;p&gt;为什么会做这个呢？主要是受到我们 C++ 老师的启发，尝试去做的。不过我没有用 C++ 写，而是选用了寒假学的 Erlang，这也是我写的第一个 Erlang 程序。&lt;/p&gt;
&lt;p&gt;为什么会选用 Erlang 呢？主要是基于两点原因：1、寒假学了半天，一点都没有练过，就拿这个来练练；2、看中了 Erlang 强大的模式匹配和比特语法。比特语法在 Erlang 里面原来是用来解决网络传输协议中的二进制数据的，不过这里拿来处理二进制文件着实是一个很好的选择~不过其实 Erlang 真正最重要的特性：面向并发，我完全没有用到，而是继续使用了顺序编程。主要是，BMP to HTML 没什么可以并发化的，而且就算并发了，也是大传输小计算，并没有什么很大的优势。因为是第一次写 Erlang 程序，如果有 Erlang 高手路过，还请多多指点咯~&lt;/p&gt;
&lt;p&gt;另外一点，为什么选用 BMP 这种几乎被人抛弃的格式呢？因为最容易呗……而且我这里还用了 BMP 中最简单的一种：真彩色无压缩格式。这是最直接的图形表示方式了，就是一个点一个点的，每个点三个字节表示一种颜色。所以还是很简单的。&lt;/p&gt;
&lt;p&gt;先看看最后的效果：&lt;br /&gt;
&lt;a href=&quot;http://blog.upsuper.org/wp-content/uploads/2010/03/1268197208685.png&quot;&gt;&lt;img src=&quot;http://blog.upsuper.org/wp-content/uploads/2010/03/1268197208685.png&quot; alt=&quot;&quot; title=&quot;_1268197208685&quot; width=&quot;120&quot; height=&quot;35&quot; class=&quot;alignnone size-full wp-image-1098&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下面说干就干。&lt;br /&gt;
&lt;span id=&quot;more-1093&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;BMP 文件结构&lt;/h3&gt;
&lt;p&gt;首先要知道的就是 BMP 的格式。在维基百科里的相关条目有很详细的记载，甚至于文件头的 C 结构都已经直接给出来了。不过这个当然对我没有很大的用途，因为用的是 Erlang 嘛~识别文件头要比 C 方便多了~下面我先说说 BMP 的文件结构：&lt;/p&gt;
&lt;h4&gt;BMP 文件头&lt;/h4&gt;
&lt;p&gt;一个 BMP 文件最开始是 BMP 文件头。这个文件头的大小是固定的14字节，包含 BMP 文件的 Magic Number (魔术数字，即文件识别码) 2字节、整个文件大小4字节、保留区4字节、图像数据在文件中的起始位置4字节。&lt;/p&gt;
&lt;p&gt;其中 Magic Number 我们最常见的是 Windows BMP 文件的 &lt;em&gt;BM&lt;/em&gt;，除此之外，还有 &lt;em&gt;BA&lt;/em&gt;、&lt;em&gt;CI&lt;/em&gt;、&lt;em&gt;CP&lt;/em&gt;、&lt;em&gt;IC&lt;/em&gt;、&lt;em&gt;PT&lt;/em&gt; 这几种，应该是不太常见吧。&lt;/p&gt;
&lt;p&gt;整个文件的大小其实我觉得在这里是没有什么用途的，而整整4字节的保留区也是令我很难理解的。整个14字节的头当中，最重要的应该就是图像数据的偏移。如果这个偏移量是相对于整个文件而言的，因此直接把读取指针指向偏移量的位置就是图像数据。&lt;/p&gt;
&lt;h4&gt;DIB 头&lt;/h4&gt;
&lt;p&gt;这个信息其实是关于图像描述最有意义的部分。这里面将会描述这张图片几乎一切你需要的信息。&lt;/p&gt;
&lt;p&gt;DIB 头最开始的32位，也就是4个字节，描述了 DIB 头的长度。根据 DIB 头的长度不同，共有4种 BMP 图片：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;12字节&lt;/strong&gt; &amp;#8211; OS/2 V1 格式，OS/2 和 Windows 3.0 以后所有版本支持&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;64字节&lt;/strong&gt; &amp;#8211; OS/2 V2 格式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;40字节&lt;/strong&gt; &amp;#8211; Windows V3，Windows 3.0 以后所有版本支持&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;108字节&lt;/strong&gt; &amp;#8211; Windows V4，Windows 95/NT4 以后所有版本支持&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;124字节&lt;/strong&gt; &amp;#8211; Windows V5，Windows 98/2000 以后所有版本支持&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;鉴于 Windows V4、V5 都与 V3 的格式兼容，我在程序里面事实上仅仅实现了 V3 的头识别。&lt;/p&gt;
&lt;p&gt;V3 头的40字节分布，我觉得已经很复杂了……分别是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DIB 头大小，4字节，这里为40&lt;/li&gt;
&lt;li&gt;图像宽度，4字节&lt;/li&gt;
&lt;li&gt;图像高度，4字节&lt;/li&gt;
&lt;li&gt;Color planes (不知道是什么东西)，2字节，必须为1&lt;/li&gt;
&lt;li&gt;颜色位数，2字节，可以为1、4、8、16、24、32，我的程序中只识别24位色&lt;/li&gt;
&lt;li&gt;压缩方式，4字节，我的程序里只能识别不压缩的……值为0&lt;/li&gt;
&lt;li&gt;图像信息大小，4字节，与整个文件大小不一样，这里表示的是图像信息那块数据的大小&lt;/li&gt;
&lt;li&gt;横向分辨率，4字节，单位像素/米&lt;/li&gt;
&lt;li&gt;纵向分辨率，4字节，单位像素/米&lt;/li&gt;
&lt;li&gt;调色板颜色数，4字节，如果为0则默认为2&lt;sup&gt;n&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;重要颜色数量，4字节，不知道干什么用的，直接忽略好了……&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;介绍完了这个 DIB 头，其实很很没意思就是了。真正有用的，也就这么几个：长度、宽度。如果要识别能力强一点，识别一下调色板相关的，也就差不多了。&lt;/p&gt;
&lt;h4&gt;调色板&lt;/h4&gt;
&lt;p&gt;因为我没有用到调色板，所以也没有细看这块内容，直接跳过……&lt;/p&gt;
&lt;h4&gt;图像数据&lt;/h4&gt;
&lt;p&gt;显然对于我的最基本选择要求：24位色、无压缩，图像信息是很简单的，就是每个像素占3个字节。&lt;/p&gt;
&lt;p&gt;不过仍然有两点需要注意：1、颜色储存依次是是蓝、绿、红，而非红、绿、蓝；2、每行的字节数必须是4的整倍数。也就是 BMP 文件每行最后会有1-3个字节用于补足，这个补足用字节数正是宽度除以4的余数。&lt;/p&gt;
&lt;h3&gt;Erlang 程序&lt;/h3&gt;
&lt;p&gt;BMP 图片的基本信息探究清楚了，下面就可以开始写咯~&lt;/p&gt;
&lt;h4&gt;导出函数&lt;/h4&gt;
&lt;p&gt;第一部分就是模块的声明和导出函数：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p10935&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1093code5&quot;&gt;&lt;pre class=&quot;erlang&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #5400b3;&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;bmp&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&lt;span style=&quot;color: #014ea4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #5400b3;&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;bmp_to_html&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff9600;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #014ea4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #5400b3;&quot;&gt;define&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; unsigned&lt;span style=&quot;color: #014ea4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #9d4f37;&quot;&gt;little&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #fa6fff;&quot;&gt;integer&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;bmp_to_html&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Bmp&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Html&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #186895;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #ff3c00;&quot;&gt;bmp_to_html&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Bmp&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #186895;&quot;&gt;of&lt;/span&gt;
        &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;ok&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #ff4e18;&quot;&gt;file&lt;/span&gt;:&lt;span style=&quot;color: #ff3c00;&quot;&gt;write_file&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Html&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #45b3e6;&quot;&gt;Error&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Bmp&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #186895;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;bmp_to_html&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;File&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #186895;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #ff4e18;&quot;&gt;file&lt;/span&gt;:&lt;span style=&quot;color: #ff3c00;&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;File&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;read&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #fa6fff;&quot;&gt;binary&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; raw&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #186895;&quot;&gt;of&lt;/span&gt;
        &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;ok&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;ok&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff7800;&quot;&gt;&amp;quot;&amp;lt;span style=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;font-size: 1px; line-height: 1px;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
                    &lt;span style=&quot;color: #ff3c00;&quot;&gt;convert_bmp&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #ff7800;&quot;&gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #45b3e6;&quot;&gt;Error&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;File&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Error&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #186895;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;我在 bmp 模块内导出了一个 bmp_to_html 的函数，他读取一个 bmp 文件，转换并写入一个 html 文件。中间定义了一个宏 ULI，很容易理解的~其实定义这个的主要原因是那个 little……由于 Erlang 最初是为网络协议做的这个比特语法，因此默认是 Big endian 的，而 x86 系的 CPU 却总是使用 Little endian 的……&lt;/p&gt;
&lt;h4&gt;读取 BMP 文件信息&lt;/h4&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p10936&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1093code6&quot;&gt;&lt;pre class=&quot;erlang&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff3c00;&quot;&gt;convert_bmp&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Offset&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Size&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #ff3c00;&quot;&gt;read_header&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;ok&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #ff4e18;&quot;&gt;file&lt;/span&gt;:&lt;span style=&quot;color: #ff3c00;&quot;&gt;pread&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Offset&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Size&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #45b3e6;&quot;&gt;L&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #fa6fff;&quot;&gt;binary_to_list&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;L&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;read_header&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;ok&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #ff4e18;&quot;&gt;file&lt;/span&gt;:&lt;span style=&quot;color: #ff3c00;&quot;&gt;pread&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #186895;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt; &lt;span style=&quot;color: #186895;&quot;&gt;of&lt;/span&gt;
        &lt;span style=&quot;color: #ee3800;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff7800;&quot;&gt;&amp;quot;BM&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_FileSize&lt;/span&gt;:  &lt;span style=&quot;color: #ff9600;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
                &lt;span style=&quot;color: #45b3e6;&quot;&gt;_Creator&lt;/span&gt;:   &lt;span style=&quot;color: #ff9600;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
                &lt;span style=&quot;color: #45b3e6;&quot;&gt;Offs&lt;/span&gt;&lt;span style=&quot;color: #ff4e18;&quot;&gt;et&lt;/span&gt;:     &lt;span style=&quot;color: #ff9600;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;
        &lt;span style=&quot;color: #ee3800;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Offset&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff3c00;&quot;&gt;read_dib_header&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #45b3e6;&quot;&gt;_Other&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;error&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; unsupported&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_Other&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #186895;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;read_dib_header&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;ok&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #ff4e18;&quot;&gt;file&lt;/span&gt;:&lt;span style=&quot;color: #ff3c00;&quot;&gt;pread&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #186895;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt; &lt;span style=&quot;color: #186895;&quot;&gt;of&lt;/span&gt;
        &lt;span style=&quot;color: #ee3800;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff9600;&quot;&gt;40&lt;/span&gt;:&lt;span style=&quot;color: #ff9600;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #ee3800;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;ok&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ee3800;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;:  &lt;span style=&quot;color: #ff9600;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
                    &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;: &lt;span style=&quot;color: #ff9600;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
                    &lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;:      &lt;span style=&quot;color: #ff9600;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
                    &lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;:      &lt;span style=&quot;color: #ff9600;&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
                    &lt;span style=&quot;color: #ff9600;&quot;&gt;0&lt;/span&gt;:      &lt;span style=&quot;color: #ff9600;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
                    &lt;span style=&quot;color: #45b3e6;&quot;&gt;Size&lt;/span&gt;:   &lt;span style=&quot;color: #ff9600;&quot;&gt;32&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;/&lt;/span&gt;?&lt;span style=&quot;color: #6941fd;&quot;&gt;ULI&lt;/span&gt;
            &lt;span style=&quot;color: #ee3800;&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #ff4e18;&quot;&gt;file&lt;/span&gt;:&lt;span style=&quot;color: #ff3c00;&quot;&gt;pread&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
            &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Size&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #45b3e6;&quot;&gt;_Other&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#123;&lt;/span&gt;error&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; unsupported&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_Other&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #186895;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;很明显，为了简化程序，BMP 文件头和 DIB 头的识别都只写了一点点，够用就行~&lt;/p&gt;
&lt;h4&gt;转换图像数据&lt;/h4&gt;
&lt;p&gt;这是最后的部分了，将图像数据转换为 HTML 代码~&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p10937&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1093code7&quot;&gt;&lt;pre class=&quot;erlang&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff9600;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Output&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #45b3e6;&quot;&gt;Output&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff9600;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Output&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #45b3e6;&quot;&gt;NewBin&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #ff3c00;&quot;&gt;drop_begin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;rem&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #45b3e6;&quot;&gt;NewOutput&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff3c00;&quot;&gt;new_line&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; | &lt;span style=&quot;color: #45b3e6;&quot;&gt;Output&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #ff9600;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;NewBin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;NewOutput&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Output&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #45b3e6;&quot;&gt;Output&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Output&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;R&lt;/span&gt;|NewBin&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #45b3e6;&quot;&gt;NewOutput&lt;/span&gt; &lt;span style=&quot;color: #014ea4;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff3c00;&quot;&gt;to_html&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;R&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; | &lt;span style=&quot;color: #45b3e6;&quot;&gt;Output&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt;
    &lt;span style=&quot;color: #ff3c00;&quot;&gt;each_pixel&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;X&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #ff9600;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Y&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Width&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Height&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;NewBin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;NewOutput&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;drop_begin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff9600;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;drop_begin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;_&lt;/span&gt;|Bin&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Num&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #ff3c00;&quot;&gt;drop_begin&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;Bin&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;Num&lt;/span&gt;&lt;span style=&quot;color: #014ea4;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #ff9600;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;new_line&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff7800;&quot;&gt;&amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #ff3c00;&quot;&gt;to_html&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;R&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #6bb810;&quot;&gt;-&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #ff4e18;&quot;&gt;io_lib&lt;/span&gt;:&lt;span style=&quot;color: #ff3c00;&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff7800;&quot;&gt;&amp;quot;&amp;lt;font color=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;#~.16B~.16B~.16B&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\&amp;quot;&lt;/span&gt;&amp;gt;█&amp;lt;/font&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #45b3e6;&quot;&gt;R&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #45b3e6;&quot;&gt;B&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;这是最后的部分了~其中字符选用了一个非常黑的字符“█”嗯~&lt;/p&gt;
&lt;p&gt;至于为什么用 font 这个不推荐的标签，其实是我觉得这个文件本身就很冗长了，再变成样式就……所以……&lt;/p&gt;
&lt;h4&gt;使用&lt;/h4&gt;
&lt;p&gt;差不多了，整个程序全部拼在一起，就出来了~&lt;/p&gt;
&lt;p&gt;最后，在 Erlang 的命令行中输入：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p10938&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1093code8&quot;&gt;&lt;pre class=&quot;erlang&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff3c00;&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;bmp&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;
bmp:&lt;span style=&quot;color: #ff3c00;&quot;&gt;bmp_to_html&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff7800;&quot;&gt;&amp;quot;BMP 文件&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #ff7800;&quot;&gt;&amp;quot;HTML 文件&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #109ab8;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #6bb810;&quot;&gt;.&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;就好了~&lt;/p&gt;
&lt;p&gt;我用了一个 2.6KB 的 BMP 文件，转换出了一个 26.3KB 的 HTML 文件……真够大……&lt;/p&gt;
&lt;p&gt;最后，给出这两个文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://down.upsuper.org/u_noalpha.bmp&quot;&gt;u_noalpha.bmp&lt;/a&gt; (2.6KB)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://down.upsuper.org/u_noalpha.html&quot;&gt;u_noalpha.html&lt;/a&gt; (26.3KB)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;参考资料&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/BMP_file_format&quot;&gt;BMP file format &amp;#8211; Wikipedia, the free encyclopedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.trapexit.org/Converting_Between_Octal_and_Hex&quot;&gt;Erlang Community &amp;#8211; Converting Between Octal and Hex &amp;#8211; Trapexit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340470890/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470890/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470890/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470890/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/bmp-to-html-tool/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>什么叫 BMP 到 HTML 呢……？就是生成一个网页，里面用不同颜色的字符拼出那个图片……很无聊的功能嗯，而且原理上说，生成的 HTML 文件如果要表现整个 BMP 的所有细节，大小肯定大大超过原 BMP 文件……
为什么会做这个呢？主要是受到我们 C++ 老师的启发，尝试去做的。不过我没有用 C++ 写，而是选用了寒假学的 Erlang，这也是我写的第一个 Erlang 程序。
为什么会选用 Erlang 呢？主要是基于两点原因：1、寒假学了半天，一点都没有练过，就拿这个来练练；2、看中了 Erlang 强大的模式匹配和比特语法。比特语法在 Erlang 里面原来是用来解决网络传输协议中的二进制数据的，不过这里拿来处理二进制文件着实是一个很好的选择~不过其实 Erlang 真正最重要的特性：面向并发，我完全没有用到，而是继续使用了顺序编程。主要是，BMP to HTML 没什么可以并发化的，而且就算并发了，也是大传输小计算，并没有什么很大的优势。因为是第一次写 Erlang 程序，如果有 Erlang 高手路过，还请多多指点咯~
另外一点，为什么选用 BMP 这种几乎被人抛弃的格式呢？因为最容易呗……而且我这里还用了 BMP 中最简单的一种：真彩色无压缩格式。这是最直接的图形表示方式了，就是一个点一个点的，每个点三个字节表示一种颜色。所以还是很简单的。
先看看最后的效果：

下面说干就干。

BMP 文件结构
首先要知道的就是 BMP 的格式。在维基百科里的相关条目有很详细的记载，甚至于文件头的 C 结构都已经直接给出来了。不过这个当然对我没有很大的用途，因为用的是 Erlang 嘛~识别文件头要比 C 方便多了~下面我先说说 BMP 的文件结构：
BMP 文件头
一个 BMP 文件最开始是 BMP 文件头。这个文件头的大小是固定的14字节，包含 BMP 文件的 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340470890/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470890/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470890/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470890/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>探究学习</category><category>Erlang</category><category>BMP</category><category>HTML</category><pubDate>Wed, 10 Mar 2010 17:46:23 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/bmp-to-html-tool/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1093</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/bmp-to-html-tool/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340470890/5141978</fs:itemid></item><item><title>关于学生会的一些想法</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340976756/5141978/1/item.html</link><content:encoded>&lt;p&gt;因为在校内上看到一篇写学生会的文章：&lt;a href=&quot;http://blog.renren.com/blog/233422790/449838506&quot;&gt;学生会？可别骗人了……大陆现在压根就没有学生会！&lt;/a&gt;作为学生会的一员还是多少有些不满的，因此特撰文做出一点小小的反驳。&lt;br /&gt;
&lt;span id=&quot;more-1105&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;记得上一次，我有幸应钱部长的邀请参加了学生会执委会例会。因为是开学第一次例会，执委会也没什么东西要说，于是后面我们的学生会主席施老板就说，其实今天是来和大家聊一聊的，聊聊寒假或者开学后的一些见闻感触。&lt;/p&gt;
&lt;p&gt;没什么人发言。&lt;/p&gt;
&lt;p&gt;钱部长说了一件她在上课的时候遇到的事情，就是一个大一的小孩干了一个学期学生会，然后退会了，并且觉得学生会不好而而。当堂的老师就觉得奇怪，说以前学生会主席都是一呼百应的，现在为什么变成这样呢？然后大家就接二连三的纷纷对此发表评论。后来我记得权益部部长说，权益部的同学去找相关老师反应问题，每次遇到的都是老师爱理不理的样子，最后也就没有热情了。&lt;/p&gt;
&lt;p&gt;施老板问旁边一个（貌似是秘书处的？），你认为学生会是干什么的。他回答说，是为学生服务的。&lt;/p&gt;
&lt;p&gt;施老板就说，他在寒假旁听了一次上海人大会议，他说人大和我们想像的是很不一样的。很多代表都对政府工作报告提出了质疑，甚至有的代表说的很直接，你们这个政府，执政能力有问题，什么钓鱼执法之类的事情都应该写进工作报告里。类似这样的质疑声音很多。当然，最后工作报告还是通过了，也没有把那些东西写进去。施老板很感慨。&lt;/p&gt;
&lt;p&gt;他觉得，学生会要为学生服务，要敢于和学校相关部门叫板，要树立一种民本位，学生本位的思想。最希望的，就是未来有一天学校是由学生来管理的。于是他有一个想法，他想也像人大那样，把全校各个部门的人全部召集到一起，然后就让学生会的代表去质询。他觉得，即使最终改变不了什么，至少要把一种学生本位的思想，一种敢说的精神传播出去，或者至少，骂一骂也爽。&lt;/p&gt;
&lt;p&gt;突然想起，新生大会的时候，某个学生会元老曾经很自豪地告诉我们，同济大学的学生会，与其他学校的学生会不一样，不是隶属于校团委的，而他的角色，更像就是和团委叫板的。&lt;/p&gt;
&lt;p&gt;这种学生本位的思想，学生管理的思想，何其熟悉，记得当年在一中我就有过这样的想法，事实上现在仍然有着，但我只和一个人说过，当然那人必定没有当回事。&lt;/p&gt;
&lt;p&gt;说实话，在我心里，同济大学的位置是比不过福州一中的，但我觉得同济学生会是非常伟大的。&lt;/p&gt;
&lt;p&gt;为学生服务，这本来就是一个学生会的职责，就像吧主就应该为吧友服务，政府就应该为人民服务，没有区别，也是我一贯的想法。&lt;/p&gt;
&lt;p&gt;同济的学生会，可能现在没有能力真正改变学校的什么，就像我们也不能改变中国现有的社会中的那些东西。但就像一中传递的开放自由的思想一样，这里传递着一种学生本位的思想，民本位的思想。虽然我们现在不能，但这不代表今后不能。相信就会实现。我们要相信自己，能改变！&lt;/p&gt;
&lt;p&gt;就像我以我是一中人为荣一样，我也以我是自觉人为荣！（注：同济大学学生会名：自觉）&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;以上，就是以我自己的所见所闻所想，发表的对同济学生会的一些看法，不知道能不能算一点点对那篇文章的驳斥呢？或许不能吧，因为我太弱了。&lt;/p&gt;
&lt;p&gt;但这些，就是我最真实的想法。&lt;/p&gt;
&lt;p&gt;（话说，施老板本来说不要把这次会议的内容泄出来的……我这样应该没事吧？可爱）&lt;/p&gt;
&lt;p&gt;我要说的，就这些了，谢谢有耐心看到这一行的同学……&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340976756/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340976756/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340976756/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340976756/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/something-about-the-student-union/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>因为在校内上看到一篇写学生会的文章：学生会？可别骗人了……大陆现在压根就没有学生会！作为学生会的一员还是多少有些不满的，因此特撰文做出一点小小的反驳。


记得上一次，我有幸应钱部长的邀请参加了学生会执委会例会。因为是开学第一次例会，执委会也没什么东西要说，于是后面我们的学生会主席施老板就说，其实今天是来和大家聊一聊的，聊聊寒假或者开学后的一些见闻感触。
没什么人发言。
钱部长说了一件她在上课的时候遇到的事情，就是一个大一的小孩干了一个学期学生会，然后退会了，并且觉得学生会不好而而。当堂的老师就觉得奇怪，说以前学生会主席都是一呼百应的，现在为什么变成这样呢？然后大家就接二连三的纷纷对此发表评论。后来我记得权益部部长说，权益部的同学去找相关老师反应问题，每次遇到的都是老师爱理不理的样子，最后也就没有热情了。
施老板问旁边一个（貌似是秘书处的？），你认为学生会是干什么的。他回答说，是为学生服务的。
施老板就说，他在寒假旁听了一次上海人大会议，他说人大和我们想像的是很不一样的。很多代表都对政府工作报告提出了质疑，甚至有的代表说的很直接，你们这个政府，执政能力有问题，什么钓鱼执法之类的事情都应该写进工作报告里。类似这样的质疑声音很多。当然，最后工作报告还是通过了，也没有把那些东西写进去。施老板很感慨。
他觉得，学生会要为学生服务，要敢于和学校相关部门叫板，要树立一种民本位，学生本位的思想。最希望的，就是未来有一天学校是由学生来管理的。于是他有一个想法，他想也像人大那样，把全校各个部门的人全部召集到一起，然后就让学生会的代表去质询。他觉得，即使最终改变不了什么，至少要把一种学生本位的思想，一种敢说的精神传播出去，或者至少，骂一骂也爽。
突然想起，新生大会的时候，某个学生会元老曾经很自豪地告诉我们，同济大学的学生会，与其他学校的学生会不一样，不是隶属于校团委的，而他的角色，更像就是和团委叫板的。
这种学生本位的思想，学生管理的思想，何其熟悉，记得当年在一中我就有过这样的想法，事实上现在仍然有着，但我只和一个人说过，当然那人必定没有当回事。
说实话，在我心里，同济大学的位置是比不过福州一中的，但我觉得同济学生会是非常伟大的。
为学生服务，这本来就是一个学生会的职责，就像吧主就应该为吧友服务，政府就应该为人民服务，没有区别，也是我一贯的想法。
同济的学生会，可能现在没有能力真正改变学校的什么，就像我们也不能改变中国现有的社会中的那些东西。但就像一中传递的开放自由的思想一样，这里传递着一种学生本位的思想，民本位的思想。虽然我们现在不能，但这不代表今后不能。相信就会实现。我们要相信自己，能改变！
就像我以我是一中人为荣一样，我也以我是自觉人为荣！（注：同济大学学生会名：自觉）

以上，就是以我自己的所见所闻所想，发表的对同济学生会的一些看法，不知道能不能算一点点对那篇文章的驳斥呢？或许不能吧，因为我太弱了。
但这些，就是我最真实的想法。
（话说，施老板本来说不要把这次会议的内容泄出来的……我这样应该没事吧？可爱）
我要说的，就这些了，谢谢有耐心看到这一行的同学……&lt;img src=&quot;http://www1.feedsky.com/t1/340976756/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340976756/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340976756/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340976756/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>学校</category><category>同济大学</category><category>随笔写写</category><category>学生会</category><pubDate>Sun, 07 Mar 2010 21:10:54 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/something-about-the-student-union/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1105</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/something-about-the-student-union/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340976756/5141978</fs:itemid></item><item><title>Apache 的 Rewrite 模块 Bug 一则</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340470897/5141978/1/item.html</link><content:encoded>&lt;p&gt;我发觉研究的东西多了，就会看到各种神奇的 Bug……&lt;/p&gt;
&lt;p&gt;今天写的这个 Bug 是关于 Apache 的 Rewrite 模块的。先来看一个很正常的 Rewrite 规则：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p108614&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1086code14&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} \.u$
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^(.*)\.u$ $&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;这个什么意思呢？用过的人一定看得出来，就是把一个 .t 结尾的请求发送到一个去掉 .t 的文件上面。比如我如果请求 upsuper.u 就会自动调用 upsuper 这个文件来返回。这没有什么疑问。&lt;/p&gt;
&lt;p&gt;然后，我们发现，.u 文件浏览器不知道是什么，而 upsuper 这个文件在服务器上又是没有类型的，于是 Apache 不知道告诉浏览器（或者错误地告诉了一个）MIME-Type。这样即使这个文件是个网页，浏览器上也会出现下载提示或者当作纯文本直接输出。&lt;/p&gt;
&lt;p&gt;翻阅了一下 &lt;a href=&quot;http://httpd.apache.org/docs/2.2/rewrite/&quot;&gt;Rewrite 模块的资料&lt;/a&gt;，我们了解到可以使用 T 这个标志符来强制指定 MIME-Type 类型，于是规则变成了下面这样：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p108615&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1086code15&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} \.u$
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^(.*)\.u$ $&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt; [T=text/html]&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;可是无效！&lt;/p&gt;
&lt;p&gt;Bug 开始出现了~&lt;br /&gt;
&lt;span id=&quot;more-1086&quot;&gt;&lt;/span&gt;&lt;br /&gt;
在 Apache 基金会的 Bugzilla 里面翻到了&lt;a href=&quot;https://issues.apache.org/bugzilla/show_bug.cgi?id=36590&quot;&gt;关于这个 Bug 的内容&lt;/a&gt;。然后看一看日期，OMG，2005年的 Bug，很跨10个年头没有解决！&lt;/p&gt;
&lt;p&gt;看了一下，里面有一个可能是开发人员，说这一问题可能是由于引发了一个内部跳转导致的。并且提供了一种解决方法，我参照该解决方法再次修改我的 Rewrite 规则，变成下面这样：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p108616&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1086code16&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} \.u$
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^(.*)\.u$ $&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; . - [T=text/html]&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;成功了！泪流满面……&lt;/p&gt;
&lt;p&gt;不过，有趣的还没结束~仅能变出 MIME-Type 为 text/html 本来就不是我最初的想法。我的想法更大胆一些：识别 URL 中的一部分作为 MIME-Type！&lt;/p&gt;
&lt;p&gt;我发现 Rewrite 规则中，标志 E 可以修改环境变量，而且在后面的过程中还可以使用~我觉得那这个来当中间变量是一个很好的想法，于是就动手了：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p108617&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1086code17&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} \.u$
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^([a-zA-Z]+/[a-zA-Z-]+)/(.*)\.u$ $&lt;span style=&quot;color: #ff0000;&quot;&gt;2&lt;/span&gt; [E=MIMETYPE:$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;]
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; . - [T=%{ENV:MIMETYPE}]&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;稍加辨别不难看出，“([a-zA-Z]+/[a-zA-Z-]+)”部分正是识别一个 MIME-Type，在而后的 [E=MIMETYPE:$1] 将这一部分存入了 MIMETYPE 这一环境变量，然后在第三行将这个环境变量的值作为 MIME-Type。&lt;/p&gt;
&lt;p&gt;可是，当我们尝试访问 text/html/upsuper.u 的时候，这个文件再次被直接输出了，MIME-Type 根本没有被指定！疯了……&lt;/p&gt;
&lt;p&gt;看看 RewriteLog 里面都写了些什么（已去除无关部分）：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p108618&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1086code18&quot;&gt;&lt;pre class=&quot;text&quot; style=&quot;font-family:monospace;&quot;&gt;[rid#21e031f8/initial] (3) add path info postfix: ~/web/test/text -&amp;gt; ~/web/test/text/html/upsuper.u
[rid#21e031f8/initial] (3) strip per-dir prefix: ~/web/test/text/html/upsuper.u -&amp;gt; text/html/upsuper.u
[rid#21e031f8/initial] (3) applying pattern '^([a-zA-Z]+/[a-zA-Z-]+)/(.*)\.u$' to uri 'text/html/upsuper.u'
[rid#21e031f8/initial] (2) rewrite 'text/html/upsuper.u' -&amp;gt; 'upsuper'
[rid#21e031f8/initial] (3) add per-dir prefix: upsuper -&amp;gt; ~/web/test/upsuper
[rid#21e031f8/initial] (3) add path info postfix: ~/web/test/upsuper -&amp;gt; ~/web/test/upsuper/html/upsuper.u
[rid#21e031f8/initial] (3) strip per-dir prefix: ~/web/test/upsuper/html/upsuper.u -&amp;gt; upsuper/html/upsuper.u
[rid#21e031f8/initial] (3) applying pattern '.' to uri 'upsuper/html/upsuper.u'
[rid#21e031f8/initial] (2) remember ~/web/test/upsuper to have MIME-type 'text/html'
[rid#21e031f8/initial] (2) strip document_root prefix: ~/web/test/upsuper -&amp;gt; /test/upsuper
[rid#21e031f8/initial] (1) internal redirect with /test/upsuper [INTERNAL REDIRECT]
[rid#21e031f8/initial] (1) force filename redirect:/test/upsuper to have MIME-type 'text/html'
[rid#21e08c80/initial/redir#1] (3) strip per-dir prefix: ~/web/test/upsuper -&amp;gt; upsuper
[rid#21e08c80/initial/redir#1] (3) applying pattern '^([a-zA-Z]+/[a-zA-Z-]+)/(.*)\.u$' to uri 'upsuper'
[rid#21e08c80/initial/redir#1] (3) strip per-dir prefix: ~/web/test/upsuper -&amp;gt; upsuper
[rid#21e08c80/initial/redir#1] (3) applying pattern '.' to uri 'upsuper'
[rid#21e08c80/initial/redir#1] (1) pass through ~/web/test/upsuper&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;注意看第9行，在这里 MIME-Type 已经被正确地设置了，但随后开始了内部重定向……orz&lt;/p&gt;
&lt;p&gt;本质上说，最后这样修改和前面一次没有很大的本质不同，最后一句都是除了修改 MIME-Type 没有修改任何网址内容。可是表现却有如此大的不同，究竟是为什么呢？&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340470897/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470897/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470897/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470897/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/a-bug-of-rewrite-module-in-apache/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>我发觉研究的东西多了，就会看到各种神奇的 Bug……
今天写的这个 Bug 是关于 Apache 的 Rewrite 模块的。先来看一个很正常的 Rewrite 规则：

1
2
RewriteCond %{REQUEST_URI} \.u$
RewriteRule ^(.*)\.u$ $1

这个什么意思呢？用过的人一定看得出来，就是把一个 .t 结尾的请求发送到一个去掉 .t 的文件上面。比如我如果请求 upsuper.u 就会自动调用 upsuper 这个文件来返回。这没有什么疑问。
然后，我们发现，.u 文件浏览器不知道是什么，而 upsuper 这个文件在服务器上又是没有类型的，于是 Apache 不知道告诉浏览器（或者错误地告诉了一个）MIME-Type。这样即使这个文件是个网页，浏览器上也会出现下载提示或者当作纯文本直接输出。
翻阅了一下 Rewrite 模块的资料，我们了解到可以使用 T 这个标志符来强制指定 MIME-Type 类型，于是规则变成了下面这样：

1
2
RewriteCond %{REQUEST_URI} \.u$
RewriteRule ^(.*)\.u$ $1 [T=text/html]

可是无效！
Bug 开始出现了~

在 Apache 基金会的 Bugzilla 里面翻到了关于这个 Bug 的内容。然后看一看日期，OMG，2005年的 Bug，很跨10个年头没有解决！
看了一下，里面有一个可能是开发人员，说这一问题可能是由于引发了一个内部跳转导致的。并且提供了一种解决方法，我参照该解决方法再次修改我的 Rewrite 规则，变成下面这样：

1
2
3
RewriteCond %{REQUEST_URI} \.u$
RewriteRule ^(.*)\.u$ $1
RewriteRule . - [T=text/html]

成功了！泪流满面……
不过，有趣的还没结束~仅能变出 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340470897/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470897/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470897/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470897/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Bug</category><category>探究学习</category><category>Apache</category><category>Rewrite</category><pubDate>Sun, 07 Mar 2010 19:20:54 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/a-bug-of-rewrite-module-in-apache/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1086</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/a-bug-of-rewrite-module-in-apache/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340470897/5141978</fs:itemid></item><item><title>[转] 我只是在 C-V</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340976777/5141978/1/item.html</link><content:encoded>&lt;p&gt;首先声明，我在下面转载的内容，由于我英语水平极低，不能理解其含义……然后开始：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Zakaria: &lt;/strong&gt;I will take advantage of your kindness and ask you a question that many people around the world wonder about. There is a very famous photograph of you at Tiananmen square in 1989. What lesson did you take from your experiences in dealing with that problem in 1989?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wen Jiabao: &lt;/strong&gt;I believe that while moving ahead with economic reforms, we also need to advance political reforms, as our development is comprehensive in nature, our reform should also be comprehensive.&lt;/p&gt;
&lt;p&gt;I think the core of your question is about the development of democracy in China. I believe when it comes to the development of democracy in China, we talk about progress to be made in three areas:&lt;/p&gt;
&lt;p&gt;No. 1: We need to gradually improve the democratic election system so that state power will truly belong to the people and state power will be used to serve the people&lt;/p&gt;
&lt;p&gt;No. 2: We need to improve the legal system, run the country according to law, and establish the country under the rule of law and we need to view an independent and just judicial system.&lt;/p&gt;
&lt;p&gt;No. 3: Government should be subject to oversight by the people and that will ask us, call on us to increase transparency in government affairs and particularly it is also necessary for government to accept oversight by the news media and other parties.&lt;/p&gt;
&lt;p&gt;There is also another important aspect that when it comes to development of democracy in China, we need to take into account China&amp;#8217;s national conditions, and we need to introduce a system that suits China&amp;#8217;s special features, and we need to introduce a gradual approach.&lt;/p&gt;
&lt;p&gt;来源：&lt;a href=&quot;http://edition.cnn.com/2008/WORLD/asiapcf/09/29/chinese.premier.transcript/index.html&quot;&gt;Transcript of interview with Chinese Premier Wen Jiabao &amp;#8211; CNN.com&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340976777/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340976777/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340976777/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340976777/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/i-am-only-do-c-v/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>首先声明，我在下面转载的内容，由于我英语水平极低，不能理解其含义……然后开始：
Zakaria: I will take advantage of your kindness and ask you a question that many people around the world wonder about. There is a very famous photograph of you at Tiananmen square in 1989. What lesson did you take from your experiences in dealing with that problem in 1989?
Wen Jiabao: I believe that while moving [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340976777/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340976777/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340976777/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340976777/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>琐事杂谈</category><pubDate>Fri, 05 Mar 2010 16:46:19 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/i-am-only-do-c-v/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1111</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/i-am-only-do-c-v/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340976777/5141978</fs:itemid></item><item><title>关于域名转移……抱怨一下</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340470920/5141978/1/item.html</link><content:encoded>&lt;p&gt;继续寻求空间合租……&lt;/p&gt;
&lt;p&gt;话说 doggy 小朋友是最早提出合租的，我就相应了。不过最后去办理的是我，而且第一个转移好的也是我。doggy 小朋友很明智的一开始就没有注册 .cn 的域名，而是直接注册了 codebeta.org 这一域名。&lt;/p&gt;
&lt;p&gt;不过这次帮助他转移这个域名到新的空间商，真是麻烦透了。&lt;/p&gt;
&lt;p&gt;我们原来是在浪点旗下的&lt;a href=&quot;http://redphp.cn&quot;&gt;红色主机&lt;/a&gt;申请的空间，不过由于其涨价和国内的各种网站风波，我们不得不选择放弃。但 doggy 不愿意放弃他的域名，于是就想转移过来。当然，在美国空间商方面，转入肯定是可以进行的，但国内这边就麻烦了。红色主机注册域名是以&lt;a href=&quot;http://www.dns.com.cn&quot;&gt;新网互联&lt;/a&gt;代理的名义进行的，因此最终的域名管理都要在新网互联进行，而红色主机也不管域名转出的事宜，而要我直接联系新网互联。&lt;/p&gt;
&lt;p&gt;联系新网互联，客服告诉我，需要下载并填写一份表格，并且提供身份证明材料。我就把这个表格交给 doggy，并且告诉他办理流程。然后我发现表格上有一栏“新网互联当前会员或代理ID”，我去问红色主机的客服要，他们告诉我不需要填写。我为了保险起见，又去询问了新网互联的客服。新网互联却告诉我，所有的内容都要填写。这让我非常囧！更囧的事还在后面——新网互联的客服提醒我看到了下面另一个更重要的东西：加盖代理公章！也就是说，这个表格什么的，这些材料弄好，还要邮寄给红色主机，让他们盖章，然后再邮寄到新网互联……表格上还显示，转移申请必须在域名过期前15天之前提交才有效，而 doggy 的域名大约就剩下一个月左右了……&lt;/p&gt;
&lt;p&gt;我不知道该说什么好……&lt;/p&gt;
&lt;p&gt;现在我有些庆幸当时没有注册 upsuper.org 的域名，如果注册了，我也会遇到和 doggy 今天一样的窘境了……&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340470920/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470920/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470920/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470920/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/complain-about-the-domain-transfer/feed/</wfw:commentRss><slash:comments>1</slash:comments><description>继续寻求空间合租……
话说 doggy 小朋友是最早提出合租的，我就相应了。不过最后去办理的是我，而且第一个转移好的也是我。doggy 小朋友很明智的一开始就没有注册 .cn 的域名，而是直接注册了 codebeta.org 这一域名。
不过这次帮助他转移这个域名到新的空间商，真是麻烦透了。
我们原来是在浪点旗下的红色主机申请的空间，不过由于其涨价和国内的各种网站风波，我们不得不选择放弃。但 doggy 不愿意放弃他的域名，于是就想转移过来。当然，在美国空间商方面，转入肯定是可以进行的，但国内这边就麻烦了。红色主机注册域名是以新网互联代理的名义进行的，因此最终的域名管理都要在新网互联进行，而红色主机也不管域名转出的事宜，而要我直接联系新网互联。
联系新网互联，客服告诉我，需要下载并填写一份表格，并且提供身份证明材料。我就把这个表格交给 doggy，并且告诉他办理流程。然后我发现表格上有一栏“新网互联当前会员或代理ID”，我去问红色主机的客服要，他们告诉我不需要填写。我为了保险起见，又去询问了新网互联的客服。新网互联却告诉我，所有的内容都要填写。这让我非常囧！更囧的事还在后面——新网互联的客服提醒我看到了下面另一个更重要的东西：加盖代理公章！也就是说，这个表格什么的，这些材料弄好，还要邮寄给红色主机，让他们盖章，然后再邮寄到新网互联……表格上还显示，转移申请必须在域名过期前15天之前提交才有效，而 doggy 的域名大约就剩下一个月左右了……
我不知道该说什么好……
现在我有些庆幸当时没有注册 upsuper.org 的域名，如果注册了，我也会遇到和 doggy 今天一样的窘境了……&lt;img src=&quot;http://www1.feedsky.com/t1/340470920/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470920/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470920/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470920/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>MRain</category><category>琐事杂谈</category><category>域名</category><pubDate>Mon, 01 Mar 2010 18:35:30 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/complain-about-the-domain-transfer/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1083</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/complain-about-the-domain-transfer/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340470920/5141978</fs:itemid></item><item><title>upsuper.org 正式上线！</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340470929/5141978/1/item.html</link><content:encoded>&lt;p&gt;经过一天的努力，从 upsuper.org.cn 到 upsuper.org 的迁移基本完成，同时换了一个新的皮肤，感觉相当不错~不过这个皮肤不支持 widget 让人很是不爽，还有就是一些小小的细节又修修补补了一番，基本上还是不错的了~不过友情链接暂时还没搞好，比较麻烦……&lt;/p&gt;
&lt;p&gt;订阅 feed 的稍稍注意一下，以后 feed 的地址全部改为 &lt;a href=&quot;http://feed.feedsky.com/upsuper&quot;&gt;http://feed.feedsky.com/upsuper&lt;/a&gt;，不再使用 feed.upsuper.org.cn。除非 feedsky 倒闭了，否则不再变更……&lt;/p&gt;
&lt;p&gt;这个空间的访问速度还是不错的，很流畅，果然还是个很实惠的空间~不过偶尔也有那么一两下会很卡……然后继续，广告再发一遍：&lt;strong&gt;在此诚招空间合租者一位，无限空间无限流量，PHP、Python、Perl、RoR、CGI、CGI-BIN、MySQL、PgSQL 全功能 Linux 空间，可自定义 php.ini，提供域名对应的邮箱储存、邮箱别名服务，支持 POP3、IMAP、邮件列表，独立 FTP 管理，带免费自签名证书的 SSL 服务，含一个免费域名及一个独立 IP，3年共计525元RMB。有意者邮箱联系 &lt;a href=&quot;mailto:quanxunzhen@gmail.com&quot;&gt;quanxunzhen@gmail.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;然后把原来 upsuper.org.cn 里面的东西全部用 Rewrite 以 301 转移定向到这里的相应位置了，Google 的搜索应该很快也会转过来吧~&lt;br /&gt;
&lt;span id=&quot;more-1079&quot;&gt;&lt;/span&gt;&lt;br /&gt;
通知的最后来一点技术的东西，转移用的 htaccess 代码：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p107920&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1079code20&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteEngine&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;On&lt;/span&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{HTTP_HOST} ^(.*)upsuper\.org\.cn$
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^(.*)$ http://%1upsuper.org/$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt; [R=&lt;span style=&quot;color: #ff0000;&quot;&gt;301&lt;/span&gt;]&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;话说，wp-codebox 升级以后自动改回去了，实在不爽。准备什么时候再自己动手把 wp-codebox 大改一番然后单独发布……&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340470929/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470929/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470929/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470929/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/upsuper-org-now-online/feed/</wfw:commentRss><slash:comments>1</slash:comments><description>经过一天的努力，从 upsuper.org.cn 到 upsuper.org 的迁移基本完成，同时换了一个新的皮肤，感觉相当不错~不过这个皮肤不支持 widget 让人很是不爽，还有就是一些小小的细节又修修补补了一番，基本上还是不错的了~不过友情链接暂时还没搞好，比较麻烦……
订阅 feed 的稍稍注意一下，以后 feed 的地址全部改为 http://feed.feedsky.com/upsuper，不再使用 feed.upsuper.org.cn。除非 feedsky 倒闭了，否则不再变更……
这个空间的访问速度还是不错的，很流畅，果然还是个很实惠的空间~不过偶尔也有那么一两下会很卡……然后继续，广告再发一遍：在此诚招空间合租者一位，无限空间无限流量，PHP、Python、Perl、RoR、CGI、CGI-BIN、MySQL、PgSQL 全功能 Linux 空间，可自定义 php.ini，提供域名对应的邮箱储存、邮箱别名服务，支持 POP3、IMAP、邮件列表，独立 FTP 管理，带免费自签名证书的 SSL 服务，含一个免费域名及一个独立 IP，3年共计525元RMB。有意者邮箱联系 quanxunzhen@gmail.com
然后把原来 upsuper.org.cn 里面的东西全部用 Rewrite 以 301 转移定向到这里的相应位置了，Google 的搜索应该很快也会转过来吧~

通知的最后来一点技术的东西，转移用的 htaccess 代码：

1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)upsuper\.org\.cn$
RewriteRule ^(.*)$ http://%1upsuper.org/$1 [R=301]

话说，wp-codebox 升级以后自动改回去了，实在不爽。准备什么时候再自己动手把 wp-codebox 大改一番然后单独发布……&lt;img src=&quot;http://www1.feedsky.com/t1/340470929/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470929/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470929/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470929/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>琐事杂谈</category><category>My Blog</category><pubDate>Fri, 26 Feb 2010 16:43:36 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/upsuper-org-now-online/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1079</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/upsuper-org-now-online/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340470929/5141978</fs:itemid></item><item><title>新空间</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340470937/5141978/1/item.html</link><content:encoded>&lt;p&gt;由于某些众所周知的原因，我准备将空间搬到米国去了。由于另一个众所周知的原因，现在的域名也将很快停止使用。&lt;/p&gt;
&lt;p&gt;我已经申请好了新的空间，近期可能就要搬过去了。先做个广告：&lt;strong&gt;在此诚招空间合租者一位，无限空间无限流量，PHP、Python、Perl、RoR、CGI、CGI-BIN、MySQL、PgSQL 全功能 Linux 空间，可自定义 php.ini，提供域名对应的邮箱储存、邮箱别名服务，支持 POP3、IMAP、邮件列表，独立 FTP 管理，带免费自签名证书的 SSL 服务，含一个免费域名及一个独立 IP，3年共计525元RMB。有意者邮箱联系 &lt;a href=&quot;mailto:quanxunzhen@gmail.com&quot;&gt;quanxunzhen@gmail.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不过因为新空间还没摸索清楚，还在研究搬迁事宜。&lt;br /&gt;
&lt;span id=&quot;more-1069&quot;&gt;&lt;/span&gt;&lt;br /&gt;
下面讲讲今天的探索……这个新空间的 PHP 用了 CGI 的模式，而不是传统（或者说我熟悉的）PHP Module 的模式，而且作为 CGI 的 php 解析程序和 php.ini 配置文件也是放在网站的 cgi-bin 目录里面的，因此我怀疑可玩性很高，甚至可以自己编译 PHP 放上去用。不过这个空间有一个很麻烦的，就是不支持自动的泛域名匹配，这大大的不如现在的这个空间方便。不过经过一番研究，也并不是没有办法的。今天才算是第一次体会到了 Apache mod_rewrite 的强大！&lt;/p&gt;
&lt;p&gt;本来以为 rewrite 不能实现那样功能的，因为似乎 rewrite 不能把主机名弄进来匹配，结果发现我想错了。参考了一些 Apache 的官方资料，我发现 Apache 的官方文档里有一种很有趣的方式间接实现泛域名到子文件夹的匹配，大约是这个样子的：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p106925&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1069code25&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteEngine&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;on&lt;/span&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt;   %{HTTP_HOST}                 ^www\.[^.]+\.host\.com$
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt;   ^(.+)                        %{HTTP_HOST}$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;          [C]
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt;   ^www\.([^.]+)\.host\.com(.*) /home/$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;$&lt;span style=&quot;color: #ff0000;&quot;&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;惊叹于这种其实妙想！这个恐怕能实现的功能比那个 VirtualHost 的模块还要强大了吧~&lt;/p&gt;
&lt;p&gt;不过这个代码似乎是不能用的囧……做一个适合的修改就发生 500 错误……经过思考，我想起了很早以前说过的，mod_rewrite 是会把修改过的网址再次注入 rewrite 的，因此如果这样那么这个网址可能会不断的经过这个 rewrite 过程，造成死循环，最后被 Apache 以 500 强制结束。&lt;/p&gt;
&lt;p&gt;看来想在网站根目录下像现在这样搞是不行了……不过，办法总是有的，其实有的时候我觉得自己还是蛮聪明的~我就在根目录下建立了一个名叫 www 的文件夹，然后给出了下面这样的 .htaccess：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p106926&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1069code26&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteEngine&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;On&lt;/span&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{HTTP_HOST} ^[^\.]+\.upsuper\.org\.cn$
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} !^/www/
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^(.*)$ %{HTTP_HOST}/$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^([^\.]+)\.upsuper\.org\.cn/(.*)$ /www/$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;/$&lt;span style=&quot;color: #ff0000;&quot;&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OK，现在已经非常正常了，网页可以正常访问了~不过新的问题再度出现！所有的 PHP 都显示 404 错误……我汗！404？！那个 PHP 明明在那里凭啥 404 呢？&lt;/p&gt;
&lt;p&gt;后来在空间商的 FAQ 里面偶然看到，解析 PHP 用的东西储存在已经被我删掉的 cgi-bin 文件夹里面……呃……马上把所有内容删掉恢复原来的内容。然后再放上这个，还是 404……其中必有问题……那么问题一定出在 cgi-bin 文件夹上……难道 Apache 最后也要通过自己访问 CGI 接口？其实其中奥妙我也不是很了解，不过最后又加了一条针对 cgi-bin 的 rewrite 规则，成功解决。关于 Apache 和 PHP 通过 CGI 接口的机制看来还是很值得好好研究研究的嗯……下面是最后的代码：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p106927&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1069code27&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteEngine&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;On&lt;/span&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{HTTP_HOST} ^[^\.]+\.upsuper\.org\.cn$
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} !^/www/
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} !^/cgi-bin/
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^(.*)$ %{HTTP_HOST}/$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^([^\.]+)\.upsuper\.org\.cn/(.*)$ /www/$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt;/$&lt;span style=&quot;color: #ff0000;&quot;&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;最后还有一个小小的问题，就是遇到找不到的 PHP，服务器虽然返回了 404 的头，不过显示的内容却是“No input file specified.”，而不是我指定的 404 页面（当然，IE 用户肯定什么都看不到，因为 IE 已经默认为他们准备好了一个“友好”的 404 页面）。这个虽然不是什么大问题，不过也还是很烦人的，有搜索了一番，最后在 rewrite 规则里面又加了两行解决问题：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p106928&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1069code28&quot;&gt;&lt;pre class=&quot;apache&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteCond&lt;/span&gt; %{DOCUMENT_ROOT}/$&lt;span style=&quot;color: #ff0000;&quot;&gt;1&lt;/span&gt; !-f
&lt;span style=&quot;color: #00007f;&quot;&gt;RewriteRule&lt;/span&gt; ^(.*\.php)$ - [T=text/html]&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;稍微想一想肯定看出来，这个代码不是没有问题的，不过我想我应该不会遇到吧……嗯……&lt;/p&gt;
&lt;p&gt;最后就是关于 php.ini，php.ini 里面不小心撇到了 mbstring 的设置，发现默认语言竟然是 Japanese……呃……马上改成了 Chinese，并且把下面的默认编码 EUC-JP 也改成了 EUC-CN，真是无语……不知道这个是 PHP 的默认配置，还是那个客服看我英语这么差以为我是日本人“帮”我设置的呢？&lt;/p&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://httpd.apache.org/docs/2.2/rewrite/rewrite_guide.html&quot;&gt;URL Rewriting Guide &amp;#8211; Apache HTTP Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jenseng.com/archives/000035.html&quot;&gt;&amp;#8220;No input file specified&amp;#8221; | jenseng.com&lt;/a&gt; &lt;a href=&quot;http://www.panuworld.net/&quot;&gt;panuworld&lt;/a&gt; 的回复&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;还想讲一点买空间的事情。因为这个空间商支持支付宝，我就决定用支付宝。而且支付宝不是支持 Linux 么，很好的嘛。今天中午就跑到邮局去汇款给我很早以前申请了但一直没用的支付宝账户充钱。然后充完跑回来打开上网本登录支付宝充值……为什么要打开上网本？因为台机的 Arch Linux 已经把 Firefox 升级到了 3.6，而支付宝唯一支持 Linux 的插件，是不兼容 Firefox 3.6 的……幸好上网本的 Ubuntu 9.10 很乖巧的使用了 Firefox 3.5.8，还能用那个支付宝插件。很期待支付宝能快些支持 Firefox 3.6，这样我以后也可以网购了~这年头天朝的银行不厚道，几乎完全不支持我家 Linux……还是支付宝好嗯~&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340470937/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470937/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470937/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470937/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/my-new-web-space/feed/</wfw:commentRss><slash:comments>2</slash:comments><description>由于某些众所周知的原因，我准备将空间搬到米国去了。由于另一个众所周知的原因，现在的域名也将很快停止使用。
我已经申请好了新的空间，近期可能就要搬过去了。先做个广告：在此诚招空间合租者一位，无限空间无限流量，PHP、Python、Perl、RoR、CGI、CGI-BIN、MySQL、PgSQL 全功能 Linux 空间，可自定义 php.ini，提供域名对应的邮箱储存、邮箱别名服务，支持 POP3、IMAP、邮件列表，独立 FTP 管理，带免费自签名证书的 SSL 服务，含一个免费域名及一个独立 IP，3年共计525元RMB。有意者邮箱联系 quanxunzhen@gmail.com
不过因为新空间还没摸索清楚，还在研究搬迁事宜。

下面讲讲今天的探索……这个新空间的 PHP 用了 CGI 的模式，而不是传统（或者说我熟悉的）PHP Module 的模式，而且作为 CGI 的 php 解析程序和 php.ini 配置文件也是放在网站的 cgi-bin 目录里面的，因此我怀疑可玩性很高，甚至可以自己编译 PHP 放上去用。不过这个空间有一个很麻烦的，就是不支持自动的泛域名匹配，这大大的不如现在的这个空间方便。不过经过一番研究，也并不是没有办法的。今天才算是第一次体会到了 Apache mod_rewrite 的强大！
本来以为 rewrite 不能实现那样功能的，因为似乎 rewrite 不能把主机名弄进来匹配，结果发现我想错了。参考了一些 Apache 的官方资料，我发现 Apache 的官方文档里有一种很有趣的方式间接实现泛域名到子文件夹的匹配，大约是这个样子的：

1
2
3
4
RewriteEngine on
RewriteCond   %{HTTP_HOST}             [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340470937/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470937/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470937/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470937/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>和谐</category><category>探究学习</category><category>CGI</category><category>PHP</category><category>Apache</category><category>My Blog</category><pubDate>Thu, 25 Feb 2010 23:11:20 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/my-new-web-space/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1069</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/my-new-web-space/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340470937/5141978</fs:itemid></item><item><title>转入 Arch Linux</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340470957/5141978/1/item.html</link><content:encoded>&lt;p&gt;过去的一段时间里看到很多关于 Arch Linux 的文章，我也对此有那么一点感兴趣了。据说这个是比 Ubuntu 要难折腾一些的，我想，这也正好测试一下我的 Linux 水平，扩充一下关于 Linux 的见识嗯~（其实说白了就是装一下13嗯……）&lt;/p&gt;
&lt;p&gt;准备工作肯定是要有的。由于我这次又准备对硬盘分区做一番大动作，资料备份是必不可少的了。整理了一下移动硬盘里的东西，然后把 /home/upsuper 里面的大量资料和部分配置文件移入了移动硬盘，费了大概一个多小时的时间。接下去打开了我的上网本，打开当时在 &lt;a href=&quot;http://linuxtoy.org&quot;&gt;LinuxToy&lt;/a&gt; 刊登的 &lt;a href=&quot;http://linuxtoy.org/archives/install-guide-for-arch-linux.html&quot;&gt;Arch Linux 安装指南&lt;/a&gt;，这是非常必要的。对于一个用惯了 Ubuntu 这样几乎纯图形界面配置的人来说，一个更接近于 LFS 的系统没有参考自然是不敢随便动手的。&lt;br /&gt;
&lt;span id=&quot;more-1064&quot;&gt;&lt;/span&gt;&lt;br /&gt;
不过有了这个参考，其实 Arch Linux 说实话也就比 Ubuntu 要麻烦那么一点点了……安装的过程中虽然有很多与那个指南不一样的地方，不过因为各种原因没有一一记录下来……比较有印象的是分区，是2个主分区，4个逻辑分区。虽然很多人说过，现在已经不再需要把 /boot 单独分出来了。不过考虑到我准备将默认文件系统弄成 ext4，而 Arch Linux 默认又不提供 Grub2 作为启动器，那我就只能非常无奈的单独分出一个 /boot 了……这就是第一个主分区。另外一个主分区留了 500MB，准备改天在里面放个 FreeBSD 什么的耍耍~4个逻辑分区是不能免俗的 /tmp、根分区、/home 和交换区。本来有点想像上网本里弄得那样把 /tmp 弄到内存里面去。不过想来想去，觉得 1GB 的内存对于上网本来说够了，可是对于台机来说还是不算很大的，于是就作罢了，单独分区。给了 /tmp 1GB，交换区 512MB，根目录 20GB，剩下的就照例都给了 /home。&lt;/p&gt;
&lt;p&gt;我在安装的时候没有如安装指南所说的使用 Arch Linux 原本的源，而是转而直接使用了网易的源。由于这个原因，后面的安装配置过程异常迅速，因为网易的源在我这里的下载速度可以达到 1MB+/s！突然想起 Arch Linux 貌似还有多点下载的技术，我就不去研究了，不然可能 4MB/s、5MB/s 都能给我飙出来……接下去就直接赶英超美了……事实证明，福建电信还是比较厚道的~&lt;/p&gt;
&lt;p&gt;我记得，那个 20GB 的空间，刚刚装完 Arch Linux 的核心部分，大概只占用了 8%，接着我开始大装软件。什么 python、erlang、texlive、gnome、jdk、jre、openoffice 之流都装上去，现在看看，已经占用了 33% 了……&lt;/p&gt;
&lt;p&gt;因为一开始记了一张软件单子，按着单子安装软件也是十分的方便，在进入图形界面前就已经把需要的软件安装好大半了。话说 Arch Linux 的启动没有启动画面，这点让我有点不适应。而且看启动也没有加入 quiet 参数，启动过程各种信息喷涌而出。本想自己给他加上的，后来想想也就作罢了，没所谓的事情。&lt;/p&gt;
&lt;p&gt;倒是字体的问题纠结了我一些时间，最后我还是从 AUR 上安装了文泉驿微米黑，然后手动把所有字体调为微米黑，现在显示效果相当赞。最后就是 Firefox 的插件问题了。因为插件我也列了张单子（这次可是准备充分嗯！），然后一个一个装上，最后用 Xmarks 同步一下书签，现在 Firefox 和我换系统之前几乎是一模一样了~当然，效率比原来那个提高了不少~&lt;/p&gt;
&lt;p&gt;不得不说的是，Arch Linux 初装后的效率确实是没得说的快，比 Ubuntu 快多了。不过不知道是不是因为默认安装的东西少，还是希望这种效率能够不断保持下去。现在用 Arch，估计在以后的很长一段时间里不会再换了，也不会再重装了，Arch 你要给我好好表现~&lt;/p&gt;
&lt;p&gt;最后上一张图把，超赞 &lt;a href=&quot;http://www.bisigi-project.org/?lang=en&quot;&gt;Bisigi&lt;/a&gt; 的新主题 &lt;a href=&quot;http://www.bisigi-project.org/?p=411&amp;#038;lang=en&quot;&gt;AirLines&lt;/a&gt;：&lt;br /&gt;
&lt;a href=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Screenshot.png&quot;&gt;&lt;img src=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Screenshot-300x187.png&quot; alt=&quot;&quot; title=&quot;Screenshot&quot; width=&quot;300&quot; height=&quot;187&quot; class=&quot;alignnone size-medium wp-image-1065&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340470957/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470957/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470957/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470957/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/turn-to-arch-linux/feed/</wfw:commentRss><slash:comments>8</slash:comments><description>过去的一段时间里看到很多关于 Arch Linux 的文章，我也对此有那么一点感兴趣了。据说这个是比 Ubuntu 要难折腾一些的，我想，这也正好测试一下我的 Linux 水平，扩充一下关于 Linux 的见识嗯~（其实说白了就是装一下13嗯……）
准备工作肯定是要有的。由于我这次又准备对硬盘分区做一番大动作，资料备份是必不可少的了。整理了一下移动硬盘里的东西，然后把 /home/upsuper 里面的大量资料和部分配置文件移入了移动硬盘，费了大概一个多小时的时间。接下去打开了我的上网本，打开当时在 LinuxToy 刊登的 Arch Linux 安装指南，这是非常必要的。对于一个用惯了 Ubuntu 这样几乎纯图形界面配置的人来说，一个更接近于 LFS 的系统没有参考自然是不敢随便动手的。

不过有了这个参考，其实 Arch Linux 说实话也就比 Ubuntu 要麻烦那么一点点了……安装的过程中虽然有很多与那个指南不一样的地方，不过因为各种原因没有一一记录下来……比较有印象的是分区，是2个主分区，4个逻辑分区。虽然很多人说过，现在已经不再需要把 /boot 单独分出来了。不过考虑到我准备将默认文件系统弄成 ext4，而 Arch Linux 默认又不提供 Grub2 作为启动器，那我就只能非常无奈的单独分出一个 /boot 了……这就是第一个主分区。另外一个主分区留了 500MB，准备改天在里面放个 FreeBSD 什么的耍耍~4个逻辑分区是不能免俗的 /tmp、根分区、/home 和交换区。本来有点想像上网本里弄得那样把 /tmp 弄到内存里面去。不过想来想去，觉得 1GB 的内存对于上网本来说够了，可是对于台机来说还是不算很大的，于是就作罢了，单独分区。给了 /tmp 1GB，交换区 512MB，根目录 20GB，剩下的就照例都给了 /home。
我在安装的时候没有如安装指南所说的使用 Arch Linux 原本的源，而是转而直接使用了网易的源。由于这个原因，后面的安装配置过程异常迅速，因为网易的源在我这里的下载速度可以达到 1MB+/s！突然想起 Arch [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340470957/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470957/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470957/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470957/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>我的计划</category><category>Linux</category><category>Arch Linux</category><pubDate>Fri, 12 Feb 2010 23:01:48 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/turn-to-arch-linux/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1064</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/turn-to-arch-linux/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340470957/5141978</fs:itemid></item><item><title>Firefox 的 DOM Bug 一则</title><link>http://item.feedsky.com/~feedsky/upsuper/~8088065/340470967/5141978/1/item.html</link><content:encoded>&lt;p&gt;做完了上次那个音乐征集系统的投票平台，又积累了些新的东西。因为投票平台的一些设计这么早发出来不大好，所以就先发一个发现~&lt;/p&gt;
&lt;p&gt;IE 的 Bug 已经说太多了，今天转过来，看看这次做的过程中发现的一个 Firefox 的 Bug~这个 Bug 的触发条件我已经初步探明了。&lt;br /&gt;
&lt;span id=&quot;more-1042&quot;&gt;&lt;/span&gt;&lt;br /&gt;
考察下面这个 HTML 文件：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p104231&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1042code31&quot;&gt;&lt;pre class=&quot;html4strict&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #00bbdd;&quot;&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt;
&lt;span style=&quot;color: #00bbdd;&quot;&gt;  &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;html&lt;/span&gt; xmlns&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; xml:&lt;span style=&quot;color: #000066;&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;en&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;http-equiv&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/html;charset=UTF-8&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;title&lt;/span&gt;&amp;gt;&lt;/span&gt;Bug of Firefox&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;title&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;link&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;media&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;all&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;a.css&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;rel&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;test&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;style&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    body { background: #ccc; }
    #x { float: left; height: 3em; width: 10em; margin-right: 1em; }
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;style&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    var t = 0;
    function $(id) {
      return document.getElementById(id);
    }
    function doit() {
      t = (t + 1) % 2;
      var $x = $('x');
      $('test').href = ['a.css', 'b.css'][t];
      style = window.getComputedStyle ? window.getComputedStyle($x, null)
                                      : $x.currentStyle;
      $('back').innerHTML = style.backgroundColor;
      $('color').innerHTML = style.color;
    }
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;script&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;x&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onclick&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;doit()&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;Hello!&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
  background: &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;span&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;back&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;span&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;br&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;
  color: &lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;span&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;color&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;span&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #66cc66;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;下面考察两个 CSS 文件：&lt;/p&gt;

&lt;div class=&quot;wp_codebox&quot;&gt;&lt;table&gt;&lt;tr id=&quot;p104232&quot;&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot; id=&quot;p1042code32&quot;&gt;&lt;pre class=&quot;css&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/* a.css */&lt;/span&gt;
&lt;span style=&quot;color: #cc00cc;&quot;&gt;#x&lt;/span&gt; &lt;span style=&quot;color: #00AA00;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #00AA00;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #cc00cc;&quot;&gt;#000&lt;/span&gt;&lt;span style=&quot;color: #00AA00;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #00AA00;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #cc00cc;&quot;&gt;#fff&lt;/span&gt;&lt;span style=&quot;color: #00AA00;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #00AA00;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/* b.css */&lt;/span&gt;
&lt;span style=&quot;color: #cc00cc;&quot;&gt;#x&lt;/span&gt; &lt;span style=&quot;color: #00AA00;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #00AA00;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #cc00cc;&quot;&gt;#fff&lt;/span&gt;&lt;span style=&quot;color: #00AA00;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #00AA00;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #cc00cc;&quot;&gt;#000&lt;/span&gt;&lt;span style=&quot;color: #00AA00;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #00AA00;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;很明显，这个页面就是点击那个 div，然后交替变换样式表，这就是我做网页即时换肤的重要方法。那么这有什么问题呢？&lt;/p&gt;
&lt;p&gt;问题就在，第一次点击那个 div 后。我们先猜测一下，第一次点击那个 div 后，background: 后面应该出现 #000 或一个与其等效的颜色值，而 color: 后面则应该出现 #fff 或一个与其等效的颜色值。下面我们来看一下结果：&lt;br /&gt;
&lt;a href=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Bug-of-Firefox_fx.png&quot;&gt;&lt;img src=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Bug-of-Firefox_fx-300x45.png&quot; alt=&quot;&quot; title=&quot;Bug of Firefox_fx&quot; width=&quot;300&quot; height=&quot;45&quot; class=&quot;alignnone size-medium wp-image-1049&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Bug-of-Firefox_cr.png&quot;&gt;&lt;img src=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Bug-of-Firefox_cr-300x45.png&quot; alt=&quot;&quot; title=&quot;Bug of Firefox_cr&quot; width=&quot;300&quot; height=&quot;45&quot; class=&quot;alignnone size-medium wp-image-1048&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Bug-of-Firefox_op.png&quot;&gt;&lt;img src=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Bug-of-Firefox_op-300x45.png&quot; alt=&quot;&quot; title=&quot;Bug of Firefox_op&quot; width=&quot;300&quot; height=&quot;45&quot; class=&quot;alignnone size-medium wp-image-1051&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Bug-of-Firefox_ie.png&quot;&gt;&lt;img src=&quot;http://blog.upsuper.org/wp-content/uploads/2010/02/Bug-of-Firefox_ie-300x45.png&quot; alt=&quot;&quot; title=&quot;Bug of Firefox_ie&quot; width=&quot;300&quot; height=&quot;45&quot; class=&quot;alignnone size-medium wp-image-1050&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上面这些截图从左到右从上到下依次是：Firefox 3.5.7 for Ubuntu、Chromium 5.0.320.0 for Ubuntu、Opera 10.00 for Linux 和 Internet Explorer 6.0.2800.1106。可以非常明显的看出，除了 Firefox，其他几个浏览器都返回了完全正确的结果！Firefox 啊 Firefox……&lt;/p&gt;
&lt;p&gt;&lt;del datetime=&quot;2010-02-11T13:21:53+00:00&quot;&gt;不知道这个 Bug 有没有人发现并提交过呢？反正这个 Bug 以我的英文水平我肯定是描述不清楚的……哪位大大帮我提交一下吧，谢了嗯~&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del datetime=&quot;2010-02-11T12:32:02+00:00&quot;&gt;不过这个 Bug 是否仅在 Linux 版出现我还不是非常清楚，甚至是不是仅仅在我的机子上出现，我都不了解……因此各位用 Firefox for Windows 的人也可以测试一下。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del datetime=&quot;2010-02-12T01:18:33+00:00&quot;&gt;经过测试，Firefox 3.6 for Windows 也存在这一 Bug，看来是没人提交过……&lt;/p&gt;
&lt;p&gt;我已经向 Mozilla 提交了这一 Bug：&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=545636&quot;&gt;Bug 545636&lt;/a&gt;，不知道表达的好不好……&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;此 Bug 已经被标明无效，原因是一名开发者发现在远程的情况下 Opera 和 Safari 等其他浏览器给出了同 Firefox 一样的结果，而导致这种结果的原因在于在异步的文件请求还未处理完成的情况下立即要求所需值。&lt;/p&gt;
&lt;p&gt;经过实验，如果远程访问，并且样式表与网页分离的情况下，似乎各个浏览器都会出现类似问题，即因为异步访问照成延迟。但当测试一个人提交的&lt;a href=&quot;https://bugzilla.mozilla.org/attachment.cgi?id=426498&quot;&gt;将样式表嵌入网页的版本&lt;/a&gt;后，Chromium 会偶然出现反馈错误，Firefox 总是出现错误，Opera 没有出现错误……我毛估 IE6 不支持那种写法，就不测试了。但在本地测试的情况下，永远只有 Firefox 出错。&lt;/p&gt;
&lt;p&gt;我想这或许正如那个开发者所认为的，不能算是 Bug，但这至少说明 Firefox 在某些位置的效率也是差到一种境界了……&lt;/p&gt;
&lt;p&gt;关于 IE6 非标准的 CSS 读取方法参考了：&lt;a href=&quot;http://www.jb51.net/article/16128.htm&quot;&gt;用javascript getComputedStyle获取和设置style的原理_javascript技巧_脚本之家&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340470967/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470967/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470967/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470967/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.upsuper.org/a-dom-bug-of-firefox/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>做完了上次那个音乐征集系统的投票平台，又积累了些新的东西。因为投票平台的一些设计这么早发出来不大好，所以就先发一个发现~
IE 的 Bug 已经说太多了，今天转过来，看看这次做的过程中发现的一个 Firefox 的 Bug~这个 Bug 的触发条件我已经初步探明了。

考察下面这个 HTML 文件：

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
&amp;#60;!DOCTYPE html PUBLIC &amp;#34;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;#34;
  &amp;#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;#34;&amp;#62;
&amp;#60;html xmlns=&amp;#34;http://www.w3.org/1999/xhtml&amp;#34; xml:lang=&amp;#34;en&amp;#34;&amp;#62;
&amp;#60;head&amp;#62;
  &amp;#60;meta http-equiv=&amp;#34;Content-Type&amp;#34; content=&amp;#34;text/html;charset=UTF-8&amp;#34; /&amp;#62;
  &amp;#60;title&amp;#62;Bug of Firefox&amp;#60;/title&amp;#62;
  &amp;#60;link media=&amp;#34;all&amp;#34; href=&amp;#34;a.css&amp;#34; type=&amp;#34;text/css&amp;#34; rel=&amp;#34;stylesheet&amp;#34; id=&amp;#34;test&amp;#34; /&amp;#62;
  &amp;#60;style type=&amp;#34;text/css&amp;#34;&amp;#62;
    body { background: #ccc; }
    #x { float: [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340470967/upsuper/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/upsuper/~8088065/340470967/5141978/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/upsuper/340470967/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/upsuper/340470967/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Bug</category><category>探究学习</category><category>Firefox</category><pubDate>Thu, 11 Feb 2010 19:19:51 +0800</pubDate><author>upsuper</author><comments>http://blog.upsuper.org/a-dom-bug-of-firefox/#comments</comments><guid isPermaLink="false">http://blog.upsuper.org/?p=1042</guid><dc:creator>upsuper</dc:creator><fs:srclink>http://blog.upsuper.org/a-dom-bug-of-firefox/</fs:srclink><fs:srcfeed>http://blog.upsuper.org/feed/</fs:srcfeed><fs:itemid>feedsky/upsuper/~8088065/340470967/5141978</fs:itemid></item></channel></rss>