You have reached the blog of Keith Elder. Thank you for visiting! Feel free to click the twitter icon to the right and follow me on twitter.

NYC Code Camp Saturday / MIGANG Wednesday

Posted by Keith Elder | Posted in .Net, Asp.Net, C#, Presentations, SignalR, Speaking | Posted on 13-09-2013


NYC Code Camp Saturday 9/13/2013 – Simplicity Is Genius

Saturday I will be attending my first New York City Code Camp (@codecampnyc ). I’m traveling thousands of miles to help you make you a better you. I’ll be doing the talk “Simplicity Is Genius”. Looking at the list of sessions this is the ONLY real Soft Skills session on the menu so I really encourage the New York faithful to attend. If you don’t come you are doing yourself a disservice. Putting technical content in the brain is great but you need to work on YOU some as well.

In this session we’ll take a break from code and focus on the other skills developers need called Soft Skills. We’re going to go deep on what "Simplicity is Genius" really means from the eyes of Forrest Gump and look at many of the life lessons Forrest was trying to teach us in the movie. After attending this session you will learn the value of providing value, how to better communicate with team members, the importance of being nice, and how to leverage techniques used successfully by salesmen backed by scientific research so you can ultimately… tell IT like Forrest Gump.

MIGANG Wednesday 9/18/2013 – Web Applications Re-Imagined for Today’s Demanding End Users

After CodeCampNYC I’ll be heading to Detroit to work onsite for the week. The timing works out so I can make the MIGANG on Wednesday night. I’m really looking forward to it and stressing at the same time as I’m giving a brand new talk entitled “Web Applications Re-Imagined for Today’s Demanding End Users”. If I can pull everything off I want this should be fun, enlightening, dangerous, scary, exhilarating all at the same time.

In this talk we are going to take an extreme departure from a typical three-tiered web application and look at how we can leverage asynchronous messaging, queues, and events in exciting ways.  We’ll be architecting a web application utilizing SignalR, TopShelf, Asp.Net, RabbitMQ, and ServiceStack to create a scalable, highly available, buzzword filled, real-time web application.  We’re going to look at how we’ll handle long running business processes that cross service boundaries using command queues and events to push notifications back to our end users. We’ll learn that we’ve actually made our application stronger, faster, and simpler to write (even transactional when we need it). In the end we’re going to try to break our application to find out if it is truly Engineered to Amaze.

If you are in the area I hope to see you at either event, don’t forget to say hi!

Speaking at SQL Saturday #234 Baton Rouge August 3rd

Posted by Keith Elder | Posted in .Net, C#, Speaking | Posted on 30-07-2013


Prepare the crawdads and gumbo because I’ll be in Baton Rouge, LA this coming Saturday doing some talks at the SQL Saturday #234 event!

I’m planning on doing two talks Saturday as well as recording some http://deepfriedbytes.com episodes if time willing.

Here’s the talks I’ll be giving and more about them.

Channeling Your Inner Forrest Gump – Simplicity is Genius

In this session we’ll take a break from code and focus on the other skills developers need called Soft Skills. We’re going to go deep on what "Simplicity is Genius" really means from the eyes of Forrest Gump and look at many of the life lessons Forrest was trying to teach us in the movie. After attending this session you will learn how to better communicate with team members, provide value not only to your business but also your profession, the importance of being nice, and how to leverage techniques used successfully by salesmen backed by scientific research so you can ultimately… tell IT like Forrest Gump.

That’s right, I’m bringing the GUMP to Baton Rouge. No prerequisite required to attend this talk and you don’t even have to be a developer! I gave this talk at DevLink a few years ago as the keynote and I’ve given in another time or two in smaller settings and each and every time I give it it hits home with many in the audience. You don’t want to miss this one I promise.

Building an English-Based Rules Engine using the Dynamic Language Runtime and IronRuby

In this session we will explore writing an English-based rules engine that allows developers to create domain-specific rules for an application that can be easily understood by anyone. We will use a combination of C# and the DLR (dynamic language runtime) with IronRuby on the .NET platform to create a way to write, manage, and process rules for an application.

If you’ve ever wanted a simple way to store and process business rules whereby you can still read them come to this talk. It is geeky, it is fun and practical. We’ve already created four different interfaces to this at work and are using it in production (with some enhancements of course) so it isn’t just theory.

Hope to see you there and feel free to follow http://twitter.com/sqlsatbr via Twitter.

