Mac OSX终端走shadowsocks代理

shadowsocks设置为:

  • 打开shadowsocks
  • 自动代理模式
  • 服务器(香港阿里云)

zsh作为说明

1
~ vim ~/.zshrc

添加如下代理配置:

1
2
3
\# proxy list
alias proxy='export all_proxy=socks5://127.0.0.1:1080'
alias unproxy='unset all_proxy'

Read More

Share Comments

Oraclize--DApp与互联网交互

区块链应用中,外部世界如何与智能合约交互往往是一个容易被忽视的问题,很多的智能合约应用场景是根据一些外部事件,输出相应的结果,而传统的IT数据交互方式实际上并不能投入真正的工作。例如,按照农产品价格情况来支付投保人赔款的农产品价格险保单。传统IT人员一般认为是如下的流程:智能合约会在预定的时间,从期货交易场所获取农产品价格,然后按照获取的数据采取预设的行动。听起来很简单,但却不可能实现。为什么呢?因为这里存在两个问题,一是共识问题,二是受信任方问题。

一、共识问题

区块链是基于共识的系统,只有在每个交易和区块处理过后,并且每个节点达到相同状态,智能合约才能正常运行,所有事情必须是精确一致。如果节点之间对数据状态有歧义,整个系统就无法可信稳定运行了。在上面的案例中,智能合约由链上的每个节点独立执行,因此如果智能合约从外部服务获取数据的话,这个数据获取过程是由各节点重复和独立完成的,假设这个区块链有100个节点,那么就会有100条获取数据的请求从每个节点发送到期货交易场所,但是因为这个数据来源于区块链外部,价格是实时波动的,由于网络延迟、节点处理速度等各种原因,每个节点获取的并不是同一时刻的价格,输入到智能合约的价格数据也就不同,因此对应的各节点智能合约输出也会不同,在这种情况下,整个区块链的信任基础就会崩溃,无法达成共识。

解决的方法其实很简单,不通过智能合约发出外部数据获取指令,而是由第三方发送一笔区块链交易,在交易中附加需要的数据,交易会将数据嵌入区块,并同步到每个节点,从而保证数据的完全一致,因此可以用于智能合约的计算中。总结就是由第三方将数据推送进区块链,而不是由智能合约将数据拉取进去。

同样的问题一样发生在智能合约调用外部世界事件的情况。还是上面的例子,很多人会想象价格到预定目标,智能合约去调用期货公司的API接口,实现卖出期货的功能,从而锁定保单风险,但是如果每个节点都独立执行智能合约,那么应该由哪个节点去调用这个API呢?如果选择某个节点去执行,但是如果该节点发生故障了,无论是不是故意的,怎么保证其可靠性呢?而选择全部节点去完成API调用的话,是否每个节点都可信,怎么保证API密码的安全呢?况且一个API同时被多节点高并发频繁调用也是不合适的。

解决方法参考上面的问题,智能合约不需要获取外部API,而是第三方实时监控区块链状态,然后做出相应的反馈。例如,合作的期货交易所实时监控区块链,然后根据链上的交易情况做对应的资金转移,这样就不会对区块链共识产生威胁。

二、受信任方问题

Read More

Share Comments

BIP32, BIP39, BIP44

BIP 全名是 Bitcoin Improvement Proposals,是提出 Bitcoin 的新功能或改进措施的文件。可由任何人提出,经过审核后公布在 bitcoin/bips 上。BIP 和 Bitcoin 的关系,就像是 RFC 之于 Internet。

BIP32, BIP39, BIP44

HD Wallet虚拟货币钱包里面使用的就是这些东西 ,包含其设计动机和理念、实作方式、实例等。
  • BIP32:定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等。

  • BIP39:将 seed 用方便记忆和书写的单字表示。一般由 12 个单字组成,称为 mnemonic code(phrase),中文称为助记词或助记码。例如:

Read More

Share Comments

Centos7 安装 cmake 3.0+

当我们做一些应用的时候编译报错cmake 版本过低,Centos7上面默认cmake版本为2.8.11版本很低。

升级cmake

cmake 源文件下载地址

官网传送门

qq%e6%88%aa%e5%9b%be20161026105808

Read More

Share Comments

安装insight

安装insight

insight地址 :https://insight.is/

环境

  • Node v6.11.3
  • ZeroMQ v4.04

安装ZeroMQ

安装编译环境 sudo yum groupinstall -y “Development tools”

1
2
3
4
5
6
7
8
wget http://download.zeromq.org/zeromq-4.0.4.tar.gz
tar zvxf zeromq-4.0.4.tar.gz
cd zeromq-4.0.4
./configure
make
sudo make install
ln -s /usr/local/lib/libzmq.so.3 /usr/lib/
ldconfig

安装bitcore-node

我全局怎么也安装不上,只能这么装了。。

1
2
3
4
5
npm install bitcore-node
./node_modules/bitcore-node/bin/bitcore-node create mynode
./node_modules/bitcore-node/bin/bitcore-node install insight-api
./node_modules/bitcore-node/bin/bitcore-node install insight-ui
./node_modules/bitcore-node/bin/bitcore-node start
Share Comments

iOS 11 安全区域适配

导语:本文主要是对iOS 11下APP中tableView内容下移20pt或下移64pt的问题适配的一个总结。内容包括五个部分:问题的原因分析、adjustContentInset属性的计算方式、什么情况下的tableView会发生内容下移、有哪些解决方法、解决这个问题时遇到的另外一个小问题。

Read More

Share Comments

Go examples

Go by Example

Hello World

我们第一个程序就是打印经典的“hello world”,下面是完整的代码

1
2
3
4
5
package main
import "fmt"
func main(){
fmt.Println("hello world")
}

要运行这个程序,将代码保存为 hello-world.go,然后使用go run

有时候我们想让程序编译成二进制文件,可以使用go build,然后就可以直接运行了。

Read More

Share Comments

mac版unity3d使用vscode编辑器

参考:http://blog.csdn.net/pz789as/article/details/53504724

由于在Mac上,使用unity自带的Mono并不好用,特别是无法切换输入法,让人很纠结。

但是还好微软推出了vscode,用起来挺不错的!

首先去官网下载最新的vscode,解压后把包拖入launchpad里面去;

Read More

Share Comments

MySQL索引原理及慢查询优化

原文出处: 美团技术博客

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。
本人从13年7月份起,一直在美团核心业务系统部做慢查询的优化工作,共计十余个系统,累计解决和积累了上百个慢查询案例。随着业务的复杂性提升,遇到的问题千奇百怪,五花八门,匪夷所思。本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化慢查询。

一个慢查询引发的思考

1
2
3
4
5
6
7
8
9
10
select
count(*)
from
task
where
status=2
and operator_id=20839
and operate_time>1371169729
and operate_time<1371174603
and type=2;

Read More

Share Comments

C/C++ 静态链接库(.a) 与 动态链接库(.so)

平时我们写程序都必须 include 很多头文件,因为可以避免重复造轮子,软件大厦可不是单靠一个人就能完成的。但是你是否知道引用的那些头文件中的函数是怎么被执行的呢?这就要牵扯到链接库了!

库有两种,一种是 静态链接库,一种是 动态链接库,不管是哪一种库,要使用它们,都要在程序中包含相应的 include 头文件。我们先来回顾一下程序编译的过程。如下图:

我们结合gcc指令来看一下每个阶段生成的文件:

Read More

Share Comments