Zero-knowledge proof 入门
Zero-knowledge proof是广泛应用于区块链中的一个组件,可以帮助提升区块链的对隐私性和可扩展性。接下来就简单科普下Zero-knowledge proof。
概念Zero-knowledge proofZero-knowledge proof(简称 ZKP)是对事实的加密证明,且不会泄露关于该事实的任何信息。也就是说使用ZKP,你可以向别人证明你知道一件事或者做了某件事,而不告诉他这件事的具体细节。比如说你持有一个公钥,此时我要向你证明我持有你公钥对应的私钥。我可以直接将私钥展示给你来证明我确实持有,但这样就暴露了私钥信息,不安全。出于安全和隐私保护,我不直接向你展示私钥,而是让你发送通过公钥的信息给我,我对其解密成明文,并向你提供明文方便你进行验证,验证成功则证明我确实持有私钥。这个过程中我没有向你展示私钥的任何内容,但我向你证明了我持有私钥,这就是Zero-knowledge proof。
ZKP是由prover、verifier和challenge组成。
ZKP的发展历程在上面的公钥私钥的例子中,如果verifier只提出一次challenge,prover可 ...
IoTeX本地standalone模式及合约部署
BlockChain众所周知信奉的是天下没有免费的午餐,任何操作都是要收费的。此时如果你想进行些测试相关的内容或者只是想了解学习下,就不太方便进行操作。所以这里记录下IoTeX如何本地部署standalone模式,并且使用Remix进行合约部署。
其实现在docker技术已比较普及,IoTeX也提供了很多docker容器,也可以直接使用,这里由于个人原因采用从源码的方式进行部署
本地部署standalone从github上clone源码 git clone git@github.com:iotexproject/iotex-core.git,进入repo目录,执行make run。这里大概率会报错,内容是缺少某个文件,报错内容如下:
12023-08-03T18:14:33.725+0800 ERROR factory/statedb.go:99 Failed to execute state factory creation option 0x49a7520: failed to open kvstore patch, /var/data/trie.db.patch: open ...
说浅不浅的谈下CA认证
当Http协议变成Https协议时需要CA证书,简单场景下只需在Nginx上配置CA证书即可,后端服务无需更改。但是当不存在类似Nginx的服务时,就需要后端服务进行调整,加载CA证书,使其支持Https协议。
本篇文章主要介绍下Golang如何进行CA认证。
CA证书生成因为go 1.15之后废弃了CommonName,所以在生成证书时有所区别,为了方便证书的生成,针对不同的证书制定不同的配置文件。
生成CA根证书进入ca根证书所在目录,这里是./ca/
新建ca.conf文件
12345678910111213141516[ req ]default_bits = 4096distinguished_name = req_distinguished_name[ req_distinguished_name ]countryName = GBcountryName_default = BeiJingstateOrProvinceName = State or Province Name (full n ...
RxGo常用算子手册
ReactiveX简称为Rx,是基于事件流的一个异步编程API,其中事件流被称为Observable,事件流需要被Observer订阅才有意义。
Rx有多种编程语言实现,RxJava/RxJS/Rx.NET/RxClojure/RxSwift。其中RxGo是Rx的Go语言实现。
下面就来介绍下RxGo中常用的算子使用样例。
Observable & ObserveRxGO中事件流被抽象成Observable,Observable中的事件需要被订阅之后才能被消费,使用Observe进行订阅。下面是段创建事件流和订阅的代码段:
1234observable := rxgo.Just("Hello, World!")()ch := observable.Observe()item := <-chfmt.Println(item.V)
Transforming算子
Buffer
根据某个规则将Observable中的事件缓存下来然后一起发送出去。这个规则可以是根据事件的条数(BufferWithCount)或者根据时间间隔(BufferWithTime ...
Golang开发wasm程序
wasm以小巧安全的特性受到广泛的关注,但是他也有很多的局限性。这些局限性可以通过Host Function进行扩展,使得wasm与host能够进行交互,完成更多的功能。
Host Function需要import到wasm中,同样wasm中的function需要export到host中才能调用。
本篇主要记录下在Golang下,wasm function如何与host function进行交互。
环境依赖
使用wazero或者wasmtime-go作为wasm的runtime
Tinygo编译Golang为wasm文件
为什么需要Host FunctionHost Function指在Host程序里定义的方法。某些方面wasm还不太完善,比如默认情况下不能在终端上打印信息,比如fmt.Println("Hello"),此时就可以在host程序中创建一个Print(string)方法,让wasm调用这个Print(string)方法。
在Golang中需要wasm runtime将Host Function(比如Print(string))加载到wasm中即可 ...
基于Wasm的轻量实时计算
随着各行各业对实时计算的需求越来越强烈,实时计算领域的竞争也越来越激烈,呈现百花齐放的状态。
虽说Flink在实时计算领域已坐稳老大哥,但是却也阻挡不了其它实时计算框架在某些细分领域发光。
本篇主要介绍几款基于wasm的轻量实时计算框架,比如Redpanda、InfinyOn。
wasm是什么wasm是WebAssembly的简称,就是一个可移植、体积小、加载快并且兼容Web的全新格式。网上也有很多相关的介绍,可以参考下。
Redpanda来自官方的描述:Redpanda is a Kafka®-compatible streaming data platform that is up to 10x faster and 6x more hardware-efficient. It is also JVM-free, ZooKeeper®-free, Jepsen-tested and source available.Redpanda是一个实时数据平台,完全兼容kafka,并且没有外部依赖,比如zookeeper。它是用C++编写,所以也没有JVM。
由官方的描述可知它主要是对标k ...
scratch自定义扩展
今日想搞一搞scratch,使用过程中发现官方给的扩展组件中有些在国内用不了,所以就想把这个问题给修复下,方便国内用户使用。
在修复这个问题之前,现熟悉下scratch,以及如何自定义扩展。
scratchscratch是MIT开源的少儿编程工具,提供可视化的,积木式编程,降低学习门槛,丰富创作形式。我使用的是scratch3.0,它是由多个模块组成的,与本篇文章涉及比较紧密的是scratch-gui和scratch-vm,其中scratch-gui提供了可视化的操作界面,scratch-vm是提供了运行环境和扩展模块。
自定义扩展插件scratch-vm中的改动扩展插件的具体实现在scratch-vm模块中的src/extensions,当前目录中已有一些官方集成的插件,比如翻译、乐高互联相关的插件,每个扩展中都有个index.js文件,这个文件就是该扩展的主要实现入口。
自定义扩展中可以使用的积木块所在getInfo()方法中定义的,看下翻译扩展中getInfo()方法:
12345678910111213141516171819202122232425262728293031 ...
metabase导入IDE调试
最近在调研BI报表相关的工具,最后决定深入调研下metabase,于是就有了这篇文章。
之所以选择metabase是因为一下几点:
低门槛,对无sql基础的人员友好
分析功能较全,支持join
图表功能OK
部署方便对于我来说,唯一不足的是它是由clojure开发的,二开成本有点高,这才是这篇文章的诞生的真正原因,因为导入IDE编译成功就用了好几天。
环境准备metabase前端依赖node,后端以来jdk和clojure。
我是在mac环境下的,下面的命令都是基于mac的。
1、安装node之前在电脑上装过node,使用tar安装的,只是版本比较老,于是用tar包升级了node,版本如下:
12345➜ cnpm -vcnpm@7.1.0 npm@6.14.15 node@16.13.0 npminstall@5.2.2
2、安装yarnnode安装好之后,再安装yarn,安装时要选择全局安装,使用命令npm install --global yarn
3、安装jdkjdk的安装只强调一点,一定要jdk11、jdk11、jdk11
4、安装clojur ...
Flink Connector调研
上一篇Flink standlone模式下Flinkx测试介绍了使用Flinkx同步mysql,但是Flinkx在同步binlog日志时,个人感觉有点不方便,所以就对比下Flink Connector。
Flink standlone部署部署比较简单,具体可以参考这篇Flink standlone模式下Flinkx测试
启动sql client主要是为了测试下sql功能,所以我就简单采用了sql client模式。在${Flink_HOME}目录执行./bin/sql-client.sh embedded启动sql client
mysql开启binlog1234server_id=1 # 不同节点的server_id必须不同log_bin=/opt/data/mysql-data/mysql-bin # binlog日志目录binlog_format=ROW expire_logs_days=30
重启mysql服务,执行show variables like '%bin%';检查是否已经开启成功。
Flink sql实时同步mysql创建source表, ...
Flink standlone模式下Flinkx测试
FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,比如MySQL,HDFS等,也可以采集实时变化的数据,比如MySQL binlog,Kafka等。 同时,FlinkX也是支持原生FlinkSql所有语法和特性的计算框架,具体使用方式可以参考github上的项目介绍
本篇记录下在Flink standlone模式下使用Flinx同步mysql数据。
Flink部署standlone模式下载flink-1.12.2版本(因为flinkx使用的是1.12版本),简单配置下即可。修改内容如下:
12345678910111213141516vim masters127.0.0.1vim workers127.0.0.1vim flink-conf.yamljobmanager.rpc.address: 127.0.0.1jobmanager.rpc.port: 6124 # 6123端口可能会冲突,改成6124jobmanager.memory.process.size: 5120mtaskmanager.memory.process.size: 10240 ...