Welcome

Please contact me (Phil Haack) at here with any errors, problems, and/or questions.

To learn more about the application, check out the Subtext Project Website.

Powered By:

Syndication

Blog Stats

Bloggers (posts, last update)

Latest Posts

Building a Better World (of Warcraft)

Overview

There was a time many years ago that I loved to tether myself to a computer and start ripping it up. As of late, I have limited this activity to the occasional addition / replacement or basic items (hard drive, memory, fan, etc). After over a decade of dealing with pre-built computers, I decided it was time to get my hands dirty and build a rig from scratch.

The itch started after I went looking for 64-bit Windows 7 drivers for a laptop that was a little over a year old. Since the laptop came with 32-bit Windows Vista, it seems the manufacturer <cough>DELL</cough> decided to give up on releasing any drivers at all several months ago. Of course, all of the components in the laptop are proprietary OEM stuff, so I am really at the OEM's mercy for getting drivers unless I rip it up and pull model numbers off components. Then, I flashed back to my pre-OEM computer days; when I knew every component in the machine and had complete control over the upgrading.

Let's face it, retail components have a much longer shelf life. I can still get modern drivers for components I bought years ago. The norm seems to be about 5 years or two OS versions (depending on how much the driver architecture changes). I was getting tired of OEM components with little to no support once the manufacturer felt the product was too old after a year.

The new machines (yes, I built 2) needed to support two roles. The first was as a development workstation. This meant solid support for VPCs and plenty of RAM to keep them running smoothly. The second was for rock solid gaming that would keep me from having to look at specs for at least a year. I did have a budget to keep in mind, so I couldn't just get the top-end components from every category. However, this meant the rig would have some wiggle room future upgrades.

Let's face it, 10+ years is a long time to be out of the BYOPC game. This meant I needed an extensive upgrade of my knowledge to the "newer" standards. Luckily, it's like riding a bicycle; even though the standards have changed the underlying issues are the same (insert tab A into slot A and not slot B...rinse...repeat). Thankfully, setting IRQ/DMA jumpers are a thing of the past. To make things easier, I limited myself choices to items that received high customer ratings on NewEgg. This gave me a starting point from which I could review the validity of the negative reviews and expand to other sources via Google for additional details on the item.

Processor

Intel Core i7-920 Bloomfield 2.66GHz LGA 1366 130W Quad-Core Processor Model BX80601920

Multiple components revolve around the choice of processor, so naturally that is where I started. It was a no-brainer when choosing between dual core or quad core. While a quad core brings very little benefit to games (and in some cases negative impact) they are a HUGE plus to VPC development. Dual core would have made for a cheaper setup and most stuff isn't even leveraging dual core moreorless quad core, but I didn't want slap together a system on outgoing technology.

I have to admit I don't get into the whole Intel vs AMD debate, nor do I really care. I went with Intel because I've pretty much always used Intel and the i7-920 was being touted by many for its ability to handle overclocking very well. It also seems that at current Intel chips are doing better than AMD. That might change in 6 months, but for now the i7 appears to be king.

Motherboard

ASUS P6T LGA 1366 Intel X58 ATX Intel Motherboard

The choice of the i7 lead me to this motherboard. NewEgg reviews coupled with the ASUS reputation for overclocking aided my decision. ASUS boards have a great deal of support across the net, and a majority of overclocking walkthroughs used their BIOS details as the defacto standard.

The P6T has a few model variations, but I went with the basic because other models seemed to add features I didn't need: such as enhanced audio and additional network jacks. The performance enhancing qualities just didn't swing with the system I was trying to build. In retrospect, I probably should have gotten the best possible board, since the board is the most difficult piece to replace (except the case).

I liked that the board supported up to 12GB of RAM across 6 slots. This meant that putting in 6GB now means I could add 6GB in the future if needed without replacing my existing memory. I always hated when upgrading memory that I had to pay for memory I already had in order to add more. 

While the triple SLI option was intriguing, I could only afford to build a dual SLI system. Also, the 3rd SLI channel is on an PCIe x4 channel, which is probably fine for a 3rd card but means it would be choked compared to the other 2 cards running on x16 channels. Also, with 3 modern video cards in the machine all the other expansion slots would be blocked. As it stands, my setup now only has 1 extra slot available with 2 video cards installed.

Memory

CORSAIR DOMINATOR 6GB (3 x 2GB) 240-Pin DDR3 SDRAM DDR3 1600 (PC3 12800) Triple Channel Kit Desktop Memory Model TR3X6G1600C8D

Almost every forum I visted where someone complained about memory issues there would be someone replying to just buy some Corsair RAM. Couple that with the reviews on NewEgg and I had a brand I felt I could trust. These are by no means the biggest and baddest on the market, but they would suit my needs and 6GB would give me plenty of RAM for VPCs.

Video Cards

EVGA 896-P3-1171-AR GeForce GTX 275 Superclocked Edition 896MB 448-bit DDR3 PCI Express 2.0 x16 HDCP Ready SLI Supported Video Card

With video cards it all comes down to ATI vs NVIDIA. I prefer NVIDIA because it is the chipset and software with which I am most familiar. The choice of the 275 came down to various reviews and weighing the pros and cons (cost vs performance). In hindsight I should have saved a little money by getting the standard model rather than the superclocked edition and overclocking them myself.

Sound Card

Creative 70SB088000004 7.1 Channels PCI Express 1x Interface PCI Express Sound Blaster X-Fi Titanium

Like it or not, Creative is the difinitive place to go for sound cards. Many games incorporate EAX effects that are only available on a SoundBlaster card (with some arm wrestling of the OS thanks to ALchemy). I have fond memories of that Christmas my first year of college some some <ahem>15 years</ahem> ago when I exchanged the crappy, battery guzzling Sega Game Gear for a SoundBlaster 16. The X-Fi Titanium was a solid choice as the current forerunner of their catalog. I was intrigued by the Fatal1ty version, but couldn't justify the cost for a name as the performance enhancements were minimal.

Hard Drives

Western Digital Caviar Black WD5001AALS 500GB 7200 RPM SATA 3.0Gb/s 3.5" Internal Hard Drive

When it comes to hard drives, I go with the best reviewed ones in the size I need. I originally wanted to go with 5-6 drives each (a 2 drive mirror for the system and 3-4 drive stripe for games), but the budget wouldn't allow it. I didn't need the drives to be much larger, since I have a file server at home to hold much of the big stuff. So 500GB was the best bang for my buck at the time. Sadly, since they are merely 7200RPM drives, and thus are the largest bottle-neck in the final assembly according to the Microsoft Rating system.

Optical Drive

LG Black 8X BD-ROM 16X DVD-ROM 40X CD-ROM SATA Internal Combo LG Blu-ray Reader & 16X LightScribe DVD±R DVD Burner

While I wasn't building these machines for video entertainment, I figured I might as well go with a blu-ray drive should I get a hankering to watch a movie. It also gave me the opportunity to feel out the blu-ray drives for when I upgrade my media center PC. Couple that with how cheap this drive is compared to a blu-ray player and I had a winner. I've never had a burner with LightScribe, but then again I don't burn very many CDs/DVDs.

Multi-reader

Rosewill RCR-IM5001 USB2.0 75 in 1 internal Card Reader w/ 3 ports USB2.0 Hub / eSATA port

Being a bit of a gadget freak means I have memory cards of every flavor, so I needed a reader that could do it all (including handle a Memory Stick Duo without the blasted adapter). The eSATA port and 5v power source were a plus for those pesky external drives, because the case has no front-facing eSATA port. The USB is nice, but unneccessary as the case already has 2 front-facing ports.

Power Supply

CORSAIR CMPSU-850HX 850W ATX12V 2.3 / EPS12V 2.91 80 PLUS SILVER Certified Modular Active PFC Power Supply

No build is complete without a solid power supply. The 850HX had great ratings, plenty of power, and the Corsair reputation to back it up. Modular cabling is a must so that I don't have to deal with cheap adapters that add just another point of failure.

Case

Antec Nine Hundred Black Steel ATX Mid Tower Computer Case

Gaming cases are all about 1 thing...lots and lots of air, and Antec seems to have a pretty good handle on that. The 900 has 4 stock fans and slots for 2 more fans (1 side-blowing and 1 internal attached to back of the hard drive cage) so I wasn't worried about air. I do recommend buying a case from a local retailer, because if things don't fit right you don't want to wait around a week or more for the RMA.

I've got a pretty dusty house (pet dander), but filters do not come stock on this case. However, they do come on the 902. So why did I get the 900? Honestly, it was because I bought the wrong one. In the end I decided not to swap out for the 902 because I was afraid the filters would get clogged way too fast and would just mess up my cleaning schedule (I already have 4 other computers I have to clean on a regular basis).

Had I gone with more than 3 hard drives I would have needed to upgrade to the 1200 (full-tower) case. Only 3 drives fit in this case because the graphics cards block the other drive bays. The internal fan assembly that attaches to the back of drive cage also had to be removed with more than one video card installed.

Cooling Upgrades

Processor

