6035941677

“它是下一代互联网,它将重新改变世界”区块链,这个概念自2008提出到现在已经有10年的时间了,在这10年里,它到经过了怎么样的发展?怎么样的改变了世界呢?目前主要的区块链项目有比特币,以太坊和一些雷声大雨点小的区块链应用EOS,ADA,XMR等,再加上一些以太猫,莱茨狗等和一些空气币,目前真的很难找到特别有影响能真正改变世界的应用。不过话说回来,它已经改变世界了,有多少次财富再分配,产生了多少一夜暴富的奇迹,截至发文时有3000多个在交易币种,总市值近¥16439亿,大概325个交易所,每天成交额近千亿。根据IT桔子上面显示,国内关于数字货币的项目有523个,区块链基础技术55个,区块链应用技术161个,区块链行业应用813个,区块链媒体及社区176个。这只是在国内,国外还有多少声称能改造各行各业的白皮书,产生了多少个区块链公司?

中国有句古话“天下大势,分久必合,合久必分”。纵观人类社会发展,从一个一个母系/父系氏族,聚集成部落,再聚集成小国,再合并成大的国家,大国中产生的一些矛盾冲突又分裂,经过一段时间的发展最后又合并成大的国家,直到今天为止我们还享受着大国带给我们的红利。大国不单单是地域面积是大国,而是建立再各种资源集中调度,分工协作的基础上,形成的一个高效庞大的社会体系。

拿区块链想象成一个国家,突然要去中心化,去掉所有的职业分工,去掉国王,去掉军队,去掉工人,去掉农民;其中有一个人想买点粮食,然后对所有人公开招标要买100斤小麦,公开招标,谁先种出来,我先买谁的,然后所有人都去种地,其中有人运气好,刚好那段时间气候好,就比其他人都提前收获了100斤小麦,然后就买给那个人了;其他人的小麦还没成熟,还在地里长着呢,但是都没有用了,这时大家有有人要100斤玉米,然后大家都把地里的小麦都毁掉,然后都去种玉米。这个去中心化的国家,就这样一直这样进行着。后来有一些人就商量着,我们自己种很难第一个种出来,还不如大家把地合起来一块种,形成一个组人多力量大,第一个种出来的概率大的多,获得的收入由组长安排给大家按劳动力平分(矿池)。于此同时还有一些农业学家出身的人,他们在种地的同时还不断的改良着土壤,化肥,种子,后来通过杂交等技术产生的新品种,产量和生长速度比其他人的快10000倍(ASIC矿机),后来的订单几乎都被这些农业学家承包了。其他人老是抢不到订单,就不愿意了,说不公平,提出要环保,要非转基因,想把那些农业学家踢出去,农业学家当然不愿意,再不停的改良突破其他人的限制,一直相互博弈者。

想象一下,一个这样的国家社会,效率是何等的底下,资源是多么的浪费。就在这么一个去中心化的社会里,又自然的演化出小中心,专业化分工, 然后农业学家和小组长合作,后面又形成一个更大的中心,最后就形成了蒋宋孔陈四大家族集团,控制着这个国家的所有粮食生产,最后他们四大家族串通一起,哄抬粮价,最后就慢慢控制了这个国家,又形成一个新的中央集权国家。

 

世界各国的货币发展都经历类似的发展,从物物交换,到某一种特定等价物作为交换中介,再到用贝克,珍珠,石头,骨头作为货币,再到稀有金属作为货币,再到后来的铸币,再到纸币,再到现在的移动支付。不同的国家,不同的肤色,不同的人种,不同的地里位置,都经历的类似的货币发展过程,纵观货币的发展史,我们不难发现,货币发展的方向一直是”方便快捷”,随着人类认知和技术的发展,每一次货币的发展都是基于当时的技术让货币更加方便携带和容易交换。

我们再来看一下,目前市值¥8,597亿声称要颠覆所有传统货币的比特币,截至发文时54万多个区块,占有存储空间177G,这个是数据还不包括交易所内交易的数据,那个数据量要比这个大的多,如果加上翻倍不止,我们现在的手机一般是64G居多,现在一个普通256G优盘的价格大概是260左右,不考虑国内防火墙等因素,按照5Mb/s的速度同步完所有区块需要10个多小时,按BTC10分钟产生一个区块,一笔交易确认成功的时间需要0~10分钟才能完成,这两个问题,以目前的技术一时半会是不可能解决的。 当然说的这些都是它的缺点,我们来说是BTC的优点,去中心化,我们不需要银行和中心,自己就可以进行发起交易,但是我们需要先下载btc客户端和这个巨量的历史交易数据;不可篡改,因为区块链的天然特性,所有产生的交易都只能查看,不能修改,一旦交易发错将没法修改或撤销; 匿名化,一旦被盗或者丢失,无从查起,无法找回。无国界,跨国汇款往往会经过层层的外汇管制机构的把关和审核,不仅会产生高额的手续费,交易会被记录在案。BTC完全避免了这些问题,相对简单的转账,没有监管没有记录。匿名化和无国界跨境性是BTC能发展到现在最重要的原因。

