<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/vicalloy" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/vicalloy" type="application/rss+xml"></fs:self_link><lastBuildDate>Fri, 26 Feb 2010 13:18:09 GMT</lastBuildDate><title>天地一沙鸥</title><description>vicalloy的个人博客</description><link>http://vik.haoluobo.com/blog</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Fri, 26 Feb 2010 13:18:09 GMT</pubDate><item><title>发布一个Django的论坛系统LBForum（开源、带演示）</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461914/5348363/1/item.html</link><content:encoded>&lt;h4&gt;简介&lt;/h4&gt;
&lt;p&gt;LBForum 用django开发的论坛系统，演示地址为：&lt;a href=&quot;http://vik.haoluobo.com/lbforum/&quot;&gt;http://vik.haoluobo.com/lbforum/&lt;/a&gt;     &lt;br /&gt;项目的地址为：&lt;a href=&quot;http://github.com/vicalloy/LBForum&quot;&gt;http://github.com/vicalloy/LBForum&lt;/a&gt;     &lt;br /&gt;界面部分抄的 FluxBB(一个开源的PHP论坛 &lt;a href=&quot;http://fluxbb.org/&quot;&gt;http://fluxbb.org/&lt;/a&gt; )。     &lt;br /&gt;虽然Django写的论坛也不少，不过还真没什么好用的。     &lt;br /&gt;大多Django论坛都是独立的app，而且不少还缺模板，想我这样有经验的Django用户要跑起来都觉得麻烦，其他普通用户就更别说了。     &lt;br /&gt;LBForum主要注重部署的方便性和易用性，功能方面目前还比较简单。     &lt;br /&gt;LBForum一开始就是以整站的形式提供，所以以LBForum做为基础项目进行二次开发是很容易的。     &lt;br /&gt;同时LBForum的开发尽量遵照Django可复用app原则，因此即使需要将LBForum做为独立的app集成到其他项目也并不会太难。 &lt;/p&gt;
&lt;h4&gt;主要功能&lt;/h4&gt;
&lt;p&gt;目前功能还比较简单，而且还有些小问题有待修正。 &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;论坛分类，分版块 &lt;/li&gt;
&lt;li&gt;发帖，回帖 &lt;/li&gt;
&lt;li&gt;BBCode支持 &lt;/li&gt;
&lt;li&gt;置顶贴&lt;/li&gt;
&lt;li&gt;使用django admin提供论坛管理功能&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;用开发服务器把LBForum跑起来&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;先把代码down下来。LBForum托管在github上，&lt;a href=&quot;http://github.com/vicalloy/LBForum&quot;&gt;http://github.com/vicalloy/LBForum&lt;/a&gt; 。如果你没有安装git，你可以直接用界面右上方的download       &lt;br /&gt;source功能下载代码。 &lt;/li&gt;
&lt;li&gt;运行\scripts\create_lbforum_env.py初始化lbforum的python虚拟环境。该脚本会自动创建一个python的虚拟环境并使用easy_install安装对应的依赖包，同时将一些依赖包解压到对应的目录中。      &lt;br /&gt;注：django使用的是svn版本，所以机器上必须要安装有SVN，不然脚本会运行失败。如果因为由于svn的问题导致脚本运行失败，可以运行lbforum_env.bat进入lbforum环境，手动安装django的svn版本。 &lt;/li&gt;
&lt;li&gt;环境初始化好后，运行lbforum_env.bat进入lbforum环境 &lt;/li&gt;
&lt;li&gt;运行%mg% syncdb初始化数据库 &lt;/li&gt;
&lt;li&gt;运行%mg% runserver启动django开发服务器 &lt;/li&gt;
&lt;li&gt;进入admin，创建论坛分类和版块 &lt;/li&gt;
&lt;li&gt;进入版块发帖 &lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;LBForum的目录结构说明&lt;/h4&gt;
&lt;p&gt;|+lbforum_env/#lbforum运行的python虚拟环境，运行create_lbforum_env.py后自动创建    &lt;br /&gt;|+requirements/#lbforum用的第三方库和app，运行的时候会将该目录加到python路径     &lt;br /&gt;|~scripts/#工程相关脚本     &lt;br /&gt;| |-create_lbforum_env.py#初始化python虚拟环境，并自动安装easy_install/django依赖库     &lt;br /&gt;| |-helper.py#提供其他脚本所需的辅助函数     &lt;br /&gt;| `-lbforum_env.bat*#启动lbforum运行的虚拟环境及，并为lbforum的manage.py提供快捷方式%mg%，比如初始化数据库%mg%     &lt;br /&gt;syncdb     &lt;br /&gt;|~sites/#站点配置/模板/静态文件     &lt;br /&gt;| `~default/#默认站点     &lt;br /&gt;|&amp;#160;&amp;#160; |+static/#静态资源文件，如css等     &lt;br /&gt;|&amp;#160;&amp;#160; |+templates/#Django模板目录     &lt;br /&gt;|&amp;#160;&amp;#160; |+templates_plus/#Django模板目录，用户将自己重写过的目标放到该目录     &lt;br /&gt;|&amp;#160;&amp;#160; `-&amp;#8230;&amp;#8230;     &lt;br /&gt;|~src/#django的app目录     &lt;br /&gt;| |+account/#account相关app。具体站点通常会对用户中心进行定制，所以该app在实际应用中很可能需要针对实际情况进行修改。     &lt;br /&gt;| |+djangohelper/#一些django的辅助函数等，     &lt;br /&gt;| |+lbforum/#lbforum的主app，论坛功能都在改app中     &lt;br /&gt;| |+lbregistration/#registration app的lbforum扩展，主要去掉邮件地址认证功能     &lt;br /&gt;| |+onlineuser/#显示在线用户的app（可复用的django app，可脱离lbforum单独使用）     &lt;br /&gt;| `+simpleavatar/#头像功能的app（可复用的django app，可脱离lbforum单独使用，依赖djangohelper）     &lt;br /&gt;|+tools/#工程用到的辅助工具，目前只有一个virtualenv的脚本 &lt;/p&gt;
&lt;h4&gt;注：&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;由于计划在以后做i18n，所以目前只提供英文界面 &lt;/li&gt;
&lt;li&gt;django的错误提示是显示在字段后面，fluxbb的错误全部都显示在表单前面。由于模板没有调好，所以目前按照fluxbb的方式显示错误，所以错误显示有些不太正常。 &lt;/li&gt;
&lt;li&gt;bbcode的输入框本想做成自适应大小的，不过也调得有些问题，所以现在输入框的大小固定。 &lt;/li&gt;
&lt;li&gt;文档&amp;#8230; ，感觉好难写-_-，目前文档不全（项目中没有带任何的文档），日后补上。 &lt;/li&gt;
&lt;li&gt;应用程序的目录结构主要查看pinax&lt;/li&gt;
&lt;li&gt;simpleavatar模块部分代码来自django-avatar&lt;/li&gt;
&lt;li&gt;依赖包除用easy_install在线安装的外，尽量使用zip包的方式附带在项目中，减少安装依赖包的困难。&lt;/li&gt;
&lt;li&gt;远程部署脚本计划使用fabric，但fabric本身安装比较麻烦，所暂未处理。&lt;/li&gt;
&lt;li&gt;项目最早放在googlecode，不过感觉github的功能更强些，所以移了过去。&lt;/li&gt;
&lt;/ol&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461914/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461914/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461914/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461914/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/02/%e5%8f%91%e5%b8%83%e4%b8%80%e4%b8%aadjango%e7%9a%84%e8%ae%ba%e5%9d%9b%e7%b3%bb%e7%bb%9flbforum%ef%bc%88%e5%bc%80%e6%ba%90%e3%80%81%e5%b8%a6%e6%bc%94%e7%a4%ba%ef%bc%89/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>简介
LBForum 用django开发的论坛系统，演示地址为：http://vik.haoluobo.com/lbforum/     项目的地址为：http://github.com/vicalloy/LBForum     界面部分抄的 FluxBB(一个开源的PHP论坛 http://fluxbb.org/ )。     虽然Django写的论坛也不少，不过还真没什么好用的。     大多Django论坛都是独立的app，而且不少还缺模板，想我这样有经验的Django用户要跑起来都觉得麻烦，其他普通用户就更别说了。     LBForum主要注重部署的方便性和易用性，功能方面目前还比较简单。     LBForum一开始就是以整站的形式提供，所以以LBForum做为基础项目进行二次开发是很容易的。     同时LBForum的开发尽量遵照Django可复用app原则，因此即使需要将LBForum做为独立的app集成到其他项目也并不会太难。 
主要功能
目前功能还比较简单，而且还有些小问题有待修正。 

