人人网FED团队 招聘前端工程师

前端工程师(javascript)
工作地点: 北京
性别:不限
要求:
精通HTML DOM对象的Javascript编程,熟悉对象化Javascript编程
有使用js框架经验,了解 不同浏览器之间的差异,写出的代码具有良好的兼容性
掌握XHTML、CSS, 对W3C有较深理解
了解web后端开发,熟悉 至少一门后端语言
熟练阅读英文技术文档

前端工程师(xhtml/css方向)
工作地点: 北京
性别:不限
要求:
精通各种Web前端 技术,包括XHTML/XML/CSS,了解不同浏览器之间的差异,写出的代码具有良好的兼容性(至少兼容3种以上浏览器内核)
深刻理解Web标 准,对可用性、可访问性等相关知识有实际的了解和实践经验
对各种前端技术有一 定了解和关注,并对前端开发工作有持续热情
熟练阅读英文技术文 档
如果你有js, flash等相关技术的开发经验或参与过大型web应用的开发,那么你在应聘时会占有很大优势

申请职位请发邮件到:bo.hu^_^renren-inc.com(^_^换成@)
QQ: 287759234

Nodejs简单异步操作管理器

我想我每次开始写博客的第一句话都会是:好久没有写博客了,写一个吧 – -!

最近写nodejs比较多,刚开始的时候碰到的异步的操作比较少,因为想做的东西比较简单,一查api有同步的,为了省事就直接用同步的搞了,慢慢发现这不是个事呀,好好的异步特性不用,非得用同步的,真囧,并且很多东西木有同步的api的。

好!写异步的,慢慢的出现了这种代码。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql.query('xxxx').on('success', function(){
   mysql.query('xxxx').on('success', function(){
        mysql.query('xxxx').on('success', function(){
            mysql.query('xxxx').on('success', function(){
                mysql.query('xxxx').on('success', function(){
                    mysql.query('xxxx').on('success', function(){
                        //let's say fuck
                    });
                });
            });
        });
    });
});

恩,你也看到了,这样下去代码多丑,会像老太太的裹脚布一样了,于是就产生下面的异步操作管理器,小巧精致,嘿嘿,绝对够用,代码的事,用代码说话吧,直接亮代码,如码:

TODO:不够全面,比如说出错的就没有处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
 *  异步管理器
 *  author : jser.me
 *
 *  使用方法:
 *     var asyncMg = require('./AsyncManager');
 *     asyncMg
 *     .push(function( next ){
 *         some_aysnc_method().on('success'{
 *            ....
 *            next();
 *         })
 *     })
 *     .push(function( next ){
 *         other_aysnc_method().on('success'{
 *            ....
 *            next();
 *         })
 *     })
 *     .push( ... )
 *     .run() //执行
 *     .on('success', function(){
 *          allThings_is_down();
 *     });
 *
 *     push方法接受数组
 */
 
function typeOf( obj ){
    return Object.prototype.toString.call( obj ).match(/\[object ([^\]]*)\]/)[1];
}
 
function AsyncManager( arg ){
    this.execArrys = [];
    this.push( arg );
}
 
//使用系统带的继承方法
require('util').inherits( AsyncManager, require('events').EventEmitter );
 
//标记成功运行的函数数目
AsyncManager.prototype.succCount = 0;
 
 
//加入
AsyncManager.prototype.push = function( arg ) {
 
        var This = this;
        if( typeOf(arg) == 'Array' ){
            arg.forEach( function(v,i){
               This.execArrys.push( v );
            });
        } else {
               This.execArrys.push( arg );
        }
 
        return this; //链一个
};
 
//执行
AsyncManager.prototype.run = function(){
        var self = this;
 
        if( this.succCount == this.execArrys.length ) {
            //所有函数成功执行后触发事件
            this.emit( 'success' );
        } else {
            this.execArrys[ this.succCount ]( self.run.bind( self ) );
        }
 
        this.succCount++;
        return this; //链一个
};
 
exports = module.exports = function( arg ){
    return new AsyncManager( arg );
}

ubuntu下用国外vps的ssh翻_墙

##2011.5.28更新

事实上可以直接用这个命令

1
ssh -qTfNn -D 端口号 用户名@服务器地址

然后在浏览器里设置代理 127.0.0.1:端口号 就行了
######################################################

最近google频繁被墙,公司的代理还得vpn才能用,不能忍了,自己搞一个吧

这里介绍的方法前提是有一个国外的vps,便宜的国外vps还是挺多的,买一个平时当学习开发机也不错,搞点小站,还可以自己没事出墙瞅瞅,很赞哦~

