Flex Event Flow

初识JSON

首先当然是介绍JSON是什么的缩写,JSON(JavaScript Object Notation)是js标准的一个子集,用来对交换的数据进行描述。说白了,就是可以用文本的形式对“对象”进行描述,也方便于网络传输和解析(不自觉的想到XML了)。

下面我们来看一个例子,这里就用JSON定义了一个对象

{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}

定义JSON对象的时候是用大括号包着的,由一对对key:value对组成。key是字符串,而value则可以是数组,对象,数字,字符串,布尔值,当然可以是null

在js中我们可以使用js自带的函数来解析json, var p = eval('(' + contact + ')');
现在p就是一个JS对象了。比如你可以通过p.firstName得到John

-------------------------------------------------------------------------------
我自己实践了一下,如果直接定义
var contact=
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}

那么在JS中你是可以直接将contact看成对象的,就可以通过contact.firstName访问John
而使用eval的情况是当contact是字符串格式。

下面就是本人使用js写的,可以输入对应属性的名字,然后得到对应的值。如果其属性为对象那么就用点进行访问,比如address.city

属性名:

FLEX RSL

今天来公司想发布一些更新,Flex项目编译完成之后发现比原来的swf小了一大截,之前的swf文件1.2多,而现在的只有700多k,由于以前不是我发布的,所以我就没管直接换上了,发布完成后,发现自己的机器可以上,别人上的时候报RSL error的什么错误,仔细查看后终于发现了问题。
RSL(Runtime Shared Library)的简写,里面放的是Flex的一些基础共享库,在编译项目的时候可以在Flex Builder中设置是否将RSL打包到项目中,我检查了一下自己的设置,是FrameWork linkage, 所以不是打包在项目里,固然文件变小了。如果将RSL分离出来那么在输出的目录下将会多两个文件framework_3.1.0.2710.swz和framework_3.1.0.2710.swf(那一串数字是版本号),当你访问的时候过程是这样的,当你第一次访问应用的时候,flash player会优先将framework_3.1.0.2710.swz文件加载放到cache目录下,以后就不需再次加载了,如果这个动作失败了,就会加载framework_3.1.0.2710.swf,该文件只能下载到ie缓存..并不能达到RSL功能,只保证项目可正常运行.
出现RSL error的情况可能是一下两种情况
第一,使用低于9.0.115版本的Flash Player
第二,framework_3.1.0.2710.swz和framework_3.1.0.2710.swf未放到服务器的目录下。

我能访问的原因就是在我本地测试的时候已经将那swz放在了player的cache下了。

Flash中不同类型的坐标

在鼠标事件中经常碰到坐标这个概念,在Flash中有三种坐标的表示方式,大家也是经常容易混淆的。
下面是本人画的一个示意图:



第一种是本地坐标,本地坐标指定的像素位置随组件的左上角而变化。MouseEvent中可以由localX,localY获得

第二种是全局坐标,全局坐标指定的像素位置随舞台的左上角,即应用窗口的最外侧边缘而变化。,MouseEvent中可以由stageX,stageY获得

第三种是内容坐标,内容坐标指定的像素位置随组件内容的左上角而变化,并包括组件的所有内容区域,甚至包括当前剪切掉但必须能够通过滚动组件访问的任何区域。

DisplayObject中提供了本地坐标和全局坐标互相转换的方法,
Container中提供了内容坐标和本地坐标,全局坐标互相转换的方法。

Thinking In Seam

