My Network Cupboard: Into the Attic

Today’s goal was to successfully run the first strand of cat5 from the network cupboard to somewhere in the house. Things do not always go to plan.

Masculinity Deficiency

So, this morning I went up into the attic and brushed away the insulation from the area of the attic that we’d been working in. The network cupboard (in the laundry room) shares a wall with the den. That shared wall has electrical, phone, and even a single network drop. My original plan was to follow those cables and run all of my new network alongside the existing cabling. Once we got up in the attic, we realized that some of those cables were going alongside the plumbing for the laundry room and that probably would not work out very well. The problem was, between the other electrical cabling, the plumbing, a footing from a roof support and the end of that wall I was a little concerned with drilling new holes in that particular 2x4”. We found a blank spot near the end of the board, I grabbed the drill and found out that I’m not very much of a man.

This is really unfortunate news, because up until this point in the project I was feeling at least mildly manly. I’d made numerous trips to Lowes, operated power tools and had a pretty good plan drawn up in my head. I sweated, grunted and cursed at this hole as my poor drill bit struggled to advance.

As it turns out, it looks like we probably drilled too close to the end of the wall and hit something along the lines of a top plate, and the drill bit just couldn’t cut through that. When your home improvement project gives you lemons,go eat pizza and drink beer. Answers often percolate as a result of the digestion.

Solution

The cupboards in the laundry room are standard size. There’s an empty bulkhead between the roof of the cupboard and the ceiling. One of the things I had been considering, was all of the cables that potentially might be routed into the network cupboard. In the short term, I want to run the network cables into the cupboard. But in the future, there might be the coaxial cable. I would like for there be room for some future capacity. Over dinner, we kicked around the idea of how big of a hole we would need to support that future capacity.

We crafted up a solution; we could use a hole saw to drill up through the cabinet, the bulkhead wall, the ceiling, and up into the attic. Then we would feed some sort of PVC pipe through the hole we cut. We planned to run the PVC pipe right next to the wall of the cupboard and then use brackets to tighten the PVC pipe down. This would make running cable simple both in the immediate future and down the road.

After another trip to the hardware store, we picked up the materials needed: miscellaneous tools, some PVC pipe and fire blocking foam sealant.

Drilling the hole wound up being a little bit easier than the grunting and sweating that I had done earlier. The hole wound up being a little close to one of the 2x4”s in the roof so it took a little wriggling and the help from a broomstick. The PVC was cut so that it hangs a couple inches into the cupboard and stands up well above the insulation in the attic.


We're going to need a bigger drill? Success! We made a hole! PVC 'conduit' for the cable. Conduit installed (attic view) Conduit installed (cupboard view)

There are still some finishing touches left. I want to attach the PVC to the side of the cabinet and to the nearest 2x4” in the attic, and there’s also the matter of sealing up the hole we made, and the entrance/exit to the PVC but these are things that we’ll do once the project is winding down.

The next step is going to be to run the first network cable between rooms. The easiest room will probably be the den where we have our two computers and currently where the router is. Hopefully, my manhood will be restored and there will be one functioning network cable run between the rooms.

My Network Cupboard: Planning and Demolition

I like the Yin and Yang for this article, today I plan to write about something I consider myself to be skilled at (demolition) and something I often think I need to do a little more of (planning).

Planning

Firstly, the planning. In prior articles, I decided that it’d be nearly the same cost for me to buy hardware and do Ethernet-over-Power when compared to actually cabling some network drops in each of the rooms I wanted in. Once I had made that determination, I thought it’d be best if I went ahead and did the cabling and added value to the house. In a number of ways, I probably either bought equipment I couldn’t fully utilize (48 port patch panel) and possibly over-spent on some new hardware (a new router/AP).

Here are my objectives:

  • Place at least one network drop at the three locations in our den/office that have computers
  • Create a network drop behind the TV, since it was centrally located in the floor plan and set up the new Router/AP near the TV to improve WiFi.
  • For each and every phone jack in the house, run a network drop to that location.
  • Add a network drop to any bedroom without a phone jack.
  • Relocate the Verizon FiOS router hardware to the network cupboard.

