Nerd Power

The World Runs on Nerds

$100 Off DirecTV

Thinking about signing up for DirecTV? Get $100 back by using my referral code. Click the link below to get started. Hurry, I can only refer 10 friends so claim yours now.

DirecTV Friends and Family Referral
Or call 1-800-507-4045 and be sure to mention my account ID, which is 77161182.

I love our new DirecTV service. It works so much better than Xfinity. Highly recommended. New customers also receive the first year of the NFL Ticket free of charge.

Blog Migration In Progress

Just a note, over the past 6 years I have written a number of articles across various blogs. I have since removed those blogs but I kept a backup so I could one day re-post the articles here. I’m in the process of doing that now. I’m currently working my way through posts from 2007.

The Right Way

This is in response to my earlier posting, Those Who Can, in which the question was posed for determining whose way is right. What I’ve found is there is no “right” way. I don’t mean that in some existential form. I don’t mean that there is no right in the universe and that we are all cursed to a meaningless, indifferent, and unexplainable existence. Instead, I mean there is no universally “right” way. I mean that every situation has its own unique “right” way.

I learned this a number of years ago from operating a small business. I didn’t grow up as a manager. When I was forced into it to grow my company past one employee, I never could figure out why it was so difficult to get anyone to do things “right”. Eventually I realized that people weren’t doing the “right” thing because their “right” and my “right” were two different things. And it all clicked. It wasn’t that they were bad employees but rather that they had different values.

If I believed in efficiency and effectiveness and one of my employees believed in product quality, we’re going to approach the same situation in different ways. I may be willing to settle for a product that has more defects because fixing those defects would not be an efficient and effective use of resources. My employee, in the same situation, may commit significantly more resources than I would to the problem because a high quality product is the goal.

When I first realized that clashes in values were the culprit of undesirable decision making, I tried to solve it in the most obvious way: make others accept and profess my values. Well darn it, that just doesn’t work. Forcing my values on others never has a happy ending.

Values are abstract. They’re one step removed from action. Values help determine action but there is a step in the conversion process that often gets lost. Why did that employee spend three days fixing a product defect that only effects 1% of our customers? Because product quality is his number one value. This example of the conversion of values to actions is missing one key component: the objective. Values applied to an objective create action.

The objective is often left unspoken. When the objective is unspoken, the assumed objective is, “Do the right thing.” This is a trap. An objective of doing the right thing is the same as having no objective at all. It’s left up to the discretion of the individual(s) involved and the more people involved, the more objectives there will be.

“We should save the whales.”

“No, we should kill the whales to feed the children.”

Whose way is right? The problem is that there is no shared objective and so the implied objective is the finicky, “Do the right thing.” Both actions are correct with the implied objective.

A better approach is to nail down the objective first. Before talking about values, the “right” way to do things, or what “should” be done, define the common goal. This removes the implied goal of doing the right thing and allows each individual to contribute to the goal in a way that adheres to their own value system.

Nothing gets done in a group without a singular commitment to a shared objective. If you are a member of a group that is running around in circles, debating the “right” way to do things, you can help everyone involved by becoming the champion for defining the goal.

***

My thoughts on this subject derive primarily from the article Managing for Breakthroughs in Productivity (cached version) by Allan Scherr which states that creating an environment conducive for innovation requires only two ingredients: 1) a singular commitment to an objective and 2) an aggressive, historically improbable deadline.

Those Who Can

It seems that just about everyone believes they know what is going on. Everybody seems to know the best way to do something. Problem is, if everyone believes their way is the best way, and most people are arguing for a way that is different from those around them, someone is wrong… possibly every one is wrong.

Take religion for example. Either you don’t care or you believe your way is the right way. Sure, you may be accepting of other people and their unenlightened beliefs but you know that their life would be much more enriched if they’d discover the real truth, the truth you’ve found.

For any given subject there are two types of people. 1) Those who don’t care and 2) those who believe their way is the best. (Sure there are probably people out there who know their way is not the best but, if they have any amount of initiative, they’ll eventually figure out a better way or just set up camp with the “don’t cares.”)

Within the faction of people who believe their way is the best, there are those who are correct and there those who are not. The question is, how can one tell who the person is who truly knows the best way? And for the person who knows the best way but feels pitted against a majority of well-intentioned yet incorrect alternate theories, what is the person to do?

I’d love to find an answer to these questions but can one be found? Maybe this is simply part of the human condition.

