CSS中的一些有用技术

1、滑动门技术
我这次也用到这个技术了,其实是一种互相折叠的技术,我已经使用过很多了。
这篇文章中介绍了如何在标签中使用滑动门技术,这个很有用,而且效果不错。
2、对于需要把传统html4.0转到css+xhtml的人,这篇文章很好。
一种简单的对照关系,可以让你把表格布局放到标准的css布局上面来,其实并不费力的。
不过要记住不要滥用float,否则会死的很惨。position:absolute有时也是不错的选择。
捷足先登学用CSS:HTML结构化
3、关于圆角容器
div标签很多时候类似个矩形容器,大家很爱用它。用它实现圆角容器可以让你的网页变得美观生动。
不过问题在于圆角容器会带来大量的嵌套div,不优雅。
为了优雅,可以使用javascript+dom来解决,哈哈,很不错的。
我的简历就使用了自己制作的圆角容器,自己修改javascript很好玩的,使用的东西不难看懂。后面那个网站很不错,456 Berea Street很多人都推荐。
Rounded Corners with CSS and JavaScript
Transparent custom corners and borders | 456 Berea Street
4、IE欺骗技术中的一个简单应用
圆角容器的css使用的一个解决IE对png支持不好的办法,记下来,很有用的。不过目前不知道怎么在css文件里面使用这个hack。里面的代码只对IE其作用,可以弥补IE对Web Standards支持不好的一些问题。
<!–[if lt IE 7]>
<style type="text/css">
/* Serve gif images to IE/Win pre version 7 */
.i1,
.i2 { background-image:url(css/borders.gif); }
.bt,
.bt div,
.bb,
.bb div { background-image:url(css/box.gif); }
/* Set a height to fix up some rendering issues. */
.i1,
.i3 { height:1px; }
</style>
<![endif]–>
5、关于控制框架宽度的方法
本来觉得Chinaren校友录论坛里面可以自动收缩的框架不错。可是后来发现在Firefox不能用。找了很多地方不能解决。结果闲逛的时候发现了解决方法。
框架页如下:
<FRAMESET id="_bodyframeset" rows="38,*" frameSpacing="0" frameBorder="NO">
 <FRAME id="top" src="top.htm" scrolling="no" target="body">
 <FRAMESET id="main" name="main" cols="200,9,*" frameSpacing="0" frameBorder="NO">
  <FRAME name="left" src="left.htm" scrolling="auto" target="body">
  <FRAME name="control" src="control.htm" scrolling="no">
  <FRAME name="body" id="body" src="userlist.htm" scrolling="yes">
 </FRAMESET>
</FRAMESET>
在control中的加入如下javascript函数,调用它可以自动收缩:
function shift_status()
{
 flag = !flag;
 if(flag)
 {
  if(screen.width>1024)
   window.top.document.getElementById("main").cols="200,9,*";
  else if(screen.width>800) 
   window.top.document.getElementById("main").cols="200,9,*";
  else
   window.top.document.getElementById("main").cols="160,9,*";
  GEId("menuSwitch1").src=’images/ej1_30.gif’;
  GEId("menuSwitch1").title=’隐藏’;
 }
 else
 {
  window.top.document.getElementById("main").cols="0,9,*";
  GEId("menuSwitch1").src=’images/ej1_32a.gif’;
  GEId("menuSwitch1").title=’显示’;
 }
}
原来框架页可以动过window访问到,然后就可以通过id访问它的子页面了,哈哈。不过这种Dom解析的说明网上也找不到很好的,查起来非常不方便。谁有好的资源可以告诉我。
6、一个在IE和Firefox都可以工作的灰度隐藏的Js
我了解到Firefox支持了Opcity,可以实现IE私有的filter里面的透明度的设置,所以修改了一下以前的一段js,让两个浏览器都可以实现类似的效果。不过目前在ff上没有渐变的效果,还需要改进。
<script language="javascript">
function high(which){
theobject=which
which.style.opacity=1
highlighting=setInterval("highlightit(theobject)",50)
}
function low(which){
which.style.opacity=0.25
clearInterval(highlighting)
which.filters.alpha.opacity=25
}
function highlightit(that){
if (that.filters.alpha.opacity<100){
that.filters.alpha.opacity+=10
}
else if (window.highlighting)
clearInterval(highlighting)
}
</script>
本文如果需要转载,请和我本人联系,未经同意不得专用,谢谢。

说说Displaytag


