<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>pickerel</title>
    <description></description>
    <link>http://pickerel.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>batch kill linux porcesses</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/207795" style="color:red;">http://pickerel.javaeye.com/blog/207795</a>&nbsp;
          发表时间: 2008年06月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java"> ps -ef | grep 'expect -f' | awk '{system("kill -9 " $2)}'</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/207795#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Jun 2008 11:32:01 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/207795</link>
        <guid>http://pickerel.javaeye.com/blog/207795</guid>
      </item>
      <item>
        <title>an expect script for ssh login</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/207791" style="color:red;">http://pickerel.javaeye.com/blog/207791</a>&nbsp;
          发表时间: 2008年06月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">#!/usr/bin/expect -f
# This script needs three argument to(s) connect to remote server:
# user = Username of remote UNIX Server
# password = Password of remote UNIX server
# ipaddr = IP Addreess of remote UNIX server, no hostname
# For example:
#  ./sshlogin.exp  192.168.1.11 user password sshargv
set user [lrange $argv 1 1]
set password [lrange $argv 2 2]
set ipaddr [lrange $argv 0 0]
set arg1 [lrange $argv 3 3]
set timeout -1
# now connect to remote UNIX box (ipaddr) with given script to execute
spawn ssh $arg1 $user@$ipaddr
match_max 100000
# Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
send -- "\r"
expect eof</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/207791#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Jun 2008 11:23:47 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/207791</link>
        <guid>http://pickerel.javaeye.com/blog/207791</guid>
      </item>
      <item>
        <title>用linux命令行实现批量文件编码转换</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/207430" style="color:red;">http://pickerel.javaeye.com/blog/207430</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本操作有风险，请注意操作前备份文件。<br /><br /><br />1.将原来所有编码为gb2312的*.java文件转换为编码为utf-8的*.java.new文件<br /><br /><pre name="code" class="java">
 for i in `find . -name "*.java"`; do iconv -f gb2312 -t utf-8 $i -o $i.new; done</pre><br /><br /><br />2.将*.java.new文件的.new扩展名去除<br /><br /><pre name="code" class="java"> find . -name "*.new" | sed 's/\(.*\).new$/mv "&" "\1"/' | sh</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/207430#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Jun 2008 12:58:33 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/207430</link>
        <guid>http://pickerel.javaeye.com/blog/207430</guid>
      </item>
      <item>
        <title>程序员笑话</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/191347" style="color:red;">http://pickerel.javaeye.com/blog/191347</a>&nbsp;
          发表时间: 2008年05月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          多少程序员会换灯泡？<br />无 - 这是个硬件问题。<br /><br /><br />为什么程序员总是把万圣节和圣诞节搞混？<br />因为 Oct 31  等于 Dec 25。<br /><br />这世界只有10种人：知道二进制的和不知道的。<br /><br />一个程序员在肉店买了1公斤肉，一个小时候后他不高兴的跑回来说老板短了他24克。<br /><br /><br />一个人正吸着雪茄，吐着烟圈。他女朋友生气了发飙道，“你没看见包装盒上的警告么？吸烟有害健康！”<br />那人回答道：“我是程序员。我们不关心警告，只关心错误。”<br /><br /><br />你听过新出的克雷超级计算机么？他超级快，6秒钟就能执行完一个死循环。<br /><br /><br />两字符串走进一个酒吧坐下，酒保过来，“两位来点什么？”<br />第一个字符串说，“我要一杯湿啤 fulk boorg jdk^CjfdLk jk3s d#f67howe%^U r89nvy~~owmc63^Dz x.xvcu。”<br />“对不起，”第二个字符串对酒保说，“我这哥们没有\0结尾。”<br /><br />摘自雷登书屋数据处理字典：<br />死循环: n.,见无限循环。<br />无限循环：n.,见死循环。<br /><br /><br />一个计算机系学生坐在树下学习，这时他的一个同学骑了辆崭新的自行车停在他面前。第一个学生问，“从哪搞来的？”<br />骑车的同学答道，“我正在外面学习，一个漂亮女生骑了辆车过来停在我面前，她脱了她所有的衣服说，‘你可以拿走任何你想要的’。“<br />第一个学生说道，“你选的不错！不过她的衣服你穿好像有些小。”<br /><br /><br />摘译自<a href="http://www.devtopics.com/best-programming-jokes/" target="_blank">http://www.devtopics.com/best-programming-jokes/</a>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/191347#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 09 May 2008 11:16:23 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/191347</link>
        <guid>http://pickerel.javaeye.com/blog/191347</guid>
      </item>
      <item>
        <title>migrate4j:基于java的数据库迁移工具</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/187950" style="color:red;">http://pickerel.javaeye.com/blog/187950</a>&nbsp;
          发表时间: 2008年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          migrate4j是一个基于java的数据库迁移的工具，有点象rails里的db:migrate，通过它可以方便使用java代码来记录数据库的变更和快速的将变更还原到数据库，下面是一个migrate4j的例子：<br /><pre name="code" class="java">package db.migrations; 

import static com.eroi.migrate.Define.*;
import static com.eroi.migrate.Define.DataTypes.*;
import static com.eroi.migrate.Execute.*;
import com.eroi.migrate.Migration; 

public class Migration_1 implements Migration {

  public void up() {
    createTable(
      table("simple_table",
        column("id", INTEGER, primarykey(), notnull()),
        column("desc", VARCHAR, length(50), defaultValue("NA"))));
  }