马越,Redhat 中国社区总架构师,作为Seam框架先行者马越,积极推动中国开源技术的发展。
今天他给我们讲解了Seam。
如今Java在企业应用领域里大行其道,于是诞生了太多太多的框架,Struts,Spring,Hibernate,GWT,JSF...当面对这么多框架的时候,我们如何选择,选择之后又如何将其在服务器中跑起来,这些都需要花费人力。
马越提及在欧美国家,JSF非常的流行,最近Seam的下载量更是非常的高,而中国则主要还是Struts,Spring,Hibernate居多。
首先JSF是SUN提出的JavaEE页面的规范, 有着大量的Widget组件,基于事件驱动。
提及EJB大家都可能感到退却,EJB3之前,EJB确实是非常的繁琐,写一个EJB需要大量的辅助类的配合,然而EJB3出来之后,使用Java5的Annotation特性使得EJB和POJO并无差异,只是增加一些Annotation而已。
然而JSF的生命周期和EJB的生命周期不同,这使得将两者结合起来非常的困难,然而Seam的出现改变了这一现象。Seam其实不能说它是一个框架,而是一个有状态的应用栈,通过它可以方便将其他的框架的整合在起来。
在Seam中一个核心的概念就是Context,在以前的Web应用中,我们可以设计到request/response Context ,Session Context,Application Context,然而这样的设计能够很好的满足如今复杂多变的企业应用吗,显然是不够的,比如我们在网页上做一个调查问卷,可能问卷的内容不止一页,这是我们就需要一种比Request Context长而比Session Context短的生命周期的Context,这样可以横跨几个request且不会放在Seesion中占用系统资源,所以Coversation Contest 应运而生。还有一个问题,一个业务流程启动后可能需要不止一个人员的参与,所以这时需要一个比Seesion Context更广的Context,于是Seam提出了Business process context.其实这些概念都是一些简单的概念。
其实Seam中是直接将Data Object暴露在页面上的。而我们现有的系统却都避免了这种情况。

如何在自己的Blogger上显示最新文章

首先介绍一个概念:GData,GDtata是Google Data API的简称,提供一套简单的协议来读写web上的数据,GData 使用两种基于xml的聚合格式,Atom和RSS,Google更倾向于前者。Atom有一个Atom Publishing Protocol(APP)协议,使得用户可以以HTTP请求的形式来操作网络中的资源,比如一个HTTP的GET方法可以获得特定的资源信息,PUT方法可以对某个资源进行更新。而且GData使用Atom标准的扩展机制来支持查询。GData使得可以让你将各处的信息集中到一起进行显示。

现在基本上一些Google的服务都支持GData。
废话少说,我们来看看Blogger上GData的使用,
首先如果你访问http://www.lostincode.cn/feeds/posts/default 这将是文章的XML标准输出,
但是如果写成http://www.lostincode.cn/feeds/posts/default?alt=json-in-script 则结果就会不一样,alt=json-in-script告诉google将结果以json的形式输出,这里如果你加上回调函数对json进行一定的处理就可以使用友好的html将内容解析出来,加回调函数只需要在后面加&callback=回调函数名字

下面就贴出本人的完整代码,效果就见右侧的最新文章,
大家注意 var link=post.link[4].href;这句代码,Link[]其实是一个文章单元中所有链接的数组,下标从0开始,第四个正好为文章的链接。
还有就是compareentry函数是用来比较时间用的。
----------------------------------------------------------------------
<div id="new">
加载中...
</div>

<script>
function compareentry(a,b){
order= Date.parse(a.published.$t.replace(/^(\d{4})-(\d{2})-(\d{2})T([0-9:]*)([.0-9]*)(.)(.*)$/,
'$1/$2/$3 $4 GMT')) - Date.parse(b.published.$t.replace(/^(\d{4})-(\d{2})-(\d{2})T([0-9:]*)([.0-9]*)(.)(.*)$/,
'$1/$2/$3 $4 GMT'));
return 0-order;

}
function handlePosts(json) {

var temp = '<ul id="Feed001_feedItemListDisplay">';
var postshow=10;
var sortentry=json.feed.entry.sort(compareentry);
for (var i=0, post; post = sortentry[i]; i++) {
if(i>=postshow) break;
var title=post.title.$t;
var link=post.link[4].href;
var authorname=post.author[0].name.$t;
var timestamp=post.published.$t.substr(0,10);
temp += '<li><span class="item-title"><a href="'+link+'">'+ title +'</a>('+timestamp+')'+'</span></li>';
}
temp+="</ul>";
document.getElementById("new").innerHTML = temp;
}
</script>

<script src="http://www.lostincode.cn/feeds/posts/default?alt=json-in-script&callback=handlePosts"
type="text/javascript"
></script>

JBoss Application Server Architecture

听了一天的关于Jboss的课,讲课的老师是程勇,貌似是中国开源界的某个XX人物,从JBoss的发展开始讲起,给我印象最深的是JBoss的微内核的架构,其微内核是基于JMX(Java Management Extensions),然后诸如JMS,EJB容器等一系列的服务将以Mbean的形式可以被集成到一起,这样整个系统并非常的便于管理,后来也讲了JBoss5的近况,JBoss5历时3年时间,重写其内核,完全采用POJO进行架构。还谈及一个概念就是Open Service Gateway initiative(OSGi),这个最成功的案例当然是Eclipse了。