技术点滴

来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/archive.php?id=5389 存档链接: https://web.archive.org/web/20041109115801id_/http://www.blogbus.com:80/blogbus/blog/archive.php?id=5389


技术点滴 2004/06/09 到 2004/06/30 几年的软件研发做下来,接触的技术,零零碎碎加起来,居然手指不够数了。不少东西,是帮工程部门解决完就扔一旁。弃之可惜,何不借这网络一角,留下一点记忆?遂有此Blog。 存档:Java设计模式使用率爬行榜

2004-06-30 09:30 刚刚在 竹笋炒肉 那看到这篇文档: Java设计模式使用率爬行榜 想起他那边崩溃过,还是多保存一份的好。 居然没有trackback的-_- Java设计模式使用率爬行榜 使用频率 所属类型 模式名称 模式 简单定义 5 创建型 Singleton 单件 保证一个类只有一个实例,并提供一个访问它的全局访问点。 5 结构型 Composite 组合模式 将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。 5 结构型 FA?ADE 外观 为子系统中的一组接口提供一致的界面,fa?ade提供了一高层接口,这个接口使得子系统更容易使用。 5 结构型 Proxy 代理 为其他对象提供一种代理以控制对这个对象的访问 5 行为型 Iterator 迭代器 提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。 5 行为型 Observer 观察者 定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。 5 行为型 Template Method 模板方法 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。 4 创建型 Abstract Factory 抽象工厂 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。 4 创建型 Factory Method 工厂方法 定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。 4 结构型 Adapter 适配器 将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。 4 结构型 Decrator 装饰 动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。 4 行为型 Command 命令 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。 4 行为型 State 状态 允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。 4 行为型 Strategy 策略模式 定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。 3 创建型 Builder 生成器 将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。 3 结构型 Bridge 桥接 将抽象部分与它的实现部分相分离,使他们可以独立的变化。 3 行为型 China of Responsibility 职责链 使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系 2 创建型 Prototype 原型 用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。 2 结构型 Flyweight 享元 2 行为型 Mediator 中介者 用一个中介对象封装一些列的对象交互。 2 行为型 Visitor 访问者模式 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。 1 行为型 Interpreter 解释器 给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 1 行为型 Memento 备忘录 在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 自2004年6期《CSDN开发高手》 Posted by Hilton at June 28, 2004 03:17 PM Post by linrun @ 09:30 分裂人格中的工作部分

2004-06-29 10:00 痛苦,我为什么要用旧版本的EditPad,一个误操作,新写的Blog就没了T_T 分裂人格中的工作部分 ,这是前几天我想去 cnblog “登记”时作的简介――他们服务器好像有问题,我没注册成――这两天又玩味了一下,自我感觉挺“良好”的^_^ 6E的 bosoo 帮我了忙,让我知晓这里的访问大都来自google搜索。几次试验下来,发觉基本上一两天内新日志就会被搜索。因此确认了一个事情:不改变本站的定位,只谈技术、工作。 来自内心世界的声音,不需要被搜索。 Post by linrun @ 10:00 Eclipse3.0发布了

2004-06-28 14:49 我一直以为要28日才放出来,没想到25日就已经有了。公司网络太慢,只好回家再下载。 说到下载,很好玩,eclipse这次还用BT做发布。把torrent文件拿到自己ftp上先,免得回去还要找。 eclipse-SDK-3.0-win32.zip.torrent Post by linrun @ 14:49 Flash ActionScript 2.0 Unit Test

