无线互联网门户社区核心数据模型设计思考1

    根据典型的web2.0 sns门户社区,设计了无线互联网门户社区初步的核心数据模型。

    基本设计重点:

1、 以用户为中心,为用户提供综合性、一体化的社区体验

架构模型涵盖典型的web2.0社区的各种基本元素,包括:

  • 标签(tag)、标签云(tag cloud)
  • RSS(web订阅、邮件订阅、基于IM机器人的订阅)
  • IM
  • 用户群组
  • 微博客(twitter)、博客(Blog)
  • 点评(digg)、投票、话题、推荐、收藏夹
  • 用户点击行为分析(内容过滤、协同过滤)
  • 用户上传及分享
  • 社区搜索
  • Mashup(外部应用聚合)
  • 开放API

其中IM、用户关系链元素的设计在单独域模型中设计。

2、 基于真实关系链的无线互联网社区

    Facebook及国内诸如校内、海内这样SNS的无比风光,说明了基于相对真实关系链的价值。用户使用SNS的关注点大部分是希望维系和拓展现有的关系链,而不是重构关系链,因此SNS及IM不应当让用户抛弃现有的关系链去重新构造一个全新的关系链。要让用户导入现有的关系链到社区核心在于能够标识用户相对真实的身份及围绕此身份所形成的关系链。

    在互联网时代能够标识用户身份及用户关系链的东西包含如下一些:手机号码通信录、多IM通信录(QQ、MSN等联系人)、邮箱通信录。

    而号码同步+多IM协议集成及相关应用的结合,基本上涵盖了如上内容。

  • 手机号码通信录:客户端基于syncml协议的同步功能本身解决了此问题。
  • 多IM通信录:在用户使用客户端的多协议的IM功能登录QQ、MSN等IM时候,实际上无形之中就导入了其IM的联系人通信录
  • 邮箱通信录:通过Push Mail功能及RSS的邮件定于、绑定邮箱等功能就导入了邮箱通信录

3、 投其所好的过滤引擎

    门户社区成功最为核心的是用户体验。

   用户体验涉及方方面面,但一个与技术相关的至关重要的是能够根据用户的喜好、点击行为及消费行为,向用户推荐较为准确内容及好友。在设计上考虑了两种过滤引擎的实现需求,包括:基于内容的过滤(Content Based Filtering)、基于相似用户群体的兴趣的协同过滤(Collaborative Filtering)引擎。

    在数据模型设计上提供了多维度的数据采集数据采集方法,如Tag标签、Digg数、推荐、用户打分等等。

    构建无线互联网社区所必须的其他元素的架构及数据模型设计逻辑,继续考虑中。

手软门户域数据模型设计

 

无线互联网技术平台战略思考提纲

    梳理一下无线互联网门户技术平台战略的规划思路,先罗列一下思考的要点:

1、技术平台战略定位:开放式平台架构

    封闭内部系统 .VS. 开放式技术平台(Facebook)

    自主运营平台. VS. 协作生态系统 (WIKI、UGC)

    单一功能平台. VS. 产品整合营销平台(Facebook、QQ)

    功能性平台 . VS. 在线生活方式(Facebook、赛我、QQ)

 

2、技术平台价值最大化

    在搭建技术平台的同时,需要充分发挥技术平台的优势,使其价值最大化,包括:

    开发资源、开发成果的最大化:最大化复用平台架构、开发资源

    平台功能价值最大化:运营平台、营销平台、支付平台、社区平台

    价值链价值最大化:以开放式平台来整合整个无线互联网增值业务价值链,让价值链合作伙伴完全依赖平台

    用户价值最大化:为用户提供一体化的在线生活平台,成为最佳的整合营销平台

 

