Seagate – you’re doin’ me wrong – again…

Seagate – you’re doin’ me wrong – again…

So, after sending no less than two of my 1.5tb drives back from having died within 4 weeks of ownership – I get one of the drives back and I have horrific deja vu all over again – because it looks like this:

Yep – another drive in an open anti-static bag, one piece of foam (which means the drive was flopping around at the bottom of the box unprotected. AND the coupe de grace – it’s the WRONG drive.  The packing list shows I’m supposed to be getting a replacement $100 1.5 tb drive (they even list the serial number), but the drive is – and I kid you not – a $1200 HP fibre channel 1.0tb rack-mount drive including it’s mounting hardware.   If it weren’t for my good nature and the fact this drive is likely dead anyway – I would dump it on ebay and just buy new drives with the proceeds.  But again, sit for just under 1 hour on seagate hold, go through 3 layers of support escalation before they offer to pay for this drive to be returned and a new one express mailed to me.  Sigh.

Inconvinient little truths

Inconvinient little truths

Here are some things that make me angry/sad all at the same time:

1. Apple going green with aluminum cases.  This has nothing to do with being more ‘green’.  Exactly how is aluminum more ‘green’ than pot-metal (which can much more easily be recovered and remelted) they used before?  Aluminum refining and production requires terribly large amounts of electricity to produce.  But even more sad is that the *real* reason is to make your lap the heatsink.  That’s right.  Apple’s laptops have notoriously been running hot/overheating for years.  Numerous failures on various models – and complaints of people actually getting their laps burned.  I’ve experienced how hot they get.  Now they’ve thrown nVidia video cards in them.  They’re much faster than the integrated ones they had before (which were cr*p), but the nVidia cards run even hotter.  So, if you already have heat problems – how do you solve them?  You either add a fan (which Apple refuses to do) or make a bigger heatsink.  But if you want the same form factor and fanless design – you have one option – you turn the body of the laptop into the heat sink.  Problem solved – and you greenwash it and say it’s to be more ‘green’.

2. Online bill paying  – everyone is apparently concerned about the environment these days – but most of what they’re doing is complete bull.  I’ve noticed many different companies going paperless to ‘save the environment’.  Somewhat true as it does cut down on a LOT of paper and delivery impact; but mostly its a huge cost savings to them not to mail paper bills.  They save a fortune when you get your bill and pay online.  You can lay off all that staff to mail out all the letters, no paying for the paper/postage/etc, and nobody having to open those envelopes and enter check information either.  This is all good and fine, but the twist of the knife comes when they claim they’ll pass the savings on to you.  I don’t see any ‘discount because you paid online’ anywhere in my bill online.  It’s the same amount as the one that comes in the mail. Give me a tangable discount – or I’m just assuming you’re ripping me off and I’ll keep making you send the paper bill.

An additional benefit is if you set up automatic bill pay (ever wonder why they push it so hard?).  Reason is, if there is a billing error, or in the case of credit cards someone steals your account and runs up a huge bill, the money automatically gets pulled from your personal bank account.  What’s even better is that many cards have stipulations that if you pay the bill – you are agreeing all the charges are correct and you lose any right to dispute the charges.  You just waived all your dispute charges, and they could have just emptied your bank account.  Aren’t you glad you signed up?

Got any you want to add?

Why getter/setter functions are evil

Why getter/setter functions are evil

Interesting article on why you shouldn’t be using getter/setter functions on your classes when programming.

The lack of getter/setter methods doesn’t mean that some data doesn’t flow through the system. Nonetheless, it’s best to minimize data movement as much as possible. My experience is that maintainability is inversely proportionate to the amount of data that moves between objects. Though you might not see how yet, you can actually eliminate most of this data movement.

By designing carefully and focusing on what you must do rather than how you’ll do it, you eliminate the vast majority of getter/setter methods in your program. Don’t ask for the information you need to do the work; ask the object that has the information to do the work for you. Most accessors find their way into code because the designers weren’t thinking about the dynamic model: the runtime objects and the messages they send to one another to do the work. They start (incorrectly) by designing a class hierarchy and then try to shoehorn those classes into the dynamic model.

[update]
This spawned an interesting conversation with a coworker who was usually against such meta-designing of code (i.e. designing the design). His point was that folks usually spend too much time futzing around getting the coolest language features into something instead of writing the fast code that actually solves the problem and you move on.  Complexity breeds unmaintainability, delays in development, difficulty in using/extending, and longer time for bug fixes.

I agreed with him on those points – I hate overly complicated code.  Much as I have use them on occasion (for collections) – I argue that heavily templated C code is always an order of magnitude harder to figure out/debug/learn than just straight C++.  Good code is the code that not only gets what you need done correctly, but is easy to maintain, read, understand, and train others on.  And the point of this guy’s article echos that.

My take-away point is that to a way to avoid complexity and increase performance – design your classes such that data doesn’t move around.  Just as in engines, the more moving pieces, the more likely a failure.  So if you are just sending requests around instead of the data; you’re much less likely to have failures and I would argue your code will be cleaner, simpler, and faster.  In graphics (and many other apps) moving blobs of vertex or other data around is expensive and should be minimized as much as possible.  This is a good way to think about classes in order to help you do that.

Round 2 – FIGHT!!!

Round 2 – FIGHT!!!

Short version – Purdue makes it to the sweet 16.  Longer version is that I got to go to the game.  Even made a few cameo appearances during swinging shots (I’m over on the far right side – midway down):

What an amazing and fun game – and we got 11th row tickets this go around.  Lots of amazing energy – and I lost a good chunk of my voice in the outing.  Purdue fans were definitely in the minority with plenty of Washington fans driving down from Seattle – so what we lacked in numbers – we made up in volume.  The whole stadium was sold out – and it certainly showed by the numbers of folks outside trying to pick up last minute tickets.

Overall it was a great moment of re-living the college days.  Purdue Pete, the cheers, the band, the game itself.  What a way to spend a Saturday.  I hope Portland gets another chance to host the NCAA playoffs again.  Now on to the sweet 16.

NCAA March Madness rounds 1+2 in Portland – and I’m there!

NCAA March Madness rounds 1+2 in Portland – and I’m there!

Portland got lucky and is hosting NCAA playoffs in the Rose Quarter.  And I got lucky in that of all the teams to start their playoffs – Purdue was playing here(!)  So after working with a buddy with insider connections – I got 10th row tickets to Purdue’s round 1 and 2 playoffs for $55.

I went to Thursday’s playoff game – and it was great.  The Purdue band was playing and we were sitting right in the middle of the Purdue section.  We beat Northern Iowa – but not by nearly enough to make me happy about it. It was very surreal to bridge seeing my old college team, the band and it’s usual shenanigans, and hordes of Purdue fans – but in the Rose Quarter.  After winning against Iowa, our tickets also entitled us to stay for the Washington/Mississippi game.  We stuck around for half of it until it was clear WA would win, then we left before the masses and rush-hour converged on the stadium.  My buddy took pics of us at the game – I’ll put some up when I get a copy.

We’re on to play Washington on Saturday – and I’ll be there at the game as well.  I’m optimistic, but not convinced, of a win. Hope the black and gold gets some fire in it’s belly for this next game.  Washington is definitely playing with the energy of the home crowd.

Disneyland is quite fun

Disneyland is quite fun

Disneyland for free on your birthday is worth the trip.   Had a great time – as it was my first go – and it was the first chance for a day-vacation I’ve taken all year so far.

  

Going to Disneyland!

Going to Disneyland!

I’m in LA at a friends house right now, and after an enjoyable evening with an old coworker, I’ll be heading to my free Disneyland ticket Saturday morning.  That’s right – this year, on your birthday – Disneyland is free.  I’ve never been – so this should be quite fun.

Forgot my camera though – hope my buddy has one…

Open command prompt here….in Vista it’s ANNOYING!

Open command prompt here….in Vista it’s ANNOYING!

Just another way in which Microsoft just keeps breaking my productivity by making me fight their systems instead of making it easy to get real work done.  In XP – there was a handy “Open command prompt here…” Powertoy that allowed you to right-click on a directory/folder and get a command prompt at that location (no directory switching).  But no such luck on Vista.  Now add the pain of UAC and you need TWO kinds – “open a command prompt here…” and “open a command prompt here (in administrator mode)…”

Well, here’s how to have BOTH:

“Open a command prompt here…” (courtesy here)

  1. Open regedt32.exe/registry editor
  2. Browse to: HKEY_LOCAL_MACHINE/Software/Classes/Folder/Shell
  3. Change the default REG_SZ string to whatever text you want to appear in the right-click menu. (such as:“Open command prompt here…” without the quotes)
  4. Create a new registry key type within your newly created command prompt shell named “command,” and set the default string to:
    cmd.exe /k pushd %1
    You may need to add %SystemRoot%system32 before the cmd.exe if the executable can’t be found.
  5. The changes should take place immediately. Right click a folder and your new menu item should appear.

“Open Command Prompt here (admin mode)…”

  1. Same as above – open Regedt32
  2. navigate to/create [HKEY_CLASSES_ROOTDirectoryshellrunas]
  3. Set the default REG_SZ string for this key to “Administrator Command Prompt here”
  4. Add a new string value in the same same key called “NoWorkingDirectory” and make sure the string is set to “”
  5. Navigate to /create [HKEY_CLASSES_ROOTDirectoryshellrunascommand]
  6. Set the default string to “cmd.exe /k “pushd %L && title Command Prompt””
  7. Navigate to/create [HKEY_CLASSES_ROOTDriveshellrunas]
  8. Set the default REG_SZ string “Administrator Command Prompt here”
  9. Create another new string value in the same key called “NoWorkingDirectory” and make sure the string is set to “”
  10. Navigate to/creat [HKEY_CLASSES_ROOTDriveshellrunascommand]
  11. Set the default REG_SZ string to “cmd.exe /k “pushd %L && title Command Prompt””

Or open notepad on AdminOpen.reg and copy/paste the following into it (courtesy of here):

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTDirectoryshellrunas] @="Administrator Command Prompt here" "NoWorkingDirectory"=""
[HKEY_CLASSES_ROOTDirectoryshellrunascommand] @="cmd.exe /k "pushd %L && title Command Prompt""
[HKEY_CLASSES_ROOTDriveshellrunas] @="Administrator Command Prompt here" "NoWorkingDirectory"=""
[HKEY_CLASSES_ROOTDriveshellrunascommand] @="cmd.exe /k "pushd %L && title Command Prompt""

