Bryan Hunter is a geek, a founding partner of Firefly Logic and the president of the Nashville .NET User Group. Bryan is obsessed with Lean, functional programming (Erlang, C# and F#), CQRS and Caliburn.Micro. He has been speaking on each of these subjects tirelessly for years at meetups, bars, user groups, bars, regional conferences and bars. You can say hi to Bryan on Twitter (@bryan_hunter), read his blog at http://codeswamp.com, and see what Firefly Logic is all about here:http://fireflylogic.com
sudo apt-get -y install build-essential m4 libncurses5-dev libssh-dev unixodbc-dev libgmp3-dev libwxgtk2.8-dev libglu1-mesa-dev fop xsltproc default-jdk | |
sudo mkdir -p /src/erlang | |
cd /src/erlang | |
sudo wget http://www.erlang.org/download/otp_src_R14B02.tar.gz | |
sudo tar -xvzf otp_src_R14B02.tar.gz | |
sudo chmod -R 777 otp_src_R14B02 | |
cd otp_src_R14B02 | |
sudo ./configure | |
sudo make | |
sudo make install |
# You will need to make this file executable (chmod u+x) and run it with sudo | |
apt-get -y install build-essential m4 libncurses5-dev libssh-dev unixodbc-dev libgmp3-dev libwxgtk2.8-dev libglu1-mesa-dev fop xsltproc default-jdk | |
mkdir -p /src/erlang | |
cd /src/erlang | |
wget http://www.erlang.org/download/otp_src_R14B03.tar.gz | |
tar -xvzf otp_src_R14B03.tar.gz | |
chmod -R 777 otp_src_R14B03 | |
cd otp_src_R14B03 | |
./configure | |
make |
-module(fizzbuzz). | |
-export([playto/1]). | |
-include_lib("eunit/include/eunit.hrl"). | |
playto(Upper) -> | |
[case | |
{X rem 3, X rem 5} of | |
{0, 0} -> fizzBuzz; | |
{0, _} -> fizz; |
// @hammett: "Linq doesn't have a Partition operation that returns two sets? (filtered/complement).. sad!" | |
// GroupBy can be seen as a partition. We specialize it to have exactly two groups: | |
public static class PartitionExtension | |
{ | |
public static Tuple<IEnumerable<T>, IEnumerable<T>> Partition<T>(this IEnumerable<T> enumeration, Func<T, bool> criteria) | |
{ | |
var whole = enumeration.GroupBy(criteria); |
// Hooks up Castle Windsor as the container for your Caliburn.Micro application. | |
// Turns on support for delegate factory methods (e.g. passing the factory "Func<XyzEditViewModel>" as a constructor arg) | |
// Dependencies: In addition to Caliburn.Micro you will need to reference Castle.Core and Castle.Windsor | |
public class CastleBootstrapper<TRootViewModel> : Bootstrapper<TRootViewModel> | |
{ | |
private ApplicationContainer _container; | |
protected override void Configure() | |
{ |
(add-to-list 'load-path "~/ErlangRigEmacsConfig") | |
(require 'my-config) |
[core] | |
autocrlf=true | |
editor = "emacs" | |
[user] | |
name = Bryan Hunter | |
[color] | |
status = auto | |
branch = auto |
Three anti-hero technologies (Microsoft's new Windows 8 Metro tablets, the Command-Query Responsibility Separation architectural pattern, and the opensource functional programming language Erlang) snap together to form a delightful, maintainable and scalable system. It's not a mainstream or obvious choice, but I'll show you in an opensource end-to-end application how they fit. This will be my technology stack of choice for years to come, and I look forward to showing you why.
Would you like to build massively parallel, distributed, fault-tolerant, cross-platform, easily maintainable systems with less code and look cool doing it? If so, the opensource programming language Erlang has some real sweet spots for you. If you're unfamiliar with Erlang you may be surprised to learn how battle tested it is: Facebook's chat backend, CouchDB, RabbitMQ, GitHub's backend and Amazon's SimpleDB are all written in Erlang, and every phone call you make is likely helped along by some Erlang somewhere. So how does a functional programming language with Prolog and telecom roots solve so many of the big problems that Enterprisey languages famously stink at? What's so darn special about Erlang? What are the pieces and the tools? What does it look like? How do I (as a C# developer) even get started with Erlang?