Recently in Happy Hacking Category

再度更换平台

|

-_- MT 用起来感觉很好,不过改模板和找 plugin 实在有些痛苦。 所以我又换成 Wordpress 了……你们骂我吧…… MT 上的文章都在,不会删除。新的 blog 地址为

http://snakehsu.info/wordpress/

直接输入 snakehsu.info 或 blog.snakehsu.info 也可。

新的 feed 地址:

在国外或轻功好的读者请使用

http://feeds.feedburner.com/SigmaCube

国内读者请使用豆瓣9点对付一下先。

GRASS GIS 6.x 中的栅格和矢量数据可以通过 spgrass6 这个 R 的扩展包导入 R 进行统计和其他计算。用 readRAST6() 导入的栅格数据是一个称为 SpatialGridDataFrame 的结构,含有栅格位置、尺寸和投影等信息,栅格的属性数据则按照先从左到右,再从上到下的扫描顺序排成一个列向量,和对应的坐标位置一起储存在结构中。为了方便计算,这个向量可以用类似 as.vector(data.frame(readRAST6())[,1]) 这样的方式提取为普通的数值向量(is.numeric()=TRUE)。但运算完毕后要再将其导出到 GRASS GIS 中,由于缺少空间信息,略微有些麻烦。

这里提供了一些有用的讨论来解决这个问题。虽然向量不能直接导入 GRASS,但是向量可以赋值给一个 SpatialGridDataFrame,例如这样:

> ensoeffarea<-array(0,dim<-c(13640,3))
> ensoeffarea[,1]<-ndvimaxvalues-ndvielvalues
> ensoeffarea[,2]<-data.frame(readRAST6(
+ as.character(filename[1,1])))[,2]
> ensoeffarea[,3]<-data.frame(readRAST6(
+ as.character(filename[1,1])))[,3]
> temp<-readRAST6(as.character(filename[1,1]))
> temp$temp<-ensoeffarea[,1]
> writeRAST6(temp,"enso-strike-area","temp")

要注意用于赋值的向量必须是列向量。而且临时使用的这个 SpatialGridDataFrame 的各种空间信息必须与向量所要求的一致,特别是各像素或特征对象数值与像素位置/对象 id 的对应关系不应有变化。否则就只能采用比较费劲的先导出成文本文件再修改导入 GRASS 的方法了。

Linux vs. Windows: A new ideology

|

刚才跟 roomy 聊了几句 Linux 和 Windows 的不同。他主要使用 Windows,也装了个 Ubuntu 偶尔看一看。他认为 Windows 将细节隐藏在幕后的做法有时候是好的,但如果需要折腾就很不方便。
而不转向 Linux 的原因之一是很难弄清楚软件该到哪里下载,某个组件出了问题要如何处理……等等的问题。我刚要向他介绍诸如 sf.net 和 slashdot.org 这样的网站,忽然意识到要一个只是把计算机当作工具使用的用户投入时间去接受这一整套 Linux 用户习以为常的使用计算机的方式是比较困难的。从 Windows 到 Linux 的转换不仅仅是寻找代用软件那么简单。它要求用户学习和接受从 Unix 一脉相承而来的一套 nerdy 的文化,也难怪那么多 Windows 用户对 Linux 都是望而生畏。另一方面 Linux 用户中也有这种态度:如果有一天 Linux 成了主流桌面,我们就去折腾那些更少人在用的东西。这样说起来,Ubuntu 之类也许是吃力不讨好——易用性做不过 Windows 和 Mac,严肃的 Linux 用户又看它不上。做一个迎合 geek 口味的发行版或许才是正道。

C 语言练习一则

|

K & R C Exercise 1-9:将输入拷贝到输出,并将多于一个连续空格转换为一个空格。


29 #include<stdio.h>
30
31 /* Read input and replace one or more blanks by a single blank */
32 main()
33 {
34         int c, bl;
35
36         bl = 0;  /* bl used as a flag to determine whether a blank is needed before putchar( c )*/
37         while ((c = getchar()) != EOF)
38                 if ((c != ' ') && (bl == 0))
39                         putchar( c );

40                 else if ((c != ' ') && (bl != 0))
41                 {
42                         putchar(' ');
43                         putchar( c );
44                         bl = 0;  /* bl != 0 means blank(s) in front and needs to be dealt with */
45                 }
46                 else
47                 {
48                         ++bl;
49                 }
50 }

我知道标准答案肯定不是这样的,因为还没有学 else 和 && 呢……
这里 给出了一些解法。

