Erlang for beginners
Erlang for beginners
- Why erlang?
- Why Use Erlang?
- When would you choose Erlang?
- Erlang: For an absolute beginner
- An Erlang OTP tutorial for beginners
- A Beginners Guide to Erlang
- What is the best way to learn Erlang?
- The Joy of Erlang; Or, How To Ride A Toruk
- Erlang concepts
- The Erlang Rationale
- Making Reliable Distributed Systems in the Presence of software errors
- A little Erlang Tutorial
- Thinking in Erlang
- An Open Letter to the Erlang Beginner (or Onlooker)
- Erlang is not a Concurrent Functional Programming Language
- Erlangs parallelism is not parallelism!
- Some Erlang Magic for Beginners
- Running Erlang on Mac OS X
- Erlang Basics
- Interactive tutorial that allows you to try the power of Erlang directly in your browser
- Erlang examples
- 10 Erlang one liners to impress your friends
- Dabbling in Erlang - minimal introduction - Part I
- Dabbling in Erlang - minimal introduction - Part II
- Solving Embarrassingly Obvious Problems In Erlang
- Learn Erlang in Y minutes
- Systems that run forever self-heal and scale
- Your First Erlang Server
- Become an Erlang Cowboy
- The Spawned Shelter
- Key Features and Some Application Area
- Why Erlang?
- A Concise Guide to Erlang
Erlang - more advanced topics
- Building a Non-blocking TCP server using OTP principles by Serge Aleynikov
- Gen event behavior demystified by Serge Aleynikov
- Using EI interface in port programs by Serge Aleynikov
- SNMP Quick Start by Vance Shipley and Serge Aleynikov
- Erlang gproc Failure Semantics
- Monads in Erlang
- Optimizing Erlang applications: emysql
- Erlang/OTP releases: rebar, release_handler, .appup, .etc
- Erlang rebar tutorial: generating releases and upgrades
- Rebar plugin tutorial
- Trivial OTP releases
- Build Erlang releases with erlang.mk and relx
- Universal Makefile for Erlang Projects That Use Rebar
- Don’t Lose Your ETS Tables
- Caching with ETS
- Implementation of “Don’t Lose Your ETS Tables”
- Modern Server Application Design
- Writing Beautiful Code - video
- Writing Beautiful Code - slides
- Erlang TDD hands on project - WorkerNet - 8 parts tutorial
- EUnit - Common special errors
- Eunit Testing gen_fsm - 4 parts tutorial
- Automated Testing - 3 parts tutorial
- Erlang Fprof Output Confusing? Try KCachegrind
- A Basic Full Text Search Server in Erlang
- Consensus, Raft and Rafter
- Webmachine, ErlyDTL and Riak
- Erlang Real Time Server
- Scaling Erlang
- Writing a URL Shortening Service in Erlang
- Testing Erlang (A public book on testing Erlang)
- how to do erlang upgrades
- How i Start - Erlang
- Generic Erlang Port Driver
- Erlang Postgres Connection Pool with Episcina
- Handling Crashes in Erlang
- Erlang Event-Driven Applications
- From Erlang To Java and Back Again
Books
- Learn you some Erlang by Fred Hébert
- Programming Erlang: Software for a Concurrent World by Joe Armstrong (1st edition)
- Programming Erlang: Software for a Concurrent World by Joe Armstrong (2nd edition)
- Erlang Programming by Francesco Cesarini
- Introducing Erlang by Simon St. Laurent
- Erlang/OTP by Pavlo Baron
- Erlang and OTP in Action by Martin Logan
- Building Web Applications with Erlang: Working with REST and Web Sockets on Yaws by Zachary Kessin
- Erlang Handbook. A concise reference for Erlang
- Designing for Scalability with Erlang/OTP: Implementing Robust, Fault-Tolerant Systems
- Getting functional with Erlang by Mark Nijhof
- Stuff Goes Bad: ERLANG IN ANGER by Fred Hébert
- The Erlanger Playbook by Loïc Hoguin
Videos
- C4[1] Ippolito: Exploring Erlang
- Erlang Solutions Vimeo
- Erlang Solutions Youtube
- Message Passing Concurrency in Erlang - Ulf Wiger
Community
- Mailing lists
- Planet Erlang
- Erlang Central is a complete resource hub for the Erlang programming language community.
Blogs
Exercises
Documentation
- Erlang/OTP documentation
- Erlang Reference Manual User’s Guide
- Alternative to the official erlang documentation
- Inside the Erlang VM with focus on SMP (PDF)
- Erlang Documentation Server
- Erlang Application Security Guidelines
Style guide and Erlang Enhancement Proposals
Erlang Internals
- Erlang Engine Tuning: Part 1 - Know your Engine by Erik Stenman
- Erlang Engine Tuning: Part 2 - Know your Engine by Erik Stenman
- The BEAM Dispatcher
- The Erlang Tagging Scheme
- Erlang, Binaries, and Garbage Collection
- How to create and compile module in run time
War diaries
Documentation tools
Testing frameworks
- EUnit - a Lightweight Unit Testing Framework for Erlang
- Common test framework
- PropEr: a QuickCheck-inspired property-based testing tool for Erlang
- A mocking library for Erlang
- A Coverage Analysis Tool for Erlang
- Triq (pronounced “Trick Check”) is a free alternative to QuviQ eqc
Debugging and profiling
- Debugger is a graphical user interface for the Erlang interpreter
- redbug - Erlang Debugging Tool
- fprof is a profiling tool
- A simple Call Count Profiling Tool
- A Time Profiling Tool for Erlang
- Convert fprof to callgring output
- A GUI tool for observing an erlang system.
- Analyze application performance and function call hierarchy with power of kcachegrind
Load testing tools
- Tsung - multi-protocol distributed load testing tool.
- Basho_bench - tool with descriptive name.
- percept - profiler with focus on ports and processes states and interaction
- percept2 - very extended version of standard tool, but still in development
Package managers
- A sophisticated build-tool for Erlang projects that follows OTP principles
- Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases
- A repository for publishing packages for BEAM-based languages
- Sinan is a build tool designed to build Erlang/OTP Projects, Releases and Applications. (Deprecated)
- Erlang package manager
Editors and IDEs
- erlide is an Erlang IDE based on Eclipse.
- Erlang plugin for IntelliJ IDEA
- distel emacs - erlang IDE
- Wrangler - refactoring tool for Emacs and Erlide (with build in distel)
- Vimerl is a plugin for programming in Erlang
- An Erlang Plugin for Sublime Text 2, which enables code completion and allows you to run tests within the editor itself.
- Better Erlang Support for Sublime Text
- Emacs-like Erlang editor fully written in Erlang with S-Lang driver
Database clients
- Erlang PostgreSQL driver - epgsql
- Erlang PostgreSQL driver - pgsql
- Erlang MySQL driver
- Erlang clients for Riak
- Couchbeam - simple erlang CouchDB framework.
- Record based Erlang driver for MongoDB with gridfs support
- Erlang Redis client
- Heroku’s Pipelined Redis client
- KVS: Key-Value Storages Framework (Mnesia, Riak)
- BossDB: a sharded, caching, pooling, evented ORM for Erlang
- SumoDB
- Erlang VoltDB driver
- [NIF based Erlang bindings for Couchbase ] (https://github.com/chitika/cberl)
Database servers
Loggers
- Erlang Error Logger
- A logging framework for Erlang/OTP
- Heroku log router
- A logger for erlang in the spirit of Log4J.
Network
- Socket acceptor pool for TCP protocols.
- gen_socket is an Erlang socket interface which can be used to create gen_tcp and gen_udp based sockets with special properties.
- Erlang interface to low level socket operations
- barrel is a generic TCP acceptor pool with low latency in Erlang.
Utilities to Build Erlang Apps
- Worker Pool: distribute your work
- pCache: process-based cache
- JInterface stdlib: GenServers in Java
- epocxy: Erlang Patters of Concurrency
- mad: Small and Fast Rebar Replacement
- gut: Scaffolding Tool
API clients
- Amazon Web Services API library for Erlang.
- Balanced Payments (Payment Processor)
- Stripe-Erlang (Payment Processor)
- EStripe (Payment Processor)
- Apache Kafka producer/consumer for Erlang
- APNS Client
- iTweet
Http clients
- simple HTTP client in Erlang
- ibrowse - Erlang HTTP client
- Asynchronous SPDY, HTTP and Websocket client written in Erlang.
- lhttpc is a lightweight HTTP/1.1 client implemented in Erlang.
Web frameworks
- BeepBeep is a simple web application framework for Mochiweb inspired by Rails and Merb
- Chicago Boss - Erlang web MVC, now featuring Comet
- Nitrogen - interactive web applications in full-stack Erlang.
- Zotonic, the Erlang Web Framework
- Erlang Web Framework on WebSockets
- A micro-framework for web applications in Erlang
- Minimum viable Erlang web framework
- Webmachine - A REST-based system for building web applications.
- Small and flexible web framework on top of Cowboy
- Comparison of Erlang Web Frameworks
- Leptus - REST framework
- Lasse: Simple SSE handler for Cowboy
- Elli - Erlang web server for HTTP APIs
Web servers
- Small, fast, modular HTTP server written in Erlang.
- MochiWeb is an Erlang library for building lightweight HTTP servers.
- Yaws webserver
- Misultin (pronounced mee-sool-téen) is an Erlang library for building fast lightweight HTTP(S) servers, which also supports websockets.
- Simple, robust and performant Erlang web server
Messaging Libraries and Articles
Cluster libraries
- Swarm - distributed process registry
- libcluster - dynamic cluster support
- Horde - distributed supervisor
- DeltaCRDT - replicated data type
Json
- JSONX is an Erlang library for efficient decode and encode JSON, written in C.
- jiffy - JSON NIFs for Erlang
- The json encoding modules from mochiweb
- an erlang application for consuming, producing and manipulating json. inspired by yajl
Podcasts
Erlang interviews and resources
Other languages on top of Erlang VM
- elixir
- Joxa - a semantically clean, functional Lisp
- Lisp Flavored Erlang
- The Concurrent Schemer
- Erjang is a virtual machine for Erlang, which runs on Java(tm).
- Lua in Erlang
- Prolog interpreter in and for Erlang
- Ruby-like hybrid OOP/functional programming language for BEAM, the Erlang VM
- Programming language with C-like syntax that runs on the Erlang platform
Utils
- The Dialyzer is a static analysis tool
- erlang-history - Hacks to add shell history to Erlang’s shell
- Common Makefile rules for building and testing Erlang applications.
- Execute and control OS processes from Erlang/OTP
- MapReduce and Pipeline Parse Transforms for Erlang
- Direct access to memory mapped files and memory sharing in Erlang
- Miscellaneous utility modules for Erlang
- Network Protocol Abstraction for Erlang
- Direct support of external Erlang term binary format in Javascript
- Network Monitor for detecting network splits
- Gen_timed supervisor behaviour of scheduled task execution
- Sync - On-the-fly recompiling and reloading in Erlang. Code without friction.
- Active - rebuilds & reloads source/binarys
- Erlfsmon - Erlang filesystem event watcher for Linux & OSX
- Erlang code reloader. A standalone version of MochiWeb’s `reloader’ server.
- Futures for Erlang.
- Easy building and installing of Erlang/OTP instances
- Recon - Collection of functions and scripts to debug Erlang in production
- Exometer - Measurement tools
- Safety Valve - Protecting against overflow protection & queueing services
- Dispcount - Erlang task dispatcher
- Folsom - Erlang events & Metrics
- send folsom metrics to graphite
- eflame - Flame graph profiler for Erlang
- Elvis - Erlang Style Reviewer (WIP)
Metrics
Projects using Erlang
- Riak is an open source, distributed database
- Couchdb - A Database for the Web
- Rabbitmq - AMQP messaging
- Ejabberd - XMPP server
- A Map/Reduce framework for distributed computing
- Wings 3D is an advanced subdivision modeler
- Open source dynamo clone written in Erlang.
- Phoebus is a distributed framework for large scale graph processing written in Erlang.
- Kha - continuous integration server in Erlang.
- Logplex - syslog log router
- Chef - configuration management software
- VerneMQ - MQTT message broker