comments edit
programming, streaming

Recently, I’ve become somewhat hooked on watching a few people live code various things on Twitch.

Here’s the list of people I’ve currently been tuning into, as the schedule allows:

Kyle Shevlin

Kyle streams mostly JavaScript related programming

Check out his Twitch channel!

Suz Hinton

Suz streams a variety of items, from merging pull requests, to speed coding, to IoT

Check out her Twitch channel!

Jeff Blankenburg

Jeff has just recently started streaming on Alexa development, and I hope he does more of it!

Check out his Twitch channel!

Jeff Fritz

Jeff has been doing a stellar job of streaming on a consistent schedule, on a variety of topics, and has even starting bringing on guests for pair coding!

Check out his Twitch channel!

These are the only 4 coding-related streamers I’ve come across so far, but I’m definitely looking for more.

Do you have anyone you recommend? Let me know in the comments!

comments edit
codemash, conference, review

After missing CodeMash last year for my wife’s cancer surgery, I was able to make my triumphant return to CodeMash this year.

I had a great time, meeting new people, talking to old friends, and getting to spend some time with coworkers (old AND new). The food was fantastic - not sure if anything had changed, specifically, but much better than my last visit. My co-workers and I played the Artemis simulator with another group of folks, and that was a complete blast. Somehow, though, I ended up as the captain, which I wasn’t quite ready for. I did get to say, “Make it so”, so that made me feel better.

With all that, let’s get into the detail on the pre-compilers/sessions I enjoyed!

Day One - Tuesday, January 9, 2018

Getting Real without Getting Fired – Saying Things in a Way People Can Hear

Presented by Allison Pollard & Marcus King

Allison and Marcus did a great job collaborating on this session. I walked in a little blind to be honest, as I had chosen the session based solely on the title alone. What I learned, however, is that a lot of people have the issue of “being able to tell it like it is, but nicely”. The one thing thats stuck with me, for some reason, is the discussion on “trust”. I generally lack any trust in an individual that I’ve only just met. Should I change my way of thinking, and give people the benefit of the doubt? I’m still thinking about this one, so thanks Allison and Marcus!

Leading in a Complex World

Presented by Doc Norton & Diane Zajac

Doc and Diane presented a fantastic session from start to finish. They placed us in groups and had us work together, which I always worry about, but it worked out wonderfully. Every step of the process they walked us through, led perfectly to the next and taught us leadership concepts the entire way. Honestly, if I could, I would attend this again. Great job!

Day Two - Wednesday, January 10, 2018

Webapp Pentesting for Developers and QA Persons

Presented by Brian King

This year, I decided to mix it up and check out some security related sessions. This pre-compiler was a great choice. Brian walked us through many details of pentesting/hacking, and then assisted us in learning (at a high level) some pentesting applications (Burp Suite and ZAP Proxy). This was a session I walked away from with enough “nuggets” of knowledge to go back to work and see what I can break :)

