2009年3月15日星期日

微软Windows Live照片库升级

  前段时间MSN的自动升级另我感到很不舒服,不过升级完成后,我发现其中的Windows Live照片库(Windows Live Photo Gallery)有一些不错的新功能,修复了以前的一些BUG,从功能上已经直追Google Picasa了。这里我就介绍一些Windows Live照片库的一些特色功能。

  上传限制取消

  Windows Live的网络相册地址是photos.live.com,以前有每月500张上传照片的限制,现在这个限制取消了,用户可以随心所欲的将照片上传到多达25G空间的个人相册中,相比之下,Google Picasa网络相册仅提供1G的免费存储空间。

  提供插件支持

  通过插件可以很好的支持第三方的网络相册,Windows Live照片库默认除了支持自己的Windows Live相册之外,还支持Flickr和Picasa相册,我在Flickr上的那几百张照片,都是通过这个软件上传的,上传体验很不错。另外,使用插件,还可以支持Facebook、YouTube、SmugMug、Drupal等网络相册和服务,Windows Live的开放性可见一斑,相比之下,Google Picasa的第三方插件较少,对于Flickr等第三方相册支持也很弱。

  人脸识别功能

  Windows Live照片库可以自动识别照片中的人脸,这个功能其实Google Picasa也有脸部识别功能,不过Windows Live照片库的一大特色就是和Live Messenger整合,直接将照片中识别出来的人脸进行标记,并把这些标记与Live Messenger的好友列表相关联,这是一大特色。

Windows Live照片库

  总的来说,升级版的Windows Live照片库还是有不错的特色功能,是Google Picasa的一个有力的竞争对手。

2009年3月13日星期五

基于REST架构的Web Service设计

  先前我曾经介绍过利用Apache Axis实现基于SOAP的Web Service实现技术和相关代码,总的来说,SOAP的Web Service解决方案虽然较为成熟,且安全性较好,但是使用门槛较高,在大并发情况下会有性能问题,在互联网上使用不太普及,因此并不太适合Web 2.0网站服务使用,目前大量的Web 2.0网站使用另外一种解决方案——REST。

  REST的架构设计

  REST(Representational State Transfer)是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。

  REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。

  REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

  REST的设计准则

  REST架构是针对Web应用而设计的,其目的是为了降低开发的复杂性,提高系统的可伸缩性。REST提出了如下设计准则:

  网络上的所有事物都被抽象为资源(resource);

  每个资源对应一个唯一的资源标识符(resource identifier);

  通过通用的连接器接口(generic connector interface)对资源进行操作;

  对资源的各种操作不会改变资源标识符;

  所有的操作都是无状态的(stateless)。

  使用REST架构

  对于开发人员来说,关心的是如何使用REST架构,这里我们来简单谈谈这个问题。REST不仅仅是一种崭新的架构,它带来的更是一种全新的Web开发过程中的思维方式:通过URL来设计系统结构。REST是一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。REST有很多成功的使用案例,著名的Delicious和Flickr都提供基于REST风格的API使用,客户端调用也极其方便,下面是我用ASP写的一个很简单的REST举例,从中可以看出REST是多么的简单易用。

  客户端代码:

Private Function httpGet(url, method, data)
    Dim xmlhttp
    Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open method, url + "?" + data, False
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    xmlhttp.setRequestHeader "Content-Length", Len(data)
    xmlhttp.send (Null)
    If (xmlhttp.Status = 200) Then httpGet = xmlhttp.responseText
    Set xmlhttp = Nothing
End Function

Private Function httpPost(url, method, data)
    Dim xmlhttp
    Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open method, url, False
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    xmlhttp.setRequestHeader "Content-Length", Len(data)
    xmlhttp.send (data)
    If (xmlhttp.Status = 200) Then httpPost = xmlhttp.responseText
    Set xmlhttp = Nothing
End Function

Private Function httpPut(url, method, data)
    Dim xmlhttp
    Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open method, url, False
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    xmlhttp.setRequestHeader "Content-Length", Len(data)
    xmlhttp.send (data)
    If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then
        response.write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText
    Else
        response.write xmlhttp.responseText
    End If
    If (xmlhttp.Status = 200) Then httpPut = xmlhttp.responseText
    Set xmlhttp = Nothing
