Saturday, October 31, 2009

Cursing you and insulting your mother

So I started with this:

The only thing that can make a program user-unfriendly is if it's cursing you and insulting your mother. Otherwise, it's merely unintuitive, and that's a factor driven by unfamiliarity with the paradigm.

Too long...I need it down to 140 characters. Try this:

A program isn't user-unfriendly unless it's cursing you and insulting your mother. Otherwise, it's merely unintuitive, and that's a factor driven by unfamiliarity with the paradigm.

Still too long. How about this?

A program isn't user-unfriendly unless it's cursing you and insulting your mother. Otherwise, you're just not familiar with its paradigms.

Still too long. One more try...

A program isn't user-unfriendly unless it's cursing you and insulting your mother. Otherwise, you just don't know how to use it right.

Ok, that's short enough, but it's kinda clunky, and could be more succinct.

Unless it's cursing you and insulting your mother, you simply don't know how to use it.

Not what I was trying to get across...

Friday, October 30, 2009

D&D, pics, inspiration and scheduling philosophy



I happened across Pixdaus while following someone's friendfeed, and I subscribed to it's RSS feed.

It's a fast, fast RSS feed, and it's difficult to keep up with. However, I've been trying...A lot of what I've been seeing in it has been giving me genuine inspiration for settings, encounters, props and even campaigns for D&D. That, along with a blog post I recently read where the DM's roleplaying the giggling of some minor monstors got her players greatly and emotionally engaged in the combat. Roleplaying monster sounds? Why didn't I think of that? That could give me something about the combat side of things that I could enjoy.

It's sparked my interest in DMing again, and I'm slowly assembling a campaign in my mind. The next step is finding players and a suitable environment; GrandLAN, for its rich perpetual presence of players, was normally too noisy or cramped for comfortable play. I'm tempted to do hold it in my basement, where I can use my TV and sound system for still imagery and auditory props, but then I've got to worry about who can make it and when.

I still think that a "regularly scheduled" game is a bad approach. You can either count on a schedule, or you can count on the presence of players. Not both. Also, having variable time between games offers more opportunity to prepare and ensure an enjoyable session. I don't have a need to kill time; Like anybody else, I have precious little of that already. I have a desire to enjoy the game.

Drug User's guide to tokenizing a string

std::vector<CString> tokens;
int iToke = 0;
while (iToke != -1)
    tokens.push_back(list.Tokenize(_T("n"), iToke));

This sounds like fun.

Copied and copied and copied... here we go: Leave ONE WORD (in the comment section) that you think best describes me. It can be only one word. No more. Then copy and paste this on YOUR page so I may leave my one word about you.

Wednesday, October 28, 2009

Pinging

One of the more frustrating things about ping.fm, and pinging to multiple services (four for blogs, five for <140 char), is that people don't typically see the replies given them by people from the other services.

For example...Yeah, I know about water*. I've gotten that suggestion on at least three of the five services, I haven't checked one of the remaining two, and the other of the remaining two doesn't get any comments.

* I've been drinking a lot of it, especially after having quit caffeine. Right now, drinking the amount required to deal with the "hunger" would wash out an awful lot of water soluble vitamins.

Tuesday, October 27, 2009

On the subject of instructors...

I was just reminded of one of my favorite instructors in college. The class was titled "Performance Studies," and she was tough. The first day of class, she went on about how every one of us was going to have to get in front of the class and perform, how if we didn't have the assigment on-time, it was a zero, etc. etc. She was scary, and she meant every word of it.

Next class session, about half the students didn't show up; They dropped. They didn't want to do the work. Those that remained were either calling her bluff, or they were willing to do the work.

She wasn't bluffing. Though her tone softened, her policies didn't. We did the work, or we didn't get the grade. More dropped out, and most of the rest of us started enjoying the class more and more. By the end of class, there were fewer than ten of us left.

I've got some of their email addresses somewhere; I created a mailing list for the HU273 students for that session.

Oh, the instructor's name was Billie-Sue Berends.

Saturday, October 24, 2009

Star Trek

@coderjoe: "What does God need with a starship?!"
@kilocmdrlinn: "I was surprised you didn't get that reference."
@coderjoe: "I got that reference, I thought you didn't get it."
@mikemol: "Oh, come on, you guys couldn't remember the name of that movie for weeks."
@coderjoe: "We remembered it was The Undiscovered Country, we couldn't remember the number."

