# Tap My Mind

#### A Blog by Scott Isaacs

My seven year old daughter was doing some math homework last night at the kitchen table.  I was casually watching over her shoulder and listening to her thinking out loud.  Here’s one of the problems she was working on last night:

16 – 3 – 5

While she didn’t write it out like this, here’s the problem that she decided to solve instead:

18 – (3 + 5) – 2

She solved it this way because:

• She knew subtracting 3 and then subtracting 5 is the same as subtracting “3 + 5” (distributive property of addition and multiplication(-1 * 3) + (-1 * 5)).
• She knew subtracting 8 from 18 is easier than subtracting 8 from 16 since she could do it in her head without borrowing (pattern recognition: subtracting two numbers where the ones digit is the same is easier than subtracting two numbers where they aren’t the same).
• She knew she could change the 16 to an 18 if she remembered to subtract 2 from her answer afterward (manipulating the additive inverse property along with the commutative property of addition: 16 = 16 + 2 – 2 and 18 – 2 + 8 = 18 – 8 + 2).

Bonus: she was able to explain to me what she did, and why.

Granted, she doesn’t know the math terminology, and it’s really a fairly simple, 2nd grade homework problem, but shut up and let me be proud for a minute. 😉  The part that made me most proud was that she’s doing this on her own.  I asked if her teacher showed her those “tricks” and she said no.  I had briefly shown her some of these properties one time a few months ago, but she doesn’t remember that.

As far as she’s concerned, she’s making up her own way to solve problems so she can do them in her head, and then she’s teaching me how to do it.  To her, this is just the way she does it and it’s not a big deal.

As I was thinking I was reminded that this is the key to success in so many professional situations:

• viewing the problem holistically and recognizing patterns
• breaking the problem into smaller pieces that can be solved more easily
• being able to explain your process

Of course you can’t recognize patterns without experience, and different processes need to be explained differently (bullet points, a diagram, blueprints, a video, a story, a user manual, etc.), but the high-level steps are the same.

That’s all there is to writing software.  That’s all there is to building a house.  That’s all there is to being a customer service representative.  That’s all there is to brain surgery.  That’s all there is to rocket science.  That’s all there is to solving a fairly simple, 2nd grade homework problem.

Background

Today I was about to deploy an app to the server when I realized I had been building against .NET 4.5 while the server only had .NET 4.0 on it.

Not a big deal, right?  I just needed to change the “Target Framework” in the project properties.  So I did, and it wouldn’t build.  Turns out I had some NuGet references that were targetting .NET 4.5.

Again, no big deal.  Remove EF 5.0 and add EF 4.4 (which is conspicuously named EF 5).  My build succeeds and gets deployed to the development server.

But it won’t run.  I dig around and find other NuGet references (specifically, Newtonsoft.Json) that also are targetting the wrong framework version.  I uninstall and re-install it (and Web API Client and HttpClient).

The Error

But at this point, my solution doesn’t even build.  I kept getting an error message:

‘System.Net.Http.HttpContent’ does not contain a definition for ‘ReadAsAsync’ and no extension method ‘ReadAsAsync’ accepting a first argument of type ‘System.Net.Http.HttpContent’ could be found (are you missing a using directive or an assembly reference?)

But I have a reference to System.Net.Http.Formatting where that extension method is defined.  In fact, when I use Visual Studio’s Go To Definition function, it takes me right to the definition.  At this point I’m perplexed.  So I do what any other developer would do.  Repeatedly remove and re-add the NuGet references, trying to figure out why it won’t build.

The Fix

All in all, I probably wasted almost three hours on this today before I found the fix.  I had to comment out the line of code that had errors and build the solution.  Once I had a solution that successfully built, I uncommented the line and the solution built successfully.

I don’t know why this fixed the issue.  I could spend more time trying to figure out why, but frankly, at this point, I don’t care.  I’m just glad I got my app deployed to the dev and test servers today and that I finally get to work on the project I planned to start last week.

If the Blank App template were a sheet of white printer paper, the Navigation App template would be a sheet of graph paper — both are essentially empty, but one provides some helpful structure. By contrast, the Grid App or Split App templates might be pages from a coloring book, where the outline of your application is provided and only the details must be filled in.

(from my upcoming book)

Debugging Windows Store apps in the Simulator is a pretty slick idea that mostly works.

Mostly.

A limitation of the Simulator is that it runs as a child session of the current user session.  This short straightforward answer on Stack Overflow explains.