Here are the parts that I bought for the project and their cost. I didn’t really go nuts trying to find the best deal, I did the majority of my shopping on Amazon, Newegg and eBay, all prices are my best approximation for my total out of pocket (shipping, taxes, etc…):

Edit: Adding a few items we bought after this post to keep it accurate.

  • Five foot 2” PVC Pipe (Lowes: $5)
  • 2” PVC clamp/brackets. (Lowes: $3)
  • Spray-foam Insulation (Lowes: $11)

In my empty cupboard, the plan is to basically build a 19” vertically mounted server rack of sorts. Nothing tremendously fancy, we purchased a few feet of 1”×2” lumber. What we’d really like, is to build something hinged that can swing open towards us to allow easy access to the back of the patch panel. We’re going to cut some slits into the rack and screw in some peg board. On that peg board, we’ll mount the switches and FiOS router in such a way that everything looks nice and neat when you open the cupboard.

Patch Panel Miscellaneous wall plates, keystones, etc... Netgear ProSafe Gigabit Switch GS108 BUFFALO WZR-HP-AG300H AirStation High Power N600 Gigabit Dual Band Wireless Router

Demolition

Sadly, there was not a whole lot of demolition for me to get into. Perhaps it is because I watch too much HGTV, but I had envisioned a sledge hammer and carefully destroying something worthy of before and after pictures. This wasn’t the case. In fact hardly any demolition was needed at all, but we suspected a TV antenna built into the attic might be soaking up some of the WiFi and causing the coverage issues we’re seeing in the house. All it took to remove the antenna was to loosen some bolts that were finger-tightened. This simple removal was preceded by me wildly thrashing the antenna back and forth trying to knock it loose while wobbling precariously on top of the rafters. Sometimes, you just have to do things the most difficult way before you can appreciate the simple solutions. After removing the antenna, we thought we saw an improvement in the WiFi coverage throughout the house but nothing dramatic and it may even be wishful thinking on our parts.

My Network Cupboard

My wife and I bought our first house about 18 months ago. We’ve enjoyed home ownership and I’ve been seeking a project to start to make the house more of my own. In our house search, we were pretty particular to find a house that was mostly move-in ready; mainly because of how few tools and what little actual skill I possess.

After moving in, we had Verizon FiOS installed for both our Television and Data service (and we couldn’t be happier.) When the Verizon tech was here, he wound up choosing to install the cable particularly unconventionally. The demarc is on the east side of the house and our home “office” is on the west side of the house. The technician wound up running the cable into the house from the east, through the attic back outside the west side of the house down the west wall and back into the office.

This clumsy installation started my “do it yourself” wheels turning in my head; firstly I wasn’t exactly thrilled to have the cable running down the western side of the house and secondly the WiFi access point was on the opposite side of the house; which has meant that the WiFi signal in the master bedroom is pretty low.

Originally, my plan was pretty humble. I just wanted to run a strand of CAT5 from my office into the master bedroom; and in the master bedroom, I would do something simple like turn a Linksys WRT54G into some sort of repeater. At one point, I thought that this was so simple, that I was going to consider any number of the current Ethernet-over-Power devices. The ease of installation for these devices got my wheels turning even harder which caused me to want to have a network drop in almost every single room in the house.

And thus, the slippery slope began. In looking at the hardware cost for the Ethernet-over-Power that I wanted, I soon started to realize that for the same cost (and some elbow grease) I could put in an honest to God SOHO Network in the house. And that elbow grease would wind up hopefully satisfying my hunger for a home improvement project.

Eventually, I decided to go ahead and take an empty cupboard in our laundry room and turn it into My Network Cupboard. Inside that cupboard would be a patch panel, some switches and hopefully my Verizon FiOS router. The plan would be to run at least one network drop into nearly every room in the house except for bathrooms, closets and the laundry room.

