More GOTO Aarhus 2014

My personal highlights from the 2nd day of GOTO Aarhus:

New linting rules by Kyle Simpson

It was fun to watch this extremely opinionated guy talk about JavaScript and be “undougie” about things, especially about comparison type coercion “best practices”. I also learned a little bit more on how crazy JavaScript can be, and to which extreme lengths some JavaScript developers will go in order to bend the language – e.g. by using try/catch blocks to create a proper scope ūüôā

Matias Niemelä on Angular.js 1.3

Matias is clealy a Vim wizard, and it’s always fun to watch someone who can use a computer do some live coding. I had gotten the impression that the talk would be more like “what’s new in 1.3”, but it turned out to be mostly a general introduction to Angular’s features, and only at the end did he dive into some of the new animation and validation features.

Angular is a nice framework in many ways, and it’s actually pretty sweet to work with, but I can’t help to think that it’s becoming more and more bloated. I think I need to take a look at Facebook’s React soon.

Where’s Captain Kirk?

This was a double session where Kevlin Henney, as the host sort of, would introduce Eva Andreasson, Randy Shoup, and Ola Bini, and have them talk about stuff that enterprises, sadly, are apparently still not putting to enough use. Eva talked about the “Enterprise Data Hub”, Randy talked about the cloud and microservices, and Ola presented a polyglot project where they had used Java, Ruby, and Clojure on the JVM to build the system.

I had seen Ola Bini’s “Working on cancer” talk before, which was only mildly interesting from a technical angle, because it was basically a list of involved technologies – as in: “we used Ruby, and we used Java, and then we used Clojure” – so I wasn’t that impressed with his contribution to the talk.

I was more intrigued by Eva’s and Randy’s parts of the talk, and Eva actually made me think about what it would mean to basically archive every kind of information that would flow through the company. Basically that’s what you’re doing when you’re doing event sourcing, so I was thinking that the EDH could be seen as a kind of global event store for the entire company.

Summary

It was nice to be at GOTO again, and the quality of the sessions and the keynotes was generally pretty high. I can’t help to think that the “couple of days, several tracks, 50 minute sessions” format could use some kind of renewal though, and I guess that the GOTO arrangers are beginning to feel something too since the conference has been reduced to two days instead of the usual three.

GOTO Aarhus 2014

Just a brief note of today’s highlights:

Mads Torgersen on the future of C#

Listening to Mads Torgersen talk about Roslyn and some of the new additions to the C# syntax was nice – I love the fact that my trusty workhorse is keeping up and is still being improved. I would love it if F#’s discriminated unions and pattern matching would find a way into C# though.

Greg Young on event sourcing

Having been drinking a fair amount of event sourcing Kool-Aid lately :), I simply had to go to Greg Young’s talk about event sourcing. It was cool when our CQRS- and event sourcing framework got a mention from the master himself.

Mads Kristensen on ASP.NET vNext

Watching Mads Kristensen show off the new ASP.NET vNext stuff is another sign that Microsoft is doing a lot to keep up with current de facto web development toolchain standards, as they have added the concept of a “Task runner” to Visual Studio – this is where Grunt/Gulp/Mimosa/Broccoli/next week’s shiny new JavaScript task runner will pop up and become tightly integrated in our Visual Studio development flow.

Other stuff

There was probably other interesting stuff going on as well, but I must admit that my head hurts a little bit from having had one beer too many yesterday evening. But that is quite natural, actually, as going to conferences is ~50%(*) about having beers and talking to inspiring people.

(*) That claim is supported by a pretty decent amount of empirical evidence, which I have personally collected.

My GOTO Aarhus 2014 schedule

Moday

C# is my favorite enterprisey multi-purpose multi-paradigm language, so I simply have to watch Mads Torgerson talk about the new Roslyn-based compiler, even though my interest was slightly piqued by the Xamarin.Forms talk (mostly because my prejudice is that cross-platform mobile development does not work well, but I would love to be proven wrong!).