  public void down() {
    dropTable("simple_table");
  }
} </pre><br /><br />migrate4j目前支持的数据库有h2,derby,mysql,sybase，关于migrate4j的详细信息请访问它的官方网站：<a href="http://migrate4j.sourceforge.net/" target="_blank">http://migrate4j.sourceforge.net/</a>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/187950#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 29 Apr 2008 11:46:46 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/187950</link>
        <guid>http://pickerel.javaeye.com/blog/187950</guid>
      </item>
      <item>
        <title>在GAE中生成全局序列号</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/182755" style="color:red;">http://pickerel.javaeye.com/blog/182755</a>&nbsp;
          发表时间: 2008年04月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          gae不能写文件，所以很多操作只能用datastore来实现了。<br /><br /><pre name="code" class="python">
class Sequence(db.Model):
    @staticmethod
    def next():
        seq = Sequence()       
        seq.put()
        id = seq.key().id()
        seq.delete()
        return id    
</pre><br /><br />使用<br /><pre name="code" class="python">print Sequence.next()</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/182755#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Apr 2008 02:08:13 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/182755</link>
        <guid>http://pickerel.javaeye.com/blog/182755</guid>
      </item>
      <item>
        <title>Restful your google app engine applications</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/182754" style="color:red;">http://pickerel.javaeye.com/blog/182754</a>&nbsp;
          发表时间: 2008年04月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用示例：<br /><pre name="code" class="python">#author:pickerel@gmail.com
import wsgiref.handlers
from google.appengine.ext import webapp
from rest import *

    
class CommentResource(RestResource):
    def initialize(self):
        self.response.out.write("comment.initialize:format=%s&lt;br/>" %(self.format))
    def index(self, entry_id):
        self.response.out.write("comment.index:entry_id=%s&lt;br/>" % entry_id)
    def show(self, id, entry_id):
        self.response.out.write("comment.show:id=%s,entry_id=%s&lt;br/>" %(id, entry_id))        
    def create(self, entry_id):
        self.response.out.write("comment.show:id=%s,entry_id=%s&lt;br/>" %(id, entry_id))        
    def update(self, id, entry_id):
        self.response.out.write("comment.update:id=%s,entry_id=%s&lt;br/>" %(id, entry_id))        
    def delete(self, id, entry_id):
        self.response.out.write("comment.delete:id=%s,entry_id=%s&lt;br/>" %(id, entry_id))        
        
class EntryResource(RestResource):
    def initialize(self):
        self.response.out.write("entry.initialize:format=%s&lt;br/>" %(self.format))
    def index(self):
        self.response.out.write("entry.index&lt;br/>")
    def show(self, id):
        self.response.out.write("entry.show:id=%s&lt;br/>" %(id))        
    def create(self):
        self.response.out.write("entry.show:id=%s&lt;br/>" %(id))        
    def update(self, id):
        self.response.out.write("entry.update:id=%s&lt;br/>" %(id))        
    def delete(self, id):
        self.response.out.write("entry.delete:id=%s&lt;br/>" %(id))   
        """"""
        
def main():
  RestHandler.route = {
           '/entries' : EntryResource,
           '/entries/:entry_id/comments' : CommentResource}
  
  application = webapp.WSGIApplication([(".*", RestHandler)],     debug=True)
  wsgiref.handlers.CGIHandler().run(application)


if __name__ == '__main__':
  main()
</pre><br /><br />在这个rest实现机制中，资源支持的操作有5种,index,show,create,update,delete。<br />请求会根据请求的http method和路由设定自动和资源绑定。<br />比如<br />'/entries/:entry_id/comments' : CommentResource<br />这个路由说明 /entries/:entry_id/comments　这个模式的url将绑定到CommentResource上，<br />其中:entry_id是一个参数。<br />配置这个路由后，访问<br />/entries/2/comments 将调用CommentResource的index(self, entry_id)方法，里面的entry_id与路由配置的:entry_id是对应的，这里entry_id=2<br />同样<br />/entries/2/comments/1 将调用CommentResource的show(self, id, entry_id)方法，调用时候id=1,entry_id=2<br /><br />该实现还支持不同的内容格式请求的区分，<br />/entries/2/comments/1<br />/entries/2/comments/1.html<br />/entries/2/comments/1.xml<br />这三个请求都将调用CommentResource的show(self, id, entry_id)方法，在这个方法中，可以通过self.format来获取用户所请求的格式，上面三个请求的内容格式分别为 html, html, xml<br /><br />文件rest.py，实现url的解析及和资源的绑定<br /><pre name="code" class="python">#author:pickerel@gmail.com
import wsgiref.handlers
from google.appengine.ext import webapp

_DEFAUT_RESOURCE_FORMAT = 'html'
class RestResource:
    def __init__(self, request, response, params = {}, value = None, format = _DEFAUT_RESOURCE_FORMAT):
        self.request = request
        self.response = response
        self.params = params
        self.value = value
        self.format = format
        
    def initialize(self):
        """"""
    def index(self, *args):
        """"""
    def show(self, res, *args):
        """"""        
    def create(self, *args):
        """"""
    def update(self, res, *args):
        """"""
    def delete(self, res, *args):
        """"""
        
