Visual Studio ProTip: Copying Binaries on Pre and Post-Build Macros

Last year I had to spend a fair amount of time working on C and C++ projects in Visual Studio 2013, and one of the tasks that I had to learn how to do was use Visual Studio's pre-build and post-build events to copy all of my dependent DLLs into the final output folder for my applications.

In C# we take the ability to do this for granted - if we need to add a reference to another project in our Visual Studio solution we just Add Reference --> Projects --> [Project Name] and boom, we're all set. Visual Studio will automatically copy our dependent binaries into our final /bin/[Release|Debug] folder automatically.

In C/C++ - hellllllllll no. You have to do this all yourself!

Read More

Real-time Marketing Automation with Distributed Actor Systems and Akka.NET

MarkedUp Logo

This is an archive of a blog post I wrote for the MarkedUp Analytics blog on July 23rd, 2014. It's been a popular post and I'm posting it here in order to preserve it. I shut down MarkedUp in November, 2014.

The MarkedUp team has had experience developing SDKs, high-performance APIs, working with Cassandra / Hadoop, and service-oriented software for several years. However, when we started laying out the blueprint for MarkedUp In-app Marketing we knew that it would require a radically different set of tools than the traditional stateless HTTP APIs we’d been used to developing for some time.

Read More

Helios 2.0 Development Diary 2 - Channels, Config, and the Curiously Recurring Template Pattern

Picking up where I left off in the previous Helios 2.0 diary entry... After clearing the decks of all of any code I wasn't 100% certain we'd be keeping, I began writing new code.

IChannel, IChannelConfig, and more

I immediately began by porting Netty's Channel interface to C# (IChannel interface,) as this defines the root element of work behind the Channel API in Helios.

The original Channel interface is chock-full of detailed, helpful comments written by the Netty team and I did my best to port most of those over onto the IChannel interface in Helios, but I got impatient and left a couple of them to be filled-in as TODOs (send me a PR!)

Next I got to work on porting all of the ChannelConfig options, which included porting the AbstractConstant and ChannelOption classes.

The Curiously Recurring Template Pattern

So I noticed something interesting when...

Read More

Helios 2.0 Development Diary 1 - Clean Slate

To my eternal shame, I've never blogged about one of the most important open source projects I'm involved in: Helios. Helios is for all intents and purposes a .NET port of Java's wildly successful Netty project, the reactive high-performance socket server that powers the internals of systems like Apache Cassandra and Typesafe's Akka project.

Helios has dutifully powered the remoting layer behind Akka.NET (my main OSS project) for the past couple of years, and is capable of being a powerful tool within the .NET distributed programming ecosystem in its own right.

Helios' Goals

Helios' job is provide .NET developers with the following tools:

  1. An asynchronous, event-driven network application programming framework that works across both TCP and UDP, client or server;
  2. Message framing and buffering capabilities;...

    Read More

Cassandra, Hive, and Hadoop: How We Picked Our Analytics Stack

MarkedUp Logo

This is an archive of a blog post I wrote for the MarkedUp Analytics blog on February 19th, 2013. It's been a popular post and I'm posting it here in order to preserve it.

When we first made MarkedUp Analytics available on an invite-only basis to back in September we had no idea how quickly the service would be adopted. By the time we completely opened MarkedUp to the public in December, our business was going gangbusters.

But we ran into a massive problem by the end of November: it was clear that RavenDB, our chosen database while we were prototyping our service, wasn’t going to be able to keep growing with us.

So we had to find an alternative database and data analysis system, quickly!

The Nature of Analytic Data

The first place we started was by thinking about our...

Read More

Scalability Lessons we can Learn from Voat

Voat - have your say

Last weekend I found voat.co on the /r/dotnet subreddit, one of the places I frequent for news and happenings related to all things C# / F#.

Voat exists simulataneously as two different things:

  1. The Voat software - an open source, ASP.NET MVC + MSSQL implementation of Reddit AND
  2. voat.co - an instance of the software that is owned and operated by its creators.

I'm a huge fan of Reddit - had an account there for years, and seeing such a kick-ass implementation of it written in C# with SignalR, ASP.NET MVC, Web API, and lots of other cool toys gets me really excited!

Voat could be a huge opportunity to expose lots of curious...

Read More

Talking about Akka.NET and the Actor Model on Hanselminutes and .NET Rocks

I've done a bit of a "press tour" for Akka.NET since we released Akka.NET v1.0 at the beginning of April and I wanted to share a couple of the interviews I've done in the .NET community since.

Hanselminutes: Inside the Akka.NET open source project and the Actor Model with Aaron Stannard

I did an interview with Scott Hanselman immediately after .NET Fringe and we covered the goals and scope of the Akka.NET project, but also really took a close look at the Actor model and why it's becoming a popular concept among .NET developers.

Listen to me on Hanselminutes! (33:04).

.NET Rocks: Akka.NET V1 with Aaron Stannard

Carl and Rich, the two hosts of .NET Rocks, did a better job with the synopsis than I could!

Akka.NET ships! Carl and Richard talk with Aaron Stannard about Akka.NET, a toolkit...

Read More

How to Start Contributing to Open Source Software

The Petabridge team (all two of us) just wrapped up a big two weeks. We launched Akka.NET V1.0 and then traveled to Portland to talk about .NET open source software at .NET Fringe.

.NET Fringe Conference

One of central themes of .NET Fringe is open source communities - and there's two sides to this coin:

  • How does an open source project successfully attract contributors and make them effective?
  • How does your typical software developer become an OSS contributor?

I'm going to touch on the former topic in a subsequent post, as that appeals to a more niche audience than the latter.

Why do open source?

All OSS contributors start...

Read More

On a Mission to Mars

This weekend I went through the Landmark Forum and had to confront a big secret that I've been keeping hidden for virtually my entire life: the true aim of my ambitions.

Ever since I was a middle schooler, I've wanted to help build the first human colony on Mars. I've multiple hours per day thinking about it for years and years and told no one. I was afraid that people would think it's a ridiculous goal, and that I wasn't successful enough to do it yet. And really, I was scared that I would fail. So I let these fears stop me from ever trying or ever sharing it.

The Forum helped me realize that these fears are bullshit.

I'm going to help put the first permanent human settlement on Mars. That's my mission, and today I'm committing to realizing the possibilities that go with it. Sure, it'll be...

Read More

Creating a Custom ETW EventSource for Debugging High-Performance Code in C#

One of the things I've been working on for both Helios and Akka.NET is a custom ThreadPool implementation that allows us to isolate mission-critical code from the noise of the CLR ThreadPool.

My second pass at implementing one of these instanceable thread pools had me borrow the work-stealing queue implementation that's been responsible for dramatic performance improvements in the CLR ThreadPool. The original ThreadPool code is very optimized and relies on native calls internally, so it's not always easy to follow.

My initial performance numbers for DedicatedThreadPool were absolutely awful, so I needed to find a high-performance way of measuring just how well this work queueing structure was working for me.

Enter Event Tracing for Windows (ETW.) I spent way more time than I care to admit trying to figure out how to make this work for me....

Read More

P.S. Get the latest from Aaronontheweb

Have my most recent essays and articles delivered directly to your mailbox.