In the next slot, Mark Seeman is doing the interesting Look, no mocks!-talk about functional TDD with F#, which I also wanted to see, but I might end up going to one of the data talks – either Cliff Click’s Fast Analytics On Big Data-talk for some serious number-awe, or Mark Madsen’s Big Data, Bad Analogies-talk because I usually enjoy talks that add a historical perspective to something that many developers consider new and shiny.

In the 3rd slot, Greg Young will be talking about Event Sourcing, apparently, but there’s no abstract on the homepage… also, I’ve been to several of Greg’s talks about event sourcing, so I might end up going to Martin Thompson’s Responding In A Timely Manner-talk, which seems to be about latency at several levels.

In the last two slots on Monday, I have no idea where I want to go – being a .NET guy, I could go to Mads Christensen’s talk about The Future Of ASP.NET Web Tooling, but lately I’ve found myself enjoying more “general” web tooling like Bower, Mimosa, Gulp, etc. more, also for regular .NET web development, so I will probably go to either the NetflixOSS talk or the Big Data Deep Dive talk… or I might end up on a couch with my laptop, because at this point my fingers usually start to get an itch that can only be scratched by coding.

Tuesday

In the first slot on Tuesday, I think I’ll go get an update on Swift – I’ve coded a couple of hello worlds including one with draggable cookies with Swift, and I have pretty high expectations for the language, but I haven’t really followed along the last months, so it will be interesting to get an update.

In the next slot, I think I’ll go to Matias Niemel√§’s talk about Enhanced Front-end Applications In Angular.js 1.3 which will probably feed me some nuggets of information that will turn out to be valuable at work.

In the third slot, I could go to Yann Cluchey’s talk about Making Enterprise Data Available in Real Time with Elasticsearch but Jos√© Valim’s Idioms for building distributed fault-tolerant applications with Elixir-talk also looks interesting – I usually enjoy seeing what tricks they’re capable of in the Erlang-world.

In the next slot, I don’t know where to go – but in the last slot, I’m fairly sure that I’ll go watch Jan M√łller talk about the BitCoin protocol at the technical level because I expect it to be about distributed systems, consensus, and interesting stuff like that (which IMO is relevant knowledge for anyone who has ever done any kind of programming that involves more than one process talking…)

Wednesday

On Wednesday, I’ll be back at the d60 office, because GOTO is only two days now :'(

I’m going to GOTO Aarhus once again

Sk√¶rmbillede 2014-06-30 kl. 22.54.08Once again – this time for the 8th year in a row – I will attend Trifork‘s excellent GOTO conference in Aarhus.

Back in 2007 when I was employed by Trifork (or “Eastfork Object Space” as they were called back then), I attended my first conference which happened to be the company’s own “JAOO” conference (which used to be GOTO’s name, even though it had not been a pure Java conference for years).

As a light green software rookie I cannot exaggerate how uplifting it was for me to start working with EOS/Trifork, and it was a profoundly inspiring experience to go to JAOO where they weren’t only talking about .NET from a Microsoft point of view – no, they would have speakers talking about open source hippie technology that weren’t even backed by any of the sponsors!

At the time Ruby was all the rage, and I distinctly remember attending Chad Fowler’s talk on Rails’ ActiveRecord which I would contrast with Hamilton Verissimo’s talk on Castle ActiveRecord, and – even though I’ve written something like 20 lines of Ruby code in my life – I’m pretty sure that I’ve come to know most of the Ruby syntax, and I’m also pretty sure that the Ruby way of doing stuff has been influencing my coding style ever since, just because I’ve been regularly and repeatedly exposed to these Ruby things.

See, this is what’s cool about going to conferences: You go to talks about wrestling DBs with Ruby, representing state with Clojure, or on how to visualize the internals of programs by doing “beautiful debugging”, and it ends up making you better at C#. You enter talks that show off visionary technologies or visionaries themselves, and then it widens your horizon. I believe the more ideas and technologies you’re exposed to, the less bound you will be to any technology in particular, which is always a good thing to strive after as a software developer.

Once again, I’m looking forward to having an injection of insight and motivation, even if it is only for two days this year instead of the usual three (I wonder what that is about?)

See you there? ūüôā

Taking the hippie bus to GOTO Aarhus

