关于AMF与BlazeDS
分类:
编程
|
jeff 发表于:2008-07-24 19:25:57 |
0条评论 |
AMF是Action Message Format的简称,它是flash专有的数据传输格式,简单的可以理解为类似XML这样的数据格式,不过XML是纯文本,任何一种语言都通用,而AMF是二进制数据,为flash专用.
为什么又有新的数据格式?
有XML不够么?跨语言,世界范围的标准.而且一直以来,我们都是使用XML作为Flash与服务器端通讯的,这个AMF好在哪里,而且还是专用的!
AMF在作为一种数据结构,从通用性上来讲,肯定比不过XML,不过这种协议是专门服务于flash的客户端应用程序,它有两个大优点:
一,比XML等传输协议更优秀的传输性能.AMF能够缓解由基于文本导致的传输瓶颈问题.这可以有证据的哦.
二,更少的数据层抽象代码,甚至不需要反序列化的代码.使用XML类的协议编程时,避免不了有一个数据反序列化的过程,使无意义的数据片段变成有意义的Flash对象,数据模型多的时候可不是一件轻松的事情,想象一下,现在完全不用去管XML,只需要定义一个远程对象即可马上调用,这个过程节省多少成本?!
下图是XML与AMF传输过程的对照:

基于上面两个优点,AMF如今获得许多开发人员的认可,不少服务器端语言也提供了AMF的适配框架,如pythonAMF和下面要介绍的BlazeDS.
BlazeDS
BlazeDS是Adobe公司亲自开发并开源的AMF-Java适配框架.为flash提供java服务器端的简单远程调用能力和实现java对象与actionScript对象的转换.
使用BlazeDS很简单,其核心是一个服务器端的主配置文件:WEB-INF/flex下面的config.xml.示例片断如下:
xml 代码
- <destination id="HelloWorld">
- <properties>
- <source>HelloWorld</source>
- </properties>
- </destination>
这样在flash客户端可以通过声明一个远程对象"HelloWorld"来调用服务器端的方法获得返回值.
更详细的使用说明有兴趣的同学看文档吧.
另外不得不提的是BlazeDS在消息处理上面比较优秀,客户端可以发送消息到服务器端的同时,BlazeDS会在服务器端把消息主动push到客户端.具体实现暂时没有考究,不过用来做即时通讯的客户端支持还是挺有用的.
问题
被Spring和hibernate惯坏了的java程序员一定很关心:
BlazeDS的配置文件里面可以使用Spring Bean吗?这是我最关心的事情,因为现在的java web程序大部分都采用spring作为基础架构了,许多第三方的工具和框架都提供了spring的兼容方法.这是BlazeDS不能避免的.不过,现在的blazeDS还不是成熟的版本,不知道以后会不会提供?
使用BlazeDS肯定享受不了hibernate的lazyload了!目前看来是不行的.
Django1.0阿尔法发布
分类:
编程
|
jeff 发表于:2008-07-23 17:14:46 |
2条评论 |
真是一个振奋人心的消息,Django终于要结束三年以上的版本长跑,出1.0版了.苦了社区里面的朋友,一直在苦苦等待.
这次发布的直接原因估计是前段时间Django易主,由新的基金会支持Django的发展.
本站是基于django开发D,当时的版本还是0.96,大概在去年9月份上的线,等到1.0正式版出来,马上就升级啦!
期待Django的正式版早日发布,期待更多的朋友加入django的行列.
青年维特们之烦恼
分类:
其他
|
jeff 发表于:2008-07-23 00:11:10 |
0条评论 |
人未到中年,而少年也不再适合用在你们身上了.那么,青年的维特们,你们都在烦什么了?
枚举我身边的一些朋友的事:
1. 爱情对你来说已不如往日那样矇胧,你清楚地看到里面某些很现实很残酷的情节,甚至有时候你需要靠一些文字或音乐去麻痹自己去相信爱情.
2.你明显感觉到背上的压力了,你知道单靠你一个人,你近几年内供不起城市里的一间房.这意味着你无法给存在或还没存在的某某人"家的感觉".
3.你一直都告诉你以前的队友说,你不会放弃音乐呀,那么你现在一个星期弹琴的时间是多长?一个手指是指?一个下午?一个小时?一刻钟?哦..不,天哪,只有一分钟?!
4.好了,抛开你的音乐梦想不说,是谁在几年前雄心勃勃地说要闯一番事业?你现在在做什么?看老板脸色决定今晚几点吃饭.
5.你工作很积极,有不错的成绩,今天去费九牛二虎之力跟客户谈完事回来,价钱总算保底了,回到公司上司找你说,成本的预算可能得再减一减.你抓狂,不管在客户或是公司面前,你都得同样的争取某种利益.
6.妈妈催你嫁人了,你也知道,有钱的男人不难寻,但有心的男人不易找,但偏偏你好像遇上了一个有心的但没怎么有钱的男人.
7.你突然想起几年前你入行的时候,有好心的朋友告诉过你,别把公司当家了,顿时觉得这是金玉良言.恨自己当年很傻很天真.
8.你突然不确定自己想做女强人还是要做小女人,很烦.
9.你喜欢写代码,可现在只能在晚上回家的时候与代码温存,上班开始强逼自己做些很讨厌的事情,比如听一些表达不清的客户说话.
10.你通过google reader不断地从阅读有聊无聊的社论,博客,你渐斩发现,你门不喜欢出了,其他网站也不爱去了,脑袋快要爆炸了.
11.还有很多人在你耳边说,做技术的做不到老的,你很想理直气壮地教训他一番,但你却从来只会呵呵笑.
12.最惨的,你一天可能要花上三四个小时去坐公车上班,因为你住在城西,工作在城东,你不敢换转行,因为这意味着你要从头再来.
13.还要更烦的,你是个完美主义者,从来不轻易向现实低头,你大学毕业几年了?现在还没找到工作,一直在靠家人和朋友的借贷过日子.
14.还有很多说不完的事.....
尽管工作,生活还有感情上都有着大大小小的不愉快或不顺利(但请不要对号入座).但希望我的朋友们还有我自己都健健康康,保持乐观去享受生活中的每一次痛苦和喜悦.因为这就是生活呀.
另类的Jquery与Prototype混用法
分类:
编程
|
jeff 发表于:2008-07-22 15:37:44 |
2条评论 |
jQuery和prototype都是现在比较流行的Javascript开发框架,两者都拥有数量相当的粉丝,当然不排除同时喜欢使用两种框架的。但问题来了,由于jQuery以及prototype都使用了美元符函数“$”作为选择器,在两者混合使用的时候$函数被重复定义了,结果导致其中一个框架不能使用。
流行的解法:
不过很快,有很多人给出了解决方案,如比较流行的方案是这样的:
js 代码
- <script src="http://jquery.com/src/latest/"></script>
- <script type="text/javascript">
- JQ = $;
- </script>
- <script src="prototype.js"></script>
这样一来,你可以使用JQ来代替jQuery里的$函数名,而prototype的$函数照常使用,像这样:
js 代码
- <script type="text/javascript">
- JQ(document).ready(function(){
- JQ("#test_jquery").html("this is jquery");
- $("test_prototype").innerHTML="this is prototype";
- });
- </script>
尽管这种办法在一定程度上解决了两者的冲突,但作为jQuery的死忠,我是万分不情愿改写$为JQ或其他替代的字符。反之Prototype的粉丝估计也会这样想。那么,是不是有另一种解决方案,让两种框架能和谐共处呢?现在流行和谐嘛!
另类解法:
先看一小段代码,猜一下会有什么效果?
js 代码
- <script type="text/javascript">
- (function(name){
- alert('hello '+ name);
- })("world");
- </script>
应该很简单吧?效果是弹出一个窗品说“hello world”。仔细看这一段Script,前后有两个括号组成,第一个括号里面是一个function对象,第二个括号是一个字符串。可以这样理解,第一个括号里面定义了一个函数,第二个括号里面给出的参数,两个加在一起实际上是完成了一次函数调用!
那现在来点真实的:
js 代码
- <script type="text/javascript" src="jquery-1.2.6.js">
- </script>
- <script type="text/javascript" src="prototype-1.6.0.2.js">
- </script>
- <div id="test_jquery"></div>
<div id="test_prototype"></div>
- <script type="text/javascript">
- <!--
- (function($){
- $(document).ready(function(){
- alert($("#test_jquery").html("this is jqeury"));
- });
- })(jQuery);
- $("test_prototype").innerHTML="this is prototype";
-
- </script>
经测试,jQuery与Prototpye工作均正常。唯一以往常不一样的是,我们要在以前写的Jquery外面加多一个外套:
java 代码
- (function($){
- //这里写Jquery代码
- })(jQuery);
这个外套巧妙地利用函数局部变量的有效范围保证你可以安心地按原来的方式写Jquery代码,这个方案更合适现有Jquery的代码升级至Jquery + prototypt。
不足之处:
还是不能解决Jquery插件的问题,这个问题是传统方法也无法解决的,只能够手动去修改插件脚本里面对$的调用,而根本的解决办法是以后的插件都用刚才那种另类的方式去写,才能保证其可用性。而Jquery UI现在好像是这样做了,我从Demo的源码里面看到的。
在那遥远的小乡镇
分类:
音乐
|
jeff 发表于:2008-07-18 14:26:16 |
3条评论 |
下午准备找些音乐来听,无意识地点进一个很久没有到过的角落.里面有不少成品,半成品,甚至是Demo,那是我们以前的一部分作品.
我很少听自己的音乐,因为听着脸会红,不知道是因为没信心还是其他原因,所以我通常录好一首歌,给别人听了之后就收藏起来完事,极少会翻出来回味.
那都是很久很久以前的事咯,快十年了吧,在一个遥远的小镇,有两个小盆友喜欢音乐,在一起弹吉他,唱歌,创作.其中一个小盆友歌唱得不错,另外一个小盆友琴弹得不错,还经常往县城跑,是为了淘些摇滚CD和盒带.长大后,他们成了"吉瓜".曾经被广州电台罗丹力调侃为"一吉就瓜".第二位小盆友的创作高峰期在高中,第一位则是在大学毕业后.两位小盆友从高中同班到大学同校到工作同公司一起走了十年.现在还常常搞不清,是我们玩了音乐,还是音乐玩了我们.
下面这首是两位小盆友首次合作的小样,高中时代,在那遥远的小乡镇,那很傻很可爱的劲头,"蓝色理想",谢谢.
点击这里下载"蓝色理想.mp3"
乌兰巴托的夜
分类:
音乐
|
jeff 发表于:2008-07-15 01:16:25 |
0条评论 |

