200行GO代码实现区块链1

Roy

原文,需要科学上网。省略了一些无关的内容。

世界上很多开发者听说过区块链却不知道它是怎么工作的,他们或许仅仅听过比特币或者智能合约一类的名词。这篇文章尝试用简明的语言说明区块链并且用不到200行的代码来实现你自己的区块链!文章的最后,你应该可以运行并且添加区块到区块链中并从浏览器中看到结果。

有什么学习区块链的方法比你亲自实现一个更好呢?

文章讲了什么

  • 如何创建自己的区块链
  • 如何使用Hash来维护区块链的完整性
  • 如何添加新区块
  • 如何解决多个节点同时生成区块导致冲突问题
  • 如何在浏览器中查看区块链
  • 如何生成新区块
  • 了解区块链的基础知识后,你可以决定你的未来发展方向

文章没讲什么

为了保持简单,我们并没介绍更高级的概念比如pow和pos的对比,我们模拟了网络交互所以你可以看到区块链并且添加区块,但网络广播部分将以后再讲。

区块链学习笔记1

Roy

区块链不等于XX币!

区块链不等于XX币!

区块链不等于XX币!

区块链本质是一种 去中心化的不可修改的分布式数据库核心要解决的是信任问题。 根据场景可以分为3类:

  1. 公开链
  2. 私有链
  3. 联盟链

著名的BTC以及各种XX币大多都是基于公开链的第一代应用,而以太坊(Ethereum)则更进一步,可以说是第二代的区块链应用。基于以太坊,更是诞生了智能合约(Smart contracts)应用,大大简化了编写区块链应用的难度。

而联盟链,现在最火的就是Linux基金会旗下的超级账本(hyperledger)了,相对而言,我个人更看好这个。另外还有个叫做闪电网络的(个人觉得这货有点类似于资金池,略有违背去中心化的初衷),也值得关注。

Effective-Go中文翻译

Roy

原文链接,省略了一些无关的句子。

这里有别人翻译好的,需要翻墙。

介绍

Go是一种新的语言,尽管它从其他语言中借鉴了很多特性,但有些不同寻常的特性让Go语言程序和其他程序有所不同。想要直接把C++或者Java代码转换成Go不会得到令人满意的结果,Java程序是用Java写的而不是GO。另一方面,从GO的角度来考虑问题可以写出成功运行但略有不同的程序。换句话说,想要写出好的GO程序,了解其特性是很重要的。同样,了解约定俗成的惯例也很重要,比如命名、格式、项目结构,这样你写的代码才能方便其他GO语言程序员理解。

这篇文档给你一些小建议以便写出简洁且符合规范的GO代码。看这篇文档前建议先看language specificationthe Tour of Go,和 How to Write Go Code

例子

GO源码不仅仅是作为核心库来使用,更可以用作写代码的实例参考。此外,你可以直接在官网上运行那些没有额外依赖的程序,比如这个。如果你有关于如何解决或实现某个问题的疑问,标准库中的文档、代码、例子可以提供答案或者思路。

redis主从复制-切换配置

Roy

首先从官网下载源码进行安装:

wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar -zxvf redis-3.2.1.tar.gz
make && make test
sudo make install

默认安装到/usr/local/bin目录。

python验证码识别实战2

Roy

上一篇文章中,我们使用sklearn对验证码进行了识别,为了提高识别率,今天来进行进一步优化。

观察验证码后,发现还可以对其进行旋转处理,这个验证码旋转角度在-30~30之间,那么如何判断旋转角度呢?这里我使用最简单粗暴的判断方式——如果旋转后的字符宽度小于旋转之前,则认为是合理的旋转。但这里还有一个问题需要处理,上一篇文章中我们为了简便直接根据固定的宽度对字符进行了分割,但是分割后字符在小图片中的位置不是固定的,需要手动将其放在中心位置。

python验证码识别实战

Roy

陆陆续续的学习了验证码的灰度、二值化、分割等方法,还了解了机器学习中最基本的3个分类方式——KNN、决策树、朴素贝叶斯。基于这些,今天结合这些工具来写一个简单的验证码识别程序,本来想使用现有的库来生成验证码,但无意间发现了之前写某个程序时下载的200个验证码,正好可以拿来练手。另外,虽然之前已经实现了上面3种算法,但这里还是会使用sklearn这个强大的三方库,学习原理是为了知其所以然,有现成工具还是要拿来用的。