继续在Open-open.com逛,看到排名很靠前的一个java taglib项目。因为一直觉得taglib没产生什么有意义的东西,只不过是规范化了很多,看到排名靠前的taglib挺奇怪,就仔细看了看。
发现原来是个表格组件。前一段时间看讲座对Dorado那个界面比较感兴趣,使用了Ajax和组件化的表格技术,数据对象通过Javascript+dom解析,类似IBM的SDO概念。觉得如果能够真正的弄好,这种可服用的表格组件非常有前途。
当然SDO已经在IBM的JSF组件里面应用了,帮定起来真的很方便,而且客户端的体验也非常的好。可是JSF的最大缺陷就是手动开发太麻烦了,培植非常繁琐,所以就依赖于IDE来自动实现JSF组件的配置,所以JSF的IDE都是由背景的,代表某一方利益的东西。比如SUN的NetBeans、IBM的那个什么5.1,而我喜欢用的Eclipse下面还没有很好的辅助IDE,Nitrox新版支持JSF了,可是没有破解,正版又老贵,Myeclipse 4.0支持了JSF,但看了看很初级。
撤了老远,其实我想说我对这种实现的很Fine的组建太感兴趣了。
马上去它的网站看:
http://displaytag.sourceforge.net/
首页的几张截图非常吸引人,它产生的表格看起来非常的棒!
听Open-open介绍,这个东西和Struts结合很顺畅,我们的项目用的Struts+Hibernate+Spring,马上加进来试验。
遇上问题,session里面的变量访问不到,很奇怪,这个东西难住我了,找不到问题。看了它们的PDF,本以为会比网站讲得详细,后来发现不过就是网站的内容的PDF版本,基本也就是个入门指南,可怜。
网站总提到TestList这个东西用来测试,找不到这个类,下了它的源码,发现在源码的例子中有,产生测试List。
然后就用这个TestList测试了一下分页、排序、导出其它格式这些功能,发现非常吸引人,一下子觉得发现了宝藏!
然后不管是否能在我们项目应用,开始修改css,把它弄到我们的项目里,然后问项目其它同仁为何不能显示出我们的List。
修改Css很顺手,嘿嘿,目前我改css已经驾轻就熟了,很快修改出自己的漂亮的样式,很满足,哈哈。
而后,我的朋友郑浩发现了不能显示的问题,因为我们用了Hibernate,它返回的List是离线的,访问的时候需要用iterator访问,可能Displaytag的机制问题,所以无法访问到。
解决方法是每次new一个新的List,复制一遍再过去。我考!这是多大的浪费呀。把它放到DAO是不可以的,这样DAO移植后绝对是浪费,把它放到bussiness层也不合理,放到MVC的Controller还差不多,但是也感觉浪费的利害。
这时有些失望,所以去Google下,发现无数人说到这个问题。尤其是使用它的自动分页,每次如果取出所有的,然后复制List,估计性能会彻底完蛋!
所以,有些失望,Displaytag最有用的功能aotopagging不能使用了……
为了做试验,进一步修改,不用它的自动分页,但是修改了MVC,让它可以访问到一个复制过的List,来显示数据。配合刚才修改的css,效果和以前的Struts tag不相上下。(靠,完全是写css的缘故,这个有什么兴奋的!)
它的表格的控制都是英文的,应该可以中文。然后google,和问郑浩,他们用了如下代码:
<display:table name="list" width="100%" cellspacing="0" cellpadding="0" class="liebiao" pagesize="15">
 <display:setProperty name="basic.msg.empty_list">没有可显示的内容</display:setProperty>
 <display:setProperty name="paging.banner.placement">bottom</display:setProperty>
 <display:setProperty name="paging.banner.full"><span class="liebiao">[<a href="{1}">首页</a>/ <a href="{2}">前一页</a>] {0} [ <a href="{3}">下一页</a>/ <a href="{4}">最后一页 </a>]</span></display:setProperty>
 <display:setProperty name="paging.banner.first"><span class="liebiao">[首页/前一页] {0} [<a href="{3}">下一页</a> <a href="{4}">最后一页</a>]</span></display:setProperty>
 <display:setProperty name="paging.banner.all_items_found"><span class="liebiao"><br><br>本栏目共{0}条,已经全部列出</span></display:setProperty>
  <display:setProperty name="paging.banner.onepage"><span></span></display:setProperty>
 <display:setProperty name="paging.banner.one_item_found"><span class="liebiao">共一条,已经列出</span></display:setProperty>
 <display:setProperty name="paging.banner.last"><span class="liebiao">[<a href="{1}">首页</a>/ <a href="{2}">前一页</a>] {0} [下一页/最后一页]</span></display:setProperty>
 <display:setProperty name="paging.banner.some_items_found"><span class="liebiao"><br><br>共有{0}条,显示第{2}至{3}条<br></span></display:setProperty>
 <display:setProperty name="paging.banner.page.link"><a href="{1}" title="前往第{0}页">{0}</a></display:setProperty>
 <display:column property="title" title="标 题"  href="detail.jsp" paramId="id" paramProperty="id" maxLength="10" width="40%" align="left"/>
 <display:column property="reportername" title="作者" maxLength="4" width="20%" align="left"/>
 <display:column property="readtimes" title="阅读次数" align="left"/>
 <display:column property="newsdate" decorator="cn.gov.bjmy.util.SimpleDateDecorator" title="新闻日期" width="16%" align="left"/>
</display:table>

