Tin's Blog

You are coming a long way, baby~Thinking, feeling, memory...

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  128 随笔 :: 0 文章 :: 221 评论 :: 0 Trackbacks

2006年6月5日 #

     摘要: 自己申请域名把blog迁移了一下。因为内容也很少和Java相关,感兴趣的朋友轻修改一下订阅地址。
Rss: http://feed.feedsky.com/iamtin
Blog: http://tin.zztin.com  阅读全文
posted @ 2008-06-04 10:00 Tin 阅读(1719) | 评论 (0)编辑 收藏

     摘要: 在中文网织年会上和啄木鸟老大HD讨论了一下好看簿的架构问题,而后老黄写了一个blog entry:
架构考量-选择的难度
里面谈到了架构一个高支撑能力的Web 2.0应用需要考虑的架构选型问题,对我很有帮助。我也回复一下他的建议:  阅读全文
posted @ 2007-11-28 22:39 Tin 阅读(2850) | 评论 (1)编辑 收藏

posted @ 2007-10-24 13:52 Tin 阅读(4702) | 评论 (0)编辑 收藏

     摘要: Twitter的水平扩展的一些关键点,虽然它是个RoR应用,但是这些建议绝对是放之四海而皆准的,非常好的总结。
因为年初Twitter曾经遇到了性能瓶颈,而且几乎束手无策。当初很多人开始怀疑Ruby的性能问题,而后Twitter站起来了 ^__^
有时间的朋友看看这个slide:http://www.slideshare.net/Blaine/scaling-twitter,没有时间的看看我的摘要。  阅读全文
posted @ 2007-10-16 08:42 Tin 阅读(3172) | 评论 (3)编辑 收藏

     摘要: 一位ID是jackson1225的网友在javaeye询问了一个大型Web系统的架构和部署选型问题,希望能提高现有的基于Java的Web应用的服务能力。由于架构模式和部署调优一直是Java社区的热门话题,这个问题引发了很多热心网友的讨论,其中一些意见对其它大型Web项目也有很好的指导意义。  阅读全文
posted @ 2007-09-17 22:48 Tin 阅读(7104) | 评论 (5)编辑 收藏

     摘要: 架构师这个概念比较虚。在国内,架构师其实就是有强烈基础倾向的开发者,他们有很大的热情来实验一个自己熟悉或者感兴趣的东西,从概念上这不是架构师。
我很关注国外的一些架构师描述如何成为架构师。架构师其实最重要的是见识!要无倾向性的研究技术和需求。我很喜欢的印度的一位精神导师克里希姆纳提说过自由的前提是要学会聆听,而聆听就是在听的时候心理不要有任何反抗或者评论的去听,所有的思考都要留在听到以后。电影《教父》里面有一句台词我非常喜欢,不要仇恨你的敌人,因为那会影响你的判断力。我想这都是一个意思。如果想要成为架构师就要多聆听,然后思考,又清楚的判断力,这样选择才会是正确的!  阅读全文
posted @ 2007-09-15 14:57 Tin 阅读(2545) | 评论 (3)编辑 收藏

     摘要: 我觉得fins同学的一些说法会造成没有深入使用这几个框架的朋友的误解。因为这几个框架的思想是不一样的,所以它们的语法也是不同的。fins同学的评价似乎更像从Java的OO想法来评价几个js框架。
其实,moo一开始的想法就是light weight,所以它的很多语法其实就是没有语法。fins说的json语法,其实就是js里面的散列对象嘛,javascript语法本来就是这个样子呀,不包装就是这样。而这种方式如果写的好读起来很像DSL,很舒服,moo充分发挥了这个好处。
prototype和JQuery都没有强调继承这样的概念。javascript的强大很大就来自它的原形继承,如果要用好它就要利用好原形继承。prototype在这方面很像Ruby,比如 Enumerable,这是一种按照行为的抽象,很符合Ruby/Python里面Module的想法,并非所有行为都要抽象到一个对象再继承,行为本身也可以抽象再混入。  阅读全文
posted @ 2007-09-13 08:40 Tin 阅读(8224) | 评论 (9)编辑 收藏

     摘要: javaeye的hax最近在他的blog上进行了一场关于如何写css的讨论,其中反思和讨论了一些关于基于标准或trick进行设计的选择问题,这个问题也是David Heinemeier Hansson对于XHTML/CSS/Javascript标准进行RIA开发话题的一个延展。我们可以从中思考如何在不完美的技术中选择一条相对完美的技术路线?  阅读全文
