Scala和Kotlin、Clojure等一样是一种jvm语言,传说其复杂度可与C++一较高下。用下来感觉并不舒服,例如其中的implicit特性,能够减少很多代码的冗余,但另一方面,又会导致代码对新手而言的可读性变差。
这篇文章拆分自我从前的文章《使用Scala进行Spark-GraphX编程》。
关西攻略
Python中的重要科学计算库Pandas
Pandas库用来实现对CSV的快速处理,其在numpy之上提供了index和column机制。
异星工厂铁路建造技巧介绍
异星工厂(Factorio)是一款有趣的游戏,随着游戏进程的发展,通过铁路实现超远距离的快速矿物货运的方式相比传送带和物流机器人有着稳定(高速运行的火车相比虫子可以说是无敌)、快速的特点。目前有关异星工厂铁路介绍的相关资料鱼龙混杂,缺乏系统性。为此,我总结了火车建造中的常见场景,并针对这些场景设计了对应的建造思路,以便玩家能够尽快建设自己的铁路物流系统。
Ubuntu上配置饥荒联机版服务器指南
本文将介绍如何在Ubuntu云主机(阿里云ECS)上配置饥荒联机版服务器。主要过程在steamcommunity已经讲得很详细了。我提供了一个傻瓜脚本。但有一些细节操作方面需要进一步明确。
2PC和3PC
本文来自我的文章分布式一致性和分布式共识协议太长,因此将其中的2PC和3PC部分单独列出来作为一篇文章。
Raft共识算法
本文来自我的文章分布式一致性和分布式共识协议太长,因此将其中的Raft部分单独列出来作为一篇文章。
Raft协议的设计者们认为Paxos协议非常难于理解,并且需要作出很多修改才能够应用到工程中,因此设计了偏重于实现的Raft协议,这甚至体现在他们的论文标题《In Search of an Understandable Consensus Algorithm(Extended Version)》上,此外作者也提供了一个C++版本的实现liblogcabin。Raft协议主要分为三个模块,Leader election、Log replication和Safety。
Raft将服务器节点分为Leader、Candidate和Follower三种,协调者被称为领袖/主(Leader),参与者被称为群众(Follower)。相对于其他的协议,Raft中的Leader更强,这体现在:
- Leader是唯一的。
- Log entries只能从Leader发送给其他服务器,事实上Follower不主动发送,而只响应来自Leader和Candidate的请求。
- 客户端只能和Leader交互,如果客户端首先连上了Follower,那么会被Follower转发给Leader。
- Raft的独特之处还在于其在Leader election的过程中Raft使用了随机计时器进行超时。此外,Raft还提供了一个joint consensus的算法处理Membership changes的问题。
Jepsen使用
Jepsen是一款用来验证分布式系统安全性的工具。
通用生产力软件工具指南
最近换了新电脑,进行配置的时候遇到很多坑,这里记录一下常用的软件的一些注意事项。
多态:以 Haskell 为例
一般地来说,一个值,或者说一个函数,是多态的,当它可以是多种类型的。Haskell 原始支持的多态分为参数多态和 ad-hoc 多态。
在文章haskell学习笔记中提到了 Parametric polymorphism、higher kinded polymorphism 和 higher rank polymorphism 三个概念,我们将在本文中详细探讨。