80’s car tech was awesome…in my dreams

I had a very vivid dream last night.  No, not THAT kind of dream.  As dreams usually go, I’m a little fuzzy on the details, but it started with my being in some sort of warehouse parking lot.  Someone was with me very briefly and he pointed to a car sitting there in the shade of the building, telling me to check it out.  It was a bright tan color; I can’t think of a thing to compare it to other than sand.  It had round headlights and chrome hubcaps, giving it a distinct 60’s to 70’s feel.  It was not a long car or a gunboat like a Lincoln or Cadillac; it was short and stocky like a Dodge Dart.

I walked closer to it and could see the logo on the fender; written in shiny italics like the cars of the day, it said “Pineapple.”  In my dream, that meant something, because I remember being all “ooo, it’s a Pineapple.”  I somehow became aware that it was a 1987 model (despite its retro styling); I think maybe I looked at the paperwork in the glove box.  Then I went around to the driver’s side and sat down.  I don’t remember a thing about the interior other than that the dashboard was the exact same shiny tan color, and there was no steering wheel.  It wasn’t missing like it had been removed; there was no place for one.  There were a couple of push buttons labeled “1″ and “2″ on the lower left, and some other sort of control that I don’t remember just above them.  On the right was a “Start” button, which I pushed.  The car started right up.

I don’t know how I got it in gear, but suddenly it was moving.  I remember thinking how cool it was; this car could steer itself!  Only belatedly did I realize that I didn’t know where it was taking me.  Suddenly the car was inside the warehouse, driving into a corner very slowly.  I panicked, worrying about scratching the paint on this collector’s item.  The owner was going to kill me!  I started looking for a way to steer it or turn it off; there was nothing.  It slowly creeped forward into the corner until it finally met the wall.  The wall was made of blue corrugated metal and it started to bow out a little bit from the pressure of the fender; then the car stopped.  I was relieved, but worried about how much damage I had done to the Pineapple.

Then I woke up.

A new notebook: the search begins

For various reasons, I’ve decided that it’s time to start thinking about a new laptop for the web business.  It would make presentations a lot easier; my current laptop is getting long in the tooth and can be slow to start.  Yesterday I embarrassed myself by having to wait 2-3 minutes for the thing to boot, only to have to fuss with the screen resolution in order to get it to display properly on the provided projector.  (Note to self:  boot the machine before going into the room.)  No big deal, but when you’re standing in a room full of potential clients talking technology, it doesn’t help your pitch any.

What to look for in a laptop?  I’m obviously mulling this over already, so I might as well share my thoughts for criticism and laughs.  I realize that the perfect system probably isn’t out there, and some of my requirements are a little bit contradictory.  But, this is the feature set that I’m hoping to come away with (in no particular order):

*Average screen size and reasonably light weight.  I don’t want a 10-pound behemoth.  However, I DO require a reasonably standard size keyboard, and the screen has to be big enough to work on when necessary (code, presentations, whatever).  This is the first of several requirements that will rule out pretty much all of the “netbook” class.

*Fast processor, preferably 64 bit.  I don’t really have a stunning argument for 64 bit other than the fact that it can address 4GB+ of memory, where 32 bit can’t do more than 3GB or so without tricks.  I’ve been successfully using 64 bit on my desktop in the home office, so I’m not too concerned about compatibility or what-have-you at this point.  Which leads us to item no. 3.

*At least 4GB of RAM.  I don’t like to wait.

*Large hard drive; the bigger the better.  Waaaay back when I got my current laptop, it came with a 60GB hard drive, and I thought that would be all I’d ever need for the life of the laptop.  Ha, ha, stupid me.  Plus, I’d like to dual boot it, so I’ll need plenty of space to comfortably support both systems.  That’s right, dual boot…I want to run Ubuntu on this puppy, too.  That is what I run in the home office and I’m happy with it, so I’d like to stick with it.  However, sometimes Windows is required for various projects, so I need access to it, as well.  Yes, I could run Windows in a VM on Ubuntu (or vice versa), but I prefer to run natively for the time being.  Item no. 5 will give you a clue as to why.