哈哈,这么用真的够累。不过想了想,在中小项目,利用它的自动分页还是不错的。
不过每次设置太麻烦了,查阅了下,1.0版本支持用displaytag.properties配置了,这样可以全局使用。
displaytag.properties的内容如下:(那些中文我已经转码了,使用了PropertiesEditor,这个Eclipse插件自动转码非常方便!)
basic.msg.empty_list=\u6ca1\u6709\u53ef\u663e\u793a\u7684\u5185\u5bb9
paging.banner.placement=bottom
paging.banner.full=<div class="pagelinks">[<a href="{1}">\u9996\u9875</a>/ <a href="{2}">\u524d\u4e00\u9875</a>] {0} [ <a href="{3}">\u4e0b\u4e00\u9875</a>/ <a href="{4}">\u6700\u540e\u4e00\u9875 </a>]</div>
paging.banner.first=<div class="pagelinks">[\u9996\u9875/\u524d\u4e00\u9875] {0} [<a href="{3}">\u4e0b\u4e00\u9875</a> <a href="{4}">\u6700\u540e\u4e00\u9875</a>]</div>
paging.banner.all_items_found=<div class="pagebanner"><br><br>\u672c\u680f\u76ee\u5171{0}\u6761\uff0c\u5df2\u7ecf\u5168\u90e8\u5217\
u51fa</div>
paging.banner.onepage=<div class="pagelinks">{0}</div>
paging.banner.one_item_found=<div class="pagebanner">\u5171\u4e00\u6761\uff0c\u5df2\u7ecf\u5217\u51fa</div>
paging.banner.last=<div class="pagelinks">[<a href="{1}">\u9996\u9875</a>/ <a href="{2}">\u524d\u4e00\u9875</a>] {0} [\u4e0b\u4e00\u9875/\u6700\u540e\u4e00\u9875]</div>
paging.banner.some_items_found=<div class="pagebanner">\u5171\u6709{0}\u6761\uff0c\u663e\u793a\u7b2c{2}\u81f3{3}\u6761</div>
paging.banner.page.link=<a href="{1}" title="\u524d\u5f80\u7b2c{0}\u9875">{0}</a>
export.banner=<div class="exportlinks">\u5bfc\u51fa\u4e3a\u5176\u5b83\u683c\u5f0f: {0}</div>
export.pdf=true
export.csv=false
把这个文件放到Web项目的Class目录下就可以了。解决了问题了。
用了下导出功能,支持pdf需要把itext-0.99.jar拷贝到WEB-INF/lib下面,然后再propertis配置中“export.pdf=true”。
不过发现这个用不了,后来发现原来是无法解析Struts的.do,我都是映射到/去的,而我的jsp文件不在/下面,所以路径出了问题。查了下,用这个参数指定,“requestURI="getUser.do?back=yes"”就可以了,里面是我用的struts的action的路径。
修改以后,自动排序和导出都正常了,不过发现导出csv的时候后缀是.do,靠,禁用它。(BTW:集图的时候天天CSV,哈哈,别的地方估计不常用吧。怀念COC,现在BOB却很少去)
下面是全部可运行的一个代码:
<display:table name="tablecontent" class="<%=lClass%>" defaultsort="1"
 defaultorder="descending" export="true"
 requestURI="getUser.do?back=yes">
 <display:column property="userId" title="ID" sortable="true"
  headerClass="sortable" />
 <display:column property="name" sortable="true" headerClass="sortable" />
 <display:column property="realname" />
 <display:column property="password" sortable="true"
  headerClass="sortable" />
 <display:column property="addr" title="Comments" />
</display:table>
对比一下Struts下面的相同代码:
<logic:iterate name="users" id="userlist" scope="session">
  <tr>
   <td class="frh"><bean:write name="userlist" property="userId"
    filter="true" /></td>
   <td class="fr"><bean:write name="userlist" property="name"
    filter="true" /></td>
   <td class="frh"><bean:write name="userlist" property="realname"
    filter="true" /></td>
   <td class="fr"><bean:write name="userlist" property="password"
    filter="true" /></td>
   <td class="frh"><bean:write name="userlist" property="addr"
    filter="true" /></td>
   <td class="fr"><bean:write name="userlist" property="level"
    filter="true" /></td>
   <td class="frh"><a
    href="/viewUser.do?id=<bean:write name="userlist" property="userId" filter="true" />">详细</a></td>
   <td class="fr"><a
    href="/deleteUser.do?id=<bean:write name="userlist" property="userId" filter="true" />">删除</a></td>
  </tr>
 </logic:iterate>
对比下发现差距也不大吧,不过,有了自动排序和导出,看起来满酷的。

酷是一方面,失望才是更大的。简单尝试和运行还是留下了遗憾,记录一下,如果有心人看到可以去改进:
1、不能读取Hibernate返回的离线List,这是个硬伤!不知道是不是我的使用问题。但是如果必须是在线的,那么内存浪费巨大。大的项目就用不了了!
2、所有的自动排序,自动分页,导出都是通过传统的服务器回写来实现的,看似酷,但是实际上过于简单。在Ajax很火爆的现在,技术有点落后了。
3、没有结合SDO这样的数据模型。其实和Ajax那个问题一样,没有SDO就不是组件模型。而只是一个傻瓜化的封装而已。
4、网站的文档不够详细,也不严谨,我觉得开源没有好的文档就永远火不起来。
5、我很欣赏所有的样式都依赖于css,而且东西很好扩展。但是居然网上有人抨击这种方式。我想反问那些满脑子程序的人,那些看不起美工的程序员,你们懂得程序是艺术么?你不懂css、不懂web standards、不懂xhtml、不懂xml,还有什么可混的么?
6、另一个问题。分页实现的太不优雅了。也许是taglib的限制。一次读取所有的数据,并且要求是在线的,仅仅为了分页,这太恐怖了。Hibernate不能这么用,JDBC也不能这么用!好的分页封装看来还要用别的。如此一看,这里面除了CSS提供看起来很好的表格外就只有导出功能了。
7、而悲观的是,导出功能除了花哨以外没有别的作用了,而导出功能还有更好的选择吧。
所以,一句话说。上手还算容易,可是深入难,看不到好的手册。Sample写的不错,可是缺乏与其它框架结合的例子,比如Hibernate、Struts。好多人说它好用,但是估计都是从简单的角度考虑的,性能的考虑是个问题。配置看起来还算容易,可是配置却没有文档来介绍,只能摸着石头过河。

所以,仅仅是结绳记事。小项目可以用。大项目用它没法发挥它带来的优势,只能使用可怜的一点点功能(我的例子只用了自动排序和导出)。不过开源项目,谁知道,没准麻雀变凤凰了呢。毕竟它的思想是对的,提供可用的Web组件(它声称要实现table、Tree等等),我也想找到一个这样的组件,那样就真的可以轻松些工作了!
等待那一天!

依赖注入DI、控制反转IoC

我也用我的话说说我的理解。
代码中的各种引用就会产生依赖。
原先用什么就在代码里声名什么,这样依赖是广泛的,任何改动丢要重新修改代码。
所以,不方便。
后来,流行工厂方法,不依赖具体类,只需要一个工厂,都准备好了。可是,这样就依赖于工厂了。如果有变动,就要修改工厂的代码。
所以,还不够理想。理想的方案是不修改代码,改变依赖之需要修改配置文件。
也就是,实现运行时依赖,而不是编译时依赖。这就是依赖注入的本质。
依赖注入DI(这是个方法),目的是实现依赖关系的完全解耦,也就是实现控制反转IoC(这是个理念)。