3、电信重组后的3G时代的三大运营商战略

    电信重组对于无线互联网公司、增值业务公司都属于利好。作为落后者的中国电信及中国联通要在数据业务、语音业务等3G业务上迅速赶上,需要更加关注与价值链上合作伙伴分享价值、实现共赢。

    在电信重组后的3G时代,能否理解、把握、踩准运营商的战略节拍对于我们这样的公司至关重要;同时必须有自己的核心的忠实用户群才能够游走于三大运营商之间,做到持续的运营。因此需要深刻理解运营商的需求及客户的需求。

    近期电信和联通核心的任务应该是发展用户,因此对于我们这样的公司而言,我们对他们的价值在于:

    业务通路价值:3G时代,增值业务肯定是各运营商的战略重点,这些业务的落地需要依赖价值链上具备通路价值的公司来协同完成。

    发展用户价值:对于电信及联通,固网竞争态势已经基本明朗,怎样快速扩大自己的忠实手机用户群是其战略重点,因此对于运营商而言,这些无线互联网公司及增值业务公司的价值是谁能够帮助其发展用户,尤其是帮助其策反竞争对手的高价值用户。通过基于口碑营销模式或关系链的策反是比较有效的手段。

    长期而言,必须积累我们自己核心的用户群,让用户粘在我们的社区平台上。

  

4、近期技术平台核心技术

    Syncml同步引擎:包括基于Syncml协议的客户端及服务器端同步引擎,另外wbxml这样的数据压缩技术还是很重要的

    VOIP:通信需求始终是手机用户最大的业务需求,3G时代IP、VOIP化更是趋势

    客户端:初期重点为Symbian、Windows Mobile、MTK、J2ME;Android、Linux、BlackBerry、IPhone

    多客户端协议整合:电信、联通、移动的客户端的整合,同时包括诸如QQ、MSN等传统IM客户端的整合。

 

Funambol Syncml J2ME版本客户端编译指南

简单描述一下安装测试funambol j2me客户端过程,过程只是用于测试j2me客户端功能,并没有考虑完整的项目应用,供参考备查。

1. 安装ant

从http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.zip下载ant

解压到c:\ant下

2. 安装antenna

从http://downloads.sourceforge.net/antenna/antenna-bin-1.0.2.jar下载antenna

拷贝到c:\ant\lib

3. 安装wtk

从http://cds-esd.sun.com/ESD36/JSCDL/sun_java_wireless_toolkit/2.5.2/sun_java_wireless_toolkit-2_5_2-windows.exe?AuthParam=1212392225_9f66723e80a5d5619add0637b1c54f9b&TicketId=B%2Fw5kByCTl9JSBVLP1dSlQHm&GroupName=CDS&FilePath=/ESD36/JSCDL/sun_java_wireless_toolkit/2.5.2/sun_java_wireless_toolkit-2_5_2-windows.exe

下载wkt并安装到c:\WTK2.5.2

4. 下载JMUnit

从http://jaist.dl.sourceforge.net/sourceforge/jmunit/JMUnit_1.0.1.zip下载JMUnit

解压后拷贝到C:\WTK2.5.2\bin及C:\WTK2.5.2\lib下

5. 在Eclipse中安装EclipseME

6. 从objectweb的cvs库获取funambol的j2me包

可以从http://download.forge.objectweb.org/sync4j/funambol-j2me-api-6.5.10.zip下载现成的funambol的j2me包

为了开发方便,从cvs库检出代码,自己编译

cvs库的信息:

认证方式:pserver

主机地址:cvs.forge.objectweb.org

用户名:anonymous

CVSROOT:anonymous@cvs.forge.objectweb.org:/cvsroot/sync4j

检出/funambol/client-api/j2me下的文件

7. 编译common包

7.1. 新建funambol-j2me-common项目

在eclipse中新建一个叫funambol-j2me-common的J2ME Midlet Suite项目,导入/funambol/client-api/j2me/common下的文件

由于没有安装BlackBerry的SDK,因此删除如下文件:

src/com/funambol/storage/BlackberryRecordStore.java

