Friday, January 8, 2010

Moral Responsibilities

If you work in the software industry long enough, sooner or later you are going to be asked to do something that comes into conflict with your conscience.  Whether it be to ship with defects in the hopes that no key users will find them before you can get it fixed so you can ship on time, or whether it be to include some arcane EULA agreement into the software that no one will ever read, but gives the software or the company to do anything to your PC, or to gather and distribute any personal information the company wants to sell.  Sooner or later, you will review the strength of your convictions.

When I started out in the industry fifteen years ago, I was an idealist (aren’t we all when we are young).  I can remember tracking my hours religiously to ensure that I got paid for every minute I worked past 40 (this was in Canada and overtime was required… that was nice).  Now, I track hours so I can bill clients, but I have adapted to the term ‘salaried employee’, and I just do the work.  It took a few years to get the ‘overtime’ idea out of my head, but I’m paid well for what I do and I want the small company I work for to be a success.  I also know that I must spend my own time to improve my skill set.  That  was something I didn’t see as my cost of working, just a few short years ago.  My moral values changed over time. 

A few weeks ago, I upgraded all my personal PCs to Windows 7.  One thing I hadn’t done was to install the HP driver software so I could download pictures from my HP C6180 All in One printer.  I could print to it, but I couldn’t see the SIMM card reader to get the photos.  We had a bunch of pictures on the camera I wanted to post for family to see.  I went out to HP’s website and started to download the installer for the drivers.

I stopped the download when I saw it was 340 MB.

Yes, 340 MB.  For drivers.

Now I’m not an expert on driver software, but I recognize bloatware when I see it.  I stopped the download, and attempted to find driver software just to get the ph0tos.  You know, something that will allow me to see the SIMM as a USB device.  HP’s own site (in small letters off to the side), said that if you wanted just the drivers (no network), to search for the Basic package.   I did that.  The only package that came up was one for XP and Windows 2000 Server.  Hmmm.

I got impatient.  I didn’t plan to have my whole evening sucked up with just trying to get pictures off the camera,  That’s supposed to be the easy part.  So I decided to download the 340 MB package and install it.  I knew that the previous version of the software had some really annoying apps that I didn’t want, so I figured at some point during the install I would have a chance to opt out of those. I started clicking through the install.  I got to  the page that asked you to accept the EULA.  I clicked to accept (like anyone reads those), and then clicked next.  I then noticed that the install was about to start without giving me an option to opt out of the bloatware.  Hmmm.

I went back a screen, and re-read it.  On the screen were a series of links that look like they are part of the text, but are really optional installer screens that let you go an opt out of some of the options.  Okay, my fault, I missed it.  But reading on, I see a part that says failure to install all of the options will probably cause the installer to fail.  What?  Scare tactics or honest truth?  Bad software?  I was about to commend them for their honesty, until I went into the screens, and started to see all the crap (pure bloatware) and all the really dangerous stuff (outright spyware) they were about to try to install.  Holy Mother of God.  I’ve never seen such a blatant attempt to take my personal information.

Let me stop here for a second, and go back 29 hours.  The previous day I got a call from my wife that she got a call from our credit card company that they had noticed some unusual activity on our credit cards, and sure enough, someone had stolen our number and was buying stuff at BigLots! and Target in California.  I live on the West Coast, but nowhere near California.  So we cancelled our card, had the charges removed, and everything was taken care of in a couple of hours.  I was a little upset, and briefly talked about the death penalty for credit card theft (a damn fine idea if you ask me), but after a few hours, everything was okay.

Fast forward to last night, sitting in front of my PC, looking at all of this crap.  I was spitting mad.  Mad at HP for creating such a mess.  Mad at HP for knowingly taking advantage of the fact that no one ever reads the EULA.  Mad at HP for violating the trust that we are supposed to have for large purveyors of  hardware and software.  They are supposed to be out there fighting against this kind of thing.  Mad at HP for making software developers do this, because I have to believe that no self-respecting developer would ever do this except against their will in an effort to keep their job.  Mad at the industry that slowly whittles away our moral values to the point that this is acceptable behavior.  Mad at the fact that my elderly parents would install this without questioning it, and expose themselves to all kinds of corporate invasion.