依赖注入就是通过IoC容器实现的一种自动依赖生成,你只需要配置依赖的字面关系,具体操作IoC容器自动完成。
Spring推荐使用的是:1、Setter 2、构造器(构造子)
关于两者的使用情景略有区别,夏昕那个文档有介绍。

用setter还是constructor。
如果依赖在生命周期不变就constructor,变就用setter。

DI实现的方式,流行的Spring实现了前两种,前两种DI都是IoC的实现。
1)通过set方法(Spring中常用这个玩意)
2)通过构造函数
3)参数传递(应该很早就开始应用了)

利用winrar自动备份重要资料

看到这个,发现很有用的文章,对于定期备份项目文件很方便。


每个人的电脑上都有很多有价值的资料,例如你写的论文、Outlook中的信件、IE收藏夹、FeedDemon中的rss链接等等,经常备份的重要性自不用多说,但怎样让备份变为轻松简单而不是繁重的劳动呢,我在网上查找了很多备份工具,发现它们要么很贵,要么存在各种缺陷(如不使用通用的压缩格式),后来发现其实只使用winrar就完全可以完成这个任务,而大部分人的电脑上都有这个压缩软件。

打开winrar的帮助主题,你会发现在winrar的命令行模式里可以指定很多参数,其格式为:

*WinRAR <command> -<switch1> -<switchN> <archive> <files> <@listfiles> <path_to_extract\> *

利用winrar可以从列表文件中读取要压缩的文件/文件夹这个功能,我们可以创建一个列表文件如C:\backup.txt,在这个文件里写入需要备份的文件/文件夹路径,格式很简单,每个路径一行即可。然后创建一个快捷方式(或批处理文件),其命令为:

*"C:\Program Files\WinRAR\WinRAR.exe" a C:\backup.rar @C:\backup.txt *

要进行备份的时候只要执行这个命令即可,这样会在C:\生成备份后的压缩文件,你最好把它转移到其他存储装置上。配合windows的计划任务,还可以进行定时自动备份。你还可以指定其他参数,例如加上-ibck可以让备份在后台执行,加上-t可以在压缩完成后验证等等,具体请参考winrar帮助主题。

这个方法的缺点是你必须自己找出那些需要备份的信息,有一些软件把信息存在注册表里不好备份,所以你可能需要在使用这种方式备份的同时手动备份注册表。不过很多专门用于备份的工具也是没有这个功能的。


以前帖子里说过用Winrar自动备份资料的方法,我现在平均每周备份两次,备份的内容包括日程(Rainlendar)、RSS频道(Rssowl)、Eclipse里的项目、常用IP设置、Outlook Express内容等等,压缩下来大约150M左右,其中主要是(带附件的)信件和项目文件占了大部分空间。

今天发现Eclipse里的一个CVS设置给搞错了,连接的是旧的CVS服务器,我在Eclipse里把服务器的地址改过来再进行Update操作,结果把我之后做的几处修改都覆盖了。还好我昨天晚上刚做了备份,这几天的工作没有白费。

类似这样的意外事件很难预料,事先做好充足的预防工作让我们有备无患,而付出的只是每周几分钟的时间,利当然远远大于弊。

关于Winrar备份我又总结了几条经验:首先可以设计两个备份任务,一个是全面备份,一个是快速备份,一些体积比较大又不是特别重要的不需要经常备份,平时每天进行快速备份,每周或每月全面备份一次就可以了;其次,在命令行里加上-ag参数可以让备份得到的压缩包文件名自动包含当前日期,从而不会覆盖掉以前的备份,该参数还可以指定日期格式,如YYYY-MM-DD等;另外,用-ms参数可以不对已经被压缩过的文件再次压缩,而是直接存放;最后,用-x命令可以排除一些我们不希望备份的文件,比如*.jar文件,一般都可以下载得到。我现在用的备份命令如下,其中backup-q.txt的内容是要备份文件的列表,得到的压缩包名像BAK20050223.rar这样:

"C:\Program Files\WinRAR\WinRAR.exe" a -agYYYYMMDD -ms -x.jar -ep2 -ibck -t c:\backup\BAK.rar @c:\backup\backup-q.txt *
这里要提醒一下,备份的文件最好定期转移到本地硬盘以外的存储地点,比如刻成光盘保存,还是不要过于相信硬盘了。


我自己的Script如下:

O:\Eclipse\Achive\backup.txt
O:\Eclipse\Workspace\Level2Demo
O:\Eclipse\Workspace\StructDemo
O:\Eclipse\Achive\do.bat
"C:\Program Files\WinRAR\WinRAR.exe" a -agYYYYMMDD -ms -x*.jar -ep2 -ibck -t O:\Eclipse\Achive\Workspace.rar @O:\Eclipse\Achive\backup.txt
cmd

安装Together for Eclipse 7.0

这里下载Together Edithion for Eclipse 7.0,这个是官方的,要注册个用户名才可以下载。大家通过其它渠道获取也可以,但要确定是7.0的。
安装很容易,有安装向导。不过要注意它只能工作于Eclipse 3.0.x,比如3.0.2,不支持3.1final的。
很容易找到的shock的破解在Windows XP下不起作用。如果大家也使用XP,请使用附件里面的ROR的给.net版做的破解,这个也可以用,而且是唯一可用的。
使用的时候先运行一遍Together(一定要使用Together安装目录下的TogetherEC.exe运行),它提示你注册的时候退出。然后运行keygen.jar(双击就可以),然后选择你安装Together目录下的license下面的ttec.slip,然后破解完成了,运行Together就可以进去了。
界面大家自己适应一下,应该容易上手,不过画图的那个palette是自动隐藏的,你用鼠标点击就可以展开(以前因为不知道以为破解没有成功,走了很多弯路,我很笨 __)由于Together默认使用自己的Perspective,所以如果和其它版本的Eclipse共享Workspace也许会报错,需要换回Perspective才可以。