src/com/funambol/storage/BlackberryRecordEnumeration.java

src/com/funambol/util/BlackberryHelper.java

7.2. 修改build.properties

#

# Funambol J2ME API build properties file

#

j2me.name=funambol-j2me-common

j2me.release.major=7

j2me.release.minor=0

j2me.build.number=0

# Set this to your WTK installation, or copy the JAR to the local /lib

wtk.home=C:/WTK2.5.2

wtk.debug=false

# Set this to your JMunit installation, or copy the JAR to the local /lib

lib.junit=C:/WTK2.5.2/lib/JMUnit4CLDC10.jar

# Set this to your JZlib jar file, or copy the JAR to the local /lib

#lib.jzlib=lib/jzlib-1-0-7a.jar

lib.gzip=lib/tinyline-gzip.jar

7.3. 用ant运行build.xml

注意确保把antenna添加到ant的Classpath中,不采用eclipse自身的Ant Home

Run As ->Open External Tools Dialog->Ant Build->funambol-j2me-common->Classpath->Ant Home

7.4. 用EclipseME的工具创建package,以方便funambol-j2me-syncml项目编译使用

Right Button->J2ME->Create Package

生成的打包文件funambol-j2me-common.jar及funambol-j2me-common.jad存放在deployed目录下

8. 编译syncml包

8.1. 新建funambol-j2me-syncml项目

在eclipse中新建一个叫funambol-j2me-syncml的J2ME Midlet Suite项目,导入/funambol/client-api/j2me/syncml下的文件,再在funambol-j2me-syncml创建lib目录

8.2. 拷贝funambol-j2me-common文件

把funambol-j2me-common deploy目录下funambol-j2me-common.jar的文件拷贝到unambol-j2me-syncml的lib目录下

把funambol-j2me-common编译目录(假定为bin)下的文件拷贝到funambol-j2me-syncml的编译目录(假定为bin)下

8.3. 修改build.properties

#

# Funambol J2ME API build properties file

#

j2me.name=funambol-j2me-syncml

j2me.release.major=7

j2me.release.minor=0

j2me.build.number=0

# Set this to your WTK installation, or copy the JAR to the local /lib

wtk.home=C:/wtk2.5.2

wtk.debug=false

# Set this to your JMunit installation, or copy the JAR to the local /lib

lib.junit=C:/WTK2.5.2/lib/JMUnit4CLDC10.jar

# Uncomment this to refer to the output lib of your ‘common’ module, or copy

# the JAR to the local /lib

lib.funambol.common=${basedir}/lib/funambol-j2me-common.jar

8.4. 修改build.xml

将 <target name=”preprocess” depends=”init”>

<mkdir dir=”${dir.preproc.src}”/>

<wtkpreprocess srcdir=”${dir.src}”

destdir=”${dir.preproc.src}”

symbols=”${device.isBlackberry_plugin}”

verbose=”false” indent=”false”>

</wtkpreprocess>

</target>

修改为

<target name=”preprocess” depends=”init”>

<mkdir dir=”${dir.preproc.src}”/>

<wtkpreprocess srcdir=”${dir.src}”

destdir=”${dir.preproc.src}”

verbose=”false” indent=”false”>

</wtkpreprocess>

</target>

实际上就是删除symbols=”${device.isBlackberry_plugin}”

8.5. 在test目录下编写测试用的Midelet SyncMidlet.java

package com.funambol.syncml.client;

import java.util.Random;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.TextBox;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

import com.funambol.syncml.protocol.SyncML;

import com.funambol.syncml.spds.SourceConfig;

import com.funambol.syncml.spds.SyncConfig;

import com.funambol.syncml.spds.SyncManager;

import com.funambol.syncml.spds.SyncSource;

import com.funambol.util.Log;