BTC目前的特性满足不了货币继续向更加方便携带和容易交换的条件,区块链的去中心化特性,不符合社会的发展规律,可以说是历史的倒退或者说是分分合合种一小段时间的分。一项新技术从产生到工业应用乃至改变世界,不光需要技术本身的成熟和完善,还需要周边环境和各种配套设施的完善, 包括政策,资金,科技技术储备,人才储备,人们的认知等因素缺一不可,目前相关的依赖根本不成熟并且一时半会也成熟不了,或者说有些条件根本就不符合。

凡事存在,即有它存在的理由,从2008年中本聪提出区块链的概念,到2010年第一笔比特币和实物交易,2011~2014年:对比特币的质疑以及对区块链技术的关注,2016-2017年:区块链成为热门话题,业界开始进行深入验证与探索区块链在各行业的应用,2018年后半年,回归理性。这中间有各种各样的参与者,从最早的极客,用暗网交易非法军火和毒品交易的不发份子,到后来的以李笑来“老师”为首的割韭菜人,投机的金融机构,相信区块链能改变时间的创业者,梦想一夜暴富的我等韭菜,再到后来的大妈。共同构成了这纷繁复杂变化多样的区块链用户群。因为有各种利益群体的存在,它不会像郁金香泡沫那样一下子破灭,也不会像16~17年那样疯狂膨胀。也许会有一个能解决某个具体问题的区块链应用产生,也许慢慢淡出人们的视野,让我等吃瓜群众持续观望和见证。

717-669-9050

百度百科的解释,“区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。“,说了跟没说一样,还是不知区块链是啥东西。

用人话来说“区块链可以简单理解为一个数据库,这个数据库有两个特点,一个区块和链,一个是分布式,区块就是一个存储单元用来存放东西,链就是通过加密算法把区块链接起来,分布式就是跟这个区块有关系的个体都有完全一模一样的内容。“

举一个例子,能更容易理解,假如,小明,小红,小强,组成一个区块链网络,小明借给小强100元,把小强的欠条再复制两份同样的欠条,把原始欠条放在1号保险柜里锁上,再把钥匙放在2号保险柜里,然后把复制的两个欠条分别给小强和小红,他们3个人中超过50%的人同意以后,就确认这个借钱有效,小强和小红把各种拿到的欠条锁再自家1号保险柜了并锁上,然后把钥匙放在自家的2号保险柜了,这样一个交易就完成过了。再小红借给小强100元,同样是把欠条分给其他两人,然后各自锁在自家的2号保险柜,并把钥匙放在3号保险柜。这样以此类推,每次交易都把证据发给所有人,都把证据所在自家的保险柜,并把钥匙放在下一个保险柜里。保险柜是透明的,可以随时看到里边的内容,但是钥匙是在下一个号码的保险柜里,想销毁或者修改欠条都是不行的,除非把后面的所有保险柜都打开才行。小强如果想赖账,需要把所有人家里的保险柜都打开销毁才行。

什么是中心化什么是去中心化?

我们还接着刚才的例子,”小明和小强,一块去找村长,当着村长的面,小明把钱给小强,小强和小明确认以后,把欠条给村长,村长保存在村委的大保险柜里。“,村长在这里就是中心,这就是一个中心的化的交易。

小明,小强,小红每个人都可以自己发起叫,网络确认以后就生效了,不需要村长这个中心节点。这就是去中心化的交易。

区块链的特点:

1、去中心化

由于使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。

2、开放性

系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。

3、自治性

区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据,使得对“人”的信任改成了对机器的信任,任何人为的干预不起作用。

4、信息不可篡改

一旦信息经过验证并添加至区块链,就会永久的存储起来,除非能够同时控制住系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。

5、匿名性

由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此交易对手无须通过公开身份的方式让对方自己产生信任,对信用的累积非常有帮助。

区块链的缺点:

1.不可篡改、撤销

这个既是优点也是缺点,在区块链里没有后悔药,你对区块链的数据变动几乎无能为力,主要体现在:如果转账地址填错,会直接造成永久损失且无法撤销;如果丢失密钥也一样会造成永久损失无法挽回。而现实中如果你银行卡丢了或者密码忘记了,还能到银行营业点处理,你的钱还在。

2.交易账本必须公开

区块链是分布式,在公有链上,等于每个人手上都有一份完整账本,并且由于区块链计算余额、验证交易有效性等等都需要追溯每一笔账,因此交易数据都是公开透明的,如果我知道某个人的账户,我就能知道他的所有财富和每一笔交易,没有隐私可言。

