A lot has changed in web development in the last twenty years. Prepackaged goodies like jQuery and Bootstrap speed development of the look and feel of your website. The HTML standard has evolved over the years, allowing webpages to serve vastly different kinds of content that years ago would have been impossible without plugins. And then there are content management systems, which do what they say on the tin.
Some things stay the same though, like the need to timestamp your stuff. Every Facebook post, every Tweet, every article on your favorite news site, they all have the date and time on them so you have an idea of how fresh the content is. And so did every one of my web pages back then. The implementation was certainly different – whereas now everything’s a record or a document in a database that has a timestamp associated with it, back then I was working with static HTML files with no content management. So if I wanted to say when a file had been updated, I had to do it manually. That’s assuming I even remembered to do it at all.
Rather than do it the analog way, I looked at alternatives. Javascript was the first attempt:
document.write(document.lastModified);
But this presented a problem – technically, writing the last modified date to the document is itself a modification of the document, so the result is always the date and time that the browser renders the page. Useful, but not informative.
Then I looked at server-side ideas, specifically CGI scripting. It isn’t terribly complex, and writing a program in C to power a website in 2017 would be a pretty hilarious thing to do:
But it’s overkill, and I also don’t know C well enough to go down that path without spending a bunch of time looking for help online.
So, I found another option that gives me the server-side capability without writing and maintaining code: server side includes!
<!--#echo var="LAST_MODIFIED" -->
It’s a single tag, it does exactly what I want it to… but with one hitch: the date is reported in a time zone local to the server, and I’d reeeeeeally rather it report the time in GMT instead. Just a preference of mine. SSI tags don’t give me that option out of the box, but I can go back to my first attempt: Javascript can read the output from the SSI tag, parse the date, and spit it back out the way I want it to!
function lastUpdate(dateTime)
{
var updated = new Date(dateTime);
return "Last updated: " + updated.toUTCString();
}
document.write(lastUpdate('<!--#echo var="LAST_MODIFIED" -->'));
The result is what I want, a timestamp that automatically updates itself when I make a change to an HTML file, and reports the time in the time zone I want it reported in. Not bad!
[Historical note 2021-03-31: Publish date approximated]
The number nine is an interesting one. The Chinese associate the word’s pronunciation with the pronunciation of another word meaning longevity. To them, it’s an auspicious sign. On the other hand, the Japanese shy away from its use on room and floor numbers because its pronunciation “ku” resembles the first syllable in the word “kurushii”, which translates to pain, agony, suffering and hardship. When I lived there, I was in apartment 110, and my next door neighbor was in 108. There was no 109. Multiply 9 by any number from 1 to 10, and the sum of the digits in the result will add up to 9. A curiosity for the mathematically-inclined, but I’ve been told in some ancient cultures the number was taboo for always showing up everywhere anytime you did basic arithmetic.
We started finding blood on the floor in various spots around the house in late August. As my cat, Waters, and I were sojourning at the house until I could get living arrangements sorted down in Lincoln, that left five possible sources between three humans and two cats, so at first we weren’t sure whose blood it was. A short investigation revealed that the source of blood was none other than Sidney, the old lady who at the age of eighteen was older than all of us by a mile, once you took into consideration that she was a cat.
Eighteen years is a long life for a cat. The last few years had seen her gradually slow down, sleep more, lose some of that mobility that allowed her to survey her territory from any perch she liked. But she seemed to be doing well in spite of general old age and the odd ailment, so the hope was that she would at least make it to Christmas for one last hurrah with the whole family in town. We crossed our fingers and took her to the vet to find out what was wrong. At first, the vet figured it was a simple bladder infection, nothing some antibiotics and painkillers couldn’t fix. Christmas would indeed be within reach, and if we were lucky, she might even see the thaw of spring. Either way, we’d know more after the regimen of antibiotics had run its course.
The laundry basket became her hideout of choice in the final weeks.
The laundry and pantry occupy the same space in the back of the kitchen. We normally keep the door closed, lest our four-legged family member stage a raid and we end up with cans or boxes or bottles or jars off of the shelves and onto the floor. The door was left open one day, and I walked in to find Sid curled up and asleep on a pile of clothes in the laundry basket. She had picked the perfect spot to camp out – away from the daily traffic of humans and the ever inquisitive and playful Waters, always cool, always dark, mostly quiet. And along with her gradually came all of her things. Her food bowl was placed just outside the basket. Her litter box eventually found its way in there too, once it became too difficult for her to make the trip downstairs. The once-forbidden section of the kitchen had become her living quarters.
The weekend after I moved down to Lincoln, I went back home for dinner and got the progress report.
The antibiotics and the painkillers seemed to be working at first. Sid stopped passing blood and the light in her eyes returned. But the infection was actually more than that, and just as soon as she started getting better, things took a turn for the worse. Ultrasounds had revealed a growth in her bladder. The vet began prescribing the kinds of things you prescribe when managing the pain overtakes treating the condition as the top priority. Months had become weeks, and the rules were simple – life would carry on in as close to normal fashion as possible, but we would not prolong things that didn’t need to be prolonged.
A tablespoon of food and a dose of painkillers.
When our mouse Snowball died in 1987, I was too young to understand what it meant. I remember he had a lump in his leg and that made it hard for him to walk. I remember standing out in the yard with my dad and my younger brother and being told to say goodbye to him. His body was balanced on a spoon, and when we said goodbye, we lowered him into the hole dad had dug out for him, and that was that. I probably went back to watching He-Man afterwards like nothing had happened.
When our dog Penny died in 2006, I was too absorbed in my own world to notice. I knew that incontinence, arthritis and loss of sight were all taking their toll on her quality of life. She howled when the house was empty. But I wasn’t there when the family put her to rest. I just remember visiting the house one day and noticing that there was a box on the mantle, with her collar resting on top.
Nor had I been around for the death of three grandparents in the last six years, although I did make it to two funerals. Those particular experiences were difficult for me to assign an emotional value to. As anyone who grew up in a military household can attest to, moving around every so often and never living within easy reach of extended family members can make relationships tough to establish or maintain. I know people who have lived in the same area their whole lives, and to them the thought of not having aunts and uncles and grandparents and cousins around was completely foreign to them.
So I had a strange relationship with death. I knew it existed, and we had crossed paths a couple times, but I had managed to remain at arms’ length for thirty-three years. Nevertheless, when my parents told me the end was coming soon for Sid, I said I wanted to be there. It seemed oddly fitting that my first meaningful experience with death was going to be on account of a twelve pound ball of fur that generally didn’t have much use for me when she wasn’t hungry or didn’t want a lap to sit on or a scratch under the chin.
I got a text two days later asking me to call home. In our family, a request for a phone call usually carries a certain significance. Mom would always text to ask about the day-to-day stuff – what I am cooking, what kind of trouble Waters is getting into, whether I’m working or playing video games on a particular night or weekend. We all lead busy lives and value each others’ space, so calling just to say hi isn’t something we do a lot of. Before I called, I briefly considered the possibilities. Something happened to one of my brothers in the Army. A relative on the east coast was ill. Dad was in a car accident. Things like that. But I think I knew all along that it was going to be about Sid.
And so, on the ninth day of the ninth month, I called home. My suspicions would be confirmed – Sid’s health was deteriorating. She didn’t have months, and she didn’t have weeks. She had days. The blood returned, the pain management stopped managing her pain, she began eating less and suffering more. She refused lunchmeat, previously a highly sought-after snack. The roller coaster, having completed its ascent, was plunging in the other direction at break-neck speeds. Mom told me that the decision to put things to an end had been made, and she asked me to keep things under wraps until the week was out and my brothers could be given the news.
Looking out the window on the final car ride.
Sid was always smart enough to know when something was happening. When the luggage came out, she knew someone, or possibly everyone, was going away for awhile. When the kennel came out, she knew a trip to the vet was in her near future. Everything should have felt amiss to her on that last day. Life hadn’t been great the last few weeks. Tear-streaked faces became more commonplace. Dad was home from work that afternoon. Then I showed up. Then dinner came an hour early, without her even having to pester mom. Then we wrapped her up in a towel and piled into the car, completely skipping the ritual of trying to get her into the kennel along the way. She stood up in dad’s lap the whole way, looking out the window at the things we passed by. It was her first time riding in a car like that – unrestrained, free to move about the cabin. I marveled as I drove the four of us to the clinic at how, through the pain and the painkillers and the uncertainty of the situation, she retained her curiosity. I wonder if she knew something was going on. I wonder if she knew this was her last trip.
The wait in Exam Room 9 lasted for what seemed like years. We took turns holding Sid one last time, and waited in silence after the techs moved her to the next room to insert a catheter. I paced the floor, peeking through the window into the back area to see if Sid was on her way back. Finally, the vet arrived and explained how she would carry out the procedure and what would happen to Sid in the final thirty seconds. She gave us the option to leave the room, and we declined. I can see where people would be coming from if they didn’t want to be in the room to watch their pet die, but I wonder if it’s better for the pet to be in the arms of loved ones in those final moments, rather than being tended to by a stranger and wondering where their humans have gone.
Sid and dad
Those who are old enough to remember what it used to be like to wait at the departure gate at an airport know the rush of emotion that overwhelms you when the final boarding call takes place and you have to get your last goodbyes with your loved ones in before the gate closes.
Mom was always openly emotional, crying at the ends of books and movies or when one kid or another would head off to college or move out. And as for myself, I’d already gone to the tissue box a couple of times. I had held myself in check the whole week, but the reality of the situation hit home when I saw that we were being taken to Exam Room 9.
Dad, on the other hand, looked stable. He never let us kids see him in his moments of weakness. In an earlier stage of my life, I wondered if that side of him even existed at all – and that made it difficult to understand him at times. As time marched on, the misunderstanding turned to respect for what must surely have been the strength and willpower it took to be the source of level-headed thought and rational reasoning in the din of everyday life. I watched him hold it together when he spoke at the funerals of both of his parents. His speech was deliberately paced, punctuated by long pauses. You couldn’t tell if he was fighting to keep his emotions boxed in or simply measuring his next sentence. I tried to imagine if I would be able to muster that amount of strength, and my conclusion was that I wouldn’t.
But when the final boarding call came for Sid, he broke. For the first time in thirty-three years, I saw him cry.
Dad held Sid as the vet administered the dose of salvation through the catheter. Sid, being propped up on her hind legs, curled her head into his chest. I stroked her tail and watched as it swished one last time and came to a stop. The vet checked for a heartbeat, told us to turn the light off when we were done saying goodbye, and left the room. Dad stood there for the longest time, holding on to Sid and rocking her back and forth.
Then through the tears, he said simply, “she just went to sleep, right here”.
The three of us lingered for awhile, then rested Sid on the table and turned the light off on our way out.
Sid
On the afternoon of September 11, 2013, with overcast skies and rain showers and the specter of the anniversary of the World Trade Center attacks hanging over the day, the number nine and its myriad associations took on yet another meaning for us. The longevity of eighteen years and the suffering of a few weeks had come to an end. The journey of Sidney’s nine lives was at its conclusion.
Death and I came to terms that afternoon. I learned who had the upper hand, who would outrun whom, who would win in the end. I handled things in the way I think is consistent with the march of technology and society – not quite liveblogging the death of a loved one as NPR’s Scott Simon did in the last remaining hours of his mother’s life, but still with a camera nearby and some brainpower reserved for framing the little details in the context of a story to tell others later – details like the stubborn recurrence of the number nine.
I have, over the course of the last ten years, relied on this website to serve as a personal sounding board whenever I’ve needed catharsis or to talk myself through problems or difficult choices. I formulated this particular post on the long, sad, silent drive back home after Sid passed on, and spent the rest of the night writing it. I thought it helped, and the next morning things were fine. But as the hours trudged on through the day at the office, I found myself absent-minded at meetings and needing to disappear from the view of others several times to pull myself back together. I came home that night and added more details and context to the post, stopping occasionally to watch as Waters joyously bounded from room to room, jumping from one perch to the next, tackling one toy mouse or another, occasionally stopping by her food bowl to reload or by the couch to visit with her human – a sure sign that things will return to normal one day.
When I moved into this apartment just a couple of weeks ago, I informally marked off a section of the living room wall as a section dedicated to the past. CDs, VHS tapes, and classic video games all line up on a media rack in that space, and hanging on the wall above are a picture from high school and a set of keychains an old friend gave me a long time ago. A picture of Sid now hangs on the wall, too – where she can keep an eye on Waters and myself, and where I in turn can continue to keep an eye on her, ever remembering the long hours spent watching TV as she slept on our laps, us kids howling with laughter as mom tried to chase her off of the top of a curtain rod, the midday snacks of lunchmeat and milk and the love affair with vanilla ice cream, chirping at the back door as birds flew by, and the story of how the runt of the litter picked us out at the pet store one spring afternoon in 1995 and graced us with eighteen years of love and joy.
Eyes glued to the microwave as dinner warms up, the way things always were.
The power supply – a beast by yesterday’s standards, but these days 750 watts seems almost ordinary. Nice thing about it is that it’s modular. Power supplies used to have a mess of cables coming out the back, and if you didn’t use them all you’d have to bundle the remainder up or find some place for them to go. Now, you use only what you need and store the rest in the box for later.
Incidentally, here is the bag all the cables came in.
The power supply, mounted in the bottom of the case. Another sign of the times – power supplies used to be mounted on top. The way air flows through a case, by the time it reaches the top-mounted power supply, it’s already fairly well-heated, and power supplies generate a fair amount of heat themselves. Now when warm air rises, it simply exhausts out the back.
Speaking of airflow and temperatures, why did I remove this massive fan from the top of the case? We’ll see in awhile.
ASUS P8Z68-V PRO motherboard. More than adequate for folks who don’t classify as extremely high-end, but not bargain barrel stuff either.
Serial ATA ports. This board supports adding eight hard drives (or seven hard drives and a DVD burner, or some other combination of the two), so it’s good for some of the more exotic configurations such as RAID.
The CPU socket (center) and RAM slots (lower-right).
The input and output ports that will be exposed on the back of the case. With onboard video, audio, networking, USB, and even bluetooth, it’s possible to run the entire setup just through the board without any extras. But where’s the fun in that?
The CPU socket, exposed and ready for installation. The gate folds back down and secures the CPU in place. One interesting thing about this particular socket is the pins. Normally the pins protrude from the bottom of the CPU and meet contacts in the socket, but here the pins come up from out of the socket and meet contacts on the CPU.
The underside of the CPU. This is an Intel Core i5-2500K. Like the motherboard, satisfactory for most folks who don’t need to be on the bleeding edge (and don’t mind cutting $100 here and there off of the price of their new computer).
The heat spreaders on these sticks of memory are entirely too aggressive-looking for a part that will never be seen while it’s in use. This is 16GB of memory. Quite a lot, if you think about it. It wasn’t that long ago that you couldn’t even find hard drives this big.
The CPU and memory are installed and ready to work.
This is a Corsair H100 CPU cooler. CPUs generate heat, and liquid cools better than air, which makes this a very interesting idea. The block sits above the CPU, transporting heat to the radiator, which is then blown off – through the top of the case – by a pair of fans. After a few days in service, I can say this thing does a really fantastic job of keeping the CPU cool when I put it through the paces.
The H100, installed.
The video card is installed. In the lower right (almost cut off) you can see the hard drives mounted in the bottom cage. I had three total – a solid state drive for Windows and some bare essentials, and two traditional drives for bulk storage. The SSD’s advantage is that it is much faster and much quieter than its elder siblings, but the drawback is that it’s significantly more expensive. As technology continues to advance, the older drives will probably no longer be needed by regular folks.
Here’s a shot of the computer, finally on its feet, with all the components installed and cabling run. The nice thing about this case is that the cutouts to the right and underneath the motherboard allow you to run cabling in such a way that it only exposes itself right in front of where you need to plug it in. This allows air to move through the case with fewer obstructions.
For reference, this is how the inside of my old computer looked. The case is much smaller and didn’t have many of the same amenities as the newer one does, so cabling kind of had to go wherever you could put it. That’s not to say the computer didn’t work, it was just a real pain to service and clean.
It’s been two and a half years since I last built a new PC. At the time I speculated that, having beefed up quite a bit on the components, I could get three years out of it. Turns out I was half-right – it’s still in service now and would easily make it to the three-year mark, but it’ll probably blow right past that. It handled Deus Ex: Human Revolution and a couple of other newer games this year without too much trouble, and handles the demands I put on it for work just fine as well.
Still, I’m in a position to be able to upgrade and can conceivably play the “graduation/Christmas present to myself” card right now, so here we are. The first shipment showed up in the mail over the weekend, with the remainder on its way in tomorrow. So here are a few pictures of the case to start.
A look at the front and left panel of the case. I picked this one because it’s one of the few cases left in the world that doesn’t look like a UFO just landed. No multicolored lights, no weird designs. Just solid black with straight edges. It’s also lighter than I expected, too – much more so than the Antec Sonata 550 I used in 2009. The Sonata itself was also pretty understated – solid colors, nothing flashy – but it’s also not big enough on the inside for the newer full-sized graphics cards.
The right panel and rear. Not a huge fan of the window in the side of the case, but it’s not that big of a deal. Notice the latches on the top of the panel. The case uses a latching system to keep the panels on, rather than screws. That makes it a lot easier to get in for maintenance. On the rear are a couple holes for water cooling systems, a hole in the top-left for running USB 3.0 cables out of (in case you can’t plug some front-panel USB 3.0 ports directly in on the board), and the power supply is mounted at the bottom for better control over the heat.
Here’s the case with the panel pulled off. There is an insane amount of room in here, so everything will go in comfortably. There is a generous-sized cutout for backplates in case someone plans to install a heftier heatsink-fan over the CPU, along with a number of circular rubber cutouts used for threading cabling out of the way of airflow. (In other words, the cable from the hard drive to the motherboard would disappear behind the panel and pop up in the cutout closest to where it would go on the board.)
A closeup on the cutouts. Some of them will only be available when you use smaller motherboards (notice the posts sticking up in the middle, that’s where the board would be mounted), but there are still plenty to go around for the larger varieties.
A closeup on the 3.5″ drive bays. Each tray is flexible and snaps around the drive, then slides and locks into the bay. Between this and the latches on the outside, Corsair did a really nice job of making most builds with this case a screwless effort. Having said that, for 2.5″ drives, particularly solid state drives, there are a couple of screw holes that you must use to secure them. The top cage can be relocated in case you need the extra clearance for a really long expansion card.
The front and top panels. The front panel flips down to reveal a reset switch, firewire, two USB 2.0 ports, headphone and microphone jacks, and two USB 3.0 ports. The cabling behind the USB 3.0 ports is long enough to go out the back of the case (through that hole in the upper-left) to be plugged into the rear USB 3.0 ports on the motherboards in the event that the board doesn’t have a lead you can plug directly into. The top panel slides back to reveal SATA connectivity. You can either plug a 2.5″ drive in, or the notch on the left side pushes down to support a 3.5″ drive as well. This may come in handy as a dock.
The sad and sorry state of gay rights in this country has been a bit of a pet peeve of mine for going on fifteen years now, ever since I learned a relative was gay. That day I learned a very important lesson in life, and my parents didn’t even have to say anything. Leaving hate out of their teaching of life’s lessons was enough. I basically right there figured – this person is just as good, just as loving, just as human as any other person I’ve met, and they’re not out violating The Golden Rule, so why come down on them over one detail that is infinitely more important, and certainly more personal, to them than it is to me?
I decided as a 16-year old that really hadn’t previously cultivated an opinion one way or another that homophobia was not going to be in the cards for me. Further, I had decided that homophobia in general was something I wasn’t going to view as simply “somebody else’s opinion” – not like competing political ideologies, or banter between friends who are fans of opposing teams in sports – but rather a brand of behavior that should be met with the minimum possible amount of tolerance. The recent passage of gay marriage legislation in the state of New York therefore was just as cool to me as the Mormon church’s apparent involvement in California Proposition 8 was reprehensible. Public policy should be a pay-to-play system, and churches that choose to involve themselves to the level that happened in that instance should have their tax-exempt status swiftly and permanently ripped out from under them. (But that’s another rant for another day.)
We all have our own problems, and it is a pointless waste of time going around trying to vilify everybody. But when somebody comes on with this nonsense that what ten million people do in the privacy of their own bedroom should be made illegal and forced out of society because it doesn’t conform to their personal beliefs, and then subsequently gets caught engaging in that activity – that becomes a source of entertainment as far as I’m concerned. Conservatives and religious types, perhaps in both cases as a function of their religious beliefs, seem to be the most frequent offenders in this regard. The brazen hypocrisy involved is what separates these folks from how a person goes 5 MPH over the speed limit but doesn’t harass or condemn the next person for doing it as well.
You had to figure, as is the case with anyone else who has ever dared to run for the president, that when Michele Bachmann declared herself a candidate for the Republican nomination for the 2012 presidential election, folks would go digging for some sort of dirt on her to undermine her viability as a candidate. Now, she has her own skeletons to deal with. For example, in spite of being a Tea Party hero, she doesn’t hate socialism nearly enough to refuse the quarter of a million dollars in subsidies her family farm has accepted. And then sometimes, as a function of having a vacuum between her earholes, she relocates the shot heard ’round the world to Delaware, or gets her John Waynes mixed up in feckless attempts to pander to voters – the sort of cheap trick normally reserved for professional wrestlers and singers in a band, purpose-built to score easy cheers from an audience, but she still managed to mess up anyway.
But what I find way more interesting is that it turns out her husband is operating some sort of “pray away the gay” clinic up in Minnesota, something she refers to as the family business. This place, billing itself as a counseling center, allegedly employs reparative (conversion) therapy – methods which have long since been disapproved of by the American Psychological Association – in some sort of effort to turn gay people straight. Like it’s some injury you can get physical therapy for, or some sickness you can get a prescription for. Here is a recent quote from Marcus Bachmann that fairly plainly illustrates what he thinks of gay people and why he thinks it’s his job to “help” them:
“I think you clearly say ‘what is the understanding of God’s word on homosexuality,’” Bachmann said. “We have to understand barbarians need to be educated. They need to be disciplined and just because someone feels it or thinks it doesn’t mean we’re supposed to go down that road,” he continued.
Other than confirming to me that Mrs. Bachmann and her husband both hold wildly irrational belief structures that makes both of them unfit to run a Dairy Queen let alone a clinic or an empire on the skids, the existence of this clinic is interesting because now apparently a bunch of people’s gaydars are going absolutely crazy when they see Mr. Bachmann in action. This guy either secretly plays for the other team or just convincingly acts like he does. In either case, when you have gay peoples’ gaydars going off – that’s a sign of something. There absolutely would be nothing funnier or more disruptive in this campaign cycle, which is already a sad and crazy circus, if folks’ suspicions turned out to be true and this guy were outed. Absolutely nothing. Mitt Romney passing healthcare legislation in his home state that is not all that different from the much-reviled “Obamacare”? Not even in the same galaxy. At least he was doing something productive!
I’m actually rooting for it just because I’d want to see how explosive it gets.
And now, perhaps because I’m examining Mr. Bachmann through the lens of suspicion that he might be gay, I find myself looking at everything he says and does and interpreting it as he were, and it’s providing some pretty funny results. Barbarians need to be “educated” and “disciplined”, you say? Sounds like…
Ohhh, you bad boy, you need to be taught a lesson! You deserve a spanking!
And of course, who could ignore the obvious – a secretly gay man running a clinic for gay people to come to? Sounds like an easy way to hook up.
It’s been a little over a year since Family Research Council co-founder, Southern Baptist minister, and all-around jackass George Rekers was caught red-handed on vacation with a male prostitute. And when Larry Craig, the senator in Idaho who voted against extending the definition of a hate crime to cover sexual orientation, supported the Federal Marriage Amendment, and expressed support for an Idaho constitutional amendment banning same-sex marriage, was caught engaging in “disorderly conduct” with an unsuspecting man in a public restroom – that was just exciting.
But what would be even better is a potential First Husband using the family business as a front to cover up some dirty little proclivities of his own. This guy is saying everything Larry Craig said and doing everything Richard Simmons does. Imagine the backlash if it were to turned out this week’s religious conservative darling, signer of the controversial “marriage pledge”, was abiding a homosexual in her very own home. Oops, did I say backlash? I meant hilarity.