在Mac机上搭建Projectzero的Build环境

一直想在本地建立zero的Build环境,无奈总是太耗时,也没有机器,现在有了mac在旁边,当然要拿它来做build的环境了。最近几天下班后都要整一会这个,现在终于是过了,在欢快地BUILD,TEST….

所有的应该参考:http://www.projectzero.org/wiki/bin/view/Development/Build。下面一步一步来讲吧。

1. Check out code.

这个比较简单了。对于zero现在不同的版本最好是建立对于的结构,这样以后做不同的build也利于管理。Mac已经内置了svn,所以直接敲就可以了。打开酷酷的Terminal,敲吧。。

mkdir zero
cd  zero
mkdir sebring
mkdir silverstone
cd sebring
mkdir source
cd source
svn checkout https://www.projectzero.org/svn/zero/trunk --username liwenb --password

然后等着吧,喝点咖啡,论坛逛逛。。。。

终于checkout了zero所有的code了,嘿嘿。那么要不试试呗,

cd trunk/BUILD/zero.build/
ant -f zbuild.xml BUILD

很好,开始build了。。。嗯,nice。。。咋啦咋啦,错了?什么标签不支持(我现在是不记得了).看来是因为ant的版本的问题。查查看:

ant -version

哦,原来是1.7,而zero指明需要1.7.1,那么没有办法,安装呗。

2.安装ant 1.7.1

这个倒是简单啦,去http://ant.apache.org/bindownload.cgi.解压,那么到底放到哪里呢?于是查看了一下ant的实际地址。原来mac装在了/usr/share/ant/. 反正我也用不着它的旧的,干脆替换吧。

cp -R apache-ant-1.7.1 /usr/share/ant/

什么什么?没有权限!?查看后是这些文件是root的用户文件。之前也遇到过这个问题,想删除一个root用户的文件,可惜总是没有权限。问了mark老大,也不知道root的用户哪里去了。Google了一把,才知道原来对于Mac机,root用户是需要自己来启动的。好,去启动

3.启动Mac的root用户

当然看到apple的help就可以完成这个了,http://support.apple.com/kb/HT1528

ok,su root, 将ant替换原来的。 好,再试试,ant -f zbuild.xml BUILD。什么错?zso…?OK,zero的build中是需要build一个native的code,对于Mac需要安装Xcode。

4.安装Xcode 到Mac上

默认来说,mac是没有安装这些的。只需要找到第二张安装盘就可以了,很容易就安装上了。如果没有安装盘,那么就可以follow这个来安装了。http://www.macworld.com/article/46286/2005/08/installxcode.html.

好,再来ant -f zbuild.xml BUILD。。。很好,10分钟一直在跑,嗯?eclipse的plugin的build有问题。没办法回去看前提要求吧,原来是需要配置jdk和eclipse的。

5.配置eclipse

这个简单了。到http://aeneis.raleigh.ibm.com/prereqs/eclipse/copy过来,注意download macosx的就好了,根据要求unzipped in your {prereqs directory}/eclipse/3.3.2就可以了。

6.配置JDK

根据Michael的说明,# create a link from zero.build/prereqs/jdks/java5 to  /System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home

好ln java5 …..

7.完成,:)

再ant -f zbuild.xml BUILD,等上15分钟,就可以看到success的信息了。如果你要跑TEST,那可能就要等好几个小时了。

P.S. 本来是上周末的文章,放到draft就到了现在,kaka..

Happy time with Mac

最近一直在我的mac机上折腾,简直是越来越喜欢这个小东西了。装了各种各样的软件,就是乐在其中呀。今天还down了vmware fusion.公司也有各种的虚拟机文件可以down。于是一不小心就下了Redhat,WinXP,Vista。看来以后做什么事情都可以在mac上了。

show一下变态的界面。

依然呐喊…

依旧呐喊

一个多月的流逝

往往从blog的post的频率就可以看出来我的精神状态。。不知道为什么,最近总被一种很抑郁的心情压着,整天过的不知所云,日子看着我慢慢走掉…让情绪控制而不知所措不是解决问题的办法,以此post为凭,让自己能从现在的状态扭转出来。