No afternoon session for me :(

Apparently, today was the day everybody decided to attend the pre-compiler. I was ~5 minutes late finishing lunch, and every single room was packed. Some were standing room only, and for a 4 hour session with a laptop, that just doesn’t work.

I went back to my hotel room and napped.

Day Three - Thursday, January 11, 2018

AWS Security Essentials

Presented by Aaron Bedra

At our company, we’re exploring migrating our servers (100%, everything) to AWS. I likely won’t be too involved in that transition, but I still like to have some cursory information, especially as it relates to security. I learned quite a bit from Aaron in this session, and as we look to migrate, will be keeping the details in mind. Check it out if you’re new to AWS!

Getting Started with Deep Learning

Presented by Seth Juarez

Okay, so, in the “picked a session I probably shouldn’t have” category… Now, I should say, this has NOTHING to do with Seth - he’s a fantastic speaker. The biggest problem here is the amount of depth (deep learning?), and mathematics this session went into, that I, honestly, was not prepared for. I haven’t looked at the type of equations Seth was presenting for YEARS, and I just couldn’t keep up. Needless to say, this one fell flat with me, but was entirely my fault. However, if you’re up on your mathematics, and are looking to learn more about deep learning, this session IS FOR YOU.

Automated Security Testing with the OWTF

Presented by Jerod Brennen

In a “learn something way out of left field” for me, which includes the finer details of application security/pentesting, I left this session with fantastic information about the OWASP OWTF tool and how to start utilizing it to break, I mean secure, my applications!

Becoming a Servant Leader, Leading from the Trenches

Presented by Sarah Dutkiewicz

2018 is my year, for a variety of reasons, but specifically related to increasing my leadership. When I saw the title (and presenter, of course!), I knew I had to sit in. Sarah gives fantastic presentations, and I knew this would be no exception. I’ve followed Sarah for a while, so I knew she had strong leadership skills that aligned with my style, making this a no-miss presentation. Needless to say, I was not disappointed. Check this session out if you can!

Machine Learning for Gamers: Dungeon Forecasts & Dragon Regressions

Presented by Guy Royse of Nexosis

I try to never miss Guy speak, and this year is no exception. He’s great about weaving geekery into his presentations, even when it has to do with machine learning! I’ll be the first to admit, I don’t (yet) understand machine learning, but I still had a great time.

You Will F**k up & that’s Ok (How to be a Male Ally in Tech)

Presented by Ronda Bergman

The current status of the software development industry is getting worse, at least to me, but I never know what to do or how to do it. Ronda gives fantastic advice on a variety of topics on how to be a Male Ally, and letting us guys know that we’re going to screw it up - but as long as we’re sincere about our dedication to making tech a better place for everyone, not just men.

Day Four - Friday, January 12, 2018

Public Speaking without Barfing on Your Shoes

Presented by David Neal

I am entirely petrified of public speaking, yet I so desperately want to. David gives great advice in this session, that honestly, has me already thinking about session ideas. If you have aspirations of public speaking, but are still on the fence, stalk David to his next presentation of this session.

Chrome Developer Tools: Raiding the Armory

Presented by Greg Malcom

Greg did such an awesome job in this presentation. Not only did he teach, but he did so in a humorous fashion, which I completely appreciate. If you’re curious about being more productive in the Chrome Developer Tools, check this session out if you get a chance, I bet you’ll walk away learning something.

Advanced Patterns for Automated UI Testing

Presented by Seth Petry-Johnson

Seth is my boss, and was going to be discussing practices and processes we use daily, so I kind of had to go, right? Well, the good news is, Seth never disappoints in his presentations. Granted, I didn’t learn anything in this session, but it was nice to see a positive response to the topic from other attendees.


I’ve already said how much of a great time I had this year, overall, but I’d like to outline the top 3 sessions that really hit home with me this year (in order):

  1. Ronda Bergman - You will F**k up & that’s Ok (How to be a Male Ally in Tech)
  2. David Neal - Public Speaking without Barfing on Your Shoes
  3. Sarah Dutkiewicz - Becoming a Servant Leader, Leading from the Trenches

Naturally, I respectfully thank every single speaker for their contributions to CodeMash 2018, but I have to give these three speakers a special shout-out for literally changing the way I think.

Thanks to everyone who made CodeMash 2018 a fantastic time! The leadership committee, volunteers, speakers, and naturally, the sponsors!

See you next year!

comments edit
meta, retrospective, planning


What a horrible year, both personally and professionally.

First, early on in the year, my wife had to have a double mastectomy due to a breast cancer diagnosis. Needless to say, the first 6 months of 2017 were spent healing - both body and mind. And, really, the mind is ongoing for this one. Thankfully, she is healthy, and cancer free.

In July/August, I took a break from social media, blogging, and pretty much any other extra-curricular activities. I cancelled all my accounts (deleted in cases where that’s an option), and just enjoyed being with my family.

In the latter part of 2017, it gets busy with the holidays and travel - but we did manage to pay off some more debt before the end of the year, which was awesome. It was also during this time, I decided to get back online and get back to business with blogging, twitter, etc. I did decide, right before December, that I would participate in the 2017 C# Advent that my buddy Matt Groves coordinated. I wrote a “quasi” C# post (the code examples were written in it :) ), but was primarily about Visual Studio and Live Unit Testing feature.

That was pretty much 2017 in a nutshell.


With 2017 over, it’s time to look ahead and plan some 2018 professional / career goodness!

I want to keep my goals for 2018 fairly simple, and try not to go overboard.

Here we go!

1. Publish 12 Blog Posts (1/month)

This one is easily measured, and not much of a stretch goal, especially since I’m going to count this post for January :)

2. Release the “Couchbase Explorer” extension for Visual Studio

The development on this has already started, and the basic extension is there. I’d like to release the first version before the end of the year. All it has to do:

  1. Allow server connections to be saved
  2. View the buckets in those servers
  3. Retrieve a read-only listing of documents in the selected server

That’s all. Slap 1.0.0 on it, and ship it. Then, we iterate.

3. Live Stream

I’ve already done this a few times. Neither time did I have any viewers, but that’s okay, because the streams easily get republished to YouTube and Twitch for later viewing, which is nice.

Ultimately, I’d like to live stream twice a month, and by the end of the year, have 100 followers on Twitch.

4. Videos