2004-06-23 10:42 程序开发而没有Unit Test,未免有点说不过去,所以最近考虑在Flash ActionScript2 里边引进Unit Test。关注了一下这方面的资料,找到三个实现的框架: 1、Robin Debreuil的ASUnit http://www.debreuil.com/FrameworkDocs/UnitTestingOverview.htm 2、iteration::two的As2Unit http://www.as2unit.org/ 3、Ali Mills与Luke Bayes的AsUnit http://sourceforge.net/projects/asunit/ ASUnit据说是因应J2EE开发人员的challenge写出来的,借鉴了JUnit的思想,可惜比较旧,还没有引进对AS2的支持,不予考虑。 AsUnit――见鬼,居然用大小写来区分名称――相当新,5月才发布了第一个beta版。这是一个Open Source项目。 As2Unit应该是在去年9月发布了0.1的版本,此后一直没有更新过,本身不是Open Source的,不过以swc形式发布的东西,找个解压缩文件解开,再找个ActionScript Viewer查看也就是了。 后两个我都试用了一下,最后决定先选用As2Unit,看中的是它比较简洁明了,而且有一篇说明文档――后者是关键,我实在没兴趣去看程序源码然后琢磨要怎么用。虽然AsUnit也有sample程序。在它出文档之前,我是暂不考虑了。 不过从架构上我还是比较看好AsUnit,而且As2Unit太久没有发布新版本,所以,如果在使用As2Unit时感到不足,我可能还是会转向AsUnit。 这就是让我选择了As2Unit的那篇文档 http://www.flashmagazine.com/html/863.htm 。它提供了以下的statements,可以满足一般的应用: assertEquals() assertTrue() assertFalse() assertNotNull() assertNull() assertUndefined() assertNotUndefined() fail( userMessage:String ) 使用起来很简单,略微说明一下: 1、安装 把下载的as2unit.zip解开,把as2unit.swc拷贝到\Documents and Settings<USER>\Local Settings\Application Data\Macromedia\Flash MX 2004<LANGUAGE>\Configuration\Components目录下去 是你的windows用户名,是Flash MX所用语言 重新打开Flash MX,就可以见到增加了一个AS2Unit组件 2、至于使用,看看as2unit-samples就可以明白了:编写测试类,把测试类绑定到AS2Unit组件的Test Class属性去,同时在第一帧写上你的测试类的reference,这样Flash才能找到测试类。 使用中发现一个问题:怎么样可以分别编写测试类,然后一次测试呢?看起来它好像没有TestSuite,麻烦,我本来以为有的。 无论如何,先用用看再说。 Post by linrun @ 10:42 很棒的Flash app网站

2004-06-19 17:13 Grant Skinner的个人网站 http://www.gskinner.com/ ,站点本身就是用其FlashOS2实现的,可以看到效果相当的好。在有几个project,摘要如下: FlashOS2 FlashOS2 is the successor to FlashOS by Grant Skinner. It is a collection of assets that are encapsulate, reusable, and have documented APIs. FlashOS2 allows for very rapid online application development, as it manages common elements like menus, menu bars, windows, dialogs, tooltips, file management, settings loading, asset loading, content display, screen management and more. gModeler http://www.gskinner.com/ gModeler is a free online UML diagramming and documentation tool, targetted at developers working with ECMA 262 languages such as FlashMX's Actionscript, and Javascript. In addition to it's diagramming capabilities, it exports HTML documentation, FlashMX XML documentation (for the Action Panel and Reference Panel) and stub code (class code). 在我点了Flash里的链接进入gModeler的html页面之后,立刻开始后悔――果不其然,我点后退键回到前边的flash页时,又重新下载一次-_-我的网络现在很慢啊,这也是我常说的Flash应用带来的使用体验并不愉快的表现,有没有人做过Flash里类似IE工具栏的东西?我想ban掉IE工具栏和IE功能键是必要的,同时需要一个取代的东西。Flash本地缓存的策略我想也该去查一查才行。 gPhotoFader我没能打开,PathFinder只是好玩而以,Games没有仔细看。 总之,先记下来。 Post by linrun @ 17:13 拿到Google Mail的账号了