3.当数据越大伴随的性能问题

就像前面说的,每个人都有一份完整账本,并且有时需要追溯每一笔记录,因此随着时间推进,交易数据超大的时候,就会有性能问题,如第一次使用需要下载历史上所有交易记录才能正常工作,每次交易为了验证你确实拥有足够的钱而需要追溯历史每一笔交易来计算余额。虽然可以通过一些技术手段(如索引)来缓解性能问题,但问题还是明显存在的。

4.区块链的延迟性

区块链的交易是存在延迟性的,拿比特币举例,当前产生的交易的有效性受网络传输影响,因为要被网络上大多数节点得知这笔交易,还要等到下一个记账周期(比特币控制在10分钟左右),也就是要被大多数节点认可这笔交易。还受一个小概率事件影响,就是当网络上同时有2个或以上节点竞争到记账权力,那么在网络中就会产生2个或以上的区块链分支,这时候到底那个分支记录的数据是有效的,则要再等下一个记账周期,最终由最长的区块链分支来决定。因此区块链的交易数据是有延迟性的。

ETH数据库结构

ETH的Header和Block的主要成员变量,最终还是要存储在底层数据库中。Ethereum 选用的是LevelDB, 属于非关系型数据库,存储单元是[key,value]键值对。

key value
‘h’ + num + hash header’s RLP raw data
‘h’ + num + hash + ‘t’ td
‘h’ + num + ‘n’ hash
‘H’ + hash num
‘b’ + num + hash body’s RLP raw data
‘r’ + num + hash receipts RLP
‘l’ + hash tx/receipt lookup metadata

key 的第一个字符为字段名前缀,然后加对应的内容组成key。key需要转换成对byte类型。

比如:

num = ‘0000000000000053’

key = bytearray(‘h’, ‘utf-8’);

key.extend(bytearray.fromhex(num))

key.extend(bytearray.fromhex(‘n’))

chrome Shape Detection API

Google把的机器学习,已经部署到了各种终端,在chrome 57 以后(移动的浏览器也支持,具体看官方文档),加入了  Shape Detection API,可以做一些本地的检测:

人脸识别(FaceDetector):可以给编码器或自动对焦放放提供提示,也可以给识别的用户做标记等。

文本识别(TextDetector):OCR 配合语音接口(语音能力下文也有提及),朗读图片中的文字等。

条码识别(BarcodeDetector):识别网页中的条形码/二维码,并作相应的动作,比如链接跳转等。

确认浏览器是否支持:

在浏览器地址栏输入: chrome:/flags 打开实验功能,找到 Experimental Web Platform features 并修改状态到 Enabled, 然后会提示重启浏览器, 重启以后在 console 命令行中输入: window.FaceDetector, 如果输出 undefined 则表示浏览器不支持,去升级浏览器吧。

文档和例子:

Github 地址:/github.com/WICG/shape-detection-api

文档地址:/wicg.github.io/shape-detection-api/index-zh-cn.html#introduction

一个Demo:/gist.github.com/Vtrois/49e55fd2e02b690b3dcff165b630417c

另一个Demo: /www.vtrois.com/tool-shape-detection-api.html

Tips:

中间可能会碰到一个报错:

Shape Detection API: “DOMException: Source would taint origin”

如果碰到这种情况,请保持图片地址改成和浏览的地址在同一个域名。

python金融库TAlib安装

一般情况下直接 pip install ta-lib(TA-Lib) 的话会报错,Command “/opt/rh/python27/root/usr/bin/python2 -u -c “import setuptools, tokenize;__file***, 是因为需要先安卓 ta-lib 库,然后在pip 安装就可以了。 所有安装步骤如下:

  1. 下载ta-lib,: (/ta-lib.org/hdr_dw.html)
    1. tar zxvf ta-lib-0.4.0-src.tar.gz
    2. cd ta-lib
    3. ./configure
    4. make
    5. make install
  2. pip install TA-Lib
  3. export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH    #添加环境变量  不然import 的时候会报错(也可以考虑把 /usr/local/lib 加在 /etc/ld.so.conf.d/python.conf )

 

acocotl

ValueError: Rank mismatch: Rank of labels (received 2) should equal rank of logits minus 1 (received 2).

碰到上面这个错误的时候,应该是用了后面这个计算交叉熵的方法了,如果没有用请绕过。 tf.nn.sparse_softmax_cross_entropy_with_logits

自己照着例子做练习的时候碰到上面这个错误,在网上搜,看了好多都没解决,最后看了一下,这个方法的的帮助文档。

sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, name=None)

这个是这个函数的参数说明, 第一个参数网上都说的是不用填,我们暂时先不管他