@kilocmdrlinn, @mikemol: "... ... BWAHAHAHA!"

Friday, October 23, 2009

Unobtainium

@coderjoe: "Wait. The Arcadia was just dragging along the ground there. How does it still have that mast?"
@coderjoe: "Oh, right. It cuts through the ground."
@kilocmdrlinn: "Right. It cut through rock like butter. It's made of not-gonna-break-this"
@mikemol: "Unobtanium"
@kilocmdrlinn: "Not unobtanium, unbreakable. You can't get in anywhere."
@coderjoe, @mikemol: "... ... BWAHAHAHA!"

@kilocmdrlinn: "Mike's got to record this sh*t. These nights are hilarious."


Consider it done. :)

Tuesday, October 20, 2009

Ok, for the last time. (Hopefully)

I run Windows at work. I code Windows apps in native-code C++. It's what I get paid to do. I currently run Linux at home, on pretty much anything with an x86 processor.

I love using Linux. I don't hate Windows. I can't give you specific reasons why any more.

If you're already a Linux desktop user, and have admitted that publicly, then there's a fair chance you hate Windows. That's your business. I really don't care.

You may or may not like using Linux; It's up to you to try it and find out for yourself. If you want, drop me an email and I can probably answer some general questions, and possibly where to find the answers to more specific ones.

You may or may not like Windows. It's up to you to try it and find out. If you don't like it, I don't need to know why.

Yes, Windows has its faults. Microsoft has its faults. Linux and all its distributions have their faults. If you want to expend your energy hating one of them, that's your business. I really don't care, and I'd rather not argue about it; Too much of both communities are full of fanboys and reactionaries against hype, and I can't argue against emotion.

Which text editor should you use? Whatever you're comfortable with. Which distribution should you use? Whatever you're comfortable with. Which programming language should you use? Whatever you're comfortable with? Which shell should you use? Whatever you're comfortable with. GNOME or KDE? I think you should see the pattern by now.

If you don't have experience with any of them, there's nothing for you to do but try it and see what fits.

Rosetta Code TODO list.

Things I need to do soon for Rosetta Code:

* Go through MediaWiki extensions currently in use, update. Remove any extensions not needed.
* Update MW itself.
* Update blog software.
* Build a list of simple maintenance tasks, and suggest a domain-specific language to control a bot that automates them.

Monday, October 19, 2009

Review of Ergo Proxy

I somehow managed to write this without any significant spoilers. Odd.

I finished watching Ergo Proxy this weekend.

Let's get the mundane bits out of the way first. Yes, Ergo Proxy is expensive to buy; It's produced by Geneon, whose always had a rather high price on their US sales. After watching EP, I'm starting to wonder if that's more due to the quality than trying to charge Japanese rates in a US market.* EP was a good buy for me, and it's probably going to be one of the earlier series I'll pick up on Blu-Ray when it becomes available.**

Artwork? Superb. Sterile environments look sterile. The very clean and safe appearance of Romdo dome public areas is simultaneously stifling and disturbing in its own way. Non-public-eye areas look gritty and dark.

Sound track? One of the absolute best ambient soundtracks I've heard. It supports the mood, but doesn't set it. It's also a massive pleasure to listen to on its own; There's very little in the middle or upper ranges, most of it is heard in the lower ranges, or felt, if you've got a subwoofer. If you listen carefully, you can pick up on the thematic melody common to several of the songs, the melody of the series itself, maybe.

Character development? Yes! The character development of Vincent Law feels staid and stagnant in a few ways, but they manage to explain that in the last two episodes. The character development of Re-l Mayer may seem slow, but that's primarily because there is an active component in the world holding her back, and when that component is removed, she begins to grow. Slowly at first, but then very quickly.

Theme? It has so many themes it's difficult to note all the important ones. I think there are at least three core themes to the show.

The question of the raison d'etre, the settings very literal interpretation of the meaning of life. Everyone in Romdo already knows their raison d'etre, their "truth", and it's knowing their raison d'etre that gives them a sense of place and duty. After all, if you know the meaning of life, why wouldn't you fullfill that meaning? One of the themes of Ergo Proxy is examining and questioning the importance of that raison d'etra, and even the importance of that questioning. If your mind isn't spinning, hold on.

