Clojure 实战(1):使用 Noir 框架开发博客(上)

前言

为什么要学习一门新的语言?我的想法很简单,平时OO、PO代码写多了,却从未接触过函数式编程,不免有些遗憾。考察下来,Clojure可以用来尝尝鲜,所以就决定学一学。为了给自己的学习留下些记录,就有了这样一份教程。

Clojure已经有一些不错的教程,如Mark VolkmannClojure - Functional Programming for the JVM,Storm的主要贡献者徐明明也对这个教程做了全文翻译。还有一些不错的书籍,像O’ReillyClojure Programming,都值得一读。我是从Mark的教程开始学起的,对其中没有提到的部分则是参考了Clojure Programming这本书。Clojure的官方网站上有详尽的API参考,可以作为工具书查阅。

但是,上面提到的教程都是针对Clojure语言本身的,从 Hello, world! 开始,讲解Clojure的各种语法,关键字,结构等等。虽然Clojure的语法已经足够吸引你的眼球,在REPL中敲击Clojure代码已经是一种莫大的乐趣了,但似乎还有些不够,我们想看到一个用Clojure编写的应用程序!

因为平时都是做Web开发,所以先从一个Web框架入手会是不错的选择,因此这份教程会从使用Noir框架搭建一个博客开始,带你领略Clojure的魅力。

阅读全文

开源软件架构 - 卷1:第14章 Python 打包工具

作者:Tarek Ziadé,翻译:张吉

原文:http://www.aosabook.org/en/packaging.html

14.1 简介

对于如何安装软件,目前有两种思想流派。第一种是说软件应该自给自足,不依赖于其它任何部件,这点在Windows和Mac OS X系统中很流行。这种方式简化了软件的管理:每个软件都有自己独立的“领域”,安装和卸载它们不会对操作系统产生影响。如果软件依赖一项不常见的类库,那么这个类库一定是包含在软件安装包之中的。

第二种流派,主要在类Linux的操作系统中盛行,即软件应该是由一个个独立的、小型的软件包组成的。类库被包含在软件包中,包与包之间可以有依赖关系。安装软件时需要查找和安装它所依赖的其他特定版本的软件包。这些依赖包通常是从一个包含所有软件包的中央仓库中获取的。这种理念也催生了Linux发行版中那些复杂的依赖管理工具,如dpkgRPM。它们会跟踪软件包的依赖关系,并防止两个软件使用了版本相冲突的第三方包。

以上两种流派各有优劣。高度模块化的系统可以使得更新和替换某个软件包变的非常方便,因为每个类库都只有一份,所有依赖于它的应用程序都能因此受益。比如,修复某个类库的安全漏洞可以立刻应用到所有程序中,而如果应用程序使用了自带的类库,那安全更新就很难应用进去了,特别是在类库版本不一致的情况下更难处理。

不过这种“模块化”也被一些开发者视为缺点,因为他们无法控制应用程序的依赖关系。他们希望提供一个独立和稳定的软件运行环境,这样就不会在系统升级后遭遇各种依赖方面的问题。

阅读全文

开源软件架构 - 卷2:第6章 Git

作者:Susan Potter,翻译:张吉

原文:http://www.aosabook.org/en/git.html

6.1 Git概述

Git能够让不同的协作者通过一个点对点的仓库网络对数据内容(通常是代码,当然不仅限于代码)进行维护。它支持分布式的工作流程,能够让数据内容临时分离,并最终合并到一起。

本章将阐述Git的内部实现是如何提供以上功能的,以及它和其他版本控制系统(VCS)的区别。

6.2 Git起源

为了更好地理解Git的设计思想,我们有必要先了解一下Git项目的发源地——Linux内核开发社区——所面临的问题。

Linux内核开发与其他商业软件项目有很大不同,因为它的开发者众多,且每个开发者的参与程度和对Linux内核代码的理解有很大差异。多年以来,内核代码一直都是以Tar压缩文件以及补丁的形式维护的,而当时的核心开发团队一直在寻找一个能够满足他们各方面需求的版本控制系统。

Git就是在这样的背景下于2005年作为一款开源软件诞生的。当时,Linux内核代码通过两种版本控制系统进行维护,BitKeeper和CVS,分别由两组核心开发团队使用。BitKeeper相较于当时颇为流行的CVS,提供了一种不同的历史展示方式。

阅读全文