正在查看: 2009年07月日志归档(第 1 页 / 共 5 篇)

五星红旗与美国白宫

很久没写博了,因此最近在忙着做一个最新的项目,相信过不了多久就可以和大家见面了。

据说,今年中国60年华诞前夕将有一面五星红旗在白宫广场升起,很好很强大。中国,再也不是那个60年前的中国了。

值得思考的是,天-安-门是否有气度照耀自由女神像的光辉呢?如果有,在何时?

实例分析setTimeout和setInterval的区别

理解编程中某个对象、方法和属性的最好方法,莫过于通过不同实例对其进行验证。

在JavaScript中,setTimeoutsetInterval是window对象的两个不同方法;我们通常利用这两个方法来重复执行某个代码段或者function,以实现网页上的一些“动态”效果。

有意思的是,它们的用法几乎完全一样,都是:

setTimeOut(expression, timespan)

setInterval(expression, timespan)

第一个参数expression是需要调用的function;第二个参数timespan是指定延迟(等待)多少秒才调用参数一中的表达式,单位是微秒milliseconds。

既然这两个方法都是延迟一段时间后执行某个表达式,那么,它们的功能不就一样了吗?用我们的膝盖想想都应该知道,如果这两个方法的功能完全一样, ECMAScript开发组何不将他们合并成一个方法?

»阅读全文

Tags: javascript

山寨与中国

话说今天和一印度同学约好在Postgraduate Lounge聊技术问题,结果我们从JAVA聊到了.NET,从Oracle聊到了IBM,最好竟然聊到了山寨这个话题,我非常佩服我们的吹水和跳跃思维能力。

在 我向这位同学解释啥叫山寨的时候,有意思的事情来了,因为我不知道山寨到底怎么解释。如果我说Shanzhai吧,是拼音,他听不懂;如果我说山寨是 Fake stuff吧,这不符合山寨精神的含义。于是,我告诉他:啥叫山寨?山寨就是Chinese-version Facebook, Chinese-version Twitter, Chinese-version Nokia还有Chinese-version Superstars……

只听见他沉思了一下,然后大喊一声awesome,然后来了句比较冷的话:早说嘛,我们全家都是中国山寨手机的消费者,便宜还好用……

然后我给他展示了一个NB的山寨作品,那就是校内网;他还问我校内的意思是什么……看来已经对中国的山寨文化感上了兴趣。

”管中窥豹,可见一斑“。看来山寨文化已经从中国蔓延到国际了,他们或许不知道lenovo在中国被称为联想,本是一家中国公司;但他们绝对知道自己手上的水货手机的原产地是中国。

我不知道这是一件值得高兴还是一件悲哀的事情,或者兼而有之。

但 至少,中国的产品文化已经向前迈进了一步,从中国产品1.0的Made in China,迈向了famous-brand-like products from China的2.0时代,啥时候去掉这里的like一词,啥时候中国就真正强大了,也就是3.0时代了,也就是传说中的Product of China.

Tags: 山寨

MySQL:快速随机选取一条记录的思考

本文讨论的是如何从MySQL一个数据表中提取一条随机的效率,同时要保证效率最高。

方法一

这是最原始最直观的语法,如下:

SELECT * FROM foo ORDER BY RAND() LIMIT 1

当数据表中数据量较小时,此方法可行。但当数据量到达一定程度,比如100万数据或以上,就有很大的性能问题。如果你通过EXPLAIN来分析这个语句,会发现虽然MySQL通过建立一张临时表来排序,但由于ORDER BY和LIMIT本身的特性,在排序未完成之前,我们还是无法通过LIMIT来获取需要的记录。亦即,你的记录有多少条,就必须首先对这些数据进行排序。

方法二

看来对于大数据量的随机数据抽取,性能的症结出在ORDER BY上,那么如何避免?方法二提供了一个方案。

首先,获取数据表的所有记录数:

SELECT count(*) AS num_rows FROM foo

然后,通过对应的后台程序记录下此记录总数(假定为num_rows)。

然后执行:

SELECT * FROM foo LIMIT [0到num_rows之间的一个随机数],1

上面这个随机数的获得可以通过后台程序来完成。此方法的前提是表的ID是连续的或者自增长的。

这个方法已经成功避免了ORDER BY的产生。

方法三

有没有可能不用ORDER BY,用一个SQL语句实现方法二?可以,那就是用JOIN。

SELECT * FROM Bar B JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM Bar) AS m ON B.ID >= m.ID LIMIT 1;

此方法实现了我们的目的,同时,在数据量大的情况下,也避免了ORDER BY所造成的所有记录的排序过程,因为通过JOIN里面的SELECT语句实际上只执行了一次,而不是N次(N等于方法二中的num_rows)。而且,我们可以在筛选语句上加上“大于”符号,还可以避免因为ID好不连续所产生的记录为空的现象。

还有更好的方案吗?有待总结。

Tags: mysql,效率

Yahoo有Bing:Yahoo Boss和Search Monkey服务将会被保留

作为一名开发人员,我并不太关心雅虎作为一个搜索引擎的垂垂老矣,以及他们与微软所作出的交易。It's none of my business.

我所关心的是作为雅虎搜索API旗下的Yahoo! Search Web Services是否会被中止?如果被中止,对于基于此API的应用程序或者希望使用Yahoo Search API接口的开发人员将是一个噩梦。

虽然可能在搜索技术和业务推广上不如Google,但是在“开放”这个话题上,雅虎绝对是一个令人尊敬的公司。你可以通过各大搜索引擎对于其搜索API的重视和开放程度来审视这一观点:

对于开发者来说,Yahoo的Yahoo BOSSYahoo Search Monkey在开发灵活度上要远比Google AJAX Search要开放很多;后者主要提供基于前端AJAX封装的搜索功能,可以说,这不是真正意义上的Web Service。

05年以前,Google还提供基于SOAP的Search API,不过目前这个API已经被中止。有些许值得欣慰的是,Google目前的AJAX Search增加了JSON回调数据的接口,但就算如此,开发性仍然比不上Yahoo Search API。

至于国内的百度,就不提了,似乎从来没有,也不打算提供基于中文搜索的API服务。或许百度压根就不是一个以技术为驱动的公司,而是一家营销公司。

废话不多说,那么到底在Bing和雅虎的交易过后,雅虎目前的API是否会保留?我们可以从TechCrunch的这篇文章中了解到:

Microsoft will also become the new home for Yahoo’s search technologies. That is a good thing because even before this deal was announced, the spirit of technology innovation at Yahoo which produced projects such as Yahoo Boss and Search Monkey seems to have fizzled. These efforts will now be passed on to Microsoft. The fortunate news is that Mehdi says he wants to keep those projects alive. “For Search Monkey and Boss, we will integrate that technology and determine how to take that forward. There is a lot of goodness there.” At least Microsoft knows a good developer platform when it sees one.

可见,Search Monkey和BOSS都将被保留,但如何发展,就得看微软的整合能力了,不过这一点应该不用太担心。