The second core theme would have to be the question of reality. (mild spoiler) Several attacks against the core characters involve altering of perception, trying to break the characters' logic or emotions and to trick them into doing things that would be detrimental to them. Usually, the viewer themselves isn't even informed of this right away; We're left to be as lost, shocked, angered and confused as the main characters. If the character sees through everything, and avoids destroying themselves or the party, we find ourselves releived. We've just been through the same mindbender that the character was put through, and in some cases left to wonder if we would have made the same mistakes that the character made.

The third major theme is the question of the soul. What grants a soul? What are the consequences of having a soul? How might gaining a soul conflict with one's raison d'etra? In Ergo Proxy, having a soul is considered analogous to having emotion, or to having lost one's innocense. Much of the show revolves around the question of gaining a soul, be it human or AutoReiv, what one does when they lose their innocense, and the choices they makes as a result.

Even through all of that heavy thinking, there is a shining suggestion of hope. That it only takes very few benevolent individuals to save humanity, even if it takes them time to discover what that is.

I loved it. It wasn't "Awesome" in the Michael Bay sense. It wasn't awesome in the Incredible Suspects sense. It wasn't awesome in the Pixar sense. It was awesome in its own way.

* Anime in Japan tends to be incredibly expensive to buy on DVD.
**And it will; As long as someone is a licensed distributor in the US, some series will continue to be released in newer formats. After all, you can still get the African Queen on DVD. BD (or some other format that matches contemporary televisions) will be part of that cycle.

Friday, October 16, 2009

This one's pretty cool...



I've been seeing a bunch of things lately that have been giving me an itch to start DM'ing again, with mood enhancements. Prop photos like these make it seem even more interesting.

Thursday, October 15, 2009

Beeen a long while since I've done one of these.

Can you fill this out without lying? You've been tagged, so now you need to answer all the questions HONESTLY. Copy this entire message, then go to “notes” under tabs on your profile page, paste these instructions in the body of the note, delete my answers, and type yours. Easy peasy, lemon squeezy!


1. What was the last thing you put in your mouth?
Belgian waffle with blueberry and whipped cream

2. Where was your profile picture taken?
Dining room

3. Can you play Guitar Hero?
No

4. Name someone who made you laugh today?
Haven't yet.

5. How late did you stay up last night and why?
About 12:30. Watching video on my laptop.

6. If you could move somewhere else, would you?
I don't know. My two closest friends are in GRR, and I'd hate to leave them behind.

7. Ever been kissed under fireworks?
No. I'll do one further...It's been about four years since I've kissed...

8. Which of your friends lives closest to you?
Cojo, I think.

9. Do you believe exes can be friends?
Only if they're portable. However, if they manifest certain dependencies, all bets are off.

10. How do you feel about Dr Pepper?
Tastes meh.

11. When was the last time you cried really hard?
First week in September. Same day profile pic was taken.

12. Who took your profile picture?
I did.

13. Who was the last person you took a picture of?
I don't know; See my cosplay set on Flickr. Order by date taken. Figure out who it is.

14. Was yesterday better than today?
It's 9:42AM. The day is still young.

15. Can you live a day without TV?
Easily.

16. Are you upset anything right now?
As I said, the day is still young...

17. Do you think relationships are ever really worth it?
Absolutely/

18. Are you a bad influence?
It depends on what you think of as bad.

19. Night out or night in?
Usually in.

20. What items could you not go without during the day?
Either a camera(and batteries,card space) or a computer.

21. Who was the last person you visited in the hospital?
My grandmother.

22. What does the last text message in your inbox say?
Something about having paid my cell bill.

23. How do you feel about your life right now?
Like it's a bubble ready to burst.

24. Do you hate anyone?
No.

25. If we were to look in your social networking inbox, what would we find?
I don't know. I don't look at it often myself. I think there are 15 or so "unread" messages.

26. Say you were given a drug test right now, would you pass?
Depends...Is it a chemical-based test, or a communication-based test? Yes to the former. I'll just have fun with the latter...

27. Has anyone ever called you perfect before?
No.

28. What song is stuck in your head?
It's a Beautiful Morning.

29. Someone knocks on your window at 2:00 a.m., who do you want it to be?
I lack the social circle and suitable imagination required to be anything but shocked and disturbed by the concept.