class RestHandler(webapp.RequestHandler):
    route = {}
    #{
    #         '/':IndexResource,
    #         '/entries' : EntryResource,
    #         '/entries/:entry_id/comments' : CommentResource}
      
    def __init__(self):
      self.resource = None
    
    def initialize(self, request, response):
      webapp.RequestHandler.initialize(self, request, response)
      if self.request.path == '' or self.request.path == '/':        
          self.resource = RestHandler.route['/'](request, response)
      else:
          self.resource = RestHandler.get_rest_resource(request, response)
          
      if self.resource != None:
          self.resource.initialize()
      else:
          self.error(404)
          
    @staticmethod
    def get_rest_resource(request, response):
      path_fields = request.path[1:].split("/")
      resource = None
      resource_paramters = {}
      resource_value = None
      resource_format = _DEFAUT_RESOURCE_FORMAT
      
      for item in RestHandler.route.items():
          resource = None
          resource_value = None
          resource_paramters.clear()
          resource_format = _DEFAUT_RESOURCE_FORMAT
          
          route_path = item[0][1:]
          route_path_fields = route_path.split("/")
          if len(route_path_fields) == len(path_fields) or len(route_path_fields) + 1 == len(path_fields):
              resource = item[1]
              for i in range(len(path_fields)):
                  if i == len(path_fields) - 1 and path_fields[i].find(".") != -1:
                      arr = path_fields[i].split('.')
                      path_fields[i] = arr[0]
                      resource_format = arr[1]
                  if i  == len(route_path_fields):
                      resource_value = path_fields[i]
                  elif path_fields[i] == route_path_fields[i]:
                      continue
                  elif route_path_fields[i].startswith(":"):
                      resource_paramters[route_path_fields[i][1:]] = path_fields[i]
                  else:
                      resource = None
                      break
                  
          if resource != None:
              break;
         
      if resource == None:
          return None
      else:
          return resource(request, response, resource_paramters, resource_value, resource_format)

    def get(self):
      if self.resource != None:
        if self.resource.value != None:
            self.resource.show(self.resource.value, **self.resource.params)
        else:
            self.resource.index( **self.resource.params)
    
    def post(self):
      """Handler method for POST requests."""
      if self.resource != None:
        if self.resource.value != None:
           self.resource.create( **self.resource.params)
        else:
           self.error(404)           
    
    def put(self):
      if self.resource != None:
        if self.resource.value != None:
            self.resource.update(self.resource.vaue, **self.resource.params)
        else:
            self.error(404)
            
    def delete(self):
      if self.resource != None:
        if self.resource.value != None:
            self.resource.delete(self.resource.vaue, **self.resource.params)
        else:
            self.error(404)</pre><br /><br /><br /><br />完整代码见附件
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/182754#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Apr 2008 01:47:40 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/182754</link>
        <guid>http://pickerel.javaeye.com/blog/182754</guid>
      </item>
      <item>
        <title>python 实现动态参数</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/182744" style="color:red;">http://pickerel.javaeye.com/blog/182744</a>&nbsp;
          发表时间: 2008年04月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="python">
def foo(a, b, c):
    return a + b + c

positionals = (1, 2)
keywords = {'c': 3}
foo(*positionals, **keywords)
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/182744#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Apr 2008 00:00:47 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/182744</link>
        <guid>http://pickerel.javaeye.com/blog/182744</guid>
      </item>
      <item>
        <title>在GAE中使用django模板</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/181969" style="color:red;">http://pickerel.javaeye.com/blog/181969</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Google App Engine自带了django框架，开发者可以直接在上面使用django开始web程序，如果你不打算去学django框架，而只是想用它的模板机制，那也是可以的，这里以一个hello, world为例做个演示：<br /><br />文件：./simple_blog/app.yaml<br />application: simple-blog<br />version: 1<br />runtime: python<br />api_version: 1<br /><br />handlers:<br />- url: /.*<br />  script: simple_blog.py<br /><br />文件：./simple_blog/simple_blog.py<br /><pre name="code" class="python">#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cgi
import sys, os
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template

_DEBUG = True

class BaseRequestHandler(webapp.RequestHandler):
  """套用模板"""
  def render(self, template_name, template_values={}):
    values = {
      'request': self.request,
      'application_name': 'test',
    }
    values.update(template_values)
    directory = os.path.dirname(__file__)
    #指定模板文件路径
    path = os.path.join(directory, os.path.join('templates', template_name))
    self.response.out.write(template.render(path, values, debug=_DEBUG))
 
class IndexPage(BaseRequestHandler):
  def get(self):
    self.render('index.html', {
      'title': 'Index',
      'content': 'Hello, World'
    })

#配置URL路由
application = webapp.WSGIApplication([
  ('/', IndexPage)
], debug=_DEBUG)


def main():
  wsgiref.handlers.CGIHandler().run(application)
 
if __name__ == '__main__':
  main() </pre><br /><br />文件：./simple_blog/templates/index.html<br /><pre name="code" class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
&lt;html xmlns="http://www.w3.org/1999/xhtml">
  &lt;head>
    &lt;meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    &lt;title>{{application_name }} - {{title}}&lt;/title>
  &lt;/head>
  &lt;body>
    {{content}}
  &lt;/body>
&lt;/html></pre><br /><br />附件是一个完整的google app engine演示例子，关于django模板的更详细的说明请参见<br /><a href="http://www.woodpecker.org.cn/obp/django/django-faq/templates.html" target="_blank">http://www.woodpecker.org.cn/obp/django/django-faq/templates.html</a>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/181969#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 23:07:02 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/181969</link>
        <guid>http://pickerel.javaeye.com/blog/181969</guid>
      </item>
      <item>
        <title>在GAE中读取yaml的例子</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/181964" style="color:red;">http://pickerel.javaeye.com/blog/181964</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Google App Engine中内置了yaml文件的验证、解析方法，下面演示一个在GAE中读取yaml的例子<br /><br />待读取的配置文件 config.yaml 内容如下：<br />blog_name: 我们的博客<br />allow_comment: False<br />masters:<br />- name: Pickerel Yee<br />  account: pickerel@gmail.com<br /><br />- name: 王二<br />  account: wang2@gmail.com<br /><br />建立配置验证读取文件 config.py<br /><pre name="code" class="python">#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, sys
from google.appengine.api import validation
from google.appengine.api import yaml_listener
from google.appengine.api import yaml_builder
from google.appengine.api import yaml_object
from simple_blog import *
class BlogMaster(validation.Validated):
  ATTRIBUTES = {
    'name': validation.TYPE_UNICODE,
    'account': r'^\S+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+$'
  }