End Function

Private Function httpDelete(url, method, data)
    Dim xmlhttp
    Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open method, url + "?" + data, False
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
    xmlhttp.setRequestHeader "Content-Length", Len(data)
    xmlhttp.send (Null)
    If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then
        response.write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText
    Else
        response.write xmlhttp.responseText
    End If
    If (xmlhttp.Status = 200) Then httpDelete = xmlhttp.responseText
    Set xmlhttp = Nothing
End Function

response.write httpPost("http://localhost/rest/service.asp", "POST", "do=POST")
response.write httpGet("http://localhost/rest/service.asp", "GET", "do=GET")
response.write httpPut("http://localhost/rest/service.asp", "PUT", "do=PUT")
response.write httpDelete("http://localhost/rest/service.asp", "DELETE", "do=DELETE")

  服务端代码:

Response.Write Request.ServerVariables("REQUEST_METHOD")
If (Request.ServerVariables("REQUEST_METHOD")="GET") Then
 Response.Write "DO GET" + Request("do")
ElseIf (Request.ServerVariables("REQUEST_METHOD")="POST") Then
 Response.Write "DO POST" + Request("do")
ElseIf (Request.ServerVariables("REQUEST_METHOD")="PUT") Then
 Response.Write "DO PUT" + Request("do")
ElseIf (Request.ServerVariables("REQUEST_METHOD")="DELETE") Then
 Response.Write "DO DELETE" + Request("do")
End if

  需要注意的是,IIS服务器默认是不支持ASP文件的PUT和DELETE操作,默认会返回“403 - Forbidden”错误,因此需要修改IIS的设置,修改方法是:管理根据-IIS信息服务器-网站-属性-主目录-应用程序配置-配置-映射,选择ASP - 编辑 - 修改为全部动作。

  关于更多关于REST方面的知识,建议阅读《RESTful Web Services》这本书。

Google Reader支持评论功能

  据Google Reader官方博客报道,Google Reader发布了一项新的功能,支持对好友分享的内容进行评论,这样,用户分享自己的文章给好友时,可以就文章在Google Reader内进行交流。

  这个新功能只在英文版的Google Reader中出现,并且用户只能评论好友分享的项目,不能评论所有的项目,Google Reader这么做是想确认用户的反馈,以便将来提供更多功能。

  查看别人的评论可以通过新增加的菜单项“评论视图”中查看,评论视图稍不同于Google Reader普通模式,仅仅是一个包含了最新评论内容的列表。当所分享内容下有新评论时,评论视图菜单链接就会以粗体显示。

Google Reader支持评论功能

  当好友分享内容下有新评论时,好友的头像上会显示一个小对话框。

Google Reader支持评论功能

  对于博客作者来说,这个功能可能会减少博客网站的浏览和评论,分散他人对文章的反馈的途径,不利于博客作者获取全部的反馈,这也就是这个功能目前只在好友分享里出现的一个原因。

Google Reader支持评论功能

  Google Reader去年推出好友分享功能并做出了多项改进,实现了Google Reader用户与好友分享自己的订阅内容,分享时添加备注,以及自定义只与哪些特定好友分享订阅内容等。

2009年3月11日星期三

Google Admanager广告管理系统整合AdSense

  Google广告管理系统是一套在线广告管理系统,可以帮助广大网站主全面提高网站广告收益。通过这个系统,网站可以很方便的管理和投放网站广告,包括广告资源管理、广告定位、广告排期、以及与AdSense广告无缝结合。目前,Google Admanager已经和AdSense广告进行了集成,拥有Google AdSense帐户的发布商即可免费申请一个Google广告管理系统帐户。

  Google广告管理系统直接由Google中国北京总部负责推广,没有授权任何第三方代理机构或者个人代为推广该产品。 如果有意使用该系统,请直接登录 www.google.com/admanager 申请。

  Google 广告管理系统提供了丰富的广告资源管理、广告定位、广告投放管理和其他功能,其中许多功能是独一无二的。下面是详细的功能列表:

广告资源管理

  • 广告资源分级:细致地规划广告资源,实现更高效的订单项创建和广告投放管理。使用“广告位置”为页面生成广告管理系统标记,使用“广告展示位置”对相关广告位置进行分组,使用“广告产品”来组合具有相同费用和定位标准的广告资源包并进行销售。
  • 广告资源可用性跟踪:轻松确定针对特定的日期、展示位置和定位标准,是否能够提供足够的广告展示次数。避免超量预订及低价出售的情况。
  • 简单的广告标记生成和管理:直接将标记复制并粘贴到 HTML 中。避免广告资源销售方式改变时对网站重新进行标记。

收益优化

  • AdSense 集成(可选):使用 AdSense 来销售未售出的广告资源或与其他广告网络竞价。

广告定位

  • 内置定位选项:根据网站访问者的地理位置、日期和时间、带宽、浏览器、浏览器语言、操作系统和域来定位广告。
  • 自定义定位标准:将自己定义的键值对传送给广告管理系统,以此对广告的展示位置进行定位。

广告投放管理、广告投放和下订单

  • 投放选项:选择五种投放类型(独占、优先、标准、补余或内部)之一,来自动确定广告的投放方式。
  • 频次上限:设定多个级别的频次上限,用于限制同一个访问者在一分钟、一小时、一天、一周、一个月或一生内观看广告的次数。
  • 整包全部广告位:在同一网页上一次投放多个广告。(根据请求提供。)
  • 成熟可靠的 Google 基础架构:尽享快速可靠的广告投放和更短的加载时间所带来的便利。
  • 支持多种广告定价模式:每千次展示费用 (CPM)、每次点击费用 (CPC) 和每日费用 (CPD) 三种定价模式任选择。
  • AdSense 集成(可选):通过启用 AdSense 来持续投放付费最高的广告。
  • 广告网络管理:轻松使用网络订单管理第三方广告网络。

广告和富媒体管理

  • 富媒体支持:使用来自不同富媒体提供商的标记。自动检测宏。
  • 免费广告托管:节省带宽和费用。
  • 支持重定向的广告:轻松跟踪来自第三方网络、联属提供商或提供的其他网址的广告。

报告

  • 多种报告选项:生成有关订单交付、广告资源效果或总体销售情况的报告。
  • 详细报告:按日期、订单项、展示位置、广告客户和其他类别来细分报告。
  • 快速生成报告:创建报告只需几秒钟时间。
  • 互动视图:无需离开报告页面或生成新报告,即可排序数据、添加/删除列、查看不同的数据子集以及执行其他修改操作。
  • 媒体分级委员会 (MRC) 认证:Google 广告管理系统的广告展示衡量流程值得信赖。该流程获得了媒体分级委员会认证,完全符合互动广告局的标准。

用户界面

  • 搜索功能:从广告管理系统的任何页面中便捷地查找订单、广告资源或广告客户数据。
  • 直观的工作流程:轻松快速地创建订单、批准订单以及查看订单状态。减少培训时间和广告投放管理步骤。
  • AdSense 渠道集成:将现有的 AdSense 渠道导入广告管理系统(可选)。
  • 浏览器会话支持:可以使用浏览器的“后退”按钮和其他内置导航功能,不会出现丢失数据的情况。

管理

  • 访问控制:为团队成员设定各种查看和修改权限。
  • 联系人管理:存储并管理广告客户和代理公司的信息。
  • 支持多国语言和货币:以本地语言和货币使用 Google 广告管理系统。

2009年3月10日星期二