30. Wanna have grandkids before you’re 50?
I'm 26, and I'm starting to think it's unlikely I'll even have kids before I'm 50.

31. Name something you have to do tomorrow?
Move a TV and sound system to an area in the basement. Better-contained sound means more effective volume.

32. Do you think too much or too little?
Yes.

33. Do you smile a lot?
Yes.

Monday, October 12, 2009

Another major component to self-organization completed

So the second major component to my organization system has been completed. The first was having a maintainable common place for keeping and finding papers; That was as simple as putting everything in plastic sleeves in three-ring-binders*. The second was having a maintainable common place for keeping and finding miscellaneous cables, adapters, components and other odds and ends.

I managed to do the latter in a space eighteen inches by thirty-seven. Here are the pics that illustrate how.

The next step is format-shifting all my CDs and DVDs so they're playable from my computer, and then I can put those in boxes and out of the way. After that, it's just a matter of continuing to put the laundry and trash into their correct places.

* No explicit organization there, just keeping them findable and browseable is sufficient, and has worked well over the past few months.

Saturday, October 10, 2009

And he slides to fail plate.

My new motherboard has some odd quirks. Like not being able to boot from SATA optical drives. And not being able to automagically boot from USB flash drives.

Instead, I had to tell the BIOS to emulate a hard disk interface for the USB flash drive, and then I had to remove the in-system SATA disk drive from the boot options, as it would bump the SATA disk to earlier in the boot attempt order. (And, apparently, that disk had an old GRUB MBR on it, so the BIOS thought everything was peachy keen...)

So I wound up eventually booting from the flash drive and installing my OS, with boot, root and swap partitions, and then it was time to install grub.

Wait a second...grub requires addressing based on the BIOS device listing order, and the device listings were currently out of whack because of an emulated disk and a temporarily-attached IDE disk.

I looked at grub's device.map, moved things around to how I thought the BIOS would map them after I removed the flash drive and IDE drive, and proceeded.