window下有MyEnTunnel或者Tunnelier,相关教程网上到处都是,搜搜吧

ubuntu下也有一个类似的工具,可以直接apt-get

1
apt-get install gstm

或者到这里下载源码,自己编译一下,11.04的ubuntu需要

1
sudo apt-get install  libgnomeui-dev

安装后,打开gstm,新建一个tunnel,填上vps的一些信息,其实就是ssh的帐号,prot redirection选择dynamic,然后设置一个端口,大于1024即可,如7070

然后保存回主界面,start,浏览器代理里选socks代理,127.0.0.1 7070

有些软件只能用http代理,可以再装一个privoxy

1
sudo apt-get install privoxy

修改配置文件/etc/privoxy/config,

1
2
listen-address  localhost:7077
forward-socks5 / 127.0.0.1:7070 .

重启一下 sudo /etc/init.d/privoxy restart
这样的话设置代理就是设置为 127.0.0.1 7077端口

浏览器再配上一个autoproxy就相当给力了

好,打完收功,唉哟,不错哟~~

写给自已

  1. 不要因为眼前的小利益,忘记长远的发展
  2. 多与朋友沟通
  3. 走自已感兴趣并且与性格相符的路
  4. 戒骄戒躁
  5. 保持进取,不可荒度每一个小时
  6. 该早起了,该早起了,该早起了
  7. 早点睡吧,早点睡吧,早点睡吧
  8. 不能成为大胖子,向着肌肉男的目标前进
  9. 不管多么累,多么难受,多么苦,永远不能表现出来,微笑,微笑,微笑!!!
  10. 每天睡前写一会日记,今天做了什么,给了别人什么帮助,能力提高了吗?有什么遗憾吗?

一点一点找回丢失的系统功能

这个系统不知道怎么回事,终端下面有些功能居然没有了,直接从一台机器上把home拷过来都没有用,一点一点的恢复吧,这里做个纪录

退格删除键变成了^H

恢复方法:
.profile里

stty erase ^H

^H输入方法是: ctrl+V+H

tab自动补全丢失了
好吧,是我无厘头了,查看了一下  /etc/passwd里关于当前登录用户的行,发现居然是 /bin/sh

改成了 /bin/bash, 重新登录一下,正常了!!!

装个漂亮点的编程字体

写代码最重要的还是区分0o,li1这些,字体再好看点就更好了

目前我用的是Monaco感觉很不错哦

下载地址:http://www.gringod.com/wp-upload/MONACO.TTF (来源:http://www.gringod.com/2006/02/24/return-of-monacottf/)

安装

1
2
cp MONACO.ttf /usr/share/fonts/truetype/
fc-cache -f -v

这里有一个程序员喜欢的字体的大全 http://www.kuro5hin.org/story/2004/12/6/11739/5249
这是大图展示

ubuntu下firefox安装java插件

在ubuntu下连接公司的vpn才发现我的火狐居然没有安装javaplugin

找了一会,找到解决方法,小纪录一下:

安装了jre之后,插件会在下面的路径里

1
/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386/libnpjp2.so

在火狐的插件目录里搞一个软链接就好啦

1
2
cd ~/.mozllia
ln -s  /usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386/libnpjp2.so .

重启火狐,在浏览器里输入 about:plugins,看到java插件的信息了
恩,可以正常使用vpn了
最后推荐一个GEEK写的文章: http://mad-scientist.us/juniper.html

页面性能的几个评测点

页面性能评测还是时间第一,细化了可以分为下面的几个

I.加载时间
* 从在浏览器里按下回车键到页面开始出现的时间,相同站点在不同浏览器下这个时间会有所不同
* 触发浏览器onload事件的时间
* 所有资源下载完毕的时间

II.资源
* 所有的请求数
* 图片/css/javascript的大小
* 网页(html)的大小
* 异步请求的数量
* 坏请求的数量(重定向,服务器端错误等等)

III.网络
* DNS时间(查找域名对应的服务器IP耗费的时间)
* 连接时间 (向服务器发起连接时间)
* 服务器时间 (服务器端处理请求的耗费时间)
* 传输时间 (由服务器向客户端传输资源耗费时间)
* 等待时间 (同时向一个服务器请求的连接数量是有限制的,获取资源时的等待空闲连接的时间)

以上关键点互相之间相辅相成,二和三决定了一的时间,另外,交互复杂的网站,很多资源的请求是在用户操作的情况下发起的,这些单个的请求也同样可以用上样的关键点进行评测。