Introduction

Since starting the project up to wire my house with Ethernet, I have been thinking of interesting ways to put my network to use. For awhile now, we have been using a Western Digital Media player and an external USB hard drive to watch video content on the television. With products like Google TV I have been thinking there would be a value to having attached network storage. My hope is that sometime in 2012, I will have a device plugged into my TV that can stream video over my network both locally and from the Internet.

Most of my thinking was spurred on by a recent sale that Drobo had on one of their low end models. I have been an admirer of the Drobo hardware for quite some time, but I have always found it to be cost-prohibitive; I had never thought I'd get the use to justify the price. In doing some research of the products out there, I felt I had about two choices: to either build a computer or to buy an enclosure with the functionality I need built into it.

The features that I was after were for the device to be network capable supporting Gigabit, to support at least 4 or more hard drives, to support redundancy via RAID, to have a smallish footprint and to be simple enough that I can manage it without having to hire an IT consulting firm. Being able to do this myself, without having to spend a ton of money on software or spending time teaching myself

Because of my requirements,I started off by researching quite a few enclosures, both USB and NAS-type devices. What I found, was that with the enclosures that had the features I was looking for you wound up paying a premium both for the smaller form factor and for the ease of use. Ultimately, a combination of this cost premium and my discovery of FreeNAS convinced me to go the do-it-yourself route.

Hardware

Because I decided to build the NAS from the ground up, I had the luxury to pick the parts I wanted and that suited my needs nearly perfectly. After researching hard drive prices (over half of the cost) I budgeted around $750-$800 in total and visited the website of my favorite vendor, Newegg. I probably could have saved a few dollars going with different vendors for different components, but I value getting all my parts from a company that I have enjoyed working with over the years.

Case

One of the most important requirements was to consolidate all of this equipment down into the smallest reasonable footprint possible. This caused me to invest a little bit of effort and value into the case. I spent more time shopping for the case than I did for any other component. I needed a case that would hold at least 6 different drives and a Mini-ITX motherboard. I wound up choosing the Lian Li PC-Q25B. The case has room for 7 different drives internally and features a hot swap-able drive cage all in small-ish footprint of 14.41" x 7.83" x 11.02".


Motherboard, CPU and RAM

For the motherboard I wanted something low power with an integrated CPU, Gigabit Ethernet and support for numerous (six or more) SATA drives. I wound up picking the ASUS E35M1-I Fusion, a mini-ITX board with an air cooled dual core 1.66GHz AMD CPU built on the board. The motherboard supports up to 8GB of RAM, so I chose two sticks of Crucial 4GB 240-Pin DDR3 SDRAM DDR3 1600 (PC3 12800).







Storage

The most important and most expensive part of the build is the hard drives. To start off, I decided that I would begin with four drives and then add two more down the road in the future. Because of hard drives' declining reliability, I wound up buying drives from two different manufacturer; the Western Digital Caviar Green WD20EARX and the HITACHI Deskstar 5K3000. Because hard drives often share problems across an entire batch there is a good chance that when buying two identical drives from the same vendor that both drives came from the same batch. By buying from two different manufacturers I help reduce the fact that half of the drives may in a short time span.

In addition to the disk drives, I purchased a small 8GB USB Flash Drive and a USB cable that plugs directly to the motherboard's USB header to mount inside the case. The purpose of the flash drive is to host the OS and the software to manage the NAS.


Software

The software to power the NAS was my biggest area of concern. I've tinkered with hardware RAID in the past using a 3Ware controller card. Once upon a time in a gaming rig, I had created a RAID 0 array across two disks for the fastest performance. My needs now are a little bit different, I need something cheaper and that is not hardware specific so there are fewer points of hardware failure. In researching how to configure and support the RAID software choices made me lean towards buying one of the all-in-one enclosures. However the discovery of FreeNAS enabled me to go the PC route instead.

Directly from FreeNAS' webpage:

FreeNAS™ is an Open Source Storage Platform based on FreeBSD and supports sharing across; Windows, Apple, and UNIX-like systems. FreeNAS™ 8 includes ZFS, which supports high storage capacities and integrates file systems and volume management into a single piece of software.

From what I have been able to research so far, I am going to be able to place FreeNAS directly on a bootable USB device, and be able to configure/use it remotely via a web-interface running on NAS itself. I have read over their user documentation and I think that FreeNAS is something that a novice like myself can tackle.

Next Steps

Right now, my parts are coming in three different packages making the trek from Memphis, TN to my house. I have been eagerly tracking the packages throughout beginning of the week. Hopefully over the next week or so I will have time to wrap up my other ongoing projects and begin to tackle this new project.