Ultimately, I rebooted, grub found my kernel (meaning I'd guessed the mappings correctly), and then...kernel panic.

I'd told grub that the root filesystem was on the swap partition.

Friday, October 9, 2009

A ballad of Rest.

This story beings,
late one night
At a little bar,
under dim light
I was feeling kinda itchy
And I wanted to make a request

So I knocked on the door
Guy looked at me
And I said, hey, it's Clem
Can't you see?
I've come to spend some money.
And he said
Four oh one.

So I stepped back
Grabbed my cell
Called a friend
Sweet little belle
Figurin' I'd treat that as a three-oh-five.

Few minutes later
Coulda' been ten
A "five oh four"
Is what it'da been
That door opened
Guy said "two hundred"

So in I walked
Smokey and dim
Sat down, looked around
And that was when
I saw a great little gal

I flagged her over
Gave her a tip
Asked her home
She bit her lip
Glanced around, and said "four oh two"

I was a bit startled
This wasn't my night
I looked around
Saw her pal
And I steeled myself for a fight

I said "five oh three"
She said "two oh six"
I said "four oh six"
And she threw a fit
That's when her pal made his way down.

He looked at me
Said "four twelve"
I looked at him
Then said, "well
I don't figure you'd take a three-oh-seven"

He grabbed my shirt
Said "five oh one
and you sir
are gonna be less one"
And he threw me across the room.

I landed on my feet
I was two hundred
But this situation
I'd two oh one'd
Was being two oh two'd
By the people in the room.

I looked around
I had three hundred.
First guy to move
I three oh one'd
Three oh two
Shouted "three oh three!"

Then I saw him
A clear three-oh-four.
I was quaking in my boots
Wanted three-oh-five
But tonight he was four oh four.

Things were gonna one-oh-one
But that was when
The lights turned out
And I four-ten'd
Thankful for the three oh seven.

I made my way home
My brain five-oh-three'd
And at my front door
Who did I see?
But that sweet little belle
And she was happy to see me.

She took me upstairs
Treated my wounds
Chastised me for my tastes
I fell in love
With a different three oh two.

I popped the question
Got a two oh two
Then I asked again
Got a two oh six
Again a while later,
I got a two oh one.

So we got married
And we had a kid
The story goes on
But one day I caught him with
A computer. And a half dozen programs.

I asked him, "Son,
What is it
That you want to become?"
And he said
"That's easy, pa!
A web designer!"

Well, I guess life is stranger
Than the stories inspired
'Cause that little boy
With all his desires
Wanted nothing more
than to code all day.

I looked at him
A twinkle in my eye
And I said, "Son,
I reckon this is why
God made the world this way."

Wednesday, October 7, 2009

The pain of "X is cheap"

There's a common assumption when developing on computers. "RAM is cheap", or "Disk is cheap", etc.

Certainly, it's cheaper than it was ten years ago. It's sure as heck cheaper than it was twenty years ago. But that doesn't make it cheap. For the idea I'm trying to plant in your head, there's no such thing as "cheap."

For something to be cheap, it must be affordable. For something to be affordable, there must be resources (i.e. money) to meet its requirements*. Since entrepreneurs have any of a various value of resources ranging from some number in the millions to as low as Zero dollars, that means that regardless of how cheap something is to one entrepreneur, it will be on the edge of affordability to others, and out of reach to still others.

So I suggest that making things more affordable (by way of reducing their inherent cost, not by subsidizing them), is not a goal that should be shrugged off just because some component of the inherent cost "is cheap" to get.

The other side of the argument might be that "if the entrepreneur can't afford something, then they need to fix their business model." Well, yeah, if their goal is to make money, then they should be continually improving their process of making money. That doesn't mean that the things they depend on should be allowed to lapse and become inefficient; If the tool can be more efficient then it poses a lower inherent cost. Ideally, an entrepreneur ought to be able to shop around and find a more efficient tool, but that's rarely an option for all of his tools. One tool may already be at the peak of potential efficiency, while another tool might have so many other perceived advantages that its inefficiency may be overlooked. Such as having an operating system with a massive base of available software, a programming language with a massive base of available libraries, or a software publisher that targets a demographic that buys on a whim.

As an anecdotal example, I'll bring up Rosetta Code, which is my own site. Recently, it came subject to a relatively massive sustained increase in traffic (several times its normal level), due to one of its pages becoming a hot item in StumbleUpon. The tiny 256MB Slicehost slice I was using simply didn't have the resources, despite my already having set up all practical caching mechanisms. Many of the users were getting HTTP 500 errors due to timeouts between Apache and fcgid. HTTP 500 errors aren't very descriptive so I changed the configuration over to mod_php. The default configuration of mpm_prefork allowed up to 250 clients to connect, and a process would be spawned for each of those clients. Each one of those processes tends to eat about 20MB of RAM, so with 250 clients being actively serviced at 20MB each on a virtual machine with 256MB of RAM, well, we were about four and a half gigabytes short. And then there's the database that didn't fit in memory as it was.

So I moved over to Linode, where I could get a better price/MB for RAM, took paints to configure and tune MySQL and Apache, and now the site runs fast enough that I can't overload it from my home internet connection. Yes, my MySQL configuration needed improving, and that improved performance.

But I want you to think about something...Why did Apache have to spawn a separate process for each client? Well, that's easy; I was using mpm_prefork, where that's the behavior by definition. But why was I using mpm_prefork? Because the PHP packages wouldn't allow me to use mpm_worker**. And why was that? Because the PHP core (or some of its possible extensions) isn't thread safe.*** Granted, coding in a thread-safe fashion is non-trivial for most coders of today's skill and/or experience, but I might go so far as to argue that there is very little about developing programming languages and their engines that is non-trivial to begin with.

I'm not writing this to criticize PHP specifically, I'm writing this to criticize a common theme behind problems it shares with many other programming languages and other software; It assumes X is cheap. X might be CPU. X might be RAM. X might be disk (though for disk not to be cheap in the context of web service languages, you're working in some fairly niche environments.)

In short, PHP is expensive in ways I hadn't sufficiently planned for, and its expense caused major issues for my site.

I believe what I'm describing is known as part of the "barrier to entry." What tool developers often forget is that while their tool may have all these cool dohickeys, whiz-bangs and context menus, those features will nearly invariably come at a cost that makes it more difficult for their potential customers to afford their product, either in the sense of purchase, or in the sense of execution. Even if they remember, I seriously doubt they think it's a major problem. "They need to fix their business model" is the resounding response I hear when one company or another industry complains that costs are too high, and that's why prices are as high as they are.

I already agreed that business models should be continually tuned and improved. What about the people who can't get into an industry because of the high barrier to entry? What about the industries that haven't been invented because the requisite tools are too expensive? The cheaper the tools you make, the more your tool can be abused to do something new or invent something new by someone who you weren't planning on trying to sell it to.

* And, no, I don't think there's any practical way of escaping that short of a shift in perspective so radical I haven't heard it yet.

** mpm_worker gives each client to a separate thread. Granted, the per thread heap allocation (which would have been most of it) doesn't go down, but code and data common to all of the threads needn't be loaded into multiple processes. (Granted, Linux may map shared libraries into one place in physical memory and put it in each processes's address space...But I' don't know.)

*** Of course, the obvious followup is "Why were you using PHP?" ... That's because I'm using MediaWiki. And if you want to critique me for using MediaWiki, I'll likely agree with your critiques, and be very happy to have a long discussion about why I continue to use it. (Please, feel free to do so; My primary reason is a lack of suitable alternatives, and any discussion I have with you may spark an alternative into existence.)

Tuesday, October 6, 2009

Ponytail and beard

I've had questions about my ponytail, and questions about my beard. Here's a pic that has both.

Profile

Monday, October 5, 2009

CDs

Victim: "Looks like I need to pick up some CDs"
Me: "Oh, great! How about some Aerosmith, some..."
Victim: "I meant for the company"
Me: "Ok, how about a three-month rotation?"
Victim: "I mean *those*" *points to a spindle of CD-Rs*
Victim: "Man, that was stupid of me"
Me: "What, using an acronym around me?"
Victim: "That too."

Saturday, October 3, 2009

Going to try to quite caffeine

So I've been irritable, angry, frustrated, stressed, bitter, impatient, unhappy and generally unpleasant to be around for the past several months, and it's grown worse in the last couple months. Part of it is workload, part of it is other stressors, but one likely significant factor has been that to cope with things, I've slept less, consumed more caffeine, and socialized even less.

There are a number of things I'm going to do to work on turning things around, but one significant one is going to be changing what I drink. I haven't drank sugared beverages for years, but I've generally drank caffienated ones, and this year switched things into higher gear with diet Mountain Dew instead of my normal diet cola, and consumed a greater volume of such syrup-formed goods in general.

I'm going to try cutting all of that out. I might allow sugar-sweetened drinks once in a while (the Sobe drinks are pretty good; My two favorites are the Green Tea and Lava flavored ones), but not often. And if you think it's hard finding a variety of diet sodas at restaurants of various types, try finding diet sodas without caffeine there.

I'm also looking at other "natural" remedies such as eating better and ensuring consumption of certain vitamins. (No, I won't be going on a vitamin B binge like I did with vitamin C before AWA. I would note, though that my roommate and carpooler for that trip got knocked out sick for a week and a half while I've been merely stressed out.

Quitting caffeine is going to be tricky. I already know I have a dependency; I get nasty headaches if I don't have any for a couple days. (And the only other kind of headache I occasionally get is dehydration) Started having one again Friday. Took an aspirin and it went away.

By George, I think I've found it!

So, yeah, the problem definitely appears to be my mainboard. Memtest results:

Memtest results 1

...And a more animated version:



(Facebook folk try here: http://www.youtube.com/watch?v=J31ut0Bhv8w)

That's after about three days of running memtest. If it had been a RAM fault, memtest would have counted the error and continued. If it had been a CPU fault, it likely wouldn't have rebooted when I hit escape. (After it rebooted, it launched straight back into memtest, and that's running currently.) And if it had just been the SATA controller portion of the chipset, the fault probably wouldn't have registered at all.

So it's time for a new mainboard. I'm looking for something with two 16-lane PCIe slots, a 2GBx4 arrangement of PC1066, and support for the Phenom 9650. And it ought to be able to stand running with less than a couple hours down-time per month. Everything else is pretty much secondary.

Friday, October 2, 2009

Thursday, October 1, 2009

SATA

Need recommendations for SATA controller cards. I don't plan to use their built-in RAID functionality. I need at least eight ports, but I'd be happy with two four-port cards.

Expected configuration will include two or three hard drives, and five DVD-ROM drives. Alternate solutions including fan-outs for the DVD-ROM drives would be welcome, as well. Trying to spend less than $150 on hardware hardware here; When I want hardware RAID, I'll spend on a decent card.