Android 思考1-开放手机联盟思考

    这段时间,Google真的是风光无限,先是Google Chrome的发布,以及最近的T-Mobile G1的隆重上市,铺天盖地都是Google的消息,不得不感叹品牌的力量。

    整理一下对于Android的一些零碎的思考,以加深的无线互联网的理解。分成几部分思考一下:

    1、对Android 开放手机联盟思考

    2、Android 的商业模式思考:Android的商业模式、Google的无线互联网战略

    3、Android动了谁的奶酪:手机操作系统的竞争格局

    4、有中国特色的Android:Android山寨化、中国移动的Android平台

    5、Android的技术思考:

1、Android开放手机联盟

    在成立1年多后,Google发起的以Android为核心的Open Handset Alliance终于推出了第一款真机T-Mobile G1,应该说在类似的产业联盟中,能够在如此短的时间内推出真机,效率还是蛮高。如果举办一个有中国特色的“Android上市庆功表彰大会”的话,致辞中应该有类似“在联盟xxxx的光辉思想指引下,我们克服了重重困难,终于迎来了这个属于伟大的xxxx的光辉时刻。在这里我要感谢x、感谢xxxx,感谢xxxx,…”。

    一个成熟的手机产业联盟应当涵盖手机产业链中的半导体芯片制造商、设备制造商、运营商、软件提供商(软件服务器商、软件开发商、集成商、第三方开发者)等。从目前来看,Google发起的以Android为核心的Open Handset Alliance包含了手机产业链上的一些重量级的公司(参考open handset alliance members),这些重量级的会员加入对于尽快催熟整个围绕Android的产业链,帮助Android在目前Symbian、Windows Mobile、Linux、Apple OS X等手机操作系统平台竞争的乱世中迅速崛起起着至关重要的作用。但Google应当很清楚时间及成果对于维系这样松散联盟的重要性,因此也是其必须尽快推出G1这样的标杆产品的原因。从目前已知的资料而言,我觉得T-Mobile G1毋宁说是一个“IPhone的梦魇”的产品,还不如说是Google的Labs Beta产品。从G1的硬件配置、所支持的应用、用户体验等而言,尚有很多需要完善的地方,如果这样的产品都算完美的话,那就太低估人民群众的审美能力了。

    就目前竞争阶段而言,Google需要的不是一个完美的产品,而是需要一个证明联盟价值的东西,哪怕是半成品。

    Google应当很清楚,每一个联盟的参与者都不是为了慈善事业而参加这样的商业联盟,每一个游戏的参与者都希望从中获取最大的商业利益。就目前的竞争格局而言,整个智能手机操作系统的竞争尚处于初级阶段,胜负尚难言定,Android能否在手机操作系统的竞争中成为主导平台尚需要很长一段时间。因此在联盟的这些会员中,除了Google自己,我认为先半导体芯片制造商、终端设备制造商、软件提供商、运营商等大部分都是机会主义者,基本上都脚踩几只船,他们关心的是“怎样的无线互联网时代获取更大的市场份额”,参加各种这样的联盟只是他们的手段之一。

    对于半导体芯片制造商而言,吸引他们的是“怎样卖出更多的芯片、怎样占领更大的市场份额”。

    对于设备制造商而言,吸引他们的是“怎样降低终端的制造成本,卖出更多的设备”。对于Samsung、LG、HTC这样没有自己核心操作系统的厂商而言,采取墙头草式的跟随战略还可以理解。而对于Motorola而言这样的举措就是愚蠢之极(Motorola Building Up 350-Person Android Team. Nokia Also Sniffing Around.)。到现在为止,Motorola自己还没搞清楚自己在移动产业的核心竞争力所在-平台为王,没有搞清楚移动终端竞争的根本-用户体验至上。放弃自己还相对成熟的Linux平台当山大王的机会不用(或者借助已经参加的LiMo联盟),甘愿去另外一个联盟充当一个二流的喽啰角色,Motorola完蛋了。 同样的道理,如果Nokia也放弃自己的Symbian平台,加入 Open Handset Alliance  ,那Nokia也是愚蠢之极。对于这些设备制造商而言,放弃自己的与竞争对手有所区隔的竞争点不用,在竞争中采用与竞争对手完全同质化的产品,这样的竞争能有多少价值,利润能有多少。

    对于运营商而言,吸引他们的是“怎样让所有的终端都符合自己的规范,卖出更多电信服务”。

    对于软件提供商而言,吸引他们的是“谁的平台市场份额最大、谁的平台开发最为容易”。

    对于Google而言,Android作为其无线互联网战略的一个重要棋子,通过开放平台(是不是真正意义的开源平台尚待观察)的方式来颠覆手机操作系统的竞争格局,从一个局外人一跃成为游戏的参与者。其最大的兴趣是成为游戏规则的制定者(加入Android成功的话)。关于Google的无线互联网布局以及Android在Google无线互联网战略的意义的继续思考中…。

    关于手机联盟,比较有意思的是,可以比较一下几个与Open Handset Alliance联盟类似的基于Linux的产业联盟的会员:

        LiMo(http://www.limofoundation.org/

        OpenMoko(http://www.openmoko.org/

        LiPS(http://www.lipsforum.org/

        Maemo(http://maemo.org/intro/

    法国电信从LiPS联盟转为LiMo的故事很有趣,很值得一看:Mobile Linux组织融合背后的故事

    每一个人都希望自己在联盟中当老大,掌握无上的话语权,没有不能放弃的原则,只要利益使然。对于曾经“不作恶”的Google亦然,尤其是在作为成功者需要捍卫已有利益时候。

参考资料:

    http://www.androidin.com/android-827-1-1.html

    http://blog.sina.com.cn/s/blog_4a09ed6f0100ad0q.html

 

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

    在做门户社区实现中,有类似魔秀(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/

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

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

手机客户端IM技术实现思考3-聚合化生存

    目前互联网上的IM市场竞争极其的激烈,整个市场的垄断格局基本上形成,要做一个大而全的IM基本上很难了,当然在一些垂直行业一样存在较大的机会,例如阿里巴巴的贸易通。

    在无线互联网上目前IM竞争相对还不是很惨烈,但那些在互联网占据核心优势的企业具有先天的竞争优势,等到无线互联网相对成熟时候,这些公司全力大举杀入,初创性的公司在技术、资源调度能力、市场影响力等方面都无力与其竞争。

    既然这样对于后来者来说是否还需要做IM,在IM市场是否还有机会呢?

    我觉得在无线互联网领域IM还有很大的市场机会,而且IM是任何无线互联网公司都应当做的。当然需要在产品定位上及产品形式做到与传统IM的区隔。要做到区隔需要从用户需求的原点开始,进行用户群细分。  

    与互联网IM不同,手机终端本身最大的功能还是通话功能,而IM基于VOIP的协议可以较好解决用户低成本,而通话费用是运营商们利润根本,因此这也是移动飞信、联通超信(网通灵信)、电信等运营商的IM不可能在完全正常的环境下成长起来。当然在这一点上,对于做IM的机会都一样的。

    与传统的IM(姑且叫其为IM1.0)不同,新来者的IM(IM 2.0)的竞争策略重点不应当是实时通信功能,这一点传统的IM1.0的厂商已经做得足够的好了。IM2.0要做到突围,我觉得应该是重点强化IM的SNS化、媒体草根化(去中心化)、3G化的特性:

  • SNS化:通过开放的多通信协议支持来协助用户整合各种零散分布在各个社区和渠道的关系链,成为用户的SNS中心。这里的多协议不单纯是对IM的多协议(MSN、QQ、Yahoo Messenger、Gtalk、ICQ等)支持,还包括开放社区协议(Open Social、OpenID、OAuth)
  • 媒体草根化(去中心化):用户通过Blog、Twitter、Youtube等草根社会化媒体工具来展现自我,但服务去中心化后,意味着用户使用的服务分布在不同的社区中,用户需要在不同社区间不停切换身份。同时这些UGC的内容成千上万,没有人有精力天天去及时摘取最优的内容,通过IM 2.0聚合这些优质的内容来帮助用户解决媒体草根化后的各种难题。
  • 3G化:随着3G市场及技术的逐步成熟,基于3G的各种创新性应用及服务必将浮现,这一点对于IM1.0、IM2.0而言,大家的起点都是一样的。

    这样看来,IM2.0感觉不是在做IM,而是做社区、做媒体了。没错,我认为对于初创性的互联网公司而言,仍然指望从即时通信功能上去与IM1.0的厂商竞争。那基本上没有市场机会。在所提供的IM没有明显的产品优势、技术优势的情况下,没有任何一个用户愿意去使用一个全新的工具,重新构建自己的关系链。同时初创性公司也应当避免传统IM厂商的大而全的思路,从IM、社区、内容什么都要自己做。

   对于初创性互联网公司而言,在初期可以通过通过IM这个接入工具来聚合现有的各种优质的社区服务及内容,然后逐步引入自己具有特色的核心服务,最终形成自己的核心竞争力。

    这就是所谓的聚合化生存。

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

   今天偶然看到一则新闻《伊拉克选手穿旧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数、推荐、用户打分等等。

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

手软门户域数据模型设计

 

下一页 »