class ConfigExternal(validation.Validated):
  ATTRIBUTES = {
    'blog_name': validation.TYPE_UNICODE, 
    'allow_comment': validation.Type(bool, default=False),
    'masters': validation.Optional(validation.Repeated(BlogMaster))
  }

#配置类
class Config(object): # subclassing from object for 2.2, unnecessary after that
  instance = None
  def __init__(self):
    self.blog_name = 'blog'
    self.blog_masters = []
    self.allow_comment = True       
  
  @staticmethod
  def get_instance():
    if Config.instance == None:
      Config.instance = Config.load()
    return Config.instance
  
  @staticmethod
  def load():
    """parses the config.yaml file"""
    _BASE_PATH = os.path.abspath(os.path.dirname(__file__))
    config_file = os.path.join(_BASE_PATH, "config.yaml")
    fh = open(config_file, "r")
    try:
      builder = yaml_object.ObjectBuilder(ConfigExternal)
      handler = yaml_builder.BuilderHandler(builder)
      listener = yaml_listener.EventListener(handler)
      listener.Parse(fh)      
      return handler.GetResults()[0]
    finally:
      fh.close()

</pre><br />GAE中内置了基本数据类型的验证方法，更复杂的验证可以通过正则式或者自定义验证方法来实现。<br /><br />使用<br /><pre name="code" class="python">print config.get_instance().blog_name</pre><br /><br />附件是一个完整的演示例子。
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/181964#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 22:53:32 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/181964</link>
        <guid>http://pickerel.javaeye.com/blog/181964</guid>
      </item>
      <item>
        <title>bug in gae:regex invalid: unbalanced parenthesis</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/180717" style="color:red;">http://pickerel.javaeye.com/blog/180717</a>&nbsp;
          发表时间: 2008年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在windows下运行一个示例工程的时候返回错误 <br /><span style="color: red">regex invalid: unbalanced parenthesis</span><br /><br />修正：<br />找到 google\appengine\tools\dev_appserver.py 文件，到2369行把以下两行代码<br /><pre name="code" class="python">      regex = os.path.join(re.escape(regex), '(.*)')
      path = os.path.join(path, '\\1')</pre><br /><br />修改为<br /><pre name="code" class="python">
      regex = re.escape(regex) + '/(.*)'
      path = path + '/\\1'</pre><br /><br />在1.0.1版的sdk中已经解决了这个问题。
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/180717#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Apr 2008 10:24:59 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/180717</link>
        <guid>http://pickerel.javaeye.com/blog/180717</guid>
      </item>
      <item>
        <title>如何解开一个.deb文件</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/177645" style="color:red;">http://pickerel.javaeye.com/blog/177645</a>&nbsp;
          发表时间: 2008年03月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用ar命令解开.deb包<br /><strong>ar vx test.deb</strong><br />解开之后会得到三个文件<br />debian-binary<br />control.tar.gz<br />data.tar.gz<br /><br />使用 tar 解开 data.tar.gz 即可得到deb文件中的数据文件<br /><strong>tar -xzvf data.tar.gz</strong>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/177645#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 29 Mar 2008 20:18:09 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/177645</link>
        <guid>http://pickerel.javaeye.com/blog/177645</guid>
      </item>
      <item>
        <title>j2me中发送短信</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/176695" style="color:red;">http://pickerel.javaeye.com/blog/176695</a>&nbsp;
          发表时间: 2008年03月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          三星<br /><br /><pre name="code" class="java">
SM sm = new SM();
sm.setDestAddress("10086");
sm.setData("hello, world");
SMS.send(sm);
</pre><br /><br />通用<br /><pre name="code" class="java">
String address = "sms://+10086"
MessageConnection conn = (MessageConnection)Connector.open(address);
TextMessage msg = (TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);
msg.setPayloadText("hello, world");
conn.send(msg); 
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/176695#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Mar 2008 12:01:14 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/176695</link>
        <guid>http://pickerel.javaeye.com/blog/176695</guid>
      </item>
      <item>
        <title>Linux下用find查找并复制指定文件到指定目录下</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/168690" style="color:red;">http://pickerel.javaeye.com/blog/168690</a>&nbsp;
          发表时间: 2008年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          查找当前目录下的所有*.doc文件并将所有结果复制到 /tmp/doc 目录下<br /><pre name="code" class="java">
