Fixing the Windows 7 Weather Gadget

Recently, my Windows 7 weather gadget started spontaneously saying that it “couldn’t connect to service”. This was odd, considering I’d configured this gadget years ago and hadn’t touched it since. If this is happening to you, here is how I fixed mine.

Read the rest of this entry »

Advice for Software Engineering Job Seekers and Employers

Over the past several years, I worked on an expanding team and interviewed many candidates for software engineering positions. What follows is my advice for those of you seeking a new software engineering job. The advice is also relevant to those of you looking to add to your team. See also Joel Spolsky’s Guerrilla Guide to Interviewing, there’s great stuff in there.

Read the rest of this entry »

Refactoring Test Results for CLion 140-1221.2

I ran through a bunch of refactorings in the latest early access program (EAP) build of JetBrains CLion using my refactoring test suite, now hosted on github.


Refactoring % Passing Passed Failed
Add/Remove Block Delimiters 46.16% 6 7
Change Signature 100% 11 0
Compress To/Expand From Ternary Expression 69.24% 9 4
Create Method Stub 54.55% 12 10
Create Setter Method 66.67% 20 10
Extract Function 73.69% 14 5
Extract Method 5% 1 19
Extract Parameter 40% 2 3
Flatten Conditional 100% 1 0
Inline Macro 83.34% 5 1
Inline Recent Assignment 0% 0 2
Inline Result 0% 0 5
Inline Variable 22.23% 2 7
Introduce Constant 30.77% 4 9
Introduce Local 66.67% 4 2
Move Method 29.73% 11 26
Remove Unused Parameters 100% 3 0
Rename 77.09% 74 22
Simplify Boolean Expression 100% 13 0
Split Initialization From Declaration 81.82% 9 2
Split Multi-Variable Declaration 100% 19 0

The overall score card looks quite promising, particularly for an early access build that isn’t guaranteed to work at all. The general impression I got was that the refactoring support is better than other tools I have tried. It did much better with pointers to functions, pointers to class members, and references to class members than other refactoring tools. It did a good job of recognizing the appropriate scope for identifiers and properly performed well on rename operations, even when combined with using statements.

Read the rest of this entry »

An Interview with InfoQ about

InfoQ has just published an interview with myself and Katrina Owen, the creator of Check it out!

2014 Utah Teapot Student Rendering Competition Results

The results of the 2014 Utah Teapot Student Rendering Competition have been published and there are some very good images over there, so go check it out!

Adding Static Analysis to Your C++ GitHub Repository

Static analysis can be extremely useful for monitoring the quality of your code base. These tools analyze your source code and check for certain kinds of mistakes that can be detected purely based on how the code is written. In this post, I’ll show you how you can add two free static analysis tools to a free continuous integration build for your C++ github repository.

Read the rest of this entry »

UtahJS: Rendering the Utah Teapot with <div>

Tonight I’ll be making a short presentation during the UtahJS Meetup on how you can render the Utah teapot in HTML and CSS using only <div> elements. Come on down! Dinner is provided free by O. C. Tanner.

GDI PseudoCode and Coffee 10/26

The Salt Lake City chapter of Girl Develop It held a roundtable discussion on Sunday, October 26th. The topic was Terminology in Technology and we had a great discussion covering many topics, including:

  • What is the difference between jargon and technical vocabulary?
  • What does it mean to refer to the problem domain?
  • What is an API?
  • What’s the difference between a text editor and an IDE?
  • What’s your favorite text editor?
  • What’s your favorite IDE?
  • What is an endpoint?
  • What’s the difference between an endpoint and a route?
  • What is a compiler?

During the discussion, I mentioned a number of resources that I thought I would discuss and link here.

Read the rest of this entry »

The Keyboard Shall Set You Free

Jonathan Turner has released Keyboard Sith, a tool that disables your mouse and forces you to use the keyboard. Why would you want to do this? When I have taught courses on test-driven development and refactoring, I have noticed that the programmers that avoided the mouse and code completion facilities from their IDE (e.g. IntelliSense) always finished the exercise first. These programmers simply learned the keyboard shortcuts of their IDE to efficiently navigate around and simply learned to type their code faster than any browsing tool could complete it.

Read the rest of this entry »

DevExpress Discontinues C++ Refactoring Support

DevExpress announces that they will discontinue support for C++ refactoring in their CodeRush product.

Refactoring Test Results for VAX 10.8.2036.0 built 2014.05.22

I ran through three refactorings (Extract Function, Extract Method, Rename) in the latest version of Visual AssistX using my refactoring test suite and posted the results on the Whole Tomato support forums.


Refactoring % Passing Passed Failed
Extract Function 0% 0 18
Extract Method 45% 9 11
Rename 63.55% 61 35

Feel free to comment here on the test suite itself. I’ll probably move this to github to encourage more pull requests for improvements to the tests. I haven’t updated it for C++11 language features. Feel free to post in the Whole Tomato support forum thread for comments on Visual AssistX itself.