2004-06-18 00:07 yeah,终于注册到了,是用Blogger.com的邀请。嗯,果然是大网站的“福利”比较好啊^^不过,还没能用上,屏幕上只有这么一行冷冰冰的字: Server Error Gmail is temporarily unavailable. Cross your fingers and try again in a few minutes. We're sorry for the inconvenience. ――没事,浇不熄我的热情^^ 今天加入了一个社群,叫GMail中文用户圈 http://gmail.uuclubs.com/ 。uuclubs.com看起来就是social software(Ps.我真不明白为什么那么多人喜欢翻译成“社会软件”、“社会性软件”,老老实实叫“社交软件”不就好了么?)的一个体现,基于资源交换而相互走到一起,会是恶性循环还是良性呢?值得观察。想申请一个名额时写了这么一段话(结果发现那个人的名额已经用完了)―― 最近好像不断错过Gmail。刚知道Gmail时以为是愚人节游戏,错过了。知道blogger.com有邀请时,翻出尘封的账号登录进去,已没有了,再次错过。从四月一日就知道GMail,到现在还是没能用上GMail。 为什么想要Gmail?一个很重要的理由是:最近网络又变得好玩了。听起来似乎有点离题,不过我真的是这么想的。事实上这两年对网络已经有点麻木,该收费的收费、该垄断的垄断、该整肃的整肃,规规范范的网络,好像已经没什么能够让人激动的了。还好,这阵子又让我看到Blog、看到了WIKI,还有GMail,让我忍不住又想“玩一玩”。 确实,我对于目前的网络多少有点不满意。因熟悉而麻木,也因整肃而麻木。Google确实很了不起,一方面是精明的商家,一方面仍保持着创意无穷,时时刻刻给市场带来冲击波。GMail一出,邮件服务商们大概会很郁闷吧――譬如yahoo.com,今天我登录时看到,他们的免费邮箱已经变成100M了,增加了25倍。不过yahoo中文就还没有这么好的待遇。不知道国内的邮件商现在的心情如何?希望他们不会又冒出一些奇怪的竞争手段来,比如传说中的百度密告Google。 其实今天注册时也蛮“惊险”的。当我点击了申请gmail的连接后,立刻“找不到服务器”,接着连blogger.com也上不去了。持续了好一阵。再次上去也是这样。有了这么个小小插曲,注册成功后的心情似乎也更好一些。――至于为什么会发生这种事情?不去想了,反正最大嫌疑人就是The Great Fire Wall…… Post by linrun @ 00:07 Rich Internet Applications

2004-06-17 10:44 把原来的Flash MX一栏改成Rich Internet Applications,听起来响亮多了吧?所谓新瓶旧酒,就是如此了。 做Flash app,最头痛的是怎么跟人讲…… 路人甲:“最近在做什么?” 林润:“Flash。” 路人甲:“哇,这么有兴致!” 林润:“工作安排啦……” 路人甲:“咦,这么凄凉?” 林润:“……” 这样的对话当然是带点夸张,不过由于Flash的动画功能已经深入人心,其形象,也就固化成为高级玩具,似乎只属于designer,而不会有developer问津。 ――必须声明,我这里没有任何贬低designer的意思,那些超炫的功能,很可能刮尽developer的每一滴脑汁都想象不到的。 事实上,Macromedia已经不断在为Flash转型,Flex就是很重要的一个尝试。以致于有资深Flash designer抱怨连连,认为MM太偏心了。而MM在这方面提出的最重要的概念,就是Rich Internet Applications。 那么什么是RIA?中国RIA研究与开发论坛的Azure写了这样一篇简介 http://www.riacn.com/bbs/showthread.asp?threadid=18 好像是翻译的,所以读起来挺拗口。简单的说,就是目前基于浏览器的应用带给用户的使用体验太糟糕,所以有必要改进。改进的方式,是: 1、基于HTTP不变,基于浏览器不变 2、易用、更良好的互动,通过增加界面元素的方式实现 3、把更多的操作以及数据放到客户端,至少,不用改个数据项就要提交一次。 说得再直白点,以C/S时代的client为坐标轴的一极,以3层时代的client为坐标轴的另一极,RIA就处在两者的中间。世事就是如此,一下子跳到极端,然后再慢慢往回走,探索一个真正令人舒服的中点。 有人列举了RIA的实现方式 http://www.riacn.com/bbs/showthread.asp?threadid=995 ,可说五花八门,MM的Flash,Java的Applet、WebStart,M$的Smart Clent……还有ActiveX、WebForm、Delphi,以及更多形形色色的解决方案: http://www.bindows.net/ http://webfx.eae.net/ http://thinlet.sourceforge.net/ http://www.cortext.co.il/ http://www.laszlosystems.com/ http://www.convea.com/ http://www.canoo.com/ulc/ 谁能胜出?我不知道,至少,在现阶段,没有一种技术给我带来真正舒适的使用体验,包括Flash。 Ps.Bus把一个分类的内容转到另一个分类的功能很好,应该加分。 Post by linrun @ 10:44 与微笑图书室一次相遇后的杂感

