Posterous theme by Cory Watilo

Filed under: Community

Nancy, the little community-powered framework that could

Two months ago, on the day, I first announced Nancy here on Elegant Code as my new open-source project. I could never have anticipated the chain of events that would take place during the following two months. My tweet about the blog post got re-tweeted more times than I can remember and the post filled up with, mostly, awesome feedback.

It took about and week and then Nancy got the first pull request on her github account and from there it started to build up momentum quite fast. At the time of this writing there’s been 53 pull requests, by about 20 different people, for all kinds of features, bug fixes, custom hosts… you name it. Not bad, eh?

Not only that, but Nancy has managed to pull together a nice little community, over at Google Groups, where the future of Nancy is being discussed every day. She’s also getting some attention on Twitter and we’re trying to gather it all under the #NancyFx hashtag and seems like every day there is a new face popping up.

In the initial commit there were a couple of abstractions and light extension points in place for things like custom hosts, view engines and response formatters. These turned out to be a very smart move, because the community really embraced and ran with them. Let me recap some of the things that has happened since day zero

  • View engines; there are currently support for Spark, Razor, NDjango and Static templates. We did have support for NHaml for a while, but that community seems to have gone into hibernation, so the decision was made to pull it and not waste dev cycles on it until there was a demand
  • Inversion of Control integration; this has been one of the big one. Right from the very first beginning I wanted Nancy to be a self composing framework, that is have a small internal container that glued the framework together at runtime. I also wanted the possibility to register module level dependencies. It took a while and a couple of iterations, but we finally settled on a design and made TinyIoC the internal container. It was very important that it was a transparent experience to the end user and unless you have a need for it, you never know it’s there. Not only that, but thanks to community contributions we’ve managed to create hooks (known as bootstrappers in Nancy) for all of the major players such as StructureMap, Autofac, Unity, Ninject and Windsor. Using one of these container with Nancy is a very easy thing to do and only adds one more file to your project
  • Response formatters; one of the powerful features in Nancy is the response model and how it lets you return different kinds of things and leverages implicit cast operators to hide the complexity behind it. Thanks to the awesome Nancy community we now have the capability to return JSON, XML, images and perform redirect responses. It’s super easy to write a response extension and hook it into Nancy, so if you have any ideas….
  • Bug fixes; yeah I know, it’s shocking, but it’s still true. Every now and then someone finds a bug but, more importantly, most of the time the same person is part of contributing a patch to resolve it!
  • Hosts; Nancy has been designed with the idea of being able to run in multiple environments and shipped with a host to run on top of ASP.NET. Right now we have additional hosts for running Nancy on a WCF host and on a stand alone host. There are more of them on the way
  • HEAD requests; the first release of Nancy supported GET, POST, PUT and DELETE requests, but thanks to a clever little contributions she now also serves up HEAD requests
  • Cookies; not he ones you can eat….
  • Cookie based sessions; I think this is also self describing.. oh… yeah they are encrypted in case you were wondering!
  • Mono; we’ve started to seriously look at getting Nancy to run on top of the up coming mono 2.10 release (we need the improvements they’ve made to the dynamic keyword) and have already managed to run the sample application on both Linux and Mac OSX. Moving forward mono is going to be a supported and equally priorities platform to support
  • Visual Studio templates; these are still work in progress but right now I have the ability to new up a new Nancy project, based on the html5boilerplate … and we have a bare bone template in the making
  • Buildscript; a couple of days a go we added what every self respecting open-source project needs; a build script. We choose to use Rake (that’s a ruby powered format, for those of you that’s never seen it before) and make use of the excellent Albacore gem, but the awesome Derick Bailey

I’ve probably forgotten a bunch of things, there’s been so much going on that I can’t remember it all without looking at the commit history! That said, there are still things we want to put in place and there are already extensive discussions on the user group about them

  • Security
  • Content negotiation
  • OWIN hosting (we’re keeping track of the OWIN 1.0 specification)
  • Self-hosting (Benjamin van der Veen, if you are reading this – maybe Kayak can be a candidate!)

The one thing that we can’t seem to pull of

Is to find a designer to design a proper logo for the framework! We are in desperate need to get an awesome logo that we can put everywhere and start creating a website. So if you know any good designers that wouldn’t mind putting in some time in designing an awesome logo for an open-source project (read pro bono) and please tell them about us and about Nancy! A while back I created a post about the Nancy logo on our user group. It contains some information on the philosophy and goals for a logo for Nancy. I can’t stress enough how much I would appreciate if you took this and shared it with your designer friends!