labels: `Tensor` of shape `[d_0, d_1, ..., d_{r-1}]` (where `r` is rank of 
`labels` and result) and dtype `int32` or `int64`. Each entry in `labels` 
must be an index in `[0, num_classes)`. Other values will raise an exception when this op is run on CPU, and return `NaN` for corresponding 
loss and gradient rows on GPU.
logits: Unscaled log probabilities of shape `[d_0, d_1, ..., d_{r-1}, num_classes]` and dtype `float32` or `float64`.

logits 的长度需要比 labels 多一维,就可以了。

例如:

import tensorflow as tf

labels = [[0.2,0.3,0.5],
          [0.1,0.6,0.3]]
logits = [[2,0.5,1],
          [0.1,1,3]]
result1 = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits)


如果这样用就会报这个错
ValueError: Rank mismatch: Rank of labels (received 2) should equal rank of logits minus 1 (received 2).

下面演示一下,两个方法的正确用法:

import tensorflow as tf

labels = [[0.2,0.3,0.5],
          [0.1,0.6,0.3]]
logits = [[2,0.5,1],
          [0.1,1,3]]
result1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
import tensorflow as tf

labels = [0,2]

logits = [[2,0.5,1],
          [0.1,1,3]]


result1 = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits)

总结:sparse_softmax_cross_entropy_with_logits 主要用余结果是排他唯一性的计算, 如果是非唯一的需要用到 softmax_cross_entropy_with_logits。

多看看官方文档,多理解。

python 判断 nan值

nan (Not a Number)

np.nan == np.nan

Fasel

nan 自己不等于自己,所以不能直接用 == 来判断, numpy 有个方法可以判断  isnan 就可以了。numpy.isnan()

inf 同理, 也有 numpy.isinf()

760-894-6973

装系统的时候,各种对应的版本需要对上,不然中间会有各种坑,系统崩溃等等。ubunt装了几次各种问题,最后用centos 顺利的装好了。

写文章的时候 tensorflow只支持CUDA9.0, cuDNN v7.0, 所以需要装CUDA9.0,不能直接装最新版。(CUDA9.0支持 ubutnu17.04, 不支持最新的Ubuntu 18, centos可以忽略,支持centos7.)

安装步骤:

0 首先 按照 tensorflow官方安装教程来

/tensorflow.google.cn/install/install_linux。

1 安装 gcc 内核

可参考(/docs.nvidia.com/cuda/cuda-installation-guide-linux/#verify-kernel-packages)

yum -y install gcc kernel-devel kernel-headers

2 添加Repo源

阿里云源 国内更新快
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo /mirrors.aliyun.com/repo/Centos-7.repo

上面源是为了装 nvidia驱动,下面这个是装python相关的。
rpm --import /www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh /www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum install yum-plugin-fastestmirror

python相关源
yum -y install epel-release

yum makecache

3 安装NVIDIA显卡驱动

先安装nvidia-detect,然后运行 nvidia-detect , 会显示显卡对应驱动的版本 kmod-nvidia, 安装检测出来的版本就可以了.

$ yum install nvidia-detect

$ nvidia-detect

$ yum install kmod-nvidia

我按照个过程安装完以后就可以了,有些教程中需要屏蔽 nouveau 弄不好会把系统搞坏。

(也可以手动安装从NVIDIA官网下载驱动安装,期间需要停掉图像界面,中间可能有各种问题,推荐用yum/apt安装)

4 安装CUDA

按照 /docs.nvidia.com/cuda/cuda-installation-guide-linux/ 官方教程进行即可,安卓cuda最后一步的时候,不要直接 yum install cuda,这样会装到最新版本,需要装。yum install cuda-9.0 然后按照教程添加环境变量到 /etc/profile 和 .bashrc 中

5 安装 cuDNN

下载 /developer.nvidia.com/cudnn , cudnn 需要注册 nvidia 开发者账号, 然后下载 Download cuDNN v7.0.4 (Nov 13, 2017), for CUDA 9.0, 然后:解压,copy

$ tar -xzvf cudnn-9.0-linux-x64-v7.tgz

$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

 

6 安装 tensorflow

有些可能没有 pip, 先装 python-pip, python-dev,然后pip install tensorflow-gpu 即可,如果中间出现依赖然间包冲突,把低版本的卸载掉重新装。 在pip 安装的时候可以在后面加上 -i /pypi.mirrors.ustc.edu.cn/simple/ 可以提高速度,以下是几个国内的pip源。

阿里云 /mirrors.aliyun.com/pypi/simple/
中国科技大学 7207238566
豆瓣(douban) /pypi.douban.com/simple/
清华大学 (205) 821-5746
中国科学技术大学 /pypi.mirrors.ustc.edu.cn/simple/