看得到我心在跳,最重要!

哎,不愿意写这个。
我睡得不怎么好,昨天。
首先,我想和她在一起,聊一下天再睡,她就在隔壁。
其次,一个人睡一个屋子,有那么一点冷清,有一点无助,显然我还是个男孩,自己独处会怕黑,所以我开着灯睡。
再,我离我家很远,有一点空。
再,心里有点乱,下午没去参加小学的聚会,看来大家都很快乐,而我却没能和他们相聚,有一点失落。
再,胃里有一点不舒服,吃了太多油腻,吹了点风,有那么一点点泛酸。
而后,怕这个孤独的夜会寂寞、冷清……
当然,以我现在的坚强,这种不快也可以通过心理调节变成一种快乐,我想知道自己的阿Q精神是不是可能有个限度?我一直关这种感觉叫做心理暗示……
又扯远了。其实,心里的空和乱有一点点是因为周一要去上班了。以前已经挣过很多次钱了,但都不是给某个单位打工,而这次要来真的了。
其实这个过程挺奇怪,我没有想到我自己的责任心已经会推动我做体检、准备资料,主动联系,等等。长大看来大多是因为被动原因呀。
不愿说为这个而心乱,但我觉得大部分人要工作前都回觉得有一点乱。没有那么自由的假期了,哎,没什么,以后给GF埋单就不手软了,哈哈。
所以,还是鸵鸟一次,不说这个乱。但是我承认,本篇拉出来的一大堆就是因为这个乱,而已。
然后拉出一位天王——黎明。
标题就来自他的一首歌。
因为我不喜欢他的歌的。但是陪她去个冷的地方却让我突然愿意听听黎明的新专辑《一个故事》。因为专辑选出时说有不少温暖的情歌。说实话黎明的慢情歌就像山楂炖肉,虽然酸但是暖,颤颤巍巍的给你一种羊肚肚毛巾般的舒适。昨晚一个人在床上翻动我的Mp3里面,搜索着黎明新专辑中的歌曲,听听那种以前被窝认为有毒的弱歌,居然能够让胃舒服一点。
其实在我的心中,回响的只有他那句:“听得到你心在跳,最重要!”。我在幻想那个MTV中的那个情节,如果我和她被雪崩埋没,我愿用我的体温在冰雪中溶化出一个世界,只有你我,能够听到心跳!最重要!

intel和amd谁的cpu视频处理好

出于对Q3ACN一个讨论的回复。

视频……
你也不说清楚。
你说的视频压缩和视频是两码事。因为视频压缩属于单指令多数据流典型应用,也叫矢量运算,所以sse这样的指令扩展就很有用。但是怎么说AMD和Intel都不是矢量计算机,差距本质上不大,只不过AMD支持sse还是遮遮掩掩,受制于专利呀,所以优化后的程序Intel比较快。
但是关于视频渲染可就不是这个样子了,压缩器都是在具体平台通过编译器优化过的,所以AMD的超强浮点性能就体现出来了。你看现在那些大片不还都是AMD平台么(当然是因为性价比)。

Intel再牛也干不过专业硬件,视频压缩完全可以通过压缩卡来完成,绝对比CPU快。通用的干不过专用的。

前两天去听Java的一个会议。Jams Gosling(Java之父)在谈起下一代计算机的时候还在说,多内核是方向,低主频的集群会是好的解决方案。

我靠,太郁闷了,Struts这破玩意儿!