This plan has been hatched and it has been a topic of frequent discussion among friends and co-workers over the past couple months. I’ve finally accumulated all the hardware, tools and other supplies we thought we would need and this week we started the first couple mini projects. I’m going to break this project up into multiple blog entries and hopefully you’ll be able track progress nearly real-time via my Twitter feed (@briancmoses #MyNetworkCupboard)

Team Fortress 2 - Free to Play

Team Fortress 2For some peculiar reason, I never bought The Orange Box. I never developed enough actual interest to motivate me out and go buy it. Mostly it’s been because I have long thought that First Person Shooters was a bit of an overdone genre with a repetitive tendency. A long time ago, it seemed like I was in a loop of buying every single FPS the day it came out, taking it home and playing it feverishly until the next new FPS came out and it was left to rot on my PC. After a while, they all seemed to be the same and I never really got “hooked” on any of them.

My resistance to this chain of FPSs is also due largely to the very ancient FPS Starsiege:Tribes. Back in 1998, Tribes introduced me to a lot of new game play that I hadn’t been exposed to since playing Doom for the first time. Tribes featured larger outdoor maps, different playable classes, and equipment that could be built and deployed. These factors combined to create a type of video game that I had never experienced before; a need for strategy and teamwork. Within a few matches, I was hooked on Tribes and played it for years. Even after several disappointing sequels, I stuck to the original as the game slowly sunk into obsolescence.*

When I joined StumbleUpon a few years ago, I wound up starting to get a bunch of TF2 stumbles in the various video game categories that I belonged to. The cartoonish nature of the game and the (usually) humorous content of the stumbles almost always entertained me and made me very curious about Team Fortress 2. Ultimately, I wound up deciding that it looked like fun, but that I was probably a couple years late to the party and I foolishly decided that it would probably be best if I just chuckled at the content of the stumbles and not invest time and effort into playing catch-up in yet another FPS.

Thankfully a good friend mentioned out of the blue one day that Valve had made Team Fortress 2 free to download via Steam. I had seen the free-to-play release mentioned in other gaming news articles. We decided to go ahead and give it a shot. Immediately, I realized exactly what I had been missing out on since forgoing a purchase of The Orange Box.

Team Fortress 2 has been hysterically fun to play. I am thoroughly enjoying the nine different classes and understanding the strengths and weaknesses of each. The “strategerie” of the game is enjoyable and elevates TF2 well beyond the button-masher that I think most first-person-shooters devolve into. The different mission types offer an enjoyable variety and I’m especially enjoying the Payload mission type, where one team attempts to push a cart to the opposing team’s side of the map.

I’ve tinkered a bit with 8 of the 9 classes about equally. I enjoy the classes to varying degrees, however I am absolutely worthless as both a Spy and a Sniper, so for the sake of my teammates I’ve restricted my use of those classes to using them on empty servers. The class I’ve enjoyed (and played) the most by far is the heavy. It is tremendously entertaining to get ubercharged, run around a corner and spray bullets out of my mini-gun until I run out of ammo or the other team kills my pocket medic.

One of the things that’s surprised me the most about TF2 is it’s staying power. Considering the fact that there seems to be some new big budget video game title being released every couple weeks, I’m astonished at the total number of players playing. By making the game free to play, Valve is hopefully enhancing an already dedicated and large player-base

* It is encouraging to note that Starsiege: Tribes is not entirely extinct even 13 years after it’s original release. There’s still a community going strong. Gaming site Tribalwar.com is keeping the game relevant. If you’re interested at all in Tribes, go check out TW and you can get started playing Tribes using this thread there.

Viewing all Queued Builds in TFS

As a TFS administrator one of the questions I get asked frequently is why someone’s build seems to be stuck in queue. Our TFS deployment has quite a few machines that each have a single build agent and build controller installed on them. To complicate things further, we have a few dozen different team project collections in TFS.

Since you can only view builds queued up from a single team project, finding the source of these issues has always been a bit annoying. You would have have to iterate through each of the team projects, then view thequeuedbuilds in each team project until u found the culprit. Depending on the number of team projects and builds, this could be a very time consuming task.

Generally speaking, I would just write back and let them know I was keeping an eye on things and that they should just be patient for the build queue to clear itself up. But every now and then, something would hang indefinitely and the possibility of that always hung out in the back of my mind.

Thankfully, I found an article on Bart Wullem’s blog, The Art of Simplicity, that set me off on the right direction: a console application that got all of the queued build information from the TFS API and wrote it out to the screen. Even better, the source code to the console app was published too.

I made a few changes; instead of hard coding the TFS URL into the app I added a config file and put the URL in there so that you could easily change it, I prettied up the output a little bit by sorting the builds by the Build Controller it’s assigned to and then by the time it was queued, and lastly I added an elapsed time to the output.

In following Bart’s example, I thought I’d share this and save another TFS administrator the effort I went through:

Update (12/28/2011): Fixed an issue where queued builds caused the application to crash.

TFSBuildQueue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Build.Client;

namespace TFSBuildQueue
{
    class Program
    {
        static void Main(string[] args)
        {
            int BuildCount = 0;
            string TFS_URL = ConfigurationManager.AppSettings["TFS_URL"];
            Console.WriteLine("\nTFS Build Queue");
            Console.WriteLine("===============\n");
            Console.WriteLine("Connecting to: " + TFS_URL+ " and querying build controllers...");
            TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(TFS_URL));
            IBuildServer bs = tfs.GetService<IBuildServer>();
            IQueuedBuildSpec qbSpec = bs.CreateBuildQueueSpec("*", "*");
            IQueuedBuildQueryResult qbResults = bs.QueryQueuedBuilds(qbSpec);


            // Define DataTable for storage and manipulation of currently queued builds.
            DataTable QBTable = new DataTable();
            QBTable.Columns.Add("Controller");
            QBTable.Columns.Add("Project");
            QBTable.Columns.Add("BuildDefinition");
            QBTable.Columns.Add("BuildStatus");
            QBTable.Columns.Add("Priority");
            QBTable.Columns.Add("Date");
            QBTable.Columns.Add("ElapsedTime");
            QBTable.Columns.Add("User");

            // Query TFS For Queued builds and write each build to QBTable
            foreach (IQueuedBuild qb in qbResults.QueuedBuilds)
            {
                string RequestedBy = qb.RequestedBy.PadRight(18);
                if (qb.RequestedBy != qb.RequestedFor)
                {
                    RequestedBy = String.Concat(qb.RequestedBy," (for ",qb.RequestedFor,")").PadRight(18);
                }
                DateTime CurrentTime = DateTime.Now;
                TimeSpan ElapsedTime = CurrentTime.Subtract(qb.QueueTime);
                string ElapsedTimeString = ElapsedTime.ToString();
                String TFSET = ElapsedTimeString;
                String TFS_TEAMPROJECT;
                if (qb.Status.ToString() == "Queued")
                {
                    TFS_TEAMPROJECT = "-------";
                }
                else TFS_TEAMPROJECT = qb.Build.TeamProject;
                  QBTable.Rows.Add(
                    qb.BuildController.Name.Replace(" - Controller", "").PadRight(17).ToUpper() + "(" + qb.BuildServer.Name.PadRight(17).ToUpper() +")",
                    TFS_TEAMPROJECT.PadRight(22),
                    qb.BuildDefinition.Name.PadRight(55),
                    qb.Status.ToString().PadRight(15),
                    qb.Priority.ToString().PadRight(12),
                    qb.QueueTime.ToString().PadRight(23),
                    TFSET.PadRight(18),
                    RequestedBy.PadRight(18)
                    );
                BuildCount++;
            }
            // Sorts QBTable on Build controller then by date
            DataRow[] QBSorted = QBTable.Select("", "Controller ASC, Date ASC");

            // Writes the headers 
            WriteHeaders();

            foreach (DataRow dataRow in QBSorted)
            {
                WriteReportLine(
                    dataRow[0].ToString(),
                    dataRow[1].ToString(),
                    dataRow[2].ToString(),
                    dataRow[3].ToString(),
                    dataRow[4].ToString(),
                    dataRow[5].ToString(),
                    dataRow[6].ToString(),
                    dataRow[7].ToString());
            }
            Console.WriteLine("\n\nTotal Builds Queued: " + BuildCount + "\n\n");
        }

        static void WriteHeaders()
        {
            Console.WriteLine("\n\n");
            Console.WriteLine("Controller (Agent)".PadRight(34) + " " +
                              "Project".PadRight(22) + " " +
                              "Build Definition".PadRight(55) + " " +
                              "Build Status".PadRight(12) + " " +
                              "Build Priority".PadRight(15) + " " +
                              "Date & Time Started".PadRight(23) + " " +
                              "Elapsed Time".PadRight(18) + " " +
                              "User".PadRight(18));
            Console.WriteLine("=================".PadRight(34) + " " +
                              "=======".PadRight(22) + " " +
                              "================".PadRight(55) + " " +
                              "============".PadRight(12) + " " +
                              "==============".PadRight(15) + " " +
                              "====================".PadRight(23) + " " +
                              "==================".PadRight(18) + " " +
                              "============".PadRight(18));
        }

        static void WriteReportLine(string TFSBuildController, string TFSProject, string TFSBuildDefinition, string TFSBuildStatus, string TFSBuildPriority, string TFSBuildDateTime, string ElapsedTime, string TFSBuildUser)
        {
            Console.WriteLine("{0} {1} {2} {3} {4} {5} {6} {7}", TFSBuildController, TFSProject, TFSBuildDefinition, TFSBuildStatus, TFSBuildPriority, TFSBuildDateTime, ElapsedTime, TFSBuildUser);
        }
    }
}