find . -iname "*.doc" -type f -exec cp {} /tmp/doc \;
</pre><br /><br />查找当前目录下的所有*.doc目录并将所有结果复制到 /tmp/doc 目录下<br /><pre name="code" class="java">
find . -iname "*.doc" -type d -exec cp {} /tmp/doc \;
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/168690#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Mar 2008 10:51:46 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/168690</link>
        <guid>http://pickerel.javaeye.com/blog/168690</guid>
      </item>
      <item>
        <title>集群部署方案</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/168517" style="color:red;">http://pickerel.javaeye.com/blog/168517</a>&nbsp;
          发表时间: 2008年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>集群部署方案<br /><br />一 目标<br />1 均衡系统压力，减少单个服务器因压力过于集成而超负荷运转的发生几率。<br />2 加快用户的访问的速度。<br />3 自动备援，避免因单点故障而导致整个系统瘫痪的情况发生。<br />4 日后系统的便于扩展，通过增加相应的服务器节点即可提高整个系统的承载能力。<br /><br />二 软件配置<br />系统                                   ：RHEL4 [ Linux version 2.6.9-42.EL]<br />负载均衡                             ：ipvsadm(1.24-6)<br />缓存服务器                          ：squid(3.0)<br />应用服务器（Web动态内容） ：apache(2.2.6)<br />资源服务器（Web静态内容） ：lighttpd(1.4.18)<br />数据库服务器                        : mysql-max(5.1)<br />节点监控&amp;故障切换               : ldirectord+heartbeat<br />文件服务器                         ：nfs<br />Session服务器                     : nfs<br /><br />三 服务器分配<br />lb1,lb2                               ：负载均衡服务器，一个是工作服务器，一个是冗余服务器。<br />ch1,ch2...                            : 缓存服务器<br />dw1,dw2....                          : 应用服务器（Web动态内容）<br />sw1,sw2...                           ：资源服务器（Web静态内容）<br />db1,db2,db2,db4..               : 数据库服务器<br />se1,se2,se3...                       : session 服务器<br /><br /><br />注：以上服务器并非硬件服务器，在前期系统压力不大的情况下，以上服务器可以多个部署在一个硬件服务器上。<br /><br />四 部署<br />1 均衡服务器<br />   lb1,lb2是两个安装了lvs的均衡服务器，两个服务器中一个是工作服务器，一个冗余服务器，冗余服务器通过heartbeat侦测工作服务器是否出现故障，如果发现是，它将自动切换成工作服务器。<br /><br />2 缓存服务器<br />   安装squid，用于缓存用户对应用服务器请求的返回结果，以减少应用服务器的压力，提供用户访问的速度。<br /><br />3 应用服务器<br />   安装apache，用于运行和对外发布Web应用。<br /><br />4 资源服务器<br />   安装lighttpd，用于存放和对外发布静态资源，包括图片，css，javascript...，资源存放在nfs文件系统上。用户对资源的访问无须经过缓存服务器的缓存，但为了减少压力，资源服务器应该合理设置客户端缓存，以减少单个用户在短时间内对相同资源的频繁访问。<br /><br />5 Session 服务器<br />   用于存放应用的Session文件，文件存放在 nfs 文件系统上。<br /><br />6 数据库服务器<br />   安装mysql，为Web程序提供数据存储服务 。 数据库服务器以 mysql 集群的方式部署。</p><p>&nbsp;</p><p><img src="../../../topics/download/72cb4990-f62d-3af0-b448-d8764b563042" alt="" /> </p><p>&nbsp;</p><p>本方案仅供参考，不保证在真实环境能稳定可靠的运行。</p>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/168517#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Mar 2008 00:43:42 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/168517</link>
        <guid>http://pickerel.javaeye.com/blog/168517</guid>
      </item>
      <item>
        <title>在Rails中实现Layout的嵌套</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/168437" style="color:red;">http://pickerel.javaeye.com/blog/168437</a>&nbsp;
          发表时间: 2008年03月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          需求：<br /><br />一个页面是用了layout/application.rhtml 做layout，现在要这个页面同时也可以做其他页面的layout。<br /><br /><br />实现：<br />1.扩展ActionView<br /><pre name="code" class="ruby">
module ActionView
    module Helpers
        module NestedLayoutsHelper
            def inside_layout(layout, &block)
                layout = layout.include?('/') ? layout : "layouts/#{layout}"
                @template.instance_variable_set("@content_for_layout", capture(&block))
                concat(@template.render(:file => layout, :user_full_path => true), block.binding)
            end
        end
    end
end

ActionView::Base.class_eval do
    include ActionView::Helpers::NestedLayoutsHelper
end
</pre><br />可以把扩展代码放application.rb或者environment.rb或者单独存为一个文件在适当的地方require即可。<br /><br />2.使用<br />layout/layout1.rhtml<br /><pre name="code" class="ruby">
&lt;!-- layout1使用application作layout -->
&lt;% inside_layout 'application' do %>
layout1 页面头
&lt;%= @content_for_layout %>
layout1 页面尾
&lt;% end %>
</pre><br />test_controller.rb<br /><pre name="code" class="ruby">
class TestController &lt; ApplicationController
    layout :layout1
end
</pre><br /><br />适用版本<br />rails version > 1.2<br /><br />来源<br />http://mywheel.net/blog/index.php/2006/08/12/nested-layouts-in-ruby-on-rails/
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/168437#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 05 Mar 2008 18:09:16 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/168437</link>
        <guid>http://pickerel.javaeye.com/blog/168437</guid>
      </item>
      <item>
        <title>quartz-1.6.0的 UserTransaction类找不到的解决办法</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/161396" style="color:red;">http://pickerel.javaeye.com/blog/161396</a>&nbsp;
          发表时间: 2008年02月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用　quartz　1.6.0 的时候遇到这个错误：<br /><br /><span style="color: red">java.lang.NoClassDefFoundError: javax/transaction/UserTransaction. </span><br /><br /><br />解决办法：<br />到<a href="http://java.sun.com/products/jta/"> http://java.sun.com/products/jta/</a> 下载<br /> Java Transaction API classes 的zip包，解压然后用命令<br /><br />jar cf jta.jar javax <br /><br />生成一个jta.jar文件，把这个文件添加到java应用的classpath里即可。<br /><br /><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/161396#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 04 Feb 2008 13:53:20 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/161396</link>
        <guid>http://pickerel.javaeye.com/blog/161396</guid>
      </item>
      <item>
        <title>用scrubyt抓取酷讯最新火车票信息</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/159499" style="color:red;">http://pickerel.javaeye.com/blog/159499</a>&nbsp;
          发表时间: 2008年01月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用scrubyt写的一个简单的小例子，scrubyt看起来真的很不错，不过现在bug也非常的多，特别是对xpath的支持。<br /><br /><pre name="code" class="ruby">
require 'rubygems'
require 'scrubyt'

Scrubyt.logger = Scrubyt::Logger.new  
kooxoo_data = Scrubyt::Extractor.define do
  fetch "http://piao.kooxoo.com/"
  fill_textfield 'vFrom', '北京'
  fill_textfield 'to', '广州'
  submit
  record"//tbody/tr" do
     col1 "/td[@class='col1']" do
         url "href", :type => :attribute
     end
     col2 "/td[@class='col2']"
     col3 "/td[@class='col3']"
     col4 "/td[@class='col6']"
     col5 "/td[@class='col7']"
  end
