Pretzle Logic
http://pretzlelogic.com
Pretzel Logic for a Twisted World

I've been thinking about a new software application for Custom Basements

Sorry it's been a while since my last update. I've been overworked - and have been swamped by computer work (so haven't been terribly interested in spending my spare time looking at computers.)

But it occurred to me this morning that I have a lot of lists I'd like to maintain for my basement. And while there are websites and applications that can create and maintain these lists - generally they are all unrelated and are filled by a whole bunch on uesless features I would never need (and are missing a bunch of features I could use.) Basically, there isn't a single application to manage all of your hubbies as a coherent whole (and to be able to share this information with friends). If you're finishing your basement with an eye towards hobbies (game room, home theater, wine collection, etc.) then it would make a certain amount of sense for the following type of Application (at least, I can see the usefulness). I mean, there really is no point in creating a custom/gaming basement except to enjoy it with other people):

1. A single Application that tracks lists of pertinent information and that is linked with location-based services. Here's the list of things I came up with that could be usefully tracked:

  • Book collection
  • DVD collection
  • Music collection
  • Magazine collection
  • Beer collection
  • Beers on tap
  • Available games
  • Available screensavers
  • Visitors
  • Networked files
  • TV schedules
  • Game schedules
  • Alarms/timers
  • Other collections (figurines, guns, posters, etc.)
  • Food favorites/concerns

Obviously there are applications to track all of these things already. However, they don't share pertinent information across groups. And they tend to have lots of extraneous links/information that you have to click through to get to the lists.

Plus, the application should be able to control a networked-home. So selecting a DVD (for instance) should provide external data pointing to the DVD (maybe turning on a light in your DVD shelves within the pertinent section. Or be able to dynamically change the beer available through the tap to the selected beer. Or play music in a specific Region.

All of the links should be available through the same UI, the same login, should be uncluttered and should be linked to shared actionable internal and external systems (through the use of RFID tags combined with home automation systems). I guess take the concept of a networked home and focus on hobby implementations.

One other key element missing from most lists is the ability to assign a custom ranking system (and favorite lists) to the items. Which makes sense if the assumption is only one person will be using the list - but makes less sense if you're letting Visitor's access the same list.


So let's say I have a group of friends come by to visit. They should be able to define their own list of favorite beers (so I can stock up the next time they visit). And they should be able to receive a Message when and where their favorite program is on (especially if they don't live nearby) . And I should be able to expose a shared file system only when the friends are signed in to the network. And if they want to read a book - they should be able to select it from the application and have it light up in the bookshelf (regardless of where it is).

And all of this should be defined and controlled through a single application. And the interface should be similar to a Windows Gadget, or an iPhone/iPad application. If you go through a browser then the filler space will eventually be filled by junk.


To put it simply - it doesn't make sense to go to Website A for a list of the magazines you own somewhere in the basement in a box containing 300 other magazines (along with 20 links to buy more magazines), and then have to go to another website to see a list of beers you can buy (with no way to record whether you personally like them or whether you've even tried them) - both with different login names and different passwords (because the websites have decided that your taste in beer has to be as secure as your bank account). And then your friends come over to visit and can't view any of the lists you've created anyways. And when they were looking through your magazines they changed the location.

I'm not trying to be anal - but if you want to share your collections with friends these features can be useful. And for those functions that are already supported they way they've been implemented sucks.

 del.icio.us  Stumbleupon  Technorati  Digg 

On the recent Supreme Court decision to loosen restrictions on corporate campaign spending

http://www.cnn.com/2010/POLITICS/01/21/campaign.finance.ruling/index.html?hpt=Sbin

Three things occurred to me:

1. It seems to me that anyone could now setup and fund a L.L.C. and dictate in their will that money/interest made by the LLC must be expended towards political commercials. So after they die, they'll still be able to directly impact politics.

2. Along similar lines, I wonder what kind of impact this decision will have on VC funding? If you're a VC and your primary goal is to change society - then you may decide that it is now easier to change society via political commercials than by funding startups. For that matter, the same issue may come up with regards to scholarship funding (does funding a scholarship meet/fit your stated goals more than funding a political cause)? I'm just saying the equation may have changed for some people.

3. How long will it take before some corporation(s) decides to pay for advertising time not to show a political commercial - but rather to keep political commercials from being shown in the same time slot. Or maybe some corporation decides to block only certain types of political commercials from being shown. Normally they may consider it a waste of money - but on the other hand they don't need to spend any money creating a commercial. And it could generate some goodwill towards their paying customers. So again, maybe the equation has changed.

Or maybe corporations subsidize traditional advertising (non-political) to the point that the broadcast company makes more money from traditional advertising than political advertising. The subsidies cost wouldn't be prohibitive, and the advertising time would still be filled by advertising. It's just that political advertising would pay less to the broadcast company.

To put it another way, what's to stop a corporation from telling a television station: "We'll pay you $50,000/day for the 2 weeks leading up to the election not to accept advertisements from Candidate A."

 del.icio.us  Stumbleupon  Technorati  Digg 

Commercials are the corporate equivalent of putting a bumper sticker on your car

Sometimes it's meant as a joke. Sometimes it's meant to sell something. Sometimes they want to redirect opinions to something unpopular. And sometimes it's for their favorite cause.

It's (literally) the least they can do.

 del.icio.us  Stumbleupon  Technorati  Digg 

Quality Assurance hints for Testing Database and Data Synchronization