论坛分类，分版块 
发帖，回帖 
BBCode支持 
置顶贴
使用django admin提供论坛管理功能

用开发服务器把LBForum跑起来

先把代码down下来。LBForum托管在github上，http://github.com/vicalloy/LBForum 。如果你没有安装git，你可以直接用界面右上方的download       source功能下载代码。 
运行\scripts\create_lbforum_env.py初始化lbforum的python虚拟环境。该脚本会自动创建一个python的虚拟环境并使用easy_install安装对应的依赖包，同时将一些依赖包解压到对应的目录中。 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/336461914/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461914/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461914/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461914/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>python</category><category>django</category><category>lbforum</category><category>编程</category><category>vicalloy的庄家</category><pubDate>Fri, 26 Feb 2010 21:18:09 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2010/02/%e5%8f%91%e5%b8%83%e4%b8%80%e4%b8%aadjango%e7%9a%84%e8%ae%ba%e5%9d%9b%e7%b3%bb%e7%bb%9flbforum%ef%bc%88%e5%bc%80%e6%ba%90%e3%80%81%e5%b8%a6%e6%bc%94%e7%a4%ba%ef%bc%89/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2010/02/%e5%8f%91%e5%b8%83%e4%b8%80%e4%b8%aadjango%e7%9a%84%e8%ae%ba%e5%9d%9b%e7%b3%bb%e7%bb%9flbforum%ef%bc%88%e5%bc%80%e6%ba%90%e3%80%81%e5%b8%a6%e6%bc%94%e7%a4%ba%ef%bc%89/</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2010/02/%e5%8f%91%e5%b8%83%e4%b8%80%e4%b8%aadjango%e7%9a%84%e8%ae%ba%e5%9d%9b%e7%b3%bb%e7%bb%9flbforum%ef%bc%88%e5%bc%80%e6%ba%90%e3%80%81%e5%b8%a6%e6%bc%94%e7%a4%ba%ef%bc%89/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461914/5348363</fs:itemid></item><item><title>SourceForge使用Python、TurboGears、MongoDB……来重构网站</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461915/5348363/1/item.html</link><content:encoded>&lt;p&gt;pycon2010上关于&lt;a href=&quot;http://sf.net/&quot; target=&quot;_blank&quot;&gt;SF&lt;/a&gt;网站重构的演讲，里面介绍了SF重构的技术选型及原因。在我看来SF用的东西还真的很GEEK。&lt;/p&gt;
&lt;p&gt;主要用到的技术有Python、&lt;a href=&quot;http://turbogears.org/&quot; target=&quot;_blank&quot;&gt;TurboGears2&lt;/a&gt;、&lt;a href=&quot;http://www.mongodb.org/display/DOCS/Home&quot; target=&quot;_blank&quot;&gt;MongoDB&lt;/a&gt;、&lt;a href=&quot;http://jinja.pocoo.org/&quot;&gt;Jinja&lt;/a&gt;*、&lt;a href=&quot;http://www.rabbitmq.com/&quot; target=&quot;_blank&quot;&gt;RabbitMQ&lt;/a&gt;，服务器用的是LigHTTPd和Nginx。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TurboGears2（为什么不的Django？）&lt;br /&gt;
pdf中也有谈到此前也用到过django，而且有很不错的体验，但对SF的改造来说TG更为合适。SF有着上10年的历史，要完全抛弃原有的东西自然不现实，此次的网站重构并不是完全的重写。TG可以很容易的剥离掉不需要用到的东西，同时TG可以很好的同其他WSGI中间件配合工作。&lt;/li&gt;
&lt;li&gt;MongoDB&lt;br /&gt;
MongoDB是一个非关系的分布式数据库(NoSQL数据库)，最大的优势快。由于这东西足够快，所以连web2.0网站常用的memcached也省掉了。(注：NoSQL数据库介绍可以参考 &lt;a href=&quot;http://robbin.javaeye.com/blog/524977&quot; target=&quot;_blank&quot;&gt;NoSQL数据库探讨之一 － 为什么要用非关系数据库&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Jinja*&lt;br /&gt;
Django的模板很棒，但速度不怎么快，而且完全不支持任何嵌入式代码。Jinja和Django的模板长得非常的象，而且解决了上面的两个问题。（注：文档里说前台用的是PHP，所以不清楚是否有部分用到Jinja）&lt;/li&gt;
&lt;li&gt;RabbitMQ&lt;br /&gt;
用Erlang写的中间件，进行前后台的消息通信。SF的前台界面呈现，依旧使用的PHP，前后台通信用的就是这东西。&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461915/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461915/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461915/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461915/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/02/sourceforge%e4%bd%bf%e7%94%a8python%e3%80%81turbogears%e3%80%81mongodb%e2%80%a6%e2%80%a6%e6%9d%a5%e9%87%8d%e6%9e%84%e7%bd%91%e7%ab%99/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>pycon2010上关于SF网站重构的演讲，里面介绍了SF重构的技术选型及原因。在我看来SF用的东西还真的很GEEK。
主要用到的技术有Python、TurboGears2、MongoDB、Jinja*、RabbitMQ，服务器用的是LigHTTPd和Nginx。

TurboGears2（为什么不的Django？）
pdf中也有谈到此前也用到过django，而且有很不错的体验，但对SF的改造来说TG更为合适。SF有着上10年的历史，要完全抛弃原有的东西自然不现实，此次的网站重构并不是完全的重写。TG可以很容易的剥离掉不需要用到的东西，同时TG可以很好的同其他WSGI中间件配合工作。
MongoDB
MongoDB是一个非关系的分布式数据库(NoSQL数据库)，最大的优势快。由于这东西足够快，所以连web2.0网站常用的memcached也省掉了。(注：NoSQL数据库介绍可以参考 NoSQL数据库探讨之一 － 为什么要用非关系数据库)
Jinja*
Django的模板很棒，但速度不怎么快，而且完全不支持任何嵌入式代码。Jinja和Django的模板长得非常的象，而且解决了上面的两个问题。（注：文档里说前台用的是PHP，所以不清楚是否有部分用到Jinja）
RabbitMQ
用Erlang写的中间件，进行前后台的消息通信。SF的前台界面呈现，依旧使用的PHP，前后台通信用的就是这东西。&lt;img src=&quot;http://www1.feedsky.com/t1/336461915/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461915/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461915/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461915/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>TurboGears</category><category>python</category><category>编程</category><pubDate>Mon, 22 Feb 2010 21:38:37 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2010/02/sourceforge%e4%bd%bf%e7%94%a8python%e3%80%81turbogears%e3%80%81mongodb%e2%80%a6%e2%80%a6%e6%9d%a5%e9%87%8d%e6%9e%84%e7%bd%91%e7%ab%99/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/?p=10065</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2010/02/sourceforge%e4%bd%bf%e7%94%a8python%e3%80%81turbogears%e3%80%81mongodb%e2%80%a6%e2%80%a6%e6%9d%a5%e9%87%8d%e6%9e%84%e7%bd%91%e7%ab%99/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461915/5348363</fs:itemid></item><item><title>Whoosh性能</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461916/5348363/1/item.html</link><content:encoded>&lt;p&gt;早些时候就在google到Whoosh和xapian的性能对比文章，只是由于文章被墙，今天才翻墙看到。&lt;/p&gt;
&lt;p&gt;文章是xapian作者写的。就文章里的对比结果来看，whoosh和xapian的性能差距还是比较明显。索引和搜索的速度有近4倍的差距，在full cache情况下的性能差距更是达到了60倍。&lt;/p&gt;
&lt;p&gt;除算法原因外，whoosh的纯python定位也决定了whoosh很难达到其他c/java的搜索引擎库的速度。&lt;/p&gt;
&lt;p&gt;当然，whoosh的优势是易用性，在考虑性能的情况下whoosh不是首先。&lt;/p&gt;
&lt;p&gt;注：&lt;a href=&quot;http://xapian.wordpress.com/2009/02/12/xapian-performance-comparision-with-whoosh/&quot; target=&quot;_blank&quot;&gt;Xapian performance comparision with Whoosh&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461916/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461916/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461916/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461916/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/02/whoosh%e6%80%a7%e8%83%bd/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>早些时候就在google到Whoosh和xapian的性能对比文章，只是由于文章被墙，今天才翻墙看到。
文章是xapian作者写的。就文章里的对比结果来看，whoosh和xapian的性能差距还是比较明显。索引和搜索的速度有近4倍的差距，在full cache情况下的性能差距更是达到了60倍。
除算法原因外，whoosh的纯python定位也决定了whoosh很难达到其他c/java的搜索引擎库的速度。
当然，whoosh的优势是易用性，在考虑性能的情况下whoosh不是首先。
注：Xapian performance comparision with Whoosh&lt;img src=&quot;http://www1.feedsky.com/t1/336461916/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461916/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461916/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461916/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>xapian</category><category>python</category><category>whoosh</category><category>编程</category><pubDate>Mon, 08 Feb 2010 13:47:11 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2010/02/whoosh%e6%80%a7%e8%83%bd/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/?p=10061</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2010/02/whoosh%e6%80%a7%e8%83%bd/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461916/5348363</fs:itemid></item><item><title>使用嵌入式jetty启动axis提供webservice服务</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461917/5348363/1/item.html</link><content:encoded>&lt;p&gt;JDK6已经内置了webservice支持，使用JDK6开发webservice是一件很方便的事。很不幸的是，由于IDE的支持axis成为使用最广的java webservice库。而且由于的部分应用使用了不兼容的RPC/encoded模式，使得你还不得不用axis。&lt;/p&gt;
&lt;p&gt;通常情况下用axis开发webservice服务端，需要挂在tomcat等web服务器下，以servlet的方式提供服务。但有些时候我会想将接口部分以一个单独应用程序的方式进行发布，另外再多带个web服务器似乎有些笨拙。&lt;/p&gt;
&lt;p&gt;使用嵌入式的jetty是一个比较简单的解决方式。其中需要注意的是，一定要设置Context的ResourceBase，不然是无法找到webservice配置文件的。我当初就是想当然的认为jetty会默认在当前路径下查找配置文件，导致一直无法正确发布服务。&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:Courier New, Courier, Monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; runJetty&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
    Server server &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Server&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    SocketConnector connector &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; SocketConnector&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    connector.&lt;span style=&quot;color: #006633;&quot;&gt;setMaxIdleTime&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;30000&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    connector.&lt;span style=&quot;color: #006633;&quot;&gt;setPort&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;8000&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//jetty的端口&lt;/span&gt;
    server.&lt;span style=&quot;color: #006633;&quot;&gt;addConnector&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;connector&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    ServletHolder axisServletholder &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; ServletHolder&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; AxisServlet&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    ServletHolder axisAdminServletholder &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; ServletHolder&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; AdminServlet&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span style=&quot;color: #003399;&quot;&gt;Context&lt;/span&gt; root &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Context&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;server, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #003399;&quot;&gt;Context&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;SESSIONS&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    root.&lt;span style=&quot;color: #006633;&quot;&gt;setResourceBase&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;./web/&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//WEB资源目录，./web/WEB-INF/server-config.wsdd&lt;/span&gt;
    root.&lt;span style=&quot;color: #006633;&quot;&gt;addServlet&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;axisServletholder, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/servlet/AxisServlet&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    root.&lt;span style=&quot;color: #006633;&quot;&gt;addServlet&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;axisServletholder, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/ws/*&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//设置webservice的发布目录&lt;/span&gt;
    root.&lt;span style=&quot;color: #006633;&quot;&gt;addServlet&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;axisServletholder, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;*.jws&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    root.&lt;span style=&quot;color: #006633;&quot;&gt;addServlet&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;axisAdminServletholder, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;/servlet/AdminServlet&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    server.&lt;span style=&quot;color: #006633;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461917/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461917/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461917/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461917/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/02/%e4%bd%bf%e7%94%a8%e5%b5%8c%e5%85%a5%e5%bc%8fjetty%e5%90%af%e5%8a%a8axis%e6%8f%90%e4%be%9bwebservice%e6%9c%8d%e5%8a%a1/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>JDK6已经内置了webservice支持，使用JDK6开发webservice是一件很方便的事。很不幸的是，由于IDE的支持axis成为使用最广的java webservice库。而且由于的部分应用使用了不兼容的RPC/encoded模式，使得你还不得不用axis。
通常情况下用axis开发webservice服务端，需要挂在tomcat等web服务器下，以servlet的方式提供服务。但有些时候我会想将接口部分以一个单独应用程序的方式进行发布，另外再多带个web服务器似乎有些笨拙。
使用嵌入式的jetty是一个比较简单的解决方式。其中需要注意的是，一定要设置Context的ResourceBase，不然是无法找到webservice配置文件的。我当初就是想当然的认为jetty会默认在当前路径下查找配置文件，导致一直无法正确发布服务。

protected static void runJetty&amp;#40;&amp;#41; throws Exception &amp;#123;
    Server server = new Server&amp;#40;&amp;#41;;
    SocketConnector connector = new SocketConnector&amp;#40;&amp;#41;;
    connector.setMaxIdleTime&amp;#40;30000&amp;#41;;
    connector.setPort&amp;#40;8000&amp;#41;;//jetty的端口
    server.addConnector&amp;#40;connector&amp;#41;;
&amp;#160;
    ServletHolder axisServletholder = new ServletHolder&amp;#40;new AxisServlet&amp;#40;&amp;#41;&amp;#41;;
    ServletHolder axisAdminServletholder = new ServletHolder&amp;#40;new AdminServlet&amp;#40;&amp;#41;&amp;#41;;
&amp;#160;
  [...]&lt;img src=&quot;http://www1.feedsky.com/t1/336461917/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461917/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461917/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461917/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>webservice</category><category>java</category><category>axis</category><category>编程</category><pubDate>Tue, 02 Feb 2010 14:36:31 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2010/02/%e4%bd%bf%e7%94%a8%e5%b5%8c%e5%85%a5%e5%bc%8fjetty%e5%90%af%e5%8a%a8axis%e6%8f%90%e4%be%9bwebservice%e6%9c%8d%e5%8a%a1/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/?p=10054</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2010/02/%e4%bd%bf%e7%94%a8%e5%b5%8c%e5%85%a5%e5%bc%8fjetty%e5%90%af%e5%8a%a8axis%e6%8f%90%e4%be%9bwebservice%e6%9c%8d%e5%8a%a1/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461917/5348363</fs:itemid></item><item><title>纯python的全文搜索组件Whoosh</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461918/5348363/1/item.html</link><content:encoded>&lt;p&gt;haystack 是 django 全文搜索的一个中间件，可以粘合 django 应用和 solr、xapian、whoosh 全文搜索引擎。&lt;/p&gt;
&lt;p&gt;solr和xapian是早就知道的，Whoosh就没听过了。简单的了解后感觉这东西还是非常不错的。whoosh是一个纯python实现的全文搜索引擎。对python应用而言，whoosh的纯python实现，使whoosh的集成会容易很多，而且扩展起来也会容易很多。&lt;/p&gt;
&lt;p&gt;下面是对Whoosh官方简介的翻译&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原文地址&lt;/strong&gt;：&lt;a href=&quot;http://whoosh.ca/wiki&quot;&gt;http://whoosh.ca/wiki&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Whoosh: 高效的纯python全文搜索组件&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Whoosh是一个纯python实现的全文搜索组件。Whoosh不但功能完善，还非常的快。 &lt;/p&gt;
&lt;p&gt;Whoosh的作者是MattChaput，由Side Effects Software公司开发。项目的最初用于Houdini（Side Effects Software公司开发的3D动画软件）的在线帮助系统。Side Effects Software公司将该项目开源。 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要特性&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;敏捷的API（Pythonic API）。 &lt;/li&gt;
&lt;li&gt;纯python实现，无二进制包。程序不会莫名其妙的崩溃。 &lt;/li&gt;
&lt;li&gt;按字段进行索引。 &lt;/li&gt;
&lt;li&gt;索引和搜索都非常的快 &amp;#8212; 是目前最快的纯python全文搜索引擎。 &lt;/li&gt;
&lt;li&gt;良好的构架，评分模块/分词模块/存储模块等各个模块都是可插拔的。 &lt;/li&gt;
&lt;li&gt;功能强大的查询语言（通过pyparsing实现功能）。 &lt;/li&gt;
&lt;li&gt;纯python实现的拼写检查（目前唯一的纯python拼写检查实现） &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;strong&gt;为啥选择Whoosh&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;纯python实现，省了编译二进制包的繁琐过程。 &lt;/li&gt;
&lt;li&gt;python代码比java更容易读懂，而且用起来也更方便。（翻者注：这个容易引发口水） &lt;/li&gt;
&lt;li&gt;在很多时候易用性比单纯的最求速度更重要。 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; Whoosh从其他的开源搜索引擎中获取了大量的灵感。 基础构架参考Lucene，使用KinoSearch的索引算法，部分评分算法来自Terrier，英文的词语态变化来自Minion.   &lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461918/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461918/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461918/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461918/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/01/%e7%ba%afpython%e7%9a%84%e5%85%a8%e6%96%87%e6%90%9c%e7%b4%a2%e7%bb%84%e4%bb%b6whoosh/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>haystack 是 django 全文搜索的一个中间件，可以粘合 django 应用和 solr、xapian、whoosh 全文搜索引擎。
solr和xapian是早就知道的，Whoosh就没听过了。简单的了解后感觉这东西还是非常不错的。whoosh是一个纯python实现的全文搜索引擎。对python应用而言，whoosh的纯python实现，使whoosh的集成会容易很多，而且扩展起来也会容易很多。
下面是对Whoosh官方简介的翻译
原文地址：http://whoosh.ca/wiki 
Whoosh: 高效的纯python全文搜索组件 
Whoosh是一个纯python实现的全文搜索组件。Whoosh不但功能完善，还非常的快。 
Whoosh的作者是MattChaput，由Side Effects Software公司开发。项目的最初用于Houdini（Side Effects Software公司开发的3D动画软件）的在线帮助系统。Side Effects Software公司将该项目开源。 
主要特性

敏捷的API（Pythonic API）。 
纯python实现，无二进制包。程序不会莫名其妙的崩溃。 
按字段进行索引。 
索引和搜索都非常的快 &amp;#8212; 是目前最快的纯python全文搜索引擎。 
良好的构架，评分模块/分词模块/存储模块等各个模块都是可插拔的。 
功能强大的查询语言（通过pyparsing实现功能）。 
纯python实现的拼写检查（目前唯一的纯python拼写检查实现） 

 为啥选择Whoosh

纯python实现，省了编译二进制包的繁琐过程。 
python代码比java更容易读懂，而且用起来也更方便。（翻者注：这个容易引发口水） 
在很多时候易用性比单纯的最求速度更重要。 

 Whoosh从其他的开源搜索引擎中获取了大量的灵感。 基础构架参考Lucene，使用KinoSearch的索引算法，部分评分算法来自Terrier，英文的词语态变化来自Minion.&lt;img src=&quot;http://www1.feedsky.com/t1/336461918/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461918/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461918/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461918/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>python</category><category>whoosh</category><category>编程</category><pubDate>Sat, 30 Jan 2010 19:16:39 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2010/01/%e7%ba%afpython%e7%9a%84%e5%85%a8%e6%96%87%e6%90%9c%e7%b4%a2%e7%bb%84%e4%bb%b6whoosh/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2010/01/%e7%ba%afpython%e7%9a%84%e5%85%a8%e6%96%87%e6%90%9c%e7%b4%a2%e7%bb%84%e4%bb%b6whoosh/</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2010/01/%e7%ba%afpython%e7%9a%84%e5%85%a8%e6%96%87%e6%90%9c%e7%b4%a2%e7%bb%84%e4%bb%b6whoosh/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461918/5348363</fs:itemid></item><item><title>django的论坛app</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461919/5348363/1/item.html</link><content:encoded>&lt;p&gt;在django的资源页面里有个第三方论坛app的比较页面&lt;a href=&quot;http://code.djangoproject.com/wiki/ForumAppsComparison&quot;&gt;Django Forum Apps Comparison&lt;/a&gt;。一眼望过去，可用的app还不真不少，数下了有15个之多。但真正看下来，似乎很难找到一个让人满意的。&lt;/p&gt;
&lt;p&gt;我对论坛app的要求是:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;得要自带一个还比较漂亮的界面模板。      &lt;br /&gt;模板的开发工作在django应用的开发中占了很大的比重，甚至可能比写python代码花的时间还多。可惜的是很多的app应用甚至连个最基础的demo模板都没带。 &lt;/li&gt;
&lt;li&gt;最好支持Richeditor和BBCode。      &lt;br /&gt;支持BBCode的app还是有几个的。Richeditor的支持基本上属于模板的范畴，参考条目1，似乎还没看到支持Richeditor的论坛（注：我没每个app都看，不能确定，pybb默认模板带了个Markup的编辑器）。 &lt;/li&gt;
&lt;li&gt;支持附件。      &lt;br /&gt;国内的论坛应用大多偏娱乐，用户喜欢在自己的帖子里插入图片等东西。虽然可以再单独提供一个上传附件的组件，让用户上传后再在论坛里引用，但用户体验就要差不少了。 &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;既然找不到满意的app，那就只能自己动手做了。目前计划在pybb（注：pybb的许可协议没看太懂，似乎是类似BSD的）的基础上进行开发。目前的开发计划如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先给项目换个新名字LBForum &lt;/li&gt;
&lt;li&gt;换个漂亮些的模板（同时增加richeditor）      &lt;br /&gt;考虑过不少模板。
&lt;ul&gt;
&lt;li&gt;phpbb3 目前最流行的开源论坛程序，css和html写得很不错。但似乎有些复杂了，套用起来有些麻烦。 &lt;/li&gt;
&lt;li&gt;phpbb2/javaeye/jforum 这几论坛程序都长得差不多，UI应当都是参照phpbb2（javaeye的老大自己说了javaeye的界面就是仿phpbb3）来做的。其实也不能说这几个论坛的模板有什么不好。更多的是不喜欢里面过多的table。 &lt;/li&gt;
&lt;li&gt;discuz5 不是太喜欢discuz7的界面。discuz5（springside常用的那款界面）的界面感觉清爽些，但改了些后发现里面的html和css写的实在不怎么样。 &lt;/li&gt;
&lt;li&gt;fluxbb 目前打算用她的模板了。界面给人的感觉不错，html和css写得挺好。界面够简单，要套用模板应当不会太困难。 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;增强附件功能      &lt;br /&gt;虽然pybb提供了附件的支持，但功能还是比较弱。 &lt;/li&gt;
&lt;li&gt;增加一个公共的个人信息模块      &lt;br /&gt;pybb已提供了一个保存用户个人信息的功能，但通常这些信息会是整个工程所共享的。我觉得这些信息还是单独放到一个专有的app里比较好。这个app可以以代码的方式包括的工程里，需要增加个人信息的时候直接修改model代码。 &lt;/li&gt;
&lt;/ol&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461919/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461919/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461919/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461919/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2009/12/django%e7%9a%84%e8%ae%ba%e5%9d%9bapp/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>在django的资源页面里有个第三方论坛app的比较页面Django Forum Apps Comparison。一眼望过去，可用的app还不真不少，数下了有15个之多。但真正看下来，似乎很难找到一个让人满意的。
我对论坛app的要求是:

得要自带一个还比较漂亮的界面模板。      模板的开发工作在django应用的开发中占了很大的比重，甚至可能比写python代码花的时间还多。可惜的是很多的app应用甚至连个最基础的demo模板都没带。 
最好支持Richeditor和BBCode。      支持BBCode的app还是有几个的。Richeditor的支持基本上属于模板的范畴，参考条目1，似乎还没看到支持Richeditor的论坛（注：我没每个app都看，不能确定，pybb默认模板带了个Markup的编辑器）。 
支持附件。      国内的论坛应用大多偏娱乐，用户喜欢在自己的帖子里插入图片等东西。虽然可以再单独提供一个上传附件的组件，让用户上传后再在论坛里引用，但用户体验就要差不少了。 

既然找不到满意的app，那就只能自己动手做了。目前计划在pybb（注：pybb的许可协议没看太懂，似乎是类似BSD的）的基础上进行开发。目前的开发计划如下：

先给项目换个新名字LBForum 
换个漂亮些的模板（同时增加richeditor）      考虑过不少模板。

phpbb3 目前最流行的开源论坛程序，css和html写得很不错。但似乎有些复杂了，套用起来有些麻烦。 
phpbb2/javaeye/jforum 这几论坛程序都长得差不多，UI应当都是参照phpbb2（javaeye的老大自己说了javaeye的界面就是仿phpbb3）来做的。其实也不能说这几个论坛的模板有什么不好。更多的是不喜欢里面过多的table。 
discuz5 不是太喜欢discuz7的界面。discuz5（springside常用的那款界面）的界面感觉清爽些，但改了些后发现里面的html和css写的实在不怎么样。 
fluxbb 目前打算用她的模板了。界面给人的感觉不错，html和css写得挺好。界面够简单，要套用模板应当不会太困难。 


增强附件功能      虽然pybb提供了附件的支持，但功能还是比较弱。 
增加一个公共的个人信息模块      pybb已提供了一个保存用户个人信息的功能，但通常这些信息会是整个工程所共享的。我觉得这些信息还是单独放到一个专有的app里比较好。这个app可以以代码的方式包括的工程里，需要增加个人信息的时候直接修改model代码。&lt;img src=&quot;http://www1.feedsky.com/t1/336461919/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461919/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461919/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461919/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>pybb</category><category>django</category><category>lbforum</category><category>编程</category><pubDate>Sun, 20 Dec 2009 22:34:29 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2009/12/django%e7%9a%84%e8%ae%ba%e5%9d%9bapp/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2009/12/django%e7%9a%84%e8%ae%ba%e5%9d%9bapp/</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2009/12/django%e7%9a%84%e8%ae%ba%e5%9d%9bapp/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461919/5348363</fs:itemid></item><item><title>JdbcTemplate之BeanPropertyRowMapper</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461920/5348363/1/item.html</link><content:encoded>&lt;p&gt;Spring的JdbcTemplate无疑极大的简化了JDBC操作。只是查询出的数据都直接放在MAP里。想要直接从数据库里直接查询出对象的朋友不免要有些失望。&lt;/p&gt;
&lt;p&gt;这写天本想给JdbcTemplate做个扩展，让JdbcTemplate自动绑定对象。等写得差不多的时候，很不幸的发现自己只是重复造轮子而已。Spring已经自带了比较完善的解决方案，通过BeanPropertyRowMapper自动绑定数据库的列到对象。BeanPropertyRowMapper的绑定规则是，FiledName相同的绑定，如果绑定失败，将尝试将hiVik转换成hi_vik查找数据库的列。&lt;/p&gt;
&lt;p&gt;如果需要查询出一个包含YouVO对象的List只需要做如下操作就可以了。&lt;/p&gt;
&lt;p&gt;List objList = DbHelper.getJdbcTemplate().query(sql, new Object[]{}, new BeanPropertyRowMapper(YouVO.class));&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461920/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461920/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461920/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461920/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2009/12/jdbctemplate%e4%b9%8bbeanpropertyrowmapper/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>Spring的JdbcTemplate无疑极大的简化了JDBC操作。只是查询出的数据都直接放在MAP里。想要直接从数据库里直接查询出对象的朋友不免要有些失望。
这写天本想给JdbcTemplate做个扩展，让JdbcTemplate自动绑定对象。等写得差不多的时候，很不幸的发现自己只是重复造轮子而已。Spring已经自带了比较完善的解决方案，通过BeanPropertyRowMapper自动绑定数据库的列到对象。BeanPropertyRowMapper的绑定规则是，FiledName相同的绑定，如果绑定失败，将尝试将hiVik转换成hi_vik查找数据库的列。
如果需要查询出一个包含YouVO对象的List只需要做如下操作就可以了。
List objList = DbHelper.getJdbcTemplate().query(sql, new Object[]{}, new BeanPropertyRowMapper(YouVO.class));&lt;img src=&quot;http://www1.feedsky.com/t1/336461920/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461920/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461920/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461920/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>spring</category><category>JdbcTemplate</category><category>java</category><category>编程</category><pubDate>Thu, 10 Dec 2009 22:12:36 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2009/12/jdbctemplate%e4%b9%8bbeanpropertyrowmapper/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2009/12/jdbctemplate%e4%b9%8bbeanpropertyrowmapper/</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2009/12/jdbctemplate%e4%b9%8bbeanpropertyrowmapper/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461920/5348363</fs:itemid></item><item><title>java的类ROR框架Play!</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461921/5348363/1/item.html</link><content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.playframework.org/&quot;&gt;Play!&lt;/a&gt;一个类ROR的java框架。和&lt;a href=&quot;http://www.springsource.com/products/grails&quot;&gt;Grails&lt;/a&gt;不同的是，Play!没有用&lt;a href=&quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt;等脚本技术进行扩展。直接使用java技术，这对java程序员来说要亲切很多，而且推广阻力也相应的会小不少。&lt;/p&gt;
&lt;p&gt;最近简单的了解Play!，感觉确实是挺有意思的一个东西。Play!作为ROR“仿制品”，在开发思想方面和ROR还是比较接近。Play!本身提供了不少开发相关的辅助命令。使用命令创建出的新工程直接就可以运行了。相比之下，基于ssh的开发，光是脚手架的搭建就得费不少事。&lt;/p&gt;
&lt;p&gt;数据模型方面使用JPA定义数据对象，直接从对象生成数据库。这点和django比较像，这也是比较符合我开发习惯的一个做法。&lt;/p&gt;
&lt;p&gt;模板方面和Django类似，支持模板的继承。Django模板的继承给我的体验很好。jsp页面虽然可以使用include实现复用，但对于结构相似的页面依旧需要重复的include。&lt;a href=&quot;http://www.opensymphony.com/sitemesh/&quot;&gt;Sitemesh&lt;/a&gt;虽然可以实现类似django模板的功能但看到那繁琐的配置我就撤了。&lt;/p&gt;
&lt;p&gt;总的来说Play!给我的印象还是挺不错的，希望在日后的工作中可以用到。&lt;/p&gt;
&lt;h3&gt;其他&lt;/h3&gt;
&lt;p&gt;Play!的FAQ里有一个解答让我挺印象深刻的。其中有关于为什么使用不符合java规范的play做包名的说明。play!本身就是一个平台，运行在play!上的东西都将是符合play!规范的，所以不必为play这个包名而计较。play!专注于web的敏捷开发，为了适应web敏捷的需要一些无伤大雅的“另类”做法也是未尝不可的。想自己在某些情况下对代码还是有些所谓的“洁癖”。在django开发的时候喜欢在自己的app外面还要另外加一层包，而这种做法在一定程度上是不符合django做法的（django的app名必须唯一，即使上层的包名不同也没用）。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461921/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461921/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461921/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461921/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2009/12/java%e7%9a%84%e7%b1%bbror%e6%a1%86%e6%9e%b6play/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>Play!一个类ROR的java框架。和Grails不同的是，Play!没有用Groovy等脚本技术进行扩展。直接使用java技术，这对java程序员来说要亲切很多，而且推广阻力也相应的会小不少。
最近简单的了解Play!，感觉确实是挺有意思的一个东西。Play!作为ROR“仿制品”，在开发思想方面和ROR还是比较接近。Play!本身提供了不少开发相关的辅助命令。使用命令创建出的新工程直接就可以运行了。相比之下，基于ssh的开发，光是脚手架的搭建就得费不少事。
数据模型方面使用JPA定义数据对象，直接从对象生成数据库。这点和django比较像，这也是比较符合我开发习惯的一个做法。
模板方面和Django类似，支持模板的继承。Django模板的继承给我的体验很好。jsp页面虽然可以使用include实现复用，但对于结构相似的页面依旧需要重复的include。Sitemesh虽然可以实现类似django模板的功能但看到那繁琐的配置我就撤了。
总的来说Play!给我的印象还是挺不错的，希望在日后的工作中可以用到。
其他
Play!的FAQ里有一个解答让我挺印象深刻的。其中有关于为什么使用不符合java规范的play做包名的说明。play!本身就是一个平台，运行在play!上的东西都将是符合play!规范的，所以不必为play这个包名而计较。play!专注于web的敏捷开发，为了适应web敏捷的需要一些无伤大雅的“另类”做法也是未尝不可的。想自己在某些情况下对代码还是有些所谓的“洁癖”。在django开发的时候喜欢在自己的app外面还要另外加一层包，而这种做法在一定程度上是不符合django做法的（django的app名必须唯一，即使上层的包名不同也没用）。&lt;img src=&quot;http://www1.feedsky.com/t1/336461921/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461921/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461921/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461921/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>play!</category><category>java</category><category>编程</category><pubDate>Tue, 08 Dec 2009 23:43:20 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2009/12/java%e7%9a%84%e7%b1%bbror%e6%a1%86%e6%9e%b6play/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2009/12/java%e7%9a%84%e7%b1%bbror%e6%a1%86%e6%9e%b6play/</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2009/12/java%e7%9a%84%e7%b1%bbror%e6%a1%86%e6%9e%b6play/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461921/5348363</fs:itemid></item><item><title>搭建自己的Twitter网页客户端</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461922/5348363/1/item.html</link><content:encoded>&lt;p&gt;Twitter网页客户端都封得差不多了，于是决定在自己主机上搭个Twitter网页客户端。本想自己写个简单的，不过看到&lt;a href=&quot;http://code.google.com/p/rabr/&quot;&gt;Rabr&lt;/a&gt;后立马打消了这个想法。&lt;/p&gt;
&lt;p&gt;Rabr是一个用PHP写的Twitter网页客户端，具备基础的Twitter功能，而且界面漂亮。&lt;/p&gt;
&lt;p&gt;作者还是用Rabr搭了个&lt;a href=&quot;https://zdx.in/&quot;&gt;演示站点&lt;/a&gt;。虽说是演示站点，但普通用户已经可以通过这个站点登录自己的twitter了。&lt;/p&gt;
&lt;p&gt;不过我觉得这样的东西搭建好后最好还是自己用就好，不然搞不好莫名其妙的就被封，那就不好玩了。&lt;/p&gt;
&lt;h4&gt;GAE&amp;amp;Rabr&lt;/h4&gt;
&lt;p&gt;很早以前就听说可以使用JAVA的PHP库在GAE上使用PHP程序。所以特意将Rabr部署到了GAE，可惜没有顺利的跑起来。提示GAE对java.net.Proxy做了限制。去看了quercus（java的php引擎）的代码，似乎可以将Proxy去掉。改天对quercus修改看看。&lt;/p&gt;
&lt;h4&gt;参考阅读&lt;/h4&gt;
&lt;p&gt;如果你想用python开发一个twitter客户端可以看看&lt;a title=&quot;http://code.google.com/p/python-twitter/&quot; href=&quot;http://code.google.com/p/python-twitter/&quot;&gt;http://code.google.com/p/python-twitter/&lt;/a&gt;，twitter api的python封装。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461922/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461922/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461922/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461922/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2009/11/%e6%90%ad%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84twitter%e7%bd%91%e9%a1%b5%e5%ae%a2%e6%88%b7%e7%ab%af-2/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>Twitter网页客户端都封得差不多了，于是决定在自己主机上搭个Twitter网页客户端。本想自己写个简单的，不过看到Rabr后立马打消了这个想法。
Rabr是一个用PHP写的Twitter网页客户端，具备基础的Twitter功能，而且界面漂亮。
作者还是用Rabr搭了个演示站点。虽说是演示站点，但普通用户已经可以通过这个站点登录自己的twitter了。
不过我觉得这样的东西搭建好后最好还是自己用就好，不然搞不好莫名其妙的就被封，那就不好玩了。
GAE&amp;#38;Rabr
很早以前就听说可以使用JAVA的PHP库在GAE上使用PHP程序。所以特意将Rabr部署到了GAE，可惜没有顺利的跑起来。提示GAE对java.net.Proxy做了限制。去看了quercus（java的php引擎）的代码，似乎可以将Proxy去掉。改天对quercus修改看看。
参考阅读
如果你想用python开发一个twitter客户端可以看看http://code.google.com/p/python-twitter/，twitter api的python封装。&lt;img src=&quot;http://www1.feedsky.com/t1/336461922/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461922/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461922/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461922/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>GAE</category><category>twitter</category><category>Rabr</category><category>软件推荐</category><pubDate>Mon, 30 Nov 2009 22:23:57 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2009/11/%e6%90%ad%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84twitter%e7%bd%91%e9%a1%b5%e5%ae%a2%e6%88%b7%e7%ab%af-2/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2009/11/%e6%90%ad%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84twitter%e7%bd%91%e9%a1%b5%e5%ae%a2%e6%88%b7%e7%ab%af-2/</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2009/11/%e6%90%ad%e5%bb%ba%e8%87%aa%e5%b7%b1%e7%9a%84twitter%e7%bd%91%e9%a1%b5%e5%ae%a2%e6%88%b7%e7%ab%af-2/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461922/5348363</fs:itemid></item><item><title>川西-云南 记录（九） END</title><link>http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461923/5348363/1/item.html</link><content:encoded>&lt;p&gt;很早就看到有人说，做过一次背包旅行后就很容易爱上旅行。虽然这次的旅行有太多的不完美，但我已经喜欢上了这样的旅行。去不同的地方看不同的风景，了解不同的人，不同的生活，同时也了解自己。&lt;/p&gt;
&lt;p&gt;一路上可以认识很多和自己一样旅行的朋友。在平时的生活中或许有很多的不如意和困惑，但至少在此时可以暂时的将烦恼抛开。&lt;/p&gt;
&lt;p&gt;如果可能，我想今年或来年秋天去一次雨崩，看看这次错过的梅里雪山。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/336461923/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461923/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461923/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461923/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2009/08/%e5%b7%9d%e8%a5%bf-%e4%ba%91%e5%8d%97-%e8%ae%b0%e5%bd%95%ef%bc%88%e4%b9%9d%ef%bc%89-end/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>很早就看到有人说，做过一次背包旅行后就很容易爱上旅行。虽然这次的旅行有太多的不完美，但我已经喜欢上了这样的旅行。去不同的地方看不同的风景，了解不同的人，不同的生活，同时也了解自己。
一路上可以认识很多和自己一样旅行的朋友。在平时的生活中或许有很多的不如意和困惑，但至少在此时可以暂时的将烦恼抛开。
如果可能，我想今年或来年秋天去一次雨崩，看看这次错过的梅里雪山。&lt;img src=&quot;http://www1.feedsky.com/t1/336461923/vicalloy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/vicalloy/~7238928/336461923/5348363/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/vicalloy/336461923/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/vicalloy/336461923/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>旅行</category><category>路过</category><pubDate>Tue, 11 Aug 2009 19:14:44 +0800</pubDate><author>vicalloy</author><comments>http://vik.haoluobo.com/blog/index.php/2009/08/%e5%b7%9d%e8%a5%bf-%e4%ba%91%e5%8d%97-%e8%ae%b0%e5%bd%95%ef%bc%88%e4%b9%9d%ef%bc%89-end/#comments</comments><guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2009/08/%e5%b7%9d%e8%a5%bf-%e4%ba%91%e5%8d%97-%e8%ae%b0%e5%bd%95%ef%bc%88%e4%b9%9d%ef%bc%89-end/</guid><dc:creator>vicalloy</dc:creator><fs:srclink>http://vik.haoluobo.com/blog/index.php/2009/08/%e5%b7%9d%e8%a5%bf-%e4%ba%91%e5%8d%97-%e8%ae%b0%e5%bd%95%ef%bc%88%e4%b9%9d%ef%bc%89-end/</fs:srclink><fs:srcfeed>http://vik.haoluobo.com/blog/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/vicalloy/~7238928/336461923/5348363</fs:itemid></item></channel></rss>