*External VGA support.  I’m certainly not a seasoned road warrior and I don’t do presentations every day.  However, I do them fairly often these days and have hooked up to a few different projectors.  I have seen one or two that have DVI inputs; I have never seen a projector with HDMI, though they may be out there.  Without fail, though, every projector I’ve used has had a VGA input available.  So, I need one of those, or a conversion to it from something else.  What does that have to do with running Windows natively (see item 4)?  I’ve read a few horror stories here and there about people trying to connect to projectors with their linux laptops while the whole world watches.  No doubt that has improved in past months like everything else in linux, but I don’t want to find out the hard way that I can’t light up a potential client’s projector.  So, I need that Windows safety blanket.

*Plenty of USB connections and preferably a serial port, though that’s not an absolute necessity.  Obviously, Ethernet and built-in wifi are gimme’s.

*Widescreen LCD.  I can work on a 4:3 display if necessary, but more real estate is better.

*Long battery life.  It’d be nice to be able to do a presentation without having to worry about power adapters or available outlets.

    So, there you go…I want a humongous widescreen laptop with desktop-level performance and features, full connectivity and long battery life, all weighing less than a sheet of paper.  Is that too much to ask?!?

    HTML: Sometimes “correct” just isn’t worth it

    It is widely understood and accepted in the upper echelons of web design that tables are not to be used for layout purposes.  The only time tables are “allowed” is for exactly what its name implies:  tabular data, such a train schedule or a table of figures.  For anything else, tables are semantically incorrect.  There are several good reasons for this (and a few priggish ones).  The internet is rife with explanations and arguments both ways; I won’t repeat them here, but I will provide one link just to whet your appetite.  There are many more, but this one is at least entertaining.

    What do we do instead, you ask?  We use div’s and CSS, for the most part.  In a very simple example, this:

         < table >
              < tr >
                  < td width="40%" >
                      stuff
                  < /td >
                  < td width="60%" >
                      more stuff
                  < /td >
              < /tr >
          < /table >
    

    Becomes this:

          < div id="left" >
    
              stuff
    
          < /div >
    
          < div id="right" >
    
              more stuff
    
          < /div >
    

    (spaces added for formatting purposes)

    The div’s are supported by CSS that configures their positions and sizes:

    #left {width: 40%; float: left;}

    #right {width: 60%; float: right;}

    There’s actually more to it than that; gutters, padding, margins and the like have to be dealt with as well, but you get the idea. If you add other div’s, things can get even more complicated. But, designing in such a way allows for a lot of great tricks and advantages over stodgy old tables.

    So, I always try very hard to stick to that convention: CSS over tables. However, on one recent project I ran into one of the big problems with this approach. It turns out that, because the div’s in the example above are not tied or linked together in any way, their heights are also independent. This means that, if the content is longer in the “left” div, its height will be greater than the “right” div. This causes a lot of problems in layouts with background colors or images; users want clean edges, not a jaggy bottom edge that changes every time the content does. We want this:

    Not this:

    Tables don’t suffer this problem, because the elements are all tied together by the table’s framework.  In tables, all of the elements are spatially related.

    There are a few different fixes for this problem, all of varying degrees of complexity and success.  There are both pure CSS fixes and Javascript fixes.  In my experience, though, these can get very hairy or fail altogether with nested div’s or any other complex design choices…they’re very finicky.  Everything has to be just so.

    I spent a good deal of time trying to get these fixes to work on the project in question.  I added javascript, made jQuery calls, dinked with the CSS and on and on.  Nothing seemed to work like it should.  I finally had to take a step back and ask myself what my options were; how was I going to fix this problem so that I could move on with the rest of the site?  After all, this was a relatively silly problem; it was a dime holding up a dollar, as my boss is fond of saying.  That’s when it dawned on me…I knew how to fix the problem.  Screw semantics, let’s use a table.  I scrapped my containing div’s and CSS floats and all of that, wrapped the content in a simple two-column table, and bam!  Equal columns, just like that.

    Now the howling will begin.  There is no doubt a non-table solution to my problem; I just need to spend the time to find it.  But, like many grunts in the trenches, I really don’t have that time–I need to move on and finish the project.  If that’s selling out, then so be it.  Am I happy about it?  No way.  Do I accept it?  You bet.

    So, there you go.  Next time around, I will still try my best to use the CSS approach.  In fact, this is the only time it’s ever stumped me.  I’m not willing to throw the baby out with the bath water and ignore good practices, but I am willing to make informed compromises.  That’s one of the things the working man has to do:  know when to let it go.