出家如初,成佛有余

文本挖掘(Text Mining)技术基础

Posted in Uncategorized by chuanliang on 2010/10/30

互联网产品线管理模式思考5-平台技术支持思考

Posted in 产品管理 by chuanliang on 2010/10/24

    一个平台化产品要想围绕平台自身建立起一个和谐的生态链,快速构筑起平台的影响力,平台的开放性是其中比较关键的因素。

    就自己理解而言,抛开诸如通讯协议、网络、操作系统等基础设施层面的开放外,互联网产品应用平台的开放主要分为如下几个层次:应用/服务接口级开放->产品运营级开放->开放平台,其中:

    应用/服务接口级开放:平台提供商对外提供系统的各种API接口,供合作伙伴使用平台提供的各种服务。此种模式的核心特点为平台提供商自个玩。目前大部分SaaS模式的互联网应用的开放都可以归为此类。

    产品级开放:平台提供商将平台的部分资源(例如用户资源、频道资源、内容资源)有选择性的开放给合作伙伴。此种模式的核心特点是平台提供商与个别合作伙伴点对点玩。目前诸如网游联合运营、当当之类的频道外包都可以归为此类。

    开放平台:平台提供商将平台的各种资源全面、公平地开放给所有的合作伙伴。此种模式的核心特点是平台提供商与所有的合作伙伴一起玩。目前Facebook是最好的代表。

    由于目前各种互联网产品及应用间的同质化极度严重,平台提供商服务的品质成为决定产品成败的一个重要因素。怎样让合作伙伴用好、用爽平台提供的各种服务,成为所有平台提供商必须重点考虑的问题。正如在互联网产品服务品质杂思 电子商务平台之平台服务杂思 中提到的。在提升平台服务品质上,一个高素质的技术支持团队起着至关重要的作用。

1、技术支持的核心价值

    在大部分的公司技术支持的地位并不高,在大部分人眼中,技术支持人员虽然是销售、产品、技术、运营间的桥梁。但相对于销售、产品、技术、运营人员而言,技术支持扮演着四不像的角色:技术支持人员在产品上没有产品人员熟悉,在技术上没有技术人员深入,在销售上又不具备销售人员的销售能力,在产品运营及客服上又不具备产品运营人员所必须的各种技能。技术支持只能够解决商户及客户简单的产品、技术疑问,稍微复杂一点的问题只能够转交给相关人员。于是乎在大家头脑中,技术支持=技术客服。在职业发展前途上技术支持也黯淡无光。

   之所以有以上的问题,不能单纯只是公司领导重不重视的问题,核心的问题在于对技术支持的定位不清晰以及技术支持人员自己本身的技能欠缺有关。

1.1、产品与市场结合的问题

    对于大部分互联网公司的产品而言,最为突出的问题莫过于:怎样让产品规划及研发能够与市场无缝结合,及时了解市场的真实需求,避免闭门造车,让市场需求来驱动产品研发。

    但对于大部分的公司而言,所谓“市场驱动的研发”、“端到端的产品研发”等理念都好提出,怎样达成这一目标,在具体的执行策略上其实并没有好的方案,最后只能提升到企业文化的高度上来飘在空中。

    之所以在产品与市场直接存在一定的鸿沟在于偏前端的市场人员(销售人员、市场人员、营销人员、BD等等)与后端的技术体系人员(产品、技术、系统)在思维模式、市场意识上、考核体系等方面存在较大的差异,而在这当中,技术支持人员刚好可以扮演两者桥梁的角色。

1.2、技术支持的价值:

  其实要回答此问题,可以反过来看一下技术支持相对于销售、产品、技术擅长什么呢?

  • 相对于销售人员:

    技术支持由于有一定的产品、技术背景,因此相对于销售而言,技术支持比销售更熟悉公司的产品,在针对客户推产品解决方案时比销售更为专业;技术支持与技术、产品人员沟通更有共同语言。在对商户需求的把控上,技术支持更容易能够从产品、技术角度来提炼商户的真实需求,也更能够帮助完善产品功能。相对于销售人员与商户的中、高端人员沟通,而这些人对产品的口碑更多来自于下面的员工,技术支持天天与商户的技术、客服沟通交流,更容易与商户真正的产品使用者建立信任关系。

    因此相对于销售人员而言,技术支持可以发挥如下作用:产品解决方案、作为商户的代表向产品提出需求、产品运营、技术接入支持、客户关系维系

  • 相对于产品人员、技术人员

    由于天天与商户、销售接触,因此技术支持对商户需求更能够获取第一线的真实信息;由于距离市场更近,因此对于行业趋势及行业深入比产品人员、技术人员更加深入,同时对于竞争对手及其产品更有深入的认识;由于天天被客户投诉、谩骂,技术支持比产品经理、技术人员更有客户服务意识;技术支持的技术背景也让其与那些无技术背景的产品人员区隔出来,这样对于产品方案、商户需求的技术可行性更能够有清晰的把握。

    因此相对于产品人员、技术人员而言,技术支持可以发挥如下作用:产品竞争分析、作为商户的代表向产品提出需求、产品相关支撑功能完善(产品知识库、FAQ等)、客户维系和关怀、产品销售。

   整体而言,技术支持的核心价值在于:作为市场与产品的桥梁。技术支持人员其实有很大的施展才华的空间,优秀的技术支持可以帮助公司更加接近市场,避免产品技术人员的闭门造车,有效衔接市场与产品直接的鸿沟。与此对应我们对于技术支持人员未来的发展通路就有一定清晰的认识。

