<?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>飞扬轻狂&#039;s blog</title>
	<atom:link href="http://blog.fallseir.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fallseir.com</link>
	<description>我心飞扬 我意轻狂</description>
	<lastBuildDate>Thu, 04 Mar 2010 10:06:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/><cloud domain='blog.fallseir.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>AIR Helloworld 2 ,使用 Ant 脚本打包AIR程序</title>
		<link>http://blog.fallseir.com/2010/03/air-helloworld-2-use-ant/</link>
		<comments>http://blog.fallseir.com/2010/03/air-helloworld-2-use-ant/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 10:04:44 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[helloworld]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=205</guid>
		<description><![CDATA[尝试多样化安装
== 安装并了解 Ant ==
Ant Helloworld 
- http://blog.fallseir.com/2010/03/ant-helloworld/
== 配置 Air Ant 样例 ==
1、移动文件到项目指定的位置
2、配置build.xml
# 设置SDK_HOME 为安装的Air的路径
3、测试helloworld
> ant test
4、生成数字签名
> ant keystore
# 密码设置为 samplePassword
5、打包项目
> ant package
# 在控制台输入数字签名密码 samplePassword
# air安装包 在release目录中
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
build.xml 文件内容
&#60;project&#62;
    &#60;!-- SDK properties --&#62;
    &#60;property name="SDK_HOME" value="D:\Program Files\Adobe\AdobeAIRSDK"/&#62;
    &#60;property name="ADL" value="${SDK_HOME}/bin/adl.exe"/&#62;
    &#60;property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/&#62; 

  [...]]]></description>
			<content:encoded><![CDATA[<p>尝试多样化安装<br />
== 安装并了解 Ant ==<br />
<a href="http://blog.fallseir.com/2010/03/ant-helloworld/">Ant Helloworld </a><br />
- http://blog.fallseir.com/2010/03/ant-helloworld/<br />
== 配置 Air Ant 样例 ==<br />
1、移动文件到项目指定的位置<br />
2、配置build.xml<br />
# 设置SDK_HOME 为安装的Air的路径<br />
3、测试helloworld<br />
> ant test<br />
4、生成数字签名<br />
> ant keystore<br />
# 密码设置为 samplePassword<br />
5、打包项目<br />
> ant package<br />
# 在控制台输入数字签名密码 samplePassword<br />
# air安装包 在release目录中<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
build.xml 文件内容</p>
<pre>&lt;project&gt;
    &lt;!-- SDK properties --&gt;
    &lt;property name="SDK_HOME" value="D:\Program Files\Adobe\AdobeAIRSDK"/&gt;
    &lt;property name="ADL" value="${SDK_HOME}/bin/adl.exe"/&gt;
    &lt;property name="ADT.JAR" value="${SDK_HOME}/lib/adt.jar"/&gt; 

    &lt;!-- Project properties --&gt;
    &lt;property name="PROJ_ROOT_DIR" value="."/&gt;
    &lt;property name="APP_NAME" value="helloworld"/&gt;
    &lt;property name="APP_ROOT_DIR" value="${PROJ_ROOT_DIR}/src/html"/&gt;
    &lt;property name="APP_ROOT_FILE" value="${APP_NAME}.html"/&gt;
    &lt;property name="APP_DESCRIPTOR" value="${PROJ_ROOT_DIR}/${APP_NAME}-app.xml"/&gt;
    &lt;property name="AIR_NAME" value="${APP_NAME}.air"/&gt;
    &lt;property name="release"  location="${PROJ_ROOT_DIR}/release"/&gt;
    &lt;property name="assets"  location="${PROJ_ROOT_DIR}/src/assets"/&gt;
    &lt;property name="STORETYPE" value="pkcs12"/&gt;
    &lt;property name="KEYSTORE" value="sampleCert.p12"/&gt; 

    &lt;target name="init" depends="clean"&gt;
        &lt;mkdir dir="${release}"/&gt;
    &lt;/target&gt; 

    &lt;target name="test"&gt;
        &lt;exec executable="${ADL}"&gt;
            &lt;arg value="${APP_DESCRIPTOR}"/&gt;
            &lt;arg value="${APP_ROOT_DIR}"/&gt;
        &lt;/exec&gt;
    &lt;/target&gt; 

    &lt;target name="keystore" depends="init"&gt;
        &lt;java jar="${ADT.JAR}" fork="true" failonerror="true"&gt;
            &lt;arg value="-certificate"/&gt;
            &lt;arg value="-cn"/&gt;
            &lt;arg value="SelfSigned"/&gt;
            &lt;arg value="1024-RSA"/&gt;
            &lt;arg value="sampleCert.p12"/&gt;
            &lt;arg value="samplePassword"/&gt;
        &lt;/java&gt;
    &lt;/target&gt; 

    &lt;target name="package" depends="init"&gt;
        &lt;java jar="${ADT.JAR}" fork="true" failonerror="true"&gt;
            &lt;arg value="-package"/&gt;
            &lt;arg value="-storetype"/&gt;
            &lt;arg value="${STORETYPE}"/&gt;
            &lt;arg value="-keystore"/&gt;
            &lt;arg value="${KEYSTORE}"/&gt;
            &lt;arg value="${release}/${AIR_NAME}"/&gt;
            &lt;arg value="${APP_DESCRIPTOR}"/&gt;
            &lt;arg value="-C"/&gt;
            &lt;arg value="${APP_ROOT_DIR}"/&gt;
            &lt;arg value="${APP_ROOT_FILE}"/&gt;
            &lt;arg value="-C"/&gt;
            &lt;arg value="${assets}"/&gt;
            &lt;arg value="icons"/&gt;
        &lt;/java&gt;
    &lt;/target&gt; 

    &lt;target name="clean" description="clean up"&gt;
        &lt;delete dir="${release}"/&gt;
    &lt;/target&gt; 

&lt;/project&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2010/03/air-helloworld-2-use-ant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ant Helloworld</title>
		<link>http://blog.fallseir.com/2010/03/ant-helloworld/</link>
		<comments>http://blog.fallseir.com/2010/03/ant-helloworld/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 08:21:10 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[shell]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[helloworld]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=216</guid>
		<description><![CDATA[使用Ant快速开始一个Helloworld程序
== 安装ant ==
1)、 下载最新版本的ant
2)、 安装ant
* 将ant安装包解压到安装目录
本文使用ant版本为 apache-ant-1.8.0
安装位置为 D:\Program Files\apache-ant-1.8.0
* 配置环境变量
添加变量 ANT_HOME = D:\Program Files\apache-ant-1.8.0
更新变量 PATH 在原有值后面添加 ;%ANT_HOME%\bin
* 测试
在命令行下输入 ant -v 查看ant版本
== 运行 Helloworld for java ==
* 编写 Helloworld.java
位置 E:\learn\ant\helloworld\src\oata\Helloworld.java

package oata;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

* [...]]]></description>
			<content:encoded><![CDATA[<p>使用Ant快速开始一个Helloworld程序</p>
<p>== 安装ant ==<br />
1)、 <a href="http://ant.apache.org/bindownload.cgi">下载</a>最新版本的ant<br />
2)、 安装ant<br />
* 将ant安装包解压到安装目录<br />
本文使用ant版本为 apache-ant-1.8.0<br />
安装位置为 D:\Program Files\apache-ant-1.8.0<br />
* 配置环境变量<br />
添加变量 ANT_HOME = D:\Program Files\apache-ant-1.8.0<br />
更新变量 PATH 在原有值后面添加 ;%ANT_HOME%\bin<br />
* 测试<br />
在命令行下输入 ant -v 查看ant版本<br />
== 运行 Helloworld for java ==<br />
* 编写 Helloworld.java<br />
位置 E:\learn\ant\helloworld\src\oata\Helloworld.java</p>
<pre>
package oata;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
</pre>
<p>* 编译并运行HelloWorld程序</p>
<pre>
# 创建目标路径
> mkdir \a build\classes
# 编译java源文件
> javac -sourcepath src -d build\classes src\oata\HelloWorld.java
# 执行helloworld程序
> java -cp build\classes oata.HelloWorld
# 构建 jar 文件
## 创建 jar 描述文件
> echo Main-Class: oata.HelloWorld>myManifest
## 打包jar文件
> mkdir build\jar
> jar cvfm build\jar\HelloWorld.jar myManifest -C build\classes .
## 通过jar 文件运行 helloworld 程序
> java -cp build\jar\HelloWorld.jar oata.HelloWorld
</pre>
<p>== 使用 ant 脚本 编译并执行 helloworld 程序 ==<br />
- E:\learn\ant\helloworld\build.xml</p>
<pre class="code">&lt;project&gt;
    &lt;target name="clean"&gt;
        &lt;delete dir="build"/&gt;
    &lt;/target&gt;
    &lt;target name="compile"&gt;
        &lt;mkdir dir="build/classes"/&gt;
        &lt;javac srcdir="src" destdir="build/classes"/&gt;
    &lt;/target&gt;
    &lt;target name="jar"&gt;
        &lt;mkdir dir="build/jar"/&gt;
        &lt;jar destfile="build/jar/HelloWorld.jar" basedir="build/classes"&gt;
            &lt;manifest&gt;
                &lt;attribute name="Main-Class" value="oata.HelloWorld"/&gt;
            &lt;/manifest&gt;
        &lt;/jar&gt;
    &lt;/target&gt;
    &lt;target name="run"&gt;
        &lt;java jar="build/jar/HelloWorld.jar" fork="true"/&gt;
    &lt;/target&gt;
