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

<channel>
	<title>天地一沙鸥 &#187; 编程</title>
	<atom:link href="http://vik.haoluobo.com/blog/index.php/category/%e7%bc%96%e7%a8%8b/feed/" rel="self" type="application/rss+xml" />
	<link>http://vik.haoluobo.com/blog</link>
	<description>to be continue....</description>
	<lastBuildDate>Mon, 26 Jul 2010 10:45:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Android开发学习笔记（Android基础知识）</title>
		<link>http://vik.haoluobo.com/blog/index.php/2010/06/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88reloaded%ef%bc%89-2/</link>
		<comments>http://vik.haoluobo.com/blog/index.php/2010/06/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88reloaded%ef%bc%89-2/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 15:31:31 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2010/06/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88reloaded%ef%bc%89-2/</guid>
		<description><![CDATA[发现实在是没有写笔记的习惯，每次都是写了一点后就没兴趣继续写下去了。随便摘抄点好了。 Activities and Tasks task是一组相关的Activities，保存在一个堆栈中，给用户的感觉就是一个应用程序。简单的理解就是，每开一个新的Activities，就将Activities放到堆栈的最上面，按下back后就将当前Activities移除，激活堆栈上的下一个Activities。 Affinities and new tasks 其实我没太明白affinity的含义，在我看来似乎affinity有点类似taskId，标示它应该属于哪个task。 Launch modes 启动模式总共有四种 &#34;standard&#34; (the default mode) &#34;singleTop&#34; &#34;singleTask&#34; &#34;singleInstance&#34; Clearing the stack 默认情况下，如果用户长时间离开Task，系统会清理掉除ROOT Activity外的所有Activities。这个做法的依据是，如果用户太久没回来，用户肯定已经忘了自己最初做了啥，回来肯定是要做一些新事情。当然我们可以通过给activity设置一些属性来改变这个行为，比如alwaysRetainTaskState等。 Starting tasks 当需要一个activity作为整个应用程序的进入点时，我们给它一个intent filter,其中action为 &#34;android.intent.action.MAIN&#34;，category为&#34;android.intent.category.LAUNCHER&#34;。这种filter使得一个图标和一个标签显示在程序启动器中，使用户可以启动该task或者返回到该task。 Processes and Threads 同一个application都运行在同一个Processes里面。 为了保证Activity界面不阻塞，耗时工作应当放到Thread中。 Android有提供一个轻量级的RPC机制。 Activity lifecycle Activity有三种基本状态： active 当前活动窗口 paused 被其他窗口挡住部分 stopped&#160; 被完全挡住，在系统需要回收资源的时候会被kill activity在进行状态切换的时候会触发相应的方法 void onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() [...]]]></description>
			<content:encoded><![CDATA[<h4>发现实在是没有写笔记的习惯，每次都是写了一点后就没兴趣继续写下去了。随便摘抄点好了。</h4>
<h4>Activities and Tasks</h4>
<p>task是一组相关的Activities，保存在一个堆栈中，给用户的感觉就是一个应用程序。简单的理解就是，每开一个新的Activities，就将Activities放到堆栈的最上面，按下back后就将当前Activities移除，激活堆栈上的下一个Activities。</p>
<h4>Affinities and new tasks</h4>
<p>其实我没太明白affinity的含义，在我看来似乎affinity有点类似taskId，标示它应该属于哪个task。</p>
<h4>Launch modes</h4>
<p>启动模式总共有四种</p>
<ul>
<li>&quot;standard&quot; (the default mode) </li>
<li>&quot;singleTop&quot; </li>
<li>&quot;singleTask&quot; </li>
<li>&quot;singleInstance&quot; </li>
</ul>
<h4>Clearing the stack</h4>
<p>默认情况下，如果用户长时间离开Task，系统会清理掉除ROOT Activity外的所有Activities。这个做法的依据是，如果用户太久没回来，用户肯定已经忘了自己最初做了啥，回来肯定是要做一些新事情。当然我们可以通过给activity设置一些属性来改变这个行为，比如alwaysRetainTaskState等。</p>
<h4>Starting tasks</h4>
<p>当需要一个activity作为整个应用程序的进入点时，我们给它一个intent filter,其中action为 &quot;android.intent.action.MAIN&quot;，category为&quot;android.intent.category.LAUNCHER&quot;。这种filter使得一个图标和一个标签显示在程序启动器中，使用户可以启动该task或者返回到该task。</p>
<h4>Processes and Threads</h4>
<p>同一个application都运行在同一个Processes里面。</p>
<p>为了保证Activity界面不阻塞，耗时工作应当放到Thread中。</p>
<p>Android有提供一个轻量级的RPC机制。</p>
<h4>Activity lifecycle</h4>
<p>Activity有三种基本状态：</p>
<ul>
<li>active 当前活动窗口 </li>
<li>paused 被其他窗口挡住部分 </li>
<li>stopped&#160; 被完全挡住，在系统需要回收资源的时候会被kill </li>
</ul>
<p>activity在进行状态切换的时候会触发相应的方法</p>
<ul>
<li>void onCreate(Bundle <i>savedInstanceState</i>) </li>
<li>void onStart() </li>
<li>void onRestart() </li>
<li>void onResume() </li>
<li>void onPause() </li>
<li>void onStop() </li>
<li>void onDestroy() </li>
</ul>
<h4>Service lifecycle</h4>
<p>一个service有以下两种用法</p>
<ul>
<li>service启动后由service自己或其他人关闭。 </li>
<li>模块通过接口连接service（bindService() ），在调用unbindService()后关闭。 </li>
</ul>
<h4>Broadcast receiver lifecycle</h4>
<p>一个broadcast receiver只有一个回调方法：    <br />void onReceive(Context curContext, Intent broadcastMsg)</p>
<p>broadcast receiver只有在执行onReceive的时候被认为是激活的。</p>
<p>当一个广播消息的响应非常耗时间时，需要新建一个新的线程来运行该操作。如果onReceive()创建了这个线程并返回，则整个进程，包括新创建的线程会被认为是非活动的（除非有其它的component为活动的），该线程有可能会被kill掉。解决方案是用onReceive()启动一个 service并让该service完成这个工作，那么系统直到这个进程仍然是活跃的。</p>
<h4>END</h4>
<p>到这里Android的基础知识也了解得差不多了，接着就该进军UI了。</p>
<p>Android的UI编程，主要注意的是：界面在XML中定义，为XML中的界面元素生成唯一的ID，并保存在自动生成的R.java中。程序中通过id查找相关界面元素，实现和界面的关联。除此之外的开发，和传统的java swing啥的没太多区别。</p>
<p>下面考虑写个简单的Android应用，一边学习，一遍实践。</p>
]]></content:encoded>
			<wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/06/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88reloaded%ef%bc%89-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android开发学习笔记（Reloaded）</title>
		<link>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88reloaded%ef%bc%89/</link>
		<comments>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88reloaded%ef%bc%89/#comments</comments>
		<pubDate>Mon, 31 May 2010 13:44:00 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88reloaded%ef%bc%89/</guid>
		<description><![CDATA[深入浅出Android这书看到“解读程序流程”这部分的时候，我开始明白这确实是本烂书彻底的烂书。里面居然开始解释java程序的结构，啥是import之类的东西。一个人如果连java是啥东西都不做到应当也没必要看啥android开发。不过还在这书够薄，且凭借母语优势，我还是很快的把余下的内容给翻了一遍。感觉差不多可以照葫芦画瓢了，但对具体细节依旧是一头雾水。看来老老实实的看sdk自带的文档才是正道。 Android的开发者网站挂了，不过好在SDK里已经带了相关文档。 具体见： /android-sdk-windows/docs/guide/topics/fundamentals.html 本着有中文尽量看中文的原则，先到网上找了找是否有Application Fundamentals的中文翻译。似乎已经有不少人做过了翻译，其中这篇翻译得比较完整http://docs.google.com/View?id=dcz49tvn_68f7rtrr9f Application Components Android程序比较特别，它不象大多程序一样有主入口。它是以“Application Components”为单位的，每个Components都是可以独立运行的。 系统中有四种Components： Activities 主要用来处理用户界面（窗口）。 Services 后台运行组件，有点类似windows的后台服务。 Broadcast receivers 广播消息接收组件，比如电池没电，来电话啥的。 Content providers 用来处理各个application之间的公共数据存储，可以用来程序之间通信啥的。 Intent content provider在接收到ContentResolver的请求时被激活，其他三种Components需要通过被称为intents的异步消息激活的。一个intent是一个Intent对象，它保存了消息的内容。 组件的关闭 Content providers和Broadcast receivers由android管理，通常不需要手动关闭。 The manifest file（AndroidManifest.xml） 应用程序配置文件，配置有该有用的组件信息，资源信息，以及权限信息。在android启动一个应用程序的component之前，它必须知道这个component的存在。因此，应用程序在manifest文件中声明了它的component。]]></description>
			<content:encoded><![CDATA[<p>深入浅出Android这书看到“解读程序流程”这部分的时候，我开始明白这确实是本烂书彻底的烂书。里面居然开始解释java程序的结构，啥是import之类的东西。一个人如果连java是啥东西都不做到应当也没必要看啥android开发。不过还在这书够薄，且凭借母语优势，我还是很快的把余下的内容给翻了一遍。感觉差不多可以照葫芦画瓢了，但对具体细节依旧是一头雾水。看来老老实实的看sdk自带的文档才是正道。</p>
<p>Android的开发者网站挂了，不过好在SDK里已经带了相关文档。</p>
<p>具体见：</p>
<p>/android-sdk-windows/docs/guide/topics/fundamentals.html</p>
<p>本着有中文尽量看中文的原则，先到网上找了找是否有Application Fundamentals的中文翻译。似乎已经有不少人做过了翻译，其中这篇翻译得比较完整<a title="http://docs.google.com/View?id=dcz49tvn_68f7rtrr9f" href="http://docs.google.com/View?id=dcz49tvn_68f7rtrr9f">http://docs.google.com/View?id=dcz49tvn_68f7rtrr9f</a></p>
<h4>Application Components</h4>
<p>Android程序比较特别，它不象大多程序一样有主入口。它是以“Application Components”为单位的，每个Components都是可以独立运行的。</p>
<p>系统中有四种Components：</p>
<ul>
<li>Activities 主要用来处理用户界面（窗口）。 </li>
<li>Services 后台运行组件，有点类似windows的后台服务。 </li>
<li>Broadcast receivers 广播消息接收组件，比如电池没电，来电话啥的。 </li>
<li>Content providers 用来处理各个application之间的公共数据存储，可以用来程序之间通信啥的。 </li>
</ul>
<h4>Intent</h4>
<p>content provider在接收到ContentResolver的请求时被激活，其他三种Components需要通过被称为intents的异步消息激活的。一个intent是一个Intent对象，它保存了消息的内容。</p>
<h4>组件的关闭</h4>
<p>Content providers和Broadcast receivers由android管理，通常不需要手动关闭。</p>
<h4>The manifest file（AndroidManifest.xml）</h4>
<p>应用程序配置文件，配置有该有用的组件信息，资源信息，以及权限信息。在android启动一个应用程序的component之前，它必须知道这个component的存在。因此，应用程序在manifest文件中声明了它的component。</p>
]]></content:encoded>
			<wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88reloaded%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android开发学习笔记（程序目录结构及基本概念）</title>
		<link>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e7%a8%8b%e5%ba%8f%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84%e5%8f%8a%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5%ef%bc%89/</link>
		<comments>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e7%a8%8b%e5%ba%8f%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84%e5%8f%8a%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5%ef%bc%89/#comments</comments>
		<pubDate>Thu, 27 May 2010 15:15:10 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e7%a8%8b%e5%ba%8f%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84%e5%8f%8a%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5%ef%bc%89/</guid>
		<description><![CDATA[选定《深入浅出Android》作为入门资料，同时还需要找个开源项目做参考以加深学习。虽然ADT本身有带不少例子，但我还想找个复杂点的例子。曾在java上看到javaeye android客户端开源的消息，于是就不费心去找其他的例子了http://code.google.com/p/javaeye-android-client/。 先创建一个新的Android主要目录如下 &#124;~gen/ 系统自动生成的文件 &#124; `~com/ &#124;&#160;&#160; `~haoluobo/ &#124;&#160;&#160;&#160;&#160; `-R.java &#124;~res/ 资源文件，图片以及界面描述等xml文档 &#124; &#124;+drawable-hdpi/ &#124; &#124;+drawable-ldpi/ &#124; &#124;+drawable-mdpi/ &#124; &#124;~layout/ 界面布局的描述文件 &#124; &#124; `-main.xml &#124; `~values/ &#124;&#160;&#160; `-strings.xml 字符串常量 &#124;+src/ java代码 Android的界面虽然可以完全用java代码完成，但使用XML定义界面使界面和实现代码分开，更有利维护。且ADT提供了界面预览功能，可以直观的看到界面效果。 界面使用XML定义后，界面元素和java代码又要如何交互？所以就有了系统自动生成的R.java这个java类。ADT会在R.java里为XML里的界面元素创建对应的ID（int类型的常量）。根据元素类型的不同，常量保存在不同的子类中。这里说得有些不明白，直接上代码。 public final class R { &#160;&#160;&#160; public static final class attr { &#160;&#160;&#160; } &#160;&#160;&#160; public static final class drawable { [...]]]></description>
			<content:encoded><![CDATA[<p>选定《深入浅出Android》作为入门资料，同时还需要找个开源项目做参考以加深学习。虽然ADT本身有带不少例子，但我还想找个复杂点的例子。曾在java上看到javaeye android客户端开源的消息，于是就不费心去找其他的例子了<a title="http://code.google.com/p/javaeye-android-client/" href="http://code.google.com/p/javaeye-android-client/">http://code.google.com/p/javaeye-android-client/</a>。</p>
<p>先创建一个新的Android主要目录如下</p>
<p>|~gen/ <em>系统自动生成的文件</em>     <br />| `~com/     <br />|&#160;&#160; `~haoluobo/     <br />|&#160;&#160;&#160;&#160; `-R.java     <br />|~res/ <em>资源文件，图片以及界面描述等xml文档</em>     <br />| |+drawable-hdpi/     <br />| |+drawable-ldpi/     <br />| |+drawable-mdpi/     <br />| |~layout/ <em>界面布局的描述文件</em>     <br />| | `-main.xml     <br />| `~values/     <br />|&#160;&#160; `-strings.xml <em>字符串常量      <br /></em>|+src/ <em>java代码</em></p>
<p>Android的界面虽然可以完全用java代码完成，但使用XML定义界面使界面和实现代码分开，更有利维护。且ADT提供了界面预览功能，可以直观的看到界面效果。</p>
<p>界面使用XML定义后，界面元素和java代码又要如何交互？所以就有了系统自动生成的R.java这个java类。ADT会在R.java里为XML里的界面元素创建对应的ID（int类型的常量）。根据元素类型的不同，常量保存在不同的子类中。这里说得有些不明白，直接上代码。</p>
<p>public final class R {   <br />&#160;&#160;&#160; public static final class attr {    <br />&#160;&#160;&#160; }    <br />&#160;&#160;&#160; public static final class drawable {    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public static final int icon=0x7f020000;    <br />&#160;&#160;&#160; }</p>
<p>&#8230;&#8230;.</p>
<p>java代码里要获取对应的页面元素使用如下的方法</p>
<p>usernameField = (EditText)findViewById(R.id.username_field);</p>
]]></content:encoded>
			<wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e7%a8%8b%e5%ba%8f%e7%9b%ae%e5%bd%95%e7%bb%93%e6%9e%84%e5%8f%8a%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android开发学习笔记（环境准备，学习资料收集）</title>
		<link>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87%ef%bc%8c%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99%e6%94%b6%e9%9b%86%ef%bc%89/</link>
		<comments>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87%ef%bc%8c%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99%e6%94%b6%e9%9b%86%ef%bc%89/#comments</comments>
		<pubDate>Wed, 26 May 2010 15:19:57 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87%ef%bc%8c%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99%e6%94%b6%e9%9b%86%ef%bc%89/</guid>
		<description><![CDATA[前言 iPhone推出后，移动终端的能量似乎被一下引爆，android的加入使这个市场更加繁华。智能设备的开发也一下子变得流行起来。 作为一个开发人员，还是很想了解尝试一下智能设备的应用开发。本想试试iPhone，无奈我没MacBook也没iPhone，只能退而求其次选了android。 环境准备 如果你只是学习android开发，那有台PC就够了，并不需要去真正买台android设备。 网上关于android的开发环境配置的文章已经够多了，这就不多废话。 具体参考：http://blog.csdn.net/ghd2000/archive/2010/04/19/5498673.aspx 这里要注意的几点： 使用SDK Setup.exe安装的时候很可能会无法连接成功。选择Settings-&#62;Force https:// …http://。将连接类型由https改成http。 如果修改过用户目录，会导致创建的AVD无法启动。需要将.android目录复制到C盘的用户目录，比如：C:\Users\vicalloy\.android http://developer.android.com/ android的开发者网站悲剧的被墙了，需要自行翻墙 参考资料 开发环境准备好后，就要开始搜罗学习资料了。 http://www.eoeandroid.com/ 中文的android开发论坛，里面有些资料。问题是似乎需要积分才能下载，不过问题不大。找到名字后用 http://wenku.baidu.com/ 搜索。 http://wenku.baidu.com/search?word=android&#38;lm=0&#38;od=0 搜索android资料 android深入浅出 这本书做入门不错，至少可以让你知道android开发是怎么一回事 具体的学习笔记 太晚了，改天补上……]]></description>
			<content:encoded><![CDATA[<h4>前言</h4>
<p>iPhone推出后，移动终端的能量似乎被一下引爆，android的加入使这个市场更加繁华。智能设备的开发也一下子变得流行起来。</p>
<p>作为一个开发人员，还是很想了解尝试一下智能设备的应用开发。本想试试iPhone，无奈我没MacBook也没iPhone，只能退而求其次选了android。</p>
<h4>环境准备</h4>
<p>如果你只是学习android开发，那有台PC就够了，并不需要去真正买台android设备。</p>
<p>网上关于android的开发环境配置的文章已经够多了，这就不多废话。</p>
<p>具体参考：<a title="http://blog.csdn.net/ghd2000/archive/2010/04/19/5498673.aspx" href="http://blog.csdn.net/ghd2000/archive/2010/04/19/5498673.aspx">http://blog.csdn.net/ghd2000/archive/2010/04/19/5498673.aspx</a></p>
<p>这里要注意的几点：</p>
<ul>
<li>使用SDK Setup.exe安装的时候很可能会无法连接成功。选择Settings-&gt;Force https:// …http://。将连接类型由https改成http。 </li>
<li>如果修改过用户目录，会导致创建的AVD无法启动。需要将.android目录复制到C盘的用户目录，比如：C:\Users\vicalloy\.android </li>
<li><a title="http://developer.android.com/" href="http://developer.android.com/">http://developer.android.com/</a> android的开发者网站悲剧的被墙了，需要自行翻墙 </li>
</ul>
<h4>参考资料</h4>
<p>开发环境准备好后，就要开始搜罗学习资料了。</p>
<ul>
<li><a title="http://www.eoeandroid.com/" href="http://www.eoeandroid.com/">http://www.eoeandroid.com/</a> 中文的android开发论坛，里面有些资料。问题是似乎需要积分才能下载，不过问题不大。找到名字后用 <a title="http://wenku.baidu.com/" href="http://wenku.baidu.com/">http://wenku.baidu.com/</a> 搜索。 </li>
<li><a title="http://wenku.baidu.com/search?word=android&amp;lm=0&amp;od=0" href="http://wenku.baidu.com/search?word=android&amp;lm=0&amp;od=0">http://wenku.baidu.com/search?word=android&amp;lm=0&amp;od=0</a> 搜索android资料 </li>
<li><a href="http://wenku.baidu.com/view/e1d6b50d4a7302768e993924.html">android深入浅出</a> 这本书做入门不错，至少可以让你知道android开发是怎么一回事 </li>
</ul>
<h4>具体的学习笔记</h4>
<p>太晚了，改天补上……</p>
]]></content:encoded>
			<wfw:commentRss>http://vik.haoluobo.com/blog/index.php/2010/05/android%e5%bc%80%e5%8f%91%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%ef%bc%88%e7%8e%af%e5%a2%83%e5%87%86%e5%a4%87%ef%bc%8c%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99%e6%94%b6%e9%9b%86%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>发布一个Django的论坛系统LBForum（开源、带演示）</title>
		<link>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/</link>
		<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>
		<pubDate>Fri, 26 Feb 2010 13:18:09 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[lbforum]]></category>
		<category><![CDATA[python]]></category>

		<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>
		<description><![CDATA[简介 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安装对应的依赖包，同时将一些依赖包解压到对应的目录中。 注：django使用的是svn版本，所以机器上必须要安装有SVN，不然脚本会运行失败。如果因为由于svn的问题导致脚本运行失败，可以运行lbforum_env.bat进入lbforum环境，手动安装django的svn版本。 环境初始化好后，运行lbforum_env.bat进入lbforum环境 运行%mg% syncdb初始化数据库 运行%mg% runserver启动django开发服务器 进入admin，创建论坛分类和版块 进入版块发帖 LBForum的目录结构说明 &#124;+lbforum_env/#lbforum运行的python虚拟环境，运行create_lbforum_env.py后自动创建 &#124;+requirements/#lbforum用的第三方库和app，运行的时候会将该目录加到python路径 &#124;~scripts/#工程相关脚本 &#124; &#124;-create_lbforum_env.py#初始化python虚拟环境，并自动安装easy_install/django依赖库 &#124; &#124;-helper.py#提供其他脚本所需的辅助函数 &#124; `-lbforum_env.bat*#启动lbforum运行的虚拟环境及，并为lbforum的manage.py提供快捷方式%mg%，比如初始化数据库%mg% syncdb &#124;~sites/#站点配置/模板/静态文件 &#124; `~default/#默认站点 &#124;&#160;&#160; &#124;+static/#静态资源文件，如css等 &#124;&#160;&#160; &#124;+templates/#Django模板目录 &#124;&#160;&#160; &#124;+templates_plus/#Django模板目录，用户将自己重写过的目标放到该目录 &#124;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<h4>简介</h4>
<p>LBForum 用django开发的论坛系统，演示地址为：<a href="http://vik.haoluobo.com/lbforum/">http://vik.haoluobo.com/lbforum/</a>     <br />项目的地址为：<a href="http://github.com/vicalloy/LBForum">http://github.com/vicalloy/LBForum</a>     <br />界面部分抄的 FluxBB(一个开源的PHP论坛 <a href="http://fluxbb.org/">http://fluxbb.org/</a> )。     <br />虽然Django写的论坛也不少，不过还真没什么好用的。     <br />大多Django论坛都是独立的app，而且不少还缺模板，想我这样有经验的Django用户要跑起来都觉得麻烦，其他普通用户就更别说了。     <br />LBForum主要注重部署的方便性和易用性，功能方面目前还比较简单。     <br />LBForum一开始就是以整站的形式提供，所以以LBForum做为基础项目进行二次开发是很容易的。     <br />同时LBForum的开发尽量遵照Django可复用app原则，因此即使需要将LBForum做为独立的app集成到其他项目也并不会太难。 </p>
<h4>主要功能</h4>
<p>目前功能还比较简单，而且还有些小问题有待修正。 </p>
<ol>
<li>论坛分类，分版块 </li>
<li>发帖，回帖 </li>
<li>BBCode支持 </li>
<li>置顶贴</li>
<li>使用django admin提供论坛管理功能</li>
</ol>
<h4>用开发服务器把LBForum跑起来</h4>
<ol>
<li>先把代码down下来。LBForum托管在github上，<a href="http://github.com/vicalloy/LBForum">http://github.com/vicalloy/LBForum</a> 。如果你没有安装git，你可以直接用界面右上方的download       <br />source功能下载代码。 </li>
<li>运行\scripts\create_lbforum_env.py初始化lbforum的python虚拟环境。该脚本会自动创建一个python的虚拟环境并使用easy_install安装对应的依赖包，同时将一些依赖包解压到对应的目录中。      <br />注：django使用的是svn版本，所以机器上必须要安装有SVN，不然脚本会运行失败。如果因为由于svn的问题导致脚本运行失败，可以运行lbforum_env.bat进入lbforum环境，手动安装django的svn版本。 </li>
<li>环境初始化好后，运行lbforum_env.bat进入lbforum环境 </li>
<li>运行%mg% syncdb初始化数据库 </li>
<li>运行%mg% runserver启动django开发服务器 </li>
<li>进入admin，创建论坛分类和版块 </li>
<li>进入版块发帖 </li>
</ol>
<h4>LBForum的目录结构说明</h4>
<p>|+lbforum_env/#lbforum运行的python虚拟环境，运行create_lbforum_env.py后自动创建    <br />|+requirements/#lbforum用的第三方库和app，运行的时候会将该目录加到python路径     <br />|~scripts/#工程相关脚本     <br />| |-create_lbforum_env.py#初始化python虚拟环境，并自动安装easy_install/django依赖库     <br />| |-helper.py#提供其他脚本所需的辅助函数     <br />| `-lbforum_env.bat*#启动lbforum运行的虚拟环境及，并为lbforum的manage.py提供快捷方式%mg%，比如初始化数据库%mg%     <br />syncdb     <br />|~sites/#站点配置/模板/静态文件     <br />| `~default/#默认站点     <br />|&#160;&#160; |+static/#静态资源文件，如css等     <br />|&#160;&#160; |+templates/#Django模板目录     <br />|&#160;&#160; |+templates_plus/#Django模板目录，用户将自己重写过的目标放到该目录     <br />|&#160;&#160; `-&#8230;&#8230;     <br />|~src/#django的app目录     <br />| |+account/#account相关app。具体站点通常会对用户中心进行定制，所以该app在实际应用中很可能需要针对实际情况进行修改。     <br />| |+djangohelper/#一些django的辅助函数等，     <br />| |+lbforum/#lbforum的主app，论坛功能都在改app中     <br />| |+lbregistration/#registration app的lbforum扩展，主要去掉邮件地址认证功能     <br />| |+onlineuser/#显示在线用户的app（可复用的django app，可脱离lbforum单独使用）     <br />| `+simpleavatar/#头像功能的app（可复用的django app，可脱离lbforum单独使用，依赖djangohelper）     <br />|+tools/#工程用到的辅助工具，目前只有一个virtualenv的脚本 </p>
<h4>注：</h4>
<ol>
<li>由于计划在以后做i18n，所以目前只提供英文界面 </li>
<li>django的错误提示是显示在字段后面，fluxbb的错误全部都显示在表单前面。由于模板没有调好，所以目前按照fluxbb的方式显示错误，所以错误显示有些不太正常。 </li>
<li>bbcode的输入框本想做成自适应大小的，不过也调得有些问题，所以现在输入框的大小固定。 </li>
<li>文档&#8230; ，感觉好难写-_-，目前文档不全（项目中没有带任何的文档），日后补上。 </li>
<li>应用程序的目录结构主要查看pinax</li>
<li>simpleavatar模块部分代码来自django-avatar</li>
<li>依赖包除用easy_install在线安装的外，尽量使用zip包的方式附带在项目中，减少安装依赖包的困难。</li>
<li>远程部署脚本计划使用fabric，但fabric本身安装比较麻烦，所暂未处理。</li>
<li>项目最早放在googlecode，不过感觉github的功能更强些，所以移了过去。</li>
</ol>
]]></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>5</slash:comments>
		</item>
		<item>
		<title>SourceForge使用Python、TurboGears、MongoDB……来重构网站</title>
		<link>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/</link>
		<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>
		<pubDate>Mon, 22 Feb 2010 13:38:37 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[TurboGears]]></category>

		<guid isPermaLink="false">http://vik.haoluobo.com/blog/?p=10065</guid>
		<description><![CDATA[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，前后台通信用的就是这东西。]]></description>
			<content:encoded><![CDATA[<p>pycon2010上关于<a href="http://sf.net/" target="_blank">SF</a>网站重构的演讲，里面介绍了SF重构的技术选型及原因。在我看来SF用的东西还真的很GEEK。</p>
<p>主要用到的技术有Python、<a href="http://turbogears.org/" target="_blank">TurboGears2</a>、<a href="http://www.mongodb.org/display/DOCS/Home" target="_blank">MongoDB</a>、<a href="http://jinja.pocoo.org/">Jinja</a>*、<a href="http://www.rabbitmq.com/" target="_blank">RabbitMQ</a>，服务器用的是LigHTTPd和Nginx。</p>
<ul>
<li>TurboGears2（为什么不的Django？）<br />
pdf中也有谈到此前也用到过django，而且有很不错的体验，但对SF的改造来说TG更为合适。SF有着上10年的历史，要完全抛弃原有的东西自然不现实，此次的网站重构并不是完全的重写。TG可以很容易的剥离掉不需要用到的东西，同时TG可以很好的同其他WSGI中间件配合工作。</li>
<li>MongoDB<br />
MongoDB是一个非关系的分布式数据库(NoSQL数据库)，最大的优势快。由于这东西足够快，所以连web2.0网站常用的memcached也省掉了。(注：NoSQL数据库介绍可以参考 <a href="http://robbin.javaeye.com/blog/524977" target="_blank">NoSQL数据库探讨之一 － 为什么要用非关系数据库</a>)</li>
<li>Jinja*<br />
Django的模板很棒，但速度不怎么快，而且完全不支持任何嵌入式代码。Jinja和Django的模板长得非常的象，而且解决了上面的两个问题。（注：文档里说前台用的是PHP，所以不清楚是否有部分用到Jinja）</li>
<li>RabbitMQ<br />
用Erlang写的中间件，进行前后台的消息通信。SF的前台界面呈现，依旧使用的PHP，前后台通信用的就是这东西。</li>
</ul>
]]></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>
		</item>
		<item>
		<title>Whoosh性能</title>
		<link>http://vik.haoluobo.com/blog/index.php/2010/02/whoosh%e6%80%a7%e8%83%bd/</link>
		<comments>http://vik.haoluobo.com/blog/index.php/2010/02/whoosh%e6%80%a7%e8%83%bd/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 05:47:11 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[whoosh]]></category>
		<category><![CDATA[xapian]]></category>

		<guid isPermaLink="false">http://vik.haoluobo.com/blog/?p=10061</guid>
		<description><![CDATA[早些时候就在google到Whoosh和xapian的性能对比文章，只是由于文章被墙，今天才翻墙看到。 文章是xapian作者写的。就文章里的对比结果来看，whoosh和xapian的性能差距还是比较明显。索引和搜索的速度有近4倍的差距，在full cache情况下的性能差距更是达到了60倍。 除算法原因外，whoosh的纯python定位也决定了whoosh很难达到其他c/java的搜索引擎库的速度。 当然，whoosh的优势是易用性，在考虑性能的情况下whoosh不是首先。 注：Xapian performance comparision with Whoosh]]></description>
			<content:encoded><![CDATA[<p>早些时候就在google到Whoosh和xapian的性能对比文章，只是由于文章被墙，今天才翻墙看到。</p>
<p>文章是xapian作者写的。就文章里的对比结果来看，whoosh和xapian的性能差距还是比较明显。索引和搜索的速度有近4倍的差距，在full cache情况下的性能差距更是达到了60倍。</p>
<p>除算法原因外，whoosh的纯python定位也决定了whoosh很难达到其他c/java的搜索引擎库的速度。</p>
<p>当然，whoosh的优势是易用性，在考虑性能的情况下whoosh不是首先。</p>
<p>注：<a href="http://xapian.wordpress.com/2009/02/12/xapian-performance-comparision-with-whoosh/" target="_blank">Xapian performance comparision with Whoosh</a></p>
]]></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>
		</item>
		<item>
		<title>使用嵌入式jetty启动axis提供webservice服务</title>
		<link>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/</link>
		<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>
		<pubDate>Tue, 02 Feb 2010 06:36:31 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[axis]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://vik.haoluobo.com/blog/?p=10054</guid>
		<description><![CDATA[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&#40;&#41; throws Exception &#123; Server server = new Server&#40;&#41;; SocketConnector connector = new SocketConnector&#40;&#41;; connector.setMaxIdleTime&#40;30000&#41;; connector.setPort&#40;8000&#41;;//jetty的端口 server.addConnector&#40;connector&#41;; &#160; ServletHolder axisServletholder = new ServletHolder&#40;new AxisServlet&#40;&#41;&#41;; ServletHolder axisAdminServletholder = new ServletHolder&#40;new AdminServlet&#40;&#41;&#41;; &#160; Context root = new Context&#40;server, &#34;/&#34;, Context.SESSIONS&#41;; root.setResourceBase&#40;&#34;./web/&#34;&#41;;//WEB资源目录，./web/WEB-INF/server-config.wsdd root.addServlet&#40;axisServletholder, &#34;/servlet/AxisServlet&#34;&#41;; root.addServlet&#40;axisServletholder, &#34;/ws/*&#34;&#41;;//设置webservice的发布目录 root.addServlet&#40;axisServletholder, &#34;*.jws&#34;&#41;; root.addServlet&#40;axisAdminServletholder, &#34;/servlet/AdminServlet&#34;&#41;; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>JDK6已经内置了webservice支持，使用JDK6开发webservice是一件很方便的事。很不幸的是，由于IDE的支持axis成为使用最广的java webservice库。而且由于的部分应用使用了不兼容的RPC/encoded模式，使得你还不得不用axis。</p>
<p>通常情况下用axis开发webservice服务端，需要挂在tomcat等web服务器下，以servlet的方式提供服务。但有些时候我会想将接口部分以一个单独应用程序的方式进行发布，另外再多带个web服务器似乎有些笨拙。</p>
<p>使用嵌入式的jetty是一个比较简单的解决方式。其中需要注意的是，一定要设置Context的ResourceBase，不然是无法找到webservice配置文件的。我当初就是想当然的认为jetty会默认在当前路径下查找配置文件，导致一直无法正确发布服务。</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:Courier New, Courier, Monospace;"><span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> runJetty<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span>
    Server server <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Server<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    SocketConnector connector <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SocketConnector<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    connector.<span style="color: #006633;">setMaxIdleTime</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">30000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    connector.<span style="color: #006633;">setPort</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//jetty的端口</span>
    server.<span style="color: #006633;">addConnector</span><span style="color: #009900;">&#40;</span>connector<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    ServletHolder axisServletholder <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ServletHolder<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> AxisServlet<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    ServletHolder axisAdminServletholder <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ServletHolder<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> AdminServlet<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003399;">Context</span> root <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Context</span><span style="color: #009900;">&#40;</span>server, <span style="color: #0000ff;">&quot;/&quot;</span>, <span style="color: #003399;">Context</span>.<span style="color: #006633;">SESSIONS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    root.<span style="color: #006633;">setResourceBase</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;./web/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//WEB资源目录，./web/WEB-INF/server-config.wsdd</span>
    root.<span style="color: #006633;">addServlet</span><span style="color: #009900;">&#40;</span>axisServletholder, <span style="color: #0000ff;">&quot;/servlet/AxisServlet&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    root.<span style="color: #006633;">addServlet</span><span style="color: #009900;">&#40;</span>axisServletholder, <span style="color: #0000ff;">&quot;/ws/*&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//设置webservice的发布目录</span>
    root.<span style="color: #006633;">addServlet</span><span style="color: #009900;">&#40;</span>axisServletholder, <span style="color: #0000ff;">&quot;*.jws&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    root.<span style="color: #006633;">addServlet</span><span style="color: #009900;">&#40;</span>axisAdminServletholder, <span style="color: #0000ff;">&quot;/servlet/AdminServlet&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    server.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></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>
		</item>
		<item>
		<title>纯python的全文搜索组件Whoosh</title>
		<link>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/</link>
		<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>
		<pubDate>Sat, 30 Jan 2010 11:16:39 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[whoosh]]></category>

		<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>
		<description><![CDATA[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实现，无二进制包。程序不会莫名其妙的崩溃。 按字段进行索引。 索引和搜索都非常的快 &#8212; 是目前最快的纯python全文搜索引擎。 良好的构架，评分模块/分词模块/存储模块等各个模块都是可插拔的。 功能强大的查询语言（通过pyparsing实现功能）。 纯python实现的拼写检查（目前唯一的纯python拼写检查实现） 为啥选择Whoosh 纯python实现，省了编译二进制包的繁琐过程。 python代码比java更容易读懂，而且用起来也更方便。（翻者注：这个容易引发口水） 在很多时候易用性比单纯的最求速度更重要。 Whoosh从其他的开源搜索引擎中获取了大量的灵感。 基础构架参考Lucene，使用KinoSearch的索引算法，部分评分算法来自Terrier，英文的词语态变化来自Minion.]]></description>
			<content:encoded><![CDATA[<p>haystack 是 django 全文搜索的一个中间件，可以粘合 django 应用和 solr、xapian、whoosh 全文搜索引擎。</p>
<p>solr和xapian是早就知道的，Whoosh就没听过了。简单的了解后感觉这东西还是非常不错的。whoosh是一个纯python实现的全文搜索引擎。对python应用而言，whoosh的纯python实现，使whoosh的集成会容易很多，而且扩展起来也会容易很多。</p>
<p>下面是对Whoosh官方简介的翻译</p>
<p><strong>原文地址</strong>：<a href="http://whoosh.ca/wiki">http://whoosh.ca/wiki</a> </p>
<p><strong>Whoosh: 高效的纯python全文搜索组件</strong> </p>
<p>Whoosh是一个纯python实现的全文搜索组件。Whoosh不但功能完善，还非常的快。 </p>
<p>Whoosh的作者是MattChaput，由Side Effects Software公司开发。项目的最初用于Houdini（Side Effects Software公司开发的3D动画软件）的在线帮助系统。Side Effects Software公司将该项目开源。 </p>
<p><strong>主要特性</strong></p>
<ul>
<li>敏捷的API（Pythonic API）。 </li>
<li>纯python实现，无二进制包。程序不会莫名其妙的崩溃。 </li>
<li>按字段进行索引。 </li>
<li>索引和搜索都非常的快 &#8212; 是目前最快的纯python全文搜索引擎。 </li>
<li>良好的构架，评分模块/分词模块/存储模块等各个模块都是可插拔的。 </li>
<li>功能强大的查询语言（通过pyparsing实现功能）。 </li>
<li>纯python实现的拼写检查（目前唯一的纯python拼写检查实现） </li>
</ul>
<p> <strong>为啥选择Whoosh</strong>
<ul>
<li>纯python实现，省了编译二进制包的繁琐过程。 </li>
<li>python代码比java更容易读懂，而且用起来也更方便。（翻者注：这个容易引发口水） </li>
<li>在很多时候易用性比单纯的最求速度更重要。 </li>
</ul>
<p> Whoosh从其他的开源搜索引擎中获取了大量的灵感。 基础构架参考Lucene，使用KinoSearch的索引算法，部分评分算法来自Terrier，英文的词语态变化来自Minion.   </p>
]]></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>4</slash:comments>
		</item>
		<item>
		<title>django的论坛app</title>
		<link>http://vik.haoluobo.com/blog/index.php/2009/12/django%e7%9a%84%e8%ae%ba%e5%9d%9bapp/</link>
		<comments>http://vik.haoluobo.com/blog/index.php/2009/12/django%e7%9a%84%e8%ae%ba%e5%9d%9bapp/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 14:34:29 +0000</pubDate>
		<dc:creator>vicalloy</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[lbforum]]></category>
		<category><![CDATA[pybb]]></category>

		<guid isPermaLink="false">http://vik.haoluobo.com/blog/index.php/2009/12/django%e7%9a%84%e8%ae%ba%e5%9d%9bapp/</guid>
		<description><![CDATA[在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代码。 后记 最后还是选择了完全从头进行开发。pybb里面可以用的东西不多，而且他的开发思路和我还是有些分歧。]]></description>
			<content:encoded><![CDATA[<p>在django的资源页面里有个第三方论坛app的比较页面<a href="http://code.djangoproject.com/wiki/ForumAppsComparison">Django Forum Apps Comparison</a>。一眼望过去，可用的app还不真不少，数下了有15个之多。但真正看下来，似乎很难找到一个让人满意的。</p>
<p>我对论坛app的要求是:</p>
<ol>
<li>得要自带一个还比较漂亮的界面模板。<br />
模板的开发工作在django应用的开发中占了很大的比重，甚至可能比写python代码花的时间还多。可惜的是很多的app应用甚至连个最基础的demo模板都没带。</li>
<li>最好支持Richeditor和BBCode。<br />
支持BBCode的app还是有几个的。Richeditor的支持基本上属于模板的范畴，参考条目1，似乎还没看到支持Richeditor的论坛（注：我没每个app都看，不能确定，pybb默认模板带了个Markup的编辑器）。</li>
<li>支持附件。<br />
国内的论坛应用大多偏娱乐，用户喜欢在自己的帖子里插入图片等东西。虽然可以再单独提供一个上传附件的组件，让用户上传后再在论坛里引用，但用户体验就要差不少了。</li>
</ol>
<p>既然找不到满意的app，那就只能自己动手做了。目前计划在pybb（注：pybb的许可协议没看太懂，似乎是类似BSD的）的基础上进行开发。目前的开发计划如下：</p>
<ol>
<li>先给项目换个新名字LBForum</li>
<li>换个漂亮些的模板（同时增加richeditor）<br />
考虑过不少模板。</p>
<ul>
<li>phpbb3 目前最流行的开源论坛程序，css和html写得很不错。但似乎有些复杂了，套用起来有些麻烦。</li>
<li>phpbb2/javaeye/jforum 这几论坛程序都长得差不多，UI应当都是参照phpbb2（javaeye的老大自己说了javaeye的界面就是仿phpbb3）来做的。其实也不能说这几个论坛的模板有什么不好。更多的是不喜欢里面过多的table。</li>
<li>discuz5 不是太喜欢discuz7的界面。discuz5（springside常用的那款界面）的界面感觉清爽些，但改了些后发现里面的html和css写的实在不怎么样。</li>
<li>fluxbb 目前打算用她的模板了。界面给人的感觉不错，html和css写得挺好。界面够简单，要套用模板应当不会太困难。</li>
</ul>
</li>
<li>增强附件功能<br />
虽然pybb提供了附件的支持，但功能还是比较弱。</li>
<li>增加一个公共的个人信息模块<br />
pybb已提供了一个保存用户个人信息的功能，但通常这些信息会是整个工程所共享的。我觉得这些信息还是单独放到一个专有的app里比较好。这个app可以以代码的方式包括的工程里，需要增加个人信息的时候直接修改model代码。</li>
</ol>
<h4>后记</h4>
<p>最后还是选择了完全从头进行开发。pybb里面可以用的东西不多，而且他的开发思路和我还是有些分歧。</p>
]]></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>
		</item>
	</channel>
</rss>