Even though the live streams get pushed to YouTube/Twitch for later viewing, I’d still like to publish a few independent videos on software development that wouldn’t be live streamed.

By the end of the year, I’d love to have published a short video for each new feature in C# 6.0/7.0/7.1, with accompanying blog posts. Even though C# 6.0 is “old”, it’s still “new enough” to warrant instructional content (in my mind).

5. Promotion

I’d like to increase my career standing this year. Now, that could mean a promotion at my current employer, or not, I don’t know. I’ve always had aspirations of owning my own software company (product or consulting), so maybe that’s the next path for me.

I think that’s enough. I don’t have grandiose goals like I used to, now that life has smacked my family in the face. Mostly, I want to create content and code.

Stick around throughout the year to see if I’m able to keep up with these goals.

Thanks for reading, hope 2018 treats you well!

comments edit
lut, live unit testing, vs2017, visual studio 2017

Welcome to the Christmas Eve edition (December 24th, 2017) of of the inaugural C# Advent Calendar! Please go and check out the other 23 awesome posts in the series.

I hope you enjoy this post / find something useful from it, and then go forth and have a very Merry Christmas!

Live Unit Testing

You may be curious what “live unit testing” means, so let’s dive into that a little bit.

“Live” unit testing is simply the automated execution of unit tests that may have been impacted by a code change, and provides the results of that test run back into the IDE (in this case, Visual Studio) in real time.

There are products out there that have provided this mechanism for quite some time - most notably, NCrunch, which is a fantastic tool.

However, Microsoft has recently given us this capability directly inside the Visual Studio IDE, without the need for external tooling/extensions!

Live Unit Testing in Visual Studio

Before we get too far, let me preface this with a few caveats:

  1. You must be using Visual Studio 2017 Enterprise edition.
  2. The feature is only supported for C# and Visual Basic projects (Full .NET Framework, or .NET Core)
  3. Using one of three supported frameworks (of which a minimum version is required)

Since the first two bullets are pretty self-explanatory, let me provide some more information on #3.

The three supported frameworks, and their editions (as of this writing) are:

Framework Framework Minimum Version Adapter Minimum Version
MSTest MSTest.TestFramework 1.05.preview MSTest.TestAdapter 1.1.4-preview
NUnit NUnit 3.5.0 NUnit3TestAdapter 3.5.1
xUnit xUnit 1.9.2 xUnit.Runner.VisualStudio 2.2.0-beta3-build1187

If you’re using a different framework, or not currently using one of the specified versions of that framework - you’re going to miss out on some sweet, sweet, testing.

To configure the Live Unit Testing feature, you can find the settings in Tools | Options | Live Unit Testing:

Live Unit Testing Settings Dialog

The new Microsoft docs platform has a great entry describing each of the settings on this dialog, which you can find at

Example Time!

In this first screenshot, I have a very simple extension setup to convert a string to a possible boolean. However, take note of the blue lines to the left of each line of code.

Code with no tests

The line tells us that it isn’t covered by a corresponding unit test, so let’s add one!

Here you can see a very (very) simple test checking our “true” condition of our extension Test is passing!

And, now that our test is executing, we can go back to our extension code, and see that Live Unit Testing is now marking the line of code as covered AND passing! Sweet Code Coverage

Clicking the green check-mark will show you the test names of tests that execute that line of code: Cool!

If we introduce a test that fails (since a “false” string should return false), such as: Uh oh

Back over to our actual code, we’ll now see which lines of code are failing during that test: Not good

And, clicking the red X will show you the test names of tests that are currently failing: Ah, that's the one


Testing your code is great, but seeing it happen in real-time is pretty darn sweet. This feature is ever-evolving as well, as Microsoft has updated the feature a variety of times already since the initial release. Keep up to date over at (and for even more information that I didn’t touch on - like test exclusions (an absolute necessity for integration tests))

Check out the 2017 C# Advent post for links to other great content!

Thanks for reading!

comments edit

This post is pretty meta, actually, but I found it a little too interesting not to publish.

When I decided to restart my blog, I wanted to use GitHub Pages / Jekyll. The problem with that is that I also have my own domain name, and I strongly believe in ‘HTTPS ALL TEH THINGS’ - which I could not do with GitHub Pages and a custom domain.

I knew there had to be a way to accomplish my very simple requirements:

  • Jekyll
  • No GitHub

Eventually, I came to the realization that all I really needed was a Linux VM, and some coffee.

My first starting point was Azure, cause I’m a Microsoft-stack kind of guy, but the price of the Linux VM that also allowed custom domains and HTTPs was over $50 USD/month. I ain’t spending that on a blog. Then, I remember my old friend, Digital Ocean. I knew I could spin up a low-end, but still enough for a blog, VM for about $10 USD/month, which I was much more comfortable with.