&lt;/project&gt;
</pre>
<p>* 执行Ant脚本</p>
<pre>
# 执行ant脚本，编译打包并运行helloworld程序
> ant compile jar run
# 查看Ant项目中可用的Target
> ant -p
</pre>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
== 优化后的Ant脚本 ==</p>
<pre class="code">&lt;project name="HelloWorld" basedir="." default="main"&gt;
    &lt;property name="src.dir"     value="src"/&gt;
    &lt;property name="build.dir"   value="build"/&gt;
    &lt;property name="classes.dir" value="${build.dir}/classes"/&gt;
    &lt;property name="jar.dir"     value="${build.dir}/jar"/&gt;
    &lt;property name="main-class"  value="oata.HelloWorld"/&gt;
    &lt;target name="clean"&gt;
        &lt;delete dir="${build.dir}"/&gt;
    &lt;/target&gt;
    &lt;target name="compile"&gt;
        &lt;mkdir dir="${classes.dir}"/&gt;
        &lt;javac srcdir="${src.dir}" destdir="${classes.dir}"/&gt;
    &lt;/target&gt;
    &lt;target name="jar" depends="compile"&gt;
        &lt;mkdir dir="${jar.dir}"/&gt;
        &lt;jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"&gt;
            &lt;manifest&gt;
                &lt;attribute name="Main-Class" value="${main-class}"/&gt;
            &lt;/manifest&gt;
        &lt;/jar&gt;
    &lt;/target&gt;
    &lt;target name="run" depends="jar"&gt;
        &lt;java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/&gt;
    &lt;/target&gt;
    &lt;target name="clean-build" depends="clean,jar"/&gt;
    &lt;target name="main" depends="clean,run"/&gt;
