比特币本地后台数据库结构技术解析
https://baya.github.io/2017/09/04/build-our-btc-system.html
这篇文章比较详细解释了比特币本地的数据库结构,很赞。
1. 匿名
可能是中本聪比较神秘,玩币的人竟然交易是匿名的。
2. 去中心化
最大的误解,去中心怎么可能,反自然规律么?正确的解释是:利用了p2p网络的特性,让区块链数据具备了异地备灾特性,同时网络上每个节点可以获得从其他节点得到的完整数据,并有权对所有数据进行查看。
3. 不可篡改
如果你从网络同步得到了数据,数据在你的本地保存,那么你就可以篡改,可以在链的中间截断,把后面的所有块重新伪造一遍,并且利用某种强大的计算力(量子计算),把这条链推广到网络,让网络上的其他节点同步这条链。区块链只能保证参与节点不作恶的情况下,区块链上的数据是可信的。
4. 智能合约
触发合约生效的条件,需要从智能合约系统外部倒入,而外部系统是否可信根本无从控制。
5. 创业发币(ICO)
通过发币创业,简单的说是预期未来会有很多韭菜购买你的币,无论创始人多么正直努力,币系统背后没有任何社会贡献,紧紧是一场旁氏游戏。这样的创业,对社会有害。
jest测试前后端代码
虽然区块链已经热到爆炸,但是市面上对区块链开发框架的设计太少了。对于区块链的运行原理可能很多人都已经摸的差不多了,但是要从无到有制定自己的区块链,还是难上加难,只能基于现有的账单区块链去扩展。
现在非常期待用python或javascript写的区块链类库,不需要它提供完整的区块链运行时,只需要提供非常充足的语言,把数据结构、挖矿、交易、验证等等封装好,由开发者自己根据这些语言特性,去决定怎么组合,怎么设计自己的区块链。
说到底,感觉还是行业对区块链对抽象程度不够,还无法完全脱离账单对概念,把区块链抽象成纯的数据库。看到群里还有人讨论,说要用区块链做聊天工具,我觉得聊天本来就带有私密性和即时性,区块链本身的特性就是和这种需求相反的,根本没有必要把现有的产品都用区块链去重新构想。我想区块链的出现,一方面是可以解决一些现有问题,另一方面是可以激发一些创新。现有问题,比如金融领域的信任问题,软件、内容的版权问题,文件的法律效应问题,可信认证问题等等。如果把所有的东西都区块链化,不见得是一种进步。世界还是要多样化才精彩。
2018年前端核心关注点
我认为2018年可能会重点关注点几个技术点:
webGL:web图形处理的终极,特别是3D这个领域,它将直接解决VR、建模、地图,甚至看房、看片等各种web端端视觉问题。如果基于webGL开发应用,那么现在不断讨论的前端视图库,例如react,甚至包括flex、grid布局,都会被碾压。
webRTC:web上的p2p技术,已经实现了接口,不需要自己再跑去node端做p2p集成,连穿透都已经做了,所以简直是逆天的技术。问题在于,你可以用它做什么?当然是区块链,或者类区块链的应用。当然了,用它来代替网络传输也是可行的,例如直播、文件快传,简直了。似乎看到了webOS的新希望。
graphQL:新的数据交互思想,顶替restful称为下一代数据交互接口规则。不过这技术能否带来变革性的改变,还有待观察。
PWA:移动端!移动端!如果web不再加快进入移动端市场,那么相当于落后了10年!什么概念!前端还需要依赖react native这样的技术才能写原生应用,绝对不行,看看桌面端的electron,再看看手机端,唯一的希望就是给予PWA出现一个跨平台的框架。
WebAssembly:逆天的在于,让web直接运行二进制文件,什么概念,就是老爷车和火箭啊!如果方案可行,在手机端的性能如果能大大提升,如果js可以转码,那么手机端还怕啥。
除开这些技术点,大大技术趋势非AI和区块链莫属了。区块链已经火了两年了,但是仍然没有重磅的产品被推出,不知道什么原因。而AI则更多的是强调算法,前端领域基本就不谈论算法问题,也是醉了。之所以不谈论算法,我想很重要的一个原因是js代码对于竞争者而已是可见的,如果你把算法放在前端,对手直接趴来用,秒秒钟赶超你。所以要有一种新的技术来实现对js的黑盒运行,我认为需要借助webasembly和native技术,也就是说,把js编译成不可解码的可执行文件,由一个驱动器去执行这个可执行文件,而如果webassembly可以做到的话就更好了。
enzyme的三种渲染方式
react测试利器enzyme有三种渲染方式:shallow, mount, render。shallow渲染叫浅渲染,仅仅对当前jsx结构内的顶级组件进行渲染,而不对这些组件的内部子组件进行渲染,因此,它的性能上最快的,大部分情况下,如果不深入组件内部测试,那么可以使用shallow渲染。mount则会进行完整渲染,而且完全依赖DOM API,也就是说mount渲染的结果和浏览器渲染结果说一样的,结合jsdom这个工具,可以对上面提到的有内部子组件实现复杂交互功能的组件进行测试。render也会进行完整渲染,但不依赖DOM API,而是渲染成HTML结构,并利用cheerio实现html节点的选择,它相当于只调用了组件的render方法,得到jsx并转码为html,所以组件的生命周期方法内的逻辑都测试不到,所以render常常只用来测试一些数据(结构)一致性对比的场景。在这里还提到,shallow实际上也测试不到componentDidMount/componentDidUpdate这两个方法内的逻辑。
前端性能优化清单
https://github.com/xitu/gold-miner/blob/master/TODO/front-end-performance-checklist-2018-1.md
https://github.com/xitu/gold-miner/blob/master/TODO/front-end-performance-checklist-2018-2.md
https://github.com/xitu/gold-miner/blob/master/TODO/front-end-performance-checklist-2018-3.md
https://github.com/xitu/gold-miner/blob/master/TODO/front-end-performance-checklist-2018-4.md
前端测试介绍
https://jaxenter.com/testing-frontend-code-introduction-137219.html
https://jaxenter.com/testing-frontend-code-unit-testing-137464.html
https://jaxenter.com/testing-frontend-code-e2e-testing-137642.html
https://jaxenter.com/testing-frontend-code-integration-137885.html
https://jaxenter.com/testing-frontend-code-visual-testing-137981.html