Loading...

Archive for October, 2008

    AD: 猛买网,精彩团购 | Jobsdigg | 很棒的男装店 | 网站地图

AJAX:我们离X多远了?

昨天在项目里,同事用了一个ActiveX控件来把AJAX请求返回的字符串解析为XML DOM。这样的操作方式在Firefox下行不通,于是兼容性问题被摆到桌面上。一下子没有想到好的解决方案,后来一拍脑袋,用responseXML不就可以了!

在2005年,AJAX还算个新东西,它的全称是Asynchronous JavaScript and XML。我刚学习AJAX的时候,读了《Ajax Foundation》和《AJAX In Action》这两本书。从最基本的XMLHTTP开始,一步步打造装备了AJAX的应用程序——虽然在现在看来很多东西有点老土,但我依然觉得它们是非常适合想学AJAX的同学。

那时的书里也在灌输这个概念:用XML格式来发送响应信息。那时用文本+操作innerHTML是会被鄙视的,因为它不够灵活。也就是说,在最开始的时候,AJAX里的响应用的是XML,根本就不会有本文开始的问题。只要获取一下responseXML,就是一个XML DOM。只要再获取一下DocumentElement,就得到了DOM根节点。在上面随便用什么getElementById,和操作页面上的DOM元素没啥区别。

现在的AJAX应该很少用XML格式的响应了。操作innerHTML确实很便捷;就算需要更为灵活的数据,也有清晰好用的JSON。Rails框架还提供了RJS,可以返回javascript片段到客户端执行。其实这种思路是通用的,但拿rails来做,很容易。

其实,像XML这种臃肿的东西,注定不会在AJAX的世界里呆多久的。

一本十元书引发的抢购

此事过去了一个多月,一些需要的数据尘埃落定,于是打算写这篇文章。Fenng在twitter上说,一口气买了5本《深入理解计算机系统》,在卓越亚马逊上,从被发现的那天开始,这本经典图书只卖10块钱。

发现这本低价书以后,我和两个同事(1 2)开始了一次有趣的推广。并由此引发了小规模的抢购,卓越上的这本书,几次补货都被买空。推广所用的标题无非是“卓越亚马逊标错价格”之类的,这样可以吸引眼球,但卓越亚马逊是不是真的标错了价格?我不知道。

持续了2天多的抢购,从我可以监控到的订单,大概给卓越带去了9000多元的销售额,按照当时11%的比例,如果这些订单全部有效,大概是1000元的收入。两位同事也收获颇丰,其中一位单日销量就有6000多。更重要的是,这些并没有占用我们多少时间,我们只需要发几个帖子,然后工作之余查查报表。

事情已经过去很久,但还是想写一下。很多人认为卓越亚马逊标错了价格,我看未必。主要有下面两个原因:

  1. 卓越亚马逊会有自己的监控体系,这点我以前写过。对于一天之间突然卖了一千多本的图书,不可能察觉不到。这本书多次卖到缺货,卓越多次补货,如果真的是标错了价格,该有很多次改正的机会。
  2. 我分析了一下部分销售数据(数据来自同事孙智的销售报表,在此BS一下eqifa简约的报表功能),在选取的时间段内,由这本图书的链接形成的购买,一共是¥3013.50;而其中这本《深入理解计算机系统》,加起来只有¥272.70——不到10%。也就是说,在被这低价书吸引到卓越以后,用户每花一块钱到这书上,就会相应地花大概十块钱到别的商品。可能卓越在这一块钱里是不赚钱的,但在别的10块钱上,总不至于赔钱。总体来说,卓越依然是赚钱的。

综上,卓越亚马逊很可能是以比较低的价格,拿到了这批书。然后以低价吸引用户过来,他们也会买一些关联的商品。对卓越来说,不一定卖出的每样东西都要赚钱,而只要总体的收入大于成本。

淘宝有没有说谎

淘宝称屏蔽搜索一年流量未降反升180% :http://tech.sina.com.cn/i/2008-10-28/17072540454.shtml

从最先被发现开始,这个日期就没变过。淘宝真的一年前就开始了屏蔽?

这些广告中的一些,很快就没了

阿里巴巴宣布停止在百度投放广告:http://www.cnbeta.com/articles/68331.htm

在百度搜淘宝,截了一张图,侧栏的广告从上到下出现了:卓越亚马逊(第一次出现)、易购(看见老东家,心里真光荣)、某淘宝两钻卖家(这家看来出了不少钱,NB)、卓越亚马逊(第二次出现)、支付宝(真奇怪支付宝为啥买淘宝这关键字)。

最下面还有一行文字:找淘宝在阿里巴巴。真佩服阿里,不买广告都这么义正词严地发表个声明。

图书ISBN编码10位和13位的换算方法

图书的ISBN有两种编码,一种长度是10位的,另一种是13位的。两者其实是可以用特定的算法相互推导的,关键在于最后一位校验码的计算。昨天研究了一下,感觉很简单:

先说10位计算到13位,以卓越亚马逊上一本《投资学》为例。10位的isbn编号是7111165616,转化到13位,遵循下面的算法:

  1. 去掉最后一位,在最前面加上978,变成978711116561
  2. 从第一个数字起,求每奇数位的和,记为a。9+8+1+1+6+6 = 31
  3. 从第二个数字起,求每偶数位的和,记为b。7+7+1+1+5+1 = 22
  4. 求a+3b,记为c。c = 97
  5. 求10-c并对结果取10的模,(10-c)%10 = 3。这就是校验位,加在第一步结果的最后。得到13位编码为:9787111165613

从13位到10位的计算方法更简单。同样是这本《投资学》,13位编号是9787111165613,现在想把它转化位10位,可以这样做:

  1. 去掉开头的”978″和最后一位校验码,变成711116561
  2. 从第一位开始,将每一位和10到2的数字相乘,并求和;7*10 + 1*9 + 1* 8 + 1*7 + 1*6 + 6*5 + 5*4 + 6*3 + 1*2 = 170;记为c
  3. 求11-c并对结果取11的模:(11-c)%11 = 6;如果结果是10就记为X,然后把算出来的一位加到第一步结果的最后,得到10位编码为:7111165616

计算的方法比较简单。我用ruby做了一个小工具可以方便地计算,可以在这里下载。

用法:

require ‘isbn_format’

a = IsbnFormat.new “711165616″

a.isbn10 #=> “711165616″

a.isbn13 #=> “9787111165613″

构造时的参数可以用10位或13位的isbn,也可以带有横线,比如7-1111-6561-6。有可能会抛出ArgumentError,如果参数的长度不对的话。

怎样才算是个Web Developer

到今天,在公司完整参与的第一个项目算是交付测试,我也松了一口气。这次是做庆祝支付宝4周年的活动。年庆活动就像是兴奋剂,虽然用户未必有真的实惠,但运营的人能有真的KPI。

回到今天的话题,怎样才算是个Web开发者呢?大学第一年曾有个老师问我,将来想做点什么。那时我基本啥都不懂,只是说,我想搞Web开发。一语成谶,后来的好几年,我没写过几个windows上跑的软件,却大大小小做了不少网站。我觉得做Web开发比做狭义上的软件开发要复杂,因为你不仅得掌握至少一门后端语言,还得了解CSS、javascript以及XHTML标准。

在这次的四周年项目中,其实后端大部分东西都是现成的,无非是几个接口调用一下,抽个奖兑个红包之类的。但前端的活动页面需要UI的同事配合来做,然后把切好的页面拿给我们加上程序。别的时候这样的流程还走得通,但这次情况不一样,很多地方都需要用AJAX,提示消息全部要用弹出层。一开始几个java工程师认为一天能搞定的活儿,N个人干了两周,包括加班,才勉强提交测试。

有很多细节,比如UI的同学们发来的弹出页面Demo,需要点击才能弹出提示层。同事们在使用的时候,只能在程序里模拟一个button.click的事件。UI的同学们用的CSS Prime Sprites也造成了不小的困惑,为啥没改背景图图片都会变涅?更别提Firefox和IE6/7之间的兼容性问题,我很怀疑兼容性问题不会在测试中得到重视。

我有些用js、css的经验,所以得以解决了不少问题。看到支付宝UED团队招聘的Flash,我才知道公司还有一个叫Web Developer的职位。把前端和后端分开来做,在我看来,实在不是一件好事。但有几个人能把前端和后端都做好呢?Livid这样的天才不是随便哪家公司都能求来的,这样的职位设置,只能认为是不得已而为之。和周围同事聊起javascript,普遍的结论是作为java工程师不需要去学习javascript,但我觉得所谓Web开发者,并不只是会做前端或会做后端就合格了。融会贯通是需要的,我曾和同事写过一封讨论的邮件,主要想表达的内容是这些:

  1. 从Web后端的语言说起,比如PHP,java,ruby,python这些,总体的思路是一样的。在一次HTTP请求中,后端的程序做的事情无非就是 ,接受请求,按照既定的规则进行处理,给出响应。至于是返回一段文本,还是返回一个网页,或者是别的格式,这些都不重要。因为最终是由浏览器来解释。
  2. 之后一层,就到了前端。首先是HTML,其实有点像我以前画素描:画在二维的平面上,但目标是呈现一个三维的场景。HTML是一个一维的字符序列,但它规划出了一个网页的结构,像是一副骨架。这就是二维的了。HTML是基于Tag的。
  3. 接下来就是CSS,CSS的写法其实就是一个个hash,用key-value-pair来表示某(些)元素该长什么样子。比如一个鼻子,颜色是黄的,7cm高,4cm宽。这些都归css管。
  4. 最后是javascript。在我刚接触它的时候,它被描述为“基于对象的语言”,因为那时人们用js大部分是拿来操作网页元素,所以说它是基于对象。但javascript其实有继承、封装、多态的特性,是一门十足的面向对象的语言。它可以把(X)HTML和CSS完美地结合起来,在AJAX中也被用来访问后端。js很容易上手,有很多好用的库,但,它也是最容易遇到兼容性问题的。