Sk√¶rmbillede 2013-04-19 kl. 21.41.50I’m really excited to announce that I’ll be doing my “Taking The Hippie Bus To The Enterprise” talk at GOTO Aarhus this September/October, slightly revised and strengthened!

The talk will be on the “Architectures” track on Monday the 30th of September, and you can check out the abstract here.

I’m especially excited because the GOTO conference has been such an awesome injection of inspiration and programming mojo the 5 times I’ve attended, and I am sure it will be really cool again.

I must admit though, that I’m kind of awestruck by the fact that I am going to attend as a speaker this time and thus get to speak in the same room (“Store Sal”!) as Russell Miles and three ThoughtWorkers… ūüėģ (whom, by the way, are Neal Ford, Sam Newman, and Ola Bini… whoa!)

Why do all NoSQL discussions end up discussing CAP?

Having watched an equally interesting and entertaining panel discussion, “The Aarhus 6”, at GOTO Aarhus, it strikes me – again! – as weird and funny that NoSQL discussions almost always seem to end up discussing performance and availability.

In my experience – and Martin Fowler actually noted this towards the end – most development teams and organizations don’t care about the availability of their database. Not as in “don’t care at all”, but as in “availability demands are so that an ordinary OPS team can make the database sufficiently available”.

In other words, almost no organizations need five nines, four nines, or something like that. Most organizations, if they’re honest and don’t pretend to be more important than they are, probably don’t even need two nines!

Thinking about this, it’s funny that the discussions almost never discuss how easy the databases are to get started with, and how easy it is to store data in them. Matt Dennis even managed to talk almost for his entire 50 minutes in his “Big Data OLTP with Apache Cassandra” without touching on how data is actually stored in Cassandra. It’s only because someone in the audience asked about it, that he said the word “column family”.

Chris Anderson did at some point however, comment that “the winner” (i.e. the NoSQL database that development teams will end up choosing), might be selected “because it’s easy to install”.

This is actually spot on, in my opinion! I think most development teams are better off prioritizing ease of installation and operation, and ease of usage, far far over operational quality attributes like insane scalability and availability.

Developing .NET applications very rapidly

In my current position as an agile .NET dude at d60, I have already found myself in need of rapidly building several small applications and services from scratch.

This way of working reminds me a lot about some of the things that Dan North talked about in his “From months to minutes – upping the stakes” talk at GOTO Aarhus 2010.

In the talk, Dan described how he was part of a team that would rapidly prototype and deliver working systems to some stock exchange or something, and in doing this they would often start from scratch and replace the existing applications, instead of adapting old ones. The advantage is that you get to take some shortcuts when you’re making fairly short-lived applications, you don’t have to carry the burden of old legacy crap, you get to re-do, possibly undo(?) almost every decision some time, and you become really good at building stuff from scratch!

So, this is cool, and I think he said a lot of things that really make sense. But how can you build stuff very rapidly when you’re a .NET developer in a Microsoft shop, and your customer has based everything on Microsoft technology? You would think that a .NET developer would be slow compared to the hip coders working with Node.js, Clojure and [insert hip new technology here]…?

Well, it just so happens that .NET developers are actually pretty lucky in that regard. In this post, I’d just like to go through a few of the things that enable us to deliver stuff really quickly, both .NET and not-necessarily-.NET-things.

Git and GitHub

Like all sensible coding teams, we have moved to distributed source control. We have some pretty skilled Git-people among our developers, so Git was the natural choice. And since we’re not really interested in maintaining our own servers, it makes the most sense to have some hosted Git repositories somewhere – and for that, we got a company account at GitHub, because it’s a great place to host Git repositories.

Git’s branching model is just so extremely fast and lightweight that I’m wondering how I ever managed to get anything done in Subversion. Well, I guess I just didn’t update & commit that often then.

Is anyone still using Subversion? Why?

TeamCity

We have our own locally hosted TeamCity server to check out our code from GitHub, build it, run tests, create NuGet packages etc. Configuring and maintaining TeamCity is really easy compared to CruiseControl.NET, which I used to use – and with the extremely cool feature branch support of TeamCity 7.1, our build server will automatically check out, build, and test my branch if I name it feature-whatever_I_am_working_on when I push it to GitHub!