So, I signed back up, and fired up a basic Linux VM.

With the VM ready, I just had to figure out the configuration for everything -

  • Ruby
  • Jekyll
  • Git (plus some way of building the site when I pushed changes, ala, GitHub Pages)
  • Apache
  • Let’s Encrypt

Since I’m not a Linux guy, this took me about 4 hours to figure out. Every article I referenced did things a little bit differently than the last, and nothing worked for me. I ended up blowing away the VM at least 3-4 times.

Finally, after multiple attempts, I landed on the right set of apt-get installations and configuration changes to get all of this going again.

Before I dive into the configuration settings and walk-through, here is an overview of my blogging process, in graphical form:

blogging process overview

It all starts with me, the blue guy in the upper left corner. I make a post, and push it to my private Git repository hosted on my Linux VM from Digital Ocean. The Git repository has a post-receive hook that clones the repository into a temporary location, does all the Jekyll magic, pushes the files into the Apache folder for the site, and then cleans up after itself. The site in Apache is visible to the internet, and bound to a Let’s Encrypt certificate that auto-renews daily via a cron job.

You can also see an alternate path, where I can push the code to GitHub. This is to allow anyone to fork/clone the repository (so they can start a similar site, or maybe push a change to mine). If they decide to push a change to mine, I can integrate the change locally, and then push it to the private site.

I really like this setup (now that it’s all setup and configured the way I want/need it to be)

In the next post, I’ll begin outlining the steps I took on the Linux VM to make the magic happen.

comments edit

I’m back!

Not that you care, but still.

Content forthcoming!

Thanks for reading!

comments edit
itunes, letsencrypt, podcast

For all of you podcasters out there, Apple has FINALLY enabled support for LetsEncrypt certificates to be used on your podcast feeds. I only recently ran into this issue standing up a new feed for The Talking Devs, and getting denied by the iTunes submit process (but accepted right away via Googles).

Apparently, this change also happened somewhat silently, and currently they (Apple) haven’t even updated their FAQ on the changes.

I learned about this via a friend, that pointed me to this article:

comments edit
extensions, visual studio

Every single time I install Visual Studio, the very next step I take is to install my favorite extensions. I only have three, and here they are, in order:

  • ReSharper - I can’t live without this anymore. I’m finally to the point where I have a lot of shortcuts memorized. VS is catching up, but R# still takes the win.
  • NCrunch - Continuous testing, right in VS. Love my green dots.
  • WallabyJs - Continuous JAVASCRIPT testing, right in VS. Love my green squares :D

Pretty simple list, eh?

What about you? What are your favorite extensions? Is there something groundbreaking that I’m missing out on? Something you developed yourself? Leave it in the comments!

*Also, props to WallabyJs for being the only one in my list WITH HTTPS, BY DEFAULT.

comments edit
extensions, visual studio, notepad++, oss

The past weekend, I took a few moments to relish in the “fun” that is programming something that is not work-related. That creation came to be a Visual Studio extension, known as, “Open in Notepad++”.

You might be wondering, what does this extension even do?

Well, it adds a new item to the context menu when right-clicking files/folders in the Solution Explorer:

Context Menu

The extension will attempt to find your installation of Notepad++, but if for some reason it cannot, you can always manually update the path in Tools | Open in Notepad++:

Settings Pane

You can install this extension through the Extensions and Updates dialog inside of Visual Studio:

Install Dialog

Or, grab the VSIX directly from the Visual Studio Gallery (also, go here to leave awesome reviews for me):

Also, if you find any issues, or want to contribute, head over to GitHub:


comments edit
python, drm, google

I purchase all of my music through Google Play, and I primarily use their web application to listen to it. As a precaution, I also use the Music Manager application to keep a local backup of all of this music on my NAS.

Recently, I wanted to switch to a new Google Account because I was changing primary email addresses. Before doing this, I made sure the music manager had downloaded any purchased music to my NAS because I will be deleting the old Google Account permanently.

Once I had verified the music had been downloaded, I logged out in the Music Manager application, and logged in under my new account. At this point, I had to wait for ALL of my music to be re-uploaded to Google’s servers.

After the music had uploaded, there were 17 songs that could not be uploaded because I had purchased them under a different account. (Apparently not of all the music contains DRM?)

You can see the error in the troubleshooter –

“Song was purchased with another Google Play account”

A little digging led me understand that Google hides their DRM in a hidden ID3 tag that is not easily removable by conventional means. This digging, however, also led me to a Python utility that could do it – and so, into the world of Python.

First, I had to install Python, which was dead easy – *Note: I am on a Windows machine, and the utility I will show you apparently requires version 2.7 of Python, so get that one :)