其实一切都是逻辑。这次的四周年活动下月就将推出,关注前端开发的同学们可以仔细翻阅一下源代码,我承认我们做得东西很幼稚,包括Ajax请求都是手写的。但我会努力改变这种情况,下一步希望可以在周会的时候,做一些这方面的分享。

觉得又要写后端程序又要做前台页面很痛苦的同学,建议看一下Rails这个框架,首页上的“Web development that doesn’t hurt”,直到如今我才有点明白这意思。以前用PHP,也一直没觉得hurt呀 :) 。欢迎大家留言给我,谈谈觉得怎样才算是个Web开发者呢?

周末去参加这个活动,感兴趣的朋友可以一起来。

网上买家具

关注一个网上卖家具的网站有段时间了,今天得以和他们取得联系。最初看到他们在网上卖家具时第一反应是这么大的家伙,怎么配送呢?今天才知道如今的物流公司已经能轻松搞定。

04年我刚开始在卓越网买东西的时候,觉得除了书和CD,别的都不太适合在网上买。但到现在我周围的大件小件,很少有在网下买的。仔细想想,一种东西是否适合在网上销售,其实和它本身是什么东西关系不大。主要有3个问题需要解决:物流、标准以及信任。

物流自不必说。标准,就好比两本isbn编号相同的书,可以认为他们是没有差异的。我以前只买书和CD,但后面买鞋我要43码的,买衣服要XL的。有了这样的标准,可以避免许多的不合适。信任也是关键的一环,淘宝的评价就是为了营造一个信任的环境。而支付宝更把目标定位在打造信任。大部分时候,以上这些都不算是问题了,所以我敢在网上买Thinkpad,敢在网上买数码相机。

这家123f.com,在淘宝上是一个四钻的店铺,来自买家的评价都很不错。家具卖到4钻比衣服卖到皇冠都要难很多。如果你不想连续几个周末都被小资的老婆拉到家具城,倒是可以考虑一下。网站刚刚起步,有一个论坛在这里

GAE离得很远

(瀑布汗,这篇文章没写完,要出门。结果不小心点了保存旁边的发布,于是提前就把一小段给发布出来了。)

GAE出来的时候,很酷。前些日子我下载了SDK,照猫画虎地玩了一把,python的精巧别致,算是对成天埋头java中的我的一点调剂。昨天在GAE的邮件列表里看到了他们的RoadMap:

10/08 – 3/09
* Service for storing and serving large files
* Datastore import and export utility for large datasets
* Billing: developers can pay for more resource usage
* Support for a new runtime language
* Uptime monitoring site

其中的”Support for a new runtime language”,可能真的就是perl。但appspot.com在国内不少地方都访问不了,绑定独立域名后,CNAME指向的主机也连不上。平日拿来玩当然可以,但如果想做个啥东西在上面,基本上别指望能让国内用户用你的app了。不能怪Google不能怪别的,只怪生的地方不好。

不过,要是能用GAE做一个facebook上的app,倒是个不错的主意。

卓越亚马逊,终于顶不住了

某同事在我的推荐下,打算在卓越买一本《全世爱》。到了结账的时候发现,居然要收5元运费。转回首页一看,原来免运费的公告,变成了购物满30元免运费。

联系到前几天的一封邮件,我一开始也以为是卓越玩腻了CPS,现在看,真的是烧不起钱了。智勇说国外的公司如今都在裁员裁业务,单从国内来说,现在当当网境况要比卓越好很多。

免运费持续了差不多一年半,卓越亚马逊终于顶不住了。相信与之相伴的,还有商品价格的普遍提高,短期内不打算在卓越买东西了。想网购的话,可以去当当

支付宝官方blog初见成效

昨天,支付宝在blog上发布了一条推出linux下firefox安全控件的消息,今天已经在很多网站上看到,也有很多blogger写文章推荐。虽然用linux的可能是小众,但绝对是网民中很有味道的一撮人。这个linux下可以使用的控件无疑极大博得了大家的好感。昨晚凌晨归来,看着那篇文章被众多geek弄成了个交流技术、修正错误的帖子,忍俊不禁。

支付宝还有一个人气很旺的社区,但我相信,如果这条消息是发在支付宝社区,那些Linux的用户必然没有这么快能得到消息。blog这个东西,一方面是个发布信息的窗口;另一方面,也是个活的反馈的渠道。我今天很惊讶地看到用了firefox下的安全控件已经可以流畅使用Tab键登录,要知道,昨天这个问题还在被网友热议呢。

Fenng说数字证书、Mac平台的支持都即将推出,这是从无到有做一件事的过程。