您现在的位置:首页
--> 庄周梦蝶
你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西。怎么下手呢?如何开始呢?我的习惯是这样:1.首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。2.阅读项目的文档,重点关注类似Getting started、Example之类的文档,从中学习如何下载、安装、甚至基本使用该项目所需要的知识。3.如果该项目有提供现成的example工程,首先尝试按照开始文档的介绍运行example,如果运行顺利,那么恭喜你顺利开了个好头;如果遇到问题,首先尝试在项目的FAQ等文档里查找答案,再次,可以将问题(例如异常信息)当成关键词去搜索,查找相关的解决办法,你遇到了,别人一般也会遇到,热心的朋友会记录下解决的过程;最后,可以将问题提交到项目的邮件列表,请大家帮你看看。
继续Clojure世界之旅,介绍下我今天的探索成果,使用clojure生成clojure项目的API文档。在java里,我们是利用javadoc生成API文档,各种build工具都提供了集成,例如maven和ant都提供了javadoc插件或者task。在Clojure世界里,同样有一系列工具帮助你从源码中自动化生成API文档。今天主要介绍三个工具。不过我不会介绍怎么在clojure里写doc,具体怎么做请看一些开源项目,或者直接看clojure.core的源码。
我们经常需要在程序中测量某段代码的性能,或者某个函数的性能,在Java中,我们可能简单地循环调用某个方法多少次,然后利用System.currentTimeMillis()方法测量下时间。在Ruby中,一般都是用Benchmark module做测试,提供了更详细的报告信息。 同样,在Clojure里你可以做这些事情,你仍然可以使用System.currentTimeMillis()来测量运行时间。
Java世界里有findbugs这样的神器,可以让你避免很多“简单愚蠢”的bug。同样,Clojure世界里也有相应的替代品,这就是今天要介绍的kibit。不过kibit现在还比较年轻,判断的规则较少,但是已经可以使用起来做clojure代码的静态检查。
使用http client提交表单或者下载网页也是非常常见的任务,比如使用Java的时候可以用标准库的HttpURLConnection,也可以选择Apache Http Client。在clojure里也有这样的类库,这里我将介绍三个各有特色的http client实现。 首先,我最先推荐使用clj-http这个类库,它是Apache HttpClient的clojure wrapper,是一个提供同步API的简单易用的Http Client。
单元测试也是一个开发中最常见的需求,在Java里我们用JUnit或者TestNG,在clojure里也内置了单元测试的库。标准库的clojure.test,以及第三方框架midje。这里我将主要介绍clojure.test这个标准库,midje是个更加强大的测试框架,广告下,midje的介绍在第二次cn-clojure聚会上将有个Topic,我就不画蛇添足了。通常来说,clojure.test足够让你对付日常的测试。 首先看一个最简单的例子,定义一个函数square来计算平方,然后我们测试这个函数:;;引用clojure.test(nsexample(:use[clojure.test:only[deftestisrun-tests]]));;定义函数(defnsquare[x](*xx));;测试函数(deftesttest-square (is(=4(square2)))(is(=9
Clojure的REPL非常方便,可以随时随地试验你的想法,REPL是read-eval-print-loop的简称。默认clojure.contrib有带一个shell脚本来启动REPL,具体看这里。你也可以用JLine来增强REPL:java-cp"%CLOJURE_DIR%\\jline-VERSION.jar;%CLOJURE_JAR%"jline.ConsoleRunnerclojure.main 不过,其实你还可以用rlwrap这个GNU库来增强clojure REPL。使用它有如下好处:1.Tab completion,使用tab做代码提示。2.括号匹配3.历史记录,哪怕你重启REPL4.通过.inputrc来绑定vi或者emacs 具体操作步骤如下:1.首先,你需要在你的机器上安装rlwrap,你可以通过apt或者port,homebrew等工具安装或者自己下载安装:su
文件读写是日常编程中最经常使用的操作之一。这篇blog将大概介绍下Clojure里对文件操作的常用类库。 首先介绍标准库clojure.java.io,这是最经常用的IO库,定义了常见的IO操作。 首先,直接看一个例子,可以熟悉下大多数常用的函数:(nsio(:use[clojure.java.io]));;file函数,获取一个java.io.File对象(deff(file"a.txt"));;拷贝文件使用copy(copyf(file"b.txt"));;删除文件,使用delete-file(delete-filef);;更经常使用reader和writer(defrdr(reader"b.txt":encoding"utf-8"))(defwtr(writer"c.txt":appendtrue));;copy可以接受多种类型的参数(copyrdrwtr:buffer-size4
XML处理也是个常见的编程工作,虽然说在Clojure里你很少使用XML做配置文件,但是跟遗留系统集成或者处理和其他系统通讯,可能都需要处理XML。 Clojure的标准库clojure.xml就是用来干这个事情的。一个简单的例子如下,首先我们要解析的是下面这个简单的XML:MichaelFogus/ChrisHouse StuartHalloway
所谓兵马未动,粮草先行,准备将storm用在某个项目中做实时数据分析。无论任何系统,一定要有监控系统并存,当故障发生的时候你能第一个知道,而不是让别人告诉你,那处理故障就很被动了。 因此我写了这么个项目,取名叫storm-monitor,放在了github上 https://github.com/killme2008/storm-monitor 主要功能如下:1.监控supervisor数目是否正确,当supervisor挂掉的时候会发送警告。2.监控nimbus是否正常运行,monitor会尝试连接nimbus,如果连接失败就认为nimbus挂掉。3.监控topology是否正常运行,包括它是否正常部署,是否有运行中的任务。 当故障发生的时候通过alarm方法警告用户,开放出去的只是简单地打日志。因为每个公司的告警接口不一样,所以你需要自己扩展,修改alarm.clj即可。我们这儿就支
• 我的一些“偏见”
在豆瓣发了一些牢骚,索性多说一些我个人对人对事的偏见,既然是偏见,就不会让人舒服,事先声明是扯淡,不想浪费时间的人略过。1.我们要远离新浪微博,新浪微博跟twitter不一样,twitter是为了让每个人的信息的更好更快地传播而设计的,而新浪微博是为了让权威的声音更好更快地传播而设计的。迷恋上新浪微博,你要么是权威,要么是跟随权威。成为权威的,免不了沾沾自喜,真以为自己成了“权威”。更可怕的是你不可避免地要生活在相互吹捧和喧嚣中。2.在编写代码之外,我们可能需要更多的手艺傍身,例如木匠或者厨师,以免在乱世的时候因为不需要程序员而饿死。ps.计算弹道轨迹的程序员除外。3.据说真正的牛人从不跳槽,作为大多数不是牛人,以及已经远离牛人行列的我们(跳槽超过3次以上),跳槽仍然是你提升自己的有效途径,无论是薪水还是技术。4.写简历的技巧,我慢慢领悟到了,少点技术术语,多点
最近一直在读twitter开源的这个分布式流计算框架——storm的源码,还是有必要记录下一些比较有意思的地方。我按照storm的主要概念进行组织,并且只分析我关注的东西,因此称之为浅析。 一、介绍 Storm的开发语言主要是Java和Clojure,其中Java定义骨架,而Clojure编写核心逻辑。
最近有朋友给我邮件问一些storm的问题,集中解答在这里。一、我有一个数据文件,或者我有一个系统里面有数据,怎么导入storm做计算?你需要实现一个Spout,Spout负责将数据emit到storm系统里,交给bolts计算。如果你的数据源不支持事务性消费,那么就无法得到storm提供的可靠处理的保证,也没必要实现ISpout接口中的ack和fail方法。二...
最近看了篇在google reader里分享非常多的文章,我表示很无语,文章在这里,题目是《Peter Norvig:编程语言的选择并不重要》。简单来讲这文章就是鼓吹python的,然后举了很多例子说python描述算法比Lisp容易。这个无需多说,图灵模型本来就比lambda演算更适合描述算法。 我想说的是,文中明明提了,Peter norvig说的是:就更一般意义上的编程而言,在Google和其他地方,我认为语言的选择并不如其他方面的选择那么重要:如果你有...
Fel是最近javaeye比较火的关键词,这是由网友lotusyu开发的一个高性能的EL,从作者给出的数据来看,性能非常优异,跟前段时间温少开源的Simple EL有的一拼。首先要说,这是个好现象,国内的开源项目越来越多,可以看出开发者的水平是越来越高了,比如我最近还看到有人开源的类似kestel的轻量级MQ――fqueue也非常不错,有兴趣可以看下我的分析《fqueue初步分析》。 进入正文,本文是尝试分析下Fel的实现原理,以及...
[ 共15篇文章 ][ 第1页/共1页 ][ 1 ]
近3天十大热文
- [68] 如何拿下简短的域名
- [68] Go Reflect 性能
- [64] Oracle MTS模式下 进程地址与会话信
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [59] android 开发入门
- [54] 视觉调整-设计师 vs. 逻辑
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [47] 界面设计速成
赞助商广告