ASP.NET MVC/Ruby on Rails Death Match

In this corner, our first contender, weighing in at 35 kLOC of C#, we have ASP.NET MVC. In the other corner, weighing in at 168 kLOC of Ruby, we have Ruby on Rails. We’re going to see what it takes to build a web app – test-first – in both frameworks. We’ll compare and contrast their relative strengths and weaknesses. The goal is to give a balanced perspective on these two popular frameworks.

Functional JavaScript

All too often JavaScript code ends up looking like a plate full of procedural spaghetti, but it doesn’t have to be that way. Believe it or not, JavaScript is a functional language with first-class functions, closures, higher-order functions, and more. We will look at some basic functional techniques in JavaScript and examine functional idioms in jQuery and underscore.js. Throughout we will tame some spaghetti code by applying these functional ideas.

Git Magic

Behold the wonders of detached head state. Watch in horror as commits are brought back from the dead. Feel cold sweat drip down your spin as a repo is bisected looking for bugs. Be amazed as history is rewritten right before your eyes. Come see the amazing power of Git.

Git Internals

Welcome to the anatomy lab. This session is not for the faint of heart. We will be looking deep into the internals of Git. We will examine how Git arranges its repository structure and why. Only the morbidly curious need attend.

Getting Started with Ruby on Rails

In this session, get a gentle introduction to the Ruby language and how to get started with your first Rails app.

Ruby without Rails

Ruby is about more than just Rails and web development. Ruby is a fascinating and powerful language that will put a smile on your face with its elegance. Come learn some Ruby.

Dr. StrangeScript or: How I stopped Worrying and Learned to Love JavaScript

For years JavaScript was ridiculed as a toy, the red-headed step child of the programming languages. It got less respect than Rodney Dangerfield or BASIC. But JavaScript has grown up and is looking more competent all the time. In this session we’ll take a look at some of the must-know JavaScript libraries that should be in every web developer’s toolbox, including jQuery and Underscore.js. We’ll also delve into the fundamentals of testable JavaScript using QUnit and Jasmine.

‘Casting as a Full Contact Sport

Ever thought of starting your own podcast or screencast? Come learn the fundamentals of producing your own audio and video to share on the web. I’ll cover equipment, essential software (both for Windows and Mac OSX), hosting, recording tips, and much more. Fame and fortune is within your reach! Sign up now!

The Shell Game

You’ve run the odd command line program, but do you really know your shell? Do you understand the power awaiting you at your fingertips? Come learn how to harness the power of your shell!

Vim for the Keyboard Ninja

So you think you’re a keyboard ninja? You think you know your shortcuts down cold? But do you know Vim? Vim is a text editor available on every modern OS. It feels extremely strange and quirky at first, but is immensely powerful when you understand it. Vim plugins exist for many popular editors and enable Vim shortcuts that work across environments and platforms. (e.g. VsVim or ViEmu for Visual Studio and IdeaVIM for IntelliJ-based editors.) Vim will take your keyboard ninja skills to the next level. Come learn the zen of Vim and sling code like a master.

Better Living Through Specs

Behavior-driven development or BDD for folks in the know. Surrounded by hype and buzz about  improved code quality, looser coupling, and higher productivity. But can writing specifications really make you a better programmer? We’ll look at what BDD really is, when to use it, when not to, and how it can change your life.

Effective Rails Development with Vim

Eschewing an integrated development environment (IDE) for a glorified and oft-maligned text editor such as Vim might seem like a strange choice to some, but Vim is a surprisingly powerful development environment for those who choose to learn its many features and functions. This session shows you how to set up an incredibly powerful and customizable Rails development environment using Vim, Janus, Growl, Bash, and a suite of other powerful tools.

TDD/BDD with RSpec & Cucumber

RSpec and Cucumber are the bread and butter of Ruby development. Learn how to write Cucumber features to drive out high level system behaviour. Then jump down into RSpec specifications to test-drive out the actual implementation of the system. See how outside-in development can improve your code and keep you focused on the problem at hand.

TDD/BDD Dojo