The problem with that for me is three-fold.  The first is just annoying: any apps that I have that run on system startup are launched when the simulator starts.  Some of these apps have problems with running multiple instances as the same user.  I imagine that they try to lock some resource (a file, etc.), but since that is already locked, I get a lot of error dialogs in the Simulator.  I get around this using a script I wrote to kill the offending processes in the child session.  It’s annoying, but I can work around it.

A second problem is that my user has permissions that another user might not have.  I do run Visual Studio as local administrator (disclaimer: I know the arguments against this), but that’s not entirely what I’m talking about.  Network resource permissions and other such differences could also cause issues.

Selfishly, I have a third issue that would be solved by allowing the Simulator to run as a different user.  I take a lot of screenshots.  When I want to take a screenshot of my Start screen for use in some documentation, or my upcoming book, I don’t necessarily want all of my apps/tiles in the screenshot.  I’m not so worried about people seeing what I’ve got going on, although no one really needs to know my next appointment, latest email subject line or recent tweets that are displayed on the tiles.  The bigger concern is that those tiles add clutter that could distract and/or confuse the person that will be reading my documentation.

One possible solution is to use Visual Studio’s Remote Debugging functionality to connect to a virtual machine running, described in the previously mentioned Stack Overflow answer.  This goes a long way to eliminate the issues I’ve raised, but it has one drawback.  I can no longer use the Simulator tools such as spoofing geo-location or touch mode or easy way to change screen resolutions.

My current solution is to continue to use the Simulator as it is.  When I first launch it, I switch to the desktop and run my utility to kill any processes that cause errors with multiple instances.  This is where I do my primary testing and documentation.  When I need more isolated testing, then I use Remote Debugging to debug on my Surface RT.  This is probably the most correct way of debugging but does require me to have both my laptop and Surface running at the same time.

All in all, debugging Windows Store apps is a good experience, but a few changes to the Simulator could make it nearly perfect.

If you’ve run into similar issues debugging Windows Store apps, what have you done to fix or work around them?

This is the sixth in my “Rules to Live By” series.  Like every other professional, in every other field, over the years I’ve picked up a lot of things that make my life easier, or better, both professionally and personally.  Most of these things can be summarized in a sentence or two, and I’ve decided to call them “Rules to Live By”.  As much as any other reason, they are here to remind myself of things that I’ve decided to believe in, even if I don’t feel like it one day.

RTLB #6:

Some things are hard to do.  Do them anyway.

There’s a reason why people have the impression that certain things are hard to do: they are.

Somehow I end up committing myself to things that fall into this category.  I feel like I spend a lot of my time doing things I don’t know how to do.  I take satisfaction in doing things that are perceived as hard, or even considered to be impossible.  Things like working a lot of hours to use one type of technology for a purpose that was supposed to be impossible.  Things like running a users group and organizing technology conferences.  Things like training to climb a mountain, and then making it to the top.  Things like sleeping less than 35 hours per week while writing a book.

Yes, I take satisfaction in doing these things that are perceived as hard.  It’s not because I’m special.  In fact, it’s precisely the opposite.  If I do these things, even if I’m not as good at it as other people are, then so can anyone else.  Yes, there is a sense of accomplishment that comes with doing something I didn’t think I could do or something you didn’t think I could do.  Even more, though, I have a list of things that I can use as examples and as encouragement to others to do something they didn’t think was possible for them.  When my kids are scared to do something because they don’t want to fall or fail, I have history to encourage them to go for it.

Getting hit by a fast ball hurts, but only for a while.  Standing in the box and hitting a game-winning hit feels awesome, for a long time.

Sometimes technology experts that say something is impossible are wrong.  So if you believe in your idea, try it anyway.

Stepping outside your comfort zone to do a job completely unrelated to what you normally do is overwhelming and confusing.  But if you’re passionate about it, try it anyway.

Losing weight and training like crazy for 3 months in order to pull your still-overweight self up a steep granite slope with your arms, only to realize that the trip back down could literally kill you is pretty scary.  But if it’s on your bucket list, train for it and do it anyway.

Whenever you feel like you aren’t qualified to do something that you believe in and that you’re passionate about, tell the imposter to take a backseat and do it anyway.  You’ve done other hard things before and you will do more hard things in the future.  You may suck, or worse, you may be mediocre.  You may fail.  You may get hurt, emotionally, mentally or physically.  You may realize that your time could have been better spent elsewhere.  Or you may not only reach, but surpass, your highest expectation.

Some things are hard to do.  Do them anyway.  Not only for yourself, but to encourage someone else.

You may or may not know that I am currently writing a book.  If you didn’t, now you do.  That’s a picture of the cover.