I went through and eliminated the stuff I didn’t want, and installed what I thought was the barebones driver.  But I missed a checkbox, and it still installed something called HP Web Printer Helper.  The next time I fired up a browser, half the screen was taken up by an HP add on that kept asking for special permissions to send information HP to help improve my experience.  What the fuck!?!  Screw that.  Search though the add on list and disabled it.

But then I realized that disabling it wasn’t enough.  My other logins for the rest of the family may still have it installed and active.   So I went back into Control Panel and removed anything from HP that was questionable.  I was still pissed.

I popped on to HP’s site, looked through their contact page, and fired off a long note to the HP CEO Mark something or other.  There was a 3500 word limit.  I may have been close.  I doubt if I’ll hear back, and I doubt even more if HP will change their evil ways.  I was ready to call for an all out boycott, but I realized that I liked the HP EX 490 Home Server I recently purchased too much not to recommend that one to other people.

Instead, I’ll simply document my experience here, and hope that my tale takes root, and those roots break the concrete of corporate greed and malfeasance.

So be forewarned, those of you who blindly approve all EULAs from supposedly trustworthy companies.  They know it, and they’re starting to take advantage of that fact.  Scary.

Thursday, January 7, 2010

Bug in Entity Framework

I found a great little bug in Entity Framework this morning.  One of their exception handlers can throw an exception, that hides the true exception.  Here’s how to recreate this:

  1. Set your thread culture to a neutral culture:  i.e. ‘en’ instead of ‘en-US’
  2. Create a new EF Context
  3. Find an object (A) that has a dependency to another object (B) via foreign key and B has a dependency to object C via another foreign key.
  4. Create a new object of type A called ‘a’
  5. Get object B and detach it from the database (as if you were getting it in via a web service call).  B should lose it’s link to C
  6. Add object B to A
  7. Attempt to add A to the database via the context.AddToA(a)
  8. Call context.SaveChanges().

What you should get is

System.Data.Entity  Type: System.Data.UpdateException  Message: Entities in '[contextName].B partticipate in the 'FK_B_C' relationship. 0 related 'C' were found. 1 'C' is expected.

What you will get is:

System.NotSupportedException: Culture 'en' is a neutral culture. It cannot be used in formatting and parsing and therefore cannot be set as the thread's current culture.     at System.Globalization.CultureInfo.CheckNeutral(CultureInfo culture)     at System.Globalization.CultureInfo.get_NumberFormat()     at System.Globalization.NumberFormatInfo.GetInstance(IFormatProvider formatProvider)     at System.Data.EntityUtil.ConvertCardinalityToString(Nullable`1 cardinality)     at System.Data.EntityUtil.UpdateRelationshipCardinalityConstraintViolation(String relationshipSetName, Int32 minimumCount, Nullable`1 maximumCount, String entitySetName, Int32 actualCount, String otherEndPluralName, IEntityStateEntry stateEntry)     at System.Data.Mapping.Update.Internal.UpdateTranslator.RelationshipConstraintValidator.ValidateConstraints()     at System.Data.Mapping.Update.Internal.UpdateTranslator.ProduceCommands()     at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)     at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)     at System.Data.Objects.ObjectContext.SaveChanges(Boolean acceptChangesDuringSave)     at System.Data.Objects.ObjectContext.SaveChanges()  

The only way to get the real error, is to change your current culture from a neutral to a specific culture.  I’ve never seen this one before, and I had a few minutes of head scratching before we got the real cause.

Friday, January 1, 2010

Evolution

I have evolved.  Well, not me personally, but the technology in my house has definitely undergone an evolution over the past few months.  Or at least a refresh.  It was a long time coming, and there’s still a way left to go, but here’s where I started from, where I am now, and where I think I still need to upgrade.