end 
kooxoo_data.to_xml.write(open('result.xml', 'w'))

</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/159499#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 26 Jan 2008 13:56:46 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/159499</link>
        <guid>http://pickerel.javaeye.com/blog/159499</guid>
      </item>
      <item>
        <title>scrubyt出现RubyInline (= 3.6.3)错误的解决办法</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/159450" style="color:red;">http://pickerel.javaeye.com/blog/159450</a>&nbsp;
          发表时间: 2008年01月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>装好 scruby 后第一次使用遇到一个错误：<br /><br /><span style="color: red">site_ruby/1.8/rubygems.rb:246:in `activate': can't activate RubyInline (= 3.6.3), already activated RubyInline-3.6.6] (Gem::Exception)</span><br /><br /><br />GOOGLE了一下，找到了两种方法：<br />1.使用gem uninstall RubyInline把3.6.6版本的RubyInline卸载了，具体操作见<a href="http://lintide.javaeye.com/blog/151998">lintide的博客</a>。</p><p>2.在<span><span>require&nbsp;</span><span class="string">'scrubyt'</span><span> 之前指定 RubyInline的版本，只要加上以下代码就可以了：</span></span></p><pre name="code" class="ruby">require_gem 'RubyInline', '=3.6.3'
</pre>&nbsp;<p>&nbsp;</p><p>第二种方法在我的linux机器正常，可windows下就报</p><p><span style="color: #ff0000">undefined method `require_gem' for main:Object (NoMethodError)</span></p><p>的错误，可能是我的windows环境里装了最新的rails的缘故，于是把 require_gem 换成 gem，</p><p>OK，刚才的错误没了，但是又接着来了新的问题：</p><p><span style="color: #ff0000">Define INLINEDIR or HOME in your environment and try again</span></p><p>&nbsp;</p><p>检查 $RUBH_HOME\lib\ruby\gems\1.8\gems\RubyInline-3.6.3\lib目录下的 inline.rb 文件，发现里面有这样一段代码：</p><p>&nbsp;</p><pre name="code" class="ruby">   env = ENV['INLINEDIR'] || ENV['HOME']

    if env.nil? then
      $stderr.puts &quot;Define INLINEDIR or HOME in your environment and try again&quot;
      exit 1
    end</pre><p>&nbsp;</p><p>于是就在系统环境变量中添加了 HOME&nbsp; 的设置： HOME=c:\tmp</p><p>&nbsp;</p><p>再次运行代码，上一个错误没有了，又来了一堆新的错误信息：</p><p>&nbsp;</p><pre name="code" class="ruby"><span style="color: #ff0000">c:/ruby/lib/ruby/gems/1.8/gems/RubyInline-3.6.3/lib/inline.rb:386:in ``': No s
h file or directory - cl -nologo -LD   -MD -Zi -O2b2xg- -G6 -I c:/ruby/lib/rub
1.8/i386-mswin32 -I c:/ruby/include -o &quot;C:\tmp/.ruby_inline/Inline_ParseTree_2
7.so&quot; &quot;C:/tmp/.ruby_inline/Inline_ParseTree_2c97.c&quot;  -link /LIBPATH:&quot;c:/ruby/l
&quot; /DEFAULTLIB:&quot;msvcrt-ruby18.lib&quot; /INCREMENTAL:no /EXPORT:Init_Inline_ParseTre
2c97 (Errno::ENOENT)
        from c:/ruby/lib/ruby/gems/1.8/gems/RubyInline-3.6.3/lib/inline.rb:386
n `build'
        from c:/ruby/lib/ruby/gems/1.8/gems/RubyInline-3.6.3/lib/inline.rb:660
n `inline'
        from c:/ruby/lib/ruby/gems/1.8/gems/ParseTreeReloaded-0.0.1/lib/parse_
ee_reloaded.rb:21
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `
m_original_require'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `
quire'
        from c:/ruby/lib/ruby/gems/1.8/gems/scrubyt-0.3.4/lib/scrubyt.rb:12
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `
m_original_require'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `
quire'
        from google.rb:3</span></pre>&nbsp;<p>这简直是在玩俄罗斯套娃，不同的是这次越到里面娃越大。continue google，发现遇<a href="http://agora.scrubyt.org/forums/3/topics/60?page=2">到这个问题的人</a>大有人在，其中有 个叫 <a href="http://agora.scrubyt.org/users/154">cohenyf</a> 的仁兄号称搞定了这个问题，他的解决办法是：</p><p>&nbsp;</p><p>1.把 C:\Program Files\Microsoft Visual Studio\VC98\Bin添加到系统的PATH变量里，当然前提是在你的系统中能找到这个目录。</p><p>2.复制windows系统目录下的<span class="caps">MSVCP60</span>.DLL 和  C:\Program Files\Microsoft Visual Studio\Common\Bin下的<span class="caps">MSPDB60</span>.dll文件到 C:\Program Files\Microsoft Visual Studio\VC98\Bin 下。</p><p>3.重启计算机以便 PATH 生效，其实不重启也行的。</p><p>&nbsp;</p><p>我的天，我电脑上没有什么Visual Studio目录，这简直不就是折腾人么，我不玩了，我还是老老实实的继续用我的 beautifulsoap，bye ，scrubyt，我这未还没说句上整话的朋友，不过，等等，有位仁兄提到了什么<a href="http://scrubyt.org/announcing-jscrubyt-no-more-win32-problems/">jscrubyt</a>，</p><p>&nbsp;<br /><span style="background-color: #c0c0c0">Thanks to </span><a href="http://www.pftg.net.ru/" style="background-color: #c0c0c0">Paul Nikitochkin</a><span style="background-color: #c0c0c0"> a.k.a. </span><a href="http://agora.scrubyt.org/users/120" style="background-color: #c0c0c0">pftg</a><span style="background-color: #c0c0c0">,