1、倒霉的Mysql-front,UTF-8支持太烂!!!!!!!
我这里凡是有中文的行,任何更新都回出错。以前是某些有中文的出错,看来中文支持肯定有问题。而且它的出错提示是德语的,真晕!!!
而且出错以后会奇怪的跳出新窗口,不停,必须用TaskManager关掉它。
我用phpMyAdmin就没有任何问题,很好用。
下午看看这个Mysql-front还有没有救药,如果不行就彻底抛弃。
2、我恨死Struts的ActionForm了!!!!!!!!
昨天我还只是觉得这个东西脱了裤子放屁,多此一举的利害。但是心想不过是浪费一些代码而已。
不过今天我继续发现,这个东西简直就是个隐藏的炸弹。
我本来没有在ActionForm里面写log做记录。心想如果里面发生了exception会抱错,因为我没有写try catch。但是后来我调试一个Action怎么都搞不定,明明在Action里面写了log,却怎么也不输出,我是异常郁闷!
大约浪费了两个小时后,我才明白,我这个Action调用了这个ActionForm,而ActionForm如果property匹配发生错误不会抱错的,也就是说如果那个request里面没有那个property它就会默认为null,而不报错。检查只发生在validate()方法,而这个方法非常恶心,如果发生了错误它会返回input的page,而不会报任何错误!(当然它存了ActionError在session)但是我却在log系统看不到,而且没有exception。就造成了程序中的一个黑洞,我什么都看不到。
而且ActionForm和input Page里面的html:text….那些标记的名称匹配非常费时,根本就不自动化,全部售动写非常容易出错,而且出错还有隐蔽性(没有的peroperty会null,前面说了),而又不能把所有null都到validate()检测,因为有些属性允许null,所以……
我快被ActionForm搞疯了!
所以,我越来越觉得Webwork2中那种Action和Model在一起的方式非常优秀,而且它使用了ongl,model的属性和前端页面通过命名规则自动绑定,省事多了。
所以,可以这么说,费了九牛二虎之力,ActionForm只能浪费时间和精力(Struts本意是使验证变得方便,容易测试),并且实际上测试起来非常困难,绝对是糟粕。记得有人说,既然Struts所有东西里都传了request、session这些东西,那么完全可以舍弃ActionForm,而把数据初始化写到Action里,如xxx=request.getParameter("xxx"),就和JSP里的Scriptlet一个样子,哈哈,不过这样Struts就不再是Struts了,只有形式了。如果伪需求要求必须用Struts,我们可以绕过(不用ActionForm,用request),或者小心点用。所以反过来说就是,我不想用这样的残废了。

关于MVC框架的一个好讨论

http://forum.hibernate.org.cn/viewtopic.php?t=6947&postdays=0&postorder=asc&start=0&sid=19cfb9f49ed6092478ad38654751f38c
叫做struts和webwork双体验。
这里讨论的非常好。
虽然很长,但是值得认真看,里面讨论了很多MVC的核心问题,让框架一下子便得扁平了,那些复杂的东西其实不过是非常简单的概念。你也就理解了Struts的思想,还有Webwork的思想,以及他们的优缺点。不过本贴似乎都比较偏向于Webwork2。

不过说句公道话,ActionForm的确烂,写得恶心。Webwork那种Model-Driven真是看其来简单,而且Xwork有是IoC,还支持AOP(Inteceptor),所以我也希望摆脱Webwork。而转观Tapestry,虽然我以前评价过这个东西的view层非常有特点,但是Tapestry后面的东西还是非常丑陋的(Tape3后面很复杂,而Tape4用了HiveMind以后更复杂),而且Tapestry这个东西有严重的Apache通病,自己家东西杂烩,还特别乱七八糟的,代码一塌糊涂……

所以,看完这篇评论,你会非常清楚Struts应该怎么用可以避开它的弱点。
还有,坚定了由时间一定要学习Webwork2的信念。很多人说懂了Struts,学会Webwork2只需要一个下午

关于Hibernate,小发现

写login的时候记录login time。
结果遇到一大堆麻烦,搞了半天找不到问题所在。
然后把log4j里面的debug打开,发现还是捕捉不到exception然而tx却rollback了。
仔细看代码,发现在UserLoginAction里面catch(Exception e)然后做了log就结束了,忘记e.printStrackTrace()了,加上。然后发现了两个很严重的问题!