Last year at this time I had the following:

  • Home Computer:  Dell XPS 410 pretty much a standard ship from the factory (without the TV card) running Vista Ultimate bought in 2005
  • My Laptop:  Toshiba U405-2854 running Vista Ultimate bought in 2008
  • My Wife’s Laptop:  Dell Latitude 550  running Windows XP bought in 2004
  • Phones:  Qwest RAZR with limited texting (2 phones bought in 2005 appx $70/month charges)
  • Internet Connection:  Qwest DSL 1.5 MB Download, .3 MB Upload ($30 / month)
  • TV Connection:  Comcast Basic Cable ($78/month with DVR and 2 cable boxes)
  • Game System:  Standard XBox circa 2004
  • Backup Strategy:  Used Windows Live Mesh for my writing and personal docs, plus a Maxtor 300 GB US Backup drive with Norton Backup (Never worked right)

A number of factors came together over the past year to cause me to spend a bunch of time and a bunch of money upgrading various technical aspects of my life

1. We upgraded from the basic Qwest Phones to Apple IPhone 3GS with unlimited data from AT&T last spring.  I was happy with the phone I had, but Qwest was discontinuing wireless in our area, and we had to choose a new plan.  I left it up to my wife to pick a new plan / phone for us.  I’ve been fairly satisfied with the IPhone on the whole.  I use the phone every day, for far more than I thought I ever would (who needs web / email on their phone, I used to say), but I actually regret having email on my phone.  I have it linked into my work email, and at times I feel obliged to answer emails at odd hours of the night.  There is nothing worse than getting home on a Friday night, ready for a good, relaxing weekend, only to see an emergency email pop into your box at 6:00 PM.  A year ago, that email would have waited there just fine until Monday morning, and no one would have cared.  I may not work two jobs like some people I know, but I have one job that takes up twice the time it used to.

I am not happy with ITunes, but that is a whole other story.

2.  My wife’s computer, the Dell 550, is a beast, both in weight and in the heat it puts out.  It would literally burn your legs if you left it on your lap for too long.  In November, she finally ordered a new laptop, an HP.  That was the same week I went to Microsoft PDC, and received a new ACER 1420P laptop running Windows 7 courtesy of Microsoft.  We promptly returned the HP unopened, and swapped / upgraded laptops.  She got my Toshiba (just over a year old) and I got the Acer.  If you’ve read my blog, you know what I think of the ACER.  I got the raw end of the deal, and would switch with my wife if it wasn’t such a pain to move ITunes from one machine to another.  Unless I can find a glare reducer for the ACER, I’ll probably replace it before 2010 is done.

We upgraded my wife’s Toshiba to Windows 7, and the Dell XPS 410 to Windows 7 as well.

3.  With the money we originally had budgeted for the new Laptop, we bought an HP-490 MediaSmart Home Server.  I love this box.  Easy to do the initial setup, looks good, runs quiet.  I added an extra 1.5 TB of disk into it so it could spread the load over multiple disks.

4.  I then splurged on a new XBox 360 Elite with the 120 GB hard drive, with the idea that I could use it an a media extender for my home server.  I also got the idea that with a little planning, I could drop the $78/month Comcast bill, and make back the money I spent on the XBox in less than 6 months.  This is where my plan started to run into some trouble, and also where the story gets interesting.

First off, I wanted to put my media server and XBox 360 in my Home Entertainment center, hard wire them to my wireless router and DSL line, then run my desktop off a wireless USB receiver.  A few problems cropped up.

a)  Running a desktop PC off a USB Wireless G (Linksys WUSB54GC) when you are frequently remote desktopped into you work PC from there is a complete disaster waiting to happen.  Of course the morning after I set this all up, I had to be up at 4:00 AM to talk to someone in India, and my connection kept getting dropped, and I had to go pull the router back out of the entertainment center and put it back into my office just to finish the chat.

