我们在开发的过程中经常为遇到生成唯一标识符的情况,一个订单,一笔交易,等等。

以前

先上以前的代码:

1
var time=new Date().getTime();
  var randomNum=Math.floor(Math.random()*1000+1);
  return ''+time+randomNum;

很麻烦而且唯一性并不是很好。

node-uuid

在这里给大家介绍一种比较方便的生成方式:

浏览器

1
<script src="uuid.js"></script>

// Generate a v1 (time-based) id
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'

// Generate a v4 (random) id
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'

###node.js

1
npm install node-uuid
var uuid = require('node-uuid');

// Generate a v1 (time-based) id
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'

// Generate a v4 (random) id
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'

具体详情:点这

注释和共享

Ripple之我见

发布在 ripple

什么是Ripple?

这里直接略过了,因为我写的没别人写的好。
中文点这
英文点这

Ripple能做什么?

  1. 炒币,到现在我所知道的从事与ripple相关的事情大部分还是
    将它与其他虚拟货币同等对待,也就是说,绝大多数人
    还是以炒币的形式来接触ripple。
  2. The Future of Payments,这是官网的标题,ripple致力于
    形成一种全球互通的价值网络,各种货币(美元,人民币,欧元,
    BTC,LTC…)在这一网络中可以互通,可以快速的达到汇款,体现等银行所能处理且更强大的功能。而在此过程中,ripple币只是一种媒介

我见

所以ripple的目标并不是多数人看到的那样——虚拟币。它更是 一种未来的支付方式,这才是它真正的精髓所在,核心所在。
但是鉴于ripple现在还是beta版,而且十分超前,所以在此本人有以下思考(针对中国大陆):

  • 协调好政府监管:这是我认为在大陆做ripple 70%需要考虑的事情,btc火遍全球,阿川一句话还不是在中国活不下去;余额宝,那么NB而且是中国本土的东西,但是动了银行的奶酪,阿川一句话,你就别想好过,所以解决以上问题有两种方法:1.协调好政府监管,掌握国家政策的风向标,2.干掉阿川(估计你没这能耐,况且干掉这个阿川还有千千万万个阿川)。
  • 不要一开始直接做ripple银行类的业务,存钱,体现等(可以有,但不要主打这种业务),从侧面出发,实现主打一种借助于ripple的业务,让大家先认识ripple,了解它的优点,然后慢慢开放银行类的业务。(避免直接被银行抵触)。
  • 现在的riiple client相对于普通人还是十分难用的,特别是那么专业的receive address 和 secret key。所以假设自己做钱包的话,最好能找个替代品,比如像qq号那样,在我们网上给它加上个容易记住的代号。另外就是炒币类似的操作,可以再不起眼的地方,主要面向客户的还是以支付网络的形式。

注释和共享

ubuntu升级到14.04

发布在 ubuntu

昨天ubuntu刚刚出了最新版的14.04。本着伪Geek的范,一定得试试不是。以前都是直接重装系统但是对于开发者的我而言,简直就是痛苦痛苦,各种配环境,各种装软件,换个系统下来怎么也得一天。所以今天试一下系统升级。

对系统更新

1
sudo apt-get update && sudo apt-get dist-upgrade

对系统进行升级

1
sudo update-manager -d

Software Updater软件自动打开进行升级

几秒之后你会看到ubuntu 14.04是available的字样。点击升级就可以。
然后等待就可以了。。。准备试用了!!!

PS:

在这过程中可能会遇到

1
请使用 apt-cdrom,通过它就可以让 APT 能识别该盘片。apt-get upgdate 不能被用来加入新的盘片。

这样的问题,遇到这个问题,只要

1
sudo gedit /etc/apt/sources.list

把不用的注释掉就行,比如将cdrom的那一行注释掉。

注释和共享

准备

  • 安装node.js开发环境(略过,不知道的请google);
  • 了解cheerio库,英文好的点这,英文没那么好的点这
  • 熟悉async(非必须),只是我比较喜欢用这个,之前写过一篇博客,大家可以看下
  • 了解node.js HTTP模块

查看页面结构

明确数据抓取页

这一步是为了分析你要抓数据的可行性,说白了就是看查看页面源代码分析其dom节点。在这里我们以58同城的租房栏最为目标数据抓取页。

分析dom节点

大家可以看源代码,我们要抓取的数据都是包含在一个一个table标签里面,table下面的每一个tr都是一条目标数据。

编码

这里先把代码放上–gist,以便大家可以对照看下面的讲解。
ok,下面进入最重要的一步,编码
我们使用的是node.js http get请求;

获取你要抓取的总页数

(你总不能抓一页就完事吧,要抓完)

1
function getPageNum(callback){
var options = {
host: host,
port: 80,
path: path,
headers: {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36'
}
};
var html = ""
http.get(options,function (res) {
res.on('data', function (data) {
html += data;
});
res.on('end', function () {
var $ = cheerio.load(html);
var pagenum=$('.pager').find('a').length;
var pager=$('.pager').find('a').eq(pagenum-2).text();
callback(undefined,pager);
});
}).on('error', function (e) {
callback(e);
})
}

上面我们定义了一个方法,发送http请求获取总的页数,
大部分都是http get请求的代码。核心代码:

1
var $ = cheerio.load(html);
var pagenum=$('.pager').find('a').length;
var pager=$('.pager').find('a').eq(pagenum-2).text();

在这一行里,大家可以查看页面源代码,发现其在 class:pager
的标签里包含着页数,而其中包含着好多a标签。而总页码数位于倒数第二个a标签中所以在上面我们可以获取总页数。

抓取数据

先上代码

1
function gettitle(path2,callback){
     var options = {
        host: host,
        port: 80,
        path: path+path2,
        headers: {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36'
        }
    };
    var html = ""
    http.get(options,function (res) {
        res.on('data', function (data) {
            html += data;
        });
        res.on('end', function () {
            var $ = cheerio.load(html);
             $('.main').find('table').find('tr').each(function(i,ele){
             	title.push($(this).find('h1').find('a').text().trim());
             });
             callback()
 
        });
    }).on('error', function (e) {
    	callback(e);
        })
}

从网页的源代码可以看出我们房屋信息的列表去全都包在一个个table的tr中,
所以我们首先找到其中的table,再选出其中的tr标签,然后对每个tr进行操作,摘出
其中的房屋题目。

PS:

由于这篇文章断断续续写的,所以到后期写的细节方面多有不足,
对应着我写的博客,和代码相对容易明白一点,但是首要因素是
明白async 和 http get请求。

注释和共享

  • 第 1 页 共 1 页

yuansc

生命不息,奋斗不止


改变世界