参与 GitHub 开源项目

GitHub 是一个基于 git 的代码托管平台,越来越多的个人和公司纷纷加入到 Github 的大家族里来,为开源事业尽一份自己的力量。对于个人来讲,把自己的项目托管到 Github 上并不表示你参与了 Github 开源项目,只能说你开源了自己的项目,可以任别人自由下载。那么该如何参与 Github 的开源项目呢?最近自己参与了一个地图插件项目,在此把开源的概念和参与的过程给大家分享一下。

关于项目成员

一般来说,每个项目通常由一个社区来维护,社区又由不同角色的用户组成。

  • Owner:所有者,即创建该项目且在他们 Github 账户上有该项目的用户或组织。
  • Maintainers and Collaborators:维护者和协作者, 致力于一个项目并促进该项目发展的用户。通常所有者和维护者是同一个用户或组织,他们对项目库都有写入的权限。
  • Contributors:贡献者,每一个对该项目发出过 pull request 并合并到项目中的用户都是贡献者。
  • Community Members:社区成员,即那些经常使用且非常关心该项目的用户,他们在讨论功能特征和 pull request 上非常活跃。

(更多…)

继续阅读

Git主要操作详细用法

本文列举了Git中常用操作的详细用法,如果您不太了解Git,请先阅读《Git使用入门》。

原理图

+========+
|        |                                                         +---------+
|        |-----------------------------pull----------------------->|         |
|        |                                                         |         |
|        |                +==========+                             |         |
|        |                |          |                             |         |
| Rmote  |                |          |------------checkout-------->|Workspace|
|        |--fetch/clone-->|          |           +========+        |         |
|        |                |Repository|           |        |        |         |
|        |                |          |<--commit--| Index  |<--add--|         |
|        |<------push-----|          |           |        |        +---------+
+========+                +==========+           +========+

Pull操作

# 将origin这个版本库的代码更新到本地的master主支
$ git pull origin master

# 与merge类似,后面单独解释
$ git pull --rebase

(更多…)

继续阅读

使用 gulp 构建工程

Gulp 是一个基于 nodejs 的流式构建工具,它通过代码优于配置的策略不仅使得任务容易写,并且更加容易阅读和维护。Gulp 使用的 NodeJS 的流,无需在硬盘上写入临时文件和目录,让任务构建更加迅速。

下面是一个 Gulp 配置示例:

gulp.task('sass', function() {
  return gulp.src('src/styles/main.scss')
    .pipe(sass({ style: 'compressed' }))
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    .pipe(gulp.dest('dist/assets/css'))
});

上面这个例子可以看出,main.css 文件像水流一样经过SassAutoprefixer 插件的一系列处理,最终输出结果文件,一切是那么的简单,并且执行起来非常的快。 (更多…)

继续阅读

使用 Bower 创建包

bower.json

bower.json 中声明了一系列与包有关的内容,它与 NodeJS 的 package.json 或 Ruby 的 Gemfile  非常类似。我们可以使用 bower init 创建 bower.json

$ bower init

bower.json 的规范中的选项,主要包括:

  • name 包名,必选。
  • version 有意义的版本号。
  • main 字符串或者数组,指定主要会用到包里面哪些文件。
  • ignore 数组,一系列文件名或者目录,告诉bower在安装包的时候忽略指定的内容。
  • keywords 字符串数组,推荐添加,主要是帮助用户能够搜索到你的包。
  • dependencies 哈希结构,依赖的包,可以指定版本号,版本号范围参考
  • devDependencies 哈希结构,生产环境下依赖的包,版本号范围参考
  • private 布尔值,设置为true代表你想保持私有,并且将来不会发布它。

(更多…)

继续阅读

GeoTools相关介绍

Geotools是Java语言编写的开源GIS工具包。该项目已有十多年历史,生命力旺盛,代码非常丰富,包含多个开源GIS项目,并且基于标准的GIS接口。Geotools主要提供各种GIS算法,各种数据格式的读写和显示。在显示方面要差一些,只是用Swing实现了地图的简单查看和操作。但是用户可以根据Geotools提供的算法自己实现地图的可视化。OpenJump和udig就是基于Geotools的。

核心特点

  1. 为空间概念和数据结构定义了很多的接口
    • 通过JTS类库集成了对几何拓扑的支持
    • 通过使用OGC过滤编码规范可以对属性和空间要素过滤
  2. 对于数据访问API,支持要素访问、事务支持和线程间锁定
    • 可以访问多种格式的数据和空间数据库
    • 支持多种坐标参考系统和及其转换
    • 可以和扩展的地图投影一同工作
    • 可以按照空间和非空间属性来过滤和分析数据
  3. 一种无状态的,耗低内存的渲染机制,尤其在服务端环境下
    • 通过复杂的样式SLD来组成和展现地图
  4. 对于有xml schema绑定的GML文档,提供了强大的号称第四代xml解析技术gtxml。这种解析/编码技术可以应用到OGC标准中的SLDGMLFilterKMLSE,个人认为这是geotools的核心,也是Geotools处理大空间数据的手段。
  5. Geotools插件:开放的插件系统允许你为类库添加额外的格式。ImageIO-ext项目的插件允许Geotoolsgdal中读取额外的栅格格式。
  6. Geotools扩展。通过使用核心类库的这些空间工具可以提供额外的构建能力,比如swingbrewergraph。扩展模块提供了图像和网络支持、校验、web地图服务端解析,解析编码xmlcolor brewer(地图绘图)。
  7. Geotools尚不支持的。Geotools作为广泛社区的一部分可以用来孵化一些新的项目,重点是swing支持,本地和web处理支持,添加额外符号symbology,添加额外格式,生成网格等和ISO geometry的实现。

