<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>demo@virushuo</title>
      <link>http://blog.devep.net/virushuo/</link>
      <description>霍炬的网络日志 | huoju&apos;s blog</description>
      <language>en</language>
      <copyright>Copyright 2006</copyright>
      <lastBuildDate>Thu, 23 Mar 2006 05:43:18 +0800</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.2</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>计算机的本质</title>
         <description><![CDATA[<p>计算机的本质，是提供运算能力的机器。<br />
人们编写各种各样的程序，在机器上运行，于是产生了各种各样的应用。<br />
为了更方便的编写应用，让应用程序的开发门槛降低，我们迫切的需要一种中间层来隔离硬件，于是操作系统出现了。</p>

<p>有趣的是，几十年间，操作系统这个名词虽然存在，但其形式和概念已经发生了翻天覆地的变化。30年前，无法想象会出现现在的windows或是linux这样的操作系统。要知道，最初的所谓操作系统只不过是一个时钟调度（可以看作批处理）的简单程序而已。</p>

<p>这种变化来源于几个方面，一方面是计算能力的提高（内存越来越大，CPU越来越快），允许我们在计算机上赋予更多的内容，开发更复杂的应用，另一方面来源于硬件种类越来越多。</p>

<p>与其说是计算机需要操作系统，不如说应用程序需要操作系统。现代操作系统不是在一夜之间产生的，而是随着历史的发展，缓慢的形成的。简单说来，计算机的本质是应用，操作系统只是提供了应用的运行环境。</p>

<p>java芯片是一个非常有趣的东西，在这个芯片上，可以直接运行java的字节码，这种芯片不在需要一个强大的操作系统来管理硬件资源了。其本身就提供了java运行环境。(事实上，如果你的汇编足够强，那么就可以直接在任何芯片的计算机上直接编写应用程序--就像在单片机上作的那样--而不需要任何操作系统的支持，只不过，这比较麻烦而已。)</p>

<p>java的创举不是创造了虚拟机，事实上虚拟机的概念从smalltalk就存在了。java的创举是将虚拟机放到了不同的层次，在操作系统之上的层面，有jre环境，在操作系统之下的层面，有java芯片。对于不同的操作系统，有不同的jre。</p>

<p>未来的运行环境是什么呢？在大型机的年代，只有主机上上有真正操作系统，客户机只不过是登陆上去，使用主机的资源而已。技术历史不过是一个绕圈子的过程，一圈绕回来，上了一个台阶，但是本质在相当长的一段时间内，仍然是不变的。</p>

<p>有感而发，无意争论。</p>]]></description>
         <link>http://blog.devep.net/virushuo/2006/03/23/essential-of-computer.html</link>
         <guid>http://blog.devep.net/virushuo/2006/03/23/essential-of-computer.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Thu, 23 Mar 2006 05:43:18 +0800</pubDate>
      </item>
            <item>
         <title>一本属于历史的新书</title>
         <description><![CDATA[<p><br />
这个拗口的标题来源于这本书：《白领就业指南 c++builder 6.0 设计师之路》，电子工业出版社出版。<br />
<img src="http://static.flickr.com/41/111332717_4186bc9c4c.jpg"><br />
今天在西单图书大厦拍到的。</p>

<p>且不说这个土气到了极点的名字，就说这书现在有没有存在的价值吧。</p>

<p>C++ builder 6 发行于2002年(感谢<a href="http://borland.mblogger.cn/raptor">猛禽</a>提供这个确切的时间)，但是始终也没有被业界（尤其是中国的业内）大规模的应用过。我虽然是borland的fan，但是实在是没见过有几个公司真正用C++builder作为开发工具。虽然，delphi作为borland的王牌开发工具，获得了非常广的应用的。</p>

<p>2004年开始，borland主推C++ builder X，从此C++ builder 6 这个采用VCL库的C++产品事实上已经走到了尽头。同时，随着微软.net的发布，borland阵脚大乱，大有抛弃全部，一心拼.net之势。</p>

<p>终于，2006年2月，borland正式宣布退出开发工具市场。从此C++ builder/delphi便成绝响。</p>

<p>那么，这本书出版于什么时候呢？</p>

<p>版权页显示：2005年11月第一次印刷</p>

<p>那么，这本书值多少钱呢？</p>

<p>版权页显示：26元</p>

<p>所以，我不得不说，这是一本属于历史的很贵的新书。</p>

<p>看了图书大厦“新”书，我再次对计算机图书市场失去了信心。</p>

<p>新手买书，可真是步步地雷。</p>

<p>最后我买了两本书：</p>

<p>《中国建筑史》 <br />
《离散数学极其应用》<br />
<img src="http://static.flickr.com/37/111332745_773d40988a.jpg"></p>

<p><br />
</p>]]></description>
         <link>http://blog.devep.net/virushuo/2006/03/13/a-book.html</link>
         <guid>http://blog.devep.net/virushuo/2006/03/13/a-book.html</guid>
         <category>胡言乱语</category>
         <pubDate>Mon, 13 Mar 2006 01:03:41 +0800</pubDate>
      </item>
            <item>
         <title>用sql选取日期为某一天的记录</title>
         <description><![CDATA[<p>sql里面选择某一天的记录，我一直都不知道怎么作比较好。数据库里面保存的一般是：2006-03-05 0:00:00这样的格式，那么 where xxx='2006-03-05'显然是得不到结果的。看到很多人用 where xxx>='2006-03-05' and xxx<'2006-03-06'之类的方式，很难看。</p>

<p>今天翻postgresql文档的时候发现了以下解决方法：</p>

<p>用date_trunc函数选择精度<br />
where date_trunc('day',xxx)='2006-03-05'  就可以了。</p>

<p>9.9.2. date_trunc</p>

<p>date_trunc 函数在概念上和用于 数字的 trunc 函数类似。</p>

<p>date_trunc('field', source)</p>

<p>source 是类型 timestamp 的值表达式(类型 date 和 time 的数值都分别自动转换成timestamp或者interval)。 用 field 选择对该时间戳数值 选用什么样的精度进行截断)。 返回的数值是 timestamp 类型或者interval，所有小于选定的 精度的域都设置为零(或者一，如果是日期和月份域的话)。</p>

<p>field 的有效数值是∶</p>

<p>microseconds<br />
milliseconds<br />
second<br />
minute<br />
hour<br />
day<br />
week<br />
month<br />
year<br />
decade<br />
century<br />
millennium</p>

<p>例子：</p>

<p>SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');<br />
Result: 2001-02-16 20:00:00+00</p>

<p>SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');<br />
Result: 2001-01-01 00:00:00+00</p>]]></description>
         <link>http://blog.devep.net/virushuo/2006/03/05/sql-select-record-in-a-day.html</link>
         <guid>http://blog.devep.net/virushuo/2006/03/05/sql-select-record-in-a-day.html</guid>
         <category>tips</category>
         <pubDate>Sun, 05 Mar 2006 11:43:17 +0800</pubDate>
      </item>
            <item>
         <title>wp，真是太棒了</title>
         <description><![CDATA[<p>从donews用.text之后，我就时常在嘲笑<a href="http://blog.hanlei.name">韩磊</a>。作为一个.net的老程序员，我得告诉你，对.net这个系统我一点也不看好，这东西用来做企业内部的erp,crm什么的肯定是好东西，用来给互联网用户提供公众服务，尤其是一个具有无限增长可能的网站为用户提供公众服务，老天，你不是疯了吧。<br/><br/>一个朋友是.net的支持者，我简单的一句话就击倒了他：&ldquo;你去看看donews和csdn这两个.net的案例，如此高的出错率，这就是.net的效果。你敢说他们没有技术能力？&rdquo;。对于韩磊，我最狠的一句话是：&quot;我要是微软，现在我给donews钱，求求你别们用了，你们用这几年，得多少公关费用才能挽回负面影响。&quot;<br/><br/>其实别说donews，微软的spaces还不是一样经常出错？这个问题回头再说，.net就是存在问题，不管那些微软的fans和<a href="http://blog.devep.net/virushuo/2005/11/12/zengyi-cribbing-matter.html">mvp们</a>承认不承认，这东西就没办法作大型服务，问题不是语言本身，从windows开始，到iis，全错了，从根就错了。要职到，高负荷是一个很重大的课题，说实话，别说.net，就算java我一样不认为能轻松的提供高负荷服务。<br/><br/>或许有人会说是技术问题。没错，或许是技术问题。但这东西上手容易而后面对高负荷的时候学习曲线骤然升高，难道是一种正确的态度嘛？这真令人无法忍受。改日我专作一篇关于对微软的感受之类的东西，微软的东西不是不好，但如果你要面对可能出现的快速增长来使用，你一定要作出在后面的日子里面付出极其高昂的后期成本的打算，这足以抵消前面开发快速上手容易程序员网管便宜而节省的成本。所以，中小型的项目，要考虑微软的产品，大型服务，想都不要想。<br/><br/>无数的血泪告诉我们，谁tmd说微软整体拥有成本低来者？那是pr稿罢了。<br/><br/>当然，这并不能怪韩磊，首先，donews开始blog的时候，实在是没有几套好的blog系统，mt只有2.x,而wp还没个影子。当时也确实没什么办法，.text还是个比较好的选择，相对于自己重头开发的话。再说，2003年我还在迷恋.net呢，也觉得是个好东西，我还没看透这些东西呢。<br/><br/>当我自己在blog.devep.net/virushuo采用mt之后，我就在时常游说韩磊，换mt吧，换mt吧，换mt吧。当然哥们始终告诉我两个字&ldquo;不换。&rdquo;。<br/><br/>是，对于一帮.net程序员，学习perl确实有点难度。其实对于我自己也有难度，不过为了打理我的blog，我还是学了点。<br/><br/>后来终于wordpress的声名越来越旺了。于是我就开始对韩磊说，换wp吧，换wp吧，换wp吧。donews并入千橡后，韩磊不再说&ldquo;你有什么需要.text满足不了，我们可以慢慢开发&rdquo;，而是开始考虑我这个建议了。某一天，他告诉我，换wp。我真是乐疯了。今天刘韧终于正式确认了这个消息，太棒了，除了这个词我想不出来别的形容词了。<br/><br/>前面大半是开玩笑，我也充分理解donews为了缩小规模，不得不采用快速简单的解决方案。不过我们后来也看到了韩磊为了.text渡过了多少不眠之夜，看的让人痛心。虽然他的程序写的很好，但写程序绝非他的强项 。同样的时间内，他应该用去思考，为大家带来更多东西，而不是以&ldquo;自己最短的一块板&rdquo;作苦力和.net搏斗。<br/><br/>未来看起来挺美好，很快我们就有wp用，爱搞搞也答应会跟着修改他们的程序支持wp，真是太棒了。<br/><br/>综上所述，概括3个结论，<br/><br/>1 wp，太好了，donews并入千橡，是好事，过去我仅仅认为理智上是好事，感情上有点难以接受，现在我终于在感情上也明白无误的认为是好事了。 <br/><br/>2 你要想提供稳固的，长期的，大容量的服务，千万别用.net，否则你会付出巨大的代价。 <br/><br/>3 期望csdn也赶快换。这样我可能会把csdn的技术blog继续用起来。<br/><br/>最后一个建议，<a href="http://blog.donews.com/liuren/archive/2006/01/16/697407.aspx">刘韧说首先靠用很多机器的办法，以后靠静态化</a>。我得提醒，不要去试图静态化wp，这没有任何意义。php的高性能造成了我们很少看到静态的php应用，不是作不到，而是没必要作到。无论是phpbb，还是wordpress，都是靠cache的方法来解决性能问题，事实证明了这种cache这和静态化性能相差无几(其实也可以看做一种管理下的静态化方案)，而弹性却增大了很多。只有.net那种穷头末路的东西才动不动想着静态化呢。<br/><br/>用wordpress，只需要一件事，就是作一个好的linux/freebsd集群，而不是花费时间去静态化。</p>]]></description>
         <link>http://blog.devep.net/virushuo/2006/01/17/donews-wp-great.html</link>
         <guid>http://blog.devep.net/virushuo/2006/01/17/donews-wp-great.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Tue, 17 Jan 2006 04:20:10 +0800</pubDate>
      </item>
            <item>
         <title> Fedora Core 运行 JDK 出错(java.net.SocketException)</title>
         <description><![CDATA[<p>第一次在FC3上装JDK，运行tomcat的时候发现出错，写了一个java的测试程序去读某个网页地址，也出错。<br />
错误是一样的：</p>

<p>java.net.SocketException: Invalid argument or cannot assign requested address</p>

<p>似乎就是无法访问端口。</p>

<p>经查，原来是ipv6的问题。如果系统安装了ipv6，jdk就无法连接任何ipv4的主机了，于是出错了。</p>

<p>解决方法是，在环境变量中加入：JAVA_OPTS="-Djava.net.preferIPv4Stack=true" </p>

<p>这样就一切正常了。</p>

<p>奇怪的是，我查这个错误，基本没有找到解决方法，国内的几个大论坛都有人提及，但他们都是在tomcat关闭的时候碰上的错误，别人给出的 解决问题的办法竟然是用kill来关闭tomcat。未免太有点不求甚解了吧？</p>]]></description>
         <link>http://blog.devep.net/virushuo/2006/01/11/fedora-core-jdk-java-net-socket.html</link>
         <guid>http://blog.devep.net/virushuo/2006/01/11/fedora-core-jdk-java-net-socket.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Wed, 11 Jan 2006 12:20:29 +0800</pubDate>
      </item>
            <item>
         <title>freebsd.org已经被屏蔽</title>
         <description><![CDATA[<p></p>

<p>今天发现，freebsd.org无法访问。这是不可能发生的事情，穿墙访问成功。确认被封。</p>

<p>上freebsdchina.org论坛，发现全国都不能访问了。看来是被封了。</p>

<p>我除了骂人真是无话可说了。难道他们对free这个词已经过敏到这种地步了？？</p>

<p>打电话到网通投诉，等回复。</p>

<p>如果您也是freebsd的用户，请分别致电当地网通/电信以及集团公司投诉。或许能有点帮助。我真得很悲观。哎。</p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/12/31/freebsd-blocked.html</link>
         <guid>http://blog.devep.net/virushuo/2005/12/31/freebsd-blocked.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Sat, 31 Dec 2005 11:14:56 +0800</pubDate>
      </item>
            <item>
         <title>备案促进ipv6发展</title>
         <description><![CDATA[<p>当我们想到一些好名字，通常会去注册，然后随便解析个地方，留着以后用。</p>

<p>现在这样不行了。</p>

<p>www.365kit.com 被封ip的事情，今天终于搞清，就是有一个没用的域名转到了这台机器。什么时候转的已经不记得了。这个域名只是随手注册的，甚至已经忘掉了，根本没想起来备案。365kit的两个域名均已备案。而这个没用的域名也没有web站点对应，仅仅是在域名注册商那里填写了这台机器的ip而已。就因为这个原因， 365kit.com服务器被封ip。</p>

<p>千万注意，有未备案的域名转到你得ip，你的ip就会被封，这是目前的中国式规则。</p>

<p>这衍生了2个问题。</p>

<p>1 用这种方法害别人，比任何供给方法都来得快，来得有效。如果觉得还是慢，可以直接举报，似乎立刻生效。<br />
2 注册了新域名，可能主机都没有，ip添什么。</p>

<p>第一个问题，我没想到解决方法。有人来害，只能挂掉了。换ip，不知道目前ip资源紧张的情况会不会进一步加剧，不知道最终会不会推动ipv6的技术发展。很有可能到不了1年就把中国的ip地址都封没了。</p>

<p>第二个问题，比较好解决。我目前几个没用的域名，分别指向了信产部网站，监察部网站，公安部网站。我实在没办法，我不用，但是也不好害别人啊。他们一家人，估计抗得住。只能靠他们帮忙了。</p>

<p>所以，切记，<br />
1 不要得罪人，否则人家注册一个域名指向你，你就挂了。而且无解。<br />
2 注册域名的时候，ip请指向中央部委网站ip，否则会连累别人。</p>

<p>总的来说，靠这种目前无解的攻击方式，确实解决了信用问题，如果你骗人，别人就用这种方法让你挂掉。看来备案还是达到了预想的目的的。非常和谐。  <br />
</p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/12/29/ipv6.html</link>
         <guid>http://blog.devep.net/virushuo/2005/12/29/ipv6.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Thu, 29 Dec 2005 12:26:05 +0800</pubDate>
      </item>
            <item>
         <title>在freebsd 上安装lighttpd</title>
         <description><![CDATA[<p>听说lighttpd这个web server很好，速度很快，内存占用小。于是打算装一个看看。<br /><br />lighttpd已经port在freebsd里面了。到/usr/ports/www/lighttpd下面make config ,选定需要的东西，然后make install安装就可以了。<br /><br />装后需要一个配置文件，可以先用默认的。<br />cp /usr/local/etc/lighttpd.conf.sample /usr/local/etc/lighttpd.conf<br />然后用<br />echo lighttpd_enable=\"YES\" &gt;&gt; /etc/rc.conf (是&gt;&gt;不是&gt;，千万别错了)<br />/usr/local/etc/rc.d/lighttpd.sh start<br />第一次启动，可能会碰上一些问题。<br /><br />我碰上的依此有：<br /><br />1 <br /># /usr/local/etc/rc.d/lighttpd.sh start<br />Starting lighttpd.<br />2005-12-22 23:18:30: (server.c.418) Are you nuts ? Don't apply a SUID bit to this binary<br /><br />这个错误原因是/usr/local/sbin/lighttpd 的owner是root，而lighttpd.conf里面写了：<br />## change uid to &lt;uid&gt; (default: don't care)<br />server.username&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "www"<br /><br />## change uid to &lt;uid&gt; (default: don't care)<br />server.groupname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = "www"<br /><br />所以我们需要chown www /usr/local/sbin/lighttpd<br /><br />2 # 2005-12-22 23:32:36: (mod_accesslog.c.512) opening access-log failed: Permission denied /var/log/lighttpd.access.log<br />2005-12-22 23:32:36: (server.c.670) Configuration of plugins failed. Going down.<br /><br />这是因为www没有权限在/var/log建立文件。同样还有lighttpd.error.log也会报出来类似错误。<br />touch /var/log/lighttpd.access.log<br />touch /var/log/lighttpd.error.log<br />同样给www读写权限。<br />chown www /var/log/lighttpd.access.log<br />chmod 666 /var/log/lighttpd.access.log<br />...<br />这样就可以了。<br /><br /><br />再来/usr/local/etc/rc.d/lighttpd.sh start 就可以启动了。<br /></p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/12/23/freebsd_lighttpd.html</link>
         <guid>http://blog.devep.net/virushuo/2005/12/23/freebsd_lighttpd.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Fri, 23 Dec 2005 02:09:24 +0800</pubDate>
      </item>
            <item>
         <title>foobar的来源与历史</title>
         <description><![CDATA[<p></p>

<p>foobar是每个程序员都常常见到的，其知名程度不逊于Hello world。一般我们常见的用法有分开的foo，bar，也有合起来的foobar。这个词一般可以用来代表计算机领域一切需要命名的东西，变量，函数，文件名，总之是代表什么都可以。</p>

<p>到底这个词是什么意思，什么来源，似乎很难说清楚，所谓难说清楚，并不是指没人知道，而是一人说来一个样。</p>

<p>RFC3092专门讲述了这个问题，洋洋大观，有的认为先有foobar，有的说法认为先有foo，具体的解释从二战时期军队的脏话(Fouled Up Beyond All Repair)，到电子学名词(inverted foo signal)，foo传说还来源于军队对于不明物体的代称(UFO)，有的说是一种狗的名字，有来源于流行歌曲和漫画的说法，还有各种各样的名词缩写(比如FTP Operation Over Big Address Records)，说法实在太多了。</p>

<p><br />
我个人认为比较容易接受的说法应该是：</p>

<p>上世纪6,70年代，随着DEC的手册传播开的。早年间，hacker(多指偏向软件)一般用FUBAR，而计算机工程师(多指偏向硬件)则用foobar。后来逐渐foobar就取代了FUBAR的用法，越来越广泛。</p>

<p>如有兴趣，可参阅<a href=" http://www.faqs.org/rfcs/rfc3092.html">RFC3092</a></p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/12/07/foobar.html</link>
         <guid>http://blog.devep.net/virushuo/2005/12/07/foobar.html</guid>
         <category>技术八卦</category>
         <pubDate>Wed, 07 Dec 2005 13:30:36 +0800</pubDate>
      </item>
            <item>
         <title>只允许cookies进行安全传输</title>
         <description><![CDATA[<p>setSecure(true);</p>

<p>给cookie设置了这个属性，就只有https连接才会让浏览器保存cookie，http连接会丢弃掉。可以增强cookie的安全性，</p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/11/16/cookies-setsecure-true.html</link>
         <guid>http://blog.devep.net/virushuo/2005/11/16/cookies-setsecure-true.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Wed, 16 Nov 2005 19:38:44 +0800</pubDate>
      </item>
            <item>
         <title>unix中root登陆安全的dirty case</title>
         <description><![CDATA[<p>我相信很多人不同意这是个dirty case。不过我仍然归为此类。其实dirty case并非贬义，甚至还带有一点点褒扬的意味，一点点hack的幽默。</p>

<p>unix最早是可以用root进行远程登陆的。后来这招有点麻烦，因为无数人用程序来猜测密码，任你密码再强，这种愚公移山的精神也不得不怕。</p>

<p>假如我们不知道后面的故事，这时候，解决方案大概有几种：</p>

<p>1 禁止root远程登录<br />
2 设置验证次数，超过一定次数失败就封ip<br />
3 设置ip过滤，只允许某些ip连接<br />
4 要求root密码不的短于10个字母<br />
5 ...</p>

<p>其实以上所述都在不同的地方用到。但是我最欣赏的，还是freebsd目前采用的方法。</p>

<p>freebsd设置了一个叫做wheel的组，然后禁止了root的远程登录，允许用户的远程登录，但只有wheel组的用户才能在登录之后通过su命令获得root权限。</p>

<p>这个办法简单粗暴，但是效果出奇的好。用户几乎没有成本，只是多记了一个用户账号。好处很大，禁止了root远程登录之后，就很难猜测了。首先要猜到属于wheel组的用户，然后才能有机会猜测root密码。猜root密码大概还容易点，猜测用户就不太可能了，谁知道用户名会用什么呢？</p>

<p>相比起来用证书来验证登录，或是限制ip，或是检测入侵等等相对正统的思路，这个办法真的要算个dirty case。效果如何呢？<br />
假设第一个用户的用户名长度为6个字母，6位长的密码，那么就是猜测到这个用户的机会就是1/(1!+2!+...+6!)^2，于是，有可能猜测到root密码的几率就增大了(1!+2!+...+6!)^2倍。效果很可怕吧？</p>

<p>这个思路的形成，我简单的推测一下，大概是这样的(未必符合历史本来面目，只是猜测)：</p>

<p>1 root登录危险<br />
  |<br />
  |--禁止root登录 (1)<br />
  |--允许登录但有限制 (2)</p>

<p>这是第一个分支，选择1还是选择2？<br />
这时候，选择1，似乎简单一点。如果选择2，我们马上面临规则问题，而规则是非常难制定的，要引入大量的逻辑判断，引入逻辑判断则不可避免的要带来bug。两者相较，选择1似乎好一点。</p>

<p>于是，禁止了root登录。</p>

<p>2 禁止root登录<br />
  |<br />
  |--改良(1)<br />
  |--创造一种新方法(2)</p>

<p>选择2,就要创造一种不用密码登录的方法。这个方法也是成功的。就是通过rsa密钥访问。这个方法是最正规的，不过对于用户的要求也多了不少。</p>

<p>通过(1)是否能够演化出折衷的方案呢？这时候应该可以比较容易想到先要允许一个较为难以猜测的账号登录，然后神不知鬼不觉得让他具有root的权限。于是，wheel组这个方案就出台了。</p>

<p>虽然未必真正符合历史，想必也能提供一些思路上的帮助吧。</p>

<p><br />
</p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/11/15/unixrootdirty_case.html</link>
         <guid>http://blog.devep.net/virushuo/2005/11/15/unixrootdirty_case.html</guid>
         <category>dirty case</category>
         <pubDate>Tue, 15 Nov 2005 02:15:21 +0800</pubDate>
      </item>
            <item>
         <title>关于dirty case 王八拳</title>
         <description><![CDATA[<p>那些精巧的，庞大的架构，固然值得我们学习。但是，工作了一段时间就能发现，最能解决问题的，往往不是那种漂亮的架构。造成这样的情况原因很多，有时间因素，有成本因素，无论因为什么，事实就是如此，有些时候，不好看的方法，硬是顶用。Diaty Case不是一个专门的词，是我生造出来的，这个词最能表现这种中用不中看的方法和思想。</p>

<p>江湖中传说有一种拳法，叫做王八拳。其实这也不是传说，市井打架的时候随处可见，这拳法样子难看得很，但是威力却异常强大，很多江湖高手初次碰面的时候也照样被打于马下。</p>

<p>我们需要的也是这种东西，相信你一定有体会，太多的时候，没有时间去完善的钻研一个体系，更不可能花上几个月把相关文档都看完。那些时候你一定在抓狂，老天，不要跟我谈什么基础，谈什么架构，我就要解决这个问题，什么方法都行，只要能立刻解决。我们要的就是这种一招制敌的效果。难看？等我有了时间再说吧。不正统，但是的确能救命。这就是软件开发中的王八拳。</p>

<p>当然，王八拳并非不要基础，一个人高马大，脚跟扎实的壮汉打出来，跟弱不禁风的孩子打出来，效果完全不一样。所以，有时间的话，多看书，打好基础，实在碰上搞不定的问题，那就来dirty case吧。虽然这些解决方案难看，写出来也并不丢人，一是能解决别人的问题，二是也能让别人指点得失，也是学习的方法。</p>

<p>于是，这份电子报就专门来讨论dirty case了。写自己的dirty case，评看到的经典dirty case，开发的乐趣，也尽在其中。</p>

<p>请关注：<a href="http://blog.csdn.net/group/dcase/">王八拳打天下：软件开发中的Dirty Case</a></p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/11/14/about_dirty_case.html</link>
         <guid>http://blog.devep.net/virushuo/2005/11/14/about_dirty_case.html</guid>
         <category>dirty case</category>
         <pubDate>Mon, 14 Nov 2005 18:31:22 +0800</pubDate>
      </item>
            <item>
         <title>如何编译FreeBSD 6.0支持无线网卡</title>
         <description><![CDATA[<p>如何编译FreeBSD 6.0支持无线网卡</p>

<p>FreeBSD 6.0 Release加入了对无线设备的支持，今天尝试了一下。</p>

<p>刚刚安装好的内核是不支持无线设备的，需要重新编译。</p>

<p>如果没做过，可参考<a href="http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/kernelconfig-building.html">http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/kernelconfig-building.html</a></p>

<p>简单说一下：<br />
先复制一个配置文件<br />
# cd /usr/src/sys/i386/conf<br />
# cp GENERIC MYKERNEL<br />
然后修改MYKERNEL，里面选项的意思参考前面的文档。</p>

<p>编译无线支持需要保留device wlan,device pci，然后按照自己的设备类型选择。<br />
我用的是intel网卡ipw，这个配置文件中没有，所以自己加上device ipw。</p>

<p>确认无误用make buildkernel KERNCONF=MYKERNEL编译。<br />
安装：# make installkernel KERNCONF=MYKERNEL</p>

<p>修改/boot/loader.conf，加入</p>

<p>   if_ipw_load="YES"<br />
   wlan_load="YES"</p>

<p>重新启动之后，ifconfig应该就能看到ipw0这个设备了。<br />
这时候还不能用，要加载firmware。我是通过安装ports/net/ipw-firmware实现的。</p>

<p>安装后，用 ipwcontrol -i ipw -f /usr/local/share/ipw-firmware/ipw.fw 加载。</p>

<p>最后用ifconfig激活设备就可以用了。<br />
需要注意的是，如果使用WEP，需要先加载相关模块。<br />
在/boot/loader.conf加入wlan_wep_load="YES"<br />
然后用：<br />
ifconfig ipw0 inet 192.168.0.20 netmask 0xffffff00 ssid my_net \<br />
        wepkey 0x01020304050607080910111213 deftxkey 1 wepmode on</p>

<p>注意：6.0之前用的是weptxkey ，现在变成了deftxkey。</p>

<p>这样就可以用了。</p>

<p>参考资料：</p>

<p><a href="http://www.freebsd.org/cgi/man.cgi?query=ipw&sektion=4&manpath=FreeBSD+6.0-RELEASE">http://www.freebsd.org/cgi/man.cgi?query=ipw&sektion=4&manpath=FreeBSD+6.0-RELEASE</a></p>

<p><a href="http://damien.bergamini.free.fr/ipw/ipw-freebsd.html">http://damien.bergamini.free.fr/ipw/ipw-freebsd.html</a></p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/11/10/how-to-make-freebsd6-support-wireless.html</link>
         <guid>http://blog.devep.net/virushuo/2005/11/10/how-to-make-freebsd6-support-wireless.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Thu, 10 Nov 2005 03:12:19 +0800</pubDate>
      </item>
            <item>
         <title>mysql 4.1 windows版本客户端登录错误</title>
         <description><![CDATA[<p>Mysql 4.1版本,用客户端连接的时候(用phpmyadmin等等php的程序也有一样的问题)，会出现这个提示：<br />
Client does not support authentication protocol requested<br />
by server; consider upgrading MySQL client</p>

<p>原因：<br />
MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. .....</p>

<p>大概就是4.1 采用了新的加密算法(是什么新的呢？不都是md5吗？)，但是客户端的加密方法仍然还是旧的算法。所以就出错了。</p>

<p>解决方法：<br />
先用mysql -uroot -p  连接到数据库，然后<br />
mysql> SET PASSWORD FOR<br />
    -> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');</p>

<p>或是</p>

<p>mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')<br />
    -> WHERE Host = 'some_host' AND User = 'some_user';<br />
mysql> FLUSH PRIVILEGES;</p>

<p>这样就能解决了。其实就是用这条语句把密码重新写到数据库一次。<br />
但很烦的，以后如果修改了用户的密码，或是新增加了用户，都要这样处理一下才可以。</p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/10/19/mysql_41_windows_client_does_not_support_authentication.html</link>
         <guid>http://blog.devep.net/virushuo/2005/10/19/mysql_41_windows_client_does_not_support_authentication.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Wed, 19 Oct 2005 01:44:33 +0800</pubDate>
      </item>
            <item>
         <title>Bindows 很强，然后呢？</title>
         <description><![CDATA[<p>随着ajax被提起，被讨论，被应用，新的一轮RIA(富客户端)的热潮开始了。<br />
<br />
<a href="http://www.bindows.net/" target="_self">Bindows</a>最近也是出镜率很高的词，2年来，几乎每次谈到RIA，Bindows就会露露脸，但随后就被大家忘掉了。从来没听说过有人真的应用过。<br />
<br />
的确，Bindows很强，但然后呢？<br />
<br />
我始终质疑在浏览器中模拟一个&quot;应用程序-like&quot;的UI，是否有实际意义。事实证明了这种意义不大(始终没有真正的应用案例)。B/S从一开始，就是带着很酷的外观出现的，比
起应用程序界面的方方正正的灰色框框，第一代浏览器中完成的界面就已经大大超越他了。抛开美观不说，为什么浏览器流行，而应用程序不流行?是因为浏览器的
界面比应用程序简单，有人说&ldquo;只要一步步的选，点就行了&rdquo;。看其本质，应用程序是以功能为导向的(必不可少的元素：菜单，工具条)，而浏览器是以内容为导
向的(Document)。用户使用浏览器，大多是为了&ldquo;获取内容&rdquo;，和使用应用程序的&ldquo;完成某种操作&rdquo;从本质上就不同。试想：如果有个基于浏览器的光盘
刻录程序，你会用吗？当然，如果作的足够好，也可能会用，但是，比起应用程序，他有什么优势呢？刻录光盘是一种&ldquo;操作&rdquo;，并非获取内容，不是浏览器的典型
应用环境。浏览器归纳了&ldquo;获取内容&rdquo;这个行为的基本操作（访问，前进，后退，刷新，停止），并封装成一套界面元素和操作习惯，这样，B/S应用就成形了。<br />
<br />
而Bindows只是简单的模拟，虽然代码很牛，难度很高，但是实际意义很小。所谓RIA，我认为，应该是获取内容的操作方式，结合上一些应用程序的优
点，目前看来主要是事件模型(Event
Model)，如能解决这个问题，至少目前看来足够用了。Gmail把现有的事件模型和数据模型结合起来，创造了一种新的操作感受，很成功。ajax正是
为了试图解决这个问题而创造出来的模式。<br />
<br />
具体的应用环境比技术本身更重要，不存在好的技术或是不好的技术，只有适用或者不适用。我不得不再次重申这句话。Bindows，恐怕只能是一个玩物。

</p>]]></description>
         <link>http://blog.devep.net/virushuo/2005/05/21/1116645611921.html</link>
         <guid>http://blog.devep.net/virushuo/2005/05/21/1116645611921.html</guid>
         <category>偶尔谈谈技术</category>
         <pubDate>Sat, 21 May 2005 19:20:11 +0800</pubDate>
      </item>
      
   </channel>
</rss>