Unholy adventures in multi-terabyte land

Unholy adventures in multi-terabyte land

Between lots of other activities this weekend, I fiddled around with my three new 1.5TB drives.  It’s been years since I’ve felt like I took some sort of Apocalypse Now trip up the technological congo – but adventures in installing these drives has made me feel close again.  What awful adventures getting some wild combination of things working in tech-land have you had?

How about:

  • Getting more than 640k recognized in DOS on an IBM XT via a memory expander card (I had a 512k ram drive!)
  • Getting an 8-bit IBM XT to boot from a very specific Seagate ST351A/X IDE drive (the only IDE drive ever that could run on an XT)
  • Getting over 4gb of memory recognized (not hard -unless your motherboard has a bios bug that freezes the system up with four 1gb DDR2 sticks install -a bug I found and reported to Intel’s support guys…)
  • Getting windows media player to stop f*** waking my system randomly in the night to update the program guide.

But anyway, TerabyteLand wasn’t quite as bad as those – but installing these drives helped me relive those days a bit.  Long story short – don’t expect to boot from a volume over 2TB.  Now, I have hardware RAID on my motherboard with ample SATA ports (six hot-swappable) and hardware support for RAID 0, 1, 5, and 0+1.   My hope was to put all three drives in a RAID 5 setup for redundancy and read performance.  I could successfully create the 3.0TB RAID 5 set, but it was reported as not bootable by an ICH9 and ICH10 RAID controller.  After trying 2 other motherboards and digging around on forums, turns out due to current bios limitations.

