- 博客(120)
- 资源 (2)
- 收藏
- 关注
原创 scala学习交流的网站
Java语言的发展越来越举步维艰,语言层面上已经落后很多,Oracle收购了之后也没有太多的活力,可能负担太重了,有点像Windows之于微软。不堪忍受之下,自己学习了scala,一门OO和FP(函数式)混合动力编程语言,收益良多,不敢独享,将一些心得体会或者学习笔记记录下来,成为一个系列文章。同时自己建立了一个网站:learn-scala.net ,一个用scala + playfram
2013-11-15 11:16:40 4204
原创 凑个热闹:我的微软面试题解法
网上闲逛,看到《程序员之家》上面一片标题党文章《月薪5万,微软中国研究院最新面试题(附答案)》,感觉这个题比较有意思,于是试着解了一下。题目:小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗?3月4日 3月5日 3月8日6月4日 6月7日9
2011-10-26 21:10:22 4086
原创 mysql脚本中如何用字符串作为列名
<br />在数据库查询中,经常会有这样的需求:<br />能不能用一个字符串来动态指定一个列,然后在where子句中进行查询。<br />如果能有一个function,比如叫getColumn(string),那么,写一个查询可以是:<br />select * from table where getColumn(string) = xxxxx;<br />但是,查遍了mysql的相关文档,也没有找到这么一个类似的function。于是只能找一个Workaround------用一个存储过程。<br /
2010-11-18 15:01:00 6808
原创 我自豪:我是Zuora的一员
Zuora是谁,做什么的,怎么样,billing, payment, 订阅式经济,云计算、SaaS的理念,敏捷开发,自动化测试。
2010-07-15 09:01:00 9115 2
原创 免费的交通违章自动邮件提醒
有了车就是麻烦,总是怕违章被拍,更担心的是不熟悉路,在一个地方连续多次违章。如果能每天查一次违章,那么如果发现有违章,第二天就不会再犯错了。(惨痛的教训啊) 自己动手丰衣足食吧,写了一个自动查违章记录的程序,功能如下: 1. 每天检查违章一次;2. 如果有未处理的违章记录,发送通知邮件;如果没有违章,不发送垃圾邮件;3. 月底发送一封统计邮件。 目前只支持查询北京市
2010-04-21 19:50:00 7685
原创 Liferay 6.0??
Liferay的release周期还真的挺长的,按照他们自己的说法,好像是一年一次,不过这次似乎特别的长。不过这么长的时间liferay开发团队也没有闲着,从每天代码更新的数量就可以看得出来。原来一直以为他们是要发布5.3,可种种迹象表明,从5.2.3之后,应该会直接发布6.0.因为变化确实是比较大的,尤其是从UI上来说,应该是全部用Liferay自己创立的开源AlloyUI重写所有的
2010-04-01 11:54:00 4546 1
原创 很奇怪的bootclasspath参数
尝试下面代码:import sun.util.resources.LocaleData;public class SunTest{ public SunTest(){ } } 编译时报错:C:/Temp>javac -verbose SunTest.java[解析开始时间 SunTest.java][解析已完成时间 63ms][源文件的搜索路径: .
2009-12-14 17:45:00 14553
原创 Liferay研究卅三:多历法Calendar
经过多天的折腾,终于将Liferay Calendar Portlet打造成一个完美支持多种历法(目前界面上支持GregorianCalendar和ChineseCalendar)的一个组件了。折腾的初衷是因为目前所有的日历组件中,很多都有定期提示功能,但是都只是在GregorianCalendar,也就是我们用的公历上,比如每年几月几日。而我们国内还有很多事情是用农历的,比
2009-07-29 15:00:00 4906 1
原创 Liferay研究之卅二: ext 开发环境下遇到java.lang.VerifyError问题
以前一直都是直接修改源码的, 没怎么用过ext方式, 不过这种最底层的方式非常不利于liferay版本升级,因此决定用ext环境(因为要修改liferay core,所以不能用plugins SDK).今天忽然出现一个问题,运行时报了个java.lang.VerifyError, 看JDK Doc原文是:Thrownwhen the "verifier" detects that a
2009-07-29 14:57:00 4388
原创 Liferay研究之卅一:Database Sharding(数据库分片)
Database Sharding是什么? 其实就是一种分布式计算,通过业务逻辑将不同的分类的数据保存到不同的数据库(具有相同的表结构)中。简单的说是一种负载均衡技术,因为每个表中的数据少了,查询速度就快了,系统能承受的负载也就大了。很多大公司都在用这种技术,比如Google, Facebook, Wikipedia等等。 Liferay的实现策略是什么?Liferay实现的是
2009-06-17 12:04:00 5944 2
原创 Liferay研究之卅:5.2中通过SharePoint协议与MS Office整合
Liferay5.2 可以与MS Office集成,实现了SharePoint协议。从Word中“打开”输入http://localhost:8080/sharepoint 就可以访问到你的DL(中间需要输入用户名密码),然后就可以像打开本地文档一样找到你要编辑的文档。至于实现,那就是在web.xml中有一个sharepoint/*的ServletMapping,用来解析sharepoin
2009-06-17 11:59:00 4702 2
原创 JConsole通过JMXMP协议连接JMX Server
jconsole连接JMX在很多例子中采用RMI协议连接。但是在实际生产环境下,RMI会受到来自防火墙的诸多限制,经常连接不上。采用JMXMP协议是一个替换办法。而JDK本身没有带JMXMP的连接器实现,因此还得下载对应的连接器。从Sun Down比较麻烦,我放到了CSDN的下载频道:http://download.csdn.net/source/1394334将解压后的几个jar
2009-06-09 17:19:00 7570 2
原创 未来10年后的计算机技术会有什么变化?
今天无意间在驱动之家上发现一个新闻,法国科学家用一种“飞秒”激光器可将硬盘的读写速度提高10万倍!!!!!! 具体新闻请参见:http://news.mydrivers.com/1/136/136551.htm看完这个新闻,我不禁开始设想如果这个技术普及继后,对计算机技术的发展将起到多么大的影响。最大的一个影响应该就是:内存没存在的价值了。试想,如今最普通的IDE硬盘,其读写速度也会在
2009-06-09 12:31:00 7877 1
原创 SOA和云计算的两个会
昨天下午,今天一天(21, 22号),分别参加了两个会:Tibco的SOA研讨会和2009云计算中国论坛。感觉都有比较多的收获,思路开阔了不少,这里简单记录一下。TIBCO的《SOA研讨会》这个会应该是TIBCO的一个小的市场活动,从会议的内容来看,应该是为了推动某个项目活动而进行的一次市场行为。因为会议上大量地宣扬着TIBCO在某几个重点行业的成功案例,还有几个客户代表发言。虽然如此
2009-05-25 08:59:00 4381 2
原创 对Spring Integration中关键概念的个人理解
学习一个新的技术,最重要的应该是对这个技术(架构、体系)中一些关键概念的理解,只有正确理解了这些概念,才能顺利地掌握这个技术。下面就个人在学习Spring Integration时的一些个人理解罗列如下,感兴趣的DX可以一起讨论。 MessageEndpoint就是一个管道、过滤器架构中的过滤器。这里的所谓过滤器,是在两个管道之间的一个装置,对输入信息进行处理,然后将处理结果输出到
2009-04-29 09:37:00 7410 2
原创 SOA的由来,服务整合的进化史
现在SOA很时髦,好像哪个系统不喊上两句与SOA相关的口号或者与之挂上点边就觉得很落伍。SOA是什么,字面意义是面向服务的架构,好像很容易理解,又很空洞,说了半天还是半懂不懂。本文试图就"什么是SOA","SOA的应用场景"用一个进化的模式给出一个非常简单的答案,欢迎大家拍砖!因为对轻量级的Spring容器比较熟,这里的技术大部分采用Spring的解决方案,其他的方案思想是类似的。
2009-03-16 14:06:00 6637
原创 Spring Integration:jms范例分析
分析对象:Spring-Integration-Sample-jmscommon.xml, inbound-Gateway.xml, outbound-Gateway.xml, DemoBean.java, GatewayDemo.java一、让例子跑起来 make it run!运行GatewayDemo。将通过Broker方式启动ActiveMQ, 如果将common.xm
2009-03-06 13:25:00 10336 3
原创 Eclipse RCP使用Spring时遇到的问题及解决过程
需求环境:公司的JinbuBox客户端采用Eclipse RCP开发,整个工程只有一个Bundle, 包含所有的jar、资源等等,工程使用了Spring;问题:在客户端需要更新时,可以采用Eclipse RCP的bundle更新机制。但是因为整个工程只有一个Bundle,所以如果更新就需要将整个应用全部更新一遍,而事实上其核心变动很小(自己的业务Class、及部分图片等资源)。因此,需要将
2009-03-02 17:16:00 5442 1
原创 Liferay研究之廿九:Liferay5.2基础架构变动
前几天Liferay正式发布了5.2, 抽空Down下来研究了一天,感觉还是有不少变化的,很多底层的东西都发生了变化。因为现在重点关注于MDD的研究,所以这次研究重点在基础架构(liferay infrastructure)方面,其他方面略有涉及,简单总结如下:http://www.smilingleo.cn原创,转载请标明出处。一、环境变动将更多的配置内容放到了portal.prop
2009-02-20 15:47:00 5203 1
原创 关于Java Access Control的4道有趣的测试题
好像很简单,测试一下,看你能答对几个? (答案在最后) 问题1public class p1.C1 { int m() {return 1;}}public class p1.C2 extends C1 { int m() {return 2;}}public class p2.C3 extends p1.C2 { int m() {return 3
2009-02-19 10:43:00 3842
原创 通过Reflect调用可变参数方法
JDK5之后,java的方法定义多了一个可变参数(varargs),在某些场合下还是比较方便的。但是,在通过反射(reflect)调用时,就遇到了一些问题。主要体现在两个方面:1、如何根据方法名及参数类型精确地从一个Class中获取Method实例?(参数类型是什么?怎么构造?)2、invoke调用时的Args如何构造?Google了一下,做了一个小例子。package l
2009-02-18 17:48:00 1780 2
原创 使用事务时应该避免的陷井
事务可实现“要么完全成功,要不全部不成功”,保证数据的完整性和一致性,使我们在开发中能方便地实现一些业务逻辑。比如,在股票交易时,除了记录交易的过程,还要更新交易完成之后的账户状态。这两个操作显然必须“要么完全成功,要么全部不成功”,否则,你的麻烦就大了。当然,如果你不关心数据的完整性和一致性的问题,那么忘了事务吧,因为引入锁、数据库并发等机制之后,对性能还是有影响的。下面代码中,plac
2009-02-10 13:59:00 2570 1
原创 一个有趣的java性能测试
早上看到两个文章,关于性能测试的一些争论的。http://www.mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/http://stuq.nl/weblog/2009-01-28/why-many-java-performance-tests-are-wrong在那个例子的结论中,说明iter
2009-02-04 11:08:00 2133 3
原创 自己写的小工具---JarCleaner
java的jar是一个很不错的技术。可是现在开源的发展,使得一个项目中会用到很多很多的jar文件(我们的一个项目中,刚开始lib目录下有超过100兆的jar文件),一直怀疑有些文件是用不到的,但是又不太确定哪些是有用的,哪些是没用的。想了想,决定还是做个小工具,一劳永逸地解决这个问题吧。此小工具能完成如下功能:1、将原来lib路径的所有jar备份到lib/bak目录下;2、删除不用
2009-01-12 16:43:00 1150
原创 MIS系统中数据字典的两种解决方案
在信息系统中,很多的信息都是有标准化,所谓标准就是实现定义的一些规范,根据这个规范可以在多个实体之间进行数据的共享,以避免沟通中的歧异问题。数据字典就是标准化中的一个重要组成部分。关于数据字典的定义,版本有很多,在不同的场合中可能有不同的含义,这里特指的是:一个属性可能具有的几个值。比如:性别的字典为男、女等等,主要用来进行数据归类(统计)。数据字典的解决方案有很多种,这里仅讨论其中两
2009-01-09 14:29:00 3246 1
原创 ExtJS学习笔记(二):handler与listener的区别
ExtJS里handler和listener都是用来对用户的某些输入进行处理的,有必要区分一下各自都是怎么用的。 Handlerhandler与Action相关联,一个Action可以有多个Component引用;Action是一个可被共享的对象,有五个主要的属性:text, handler, iconCls, disabled, hiddencomponent的构建方式比较有
2009-01-08 10:59:00 34940 9
原创 ExtJS学习笔记(一):ExtJS程序的结构及如何定义js的private, public属性、方法
一般编写一个ExtJS程序需要包含下面四个类型的文件:1、html文件,引入样式表,js文件,并标明html元素;2、html同名js文件,用来创建组件,并动态替换DOM中的元素;3、组件js文件4、组件对应的css文件 对于html同名的js, Ext推荐的写法是这样的:Ext.namespace(ux);ux.app = function(){
2009-01-04 15:50:00 4063
原创 关于软件生产的工业化思考(一)
工业脱胎于手工业。在手工业时代,我们生产一个产品,比如刺绣,是用绣花针一针一针的缝出来的,可以按照手工业者的想法,绣出各种各样的创意作品,相当灵活,只要时间、精力、财力允许,可以做出满足所有客户的所有要求的产品。但是,其效率不言而喻是最低的。在生产过程中,优秀的手工业者也发明了各种针法,以达到不同的效果,比如什么盘针、套针、抢针、变体绣等等。这些都是这些手工业者为了达到某种效果而总结
2008-12-26 11:38:00 1960 1
原创 关于软件生产的工业化思考(序)
从开始读计算机专业开始,我就产生一个梦想:以工业化的方式来进行软件开发。软件生产的过程能像流水线一样,工序划分清晰、采用精密仪器组装(制造)、按照流程生产出的软件质量稳定、可靠。开始的时候这确实只是一个梦想,很天真,而且也很笼统。但是我一直没有忘记这个梦想。隐隐约约地,这个朦胧的梦想一直在指导着我在技术领域的学习和研究方式。经过这么多年的积累,忽然之间,这个概念好像忽然清晰了。在技
2008-12-26 11:32:00 1444 1
原创 Ehcache还是Memcached的抉择(二)
Liferay中使用的是Ehcache, 这个缓存框架不错,性能很好(参见上篇与memcached对比的文章),在Liferay中封装的也不错,很容易使用。可最近在项目中遇到一个问题,那就是需要有多个系统共同访问某个(某些)数据表,这种需求在一些与遗留系统进行整合的项目中也经常会有。整合是没有问题,但是在这种情况下,缓存就成了一个很大的问题。大家都知道,缓存有三个作用范围:事务、应
2008-12-17 17:50:00 6979 2
原创 Ehcache还是Memcached的抉择(一)
缓存的目的就是为了提高响应速度,尤其是并发访问的速度,降低数据库服务器的压力,在同等硬件配置的情况下,提供更高的系统性能。总的来说,请指导原则就是:尽量用低开销的计算代替高开销的计算。比如直接从数据库查询的开销要远高于内存中的计算返回,网络请求要远高于本地(同一VM中)请求。如果单从这一点上来分析的话,现在很多关于Ehcache(local)与memcached(client/server
2008-12-17 17:47:00 20074 2
原创 对Liferay进行彻底瘦身
请移步到我的个人空间。 http://www.smilingleo.cn/web/guest/3?p_p_id=101_INSTANCE_qYHC&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_101_INSTANCE_qYHC_struts_action=%2Ftag
2008-10-24 18:39:00 1367
原创 Liferay研究之廿八:为同类Portlet设置不同的ICON
根据Portlet的定义,每个Portlet都是会有一个icon的。 但是,一些Portlet是可以instancable的,这样如果一个页面上放置了多个同一Portlet的实例的化,页面上都是同样的图标,都是同样的背景就会比较难看。 用下面的技巧,可以解决这个问题。 可以通过自定义外观来实现相同PortletID的instance的不同样式。 在Portlet的“外观与风格”按钮对话框中→高级
2008-10-12 22:25:00 1450 1
原创 Liferay研究之廿七:一些有用的API分析
com.liferay.portal.util.PropsUtil在Portal.properties中设置的每个属性,都有一个类的属性与之对应,这个类就是:PropsUtil,每个属性都是静态的。对应的还有一个类是:PropsValues可以直接获取属性对应的值。如果想扩展portal.properties,在其中加上自己的值,那么就需要修改这两个类。 com.liferay.portal.u
2008-10-12 22:22:00 3883
原创 Liferay研究之廿六:5.1更新分析
1、Portlet Container Implement.Add sun container implement for furture. JSR268? 2、ThemeAdd a shortcut icon for a theme。A flag to decorate portlets by default. 3、Springremove active-mq from spri
2008-08-25 10:01:00 1181
原创 Liferay研究之廿五:缓存技术的使用
缓存是一个良好设计架构的必须元素,因为使用具有通用目的的架构机制,势必会造成一些计算的冗余,造成性能的降低,通过缓存机制,就可以弥补这方面的问题。Liferay中大量的使用了缓存机制,其核心都是MultiVMPool机制,但在具体使用上有两种方式。方式一:使用FinderCache类,具体用法:1、放入缓存FinderCache.putResult(classNameCache
2008-07-11 08:57:00 2890
原创 Liferay研究之廿四:如何实现配置模式
Liferay的Portlet Configuration页面,都有几个固定的Tab页,比如“权限”,“导出导入”等,这些是在什么地方定义的呢?我们知道,portal/render_portlet.jsp负责界面上一个portlet的解析功能,包括这个portlet再编辑模式下的最大、最小、配置、外观等MODE的实现。仔细分析一下这个页面,点击一个portlet的configuration按钮
2008-06-10 22:26:00 2594
原创 用UltraEdit的正则表达式替换功能来格式化网页源代码
在查看网页源代码时,很多时候由于网页源代码的混乱,看着让人非常头疼,可如果你使用正则表达式,就可以很方便的对其格式进行重新整理,让你看着比较舒服。具体如下:一、在UE中打开源代码二、查找替换:>^(*^)为^>^p^1^p这样,就能将所有的标签都各占一行。三、以HTML方式查看代码。四、“格式”→“重新缩进选择”这样,是不是就很清晰了?
2008-06-09 12:34:00 2385
转载 java.lang.OutOfMemoryError: PermGen space及其解决方法
1、PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的He
2008-05-30 10:47:00 841
原创 全国哀悼日期间将网站风格变为黑白
使用Liferay做的网站,做这个修改很简单。在页面设置设置风格与样式的地方,有一个CSS标签,在其中添加下面代码:html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }保存即可。为灾区做力所能及的事情吧。
2008-05-20 08:57:00 1794
jconsole通过JMXMP协议连接的jar文件
2009-06-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人