抓虾网可能快要倒闭了

  据网易科技报道,网易科技从可靠渠道获悉,国内RSS订阅的代表网站抓虾网已陷入经营危机,目前已有大量核心人员流失,并停止内容升级。

  据了解,抓虾网的核心程序人员已出现大量流失,并且网站已停止进行内容升级,仅有少量员工负责简单的技术维护工作。此前,曾有传闻称受金融海啸影响,抓虾网已倒闭,但据网易科技了解,这一传闻并不属实。目前抓虾网内有2至3名员工负责网站的日常运营,同时该网站的两名创始人徐易容与谌振宇仍在公司上班。有接近抓虾网的人士透露,是否关闭网站,主要取决于创始人是否打算放弃。对方称,尽管抓虾网的风险投资商联创策源已对该网站停止投入,但凭借两名联合创始人的资金实力,维持生存应该没有问题。

  “可能现在他们要考虑一下未来的发展方向了。重点不是抓虾网是否要关闭,而是他们未来会如何突破,毕竟RSS订阅现在来看还是太小众了,我相信如果他们找到一个好的方向,这次就算失败也是很好的经验。”该人士认为,抓虾网两名创始人徐易容与谌振宇是国内为数不多的优秀创业者,即使进行再创业,仍会被投资者看好,并且通过抓虾网的运营,两人已积累了丰富的创业经验。

  目前抓虾的用户其实并不少,可惜在线阅读器实在是缺少商业模式,免费的Google Reader又在大量蚕食这个市场,抓虾和Google Reader的这种直接竞争的确很吃力,现在外部环境也不好,金融危机已经逐渐开始蔓延,一直亏损下去也不是长久之计,不过,如果抓虾目前也有不少忠实用户,就这么放弃也挺可惜的,国内创业能发展到这么多的用户和影响力也很不容易啊,只留少数人员维护也可以坚持一段时间。

2009年3月9日星期一

Google Docs无法访问

  中国电信这两天不知道吃错了什么药,昨天搞Google的DNS,今天又搞Google Docs,今天发现深圳地区的电信线路无法访问Google Docs,不过其他地区情况未知。

  经过Tracert的测试,最后一个可访问的IP是中国电信骨干网广州的一个路由器,因此确定Google Docs的一些IP可能被屏蔽了,不过用户可以通过添加镜像IP的方法继续访问Google Docs服务。

  方法是就是编辑HOSTS文件,请编辑你的C:Windowssystem32driversetchosts文件,在文件结尾加上72.14.235.100 docs.google.com,保存退出,这时再打开一个浏览器,你就可以正常访问Google Docs服务了。

  要是我们真的不用Microsoft Office而全用Google Docs的话,那么我们的命运真的就全部掌握在中国电信这个流氓手里了。

Google Docs无法访问

中国Google服务访问故障

  据读者的反馈,今天下午五点四十分左右开始,Google.cn和Google.com都出现暂时无法访问的现象,绝大多数中国内地用户无法正常使用Google服务,这种现象持续了约四十分钟,到了下午六点二十分,Google.com和Google.cn访问恢复正常。

  这次故障的现象是Google的域名无法解析,通过Ping命令得到了如下的信息:Ping request could not find host www.google.cn . Please check the name and try again。因此怀疑是DNS解析出现了问题,也不一定是Google的DNS出问题,也可能是中国电信的DNS在解析上出现故障。

  晚上的时候Google回应此次事件说,Google自己的域名服务器没有问题,因此这次故障的原因应该是中国电信等运营商的问题,我怀疑,有可能是中国电信错误屏蔽了Google的DNS服务器的IP,导致国内的DNS服务器无法访问Google的DNS服务器,导致Google的域名无法解析,从而使得Google无法访问。

  在今年一月三十日的时候,Google搜索曾将全部索引网站标记为“恶意站点”。二月二十四日,Google的Gmail邮箱服务又宕机长达四小时,Google今年来可真是不走运啊,什么事情都能碰上。

  以下为谷歌官方对今天事件的回应:

  北京时间三月八日17:23至18:45之间,由于GOOGLE.CN和GOOGLE.COM等相关域名不能被正常解析,导致部分中国地区无法访问谷歌公司的域名服务器,使得部分中国地区用户在该时间内不能访问谷歌公司的相关网站。

  我们的工程师立刻行动,启用备用方案,目前服务已经全面恢复。

  经过调查,谷歌本身技术、运营在这期间一切正常,切实、具体原因,谷歌正在彻查之中。

  名词解释:DNS:DNS 服务,或者叫域名解析服务,就是提供域名与IP地址的相互转换。域名的正向解析是将主机名转换成IP地址的过程,域名的反向解析是将IP地址转换成主机名的过程。