-
February 2012 M T W T F S S « Dec 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 -
Recent Posts
Recent Comments
- 爱国者 on 如何编写maven plugin(三) 测试
- www.chaojishop.com on sbt 0.7
- Sparkle on sbt 0.7
- arbow on sbt 0.7
- 学习hg(Mercurial)版本控制—转自liluo.org | 碎星 on 我与Mercurial
Tags
Archives
- December 2011
- August 2011
- May 2011
- November 2010
- February 2010
- May 2009
- February 2009
- January 2009
- August 2008
- July 2008
- June 2008
- May 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- July 2007
- June 2007
- March 2007
- February 2007
- January 2007
- December 2006
- May 2006
- April 2006
- March 2006
- February 2006
- December 2005
- November 2005
- October 2005
- September 2005
- July 2005
- June 2005
- April 2005
- March 2005
- February 2005
- January 2005
- December 2004
- November 2004
- September 2004
- August 2004
- July 2004
Microblogs
- 如果只是用git的功能的话,一个中心库仅仅是一个公共位置而已,要管理也不难。当然github上有其他相关功能,issue、wiki等。不过我觉得github的优势还是开放,可以方便大家互相fork,私有库用处并没那么大。许式伟 : 给创业者们的建议:把代码放到 Github 上去,别自己搭建服务器来管。我用了 Github 大半年了,感觉很爽。现在我们在 Github 上每月支付 50 美金。2月7日 14:03 来自 新浪微博
- //@老赵: 神一般的逻辑啊!!!//@方舟子:我要是能证明我的书和论文是我写的,韩寒是不是就承认他的作品是别人写的?//@太蔟: 呃,这得从初中数学讲起⋯⋯//@hezter: 方舟子求之不得向国人展示才学,谁出这么馊的点子[哈哈] //@madmadmadmad:方舟子不是教过你了吗?凤凰网新闻 : #专访韩寒#【韩寒:请方舟子证明他的书和论文是自己写的】韩寒:我真的很无奈,我只是想请教方舟子先生,我作为文字写作者我已经拿出这么多的证据,请方舟子来教我,或者请方舟子先生来证明一下他怎么证明他那些书和论文是自己写的,他如何证明?http://t.cn/zOPldAc2月2日 14:36 来自 新浪微博
- 我了个去,新浪微博手机客户端偷偷给我关注了上百个账号,大量是10条微博上万粉丝的账号
- 给明年依然年轻的我们:欲望、外界、标签、天才、时间、人生目标、现实、后悔、和经历 http://t.co/mhbZgRCu
- @arbow 平时都是手机用,新年回家用笔记本上网,哗啦钱全烧了,还好卡里面不是放着几百元
- 联通太过分了,流量王10元500M,超过之后,100M就烧了我100元
- 这是无限数论的问题,实际上用类似的手法可以证明1=2 //@刘鑫-MarchLiu://@天佑道场: 在分析学理论中,π可以严格定义为满足sin(x)=0的最小正实数X. 2009年,超级计算机计算圆周率到小数点后29000个小数位,2010年8月,小数点后5万亿小数位,2011年10月19日,小数点后10万亿位.难道计算结果小数点后10万亿位中国铁路拆委会 : 课本欺骗了我们多少年? 圆周率真的等于3.14吗? 我们的教科书真实率低于5%,连数学也不例外。1月30日 19:20 来自 新浪微博
- 顶,新浪搞什么东西,经常自动关注一些垃圾广告账号,刚刚刷新还给我自动转发了一条广告1月30日 18:57 来自 新浪微博
- //@小海宇:最有效的中药瘦身产品,强效顽固型左旋肉碱减肥药胶囊正品左旋肉减产后健康减淝瘦身产品 http://t.cn/z0sPiDB 小海宇 : 最有效的中药瘦身产品,强效顽固型左旋肉碱减肥药胶囊正品左旋肉减产后健康减淝瘦身产品 http://t.cn/z0sPiDB1月30日 18:50 来自 新浪微博
- 我在这里 http://t.co/7QPTMkhW
- 如果只是用git的功能的话,一个中心库仅仅是一个公共位置而已,要管理也不难。当然github上有其他相关功能,issue、wiki等。不过我觉得github的优势还是开放,可以方便大家互相fork,私有库用处并没那么大。
Author Archives: Sparkle
Ibatis with MapBean
用了两年的Hibernate之后,对ORM深有感触。一方面,ORM可以令到我们从OO角度来思考数据,屏蔽了数据库的差异(其实Hibernate被吹的最厉害就是那个分页,其实分页没什么技术含量,而且ROR都把分页从核心抽离了)。另一方面,性能问题,例如必须select才能update,必须select全部,必须update全部,cache带来的后遗症,javabean关联问题(一对多,多对一,多对多等),lazyload问题。当然,小型项目是很有优势的 Hibernate一直说,他生成的sql比一般程序员的要好,可以减少很多问题。但是,我倒是认为用Hibernate反而因为对程序员的要求更高导致更多问题。而且我现在认为,SQL才是王道,至少目前是。 于是在新项目中启用Ibatis,这一年来的使用感觉很不错,全程使用细粒度的SQL语句,虽然多写了很多SQL语句,但是感觉到项目在自己的控制中 我只用了Ibatis 40%不到的功能,可能大家会觉得不可思议。我没有用cache,没有用关联,没有用resultMap,甚至,连JavaBean也没有用 在大家都在讨论PO,VO,DTO的时候,我的系统里面一个JavaBean都没有 首先我问问,JavaBean是用来做什么的,存储数据,每一个PO,其实就约等于一个表里面的一行数据 我举一个真实一点的例子,一个user表 public class User { private int id; private String name; // 省略getter/setter一大段 } 不知道大家有没有用eclipse生成JavaBean getter/setter的痛苦,至少非常枯燥。整个JavaBean实现了什么功能?完全没有 好了我开谜底了,我用的是HashMap 什么,HashMap?是不是听错了 没听错,请问有什么事情是上面那个那么普通的JavaBean能做到的,而HashMap不能做到的呢 用HashMap没有具体属性的类型啊,那不是变成动态语言一样了,而且我要在JavaBean里面加逻辑怎么办 好吧,这是我想到的两个问题(如果你也有别的问题可以留意提出来) 首先,现在不同以前了,动态语言的优势慢慢提高了,像动态语言有什么不好,我从ROR里面学了很多不错的思想 其次是要加逻辑怎么办,这个问题,之前在Javaeye讨论充血模型还是贫血模型不可开交,最后还是没什么结论,目前还是一片贫血的情况,你可以翻一下你的项目里面的JavaBean,至少大多数的Bean都是没有意义的getter/setter。BO跟PO混杂在一起也很多人不建议的。至于逻辑,大可以写在util包里面,我都把整个model包去掉了,强化一下util不成么,呵呵 再次,数据库的列,跟JavaBean的属性两者,本来就是冗余的,如果我们修改数据库结构,就还要修改相应的JavaBean,或者影射文件。当然我这种做法更依赖数据库。另外,ROR的名字转换功能可以令到代码中的调用名字更好看一些,我觉得也不是非常有必要的实现 直接使用HashMap不太方便,尤其是类型转换上,于是我实现了一个MapBean的类,其实这个类很简单,关键是用HashMap代替JavaBean的思想 public class MapBean extends HashMap<String, Object> { … Continue reading
Posted in Uncategorized
7 Comments
架设你的CruiseControl
说实在话,07年最大的感悟就是重新认识了TDD和持续集成的意义,这个下次有机会再说。这次要说的是部署一个持续集成服务器。 持续集成服务器的作用其实很简单,就是check out最新的代码,然后运行指定的script,然后把结果记录下来,还可以将结果(尤其是错误的结果)通过email等手段发给程序员。 事情倒是很简单,但是我们为什么要专门的软件呢,当然你也可以自己写bash script来做这些事情,做着做着你就会发现差不多实现一个CruiseControl出来了,呵呵,无谓重复发明轮子。 常用的持续集成服务器有CruiseControl、Luntbuild 和 Anthill等,相对来说CruiseControl比较老牌,支持度也比较好,不过实际使用的时候还是觉得不太好使(最近又发现了一个软件Hudson,Netbeans在使用) 下面是安装和配置过程,可能有一些细节不是很准确,因为已经是比较早之前安装的 从官方网站下载最新版的CruiseControl 2.7.1,我选用的是exe的版本,因为我的服务器是windows的,相对来说,exe版本有一些预设的参数,配置会简单些 运行安装程序,默认装在C:\Program Files\CruiseControl,可以不改动,而实际的项目文件可以放在其他盘上面的 安装成功之后运行cruisecontrol.bat,就能看到一个dos窗口运行,这个时候访问本机8080端口就可以看到一个示范项目 接下来修改配置文件 打开config.xml,可以看到示范例子的配置,把它都注释掉,不过其实我最后的配置也跟它差不多 直接贴我的配置吧,然后再来解释 <project name="xxx-xxx"> <listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt"/> </listeners> <bootstrappers> <svnbootstrapper localWorkingCopy="D:/cc/${project.name}" /> </bootstrappers> <modificationset quietperiod="30"> <svn localWorkingCopy="D:/cc/${project.name}"/> </modificationset> <schedule interval="300"> <ant anthome="apache-ant-1.7.0" buildfile="D:/cc/${project.name}/build.xml" target="svnup test" … Continue reading
Posted in Uncategorized
7 Comments
优化你的Eclipse VM参数
最近dzone在讨论eclipse的VM参数 引用了一篇2004年的帖子 Here are the best options that I’ve found so far for my 2-processor Windows machine running JDK5.0 and Eclipse3.1: -vmargs -XX:+UseParallelGC 2004年就用两个CPU都颇奢侈了吧 我现在的机器是双核+2G内存,于是我修改了一下eclipse的VM参数 打开eclipse.ini 修改或加入如下内容 -vmargs -Xmx512m -XX:+UseParallelGC
Posted in Uncategorized
Leave a comment
我与Mercurial
最初知道 Mercurial这个工具其实是因为去年6月份看了cyfdecyf的一篇blog分布式版本管理工具:git & mercurial(作者搬迁了blog,新地址是这里).然后断断续续有在使用,一直想把一些经验写出来.最近刚好遇到云风在研究分布式版本管理,还是动手把一些经验写下来吧 一直一来都是用CVS,然后是SVN来做版本管理,最初认识分布式版本管理,是一个叫SVK的工具,是一个台湾人的作品,本身基于SVN,令到SVN可以分布式工作.当时觉得安装非常麻烦就没有研究下去了,而且本身对这样的功能需求也不大.后来Linus因为不满现有版本管理软件的问题,自己花了两个星期写了一个分布式版本管理Git,现在Linux kernel等源代码已经完全工作在Git的管理之上了.但是Git本身非常晦涩难懂,而且只能在Linux下运行,我本身也主要用Windows来工作,因此也没有深入研究. 直至看到 cyfdecyf的文章,这篇文章有坚定我研究分布式版本管理的信心.集中式版本管理的缺陷, cyfdecyf和云风都有描述了一些例子,我认为那些例子都很典型.如果所有开发人员都在一个房间里面,集中式版本管理是最好的,最明显的例子就是公司的开发,大家都能直接访问到服务器,网络不会中断.这种情况下,使用分布式版本管理反而增加了复杂性.但是,如果开发人员不是在同一个房间,甚至在不同的国家.当然你也可以在Internet上假设一个SVN服务器.但是,开发人员不一定有网络,或者网络不一定很好.而每次提交,或者同步,都要花上好几分钟或者更长时间,这非常影响开发.又或者你只是私人的项目,而你有没有能力假设公开的SVN服务器.而且我只是一个人,为什么每次都要提交到外边的服务器.当然也可以在自己的机器上面架设一个SVN,但是如果你有两台以上的机器就会觉得很麻烦了. 所有的这些场景,其实你需要一个分布式版本管理.cyfdecyf的文章最后在选择Git的代替品,定了用Mercurial.那我也从Mercurial开始吧.不过Mercurial的中文资料非常少,我始终不理解分布式版本管理的原理.最后,非常搞笑的情况是,我其实是看了Git的一份中文资料才真正明白的,也推荐大家从Git的中文资料入手. 待续…
如何用Java进行3DES加密解密
最近一个合作商提出使用3DES交换数据,本来他们有现成的代码,可惜只有.net版本,我们的服务器都是Linux,而且应用都是Java。于是对照他们提供的代码改了一个Java的版本出来,主要是不熟悉3DES,折腾了一天,终于搞定。 所谓3DES,就是把DES做三次,当然不是简单地DES DES DES就行了,中途有些特定的排列。这个我可不关心,呵呵,我的目的是使用它。 在网上搜索了一下3DES,找到很少资料。经过朋友介绍,找到GNU Crypto和Bouncy Castle两个Java扩充包,里面应该有3DES的实现吧。 从GNU Crypto入手,找到一个TripleDES的实现类,发现原来3DES还有一个名字叫DESede,在网上搜索TripleDES和DESede,呵呵,终于发现更多的资料了。 Java的安全API始终那么难用,先创建一个cipher看看算法在不在吧 Cipher cipher = Cipher.getInstance("DESede"); 如果没有抛异常的话,就证明这个算法是有效的 突然想看看JDK有没有内置DESede,于是撇开Crypto,直接测试,发现可以正确运行。在jce.jar里面找到相关的类,JDK内置了。 于是直接用DES的代码来改&测试,最后代码变成这样 SecureRandom sr = new SecureRandom(); DESedeKeySpec dks = new DESedeKeySpec(PASSWORD_CRYPT_KEY.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); SecretKey securekey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance("DESede"); cipher.init(Cipher.ENCRYPT_MODE, … Continue reading
如何用Java进行DES加密解密
这篇其实是引子,直接贴代码,不多解释了 SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(PASSWORD_CRYPT_KEY.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); return new String(Hex.encodeHex(cipher.doFinal(str.getBytes()))); SecureRandom sr = new SecureRandom(); DESKeySpec dks = new DESKeySpec(PASSWORD_CRYPT_KEY.getBytes()); SecretKeyFactory … Continue reading
PageCacheFilter2
/** * 2006-5-1 * @author Sparkle */ public class PageCacheFilter2 implements Filter { private Set<string> cacheUrlSet = new HashSet<string>(); private Set<string> scacheUrlSet = new HashSet<string>(); private String baseCachePath, contentType; public void init(FilterConfig config) throws ServletException { String cacheUrl = … Continue reading
ContentRewriteFilter
/** * 2006-4-30 * @author Sparkle */ public abstract class ContentRewriteFilter implements Filter { protected boolean wantRewrite(HttpServletRequest request) { return true; } protected abstract String rewrite(String content, HttpServletRequest request, HttpServletResponse response); public void doFilter(ServletRequest req, ServletResponse res, FilterChain … Continue reading
Posted in Uncategorized
Leave a comment
CryptUtil
/** * 2006-6-10 * @author Sparkle */ public class CryptUtil { /** * 将一个数字转换成0-9a-zA-z的62进制 */ public static String encodeLongToString(long i) { if (i == 0) { return "0"; } else if (i < 0) { throw new IllegalArgumentException(); } StringBuffer … Continue reading
Posted in Uncategorized
Leave a comment
Apache、Nginx、Lighttpd对比
Apache * 经典的Web服务器 * 除了慢没有别的缺点了 * 对了,Apache2对fcgi支持并不好 * 非常好用的proxy和proxy_ajp(很多人用它作为tomcat的前端) * 不支持epoll(这年头,epoll几乎是性能的必备) Nginx * 速度快,占用资源少 * 杀手级的proxy和rewrite * 非常不错的静态文件能力 * 最适合作为整个网站的前端服务(将php、svn等不同请求发送往后端apache) * 其他功能马马虎虎 Lighttpd * 杀手级的静态文件能力 * 杀手级的fcgi能力 * 不稳定的proxy模块 总体来说,如果你不确定应该用什么服务器,那就应该用Apache 但是稍微可以配置多个服务的情况下,做一个Nginx在最前端,然后把需要的功能转发给Apache是最好的选择 如果你打算跑fcgi,Lighttpd是不二的选择 如果你打算做图片服务器,独立的Lighttpd也是很好的选择