Archive for the 'web2.0-无线互联网' Category


在线主题制作技术实现方案

    在做门户社区实现中,有类似魔秀(http://www.moxiu.com)的在线主题制作需求,这种用户生成内容(UGC)的形式对于活跃社区气氛、提高用户对社区的粘性是大有好处的。

1、技术实现核心问题:

  • 提供用户自助上传图片的工具
  • 根据用户手机的分辨率,提供在线图片编辑工具,让用户选择要裁剪的区域,作为要制作主题的图片的宽和高
  • 用户提交选定的区域范围到服务器,后台程序根据用户选择图片指定的宽和高对图片进行自动裁剪,生成手机主题,当然还可以实现诸如打水印等功能
  • 参考各手机平台主题的制作方法,把背景图片打包成手机主题

2、技术实现方案如下:

  • 用户上传工具,直接使用struts2 的file upload 工具
  • 在线图片选择工具,采用jquery的img area select plugin实现http://odyniec.net/projects/imgareaselect/ 
  • 图片裁剪采用imagemagick实现,可以利用imagemagick的java接口,为灵活起见,避免由于java接口的不完备性及性能问题,使用Runtime.getRuntime().exec来直接调用imagemagick的命令行来完成。

依照此思路,编写了简单的测试代码,测试页面imgareaselect.html 用于演示img area select的使用。

ImagemagickTest.java是使用java 调用imagemagick接口调用实现图片操作的例子。

关于imagemagick其他功能使用的例子(例如打水印等)可以参考http://www.imagemagick.org/Usage/

   以上只是实现了初步的在线对背景图片制作的步骤,后续可以按照各个操作系统的主题制作技术,实现诸如symbian平台主题sis、windows mobile cab的制作。

3、imgareaselect.html

<html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>imgAreaSelect examples</title>
  <link rel="stylesheet" type="text/css" href="base.css">
  <link rel="stylesheet" type="text/css" href="imgareaselect.css">
 </head> 

<script type="text/javascript" src="jquery-1.2.6.js"></script>
<script type="text/javascript" src="jquery.imgareaselect-0.5.js"></script>
<link rel="stylesheet" type="text/css" href="base.css">
  <!–[if IE 7]>
  <link rel="stylesheet" type="text/css" href="ie_7_hacks.css" />
  <![endif]–>
  <!–[if IE 6]>
  <link rel="stylesheet" type="text/css" href="ie_6_hacks.css" />
  <![endif]–>
<script type="text/javascript">
 function selectionEnd(img, selection)
 {
        //alert(’width: ‘ + selection.width + ‘; height: ‘ + selection.height+’; x2:’+selection.x2);
 } 

 function preview(img, selection)
 {
   var scaleX = 100 / selection.width;
   var scaleY = 100 / selection.height;
   $(‘#duck + div > img’).css({
     width: Math.round(scaleX * 400) + ‘px’,
     height: Math.round(scaleY * 300) + ‘px’,
     marginLeft: ‘-’ + Math.round(scaleX * selection.x1) + ‘px’,
     marginTop: ‘-’ + Math.round(scaleY * selection.y1) + ‘px’
   });
 }
 $(document).ready(function () {
   $(‘<div><img src="duck.jpg" style="position: relative;" /></div>’)
     .css({
       float: ‘left’,
       position: ‘relative’,
       overflow: ‘hidden’,
       width: ‘100px’,
       height: ‘100px’
     })
     .insertAfter($(‘#duck’));
   $(‘#red’).click(function () {
     $(‘#duck’).imgAreaSelect({ selectionColor: ‘red’ });
   });
   $(‘#green’).click(function () {
     $(‘#duck’).imgAreaSelect({ selectionColor: ‘green’ });
   });
   $(‘#blue’).click(function () {
     $(‘#duck’).imgAreaSelect({ selectionColor: ‘blue’ });
   });
 }); 

/*
选择框初始化值大小设定,在社区实现时候选择框的初始化值由程序根据用户手机型号的分辨率来设定初始化值
通过设定最大值和最小值相等,来固定选择框的大小 

*/
 $(window).load(function () {   

   $(‘#duck’).imgAreaSelect({ x1: 120, y1: 90, x2: 280, y2: 210,maxHeight:120,maxWidth:160,minHeight:120,minWidth:160,resizable:false, onSelectChange:preview,onSelectEnd:selectionEnd }); 

 });
</script> 

<body>
<p style="text-align: left;">
<button id="red" type="button" style="color: red;">Red</button>
<button id="green" type="button" style="color: green;">Green</button>
<button id="blue" type="button" style="color: blue;">Blue</button>
</p>
<p style="text-align: center;">
<img id="duck" src="duck.jpg" alt="测试" title="测试"  style="float: left; margin-right: 10px;">
</p>
</body>
</html> 

 

4、ImagemagickTest

import org.apache.log4j.Logger;
import java.io.IOException; 

public class ImagemagickTest {
    private static final Logger logger = Logger.getLogger(ImagemagickTest.class);
    private static final String CONVERT_PROG="C:/ImageMagick-6.3.9-Q16/convert.exe"; 

    /**
     * @param command Description of the Parameter
     * @return Description of the Return Value
     */
    private static boolean exec(String command) {
        Process proc;
        try {
            logger.debug("exec(String):Trying to execute command " + command);
            proc = Runtime.getRuntime().exec(command);
        } catch (IOException e) {
            System.out.println("IOException while trying to execute " + command);
            logger.fatal("exec(String):IOException while trying to execute " + command);
            return false;
        } 

        if (logger.isDebugEnabled()) {
            logger.debug("exec(String):Got process object, waiting to return.");
        } 

        int exitStatus; 

        while (true) {
            try {
                exitStatus = proc.waitFor();
                break;
            } catch (java.lang.InterruptedException e) {
                logger.fatal("exec(String):Interrupted: Ignoring and waiting");
            }
        }
        if (exitStatus != 0) {
                logger.fatal("exec(String):Error executing command: " + exitStatus);
        }
        return (exitStatus == 0);
    } 

    public static void main(String[] args) {
        String cmd=CONVERT_PROG;
        String parameter=" -crop 278×150+99+45 ";
        String inputFile=" D:/imagemagick/bee.jpg ";
        String outputFile=" D:/imagemagick/output1.jpg ";
        exec(cmd+parameter+inputFile+outputFile) ;
    } 

}

在线制作手机桌面壁纸及铃声服务的一点启示

    在做门户社区设计的时候,一个最大的挑战是服务的差异化,像图片、铃声这样的服务基本上每一个手机网站都有,要在这一点上要做到差异化很难,看到几个提供自助手机桌面及铃声的在线服务,或许能够给我们一些启示。

自助手机桌面及铃声的在线服务:

魔秀:http://www.moxiu.com/

吾主题:http://www.ownskin.com/

猪蹄网:http://www.zhuti.net.cn/

神空主题网:http://theme.kkek.net/

mobopic:http://mobopic.com/

    类似魔秀这样的手机主题制作网站的核心模式其实很简单:提供一个定制化的图片剪裁工具,用户可以通过选择手机型号来上传分享自己的图片,然后围绕此服务形成自己一个社区。从alexa排名运营情况来看,魔秀其实还是有一定的人气的。

   在技术层面,魔秀的定制化的实现并不难。

    另外还有一些在线的铃声制作的web2.0站点,可以参考:

http://mashable.com/2008/03/13/create-your-own-ringtone/

    像铃声及手机桌面壁纸这样的服务,其实算是一个典型的竞争红海市场,在图片及铃声服务上如果只是提供单纯的下载服务,那不会有太大的竞争力。

    对于门户社区而言,社区的建设不可能建立在空洞的服务上,必须依托一些有趣、使用的应用才能够在用户中引爆流行,我觉得通过类似这些服务可以做到与竞争对手一定程度的区隔(尽管这些服务并不能根本上决定门户社区的成败),另外可以通过众多这样的服务来整合与用户手机应用相关的各种服务,提高用户对门户社区的粘性。

通过ActiveSync同步Onenote Mobile 与Onenote 2007

    用了接近10年的Nokia的机器,说实话Nokia的质量真的不错,换了7、8台机器,Nokia的机器没有出现过太大的质量问题。只不过感觉在智能手机的发展上,围绕手机操作系统平台相关的产业链是最大的竞争点。在这一点上,感觉Symbian平台的开放性、功能完备性及开发效率上,还是比不上像Microsoft、Apple这些做操作系统起家的厂商。

    考虑到与日常PC办公软件的兼容性,同时为了提高个人GTD管理能力,提高工作效率,换机不愿意再继续Symbian平台的机器,打算改用Windows Mobile平台的机器,新买了一台HTC Touch Dimaond,操作系统是Windows Mobile 6.1,当然由于是水货版本,因此带了WI-FI。ROM是用中国移动的心机定制版本刷的,也即S900,此版本带的Office Mobile中已经带了Excel Mobile、Onenote Mobile、PowerPoint Mobile、Word Mobile。

    首先要做的事情的是能够保持Outlook及Onenote与手机的同步。因此安装了ActiveSync来做PC与手机的同步。

    PC的操作系统:Windows XP SP2

    ActiveSync:4.5

1、ActiveSync配置

   下载安装ActiveSync 4.5版本。

    PPC端:

      开始->设置->连接->由USB连接到PC->ActiveSync(与Outlook同步),取消“启用高级网络功能”,缺省为选中

     如果不配置成ActiveSync模式(磁盘驱动器模式),那么直接通过USB连接到计算机上时候只是作为一个USB盘符出现,并不会采用ActiveSync方式同步。

    PC端配置:

      image

    配置好后,同步ActiveSync同步Outlook的联系人、日历、任务等都没有问题,但同步Onenote没有成功。

2、Onenote安装

    Onenote要与Onenote Mobile同步,PC端的Onenote 应当是Onenote 2007版本,以前版本好像支持存在问题,Onenote 的安装程序在Office 2007  大企业版中有。

    在PC端启动Onenote 2007后,在Onenote 2007菜单的工具->选项 中应当有Onenote Mobile选项,如果Mobile端没有安装Onenote,可以通过此处安装Onenote到Mobile上,或者直接用Office 2007安装路径下的\Office12\2052\OneNoteMobile.CAB在Mobile上安装。由于买的机器的ROM版本中已经带了Onenote Mobile,因此不用安装。

3、Onenote配置

    将Mobile修改为ActiveSync模式后,通过数据线连接到PC上后,在ActiveSync PC客户端通过工具->设置,选中Microsoft Office OneNote选项。

image

  确定后,ActiveSync应当可以执行同步操作,然后会提示Onenote以前未与计算机同步,选定“将移动设备上的项目与此计算机上的项目合并”,然后ActiveSync会执行同步操作。

image

    然后在PC端的Onenote中应当会出现Onenote Mobile笔记本选项夹(在Onenote 2007的默认笔记本位置的目录下也会生成一个OneNote Mobile的目录),在此笔记本下会有一个叫“来自S900的便签”的分区,在此分区下可以建新的页或分页,这样可以由ActiveSync来实现与Onenote Mobile的同步。

    要与Onenote同步的Onenote页面都必须放到ActiveSync生成的“来自S900的便签”的分区下,不然无法同步。开始以为是只要放到Onenote Mobile目录下的页面都能够实现自动同步,试验了很久才发现此规则。

    目前Onenote Mobile不能够指定Onenote笔记存放的目录(查找了注册表也无果),只能存放到“主存\Application Data\Microsoft\OneNote Mobile”下。

   在同步过程中如果出现无法识别设备或无法自动同步的问题,我自己在同步过程中就出现了一堆问题,下面是采用的一些方法:   

  • 注意Outlook与ActiveSync的安装顺序及版本

    应当先安装OUTLOOK再安装ActiveSync,而且应当是Outlook 2003以上版本,而不是Outlook Express

  • 采用“ActiveSync模式”,而不是“磁盘驱动器模式”

    在PPC端:开始->设置->连接->由USB连接到PC->ActiveSync(与Outlook同步)

  • 禁用防火墙

    刚开始时候将PPC通过USB连接上电脑,始终不能同步,后来发现是防火墙把端口禁用了。由于ActiveSync 采用TCP/IP栈来实现PC与PPC之间的通讯,所以会受到防火墙设置的限制,出了问题可以先禁用一下防火墙试试。

  • 禁用“启动高级网络功能”

    在PPC端:开始->设置->连接->由USB连接到PC->ActiveSync(与Outlook同步),取消“启动高级网络功能”选项(默认状态为启用),然后重新连上USB数据线,一般即可解决问题。

  • 删除Onenote的目录

    在PC端直接删除Onenote的默认笔记本位置的目录下的OneNote Mobile目录,然后重新进行Onenote的初始化同步过程

  • 解除PPC和PC之间的关联关系删除掉

    PC端:在PC端的ActiveSync管理界面上执行:文件->删除移动设备,重新进行整个设备的同步,只不过此种情况下,通信录会出现重复同步的现象。

    PPC端:开始->程序->ActiveSync->功能表->选项->选择要删除的PC,删除即可。

  • 禁止ActiveSync自动运行

    缺省情况下,PPC后台始终有ActiveSync进程在运行,不停执行同步操作,即使通过Task Manager这样的软件停止ActiveSync进程后,过上一会儿又会执行同样的同步操作,这样挺消耗系统资源及电源的,不希望ActiveSync不停地自动同步,当然通过USB连接上后还是希望能够自动执行同步操作,可以通过如下步骤来禁用ActiveSync自动同步。

   在PPC端:
   1、开始->程序->Activesync. 打开Activesync。

   2、点击ActiveSync最右下角的“菜单”。此时候在菜单中, “日程安排”选项是灰色的,不能更改。

   3、点击“添加源服务器”

   4、在后续的配置中,随意输入电子邮件地址、用户名、密码、域、服务器地址等信息后完成Exchange源服务器配置,回到ActiveSync主界面,多了一个Microsoft Exchange  ,停止Exchange的同步操作

   5、点击ActiveSync最右下角的“菜单”,此时侯在菜单中,“日程安排”选项可以点击了,点击“日程安排”

   6、在日程安排配置界面,把“高峰时段”和“非高峰时段”都改为手动,而不要使用缺省的“项目到达时”

   7、点击OK按钮,回到ActiveSync主界面  

   8、重启PPC(Reset),用的是psShutXP,用Touch Diamond红色的Reset按钮费劲

   9、点击ActiveSync最右下角的“菜单->选项->选中Microsoft Exchange->删除。

 

关于Onenote Mobile,有几个不错的插件:

Copy to Mobile Device:安装完成后,会在Onenote菜单上增加“Copy to Device”按钮,点击此按钮可以把当前编辑的页面(可以没有在Onenote Mobile笔记本中)自动拷贝为Onenote Mobile笔记本的页面,方便同步。

Use OneNote instead of Outlook Notes:http://blogs.msdn.com/johnguin/archive/2007/04/16/4-16.aspx

Export Outlook Notes to OneNote: http://blogs.msdn.com/descapa/archive/2007/02/14/export-your-outlook-notes-to-onenote.aspx

其他有用的插件,可以参考:http://blogs.msdn.com/johnguin/archive/2008/01/17/a-summary-of-the-onenote-powertoys-from-the-test-team-for-2007.aspx

“我们有难,但我们试着生存”-我的无线互联网信念

   今天偶然看到一则新闻《伊拉克选手穿旧T恤、二手鞋参战北京奥运会》,令人无比感动,或许这是奥运开赛以来最为让我感动的一则新闻,向这些伟大的伊拉克运动员致敬,为中国男足这样的垃圾球队和垃圾队员感到可耻。

   “我们有难,但我们试着生存”!

  “结果不是最重要的,重要的是我们参加了这个盛会,我们经历享受了这个过程,我们已经创造了纪录。”

12353322

    对于初创性的无线互联网公司而言,并不是每一家公司都能够在市场、产品、技术或运营层面有核心的竞争优势。既没有核心产品创新能力去创造一种全新的商业模式,也无核心资源优势去搭建运营的竞争优势,更无核心的技术优势来构筑竞争壁垒,因此要在竞争激烈的无线互联网市场生存下去,挑战是蛮大的,可以说笑道最后的只能有不到1%的企业。

   无线互联网目前尚处于初级阶段,受限于客户使用习惯、网络带宽、客户端处理能力等因素,客户端目前所能够承载的功能相对也有限,在模式上并没有一种现成的商业模式可以参考。因此在发展上,肯定存在很多的困难和挑战。但正因为挑战,事业才有意义,成功才显得弥足珍贵。在这样残酷的境遇下,第一和唯一重要的对这项事业的热情,这是支撑我们自己能够坚持下去唯一核心的支柱。我相信这也是支撑伊拉克运动员克服各种困难参加奥运会的动力所在。一定要学会享受创业的过程中的各种痛苦和挫败。

   在创业初期,任何公司都面临像伊拉克运动员一样的窘境,各种创业条件都不具备,各种资源都无从争取。不要在初期就指望产品具有充分的创新性、拥有一个完美团队,万事俱备后才动手开做,这样而言,只会丧失掉各种市场机会,整个团队始终只是处于观望和理念阶段,整个团队也无机会去磨合和成长。对于初创性公司而言,肯定都有一个不断试错、不断自我否定并不断前行的过程,因此团队执行力是第一位的,只有在不断试错的过程中,才能够逐步在纷繁复杂的环境中理清自己的目标并强大自己。      

“结果不是最重要的,重要的是我们参加了这个盛会,我们经历享受了这个过程,我们已经创造了纪录。”

手机客户端IM技术实现思考2-我的IM2.0

我的IM2.0

 

无线互联网门户社区核心数据模型设计思考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数、推荐、用户打分等等。

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

手软门户域数据模型设计

 

手机客户端IM技术实现思考

手软客户端技术预研说明

 

« 上一页下一页 »