As always, if you want to ping me either drop me a comment right here on the blog or find me on on Twitter account @TheCodeJunkie

… I can’t help to wonder what Nancy will be like in another two months!

If it kinds looks like a duck, why not just get a duck

Shortly after announcing the first drop of Nancy, my friend Mark Nijhof asked me

“one thing that keeps sounding in the back of my head is; why not use Sinatra instead?”

The short answer to this is; If it makes more sense for you and your project to use Sinatra, then you should! However it is my experience that it’s not always that black and white when it comes the question “why don’t you use…?”. The answer really depends on what type of developer you are and the surrounding circumstances.

Now let me clarify that Mark said he liked Nancy and that this was just a feeling he got while reading the post. This post has less to do with Mark and more to the discussion about “why don’t you use…?” since it is a repeating topic that pop back up every now and then.

Say you are doing contract work, either on your own or at an agency. Here is depends on two things; do you specialize at delivering software on a specific platform or do you target a wider audience? Second, does the client have any demands on the platform and technology stack that you use?  So the ability to choose technology stacks in either of these situations should be self evident. If you are in a position where both the client and employer lets you choose the best stack for the project then you are in a sweet position!

Imagine you are working in-house at a product company, should you just be able to pick any technology stack that you feel is the best for the task? Would you let your employees do that if you were the CEO? There are additional costs for training team members and you risk in getting way too many go-to-guys, the people that have a passion for a certain technology. And what if some of these guys were to leave? Then what? It’s not that easy to recruite people with cross-technology stack experience, especially those with senior skills in all of them.

I know that at the place where I work it would not be a good idea to start building out products using django, ruby, scala – whatever – simply because our organization could not handle it. At least not today. And who knows what it will be like in another year? A couple of years ago we wouldn’t have been able to use Kanban efficiently, but we matured over time and today we use it with great success.

I am a firm believer of “use the right tool for the job”, but I am very aware that it’s not only the framework or programming language that defines what “the right tool” is, there are lots of organizational and surrounding factors that all have a play in that.

My take on the Øredev 2010 conference

Last week was the at the 6th annual installment of the Øredev developer conference in Malmö, Sweden. I was able to attend Wednesday thru Friday and had the opportunity to listen to a lot of great talks and have a lot of interesting conversations with the attendees. Being on its 6th year means that the conference should have had time to find its style and settle in – and let me tell you right now that it has defiantly done that.

The theme for this years conference was Get Real, that is described by the organizers as ”will shine a light on how to stay in balance, between today’s realities and tomorrow’s possibilities while the universe is in constant motion.”. Their way of doing that was by providing a total of 13 awesome tracks which were Java, .NET, Smart phones, Architecture, Cloud & nosql, Patterns, Web development, Social media, Agile, Collaboration, Realizing business ides, Software craftsmanship and the Xtra(ck).

The Xtra(ck) was this years little experiment and provided alternative sessions such as “Understanding Hypnosis”, “The taste of coffee”, “The language of MIDI and its application”, “Photo walk!” and many many more. I never attended any of these, there were just too many things I wanted to attend while at the conference, but hopefully they’ll keep the concept for next year and maybe I will get the opportunity to checkout a couple of sessions then.

This yeas 1400 people attended the conference, an impressive 40% increase in people compared to last year where the head count was about a 1000 people. That is quite an effort and the best part is that you did not notice any rapid growing pains at all, everything felt just as well organized as I’ve come to expect out of this conference.

One thing that worries me up front was the change of venue for this years conference. The change was necessary since the old venue is being knocked down, so that was not a viable option this year. The new venue was the Slagthuset (Swedish wikipedia entry) and it was able to house all of the attendees without feeling over crowded.

The one complaint I (and probably the rest of the attendees) have was that, because of how the large halls of the building were split into temporary session rooms by the help of temporary walls, the sound of the neighboring sessions bleed over to the one you were attending. It was not bad to the point where you were unable to follow along, but it was definitely noticeable. I hope this is resolved next year!

The keynotes

Each of the conference days started of with a keynote, and If I had to pick one area where this years conference really excelled, I would have to say the keynotes. This year they definitely out did themselves and lines up an awesome lines of speakers.

Dr. Jeffery Norris of NASA Jet Propulsion Lab, was the Wednesday speakers and talked about Mission-Critical Agility. In his talk he told the story about Alexander Graham Bell and how he invented the telephone. He talked about how Vision, Risk and Commitment are important parts of Mission-Critical Agility and intertwined those into the story of Alexander Graham Bell. He also talked about how NASA committed to being first with putting a man on the moon and how the lunar project ended up about not choosing the solution that seemed the most simple at first, but actually ending up picking the one that sounded like crazy talk. In the part about the lunar landing he made use of augmented reality with the help of ARTToolKit to visualize the complexity of the task. Check out the this youtube clip to see parts of what he did.