b) 1.5 MB download over Qwest DSL is not fast enough to watch movies on Netflix or TV shows on Hulu.  I thought initially I’d be able to upgrade to 7 or 12 MB on Qwest, but that level is not available in my neighborhood.  Time to call Comcast.

c) In order to watch internet TV on the XBox 360 from the HP Homeserver, you need to install a product like PlayOn Media Server.  The product works pretty well, though the install on WHS is not straightforward.  Follow the special directions as best you can, and do lots of Google searches. The HP 490 does have one critical flaw for those of you who want to run PlayOn to stream Internet TV.  The CPU is a little slow.  In hindsight, upgrading to the 495 with the Dual Core CPU would have been a better deal.

I also went out and bought the XBox N Wireless antenna, and had Comcast Upgrade my router to N as well.

Once I confirmed that Comcast could give me the service level I needed, I was able to drop my TV cable plan from the $78/month to $13.50 a month by going with their very basic plan, and getting rid of the Comcast DVR.  I bought a Hauppauge 1850 Win-TV-HVR PCI-E card and popped that into the last PCI-E slot on the Dell XPS 410 to act as my TV guide / tuner.  That brought up another issue though with the Dell 410.  Drive space.  The Dell is supposed to have dual 175 GB drives set up in a Raid 1 configuration.  When I upgraded the machine to Windows 7, it appears that I lost the Raid Configuration, and now I have 175GB C: drive, and 48 GB on the D: drive.  If you try to set up the DVR on the D drive on the digital tuner, you can only record about 4 hours of TV.  If you set it up on the analog channel, you can get about 30 Hours of shows (due HD vs std output.).

5.  We bought a Harmony 900 universal remote.  This thing is a beast, but it does work with everything we have, though not quite perfectly.  We’ve been talking about getting something like this for a very long time, but using the XBox controller as a remote for the DVR was the final straw.

So what was the cost of all this (Roughly, tax excluded)?

IPhones:  $199 each + $170 per month  (We’ll keep those out the final numbers, since my wife can’t hold those against me.)

  • HP 490:  $475
  • Extra 1.5 TB for Home Server:   $90
  • XBox 360:  $350
  • XBox 360 N Connector:  $99
  • USB G Receiver:  $50
  • Hauppauge WinTV Card:  $119
  • PlayOn Media Server:  $40
  • Windows 7 3 Pack for Toshiba and Home PC - $149
  • Microsoft Office 2007 Home edition 3 pack - $129
  • Harmony 900 – $274 ($138 by using a bunch of Christmas Gift certificates)

Total Hardware / Software Cost:  $1501

  • New: Comcast TV – 13.50 / month
  • New: Comcast Internet:  $20/month for 6 month (25MB down, 8 MB up), $45 / month after 6 months
  • New Total Cost / Month:  $33.50 / 58.50 after 6 months
  • Original Cost / Month:  $30 (Qwest) + 80 (Comcast) = $110.
  • Savings after 6 months:  450
  • Savings after 12 months: 450 + 300 = $700.

So after 1 year, I will have saved about $700, so it will take me about 2 years to break even.

But I also gained a more reliable backup system (worth quite a bit to me).

I also turned my WHS into a Web Server and Host my own website there (www.joebeernink.com), which I was hosting on Windows Azure, but since they are about to start charging outrageous amounts of money, I was going to have to switch to GoDaddy.com ($4 / month).  But this way I can try more things with my web site and set up others as well.  Not a big savings in money there, but honesty, going out to godaddy.com when I’m at work makes me feel like I’m looking at porn on company time.

All of this was a learning experience.  I had some grandiose plans about getting rid of Comcast for good if I could get fast enough DSL speeds, and find all the TV content I wanted on-line, but alas, neither the former or the latter is completely possible, yet.