scRUBYt! made a great leap to ensure win32 compatibility. Paul created
JscRUBYt! - the JRuby version of scRUBYt! which should be easy to
install under win32 even if you are not a level 64 microsoft compiling
ninja (in fact, it requires no compiling, fiddling around with C/C++ or
doing anything outside (J)Ruby-land (well, except of installing JRuby,
of course)). </span></p><p>&nbsp;</p><p>说貌似在win32环境跑的很正常，不过要装 jruby，我可不想再试了。</p><p>&nbsp;</p><p>不过，如果你真的在win32下载用scruby，又不想这么折腾自己，那就再装个 0.2.6版吧</p><p>gem install scrubyt -v=0.2.6</p><p>把代码中的引用代码改成</p><pre name="code" class="ruby">require 'rubygems'
gem 'RubyInline', '=3.6.3'  
gem 'scrubyt', '=0.2.6'
require 'scrubyt'</pre>&nbsp;程序总算在windows下跑起来了，不过有多少bug我可不知道，最好还是在linux下用最新版的scrubyt。<br /><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/159450#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jan 2008 22:55:52 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/159450</link>
        <guid>http://pickerel.javaeye.com/blog/159450</guid>
      </item>
      <item>
        <title>用busybox扩展android系统的控制台命令</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/157564" style="color:red;">http://pickerel.javaeye.com/blog/157564</a>&nbsp;
          发表时间: 2008年01月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          安装：<br />1 到http://www.billrocks.org/android_libs/bin/下载busybox文件。<br />2 把busybox上传到android系统，并设置可执行权限。 <br />adb push busybox /system/bin<br />adb shell<br /># chmod 655 /system/bin/busybox<br /><br />3 运行 busybox<br />查看android linux内核版本<br /># busybox uname -a<br />Linux (none) 2.6.23 #5 Thu Dec 27 14:10:07 PST 2007 armv5tejl unknown<br />启动一个httpd服务器<br />#busybox httpd<br />启动后你在模拟器的web浏览器上访问 http://127.0.0.1 即可<br />执行运行<br />#busybox<br />即可查看busybox支持的命令。<br /><br />busybox支持的命令包括：<br />      [, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash,<br />      awk, basename, bunzip2, bzcat, bzip2, cal, cat, catv,<br />      chattr, chgrp, chmod, chown, chpasswd, chpst, chroot,<br />      chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond,<br />      crontab, cryptpw, cut, date, dc, dd, deallocvt, delgroup,<br />      deluser, df, dhcprelay, diff, dirname, dmesg, dnsd, dos2unix,<br />      du, dumpkmap, dumpleases, echo, ed, egrep, eject, env,<br />      envdir, envuidgid, expand, expr, fakeidentd, false, fbset,<br />      fdflush, fdformat, fdisk, fgrep, find, fold, free, freeramdisk,<br />      fsck, fsck.minix, ftpget, ftpput, fuser, getopt, getty,<br />      grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid,<br />      hostname, httpd, hwclock, id, ifconfig, ifdown, ifup,<br />      inetd, init, insmod, install, ip, ipaddr, ipcalc, ipcrm,<br />      ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill,<br />      killall, killall5, klogd, last, length, less, linux32,<br />      linux64, linuxrc, ln, loadfont, loadkmap, logger, login,<br />      logname, logread, losetup, ls, lsattr, lsmod, lzmacat,<br />      makedevs, md5sum, mdev, mesg, microcom, mkdir, mkfifo,<br />      mkfs.minix, mknod, mkswap, mktemp, modprobe, more, mount,<br />      mountpoint, mt, mv, nameif, nc, netstat, nice, nmeter,<br />      nohup, nslookup, od, openvt, passwd, patch, pgrep, pidof,<br />      ping, ping6, pipe_progress, pivot_root, pkill, poweroff,<br />      printenv, printf, ps, pscan, pwd, raidautorun, rdate,<br />      readahead, readlink, readprofile, realpath, reboot, renice,<br />      reset, resize, rm, rmdir, rmmod, route, rpm, rpm2cpio,<br />      run-parts, runlevel, runsv, runsvdir, rx, sed, seq, setarch,<br />      setconsole, setkeycodes, setlogcons, setsid, setuidgid,<br />      sh, sha1sum, slattach, sleep, softlimit, sort, split,<br />      start-stop-daemon, stat, strings, stty, su, sulogin, sum,<br />      sv, svlogd, swapoff, swapon, switch_root, sync, sysctl,<br />      syslogd, tail, tar, tcpsvd, tee, telnet, telnetd, test,<br />      tftp, time, top, touch, tr, traceroute, true, tty, ttysize,<br />      udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand,<br />      uniq, unix2dos, unlzma, unzip, uptime, usleep, uudecode,<br />      uuencode, vconfig, vi, vlock, watch, watchdog, wc, wget,<br />      which, who, whoami, xargs, yes, zcat, zcip
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/157564#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 Jan 2008 12:31:12 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/157564</link>
        <guid>http://pickerel.javaeye.com/blog/157564</guid>
      </item>
      <item>
        <title>用VNC远程控制android模拟器</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/157563" style="color:red;">http://pickerel.javaeye.com/blog/157563</a>&nbsp;
          发表时间: 2008年01月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <img src="http://pickerel.javaeye.com/topics/download/fbba0cc9-922d-330b-aed1-ade35586efb8" /><br /><br /><ul><br />1 到http://code.google.com/p/android-vnc/<br />下载 zImage 和 fbvncserver两个文件。<br />2 用下面命令启动模拟器<br /><strong>emulator -kernel zImage -noskin</strong><br />3 将fbvncserver文件上传到android系统的/data目录下<br /><strong>adb push fbvncserver /data</strong><br />4 运行 fbvncserver <br /><strong>adb shell<br /># chmod 655 /data/fbvncserver<br /># /data/fbvncserver</strong><br />5 telnet到android设置端口转发<br /><strong>telnet localhost 5554<br />redir add tcp:5900:5901</strong><br />6 vnc服务器设置成功，使用vnc客户端连接localhost:5900即可。<br /></ul><br /><br /><br />详细介绍见：http://code.google.com/p/android-vnc/
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/157563#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 Jan 2008 12:10:41 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/157563</link>
        <guid>http://pickerel.javaeye.com/blog/157563</guid>
      </item>
      <item>
        <title>在j2me中载入propreties资源</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/155750" style="color:red;">http://pickerel.javaeye.com/blog/155750</a>&nbsp;
          发表时间: 2008年01月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">    public Properties load(String res) throws IOException
    {
        Properties prop = new Properties();
        DataInputStream is = null;
        try
        {
            is = new DataInputStream(this.getClass().getResourceAsStream(res));
            StringBuffer sb = new StringBuffer();
            for (int i = is.read(); i > 0; i = is.read())
            {
                char c = (char) i;
                if (c == '\r' || c == '\n')
                {
                    String line = sb.toString();
                    if (line != null && !line.equals(""))
                    {
                        parseLine(prop, line);
                        sb = new StringBuffer();
                    }
                }
                else
                {
                    sb.append((char) i);
                }
            }
            parseLine(prop, sb.toString());
        }
        finally
        {
            if (is != null)
            {
                try
                {
                    is.close();
                }
                catch (IOException e) { e.printStackTrace(); }
            }

        }
        return prop;
    }

    private  void parseLine(Properties prop, String line)
    {
        if (line != null && !line.equals(""))
        {
            int pos = line.indexOf(":");
            prop.addProperty(line.substring(0, pos), line.substring(pos + 2, line.length()));
        }
    }</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/155750#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Jan 2008 18:51:51 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/155750</link>
        <guid>http://pickerel.javaeye.com/blog/155750</guid>
      </item>
      <item>
        <title>java中用Process执行外部命令挂起问题的解决办法</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/154724" style="color:red;">http://pickerel.javaeye.com/blog/154724</a>&nbsp;
          发表时间: 2008年01月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我要在Java中调一个外部命令，于是写了以下代码<br /><pre name="code" class="java">