For those of you that follow my Twitter feed and those of you who live within a block or so of my house, then you already know that we have had a pretty difficult day in the MyNetworkCupboard effort two weeks ago.

Our goals were pretty simple; cable up the patch panel, test the existing cable runs, run the network drops to the remaining rooms, and relocate the Verizon FiOS router. From what we had accomplished the night before, I thought it was a slam dunk that we would have the project wrapped up in a few hours and then be eating burgers and drinking beers. In retrospect, it is funny how wrong your assumptions can be about the work that is immediately before you.

We started off by measuring out and crimping down network cables for the patch panel. To be meticulous, we tested each cable we created. Our intent was to wire up the patch panel to such an extent that we could plug in the existing runs and do some throughput testing.

Upon completing the cable cutting, the wheels on our project began wobbling. We attempted to move the FiOS hardware into the cupboard. The FiOS router/modem has both a coaxial cable and an Ethernet cable run into it from the Verizon box on the side of the house. In our research online, we'd read that it needs one or the other, not necessarily both. To test things out, we powered off the FiOS router and disconnected the coaxial cable. With only the Ethernet plugged in, we were not able to access any of the Video-on-Demand services that we get with Verizon's FiOS TV services. We were hoping that it would work with just Ethernet, but that was not the case. For the last step of project reroute both the coaxial cable and Ethernet cable fed into the FiOS router.

The wheels continued to wobble when we noticed during our throughput testing that on roughly half of the drops (8) we were only getting 100Mb and in some cases 10Mb from our runs. When we initially ran each of the drops, we put a cable tester and made sure that each jack lit up on all 8 strands so this came as a bit of surprise. What we found, was that the tool-less RJ45 keystone jacks we had been using were either a little fragile or that we were being careless with them after crimping them down. We had fix and re-test several of the network jacks before they lit up the lights on the switches that we expected and measured out at gigabit speeds.

The next part of the project was a little fun and kind of humorous. Our house is a ranch style house and we have a two-sided fireplace right in the middle of the house. The fireplace separates the office/den and living room, the network cupboard is in the laundry room which is attached to the office/den, and the living room has vaulted ceilings. Getting the cable from one side of the house past the chimney, over the vaulted ceiling and within arm's reach of the other attic access point was going to take some creativity, luck and athleticism; basically we needed Tim Tebow up in the attic with us. Although, I'm not sure Tebow would fit comfortably in the attic or that his awkward left-handed throwing motion would be conducive to making the throw at all.

I purchased a ball of very lightweight but sturdy twine and grabbed one of my puppy's bone-shaped dog toys. I tied the twine to the toy and Pat held one end while I threw the toy, trying to thread a needle across the room near the roof. Twenty or thirty tries later, I finally hit the hole that I was aiming for, but the dog toy was going to be out of our reach from the other side of the attic. However, the dog toy snagged when I tried to pull it back and rather risk losing one of the puppy's favorite toys I decided to go up into the other side of attic and try and retrieve it somehow. From the other side of the attic the toy was out of reach and out of sight, we could see the twine hanging down across a round HVAC duct. But it's resting place was going to be too small and cramped to crawl into.

Thankfully we had a 8-10 foot length of 1"x2" leftover from building the framing and equipment rack. Pat went down into the garage and rummaged around and managed to turn it into a hook of sorts with one of the clamps I we had been using. Thankfully, it was barely long enough that I could lean forward and snag the loose twine and retrieve the dog toy on the end.

The plan after that was to use the string to pull through network cable to the other attic access point and to attach a new stretch of twine to the network cable we pulled through, that way we would have enough twine to pull cables back and forth between the two sides of the house. We pulled the first cable across without too much difficulty and then we ran into the Immovable Object.

The master bedroom, spare bedroom #1, spare bedroom #2 and guest bathroom are in a row through the hall. The hall is nearly intersected by the doorway to the living room. With the attic access in that hallway. Up in the attic, the HVAC unit runs along the wall between the bedrooms and the hallway. HVAC ducting extends towards the front of the house to spare bedroom #2, towards the back of the house to the Master bedroom and then hangs off the back of the unit.