好吧,我知道这可能是 Pipes 最土最容易想到的应用了。不过我前几天在被堆积如山的来自 BBC 和 The Economist 以及 lifehacker 的 feed 困扰时居然也没有想到这点。

我使用的 Pipes 部件都比较简单,无外乎收集 feed,关键词选择以及时间控制,最多加上一个 union。实现的功能主要是从一系列相同主题的站点中搜集 feed 并按关键词挑选出我想看的内容,时间太久没有时效性的就 block 掉。如此以来我需要用来了解天下大事的时间就大大减少了,而且在 Google Reader 里总的 feed 数量减少到6个,也就意味着鼠标的点击和等待时间都减少了,yay!

目前发现的问题是像 blogbus 这样逆历史潮流而动使用 GB2312 编码的 feed 在通过 pipes 后无法被正确识别编码,也许 Pipes 应该加入对编码的识别,或者加个 iconv 部件?从一般 html 页面生成 feed 的能力很赞,不过目前还没有搞清楚怎样导入。

我发布了一个 Science News pipe,内容是 Nature、Science、NewScientist、Scientific American 和 Slashdot Science section 的有关环境和生态学研究的新闻,欢迎使用、克隆、改进之。

这本小册子32开本,68页,我大概拖沓延宕了一年?翻译页面上的版本信息表明我是在今年1月开始的,想想觉得真奇幻……或者很魔幻?

这本小册子对我来说还是很难翻译的,很多表述英文里完全正常,用中文的话总是有那么一点欠缺。大概我的水平还是太有限,信达雅三者往往只能争取信,多数时候还可以达,雅就谈不上了。而且中间由于回国的时候上网不便和天天耽于享乐(嘿嘿),中断了几个月,前后的一致性恐怕也成问题。我自己收获倒是不小,对于它介绍的 i18n 和 l10n 有了更深一步的理解。

这个项目总共有六本小册子,我一个人搞完了其中两本的翻译,不想再搞其余的了,因为翻译过程基本就是我一人在工作,上一本完成的时候还有一个人帮忙完成了校对,一人完成了 PDF 版本的制作,项目组织者完成了 wikibook 和原网站的上传,目前这本不知道还能不能找得到人校对了。与我翻译的第一本同时开始的还有两本同系列的小册子,目前看上去还没有人理会,还几乎停留在一片空白的状态。

其实我在上半年回国的时候给网站的组织者发信说需要找人接手,而几个月过去后还是我一个人从落下的地方开始翻译的事情,就暴露了问题。这种志愿者通过网络组织起来的活动形式最大的优势应该是在于合作,但是组织者似乎没能建立一种机制方便合作。首先是项目的建立和管理,没有一个优先级的标志,也没有资源分配的机制,大家凭自己的兴趣可以任意地建立和认领项目。这在 wiki 一类的大型网站和一些主题确定的 fan site 也许是行得通的,但一个用户少,活跃用户更少的小网站这样做只是导致资源被稀释。第二,没有激励机制和同伴压力。对于志愿者来说,定一个 deadline 其实并不会把他们吓跑,只要 deadline 和工作量的制定是在协商和试错的基础上进行的。如果有一支10个人的志愿者队伍,每周给每个人一页32开小册子的翻译量,现在这六本册子也早就翻译完了。而当我一个人在翻译,其他人在讨论完全不相干的问题的时候,我简直连同伴动力都没有了。第三是纯技术的问题,网站使用 drupal 做内容管理和版本控制,本身也并不鼓励松散的,跨越地理位置的合作(连 revision diff 这样的功能都没有)。如果使用 git 或者 subversion 一类的版本控制系统,搭配 trac,或者起码用 mediawiki 这样的可以支持 diff 和讨论页的平台,我会更有兴趣写一下 change log 并参与到对别人工作的讨论当中的。

以上的这些牢骚都是在与今年秋季我参加的另一个文档翻译项目——Gentoo Weekly Newsletter 的比较中发出的。GWN 的中文翻译提供了工业标准的工具:PO 文件和 git 管理下的 XML,良好而活跃的交流平台:Google Groups 和 irc,还有团队工作模式下 deadline 带来的适当的同伴压力……zhllg 实在是个 man of niubility。

A flavour of AVHRR

|

In the past few days I have been trying to find suitable software and process for AVHRR data processing. The METOP AVHRR format looks like an enigma. It should be compatible to AVHRR, but despite that I tried hard to find a tool to unpack the file, and even tried to write a Fortran program myself, I couldn’t find anything that decodes the file downloaded from CLASS.