(更多…)

继续阅读

CMAQ相关介绍

CMAQ是美国1997年发布的第三代空气质量模型,它是美国环保局开发的用来模拟空气质量运算的开源项目。

90年代开始,随着计算机性能的增强,特别是高性能计算与通信计划的实施,更复杂的考虑多种大气过程、多尺度的空气质量模式的开发工作在美国展开。模式中需要考虑多种排放源,如工业、电厂、交通、生物排放等过程,研究的污染物和污染问题包括首要污染物、臭氧、颗粒物、能见度、酸沉降等。90年代末开发的代表目前国际领先水平的综合多尺度空气质量模式Models-3/CMAQ(Community Multi-scale Air Quality),本着“一个大气”(One Atomosphere)的设计理念,融入了许多当前大气化学和大气环境领域的最新研究成果,将区域对流层大气作为整体,周密的考虑所有已知的物理和化学过程,综合考虑了不同物种之间的相互影响与转化, 最大限度的模拟真实的大气环境,可用于局地到区域多种尺度光化学烟雾,区域酸沉降、大气颗粒物质等大气污染问题的理论研究与业务预报。Models-3为Third-Generation量模式三部分组成。其核心是Community Air Quality Modeling System的通称,由中尺度气象模式、污染排放模式和多尺度空气质量模式系统,所以也可以称其为Models-3/CMAQ模式。

CMAQ的最大特色在一个大气(One-Atmosphere)的观念,打破了传统模式对单一物种的模拟。将复杂的空气污染情况如对流层的臭氧、PM、有毒物质、酸沉降及能见度等问题综合处理,用于多尺度、多污染物的空气质量预报、评估和决策政策等多种途径。美国环保局研制的未来第四代空气质量模型系统,将尽可能考虑气圈、永圈、和生物圈之闯的互相作用,以便提供一个更加全面的方法对整个 生态系统中的污染物的输送和消亡过程进行预报和评估。 CMAQ是目前国际领先水平的空气质量模型系统。

(更多…)

继续阅读

CMAQ编译和安装

准备工作

  • 预装基础环境,可配置YUM源(mirrors.tuna.tsinghua.edu.cn),简单省事。
$ yum install gcc.x86_64 -y
$ yum install gcc-gfortran.x86_64 –y
$ yum install gcc-c++.x86_64
$ yum install openmpi.x86_64 –y (本文使用mpich)
  • 下载各种所需安装包
# Download CMAQ source code and scripts
$ wget ftp://ftp.unc.edu/pub/cmas/SOFTWARE2/MODELS/CMAQ/5.0.1/CMAQv5.0.1.tar.gz

# Download CMAQ benchmark input data files
$ wget ftp://ftp.unc.edu/pub/cmas/SOFTWARE2/MODELS/CMAQ/5.0.1/DATA.CMAQv5.0.1.tar.gz
# CMAQ benchmark output data:
$ wget ftp://ftp.unc.edu/pub/cmas/SOFTWARE2/MODELS/CMAQ/5.0.1/DATA_REF.CMAQv5.0.1.tar.gz
# HDF5,can be ignore
$ wget ftp://ftp.hdfgroup.org/HDF5/current/src/hdf5-1.8.12.tar.gz
# zlib
$ wget http://zlib.net/zlib-1.2.8.tar.gz
# netcdf
$ wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.3.1.1.tar.gz
# netcdf-fortran
$ wget https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-fortran-4.2.tar.gz
# ioapi
$ wget http://www.baronams.com/products/ioapi/ioapi-3.1.tar.gz
# mpich
$ wget http://www.mpich.org/static/downloads/3.1/mpich-3.1.tar.gz
# pvm3,can be igore
$ wget http://www.netlib.org/pvm3/pvm3.4.6.tgz

(更多…)

继续阅读

Git使用入门

1. 什么是Git

Git是一个强调速度的分布式版本控制软件和源代码管理系统(SCM,source code anagement),免费开源,遵从GNU v2协议。最初是由Linus Torvalds为内核开发而设计的管理软件。自从Git推出以来,已经被很多开源项目所采纳。每一个Git工作目录是一个带有完全历史记录和版本信息的仓库,不依赖于网络和中央服务器。

2. 为什么用Git

  • 更顺畅的工作流程,开发过程中,完全可以离线操作;
  • 快速,Git分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换;
  • 弹性的本地分支,在svn下,你建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令;
  • 仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净;
  • 内容按元数据方式存储,所有的版本信息都位于.git目录下;
  • 完整性好,更易于协作开发;
  • 用户群大,现在已经有成千上万个开源项目采用Git来做项目管理,github上更是有无数个代码仓库;

(更多…)

继续阅读