It’s a book about writing software for Windows 8 using HTML and JavaScript.  The first few chapters are heavily based on a similar book which introduces building Windows 8 applications with C#.  I’m really excited about it, and it should be available by the end of summer.  I’m not done yet, and I have a fair amount more work to go, but it’s getting there.

A few weeks ago, the publisher, Apress, made an alpha version of the book available on their site.  Buying the alpha version gives you access to draft versions of the chapters I am writing as I submit them, even before the editing process has been completed.  Then I found out earlier this week that you can also pre-order the book on Amazon.  I thought that was pretty cool, and it’s kind of a boost to the ego to see that, not to mention adding motivation to complete the process.

Imagine my surprise today, though, to come across this advertisement “in the wild” when checking the weekend weather.

Update 5/4/2013: Source code now available on GitHub.

I just spent a couple hours writing a Windows Store application for use at our Deeper in .NET conference this weekend.  It’s a simple app that displays the time remaining until the next session starts, and also allows you to cycle through slides (image files only) during the countdown.  Event Timer was initially published on 4/4/13.  You can find it and screenshots in the Windows Store.  For now, and for the foreseeable future, it will be free.

I already know of a few feature improvements I’d like to add to a future release, such as:

• Moving the controls to an app bar (done, you can now view the controls by right-clicking or swiping from the top edge)
• Adding some configuration options that persist, such as default slide interval and foreground/background colors.
• I have some other ideas for subsequent releases as well, but will hold off on thinking too much about those to see if anyone else asks.  Why waste my time on something no one wants, right?

If you use Windows 8 or Windows RT, please give it a try and let me know what you think.  I’d be interested in any feedback.  However, since this is a free app, support will be limited and may be slow.  While no guarantees are made about this software, I have recently used it at a large developer event in Milwaukee.  I had zero issues and actually had several attendees compliment the app.

If you are a developer and are interested in seeing the very simple source code, you can find it on GitHub. Remember, I only spent a couple hours on the initial version for my own use, so be kind.  🙂

My whole life I’ve heard, “Use the right tool for the job,” and I am a big proponent of that and tell people all the time.  But there are times that something is low-risk, and it’s easier to try to use whatever is on hand than going to get the right tool.  So you take a calculated risk and move on with your life.  Sometimes, though, you’re wrong.  You mess things up with the wrong tool and end up having to try to patch it, taking more time and effort that it would have taken to do it right in the first place.

This especially sucks when the “right tool” is your electric beard trimmer and the “wrong tool” is the safety razor you thought you could use to touch up your moustache.

Eighteen months ago, I sat down and wrote out a description in bullet points of what my ideal job would be like.  I described my position, the company, and my co-workers.  My previous job had many of those qualities.  It was a good job at a good company, but it wasn’t everything I wanted.  I wanted to change things, but they weren’t mine to change.

I’ve been at SafeNet for about 7 weeks now.  I realize that’s not that long, but so far it seems like every single bullet point on my description of an ideal job has been satisfied.  Here’s my list from June 2010.

My Position

• I want to be irreplaceable (see what I mean by “irreplaceable” here).
• I want to focus on building relationships, both co-workers and customers.
• I want to be able to mentor someone.
• I want to be able to learn and be mentored.
• I want to be challenged without being overworked.
• I want to be expected to do things I don’t know how to do.
• I want to design and deliver important solutions.

My Company

• Must be a place that outsiders get excited about when they see how we do things.
• Must be known for its technology as well as for its business — for execution as well as ideas.
• Must be full of irreplaceable people.
• Must be full of passionate people.

My Teammates

• Must care.
• Must have an opinion more often than they don’t.
• Must share their opinions.
• Must debate.
• Must be irreplaceable.
• Must be passionate.
• Must treat their work as a craft or art.
• Must give “something” (intangible) more than their work..
• Must have insight and understanding.
• Must be able to troubleshoot.
• Must act like they work for themselves.
• Must be empowered.
• Must be respected internally and externally.
• Must be compensated enough to not worry about compensation.
I didn’t realize until tonight when I came across that 18 month old list just how ideal this job is for me.

Do you have a description of your ideal job?  If your ideal job is more like my ideal job than it is your real job, we should talk.

If it wasn’t for dominoes, we wouldn’t have the “domino effect”.

Dominoes alone aren’t enough, though.  You also need someone to design what it should look like in the end, and you need someone to carefully place each domino where the design says it belongs.

But before you can stand back and watch the show, you need that first one to tip.

The first one has tipped.  I’m excited to see what happens next.

Page 1 of 31