John Seddon had been invited as the Thursday keynote speaker and talked about Re-thinking IT. It can more of less be summed up as talk on how we as developers let IT get in the way of the real problems. How we often propose solutions to problems that do not yet exist. He talked about how we should focus on solving the business problems first and then moving them into IT, and not the other way around. A very well delivered talk, completely without slides! All of the attendees got his book Freedom from command and control as part of their Øredev goodie bag!

Nolan Bushnell spent his time as the Friday keynote speaker by talking about The then mega software project for the next 20 years. This is the same guy that founded the Atari Corporation and has been called the father of the video game industry. More or less a legend In our field and a very good public speaker. He talked about some of the big projects that we will be facing in the next ten years and the impact they will have in our industry and as a society at large.

The sessions

With a 3-day conference, consisting of 8 parallel tracks each day and 5-6 sessions each day (Friday had one less session than the other two days) it would be too much information to tell you exactly which sessions I attended and what my reflections of them were. For the most part all the sessions were great, there were only one that I walked out of.

There was always something coming up on the agenda that you wanted to attend and in many cases there were conflicting sessions. The good news is that all sessions were recorded and will be made available on the Øredev website over the next couple of weeks. So for me the conference is not really over, there are a bunch of sessions I want to watch and a couple that I would like to re-watch again!

I was also happy to see that the listener participation was quite high this year. There were many sessions where people asked a lot of questions during the talk and occasionally stepped up to help answer questions that caught the speakers of guard. I guess this is what you get in an open environment such as the one that Øredev delivers.

As always the conference uses the Red-Yellow-Green session evaluation system. Basically this is a very simple way for attendees to tell the speaker what they thought about the session. When you leave the room you are given the option of placing a red, yellow or green card in a box and that is it. I think the colors are self explaining so I will not go into any details on their meaning. I know that I personally hate filling in evolution forms, especially when you are going to attend almost 20 sessions in 3 days.

The highlight

To me, the single biggest highlight of this years conference is neither the sessions or the keynotes, even though both of them were excellent. The highlight this year is the fact that I got the opportunity to meet up with a lot of people that flew in from other parts of the world. Some I knew from before, others I have only known on my twitter account or on IM for a long time now.

Some of the people that I got to hang out with this year were Glenn Block, Jeremy D. Miller, Hadi Hariri, Philip Laureano, Rob Ashton, Brad Wilson whom all are awesome developers and people I have great respect for. There were a lot of good discussions and casual chit-chat during the 3-days at the conference.

However, the single biggest highlight was not part of the actual conference it self. On Monday I had the opportunity to take a day of work and spend the day with a long time friend, Glenn Block. Him living in the US and me living in Sweden does not give a lot of opportunities to hang out for a full day. Fortunately Glenn flew in early to the conference and took the train to the city where I live. He got the opportunity to meet my wife and kids, have a look around the city, visit the place where I work and see some of the things we do, get an introduction to the FakeItEasy mocking framework (developed by a guy I work with, Patrik Hägne and used in our daily work) and show us some of the REST stuff he is working with. All in all, an awesome day.

Summary

To sum it it, this years conference was great and I already look forward to next year! If you get the opportunity to visit the conference I would highly recommend that you take it. It is quickly getting known for a high-quality conference and I do not see that ending anytime soon. So thank you to everyone, the organizers, the speakers, the attendees and even all the people that works behind the scenes to make who made this possible, for making this year just as awesome as expected!

I will see you next year!

Microsoft doesn’t create bad developers, developers do

Have you ever stopped to think about the industry you have choose to work in (I’m bluntly assuming that if you are reading this you are working in the software industry in some way)? I would call it one of the most complex industries in the world. Think about it. We are working in an industry that is evolving at an incredible pace, contains an incalculable number of technologies, frameworks, best practices and constantly redefines the definition of how things should be done in the best possibly way. It’s the industry that makes the rest of the world tick. Daunting really, if you think about it.

A while back I read a couple of posts by Gil Zilberfeld (here and here) where Gil talks about the responsibility that vendors such as Microsoft plays in the role of securing the quality of the work that is produced in our industry. While I think I see the points  Gil is trying to make, I think he misses the beat a bit and I have a hard time agreeing with the conclusions he draws.