2004-06-16 02:21 无数的轨迹以无限的可能在无垠的空间蜿蜒激荡,偶尔不经意间的一次擦肩而过,擦出的不是火花,是一点微微的暖光,让彼此小心翼翼地收入记忆的云深不知处。 意义 你们帮得了多少人?你们能够改变什么?杯水车薪,贫困的孩子的依旧贫困。属于整体社会的不公,你们能扭转什么? 朋友,让我给你转述一个很久以前别人讲给我听的故事。 有一个住在海边的老渔夫,某天早上,忽然看有个年轻人在海边手舞足蹈。他不由好奇,于是就过去看看年轻人在干什么。原来,他在把被留在岸上的海星捡起来,然后送回海里去。 “喂,你这是干什么?”老渔夫问。 “我送它们回大海去,不然呆会太阳升起来,它们可就会被晒死了。” 老渔夫摇头:“有什么用呢,这么长的海岸,这么短的时间,你能改变什么?It makes nothing different!” 年轻人再次捡起一只海星,将其送到海中,然后说了这样一句话: “ But it makes different to that one. ” 我不知道微笑图书室能帮助多少人,然而只要想到,或许有一个孩子,因为我们的一本书,露出了天真的、羞涩的笑容,我心里,便觉得很温馨。 我们都活在当下。那一个笑容,便是我们全部的意义。 绵薄 在我还不会赚钱的时候,我对自己说:等我能赚钱了,一定把百分之几的收入拿出来回馈社会。 还好,一向记忆力差的我,这次,居然牢牢记住自己说的话。 我们也许不是有钱人,但这并不妨碍我们尽一点力。星云大师教人理财,他是这么说的: 一施悲和敬,二储不时需,三分营生业,四分生活用。 收入的40%支付日用,30%用作投资,20%积谷防饥,还有10%,以慈悲心和恭敬心做布施。 也许,你觉得10%太多,那么,何妨1%、2%?一个月布施50块钱,一年600,可以换50本字典,让500个孩子受惠。举手之劳、绵薄之力,何乐而不为之? 我们都没有挟泰山以超北海的能力,我们都有能力折一枝花,递到那稚嫩的双手中。 忧逝 我知道花开了终究会谢,零落而后化泥。 对于微笑,我怀忧思。我忧其逝、我忧其质本洁。小众没有力量,大众喧嚣得让人忘却本心。 然而――然而――丧气的话,说来作甚呢。 在微笑的论坛,看到一位非常热心的朋友,提了非常多有创意的构思。我提不出来。 一个组织已经形成,便自有其轨道,自有其思路,自有其不得不如此的步伐。 永远有多远?终点终会到。一万年的期限,愿你走好。 杂杂感 由于在blogbus开了个blog,于是知道了微笑图书室,于是有了一次接触,于是写了这点杂感。我不是很习惯把自己表达得太清楚,只是忍不住讷讷几声。 这一次和我联系的是木梓。根据《泸沽散记》记载,乃是吃饭要吃双份的超强悍人物。好在是广东老乡,总算没被做成人肉包子^_^让我道一声辛苦。 感谢横戈兄把微笑的链接放到了bus的首页,让我有机会出一点力。――虽然我一直嘀咕着那链接太不醒目,好歹也给个图标嘛……笑。 夜深,恍惚不知所云,即此,草草。 林润 2004.06.16 Post by linrun @ 02:21 中文blog比较之二:bus与driver的使用体验