勉之,勉之。

Assemble在developerWorks上面的文章

一直都准备发很多文章来宣传我们的工作,但是总是由于很多的事情都没有时间来做。好不容易,终于完成了一篇。

使用 Project Zero 和 WebSphere sMash Assemble Flow 构建 Mashup 应用,第 1 部分

以后希望发出更多的来。

看奥运男篮比赛

还是上周了,看了奥运男篮A组的首场对决。开始还不知道,原来一张票可以看两场比赛。分别是俄罗斯-伊朗,德国-安哥拉,看来了只能在电视里面看到的NBA大牌,基里连科和诺维斯基。可惜位置太远,只能傻呵呵地在那瞎喊。

其实比赛很一般了,只有德国队打的不错。给我最大的感受就是篮球馆太棒了,让你觉得坐在哪里自己的位置都是最好的。以后有了比赛一定多去看看。

Firefox会成为新的RCP吗?

对于firefox的插件大家都觉得属于添加浏览器的功能,这些插件只是firefox中的小甜点,并不能自成一个完整的软件。 我也是一直这么认为,但是今天看到一个用firefox做的画图的工具,http://www.evolus.vn/Pencil/Home.html,一个和原有插件很不一样的插件。它只是将 Mozilla Gecko engine做成了一个画图的工具。并且最特别的地方是大小只有400K,非常的惊人。

觉得firefox非常有希望成为一个RCP的平台,相对Eclipse这样的RCP平台(或者Abode的AIR)来说是有非常多的优势的:

  • 安装非常的方便:显然firefox的插件安装方式非常方便,点个link就安装了。
  • 更新同样简单: 同样由firefox自己对插件更新的支持,自动检查更新最新版本。
  • 软件大小非常小:看一个完整的画图工具只有400K,就知道能它能多小,安装可以多快。使用firefox所提供的对UI等的支持,将js的文件压缩后真的可以非常的小。
  • 多平台支持:firefox就支持多平台,你写出来的软件也就自然能跑在所有firefox能支持的平台了。
  • 开发要求低:基本上只需要掌握javascript,而世界上最多程序员的将会是javascript程序员。firefox的UI开发比起HTML,CSS来说是简单的。每个人估计是受到过写HTML,尤其是CSS中要处理多平台的煎熬。从这个角度来说,写firefox的插件比开发一个Rich的Web应用要快很多。
  • 不需要安装体积庞大的SDK:你只需要firefox就可以了。很多人抱怨abode的SDK或者java的JDK都太大了,而很多非技术人不明白为什么需要安装这些乱七八糟并且几十M的东西,这也是abode的AIR很难快速流行的问题。

现在也是有很多不太如意的地方:

  • 每次启动你得从firefox中启动,不能直接在OS的建立快捷方式。我觉得这个问题应该不大,看看Prism这样的firefox的lab project就可以了。
  • 如何来操作数据库?操作数据库是一个基本的,可惜firefox并没有提供这样的支持。wait,firefox 3提供了类似google gears的能力,估计将数据持久化到本地是问题不大。但是连接到传统的数据库mysql等的呢?

当然firefox从来没有提过它要成为一个RCP的platform,它是否想成为abode AIR的competitor?是否它可以成为新的RCP平台,甚至它是否可以成为RIA平台,让我们试目以待吧。

昨天做的一次技术讲座

第一次给别人讲东西,呵呵,居然没有紧张,不错,虽然感觉自己讲错了很多东西,嘿嘿。

quote:”2008年7月8日下午IBM国际商业机器全球服务(中国)有限公司软件部在京伦饭店举办的IBM 技术专家沙龙–“解读WebSphere sMash”专场沙龙活动顺利开展,此次沙龙活动我们邀请到WebSphere sMash项目组的三位技术专家来与北京的WebSphere技术专家们一块探讨和演示 WebSphere sMash 的搭建、部署和使用。”

http://www.webspherechina.net/club/viewthread.php?tid=1392&extra=page%3D1


在sMash环境中,使用dojo来Ajax上传文件