The End of Wishful Thinking

My recent six-month journey across the country had a number of purposes. Most were known by everyone:

  • To reconnect with friends.
  • To determine if full-time RVing is something I’d like to do after retirement.
  • To expand my limited knowledge of the States.
  • To find a new city to call home.
  • There was one purpose which I shared with no one except my wife:

  • To test the Law of Attraction (LOA), subjective reality, faith, etc.
  • There are so many successful individuals who fully endorse subjective reality and so many books written that guarantee the principles. I had to try it for myself. I determined that there was no better way to test the theory than embracing it wholeheartedly. I dove in head first.

    Dive head first into an empty pool and you will get hurt. Luckily there was enough water in this pool to break my fall. I only received minor injuries.

    I’m not going to write article after article of why I believe the idea of subjective reality is false. I believe in the motto, “If you can’t say something good, don’t say anything at all.” The problem is that I’ve previously endorsed the idea of subjective reality but now believe that I was wrong to do so. I could simply remove those articles from my blog and continue on but I’d like to keep those articles as a historical reference. Instead, I’m going to write this one article to explain my change of heart.

    The Practitioner’s Failure

    Steve Pavlina recently posted an article that states that if the LOA isn’t working for someone, it’s because that person doesn’t truly believe. He even went as far as to say that intentions are not bound by time and that, if a person will doubt the LOA in the future, it won’t work in the present. What a great safety blanket. There is no way the LOA can ever be shown not to work because it is always the practitioner’s failure that causes it to do so.

    I wanted the idea of subjective reality to be true, I really did. Who wouldn’t? Morphing our physical reality simply using our thoughts… how cool would that be? But even Steve, an avid supporter of subjective reality, posts statistics that show how poorly the idea performs. Check out the update on his Million Dollar Experiment. Of 1,169 people who are intending one million dollars to come into their life, a grand total of $4 million has manifested. That’s a dismal 0.34% success rate. Or, stated a different way, $3,421.73 per person. They can’t quit their jobs yet.

    I’d expect the amount manifested to be higher simply based on misattribution and random luck! This corresponds with what I discovered for myself. When I practiced the LOA, I was less successful than before. I believe this happens because the LOA states that everything is created by the mind. Following that premise, no physical work is necessary. I simply have to think about what I want and I will have it. So, instead of making sacrifices and working hard towards my goal, I simply think about what I want and then I slack off. This makes me less successful at achieving my desires, not more.

    Inconsistent Results

    The LOA doesn’t work consistently. To me, inconsistency is worse than outright failure. Outright failure is easy to recognize and the failing thing can be discarded without hesitation. Something that seems to work some of the time but not all of the time is difficult to diagnose. This difficulty is magnified with the LOA because the practitioner is looking for things to attribute to it, things that would have happened without any belief in the LOA.

    There are truths hidden within the idea of subjective reality. Belief in a thing makes it more likely to occur. If I believe I can lose weight, I am much more likely to lose weight then if I believe I’m a fat slob who will never slim down. But the belief alone does not create reality. I must take action.

    Like anything bad that stays around for long, there are good principles mixed with the bad that give enough counter-balance to make the false principles seem like they are true. The whole batch cannot be dismissed as false, only parts. The difficulty lies in separating the good from the bad.

    Impossible to Disprove

    To add to the difficulty, the idea of subjective reality is impossible to disprove. The fact that it cannot be disproved can be quite convincing that the idea must actually be true. But the truth of the matter is that being unable to disprove something does not prove that the thing is true. If I told you Martians are going to invade our planet would you believe me simply because you couldn’t prove I was wrong? And how long should I wait before tossing my own theory on the trash heap? Christians have been waiting for the second coming of Christ for two-thousand years. That seems reasonable. If Martians don’t invade by 4,000AD, I’ll discard my belief in a Martian invasion and find something else to believe.

    A Recipe for Compelling Ideas

    Looking for a new product to sell? Here’s a bulletproof tactic: Devise a theory that can not be disproved, lace it with small bits of truth, and sell, sell, sell.

    The small bits of truth sprinkled throughout the idea of subjective reality make it very hard to evaluate the legitimacy of the idea as a whole. The idea rides on something that is true, and can be proven as such, but then adds an element that cannot be proven as false. It is like claiming, “Gravity pulls two bodies toward one another. To offset this force, two bodies of equal mass will be repelled from each other in a parallel universe that we have yet to discover.” The legitimacy of the first idea, plus the inability to disprove the second, gives a glimmer of credibility to the idea as a whole.

    Farewell

    Farewell subjective reality. It was fun taking this ride with you. I read some good books and watched some exciting movies. It was fun dreaming of the perfect world. Er, it was fun thinking it was possible to dream of a perfect world. Er, actually, it kinda sucked thinking the world could be perfect but wasn’t simply because I had yet to master my mind to alter reality to be perfect. Farewell.

    Visual Studio Macro: Collapse Solution Explorer and Close All Documents

    Developers working with Visual Studio on a project of significant size understand how cluttered the Solution Explorer becomes after a few hours of working. They click too many of those little minus signs — a repetitive task that no developer enjoys. Eventually they decide to ease their discomfort and search Google for a better solution. Luckily, a number of individuals have posted solutions for this task, gracefully solving the problem by creating macros assigned to specific key strokes.

    Searching Google for ‘collapse solution explorer’ reveals many, many solutions. I found that two basic macros exist: 1) a quick collapse and 2) complete collapse. The quick version collapses all currently open nodes in the solution tree. The process is fast (2-ish seconds) and the screen looks nice and organized.

    There is one problem with the quick collapse which leaves trouble lurking. If nodes of the tree were expanded but then hidden by collapsing the parent node, those expanded nodes further down the tree structure will not be collapsed. This occurs because the macro only collapses the children of a node if the parent node is expanded.

    This problem with quick collapse is addressed by the second macro: complete collapse. The complete collapse iterates through the entire tree regardless of the parent node’s expanded/collapsed status. This forces every node of the tree to be collapsed. It is a thorough process and guarantees that the solution explorer will be in perfect order however, it is a lengthy process for projects of significant size (15-ish seconds).

    The code I provide below combines these two macros into one module. You can assign each a separate keystroke and have the power of both at your fingertips. Use the quick collapse as everyday cleanup; use the complete collapse for those times when the solution explorer has become unruly.

    I also added a bit of functionality to the quick collapse. I usually collapse the solution explorer because I want to declutter my work space before diving into a task. That often means that I have a number of files open that I am no longer working on. To address this, I provide two additional macros that will close all open files before executing the quick collapse. The first macro closes all files except the active window. The second macro closes all files including the active window. The files are automatically saved before closing.

    Using Tools > Options > Environment > Keyboard, you can assign each macro a keyboard shortcut. I prefer the following:

    Shortcut Key Macro Assigned
    Alt+\ Quick Collapse
    Ctrl+Alt+\ Complete Collapse
    Alt+/ Quick Collapse – close all documents except active
    Ctrl+Alt+/ Quick Collapse – close all documents including active

    Here is a link to step-by-step instructions for creating macros and setting the keyboard shortcuts. Here is a link to step-by-step instructions for adding macros as a toolbar button.

    The Macros

    Download the CollapseSolutionExplorer macro file here or copy and paste from below.

    
    Imports EnvDTE
    Imports System.Diagnostics
    
    Public Module CollapseSolutionExplorer
    
        Sub QuickCollapseAndClose()
            CloseAllWindows(False)
            DoCollapse(True)
        End Sub
    
        Sub QuickCollapseAndCloseKeepActive()
            CloseAllWindows(True)
            DoCollapse(True)
        End Sub
    
        Sub QuickCollapse()
            DoCollapse(True)
        End Sub
    
        Sub CompleteCollapse()
            DoCollapse(False)
        End Sub
    
        Private Sub DoCollapse(ByVal quick As Boolean)
    
            ' Get the the Solution Explorer tree
            Dim UIHSolutionExplorer As UIHierarchy
            UIHSolutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()
    
            ' Check if there is an open solution
            If (UIHSolutionExplorer.UIHierarchyItems.Count = 0) Then
                Return
            End If
    
            ' Get the top node (the name of the solution)
            Dim UIHSolutionRootNode As UIHierarchyItem
            UIHSolutionRootNode = UIHSolutionExplorer.UIHierarchyItems.Item(1)
    
            ' Hide the Solution Explorer to prevent multiple screen paints
            DTE.StatusBar.Text = "Solution Explorer hidden... it will return..."
            Dim activeWindow As EnvDTE.Window
            activeWindow = UIHSolutionExplorer.DTE.ActiveWindow
            DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Visible = False
    
            ' Select the solution (top) node so that the open document isn't automatically expanded
            UIHSolutionRootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
    
            ' Collapse each project node
            Dim UIHItem As UIHierarchyItem
            For Each UIHItem In UIHSolutionRootNode.UIHierarchyItems
                ' the first-level is always collapsed, regardless of quick or not
                ' this is a nice feature that makes the quick collapse more useful
                Collapse(UIHItem, quick)
            Next
    
            ' Bring back the Solution Explorer
            DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Visible = True
    
            ' Clear the status bar
            DTE.StatusBar.Clear()
            DTE.StatusBar.Progress(False)
    
        End Sub
    
        Private Sub Collapse(ByVal item As UIHierarchyItem, ByVal quick As Boolean)
    
            'recursive function
    
            For Each eitem As UIHierarchyItem In item.UIHierarchyItems
                If ((quick = True) And (eitem.UIHierarchyItems.Expanded = True)) Or (quick = False) Then
                    If eitem.UIHierarchyItems.Count > 0 Then
                        DTE.StatusBar.Text = "Solution Explorer hidden... it will return... Collapsing " & item.Name
                        Collapse(eitem, quick) ' recursion here
                    End If
                End If
            Next
    
            item.UIHierarchyItems.Expanded = False
    
        End Sub
    
        Private Sub CloseAllWindows(ByVal KeepCurrentOpen As Boolean)
    
            On Error Resume Next
    
            Dim i As Integer
            Dim sCurrWin As String = DTE.ActiveDocument.Name
    
            With DTE
                For i = .Documents.Count To 1 Step -1
                    If .Documents.Item(i).Name <> sCurrWin Or KeepCurrentOpen = False Then
                        .Documents.Item(i).Close(vsSaveChanges.vsSaveChangesYes)
                    End If
                Next
            End With
    
        End Sub
    
    End Module
    

    The Gypsy Journey Is…

    …officially over. Although the RV sold last month and we’ve settled into urban life in downtown Portland, the final nail in the coffin is that I’ve accepted a job with Eleven Wireless (www.elevenwireless.com) as Software Engineer. This grants me the opportunity to improve my C# and ASP.NET skills while working with a team that practices Extreme Programming (XP). I thought talk about XP was simply philosophical pondering but I was wrong. XP is being practiced in professional, for-profit companies. I’m totally excited to join a team that is actively developing software according to XP principles. It will be interesting to see the difference in this development environment.

    How Do You Build Software?

    I went on my first interview in Portland last week. Things were going well. I felt I had made a connection with the team that was interviewing me and I felt they were starting to like me. Then came the inevitable question. The one that always throws me off my game. The one that clouds my mind, grinds the gears to a halt, and refuses to release its grip. I’ve been asked the question in nearly every interview, in different forms, and it always catches me off-guard:

  • How do you approach programming?
  • What methodologies have worked for you in the past?
  • Tell me the steps you would take to build a software product.
  • How do you build software?
  • It’s like I’m supposed to distill 20 years of software development experience into a concise 3 to 5-minute answer. That’s where things get fuzzy. It’s as if the task is too large for my brain to process so it shuts down all secondary processes to focus on the task at hand. I usually try to get the interviewer to make the question more specific but my brain has already fogged over and I’m unable to say anything that sounds like what an experienced software developer should say.

    A few of you know exactly what I’m talking about (Mark, Ben, Dave) because you were the one that asked me this question and you saw the glassy eyes as I searched for a good, concise answer. You witnessed the babbling and eventually you moved along to your next question.

    So I present my dilemma to you and ask you to help me improve my communication skills. I believe I’m a pretty good developer and I think a few of you agree (or maybe I have a self-evaluation problem as well.) My difficulty answering this type of question in an interview does not help anyone. I may not receive an offer and the interviewer may pass me by, missing a great opportunity to have me on their team.

    If you ask this question in interviews, what kind of response are you looking for? What could the candidate say that would make you lean back in your chair thinking, “this guy really knows his stuff!” If you’ve been asked this in an interview, how did you answer? Were you happy with your own answer and did the interviewer appear satisfied?

    End of the Road

    After being on the road five months, our quest for enlightenment comes to an end in Portland, Oregon. We arrived on a Wednesday and knew immediately that this was the city that was calling us. By that Friday, we had rented an apartment and begun settling in. Now, the van is sold and we’re living downtown. We walk and take public transportation, which is free in the downtown area.