August 7, 2017

Bloomfilter算法实现

Bloom Filter Bloom Filter是由Bloom在1970年提出的一种快速查找算法,通过多个hash算法来共同判断一个元素(字符串)是否在这个集合内,空间利用效率很高。Bloomfilter中保存了一个n位的bit数组, 当一个元素被加到这个集合时,这个元素的key通过k个hash算法生成k个值,然后将内存数组对应的k个位置置1。判断一个元素是否在集合中,只需要查看Bloomfilter的内存数组k个位置是否全为1。当其中一个不是1时,此元素不在集合中。bloomfilter判断一个元素属于当前集合时,存在一定的误差率e。 误差率e bloom filter-math详细的推倒了误差率e和集合元素n,bit数组m以及hash算法个数之间的关系。总结如下: e = (1 - ((1 - 1/ m) ^ kn))^k ~= (1 - e^(-kn/m))^k k = (m / n) * ln2 //k最优解公式 m>=nlg(1/E)*lge // 当误差率e<E时,m和n的关系 ... e < 0.1: k = 3.321928, m/n = 4.79 e < 0.01: k = 6.643856, m/n = 9.58 e < 0.001: k = 9.965784, m/n = 14.37 实现 Bloom Filter基于简单的加法Hash算法实现了一个Bloom Filter。通过给定误差率e和集合amount生成最优的Bloom filter。

July 27, 2017

ipfs上部署静态网站

IPFS ipfs是一个内容可寻址的点对点超媒体协议。基于http协议的网络中,我们获取内容需要先连接上内容所在的服务器,然后获取内容。ipfs网络中,所有的文件通过加密哈希映射到一个空间中,并且能够保证唯一。 在获取一个内容时,我们知道这个内容对应的哈希key,通过DHT算法,可以在一个巨大的网络节点中快速找到拥有数据的节点(在一个拥有10,000,000个节点的网络中只需要20跳),从而检索出数据。 除了上述技术之外,IPFS也融合了git的版本管理,BitTorrent的bitswap,Self-Certified Filesystems等技术。 IPFS的基本操作 // ipfs 初始化 > ipfs init initializing ipfs node at /Users/jbenet/.go-ipfs generating 2048-bit RSA keypair...done peer identity: Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z to get started, enter: ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme // 启动deamon > ipfs daemon Initializing daemon... API server listening on /ip4/127.0.0.1/tcp/5001 Gateway server listening on /ip4/127.0.0.1/tcp/8080 // 获取文件 ipfs cat /ipfs/QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ/cat.jpg >cat.jpg open cat.jpg //上传文件 > hash=`echo "I <3 IPFS -$(whoami)" | ipfs add -q` > curl "https://ipfs. Read more

July 18, 2017

使用nodejs部署智能合约

使用nodejs部署智能合约 实现智能合约的方式很多种,可以用truffle框架来实现,编译,部署。 这里介绍一种简单的使用nodejs来实现,编译,部署的方法。 创建一个nodejs项目,实现一个简单的智能合约。 mkdir sm && cd sm npm init mkdir contracts && cd contracts vi BaseToken.sol //BaseToken.sol contract Token{ address public owner; mapping (address => uint) public balances; event Sent(address from, address to, uint amount) function Token(){ owner = msg.sender; balances[owner] = 100000000; } function send(address receiver, uint amount){ if (balances[msg.sender] < amount) return; balances[msg.sender] -= amount; balances[receiver] += amount; Sent(msg.sender, receiver, amount); } } 这个合约实现了一个造币和转币的逻辑。 我们的合约是运行在evm上面的字节码,solidity是静态语言,需要通过编译器生成evm的字节码。 Read more

October 29, 2016

Hugo搭建Github Pages静态网站

安装Hugo创建初始网站 安装hugo$ brew update && brew install hugo 创建自己的站点$ hugo new site mysite 会生成以下目录 content/ static/ themes/ config.toml config.toml是网站的配置文件,一个TOML文件,全称是Tom’s Obvious, Minimal Language,这是它的作者GitHub联合创始人Tom Preston-Werner 觉得YAML不够优雅,捣鼓出来的一个新格式。如果你不喜欢这种格式,你可以将config.toml替换为YAML格式的config.yaml,或者json格式的config.json。hugo都支持。 进行个人配置 baseurl = "http://slumber1122.github.io" title = "長風無時" languageCode = "en-us" theme = "hugo-zen" author = "wade van" copyright = "wade van All rights reserved." [params] logo = "/images/me.jpg" 安装Theme 进入 mysite $ cd mysite在gohugo选择一个皮肤, 安装皮肤$ git submodule add https://github.com/spf13/hyde themes/hyde 新建文章 content目录里放的是你写的markdown文章,layouts目录里放的是网站的模板文件,static目录里放的是一些图片、css、js等资源。 创建一个about页面$ hugo new about. Read more

© Wade Van 2019

Powered by Hugo & Kiss.