Meet Quicken Loans Intern Waleed Johnson, Future Mayor of Detroit

Posted by Keith Elder | Posted in .Net, Asp.Net, JabbR, Programming, Quicken Loans, SignalR | Posted on 29-07-2013





Meet Waleed (pictured above) sitting at one of the many workstations he has enjoyed this summer. This is Waleed’s second year interning with us at Quicken Loans and I am so happy Waleed joined us again this year. Because he’s spent so much time with us as a team member I wanted to do something memorable for Waleed. He has worked side by side our team and I’ve gotten to know what an extraordinary young man he is. Given that I thought I’d document his journey with us so he’d have something to look back on over the years to remember.

Waleed goes to Notre Dame but don’t let his Irish ties fool you as he lives and breathes Detroit (even his twitter handle is @detroitpride313). I remember reading his resume for the first time and he listed several community service events he was apart of in Detroit. This really caught my eye. Who was this young kid that loved Detroit so much that he was out volunteering at a young age?

When you first meet Waleed you probably think he plays basketball because of his tall stature, but you’d be mistaken as he’s learning how to write software, C# & .NET to be specific, but also open source software. I recently sent Waleed some questions about his internship at Quicken Loans and here is what he had to say.

Where are you from?

I am a proud resident of the East Side of Detroit, where I have lived essentially my whole life. Unfortunately, I was born in Long Beach, California where I lived for a year until my father passed away so I cannot claim I was born here. After my father passed away my mother—who was born and raised in Detroit—moved back to Detroit. I have nothing against Long Beach, but I am a proud lifelong Detroiter who lives and breathes Detroit. I jokingly told my mom that giving birth to me in Long Beach was the only mistake she has ever made. If I could I would change my birth certificate, but although I was born in Long Beach I was “Made in Detroit.”

See I told you he loved Detroit! I think this really tells a lot about Waleed as a person because he’s lived in Detroit practically all of his life. Even though Detroit recently filed for bankruptcy Waleed still sees it for what it can be, not what it currently is. Each and every time I’ve shown Waleed something he’s taken to it and approaches things with a “glass is half full” mentality. Hearing Waleed talk about his Mother and how she raised him it is no wonder he has this outlook on life.

How did you choose computer science?

My first exposure to programming, and really the only exposure I had before college, was through making video games with a program called GameMaker. Although I did not originally enter school as a Computer Engineering major I really enjoyed that experience and I feel like it was in the back of my mind. I started my freshman year as an Electrical Engineering major, because I really liked the electrical circuits component of my high school physics class, but midway through I talked to my counselor and changed to Computer Engineering.  I told my counselor how I have always loved computers and how I was not really interested in all of the things that Electrical Engineers do and he recommended I switch to Computer Engineering. Computer Engineering has been a perfect fit because I still get to take some Electrical Engineering courses, but the majority of my classes are on programming, which I’ve really come to love.

Describe your first year intern experience at Quicken Loans

My first year experience was something I will never forget. I was excited because of the unique culture here and how the company really seems to care about the employees. However, the best thing about my first year was that it gave me a reality check about what it takes to succeed in this industry. I was oblivious to just how far behind I was before I came here last year. I thought that because I enjoyed my programming classes in school and did well in them that I would be fine in the real world, but I was definitely wrong. Once you gave me the skills assessment test last year that really showed me the large gap that exists between what is taught in school and what you need to know in the workplace and I will never forget that.

You are welcome Waleed and I am happy to read you *got it* as to why we did that skills assessment. If you take anything away from your internship I want it to be this:

Remember that no one can give you an education, you have to give it to yourself.

Many students don’t get this though. They think because they went to class that’s it. Walking into a classroom and only doing what the professor or teacher asks of you is only part of your education. Waleed, no matter where you wind up in life be a continuous learner. You’ll go further than the rest.

What’s the coolest thing about interning at Quicken Loans? (biggest coolest most fun perk)

There are many amazing perks you get as an employee of Quicken Loans such as discounts in places around the city, but the thing I think is coolest is the opportunity to work for a company that loves Detroit and is as committed to helping Detroit as I am. I love the fact that Quicken puts its money where its mouth is and is actively engaged with community service initiatives. Quicken did not just move into a building in Detroit when it came downtown in 2010: it became an active part of Detroit, and I love that. The pride of knowing that I work for a company that cares about and is making a difference in the community around it far exceeds any monetary benefit that I can receive here.