&lt;/project&gt;
</pre>
<p>参考:<a href="http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html">Hello World with Ant</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2010/03/ant-helloworld/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AIR Helloworld</title>
		<link>http://blog.fallseir.com/2010/03/air-helloworld/</link>
		<comments>http://blog.fallseir.com/2010/03/air-helloworld/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 09:42:29 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[helloworld]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=197</guid>
		<description><![CDATA[使用AIR快速开始一个Helloworld程序
关键步骤：
1、安装AIR环境
2、安装SDK
3、构建Helloworld项目
4、安装并测试Helloworld项目
==========================================
具体细节：
1、安装AIR环境
* 到Adobe下载AIR环境
* 安装AIR环境 ，本文使用的是 Adobe AIR 1.5.3.9130 版本
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
2、安装SDK
* 到Adobe下载SDK
* 将下载到的SDK包解压并放置到运行目录
本文下载的SDK版本为 adt version &#8220;1.5.3.9120&#8243;
本文SDK安装目录为 D:\Program Files\Adobe\AdobeAIRSDK
* 配置环境变量 将AIR SDK的工作路径添加到 PATH 变量中，（使adt和adl可以在任意目录以短路径方式启动）
PATH = [... 保持原有的PATH值不变];D:\Program Files\Adobe\AdobeAIRSDK\bin
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
3、构建Helloworld项目
* 创佳Helloworld项目
1)、创建Helloworld目录
本文全路径为 e:\learn\AIR\Helloworld
进入 Helloworld ，开始构建 helloworld 应用
除非明确说明 否则之后描述的文件和路径都是相对于此路径开始
2)、创建项目描述文件 HelloWorld-app.xml

&#60;?xml version="1.0" encoding="UTF-8"?&#62;
&#60;application xmlns="http://ns.adobe.com/air/application/1.5"&#62;
    &#60;id&#62;examples.html.HelloWorld&#60;/id&#62;
    &#60;version&#62;0.1&#60;/version&#62;
    &#60;filename&#62;HelloWorld&#60;/filename&#62;
    &#60;initialWindow&#62;
     [...]]]></description>
			<content:encoded><![CDATA[<p>使用AIR快速开始一个Helloworld程序</p>
<p>关键步骤：<br />
1、安装AIR环境<br />
2、安装SDK<br />
3、构建Helloworld项目<br />
4、安装并测试Helloworld项目<br />
==========================================<br />
具体细节：<br />
1、安装AIR环境<br />
* 到Adobe<a href="http://get.adobe.com/cn/air/">下载</a>AIR环境<br />
* 安装AIR环境 ，本文使用的是 Adobe AIR 1.5.3.9130 版本<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
2、安装SDK<br />
* 到Adobe<a href="http://www.adobe.com/cn/products/air/tools/sdk/">下载</a>SDK<br />
* 将下载到的SDK包解压并放置到运行目录<br />
本文下载的SDK版本为 adt version &#8220;1.5.3.9120&#8243;<br />
本文SDK安装目录为 D:\Program Files\Adobe\AdobeAIRSDK<br />
* 配置环境变量 将AIR SDK的工作路径添加到 PATH 变量中，（使adt和adl可以在任意目录以短路径方式启动）<br />
PATH = [... 保持原有的PATH值不变];D:\Program Files\Adobe\AdobeAIRSDK\bin<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
3、构建Helloworld项目<br />
* 创佳Helloworld项目<br />
1)、创建Helloworld目录<br />
本文全路径为 e:\learn\AIR\Helloworld<br />
进入 Helloworld ，开始构建 helloworld 应用<br />
除非明确说明 否则之后描述的文件和路径都是相对于此路径开始<br />
2)、创建项目描述文件 HelloWorld-app.xml</p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;application xmlns="http://ns.adobe.com/air/application/1.5"&gt;
    &lt;id&gt;examples.html.HelloWorld&lt;/id&gt;
    &lt;version&gt;0.1&lt;/version&gt;
    &lt;filename&gt;HelloWorld&lt;/filename&gt;
    &lt;initialWindow&gt;
        &lt;content&gt;HelloWorld.html&lt;/content&gt;
        &lt;visible&gt;true&lt;/visible&gt;
        &lt;width&gt;400&lt;/width&gt;
        &lt;height&gt;200&lt;/height&gt;
    &lt;/initialWindow&gt;