The way I see it there are two types of developers; those that are just in it to pay the bills and those that consider themselves as craftsmen. If you consider yourself a craftsman then you should already be aware that you are responsible for your own faith and actions in this industry. But, if you are just in it to pay the bills then you are probably also looking to do so by doing the least amount of work and that includes looking for information on how to solve a particular problem or how to apply a technology onto your stack.

So if you are one of the developers that are only looking towards Microsoft (or the relevant company for the technology stack you are working on) is it their fault if you implement something in a way that could be considered bad? Of course not! Sure there are a lot of outdated and down right poor samples at the Microsoft (or relevant company) website and their idea on how certain things should be solved are bound to differ from others (and that’s definitely not to say that there isn’t good contents, there are a ton of it). However, if you rely on a single source of information, you are always going to get an opinionated view. Take my word on it (right?).

Doctors reads medical journals, publishes research papers, attend conferences, network with colleagues and make sure they stay up to date with the latest in their field. I’m pretty sure you are happy that they spend all of this time to make sure they can provide the best possible care and treatment when someone are in need of their services. I know I am.

Just as with any other profession, developers are responsible for their own education, for honing their skills in the craft that they have chosen to practice. In order to keep up in an industry that evolves at the speed of light you need to invest in yourself. The code you write today should be some of the best you have ever written, while a year later you should be considerably less excited about its quality. It’s a sign of growth. That you’ve continued to move forward as a craftsman, that you skills have been honed and broadened during the past year.

So what about the tools? Do we really rely on them too much to get the work done? I would say, definitely not! But again you have to specify just exactly what you are talking about when talking about tooling. If you rely on visual designers, drag and drop, wizards and the likes to to the majority of your work, then yes you are probably relying too much on your tools. Odds are that you will have a hard time to get anything outside of standard behavior to run and there will be pain points when you need to debug.

However you would do yourself (and your employer) a huge disservice if you did not make it your goal to know the tools in your toolbox as good as possible. What’s wrong with knowing how to use the debugger, the IDE and tools like ReSharper as good as possible? Used correctly they will have a huge impact on productivity. Make sure you know the finer details of the tools and make them work for your and not the other way around. Yes, sometimes tools do get in the way of the goal, even slow you down, and when that is the case, don’t use the tools! Tools are there to help you when you need them, not to act as a crutch you always have to lean on so you don’t fall on your ass.

Well there you have my thoughts on the subject. It’s always up to the developer, not the companies. Always.

Thoughts on Jon Skeet not being allowed to renew his MVP

Today I launched twitter and saw some tweets that mentioned that Jon Skeet was no longer an MVP. Jon no longer an MVP? The very same Jon that has an unchallenged amount of reputation on the user list on Stackoverflow.com, the Jon that you’ll have a hard time not coming across if you browser the popular help outlets for .net related questions? Knowing well that Jon is one of the busiest guys in the .net community, when it comes to helping others out, this came as quite the surprise to me. So I headed over to his MVP blog and he confirms that he has asked not to be reconsidered fro renewal this year.


What came as an even bigger surprise to me was the reason behind it all. Apparently he had asked his employer whether or not it would be ok for him to be renewed this year and was advised that it would not be a good idea. So his employer doesn’t want him to receive recognition for his awesome contribution to the .net community? What business is it of theirs if he gets recognition for something he does on his spare time? Turns out (I can’t say I’ve been following his career) he works for Google and this is when I got a really sad expression on my face!


Of course everything here after are purely my own speculation and conclusions, but it looks like Google didn’t want one of their employees to get a Microsoft award, doesn’t it? It’s no secret that Microsoft and Google are fierce competitors. Microsoft is trying to gain shares of the online advertisement business, a multi-billion market, while Google have started gaining shares of markets that Microsoft have been perusing for years, such as mobile devices and operating systems. Don’t get me wrong, I think that the competition is a good thing for me as a consumer and I even endorse it, but I was hoping it didn’t have an effect on the employees of said companies.


I know a lot of people in the .net community and many of them work for Microsoft. There doesn’t appear to be a problem with people at Microsoft owning Apple hardware such as laptops, iPhones and iPods, not does there appear to be a problem with them using the Google search engine instead of Bing. I hope I’m wrong about this, surly Google can’t be that restrictive when it comes to their employees choice of hardware and platforms?

I hope the people at Google wake up and have a change of heart, Jon deserves to receive recognition for his contributions to the .net community despite who he works for. It can’t have been a secret who he was, what he did and that he was an MVP when he got hired.


Jon Skeet for MVP