Process p = Runtime.getRuntime().exec("my command ...");
int c = p.waitFor();
if (c != 0)
{
    System.out.prinln("处理失败");

    BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));

    for (String line = br.readLine(); line != null; line = br.readLine())
    {
        System.out.println(line);
    }    
}
</pre>    <br /><br />当执行的外部命令没有任何输出的时候，这段代码运行正常，但如果执行的外部命令有输出的时候，这段程序就会挂起，估计是因为流没有被读取导致了堵塞，于是把代码改为<br /><pre name="code" class="java">
    public void test() throws IOException, InterruptedException
    {
        Process p = Runtime.getRuntime().exec("command...");
        String errorMsg = readInputStream(p.getErrorStream());
        String outputMsg = readInputStream(p.getInputStream());

        int c = p.waitFor();
        if (c != 0)
        {
            System.out.println("处理失败：" + errorMsg);
        }else
        {//print command output
            System.out.println(outputMsg);
        }
    }

    private  String readInputStream(InputStream is) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        StringBuffer lines = new StringBuffer();
        for (String line = br.readLine(); line != null; line = br.readLine())
        {
            lines.append(line);
        }
        return lines.toString();
    }
</pre><br />一切正常。
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/154724#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Jan 2008 14:06:12 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/154724</link>
        <guid>http://pickerel.javaeye.com/blog/154724</guid>
      </item>
      <item>
        <title>如何用JAVA输出一个UTF8编码的文本文件</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/154638" style="color:red;">http://pickerel.javaeye.com/blog/154638</a>&nbsp;
          发表时间: 2008年01月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
            FileOutputStream fos = new FileOutputStream("test.txt");
            Writer out = new OutputStreamWriter(fos, "utf-8");
            out.write(contentString);
            out.close();
            fos.close();
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/154638#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Jan 2008 10:11:01 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/154638</link>
        <guid>http://pickerel.javaeye.com/blog/154638</guid>
      </item>
      <item>
        <title>Ubuntu 7.10 SSH登录超级慢的解决办法</title>
        <author>pickerel</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://pickerel.javaeye.com">pickerel</a>&nbsp;
          链接：<a href="http://pickerel.javaeye.com/blog/150393" style="color:red;">http://pickerel.javaeye.com/blog/150393</a>&nbsp;
          发表时间: 2007年12月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          编辑 /etc/ssh/ssh_config 文件，将<br /><strong>GSSAPIAuthentication yes</strong><br />改成<br /><strong>GSSAPIAuthentication no</strong><br />即可。<br /><br />原因：<br /><span style="color: #333333">The default ssh_config file comes with GSSAPIAuthentication set<br />to "yes".  This causes a DNS query in an attempt to resolve<br />_kerberos.&lt;hostname> whenever ssh is invoked.  During periods when<br />connectivity to the outside world is interrupted for whatever reason,<br />the ssh session won't proceed until the DNS query times out.  Not really<br />a problem, just more of an annoyance when trying to ssh to another<br />machine on the LAN.</span>
          <br/>
          <span style="color:red;">
            <a href="http://pickerel.javaeye.com/blog/150393#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Dec 2007 10:30:13 +0800</pubDate>
        <link>http://pickerel.javaeye.com/blog/150393</link>
        <guid>http://pickerel.javaeye.com/blog/150393</guid>
      </item>
  </channel>
</rss>