Cui.Liqiang

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2015年8月15日

摘要: 最近在https://github.com/ThoughtWorksInc/rest-rpc上工作,遇到了一个scala隐式转换的问题,简单的说是要实现这么个东西:implicit def jsonStreamFutureToScalaFuture[Value](jsonStreamFuture: ... 阅读全文
posted @ 2015-08-15 10:16 Cui.Liqiang 阅读(595) 评论(0) 推荐(0) 编辑

2014年10月21日

摘要: 在Jenkins中使用Git Plugin的时候,如果配置的地址是https的,有些地址会clone失败。本文探寻了发生的原因及解决方案。 阅读全文
posted @ 2014-10-21 07:18 Cui.Liqiang 阅读(15361) 评论(0) 推荐(0) 编辑

2012年11月19日

摘要: 周末去了上海参加了两天的rubyconfchina(rubyconfchina.org)大会,此等规模(或以上)的技术大会我还是第一次参加。虽然不是个个话题都很干,但是因为话题基数比较大,总的来说收获还是很多的。 第一天第一场的自然是Matz开场。很可爱的一个日本人,更让人欣慰的是说英文没什么口音。Matz主要说了3点:Be a programming language desinger。一开始他问在场的有谁写过自己的语言?无意外的无人举手,然后他抛出了另个一个观点:作为一个专业的程序员,不应该只会写应用级别的代码,应该去设计自己的语言。即使不能真正的设计出自己的语言,也应该去设计自己的... 阅读全文
posted @ 2012-11-19 22:24 Cui.Liqiang 阅读(1504) 评论(3) 推荐(1) 编辑

2012年11月6日

摘要: 上次提到了一些sonar扩展的基本原理。这里是上次提到的插件的地址在这里:https://github.com/cui-liqiang/sonar-mantra 现在已经做成了可配置的方式,不过配置的方式还很techi,需要修改jar包中的一个文本文件以及潜在的修改一些java文件。 其作用简单描述一下:对于某一个分析的指标(比如测试覆盖率),我指定一个阈值(比如80%)。如果某次运行的测试覆盖率小于这个值,那么我就会检查这次的值是否比上次分析成功的时候小了,如果小了,那么就让这次分析失败,从而可以触发相关构建的失败。 代码库中有一个文本文件用来做配置,一个可能的配置如下:cover... 阅读全文
posted @ 2012-11-06 22:41 Cui.Liqiang 阅读(1493) 评论(0) 推荐(0) 编辑

2012年10月17日

摘要: 缘起 写这个东西的最初的原因是想搞一个基于sonar的促进代码质量改进的插件。其大概原理就是如果你的某项指标的值不如上次(比如测试覆盖率比上次的低),那么就直接让构建失败。这样就促进代码质量往好的方向发展。当然如果一直按照这个趋势(越来越好)发展下去,该项指标会无限增大,到不合理的地步(比如测试覆盖率迟早会变成100%,而且任何人不能让它低于100%),所以可以给该项指标设置一个阈值,如果不低于该阈值,就没有必须比上次好这种限制。 最开始的想法是做一个CI插件(比如jenkins)。但是经过一番研究,发现做成sonar的插件其实更加合适。sonar的插件部署起来很简单,打包之后的sonar.. 阅读全文
posted @ 2012-10-17 00:47 Cui.Liqiang 阅读(8467) 评论(3) 推荐(2) 编辑

2012年10月15日

摘要: sonar是一款开源的代码质量静态检查工具,可以支持很多种语言。使用sonar可以检查测试覆盖率,代码复杂度,重复代码,以及违反某些规则的不良的编程风格,等等。看一张截图:通过这样的一张图表,就可以清楚看出来当前项目的健康状况。记录下你的技术债务。除了简单的记录下各个指标的值,还可以自定义一些alert,用以当某项指标低于或者高于某个阈值的时候给出报警。如上图就有一个例子,我设置了测试覆盖率不能小于50%,否则就会显示这样的红色的警告。不但每次构建会有一次这样的snapshot,而且可以跟过去的指标对比,来发现代码质量是提升了还是下降了。当然上面看到的只是sonar功能九牛之一毛。等到自己装好 阅读全文
posted @ 2012-10-15 22:14 Cui.Liqiang 阅读(14303) 评论(3) 推荐(0) 编辑

2012年8月13日

摘要: 本文对一些比较相似的概念进行了比较。Adapter PatternAdapter顾名思义是把一种类型的接口转换成为另一种类型的接口使得客户端可以按照它喜欢的方式访问。有两种方式可以实现,一种是组合方式,一种是继承方式。例如我有一个InterfaceA和一个ClassB。Libaray里面提供的是ClassB,而客户端代码希望访问的是InterfaceA的类型。interface InterfaceA{ String getData();}class ClassB{ String getRawData() { return "raw"; }}使用组合实现:clas... 阅读全文
posted @ 2012-08-13 00:55 Cui.Liqiang 阅读(1547) 评论(0) 推荐(0) 编辑

2012年6月19日

摘要: git真是博大精深。 想通了这一点,再遇到什么奇怪的现象都不奇怪了,查文档就是了。 今天来谝一谝git使用中遇到的一个有趣的场景:本地有master,spike两个branch。因为spike的内容和master完全不想相关,所以在spike上工作了若干天都没理master,直到有一天觉得差不多了,就做了以下几件事情。 git co master git merge spike git pull --rebase 然后奇怪的事情就发生了,那么到底发生了什么奇怪的事情呢,我还是决定把问题稍微简化一下,然后再慢慢道来。因为大家知道git pull --rebase其实就等于git ... 阅读全文
posted @ 2012-06-19 22:10 Cui.Liqiang 阅读(1761) 评论(3) 推荐(2) 编辑

2012年5月14日

摘要: “rack是一个最简化的web application标准”,这句话在很多资料里面见到过很多次,并且都会给出一个5行代码的例子,然后一个web application华丽丽的就起来了。确实比较简单,看看这个一页纸的specification就知道了。但是看了很多次之后还是没有什么感觉,一个简单的specification当然不能帮助你启动程序,需要的是它的实现,而且rack只是application的标准,还需要第三方的web server作为支持。还好rack这个gem帮我们实现了这个specification和相关的一些功能,并且打包了常用的web server,比如webrick和t.. 阅读全文
posted @ 2012-05-14 20:29 Cui.Liqiang 阅读(749) 评论(0) 推荐(0) 编辑

2012年4月29日

摘要: 之前尝试过两次使用heroku部署rails应用,这次再做的时候还是不熟练。于是干脆写篇note吧。关于heroku的界面 打开heroku的界面,你会发现右上角有很多菜单, heroku免费的东西包括:一个免费的dyno,文档上说一个dyno就是一个响应http请求的应用程序实例。我理解rails起的web server应该就是一个了。100MB的硬盘容量,不过是只读的。5MB的DB空间。每个月2TB的带宽。 所以你就知道了,如果只是搞个rails应用试试看,根本不用操心钱的事情。目录中对于初学者最重要的就是那个Dev Center了,里面包含了所有的教程方面的东西。不知道是我理... 阅读全文
posted @ 2012-04-29 22:23 Cui.Liqiang 阅读(2717) 评论(0) 推荐(0) 编辑