During the installation, I let the installer add python.exe to my PATH variable.

Once the installation was complete, I launched a command prompt and installed ‘eyeD3‘ using pip:


Now, navigate to your music directory (mine is on my NAS, mapped to my computer as “M:”)

cd /d M:

Execute one simple command, and let it run (depending on how much music you have, it could take a while)

python -m eyed3.main --remove-frame PRIV ./

You should now see a lot of text flowing through your console output. That’s eyeD3 doing its thing. Let it run. Go grab a snack.

Once completed, the Google Music Manager picked up on the fact that the files had changed on disk, and started to re-upload them – without error I might add!

comments edit
career, meta

I realized earlier that today marks my one year anniversary at Heuristic Solutions (thanks, Facebook ‘On this day’ :-) ).

My time at Heuristics has definitely been a game changer for me. Being able to work alongside Seth Petry-Johnson and Matthew Groves has proved beneficial beyond my imagination. To say, “I’ve learned a lot”, would be an oversimplification of the amount of knowledge I’ve gained over the past year, but that’s the easiest way to put it – I truly have learned a lot.

What does the next year hold?

Hard to say for sure. I would imagine a ton of new lines of code for LearningBuilder and more learnin’.

Outside of that, surprise me.

comments edit
blogging, career, review

Over the last few weeks, I’ve been indulging in the content delivered to my inbox by a Mr. John Sonmez.

This content, or what is better known as his 5 day email course on blogging, has been a delight to consume. If you’ve never blogged before, but have always wanted to, I suggest you subscribe to John’s email course. He provides a clear and concise path for potential bloggers to get started easily and quickly that I haven’t found in other blogging materials.

For me, personally, since I’m already somewhat of a blogger, it’s provided a ton of ideas that I plan to work through and implement here.


comments edit
conference, review, codemash

I’ve known about CodeMash for about 3 years, and of those three years, I had to skip out on TWO of them. The first year had already sold out before I found out, so there wasn’t much I could do in that situation. The second year, our daughter was born one week before (which I obviously knew ahead of time), so I couldn’t go then either.

Finally, with no children being expected, plenty of forewarning, and a ticket paid for by my [awesome] company, Heuristic Solutions (hey, we’re hiring), I was able to attend!

I didn’t end up attending any of the pre-compilers, only the main two days of sessions.

Let’s get to it!

Day One

Ten Practical Tips for Automated Testing of Web Applications - Jim Holmes

Jim is an experienced tester, and a great speaker – so this is a fantastic session for anyone interested in testing (obviously).

I walked away with some good tips, and a testing framework that I hadn’t heard of before.

The Future of C# is Now! - Dustin Campbell

I went into this session expecting an overview of new C# features, and I got that.

However, Dustin was also showing off a code analyzer that he built using Roslyn that included fixes for migration pre-C# 6.0 code to C# 6.0.

My love for Roslyn begins.

Decoupling the Frontend through Modular CSS - Julie Cameron

I am the furthest thing from a front-end designer as you can get, but I do have to think about stuff like it on a daily basis.

I, more or less, went to this session by recommendation, and I’m actually glad I did.

Julie gave some great tips for structuring your HTML, CSS, & JavaScript that I hadn’t paid much attention to before. She also went over some conventions that I had never even known about, so all in all, this was an excellent session.

Xamarin Forms and The Future of Mobile Application Development - Jesse Liberty

This was one of the vendor sessions, but since it was being presented by Jesse Liberty, I had to go. I tend to enjoy his style of teaching (I think I’ve watched every single one of his Pluralsight courses :))

Not only that, but Xamarin Forms is on my radar of things to deep dive, so I figured this would be a great session.

I was let down a little bit, to be honest. It was very introductory to what Xamarin Forms is and the basics on how to use it. I expected somewhat of a deeper look into it.

Still a good session, if that’s what you’re looking for.

Building Code Aware Frameworks using the .NET Compiler Platform (“Roslyn”) - Kevin Pilch-Bisson

As you previously read, I have fallen in love with Roslyn, and couldn’t pass up the opportunity to sit on a session dedicated to it.

Ironically, I had received the latest MSDN magazine in the mail prior to leaving for CodeMash, and had brought it along to read (which I did). This session demonstrated the concepts and sample code from one of the articles in that issue.

It was still a great session, and just the conversation and questions that went on were worth it.

Day Two

Getting More Out of Git - Jordan Kasper

I was a little late to this session – hey, it was early, alright! – and it was packed, so I ended up sitting in the floor. Comfy.