入手的Meizu E5和另一个Meizu ME的对比评价

新E5 EF3(2005年6月29日)

ME V7 EDH(2005年4月8日)

首先说说备受关注的FM能力:

两个都自动搜好了台,我使用了最常听的91.5Mhz的CRI。

这个时候正在放音乐,当时放的是陈亦迅的你的背包,然后是Killing me softly by the song。

使用了A、B切换的方式,使用的耳机是森海的MX500,基本上10秒钟换插一次,体会两者的区别。

说实话,区别太明显了。我一直认为我的E5的FM效果很漂(轻飘飘),感觉像隔着一个房间听歌,本以为Meizu的Mp3都是这个样子,但是对比以后发现ME的声音明显听感好多!当然,不能吹嘘ME有多好,应该说它和E5的风格不一样,ME感觉声音比较近,听着质感好一些。而E5则比较明显的虚一些,闷闷的,声音比较干瘪,或者说就是被压瘪了的感觉。其实以前我就发现E5放FM的这个问题了,因为基本上每天听CRI的Easy start of the Day,里面是直播节目,主持人的声音在E5里面非常明显的换了个声音,对比的对象是我的得声9701收音机,不夸张的说主持人的声音好像是套了个口罩,或者说就像抵挡随身听里面的开了Bass以后那种奇怪的效果,所以,我后来使用E5的时候都把FM的EQ里面的Bass调到最低了。

说到这里,我觉得E5和ME的声音的区别应该和E5新添加的FM EQ有关。而后我又作了试验,调节了E5的FM EQ到不同的组合(还好高低音都只有3格,所以没有太多组合),发现听现场的节目把Bass关掉效果会清晰一些(否则浑浊),但是听平常的FM播放的音乐的时候还是把高低音都放在3格的位置才能达到比较好的效果(质感改善一点)。这么说,我感觉E5的FM EQ有点失败,没有改善效果,反而拖了后腿!

仔细听了ME对比E5(把EQ高低音都放到3格)的效果,E5有差距,听起来明显的空和瘪,但是这也是夸张说了(毕竟是对比测试,对比很明显),因为E5的FM毕竟还是很清晰的(但是解析度绝对不如ME),所以如果量化打分:如果我的9701收音机是95分,那么ME可以达到90分,而E5也可以算80分。

比较有趣的是,我手里正好有个歌美M25 256MB的Mp3,这个也是基于Sigmatel 3520方案的(好像FM方案也一样?),所以对比了一下。呵呵,不过真的听了两下就放弃了,因为M25听CRI还时不时会出现沙沙的声音(信号不灵敏),声音听起来闷闷的(比E5还闷很多),而且低音比较差,和前两者基本没有什么可比性。

最后,关于FM,还要说一下能搜索到的电台:

对比了,比较可喜的是,发现E5搜索到的电台居然更多,不过可能和E5艘台时使用了线控(天线长了)有关。还有,回忆一下,当初换掉那个老E5与我的新E5能搜索的台一样多,也许原来那台老E5没什么大问题:D

列出两个搜索出的电台:

新E5能收到13个:87.6-88.7-90.0-91.5-96.6-97.4-100.6-101.8-102.0(空台)-102.5-103.9106.1-107.3

ME能收到10个:87.6-88.7-90.0-91.5-96.6-97.4-100.6-102.5-103.9-106.1

下面先说说ME和E5的Mp3表现的区别:

说实话,我真的没有听出什么区别,因为似乎两者的表现是一样的,包括使用Turebass、WOW、SRS这样添加大量味精以后两者真的听不出什么区别。但是这里说一下Meizu这两个产品的风格,声音非常清晰,解析度感觉很好,听感很舒服,缺点是声音有一点点空,低音部分量感和空气感都不错,但是低音缺乏点磁性,也就是它造成了声音的发空。感觉这是Sigmatel解决方案的固有缺点,能够被Meizu解决成现在的状态的确很满足了,所以我才买了E5。所以,看来Meizu的确需要换个方案了。还记得以前用的Rio800,声音听感特别好,虽然实际上解析度等指标都并不很高,希望Meizu能够实现个有特点的声音,而不只是现在这样只通过EQ提升音质(这也是不可能的,EQ只改善听感)。

关于录音的效果,由于我不太关心,所以就不评述了。说实话我从来没用它录过音。

到了这里,我觉得不得不说一下换E5的经过。我是北京的,打电话问到去四通大厦换。带裸机过去的,当时还有个老兄在换128MB的E5。听说512MB的货挺多,拿出来一个给我换。我摆弄了一下,没发现新的滚轮有什么区别,仔细看了下发现第一个机器电池盖松。然后又拿了一个出来,发现屏幕没膜花了,又拿了一个,发现滚轮嘎吱嘎吱的,又拿了一个,发现屏幕上面一条一条的不均匀,又拿了一个,发现基本差不多,但是膜上有气泡,随后又要她拿了一个,发现这个屏幕特别的淡,然后又要她拿一个,发现这个电池盖口不齐,此时她那个袋子里面还有两个,我就让她都拿出来看看,发现又是一个屏幕特别淡的(每看是不是对比度设置太低了,难道出厂设置不一样?不过听一些网友说这个与对比度无关),还有一个转轮特别松,所以最终拿了那个差不多但是膜上有泡的。我考,我真贫,想起来都头疼。不过回去才发现,电池盖松很正常,因为没放电池就松,放上电池就好了。