Did I mention that Waleed loves Detroit? He’s all in as you can see and this is great (more on this later though). I think I should also mention Waleed has won more prizes from our internal intern contests than I care to count. For those that don’t know we have an internal website that a couple of our team members, @johnbfair and @chrisroland, built just for interns called “D-Tour”. It turns interning at Quicken Loans into a game and is just one of the things that highlights our culture. For example, interns have to go out and visit or eat at certain places and then send a picture to twitter with a hash tag. By doing so points are added up and they win prizes. The week ending 6/23/2013 Waleed was in 6th place. Not bad considering we have 750 – 1,000 interns!


When you came to Quicken Loans, you didn’t have any .NET skills. Do you think colleges should be targeting .NET more? If so. Why?

Yes, I definitely think that colleges should be targeting .NET more. I really like .NET because it makes website and web application design simple and understandable through tools such as ASP.NET MVC. Additionally, .NET gives you access to powerful languages such as C# which has an amazing set of built in features such as LINQ, which allow you to spend more time on solving the problem at hand than you would with other languages where you have to focus on writing basic utility functions that are already included in the .NET languages. Finally, another great thing about using .NET is access to Visual Studio. Before coming to Quicken Loans all of the coding I had done was in C and C++ on Linux machines using simple text editors. The bottom line is a lot of the things I have learned in school are outdated and placing an emphasis on learning things that are actively being used in the industry would be more beneficial.

I couldn’t agree more with Waleed and this is why more colleges and universities need to be taking advantage of https://www.dreamspark.com/. Microsoft gives students access to all the same tools professionals are using in the workplace so it doesn’t cost the school or students anything to learn to build solutions on these technologies. We just need college professors to step  out of their comfort zone and learn a new platform. Teaching is learning so they have to learn it *first* before they can teach it, and that is the problem with adoption. But don’t let that stop you. Go sign up and continue your journey!

By the way if you are curious as to what Waleed has been working on these past summers he’s been working on an open source project called “JabbR”. JabbR is an Asp.Net real-time web chat tool that leverages a technology called SignalR, also an open source technology. A couple years ago as part of our innovation time myself and a couple other engineers forked JabbR and stood up an internal chat system with it. We added a bunch of features, made it work with active directory, pulled in our corporate pictures and tweaked a bunch of things.  It has been widely adopted internally. What Waleed has been working on is taking all the things we changed and he’s adding them back into JabbR via our fork over at https://github.com/QuickenLoans/JabbR.

Here is a screen shot of some of Waleed’s work where he’s adding active directory support into the admin screen. By default JabbR works by using Twitter, Facebook, Google or creating an account. We already have single sign-on working and everyone’s badge photos so requiring everyone to have to create those public accounts and update their own images just doesn’t make sense. When pushed out hopefully other companies will be able to take advantage of this feature as well.


I’ll note this isn’t a trivial change as it impacts lots of little things throughout the application and Waleed has done a great job of tracking them all down.

The big payout for Waleed is he now knows how to use Git for source control and will have something to point to later on that he contributed to. I think that is awesome. Great way to start a resume.

Quicken Loans recently became the #1 place in IT to work for. What are some things you can tell others that make it cool from an Intern perspective?

From the perspective of an Intern in the IT department I think that one of the biggest things that make Quicken Loans cool is the focus here on innovation. A great example of this is Bullet Time. Bullet Time occurs every Monday from 12pm until the end of the day. During that time you are free to work on projects that have value to the company, but are not part of your daily responsibilities with the whole purpose being encouraging innovation. Bullet Time allows you to learn about and experiment with new technologies, which is pretty cool. This is just one of the many examples that show how Quicken not only cares about business, but also cares about your development as an engineer. Another cool thing I have noticed is how the IT department lives up to the company saying “Obsessed with finding a better way.” If you are a developer that thinks something could be more efficient if it was written in say F# you are free to present that to your team leader. People here at Quicken are always trying to find a better way to do things and I think it is great that you do not have to be bound to do things a certain way because that is the way it has always been done.

In five years where do you hope to be?

In five years I would like to be an established Software Engineer living and working here in Detroit, hopefully for Quicken Loans. I would also like to be involved on some scale in investing in the city and I would likely be learning more about the Detroit City Council of which I intend to be a part at some point in my life.