ZALMAN CNPS9900ALED 120mm 2 Ball Low-noise Blue LED CPU Cooler

Stock processor cooling is fine for the average layperson, but I had every intention of overclocking these puppies to eek as much out of them as I could till either they just had to be upgraded or melted themselves (I'm hopping for the former). The Zalman had excellent reviews and just looked slick (yes, presentation counts for something).

Case

Antec 761345-75024-0 120mm Blue LED Case Fan

This is merely the extra fan for the side-panel to blow some air on the toasty graphics cards that were causing the motherboard temps to actually clock higher than the proccessor (who'dve thunk it?). I attached it to the motherboard fan control so it would fluxuate speed based on need.

Monitor

Hannspree HG-281DPB Black 28" 3ms Widescreen HDMI LCD Monitor

I needed a monitor that supported full 1600x1200 resolution, because trying to develop on anything less is just painful and my I didn't want to step back in resolution from my laptop. I looked at the "baby" 24" ones, but when I set eyes on this 28" monster I knew I had to have it on my desk. Now I have to actually turn my head a little when scanning for things.

Additional Components

NETGEAR XAVB1004-100NAS Up to 200Mbps Powerline AV Adapter Kit With Ethernet Switch

My home office is not hard wired to my network. My older systems were using my horrible wireless-g network, which is slow and spotty (especially when the microwave is on). I really didn't want to upgrade to wireless-n, because I am really not fond of wireless. Powerline networking has some a long way, so I figured I'd give this a shot. So far it has worked like a champ.

posted @ 12/15/2009 4:25 PM by Steve Majewski

Replacing My Car Stereo - Phase 1 - Planning

Introduction

When I was growing up, I didn't exactly ooze money. So I made due with what I had, which included cramming some house speakers into the back of my car. Despite that, my car was always the one with the trunk (or hatchback) open so everyone could hear the music. Since my misspent youth, I've pretty much accepted the factory installed stereo in all my cars (which are too many to count or shock the general public with). Seeing as how I ooze a bit more money now than I did when I was younger, I decided to start squirreling some away to see just how much damage I could do.

I initially looked into more traditional options, such as replacing the head unit and speakers. But in today's world, the car is venerable playground for dorks such as myself. Though not entirely uncharted as it was several years ago, it still requires a bit of finesse to cram technology into a vehicle. My goal became to add a full fledged (and appropriately named) carputer. The first step in any such installation is planning (more details will come in future installments).

The Screen

The key piece of any carputer is the display screen. The overall expense and installation complexity will vary greatly based on this important decision. Since I'm not entirely handy when it comes to fabrication of parts, I had to try and keep things on the simple side. I have a Jeep Liberty, which has limited space in the dash compared to some other vehicles. Rather than mount a screen to my dash (or something more fancy), I decided to go with a slide out screen that would replace the existing factory stereo. Not the most elegant solution, but definitely the simplest.

There are a number of slide out carputer screens on the market, though not nearly as many as the stand-alone screens. After careful evaluation I decided to go with the Xenarc MDT-X7000 [1]. Unlike many of the other screens, this one includes a built-in amplifier, DVD player, and radio. Since I will be replacing my existing factory stereo, having a built-in amplifier negates my need to purchase and (most importantly) wire up another amp. The DVD player is nice, because it can play DVDs/CDs/etc without the carputer and also mounts as a DVD drive on the carputer. The built-in radio is nice mostly due to the fact that AM/FM tuners for computers have all but vanished in the past few years or cost much more than I feel an AM/FM radio is worth ($150+). Either way I plan to add satellite radio later, so the AM/FM radio is a VERY minor plus.

Front-End Software

Front-end software is a necessity in a carputer. The user interface built into every major operating system is very much dependant on the accuracy of either a mouse or (in the case of a tablet PC) a stylus. This does not go over well when the primary means of control will be a finger from someone attempting to manipulate thousands of pounds of steel and plastic down a road. Front-end software developed for a carputer uses nice big buttons and (for the most part) a minimalist approach to make control easier whilst driving.

There are a handful of front-end options ranging from free to several hundred dollars. The free options, while easier on the bank account, were a bit frustrating and would take more time to configure than I was willing to dedicate to the project. After numerous trials, I eventually decided to go with one of the prepackaged interfaces. Since I knew I would be using a Windows-based operating system, I was left with two primary contenders: Centrafuse [2] and StreetDeck. I eventually chose Centrafuse mostly due to the fact that StreetDeck was pulled off the market for a redesign when I was ready to buy. The options and functionality of both was very similar, so it really came down to availability.

The Carputer

Since I already have a Mac Mini operating as my Media Center PC in my living room, I decided to reuse it as a multi-environment entertainment solution. This not only made more use of a device that spends a majority of the day doing nothing but also saved me the expense of buying/building a whole other computer. However, I did need to make sure I could power the thing in my car. An old fashioned DC-AC converter would work, but is far from an elegant solution that would require me to startup and shutdown the computer on my own.

After some digging I found the Carnetix CNX-P1900 [3], which is a power supply made specifically for carputer installations that can automatically startup and shutdown the computer. The Carnetix guys were nice enough to create the MacPac Power Cable Kit [4], which is (as the name suggests) a power cable specifically designed for the Mac Mini that connects to their line of carputer power supplies. The plus side is, the kit also comes with a splitter that would allow me to keep the functionality of the power button on the Mac as well as control it with the P1900. The power supply also has auxiliary power outputs allowing me to power other devices as needed (mainly an external USB hub).

Internet Connectivity

There are a number of ways to get Internet connectivity into a carputer. Like most options the level of convenience increases with the cost. For my needs I decided to use my HTC Mogul for both phone and Internet. I just couldn't justify installing and paying a monthly fee for a mobile connection when my phone will be there all the same when I'm in the car and Wi-Fi is just not widespread enough to be a viable option. The only limitation I'll have using my mobile phone is I won't be able to simultaneously use the Internet and the phone. A minor inconvenience that is well worth the saving another monthly fee.

GPS Navigation

Centrafuse has built-in GPS navigation software, but it requires a GPS receiver to use it. As a result, I had to add a USB GPS device that was compatible with Centrafuse. I must admit, I did not do a significant amount of research on this, relying solely on the options available on the mp3Car.com Store. At the time, only the BU-353 Weather-proof GPS Receiver [5] was available. Since I did not need mapping features (as they are included in Centrafuse) or any other bells and whistles that tend to increase the cost, I found the BU-353 to be a good value.

Voice Recognition

The last component for consideration was a way to utilize the voice recognition features in Centrafuse. I could hook up virtually any microphone to the Mac Mini (including my Bluetooth headset) but I needed something that could handle the noise level present in most cars while driving. Again, I deferred to the options available to me on mp3Car.com, which were limited to either the moderately priced or the ridiculously expensive. I decided to go with the former, which left me with the Andrea Electronics Superbeam Array Microphone Bundle [6] (there's a mouthful).

Future Mods

Some features I plan to add in the future (in general order of interest):

  • Better "Aux" Inputs - The fallback input devices when dealing with a carputer are a keyboard and mouse. I'd like to add something compact for use in the car (by passenger or when parked...of course).
  • Satellite Radio - I'm not a fan of over-the-air radio and the price to integrate it into Centrafuse is cheaper than adding satellite (negating the monthly fee), so why not go that route?
  • Enhanced Audio - The sound card built-in to the Mac Mini isn't the greatest, so I'd like to replace it with something better. 
  • Backup Camera(s) - To make my life a little easier...I hope
  • OBD-II Scanner - Allows Centrafuse to read data from the car's computer. More of a dork feature (to me) than anything else.

Links

[1] Xenarc MDT-X7000 (http://www.xenarc.com/product/MDT-X7000.html)
[2] Centrafuse (http://www.fluxmedia.net/)
[3] Carnetix CNX-P1900 (http://www.carnetix.com/CNXP1900.htm)
[4] MacPac Power Cable Kit (http://www.carnetix.com/optional_cables.htm)
[5] BU-353 Weather-proof GPS Receiver (http://store.mp3car.com/BU_353_Weather_proof_GPS_Receiver_p/gps-002.htm)
[6] Andrea Electronics Superbeam Array Microphone Bundle (http://www.andreaelectronics.com/Buy/ProductDesc/superbeam_mic_bundle.htm)


Technorati Tags: ,,

posted @ 9/17/2008 3:30 AM by Steve Majewski

LiveScribe Pulse

LiveScribe Pulse I was recently roaming the isles of a Target (something I do when I need to step away from work for awhile to clear my head though the store may vary) when I ran across a display for a fancy electronic pen called the LiveScribe Pulse [1]. I gave it a brief glance, wondering if it was a new model of the Logitech IO pen. I had been interested in the Logitech IO for some time, but there was just something missing that kept me from making that final leap and spending much more than I ever thought possible on a pen. I briefly perused the display then continued on my way.

A short while later I found myself back at the display examining it further. I discovered that this pen not only electronically stored what was written (on special paper, of course) but also could record audio at the same time; effectively linking the audio to what was written. “That’s it!” I said to myself (probably out loud). “That’s what the IO was missing.” I thought back to all the design meetings I’d attended in the past few weeks where someone scribbled an indiscernible diagram on a sheet of paper and sent me away to implement the scribble in code. This pen would give me the ability to synchronize the scribble to a slightly more intelligible conversation that occurred at the same time. I was hooked. I had to have one.

It has been several weeks and I must say I am impressed. The pen does an amazing job capturing my writing and the text recognition that allows me to search anything I’ve written handles my penmanship quite well (though I must admit I focus on writing legibly to make searching easier). The audio quality is surprisingly good, even when using the microphones built into the pen. The pen comes with headphones with microphones built into them that get much better quality, but it can be awkward to carry them around.

The pen also has a few silly software additions to it; like a mode that allows you to draw a piano then actually play it or a mode that translates basic words into another language. I say they’re silly, but what they do is demonstrate the amazing power of the pen that will be unleashed as third party applications (hopefully) start to pop up for it. As much as I would like to contribute, I doubt I’d ever have the energy to care to write an application for the pen.

I am somewhat jealous that I did not have such a pen back in college, and I can see a HUGE potential for such a pen in the classroom. Even when I had a laptop available (which even today can be a problem at some schools due to lack of available power options) this pen wins hands down. It is light, has more than enough power to last through a day of note taking, allows for natural, free flowing note taking, and synchronizes the audio to what is being written. The audio is invaluable in of itself, but that can easily be done with cheaper recorders. However, to have it synchronized with the notes just blows me away.

The only thing the pen is really missing right now is ability for the software on the computer to transform what has been written into actual text (or graphics in the event of a diagram). It already has the text recognition built in which allows the searching of notes, but the graphical text cannot be transformed into something that can be pasted into a document. It is possible to capture the entire page as an image, but I would prefer to select an area to either transform into text of copy as an image. I suspect it is only a matter of time before the feature is added.

So if you’re a student or someone who really relies on notes and could benefit from synchronized audio then this pen is for you. It’s not entirely cheap, but well worth the investment. A student may really benefit from the higher capacity 2GB version, but a business professional can probably get by with the 1GB version (thus saving $50 at current prices).

[1] http://www.livescribe.com/

posted @ 9/15/2008 3:13 AM by Steve Majewski

It's a Wonderful World...of Warcraft

AKA "My dad's 70th level human warlock can beat up your dad's 70th level night elf rogue!"

World of WarcraftLast week, my wife emailed me asking whether or not I was familiar with World of Warcraft. I had heard plenty about it, but never really gave it much thought due to the monthly subscription fee. Well, some of her coworkers were praising the game (as most WoWheads do), and it intrigued her enough to purchase the game on her way home from work. The rest was history.

Within a day we had it installed on 3 different machines for multiple playing options. I found myself digging around online for options to increase my mobile playing experience (keep posted for more on that one) because nobody wants to play on a system that has to be set at the lowest settings and STILL occasionally drops to 15 frames per second (though probably due to lag from hotel connection). Don't get me wrong, it runs quite well most of the time.

Okay, so why on earth would I be writing about a game that came out years ago? Simple, ever since it was released I have managed to withstand the pressure to play. So it's all new to me. And seeing as how this is my blog I'll do what I want. So get off my back already. Geeze. Uhhh...in any case. I did get caught up for a while in the Star Wars Galaxies phenomenon, but kept running into spans where I didn't have time to play thus wasting my money. Also, it puts a strain on the relationship when one is spending hours on end playing a game while the other stews in anger over the lack of "quality" time spent together.

As a HUGE fan of Oblivion (The Elder Scrolls IV), WoW was a no-brainer. It really feels like a less polished but far more versatile and never ending version of Oblivion (though leveling in WoW is much less complicated). It also has the added bonus of letting me play with my wife rather than around her (or worse...holed up in my dungeon office). Plus, since I'm not at home 3 nights a week, it gives us a mechanism through which to get together (and kill things). So instead of tearing a marriage apart, it's allowing us to get together and tear something else apart...if only virtually.

As aforementioned, I did play Star Wars Galaxies for a while (with the original rules and the revamp a year or so later). I must admit that WoW is far superior in performance and overall game playability. It's also nice that they don't start everyone out in the middle of the same gigantic spaceport surrounded by people shouting, fighting, and running around. However, I do wish I didn't have to wait till level 40 to get a horse. Honestly. That world is too damn big to have to run around like that.

My only turn off is the monthly fee. My work tends to be feast or famine, and there are times when I'd be lucky to find an hour a week to dedicate to gaming. I hope someday to see a pay plan that allows me to buy time instead of paying monthly. For example, if the average user spends 40 hours per month online, then 40 hours would cost $15. Then if it took me 6 months to burn through 40 hours that's my prerogative. If it took me 2 weeks then I need to consider switching back to a monthly plan. I think this would attract numerous gamers who have trouble finding time to play and thus can't justify the monthly fee.

If you think you're even mildly interested in the game, you should download the 10-day FREE trial and see if it is your cup of tea. The only thing you have to lose is several hours of download time (or the rest of your waking hours if you become addicted).

For anyone interested, here are the Windows Experience Index numbers for my laptop (Toshiba Tecra M3):

Processor Pentium M 2Ghz 3.8
Memory 2GB 4.4
Graphics NVIDIA GeForce GO 6600 3.4
Gaming Graphics 128MB Dedicated Memory 3.4
Hard Disk 5400RPM 4.4

Technorati Tags: ,

posted @ 2/28/2008 4:28 AM by Steve Majewski

Installing Silverlight with Visual Studio 2008

Installing Silverlight to work with Visual Studio 2008 was quite a task, but I managed to finally get a project loaded after dealing with several errors including, “The project type is not supported by this installation.”

After reading through several blogs and forums, here are the steps I had to take to finally get a Silverlight project to open:

  1. Install Silverlight Alpha runtime
  2. Install the Silverlight 1.1 Alpha Software Development Kit
  3. Install the Silverlight 1.1Tools Alpha for Visual Studio 2008

I hope this information helps anyone attempting to make this install.

posted @ 2/28/2008 5:31 PM by Jenn Majewski

Why Can't I Get Help From This Program?

Why can't I get Help from this program?
I don't pretend to understand why Microsoft makes many of the decisions they make, but when I run across an error like this in a OS that is already many gigabytes in size I have to ask myself, "Why?"

I haven't had many issues with Vista. There are some quirks with DRM in media player hogging system resources. Other than that, I'm rather surprised at how well it runs on my rather outdated Toshiba Tecra M3 (company laptop).

I'll admit, Vista was a bit of a pain in the early days when drivers were sparse. Whether this was due to hardware manufactures being lazy and thinking Microsoft wouldn't hit their target date or Microsoft changing too much with too little notice is beyond me.

There are some applications that don't like to play with Vista, which is to be expected and has happened in almost every Windows release. User Access Control has been the major culprit of most issues. I can't say I enjoy getting 2 or 3 prompts to do a simple task. I'd like to see an option that unlocks for X minutes for when I do multiple tasks that upset UAC.

Still, this error tickled me in an uncomfortable way. As aforementioned, Vista is not a lightweight when it comes to disk space requirements. I really would like to know what significant change was made that caused the old WinHlp32.exe to become obsolete to the point that they just completely ditched it. In the end, there had better be a damn good reason for removing something this trivial.

Technorati Tags: ,

posted @ 2/22/2008 12:51 PM by Steve Majewski

Redesigning LowDowns

So, six years ago, I quickly put together a website for a singing group called LowDowns. The technology then was limited to .NET 1.1 and my experience was seriously lacking. Most of the site used HTML. The only .NET was written by my husband, which was used to create something a lot like 2.0's masterpages. The finished site was simplistic, had a limited area to work with, and wasn't much to look at.

So, the time had come. The site desperately needed an overhall. I was having troubles figuring out a decent layout, and then I found a neat tutorial to create buttons in Paint.NET. After going through this tutorial, I decided to base my design around these buttons.

The site looks much better now and has the ability to create more functionality in the future, unlike the previous version. Although the buttons could fall under the category of "mystery meat navigation" they add some personality to the site. The site utilizes .NET much more than the old site and the code is much easier to maintain.

posted @ 2/13/2008 3:03 PM by Jenn Majewski

Ponderisms

From an email my father sent me:


Can you cry under water?
How important does a person have to be before they are considered assassinated instead of just murdered?
Why do you have to 'put your two cents in'.. But it's only a 'penny for your thoughts'? Where's that extra penny going to?
Why does a round pizza come in a square box?
What disease did cured ham actually have?
How is it that we put man on the moon before we figured out it would be a good idea to put wheels on luggage?
Why is it that people say they 'slept like a baby' when babies wake up like every two hours?
If a deaf person has to go to court, is it still called a hearing?
Why are you IN a movie, but you're ON TV?
Why do people pay to go up tall buildings and then put money in binoculars to look at things on the ground?
Why do doctors leave the room while you change? They're going to see you naked anyway.
Why is 'bra' singular and 'panties' plural?
Why do toasters always have a setting that burns the toast to a horrible crisp, which no decent human being would eat?
If corn oil is made from corn, and vegetable oil is made from vegetables, what is baby oil made from?
If electricity comes from electrons, does morality come from morons?
Why do The Alphabet Song and Twinkle, Twinkle Little Star have the same tune?
Why did you just try singing the two songs above?
Why do they call it an asteroid when it's outside the hemisphere, but call it a hemorrhoid when it's in your butt?
Did you ever notice that when you blow in a dog's face, he gets mad at you, but when you take him for a car ride, he sticks his head out the window?
Why is it called a driveway when you park there and a parkway when you drive there?

posted @ 1/30/2008 5:44 PM by Steve Majewski

Decoding Vista Media Center on Mac Mini

As mentioned in my previous posting, I've recently added a Mac Mini to my home theater to use as a Vista Media Center PC. In an effort to provide a public service as well as store my lessons learned, I've compiled this guide of stuff I did to get it all working.

All of this took place on an Apple Mac Mini 1.83 with 1GB of RAM and upgraded to OSX Leopard. This is by no means a gaming system, as it's performance is similar to a laptop. The base configuration has been sufficient for Media Center purposes.

Installation / Drivers

Using Boot Camp, which Apple includes, I was able to install Vista with no issues. Boot Camp also takes care of getting those pesky drivers copied over as well.

Remote - The built-in IR receiver would not accept commands from my Media Center remote (it only works with the pathetic 6 button Apple remote). I recommend getting a Media Center remote or a Logitech diNovo Mini (when it's released in late Feb, 2008).

Tuner - I don’t have a tuner hooked up to it, since I already have TiVo handling all my DVR needs. So I can’t give any details on that. I assume any Media Center compatible USB tuner will work.

Network - I’m hardwired into my 100Mb network instead of Wi-Fi (both of which are built-in to the Mac Mini). So I can’t speak to how it would perform that way. Technically 802.11g should be able to handle the bandwidth of DVD video, but specs and actuality are two different things.

Keyboard/Mouse - I’m using a Gyration GO 2.4 Optical Air Mouse and Compact Keyboard Suite, which is okay. However, for aesthetics I'm more interested in the aforementioned Logitech diNovo Mini.

Storage - With only an 80GB hard drive, storage space of raw DVD videos will be an issue. I already had roughly 700GB set aside on my file server, so I didn't need to additional storage to the Mini. However, any external USB hard disk can fill this need. IOMEGA has a line of hard drives designed to integrate nicely with the Mac Mini.

Configuration

By default, the My DVDs feature of Media Center is disabled. This article explains how to enable it. This makes Media Center think you have a DVD changer hooked up, which technically you do only it’s not individual discs.

After enabling My DVDs, add the folder(s) to where the DVDs are ripped to the watch folders. Media Center will scan up to 3 folders deep (another registry hack to go deeper) looking for a VIDEO_TS folder. The DVD contents must go into the the VIDEO_TS folder.

The default DVD video decoder that comes with Vista is pretty lousy. On certain movies playback becomes nauseatingly choppy. I downloaded a trial of the NVIDIA PureVideo Decoder then used the Media Center Decoder Utility to set it as the video playback decoder. It works like a charm but there are a few things to note.

PureVideo Decoder is not and will not officially be supported in Vista. The problems lay in saving changed settings. Since my Mini is hooked up to my stereo receiver via SPDIF, I could not use the audio decoder built into PureVideo because it required the settings be changed. The good news is, the video decoder works fine out of the box. Since the audio decoder built into Vista works fine, I only needed to purchase the bronze ($20) version of PureVideo.

As for audio, my setup required me to enable the audio jack for SPDIF pass through. On Vista this is simply a matter of opening the Playback Devices control (right click speaker on task bar and select) and setting SPDIF Out as the default device.

Ripping DVDs

Rather than write an end-to-end walk through of what I do, I'm just going to note certain aspects of the software I use. Most of the software already has extensive communities built around them.

In order to eliminate the excess fluff from the DVD I use DVD Shrink to re-author the DVD so it contains just the movie and pertinent audio tracks (no menus, bonus features, additional languages or commentaries, etc). My average is just over 4GB per DVD. This method takes me a few minutes to select all the necessary options and trim opening and closing segments I don’t want, then about 15 minutes to rip the DVD.

An added feature of using DVD Shrink to re-author the DVD is that flipper DVDs or multi-disc movies can be joined back into one continuous DVD as far as Media Center is concerned.

When re-authoring with DVD Shrink, it is important to NOT compress the movie. It should always be set to 100%. DVD Shrink will complain that it won’t fit on a single DVD, but who cares? Changing the preferred DVD size in the options to 8.4GB will all but eliminate the error.

Some DVDs contain copy protection that will cause DVD Shrink to die (sometimes with the grace of an ogre on ice skates). In the past I've used DVD Decrypter, but it is no longer available, supported, or upgraded to handle modern copy protection. An excellent alternative is SlySoft AnyDVD. It is a utility that cleans up such added "features" giving Vista a clean DVD to read.

The last step is to go to DVDXML and download a DVDID file and drop it in the folder directly above the VIDEO_TS folder. It’s a simple xml file that lets Media Center know what details to pull from its online catalog. This gets you cover art and some basic movie details. For movies that don't have an XML file, dropping a jpeg of the cover art names folder.jpg into the same folder will at least get you the cover art. I also use this for some movies where the cover art pulled by Media Center is inaccurate.

Remaining Issues

My only remaining issue that Media Center will only remember where it left off with the current DVD. So when if I stop a movie to watch another then come back to the first movie I have to re-find where I left off. I’ve been using DVD players with multi-disc resume features for several years now, so the loss of such a feature is a bit of a nuisance to me. Luckily, DVD Shrink keeps the chapter information intact, so getting back to where I left off is a little easier. Rumor has it this feature will be included in a future version of Media Center. The question is, which version.

Quick List of Referenced Stuff

Apple Mac Mini
Logitech diNovo Mini
Gyration GO 2.4 Optical Air Mouse and Compact Keyboard Suite
How to enable the DVD Library in Windows Media Center on a Windows Vista-based computer
NVIDIA PureVideo Decoder
Media Center Decoder Utility
DVD Shrink
SlySoft AnyDVD
DVDXML

posted @ 1/16/2008 8:17 PM by Steve Majewski

Why Do I Punish Myself?

The story began well over a year ago. I purchased several HDDs in order to convert an old 5-drive SCSI enclosure into a SATA enclosure. The end product was a roughly 900GB, RAID-5, MultiLane eSATA addition to my file server (sad how cheap a 1TB external drive runs nowadays).

One of my primary desires for so much storage was to give me a place to rip all my DVDs. My dream was to stream them to my living room using my XBOX 360 as an extender. And that's when the problems began:

  1. I could never get an encoding process down that would work to my satisfaction. Despite having a rather strong gaming rig, it still took far too many steps and too much time to encode a DVD as a WMV (to maintain the 5.1 audio).
  2. Media Center Extenders don't seem to play nice with domains. Extenders login with a local account that flat out refuses to see the network shares from my file server, regardless of security permissions I set.
  3. The 360 would periodically decide it didn't want to talk to my Media Center PC anymore inciting a long process of getting them to be friends again. Couple that with the 360 sounding like an aircraft carrier deck, and the idea of boxing up all my DVDs slowly faded away.

This year, I reevaluated my options and decided to pick up an Apple Mac Mini and slap Vista Ultimate on it. The small (and quiet) Mini could be tucked away in my living room giving me full Media Center functionality with very little impact to my living room feng shui (or lack thereof).

Next, I had to tackle my encoding problem. I've gotten rather tired of encoding DVDs every time a new and better CODEC comes along. Rather than deal with it, I decided to just store the raw DVD as is and enable to DVD Library functionality in Media Center. IMHO, external hard drives have become cheap enough that I can tack on several more TB for roughly what I paid last year for 1TB.

The end result is a nice fit. I rip my DVDs with DVD Decrypter* direct to the file server, grab the dvdid.xml file from DVDxml.com, and BINGO, they show up in Media Center. The XML file lets Media Center know what the DVD ID is so it can download additional movie details and cover art. So provided I get enough storage space I can officially box up my DVDs and hide them in some obscure closet (I do not condone illegally ripping DVDs, so I own every movie I rip).

[*] officially discontinued but easily found with a quick Google search.

Technorati Tags: ,,,

posted @ 12/17/2007 6:04 PM by Steve Majewski

Apple Touches Me Again - iTouch

iTouch Apple finally did it, they lured me back to the dark side. About a year ago, I picked up a Zune. I suspect I never mentioned it on this site because I was A) too busy at the time, or B) the jury was still out. After a year, there have been little to no updates to the Zune software or firmware, and the updates that were released didn't update much. I expected more and fear it shows Microsoft's total lack of interest in the Zune at all.

By now, everybody knows about Apple's new line of iPods. The new nano is horribly ugly ("fatty Mc. Fat Nano" as one prominent Mac Addict put it). I don't know why Apple thinks someone wants to watch a video on such a small screen, but to each his own I suppose. I suspect many are caught up in the novelty of an option they never use.

When Apple released the iPhone, I knew I wanted nothing to do with it. However, I was intrigued by the interface, and I knew it wouldn't take long for Apple for adopt the interface into the popular iPod line. Introducing the iTouch.

First Impressions

I don't think anyone can argue that the iTouch isn't pretty. If there's one thing Apple really does well, it's device design (excluding fatty nano). Naturally, this device picks up every fingerprint and smudge it can find. It comes with a cleaning cloth, but I would've preferred a sleeve like the GEN1 nano, since there are no cases for the iTouch yet and iPhone cases are too big. They also went back to the chrome backing, which gets scratched just looking at it funny. The face, however, is quite resilient and hasn't picked up any scratches.

Interface

The interface is almost flawless, easy to use, and very responsive. My only beef on the interface is the absence of a virtual scroll wheel. Track position is indicated with a thin line that is impossible to accurately tap with a finger (usually when jumping ahead in a pod/vidcast). Since this is software, I'll keep my fingers crossed that they'll come up with something a little more precise for managing track position.

Web/Wi-Fi

Web is a nice add-on, but more a novelty. Facebook comes up with the iPhone interface, which is handy. The downside is that it's Wi-Fi only. There aren't an abundance of free WiFi spots in the areas I frequent, so I'm limited to using it in hotels and at home. Bluetooth would have been a nice feature to use the web connection of my phone. Oh, well. Like I said, the web to me is a novelty. The Wi-Fi is also used to connect to the iTunes Store. This is handy if you're the type that has to buy an album RIGHT NOW, but for the rest of us it's a throw away.

Sound

This is another area where the iPod falls flat. On my Shure SE210's, there is a distinctive crackling noise. I couldn't hear it on my $30 headphones, so this definitely a shortcoming of the device with higher quality headphones. Compared to the quality that comes when playing back through my Creative Audigy 2 ZS, the iPod falls really flat. They've left the standard equalizer settings, but really could use some more advanced signal processing. This could be fixed with software, but I suspect it'll require better hardware to fix.

Battery Life

So far I've not been away from power long enough to drain the battery. My longest adventures put me about 4-5 hours shuffling through airport cattle lines, and I have yet to run out of juice. Granted, video playback sucks the power like no other. Couple that with the Wi-Fi and you're asking for only a few hours of usage. I turn off the Wi-Fi when it's not needed and don't watch a significant amount of videos (yet). For music playback, 5 hours barely puts a dent in the battery meter.

Capacity

Okay, there are two options here, 8GB or 16GB. I went with the 16GB, since I'm away from home (and synching music) for a week at a time. I'm sure this isn't enough for many, especially when music is stored in higher quality or lossless. Most of my music is 224VBR. I set aside 10GB for music, which gives me over 100 hours. I have no doubt they'll be releasing a hard drive based iTouch for those people who really need 160GB, but don't expect it to be the same slim little beauty.

Software

Let's face it, iTunes has gotten so bloated it's a joke. It's still the most convenient for people using an iPod, but it really has issues. It sucks up processing for trivial tasks, crashes far too often, and takes entirely too long to sync. I can only hope Apple will sort out the issues or I need to find some alternative software that does the basic tasks: library and podcast management.

Overall

After a month or so of daily use, I'm pretty content with my iTouch; outside of some issues that could be solved with software updates. If you're looking to upgrade your 4GB flash-based player with something with significant geek appeal (and you've got some money to blow on aesthetics over performance), then this device is for you. If you're lean toward the audiophile camp, it might be better to wait for a drive-based player to handle your lossless files.


Technorati tags: , ,

posted @ 11/7/2007 12:43 PM by Steve Majewski

TiVo HD For You and Me

TiVo HD Digital Video Recorder After over a year of taunting us with the insanely priced TiVo HD the price has finally dropped to $300, which is well within an average tech geek's budget. I've been avoiding getting Comcast's HD DVR because I knew TiVo would find a way to get the price down and I've heard nothing but bad things about the Comcast HD DVR.

So after working with the my new TiVo for a couple of weeks, here's my assessment:

The Good

CableCARD support, good. Dual CableCARD support, AWESOME. TiVo managed to keep the dual tuner in the lower priced HD unit. In a way, this replaces two of my old TiVos. I already had a CableCARD in my TV, so I moved it to the TiVo with no issues. I had to get a Comcast technical out to my house to install the second card (I have no idea why), so it's nice they put the ports on the front of the device.

This may sound like a negative, but I'll explain. This cheaper TiVo has less storage space, in the realm of 20 hours of HD content, 180 hours of SD content. However, TiVo conveniently added an eSATA port to the back. This means I can easily add on more storage if the 20 hours is not enough for me. While the TiVo doc labels the port for "future use", it turns out it can be easily activated with current systems. Read more.

The CableCARD support really sums it all up. Everything else is pretty much the same (see below for a bad difference). I can now tune all my digital channels without a separate cable box and I finally get to watch my favorite shows the way they were meant to be seen when I am unavailable to watch them when they air.

The Bad

There is a short coming to the dual tuner. When I schedule shows to start early and run late (usually a 1 or 2 minute buffer) the TiVo will bounce between the tuners if it is recording back to back shows. This is desired if the shows are on separate channels, however not if both shows are on the same channel. It ends up interrupting me if I'm watching something else at the time. My only option is not to record the showing. I would like to also have an option to force it to record and clip on the other tuner.

My understanding is there's a legal debate going on with the CableCARD people. As a result, video transfer capability has been disabled on all Series 3 units. I can still access most of my Galleon features, but I cannot transfer shows between my TiVos. I can understand CableCARD's desire to protect content, but I would like to at least be able to transfer shows from my other two legacy TiVos to the new one. Keep outgoing transfers disabled but give me incoming transfers!

UPDATE: 11/7/2007

This option has finally been enabled! I can now move my recordings (standard def at least) between TiVos. Also, for $25 I can upgrade my TiVo Desktop to a version that will transcode the videos for use on portable devices. I haven't decided if I need this upgrade yet.

The Ugly

Well, none really. Like I said, this device is pretty much the same as my Series 2 boxes with dual-tuner and HD support added on. Performance-wise, it is no different. I suspect video transfers will not be disabled forever, so I'll patiently wait.

Technorati tags:

posted @ 8/18/2007 5:09 AM by Steve Majewski

Go Broncos! 2007 NFL Season Begins

It's that time again.  The NFL pre-season starts for the Denver Broncos this coming Monday.  The play the 49ers in San Francisco and I can hardly wait for pre-season to be over so the regular season can starts.

The Broncos look promising this year.  They have a lot of great talent, including Jay Cutler.  As long as they have few injuries, they should be able to easily win the division (I don't rank the San Diego Chargers as high as some national rankings have because they have a new coach).  As for the Super Bowl, I wait to see how they do before I get my hopes too high.

Go Broncos!

posted @ 8/8/2007 3:52 PM by Jenn Majewski

Redesign Done!

Yay!  I've actually finished and released a new version of Conolia.com.  I'm excited about this version because it's the first version of Conolia that doesn't require a recompile in order to update (other than the first version that was strictly HTML).  I've come a long way in experience since that first version was done.

I'm hoping that this particular version will grow into a great learning experience for me.  I'm planning on trying out some AJAX when I go to add more functionality to the site.  We'll see how it grows.

posted @ 8/4/2007 11:02 PM by Jenn Majewski

MCSD.NET...Finally!

After a tragic lapse in testing, I finally managed to finish off my MCSD.NET certification today. I, like so many before me, got bit by the 70-300 bug. My first attempt at the test back in February sent me home with tears and a grade just not good enough to call me certified. I rolled onto a project shortly thereafter, and the steam went out of the study engine.

After some soul searching and recommendations from colleagues, I picked up the Exam Cram book from Que. I was a bit forlorn when I picked up the book last Friday. Every tech person in Denver knows about SoftPro Books. It's THE place to go for tech books when you don't have time to wait. I slap the book on the counter and the attendant gives me a half hearted, "finishing up that old certification, huh?" How rude! I knew I was running a little behind, but OLD!!!??? To pour salt on the wounds, I discovered SoftPro even removed the book from their website when I tried to link to it above. Tears of unfathomable sadness. In any case, the book along with the Transcender exams helped flesh out (and in many cases degrade) my knowledge so that I could pass the exam.

So while this is a happy day that I can kick the dust of the old certs off my boots and look ahead to the new (or I should say newer) stuff, I still can't help but feel like it was all for naught. I like to think I walked away with some knowledge gained, but in the end I feel like I just crammed for each test just enough so I could pass it. Well, on to the MCPD upgrade exams! Hopefully I'll complete them before someone calls me grandpa.

Technorati tags:

posted @ 7/31/2007 9:44 PM by Steve Majewski

Redesigning Conolia

Conolia.com is my personal site that I tend to test new knowledge on.  It's been a great learning tool for me.  However, lately, I haven't had a lot of time to work on my personal sites (as you can probably see with the lack of postings on this site). 

Unfortunately, Conolia has fallen into an obsolete tool.  The site is using VB.NET when I have been developing my skills in C#. The framework is 1.1 when 2.0 can do so much more.  Most of the site is hard-coded instead of data driven.  There's not an administrative back-end.  I could keep listing all the improvements the site needs, but instead I'll just leave it at that.

I am now working on completely redesigning Conolia.  In my discussions with others, I've also been able to make a list of new ideas for the site.  The new site will be in 2.0, will be data driven, have a much more efficient design, have an administrative back-end, and just overall be much easier to update.

Although I've only just started, I'm looking forward to releasing the new version!

posted @ 6/28/2007 1:41 PM by Jenn Majewski

Death of Galleon - Why Open Source Sucks

This is a wee bit old news, but it became an interesting lunchtime discussion point for me a few days ago. For those of you not in the know, Galleon was an open source project that provided additional functionality for TiVo such as music, weather, traffic, etc.

Last year, the developer of Galleon, Leon Nicholls, decided to stop development of it and move on to something new. This is another in a long line of open source applications I've used that have faded away into obscurity, and it is my biggest pet peeve with open source in general. One guy walks away and the project is dead.

For an open source application to survive beyond its original developer it has to be ridiculously popular. Galleon has quite a large user base, many of which are accomplished developers. Why is no one stepping forward to continue development? Because most people don't like doing something for nothing.

I still use Galleon and was upset when I heard it was shelved. Galleon, while functional, is far from finished. It is an excellent proof of concept but lacks the polish of a commercial application. If Leon was making money off of it, he'd certainly have a much different outlook. Sure, he won an award and that motivated him for awhile, but when the project got to the final 10% (where 90% of the work is done) he walked away. Why? Because every developer knows that the final 10% of any application is dreadfully boring work.

So I agree with Leon's decision to cut and run. He lost interest in the project and there was nothing more to gain (learn) from it. He's moved on to other technologies that will help him increase his skill set thus making him more marketable. What would be his motivation to finish Galleon? To make a bunch of people he doesn't know happy about their TiVo? Hard to pay rent with that.

Technorati tags: , ,

posted @ 5/30/2007 2:51 PM by Steve Majewski

Mac Spoof

I ran across a series of spoof Mac ads on YouTube and wanted to share them with the world (aka my friends) through my rarely hit personal blog. See them all here.

Technorati tags: , ,

posted @ 5/30/2007 8:57 AM by Steve Majewski

DataGridView Reentrant Call Nightmare

The story begins with the QA team finding a bug. The description of the bug appears quite simple. When the user clicked on a cell in a DataGridView on the form then closed the form using the X, reopening the form would throw an unhandled exception. "No problem," I think to myself. Little did I know the adventure on which I was about to embark.

Naturally, my first stop at debugging was to get the actual error that occurred. I place it here in the hopes that the wary developer scouring the web for a solution to a particularly nasty bug (get on with it) will find it and be saved:

System.InvalidOperationException was unhandled
Message="Operation is not valid because it results in a reentrant call to the SetCurrentCellAddressCore function."

The error message appeared simple enough. It even contained pretty words that make it much easier when finding solutions on Google (ahem...I mean MSN Search). Sadly, my search yielded me annoying solutions with no results.

Let me start (you're starting now?) by explaining what is happening. When the X button is hit, the form's focus does not change from the DataGridView. As a result, the grid remains in an unedited state. This particular form was being reused as a dialog, so the next time the form opened and code tried to change the grid's data, the error would occur.

The error is caused by an infinite loop. The cell on the grid is trying to change, thus calling the SetCurrentCellAddressCore, which in turn raises some other event that calls the SetCurrentCellAddressCore and so on and so forth. .NET detects the loops and gracefully crashes headlong into the ground like an ogre on ice skates.

The craziest part was the error would only occur when the application was run directly. When I ran it through VS in debug mode, it would continue on its merry way like nothing happened. Wrapping the offending call in a TRY...CATCH block also did not work. The interactive debugger would catch the exception but running the application direct (off the same compile, mind you) would throw the error every time despite the TRY...CATCH.

One solution I found involved deriving my own DataGridView class and overriding the SetCurrentCellAddressCore method. A property was added the would indicate whether or not the form was reloading data and prevent the reentrant call. While this worked for me when setting the grid's DataSource to null, it caused an IndexOutOfRangeException when I tried setting the DataSource later.

During my debugging, I could see good and well that the grid thought it was being edited thanks to the IsCurrentCellInEditMode property. I tried calling the CancelEdit, EndEdit, and even NotifyCurrentCellDirty methods, but the grid remained in edit mode. I tried directly setting the CurrentCell to null. No dice. The grid refused to realize that it really wasn't being edited.

Finally, light dawned on marble head. The problem is the grid is still active when the form is closed. What if I just selected another control when closing the form? There was no reason not to set the focus back to the first control on the form so that the next time the form opened it would be selected.

Even though I had code in place to switch the control focus, it was triggered when the form was opened (activated really) rather than when it was closed. The only thing I can deduce is the grid goes into a strange limbo if the form is closed whilst it is in edit mode. I created a FormClosing event and added the one line of code to select the first control on the form. That was enough to switch the grid out of edit mode so that it could be manipulated the next time the form was opened.

So what started as an easy looking bug ended with an easy solution with about 10 hours of hair pulling antics piled up in the middle. Either way, I still got the warm fuzzies when I saw it work. That is the mark of a true developer.

Technorati tags: , ,

posted @ 5/17/2007 9:01 AM by Steve Majewski

Implementing List.Find in .NET 2.0

I'm putting this here more as a reminder to myself than anything else because I'm tired of looking it up every time I need to implement one of these things (of course, isn't that why people write blogs?).

The List generic class added in .NET 2.0 (System.Collections.Generic.List) is probably my most favorite addition to .NET 2.0 (well, generics in general). No longer do I have waste time creating a custom collection class just to get a strongly typed collection for my business objects. It even has the ability to do searching against the list provided you can get past Microsoft's less-than-informative help.

The List class has a Contains method, which will search the list for an instance of a given object. However, that will only indicate whether or not the list contains the same instance of the object. So having another object with the same data will yield a false negative when using the Contains method (if duplicate data is not the desired result, of course).

The Find method is more flexible because it allows the developer to define how to compare the objects. To perform a Find on a generic list, you need to create a Predicate to do the legwork. A Predicate is nothing more than a generic delegate that defines criteria and determines whether or not the criteria are met.

There are several ways to define a Predicate, but this is the method I prefer to use because I creates clean, reusable code:

public class Person
{
    public string LastName;
    public string FirstName;

    public static Predicate<Person> FindPredicate(Person person1)
    {
        return delegate(Person person2)
        {
            return person1.LastName == person2.LastName
                && person1.FirstName == person2.FirstName;
        };
    }

    public static Predicate<Person> FindByLastNamePredicate(string lastName)
    {
        return delegate(Person person)
        {
            return person.LastName == lastName;
        };
    }
}

Here I've defined two different (if not very simplistic) Predicate functions. The Predicate function creates an inline delegate that receives a Person datatype. The Find method will always pass in an object of the List's datatype, so there is no flexibility on the method signature for the delegate. However, the data passed into the Predicate method can be anything, and the variables are available in the delegate's code block. This allows for comparison logic to be as complex as needed. Keep in mind that the Find method will only return the first item in the list that matches the criteria.

To use the predicate, the code would look something like this:

// add person if not already in the list
if (myPeeps.Find(Person.FindPredicate(peepToFind)) == null)
{
    myPeeps.Add(peepToFind);
}

// find first person with a last name of Gump
Person foundPeep = myPeeps.Find(Person.FindByLastNamePredicate("Gump"));

Of course, Predicate methods could be defined anywhere. It makes sense (to me anyway) to put them on the business object as a static method, since it doesn't hurt for a business object to know how to compare itself to given criteria.

Technorati tags: , ,

posted @ 4/24/2007 10:00 PM by Steve Majewski

Corrupt User Profile

I ran into a little problem with a Windows Server 2003 VPC earlier this week. I was using the VHD on two separate machines with a different VPC profile on each machine due to needing a different hardware configuration (memory, NIC, etc). I made the fatal mistake of forgetting to shut down the VPC on one profile before opening it in the other. The end result was a giant mess.

The first major hurdle was the countless corrupt files, mostly with the code on which I had been working. Windows detected something was wrong and automatically ran CHKDSK on the drive. It took several hours to "fix" all the files, and several were still corrupt when I got the system running again. After pulling the missing files back from VSTS, I thought everything was good to go.

The next time I tried to use the VPC on the other system, I discovered that the user profile was corrupt and could no longer log in to the VPC. As soon as I entered my login information the system would reboot. I eventually tried booting in safe mode (which should have been the first thing I tried, but I'm not one for simple solutions). Luckily, I was able to access the account and use it to create a new account (apparently corrupt user profiles can't be fixed).

My first attempt to login with the new profile caused the system to reboot and corrupted the drive so it would no longer load Windows (would continually reboot). I attached to the OS install CD ISO (always good to keep that handy) and booted to the recovery console. From there I ran the FIXBOOT command, which is used to repair the boot sector on the system partition (and usually works). That was all it needed. The system booted and I was able to login with the new user and continue working.

I haven't tried the old account yet, but don't want to risk killing the system again. Moral of the story, if you use a VHD on multiple VPC profiles, shut down the system in one profile before trying to open it in another. It'll save you hours of time.

Technorati tags: ,

posted @ 4/18/2007 8:59 PM by Steve Majewski

Use of Isolated Storage in .NET 2.0

Wouldn't it be nice if there was a way for your Windows application to store information on the local hard drive without having to worry about user access privileges?  Well, with .NET 2.0, there is and the classes associated with it are IsolatedStorageFile and IsolatedStorageFileStream.   Long story short is that use of these classes will allow your Windows app to cache information on the local hard drive specific to your assembly or application even if your user has the lowest of the low account privilege (i.e. restricted access like Limited or Guest). 

 

In my code sample below, I'm going to use the above mentioned classes to perform the following actions for a console application (i.e. assembly):

  1. Store information on the hard drive specific to the user of the console application
  2. Retrieve that information for use at a later time

 

Here is the code you can use to do this:

// Be sure you add these two namespaces...

using System.IO;
using System.IO.IsolatedStorage;

...

// Write info to isolated storage based on the user and assembly...

IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForAssembly();

IsolatedStorageFileStream userStream = new IsolatedStorageFileStream("UserSettings.set",
FileMode.Create, userStore);

StreamWriter stream = new StreamWriter(userStream);

// Info you want to save...
stream.WriteLine("Saved Info: Whatever you want");
stream.Close();

...

// Read info from isolated storage...

string[] file = userStore.GetFileNames("UserSettings.set");
if (file.Length != 0)
{
userStream = new IsolatedStorageFileStream("UserSettings.set",
FileMode.Open, userStore);
StreamReader reader= new StreamReader(userStream);
string contents = reader.ReadToEnd();

// Write the info to the console... 
Console.WriteLine(contents);
}

As you can see, this is a super simple and easy to use method for saving application info to the hard drive without having to worry about user access privileges.

posted @ 4/12/2007 6:56 PM by Sherman Quick

Not Dead...Yet

It's been some time since I've posted anything. It's not that I'm dead or terribly busy. I'm just too lazy to take the time to organize my thoughts in a clear and concise way. However, I now have a bit of a backlog of stuff about which to write. Keep an eye out, I'll be back very soon.

posted @ 4/5/2007 8:28 AM by Steve Majewski

Sweet December

December has been a busy month for me. I managed to eliminate another test on the road to MCSD.NET certification, 70-229. Only one test left. w00t!!! I had planned to finish my certification before Christmas, but was asked to work on a prototype system for a huge potential client. So the days have been long. Luckily, it ends Jan 10. As for now, I'm in Salt Lake City, where the air is cold but spirits are high. I look forward to going home this weekend but not the flying.

posted @ 12/20/2006 8:55 AM by Steve Majewski

The Curse Continues: Seattle Seahawks vs. Denver Broncos

It's a curse on me, not the Broncos.  And it has nothing to do with win or lose.  It's all about the weather.  You see, Colorado has just gone through a cold snap and it's time for my first (and only) Bronco game of the year.  This Sunday, the Broncos host my second favorite team, the Seahawks.

Prior to 2003, I can't remember which games I went to.  But here's the run down of the last three years:

November 23, 2003 - Chicago Bears.  The Broncos lost this game 19-10.  It was a huge disappointment after sitting in the freezing temperatures.  When I say freezing, I mean it literally.  The tempurature was in the single digits.

November 28, 2004 - Oakland Raiders.  The Broncos lost 25-24 to their rivals.  This is the first ever Raiders game I attended and it was a Sunday night game.  It was bitterly cold after a snow storm had hit earlier that day.  Infact, a friend of mine was sitting just a few rows down from me and we never saw each other because we were so bundled up.  Tempuratures for that game were in the teens.

October 9, 2005 - Washington Redskins.  The Broncos beat the Redskins 21-19.  One of the reasons I picked this game was because it was early in the year.  However, it was probably the worst game weather wise I have ever been to.  The day started out beatifully with a high of 75 degrees, but when a cold front came through the rain wouldn't stop.  Tempurtures during the game hovered just above freezing.  With tempuratures that low and the constant rain, it made for a miserable day to be outside.  Give me just plain cold or even cold and snow over cold and rain any day!

Now it's time to start getting ready for this Sunday's game.  It was originally scheduled to start around 2:00, but with the NFL's flex schedule this year, it has been moved to 6:15, making the game that much colder after the sun sets.  It is a curse I bring with me.  So, if you're ever planning on going to a game, check with me first to see if I'm going.  Those will be the games you'll want to avoid.

Hey, at least it will be fun watching Jay Cutler play for the first time.

posted @ 12/1/2006 10:02 AM by Jenn Majewski

Nerf Herder - Mr. Spock

You want a guy who can bring the Bacon
And you want a guy with Savoir Faire
Somebody who can take control of it
Someone with cool black shiny hair
(YEAH!)

You don't want a boyfriend
What you want is Mr. Spock
To come to your wasteland
And destroy the roh-oh-oh-oh-oh-bot
Something more than human
Someone with blood that's cold and green
You want something better... than me

Captain Kirk went to the planet
And there he fought the man-lizard
He saved the ship, invented the gunpowder
But that's just not good enough for you, is it?!
Noooooooo!

You don't want a boyfriend
What you want is Mr. Spock
To come to your wasteland
And destroy the roh-oh-oh-oh-oh-bot
Something more than human
Someone with blood that's cold and green
You want something better than meeee..meeeee....

You sit all night at your computer
Drinking Diet Dr. Pepper
Looking for an answer to it all....
Say the words! Say the words! Say! Say! Say the words!

You don't want a boyfriend
What you want is Mr. Spock
To come to your wasteland
And destroy the roh-oh-oh-oh-oh-bot
Something more than human
Someone with blood that's cold and green
You want something better than meeeee... meeeeee... than me!

Technorati tags:

posted @ 11/28/2006 11:13 AM by Steve Majewski

New Toys: Part II - Alienware Area-51 m5750

Not long after the purchase of my new car, my new laptop arrived: an Alienware Area-51 m5750. This baby an Intel Core 2 Duo Processor and has a 17" widescreen monitor that gets up to a 1920x1200 resolution. That gives me plenty of room for code when I open up Visual Studio. I bought it with minimal RAM (512 MB) and added more myself when it arrived (it's now 2 GB).

Once it arrived, I installed the new memory along with Windows Vista. It runs beautifully. With the exception of the DVD-ROM not wanting to read EA games, the machine works fantastically.

I'm very excited about this new toy of mine. It's a high performance media machine that doesn't only work well, but looks pretty cool, too.

posted @ 11/28/2006 10:24 AM by Jenn Majewski

Finally, A Working System

Last week, I finally got my new system setup on a dual boot. I had to install the version of Windows XP that came with my system because it included the hard disk controller drivers that the OEM does not. Luckily Dell provided me with just the setup disk instead of forcing me to reimage the system with all their proprietary nonsense software I don't need. I tried making my own install disc with the proper drivers, but it failed miserably. I only tried once, but I didn't want to turn this thing into an ongoing project. I wanted my system up and running.

As new hard drive controllers come out it becomes necessary to provide drivers during the setup process. This can be accessed by hitting F8 during the initial loading process of the Windows installation. The problem is, it is hard coded to look for the drivers on the A drive. You know...floppy drive. You know...that $30 option I opted to not option because WHO THE HELL USES FLOPPY DRIVES ANYMORE??? In fact, notebooks don't even bother including them anymore. Oh, and a USB floppy won't work. I has to be an old school floppy drive.

The plus side, everything is working. My games are awesome in XP and Vista does well with the rest. XP is a little faster booting to the login screen by about 5 seconds. No real biggie. I'm happy this thing is done and I can finally get on with my life...for now.

Happy belated Turkey Day!

Technorati tags: , , ,

posted @ 11/28/2006 10:23 AM by Steve Majewski

New Toys: Part I - Subaru Legacy Sedan

In the last couple of weeks I've gotten two major toys.  This post will be about my first toy; a Subaru Legacy Sedan.

My last car was a VW New Beetle.  It was a bright yellow car that stood out in the parking lot and matched my personality.  I loved the way the small car handled and, with a turbo engine, it was fast.  It had a lot of problems, however.  It's appearance made it a target for vandalism and it had a problem with parts not working.  The list of problems I had is too long, so I won't list them here.

I took my car in for an oil change one afternoon but was told that the plug was stuck and I would have to take it in for maintenance.  That was the last straw.  It was time for a new car.  As mentioned before, I loved the small size of the Beetle and wanted to stick with something fairly small.  But, as a resident of Colorado, I also wanted something that would handle the snow better.

The all-wheel-drive Subaru Legacy Sedan was a perfect fit for me.  I had rented one of these cars a couple of years back and loved the way it handled.  So, it was off to a Subaru dealership.

Overall, I am very impressed with my new (used - 2006) car.  I have yet to drive it in the snow, but I'm sure it will do fine.  It's definitely larger than the Beetle, but it's no large SUV or truck, either.

posted @ 11/28/2006 10:07 AM by Jenn Majewski

The Third Time is the Charm - Windows Vista Challenges

Well, my luck with Vista has been rather crappy. It took a better part of Friday to download the x64 ISO. Luckily I had started my download before Microsoft pulled the link due to network traffic. After many hours of careful monitoring of a constantly failing connection the entire ISO finished.

Step 1: Burn the ISO to a DVD

This yielded me three DVD coasters and no usable media. I suspected the ISO might be corrupt, so I decided to try using an x86 version of Vista given to me by a co-worker. That kept blue screening on me during the installation. It was complaining about a thread conflict. I had already used the DVD to rebuild my old laptop, so I had no idea why it kept dying. I decided to try burning the x64 version using my old laptop, and finally got a usable disc.

Step 2: Rebuild the Machine

This part went off without a hitch. Vista took a little over an hour to install. Then there was installing all the updated drivers, additional software, and configuring everything. In the end, it was roughly a three to four hour process. Sadly, Vista is still missing the fish tank screensaver from RC1. :(

Step 3: Test Out a Game

I wanted to see how some of my games run on the new system. I always had to play them with the lowest graphical settings, so I was interested to see how they look running without limitations. I installed Knights of the Old Republic, which is not a new game by any means but still one of my favs. I immediately noticed something odd with the sound. IT WAS STEREO!!!

In the settings, I saw the game wasn't recognizing the EAX abilities of my X-Fi card. A quick Google search gave me the answer. This is from Creative Lab's support sight:

The Vista audio architecture disables DirectSound 3D hardware acceleration; resulting in legacy DirectSound based EAX game titles not working as they did in XP.

Issues that may be encountered:
Could range from loss of EAX functionality in EAX enabled games to a complete game incompatibility, depending on how the game title was authored. This would only happen with games that render 3D audio using DirectSound, it should not affect games that render 3D audio using OpenAL.

Status:
These issues cannot be addressed by the Creative audio driver, because the functionality was purposely removed by the operating system. We look forward to game titles moving away from DirectSound and toward OpenAL for fully optimized Creative 3D audio hardware and technology support.

Even though the FAQ entry pertains to EAX, it's actually true for any game that uses the 3D audio component of DirectSound (you know, like virtually every game for the past decade and every game I own). I don't think OpenAL is widespread enough to completely write off DirectSound. I don't want to make assumptions as to why DirectSound was crippled, but this going to make many games seem worse on a PC compared to a console like...say...the Xbox 360.

Conclusion

I've spent way too much money on the audio setup for my system to not be able to play my games the way they were intended to be played. So I've decided to setup my system as a dual boot. However, from what I've read Vista doesn't play well with another OS trying to steal its master boot thunder. So now I have to blow out everything and start over with a clean install of XP then install Vista.

They say the third time is the charm. The whole ordeal reminds me of when Windows went 32-bit, only this time it's software and not hardware that's slapping me in the face. Here's to hoping it works out (clink).

Technorati tags: , ,

posted @ 11/21/2006 3:31 PM by Steve Majewski

Vista RTM Install - Dell Inspiron 5100

So, this weekend I fired up my old Dell Inspiron 5100 and decided to give Vista a try.  Overall, the installation experience went amazingly smooth, but I must be perfectly honest and admit that I didn't even attempt to go the upgrade route since my previous experiences with upgrading have always been problematic.  To make a long story short, I gave the system a compete lobotomy by reformatting the drive and starting with a clean install of Vista Business Edition.  By the way, a single Vista installation will actually support all four flavors of the OS (Ultimate, Home Premuim, Business, and Home Basic).  It's appears that it's the access key that controls the feature set that is enabled on your particular system that seperates a Ultimate from say a Home Basic install.  This allows you to be able to upgrade the OS by simply purchasing and inputing a new access key as opposed to having to re-install or upgrade the OS software again.

So, how's the experience...

Overall, the system is running extremely smooth and is performing well with just the basic installation of the OS itself.  Haven't stressed it or messed around too deeply with it, but I think its working great coming straight out of the install with native device drivers only.  Only bad news is that the Inspiron 5100 has such gimpy video, I didn't get to experience the beauty of the new Aero (i.e. also referred to as "glass") interface.  With that being said, that is the only complaint I have about Vista.  It really doesn't look all that great if you've got a whimpy video card like the 5100 has.  Naturally, I'm anticipating that video performance will most likely improve once ATI releases a new driver for the Mobile Radeon 5400, but I'll have to wait and see (by the way, I'm not holding my breathe on that).  I'm still getting used to the layout of the new Start menu, but that will improve over time.  I'll be honest and admit that I had to change back to the Classic Start menu in order to perform a few Admin functions such as enable IIS and manage services, but, eventually, I'll figure out where these functions are in the new menu system. 

As for other software, I also installed the following apps once the Vista installation was complete:

  • Visual Studio 2005
  • Visual SourceSafe 2005
  • SQL Server 2005 Standard Edition

and they seem to be running fine as well.  There were a few trivial incompatibilities that you have to manage; however, I do like the fact that Microsoft warns you about them upfront during the installation process so you can take care of them ASAP.  Haven't installed any games, but I've heard some grumblings about performance and incompatibility issues.  Then again, this is my home dev box so I don't plan on messing with games on it.  Gaming is strictly for my Dell XPS that I'm not brave enough to upgade to Vista....yet...

posted @ 11/21/2006 9:48 AM by Sherman Quick

Vista: The Sound of Silence

I've installed the new operating system from Microsoft, Vista, onto my desktop at home and all sees to be running fairly well with one exception, my computer is now silent.  Apparantly, there are no drivers for the Creative SB Live! Sound card.  My machine is as silent as a mouse.

With Office 2007 running, iTunes installed (after some issues with permissions on another user account), and the realization that Vista has a Mahjong game (one of my all time favorite games!) I figured no sound was a small price to pay for a machine that runs much better now than it did before.  But iTunes is pretty worthless without sound.  Sure, I can sync up my iPod, but that's about where the fun ends.  And I miss the alert sounds to let me know when I have new mail or an instant message.

I hope it won't be too long before a fix is available.  The interface on Vista is very different from XP and will take some getting used to, but overall, I'm liking it so far.  It will be that much better once I can hear again.

posted @ 11/21/2006 8:45 AM by Jenn Majewski

Origami CD/DVD Sleeve

Ever have someone hand you a CD/DVD at work without a jewel case or sleeve? Worry you won't be able to get it home without something horrible happening to the precious surface? Here's (link) how your can make a sleeve from a plain piece of paper.

posted @ 11/17/2006 2:00 PM by Steve Majewski

Dell XPS 410 + Windows Vista Goes RTM

Dell XPS 410 I recently purchased a new computer after four long years of using my Toshiba notebook as my primary system. I felt it better to go with a desktop this time around, since Avanade provides me with a notebook. After some research I went with a Dell XPS 410 because it gave me the most bang for my buck. Dell and Alienware are the only pre-built systems I trust and quite frankly I've grown tired of building my own machines. Of course, that doesn't mean I have to deal with the smack software they load on the things by default.

Step one, blast the OS with a nice fresh copy of Windows Vista RC2. So a couple of days ago I download the x64 version of RC2 (I hadn't needed it in the past, since all my other machines are x86). I spent last night installing the OS and some basic applications, including the recent RTM of Office 2007. Today, I walk in to the office and everyone is raving that the Vista RTM was released last night. LAST NIGHT! This is the second time this has happened to me with Vista. Someone at Microsoft will have to answer for this!

Now I'm downloading the RTM version at sub par speeds thanks to the countless MSDN junkies all trying to get their grubby little paws on it at once. Avanade had it available through our internal torrent utility about 4 hours before it was posted on MSDN, but alas I was too late. I at least have the luxury of the weekend to play around with it assuming it finishes downloading in the next century.

On the plus side, the new system is working fine on RC2. I was able to find x64 drivers (beta) for all the hardware in it. I did, however, have to ditch my old USB TV tuner, since it there are no x64 drivers for it. The new system already has a TV tuner that works, but I was hoping to add the secondary tuner. No big deal. I doubt I would've used it much anyway. I only have one unknown device left and it's tied to ACPI (who cares about power management?). Maybe the RTM will recognize it, but I'm not counting my chickens before they come home to roost.

Technorati tags: , ,

posted @ 11/17/2006 1:54 PM by Steve Majewski

Just Two words...

Vista...RTM...

Yes, today is the big day if you happen to be a certifiable Microsoft geek with an MSDN account.  If so, Vista RTM is just begging to be downloaded!  I'll be updating my home development box tonight with the latest release and I'll keep you guys posted on how that journey goes...

posted @ 11/17/2006 1:03 PM by Sherman Quick