You’ve heard the hype. You’ve heard the buzz. Improved code quality. Looser coupling. Higher productivity. But how does Test-Driven Development and Behaviour-Driven Development really work in practice? In this dojo, we will work through a series of code katas to familiarize you with how TDD and BDD work in practice. Bring your laptops and get ready to code in this fun-filled introduction to TDD and BDD.

What’s New in ASP.NET MVC 3?

ASP.NET MVC 3 is hot off the presses and ships with a host of new features. Come learn what’s new and improved including the new Razor view engine, global action filters, dynamic view models, new action results, improved client-side validation, better support for dependency injection, and more!

Learning to Love JavaScript through jQuery

I’ll take you on a tour of jQuery and show you that JavaScript is anything but a toy language. JavaScript is a powerful functional language and jQuery allows you to harness that power with truly amazing results. Come learn about selectors, effects, DOM manipulation, CSS, AJAX, eventing, and much more.

Testable JavaScript

Your client-side JavaScript is code as worthy of testing as any server-side code that you might write, but often JavaScript testing is ignored. This session will introduce you to QUnit and Jasmine, two popular JavaScript testing frameworks. Come see how you can easily incorporate TDD/BDD techniques into your web development stack and increase your confidence that your JavaScript code is as robust as your server-side code.

HTML5: Tomorrow’s Technology Today

You’ve heard the buzz, but what does HTML5 really mean to you as a web developer? Come learn about the new technologies that comprise HTML5, such as <audio>, <video>, <canvas>, offline apps, local data storage, and more. Learn how you can apply these technologies with today’s browsers to build new user experiences.

What’s New in NHibernate 3?

NHibernate is a mature, open source object-relational mapping framework. Version 3 was released in December 2010 and includes many new features including: LINQ support, Future queries, strongly-typed criteria queries, lazy loaded properties, and more. Come learn what is new in NHibernate 3 and the world of object-relational mapping.

Emergent Architecture with TDD/BDD

As architects, we have all experienced the folly of BDUF (Big Design Up Front) – spending weeks or months perfecting an architecture that fails when it meets the real requirements and real code. Is it possible to design in the small? How can we avoid unintended complexity, which cripples so many code bases? Can we build enough of an architecture to start writing code and then flesh out our architecture as the code evolves? In this session we examine how Test-Driven Development (TDD) and Behaviour-Driven Development (BDD) allow us to solve these conundrums. We will see how we can use TDD/BDD to focus our architectural efforts in the high-value areas of our code base to achieve just-in-time architecture.

NHibernateNHibernate Dojo

I’ll be covering NHibernate fundamentals, mapping with Fluent NHibernate, and querying with LINQ to NHibernate. This session is intended to be very interactive with attendees working examples on their own laptops and asking questions.

jQueryjQuery Dojo

I should have called this session: Dr. Weblove or How I Learned to Stop Worrying and Love JavaScript. In this dojo, I’ll take you on a tour of jQuery and show you that JavaScript is anything but a toy language. JavaScript is a powerful functional language and jQuery allows you to harness that power with truly amazing results. Come learn about selectors, effects, DOM manipulation, CSS, AJAX, eventing, and much more.

Convention-over-Configuration in an Agile World

As developers, we spend an inordinate amount of time writing “glue code”. We write code to transform database rows to domain objects… domain objects to view-models or DTOs… We write code to configure inversion of control containers and wire dependencies together. We write code to style our UIs and respond to UI events. Wouldn’t it be nice if this could happen automagically for us? This session will look at using convention-based approaches using Fluent NHibernate and Castle Windsor to reduce the amount of repetitive code and accelerate application development.

Available online from InfoQ here.

Convention-over-Configuration in a Web World

As developers, we spend an inordinate amount of time writing “glue code”. We write code to transform database rows to domain objects… domain objects to view-models or DTOs… We write code to configure inversion of control containers and wire dependencies together. We write code to style our UIs and respond to UI events. Wouldn’t it be nice if this could happen automagically for us? This session will look at using convention-based approaches using AutoMapper and jQuery to reduce the amount of repetitive code and accelerate application development.

Agile Development with IoC and ORM