Did I mention Waleed loves Detroit? During some other conversations I learned that Waleed’s ultimate goal would be to become Mayor of Detroit. That’s right. Mayor. I think that is awesome. I fully support him in this journey and others out there should as well. Why? Because you just won’t find a more honest, true moral compass, do the right thing kind of guy than Waleed. Detroit needs more young people like Waleed who want to see Detroit grow and see it for what it can be not what it currently is. Pictures are worth a thousand words but this one may be about 10,000 as it really shows where Waleed is headed. He drew this at Quicken Loans on one of our walls and it expresses precisely why he is going to be the Mayor of Detroit one day.


You can follow Waleed’s journey at Quicken Loans and then his journey to becoming Mayor of Detroit via twitter at https://twitter.com/detroitpride313.

If you are interested in interning at Quicken Loans you can read more about it here: http://www.quickenloanscareers.com/about/internship-program/.

If you are interested in working at Quicken Loans or refinancing or purchasing a home contact me here http://keithelder.net/contact.

Migrating Code From TFS to GitHub

Posted by Keith Elder | Posted in .Net, Git, TFS | Posted on 24-07-2013

Tags: , , ,


Before I get started I wanted to start with a disclaimer that this article is not an article about how to use git nor is it going to discuss the differences between how TFS and Git vary when it comes to source control. I’m going to assume you’ve made the decision to either try Git out for source control or you are ready to make the jump from TFS completely to using Git for source control. Trust me this really isn’t a painful process and I’m going to make it as simple as I can. Here we go.

Installing The Tools You’ll Need

Since we are migrating code from TFS to GitHub I am going to assume you already have TFS set up and installed. I’m also assuming you are using Windows and are a developer on the Windows platform. Here are two ways to get going with git. The first way is the easiest and the second way is the *geekiest* for more advanced users.

  1. Github for Windows  – A complete install to use git on windows as well as GitHub (note does not work directly with GitHub Enterprise at this time but it doesn’t matter it still makes setting up git super simple).
  2. Chocolatey  – A Machine Package Manager, somewhat like apt-get, but built with Windows in mind. This will allow one to easily install numerous packages and if you haven’t started using it yet you’ve been missing out on awesomeness.

Setting up Git Using GitHub For Windows

This is the easiest way to really set up git source control on Windows locally (unless you are already using chocolatey). Using this gives you all the tools you’ll need to start working with git and you do not have to have admin rights on your machine, everything is installed locally. Go to http://windows.github.com/ and kick off the GitHub for Windows install. Note that you do not have to create an account on GitHub to get the tools installed locally. GitHub For Windows comes with PoshGit (a nice powershell utility) and I personally find using Powershell with git from the command line the easiest way to proceed.

After installing GitHub for Windows you’ll be presented with this screen.


Login if you have a github.com account or go create one (again not completely necessary).

If you don’t want to create an GitHub account just hit cancel. After doing so click tools in the top center of the screen and select options.


In the default shell section select the shell you wish to be opened when you open the “Git Shell” from the install menu. For me personally I selected PowerShell since it comes set up with PoshGit and is faster than using a bash prompt on Windows. Plus PowerShell is just cool!



Once the option you want to use is selected press the Windows key on your keyboard and type “git shell”. This will search for the git shell so you can launch it. In Windows 8 it will look like this but you can do the same thing in Windows 7 or Windows Vista.


Launching this will launch the desired shell. You are now set up and ready to configure git (more on that later).


Setting up Git Using Chocolatey


Chocolatey is awesome and allows Windows users to easily install tons of open source software the same way Linux distributions have been doing for years. Once Chocolatey is installed it becomes trivial to install git as well as git for Team Foundation Server (TFS). To get set up with Chocolatey head over to http://chocolatey.org and follow the simple instructions. To install it all you are going to do is paste a line into a command window.

Once it is installed you can then easily install git and git tfs with the two following commands:

cinst git

cinst gittfs

These installs will look like this from a PowerShell window:



Configuring Git

Either way you decided to go on the setup above (GitHub Windows or Chocolatey) you now have git and git tfs installed. Now it is time to configure git. Git needs to know two things before we get started and those are username and email. Note I have re-printed the following information from https://help.github.com/articles/set-up-git.


First you need to tell git your name, so that it can properly label the commits you make.

git config –global user.name "Your Name Here"

# Sets the default name for git to use when you commit


Git saves your email address into the commits you make. We use the email address to associate your commits with your GitHub account.

git config –global user.email "your_email@example.com"

