PPLive急聘WEB前端开发工程师和WEB标准工程师

PPLive现在急需WEB标准工程师和WEB前端开发工程师若干名,如有需要工作或者换工作的同学,请速与我([email protected])联系!招聘职位和招聘岗位如下:

  • 薪金: 面议
  • 有效期至: 2009-05-15
  • 工作地点: 上海张江高科(地铁站旁,交通便利)
  • 学历: 不限

职位:WEB前端开发工程师

工作职责:

负责公司旗下网站的频道、专题等页面制作及前端交互开发。

职位要求:

  • 一年以上工作经验;
  • 精通(X)HTML及CSS,熟悉主流浏览器的兼容性差别;
  • 精通JavaScript,熟悉一种或者多种主流JS框架;
  • 有高度责任心,出色的沟通协作能力;
  • 有大型网站工作经验者优先,熟悉ActionScript者优先。

职位:WEB标准工程师

工作职责:

负责公司旗下网站的频道、专题等页面的前端制作。

职位要求:

  • 一年以上工作经验;
  • 精通(X)HTML及CSS,熟悉主流浏览器的兼容性差别;
  • 熟练使用Photoshop、Dreamweaver等页面设计工具;

一些让你目瞪口呆的JavaScript应用

Google Chrome凭借其强大的V8引擎,让我们有机会领略异常惊人的JavaScript应用,领略JavaScript的超级魅力!点击这里进入Chrome实验网站,体验JavaScript的炫酷

注:尽管Firefox也能看,但是效果远远没有Chrome流畅,因此,如果你想看,最好装上一个Google Chrome,很好用的。Chrome的下载页面:http://www.google.com/chrome

另外,Google Chrome开始支持扩展,尽管其第一个插件仅仅只能更改Google主页的Logo,但是其意义绝远不止于此。

如果你有兴趣开发Google Chrome的插件,可以参考这里的文档。…

在AS3调用Firebug的console时被雷了

写了这么一段as3的代码,用到了E4X,Firebug是自己写的一个用来调用Firebug的console的调试类:

var x:XML = evt.message as XML;
Firebug.info(x.toString()); // 正常输出XML内容
Firebug.info(x is XML);     // true
Firebug.info(x.@status);    // 没有输出,但的确是有这个属性的

莫名奇妙,不知道啥原因,翻了手册,也Google了,还是不知道啥原因。于是想想这样一试:

var x:XML = evt.message as XML;
var status:String = x.@status;
Firebug.info(x.toString()); // 正常输出XML内容
Firebug.info(x is XML);     // true
Firebug.info(status);       // 成功输出status属性的值“success”

真让人崩溃!为什么一开始的写法就不能输出呢?不懂,有明白的人指点下吧,谢谢!…

Silverlight 3 Beta出来了

早上一开Google Reader,发现已经全部被Silverlight 3的消息占领了,基本上都来自于Silverlight官方网站上的消息。

Silverlight 3的新特性很多,其中几个比较强大的特点:

  • Silverlight终于可以脱离浏览器独立运行了
  • 终于支持GPU硬件加速了
  • 可读写的位图(Bitmap)API,意味着你可以一个像素一个像素地创建位图了,如果你足够有耐心和能力,你可以做一个真正的在线图像处理应用了,就像Photoshop一样
  • 支持自定义音视频编解码,意味着在Silverlight中播放视频不再在乎格式,你甚至可以自定义自己的流媒体格式。当然这就可以解决flash中FLV文件的互相盗链问题了,你可以对FLV加密,然后在播放器中对FLV流进行解密。别人就算拿到你的FLV文件也没关系了,因为他根本播不了。这算是除DRM(Digital Right Management)之外,一种低成本的版权保护吧。

FlashPlayer日渐“变胖”

一不小心电脑上又有这么多flashplayer的安装包了,每下载一个新版本都会清除以前的,于是就木有6、7、8了……

每个版本的flashplayer图标都在变化,总体来说是越变越“红”,除了flashplayer 8是个例外(就是这个版本第一次引入了令人惊讶的滤镜效果,很帅!)。

flashplayer的体积也随着版本的增大而增大,越来越胖了,不过相比Flash IDE的体积变化来说,这个实在是小巫见大巫,我们看看Flash IDE的变胖过程:

Flex格式化代码插件