穿越旷野的风啊,慢些走
我用沉默告诉你,我醉了酒
飘向远方的云啊,慢些走
我用奔跑告诉你,我不回头
乌兰巴托的夜啊,那么静,那么静。。连风都不知道我 。。。不知道
每次我想要给别人介绍歌的时候,我都不会用理智的字眼去介绍,而是恨不得把整首歌词塞给他,把音乐放到他耳边,把音量开大。
乌兰巴托的夜,来自左小诅咒很多年前的专辑《美国》。曾经有朋友把一个同名的Flash动画给我看的时候,这首歌就征服了我。今天晚上在硬盘的一角找到这首歌的MP3,无数次往反听了一个晚上,在广州这个喧闹无比的炎热夏天的晚上从音乐里不止一次的感受那种空的感觉,渺小的感觉,寂寞的感觉。据说左小诅咒曾用这首歌把两名著名的乐评人唱哭了。
左小的风格就是这样,一流的配乐,粗糙无比的嗓音。其实,我认为他是故意这样的,因为只有这样,人们才会真的去关注歌里要表达的意思,而并非仅仅是唱功那么表面的东西。左小的新专辑出了好几个月了,还没来得及听。
我想起来了,公司的一位同事--前DeadRock.com的CEO经常发出的嗡鸣声原来是从这首歌里面学的。
乌兰巴托的夜啊,那么静,那么静。。连风都不知道我 。。。不知道。
乌兰巴托的夜啊,那么静,那么静。。连云都不知道我 。。。不知道。
附完整歌词:
乌兰巴托的夜
- 穿越旷野的风啊
- 慢些走
- 我用沉默告诉你
- 我醉了酒
- 飘向远方的云啊
- 慢些走
- 我用奔跑告诉你
- 我不回头
- 乌兰巴托的夜啊
- 那么静,那么静
- 连风都不知道我
- 不知道
- 乌兰巴托的夜啊
- 那么静,那么静
- 连云都不知道我
- 不知道
- 游荡异乡的人啊
- 在哪里
- 我的肚子开始痛
- 你可知道
- 穿越火焰的鸟儿啊
- 不要走
- 你知今夜疯掉的
- 不止一个人
- 乌兰巴托的夜啊
- 那么静,那么静
- 连风都不知道我
- 不知道
- 乌兰巴托的夜啊
- 那么静,那么静
- 连云都不知道我
- 不知道
- 乌兰巴托的夜啊
- 那么静,那么静
- 连风都不知道我
- 不知道
- 乌兰巴托的夜啊
- 那么静,那么静
- 连云都不知道我
- 不知道
Nuxeo WebEngine -- java的plone?
分类:
编程
|
jeff 发表于:2008-07-15 00:52:50 |
0条评论 |
今天看到一则新闻“Nuxeo WebEngine发布”,仔细看了一下,咦,这东西的概念怎么这么像python世界的plone?
说到plone,不得不提的就是它的开发框架Zope了。介绍Zope并不是本文的目的,有兴趣者可以Google之。
一、WebEngine依赖 Nuxeo内容管理框架提供基于组件的程序模型和web开发模型来创建以内容为中心的组件化应用,包括Wiki,博客,内容为主的web网站等。
注:Nuxeo内容管理框架(Nuxeo core?)应该是类似Zope 的CMF(Content Management Framework )东东了。plone也一样是作为一个应用框架,用来开发以内容为中心的组件化应用。Plone内置的内容类型有页面、文件、图片、文件夹以智能文件夹,而Webengine则提供了更多内容相关的类型,如Blog,Wiki等。
二、WebEngine主要依赖REST方式:URLs映射到分层的内容存储,内容通过GETs获取,用户行为通过GETs和POSTs请求等。这种方式方便通过WebEngine使用和架构RESTful应用。
注:如果你了解RESTFul风格的URL并知道Zope以模型为中心,URL以节点漫游的方式进行映射,你就会发现两者的目的都差不多,REST是以资源为中心的。我后来看了一下WebEngine的实现,它使用了内容仓库Jackrabbit(什么是内容仓库)作为数据存储的一部分,真正实现多层次结构数据的存储。表现出来的效果和ZODB有点类似了。
三、WebEngine完全是可扩展的,组件化的,通过OSGI方式和Nuxeo运行来扩展。
注:WebEngine的扩展可看作是OSGI 的插件。由于OSGI,WebEngine在部署组件方式同样可以达到热部署,在Zope里面,这样的组件被称为产品(product)。
四、WebEngine有自己独立的服务器,并且兼容JBoss,允许嵌入式运行等。现在暂时不清楚其独立服务器的用意(不过从下载回来的Standalone版本来看,服务器是基于Jetty6的),但看起来有点模仿zope的意思,zope是提供独立的服务器。
我下载了一份Standalone的发行版下来试验了一下。发现WebEngine这一次的发布真是摆了个大乌龙,在它的网站的任何地方都找不到登录系统的初始密码,启动了服务器的我在门外徘徊了好久,终于在Google到一个可能的帐号Administrator/Administrator,试一下真的能进去。
界面还很简陋,用户管理的创建用户看起来有点Bug,我创建的每一种类型的内容最终都显得像一个目录,并且点击编辑的时候都出现这样的错误提示:
This is a placeholder page. Don't know how to edit generic documents.
Add an edit page for your document type please. (Your document type is: Blog)
不知道是我RP有问题还是系统根本就还不完善。
总而言之,这东西看起来不错,不过现成的Demo却有点令人失望。不知以后是否会有惊喜,继续关注。如果该产品发展至成熟,将会为Java平台上的内容管理领域带来一个更好的解决方案。到时除了plone,又多了一样选择,是好事!