&lt;/application&gt;
</pre>
<p>3)、创建应用界面 HelloWorld.html</p>
<pre>
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Hello World&lt;/title&gt;
    &lt;script type="text/javascript" src="AIRAliases.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;
        function appLoad(){
            air.trace("Hello World");
        }
    &lt;/script&gt; 

&lt;/head&gt;
&lt;body onLoad="appLoad()"&gt;
    &lt;h1&gt;Hello World&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>4)、测试应用<br />
* 打开 cmd 并 cd 进入应用目录<br />
* 运行命令 adl HelloWorld-app.xml<br />
* > 系统将调用AIR运行时，启动一个400&#215;200的窗口应用并呈现Helloworld字符<br />
* > 系统在控制台输出 Hello World 字符<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
4、安装并测试Helloworld项目<br />
1)、生成自签名证书和密钥对<br />
* 运行命令 adt –certificate -cn SelfSigned 1024-RSA sampleCert.pfx samplePassword<br />
* 系统将在当前目录生成密钥文件 sampleCert.pfx<br />
2)、创建 AIR 安装文件<br />
* 运行命令 adt -package -storetype pkcs12 -keystore sampleCert.pfx HelloWorld.air<br />
HelloWorld-app.xml HelloWorld.html AIRAliases.js<br />
* 根据系统提示输入密钥文件的密码 samplePassword<br />
* 系统将根据 helloworld-app.xml 的描述生成AIR应用程序，并将helloworld.html 和 airaliases.js 当作附加资源嵌入AIR应用程序中<br />
3)、安装 Helloworld 应用<br />
* 双击 helloworld.air 或在命令行下执行 hellowrold.air 命令<br />
* 系统调用本地的air运行时环境解释helloworld.air并开始应用安装<br />
* 根据系统提示进行安装<br />
4)、当安装完成后，通过双击helloworld的快捷方式或到安装目录打开helloworld.exe 即可运行helloworld应用<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
参考：<br />
* <a href="http://help.adobe.com/zh_CN/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7ecc.html">使用 AIR SDK 创建第一个基于 HTML 的 AIR 应用程序</a>http://help.adobe.com/zh_CN/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7ecc.html<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
资源：<br />
* <a href="http://help.adobe.com/zh_CN/AIR/1.5/devappshtml/">使用 HTML 和 Ajax 开发 Adobe AIR 1.5 应用程序</a><br />
* <a href="http://help.adobe.com/zh_CN/AIR/1.5/jslr/index.html">针对 HTML 开发人员的 AIR 语言参考</a><br />
*  <a href="http://livedocs.adobe.com/flex/3_cn/langref/index.html">Flex 3.2 语言参考</a><br />
* <a href="http://www.adobe.com/cn/devnet/air/">Adobe AIR 开发人员中心</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2010/03/air-helloworld/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于CRM的认知</title>
		<link>http://blog.fallseir.com/2010/02/about_crm/</link>
		<comments>http://blog.fallseir.com/2010/02/about_crm/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 11:28:44 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[飞扬的认知]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=176</guid>
		<description><![CDATA[简单来说 CRM 就是通过同客户的交互对客户信息进行收集，并围绕对客户行为分析进行经营的策略。
CRM系统只是用于完成CRM的一个工具，前端的界面只是表象，卖点也许应该更直接的围绕这个工具
能直接或间接的为企业带来多少利润和加强了多少客户体验。]]></description>
			<content:encoded><![CDATA[<p>&#8211; 飞扬的认知,2010-02-21, http://blog.fallseir.com/2010/02/about_crm</p>
<p>一、什么是CRM<br />
     CRM（Customer Relationship Management）客户关系管理<br />
     CRM 是一个围绕客户为中心的，通过IT手段，来增进客户沟通，提升客户关怀，从而影响客<br />
户决策，并最终达到创利目的的企业经营策略。<br />
其中的IT手段，通常指通过CRM系统来收集、分析和反馈客户行为数据，来更便利的实现同客户<br />
的沟通和更有效的进行客户行为分析。</p>
<p>二、CRM 的组成<br />
     通常的CRM系统包含客户交互和行为分析两大部分。<br />
1、客户交互<br />
     用于收集客户信息，记录客户行为日志，及对进行客户关怀和解答客户提问；<br />
     客户交互系统由电话呼叫中心(CTI)、短信(SMS)、邮件(EMAIL)、线上应用(WEB Site)、<br />
及即时通讯(IM)等一切可能的方式整合在一起来实现同用户的交互，并收集用户行为。</p>
<p>2、行为分析<br />
     结合业务逻辑对客户行为日志进行分析，来为客户提供更具针对性的客户关怀；<br />
     通过对客户群体的行为日志进行统计，来评估往期的业务效果和指导未来的产品决策。</p>
<p>三、CRM 系统的成本<br />
1、系统支持的交互平台、方式和规模<br />
    不同的交互平台（CTI、SMS、EMail、WEB Site、IM、&#8230;）及平台上的不同的实现方式（<br />
人工客服、自助服务、主题活动、客户交流、客户关怀、&#8230;） 会有不同的效果的成本。<br />
例如，一个极端的例子是一部电话通过全人工实现的电话客服和通过CTI实现的带有自助服务的<br />
电话呼叫中心都被称作客服电话，用于进行客户服务和客户关怀。<br />
2、系统支持的行为分析策略、数量和数据量级<br />
    分析策略需要根据不同的业务逻辑和客户行为数据进行定制，策略的个数和分析的行为数据量级<br />
会对严重的影响到系统的结构和组织方式。<br />
比如，从100条售后客户行为中找到来自北京的有跨地域维修记录的用户要比从1,000,000条客户<br />
行为中分析更容易（大数据量的查找需要进行预处理才能达到可以接受的速度）。</p>
<p>四、CRM 系统的实施的前提<br />
1、了解当前业务环境，分析业务领域并确认需求方向，规模<br />
2、客观描述当前IT环境，以便系统可以尽可能的整合现有IT资源<br />
3、确认需求和远景，确定必要的需求和可能的需求（圈地和画饼）</p>
<p>简单来说 CRM 就是通过同客户的交互对客户信息进行收集，并围绕对客户行为分析进行经营的策略。<br />
CRM系统只是用于完成CRM的一个工具，前端的界面只是表象，卖点也许应该更直接的围绕这个工具<br />
能直接或间接的为企业带来多少利润和加强了多少客户体验。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2010/02/about_crm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>笔记:安装FreeBSD &amp; 应用</title>
		<link>http://blog.fallseir.com/2009/06/freebsd_install/</link>
		<comments>http://blog.fallseir.com/2009/06/freebsd_install/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 13:13:29 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[shell]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=144</guid>
		<description><![CDATA[freebsd 7.2
根据提示进行安装 并选择最小安装
在进行系统配置时
* 关闭ssh外的所有服务
* 配置ip地址 配置时区
* 添加普通用户用来远程连接ssh,设置组为 wheel 这样可以使用su访问root
* 设置管理员密码
开启用户的su权限，使用su命令的用户必须存在与wheel组中
# pw groupmod wheel -m username
检查用户是否正确的添加到组中
# pw groupshow wheel
mount cdrom  映射光驱
# ll /dev/acd*
> acd0t01
# cd /cdrom
# touch   CDROM-NOT-mounted-mcd.txt
# mount -t cd9660 /dev/acd0t01 /cdrom
- python
安装python
# cd /cdrom/packages
# pkg_add -p/home/app/python25 /cdrom/packages/python/python25-2.5.4_1.tbz
映射命令
# ln -s /home/app/python25/bin/python /usr/local/bin/python
&#8211; require
bsddb          [...]]]></description>
			<content:encoded><![CDATA[<p>freebsd 7.2<br />
根据提示进行安装 并选择最小安装<br />
在进行系统配置时<br />
* 关闭ssh外的所有服务<br />
* 配置ip地址 配置时区<br />
* 添加普通用户用来远程连接ssh,设置组为 wheel 这样可以使用su访问root<br />
* 设置管理员密码</p>
<p>开启用户的su权限，使用su命令的用户必须存在与wheel组中<br />
# pw groupmod wheel -m username<br />
检查用户是否正确的添加到组中<br />
# pw groupshow wheel</p>
<p>mount cdrom  映射光驱<br />
# ll /dev/acd*<br />
> acd0t01<br />
# cd /cdrom<br />
# touch   CDROM-NOT-mounted-mcd.txt<br />
# mount -t cd9660 /dev/acd0t01 /cdrom</p>
<p>- python<br />
安装python<br />
# cd /cdrom/packages<br />
# pkg_add -p/home/app/python25 /cdrom/packages/python/python25-2.5.4_1.tbz<br />
映射命令<br />
# ln -s /home/app/python25/bin/python /usr/local/bin/python<br />
&#8211; require<br />
bsddb           databases/py-bsddb<br />
gdbm            databases/py-gdbm<br />
sqlite3         databases/py-sqlite3<br />
tkinter         x11-toolkits/py-tkinter</p>
<p># pkg_add -p/home/app/sqlite3 /cdrom/packages/databases/sqlite3-3.6.11.tbz<br />
映射错误的链接库<br />
# ln -s /home/app/sqlite3/lib/libsqlite3.so.8 /usr/local/lib/libsqlite3.so.8<br />
# cd /usr/local/lib/<br />
# ln -s libsqlite3.so.8 libsqlite3.so<br />
映射命令<br />
# ln -s /home/app/sqlite3/bin/sqlite3 /usr/local/bin/sqlite3</p>
<p>- emacs 安装emacs编辑器<br />
# pkg_add -p/home/app/emacs /cdrom/packages/editors/emacs-22.3.tbz<br />
# ln -s /home/app/emacs/bin/emacs /usr/local/bin/emacs</p>
<p>解除绑定的光驱<br />
#umount   /cdrom</p>
<p>注：通过pkg_add 自动获取安装包<br />
# pkg_add -r python<br />
-r 选项将导致pkg程序自动从配置的packages网络镜像获取指定应用最新的安装包</p>
<p>[:p] &#8211;飞扬.轻狂 [fallseir.lee]</p>
<p>http://fallseir.livejournal.com</p>
<p>http://feed.feedsky.com/fallseir</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2009/06/freebsd_install/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php的多分支控制</title>
		<link>http://blog.fallseir.com/2009/04/php_more_ifelse/</link>
		<comments>http://blog.fallseir.com/2009/04/php_more_ifelse/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 06:57:32 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[小代码]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=129</guid>
		<description><![CDATA[php的多分支控制
&#8211; 原文 (飞扬轻狂,fallseir) 20090427
==== php的多分支控制 ====
### if 方式 实现多分支控制

if(runStep(1)){
  if(runStep(2)){
    if(runStep(3)){
      # all steps are success!!
    }else{
	# step 03 is failed!
    }
  }else{
    # step 03 is failed!
  }
}else{
  # step 03 is failed!
}

# [...]]]></description>
			<content:encoded><![CDATA[<p>php的多分支控制<br />
&#8211; <a href="http://blog.fallseir.com/2009/04/php_more_ifelse/">原文</a> (飞扬轻狂,fallseir) 20090427<br />
==== php的多分支控制 ====<br />
### if 方式 实现多分支控制</p>
<pre>
if(runStep(1)){
  if(runStep(2)){
    if(runStep(3)){
      # all steps are success!!
    }else{
	# step 03 is failed!
    }
  }else{
    # step 03 is failed!
  }
}else{
  # step 03 is failed!
}

# some others steps
</pre>
<p>### if 方式 2 实现多分支控制</p>
<pre>
$r=0;
if(runStep(1))
  if(runStep(2))
    if(runStep(3))
    else $r=3;
  else $r=2;
else $r=1;
if($r){
  # step $r is failed!
  return false;
}

# some others steps
</pre>
<p>### do..while(false) 方式 2 实现多分支控制</p>
<pre>
do{
  if(!runStep(1)) # step 01 is failed!
  break;
  if(!runStep(2)) # step 02 is failed!
  break;
  if(!runStep(3)) # step 03 is failed!
  break;
  # all steps are success!!
}while(false);

# some others steps
</pre>
<p>### switch(true) 方式 2 实现多分支控制</p>
<pre>
switch(true){
  case !runStep(1):
	# step 01 is failed!
	break;
  case !runStep(2):
	# step 02 is failed!
	break;
  case !runStep(3):
	# step 03 is failed!
	break;
  default:
	# all steps are success!!
    break;
}

# some others steps
</pre>
<p>### try..catch 方式实现</p>
<pre>
try{
  if(!runStep(1)) throw new SomeError(1); # step 01 is failed!
  if(!runStep(2)) throw new SomeError(2); # step 02 is failed!
  if(!runStep(3)) throw new SomeError(3); # step 01 is failed!
  # all steps are success!!
}catch(SomeError $ex){
  # step $ex is failed!
  return false;
}
# some others steps
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2009/04/php_more_ifelse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用反射 实现的 简单的 单元测试框架</title>
		<link>http://blog.fallseir.com/2009/04/php_simple_unit_test/</link>
		<comments>http://blog.fallseir.com/2009/04/php_simple_unit_test/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 06:37:06 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[unit test]]></category>
		<category><![CDATA[小代码]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=127</guid>
		<description><![CDATA[使用反射 实现的 简单的 单元测试框架
&#8211; 原文 (飞扬轻狂,fallseir) 20090427
==== generalized test methods use introspection ====

class customClass{
  function selfTest(){[..] return [message&#124;false]}
}
class tester{
  function test($thing){
    if(is_object($thing)){
      if(method_exists($thing,'selfTest')){
        $this->handleTest(call_user_method('selfTest',$thing));
      }
    }else if(is_array($thing)){
    [...]]]></description>
			<content:encoded><![CDATA[<p>使用反射 实现的 简单的 单元测试框架<br />
&#8211; <a href="http://blog.fallseir.com/2009/04/php_simple_unit_test/">原文</a> (飞扬轻狂,fallseir) 20090427<br />
==== generalized test methods use introspection ====</p>
<pre>
class customClass{
  function selfTest(){[..] return [message|false]}
}
class tester{
  function test($thing){
    if(is_object($thing)){
      if(method_exists($thing,'selfTest')){
        $this->handleTest(call_user_method('selfTest',$thing));
      }
    }else if(is_array($thing)){
      foreach($thing as $component){ $this->test($component); }
    }else{
    ;//ignore if not an array or object
    }
  }
  function handleTest($result){if($result)print "Warning $result";}
}
</pre>
<p>参考:<br />
John.Wiley.and.Sons.PHP5.and.MySQL.Bible</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2009/04/php_simple_unit_test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feed点击广告开始测试</title>
		<link>http://blog.fallseir.com/2009/04/feedadtest/</link>
		<comments>http://blog.fallseir.com/2009/04/feedadtest/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 10:51:57 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[feedsky]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=122</guid>
		<description><![CDATA[测试FEED 点击广告

feedsky
 提供的内嵌式 feed 点击广告开始测试了 
发篇文章来测试 多少个阅读器中可以看到它.. 
]]></description>
			<content:encoded><![CDATA[<p>测试FEED 点击广告<br />
<img src="http://blog.fallseir.com/wp-content/uploads/feedad.jpg" alt="feedad" title="feedad" width="442" height="161" class="alignnone size-full wp-image-123" /></p>
<p><a href="http://www.feedsky.com">feedsky</a><br />
 提供的内嵌式 feed 点击广告开始测试了 </p>
<p>发篇文章来测试 多少个阅读器中可以看到它.. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2009/04/feedadtest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>构建我的行事历 之一</title>
		<link>http://blog.fallseir.com/2009/01/gtd-0/</link>
		<comments>http://blog.fallseir.com/2009/01/gtd-0/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 11:55:09 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[行事历]]></category>
		<category><![CDATA[GTD]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=115</guid>
		<description><![CDATA[虽然一直在网上 但好久不在意网络了
在google reader中看到大家在议论GTD
好炫的名字啊 我都不知道这个是什么东西 （囧～ 亏你还是做IT的呢）
赶快去下了本《尽管去做&#8211;无压工作的艺术》瞧了下
看了头一章 就上来把自己的想法先记下来 免得时间久就丢了
 （晕死，WP竟然上传图片有问题&#8230; 算了懒得去看是什么原因了 ）
上面是一张简图 描述了大脑的思维和行事历之间的关系（偶自己的理解，和书中可能不大相同，我才看了一章&#8230;）
1、这里把所有不能决定的和没有决定的事情都称作 待办事项
2、在空闲或计划处理待办事项的时间对存在于待办列表中的事情进行 转化
3、觉得没有必要的就直接划掉丢弃
4、短时间内能完成的就直接 执行 处理了
5、需要长时间处理的就放在计划列表中根据优先级排序
6、不能判断的就继续留在待办列表里
7、设定一个提醒装置 到期进行提醒（比如短信、Mail或及时聊天工具中的消息）
8、当有突然出现的事情发生时，直接将它们记录为待办事情（不丢失又最少的影响当前的事情）
9、当有高优先级的任务需要处理时，暂停当前执行的事情并在行事历中标注，着手转化这个插进来的任务
通过这种方式最大限度的让大脑中只考虑当前执行中的事情 而不需要因为考虑其他的事情而分神
并把零散的随机出现的待办事项集中处理
从上面的内容可以看到 当前只是解决了思维被占用和干扰的问题，但并没有提出对因工作边界模糊，需求不定而产生的问题的解决方式，也问题被集中到了转化部分
参考:
GTD,Getting Things Done
《Getting Thing Done &#8211; The Art of Stress-Free Productivity》 &#8212; David Allen
]]></description>
			<content:encoded><![CDATA[<p>虽然一直在网上 但好久不在意网络了<br />
在google reader中看到大家在议论GTD<br />
好炫的名字啊 我都不知道这个是什么东西 （囧～ 亏你还是做IT的呢）<br />
赶快去下了本《尽管去做&#8211;无压工作的艺术》瞧了下<br />
看了头一章 就上来把自己的想法先记下来 免得时间久就丢了</p>
<p><a href="http://www.flickr.com/photos/fallseir/3211871495/" title="GTD-行事历 by fallseir lee, on Flickr"><img src="http://farm4.static.flickr.com/3113/3211871495_8a723d8f31.jpg" width="500" height="374" alt="GTD-行事历" /></a> （晕死，WP竟然上传图片有问题&#8230; 算了懒得去看是什么原因了 ）</p>
<p>上面是一张简图 描述了大脑的思维和行事历之间的关系（偶自己的理解，和书中可能不大相同，我才看了一章&#8230;）<br />
1、这里把所有不能决定的和没有决定的事情都称作 待办事项<br />
2、在空闲或计划处理待办事项的时间对存在于待办列表中的事情进行 转化<br />
3、觉得没有必要的就直接划掉丢弃<br />
4、短时间内能完成的就直接 执行 处理了<br />
5、需要长时间处理的就放在计划列表中根据优先级排序<br />
6、不能判断的就继续留在待办列表里<br />
7、设定一个提醒装置 到期进行提醒（比如短信、Mail或及时聊天工具中的消息）<br />
8、当有突然出现的事情发生时，直接将它们记录为待办事情（不丢失又最少的影响当前的事情）<br />
9、当有高优先级的任务需要处理时，暂停当前执行的事情并在行事历中标注，着手转化这个插进来的任务<br />
通过这种方式最大限度的让大脑中只考虑当前执行中的事情 而不需要因为考虑其他的事情而分神<br />
并把零散的随机出现的待办事项集中处理</p>
<p>从上面的内容可以看到 当前只是解决了思维被占用和干扰的问题，但并没有提出对因工作边界模糊，需求不定而产生的问题的解决方式，也问题被集中到了转化部分</p>
<p>参考:<br />
GTD,Getting Things Done<br />
《Getting Thing Done &#8211; The Art of Stress-Free Productivity》 &#8212; David Allen</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2009/01/gtd-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>谨慎的在c++中使用cin进行交互</title>
		<link>http://blog.fallseir.com/2008/10/note_std_cin/</link>
		<comments>http://blog.fallseir.com/2008/10/note_std_cin/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 09:34:28 +0000</pubDate>
		<dc:creator>飞扬轻狂</dc:creator>
				<category><![CDATA[随笔]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[cin]]></category>
		<category><![CDATA[fallseir]]></category>
		<category><![CDATA[learn]]></category>

		<guid isPermaLink="false">http://blog.fallseir.com/?p=107</guid>
		<description><![CDATA[在使用c++ 进行控制台交互时 也许你也容易忽略掉的细节
&#8211; 飞扬轻狂 20081024 fallseir[at]gmail.com
http://blog.fallseir.com/2008/10/note_std_cinnote_std_cin/
注意1： &#8221; cin >> value &#8221; 没有正确的读取换行
注意2： 不匹配的类型 将导致输入流错误 而在其后的调用中自动返回
注意3： 空字符 在使用 >> 赋值给变量时将自动过滤 直到读入非空字符为止
出错的代码 ！！

$ vim 02-05-BasicIO-err.cpp
---------------------------------------------
#include 
using namespace std;
int main( int argc, char *argv[] ){
  int num;
  string str,line;

  cout > num;
  cout > str;
  cout ]]></description>
			<content:encoded><![CDATA[<p>在使用c++ 进行控制台交互时 也许你也容易忽略掉的细节</p>
<p>&#8211; 飞扬轻狂 20081024 fallseir[at]gmail.com</p>
<p>http://blog.fallseir.com/2008/10/note_std_cinnote_std_cin/</p>
<p>注意1： &#8221; cin >> value &#8221; 没有正确的读取换行<br />
注意2： 不匹配的类型 将导致输入流错误 而在其后的调用中自动返回<br />
注意3： 空字符 在使用 >> 赋值给变量时将自动过滤 直到读入非空字符为止</p>
<p>出错的代码 ！！</p>
<pre>
$ vim 02-05-BasicIO-err.cpp
---------------------------------------------
#include <iostream>
using namespace std;
int main( int argc, char *argv[] ){
  int num;
  string str,line;

  cout << "Please enter a number:" ;
  cin >> num;
  cout << "Please enter a text :" ;
  cin >> str;
  cout << "Please enter some words :" ;
  getline( cin, line );

  cout << endl;
  cout << "number : " << num << endl;
  cout << "text : " << str << endl;
  cout << "some words : " << line << endl;

  return 0;
}
---------------------------------------------
$ g++ 02-05-BasicIO-err.cpp
$ a.out # 貌似正确的输入
----------------
Please enter a number:12<enter>
Please enter a text :message<enter>
Please enter some words :
number : 12
text : message
some words :
----------------
/*
 分析原因：
 第二次输入 "message" 的时候 自动过滤前次的<enter> 并得到了正确的值
 getline 的时候 因为输入流中还有一个 <enter> 没有被读取 所以没有等待用户输入，直接返回了
 */
--------------------
$ a.out # 貌似正确的结果
----------------
Please enter a number:13 message some words in the line <enter>
Please enter a text <img src='http://blog.fallseir.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> lease enter some words :
number : 13
text : message
some words :  some words in the line
----------------
/*
 分析原因：
 cin >> str 的时候 从流中读取了 "message"
 getline 的时候 读取了流中剩下的内容
 */
--------------------
$ a.out # 错误的开始
----------------
Please enter a number:a
Please enter a text <img src='http://blog.fallseir.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> lease enter some words :
number : 6696948
text :
some words :
----------------
/*
 分析原因：
 cin >> num 的时候 从流中读取了不匹配的数据 "a" ，cin 进入异常状态
 cin >> str 和 getline 的时候 因为流异常 所以没有进行读取
 */
--------------------
</pre>
<p>优化的严谨的代码</p>
<pre>
$ vim 02-05-BasicIO.cpp
---------------------------------------------
#include <iostream>
using namespace std;
int main( int argc, char *argv[] ){
  int num;
  string str,line;
  string tmp;

  cout << "Please enter a number:" ;
  cin >> num;
  while(cin.fail()){ // 如果出现错误
    cin.clear(); // 清除错误
    getline(cin,tmp); // 清除缓存
    cerr << "Error input!!,Please try again" << endl;
    cin >> num;
  }
  getline(cin,tmp); // 使用getline清除缓存，因为 >> 操作符不会对末尾的 <enter> 进行读取 

  cout << "Please enter a text :" ;
  cin >> str;
  getline(cin,tmp);

  cout << "Please enter some words :" ;
  getline( cin, line );
  cout << endl;
  cout << "number : " << num << endl;
  cout << "text : " << str << endl;
  cout << "some words : " << line << endl;

  return 0;
}

---------------------------------------------
----------------
$ a.out
----------------
Please enter a number:123 message test words!
Please enter a text :word and message
Please enter some words :some words in the line!

number : 123
text : word
some words : some words in the line!
----------------
</pre>
<p>-- </p>
<p>http://blog.fallseir.com/2008/10/note_std_cinnote_std_cin/</p>
<p>飞扬轻狂<br />
fallseir[at]gmail.com<br />
blog.fallseir.com<br />
2008年10月24日<br />
转载请注明</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fallseir.com/2008/10/note_std_cin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
