数据采集的新时代
中午帮同事订餐,大家都想吃点什么?周末搞个团队建设,大家想去哪里玩?买保险,要提供个人信息。进医院,要先挂个号。
这几件事有什么共通之处?答案是,它们本质上都是在做数据采集。如果把这些收集信息的过程放到电脑上做,可能会用个Excel表格;如果要做个软件来处理这些事,大概最主要的界面就是一张表单(form),有文本框啦单选按钮啦多选按钮啦下拉列表啦之类的,最后还有个“提交”或者“完成”之类的按钮。
这些表单比乍一看的要复杂。比如说,你会希望表单有校验,明显不合法的数据最好就不要填进去了。再比如说,表单会有条件判断在里面,例如男性就不用问是否怀孕女性就不用问是否做过结扎。当然了,表单还应该长得好看,而且最好在电脑上和手机上都好看。更不用说还有一些并非HTML直接支持但颇为常见的数据类型,比如地点经纬度,比如照片。
你还在用HTML一个字段一个字段实现表单吗?你的开发工作量还和表单长度成正比吗?那弱爆了好吗?
金数据 是一个在线创建和管理表单、收集数据的工具。不用多废话介绍它,网站上一看就知道了。有趣的部分在于,金数据提供了 JSON格式的API ,你可以把放在金数据上的表单拿给别人去填,收到新数据的时候通过这个API推送给你自己的服务器程序。觉得金数据的表单还不够好?或者压根儿不想让金数据知道你采集了哪些数据?你还可以把表单定义抓下来,自己写程序解释这个JSON定义,得到完全自己控制的表单——听起来有点麻烦,但至少有意思,总好过一个字段一个字段写HTML。
如果解释金数据的JSON格式表单定义确实有点麻烦(或者技术挑战),这儿还有个更简单一点的解决方案。 Enketo 也是一个在线设计表单和手机数据的工具,不过不像金数据,Enketo更多像是一个帮助软件开发者的工具:你可以用Excel设计表单,然后把Excel格式的表单定义上传到 FormHub (Enketo的一个部署),然后就可以让用户在线填表;更妙的是当你把表单定义下载过来,Enketo还提供了开源的 Javascript Library 帮你显示和操作表单——所以就不用操心“自己写程序解释表单定义”什么的啦,毕竟要实现那些常见的表单功能并不是件很容易的事。
如果感兴趣怎么使用Enketo来做你自己的表单,我做了一个 简单的Demo 来演示。
$ git clone https://github.com/gigix/shivaganda.git $ cd shivaganda/village-enketo $ npm install $ bin/server.js
然后就可以去 http://localhost:8002 看这个表单了。代码非常简单,40行HTML加100行Javascript而已,表单就搞定啦,而且做成手机应用也完全没问题。点“提交”按钮的话,你得到的是一个XML格式的数据包,所以程序员就只管处理数据就好啦。
还是那话:你还在一个字段一个字段拿HTML写表单吗?那弱爆了好吗?……可是这真的还在很多我所知道的项目里发生呢。特别是来自发达国家(尤其是南太平洋发达国家,嗯,你懂的)的项目,客户似乎对于花这点工夫也不在意,毕竟一个项目上线就能赚很多钱回来嘛。但是在,比如说,UNICEF在非洲的项目里,我们没钱啊,我们资源非常受限啊,我们舍不得把程序员宝贵的时间拿去复制粘贴HTML表单字段啊,所以我们就得想破脑袋找这些法子,让程序员做必须做的事,可以自动化的全都自动化。其结果呢,就是项目做得很有意思,每段程序写下去都是有创造性的——没创造性的那些都被自动化了。
所以呢,穷人的孩子早当家,穷人的项目更好玩 :D