<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Skywind Inside</title>
	<atom:link href="http://www.joynb.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.joynb.net/blog</link>
	<description>写自己的代码，让别人猜去吧</description>
	<lastBuildDate>Tue, 06 Dec 2011 13:34:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>《新水浒传》为维稳出了一份大力</title>
		<link>http://www.joynb.net/blog/archives/1022</link>
		<comments>http://www.joynb.net/blog/archives/1022#comments</comments>
		<pubDate>Thu, 15 Sep 2011 08:47:18 +0000</pubDate>
		<dc:creator>skywind</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.joynb.net/blog/archives/1022</guid>
		<description><![CDATA[中心思想就是两个字“忠义”，哪怕这个制度已经腐朽了，哪怕让自己和兄弟被害死，但仍要忠于皇上，这种“大忠大义”被导演讴歌的无处不在，大结还被局命名为“忠义参天”。 导演真是煞费苦心呀，为了表现宋江的英雄气概，强行加了很多原著上没有的台词，什么“犯我中华者虽远必诛”来突出他的气概，很多吴用说的经典台词也挪给宋江来突出他的智谋。让宋江这个机会主义者和投降主义者摇身一变成为一个忠义英雄，打着替天行道大旗骗民心，跟皇帝搞统一战线维稳，打农民起义军。 鲁迅说过：“一部《水浒》,说得很分明:因为不反对天子,所以大军一到,便受招安,替国家打别的强盗—不‘替天行道,的强盗去了。终于是奴才。” 宋江的问题不是他“是否英雄”，“是否有勇有谋”，而是他搞错了一个根本问题：就是“为谁而战？”，应该是为老百姓而战，而不是为皇帝而战。搞错了“替天行道”的这个天是谁这个基本道理，天应该是民意而不是封建统治阶级。他压根没搞明白“爱国”和“爱朝廷”是两码事。 毛主席说过：“《水浒》这部书，好就好在投降。做反面教材，使人民都知道投降派。《水浒》只反贪官，不反皇帝。” 导演一厢情愿的歪曲原著讴歌忠义，要替宋江平反不惜添油加醋，是导演想相谁献媚呢？还是想为为谁维稳？我觉得实在是该记导演一大功劳呀！！]]></description>
			<content:encoded><![CDATA[<p>中心思想就是两个字“忠义”，哪怕这个制度已经腐朽了，哪怕让自己和兄弟被害死，但仍要忠于皇上，这种“大忠大义”被导演讴歌的无处不在，大结还被局命名为“忠义参天”。</p>
<p>导演真是煞费苦心呀，为了表现宋江的英雄气概，强行加了很多原著上没有的台词，什么“犯我中华者虽远必诛”来突出他的气概，很多吴用说的经典台词也挪给宋江来突出他的智谋。让宋江这个机会主义者和投降主义者摇身一变成为一个忠义英雄，打着替天行道大旗骗民心，跟皇帝搞统一战线维稳，打农民起义军。</p>
<p>鲁迅说过：“一部《水浒》,说得很分明:因为不反对天子,所以大军一到,便受招安,替国家打别的强盗—不‘替天行道,的强盗去了。终于是奴才。”</p>
<p>宋江的问题不是他“是否英雄”，“是否有勇有谋”，而是他搞错了一个根本问题：就是“为谁而战？”，应该是为老百姓而战，而不是为皇帝而战。搞错了“替天行道”的这个天是谁这个基本道理，天应该是民意而不是封建统治阶级。他压根没搞明白“爱国”和“爱朝廷”是两码事。</p>
<p>毛主席说过：“《水浒》这部书，好就好在投降。做反面教材，使人民都知道投降派。《水浒》只反贪官，不反皇帝。”</p>
<p>导演一厢情愿的歪曲原著讴歌忠义，要替宋江平反不惜添油加醋，是导演想相谁献媚呢？还是想为为谁维稳？我觉得实在是该记导演一大功劳呀！！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joynb.net/blog/archives/1022/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Windows字体为什么那么难看？</title>
		<link>http://www.joynb.net/blog/archives/1015</link>
		<comments>http://www.joynb.net/blog/archives/1015#comments</comments>
		<pubDate>Tue, 06 Sep 2011 05:24:14 +0000</pubDate>
		<dc:creator>skywind</dc:creator>
				<category><![CDATA[图形编程]]></category>
		<category><![CDATA[编程技术]]></category>

		<guid isPermaLink="false">http://www.joynb.net/blog/archives/1015</guid>
		<description><![CDATA[1）很多字库比如宋体，12号以下都是点阵字体。 2）GDI太老了，只有5级灰度，而且AA是横向的，Y轴方向没有AA。 3）雅黑又不能通用，且小字号时高低不平。 &#160; 改进： 1）字体SuperSample。 2）勾边。]]></description>
			<content:encoded><![CDATA[<p>1）很多字库比如宋体，12号以下都是点阵字体。</p>
<p>2）GDI太老了，只有5级灰度，而且AA是横向的，Y轴方向没有AA。</p>
<p>3）雅黑又不能通用，且小字号时高低不平。</p>
<p>&#160;</p>
<p>改进：</p>
<p>1）字体SuperSample。</p>
<p>2）勾边。</p>
<p><a href="http://www.joynb.net/blog/wp-content/uploads/2011/09/image_thumb8.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image_thumb8" border="0" alt="image_thumb8" src="http://www.joynb.net/blog/wp-content/uploads/2011/09/image_thumb8_thumb.png" width="159" height="46" /></a></p>
<p><a href="http://www.joynb.net/blog/wp-content/uploads/2011/09/image_thumb13.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image_thumb13" border="0" alt="image_thumb13" src="http://www.joynb.net/blog/wp-content/uploads/2011/09/image_thumb13_thumb.png" width="156" height="44" /></a></p>
<p><a href="http://www.joynb.net/blog/wp-content/uploads/2011/09/image_thumb15.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image_thumb15" border="0" alt="image_thumb15" src="http://www.joynb.net/blog/wp-content/uploads/2011/09/image_thumb15_thumb.png" width="534" height="168" /></a></p>
<p><a href="http://www.joynb.net/blog/wp-content/uploads/2011/09/image_thumb17.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image_thumb17" border="0" alt="image_thumb17" src="http://www.joynb.net/blog/wp-content/uploads/2011/09/image_thumb17_thumb.png" width="135" height="26" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joynb.net/blog/archives/1015/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【原创】快速除以255的方法</title>
		<link>http://www.joynb.net/blog/archives/988</link>
		<comments>http://www.joynb.net/blog/archives/988#comments</comments>
		<pubDate>Wed, 31 Aug 2011 15:00:26 +0000</pubDate>
		<dc:creator>skywind</dc:creator>
				<category><![CDATA[编程技术]]></category>

		<guid isPermaLink="false">http://www.joynb.net/blog/archives/988</guid>
		<description><![CDATA[经过若干次试验修改，研究出下面这个快速/255的宏，可以在 X属于[0，65536]的范围内误差为零： #define div_255_fast(x) (((x) + (((x) + 257) >> 8)) >> 8) 传统来说，人们习惯于将 /255改为 &#62;&#62; 8，但是这样误差挺大的，比如先乘以255再除以255，连续做十次，如果用&#62;&#62;8来代替除法，那么十次之后，误差为10. 另外一种常见的近似法是((x) + 255) >> 8，这种累积误差也挺厉害的。 因此&#62;&#62;8代替/255结果是比较粗糙的。而这个宏的开销比起&#62;&#62;8来说成本大12%。 经过测试65536000次计算中，使用/255的时间是325ms, 使用div_255_fast的时间是70ms，使用&#62;&#62;8的时间是62ms，div_255_fast的时间代价属于可以接受的范围。 下面是测试程序（点击more展开）： #include &#60;stdio.h&#62; #include &#60;windows.h&#62; #include &#60;mmsystem.h&#62; #define div_255_accurate(x) ((x) / 255) #define div_255_approximate(x) ((x) &#62;&#62; 8) // x &#62;= 0 &#38;&#38; x &#60;= 65536 #define div_255_fast(x) (((x) + (((x) [...]]]></description>
			<content:encoded><![CDATA[<p>经过若干次试验修改，研究出下面这个快速/255的宏，可以在 X属于[0，65536]的范围内误差为零：</p>
<pre class="brush:c">#define div_255_fast(x)    (((x) + (((x) + 257) >> 8)) >> 8)
</pre>
<p>传统来说，人们习惯于将 /255改为 &gt;&gt; 8，但是这样误差挺大的，比如先乘以255再除以255，连续做十次，如果用&gt;&gt;8来代替除法，那么十次之后，误差为10. 另外一种常见的近似法是((x) + 255) >> 8，这种累积误差也挺厉害的。</p>
<p>因此&gt;&gt;8代替/255结果是比较粗糙的。而这个宏的开销比起&gt;&gt;8来说成本大12%。</p>
<p>经过测试65536000次计算中，使用/255的时间是325ms, 使用div_255_fast的时间是70ms，使用&gt;&gt;8的时间是62ms，div_255_fast的时间代价属于可以接受的范围。</p>
<p>下面是测试程序（点击more展开）：</p>
<p><span id="more-988"></span></p>
<pre class="brush:cpp">#include &lt;stdio.h&gt;
#include &lt;windows.h&gt;
#include &lt;mmsystem.h&gt;

#define div_255_accurate(x)        ((x) / 255)

#define div_255_approximate(x)    ((x) &gt;&gt; 8)

// x &gt;= 0 &amp;&amp; x &lt;= 65536
#define div_255_fast(x)            (((x) + (((x) + 257) &gt;&gt; 8)) &gt;&gt; 8)

// 验证快速除以255的正确性
void test1(void)
{
    int error = 0;
    int i;
    for (i = 0; i &lt;= 65536; i++) {
        if (i / 255 != div_255_fast(i)) error++;
    }
    printf("div_255_fast(x) ERROR = %d !!\n\n", error);
}

int A[0x10000], B[0x10000], C[0x10000], D[0x10000];
#define N 1000

// 评测三种方法的速度
void test2(void)
{
    DWORD t1, t2, t3;
    int i, k;

    printf("benchmark:\n");
    for (i = 0; i &lt; 0x10000; i++) A[i] = rand();

    // test: B = A / 255
    Sleep(100);
    t1 = timeGetTime();
    for (k = 0; k &lt; N; k++) {
        for (i = 0; i &lt; 0x10000; i += 4) {
            B[i + 0] = div_255_accurate(A[i + 0]);        // U
            B[i + 1] = div_255_accurate(A[i + 1]);        // V
            B[i + 2] = div_255_accurate(A[i + 2]);        // U
            B[i + 3] = div_255_accurate(A[i + 3]);        // V
        }
    }
    t1 = timeGetTime() - t1;
    printf("div_255_accurate: %dms\n", (int)t1);

    // test: B = (A + ((A + 1) &gt;&gt; 8)) &gt;&gt; 8
    Sleep(100);
    t2 = timeGetTime();
    for (k = 0; k &lt; N; k++) {
        for (i = 0; i &lt; 0x10000; i += 4) {
            B[i + 0] = div_255_fast(A[i + 0]);        // U
            B[i + 1] = div_255_fast(A[i + 1]);        // V
            B[i + 2] = div_255_fast(A[i + 2]);        // U
            B[i + 3] = div_255_fast(A[i + 3]);        // V
        }
    }
    t2 = timeGetTime() - t2;
    printf("div_255_fast: %dms\n", (int)t2);

    // test: B = A &gt;&gt; 8
    Sleep(100);
    t3 = timeGetTime();
    for (k = 0; k &lt; N; k++) {
        for (i = 0; i &lt; 0x10000; i += 4) {
            B[i + 0] = div_255_approximate(A[i + 0]);        // U
            B[i + 1] = div_255_approximate(A[i + 1]);        // V
            B[i + 2] = div_255_approximate(A[i + 2]);        // U
            B[i + 3] = div_255_approximate(A[i + 3]);        // V
        }
    }
    t3 = timeGetTime() - t3;
    printf("div_255_approximate: %dms\n", (int)t3);
}

int main(void)
{
    test1();
    test2();
    return 0;
}

/*
OUTPUT:

div_255_fast(x) ERROR = 0 !!

benchmark:
div_255_accurate: 325ms
div_255_fast: 70ms
div_255_approximate: 62ms

*/
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.joynb.net/blog/archives/988/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>测试了一下：TT达到64</title>
		<link>http://www.joynb.net/blog/archives/987</link>
		<comments>http://www.joynb.net/blog/archives/987#comments</comments>
		<pubDate>Thu, 18 Aug 2011 03:00:31 +0000</pubDate>
		<dc:creator>skywind</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.joynb.net/blog/archives/987</guid>
		<description><![CDATA[记录一下。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.joynb.net/blog/wp-content/uploads/2011/08/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.joynb.net/blog/wp-content/uploads/2011/08/image_thumb.png" width="644" height="404" /></a></p>
<p>记录一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joynb.net/blog/archives/987/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CYGWIN 环境搭建记录</title>
		<link>http://www.joynb.net/blog/archives/979</link>
		<comments>http://www.joynb.net/blog/archives/979#comments</comments>
		<pubDate>Fri, 12 Aug 2011 14:12:20 +0000</pubDate>
		<dc:creator>skywind</dc:creator>
				<category><![CDATA[未分类]]></category>
		<category><![CDATA[cygwin]]></category>

		<guid isPermaLink="false">http://www.joynb.net/blog/?p=979</guid>
		<description><![CDATA[[sshd] ssh-host-config /var/empty目录的拥有者必须是sshd进程的拥有者, 而且权限必须是700; 如果sshd进程的拥有者不是SYSTEM, 则只有这个拥有者可以通过ssh登录系统, 因为sshd需要执行seteuid, 非系统账户执行seteuid将自己有效id设为其他用户时会被拒绝。 如果是在 Win7下面需要建立一个独立的用户，这时CYGWIN终端需要以管理员权限运行，否则用户设置失败，无法安装sshd服务。 [svnserve] cygrunsrv -I svnserve -d &#8220;CYGWIN svnserve&#8221; &#8211;chdir /data/svnroot &#8211;path /usr/bin/svnserve &#8211;args &#8220;&#8211;foreground &#8211;daemon &#8211;root=/data/svnroot &#8211;listen-port=3690&#8243; &#8211;neverexits &#8211;type auto -o 如果发现svnserve.exe无法监听在相应端口, 需要添加额外参数(&#8211;args中): &#8211;listen-host=0.0.0.0 (或监听在特定的ip或主机名上). [passwd] 如果在cygwin中发现自己所在的组变成了&#8221;mkpaswd&#8221;, 这说明/etc/passwd或者/etc/group需要重建了, 运行: mkpasswd -l >/etc/passwd; mkgroup -l >/etc/group [httpd] 启动httpd服务时可能会报告&#8221;Bad system call&#8221;错误, 这是由于apache2需要cygserver, 运行: cygserver-config 而且环境变量$CYGWIN中包含server, 参见[he CYGWIN environment [...]]]></description>
			<content:encoded><![CDATA[<p>[sshd]</p>
<p>ssh-host-config</p>
<p>/var/empty目录的拥有者必须是sshd进程的拥有者, 而且权限必须是700; 如果sshd进程的拥有者不是SYSTEM, 则只有这个拥有者可以通过ssh登录系统, 因为sshd需要执行seteuid, 非系统账户执行seteuid将自己有效id设为其他用户时会被拒绝。</p>
<p>如果是在 Win7下面需要建立一个独立的用户，这时CYGWIN终端需要以管理员权限运行，否则用户设置失败，无法安装sshd服务。</p>
<p>[svnserve]</p>
<p>cygrunsrv -I svnserve -d &#8220;CYGWIN svnserve&#8221; &#8211;chdir /data/svnroot &#8211;path /usr/bin/svnserve &#8211;args &#8220;&#8211;foreground &#8211;daemon &#8211;root=/data/svnroot &#8211;listen-port=3690&#8243; &#8211;neverexits &#8211;type auto -o</p>
<p>如果发现svnserve.exe无法监听在相应端口, 需要添加额外参数(&#8211;args中): &#8211;listen-host=0.0.0.0 (或监听在特定的ip或主机名上).</p>
<p>[passwd]</p>
<p>如果在cygwin中发现自己所在的组变成了&#8221;mkpaswd&#8221;, 这说明/etc/passwd或者/etc/group需要重建了, 运行:<br />
mkpasswd -l >/etc/passwd; mkgroup -l >/etc/group</p>
<p>[httpd]</p>
<p>启动httpd服务时可能会报告&#8221;Bad system call&#8221;错误, 这是由于apache2需要cygserver, 运行:<br />
cygserver-config</p>
<p>而且环境变量$CYGWIN中包含server, 参见[he CYGWIN environment variable].</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joynb.net/blog/archives/979/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  www.joynb.net/blog/feed ) in 0.38041 seconds, on May 19th, 2012 at 8:25 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on May 19th, 2012 at 9:25 am UTC -->
