# Archive for March, 2016

### Zooming Tools for PC and Mac

Zooming tools are very useful whenever doing a presentation or training. It helps both the people at the back of the room, as well as drawing people’s attention to the area of the screen you need them to be looking at.

On the PC I’ve used ZoomIt, which is part of Microsoft’s SysInternals tools.

Recently I’ve found Zoom It for the Mac, which is cheap, and works like a charm.

### Do software developers know how to use software?

Why am I starting this post with such a silly question? Of course software developers know how to use software! Or maybe not…?

### Am I a good developer?

What makes it for a good developer, anyway?

For many years I’ve focused quite a bit on programming languages, IDE’s, patterns, and all those things that are definitely fun for most developers. Mastering those things, however, does NOT turn someone into a great developer. Knowing those things well is very important, but there’s more to it.

I’ve seen developers who…

• spend a lot of time building applications, but not using software productively themselves;
• seem uncomfortable using their own tools, not learning the bare minimum in their IDE for things like quick file lookup, code navigation, code completion, etc;
• don’t adjust their environment in order to reduce the friction when getting things done;
• don’t take the time to understand what it is that they need to get done.

### What is it that I’m building?

Most developers are supposed to develop the software designed to automate somebody’s tasks, workflows, etc (others may be building games and such, which is a different story). I believe a good software developer should be able to understand the business, identify its needs, and then think of good solutions. Sounds simple, but I keep seeing cases where people start to code without really understand what needs to be built.

### Am I productive?

When a developer doesn’t bother about automating repetitive tasks of his or her own, the likelihood of achieving success doing that for the client is very slim.

I used to do a presentation on “productivity”. I talked about tools and add-ons, but just spitting out code as fast as possible doesn’t mean we’re productive, so I also talked about the mindset and techniques I use, while always asking myself “why am I doing this again?”.

### My conclusion (for the time being)…

I have had clients tell me they decided to hire me after seeing how I use technology. They say they see me using my smartphone, my tablet, and my computers in ways they haven’t thought of. They say they believe I use these things not because they’re “cool”, “flashy”, “trendy”, but because I focus on the benefits and results instead. They believe that if I’m able to automate my life this way, I’m qualified to automate theirs, too.

These are things that keep coming back to me and I feel like I need to explore more into it, as it’s giving me good results.

### How to do XML comparison in an application?

Working on a tool that does some end-to-end testing, I have a need to compare xml input/output. Comparing xml isn’t a simple string comparison, as a single extra space would deem the results aren’t equal. I need to compare both the structure as well as the actual data contained in the xml.

This is a .NET application. I’ve looked for some components out there that perform such comparison and found some, but there’s still quite a bit of work involved in taking the results the components give me (listing each line and each difference) and showing it to the user in a meaningful way.

Instead of spending a lot of time (and therefore, a lot of my client’s money), I figured the easiest/cheapest way to implement this was to simply integrate Beyond Compare into the app. That way, it’s very, very easy to see what the differences are between the two xml documents, as Beyond Compare clearly shows the differences down to the attribute level.

The way I’m doing it is my saving the XML content to disk, and then firing up Beyond Compare using the Process class, passing along the path to the files. (see code below)

public class XmlDiffController : IXmlDiffController
{
public void OpenDiff(string leftXml, string rightXml)
{
var leftResultsXml = @"c:\temp\left-results.xml";
File.WriteAllText(leftResultsXml, leftXml);
var rightesultsXml = @"c:\temp\right-results.xml";
File.WriteAllText(rightesultsXml, rightXml);

Process.Start(new ProcessStartInfo(TesterSettings.DiffToolPath)
{
WindowStyle = ProcessWindowStyle.Maximized,
Arguments = string.Format("\"{0}\" \"\"",
leftResultsXml, rightResultsXml)
});
}
}


DiffToolPath is the path to Beyond Compare on my environment. As I’m doing this development on a Windows Virtual Machine inside a Mac host, my DiffToolPath points to Beyond Compare on my Mac, like I’ve described on my Integration of Beyond Compare and Parallels on the Mac post.

Works like a charm, quick, cheap, and easy!