For someone about to go through all this themselves, here are a few tips.

  1. Confirm your DSL provider can give you the speed you want before you start.
  2. The HP Home Server is great, but get the 495.
  3. Don’t try all this with Windows Vista.  Wait till you have Windows 7
  4. Upgrade your wireless to N before you start
  5. Really investigate what you think you will do with you gaming system.  The PS3 might be a better choice if you want to watch BluRay.  The XBox doesn’t support it.  The number one reason I bought the XBox was because most of my friends have it and they play on line.  I haven’t yet had time to play on-line, so maybe that wasn’t the wisest decision
  6. Don’t buy a USB Wireless card for a desktop PC.  Waste of money.
  7. ITunes doesn’t play well with anything.  If you think you will be able to backup your ITunes library to your home server, then play your playlists on your stereo, you will be sadly disappointed.  ITunes playlists are a proprietary format, and not compatible with Windows Media Server.  So don’t promise your wife that this is possible.
  8. If you want to stream music from your media server to your stereo, and you have a TV like mine, you may have to leave your TV on all the time while listening to music, and you’ll have to watch those seizure inducing graphics.  My TV doesn’t pass audio through when the TV isn’t on, and I haven’t yet invested in the XBox to component out audio connector.
  9. Your life will be more complicated with this setup.  Instead of just checking your queue on Netflix and seeing what’s on TV / your DVR, you’ll have to do the following:
    1. Check your Netflix DVD queue
    2. Check your Netflix Instant Play Queue
    3. Check your PC to see what is on your DVR
    4. Copy the shows you don’t have time to watch now over to you media server so your PC doesn’t run out of space.
    5. Look through Hulu for stuff to watch
    6. See what you can watch on-line that can be streamed through the XBox.  Not everything can be.  To me, there’s a whole lot of collusion going on out there that is preventing the internet from being THE source of entertainment content, but the FTC is in the hip pocket of big business, and not going to do what is best for consumers, which would be to give everyone a choice of how to get their content.  My hope is that over time, more content will be integrated into PlayOn so that everything I want to watch is in one place.
  10. Be prepared for things to not work right the first time.  In fact, if you are doing this just to save money, forget it.  You won’t at least not right way, unless you already have most of this hardware.

What’s really weird is that since we’ve started setting this up, I’ve barely had time to watch TV, and I haven’t really missed it.

So what’s on the table for 2010?

  1. Add more disk to my Dell XPS.  Disk is cheap now, and if I added a couple of TB into it, it would go a long way to allowing my to record everything I want to.
  2. Add a second cable splitter into the line coming in to the Dell 410 so I can have both HD and analog feeds, and choose which format to watch / record.
  3. Clean up the directory structure on the Home Server to make things easier to find.
  4. Develop a Home TV guide for everything we might want to watch (how to get to it, restrictions, etc.)
  5. Figure out if I can access my Windows Media Center remotely to allow me to set up recordings while I am away.
  6. Test my backup strategy.  It’s a common saying that you don’t have true backups unless they have been tested.
  7. Replace the ACER 1420P.  We’ll see how long I can cope with this one.

Give me a few more weeks, and we’ll see if I get this all working just right, or get outsourced as the VP of technology in my own home.

Wednesday, December 23, 2009

New Year’s Technical Resolutions – 2010

I’m a goal oriented person.  Always have been.  I hear management really likes that in developers, and now that I am more management than developer, I know I like that in my developers.   The key is to make sure that the developer and management have the same goals.

To that end,  I’ve spent some time over the past few weeks looking forward to 2010 and planning the technology goals for the company for 2010, so that we can take those goals and make sure that they both mesh with the vision for the company’s growth in 2010, and with the career goals of the developers for 2010 and beyond.

Personally, I want to maintain my technical edge over the next few years, to delay the inevitable full time move to management.  It’s not just my backup plan.  As an architect, I need to be able to see around the next corner.  I may not have to delve deep into how exactly JQuery Validators work, but I’d better at least be able to read JQuery and know what it’s capable of doing.