MBR BIOS limitation to 2TB
Current BIOS uses MBR (master boot record) for drive support – and MBR only supports drives or partitions up to 2TB.  However, the new EFI (extensable firmware interface) specification is a BIOS replacement that removes this limitation by allowing the new GPT (GUID Partitioning Table) format that supports up to 18 exobyte drives/partitions.  So, in order to boot from a drive larger than 2TB, you need to have a motherboard that runs EFI (currently: Apple, Itanium, and HP-UX boards), and drives formatted with GPT.  So at the moment, that means not much love for Windows world.  You can create GPT partitions in Vista SP1 – but just not boot from them.

So, that leaves only two options: run my OS from one of my existing 750GB drives and then have the remaining 3.0TB in a second set as RAID 5, or put two drives in RAID 1 for the OS (mirroring for fault tolerance and read speed) and leave the second drive alone for DVR storage.  I went option #2 – but I hate the fact I can’t just have one big bucket of bits.  I HATE secondary drives that exist simply because of these stupid limitation.  At least I’m not alone.

Still, even doing this was painful.  Vista had trouble recognizing the drives when I first plugged them in.  You had to format them with AHCI first, then switch the bios over to RAID and set up the volume – then vista could install to them.  Weird.

Any of you set up a large bootable volume like this in Linux?