Anyway, there were a lot of good tips packed into this session, and Jordan did a great job of presenting. For me, though, I wish it had been later in the day, because I might have zoned out a time or two. Maybe. Probably. Yeah, I did.

Clean Code: Writing for Humans - Cory House

I’ve been following Cory for a while now, and was actually able to meet him and see his session while at CodeMash. Cory is an awesome guy, super cool, super nice, and gives a great session on clean code to boot.

The funny thing about this session, is, you listen to it, nodding your head the whole time agreeing with everything he says. Something about the material being reiterated to you in a fantastic presentation really makes the session worth it.

From Backbone to Ember and Back(bone) Again - Jonathan Knapp

I wasn’t fond of this session, mainly because it outlined a contracting gig where they did exactly what the title says. It didn’t hit home with me because I’ve never used either of those frameworks (and likely won’t for some time). Jonathan gave some metrics as to LOC/Speed/etc difference between the two, which was nice to see – but then ended up picking the slower/bigger one, and I don’t quite understand why. The whole time he kept reiterating that the original developers didn’t know JavaScript, and I suppose that’s a fair reasoning for being there, I think I expected more of why I should choose one of these frameworks over another – and, unfortunately, I still don’t have that answer.

Do You Even Kanban? - David Neal

This was another vendor session, and quite honestly, I was a little let down with it.

What I thought would be a session with a lot of information on LeanKit, it turned out to be an introduction to Kanban.

I already Kanban.


Guys, this was awesome (as are most open sessions).

This open session was packed, with people such as:

  • Kevin Pilch-Bisson
  • Dustin Campbell
  • Jon Skeet
  • Tim Rayburn
  • Kathleen Dollard

If you don’t know who those people are, go find out. NOW.

I didn’t contribute much to the overall conversation, but listening to these industry leaders talk about Roslyn made my day. I followed along with most of it (some definitely went over my head).

You can have your movie star idols – some of mine are listed right here. It was very difficult to choose those sessions, there were a ton of options for every time slot, and you want to see them all!


To summarize:

  • CodeMash is awesome.
  • The people that attend CodeMash are awesome.
  • The sessions are awesome.
  • The food is awesome.
  • Meeting new people is awesome.

Get your ticket and attend next time – find me and say hello, cause you better believe I’m going back next year!

comments edit
jenkins, iis

You want to run Jenkins on port 80 on your windows machine, huh? It’s easier said than done.

Well, it used to be before I wrote this blog post. If you’re like me, you’ve already spent some time trying to get this to work the way you would expect it to work like the Jenkins documentation alludes to:

  • Open Jenkins.xml
  • Set --httpPort=80 in the command line section

Seems fairly easy doesn’t it? Well, as you’ve probably already figured out, it doesn’t work.

Jenkins, apparently, cannot bind to a ‘system’ reserved port (anything below 1024).

Again, if you’re like me, you fiddled with this for a while. Setting the windows service to run as Local Account/Network Account/Local Admin/Domain Admin/etc/etc/etc, Nothing works.

Then, you start searching the internet and find out this is a real problem that people have been struggling with for a while, and apparently, you can solve it by installing Apache.

Now, don’t get me wrong, I have nothing against Apache, though I haven’t used it in a while, I use to use it quite exclusively. For this installation, however, I didn’t feel like attempting to get that work, and wondered if it would be just as possible with IIS - which was already installed.

I finally figured out the secret recipe for getting it to work, and it goes a little something like this:

  • Configure Jenkins to run on whatever port you like - I left it at the default 8080
  • Install IIS
  • Install the IIS URL Rewrite module
  • Install the IIS Application Request Routing module
  • Create a ‘dummy’ website in IIS that is bound to port 80
  • Add a ‘Reverse Proxy Inbound Rule’ to the dummy website that rewrites the requests from port 80 to port 8080 (on the same machine)
  • Step 6 is a little more involved than the others, so, screenshots!

Pick the rule type to create (Reverse Proxy Inbound Rule) Rule Creation

Configure the destination IP/port on the dialog, and hit OK Rule Configuration

Right-click the new rule, and click ‘Edit’ - the rule should look similar to this Current Rule Configuration

Then, we’re only using HTTP, so I remove the condition, and hard-code HTTP in the rewrite URL Modified Rule Creation

If all is successful, you should be able to hit the ‘website’ running on port 80 of your server, and silently be directed to Jenkins on port 8080 without even noticing it.

If you run into any issues, or have any feedback, please leave a comment below!

comments edit
career, imposter-syndrome

As most of you know, I recently started a new job with Heuristic Solutions working on their LearningBuilder product. I’ve been with them now for about a month, and up until about last week, things were going great. Then, out of nowhere, The Imposter Monster made its unwelcoming return.