Flex本身是没有格式化代码功能的,但是这个确实是很常用的功能,不知道为啥Adobe一直不加这个功能。只有想不到,没有做不到,这不就有个开源的Flex插件——FlexFormatter,很好用。

下载地址:http://sourceforge.net/projects/flexformatter/

安装方法:

  • 下载插件的jar文件
  • 复制到Flex安装目录中的plugins文件夹中(如果用的是Eclipse 3.4以上的版本,就是dropins目录)
  • 重启你的Flex,就可以看到图上的两个按钮了

实验品:所见即所得在线编辑器

不忙的时候,抽空写的这个,目标很远大,不过可能就要到此为止了,如果哪天我的blog想换编辑器了,可能会再弄弄,呵呵~当然,如果你有兴趣,可以继续完善。UI来源于新浪博客的编辑器,在原有的基础上增加了部分按钮。目前兼容的浏览器列表(只做了一些非常简单的测试,如有错误,请及时告诉我,谢谢^_^):

  • IE 6, IE 7, IE 8
  • Firefox 3
  • Opera 9.6
  • Safari 3
  • Chrome 0.3

编辑器测试地址:点击这里查看

先说好听的,除了支持简单的HTML标签外,目前比较特别的功能:

  • 支持插入各种形式的多媒体内容:图片、flash、各种音视频
  • 支持多种表格操作:插入删除表格、插入删除行和列
  • 支持插入多种特殊字符和表情
  • 自动排版:清除段落开头和结尾的多于空白字符,并缩进两字符(来自新浪的创意)

现在还剩下的比较严重的问题:

  • 粘贴、剪切和复制只能在IE下使用,Safari和Chrome下只支持剪切和复制,其他浏览器下这三个功能完全失效,有待寻求解决方案

为什么JavaScript中正则表达式的test方法会出错?

一段这样的JavaScript代码,猜猜结果如何?

var i = 0, m = 20, a = [], r = /^\d+$/g;
for(i = 0; i < m; i++){
    a.push('' + i);
}

m = a.length;
for(i = 0; i < m; i++){
    if(r.test(a[i])){
        document.write(a[i] + 'true<br />');
    }
    else{
        document.write(a[i] + 'false<br />');
    }
}

也许你期待的结果应该全是true,可是实际结果呢?true和false交替出现,0是true,1是false,2是true,3是false……是不是很怀疑?其实仔细看一下,那个正则表达式多了个全局选项“g”,去掉就好了。

可是为什么有“g”就会出错呢?

原因其实很简单,当一个模式具有全局选项时,和exec一样,每次test都会保留上次匹配的位置——即lastIndex。很显然,当第一次匹配之后,第二次匹配时的lastIndex已经到了字符串末尾,尽管这个时候字符串已经是一个新的字符串了,但是这个lastIndex的位置并没有重新初始化,所以会从末尾开始匹配——当然会匹配失败了。…

IE8将是IE的最后一个版本?

国外纷纷传言IE8将是Internet Explorer的最后一个版本,这个猜测来源于Microsoft的CEO Steve Ballmer对WebKit的青睐。不过鲍尔默只是说对WebKit感兴趣,当同时会继续开发浏览器,对其扩展一些私有的特性。

原话:

“There will still be a lot of proprietary innovation in the browser itself so we may need to have a rendering service.”

“Open source is interesting, Apple has embraced Webkit and we may look at that, but we will continue to build extensions for IE 8.”

不过对于IE8的继任者,大家各有猜测。有的人依据上面的话,推测下一个浏览器可能采用WebKit的核心。也有人猜测说传言采用WebKit核心只是一个幌子,实际上可能会采用…

其实AS和JS互相调用有个很酷的特性

JavaScript和ActionScript互相调用时,其实有个非常好的特性,不过貌似很少有人提到这个特性:它们之间的数据类型对方均可以识别。因此,你可以通过swf提供的接口来传递对象、数组、字符串等等。不过它们之间传递的参数的值的长度有限制(具体长度还没仔细测试),因此你不能把JavaScript中的一个超大的对象直接传递进去。不过即使是这样,已经非常好用了,看看示例代码:

AS(ActionScript)代码:

// 创建一个行的TextField来显示调用结果
var t:TextField = new TextField();
t.x = 10;
t.y = 10;
t.width = 300;
t.height = 200; 
this.addChild(t);

// 这个是要给JavaScript调用的函数
function test(obj){
    var s = [];
    for(var p in obj){
        s.push(p + ': ' + obj[p]);