小站重新装修,欢迎到访。
归档 2013 年 8 月

对user.dir的误解

今天调试程序的时候,发现我之前hard code的一段路径修改成了System.getProperty("user.dir")之后,依然可以正常运行。我一直以来都以为user.dir就是当前用户的home dir,似乎这个印象应该自大学时代就已经有了,所以我有些先入为主地认为是环境有问题。

我的程序是最终由一个py脚本调用jar包来执行,为了搞明白这个困惑的问题,我在java代码里插入了多处out.println(System.getProperty("user.dir")),然后执行py,结果输出并非home dir。于是凭直觉将问题定位在py里的一句os.chdir(sys.path[0]+"/..")上。再然后我就写了个测试的Main函数,在控制台直接java -cp a.jar path.to.Main,果然输出了当前目录,于是问题清晰了。

于是网上查了下,竟然是我搞混了。如下摘自jdk文档

“user.dir” User working directory

“user.home” User home directory

最后我也终于记起来为什么会有这个错误的印象了。大学时用java写了个简单的http server,创建配置文件时,我默认写在了user.home,所以有了这个印象。如今看到user.dir,便和user.home混淆起来。

都写这么多年java了,让大家见笑了。问题也搞清楚了,我发现以后遇到路径问题,借助user.dir和脚本,可以非常方便的解决了。

4clojure

最近开始在4clojure上刷题,推荐对clojure有兴趣的同学一起来玩。

正好刷到第38题,贴出来分享下。

Write a function which takes a variable number of parameters and returns the maximum value.

1
2
3
4
5
6
(= (__ 1 8 3 4) 8)
(= (__ 30 20) 30)
(= (__ 45 67 11) 67)

不得使用max和max-key

##解

1
(fn [x & other] (reduce #(if (> %1 %2) %1 %2) x other))

中国式开源的三宗罪

“月亮还是外国的圆”

这话放到IT行业,我感觉让人不好去否认。

IT技术发源自西方(没算盘什么事吧?!),根基也在西方。先不说各种各样的网络协议、有名无名的编程语言,即使比较优秀的框架或库什么的也都难觅中国智造。这有语言、文化、国情等多方面原因,不想吐槽过多,今天只想聊聊“中国式开源”。

这两年IT圈子不知怎么,突然一改只从开源社区索取,绝不向社区贡献的猥琐姿态,各种中国智造的开源项目如雨后春笋般出现。但笔者感觉这些项目大都是中国特色的,属于中国式的。什么是中国式开源?我觉得下面三个字概括的很好(出处不详):

晒 代 码

最近业余在看国外一个著名开源项目的源码。深感其社区之活跃,笔者读书那会虽然已经经常在sourceforge.net(日薄西山)爬来爬去,但对社区(community)这个概念理解并不深,毕竟那会太嫩,几百上千行代码写出来就敢自称框架,还厚颜无耻地扔到sourceforge.net给人看。扯远了。

前几日,由于工作需要,去看了国内一家互联网大厂开源的某项目(就不点名了,该项目自称用户很多)。两相比较,感慨万千,正好反映了我本文想表达的“三宗罪”。下面细数一下。

###代码品质###

我没有用代码质量这个词。因为代码质量直接让人联想到项目的源码写的好不好、格式工不工整、逻辑清不清晰、抽象优不优雅等,这些我不够格来评判。这里说品质,包括几方面。

首先是测试用例。有时候测试用例可以从侧面反映出某些类的用法,也可以暴露某些关键逻辑,这对于代码的学习者,还是比较关键的。可是我看的那个项目源码,一个用例都没有。

其次是代码内容。这里有个关键问题就是出自中国的开源项目,很多都是来自企业内部的改造,即把内部运行良好的项目,抽取适宜公开的部分包装而成。这就导致这些项目里有时会残留有这家企业的业务气息。导致不能很好的抽象大众化的需求。

###文档###

中国式文档也不得不让人吐槽。该大厂的这个开源项目,我翻遍网络,只觅得一份架构简介、安装说明,区区几页纸。不过好在有一些javadoc,可以生成源码的文档。但谈到前面所说的某国外项目,从README到如何为本项目贡献代码,从WIKI到tutorial,从ISSUES到maillist,一应俱全。甚至作者在采纳了你的patch,要把你加到contributor列表之前,都要先签一份agreement才行。不得不佩服老外的职业和专业精神。

至于为什么我们很难写出一份好文档,我觉得和国情有关,也和文化有关。中国人码农大都年轻,而且大都忙于糊口,公司也大都在压榨员工。很多时候大家都在赶工期。代码都写不完,何谈文档?虽然没有和老外共事过,也没出过国,但从很多老外的博客来看,很多人年龄都比较大,属于经验派,同时,生活压力也不会太大,爱好广泛,生活安逸。饱暖思淫欲,这话放到ITer身上,便是饱暖思代码,一个道理。

###社区活跃度###

上文谈到的国外的开源项目,社区活跃,contributor很多,项目的leader也经常出来和社区互动,言辞亲切。

我在阅读大厂的开源代码时,遇到一些不解的问题,由于文档太少,搜索引擎上关于此项目的讨论也不多,无奈便去微博@了一下几位该项目的开发者,至今杳无音讯。何故?项目主页不是说了有问题可以这么问的么。除此之外,我没看到如何能贡献patch,没看到邮件列表。

综上所述,我认为中国式开源就是在晒代码,虎头蛇尾般。有如小树成长为大树,开源项目亦是如此。好的开源项目,码农乐于参与,维护者做得好的话,肯定会朝着好的方向演进。但面对晒代码式的开源项目维护者,再好的项目都怕是让人望而却步。

临了,此文绝非对大厂的开发者不回答笔者问题的打击报复。实乃多年码农生涯积累下来的吐槽。希望中国码农少一些浮躁。多一些对技术的真挚追求。国内企业少一些压榨,多给码农一些时间和空间。码农从来不是企业的成本,而是企业难得的财富。

博主是一个不是很聪明的码农。完美主义者,强迫症中期。这里会记录一些回忆和点滴,以博为镜。

武器库:

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-SA 3.0  授权发布。最后生成于 2017-02-20.