2、技术支持的发展通路

2.1、技术支持的技能要求

  当然以上技术支持的优势的前提是建立在技术支持自身具备相应实力的基础上,粗略说来,一个合格的技术支持应当具备如下一些技能:

  • 售前支持能力
  • 销售能力
  • 商务能力
  • 产品管理能力
  • 技术能力

 

2.2、技术支持发展通道

  • 技术支持通路:初级技术支持->中级技术支持->高级技术支持->中级售前支持->高级售前支持->行业专家
  • 技术支持管理通路
  • 技术通路
  • 产品通路
  • 销售通路

     其实整体而言,好的技术支持的发展通过更为广阔,个人认为:一个有创业梦想的人,都应当去做一段时间的技术支持工作,这样对于市场、客户、产品销售及营销有更加深切的认识。

3、方法思考

   Product line,Product platform,产品线,产品平台,产品管理,产品经理,技术支持

Python中使用selenium作为Web Browser引擎

Posted in 技术相关 by chuanliang on 2010/10/17

    由于目前的Web开发中AJAX、Javascript、CSS的大量使用,一些网站上的重要数据是由Ajax或Javascript动态生成的,并不能直接通过解析html页面内容就能获得(例如采用mechanizelxmlBeautiful Soup )。要实现对这些页面数据的爬取,爬虫必须支持Javacript、DOM、HTML解析等一些浏览器html、javascript引擎的基本功能。

    正如Web Browser Programming in Python总结的,在python程序中,有如下一些项目提供能类似功能:

   其中Pyv8主要是Google Chrome V8 Javascript引擎的Python封装,侧重在Javacript操作上,并不是完整的Web Browser 引擎,而诸如PythonWebKitPython-SpidermonkeyPyWebKitGtk等几个主要在Linux平台上比较方便,而HulaHopPamie处理MS IE 。因此从跨平台、跨浏览器、易用性等角度考虑,以上方案并不是最好的。

   SeleniumWindmill 原本主要用于Web自动化测试上,对跨操作系统、跨浏览器有较好的支持。其对Javacript、DOM等操作的支持主要依赖操作系统本地的浏览器引擎来实现,因此爬虫所必须的大部分功能,SeleniumWindmill 都有较好的支持。在性能要求不高的情况下,可以考虑采用SeleniumWindmill的方案,从评价来看,WindmillSelenium功能更加全面。

   争取其他语言一些类似的软件还有:

  • Lobo Browser(Java Browser)
  • Rhino (Java Javascript Engine)
  • HtmlunitTestNG (Java  Testing Framework)
  • Watir  (Ruby)

     

    1、应用场景

        关于Selenium的详细说明,可以参考其文档, 这里使用Python+Selenium Remote Control (RC)+Firefox 来实现如下几个典型的功能:

        1)、Screen Scraping,也即由程序自动将访问网页在浏览器内显示的图像保存为图片,类似那些digg站点的网页缩略图。Screen Scraping有分成两种:只Scraping当前浏览器页面可视区域网页的图片(例如google.com首页),Scraping当前浏览器完整页面的图片(页面有滚动,例如www.sina.com.cn的首页有多屏,需要完整保存下来)

        2)、获取Javascript脚本生成的内容

         例如要用程序自动爬取并下载百度新歌TOP100 的所有新歌,以下载萧亚轩的《抱紧你》为例,大致步骤可以如下:

         a)、进入百度新歌TOP100http://list.mp3.baidu.com/top/top100.html,通过正则表达式匹配<a target=”_blank” href=”http://mp3.baidu.com/m?(.*)” class=”search”></a> 或采用mechanizeBeautiful Soup之类的htmlparser解析页面获得每一首歌后面的查询地址

         b)、在查询结果页面,获得第一条结果的地址<a href=”http://202.108.23.172(.*)” title=”(.*)</a>,进入mp3的实际下载地址

         c)、在歌曲实际下载页面,解析html页面内容,会发现mp3的实际现在地址为空

       <a id="urla" href="" onmousedown="sd(event,0)" target="_blank"></a>
    
    
    

         实际的下载地址是由javascript脚本设置的:

                        var encurl = "…", newurl = "";
                        var urln_obj = G("urln"), urla_obj = G("urla");
                        newurl = decode(encurl);
                        urln_obj.href = urla_obj.href = song_1287289709 = newurl;
      其中函数G(str)为:
        	function G(str){
    			return document.getElementById(str);
    		};
    

       因此直接解析页面并不能获得下载地址,必须通过python调用浏览器引擎来解析javascript代码后获得对应的下载地址。

    2、Selenium RC基础

        Selenium RC的运行机制及架构在官方文档中有详细说明

        Selenium RC主要包括两部分:Selenium Server、Client Libraries,其中:

    • The Selenium Server which launches and kills browsers, interprets and runs the Selenese commands passed from the test program, and acts as an HTTP proxy, intercepting and verifying HTTP messages passed between the browser and the AUT.

          Selenium Server 对应Selenium RC 开发包中的selenium-server-xx目录,其中

    xx对应相应的版本

    • Client libraries which provide the interface between each programming language and the Selenium-RC Server.

           Selenium RC提供了包括java、python、ruby、perl、.net、php等语言的client driver,分别如下:

           selenium-dotnet-client-driver-xx

           selenium-java-client-driver-xx

           selenium-perl-client-driver-xx

           selenium-php-client-driver-xx

           selenium-python-client-driver-xx

           selenium-ruby-client-driver-xx 

    Selenium,Python,Screen Scraping,Web Scraping,爬虫

         Python等语言通过调用client driver来发出浏览器操作指令(例如打开制定url),由client driver把指令传递给Selenium Server解析。Selenium Server负责接收、解析、执行客户端执行的Selenium 指令,转换成各种浏览器的命令,然后调用相应的浏览器API来完成实际的浏览器操作。

        Selenium Server实际充当了客户端程序与浏览器间http proxy。

    3、例子:

    1)、下载Selenium RC http://seleniumhq.org/download/,测试使用的selenium-remote-control-1.0.3.zip

    2)、解压后selenium-remote-control-1.0.3.zip

    3)、运行Selenium Server

            cd  selenium-remote-control-1.0.3\selenium-server-1.0.3

            java –jar  selenium-server.jar

           Selenium Server缺省监听端口为4444,在org.openqa.selenium.server.RemoteControlConfiguration中设定

    4)、测试代码

    #coding=gbk
    from selenium import selenium
    
    def selenium_init(browser,url,para):
        sel = selenium('localhost', 4444, browser, url)
        sel.start()
        sel.open(para)
        sel.set_timeout(60000)
        sel.window_focus()  
        sel.window_maximize()
        return sel     
    
    def selenium_capture_screenshot(sel):
        sel.capture_screenshot("d:\\singlescreen.png")
    
    def selenium_get_value(sel):
        innertext=sel.get_eval("this.browserbot.getCurrentWindow().document.getElementById('urla').innerHTML")
        url=sel.get_eval("this.browserbot.getCurrentWindow().document.getElementById('urla').href")
        print("The innerHTML is :"+innertext+"\n")
        print("The url is :"+url+"\n")
        
    def selenium_capture_entire_page_screenshot(sel):
        sel.capture_entire_page_screenshot("d:\\entirepage.png", "background=#CCFFDD")
        
    if __name__ =="__main__" :
        sel1=selenium_init('*firefox3','http://202.108.23.172','/m?word=mp3,http://www.slyizu.com/mymusic/VnV5WXtqXHxiV3ZrWnpnXXdrWHhrW3h9VnRkWXZtXHp1V3loWnlrXXZlMw$$.mp3,,[%B1%A7%BD%F4%C4%E3+%CF%F4%D1%C7%D0%F9]&ct=134217728&tn=baidusg,%B1%A7%BD%F4%C4%E3%20%20&si=%B1%A7%BD%F4%C4%E3;;%CF%F4%D1%C7%D0%F9;;0;;0&lm=16777216&sgid=1')
        selenium_get_value(sel1)
        selenium_capture_screenshot(sel1)
        sel1.stop()
        sel2=selenium_init('*firefox3','http://www.sina.com.cn','/')
        selenium_capture_entire_page_screenshot(sel2)
        sel2.stop()

    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, “Courier New”, courier, monospace;
    background-color: #ffffff;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }

     

    下载源代码seleniumtest.py

     

    几点注意事项:

    1)、在selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/doc/selenium.selenium-class.html 中对Selenium支持的各种命令的说明,值得花点时间看看

    2)、在__init__(self, host, port, browserStartCommand, browserURL) 中,browserStartCommand为使用的浏览器,目前Selenium支持的浏览器对应参数如下:
      *firefox
      *mock
      *firefoxproxy
      *pifirefox
      *chrome
      *iexploreproxy
      *iexplore
      *firefox3
      *safariproxy
      *googlechrome
      *konqueror
      *firefox2
      *safari
      *piiexplore
      *firefoxchrome
      *opera
      *iehta
      *custom

    3)、capture_entire_page_screenshot目前只支持firefox、IE

      使用firefox时候使用capture_entire_page_screenshot比较简单,不需要特别设置,Selenium会自动处理。因此如果使用capture_entire_page_screenshot推荐使用firefox。

      IE必须运行在非HTA(non-HTA)模式下(browserStartCommand值为:*iexploreproxy ),并且需要安装http://snapsie.sourceforge.net/ 工具包,具体可以参考这篇文章:Using captureEntirePageScreenshot with Selenium

     

  • 产品设计中关于群体智慧的一些思考

    Posted in 互联网观察, 产品管理 by chuanliang on 2010/10/09

        关于群体智慧(Collective Intelligence)在Web 2.0时代已经被大家炒得热火朝天,例如那一堆所谓去中心化、User-Generated Content (UGC)的Web 2.0站点们:Video、SNS、Wiki、Blog、Digg、Twitter、BBS、IM、RSS,Google这样的搜索引擎对用户搜索行为、点击流的聚合处理,Amazon、淘宝这样的电子商务网站的推荐系统、点评系统也都可以归入群体智慧的范畴。

        关于群体智慧的话题太大,这里主要从产品设计层面思考一下对群体智慧的一些思考。先说几个相对较小但也利用了群体智慧的产品:

        Firefox的Adblock Plus、Autoproxy插件:

            其实与Adblock Plus功能类似的NOScript也挺好用的,只不过Adblock Plus比较方便的一点是对于常用的网站过滤规则可以直接从服务器下载并自动更新,而不需要像NOScript手工一个一个添加维护。这些屏蔽规则是普通的大众一个一个贡献出来的;

            用于翻墙用的Autoproxy相对于FoxProxy也是类似,对于被伟大的所G.F.W屏蔽的网站列表可以直接从服务器直接下载,而不需要一个一个手工增加,尽管在功能上FoxProxy更为强大。

        手机软件的网秦通讯管家:

          传统的来电防火墙、来电管家之类的软件都不具备联网功能,对于骚扰电话需要用户一个一个手工添加维护,而网秦的通讯管家从用户端收集这些垃圾电话并上传到服务器形成垃圾电话库,用户可以直接从服务器端下载现成的垃圾电话库。这里姑且不说网秦垃圾与否,这一产品的设计在当时还是挺有新意的。

        类似的例子还有为Google提供有害网站列表服务的stopbadware

        可以看出来,合理利用群体智慧的力量对于优化产品设计、产品运营、用户体验上都有较大的意义。

        只不过对于群体智慧滥用的例子也有一堆,例如360安全卫生( http://bit.ly/9exBx4 )、绿坝、QQ、淘宝刷钻联盟等等。 

        关于在产品设计、产品运营中关于群体智慧的一些思考:

       1、要发挥群体智慧的价值,产品必须能够解决用户需求的痛点

           不要想当然认为有一个产品后,用户自然会有兴趣来自愿帮助你完善产品,尤其是在产品对他毫无价值的情况下。时间是宝贵的,人生是宝贵的。要调动用户奉献群体智慧积极性,产品必须能够帮助用户解决一些麻烦的问题,这样才有机会与用户互动,从而粘住用户,进而让用户愿意心甘情愿地奉献自己的智慧。

           群体智慧必须建立在产品的核心价值上,只有过了产品对用户具有核心价值这门槛,群体智慧对于产品的价值才能够爆发。

       2、围绕产品核心功能,关于易用性,降低产品使用门槛,不要强迫用户、干扰用户

           在产品设计时候,我们总是担心没有这功能,没有那功能,于是乎围绕核心功能添加了一堆功能,在导航菜单上罗列一堆高级功能,用户一进来就晕。

           一个典型的例子是标签tag的使用。现在基本上所有的网站都装模作样地提供标签的功能,而且强迫用户必须打标签、评分,但对于大部分的用户而言:什么叫标签、标签有什么用很难搞明白,于是乎,或是为空或是打得乱七八糟的,与我们所期望的通过标签来做分类Classification、聚合Clustering从而产生推荐的想法相去甚远。

           用户级别有菜鸟级->中级->高级->资深->发烧友级,产品功能的展现应当也分层次,针对大部分人提供最核心、最常用的功能,剩下的功能让用户去挖掘、创造,在挖掘、创造过程中得到乐趣,从而资源奉献其智慧,并且通过口碑等方式帮助进行产品推广营销。

           最为典型的莫过于Twitter的成长史,诸如RT、hashtag(#)、@之类的用法都是用户创造的,怪不得连线杂志说 Twitter成功源自群体智慧

       3、避免人为干预因素,保证系统信用体系的权威性

           用户之所以愿意在某个产品上投入大量的精力,奉献自己的群体智慧,首先必须建立在其对服务提供商文化的认同和对其产品的信任上。

            因此服务提供商进行产品运营的重点之一就是建立一套相对完善的账户体系、信用体系,塑造产品品牌,在产品运营过程中全力维护这套体系的权威性、公平性、合理性。在中国现实的环境下,产品运营肯定涉及商业、政治的因素,但不能因为商业、政治的因素成为产品信用体系第一位的决定力量,丧失了基本商业准则的产品最终的下场只能被用户唾弃,即使其短期可以通过各种手段来蒙蔽普通消费者和用户。

            这就是为何我宁愿信赖Google、Facebook、Twitter,而不愿信任QQ、360、Baidu之类的原因之一。

       4、群体智慧的成果需要数据来支撑、度量,但不能简单公式化

            要有效度量群体智慧的成果,例如度量网络营销的效果、产品设计的用户体验、用户的使用行为习惯等等,Web Analytics是必不可少的工具。Web Analytics从多个层面、多维度、多视角对数据进行了度量。

           但在对数据进行使用时候,我们一般为方便起见都采用简单公式化方式来度量用户行为,一个典型例子是淘宝的卖家、卖家信用积分,为了商业利益,大家面对简单化的信用积分公式,采用了刷信用方式,先是采用构造虚假交易的方式,然后“创造性”地出现了一堆利用群体智慧名义的淘宝刷钻联盟(例如马甲客、网商管家等等),最终对淘宝本身的信用体系的权威性也造成很大冲击。其实从Google 始终将PageRank的度量指标作为核心机密可以看出,对于群体智慧的度量不应当简单公式化。

           关于对数据的应用,Facebook的Adam Mosseri分享的  Data informed, not data driven 观点的确是真知灼见,或是可以参考这篇 Facebook如何利用数据指导设计         

       5、没有完美的人工智能算法,群体智慧的核心是群体,一个个活生生的人

           对于我们这样的技术人员而言,如果能够通过诸如协同过滤、数据挖掘、人工智能等算法来自动实现诸如商品推荐、臭味相投的人推荐、自动新闻聚合等等,这是多么让人兴奋不已。但限于目前技术的水平,以上梦想还只能处于起步阶段,诸如Techmeme、FriendFeed这样的技术导向的站点的发展经历已经证明了纯粹靠技术化手段来处理群体智慧尚不是完善。

           当然我们信仰技术的力量,相信总有一天通过技术能够达到以上目标。只不过在当下追求技术手段解决群体智慧问题的同时,我们不应当忘记我们面对是一个个活生生的人,一个个能够通过产品感受到我们诚意、热情的人,因此与其说是对产品的运营,毋宁说是对人的运营。

           建立与用户高效、双向的沟通渠道产品运营的重要手段,这里的所说的渠道可以是SNS、BBS、Blog、Twitter等。通过这些沟通渠道加强与用户的互动,让用户建立对公司及产品的信任,倾听用户领袖的声音,收集用户对于产品的建议等等。

       6、隐私问题

           尽管中国人并不是很注重隐私问题,大家可以疯狂通过客户端来挖掘自己需要的各种数据,而且可以美其名曰为:云计算、隐私保护。这些通过侵犯用户隐私等手段来获得群体智慧数据,虽然可以短期可以对产品或是产品之外的东西(例如政治立场)或许有所帮助。但最近的360、QQ两个彼此龌龊的故事告诉我们:你龌龊,你的竞争对手会比更加龌龊,但会打扮得比你冠冕堂皇、正人君子,你没有遵守的一些原则会被同样没有遵守的对手无限放大来攻击。出来混的,总要还的。

           所以在做产品时候不要存在侥幸的心理,对于一些基本的商业原则还是要尽量遵守。产品的核心竞争力不能指望长期建立在抛弃基本的商业准则上。