最后,还要说个问题,服务人员很好,他们提供备份数据的服务,把我的数据备份下来考到新E5里面了,感觉很不错嘛。可是……回家后发现染毒……,用Norton奋战半天……,病毒名字叫W32.Meetot,还好只是个自我复制的东西(刚拿回来以为是Meizu送的新的程序呢,后来才发现那个Sysnote.exe是病毒)。你说表扬好呢,还是批评?备份数据太好了,但是希望下次先杀毒,否则成了传染媒体了,哈哈。

最后作个几句话综合:

1、  感觉E5的FM效果不如ME,怀疑和新增的FM EQ有关。

2、  新E5的搜台的灵敏度没有任何问题

3、  新E5的FM 效果可以满足在户外使用,室内还是用收音机好

4、  E5的电池寿命很棒,我经常忘记关机,第二天才发现,电力依然强劲

5、  E5的Mp3效果很满意,在家里在户外都可以满足要求

6、  新E5的质量个体差异很大,也许是仅这批赶制比较仓促

7、  我对E5比较满意,打个8分吧

总的来说,Mp3还是在户外使用吧,在家里还是用音响或者电脑音质更佳。而在户外E5和ME或者牛一些的iriver系列、iPod、Sony HD5那些区别也不会太大了,而且E5的电池续航能力基本超过任何锂电解决方案了,所以我选择了E5。

贴图明天在上。后面有时间我还想说说E5的随机播放的问题,有时间的话。我个人热爱硬件,喜欢在Q3ACN的雷神硬派混迹,声卡等都感兴趣,所以才花时间写写E5的这点感受,抛砖引玉。

我的Space:http://spaces.msn.com/members/iamtin

UML建模工具浅度分析

1、Rose
这个工具我不多说,它应该是最权威的,但不一定是最适合的。但是Rose仅仅是个建模工具,无异于一个画图工具。Rose画的图风格明显,一看就知道是用的Rose。不过要使用它来管理还要结合Rational的其它工具,整体使用的话很庞大。我不多评价,因为没用过,想起被人们称为“巨大”、“资源杀手”、“经常崩溃”、“价格昂贵”我就头疼。希望同组其他同学评估一下,补全。
2、Visio
这个更不用多说了,完全就是个画图工具,而且沾染了MS的风格,不开放,完全陷在自己的小圈子里面。不过有两个别的工具不具有的优点:A、速度快、图形美观、资源占用小、界面友好、容易上手……这些都是MS Office的优点 B、剪贴板格式与MS Word兼容,非常容易嵌入到Word文档中,这个是最有用的功能!
不过可惜,对UML标准也就是睁一只眼闭一支眼,不标准不兼容,且非常不合理的不支持Java,哎,只能忍痛割爱。总之Visio只能用来玩玩,画画漂亮的画骗骗小孩。
3、Together for Eclipse 7.0 or 6.3
说起它感觉就是个痛苦。首先这个东西都是收费的,所以必须破解以后才能体验。刚装上7.0没有发现画类图的工具,抓耳挠腮呀,还是没有解决。而后试验了6.3,这个能够顺利使用,建模应该是UML1.1的东西。图形非常简单,看来法国背景的Borland并没有让它看起来很漂亮,可惜。不过Together本来是仅次于Rational的业界老二,所以东西当然很强大,支持基于模式的UML建模,不过建模以后的图看起来乱七八糟的。但这是由原因的,Together更加偏重于MDA,所以它的输出应该是代码,而不是UML图,所以这个工具面向生产,能够准确的自动生成代码,也支持逆向工程(从代码生成类图),但是图都是简陋的。而我们的这次实践还没有应用MDA这样的概念,设计只是概念指导,文档是重要的输出,所以选择Together可能会是个艰难的选择。
简而言之,Together的功能我们有90%用不到,而用到的那10%还是Together的弱项,你说怎么选择。本工具可以输出XMI,可以与其他UML工具交换。Together目前最新的版本是7.0 for EC,我再找找破解,看看能否翻案,不过希望不大。
同时还要控诉以下Together for EC,我当时用6.3花了好久画的图输出时却犯难了,因为它只支持SVG格式输出。SVG是Adobe的不怎么疼的一个儿子,是一种基于XML的矢量图像格式,类似Flash,而现在Adobe鲸吞了Macromedia以后Flash就变成Adobe的养子了,如此之下SVG这个亲儿子也失宠了,可怜。倒霉的SVG与Adobe的其它东西一样,对中文字体总有点感冒,所以用IE打开乱码,要下载SVG Viewr中文版才可以解决,但是用起来还是特别别扭。在Word里面用SVG,我目前使用illustrator转化SVG为BMP,然后再到Photoshop转化为GIF,然后再嵌入Word,这也是被逼呀,没办法……
BTW:用illustrator转换SVG叶挺麻烦,每次要删除辅助线,挺麻烦的,真的让人有心理阴影,这直接造成让我放弃Together。
4、Visual Paradigm Smart Development Enviroment 3.0 for Eclipse
这个工具获得了本年的Jolt大奖,按理说会不错。体验了一下,首先是界面画画绿绿,感觉有点像是过年贴的年画,后来打听到原来Visual Paradigm是一个香港的公司,呵呵,还是国产软件呢。相比有些花哨的界面,程序的功能真的非常强大,而且在画图的时候可以从从一个个UML对象上面直接派生关系,感觉真的是Smart。
但是缺点又来了:我们工作于Eclipse,但是SDE并不是紧密结合的。分两个部分:Visual Paradigm for UML 5.0 Community Edition、SDE 3.0 for Eclipse and IBM WebSphere Studio Community Edition。后者才是SDE,也就是与Eclipse结合的建模部分,而VP for UML5.0是个比较纯粹的建模工具,它并不与Eclipse完全结合。在使用的时候SDE的Community版本无法从代码逆向工程出UML模型,而且SDE环境无法直接输出图像格式的UML图,必须先导入VP for UML5.0以后才可以输出为其它格式。这样可能会带来一些不方便,我们将无法使用代码与模型同步的功能(如果用企业版好像可以),这是个问题。
再用简单的话说,VP分两个部分,一个是SDE与Eclipse结合,一个是VP for UML5.0纯粹建模和输出UML图,但是两者结合并不紧密。且Community版本代码同步不能用,这是个麻烦。但是总体上这个工具比较强大,理念先进,且完全支持UML2.0。本工具可以输出XMI,可以与其他UML工具交换。所以作为我们的备选方案。目前本工具只支持Eclipse 3.0.x。
5、Omondo EclipseUML Free Edition 2.1.0
这个工具用的人比较多。它更接近一个Eclipse插件,虽然它不是开源的。这个工具比较纯,可以UML2.0建模,支持代码模型同步(类似MDA的方式)。
我们依然先说缺点,这个Free版本无法支持与CVS同步的项目,靠,这真的很烦,如果去掉CVS同步就可以。
说优点:EclipseUML的逆向工程能力非产好用,你可以直接托拽工程里面的类到类图里面,这个非产贴心!如此就可以代码同步了,这对贯穿项目整个生命周期非常有意义。再有,它的UML图画的非常好看,我觉的是上面几个中最棒的!简单、颜色清淡、具有阴影效果、没有锯齿和难看的图形、所有的图标与Eclipse环境统一,这样的UML图真的是别无所求了!但是,没有完美的,目前的Free版本只能输出SVG,靠,这等于和Together一样瘸腿了,不过欣慰的是Studio版支持输出Windows Metafile、CGI、JPEG格式,哈哈,而且有20天试用,如此的话我们完全可以集中输出。再说实在不行可以截图……
EclipseUML Free和前面的UML建模工具比还有个优点,它支持Eclipse 3.1,这样的话就可以和我们的最新的Eclipse3.1+Myeclipse4.0M2环境结合起来工作了,支持逆向工程,UML2.0图很标准很漂亮,CVS支持带来的问题我们可以通过维护一个没有CVS的项目来操作。
CVS项目问题和图形输出还可以通过EclipseUML Studio Edithion来解决,不过可惜的是这个版本只支持Eclipse 3.0.x,和前面那些工具一样啦……
简单的说,EclipseUML支持逆向工程、简单、图形漂亮,支持Eclipse 3.1,方便协同工作,所以应该作为我们项目的推荐方案。