2004-06-15 10:32 首先说明一下:这一系列比较更多是私人观感上的,并没打算写成什么“系统全面”的东西。所以,东一鳞、西一爪,身为“用户”的我对什么来了兴趣,就会去看看那一部份。 因为私人兴趣泛滥的原因――我不习惯把所有的自己在一个地方表露出来――上周在blogdriver开了一个新blog,几天用下来,感觉多少有点不一样。 懒得把每一项内容都列出来一一比较,只说说一些很直接的体验。 1、总的来说,driver的风格比较现代,给人以比较新的web印象;bus则非常传统。 2、driver把目录栏做成了紧贴浏览器的工具栏的样子,本身是不错的构思。但我刚开始使用的体验非常糟糕:那一栏直接被我忽视掉,或者说,由于其所处的位置导致无法进入我的使用视野,成为我的视觉盲点,以致我傻傻的不知道该怎么开始管理。相对而言,bus的目录树是最常见的方式,使用起来更简单一些。 3、日志撰写方面,两者都是用了js写编辑器,所以在缺点和优点方面都是比较明显的。bus值得称道的地方在于比较多的编辑选项,尤其是插入网页、上传文件、预览这些功能都很实用,driver的这个编辑器也足够使用,但能够多一些功能自然是更好。不过driver的编辑页面也有胜出的地方,它可以设置日志是否展开、置顶,设置浏览对象的控制,尤其后者,从中可以看出系统设计者的体贴。而且有保存为草稿的功能,也相当人性化。不过,不知为何,driver特别喜欢把各项内容收缩起来,以致不留意就不会发掘出这些功能来。另外,虽然没有仔细比较,但感觉driver的代码转换比较优化一些。 4、日志管理方面,driver按分类显示列表,bus则把所有日志放在一起。当日记比较多之后,前者可能会更方便一些。我个人的希望是两者都能够提供,缺省为全部列出,同时可以按分类进行过滤。 5、日志编辑方面,driver把功能分得很细,刚开始使用并不舒服――因为这意味着你要为了改某个小地方去找个不停。我想这是开发者从系统优化出发的考虑。bus则把全部东西都一次载入,挺好,但如果用户再多之后,这一项,也是不小的系统负担。 6、文件管理方面,driver据说提供2M空间,但我到现在也没找出那一项在那里。bus方面不用说,可以去买。 7、模板方面,不管从数量还是质量上看,bus都不是driver的对手,我一开始真是看得流口水。bus在这方面实在太弱,事实上,可以说在界面方面,driver已经是相当专业的水准,不管是模板、还是界面元素的设计,driver都显得专业,我估计他们拥有相当优秀的界面设计师。bus更像是业余人士的笨拙设计,大概主体是由程序员搭建的,美工只起点缀作用而已。不过,这方面bus也有亮点,就是他们可以修改设置,支持在模板上增加一些内容,对于有一定HTML编写能力的朋友,那是相当不错的。而driver的模板则是写死的,没有用户发挥的余地。 8、备份管理方面,要特别表演bus,可以随时建立存档、备份文件,真是人性化得很。driver似乎只能每月统一建一次备份,更没有存档的概念,让人不爽之极。从程序员的角度,我能明白这又是节省资源的考虑。不过,嗯,driver根本就是那种扒皮资本家-- 9、有些功能是你无我有的,比如driver有留言功能就挺不错,实用。又如bus有作者回复的功能,本意很好,不过我觉得应该把回复在评论栏显示出来,不然谁知道你回复了啊? 10、发布之后,毫无疑问,driver的页面是漂亮得多,而且支持展开收缩之类的功能,但同样存在使用复杂的问题――别以为点一个键或点一个链接是很容易的事,那同样需要“寻找”,而不够醒目的提示对于用户永远是一种折磨。bus的页面中规中矩,没什么好说的。不过,这里要提一下,bus的程序员太懒了,回复框那么小,明显是用了缺省的textarea,也太折腾用户了吧!建议把回复框挪到底部,放大一点,增加一些基本编辑选项。唉,这么简单的事,等这么久都没人做。 11、bus非常优秀的地方是支持即时刷新,而driver为了减轻系统负担,需要等待做静态页面转换。转换无所谓,对于提高速度也有帮助,可是,为什么得“等一会”?搞得发布之后没办法立刻看到结果,程序员失职! 嗯,这种无中心内容的比较,再写出10点来好像都很容易呢。不过,又没稿费,还是打住,等我下次来兴致了再说吧。^^ 总的来说,driver精致美观,细节各方面考虑得很多,“精明过人”,如果能够持续发展下去,相信会很可观。bus朴素保守,显得更为粗旷一些,但给了用户更大的发挥空间,冲这一点,我也会继续以bus为主。――这或许也可看作我的择人原则:我欣赏精明的工作伙伴,但更愿意亲近粗放的朋友。 Post by linrun @ 10:32 世界上有些事情是很巧的