In order to run network cable into the two remaining bedrooms (spare bedroom #2 was already wired up with CAT5e by a previous owner), I was going to have to find a way over the HVAC unit, or the main trunk and then over another smaller HVAC duct. I raked away as much of loose insulation as I could and was dismayed to find that the rafters were running 90 degrees differently than they were over the office/den. The rafters were running parallel to the HVAC unit and there was only one rafter between HVAC & Main Trunk and the next run of HVAC ducting. Being a man of limited mobility and coordination, I had no faith that I would be able to climb over two obstacles, place my boards and move to drill holes down and run cables through them. To make matters worse, the roof slopes down three sides of the master bedroom, even if I could navigate safely past the HVAC obstacles being able to worm into the master bedroom and run a cable down the far wall was a very, very unlikely proposition. With that, the wheels finally shot off on the weekend's progress and any promise of completing the project that weekend was lost.

By the time we finished that Saturday night (very very late), it turned out to be a very frustrating and disappointing day. At one point, I was afraid that we would not be able to complete my goal of cabling every room but the kitchen and bathrooms with Ethernet. However there are always alternatives and I have been thinking about it for two weeks now; right now I'm trying to decide how feasible it would be to use a flexible drill bit (and a some flexible extensions) to try and drill up into the attic and then fish the cable back down. Unfortunately, to buy all of those tools it is going to cost quite a few dollars. Since I am a new home owner, I'm not opposed to buying most tools, since they will likely come in handy down the road on another project. But in this case, I'm hesitant to buy the tools because it's going to wind up being something I only use this one time. We will see what kind of zany/creative/expensive solution we can come up with!

I recently decided to replace my frustrating mobile phone (a Samsung Galaxy S phone, the Vibrant) because Samsung and T-Mobile has been terrible at keeping current with the latest version of Android. I did a bit of research on eBay and Craigslist, and found that the myTouch 4G (aka HTC Glacier) was a comparable phone with more memory and faster data speeds.

I spent New Year's weekend crawling Craigslist trying to find the cheapest MyTouch 4G nearby. I figured it'd be a bit of a calculated risk, but I felt pretty good about it. I found a guy selling one nearby and met up and grabbed up the phone in the parking lot of a nearby McDonald's. From what I could tell, the phone was in good shape but it had been a little loved.

I took the phone straight home, rooted it and installed my favorite Android ROM, CyanogenMod. It was not until a couple days later that I realized the phone had a quirky problem. Whenever I would receive (or place) a phone call, the screen would immediately go dark and remain dark until I either pulled the battery or received another call (and didn't answer it).

After about a hundred different searches on Google, I began to suspect that the proximity sensor on the phone was not behaving properly. The proximity sensor's purpose on phones is to detect how close to your face the phone is. When the phone is right up next to your face, the screen goes dark and does not respond to touch. Once you move the phone away from your face the screen should light back up.

I began by digging around in the CyanogenMod and Android settings. There were some settings that sounded like they might disable or ignore the proximity sensors, but unfortunately they did not quite do the trick for me. Regardless of what I tried, the proximity sensor remained enabled.

I wound up finding an app on the market that I used to troubleshoot the sensor. The name of the app was Proximity Sensor, when I opened the app it told me that the sensor was permanently engaged. Just for fun, I took my flash light and I turned it on and pointed it right at the sensor. When the flashlight was flush up against the phone at it's brightest setting, the app began to report intermittently that the sensor was clearing.

But if it took a flashlight right up against the phone in order for the sensor to turn off, then surely the sensor is most likely kaput.

Since my phone is rooted, I thought I'd give a few different "fixes" a try. According to some of my research, the HTC's proximity sensor is a CM3062. In considering options, I thought we'd have a few options:

  1. Deny all permissions on the CM3062 file in the /dev/ folder.
  2. Use an application like Tasker or Proximity Screen Off to disable the sensor.
  3. Switch to the MIUI ROM since it has an option to disable the proximity sensor.

Ultimately, setting the permissions had no effect. Tasker could read the sensor, but could not disable it and the Proximity Screen Off app seemed a little convoluted to use. I briefly tried out the MIUI ROM, which fixed the issue. But, I have grown pretty accustomed to CyanogenMod and it was hard to give that up.

Ultimately, 8 or 9 pages deep into Google's search results was a suggestion to hex edit file and overwrite information about the sensor. Because I was determined to make CyanogenMod work on the phone, I decided to give it a shot. Within the file, /system/lib/hw/sensors.glacier.so, I searched for and overwrote the "CM3062" text with "xxxxxx" and then rebooted the phone.

Thankfully it worked, the proximity sensor is disabled on my phone and I am able to make phone calls without causing my phone's display to turn off indefinitely. This was confirmed by the Proximity Sensor app, which indicates now that there's an error while trying to read sensor data. This basically turned my dysfunctional phone into something that I could continue to use until my contract runs out and I can upgrade my phone to something with native support for Ice Cream Sandwich in a few months.

According to Google, people frequently have problems with the proximity sensor; people do not seem to like them, they seem to interfered with by screen protectors and phone cases, and then in a lot of instances (and probably mine) people drop their phones and damage the proximity sensor.

I've posted this online in both on XDA Forums and in the CyanogenMod forums. And now, it's forever preserved on my blog. Hopefully, someday down the road it'll help a few other people out.

Between the Holidays and the bacteria intent on ruining said Holidays,  we wound up taking an extended break from My Network Cupboard. However, I made a resolution at the beginning of the New Year to see this project to completion and I am quite determined to keep at least one resolution in 2012.

Previously, we had measured out and cut what we called the equipment rack.  The equipment rack would hold the patch panel,  and then two "shelves" made out of peg board which we would mount the router to and then use to tie down cables  and make everything neat.  Then inside the cupboard,  we would build out a wooden frame that we would mount the equipment rack to using some cupboard hinges and a magnetic clasp to hold it shut.

Today, we assembled the framing of the equipment rack and then we cut some notched pegboard that was six inches deep and ran the length of the equipment rack. The purposes of the notches in the pegboard are to help hold the shelf in place.  At the back of the pegboard, we screwed in a couple stubby pieces to keep the shelves' shape and to keep them study. Because the two pegboard shelves are installed within an inch of each other, I decided that we'd go ahead and mount the Netgear switches to one of the shelves.

Upon building out the equipment rack, we turned our attention to mounting a frame inside the cupboard that we would attach the hinges and magnetic clasp to.  We wound up making the frame out of the excess 1"x2" lumber we had left over from the equipment rack.  Our plan was to make the frame as tall as the inside of the cupboard and about the same width as the equipment rack.  In order to install it we would screw the frame into the top and bottom of the cupboard.

Installing the wooden frame went surprising smoothly.  We were worried that it'd go in crooked or that we would have a hard time with the amount of space available.  The only complication ultimately was caused by my invaluable assistant, Pat. Pat was testing how sturdy the frame was that he gently whacked it with the palm of his hand to see if it would move at all.   Impressed with the sturdiness, Pat took a second hearty whack at it without the least bit of a budge.  Then, inexplicably, Pat rared all the way back and smacked it a third time.  Unfortunately, this time he put enough oomph into it that the vertical piece on the right side of the frame splintered and broke off. After a couple of "WTFs?!" and some laughter, we got out some longer screws and reattached the lumber.  Finally some  hinges and a magnetic clasp were attached to the cupboard's wooden frame.

Finally,  we attached the equipment rack to the other side of the hinges and guesstimated the appropriate location for the metal plate to hold the cupboard shut.  We fed the patch panel, which already had a few of the previous cable runs punched down, through it's hole in the equipment rack and mounted it too. We opened and closed the equipment rack a couple times to make sure we could access the back of the patch panel easily and we wrapped it up for a night.


The project is mostly complete, but there is still a bunch of more work left to do;  there's at least three more cable runs to do, we still need to relocate the Verizon FiOS router, the WiFi router will need to get moved to a central location, and there is a good deal of cable management work to do to clean up behind the equipment rack.  Lastly, my least favorite thing to do after any kind of project... cleaning up all the mess I made.  Hopefully, we can knock this out in the next week or so.


Enhanced by Zemanta
In planning the project,  I had two fears related to damaging my house;  first I was convinced that I would at one point I would come crashing down through the ceiling as I clumsily stepped between rafters and second that where I had to cut holes in drywall,  the holes I cut would be terribly misshapen and that I'd make a fool out of myself. Seeing as how this is our first house and I generally hate making a fool out of myself because of incompetence these two fears were very present as I went up into the attic again.

The past couple days,  we've been running the network drops into the den/office of the house.  The plan for the den/office is to put network outlets at my PC (4 drops), my wife's PC (2 drops) and then at against another wall (2 drops) for friends to use and for future use.  Thankfully, there is a preexisting network drop that goes into the spare bedroom already near one of the computers (mine).  Since the network cupboard is on the opposite side of the wall of my PC.  I decided to re-use that network drop, and then run my four new cables down.  For my PC, I didn't really have to face either of my two primary fears. It was very straightforward.  I drilled a hole (5/8") in 2x4" at the top of the wall, and then we used a cable fish to push the cable through. Overall, it was pretty easy.  Unfortunately,  the wall plate I picked was a little narrower than the one that it replaced and the hole is just a little bit too big.  There's tiny gap (about the width of a dime) between the wall plate and the edge of the hole,  depending on how much it bothers us (not too much so far), I may wind up having to find a way to shim that so it looks nicer.

The next two network plates are where I'd tackle my fears.  My wife's PC needed a new network jack, so I'd be cutting a hole in the wall for sure.  The other wall plate was on a different wall, and there were quite a few rafters to navigate in order to reach it.  My wife's network plate wound up being no big deal at all.  Her PC is roughly 6-7 feet down the same wall as my PC, and my network plate was right next to a stud.  To make things easier, we bought low voltage gang boxes that don't necessarily need to be attached to a stud.  They have little flappers, that pinch the drywall as you tighten it down.  We measured over 66" and cut a hole in the drywall. I was super conservative in my cutting, so it took a few adjustments to make the whole fit the gang box well and straight.  We ran down two more cables down for her PC. And I breathed a sigh of relief.

To navigate the attic,  I was being super careful.  We'd bought and cut down some 4x8' sheets of plywood, and I've been using those to lay across the rafters to try and minimize any missteps down through the ceiling.  For the most part, this has been working well,  except you still have to be careful about where you put your feet.  As I was using 3 of the sheets of plywood to snake across the attic to the other wall of the den/office, I put my foot (and weight)  out on the leading edge of the plywood, which happened to be about 1 foot over the nearest rafter.  The plywood see-sawed out from underneath me pretty good, nearly causing me to lose my balance.  But I gracefully flopped around like a fish out of water and was able to inch back to solid footing before I put a hole in the ceiling.  With that crisis averted, I set to running the cables for the last outlet in the den/office. There's an ancient old coax hookup on the wall we wanted to use.  That coax isn't currently hooked up to anything and we don't have any plans of putting a TV into the den/office,  so we decided to just pull the orphaned coax up out of the wall and run down the strands of cat5e to replace it.  Other than having a hard time getting to the existing coax run due to some HVAC ducting,  this went pretty smoothly.

Originally, I had an inkling of a desire to go ahead and run coax in certain rooms and tie it all into the coax that the FiOS guys set up for my TV room and master bedroom.  In a perfect world,  I'd love to be able to have all of my rooms wired up for coax without having to call out (and pay) to have an installer wire up another room.  Each of the network plates I've bought has 4 ports and every wall plate, except one, we install will have at last one or two empty ports if we ever decide to do this.

Having the den/office finished means that we've pretty much completed more than half of the network drops needed.  We have four rooms remaining (TV/Living room, 2x Spare Bedrooms and the Master Bedroom) to run cables to,  but that'll probably happen later on after Christmas.

Up next,  we're going to finish out the network cupboard's "rack".  We've got a good idea how we want it to look, but have only begun working on the construction.
Enhanced by Zemanta
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 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 that 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 through that hole, 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 fireblock 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.

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,  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 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.
Enhanced by Zemanta
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
The roots of this project stem back to two basic components;  an unconventional installation by Verizon FiOS and poor WiFi coverage in my house.  Because of this,  my primary objective is to tidy things up and to improve the WiFi coverage throughout the house.

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 and their cost that I bought for the project.  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.


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 antennae 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 antennae was to loosen some bolts that were finger-tightened although, this was predicated with me wildly thrashing the antennae back and forth trying to knock loose the dowel that was holding the antennae and weakly nailed into the rafters.  After removing the antennae, 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.
Enhanced by Zemanta

My Network Cupboard

| No Comments | No TrackBacks
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) that 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 both multiple blog entries and hopefully you'll be able track progress nearly real-time via my Twitter feed (@briancmoses #MyNetworkCupboard)



Enhanced by Zemanta
Team Fortress 2

Image via Wikipedia

For 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 home, 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 FPSes 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,  equipment that could be built and deployed. All of these things lead to create something that I had never experienced before in an FPS;  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 too. 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 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-ase

We've been enjoying the game so much,  that my friend decided to go ahead and host his own server.  TF2 players, please feel free to add The Potato Patch (68.168.146.108:27015) to your favorites list!  Also,  please feel free to add me in Steam, my Steam ID is neckhole510



* 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.
Enhanced by Zemanta

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 project collections in TFS.

Since you can only view builds queued up from a single project collection, finding the source of these issues has always been a bit annoying. Moving through each project collection in Visual Studio and viewing the queued builds to find out what was taking so long was usually a frustrating and fruitless endeavor as the builds usually

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..

Thankully, I found an article on Bart Wullem's The Art of Simplicity blog 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 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.


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);

        }


    }

}


Recent Assets

  • mahhead.jpg

Pages