“最被误解的语言”正焕发全新活力

这些内容最早出自6月份的一次团队内分享,后来圆心推荐发表在了8月的《程序员》杂志上。遗憾的是编辑自行作了很多删改,原文发在这里。

Douglas Crockford曾称JavaScript是“世界上最被误解的语言”。确实,很长一段时间里,JavaScript都曾是泛滥的网页特效和弹窗广告的代名词。近些年来,随着Ajax应用的流行和前端框架的发展,JavaScript已经越来越严格和标准化。同时,在前端领域之外,JavaScript 也正被越来越广泛的使用。下面我们通过几个简单的JavaScript语句,一起来了解这些领域的应用。

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8080, "127.0.0.1");

这几句代码大体可以看出,它们的作用为:在本地的8080端口监听请求,返回浏览器响应──没错,这是基于JavaScript的服务器程序 node.js( http://nodejs.org/)的一段控制语句。
node.js基于V8引擎(Chrome浏览器使用的JS解析器),它继承了 JavaScript的诸多特性,具备比Apache等传统服务端程序更好的性能和特性:I/O读写都经由V8引擎来处理,避免不良代码造成的死锁;更节省内存开支;处理并发请求效率更高;等等……

{"id": "036378",  "name": "etai", "job": "F2E" }

这是一句简单的JavaScript专用数据格式——JSON语句,但确切的说,它一种基于JSON的数据库存储格式——BSON,是最近流行的NOSQL(非关系型数据库)的一种存储形式,非关系数据库多采用kay-value形式,具备比关系型数据库更强的扩展性和可操作性,并且在海量存储、高并发读写方面有绝佳的表现。

var t = db.things.findOne( { name : “etai” } );

这句JavaScript语句的作用为:在以BSON存储的数据库中取得一条记录。它是著名的非关系数据库——MongoDB的一条查询语句。MongoDB基于C++开发,使用二进制格式存储BSON数据,可以对BSON中每个字段进行索引,具备极高的处理海量数据的能力。让人惊讶的是,它分别提供了基于十几种语言的查询语句和服务端、客户端,其中就包含对JavaScript的完美支持——MongoDB提供了基于Node.js的数据库服务器、基于SpiderMonkey的数据库客户端,以及JavaScript查询语句,并且提供了全功能的Web Shell。

JavaScript在这些领域的应用,已经不单单是停留在实验和玩票的性质,它们在国内外已经开始了大规模的使用。可以预见,在不久的将来,会出现这样的网站:它的前端使用JavaScript实现网页特效和交互,服务端运行的是基于JavaScript的Web服务器和数据库服务器,数据库使用JSON/BSON存储数据。

作为前端工作者,看到我们最熟悉的语言正在被这么多人、在这么多领域研究和使用,兴奋之余也倍感压力——越来越多的研究和关注,必然会促进这门语言更快的发展,同时也会变得更严格和严谨。这对前端工作者提出了更高的要求和挑战——与时俱进,不断超越!

IE6的position:fixed

手头一个项目中,要实现把一个浮层控制在浏览器窗口右下角,用”position:fixed”来控制最合适不过了。

但万恶的IE6不支持这个属性,之前采用过的方法有:将滚动条转移到body上,使用绝对定位控制浮层位置;使用JS实时判断滚动并设置浮层位置。

第一种方法局限性太大,页面中有其他绝对定位元素会受到影响;第二种方法需要在页面里加定时器,资源开销和时间成本都有点高。

后来在同事小卓的启发下,使用CSS表达式完成了IE6的兼容,代码如下:

_position:absolute;
_top:expression(document.documentElement.clientHeight - 213 + (e=document.documentElement.scrollTop) +'px');
/*
document.documentElement.clientHeight : 浏览器串口高度
200 : 浮层高度
(e=document.documentElement.scrollTop) : 滚动条高度
 */

CSS表达式虽然方便,但浏览器资源损耗仍然很大,要根据具体应用场合决定,“一切皆权衡”,哈~

Google App Engine、Twitter API Proxy、Mixero搭建Twitter环境

以前用Twitter都是通过代理访问网页或者使用第三方网站,今天安装了一个桌面客户端──Mixero,使用Google App Engine架设了一个Twitter API代理,就可以在桌面上随时看推发推了。网上一些假设教程不大准确或已过期,这里记录一下自己的操作过程。这些操作都是在MacOS下进行的,在Windows和Linux下也都类似。

Mixero

Mixero是一个优秀的Twitter客户端,基于Adobe Air,支持各种操作系统,并且有中文版本。

由于众所周知的原因,Mixero必须通过代理才能与Twitter连线,下面的繁琐的步骤都是拜GFW所赐,Let’s Fuck Them!

阅读全文 »

我的淘宝花名

很早就听说过淘宝的花名传统,阿里的一些牛人也顶着花名扬名立万。今天,我也在释然师兄的帮助下选取了自己的花名,过程有些遗憾,结果更多的是兴奋和期待。

一直以来都没有一个固定的网名,QQ上叫虫子,很多朋友叫我啊花,自己还常用j5726等。

接到淘宝的offer后,就开始考虑花名的事情。最先想到的是鱼同,《书剑恩仇录》中的余鱼同,是一个很纠结的人物,潇洒但专情、任性却正义。同《卧虎藏龙》中的玉娇龙一样,是一个有血有肉,让人又恨又爱的形象。很幸运,这个名字没有被占用,但又很不幸,系统中存在同音字,所以拼音ID冲突,不能使用。。

接下来,又让师兄帮忙试了我熟悉的几个人物,都被占用了。群里的朋友也帮着我出谋划策,结果一个个闪亮的名号都被无情的扼杀。

最后的最后,从系统推荐的名字中选了这个 ── 当当当当,“额台”!

速别额台,又称速不台,是成吉思汗时期蒙古的杰出军事家、战略家,曾攻陷莫斯科,占领匈牙利,戎马一生,直至老死在军营里。

八百年后的今天,在前端行业里也会出现这样一个“额台”,希望能像先人一样,矢志不渝,终生奋斗,在行业中留下自己的一笔。

以上自勉。

豆瓣,可以成为值得我们尊敬的互联网公司吗?

按照某种不成文的惯例,在开始之前,我不得不要再次论述一下 什么是豆瓣。当然,如果你自信足够了解,可以跳过下面的一小段引用文字。

豆瓣网成立于2005年3月26日,是一个典型的Web 2.0 网站。它提供社交服务和在线的音乐、书籍和电影数据库。在2008年,它拥有将近 1,200,000 名用户,并被  Alexa Internet 列入中国百家最受欢迎的网站之一(排名第74名)。  豆瓣允许用户为电影、图书和音乐评级。它的用户评选出的最受欢迎的图书常常被中国的一些顶尖媒体引用。

——引用自 kngine.com

一、写在前面

在众多的网络公司之中,大部分人都不得不提到其中一家最为著名、也是最为成功的公司—— Google 。没错,Google 作为最受欢迎的搜索引擎公司,它在其他领域的影响力也不可小视。当然,中国的互联网网站能够从它身上学到大量的东西。我个人认为, Google 成功的原因来自于以下三个方面:专注、开放、创新。

阅读全文 »

小白磨合 - 求职这些天的所思所得

终于娶回了梦寐以求的小白,用上了传说中程序员必用的MacOS。

好久没写东西了,打点字,顺带磨合一下新机器。

出来找工作好多天了,交流中、面试中遇到的很多问题都是自己从未考虑过的,从中想到了不少,学到了不少。

关于视野与极限

阅读全文 »

可以在前端实现的几个地理位置小功能

在Smashing Magazine上看到这篇Entering The Wonderful World of Geo Location,介绍了获取并处理用户地理位置的应用和方法,很有意思。结合原文的内容,加上之前的一些应用,整理了几个可以完全在前端实现的地理位置相关小功能。

1.通过IP获取用户位置

很多时候需要通过IP判断用户的位置,通常的办法是通过自己的后台程序查询数据库得到。如果用户位置只是应用在前端,或者有其他的特殊原因(比如,懒:),也有一些其他办法来快速的获取用户位置。

maxmind.com提供了一个服务,通过引入一个js文件(http://j.maxmind.com/app/geoip.js),可以把他判断到的用户的国家、城市、经纬度等信息加入到页面中来。下面是从青岛访问这个js文件返回的内容:
阅读全文 »

TED2010:下一代的地图技术在微软而非Google

点击”View subtitles”可以显示中文字幕

阅读全文 »

JavaScript单元测试工具 — QUnit

QUnit是jQuery团队开发的JavaScript单元测试工具,使用方便,界面美观。近期试用了一下并进一步了解了JavaScript单元测试,记录一下所思所得。

什么是单元测试

单元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。单元测试主要是用来检验程式的内部逻辑,也称为个体测试、结构测试或逻辑驱动测试。通常由撰写程式码的程式设计师负责进行。

通常来说,程式設計師每修改一次程式就會進行最少一次單元測試,在編寫程式的過程中前後很可能要進行多次單元測試,以證實程式達到軟件規格書(en:Specification)要求的工作目標,沒有臭蟲;雖然单元测试不是什么必须的,但也不坏,這牽涉到專案管理的政策決定。

—— 维基百科 (中文英文)

为什么JavaScript需要单元测试

阅读全文 »