# Sets the default email for git to use when you commit

Note: if you are using github.com you’ll need to use the email address associated with your account, if you are using an internal github enterprise server you’ll need to do the same

Migrating Code From TFS

Now that git is set up and configured locally we need to pull our code down from TFS locally. The purpose of the *git tfs* tool is it allows us to pull our code from TFS while also saving the commit history. If you’ve read up on git you know it is distributed which means everyone has a full copy of the repository locally.

I’ve set up a sample folder in TFS called XAmple. It only has one file in it that has been modified and checked back into TFS. It is this code base that we want to move to git.


To move this we are going to open the Git Shell. If you installed GitHub for Windows press the windows key and type “git shell” and click the icon. If you used Chocolatey open up PowerShell. Once you are at the command prompt we are going to use git tfs to pull all the code and changes from TFS down and have a git repository created for us locally.

The command to run is:

git tfs clone http://{nameofserver}:8080/tfs/SoftwareCollection $/_your_path

Here is the example from the TFS example above:


Note that we had 3 commits in TFS and we also have 3 commits showing up in our PowerShell window. Note for larger projects this can take some time to pull everything down.

Typing “git log” we can even see these commits directly from git.


Getting Our Code Into GitHub

Now that we’ve pulled our code down locally we can easily push it up into GitHub.Com or a GitHub Enterprise server. Here are the steps needed to get this going.

Before being able to push code to GitHub be sure you’ve set up an SSH key in GitHub and that it works. In other words you can authenticate and clone another repository.

The first thing we are going to do is create a repository in GitHub.


On the next screen fill in the fields. We’re going to assume this is a public repo and we’re going to add a README as well as set up the .gitignore file for CSharp (this is so files that don’t need to be committed don’t get put into the repo by accident).


We are then going to select the SSH option and copy the location in the SSH form. We’re going to then add a remote location to the repository that was created using git tfs.



Next step is to add this remote location to our local git repository so we can push and pull code to GitHub or GitHub Enterprise. I’m using our internal Git server so your settings may vary.


Next we are going to pull down the repository we created so the README and .gitignore get updated locally.


And then we are going to then push everything backup.


Now that everything is pushed up to GitHub anyone else can fork our repo, issue pull requests and we can even see the history of our files in GitHub.


And that is it! We’ve just taken a TFS repository, pulled it down as a git repository, and pushed it back up into GitHub. Once the tooling is installed this process goes pretty quickly. The thing that takes the longest is to pull the changes from the TFS server down locally, but once that is done it is just a few commands to push things back up into GitHub.

That’s it. Happy gitting!

Building an English-Based Rules Engine in .NET with IronRuby Slides and Demo

Posted by Keith Elder | Posted in .Net, C#, CodeMash, IronRuby, Presentations, Speaking | Posted on 19-01-2012


As promised at CodeMash to those that attended my session I finally am getting around to getting the slides and demo from my talk posted to my web server. You can download everything at this URL location:


What you will need to run the demo:

  • Visual Studio 2010

To run the demo you should be able unzip it, open it up in Visual Studio and hit F5.

Once the demo opens you’ll be presented with this.


In the middle of the screen you’ll see sample rules for the survey already loaded.

To convert these rules to Ruby script click on the “SurveyRuleSet” option listed under “Rule Sets”. This will load all of the available rules for that rule set.


Once you have the rules loaded for the SurveyRuleSet you can then click “Convert To Ruby Script” button and the English text in the middle of the page will be converted into Ruby Script.


Once you have the Ruby script generated click the “Use Script in Survey”.


This will open a form that has questions and answers.


Once the form is open just press “Submit” and the rules will fire. You can close the form, change the rules, re-gen the script and then re-run the form to see new rule values run.

When the “Submit” button on the Survey form is called, this is when the IronRuby engine gets invoked.

You can also load the SouthernRuleSet and then load the pre-typed Southern rules to see a “Southern DSL” of the same rules.

In Visual Studio you can open the SurveyRuleSet.cs file and uncomment the other attributes to enable Spanish instead of English (just as an example).


What you should try to take away from this the most are what it is doing and what is possible. We are running something very similar to this in production so this isn’t smoke and mirrors. There are a lot of things that are missing in the demo, but they are completely doable with some additional work. For example grouping isn’t done in this example, other rules like greater than, lesser than etc could all be added to the base ruleset class. Use your imagination and go wild.