To that end, here are my technical goals for 2010:

  1. Visual Studio 2010 / TFS 2010 – I can’t wait for this release.  I believe this will have the single biggest impact of any technology on my day to day work life in 2010.  We have already identified major areas where our processes fall short, and hope that technology can help to address those issues.
  2. Entity Framework 4 – After spending the last two days debugging a large project written with EF 1.0, I really hope that this version justifies the immense amount of time we’ve invested into EF and fixes the many aspects of EF that I would currently give a score of' ‘WTF’ to.
  3. Azure – 2010 should be a huge year for Azure, with the full production release, and the stabilization of the environment.  As an early adopter, I’ve seen a lot of breaking changes smack me in the face every Thursday morning, and I’m hoping that the pace of these slow (stop would be nice) so I can begin to recommend this platform to my customers as a viable solution for their products.  I will also be doing deep dives into SQL Azure, the Service Bus, AppFabric and WIF as part of extending my Azure expertise
  4. SharePoint 2010 – I really liked what I saw at PDC, and we’re champing at the bit to get going.
  5. Windows Mobile 7 – I’ve never done mobile device work before, but I have high expectations of WM7.  I’ve actually had some great ideas for IPhone apps that’s I’ve had to discard because I have no access to a Mac to do the development, and the more I work with Apple products (and their inability to work with anything else), the more I despise them.  If WM7 delivers, I can see dropping my IPhone and going to a Windows based phone so I can actually work with it.  I’d have to pry my wife’s IPhone from her hands with a crowbar, but we’ll see what options come out before I even suggest it.
  6. RIA – I think this is a year away from being Prod ready, but there’s definitely power there, and something I want to play with in 2010
  7. WCF Data Services – Ditto above
  8. Learn JQuery - I was supposed to do that this year, didn’t make it.

My technical reading list has been fairly vacant the last few months as I put the finishing touches on my novel “The Forgotten Road” and the sequel “Nowhere Home”.  But with the release of VS2010 coming up in the 2nd quarter of 2010, I expect that the list will fill back up.  Here are some of the titles I’m looking forward to reading:

Introducing .NET 4.0- with Visual Studio 2010

Pro C# 2010 and the .NET 4.0 Platform, Fifth Edition

Pro ASP.NET 4.0 in C# 2010, Fourth Edition

Professional Application Lifecycle Management with Visual Studio 2010

SharePoint 2010 as a Development Platform

Pro SharePoint 2010 Solution Development- Combining .NET, SharePoint, and Office

I should also be able to blog more often.  Most of the NDA’s I’ve been working under will expire with the production release of Azure, so hopefully I will have topics to write about that are both timely and interesting.

Happy Holidays!

Tuesday, December 15, 2009

ACER 1420P - Another Review

After using this PC for a few weeks now, I have the following thoughts.

1. The screen is so freakin glare prone that it's almost unusable while commuting with overhead flourescent lights on the train. I mean, you eventually get used to it, but it's like a railroad spike being slowly driven through your brain. You can't find a position for the screen where the view is still good, and the lights aren't right in your eyes.

2. I really dislike the keyboard. I'm not the greatest typist in the world, and the sharp edges on the keys really catch my fingers and make bad typing worse. Combine that with the really small cursor keys in the right hand lower corner, and navigating a long Word document is pretty painful.

3. I still get occasional character repetitions for no apparent reason, despite having turned down the character repeat speed in the configuration significantly, to the point where if you are using the aforementioned cursor keys, you have to wait almost a second for them to repeat, and by then, you've gone past where you wanted to go.

4. On the plus side, I love the weight and the battery life. Definitely better than my Toshiba U405.

5. I haven't tried to make use of any of the advanced features of the system, partially because I don't want to spend any more time staring at that screen than I absolutely have to.

Based on the monitor, and the keyboard, and the fact that I never use the Touch screen, I would never buy this machine for myself or my family, and really miss my Toshiba, though I would probably buy the Toshiba T-135 if given a do-over. Maybe in the new year.