posted @ 2007-09-10 08:02 Tin 阅读(2515) | 评论 (1)编辑 收藏

posted @ 2007-08-03 16:42 Tin 阅读(2129) | 评论 (1)编辑 收藏

     摘要: 非常好的职业建议,来自Scott Adams
从一个非常喜欢的人的blog看到的,这个人是Tomcat的作者,现在是Apple的Object C开发者,兼重要的RoR作者,兼资深摄影师,兼Mac大fans,他叫James Duncan Davidson(http://duncandavidson.com/)。
在一篇Blog讲到,Scott Adams说:
每个人都可以找到通过一些努力就可以跻身前25%的行业。例如我,我可以比大多数人画的好,但是我还够不上艺术家的水平。我也没有达到喜剧演员那种好笑的水平,但是我比大多数人好笑。魔法在于没什么人即画得好又会写笑话。所以混合一下我就很稀有了。加上我的商业知识背景,我突然发现我比其它的动画人更能理解它(商务)。  阅读全文
posted @ 2007-08-03 16:06 Tin 阅读(2903) | 评论 (4)编辑 收藏

     摘要: 本文已经发表于InfoQ中文站点(http://www.infoq.com/cn/news/2007/07/light-web-servers)

IBM developerWorks网站上最近发布了一则Cameron Laird的关于轻量级Web服务器的文章,里面列举了很多的轻型的Web服务器实现和它们的特点,Cameron还从自己的经验出发总结了评价Web服务器的一些指标。这篇文章目的在于扩展我们在 Web应用部署时的思路,让我们重新思考Web应用的架构和部署方案。众多的轻量级Web服务器其实见证了动态脚本语言实现Web应用的火爆,给实现 Web应用提供了更多解决方案。

轻量Web服务器这个概念关注“轻巧性”,这意味着简单、易于安装、流线化、要求低和健壮。这种“轻巧”主要是相对于目前市场占有率占优的 Apache和IIS而言的,轻量Web服务器应该更小更简单,并且它们至少要有一些性能/特性超过这两个产品(这样它们才可能分得市场份额)。 Cameron这样对比了“轻量”相比“重量”的一些优势:  阅读全文
posted @ 2007-08-02 10:10 Tin 阅读(2103) | 评论 (0)编辑 收藏

     摘要: 有幸在InfoQ的饭局里面认识了王翔,他对.Net和MS技术的确有非常深的造诣。今天看到他的一篇评论:“C#正变得越来越臃肿”
发表了一些感想:

先进与成熟的确是矛盾,但是现在的新技术成熟的都比较快,可能是人接受新事物的速度提高了吧。
Haskell 这样的语言是函数式编程的代表,更多的需要从头开始。所以国外学计算机理论首选Haskell,很多老外抱怨过上学的时候这个东西学的头疼,但是后来他们也都表示获益匪浅。我们的计算机教育是本末倒置,所以我们这些程序员觉得他们晦涩难懂。但是看到Erlang这样的语言,在未来多核环境下的前途,我们还是会动摇的。  阅读全文
posted @ 2007-07-31 15:41 Tin 阅读(860) | 评论 (0)编辑 收藏

     摘要: 本文已经发布于InfoQ中文站(http://www.infoq.com/cn/news/2007/07/java-securejsh-publish),感谢Complystill为我们贡献了SJSH这个项目。

JavaEye上活跃的开发者Complystill(歆渊)最近发布了自己的开源SecureJSH项目,提供了一个通过SSH交互进行Java应用开发或者管理的工具。

在项目的介绍中可以得知,SecureJSH与Ptyhon里面的ipython或者Ruby里面的irb非常相似。它们都允许交互式运行语言的代码,以方便跟踪或者调试应用。但是,Java与Ruby、Python不同,后者是动态脚本语言,它们天生具有解释执行的特点(注意:当然Python支持预编译,Ruby也将在YARV中开始支持,这里指它们的解释执行状态)。我们常见的Python和Ruby发行版本基本上都包括自己的解释器(这也是它们的核心组件),但是Java是一种需要中间编译过程的语言,默认情况下它无法直接解释运行,也没有相应的解释器。  阅读全文
posted @ 2007-07-27 09:56 Tin 阅读(1524) | 评论 (1)编辑 收藏

     摘要: http://developer.yahoo.com/yslow/

这是一个配合Firebug工作的firefox插件。能够对你访问的页面进行分析。
它可以:
* 性能报告
* HTTP/HTML信息汇总
* 列出页面中的组件
* 包含了JSLint  阅读全文
posted @ 2007-07-27 09:33 Tin 阅读(684) | 评论 (0)编辑 收藏

     摘要: 在这里发现了一个技巧:http://rubyisawesome.com/2007/7/10/mysql-secrets-g-instead-of
在Mysql的命令行工具里面给查询加入一个\G参数。横向的表结构会转为使用纵向表结构输出,利于阅读。  阅读全文
posted @ 2007-07-20 14:41 Tin 阅读(5297) | 评论 (0)编辑 收藏

     摘要: 这是敏捷中国的一个讨论,我问了一下架构设计是否在敏捷迭代过程中有一席之地?大家产生了如下讨论。如果我的引用冒犯了当事人,请email我,我会及时修改的。我希望大家能够一起讨论这个topic。  阅读全文
posted @ 2007-07-20 09:03 Tin 阅读(862) | 评论 (0)编辑 收藏

     摘要: 13日,Joyent宣布基于GPL v2将Slingshot和Connector开源。Joyent Slingshot允许开发者将Rails应用程序部署为与桌面应用行为一致,可以在线或者离线(保持同步),可以拖拽,与所有其它桌面应用程序交互等。另外,Joyent还提供了Connector产品和一组可以与Joyent Slingshot协同工作的第三方应用程序。  阅读全文
posted @ 2007-07-18 14:34 Tin 阅读(1402) | 评论 (0)编辑 收藏

     摘要: JavaEye的站长Robbin Fan在他的博客中对SAAS(软件即服务)进行了一番讨论,他总结了目前常见的一些SAAS应用,并且总结了这些应用的特点,展望了SAAS的发展方向。
2005年,David Heinemeier Hansson将自己在项目中使用的基于Ruby的开发框架剥离并开源,从此世界上有了RoR(Ruby on Rails)的响亮名号。很快,Rails在其它语言中也架设了自己的高速轨道,从此Rails思想处处开花,受到了广大开发者的拥护,这是Rails的敏捷本质决定的。随着RoR闪现在开发者眼前的还有Rails背后的公司37signals,这是一家位于芝加哥的创业型小公司,虽然他们的员工目前还是个位数,但是开发出的产品却有超过100万人在使用……  阅读全文
posted @ 2007-07-18 14:32 Tin 阅读(1505) | 评论 (3)编辑 收藏

     摘要: David Heinemeier Hansson(以下简称DHH,Ruby on Rails作者)在最近的一篇Blog“如果我真的喜欢HTML、CSS和Javascript,那又怎么了?”(What if I actually like HTML, CSS, and JavaScript?)中阐述了他对RIA未来的一种看法。他认为目前在三大Web标准规范下的HTML、CSS和Javascript是一套足够强大的工具箱,这些技术提供给开发人员的功能并没有影响到Web应用的发展,并且随着像Firebug和其他优秀Javascript库的支持下,Web程序员的日常开发工作已经非常惬意了。  阅读全文
posted @ 2007-07-18 14:28 Tin 阅读(1198) | 评论 (0)编辑 收藏

posted @ 2007-06-06 11:12 Tin 阅读(706) | 评论 (0)编辑 收藏

posted @ 2007-05-23 11:44 Tin 阅读(1072) | 评论 (4)编辑 收藏

posted @ 2007-01-26 14:37 Tin 阅读(1910) | 评论 (2)编辑 收藏

     摘要: TSS上面Ganesh同志的文章内容是非常有益的,讨论了session的这两个api的区别。get是每次都会从数据库取数据以保证数据的可靠。而load则会返回一个proxy,相当于一个存根,访问的时候从当前session或者hibernate二级缓存中查找,如果找不到则从数据库中Lazy Load一下。从Hibernate的复杂性上来说,这个概念应该算比较容易理解的,而且这种存在也是非常合理的。顺便里面还补充了一下JPA里面也有类似的getReference方法,行为类似load。看完文章你会开始注意这个细节。
可是,这个细节的下面却引起了n多人的讨论,讨论的核心就是Hibernate是不是有太多细节了?
很多人说这样不是OO的,很多人说Hibernate的细节造成它复杂,有人说Hibernate影响了他们的工作效率,等等,反正反对者站出来很多。我想这是可喜的。
说明在Java的Killer-APP组合Spring+Hibernate后面还是有很多持怀疑态度的人的,我们随时都需要提问题的大脑!
所以,我们也思考一下吧:  阅读全文
posted @ 2007-01-26 14:27 Tin 阅读(5145) | 评论 (2)编辑 收藏

     摘要: 本文翻译自IBM DeveloperWorks上的一篇文章,该文讲述了测试分类(test categorization)的概念,本身这个概念很简单,但是却实际的解决我们常见的问题,在我们的测试庞大到一定地步的时候,测试的运行时间过长,维护成本很高,我们如何能够保证持续集成(CI)的正常运行?那就是通过测试分类。所以我翻译了这片文章,希望对大家有所帮助。  阅读全文
posted @ 2006-12-01 00:30 Tin 阅读(1938) | 评论 (0)编辑 收藏

     摘要: 这个问题出现在这种情况,你的每个testCase都需要使用某一种初始化比较耗时的对象(资源),举例如数据库连接、Spring Context。我们遇到的问题是Selenium测试中开启和关闭浏览器,如果一个test启动关闭(我们的程序还需要登录和注销),这样测试的时间会拖的很长,给持续集成带来了困难。
所以……  阅读全文
posted @ 2006-11-17 17:29 Tin 阅读(13545) | 评论 (1)编辑 收藏

     摘要: Selenium Remote Control项目组很高兴的宣布Selenium Remote Control 0.9.0发布。
你可以在这里察看:
http://www.openqa.org/selenium-rc/
也可以在这里下载:
http://www.openqa.org/selenium-rc/download.action
0.9.0包括很多酷玩意,包括frame支持,多窗口支持(用来测试那些不能够在子frame中运行的应用),一个Konqueror浏览器launcher,新的cookie管理功能,和Firefox 2.0与IE7的支持。还包括一个试验性的在Selenium代理中直接的SSL支持,一个新的实验性的“代理注入(proxy injection)”模式允许我们通过修改HTTP代理来更好的控制我们测试的应用程序。
Have Fun!  阅读全文
posted @ 2006-11-15 15:57 Tin 阅读(1565) | 评论 (3)编辑 收藏

     摘要: 欢迎所有对Selenium感兴趣的(翻译的过程就是很好的学习)或者已经使用Selenium的同学积极参加,参加的方式可以是:直接参与翻译,编写原创学习文章并添加到相关资源列表,交流心得并将心得添加到相关资源列表,提供使用的视频片断,推荐好的Selenium文章进入翻译计划,提出你自己的意见。以上方式都非常欢迎,可以发信给我进行沟通(iamtin AT gmail.com)。
目前我们使用JavaScud的Wiki进行翻译工作,网址如下:
http://wiki.javascud.org/display/SEL/Home  阅读全文
posted @ 2006-11-13 15:31 Tin 阅读(2690) | 评论 (42)编辑 收藏

     摘要: 浓缩一下:
1、何时、何目的来用Selenium选择不同。RC、Fit适合从需求阶段就开始写。而IDE录制则适合后补。
2、重构支持。RC重构友好一些。Fit重构不友好。
3、IDE目前限定于FF,做跨浏览器RC比较好。但是IDE录制后的代码很方便转为RC方式。
4、跨域兼容性问题,IDE解决的比较好。  阅读全文
posted @ 2006-10-30 21:33 Tin 阅读(3250) | 评论 (3)编辑 收藏

     摘要: 我用的是Eclipse 3.2,操作系统是WinXP SP2。
需要把eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar里面的swt-win32-3232.dll解压缩出来拷贝到WINDOWS\SYSTEM32里面。
然后就OK了。
是在Eclipse里面运行Springside的ANT Task的时候,如果需要通过console输入交互信息,则会报这个错。应该是因为Eclipse的console依赖于那个本地库,而平常我们安装Eclipse不会拷贝那个库。大概如此了。  阅读全文
posted @ 2006-09-11 15:10 Tin 阅读(8875) | 评论 (12)编辑 收藏

     摘要: 说说遗憾:
1、OSGi在B/S架构中还不好应用。虽然例子是B/S的,可是居然是Servlet模型,里面解释了目前Equinox项目也在扩展应用服务器支持和JSP支持等,可是起码目前还不成熟。
2、模块的粒度很成问题。目前OSGi的契约机制与java interface机制对比一下。OSGi不可能完全取代本地的interface式的解藕,当然人家也没这么说。只使我担心过渡设计后,过细的Bundle肯定会得不偿失,所以需要有人设计/计划这个粒度。这个可能与基于Web services的SOA架构面临类似的问题,需要好的架构师。
3、文档不友好么?说实话,很感谢BlueDavy和OSGi观察者那些大牛的贡献。但是感觉production的样例工程还是很难搞到(其实Eclipse plugins的例子满多哈,可惜没啥文档,需要硬着头皮看),对应的指导文档还没出现。BlueDavy提供的servlet实现我们不可能跟上,毕竟简单也是一种需求。(那谁说过度设计比设计不足更可怕,那个我不是唱反调,我希望我们都能找到那个sweet point,有个好的参照那最好不过了)。 <  阅读全文
posted @ 2006-09-06 11:27 Tin 阅读(4244) | 评论 (2)编辑 收藏

     摘要: 先分析一下在轻量化的Java EE下面他们存在的意义:
1、有的人说过在Web项目中Manager和DAO是同意的,尤其是在透明ORM存在下,DAO由于往往是CRUD的实现场所,而Manager却往往是薄薄的一层门面,很多人就在质疑两者的合并问题。可是robbin曾经进行过一个精辟的分析,虽然两者做的看起来差不多,可是两者的事务属性却不一样,Manager应该有清晰的事务界限,而DAO不应关心于此。也就是说Manager可能会将几个DAO方法组合调用,然后封装在一个事物中。这样说明确了两者的一个重要区别,我们也能体会在使用声明事务的时候有一个分明的事务界限是很有意义的,否则就有可能把Manager中的一个事物拆分,这样实际上就错误了。
2、有些人质疑透明ORM存在的情况下DAO存在的意义,因为透明ORM基本已经隔离了不同数据库的方言区别。这个也很简单,Rod大叔分析过。透明ORM存在的情况下DAO起到了隔离透明ORM与EJB或者JDBC实现的作用,这几种实现实际上是应该考虑到的。
3、还有一个问题,就是DAO是否应该隐藏透明ORM的API。因为前面说到了DAO起  阅读全文
posted @ 2006-09-05 21:52 Tin 阅读(3637) | 评论 (3)编辑 收藏

     摘要: 今天TSS和InfoQ都转了一篇Spring与EJB3的读后感,我就看了下,标题和介绍满吸引人的。内容嘛其实有点不过瘾,但是先记录下来吧。
http://www.devx.com/Java/Article/32314/0/page/1
总的来看Spring+Hibernate与JPA很相似,它们都是基于pojo的持久化。
Hibernate Session和JPA Entity Manager基本上等价,但是要记住他们的两个重要区别。Hibernate session是一个实体缓存也是一个ORM引擎的接口。而JPA中这两个概念是分开的。Persistence context作为缓存而entity manager则作为ORM引擎的接口。…………  阅读全文
posted @ 2006-09-04 20:45 Tin 阅读(4255) | 评论 (1)编辑 收藏

     摘要: 在Eclipse里面运行functional-test这个target的时候发现报错(test target叶出错的):
Could not create task or type of type: junit.
我就想当然的把junit-3.8.1.jar拷贝到我的%ANT_HOME%/lib下面了,结果问题依旧。
......
解决方法目前看最好的就是在Eclipse的Window->Preferences->Ant->Runtime->Classpath里面Ant_Home你指定一下就可以了,可以是你自己的Ant或者Eclipse/plugins里面的ant,这没关系,然后它就会自动扫描相应/lib目录了(之前你应该已经把junit-3.8.1.jar拷贝过去了)。
然后就搞定了。注意,只有在Eclipse运行Ant才有可能遇上这个问题:D
  阅读全文
posted @ 2006-08-31 13:02 Tin 阅读(1481) | 评论 (0)编辑 收藏

     摘要: 由于失业后家中又有人病了,还有很多乱七八糟的事忙,反正没怎么写也没怎么看程序,很惭愧!有朋友说不厚道,赖我,我不厚。这两天看《应用Rails进行敏捷Web开发》,RoR和去年刚看的时候感觉一样,很舒服,现在可能对Java和Ruby的了解都比以前深一些了,看这本书会有些想法。不过没时间纪录,头脑里也乱七八糟的,我只能说是胡言乱语。这本不是什么文章,这是我的一个工作习惯,只要开电脑就开个Notepad记录工作情况,是个流水账,由于Blog过于冷清,把它贴出来,别拍砖了,我已经蔫了:Q  阅读全文
posted @ 2006-08-30 12:39 Tin 阅读(1087) | 评论 (0)编辑 收藏

     摘要: 今天先看看Springside的bookstore的domain设计,这不是springside的重点,先看看。
从hbm看起,在springside-bookstore/src/org.springside.bookstore.commons.domain.hbm下面放着这些hbm。
在Order.hbm.xml里面可以看到一个list映射。list映射可以按照顺序持久化one-to-many关系。使用了映射后OrderItem就没有单独的class声明了,完全以一种组件的形式被映射到Order里面。  阅读全文
posted @ 2006-08-30 12:30 Tin 阅读(2443) | 评论 (3)编辑 收藏

     摘要: 1、Java从语言转向平台。如同.Net,JVM本身提供了平台的抽象。将会扩展动态语言与脚本语言的支持。
2、企业应用的开发过程将简化,如MDD一类,但目的是集中精力开发商业逻辑,而不是纯简化代码或者什么什么。小型应用可能会转向动态语言或脚本语言所营造的舒适开发框架,如RoR,或其它Rails。
3、富领域模型替代贫血模型,基于JPA。
4、目前的AOP、IoC工具依然会流行,而不一定会限定于EJB3模型中。事实说了算,Spring这种事实性标准影响力还是很大的。
5、分布式的考虑,可伸缩型问题凸显。如何透明实现分布式是个关键性问题,AOP是技术契机。
6、Web2.0会产生巨大影响力,但Java绝不是唯一选择。Java要找好自己的位置,同时在平台上最好能够更多的融合,如让JVM支持PHP/Ruby/Python。
7、Web部分竞争激烈,并会持续。EJB3的JSF命运难测。看Web2.0的浪潮了。  阅读全文
posted @ 2006-07-10 14:09 Tin 阅读(1899) | 评论 (2)编辑 收藏

posted @ 2006-06-06 11:28 Tin 阅读(4610) | 评论 (3)编辑 收藏

     摘要: WebWork的result实现非常实用,它很好的解决了View渲染的灵活性问题。这才是MVC模式的优势所在,而像JSF那样帮定JSP的MVC就吃不到这个甜头了。说WebWork2是Model 2 MVC的巅峰就在这些灵活的地方。
闲扯这个不是主要目的。现在Rome是Java下最常用的RSS包,最近消息似乎要转入Apache的Abdera合并变成更强大的聚合引擎。用Rome生成和解析RSS都很方便。今天讨论一下使用ROME给网站生成RSS,并通过WebWork2的Result机制渲染。
最初是从WebWork的Cookbook上看到的RomeResult的文章,一看就会,我这里其实不过是举个详细点的例子,注意我使用的是WebWork 2.2.2和Rome 0.8:  阅读全文
posted @ 2006-06-05 22:25 Tin 阅读(3375) | 评论 (7)编辑 收藏