2004-06-14 22:54 刚刚在跟一个记忆力不好的朋友聊天时,说了这么一段话: 世界上有些事情是很巧的 你可以想象一下,所有的新blog,总共只显示10条,有新的马上刷下去 总共18858个blog 然后你随手打开,看到其中一篇blog正好是写给你的... 这种事情,是不是很好玩? 对,没错,我刚刚遇上这种事情。前两天为tapestry和spring整合的问题跑去 寸心知 问了一下,他今天才看到,很热心的做了个回复,而我,正好在blogbus.com的首页看到了这个回复。 有趣的事,应该记下来与人分享。 Ps遗憾的是,对方站长不是mm...哈哈 Post by linrun @ 22:54 补充一下“Tapestry整合Spring”

2004-06-13 17:23 不知道有没有人留意到,上一次我的说法是:“ 将Tapestry整合到Spring里去 ”,而这一次,我则是说:“ Tapestry整合Spring ”。也就是说,主语和谓语倒置了。这代表我看法的改变。一开始我是以Spring为主体,想用其构筑应用框架,然后在表示层、持久层加插其它需要的技术,比如Hibernate、Tapestry。 然而,实践中,我感觉到,应该把Spring放到更低的层次去考虑,不是将其作为主体,而是将其作为“粘结剂”,作为“辅助工具”来使用。这么说吧,我在view层选择了Tapestry的解决方案,同时希望能够应用DI模式,那么我就把Spring的这块功能拿过来使用。同时后端的设计人员又选择了Hibernate做持久层的解决方案,那么Spring的DAO那些东西很可能就帮上忙,于是引进来。 这个思路的变化对于总体方案可能没有什么影响,但对于我在逻辑方面说服自己却很有帮助。至于会不会有一天我又倒过来思考,那就看实践会带给我一些什么样的体会了。 Post by linrun @ 17:23 Tapestry整合Spring实践

2004-06-13 00:40 两个月前,写了一篇blog,名为《将Tapestry整合到Spring里去》,是根据文档做了理论上的说明。这阵子终于开始动手做,由于犯了一个很低级的错误,浪费了很多时间,直到周六才“摆平”,很高兴。网上这方面的资料非常少,我把实际操作过程再介绍一下,也算补一下文档的不足。事实上Spring网站的文档是给对Spring和Tapestry都有开发经验的人写的,多少有点过于简略,不是很方便使用。 第一步:写一个Java Bean供后边调用: package my;//接口 public interface IBean { public void amethod(); } package my;//实现类 public class Bean implements IBean { public void amethod() { //do something; } } 第二步:编写Spring的context config文档applicationContext.xml,放在web应用的/WEB-INF目录下