<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">

<channel>
	<title>Felix's Blog</title>
	
	<link>http://blog.felixc.at</link>
	<description />
	<lastBuildDate>Tue, 25 Oct 2011 14:11:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/felixcat" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="felixcat" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/</creativeCommons:license><item>
		<title>在地址栏输入一个字母后的网址</title>
		<link>http://blog.felixc.at/2011/10/these-websites-best-describe-me/</link>
		<comments>http://blog.felixc.at/2011/10/these-websites-best-describe-me/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 14:02:16 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=1088</guid>
		<description><![CDATA[在好友的日志里看到了一份他的网址列表, 随手整理了一下自己的 &#8220;These websites best describe me.&#8221; a is for aur.archlinux.org //好地方不解释&#8230; b is for bilibili.tv //这个..必须的..看糟糕物的地方 c is for chdbits.org //下电影的地方&#8230; d is for dns.he.net //我主要的DNS托管地 e is for ebay.com //好吧, 其实上的挺少的, 不过其他e开头的网址开的更少吧&#8230; f is for felixcat.net //这个必须的= =虽然域名改了一段时间了, 但是访问次数还是没有老域名多&#8230; g is for g.camoe.org //&#8230;下糟糕东西的地方 h is for hub.hust.edu.cn //..查分选课的地方 i is for iptorrents.com [...]]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://aifreedom.com/mylife/175">好友的日志</a>里看到了一份他的网址列表, 随手整理了一下自己的 &#8220;These websites best describe me.&#8221;</p>
<p>a is for <span style="color: #0000ff;">aur.archlinux.org</span> //好地方不解释&#8230;<br />
b is for <span style="color: #0000ff;">bilibili.tv</span> //这个..必须的..看糟糕物的地方<br />
c is for <span style="color: #0000ff;">chdbits.org</span> //下电影的地方&#8230;<br />
d is for <span style="color: #0000ff;">dns.he.net</span> //我主要的DNS托管地<br />
e is for <span style="color: #000000;">ebay.com</span> //好吧, 其实上的挺少的, 不过其他e开头的网址开的更少吧&#8230;<br />
f is for <span style="color: #0000ff;">felixcat.net</span> //这个必须的= =虽然域名改了一段时间了, 但是访问次数还是没有老域名多&#8230;<br />
g is for <span style="color: #0000ff;">g.camoe.org</span> //&#8230;下糟糕东西的地方<br />
h is for <span style="color: #000000;">hub.hust.edu.cn</span> //..查分选课的地方<br />
i is for <span style="color: #0000ff;">iptorrents.com</span> //也是下电影的地方&#8230;<br />
j is for<span style="color: #0000ff;"> jpopsuki.eu</span> //下糟糕原声的地方&#8230;<br />
k is for <span style="color: #000000;">kmgtp.org</span> //HUDBT,不过现在去的非常少了<br />
l is for <span style="color: #0000ff;">lowendbox.com</span> //找便宜测试VPS的地方&#8230;<br />
m is for <span style="color: #0000ff;">minecraftwiki.net</span> //这个..嗯..大家懂的&#8230;<br />
n is for <span style="color: #0000ff;">nicovideo.jp</span> //看糟糕物的地方&#8230;<br />
o is for <span style="color: #0000ff;">open.weibo.com</span> //查新浪微博API的地方 = =&#8230;(这个悲剧<br />
p is for <span style="color: #0000ff;">pastebin.com</span> //好吧..经常贴东西&#8230;<br />
q is for <span style="color: #000000;">quickweb.co.nz</span> //其实没上过几次&#8230;<br />
r is for <span style="color: #0000ff;">report.hust.edu.cn</span> //..每次网挂了都上去看看什么情况<br />
s is for <span style="color: #0000ff;">stackoverflow.com</span> //这个必须的~<br />
t is for <span style="color: #0000ff;">taobao.com</span> //这个必须是淘宝了&#8230;<br />
u is for <span style="color: #0000ff;">u2.dmhy.org</span> //又是下糟糕物的地方&#8230;&#8230;!<br />
v is for <span style="color: #0000ff;">vtk.org</span> //好久没折腾的东西&#8230;<br />
w is for <span style="color: #0000ff;">webhostingtalk.com</span> //也是一个找廉价测试主机的地方<br />
x is for <span style="color: #0000ff;">xda-developers.com</span> //折腾android的地方&#8230;<br />
y is for <span style="color: #0000ff;">youtube.com</span> //这个也必须的了&#8230;<br />
z is for <span style="color: #0000ff;">zeromq.org</span> //也是好东西 嗯</p>
<p>于是&#8230;有近一半都是糟糕物&#8230;果然我坏掉了!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/10/these-websites-best-describe-me/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>解决SSH远程登录后屏幕尺寸不对的问题</title>
		<link>http://blog.felixc.at/2011/08/fix-ssh-remote-screen-auto-resize/</link>
		<comments>http://blog.felixc.at/2011/08/fix-ssh-remote-screen-auto-resize/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 19:26:21 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[SSH]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=1059</guid>
		<description><![CDATA[首先解释下标题: 其实我想表达的是: 解决SSH远程登录后本地终端窗口大小改变远程屏幕尺寸没有随之改变导致显示混乱的问题, 但是太长了, 嗯. 我的一部分Linux VPS存在这个问题, 而另一部分是正常的; 一个由镜像默认安装的Ubuntu 10.04 Server一定存在这个问题. 具体解决方法其实很简单, 只是因为搜索的时候有点小纠结, 所以当做译文吧: 编辑 /etc/screenrc 找到 termcapinfo xterm 'is=...' 注: &#8230;表示还有很多长得像乱码的字符, 反正前面部分能对上就行 修改为: termcapinfo xterm* 'is=...' 也就是说, 只添加那个*(星号). 之后重新连接/重新打开screen即可. 之前因为连上ssh并没有启动screen, 而是直接打开mtr, rtorrent 之类的程序, 也存在此问题, 所以没有怀疑到screenrc头上去 = =&#124;&#124;&#124;&#124; 参考资料: http://lists.gnu.org/archive/html/screen-users/2010-12/msg00027.html]]></description>
			<content:encoded><![CDATA[<p>首先解释下标题: 其实我想表达的是: <font color=blue>解决SSH远程登录后本地终端窗口大小改变远程屏幕尺寸没有随之改变导致显示混乱的问题</font>, 但是太长了, 嗯.<br />
我的一部分Linux VPS存在这个问题, 而另一部分是正常的; 一个由镜像默认安装的Ubuntu 10.04 Server一定存在这个问题.</p>
<p>具体解决方法其实很简单, 只是因为搜索的时候有点小纠结, 所以当做译文吧:<br />
编辑 /etc/screenrc<br />
找到</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">termcapinfo xterm 'is=...'</pre></div></div>

<p>注: &#8230;表示还有很多长得像乱码的字符, 反正前面部分能对上就行<br />
修改为:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">termcapinfo xterm* 'is=...'</pre></div></div>

<p>也就是说, 只添加那个<font color=red>*</font>(星号).<br />
之后重新连接/重新打开screen即可.</p>
<p>之前因为连上ssh并没有启动screen, 而是直接打开mtr, rtorrent 之类的程序, 也存在此问题, 所以没有怀疑到screenrc头上去 = =||||</p>
<p>参考资料:<br />
<a href="http://lists.gnu.org/archive/html/screen-users/2010-12/msg00027.html">http://lists.gnu.org/archive/html/screen-users/2010-12/msg00027.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/08/fix-ssh-remote-screen-auto-resize/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>让libTorrent优先选择教育网IPv6地址</title>
		<link>http://blog.felixc.at/2011/08/libtorrent-choose-cernet-ipv6-address-first/</link>
		<comments>http://blog.felixc.at/2011/08/libtorrent-choose-cernet-ipv6-address-first/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 16:44:43 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[libtorrent]]></category>
		<category><![CDATA[rtorrent]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=1053</guid>
		<description><![CDATA[猫在教育网机子上挂PT, 但是机子同时是内网的IPv6网关(HE的/64), 结果rtorrent每次返回给tracker的&#038;ipv6=后面总是我在HE的2001:470:xx:xx::1, 和教育网PT上其他用户之间连接效果差爆了. 在折腾了几种workaround无效后, 最后不得不改libtorrent的代码了! 由于ipv6部分本身就是由一个patch加上去的, 我只需要对这个patch再patch一次即可: 安装过程就不再赘述了, 满网上都是的&#8230; --- A/libtorrent-0.12.6-ipv6-07.patch 2011-08-19 00:02:03.603735921 +0800 +++ B/libtorrent-0.12.6-ipv6-07.patch 2011-08-19 00:36:14.824983083 +0800 @@ -417,7 +417,7 @@ diff -Nur libtorrent-0.12.6.orig/src/net/local_addr.cc libtorrent-0.12.6/src/net/local_addr.cc --- libtorrent-0.12.6.orig/src/net/local_addr.cc 1970-01-01 01:00:00.000000000 +0100 +++ libtorrent-0.12.6/src/net/local_addr.cc 2010-07-23 14:44:51.000000000 +0200 -@@ -0,0 +1,336 @@ +@@ -0,0 +1,340 @@ +// libTorrent - BitTorrent library +// Copyright &#40;C&#41; 2005-2007, [...]]]></description>
			<content:encoded><![CDATA[<p>猫在教育网机子上挂PT, 但是机子同时是内网的IPv6网关(HE的/64), 结果rtorrent每次返回给tracker的&#038;ipv6=后面总是我在HE的2001:470:xx:xx::1, 和教育网PT上其他用户之间连接效果差爆了.</p>
<p>在折腾了几种workaround无效后, 最后不得不改libtorrent的代码了! 由于ipv6部分本身就是由一个patch加上去的, 我只需要对这个patch再patch一次即可:<br />
安装过程就不再赘述了, 满网上都是的&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;"><span style="color: #888822;">--- A/libtorrent-0.12.6-ipv6-07.patch	2011-08-19 00:02:03.603735921 +0800</span>
<span style="color: #888822;">+++ B/libtorrent-0.12.6-ipv6-07.patch	2011-08-19 00:36:14.824983083 +0800</span>
<span style="color: #440088;">@@ -417,7 +417,7 @@</span>
 diff -Nur libtorrent-0.12.6.orig/src/net/local_addr.cc libtorrent-0.12.6/src/net/local_addr.cc
 --- libtorrent-0.12.6.orig/src/net/local_addr.cc	<span style="">1970</span>-01-01 01:00:<span style="">00.000000000</span> +0100
 +++ libtorrent-0.12.6/src/net/local_addr.cc	<span style="">2010</span>-07-<span style="">23</span> <span style="">14</span>:<span style="">44</span>:<span style="">51.000000000</span> +0200
<span style="color: #991111;">-@@ -0,0 +1,336 @@</span>
<span style="color: #00b000;">+@@ -0,0 +1,340 @@</span>
 +// libTorrent - BitTorrent library
 +// Copyright <span style="">&#40;</span>C<span style="">&#41;</span> <span style="">2005</span>-<span style="">2007</span>, Jari Sundell
 +//
<span style="color: #440088;">@@ -502,29 +502,33 @@</span>
 +#ifdef RAK_USE_INET6
 +// IPv6 priority, from highest to lowest:
 +//
<span style="color: #991111;">-+//  1. Global address <span style="">&#40;</span>2000::/16 not in 6to4 or Teredo<span style="">&#41;</span></span>
<span style="color: #991111;">-+//  2. 6to4 <span style="">&#40;</span>2002::/16<span style="">&#41;</span></span>
<span style="color: #991111;">-+//  3. Teredo <span style="">&#40;</span>2001::/32<span style="">&#41;</span></span>
<span style="color: #991111;">-+//  4. Empty/INADDR_ANY <span style="">&#40;</span>::<span style="">&#41;</span></span>
<span style="color: #991111;">-+//  5. Everything else <span style="">&#40;</span>link-local, ULA, etc.<span style="">&#41;</span></span>
<span style="color: #00b000;">++//  1. cernet &amp; cernet2 address <span style="">&#40;</span>2001:250::/32 and 2001:da8::/32<span style="">&#41;</span></span>
<span style="color: #00b000;">++//  2. Other global address <span style="">&#40;</span>2000::/16 not in 6to4 or Teredo<span style="">&#41;</span></span>
<span style="color: #00b000;">++//  3. 6to4 <span style="">&#40;</span>2002::/16<span style="">&#41;</span></span>
<span style="color: #00b000;">++//  4. Teredo <span style="">&#40;</span>2001::/32<span style="">&#41;</span></span>
<span style="color: #00b000;">++//  5. Empty/INADDR_ANY <span style="">&#40;</span>::<span style="">&#41;</span></span>
<span style="color: #00b000;">++//  6. Everything else <span style="">&#40;</span>link-local, ULA, etc.<span style="">&#41;</span></span>
 +int get_priority_ipv6<span style="">&#40;</span>const in6_addr&amp; addr<span style="">&#41;</span> <span style="">&#123;</span>
 +  const uint32_t *addr32 = reinterpret_cast&lt;const uint32_t *&gt;<span style="">&#40;</span>addr.s6_addr<span style="">&#41;</span>;
 +  if <span style="">&#40;</span>addr32<span style="">&#91;</span><span style="">0</span><span style="">&#93;</span> == htonl<span style="">&#40;</span><span style="">0</span><span style="">&#41;</span> &amp;&amp;
 +      addr32<span style="">&#91;</span><span style="">1</span><span style="">&#93;</span> == htonl<span style="">&#40;</span><span style="">0</span><span style="">&#41;</span> &amp;&amp;
 +      addr32<span style="">&#91;</span><span style="">2</span><span style="">&#93;</span> == htonl<span style="">&#40;</span><span style="">0</span><span style="">&#41;</span> &amp;&amp;
 +      addr32<span style="">&#91;</span><span style="">3</span><span style="">&#93;</span> == htonl<span style="">&#40;</span><span style="">0</span><span style="">&#41;</span><span style="">&#41;</span> <span style="">&#123;</span>
<span style="color: #991111;">-+    return <span style="">4</span>;</span>
<span style="color: #00b000;">++    return <span style="">5</span>;</span>
 +  <span style="">&#125;</span>
 +  if <span style="">&#40;</span>addr32<span style="">&#91;</span><span style="">0</span><span style="">&#93;</span> == htonl<span style="">&#40;</span>0x20010000<span style="">&#41;</span><span style="">&#41;</span> <span style="">&#123;</span>
<span style="color: #991111;">-+    return <span style="">3</span>;</span>
<span style="color: #00b000;">++    return <span style="">4</span>;</span>
 +  <span style="">&#125;</span>
 +  if <span style="">&#40;</span><span style="">&#40;</span>addr32<span style="">&#91;</span><span style="">0</span><span style="">&#93;</span> &amp; htonl<span style="">&#40;</span>0xffff0000<span style="">&#41;</span><span style="">&#41;</span> == htonl<span style="">&#40;</span>0x20020000<span style="">&#41;</span><span style="">&#41;</span> <span style="">&#123;</span>
<span style="color: #991111;">-+    return <span style="">2</span>;</span>
<span style="color: #00b000;">++    return <span style="">3</span>;</span>
 +  <span style="">&#125;</span>
<span style="color: #991111;">-+  if <span style="">&#40;</span><span style="">&#40;</span>addr32<span style="">&#91;</span>0<span style="">&#93;</span> &amp; htonl<span style="">&#40;</span>0xe0000000<span style="">&#41;</span><span style="">&#41;</span> == htonl<span style="">&#40;</span>0x20000000<span style="">&#41;</span><span style="">&#41;</span> <span style="">&#123;</span></span>
<span style="color: #00b000;">++  if <span style="">&#40;</span>addr32<span style="">&#91;</span><span style="">0</span><span style="">&#93;</span> == htonl<span style="">&#40;</span>0x20010250<span style="">&#41;</span> || addr32<span style="">&#91;</span>0<span style="">&#93;</span> == htonl<span style="">&#40;</span>0x20010da8<span style="">&#41;</span><span style="">&#41;</span> <span style="">&#123;</span></span>
 +    return <span style="">1</span>;
 +  <span style="">&#125;</span>
<span style="color: #991111;">-+  return <span style="">5</span>;</span>
<span style="color: #00b000;">++  if <span style="">&#40;</span><span style="">&#40;</span>addr32<span style="">&#91;</span>0<span style="">&#93;</span> &amp; htonl<span style="">&#40;</span>0xe0000000<span style="">&#41;</span><span style="">&#41;</span> == htonl<span style="">&#40;</span>0x20000000<span style="">&#41;</span><span style="">&#41;</span> <span style="">&#123;</span></span>
<span style="color: #00b000;">++    return <span style="">2</span>;</span>
<span style="color: #00b000;">++  <span style="">&#125;</span></span>
<span style="color: #00b000;">++  return <span style="">6</span>;</span>
 +<span style="">&#125;</span>
 +#endif
 +</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/08/libtorrent-choose-cernet-ipv6-address-first/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>给用NexusPHP的PT站写的分流/保种员自动发工资脚本</title>
		<link>http://blog.felixc.at/2011/08/auto-pay-for-nexusphp/</link>
		<comments>http://blog.felixc.at/2011/08/auto-pay-for-nexusphp/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 04:52:26 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=1048</guid>
		<description><![CDATA[如题.使用说明: 1, 为实现统计本月流量/保种时间(NexusPHP默认的数据表没有留这些数据), 需要在users表里增加 downloaded_lastmonth, uploaded_lastmonth, seedtime_lastmonth 三个字段. 2, 需要获取分流员/保种员信息, 也需指定pipeliner/guarder字段(enum或boolean, 后者需略微改动此代码) 3, 需要python2.x环境, 以及python-MySQLDb库. 4, 需要服务器上有正常的crontab, 每月1日0点执行即可. 5, 此脚本还提供了记录上月实际上传下载(不含优惠信息), 以及下载时间的统计部分, 相应部分默认已注释掉, 可以手动替换启用. 如需显示在userdetails页面上, 只需做一个简单的减法(当前-上月). 实际上传/下载量的统计还需修改announce.php. 6, 工资(魔力/邀请)参考下面的设置修改. 本初始数据来自CMCT-PT的考核标准和奖励细则. 7, 修改数据库连接字符串的相应部分, 即可用. #!/usr/bin/env python2 &#160; import MySQLdb, math, datetime from MySQLdb.cursors import DictCursor &#160; db = MySQLdb.connect&#40;&#34;localhost&#34;, &#34;user&#34;, &#34;password&#34;, &#34;database&#34;, charset = &#34;utf8&#34;, connect_timeout = [...]]]></description>
			<content:encoded><![CDATA[<p>如题.使用说明:<br />
1, 为实现统计本月流量/保种时间(NexusPHP默认的数据表没有留这些数据), 需要在users表里增加    downloaded_lastmonth, uploaded_lastmonth, seedtime_lastmonth 三个字段.<br />
2, 需要获取分流员/保种员信息, 也需指定pipeliner/guarder字段(enum或boolean, 后者需略微改动此代码)<br />
3, 需要python2.x环境, 以及python-MySQLDb库.<br />
4, 需要服务器上有正常的crontab, 每月1日0点执行即可.<br />
5, 此脚本还提供了记录上月实际上传下载(不含优惠信息), 以及下载时间的统计部分, 相应部分默认已注释掉, 可以手动替换启用. 如需显示在userdetails页面上, 只需做一个简单的减法(当前-上月). 实际上传/下载量的统计还需修改announce.php.<br />
6, 工资(魔力/邀请)参考下面的设置修改. 本初始数据来自CMCT-PT的考核标准和奖励细则.<br />
7, 修改数据库连接字符串的相应部分, 即可用.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python2</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> MySQLdb, <span style="color: #dc143c;">math</span>, <span style="color: #dc143c;">datetime</span>
<span style="color: #ff7700;font-weight:bold;">from</span> MySQLdb.<span style="color: black;">cursors</span> <span style="color: #ff7700;font-weight:bold;">import</span> DictCursor
&nbsp;
db = MySQLdb.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;localhost&quot;</span>, <span style="color: #483d8b;">&quot;user&quot;</span>, <span style="color: #483d8b;">&quot;password&quot;</span>, <span style="color: #483d8b;">&quot;database&quot;</span>, charset = <span style="color: #483d8b;">&quot;utf8&quot;</span>, connect_timeout = <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
cs = db.<span style="color: black;">cursor</span><span style="color: black;">&#40;</span>DictCursor<span style="color: black;">&#41;</span>
&nbsp;
query = <span style="color: #483d8b;">&quot;SELECT * FROM users&quot;</span>
cs.<span style="color: black;">execute</span><span style="color: black;">&#40;</span>query<span style="color: black;">&#41;</span>
alldata = cs.<span style="color: black;">fetchall</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
pays = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: #dc143c;">user</span> <span style="color: #ff7700;font-weight:bold;">in</span> alldata:
    <span style="color: #008000;">id</span> = <span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'id'</span><span style="color: black;">&#93;</span>
    username = <span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'username'</span><span style="color: black;">&#93;</span>
    downloaded = <span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;downloaded&quot;</span><span style="color: black;">&#93;</span>
    uploaded = <span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;uploaded&quot;</span><span style="color: black;">&#93;</span>
    <span style="color: #808080; font-style: italic;">#raw_downloaded = user[&quot;raw_downloaded&quot;]</span>
    <span style="color: #808080; font-style: italic;">#raw_uploaded = user[&quot;raw_uploaded&quot;]</span>
    seedtime = <span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;seedtime&quot;</span><span style="color: black;">&#93;</span>
    <span style="color: #808080; font-style: italic;">#leechtime = user[&quot;leechtime&quot;]</span>
&nbsp;
    downloaded_lastmonth = <span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;downloaded_lastmonth&quot;</span><span style="color: black;">&#93;</span>
    uploaded_lastmonth = <span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;uploaded_lastmonth&quot;</span><span style="color: black;">&#93;</span>
    <span style="color: #808080; font-style: italic;">#raw_downloaded_lastmonth = user[&quot;raw_downloaded_lastmonth&quot;]</span>
    <span style="color: #808080; font-style: italic;">#raw_uploaded_lastmonth = user[&quot;raw_uploaded_lastmonth&quot;]</span>
    seedtime_lastmonth = <span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;seedtime_lastmonth&quot;</span><span style="color: black;">&#93;</span>
    <span style="color: #808080; font-style: italic;">#leechtime_lastmonth = user[&quot;leechtime_lastmonth&quot;]</span>
&nbsp;
    pipeliner = <span style="color: black;">&#40;</span><span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'pipeliner'</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'yes'</span><span style="color: black;">&#41;</span>
    guarder = <span style="color: black;">&#40;</span><span style="color: #dc143c;">user</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'guarder'</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'yes'</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> pipeliner:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> pays.<span style="color: black;">has_key</span><span style="color: black;">&#40;</span>username<span style="color: black;">&#41;</span>:
            pays<span style="color: black;">&#91;</span>username<span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span><span style="color: #483d8b;">&quot;id&quot;</span>: <span style="color: #008000;">id</span><span style="color: black;">&#125;</span>
        pays<span style="color: black;">&#91;</span>username<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;uploaded_thismonth&quot;</span><span style="color: black;">&#93;</span> = uploaded - uploaded_lastmonth
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> guarder:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> pays.<span style="color: black;">has_key</span><span style="color: black;">&#40;</span>username<span style="color: black;">&#41;</span>:
            pays<span style="color: black;">&#91;</span>username<span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span><span style="color: #483d8b;">&quot;id&quot;</span>: <span style="color: #008000;">id</span><span style="color: black;">&#125;</span>
        pays<span style="color: black;">&#91;</span>username<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;seedtime_thismonth&quot;</span><span style="color: black;">&#93;</span> = seedtime - seedtime_lastmonth
&nbsp;
    <span style="color: #808080; font-style: italic;">#query = &quot;UPDATE users SET downloaded_lastmonth = %s, uploaded_lastmonth = %s, raw_downloaded_lastmonth = %s, raw_uploaded_lastmonth = %s, seedtime_lastmonth = %s, leechtime_lastmonth = %s WHERE id = %s&quot;</span>
    <span style="color: #808080; font-style: italic;">#cs.execute(query, (downloaded, uploaded, raw_downloaded, raw_uploaded, seedtime, leechtime, id))</span>
    query = <span style="color: #483d8b;">&quot;UPDATE users SET downloaded_lastmonth = %s, uploaded_lastmonth = %s, seedtime_lastmonth = %s, WHERE id = %s&quot;</span>
    cs.<span style="color: black;">execute</span><span style="color: black;">&#40;</span>query, <span style="color: black;">&#40;</span>downloaded, uploaded, seedtime, <span style="color: #008000;">id</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: #dc143c;">user</span> <span style="color: #ff7700;font-weight:bold;">in</span> pays.<span style="color: black;">keys</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    karma = <span style="color: #ff4500;">0</span>
    invite = <span style="color: #ff4500;">0</span>
    strprt = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> pays<span style="color: black;">&#91;</span><span style="color: #dc143c;">user</span><span style="color: black;">&#93;</span>.<span style="color: black;">has_key</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;uploaded_thismonth&quot;</span><span style="color: black;">&#41;</span>:
        warning = <span style="color: #008000;">False</span>
        data = pays<span style="color: black;">&#91;</span><span style="color: #dc143c;">user</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'uploaded_thismonth'</span><span style="color: black;">&#93;</span>
&nbsp;
        lst = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'Bytes'</span>, <span style="color: #483d8b;">'KB'</span>, <span style="color: #483d8b;">'MB'</span>, <span style="color: #483d8b;">'GB'</span>, <span style="color: #483d8b;">'TB'</span>, <span style="color: #483d8b;">'PB'</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> data <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span>:
            i = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">math</span>.<span style="color: black;">floor</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">math</span>.<span style="color: black;">log</span><span style="color: black;">&#40;</span>data, <span style="color: #ff4500;">1024</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            i = <span style="color: #ff4500;">0</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> i <span style="color: #66cc66;">&gt;</span>= <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>lst<span style="color: black;">&#41;</span>:
            i = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>lst<span style="color: black;">&#41;</span> - <span style="color: #ff4500;">1</span>
        data_formated = <span style="color: black;">&#40;</span><span style="color: #483d8b;">'%.2f'</span> + <span style="color: #483d8b;">&quot; &quot;</span> + lst<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>data / <span style="color: #dc143c;">math</span>.<span style="color: #008000;">pow</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1024</span>, i<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        strprt += <span style="color: black;">&#91;</span><span style="color: #dc143c;">user</span> + <span style="color: #483d8b;">&quot; is pipeliner, uploaded: &quot;</span> + data_formated<span style="color: black;">&#93;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> data <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">107374182400</span>: <span style="color: #808080; font-style: italic;"># 100G</span>
            warning = <span style="color: #008000;">True</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> data <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">322122547200</span>:
            karma += <span style="color: #ff4500;">1000</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> data <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">536870912000</span>:
            karma += <span style="color: #ff4500;">2000</span>
            invite += <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> data <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">966367641600</span>:
            karma += <span style="color: #ff4500;">4000</span>
            invite += <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> data <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">1610612736000</span>:
            karma += <span style="color: #ff4500;">6000</span>
            invite += <span style="color: #ff4500;">2</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> data <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">2147483648000</span>:
            karma += <span style="color: #ff4500;">8000</span>
            invite += <span style="color: #ff4500;">3</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            karma += <span style="color: #ff4500;">10000</span>
            invite += <span style="color: #ff4500;">4</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> warning:
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;WARNING: Uploaded less than 100GB last month!&quot;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> pays<span style="color: black;">&#91;</span><span style="color: #dc143c;">user</span><span style="color: black;">&#93;</span>.<span style="color: black;">has_key</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;seedtime_thismonth&quot;</span><span style="color: black;">&#41;</span>:
        warning = <span style="color: #008000;">False</span>
        seconds_raw = pays<span style="color: black;">&#91;</span><span style="color: #dc143c;">user</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'seedtime_thismonth'</span><span style="color: black;">&#93;</span>
        seconds_datetime = <span style="color: #dc143c;">datetime</span>.<span style="color: black;">timedelta</span><span style="color: black;">&#40;</span>seconds=seconds_raw<span style="color: black;">&#41;</span>
        time_print = <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>seconds_datetime<span style="color: black;">&#41;</span>
        days_calc = seconds_datetime.<span style="color: black;">days</span>
&nbsp;
        strprt += <span style="color: black;">&#91;</span><span style="color: #dc143c;">user</span> + <span style="color: #483d8b;">&quot; is guarder, seed time: &quot;</span> + time_print<span style="color: black;">&#93;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> days_calc <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">100</span>:
            warning = <span style="color: #008000;">True</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> days_calc <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">300</span>:
            karma += <span style="color: #ff4500;">1000</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> days_calc <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">500</span>:
            karma += <span style="color: #ff4500;">2000</span>
            invite += <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> days_calc <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">900</span>:
            karma += <span style="color: #ff4500;">4000</span>
            invite += <span style="color: #ff4500;">1</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> days_calc <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">1500</span>:
            karma += <span style="color: #ff4500;">6000</span>
            invite += <span style="color: #ff4500;">2</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> days_calc <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">2000</span>:
            karma += <span style="color: #ff4500;">8000</span>
            invite += <span style="color: #ff4500;">3</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            karma += <span style="color: #ff4500;">10000</span>
            invite += <span style="color: #ff4500;">4</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> warning:
            <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;WARNING: Seeded less than 100 days last month!&quot;</span>
&nbsp;
    strprt += <span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;Total awarded: %d Karma points and %d invite(s).&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>karma, invite<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>strprt<span style="color: black;">&#41;</span>
&nbsp;
    query = <span style="color: #483d8b;">&quot;INSERT INTO messages (sender, receiver, added, msg, subject, saved, location) VALUES(%s, %s, %s, %s, %s, %s, %s)&quot;</span>
    cs.<span style="color: black;">execute</span><span style="color: black;">&#40;</span>query, <span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, pays<span style="color: black;">&#91;</span><span style="color: #dc143c;">user</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'id'</span><span style="color: black;">&#93;</span>, <span style="color: #dc143c;">datetime</span>.<span style="color: #dc143c;">datetime</span>.<span style="color: black;">now</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">&quot;Awards: &quot;</span> + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>strprt<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">&quot;Awards&quot;</span>, <span style="color: #483d8b;">&quot;no&quot;</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    query = <span style="color: #483d8b;">&quot;UPDATE users SET last_pm = NOW(), invites = invites + %d, seedbonus = seedbonus + %d WHERE id = &quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>invite, karma<span style="color: black;">&#41;</span>
    query += <span style="color: #483d8b;">&quot;%s&quot;</span>
    cs.<span style="color: black;">execute</span><span style="color: black;">&#40;</span>query, <span style="color: black;">&#40;</span>pays<span style="color: black;">&#91;</span><span style="color: #dc143c;">user</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'id'</span><span style="color: black;">&#93;</span>, <span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span>
&nbsp;
db.<span style="color: black;">commit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
cs.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/08/auto-pay-for-nexusphp/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>让 Linux 里的 .xmind 文件能被双击打开</title>
		<link>http://blog.felixc.at/2011/08/linux-xmind-double-click-open/</link>
		<comments>http://blog.felixc.at/2011/08/linux-xmind-double-click-open/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 13:49:03 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[XMind]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=1039</guid>
		<description><![CDATA[这其实只是一个简单的小trick ubuntu和arch默认安装的xmind, 如果直接在WM/DE的文件管理器里双击打开, 只会打开一个新脑图, 而不会打开你指定的文件, 这个问题还是相当annoying的. 下面是解决方法: 编辑 /usr/share/applications/xmind.desktop 文件, 找到 Exec= 开头的那一行, 修改为: Exec=/usr/share/xmind/xmind-bin %f (如果安装位置不一样请自行修改, 总之一定要是这个-bin的文件, 而不能是直接xmind %f) (其实很纳闷为啥xmind的策略这么诡异- -) 之后保存退出, 然后xmind文件就能直接打开啦! 不过这样仍然有一个问题: 打开的xmind里会有两个标签页, 一个是你打开的文件, 一个仍然是个新建的脑图, 而且默认焦点在新建的脑图上, 这个还是非常不爽的&#8230;希望各路大神提供解决方法 ^_^ 参考资料: http://code.google.com/p/xmind3/issues/detail?id=200]]></description>
			<content:encoded><![CDATA[<p>这其实只是一个简单的小trick <img src='http://blog.felixc.at/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ubuntu和arch默认安装的xmind, 如果直接在WM/DE的文件管理器里双击打开, 只会打开一个新脑图, 而不会打开你指定的文件, 这个问题还是相当annoying的. 下面是解决方法:</p>
<p>编辑 /usr/share/applications/xmind.desktop 文件,<br />
找到 Exec= 开头的那一行, 修改为:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Exec=/usr/share/xmind/xmind-bin %f</pre></div></div>

<p>(如果安装位置不一样请自行修改, 总之一定要是这个-bin的文件, 而不能是直接xmind %f)<br />
(其实很纳闷为啥xmind的策略这么诡异- -)</p>
<p>之后保存退出, 然后xmind文件就能直接打开啦!<br />
不过这样仍然有一个问题: 打开的xmind里会有两个标签页, 一个是你打开的文件, 一个仍然是个新建的脑图, 而且默认焦点在新建的脑图上, 这个还是非常不爽的&#8230;希望各路大神提供解决方法 ^_^</p>
<p>参考资料: <a href="http://code.google.com/p/xmind3/issues/detail?id=200">http://code.google.com/p/xmind3/issues/detail?id=200</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/08/linux-xmind-double-click-open/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>内网Windows XP用户使用ISATAP隧道的方法(附自动配置脚本)</title>
		<link>http://blog.felixc.at/2011/07/isatap-behind-nat-windows-xp-auto-config-python-script/</link>
		<comments>http://blog.felixc.at/2011/07/isatap-behind-nat-windows-xp-auto-config-python-script/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 17:19:31 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[isatap]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=1032</guid>
		<description><![CDATA[声明: 本文采用方法来自 http://blog.lifetoy.org/2010/01/31/isatap-behide-nat/, 我仅仅是写了一个自动配置脚本(不包括配置路由器). 首先, 这个方法只能让内网一台机器用上ISATAP隧道(仅仅是简单的转发了相关数据包而已). 主要步骤分为两个: 配置路由器转发协议号41的数据包到你的内网机器 修改本机的ISATAP相关配置(拥有外网环境则会自动完成这一步, 内网环境需要手动处理一些问题) 只有一部分路由器本来的FIRMWARE支持转发协议号41的数据包, 如果你用的路由器不支持, 那就只能尝试dd-wrt或者openwrt了. 如果你的路由器很不幸的也不能刷这类自定义固件, 那也就没办法了..(嗯) Linux类环境可以使用iptables实现转发(假设你的内网IP地址为192.168.0.10, 网关IP为192.168.0.1, 下同): iptables -t nat -A PREROUTING -d 192.168.0.10 -p 41 -j DNAT --to 192.168.0.1 openwrt则可以修改文件 /etc/config/firewall: (此段为转载) config redirect option src wan option dest lan option dest_ip 192.168.0.10 option proto 41 至此, 第一步就做完了. 第二步, 可以用下面的脚本自动完成. 原文给出的bat脚本我在win7和winxp里都试过, 不能发挥应有的作用, 而且每次外网ip变动时都需要修改, [...]]]></description>
			<content:encoded><![CDATA[<p>声明: 本文采用方法来自 <a href="http://blog.lifetoy.org/2010/01/31/isatap-behide-nat/">http://blog.lifetoy.org/2010/01/31/isatap-behide-nat/</a>, 我仅仅是写了一个自动配置脚本(不包括配置路由器).</p>
<p>首先, 这个方法只能让内网一台机器用上ISATAP隧道(仅仅是简单的转发了相关数据包而已). 主要步骤分为两个:</p>
<ul>
<li>配置路由器转发协议号41的数据包到你的内网机器</li>
<li>修改本机的ISATAP相关配置(拥有外网环境则会自动完成这一步, 内网环境需要手动处理一些问题)</li>
</ul>
<p>只有一部分路由器本来的FIRMWARE支持转发协议号41的数据包, 如果你用的路由器不支持, 那就只能尝试dd-wrt或者openwrt了. 如果你的路由器很不幸的也不能刷这类自定义固件, 那也就没办法了..(嗯)</p>
<p>Linux类环境可以使用iptables实现转发(假设你的内网IP地址为192.168.0.10, 网关IP为192.168.0.1, 下同):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> PREROUTING <span style="color: #660033;">-d</span> 192.168.0.10 <span style="color: #660033;">-p</span> <span style="color: #000000;">41</span> <span style="color: #660033;">-j</span> DNAT <span style="color: #660033;">--to</span> 192.168.0.1</pre></div></div>

<p>openwrt则可以修改文件 /etc/config/firewall: (此段为转载)</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">config redirect
option src                      wan
option dest                     lan
option dest_ip          192.168.0.10
option proto            41</pre></div></div>

<p>至此, 第一步就做完了.</p>
<p>第二步, 可以用下面的脚本自动完成.<br />
原文给出的bat脚本我在win7和winxp里都试过, 不能发挥应有的作用, 而且每次外网ip变动时都需要修改, 这对于动态ip用户更是无法接受的. 于是我用Python重写了一个脚本, 目前只能在XP系统使用. (其实要在Win7下用应该只需要很小的修改, 不过我暂时没测试环境:P)<br />
注: 脚本中写的是上交的isatap隧道服务器配置, 如需使用其他服务器, 稍加修改即可.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#coding:gbk</span>
<span style="color: #808080; font-style: italic;">#IPv6.py For Windows XP - By Felix Yan</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Change the following line if needed.</span>
interface = <span style="color: #483d8b;">&quot;Automatic Tunneling Pseudo-Interface&quot;</span>
ipv6prefix = <span style="color: #483d8b;">&quot;2001:da8:8000:d011&quot;</span>
isatapserver = <span style="color: #483d8b;">&quot;202.112.26.246&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>, <span style="color: #dc143c;">subprocess</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Getting current IP address ... &quot;</span>,
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib2</span>, <span style="color: #dc143c;">re</span>
<span style="color: #ff7700;font-weight:bold;">try</span>:
    page = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;http://www.ip138.com/ip2city.asp&quot;</span><span style="color: black;">&#41;</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    pub_ip = <span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\[</span>([<span style="color: #000099; font-weight: bold;">\d</span><span style="color: #000099; font-weight: bold;">\.</span>]+)<span style="color: #000099; font-weight: bold;">\]</span>'</span>, page<span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> pub_ip
<span style="color: #ff7700;font-weight:bold;">except</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Failed&quot;</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Disabling ISATAP ... &quot;</span>,
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;netsh int ipv6 isatap set state disabled&quot;</span>, shell=<span style="color: #008000;">True</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> u<span style="color: #483d8b;">&quot;确定&quot;</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>ret.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, <span style="color: #483d8b;">&quot;mbcs&quot;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Failed&quot;</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Success&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Re-enabling ISATAP ... &quot;</span>,
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;netsh int ipv6 isatap set state enabled&quot;</span>, shell=<span style="color: #008000;">True</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> u<span style="color: #483d8b;">&quot;确定&quot;</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>ret.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, <span style="color: #483d8b;">&quot;mbcs&quot;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Failed&quot;</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Success&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Deleting existing IPv6 address for ISATAP interface ... &quot;</span>
ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;netsh int ipv6 show address <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + interface + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>, shell=<span style="color: #008000;">True</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
old_ip = <span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>u<span style="color: #483d8b;">&quot;地址<span style="color: #000099; font-weight: bold;">\s</span>*:<span style="color: #000099; font-weight: bold;">\s</span>*([0-9a-fA-F<span style="color: #000099; font-weight: bold;">\:</span><span style="color: #000099; font-weight: bold;">\.</span>]+)&quot;</span>, <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>ret.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, <span style="color: #483d8b;">&quot;mbcs&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> ip <span style="color: #ff7700;font-weight:bold;">in</span> old_ip:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Deleting &quot;</span> + ip + <span style="color: #483d8b;">&quot; ... &quot;</span>
    <span style="color: #808080; font-style: italic;">#sys.stdout.flush()</span>
    ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;netsh int ipv6 del address <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + interface + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> &quot;</span> + ip, shell=<span style="color: #008000;">True</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
    <span style="color: #808080; font-style: italic;">#print ret.communicate()[0]</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Adding correct IPv6 addresses ... &quot;</span>
new_ip = <span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;fe80::5efe:&quot;</span> + pub_ip, ipv6prefix + <span style="color: #483d8b;">&quot;:0:5efe:&quot;</span> + pub_ip<span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> ip <span style="color: #ff7700;font-weight:bold;">in</span> new_ip:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Adding &quot;</span> + ip + <span style="color: #483d8b;">&quot; ... &quot;</span>,
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;netsh int ipv6 add address <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> + interface + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> &quot;</span> + ip, shell=<span style="color: #008000;">True</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> u<span style="color: #483d8b;">&quot;确定&quot;</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>ret.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, <span style="color: #483d8b;">&quot;mbcs&quot;</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Failed&quot;</span>
        <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Success&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Getting interface id ... &quot;</span>,
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ipv6 if&quot;</span>, shell=<span style="color: #008000;">True</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
<span style="color: #008000;">id</span> = <span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Interface ([<span style="color: #000099; font-weight: bold;">\d</span>]+): &quot;</span> + interface, ret.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">id</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Success: &quot;</span> + <span style="color: #008000;">id</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Failed&quot;</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Adding route ... &quot;</span>
route = <span style="color: #483d8b;">&quot;::&quot;</span> + isatapserver
ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ipv6 rtu ::/0 &quot;</span> + <span style="color: #008000;">id</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> + <span style="color: #483d8b;">&quot;/&quot;</span> + route, shell=<span style="color: #008000;">True</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
result = ret.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Testing 2001:470:20::2 ... &quot;</span>,
<span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ping -n 1 2001:470:20::2&quot;</span>, shell=<span style="color: #008000;">True</span>, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">time</span> = <span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\=</span>([<span style="color: #000099; font-weight: bold;">\d</span><span style="color: #000099; font-weight: bold;">\.</span>]+ms)&quot;</span>, ret.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">time</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Success: &quot;</span> + <span style="color: #dc143c;">time</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Failed&quot;</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span></pre></div></div>

<p>参考资料还有: <a href="http://serverfault.com/questions/89025/forwarding-protocol-41-6to4-to-a-linux-box">http://serverfault.com/questions/89025/forwarding-protocol-41-6to4-to-a-linux-box</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/07/isatap-behind-nat-windows-xp-auto-config-python-script/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>我的scrot截图脚本(自动上传imgur并复制链接)</title>
		<link>http://blog.felixc.at/2011/07/scrot-screenshot-script-auto-upload-to-imgur-and-copy-link/</link>
		<comments>http://blog.felixc.at/2011/07/scrot-screenshot-script-auto-upload-to-imgur-and-copy-link/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 12:06:10 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[scrot]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=1025</guid>
		<description><![CDATA[效果: 调用后用鼠标选中一矩形区域, 截图后上传到imgur, 上传成功后复制图片的外链地址到剪贴板, 并弹出系统提示, 然后删除本地保留的临时图片文件. 脚本(其实就一行 &#8211; -) sleep .1; scrot -bs -e 'curl -F &#34;image=@$f&#34; -F &#34;key=486690f872c678126a2c09a9e196ce1b&#34; http://imgur.com/api/upload.xml &#124; grep -E -o &#34;&#60;original_image&#62;(.)*&#60;/original_image&#62;&#34; &#124; grep -E -o &#34;http://i.imgur.com/[^&#60;]*&#34; &#124; xclip -selection c; notify-send &#34;Screenshot has successfully uploaded to `xclip -selection c -o`&#34;;rm -f $f' 2&#62; ~/screenshoterr.log 注: 可以把这个脚本绑定到WM/DE的快捷键上, 比如我绑定的是类似QQ的 Ctrl+Alt+A 注2: 不加sleep .1的话, [...]]]></description>
			<content:encoded><![CDATA[<p>效果: 调用后用鼠标选中一矩形区域, 截图后上传到imgur, 上传成功后复制图片的外链地址到剪贴板, 并弹出系统提示, 然后删除本地保留的临时图片文件.</p>
<p>脚本(其实就一行 &#8211; -)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sleep</span> .1; scrot <span style="color: #660033;">-bs</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'curl -F &quot;image=@$f&quot; -F &quot;key=486690f872c678126a2c09a9e196ce1b&quot; http://imgur.com/api/upload.xml | grep -E -o &quot;&lt;original_image&gt;(.)*&lt;/original_image&gt;&quot; | grep -E -o &quot;http://i.imgur.com/[^&lt;]*&quot; | xclip -selection c; notify-send &quot;Screenshot has successfully uploaded to `xclip -selection c -o`&quot;;rm -f $f'</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;</span> ~<span style="color: #000000; font-weight: bold;">/</span>screenshoterr.log</pre></div></div>

<p>注: 可以把这个脚本绑定到WM/DE的快捷键上, 比如我绑定的是类似QQ的 Ctrl+Alt+A<br />
注2: 不加sleep .1的话, 用KDE快捷键绑定调用的时候存在时不时失灵的问题, 暂不知为什么, 其他环境未测试.</p>
<p>拆解一下scrot自动调用的部分:<br />
上传图片:</p>
<ul>
<li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">curl <span style="color: #660033;">-F</span> <span style="color: #ff0000;">&quot;image=@<span style="color: #007800;">$f</span>&quot;</span> <span style="color: #660033;">-F</span> <span style="color: #ff0000;">&quot;key=486690f872c678126a2c09a9e196ce1b&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>imgur.com<span style="color: #000000; font-weight: bold;">/</span>api<span style="color: #000000; font-weight: bold;">/</span>upload.xml</pre></div></div>

</li>
</ul>
<p>提取图片直接外链地址</p>
<ul>
<li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-E</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">&quot;&lt;original_image&gt;(.)*&lt;/original_image&gt;&quot;</span></pre></div></div>

</li>
<li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-E</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">&quot;http://i.imgur.com/[^&lt;]*&quot;</span></pre></div></div>

</li>
</ul>
<p>输出链接到剪贴板</p>
<ul>
<li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">xclip <span style="color: #660033;">-selection</span> c</pre></div></div>

</li>
</ul>
<p>系统提示上传完成</p>
<ul>
<li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">notify-send <span style="color: #ff0000;">&quot;Screenshot has successfully uploaded to <span style="color: #780078;">`xclip -selection c -o`</span>&quot;</span></pre></div></div>

</li>
</ul>
<p>删除本地文件</p>
<ul>
<li>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$f</span></pre></div></div>

</li>
</ul>
<p>Imgur的AppKey及此脚本主要部分来自: <a href="http://crunchbanglinux.org/forums/topic/11539/script-screenshot-upload-on-imgur-clickable-thumbnail/">http://crunchbanglinux.org/forums/topic/11539/script-screenshot-upload-on-imgur-clickable-thumbnail/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/07/scrot-screenshot-script-auto-upload-to-imgur-and-copy-link/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>C语言课程设计 – 汉化全屏文本编辑器</title>
		<link>http://blog.felixc.at/2011/07/c-program-chinese-full-screen-text-editor/</link>
		<comments>http://blog.felixc.at/2011/07/c-program-chinese-full-screen-text-editor/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 12:33:36 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[TurboC]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=992</guid>
		<description><![CDATA[这个是我大半年前和 @T_buger 童鞋一起做的C语言课程设计程序, 一直忘记发上来. 最近有盆友的盆友找我盆友找我要了&#8230;于是, 我就把这货发上来吧! 文档神马的也都在里面哦~ 我多传几个网盘吧, 以免各种链接失效&#8230; 注: 彩蛋暴多的&#8230;不过内存泄露还是有一些的&#8230; 使用C graphics.h 神马的做图形显示, 蛋疼到爆什么的你懂的.. @T_buger 童鞋发在优酷上的视频: 传送门 介绍: 使用截图: 下面是下载地址(放在不同网盘, 内容都一样): 程序: http://min.us/mj9rtP http://www.megaupload.com/?d=PWG29B5K http://good.gd/1413726.htm http://hotfile.com/dl/124391593/a9aa84b/EDITORNEW.7z.html 文档: 暂缺]]></description>
			<content:encoded><![CDATA[<p>这个是我大半年前和 @T_buger 童鞋一起做的C语言课程设计程序, 一直忘记发上来. 最近有盆友的盆友找我盆友找我要了&#8230;于是, 我就把这货发上来吧!<br />
文档神马的也都在里面哦~ 我多传几个网盘吧, 以免各种链接失效&#8230;<br />
注: 彩蛋暴多的&#8230;不过内存泄露还是有一些的&#8230;<br />
使用C graphics.h 神马的做图形显示, 蛋疼到爆什么的你懂的..</p>
<p>@T_buger 童鞋发在优酷上的视频:<br />
<a href='http://v.youku.com/v_show/id_XMjI0MTM4MTky.html'>传送门</a></p>
<p>介绍:<br />
<a class="highslide img_24" href="http://blog.felixc.at/wp-content/uploads/2011/07/function.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/function-293x300.png" alt="" title="function" width="293" height="300" class="alignnone size-medium wp-image-993" /></a></p>
<p>使用截图:<br />
<a class="highslide img_25" href="http://blog.felixc.at/wp-content/uploads/2011/07/1.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/1-300x176.png" alt="" title="1" width="300" height="176" class="alignnone size-medium wp-image-994" /></a><a class="highslide img_26" href="http://blog.felixc.at/wp-content/uploads/2011/07/2.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/2-300x176.png" alt="" title="2" width="300" height="176" class="alignnone size-medium wp-image-995" /></a><br />
<a class="highslide img_27" href="http://blog.felixc.at/wp-content/uploads/2011/07/3.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/3-300x176.png" alt="" title="3" width="300" height="176" class="alignnone size-medium wp-image-998" /></a><a class="highslide img_28" href="http://blog.felixc.at/wp-content/uploads/2011/07/4.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/4-300x176.png" alt="" title="4" width="300" height="176" class="alignnone size-medium wp-image-999" /></a><br />
<a class="highslide img_29" href="http://blog.felixc.at/wp-content/uploads/2011/07/5.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/5-300x176.png" alt="" title="5" width="300" height="176" class="alignnone size-medium wp-image-1000" /></a><a class="highslide img_30" href="http://blog.felixc.at/wp-content/uploads/2011/07/6.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/6-300x176.png" alt="" title="6" width="300" height="176" class="alignnone size-medium wp-image-1001" /></a><br />
<a class="highslide img_31" href="http://blog.felixc.at/wp-content/uploads/2011/07/7.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/7-300x176.png" alt="" title="7" width="300" height="176" class="alignnone size-medium wp-image-1002" /></a><a class="highslide img_32" href="http://blog.felixc.at/wp-content/uploads/2011/07/8.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/8-300x176.png" alt="" title="8" width="300" height="176" class="alignnone size-medium wp-image-1003" /></a><br />
<a class="highslide img_33" href="http://blog.felixc.at/wp-content/uploads/2011/07/9.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/9-300x176.png" alt="" title="9" width="300" height="176" class="alignnone size-medium wp-image-1004" /></a><a class="highslide img_34" href="http://blog.felixc.at/wp-content/uploads/2011/07/10.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/10-300x176.png" alt="" title="10" width="300" height="176" class="alignnone size-medium wp-image-1005" /></a><br />
<a class="highslide img_35" href="http://blog.felixc.at/wp-content/uploads/2011/07/11.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/11-300x176.png" alt="" title="11" width="300" height="176" class="alignnone size-medium wp-image-1006" /></a><a class="highslide img_36" href="http://blog.felixc.at/wp-content/uploads/2011/07/12.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/12-300x176.png" alt="" title="12" width="300" height="176" class="alignnone size-medium wp-image-1007" /></a><br />
<a class="highslide img_37" href="http://blog.felixc.at/wp-content/uploads/2011/07/13.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/13-300x176.png" alt="" title="13" width="300" height="176" class="alignnone size-medium wp-image-1008" /></a><a class="highslide img_38" href="http://blog.felixc.at/wp-content/uploads/2011/07/14.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/14-300x176.png" alt="" title="14" width="300" height="176" class="alignnone size-medium wp-image-1009" /></a><br />
<a class="highslide img_39" href="http://blog.felixc.at/wp-content/uploads/2011/07/15.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/15-300x176.png" alt="" title="15" width="300" height="176" class="alignnone size-medium wp-image-1011" /></a><a class="highslide img_40" href="http://blog.felixc.at/wp-content/uploads/2011/07/16.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/16-300x176.png" alt="" title="16" width="300" height="176" class="alignnone size-medium wp-image-1012" /></a><br />
<a class="highslide img_41" href="http://blog.felixc.at/wp-content/uploads/2011/07/17.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/17-300x176.png" alt="" title="17" width="300" height="176" class="alignnone size-medium wp-image-1013" /></a><a class="highslide img_42" href="http://blog.felixc.at/wp-content/uploads/2011/07/18.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/18-300x176.png" alt="" title="18" width="300" height="176" class="alignnone size-medium wp-image-1014" /></a><br />
<a class="highslide img_43" href="http://blog.felixc.at/wp-content/uploads/2011/07/19.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/19-300x176.png" alt="" title="19" width="300" height="176" class="alignnone size-medium wp-image-1015" /></a><a class="highslide img_44" href="http://blog.felixc.at/wp-content/uploads/2011/07/20.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/20-300x176.png" alt="" title="20" width="300" height="176" class="alignnone size-medium wp-image-1016" /></a><br />
<a class="highslide img_45" href="http://blog.felixc.at/wp-content/uploads/2011/07/21.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/21-300x176.png" alt="" title="21" width="300" height="176" class="alignnone size-medium wp-image-1017" /></a><a class="highslide img_46" href="http://blog.felixc.at/wp-content/uploads/2011/07/22.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/22-300x176.png" alt="" title="22" width="300" height="176" class="alignnone size-medium wp-image-1018" /></a></p>
<p>下面是下载地址(放在不同网盘, 内容都一样):<br />
程序:
<ul>
<li><a href="http://min.us/mj9rtP">http://min.us/mj9rtP</a></li>
<li><a href="http://www.megaupload.com/?d=PWG29B5K">http://www.megaupload.com/?d=PWG29B5K</a></li>
<li><a href="http://good.gd/1413726.htm">http://good.gd/1413726.htm</a></li>
<li><a href="http://hotfile.com/dl/124391593/a9aa84b/EDITORNEW.7z.html">http://hotfile.com/dl/124391593/a9aa84b/EDITORNEW.7z.html</a></li>
</ul>
<p>文档: 暂缺</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/07/c-program-chinese-full-screen-text-editor/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>PyQt作品 – PingTester – 多点Ping测试工具</title>
		<link>http://blog.felixc.at/2011/07/pyqt-pingtester-multi-ping-tool/</link>
		<comments>http://blog.felixc.at/2011/07/pyqt-pingtester-multi-ping-tool/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 12:13:28 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PyQt]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=983</guid>
		<description><![CDATA[由于猫每次在一个临时测试点此测试一大片服务器的延迟和丢包, 一个个去跑太蛋疼, 于是用PyQt做了这么个小工具来测试各种线路的延迟丢包等信息. 这是我的第二个PyQt作品= =&#124;&#124;&#124; 截图: (Archlinux / KDE4 环境下) (Windows XP) 这个工具我已经初步实现了跨平台(在以上截图环境下运行正常), 在编写过程中, 我有如下的收获: 不可以在子线程中直接操作UI, 以免引起资源冲突导致Segmentation Fault 使用Queue类可以初步实现子线程与UI线程更新界面的通信. Signal方面, 我实例了一个QTimer, 每隔一定时间处理一次消息队列. QTableView比QTableWidget效率高得多, 尤其是在Win32平台下. 因此应尽量采用 QTableView + QStandardItemModel 的搭配来做Table 注: 代码中已经内置了一份测试IP列表, 可以根据需要添加/删除. 第一次运行会生成 ips.conf 文件, 以后需要修改IP列表, 只需要编辑此文件. 再注: 这个程序写的确实很丑, 欢迎各种拍砖 = = 下面贴上全部的代码: # -*- coding: utf-8 -*- &#160; import sys import time import subprocess [...]]]></description>
			<content:encoded><![CDATA[<p>由于猫每次在一个临时测试点此测试一大片服务器的延迟和丢包, 一个个去跑太蛋疼, 于是用PyQt做了这么个小工具来测试各种线路的延迟丢包等信息.<br />
这是我的第二个PyQt作品= =|||</p>
<p>截图:<br />
<a class="highslide img_49" href="http://blog.felixc.at/wp-content/uploads/2011/07/2011-07-12-200200_484x409_scrot.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/2011-07-12-200200_484x409_scrot-300x253.png" alt="" title="2011-07-12-200200_484x409_scrot" width="300" height="253" class="alignnone size-medium wp-image-984" /></a><br />
(Archlinux / KDE4 环境下)</p>
<p><a class="highslide img_50" href="http://blog.felixc.at/wp-content/uploads/2011/07/1111.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/1111-300x294.png" alt="" title="1111" width="300" height="294" class="alignnone size-medium wp-image-985" /></a><br />
(Windows XP)</p>
<p>这个工具我已经初步实现了跨平台(在以上截图环境下运行正常), 在编写过程中, 我有如下的收获:</p>
<ul>
<li>不可以在子线程中直接操作UI, 以免引起资源冲突导致Segmentation Fault</li>
<li>使用Queue类可以初步实现子线程与UI线程更新界面的通信. Signal方面, 我实例了一个QTimer, 每隔一定时间处理一次消息队列.</li>
<li>QTableView比QTableWidget效率高得多, 尤其是在Win32平台下. 因此应尽量采用 QTableView + QStandardItemModel 的搭配来做Table</li>
</ul>
<p>注: 代码中已经内置了一份测试IP列表, 可以根据需要添加/删除. 第一次运行会生成 ips.conf 文件, 以后需要修改IP列表, 只需要编辑此文件.<br />
再注: 这个程序写的确实很丑, 欢迎各种拍砖 = =</p>
<p>下面贴上全部的代码:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">subprocess</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">threading</span> <span style="color: #ff7700;font-weight:bold;">import</span> Thread
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
<span style="color: #ff7700;font-weight:bold;">from</span> PyQt4.<span style="color: black;">QtGui</span> <span style="color: #ff7700;font-weight:bold;">import</span> QMainWindow, QApplication, QStandardItemModel, QStandardItem, QWidget, QVBoxLayout, QTableView
<span style="color: #ff7700;font-weight:bold;">from</span> PyQt4.<span style="color: black;">QtCore</span> <span style="color: #ff7700;font-weight:bold;">import</span> pyqtSignature, Qt, QTimer, SIGNAL, QString, QMetaObject
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">Queue</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">Queue</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#from Ui_main import Ui_MainWindow</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">try</span>:
    _fromUtf8 = QString.<span style="color: black;">fromUtf8</span>
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">AttributeError</span>:
    _fromUtf8 = <span style="color: #ff7700;font-weight:bold;">lambda</span> s: s
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Ui_MainWindow<span style="color: black;">&#40;</span><span style="color: #008000;">object</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> setupUi<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, MainWindow<span style="color: black;">&#41;</span>:
        MainWindow.<span style="color: black;">setObjectName</span><span style="color: black;">&#40;</span>_fromUtf8<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;MainWindow&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        MainWindow.<span style="color: black;">resize</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">500</span>, <span style="color: #ff4500;">435</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">centralWidget</span> = QWidget<span style="color: black;">&#40;</span>MainWindow<span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">centralWidget</span>.<span style="color: black;">setObjectName</span><span style="color: black;">&#40;</span>_fromUtf8<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;centralWidget&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">verticalLayout</span> = QVBoxLayout<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">centralWidget</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">verticalLayout</span>.<span style="color: black;">setObjectName</span><span style="color: black;">&#40;</span>_fromUtf8<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;verticalLayout&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">tableView</span> = QTableView<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">centralWidget</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">tableView</span>.<span style="color: black;">setObjectName</span><span style="color: black;">&#40;</span>_fromUtf8<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;tableView&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">verticalLayout</span>.<span style="color: black;">addWidget</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">tableView</span><span style="color: black;">&#41;</span>
        MainWindow.<span style="color: black;">setCentralWidget</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">centralWidget</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">retranslateUi</span><span style="color: black;">&#40;</span>MainWindow<span style="color: black;">&#41;</span>
        QMetaObject.<span style="color: black;">connectSlotsByName</span><span style="color: black;">&#40;</span>MainWindow<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> retranslateUi<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, MainWindow<span style="color: black;">&#41;</span>:
        MainWindow.<span style="color: black;">setWindowTitle</span><span style="color: black;">&#40;</span>QApplication.<span style="color: black;">translate</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;MainWindow&quot;</span>, <span style="color: #483d8b;">&quot;Ping Tester&quot;</span>, <span style="color: #008000;">None</span>, QApplication.<span style="color: black;">UnicodeUTF8</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">sys</span>.<span style="color: #dc143c;">platform</span>.<span style="color: black;">startswith</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'linux'</span><span style="color: black;">&#41;</span>:
    getdata = <span style="color: #dc143c;">re</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">&quot;icmp_req=(<span style="color: #000099; font-weight: bold;">\d</span>+) ttl=(<span style="color: #000099; font-weight: bold;">\d</span>+) time=([<span style="color: #000099; font-weight: bold;">\d</span><span style="color: #000099; font-weight: bold;">\.</span>]+)<span style="color: #000099; font-weight: bold;">\s</span>ms&quot;</span><span style="color: black;">&#41;</span>
    pingstr = <span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;ping&quot;</span>, <span style="color: #483d8b;">&quot;-n&quot;</span>, <span style="color: #483d8b;">&quot;-i 0.2&quot;</span><span style="color: black;">&#93;</span>
    filtered = <span style="color: #483d8b;">&quot;Packet filtered&quot;</span>
    delaytime = <span style="color: #ff4500;">200</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
    getdata = <span style="color: #dc143c;">re</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">&quot;=([<span style="color: #000099; font-weight: bold;">\d</span><span style="color: #000099; font-weight: bold;">\.</span>]+)ms TTL=(<span style="color: #000099; font-weight: bold;">\d</span>+)&quot;</span><span style="color: black;">&#41;</span>
    pingstr = <span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;ping.exe&quot;</span>, <span style="color: #483d8b;">&quot;-t&quot;</span><span style="color: black;">&#93;</span>
    timeout = <span style="color: #483d8b;">&quot;Request timed out.&quot;</span>
    delaytime = <span style="color: #ff4500;">500</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">try</span>:
    <span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ips.conf&quot;</span>, <span style="color: #483d8b;">&quot;r&quot;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> f:
        t_node = f.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> t_node:
            <span style="color: #ff7700;font-weight:bold;">raise</span> <span style="color: #008000;">IOError</span>
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">IOError</span>:
    <span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ips.conf&quot;</span>, <span style="color: #483d8b;">&quot;w&quot;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> f:
        t_node = u<span style="color: #483d8b;">&quot;&quot;&quot;
        210.51.176.182-北京联通BGP
        202.97.224.68-黑龙江网通
        202.99.96.68-天津网通
        202.99.160.68-河北网通
        202.96.69.38-大连网通
        221.208.172.1-哈尔滨网通
        202.99.192.68-山西网通
        202.99.160.68-河北网通
        210.52.149.2-湖北网通
        218.30.64.121-湖南电信
        202.100.4.15-陕西电信 
        202.96.199.133-上海电信 
        219.150.150.150-河南电信 
        219.146.0.130-黑龙江电信
        202.98.96.68-四川电信
        59.66.4.50-北京教育网
        202.112.26.246-上海教育网
        202.114.0.254-武汉教育网
        211.161.159.9-武汉长城宽带
        143.90.12.170-日本东京odn
        202.160.123.5-新加坡Host1Plus
        60.199.17.138-台湾固网
        220.128.152.1-台湾HINET
        168.95.1.1-台湾中华电信
        202.65.207.1-香港DYX
        202.181.171.1-香港HKCIX
        203.169.186.1-香港NTT.HKNET
        59.148.193.38-香港HKCTI
        220.232.214.1-香港Supernet
        59.152.208.1-香港WTT
        210.56.48.1-香港HKSUN
        202.76.56.1-香港CPCNET
        218.213.250.130-香港SNL
        69.162.132.1-美国芝加哥Level3
        205.185.112.131-美国佛里蒙特HE
        204.152.221.1-美国洛杉矶nLayer
        178.63.62.208-德国Nuremburg
        94.23.202.83-法国OVH
        69.163.43.73-美国波特兰HE
        216.189.1.14-美国RockHill
        69.172.231.1-美国洛杉矶Peer1
        184.22.112.34-美国迈阿密HE
        199.48.146.37-美国圣琼斯
        216.245.208.1-美国达拉斯
        109.74.207.9-英国伦敦
        &quot;&quot;&quot;</span>
        f.<span style="color: black;">write</span><span style="color: black;">&#40;</span>t_node.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
node = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> t_node.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">try</span>:
        ip, desc = line.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;-&quot;</span><span style="color: black;">&#41;</span>
        node.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>ip, desc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ValueError</span>:
        <span style="color: #ff7700;font-weight:bold;">pass</span>
nodecount = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>node<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> MainWindow<span style="color: black;">&#40;</span>QMainWindow, Ui_MainWindow<span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;
    Class documentation goes here.
    &quot;&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, parent = <span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;
        Constructor
        &quot;&quot;&quot;</span>
        QMainWindow.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, parent<span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">setupUi</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">model</span> = QStandardItemModel<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">model</span>.<span style="color: black;">setColumnCount</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">model</span>.<span style="color: black;">setRowCount</span><span style="color: black;">&#40;</span>nodecount<span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">model</span>.<span style="color: black;">setHorizontalHeaderLabels</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;IP&quot;</span>, <span style="color: #483d8b;">&quot;Description&quot;</span>, <span style="color: #483d8b;">&quot;Loss%&quot;</span>, <span style="color: #483d8b;">&quot;CurPing&quot;</span>, <span style="color: #483d8b;">&quot;AvgPing&quot;</span>, <span style="color: #483d8b;">&quot;TTL&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> i, <span style="color: black;">&#40;</span>ip, desc<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">enumerate</span><span style="color: black;">&#40;</span>node<span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">setitem</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">0</span>, ip<span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">setitem</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">1</span>, desc<span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">setitem</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">2</span>, <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">setitem</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">3</span>, <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">setitem</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">4</span>, <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">setitem</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">5</span>, <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">tableView</span>.<span style="color: black;">setModel</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">model</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>node<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">tableView</span>.<span style="color: black;">setRowHeight</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">18</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">resizetable</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">timer</span> = QTimer<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">timer</span>,
                     SIGNAL<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;timeout()&quot;</span><span style="color: black;">&#41;</span>,
                     <span style="color: #008000;">self</span>.<span style="color: black;">checkitems</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">timer</span>.<span style="color: black;">start</span><span style="color: black;">&#40;</span>delaytime<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> checkitems<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff7700;font-weight:bold;">not</span> q.<span style="color: black;">empty</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
            item = q.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">chgtxt</span><span style="color: black;">&#40;</span><span style="color: #66cc66;">*</span>item<span style="color: black;">&#41;</span>
            q.<span style="color: black;">task_done</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">resizetable</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> resizetable<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">tableView</span>.<span style="color: black;">resizeColumnsToContents</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> chgtxt<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, x, y, value<span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">model</span>.<span style="color: black;">item</span><span style="color: black;">&#40;</span>x, y<span style="color: black;">&#41;</span>.<span style="color: black;">setText</span><span style="color: black;">&#40;</span>value<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> setitem<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, x, y, value<span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">model</span>.<span style="color: black;">setItem</span><span style="color: black;">&#40;</span>x, y, QStandardItem<span style="color: black;">&#40;</span>value<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
app = QApplication<span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span>
ui = MainWindow<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
ui.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
q = <span style="color: #dc143c;">Queue</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> pinger<span style="color: black;">&#40;</span>i, ip, desc<span style="color: black;">&#41;</span>:
    s = <span style="color: #483d8b;">&quot;&quot;</span>
    avgping = <span style="color: #ff4500;">0</span>
    count = <span style="color: #ff4500;">0</span>
    timeoutcount = <span style="color: #ff4500;">0</span>
    ret = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span>pingstr + <span style="color: black;">&#91;</span>ip<span style="color: black;">&#93;</span>,
                            stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:
        <span style="color: #ff7700;font-weight:bold;">try</span>:
            s += ret.<span style="color: black;">stdout</span>.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
            tryfind = getdata.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">sys</span>.<span style="color: #dc143c;">platform</span>.<span style="color: black;">startswith</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'linux'</span><span style="color: black;">&#41;</span>:
                <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>tryfind<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span>:
                    req, ttl, crtping = tryfind<span style="color: black;">&#91;</span>-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
                    avgping += <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>crtping<span style="color: black;">&#41;</span>
                    count += <span style="color: #ff4500;">1</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">3</span>, crtping + <span style="color: #483d8b;">&quot;ms&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">4</span>, <span style="color: #483d8b;">&quot;%.2f&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>avgping <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">1.0</span> / count<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;ms&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">5</span>, ttl<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">2</span>, <span style="color: #483d8b;">&quot;%.2f&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>req<span style="color: black;">&#41;</span> - count<span style="color: black;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">100.0</span> / <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>req<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    s = <span style="color: #483d8b;">&quot;&quot;</span>
                <span style="color: #ff7700;font-weight:bold;">elif</span> filtered <span style="color: #ff7700;font-weight:bold;">in</span> s:
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">2</span>, <span style="color: #483d8b;">&quot;Failed&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">3</span>, <span style="color: #483d8b;">&quot;Failed&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">4</span>, <span style="color: #483d8b;">&quot;Failed&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">5</span>, <span style="color: #483d8b;">&quot;Failed&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    ret.<span style="color: black;">kill</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
                    s = <span style="color: #483d8b;">&quot;&quot;</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>tryfind<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span>:
                    crtping, ttl = tryfind<span style="color: black;">&#91;</span>-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
                    avgping += <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>crtping<span style="color: black;">&#41;</span>
                    count += <span style="color: #ff4500;">1</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">3</span>, crtping + <span style="color: #483d8b;">&quot;ms&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">4</span>, <span style="color: #483d8b;">&quot;%.2f&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>avgping <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">1.0</span> / count<span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;ms&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">5</span>, ttl<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">2</span>, <span style="color: #483d8b;">&quot;%.2f&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>timeoutcount <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">100.0</span> / <span style="color: black;">&#40;</span>count + timeoutcount<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                <span style="color: #ff7700;font-weight:bold;">elif</span> timeout <span style="color: #ff7700;font-weight:bold;">in</span> s:
                    timeoutcount += <span style="color: #ff4500;">1</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">2</span>, <span style="color: #483d8b;">&quot;-&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">3</span>, <span style="color: #483d8b;">&quot;-&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    <span style="color: #ff7700;font-weight:bold;">if</span> count:
                        q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">5</span>, <span style="color: #483d8b;">&quot;%.2f&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>timeoutcount <span style="color: #66cc66;">*</span> <span style="color: #ff4500;">100.0</span> / <span style="color: black;">&#40;</span>count + timeoutcount<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    <span style="color: #ff7700;font-weight:bold;">else</span>:
                        q.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>i, <span style="color: #ff4500;">5</span>, <span style="color: #483d8b;">&quot;-&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
                    s = <span style="color: #483d8b;">&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">IOError</span>:
            <span style="color: #ff7700;font-weight:bold;">print</span> s
            <span style="color: #ff7700;font-weight:bold;">break</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> startworkers<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">for</span> i, <span style="color: black;">&#40;</span>ip, desc<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">enumerate</span><span style="color: black;">&#40;</span>node<span style="color: black;">&#41;</span>:
        worker = Thread<span style="color: black;">&#40;</span>target=pinger, args=<span style="color: black;">&#40;</span>i, ip, desc<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        worker.<span style="color: black;">setDaemon</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
        worker.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span>delaytime / <span style="color: #ff4500;">10000.0</span><span style="color: black;">&#41;</span>
&nbsp;
startthread = Thread<span style="color: black;">&#40;</span>target=startworkers<span style="color: black;">&#41;</span>
startthread.<span style="color: black;">setDaemon</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
startthread.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span>app.<span style="color: black;">exec_</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/07/pyqt-pingtester-multi-ping-tool/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Android 里安全上 QQ 的新方法</title>
		<link>http://blog.felixc.at/2011/07/android-qq-the-safer-new-way/</link>
		<comments>http://blog.felixc.at/2011/07/android-qq-the-safer-new-way/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 04:16:57 +0000</pubDate>
		<dc:creator>Felix Yan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://blog.felixc.at/?p=956</guid>
		<description><![CDATA[QQ Windows版偷偷做坏事的事情已经被争论了很久很久了, 作为一个终端用户, 我自然希望风险越小越好&#8230; 然而, 自从 aQQ For Android 被封杀以后, 手机上QQ就没什么好方法了&#8230;官方QQ特别臃肿, 而 QQ For Pad 更是带了个虚拟桌面出来, 无用功能实在太多. 不过, jimmy 酱 上次给我看的一个限制应用程序权限的方法, 给了我一个启发.. 像我这样的轻度QQ用户(只是偶尔需要和QQ上几个特定的人联系), 在手机上为此装个QQ而且整天挂着, 实在是太重口了&#8230; 而 QQ For Pad 带了一个系统桌面挂件, 可以添加六个联系人, 可以和他们之间收发消息, 支持图片发送接受, 支持语音视频聊天(各种美)&#8230; 本猫在尝试禁止它的一些权限后, 现在认为这个方法比较靠谱, 也比较安全, 因此共享出来 下面是配置步骤(真的不会很复杂的= =). 哦对了, 这是使用 CM 的 ROM 时的配置方法, 其他 ROM 我不清楚是否可以这么用, 以及怎么用&#8230; 1, 首先从菜市场正常安装 QQ For Pad [...]]]></description>
			<content:encoded><![CDATA[<p>QQ Windows版偷偷做坏事的事情已经被争论了很久很久了, 作为一个终端用户, 我自然希望风险越小越好&#8230;<br />
然而, 自从 aQQ For Android 被封杀以后, 手机上QQ就没什么好方法了&#8230;官方QQ特别臃肿, 而 QQ For Pad 更是带了个虚拟桌面出来, 无用功能实在太多.</p>
<p>不过, jimmy 酱 上次给我看的一个限制应用程序权限的方法, 给了我一个启发.. 像我这样的轻度QQ用户(<b>只是偶尔需要和QQ上几个特定的人联系</b>), 在手机上为此装个QQ而且整天挂着, 实在是太重口了&#8230;<br />
而 QQ For Pad 带了一个系统桌面挂件, 可以添加六个联系人, 可以和他们之间收发消息, <b>支持图片发送接受</b>, <b>支持语音视频聊天</b>(各种美)&#8230; 本猫在尝试禁止它的一些权限后, 现在认为这个方法比较靠谱, 也比较安全, 因此共享出来 <img src='http://blog.felixc.at/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>下面是配置步骤(真的不会很复杂的= =). 哦对了, 这是使用 CM 的 ROM 时的配置方法, 其他 ROM 我不清楚是否可以这么用, 以及怎么用&#8230;</p>
<p>1, 首先从菜市场正常安装 QQ For Pad<br />
<a class="highslide img_59" href="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_1208161.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_1208161-180x300.png" alt="" title="snap20110707_120816" width="180" height="300" class="alignnone size-medium wp-image-966" /></a></p>
<p>2, 打开 CM 设置 => 应用程序设置 (Settings -> CyanogenMod settings -> Applications), 勾选 允许应用程序权限管理(中文版是不是这么翻的我不知道, 意会吧.. 下同)<br />
<a class="highslide img_60" href="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_120349.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_120349-180x300.png" alt="" title="snap20110707_120349" width="180" height="300" class="alignnone size-medium wp-image-958" /></a><br />
注: 勾选上的时候会弹出一个警告(Warning). 无视掉就好= =|||</p>
<p>3, 然后进入 系统的应用程序设置 (Settings -> Applications -> Manage applications), 找到 QQ, 把权限如图更改(当然可以自己DIY, 不过有的关掉会完全不能用的&#8230;)<br />
<a class="highslide img_61" href="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_120713.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_120713-180x300.png" alt="" title="snap20110707_120713" width="180" height="300" class="alignnone size-medium wp-image-960" /></a><a class="highslide img_62" href="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_120723.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_120723-180x300.png" alt="" title="snap20110707_120723" width="180" height="300" class="alignnone size-medium wp-image-961" /></a><br />
注: 点击某个权限, 就会禁用/启用它, 很简单的<br />
再注: 我很想禁止它获取当前运行的程序列表的, 可惜如果这么做了, 它就bug掉了&#8230;</p>
<p>4, 现在可以回到桌面了, 添加QQ插件(这个不用我具体说了吧..)<br />
添加的时候会让你登陆QQ, 然后选择最多六个联系人. 添加后, 点击联系人即可开始文字或语音/视频聊天(需要Wifi网), 而且不用点击就可以看到他们是否有给你来过消息 <img src='http://blog.felixc.at/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br />
具体效果如图:<br />
<a class="highslide img_63" href="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_121345.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_121345-180x300.png" alt="" title="snap20110707_121345" width="180" height="300" class="alignnone size-medium wp-image-965" /></a><a class="highslide img_64" href="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_121939.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_121939-180x300.png" alt="" title="snap20110707_121939" width="180" height="300" class="alignnone size-medium wp-image-970" /></a><br />
<a class="highslide img_65" href="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_122051.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_122051-180x300.png" alt="" title="snap20110707_122051" width="180" height="300" class="alignnone size-medium wp-image-972" /></a><a class="highslide img_66" href="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_122117.png" onclick="return hs.expand(this)"><img src="http://blog.felixc.at/wp-content/uploads/2011/07/snap20110707_122117-180x300.png" alt="" title="snap20110707_122117" width="180" height="300" class="alignnone size-medium wp-image-973" /></a></p>
<p>更新: 发现打开聊天窗口的时候, 也可以收发群信息, 不过这样限制权限会导致 QQ For Pad 的默认登陆方式失效, 因此不适合重度 QQ 用户采用= =&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felixc.at/2011/07/android-qq-the-safer-new-way/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 1.979 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-01-15 17:49:41 --><!-- Compression = gzip -->