NuGet

When you want to build stuff rapidly in .NET, there’s really no way you can ignore NuGet – this is how we get to quickly pull down all of the open source libraries and frameworks that we’re using to build cool stuff.

In addition to the free open source stuff, we also NuGet-pack all of our purchased libraries if they’re not already in a .nupkg. And finally, we pack our own shared libraries as NuGet packages as well (actually, TeamCity does this for us automatically on every successful build…), which is how we distribute shared assemblies like e.g. assemblies with Rebus messages.

NuGet has been really easy and smooth in this regard. I’m sorry that I never tried OpenWrap, though – I’m wondering if anyone is using that, or if everybody has moved to NuGet?

Our own NuGet package repository

In order to reduce the friction with NuGet, we have our own NuGet package repository. NuGet.org is just damn slow, and it doesn’t host all of our 3rd party and home-rolled packages.

At first, we used TeamCity to do this, but the NuGet extension in Visual Studio doesn’t remember your credentials, so you have to constantly punch in your username and password if you’ve enabled authentication. This was just too tedious.

Then we hosted our own stand-alone NuGet Server, which would have been OK if it weren’t for the fact that we’re often working outside of our office, and often on other companies’ VPNs. This doesn’t go well with a privately hosted NuGet server.

But then someone had the crazy idea that we should use DropBox as our NuGet repository! This is as crazy as it is ingenious, because we’re already using DropBox to share documents and stuff, so it didn’t really require anything to just throw all of our NuGet packages into a shared folder… which is what TeamCity also does whenever it has packed up something for us, immediately synchronizing the new package to everyone who’s connected to a network.

This way, we can always get to include our NuGet packages, even when we’re building new stuff on a train with a flaky internet connection. As I said: Crazy, yet ingenious!

Free choice of frameworks and tools

Last, but not least, I think a key to rapidly building stuff is to free developers’ hands so that they can use the tools they like to use best and feel are best for the given task.

It seems many companies are afraid that developers might pollute their applications with questionable libraries and bad decisions, but my feeling is that most developers are totally capable of handling this freedom and will respond with a sense of responsibility and care.

Conclusion

These were a couple of things that I could think of that help us build cool stuff and deliver often. As I may have already insinuated, I’m not sure this way of working would work on large monolithic applications that must live for very long.

But then again, in my experience many systems live for too long because they’ve become too huge, and thus too big and expensive to replace – it is often very healthy for systems to be divided into smaller applications that are well integrated, but each application in itself is fairly small and decoupled and thus doesn’t constitute a huge risk and equally huge endavour to replace.

I’ll be attending GOTO Aarhus 2012

Once again, for the 5th year in a row, I’ll be attending the excellent GOTO conference in Aarhus – this time as a blogger, invited by my kind ex-colleagues at Trifork.

It’s truly awesome that I’ll be going again, partly since this year’s program sports huge .NET capacities like Anders Hejlsberg and Scott Hanselman, but also because it’s three days of hanging out in a severely inspirational environment with some of the smartest people in software development.

This year, I hope to gain some more knowledge about Riak, the Dynamo-inspired database that Trifork are pushing hard these days. The program reveals two sessions about Riak alone, so that should be feasible.

I’m also looking forward to “The Aarhus 6”: A session laid out like a trial court where the different tradeoffs of six popular NoSQL databases are exposed. I’m expecting MongoDB’s pants to be pulled down on the global lock, fsync + memory-mapped files, and advanced durability story ūüôā and then I’m really curious to hear about any downsides & shortcomings of the other databases accused: Riak, VoltDB, Cassandra, and Couchbase (+ one TBD).

Last thing I’m hoping for, is to drop by some random sessions about stuff that I know absolutely nothing about… this is a tombola, I know, but sometimes it’s a win, and one gets to discover someone or something that adds a completely new dimension to one’s world view.

Frictionless Persistence in .NET with MongoDB is available on Channel 9

Microsoft were cool enough to record my talk at this year’s Goto Cph, even though the talk was on the Cloud and NoSQL track.

You can watch it here.

Afterwards, go check out all the other great presentations – it’s so cool they’ re made available!