1、我跟踪了Hibernate的SQL,它里面的SQL的临时命名后面都加了“_”,这个东西造成我们的Domain的所有id在update时不管用,也就是说涉及存储和修改时,只有insert可以,因为这个时候的id是自动生成的,否则只要set Domain里面的id就会出错。
后来仔细察看,发现Mysql的字段名里面最好不要有“ _ ”,字符,否则Hibernate就会出问题。报告“could not execute query; bad SQL grammar”。解决方法就是把字段里面的“ _ ”去掉,比如我把user表里面的user_id改成了userid。
问题就解决了。2、解决了上面的问题还是有问题。我们的Manager的update方法不能用。会报告session里面不能有两个相同id的domain对象。
我写了个UnitTest却可以update。所以感觉很奇怪。
后来看到这里的解释:http://www.matrix.org.cn/thread.shtml?topicId=25286&forumId=23
搞明白了问题。因为我们有UserAuthenticationManager,它里面会检查登陆用户的个人信息。而我在LoginAction的生命周期中UserAuthenticationManager一直处于激活状态,所以Hibernate的session也一直打开,而LoginAction里面再调用UserManager的update方法保存时就会出现session中调出两个同id的Domain对象的情况,Hibernate就会报错,然后rollback……
正好那里有解决方法,用merge方法就不会在SaveorUpdate的时候检查冲突对象了,问题就解决了。

所以希望大家注意:
1、把目前数据库中的_id这样的命名修改为xxxid这样的命名。
2、大家写的DAO中涉及到update操作的地方请使用getHibernateTemplate().merge()方法。

Web2.0,说馒头是面包

前几天听说……
我不跟风的,喜欢视那些xx作为浮云……
今天本意再讨论Ajax和方法论,看到了个介绍,从技术上:
WikiPedia的Web 2.0条目下列出了这些条件:

* CSS 和语义相关的 XHTML 标记

* AJAX 技术

* Syndication of data in RSS/ATOM

* Aggregation of RSS/ATOM data

* 简洁而有意义的 URLs

* 支持发布为 weblog

* RESTian (preferred) 或者 XML Webservice APIs

* 一些社会性网络元素

嘿嘿,其实大家都注意到了,这些技术我们也在上手和使用中了,所以,看来没有那么可怕啦

有幸再次见到Michael Chen

昨天有幸再次见到Michael Chen,他这个人真的很平实。
他说,我这个东西不是想做个框架,就是想提供一个客户端的异步通讯的工具。
看了这篇文章,更加加深了我对他的认同,他也认为应用决定使用什么技术,Ajax再火,在目前的xmlhttp+javascript的不完全可靠实现下也只能用在一写改善用户体验的小地方,全局的应用只不过是被技术冲昏了头脑。
我昨天和郑浩也在讨论同样的问题,我们都同意两个重要的标准:
1、技术要改变用户体验。如更好、更快捷、更清晰。这是一种功能指标。
2、技术要带来性能的提升,或者硬件的节省。因为性能我们觉得是技术的重要评价指标。当然首先要保证稳定。
而现在更多看到戴着幽雅帽子的编程技术,总是充斥着复用的话题,但是说实话,感觉真正的复用太少了,更多的是一种技术狂热,或者Open狂热。
所以我想用一个名词形容他们,“OpenMania”,开源综合症,中间还是有不少可怕的狂热症状的,不过郑浩说的很好,患了此症的人都是好人,而且是大好人。

这是闲话。
上午花了些时间把buffalo的js给精简了一下,成果不算很明显:
buffalo.js(12,007Byte) ->> buffalo_shrink.js(8,725byte)
xmlcallback.js(3,732Byte) ->> xmlcallback_shrink.js(2,785byte)

等测试完毕发给Michael Chen。
要这么想,接近缩小了1/3,也就是说带宽可以……我已经OpenMania了