Welcome!

Hello everyone and welcome to my blog. I wanted to find a way to share topics that interest me and hopefully entertain at least one or two people out on the Internet (counting myself).

About the Author

This is BrianI’m a thirty-something year old guy who lives in the Dallas/Ft. Worth area. I’ve been here about 15 years but I was born in Wyoming and grew up in the Denver area. Almost 4 years ago, I married my best friend and about the sweetest person I’ve ever met.

I am an Information Technology professional who works as a Build & Deployment Engineer; which basically means I sit at a computer banging my head on the keyboard hoping to get Team Foundation Server to get it to do what I want (need) it to do. As I find things that make my life easier at work, I incorporate them into articles on the blog.

But to be honest, work is a means to an end. The problems I solve at work provide value to a company which in turn compensates me. That compensation enables me to do the things I’m passionate or curious about. I enjoy writing about and sharing the things that interest me the most.

My interests vary widely; I’ll narrow in on the things I’m most interested in. I’ve been a pretty significant computer geek ever since my parents splurged into their savings in order to buy a used Apple IIe when I was in grade school. If you’re inclined, you can apply a lot of the geek stereotypes to me if you want I fit many of them to a “T.” I’m a pretty avid gamer of all sorts; consoles, PCs, traditional arcades, etc…

I’m also fanatical about sports. I grew up rooting for the Denver Broncos and idolizing John Elway. I read just about every single athlete’s auto-biography in the public library growing up. Because reading about guys like Mickey Mantle, Joe Dimaggio, Yogi Berra and the baseball vacuum of Denver (when I grew up) lead me to eventually becoming a fan of the New York Yankees. However I’m a baseball fan in general. There are many teams that I enjoy and root for; the Texas Rangers, St. Louis Cardinals and Colorado Rockies all get my rooting interest as long as they’re not playing the Yankees. Combine that with my geeky foundation and that makes me into a pretty avid player of fantasy football and to a lesser extent fantasy baseball. Football and baseball are really in my wheelhouse, but all things sports interest me.

My geekiness follows me into another passion of mine, cars. Specifically fast cars and making my cars go faster. Over the years, I’ve owned a few sports cars; a 1992 Mitsubishi Eclipse GSX, a 2004 Mazda RX-8 and currently I’m driving a 2002 Corvette Z06. Naturally Top Gear sits at the top of my DVR priority and is must-watch-TV.

Finally, I was diagnosed with Type 1 Diabetes almost 10 years ago. I’m quite healthy, and am learning to manage the disease as best as I can. I’ve had a few co-workers who have had loved ones diagnosed and I thought it might help if I shared some of my experiences so they can understand what being a Type 1 Diabetic entails.