Now, I’ve always been rather hard on myself when it comes to my work. Doubts plague me daily about where I am and where I should be. They never quite overlap in my mind – probably never will – but I’m working on it.

Having said all of that, I do believe that part of this is just from the stress of starting a new job. Everybody has been there, I imagine. You leave a job where you provided value, felt good about the decisions you made, knew everyone, etc. – then, all of a sudden, you’re back on the bottom of the totem pole without any of those happy feelings.

Am I supposed to be here? Do I deserve this job? Do I fit in? Do I actually have what it takes to bring value to this company?

I can’t answer those questions.

All I really wanted to do was get this post out here, in hopes that if someone is feeling the same way, perhaps they’ll come across this post and realize – they’re NOT alone.

comments edit
channel9, dotnetconf, powershell

Based on my previous script of a nearly identical title, this script will snag the 2014 dotNetConf videos (high quality MP4s) from Channel 9.

Change the $baseLocation to a folder of your choosing, and let it go.

$baseLocation = "V:\Coding\Channel 9\dotNetConf 2014\"

$rssFeed = New-Object -TypeName XML
$rss = (New-Object System.Net.WebClient).DownloadString("")


$itemCount = $

for($i = 0; $i -lt $itemCount; $i++) {
     $fileCount = $i + 1
     Write-Progress -Activity "Downloading Recordings..." -Status "Processing file $fileCount of $itemCount" -PercentComplete (($i/$itemCount)*100)

     $item = $[$i]

     $fileExtension = $item.enclosure.url.Substring($item.enclosure.url.lastIndexOf('.'), $item.enclosure.url.length - $item.enclosure.url.lastIndexOf('.'))

     $cleanFileName = [RegEx]::Replace($item.title, "[{0}]" -f ([RegEx]::Escape([String][System.IO.Path]::GetInvalidFileNameChars())), '') 

     $downloadTo = $baseLocation+$cleanFileName+$fileExtension

     If(!(Test-Path $downloadTo)) {
          (New-Object System.Net.WebClient).DownloadFile($item.enclosure.url, $downloadTo)

comments edit

The last few weeks have been a little stressful here at the Allen household due to the job situation, but things are turning around!

On Tuesday, May 27th, I will be starting a new job that I’m extremely excited about.

What is it you ask?

Well, I have accepted an offer with Heuristic Solutions to work on their LearningBuilder product!

Not only do I get to work with a fantastic team of people on a great product, but I get to do it from home!

comments edit

I had a really difficult time coming up with a title for this post, but essentially what I’m trying to convey is:

  • You created a VirtualBox machine
  • You deleted/removed/transferred the VM files on your HDD
  • VirtualBox will no longer let you manage that machine - indicates “inaccessible” (can’t even remove it).

I found myself in this predicament earlier this evening. All I wanted to do was remove the VM from the list of machines in VirtualBox, but it wouldn’t let me because it couldn’t find any of the files in the given location. After a few hacks, I found a solution. Hopefully, this might help someone.

Given a VirtualBox machine - let’s call him “Test Machine”, that resides on your host machine’s file system Setup - Image 1 Setup - Image 2

You, accidentally or purposefully, delete the folder containing the VM Folder is gone

Suddenly, you can no longer access the VM from within the VirtualBox Manager Machine Invalid

And, any attempts to remove it are futile Cannot Remove

If you can deal with the ‘clutter’ of an orphaned VM, yay. If not, like me, we gotta get rid of that thing.

Here’s how I did it.

  • Shut down ALL VMs, and close VirtualBox Manager
  • Navigate to your personal VirtualBox settings file (Mine is IN my Users folder - C:\Users\Calvin\.VirtualBox\VirtualBox.xml)
  • Edit the file IN Notepad/Notepad2/Notepad++/WhateverEtcPad++2
  • Find the MachineRegistry section, and remove the MachineEntry for the offending machine VirtualBox Configuration
  • Save the file, close, and reopen VirtualBox Manager. If successful, you should no longer see the machine. Invalid Machine Gone

That’s it! Hope it helps someone!

comments edit
channel9, build, powershell

Crazy long title, but you get the idea.

Here is a PowerShell script that will download all of the mp4 high quality videos from Channel 9 for Build 2014.

Change the $baseLocation to a folder of your choosing, and let it go.

$baseLocation = "V:/Coding/Channel 9/Build 2014/"
$rssFeed = New-Object -TypeName XML

$rss = (New-Object System.Net.WebClient).DownloadString("")
$itemCount = $

for($i = 0; $i -lt $itemCount; $i++) {
    $fileCount = $i + 1
    Write-Progress -Activity "Downloading Recordings..." -Status "Processing file $fileCount of $itemCount" -PercentComplete (($i/$itemCount)*100)
    $item = $[$i]
    $fileExtension = $item.enclosure.url.Substring($item.enclosure.url.lastIndexOf('.'), $item.enclosure.url.length - $item.enclosure.url.lastIndexOf('.'))
    $cleanFileName = [RegEx]::Replace($item.title, "[{0}]" -f ([RegEx]::Escape([String][System.IO.Path]::GetInvalidFileNameChars())), '') 
    $downloadTo = $baseLocation+$cleanFileName+$fileExtension
    If(!(Test-Path $downloadTo)) {
        (New-Object System.Net.WebClient).DownloadFile($item.enclosure.url, $downloadTo)

comments edit
stirtrek, conference, review

Oh man, StirTrek was awesome this year! There were a ton of people there – I think around 1200, total. It did, at times, make me a little claustrophobic, which I have never had a problem with before, so that was new :)

Let’s get straight to the details….

Registration was a snap – quick and easy, no problems.

I loved the badges they gave us – awesome Star Trek image on it, a place for your name, and, my favorite – the schedule for the day on the back. You could simply flip it over to see where you were going next. It was a great idea!

Breakfast consisted of donuts, bagels, coffee and water. I’m not much of a breakfast eater, so it worked out perfectly for me.

After some mingling, it was off to the first session of the day!

Session 01 – Javascript Spaghetti – Jared Faris

I had a strong desire this year to hit all Javascript-based talks, so this has nothing to do with the fact that Jared is my boss :) Anyway, this was a great talk. Jared did a wonderful job of incorporating some humorous aspects into his talk, while still making it relevant and interesting. I learned a few things, and had a great time, what more could you ask?

Session 02 – Understanding Prototypal Inheritance – Guy Royse

Guy is another one of those fantastic speakers that you should definitely try and catch any chance you get. The topic of this talk is a difficult one to give, and while I came away still a little confused, Guy made it fun and enjoyable.


Jimmy John’s. Served in whatever theatre you were already in. Awesome. And Yummy. ‘Nuff said.

Session 03 – Custom Graphics for your Web Application: The HTML5 Canvas and Kinetic.js – Jason Follas

I went to this talk to learn more about Kinetic.js than the Canvas itself, and I was glad to see a nice portion of the talk dedicated to it. I had not heard of Kinetic.js prior to this talk, and man, it’s amazing! The features seem to be pretty robust, and Jason has even contributed back a few features himself to extend it even further. Jason did a great job presenting this – he was extremely clear, concise, and just an all around great speaker. This is the first time I had seen him speak, and I’ll definitely be seeking out his sessions in the future.

Session 04 – JavaScript: Pretty cool guy and doesn’t afraid of anything – Evan Booth

Well, I guess there has to be a bad apple in every bag. This talk was poor, at best. Evan tried to scatter some humor in his talk, and while it was entertaining at first, it quickly got old. He seemed to be reading this slides as he went, talked quickly, rarely made eye contact with the audience, and went completely off-topic into CSS as part of his presentation. I didn’t go to hear about CSS – I went to hear about Javascript. After it was over, he began showing videos of himself making weapons from items bought beyond the TSA security checkpoints at airports. He seemed to believe he was doing a good deed by doing these things, and commented that he does give the info to the TSA. My thoughts? Wrong location to be showing that stuff, bub. While it was mildy entertaining at first, it quickly got old, and honestly seemed to make some people a little irritated that he would be showing that kind of information to the general public. Not a good idea. Fail.

Session 05 – I Didn’t Know JavaScript Could Do That! – David Hoerster

I had kind of forgotten what this session was about until after David actually began, but I’m glad I went! David seemed to be a little nervous at first, not sure if this was his first time presenting or not – and he even mentioned being nervous at one point. But, David, you did an awesome job. I enjoyed your talk very much. You got the audience participating with questions (most of which I got wrong, by the way), had humor woven into the talk, used Prezi (bonus points for that :) ), and you taught me stuff! I walked away from your talk with a better understanding of prototypal inheritance, which I had been trying to understand for some time. Nice job, David.

Overall, Stir Trek was bloody awesome, and I can’t wait to go next year. I would change a few things, but they are mainly minor. For instance, having a difficulty level on the talks so we can gauge better about attending. Evan’s talk would have been Beginner, while Guy’s would have been Advanced. I would also like to see televisions scattered around monitoring the Stir Trek hashtag from Twitter. They had this at CodePaLOUsa, and I loved reading the comments while moving around. Oh, perhaps even do it on the big screens between sessions :) Honestly, that’s it. That’s all I would change. See? Told you in was minor stuff.

See you at Stir Trek 2014!