Most likely you'll be looking at a subset of these items. And I've noticed that several areas may not be popular concerns, but generally I feel it's better for a QA Engineer to be mindful of all of these, regardless of whether they are encouraged to consider them. And the terms I picked are not necessarily standardized - though I tried to make it obvious as to what I was referring to. This is meant to be helpful to whomever needs it. Happy Holidays!

  1. Positive Test Cases
    1. Should be relatively straight-forward to understand. Generally consists of variations/combinations on Data Inserts, Data Updates and Data Deletes.
  2. Negative Test Cases
    1. Again, should be relatively straight-forward to understand. Generally consists of variations/combinations on Data Inserts, Data Updates and Data Deletes. But will generally involve playing (incorrectly) with Key combinations as well (to force a negative test scenario).
  3. Border Test Cases (0 diffs to Sync, 1 diff to Sync, minimum - 1, minimum, minimum + 1, maximum - 1, maximum, maximum + 1, maximum + (increase in number of digits/characters)
    1. The minimum value will typically be defined by the frontend/UI. However, the maximum may be defined either by the UI or by the underlying database.
    2. It may be good enough to look at a subset of these test cases. For instance, 0 and 1 diff may not be necessary. However, even if they are not it may help to use them as some sort of baseline test case.
  4. Exception Test Cases (Functional/API failures returning Errors)
    1. Of less concern if there is no public API. However, similar to Negative test cases you can most likely trigger a Database Exception by playing with the database schema.
  5. Scalability Test Cases (both Application-based and data based)
    1. Usually will be defined at the Server level (if you are testing a 1-many Data Sync model, then Scalability of your primary database schema should be verified against whatever Server Applications are used.)
  6. Data Sync Rules Verification
    1. Whether your model is Server Wins/Client Wins or First in First out, there will be some scenarios you can define that must function in a well-known manner based on the Data Sync rule being used. Of course, the Data Sync Rules may also be affected by Business Logic, so it may not be a simple model to follow.
  7. Platform Dependency Test Cases (Win32, Linux, Win64, Mac, Droid, iPhone, WInMobile, Symbian, Palm)
    1. Fill in your favorite platform. Some general things to keep in mind, though, are that data definitions may not be shared across platforms. INTEGER may not exist in all platforms - though some replacement will exist. In this case you need to verify the replacement functions correctly, and can Synchronize data bi-directionally (if this is supported.)
    2. Another good scenario to keep in mind is to verify data translation from Platform1 to Platform2 and back to Platform1. In this case, the final set of data on Platform1 should be identical to the original set of data on Platform1.
  8. Data Distribution Model Test Cases (1 to 1, 1 to many, many to 1, many to many, bi-directional)
    1. This Test Case is dependent on your Data Sync model. Generally your Data Model will be either complete functional Syncs between full-fledged databases, or Data Sync from one primary database to multiple small-footprint databases (with minimal feature-sets).
    2. Scalability/performance becomes an issue based on your Model.
    3. Data Sync Rules also become an issue of varying importance based on which Distribution Model your Sync follows.
  9. Timing Test Cases (batching/ordering of commands)
    1. The easiest way to describe is to provide this example (how is this scenario covered through Data Sync):
      1. Insert 1 record
      2. Update the same record
      3. Delete the same record
  10. Life Cycle Test Cases
    1. Usually Life Cycle test cases concern themselves with Functional Objects (Users, Groups, etc.) However, the same scenarios can apply to individual records within a database.
    2. In other words, you can track the state of individual records throughout an applications use. Some data you would expect to be cleaned up once the application completes. Some you would expect to be saved.
  11. Cross-Server Test Cases (in environments that rely on multiple Servers functioning in a cohesive unit)
    1. Has become much more important with the sharing of specific Servers through different applications. Some examples include Apache, Postgresql, Oracle, Java.
    2. In these cases you may want to consider Test Cases that span multiple Servers (as well as give you the ability to trigger functionality on each Server during the Test Case.)
    3. This also overlaps with Timing Test Cases
  12. Unit Test Cases (API)
    1. Should be straight-forward to understand. But keep in mind that typically the API that you eventually end up with does not match the original Development Specification. So if it is imperative that it does, you may want to define Test Cases that directly match up to the original Spec.
    2. In other instances, though, Dev Specs are looked at more as a general guideline to be refined later.
  13. Environment State Test Cases (individual Servers being shutdown in realtime)
    1. Touches on Cross-Server Test Cases.
    2. This can also become important in environments where mulitple Databases function as a single entity (fail-over, for example.)
    3. This can also be touched on in a Cloud Computer Model - where a database schema is distributed across multiple databases (not for fail-over, but rather because the database model has been implemented this way.)
  14. Language Translation Test Cases (byte size changes)
    1. Becomes important when the data maximum size is in danger of being reached. But can also be relevant if there is a translation engine running during Data Sync.
  15. Use Cases (auto-create, or from Product Management)
    1. Auto-creation of Use Cases can be an extremely useful idea to implement, though the difficulty is generally in getting development to implement it. Basically, to include a debug mode that logs all API/Data Sync Requests to an external file (without extraneous debug information).
    2. Even without the ability to playback this log directly, it gives the QA engineer a quick way to automate the same scenario. So (for instance), the QA engineer can use the UI tool to trigger some Data Sync calls. These calls will be recorded in a log file, which can then be converted into a JUnit Test Case
    3. Plus, if gives the QA engineer a quick way to fill in Details in Defect Tracking.
  16. Security/Privacy Test Cases (primarily clear-text inclusion of Personally Identifiable Information)
    1. This was discussed in a prior Blog entry. But the basic idea is to verify that PII and Secure Data is not included in a readable format via a Data Sync request.
  17. Hacker Functionality Test Cases (db password manipulation, port access, access to non-shared data)
    1. Usually is more important to verify in a Server/Client environment that relies on 3rd-party applications. Basically, the standard security holes should be verified as closed to external manipulation. For example, authentication on the Data Sync port
  18. Upgrade Test Cases (specifically future-proof upgrade scenarios)
    1. Not exactly a Data Sync Test Case - though Application Upgrade is a form of automated Data Sync. But it can become important in Applications that support future upgrades. How are you supposed to verify that an upgrade will work without having an application to upgrade?
    2. Generally this can be done by playing with the Application/File version (to fake the environment into believing there is a valid upgrade available, and then verifying the application functions correctly after the upgrade completes.
  19. Resource Test Cases (hard drive, memory, minimum requirements)
    1. One important scenario that sometimes gets missed is to assume that your database exists on some other drive that the primary drive.
    2. Generally you will want to verify that Data Sync either completes or rolls back to prior to the Data Sync (it is generally worse to have some sort of in-between state).
  20. Performance Test Cases (of individual Clients, of Server parsing of multiple Clients simultaneously)
    1. There are basically 3 types of performance you should be concerned with in Data Sync. And most likely there will be confusion over which of these is being discussed with regards to Performance Testing.
      1. Client Data Access - I'm still not sure whether this matters in a Data Sync environment. Specifically, the bottleneck may be the resources available on a Client (not the actual Database/Data Sync Model.)
      2. Server Data Access- Can become important if you're talking about large numbers of Clients attempting to Sync simultaneously
      3. Data Sync (especially in an environment containing large numbers of Clients). Can become an issue if there is a timing concern. Can also be severely impacted by the Data Sync engine model (how Data Packets are handled)
  21. Documented/Expected Behavior (to verify that the expected response matches the actual response)
    1. As mentioned before, the expected behavior won't necessarily be correct once the application is developed. So you'll have to figure out whether this is a major problem, or whether you are expected to adapt to the changes as they occur. I can't really say one way is correct.
    2. For Data Sync, this usually will be an issue in defining the final Data Sync Rules
  22. Debug Cleanup (verify removal of debug code)
    1. Not much more to say. Debug code is sometimes left in production by accident. Similarly, on occasion place-holder Error Messages may be left in by accident. It's a good idea (if you can) to setup some scenario/time to verify this type of code has been finalized.
  23. Add-on Functionality (JDBC Driver)
    1. Usually add-on functionality is not considered of primary importance. However, the example given here is considered standard at this point (so I don't know that it would still be reasonable to ignore testing of a JDBC Driver included in your application.)
    2. You also may need to look at Datatype Translations between different drivers.
  24. Undocumented Functional Test Case (undocumented logical functional steps)
    1. Sometimes there are scenarios that become obvious while developing an Application. Therefore, they are probably not included in the original Functional Spec.
  25. Duplication of Steps/Functions (verify that duplication of functionality is minimized)
    1. While it is generally is encouraged in Development to provide multiple ways of accomplishing the same task, from a QA perspective this will decrease the Quality of the application. To put it another way, you are adding unnecessary lines of code - which increases the likelyhood of defects.
    2. There should be a trade-off (what is wanted versus what is needed), but generally QA is not included in this decision
  26. American Disabilities Act
    1. There are websites that describe the requirements.
    2. One thing to keep in mind is that by following the ADA your UI may be easier to test automatically. Because the ADA can encourage applications to provide keyboard shortcuts, you can take advantage of the same shortcuts to automate testing. Generally, UI automation has the hardest time with simulating mouse clicks (internal object names always seem to screw things up.)
  27. Following of Standards
    1. Sometimes you can find 3rd-party applications that can be modified/used to validate that Standards are followed. So while testing Standards can greatly increase the amount of work you need to do, in some cases it can be easy to test to the standards
    2. On the other hand, if you are forced to use a test application developed by someone else you may be forced to work in a development language you aren't comfortable working in. And you probably won't get the support you need to work in it. So be careful about defining the Test Effort up front.
  28. UI/API Disconnect (functionality only available through one or the other)
    1. Generally I feel that all UI functionality should be available through APIs. However, not all API functionality need be available through the UI.
  29. UI Generic Functionality Test Cases (resizing of windows)
    1. The goods news is this functionality is not limited to your application. So it may be worth researching generic UI functionality to verify your application is working correctly.
    2. For that matter, your application may have functions that are meant to simulate generic functionality (without actually being generic.) A primary example are applications that include a Login window - while the window may appear to be a generic windows dialog box, it may be a customized window meant to appear to be a dialog box.
  30. Resource Growth (for example, database does not resize after users are deleted)
    1. This is a pretty common problem (generally I think the issue is lack of effort in cleanup versus effort in creation.) But it should give you some ideas of areas you can test that fall into similar categories.
  31. Install Test Cases
    1. Not much more to say
  32. Minimized Credentials (limit the number of credential requests)
    1. From a functional perspective, there shouldn't be a need to authenticate a user more than once per session (expect for well-know exception cases).
  33. Minimize Functional Steps (assign priorities to Functions, and define a maximum number of steps to achieve the function from any screen)
    1. I tend to take the view that any important function within an application should be available to the End User within a certain number of clicks (regardless of what they are doing.) Generally this is not considered in developing an Application, but I try to keep it in mind while testing (and maybe bring it up with Product Management if I have a good rapport with them.)
  34. Randomized Execution Plans (discussed elsewhere in this Blog)
    1. Not much more to say, except that it can get complicated quickly. You need to define some subset of functions that will cover a majority of all functions. Once you do that, you can play with grouping of those functions.
    2. For example, from a database/data sync perspective this means determining which Datatypes will cover other datatypes.
  35. Code Coverage
    1. We tend to use EMMA (http://emma.sourceforge.net/). But it really doesn't matter as long as you have a good understanding of the product you choose
  36. Connection Leaks
    1. You might want to consider a tool like FindBugs (http://findbugs.sourceforge.net/)

That's about it for now. I started out focusing on Data Sync and Databases and probably went beyond those. But I'm always hopeful someone will find this information useful.

 del.icio.us  Stumbleupon  Technorati  Digg 

Small comment on AIG

Because of this article - http://www.huffingtonpost.com/2009/12/07/aig-executives-threaten-t_n_382853.html

It's only punishment if you consider the original payment plan to be normal. Otherwise, it's just resetting the pay scale back to societal norms.

How about this analogy - your parents give you a car for your 16th birthday. For your 17th they give you an iPod. Are they punishing you? And how would you feel if your parents were only able to afford your iPod by borrowing money from your rich Uncle?

 del.icio.us  Stumbleupon  Technorati  Digg 

That Feeling you get when you know you're leaving your company

I'm not, but I have a friend who was recently let go from his company (technically, he was given 60 days notice.) I find it strange that the same feelings of liberation I've gotten in the past when leaving a company came up in myself just because I knew someone doing the same thing.

For that matter, I have the same feeling when co-workers leave. Which is even stranger, because basically I'm feeling more liberated in a situation where I may, in fact, be required to do more work due to their leaving.

Maybe it's just a strange combination of chemicals being released simultaneously in our brain - melancholy combined with exploration. I'm sure there's a technical explanation.

 del.icio.us  Stumbleupon  Technorati  Digg 

Steps to build a new PC

I took some recommendations from various tech websites (http://www.anandtech.com, http://www.tomshardware.com, http://www.sharkeyextreme.com mainly) - and went through it as more of a beginner than an enthusiast. Besides which, these websites (and other similar websites) have really cut back on reviews and recommendations (if I were a pessimist I would say it's probably because they don't get as many free components to test anymore.)

Regardless, I built the following computer in about 2 days (after I found all of the components.) Besides mentioning the components I chose, I'll try to include issues that came up (that weren't pointed out elsewhere). With luck this will help or encourage someone else to build their own computer.

Generally I'm going to stay away from costs here (mainly because they fluctuate so much.) My best advice is to put together a list of all the components and see what price you can find them for on the Internet (including shipping).


Primary Goals:
To build a powerful computer without spending a lot of money. You can find cheap PCs easily, though they won't have the specific components you may want. Or you can buy a pre-made PC that has most/if not all of the components that you want - but it'll cost you probably twice as much as you would spend if you built it yourself.

Also keep in mind that I don't want to overclock for now (maybe at some point in the future I will overclock, but at the very least I thought it would make sense to get to know the quirks of my new computer before pushing it's limits.) So while some of the components I picked are normally used primarily for overclocking - those same components should provide more stability in normal usage.

I also didn't want to build something that drove me crazy - in the process you'll inevitably run into some documentation that doesn't cover everything (sometimes the English sucks, sometimes the labels on the cables are in the wrong position, sometimes it's just old/incorrect documentation and sometimes they just don't label everything they should.) Generally most of these components were doc'ed ok, though there were some labelling issues on the case cables and some missing labels on the SDD enclosure. And some of the information on the tech websites was incorrect (or most likely old).


General Notes:

With these specific components, everything fit fairly easily except for some of the cables and initially the CPU fan. But - the CPU fan didn't fit because it was installed on the wrong side. So my basic point is there shouldn't be a need for force anything into the case - if there is, then you may have installed something incorrectly.

I put the whole thing together over a couple of nights. You could probably do it all in one night, but then your stress levels will go up. And it's probably better not to try to finish everything in one night anyways (take the amount of time you think it will take, double it and break it up into twice as many sessions for half the time each). Also, by breaking the build up it gives you time between build stages to decide if you installed a component in the best location.

As sort of a related suggestion, as long as shipping costs aren't too bad you may want to ship components out in stages (which can help you break up the build):

Stage 1:
Case
Power Supply

Stage 2:
Hard Drive
SSD
SSD Enclosure
DVD Rom Drve

Stage 3:
CPU
CPU fan
Motherboard
Memory

Stage 4:
Video Card
OS

 
One small problem with the case is while all of the components shipped with enough screws (and the case shipped with extra screws), some of the screws didn't fit very well (don't know if the screw holes were properly cleaned, or whether the screws weren't the right size.) Not a big deal, though you may need to shop for extra screws.
 
And the SSD enclosure supports 2 separate drives, but they didn't bother to match the cable connections to the drive slot.
 
The only truly painful part of the install was attaching all of the cables - it's just a tough reach for some of them. But the good news is you have access into the case from both sides for most of the install, so it won't drive you completely mad.

I picked up everything from http://www.amazon.com, http://www.newegg.com and http://www.antaresdigital.com . Doesn't mean those are the best places to go, but I was able to find everything with them.

Unofficially it takes about 30 seconds to cold boot my computer, and 5 seconds to shutdown (I have no idea what the breakdown is between hardware components and software - but that is quite a bit faster than my Vista PC.)

Here are the Components that I picked:

  1. Case: NZXT Panzerbox
    1. If you decide to go with this case, keep in mind that the frame is aluminum mesh (so if you spill something on it, or your cat decides to throw up on it you could ruin the computer).
    2. But on the other hand, the computer fans are included in the case (so you don't have to purchase them separately) - and they appear to be of high quality.
    3. The motherboard sits on a removable tray (which can help with installing components.) You still need to attach all of the cables with the tray inside the case, so it's not perfect - but it does remove some headaches.
    4. One piece was broken in the box when I received it - the external plate for a 3.5" drive bay (but luckily I have no use for the piece).
    5. One nice thing with the case design are the extra USB and audio ports on the top of the case (rather than behind the case or on the floor).
    6. The button cables, audio cables and USB cables from the case to the motherboard were labelled, but they didn't bother to mark what connection was the ground. For that matter, the label wasn't consistently on the same side of the cable (so you couldn't assume that the cables were in the right direction based on whether you could see the label.)
    7. I used an ATX motherboard - though the doc says the case supports ATX, FLEX ATX, MINI ATX, MICRO ATX
    8. The pictures in the doc are useless (details are all blacked out). But generally I didn't need to see them anyways.
    9. There are 2 separate 3.5" drive bays. So one piece of advice I can give you is if you have trouble installing the drive cables for one location you might be better off just switching to the other location (both face one of the case fans, so there shouldn't be a benefit in using one over the other.) Just a bit of advice that if you get too focused on making one drive connection fit it may be easiest to switch to the other drive bay. Also, tomshardware apparently was using a case with no 3.5" drive bays - my case had them.
    10. The only 2 things on the case that are flimsy appear to be the Power and Reset button in front of the case. They shake when you touch them, and are small (so if you're building the case for someone that needs larger buttons you may want to consider a different case.) Plus, the buttons are the same color as the case (black).
    11. The fan attached to the back of the case has a power cable that scrapes against the case wall when you remove and insert the motherboard tray. And since the case wall is sort of sharp - be careful of the cable (it's easy to push the case wall out enough that it doesn't scrape, but you have to be careful.)
    12. Because the case is made of aluminum mesh, it's not very quiet. But on the other hand if you get really adventuresome it does come with attachments for water cooling (which should quiet it down by replacing the fans). For me this is not a big deal.
  2. Motherboard: MSI P55-GD65 1156 RT
    1. One nice thing with MSI is they have a semi-automated overclocking option OC-Genie (there's a button on the motherboard that attempts to overclock your memory and cpu to a stable level.) So you don't necessarily need to mess with BIOS settings. But as I mentioned earlier, I don't want to overclock yet (if at all).
    2. The case cable connections are in a hard position to reach (connecting them was the most frustrating part of the build.)
    3. The SATA cable connections are also in a tough place to reach. But if you slide your motherboard tray partially into the case you can reach them from behind the case.
    4. Installing the CPU on the motherboard is straightforward. I chose to install the CPU prior to installing the motherboard on the motherboard tray - mainly because I thought this was the most delicate part of the build and therefore I wants the largest amount of space to work in.
    5. The motherboard also comes with a version of Linux that can run off a USB drive (assuming you have a BIOS that supports booting off of a USB drive). While I haven't explored it too much, I did have some problems reading the install disc in Win7 (it can be useful having a USB drive you can boot off of when working on other computers.)
    6. The documentation for the motherboard was generally good.
    7. There are 2 separate power connectors that need to be attached - a 24-pin and an 8-pin (to be honest I don't remember whether it's an 8-pin or a 6-pin, though the same power cable is used regardless.)
    8. You can also make a backup of your BIOS to a USB drive (through your BIOS). Which might be useful.
  3. CPU: INTEL CORE I5 750 2.66G R
    1. Nothing really to say, except this CPU seemed like a good mix of cost and performance.
    2. There is a CPU fan shipped with the processor. But no thermal grease was included (and I've generally read mixed reviews for default fans.) I chose to use the custom fan below, rather than the default (and the custom fan kit shipped with thermal grease).
  4. CPU fan: Cooler Master RR-910-HTX3-GP 130-Watt 92mm Hyper TX3 CPU Cooler for 775/1156/AMD/AM2/AM3
    1. You probably don't need a custom fan if you don't plan on overclocking (Intel includes a fan with the processor). I'm still debating whether I want to or not, but worse case I figured my system would be more stable with better cooling regardless of whether I overclock.
    2. If you don't go with a custom fan, you will need to purchase some thermal grease separately (in this case the grease comes with the fan.)
    3. As mentioned earlier, there are 2 distinct ways the fan can be installed to the aluminum plate. And if you install it on the wrong side you won't be able to slide the motherboard tray back into the case.
    4. Also, the steps for mounting the fan are poorly described. You're supposed to spread grease on top of the CPU, then snap the fan support on the motherboard (over the fan), and then I think spin the legs of the fan support 90 degrees. This last part wasn't documented anywhere, and didn't appear to do anything anyways. Plus, the fan support never did appear to be flush with the CPU (I'm guessing the thermal grease is too bulky to allow a flush connection.
    5. Finally, the wire clips used to connect the fans to the fan support come with no instructions. Once you figure them out they fit nicely, but it's not immediately obvious how they go on. In other words, if you're fighting with the clips they probably aren't going on correctly (turn them around so the interior bend fits inside the aluminum plate).
  5. Memory: G.SKILL Trident 4GB (2 x 2G) 240-Pin DDR3 SDRAM DDR3 2000 (PC3 16000)
    1.  Make sure whatever memory you pick the Voltage is between 1.5V and 1.65V (the initial memory I picked was 1.7V, so I couldn't use it.)
  6. Hard drive: Western Digital Caviar Black 1TB
    1. Used for programs and files.
    2. I'm also in the process of changing as many O/S write functions as possible to point to this drive (IE temporary file location, for instance). I did this to improve SSD access (see below).
  7. SSD: Intel X25-M 80GB SSD
    1. Used as my O/S Drive (keep the Writes to a minimum for the drive.) You can easily skip a SSD in favor of a standard hard drive. I chose to use one mainly because it improves OS responsiveness (supposedly significantly over a regular hard drive.)
    2. The main slowdown with this drive are deletes (not actually writes) - as I understand it SSD drives don't properly cleanup deleted files.
    3. There is a new firmware from Intel that is supposed to correct this problem, but there are problems with the firmware as well. And as is typical, Intel's response to a problem with this specific driver was to remove the driver. Which would have been ok if they included a link to the previous driver, but they didn't. Plus, they suggest that the driver will speed up usage of both the 80GB and 160GB SSDs, but they also suggest that it will only help the 160GB SSD. It's confusing, so for now I'll probably just stick with the default driver. http://www.intel.com/support/ssdc/hpssd/sb/CS-031021.htm .
    4. I stuck with SATA power connectors.
    5. Update (12/5/2009): If you want to enable TRIM on your SSD, you need to configure your BIOS prior to installing Win7 to use AHCI. There are 2 entries in your BIOS that refer to AHCI (one in the Integrated Peripherals section and one I think under Advanced BIOS features.) I don't know which one is the correct one to use, though I think it depends on which SATA connection you used (1-6, 7). I would guess if your drive is connected to SATA 1-6 you would want to use the Advanced BIOS setting - otherwise use the Integrated Peripheral setting. Similarly, this sort of suggests that you may want to move your hard drive connection to SATA 7. 
  8. Video card: ASUS ATI Radeon HD 5850 (EAH5850/G/2DIS/1GD5) 1024MB PCIe x16 Gen 2.0
    1. This was the one component I splurged on (the price recently increased to $300).
    2. Keep in mind that this is about the largest video card that will fit in the case I picked (be careful if you decide to try a 5870 - I don't think it'll fit).
    3. Good luck finding one online - though I have to admit http://www.antaresdigital.com did a good job of sending me one fairly quickly.
    4. Also, I believe the 5950 processor is actually a 5970 processor that wasn't able to be fully clocked at the factory. Which means there's a good chance you won't be able to overclock this video card.
  9. DVD/CDR drive: Sony Optiarc AD-7240S-0B
    1. I decided it wasn't worth looking into a Blu Ray drive yet for my computer (the only possible use now is if you want to watch movies. But if you want to watch movies you probably would consider this case to be too loud to be used as a Media Center).
    2. These drives are easy to replace later on and cheap (I paid $30 for this one) - so it shouldn't be a big deal in the future to upgrade to a Blu Ray drive.
  10. Power supply: CORSAIR CMPSU-850HX
    1. A really nice power supply. And it comes with all of the power cables you could possibly need.
    2. Plug in as many connectors as possible with the tray outside of the case to make thing easier (so from devices on the motherboard to the motherboard, as well as power cables going from devices mounted in the case to the power supply.
    3. The first time through connecting SATA power cables to my drives I used the extra cables provided with the power supply (which was stupid). And then it occurred to me that the power supply already comes with SATA power cables pre-attached. So just try to make sure you use all of the cables that have to be included before attaching extra cables (otherwise you'll be introducing more clutter to the case.)
  11. SSD enclosure: SNT SNT-SATA2221B Dual 2.5" SATA SSD / HDD to 3.5" Bay Trayless Hot Swap Mobile Rack Backplane
    1. You need this to install your SSD drive into a 3.5" drive slot
    2. There are no labels on this enclosure, and since you can't see within it there's no way to tell if you're actually installing the drive correctly (except to hope and pray when you close it.) Basically, there's no obvious snap when the drive is plugged into the enclosure - but I doubt that the cover will close completely unless it's installed correctly. It's just a little scary trying to close the enclosure without being sure you've installed the drive correctly.
    3. There's also no indication as to which SATA connection connects to your drive - so if you guess wrong you may have to switch the cables after you've turned on your computer. It's not a major issue, but can be difficult to overcome if you have to abort from your OS install after the system drive has been marked (I had to change the boot order of my drives in my BIOS to boot off of the CD first to recover and restart my OS install.) So if you begin your OS install and the install doesn't see your SSD, then you may need to go through this as well.
  12. O/S Win7 64bit Professional
    1. 64 bit is pretty pointless right now (no popular programs besides IE 64) - but there's nothing really gained by sticking with 32 bit.
    2. For that matter, I believe that any memory over 2GB in a 32bit OS isn't recognized.
    3. I went with Professional under the assumption that I may need to use XP Mode at some point (right now it's not very useful for personal use, but I have faith that someone will eventually extend it to better support UI applications - like games).

Update (12/3/2009):
I've had my computer now for a few weeks, and figured I would list those issues that are now showing up in the Event Viewer (at least, those that appear to be critical), plus those issues I remember for specific applications. It's not that my system is less stable now (or even that these are directly relatable to a custom-built system). But it may give you some sense that even if issues don't stop my computer from functioning - they are still being recorded:

  1. The system has rebooted without cleanly shutting down first. This error could be caused if the system stopped responding, crashed, or lost power unexpectedly. When this happened the machine eventually shutdown - but it took a couple of minutes (if I were in a rush I would have assumed the system had crashed.)
  2. Faulting application name: iexplore.exe, version: 8.0.7600.16385, time stamp: 0x4a5bc69e. Faulting module name: mshtml.dll, version: 8.0.7600.16444, time stamp: 0x4adc7244 - this is a frequent Error. I'm guessing either IE in Win7 is really unstable, or there's a problem with the fact that I set the temporary directory to my secondary drive (it doesn't kill the OS, so I'm not as concerned about it as I would be normally. But IE definitely stops functioning about once per day.) It appears as though Adobe Flash is listed for about 1/2 the failures -so I can't really say it's an IE problem.
  3. The Group Policy Client service did not shut down properly after receiving a preshutdown control. - Sorry, no idea what this refers to (probably could figure it out, but I didn't build a new computer system to spend my time debugging failures.) It is probably some issue with logging off a User during a system shutdown - if the user doesn't logoff before the system is shutdown technically that would be considered an error, though likely a pointless one.

  4. The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID - Permission failure. Again, not interested in debugging the issue (as long as my computer appears to function correctly, I will assume it's a bug that will be fixed.)

  5. Portal (game from Valve) wasn't able to run over Steam

  6. Games for Windows Live didn't seem to work. Don't know if it was a 64bit issue or Win7 (and to be honest I didn't really care - it's not like there's an obvious benefit to installing and using it.)

  7. Windows OnLive doesn't work (I realize it's no longer a production app, or at least not available to pay money for. For that matter, I may be mistaken on the name). But since I had multiple machines running it in the past I was hoping I could use the available license for my new machine - no luck. On the other hand, the product never seemed to be configured properly anyways, so maybe it's a good thing it doesn't work anymore. Again, I don't know if this is a 64-bit or Win7 issue.

  8. I've had occasional computer hangs that looked like they were related to Norton 360 tasks running simultaneously (like trying to shutdown my computer, or switching from a Remote Desktop Connection.) Nothing I couldn't recover from later - but they don't generate high levels of trust.

  9. It took about 30 seconds for my computer to start today - so no change yet on the time.

On a positive note, I found the Microsoft link to XP Mode yesterday (http://www.microsoft.com/windows/virtual-pc/download.aspx)

Update (12/5/2009):
I found a decent blog that describes which settings to change in Win7 to reference the regular hard drive rather than the SSD (to reduce the number of writes to the SSD). But unfortunately, I haven't been able to find it again. I did find this blog on Vista - which appears to include many of the same tricks (http://www.bit-tech.net/hardware/storage/2009/08/27/ssd-performance-tweaks-for-vista/2). Basically, these are the changes to try (if you're not comfortable with these steps then it's probably safer to skip them):

  1. Set IE to store temporary files on drive D. If you use some other browser search for steps to do the same thing. Note, though, that IE may be used for other native applications in Windows (so even if you rarely use IE for browsing it still makes sense to change the temporary file location.)
  2. Disable Defraging of your SSD. Win7 should not let you defrag your SSD anyways, but to check click on 'All Programs' - 'Accessories' - 'System Tools' - 'Disk Defragmenter'. Click on 'Configure schedule...' - 'Select disks...' and make sure Drive C is not available (or selected).
  3. Change your temporary variables to point to Drive D. Right-click on 'Computer', then select 'Properties'. Click on 'Advanced system settings'. Click on 'Environment Variables'. Change the TEMP and TMP variables for both user and system to point to a directory on drive D
  4. You can also change your Paging file by clicking on Performance Settings... from the same Advanced tab. Open the 'Advanced' tab, and click on Virtual memory 'Change'. Change the Paging File Size to a Custom size (I'm using 1000 - 2000). This may impact performance in some games, so you may want to change it to a different value later on.

I also noticed one mistake I made (now that the new Intel Firmware is available to enable TRIM on the SSD - see the link provided above). In order to enable TRIM, before you install your OS you should make sure that your drive is set to AHCI in your BIOS. After you've installed the OS, I don't think it's possible to convert your drive (you can enable the AHCI drivers in Win7 with a registry tweak, and you can change your settings in your BIOS after installing the OS. But all that would do is let you enable AHCI on a new drive - not change an existing drive.)

There are 2 separate settings in your BIOS related to AHCI under Integrated Peripherals - and to be honest I don't know whch ones should be changed. And as happens frequently, there's no documentation on the differences (I think the difference is related to which SATA connection you use - the native connection for SATA1-6 or SATA7.)

There's no documentation on whether there are potential negative effects on your secondary drive - if it is connected to the same Interface port (and is not SSD). So I've decided it probably makes some sense for now to leave my drive settings as-is, and instead focus on limiting the number of writes to the SSD throgh my OS.


Update (12/6/2009):
I found the following link on changing the location of your Firefox Disk Cache - http://www.mydigitallife.info/2008/11/26/how-to-move-the-firefox-disk-cache-to-another-drive/  - again for the purpose of moving Write requests from my SSD to my hard drive.

I also changed the title of the entry - I figured that while the steps may still be useful for someone new to the process, some of the information on SSD may not be geared towards a new builder.


Update (12/7/2009):
I've started noticing that my desktop icons are disappearing (things like the trashcan). There is a Desktop Properties item to control this (right-click on your desktop, click on View. Verify that 'Show desktop icons' is enabled.) I don't know if this is related, but I now have the following Errors in Event Viewer:

  1. The driver detected a controller error on \Device\Harddisk2\DR2 (As a side note, what a great error. It says absolutely nothing of any use to the End User.)
  2. Session "ReadyBoot" stopped due to the following error: 0xC0000188 (again, of no use to an End User - except that it gives you something to search for.)

I've been trying to install Linux on a pen drive using the same machine, so it's possible some of the issues came up due to frequent rebooting without cleanly shutting down. It's also possible that (related to this) the ISO burner may not support multi-threading properly in the OS (trying to move open Windows while the Image was burning caused the machine to stutter).

And speaking of which, if you decide to try Linux - good luck. I've been trying to install any working version of Ubuntu, and all I get is an Error reading book CD when I try to do anything - which could only show up if the CD can be read from (so I get an Error message blaming my CD rom drive - which could only be reached by being able to read off the CD rom drive).

I've checked the md5 Hash Code and tried installing on multiple machines (with different hardware configurations) - all with the same Error. And the only info/help I've found on the Internet claims that it's either a hardware issue (my CD drive, specifically) or a problem with the ISO image. Since it happens on 3 (very different) machines, it's not the CD drive. And since I verified the Hash code it's not the ISO image. I'm guessing it's some shared hardware component besides the CD drive - but of course that begs the question of why the Error Message points to a CD read failure.


Update (12/19/2009):
A few more items have occurred to me:

  1.  Booting into BIOS is extremely problematic on this system (because it boots quickly). Basically you end up frantically pressing F1 and Delete hoping that if you time it right it'll work. The unfortunate result of this is you end up continually rebooting your computer until you happen to time your keystrokes perfectly. If there isn't an Application from MSI that will shutdown Win7 and reboot directly into BIOS there should be
  2. The physical placement of memory on your motherboard is logically weird. If I remember correctly, memory has to be paired together in slots 1 and 3, and 2 and 4 (check with your motherboard manual to be sure. I understand that there may be a design reason why it's been implemented this way, but logically it makes no sense whatsoever to require that something be installed (in order) into slots 1,3,2,4.
  3. Win7 is taking up 18.6GB of drive space on my SSD. I have no idea what the minimum drive space requirements are, but keep in mind that in my environment I've moved most of the writeable directories and tasks to my hard drive (plus I'm using an SSD and I'm using the 64bit version of Win7).
  4. Event Viewer is still recording frequent IE failures, but no recent OS failures.
  5. Some Web-installed applications don't let you specify the install location. Which means that they may install on Drive C (which is what I'm trying to avoid in this build.) Not a big issue, though you could look at it as a good indication of poor application quality.
  6. I'm using Norton 360 as my Anti-virus software. Not sure though that I'd recommend it. There is backup software included in the package, but you can only backup to their hosted Web drive, to a local hard drive or to a mapped Network drive.
    1. I really dislike the idea of paying someone an annual license fee for software. In the case of anti-virus software, though, it's becoming difficult to get around this issue. As I mentioned in other Blog entries, we (the owners of the hardware) should start charging software companies for drive space usage if they're going to charge us for similar things. In other words, Norton charges us for Cloud drive space, and for using their software. So if they can connect to a hosted cloud drive, there's really no reason why they should need to install anything on my local machine.
    2. Backing up your hard drive on your hard drive in many ways defeats the purpose of a backup of your hard drive.
    3. Mapping a Network drive is an OK alternative. Except that Win7 appears to load the Network drivers after attempting to connect to all mapped drives (so everytime I start my machine the first thing I see is an error/warning saying the drive wasn't mappable. But once I attempt to access the drive I am able to.)
    4. The errors I listed on my 12/7/2009 update don't appear to be major errors if you search for them (as mentioned, I think they are more timing issues.) Of course, that again brings up the question as to why Microsoft decided to record them as errors in the Event Viewer.

Update (12/28/2009):
I tried to burn my first CD today off of the optical drive, and it failed miserably. No idea yet whether it failed because the default write speed causes problems, or whether some other issue occurred. Regardless, there is no reason why this task would have failed except for hardware problems in the drive or software bugs. And by failing I mean that it refused to finish, and then refused to Cancel. And closing it via the Task Manager crashed Windows Explorer. Then trying to shutdown gracefully failed, and forced me to shutdown by turning off the power. All in all, a crappy result.


Update (1/11/2010):
No real changes. Haven't seen any new types of Errors in the Event Viewer (ReadyBoot is still crashing, my Disk driver is detecting a controller error on a regular basis and IE is recording Errors on a regular basis (though none of these have stopped my computer from functioning). My SSD is showing 54.6 gb free (out of 74.4 gb - so if that continues to change I may eventually have a problem. I guess it's possible i made a mistake when originally listing the amount of space used.

I was also able to burn a CD in the past few weeks - so it appears as though the issue I ran into before was not due to hardware.

 del.icio.us  Stumbleupon  Technorati  Digg 

Tim Dorsey is Prescient in 'Atomic Lobster'

http://www.msnbc.msn.com/id/33493022/ns/us_news-crime_and_courts/

 del.icio.us  Stumbleupon  Technorati  Digg 

Unfortunate impact of the Nobel Peace Prize this year

Because the peace prize is perceived as political (I don't really care if it is or not), all other Nobel Prizes have been tainted by their association. I don't know if it feels the same in other cities, but at least in Charlotte it feels like you can't even discuss the other prizes. The Charlotte Observer really didn't cover any of the prizes except for the peace prize.

I'm just saying it's a shame when you can't even discuss the Nobel Prize in Physics without getting into a Republican/Democratic argument. It's a sad feeling.

As for why the Nobel prizes should matter to the typical person - they generally do a good job in describing the research in layman's terms. It frequently involves new ways to look at a specific technology. And there's always the chance that similar concepts relate to your field/interest in some way.
 
Many organizations in this economy could benefit from new perspectives.

 del.icio.us  Stumbleupon  Technorati  Digg 

Can anyone explain to me why Company Meetings always fill up the amount of time assigned to them

Even if there's only 5 minutes worth of information, someone will always try to fill up the remaining time by talking.

I think part of the problem is that Calendar Apps insist on breaking up the selectable time into 30 minute intervals. And if true, this suggests an interesting proposition. It means that the loss in productivity from meetings is directly attributable to poor software implementation. Which means one obvious way to counter this problem is to (by default) create meetings in 5-minute intervals.

 del.icio.us  Stumbleupon  Technorati  Digg