public class SyncMidlet extends MIDlet {

private static final String STORE_NAME = “TESTCONFIG”;

private static final String SOURCE_NAME = “source.briefcase”;

private static final String URL = “http://localhost:8080/funambol/ds”;

private static final String userName=”liangchuan”;

private static final String password=”liangchuan”;

private Display display;

private TextBox t;

private SourceConfig sc;

private SyncConfig conf;

private SyncManager sm;

private TestSyncSource testsrc;

private TestSyncListener sl ;

public SyncMidlet() {

display = Display.getDisplay(this);

t = new TextBox(”Syncml Test MIDlet”, “Syncml Test MIDP!”, 256, 0);

}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

}

protected void pauseApp() {

display.setCurrent(t);

}

protected void startApp() throws MIDletStateChangeException {

sc = new SourceConfig();

conf = new SyncConfig();

conf.syncUrl = URL;

conf.userName =userName;

conf.password =password;

conf.deviceConfig.devID = generateDeviceId();

sc.setType(”text/plain”);

sc.setEncoding(SyncSource.ENCODING_NONE);

sm = new SyncManager(conf);

testsrc = new TestSyncSource(sc);

sl = new TestSyncListener();

testsrc.setListener(sl);

sm.sync(testsrc, SyncML.ALERT_CODE_SLOW);

display.setCurrent(t);

}

public String generateDeviceId() {

Random r = new Random();

StringBuffer s = new StringBuffer(”fsc-j2me-api-test-”);

s.append(Long.toString(System.currentTimeMillis(),16));

s.append(Integer.toHexString(r.nextInt()));

String deviceId = s.toString();

return deviceId;

}

}

8.6. 用ant运行build.xml的build[default]、compile、compiletest target

注意确保把antenna添加到ant的Classpath中,不采用eclipse自身的Ant Home

Run As ->Open External Tools Dialog->Ant Build->funambol-j2me-syncml->Classpath->Ant Home

8.7. 拷贝funambol-j2me-common classes文件用于打包

把funambol-j2me-common output/classses下的文件拷贝到funambol-j2me-syncml的编译目录(假定为bin)下

8.8. 拷贝funambol-j2me-syncml项目的文件用于打包

把funambol-j2me-syncml用ant编译目录out/classes下的文件拷贝到funambol-j2me-syncml的编译目录(假定为bin)下

8.9. 用EclipseME的工具创建package

Right Button->J2ME->Create Package

生成的打包文件funambol-j2me-syncml.jar及funambol-j2me-syncml.jad存放在deployed目录下

8.10. 修改funambol-j2me-syncml.jad

双击funambol-j2me-syncml.jad,在Midlets标签中增加MIDlet-1描述如下内容:

Name :SyncMidlet

Icon:无

Class:com.funambol.syncml.client.SyncMidlet

或者直接修改funambol-j2me-syncml.jad,增加

MIDlet-1: SyncMidlet,,com.funambol.syncml.client.SyncMidlet

8.11. 通过WTK测试的Run MIDP Application运行SyncMidlet

8.12. 使用EclipseME打包注意事项:

在用eclipseme打包时候,好像很不稳定,有时候不能把所有的文件打进包中,解决办法:

用手工把funambol-j2me-syncml/bin下的类文件(包括funambol-j2me-common的类)通过jar或winrar打入eclipseme生成的jar包中,同时手工编辑生成funambol-j2me-syncml.jad,修改MIDlet-Jar-Size,其中MIDlet-Jar-Size大小看funambol-j2me-syncml.jar文件属性得到

MIDlet-Jar-Size: 115491

MIDlet-Jar-URL: funambol-j2me-syncml.jar

MIDlet-Name: funambol-j2me-syncml Midlet Suite

MIDlet-Vendor: Midlet Suite Vendor

MIDlet-Version: 1.0.8

MicroEdition-Configuration: CLDC-1.1

MicroEdition-Profile: MIDP-2.0

MIDlet-Name: synctest Midlet Suite

MIDlet-1: SyncMidlet,,com.funambol.syncml.client.SyncMidlet