在dojo的test page中给出了如何上传文件,http://archive.dojotoolkit.org/nightly/dojotoolkit/dojo/tests/io/iframeUploadTest.html.可惜server端的code是python写的,现在把dojo的upload文件在WebSphere sMash的环境下实现,并且强调几个关键的trick,在code中进行说明。故事很简单:上传一个文件,完毕后返回文件的大小,最后浏览器弹出该信息。

  1. HTML code
    <form action="/resources/upload" id="uploadForm"
    <!-- 注意上传文件时需要的form属性enctype="multipart/form-data"  -->
    	method="POST"  enctype="multipart/form-data">
    <!-- 上传文件在HTML的控件 -->
    	<input type="file" name="attachment">
    	<input type="button" onclick="uploadIt(); return false;" value="send it!">
    </form>
  2. Javascript code
    <script type="text/javascript">
    	dojo.require("dojo.io.iframe");
    	function uploadIt(){
    		dojo.io.iframe.send({     //使用iframe进行提交
    			form: dojo.byId("uploadForm"),
    			handleAs: "application/json",
    			handle: function(response, ioArgs){
    				if(response instanceof Error){
    					console.error("Request FAILED: ", response);
    				}else{
    					alert(response);  //alert结果
    				}
    			}
    		});
    	}
    </script>
  3. zero code
    def onCreate() {
    	//zero中的上传文件放在request的files中
    	def attachment = request.files["attachment"]
     
    	//每个上传文件有上传文件的临时路径以及文件
    	def filepathUpload = attachment.path[0]
    	def fileName = attachment.filename[0]
     
    	int fileSize = new FileInputStream(new File(filepathUpload)).available()
    	def msg = "The size of your file '" + fileName + "' is " + fileSize + " bytes."
     
    	//这个是dojo iframe做定义的,必须要使用一个<textarea>进行包裹结果.
    	def iframeData = "<textarea>" + msg + "</textarea>"
    	println iframeData
    }

这个是sMash的project,可以Download(Ajax upload file using dojo in sMash)下来试试。

Useful links:

http://www.cs.tut.fi/~jkorpela/forms/file.html
https://www.projectzero.org/javadoc/latest/CORE/API/zero/core/context/GlobalContextURIs.Request.html#files

CSS Selector – 高级

在前面一篇文章中(CSS Selector – 基础)介绍一些CSS selector的基本用法。里面来谈一些平时比较少用的CSS selector用法。

一.Child selector
这个选择器和前面的descendent比较类似,descendent适用与所有的下代,但是Child描述的是父子关系。它需要用尖括号’>’来表示。 例子如下:

body>h2{
 font-size:2.5em;
}

在未来的发展中,有些有趣的讨论就是:是否我们需要右括号,就像:
a < img { border: none; }就表明如果 父亲是, 那么border就不存在。当然这只是一个提议,更加站在目标tag来进行表述。可惜并不在CSS3的规范中。

二.Adjacent siblings selecor
前面说了父子关系的选择器,这个是关于兄弟关系的选择器。

h2+p{
 font-size:1.2em;
}

如果一个<a>前面是<h2>那么将应用该selector。

三.属性 selector
属性选择器是一个更加强大的选择器。前面的selector都是更加tag的位置关系等来进行选择。属性选择器是根据标签内部的属性来进行选择。

//选择&lt;a&gt;中href属性为'liwenbing.cn'的
a[href='liwenbing.cn'] {
 font-size:red;
}
//选中&lt;input&gt;中类型type为text的。
input[type="text"]{
 border-color:1px solid #666;
}

在CSS3中,对属性选择器是有加强的。并且现在流行的浏览器(IE7,FF)基本上已经支持这样的selector了。
有三种:

  • [att^=val]:选择属性att的值是以val来开头的;
  • [att&=val]:选择属性att的值是以val来结束的;
  • [att*=val]:选择属性att的值是包含val的;
//这个将选中 <p title='home' ></p>
p[title^="ho"] {background: green;}
 
//这个将选中 <p title='hot' ></p>
p[title$="t"] {background: green;}
 
//这个将选中 <p title='contact' ></p>
p[title*="on"] {background: green;}