Read the rest of this entry »

C++ Now! 2014 Presentations Posted

Ray Fix is posting all the presentations of C++ Now! 2014

You can read my presentations here:

C++ Now! 2014 was a wonderful experience! I very much enjoyed talking with the attendees, both during the show and afterwards at restaurants and the bar. I hope to attend again next year.

Free Workshop: Test-Driven Development in C++, Wednesday, April 30, 2014

Have you heard about that new thing the kids are doing called test-driven development and wondered what it’s all about? Is it about testing? Is it about design? Is it good or is it bad?

Come join me for an evening workshop where I will show you what it’s all about and you’ll have a chance to try it out for yourself on a problem large enough to be interesting, but small enough that you can make progress on it during the workshop. The workshop will use the Boost.Test and Turtle libraries.

Thanks to Fusion-io for the meeting facilities, WiFi access, food (pizza from The Pie) and refreshments.

Seating is limited, so please RSVP to reserve your space.

Date Wednesday, April 30, 2014
Time 6 PM – 9 PM
Location Fusion-io (Google maps)
2855 E. Cottonwood Parkway
Suite 100
Salt Lake City, UT 84121

Read the rest of this entry »

Three Sessions Accepted for Spring 2014 Utah Code Camp!

Of the sessions I proposed to the Spring 2014 Utah Code Camp, they accepted “Walk Down GPU Lane” and “C++ User Group Bootup” talks. Later, one of the speakers cancelled and they needed to fill a slot, so I’m going to present a dry-run of my C++ Now! 2014 talk “Build your own C++ refactoring tool with C++ and clang”.

Read the rest of this entry »

Two Sessions Accepted for C++ Now! 2014 (May 12-17, 2014)

I’m pleased to announce that two of my proposed sessions for C++ Now! 2014 have been accepted! I proposed three sessions to the conference: create a refactoring C++ tool in C++ with clang, test-driven development with Boost.Test and Turtle Mock, and automated acceptance testing with FitNesse. I would have been pleased if just one session were accepted and I’m quite happy that two sessions were accepted, even if it does mean a bunch of work for me. Both sessions will be workshop-oriented, meaning we’ll be looking at code and very few, if any, slides. Death to powerpoint! Long live the code!

Read the rest of this entry »

Spring 2014 Utah Code Camp: March 15th, 2014

The Spring 2014 Utah Code Camp is coming up and I’ve got some proposed sessions. Utah Code Camps are by the developer community and for the developer community. Utah Code Camp is always free! Spring 2014 Utah Code Camp will be held on March 15th, 2014 at the University of Utah Spencer Fox Eccles Business Building.

Read the rest of this entry »

Refactoring: Sort Members by Visibility

You have a C++ class that shows readers its implementation details before it shows readers its public interface.

Reorder the class members in order of decreasing visibility, preserving the relative order of the declarations within each visibility category.

Read the rest of this entry »

An HTTP Server in TECO, Part 2

Last summer for the Summer 2012 Retrochallenge Competition I made some progress on an HTTP server in TECO. While I didn’t quite finish, I did make considerable progress. For the Summer 2013 Retrochallenge Competition, I’ll attempt to finish off this HTTP server in TECO and support .TEC files as CGI scripts.

Visual Studio Bugs

Visual Studo 2012 had a nice add-in called the Microsoft Visual Studio 2012 Feedback Tool that lets you quickly report a bug to the connect website. I’ve found that making it easy to report bugs in VS has increased the likelihood that I actually will report bugs. With Connect, any user can add a “me too!” vote to someone else’s public bugs so that the product team has a better idea of the people affected by it. You can also add your own comments to someone else’s public bugs. This post will be updated over time with bugs I’ve filed so that you can add your own “me too!” vote or comment to the bug.

Visual Studio 2013 included a similar bug reporting tool. This list now includes bugs reported in Visual Studio 2013.

Unfortunately Visual Studio 2015 replaced the nice bug reporting tool with a “send a frown” feature. This files a bug report into a black hole where you can never see anything about that bug report again. This forces us to go back to the connect site and log bugs by hand. Why can’t they leave good features alone? I will continue to add bugs to this list filed against VS 2015, but man they are sure making it hard for me to provide feedback in a way that’s useful for me.

Read the rest of this entry »

Engineering Notebooks: High Level Thoughts and TDD To Do Lists

Ever since I was in college as an electrical engineering student, I’ve been advised to have an “engineering notebook”. The general recommendation was to have a single place where you wrote down all the important details of your work. In the case of circuit design, dated notes could be particularly important for establishing prior art in patenting intellectual property. However, since my career was headed in the software direction and software patents were not yet common, I didn’t give it much thought. As my career progressed, I found I had two kinds of information that I needed to write down as a software engineer: notes from meetings and design discussions and low-level task details related to the code I’m working on day-to-day. In this post, I’ll discuss a simple system that I’ve adopted for engineering notebooks that makes sense for software engineers practicing test-driven development (TDD).

Read the rest of this entry »