下午,又峰回路转了,对本来在待定状态的Together 7改变了看法。

先是发现以前用的破解方法没有错,而且是在Win XP里面唯一有效的方式,如果决定用,我们就可以破解它。
然后发现原来我以为Together 7没法画图,其实是个低级错误,里面的面板学习VS.net是自动隐藏的,所以我一直没有发现,今天仔细看就看到了(可能写作业的时候太紧张了)。
图好象不是UML2.0的,但是这不算个问题。
图形还是比较平淡,就是很基本的那种,也没有颜色,就是黑白的。可是隐藏在后面的是巨强大的MDA功能,支持画图自动生成代码,而且画图的时候可以使用内置的模式的模版,还可以自定义模式,很强大的。然后发现不能导出单一的图,本来觉得又要失望了……谁知山穷水尽疑无路,柳暗花明又一村,发现居然可以Export一个整体报告出来,输出的时候图像可是可以是BMP、JPG、SVG等等,并且连JavaDoc也一并生成了,还有个很酷的applet树……绝对的爽!

所以基本上Together7还是具有老二的风范的,应该推荐。而Rational系统ZH同学说还是不太稳定,且4CD的体积看了绝对受不了(谁喜欢肥girl?),so,这个老二是绝对值得考虑的!

也就是说:
现在可以考虑的是Together、VP SDE、EclipseUML。Together的类图缺写颜色,但是功能全。VP SDE大家好像都不太喜欢,花花绿绿让人……而且没什么绝招吸引人。EclipseUML的最大优点是支持Eclipse 3.1,可是Free版本没法与有CVS的项目工作,而Studio版只能用20天且不支持Eclipse 3.0.2。所以综述,目前UML工具只能在Eclipse 3.0.2下工作,能够完美注册使用,且能够提供完整解决方案的就是Together for Eclipse 7.0,所以,我最终认为它就是最值得推荐的!

最后我们画个表格来对比一下这几个建模工具:

工具名称 版本 与EC结合 UML2.0兼容 逆向工程 输出图形格式 注册 图形美观 界面友好 MDA支持 支持EC版本 支持CVS 结论
Rational Rose 2003 × × × All 必须 7/10 ? × × × ×
MS Visio 2003 Sp1 × × × All 必须 7/10 10/10 × × × ×
Together 7.0 for EC × SVG 必须 4/10 6/10 3.0.x 推荐
VP SDE 3.0 for EC ×(注册) SVG、PNG、JPG 免费 8/10 7/10 ×(注册) 3.0.x 备选
EclipseUML 2.1.0 Free SVG(其它需要注册) 免费 9/10 8/10 3.1 ×(注册) 推荐

相关连接:
http://www.borland.com/us/products/together/index.html
http://www.visual-paradigm.com/product/vpuml/productinfovpumlce.jsp
http://www.omondo.com/还有一个准备看看:
http://argouml.tigris.org/
看过了,是个纯Java实现,不能与Eclipse协同。总的来说比较一般,就是个建模工具,估计也没有Rose友好,所以不做近一部考察啦。