As developers we now have powerful tools in our toolbox, such inversion of control containers and object-relational mappers. But how can we use these tools to rapidly build maintainable and flexible applications? We will look at advanced techniques such as convention-over-configuration in IoC containers and automapping ORMs to quickly build applications that can evolve over time.

Doing More With Less: Accelerating Development Using Convention-over-Configuration

As developers, we spend an inordinate amount of time writing “glue code”. We write code to transform database rows to domain objects… domain objects to view-models or DTOs… We write code to configure inversion of control containers and wire dependencies together. We write code to style our UIs and respond to UI events. Wouldn’t it be nice if this could happen automagically for us? This session will look at using convention-based approaches using Fluent NHibernate, AutoMapper, Castle Windsor, and jQuery to reduce the amount of repetitive code and accelerate application development.

Light Up Your Architecture with Convention-Over-Configuration

Inversion of Control (IoC) containers, such as Castle Windsor, increase the flexibility and testability of your architecture by decoupling dependencies, but as an application grows, container configuration can become onerous. We will examine how convention-over-configuration can allow us to achieve simplicity in IoC configuration while still maintaining flexibility and testability. You can have your cake and eat it too!

Achieving Persistence Ignorance with NHibernate

Object-relational persistence can be very complex and middle-tier code is often dominated by persistence concerns. Your Customer class probably contains more code related to loading and saving customers to the database than it does actual business rules about customers. Wouldn’t it be nice if you could remove all this persistence-related noise? This session examines why the concept of persistence ignorance is important and how to use NHibernate to build persistence ignorant domain models.

Taming Software Dependencies with DI and IoC

Software inevitably contains dependencies. Dependencies between classes. Dependencies between layers. Dependencies with third-party libraries. How can concepts like dependency inversion, dependency injection, and inversion of control help you tame your software dependencies? Where does an inversion of control container, such as Castle Windsor, come into the picture and do you need one? Can Binsor help you achieve convention over configuration? This session answers all these questions and more…

To C# 3.0… And Beyond!

C# 3.0 introduces lambda expressions, extension methods, automatic properties, and a host of other features. We will look at where C# is today, where it is going tomorrow, and what ideas we can borrow from languages like F# and Ruby to improve our C# code. Plus find out the real reason for the new “var” keyword.

Simple Patterns for Simple Problems

Everyone has that little (or not so little) class called Utility that holds all kinds of intersting bits of business logic. It is a hodge-podge of code that you’re not sure where to put. This session will examine some common types of methods found in utility classes and how to refactor your design using simple patterns to eliminate these troublesome kitchen-sink classes.

OO Principles: Beyond Encapsulation, Inheritance, and Polymorphism

Any developer worth their salt knows these pillars of object-oriented programming, but there is a lot more to good object design. This session explores the fundamental principles of design patterns, including low coupling, high cohesion, single responsibility, open-closed, and other principles that lead to better software designs.

Queuing and Caching to Scalability

Performance and scalability are two sides of the same coin, but subtly different. Performance is about raw requests per second or similar measure, whereas scalability is about how performance changes as load increases. How can you keep your application – be it website, web service, smart client, or other – responsive as the number of users increases. This session will explore queuing (MSMQ and WCF) and caching techniques for scaling out applications and will examine architectural strategies for minimizing scale-out cost.

ASP.NET Kung-Fu: Advanced Techniques and Idioms

Unbeknownst to most developers, there’s a lot more to ASP.NET than ASPX pages. In this session, James will explore some advanced techniques in ASP.NET including: HttpModules for modifying the run-time behaviour of your website; HttpHandlers for serving up non-HTML content; security context manipulation; and other fun topics.

Tools of the Trade: Must-Have .NET Utilities

The number of .NET development tools available is extensive and can be quite daunting, but there are a few that should be in every developer’s toolbox. James will examine a wide range of freely available tools including “The Holy Trinity” (NUnit, NAnt, and NDoc), source control, continuous integration, static and dynamic code analysis, debugging, and related tools. The talk will include numerous demonstrations as well as discussion about the practical application of these tools to a development project.