What made the search not totally fruitless is a image processing tool, BEAM, which works nicely with AVHRR and a number of other data files. I can use it to open AVHRR 16-bit and 8-bit Level 1b file (10-bit not tested yet), do some simple preprocessing and statistics, then export the file as GeoTIFF or other formats, which can be read by GRASS GIS + GDAL. It is worth noting that BEAM is free as in free speech software published under GPL v3 and can run on any platform with Java Runtime Environment.

With the help of BEAM and GRASS I managed to produce my first AVHRR-derived NDVI image this afternoon. Seems I am finally on track. In the coming days there are a number of things that I can look at:

  • AVHRR Pathfinder data, their advantages and limits, suggested by one of my supervisor;
  • Snow and ice cover mapping with AVHRR;
  • Time series data and change detection;
  • MODIS data and its interoperability with AVHRR.

因为工作的需要,最近一段时间的工作重点是搜集和处理遥感图像。具体要怎么处理还没有决定,只知道大概要做的东西包括几何校正,大气校正,geoencoding/registration,后期肯定会做 change detection。这些在 ERDAS Imagine 里面是相对简单的,基本都可以点点鼠标解决。但是目前学校的 IT staff 还没有给我的电脑装这套软件,为了立即开展工作我准备找一找自由/开源的替代方案。

http://opensourcegis.org/ 上给出了一个比较全面的与 GIS/RS 有关的自由/开源项目的列表,虽然其中成气候的项目还很少,而且像 Imagemagick 和 Free Type 这样的通用项目都列上去了,不过这方面的开发工作确实比我想象的更多。在 GDAL 出来后出现了很多 GIS 项目,但地学图像处理方面的软件相对还是很缺乏。

一番比较后我决定使用 GRASS GISnip2 来完成工作。GRASS GIS 是目前自由/开源 GIS 中最成熟的项目(应该不用加“之一”了吧)。以前我用它做过一个简单的模型输出可视化,但没注意到它还有处理遥感图像的功能。看了它的手册和一些搜索之后,结论是它可以用来做几何与大气校正、合成和分类,虽然分类的算法可能没有商业软件包那么多样,不过理论上说可以自己写个实现,已经有人做出了神经网络分类方法的实现

nip2 是 VIPS 库的一个前端,号称是介于 Photoshop 与 Excel 之间的图像处理软件。其特点是可以用控件和脚本结合对图像方便地进行复杂的处理。虽然它的设计似乎并没有特别考虑地学应用的需要,但它有一个非常吸引人的特性,就是对大图像的处理速度非常快,而且可以处理大于内存容量的图像。我准备用它来处理观测角度与读数关系不大的图像,也可能用它来做分割和组合。

如果两周后我觉得这两个软件用得比较顺手,可能会一直用它们完成论文。商业软件包确实易用,能够节省一些学习和适应的时间,但我觉得用自由/开源的软件能让自己对 under the hood 的东西了解更多一些,而且现在掌握了 GRASS GIS 以后还可以很快上手 ERDAS Imagine,反之则不然。

Trying to choose a plotting package

|

During the process of writing my review, I meet the problem of plotting. For now I can copy figures from other people’s work but I think there will be times when I need to draw my own plot.

There are a number of plotting software packages out there. Some are used by a lot while some have a relatively small user base. For one who want to get some help from the community, it is important to choose one that has a friendly syntax/interface and a larger user base. For now I am looking at Asymptote and gnuplot. They are both powerful packages with extensive features, both support LaTeX well. Both have good documentation, which make the choice even harder to make.

In terms of language they use, Asymptote seems to be more formal, using structures more like those of C++ and Java. gnuplot seems to be more similar to (Bourne Again) shell scripts. If I have C++ programming experience it should be easier to pick Asymptote, but in fact I am more familiar with shell scripts and a little bit Fortran.

Taking a closer look, I think gnuplot is better at plotting data and non-parameter functions, as it is easy to do so in a sequential way, and it can read inputs from standard output (Asymptote seems cannot). But for more complicated graphic, the language used by Asymptote really boost it to a higher level.

The best way seems to be to learn both packages, as they have different advantages. But learning both at the same time seems to be very challenging. Without much drawing at hand, perhaps I’ll start with gnuplot.

迁移工作基本完成

| | Comments (2)

随着 blog entry 数量的增加,迁移也越发费时费力了…… 不过 MT 的表现从目前来看很值得。

目前暂时开放匿名 comment,如果垃圾评论太多的话就要考虑只允许登录的人评论了。

About this Archive

This page is a archive of recent entries in the Happy Hacking category.

Academic Thought is the previous category.

Home is the next category.

Find recent content on the main index or look in the archives to find all content.

Powered by Movable Type 4.01