听来的故事——《爱的左右手》

伟和佳原来也是一对很恩爱的一对小夫妻,结婚前后那些年也是甜甜蜜蜜如胶似漆,好象谁离了开谁,就象身上少了某根筋骨一样的不自在。
但随着时间的推移,婚姻生活渐趋于平淡,又感觉彼此象白开水一样,虽然最解渴,却不如饮料那么甜那么有劲。一次在朋友的聚会上,伟喝了点酒,大声地说:现在啊,摸着老婆的手真的象左手摸右手了,一点感觉都没有了。佳站在几步之遥的厨房内听见,心中猛的一沉,但旋即恢复了常态,端出一盘切好的水果,继续招呼伟的朋友。
其实伟说这话是有所指的,并且希望听到佳的责难,那么,他就可以明明白白地向佳摊牌。但佳却不作声,象什么都不曾听到一样。伟就只好把话仍放在心里。
这几年,伟诉事业发展得很顺利,就象他的公司名称朝阳一样,蒸蒸日上,自然而然地吸引了许多异性仰慕的目光,尤其是几个月前来公司的一位营销经理静,对伟更是发起了强有力的进攻。在伟看来,静除了有姣好的容貌外,性格泼辣而大方,在工作上也很帮得上伟,而佳近年来,除了在家待奉公婆之外,对伟的公司的业务可以说是一壳不通,更谈不上帮助了。所以,伟心中的天平,不由自主地偏向了静。
就在伟准备放下所有顾虑跟佳谈离婚的事的时候,伟突然病倒了,而且来势非常迅猛,不得不住进了医院,伟只记得看到检查结果上的“急性肾衰竭“就晕了过去。醒来时看见佳躺在隔邻的病床上,一脸的疲倦。原来妻子把自己的一个肾换给了他。
两人出院后,伟回到公司,发现静已经卷走了公司所有的客户资料另起炉灶,员工也走得差不多了,公司的状况奄奄一息。伟坐在空荡办公室不禁悲从心来,不知什么时候佳走了进来,从背后抱住了伟,淡淡地说:伟,记得你有个关于爱的左右手的说法,我也自创了一个,你想不想听呢?
伟点点头,佳说:“丈夫和妻子就象左手跟右手,当右手需要帮助,不需要右手开口,左手会自动接上去,而当左手受了伤,右手也会很自然地去抚摸安慰它。因为他们虽然各自独立,但他们本来就是一个整体!”
伟握住了佳的手,这一次,他感觉是如此的温暖和柔软,这感觉一直漫延到心底……

Struts入门应该注意什么?

我认为五点最重要:
1、找一个好的IDE,因为开发Struts应用这样拥有大量XML配置工作的工程最好有一个具有代码生成的IDE。你可以选择Eclipse+Myeclipse或者Eclipse+Lomboz或者JBuilder这样的成熟IDE。
2、速食化的文章看上一两篇就可以了,主要了解一些基本结构就可以了,学习技术光靠吃方便面是肯定不够的。
3、学习Struts这样地开源框架要特别注意版本的区别,1.0 1.1 1.2的Struts都有很大区别,看文章、书都要先搞清楚版本,否则你连一个helloworld也别想搞定。现在书大部分都是1.1的,但是目前应该学习1.2,两者的区别可以参考Apache Jakarta项目的说明。
4、参考一个简单的Demo,实现CRUD操作的就可以,你需要理解一下MVC在Struts中的对应机制。
5、选择一本好书开始认真学习,例如:Manning出版的Struts in Action,OReilly出版的Programming_Jakarta_Struts,还有Jakarta Struts Live。这几本都是经典。

Java&UML,又一些牢骚

这算一种言论而以,站在Java阵营,要能够接受各种忽悠。
这里有几个概念UML&MDA、建模工具&代码生成、软件过程&设计。
MDA是否会顺利,是否要真正自动不需要人的介入没有定论,也就是说出代码是不可能没有人的,难道程序员想要谋杀程序员?
代码生成,需要,但不是全部需要,是通过模型生成这种整体解决还是局部的自动化生成更好用现在也没有定论。这就好像XML与J2EE的关系,XML很好,但是多了你觉得写他们是不是非常的累?比如Struts、Hibernate、Spring这些,哪个的XML不是写到你头疼?
软件过程这个就更不好说了,没有人说一定要自上而下的设计,很多敏捷方法都是边写代码边设计。所以关于这个问题,还是邓爷爷说的:“不管黑猫白猫,逮到耗子就是好猫!”,方法学是为你服务的,你不要被它套牢。

还有,记得哪个大师说,什么设计都是瞎掰,你最终交付的只是你的代码!设计和软件过程是为了保证代码质量的方法,但这种方法从来不唯一,开发过程、OO产生以前,还是有很多高质量的代码,所以……。
当然,不是做起义的农民,只是在想:
UML表示静态很好,那就用它表示静态。
动态,你可以用那些蹩脚的图,当然也可以通过其它的各种定势来暗示实现时的动态关系,毕竟程序员不是傻子,都有一定的悟性。
再下面,关于建模技术真的不太了解了,期待郑浩给点好的例子,还有介绍你的经验,我们很期待。
BTW:我以为是动态语言,眼花了。ZH推荐了Ruby on rails,这东西真的够震撼,绝对提升效率,同样还有Python on Zope,然后又发现Google的大量代码使用了Python(Google主要用C++、Java、Python),而Python作为胶水代码具有超级高的效率,星战3也用了Python,靠,动态语言真厉害。看看而以,现在暂时坚持Java不动摇。