The Original Slashdot F.A.Q. (Circa 2006)

On my author website, I have a Slashdot page with an old joke: “There are 10 kinds of people on Slashdot. Those who see my picture, go back to Slashdot and leave a comment, ‘You’re a fat retard.’ And everyone else.” If you know binary, “10” is actually “2” in decimal. That page was actually a pale imitation of a longer Slashdot F.A.Q. that I had back in 2006. The purpose of these pages was to have a signature link for my website in my Slashdot comments. Twenty years ago, a signature link would have generated 3,000+ clicks from Slashdot (enough to crash a web server via the “Slashdot effect”). Ten years ago, 300+ clicks. Today, 30+ clicks. Slashdot is just a pale imitation of itself these days. While sorting out some old electronic files on my file server, I came across the files for the original Slashdot F.A.Q. from 11 years ago. Reproduced below with some minor editing.


C.D. Reimer in 2006
C.D. Reimer in 2006

I frequently read and comment on Slashdot, a techie news discussion website. Because of the quality of my posts and my article submissions, I’m a highly rated commentator and moderator. I occasionally catch the attention of trolls (Anonymous Cowards). This F.A.Q. answers some of the questions that I’ve gotten over the last several years.

Why are the fat-loving /. retards after you?

Since my homepage link is visible when I post comments on Slashdot, fat-loving /. retards visit my website, see my picture, and go back to Slashdot to leave a comment to insult my appearance. There are several different commentary and/or personality styles.

  • “wow u r fat” — Might be a 14-year-old wanker who never graduated from nursery school and doesn’t know how to use more than seven letters.
  • “I bet you run out of EVERY color trying to draw a self-portrait don’t you fatty?” — A slightly more intelligent 14-year-old wanker.
  • “Hey here’s a joke for you, you fat tub of monkey shit.” — This 14-year-old wanker needs some serious mental help.

The typical fat-loving /. retard thrives on putting people down at every opportunity. The best method to deal with them is to call them out on it. They are like peacock-strutting bullies until someone gets into their face and they run away like the anonymous cowards that they are.

Are the fat-loving /. retards correct that you are “morbidly obese”?

The technical definition of morbidly obesity is being twice or more than your ideal body weight, all forms of dieting has failed to work and suffering from negative health effects. I weighed 400 pounds as a teenager, which was twice my ideal body weight according to doctors at that time. After I got a bicycle for my sixteenth birthday in 1985, I rode all over the county and lost 70 pounds of weight that summer. My riding weight was 325 pounds for 20 years. I then gave away my bicycle and I went to the gym. After a year of weight training, I’ve bulked up to 375 pounds, found it difficult to buy 4XL t-shirts at the stores, and let me weight drop down to 350 pounds. Except for seasonal allergies, I suffer no negative health effects. So, no, I’m not morbidly obese. But there are still plenty of people who love to argue with me on that point.

Isn’t the fat-loving /. retards correct that you’re fat and ugly?

I’m fat and ugly. So what?

Don’t the insults from fat-loving /. retards get on your nerves?

Not really. After living with the nicknames like “Titanic” at school and “Tortuga” (“turtle” in Spanish) at a restaurant job before I started my technical career, and being called everything else under the sun by my mother, it’s very hard for anyone to come up with an original insult that would offend me. Since I’m improving my physical health by dieting and exercise, nobody can say anything that will discourage me or hurt my feelings. One of the things about working out is that you become more confident about who you are as a person. The fat-loving AC /. retards go after me because I have something that they don’t have: confidence, self-respect and a willingness to change.

I saw your Slashdot signature: “Only fat-loving /. retards drool over my website pictures. Perverts.” How come there’s no fat porn on your website?

Sorry, I’m not running that kind of website.  Go find your fat porn somewhere else. Pervert.

Napping After Work Like My Father

My father always had dinner and fell asleep in his recliner after he came home from his construction job. A few hours later he would wake up, watch TV and go to bed at ten. Sometimes he would just take NyQuil and go straight to bed after his nap. Every morning he would get up at 5:30AM to start his day. He did that for 50 years. When I worked with him in construction for a few years before going to college, I followed the same pattern. Construction work was hard work. After starting my technical career 20+ years ago, I’ve never took naps after coming home and having dinner. Cleaning out IT storage closets wasn’t hard work. With my 48th birthday this week, I found myself becoming more like my father.

My technology job that pays the bills isn’t a physically demanding job. I get up at 4:30AM to get ready for work, take the express bus into Palo Alto, and start work at 7:00AM to catch up with the East Coast. Most of the time I’m pulling down spreadsheets with the latest Nessus scans, consoling hurt workstations and fixing broken users. Whenever I have downtime between tasks, while running scripts, or attending virtual meetings, I play with the trolls on Slashdot. After work I take the express bus home, have dinner and work on my side business — writing, publishing and promoting — until I go to bed at nine. I’ve done that for three years straight.

Something changed a few months ago. I started coming home, having dinner and taking a 90 minute nap in bed. I’ve never acquired the ability to sleep semi-upright in a recliner. The last time I fell asleep in my recliner was when I had my wisdom teeth pulled and my cheeks swelled up like a puffer fish in 2008. My father often slept in my recliner when he was working in town or visiting for the holidays. When he passed away from throat cancer five years ago, he died at home while sleeping in his recliner in front of the TV.

Maybe it’s the summer heat. My office is so cold that I have to wear a sweater for the entire day. When I step outside to wait 15 minutes for the express bus, I’m wilting like a flower in the heat. The AC on the express bus runs at full tilt, making it colder than my office. Once I get off the express bus, I’m walking home — and warming up — in the heat. These sudden temperature swings aren’t good for me. Taking naps is a good way to recover from that.

Or maybe it’s losing a pound per week. When I first got my digital bathroom scale, I weighed 370 pounds. I now weigh 357 pounds after 13 weeks. I’ve always felt the need to take a nap after working out at the gym on the weekends. The last time I felt this good physically was in my twenties when I rode my bicycle 100+ miles per week and my riding weight was 325 pounds. While my typical weekday isn’t as physically demanding as my weekend workouts, perhaps my body during the week requires nap time to build muscle and burn fat.

Or maybe I’m just getting old. I’m no longer the young person who can bound up the stairs with four loads of laundry in two baskets. I’m content to do only two loads at a time, making the extra trips to get everything done. My beard has gone snowy white; my brown hair is graying out. Something that didn’t happen to my father until he turned 55 and started demanding his senior citizen discounts at restaurants. Taking naps is just an indicator that I need to slow down and not be in a hurry.

Becoming like my father always scared me as a young person, mostly because I didn’t want to grow old and face my own my mortality. Now I’m accepting it as a necessity of life, a road map of what to expect in my middle age. One nap at a time.

Losing Ten Pounds With A Digital Bathroom Scale

I’ve always told people I weighed 350 pounds for the last ten years despite working out at the gym and being on a low-carb diet. That wasn’t entirely true. The analog scales at the gym maxed out at 350 pounds and thunked past 350 whenever I got on. The thunking stopped three months ago. One scale said I was 345, another scale said I was 335. It didn’t help that different scales couldn’t agree on the same number. So I got a digital bathroom scale that maxed out at 400 pounds. My weight ten weeks ago was 370 pounds. Today, it’s 360 pounds.

Analog bathroom scales in the past maxed out at 200 pounds. Since I typically weighed less than twice the maximum weight, I have never bothered to get one for home. Every once in a while a digital scale that maxed out at 400 pounds appeared at the gym. Everyone, of course, wanted a more precise number than what was possible with the analog scales. It didn’t take long for the digital scale to become uncalibrated and then broken from the constant use. The gym wasn’t planning on getting another digital scale any time soon, so I needed to get my own to monitor my weight more closely.

I ordered the Greater Goods Basic Bathroom Scale for $20. This model doesn’t have Bluetooth. I’m not even sure why anyone would have a Bluetooth-enabled scale. Might be worthwhile if an app had weight-specific commentary, say, “Oh, God, not again!”, where John Hurt reprise the chest buster scene from Alien in Mel Brooks’ Spaceballs. The one thing that surprised me the most about this scale that it was thinner than the current generation of the Apple MacBook Air. I expected to find a “Design by Apple in California” sticker on back. With a firm foot press on the center of the scale, it turns on and calibrates to zero. The white numbers on a blue background is very bright in the early morning hours.

My weight ten weeks ago was 370 pounds. It took a month of daily weighing to convince myself that the initial number was accurate and my subsequent weight loss of four pounds that month was real. I lost another four pounds last month and two more pounds halfway into this month. I now weigh 360 pounds after ten weeks. I’ve been told by a coworker who is a martial arts expert that losing one pound per week is a sustainable goal (see update below). My lowest adult weight was 325 pounds when I rode a bicycle 100 miles per week for three years. If I continue losing weight at this rate, I’ll be 325 pounds in January 2018.

Updated Monday, 24 July 2017: Not surprisingly, my critics went from “your diet and exercise program doesn’t work” to “you’re not losing weight fast enough” in their perpetual whining. In their warped minds, I’m a butter ball who should lose 10+ pounds per week. I did that over 30 years ago when I got a ten-speed bicycle for my 16th birthday, rode all over the county, and lost 70 pounds in one summer. I’ve ridden a bicycle for 20 years and worked out in the gym for the last 10+ years. My adult weight varied from 325 pounds (bicycle) to 375 pounds (weight training). I’m happy to lose one pound per week and watch my stomach shrink.

One critic challenged my coworker’s statement that losing one pound per week was sustainable. According to the Center of Disease Control (CDC):

It’s natural for anyone trying to lose weight to want to lose it very quickly. But evidence shows that people who lose weight gradually and steadily (about 1 to 2 pounds per week) are more successful at keeping weight off. Healthy weight loss isn’t just about a “diet” or “program”. It’s about an ongoing lifestyle that includes long-term changes in daily eating and exercise habits.

Like everything else with my critics, they will continue to whine because they have nothing better to do with their lives.

The Confessions of Slashdot Asshats

Several weeks ago I wrote about using the DMCA takedown notices to remove my picture from image websites that Slashdot asshats kept posting for shakes and giggles. What I didn’t mention then was that three users accounts — “criemer,” “creinner” and “cremier,” variations of my Slashdot username — got deleted by management, and I subsequently created new accounts with disposable email addresses to prevent the usernames from being reused. End of story, right? Not quite. An extraordinary set of events shortly thereafter caused another user account to get deleted by management that immediately ended three months of unrelenting harassment towards me.

Confession

After I announced in a comment that I’ve successfully taken down all my pictures from various image websites, two users, an Anonymous Coward (or asshat) and “FakeFuck39” (seriously), commented that they “found” more of my pictures in a search result that I failed to notice and provided a new set of image links. What was curious was the very first link had a posted timestamp of 15 minutes earlier. All the links were recently posted. While I copy and pasted a new round of DMCA takedown notices to email, “FakeFuck39” posted a confession about the three deleted user accounts.

those were buddies of mine. one from France, one from Israel, and one of them was from across the table from me. I don’t know who cdreimer was. We had fun for a week or two creating accounts and laughing at you, but posting bullshit on slashdot all day is not what we do, so unlike you we had our fun and stopped creating new accounts. That’s like asking where the basketball players are after the game is over on the playground. They’re at home with their wives in their big house moron.

An asshat confessed to being “cdreimer,” the user account that started this series of events at the beginning of the Memorial Day holiday weekend.

cdreimer was me… I don’t know who struck first, cdreimer or criemer, but I know you guys were a lot funnier than me!

I sent an email to my contact at Slashdot the next morning, pointing out the links to newly uploaded pictures and nostalgic confessions.

Escalation

Later that evening I got a comment posted by an asshat written in the same style as “FakeFuck39”:

your image is all over the internet now, under the filename fatloser.jpg, and a lot of it appears to be coming up on russian hosting sites. have fun “protecting it” -most people would want to hide if they looked like that, from shame of how low they sank. as far as whether it’s legal or not to create accounts making fun of you or spread an image you made available – yes, it is – and no, your opinion is wrong, nor does it count.

have you noticed no one fights your takedown notices? the game we had you playing was issuing notices after you did the first one for cdreimer. you’re Still playing champ.. Once you get the links posted down, we’ll send you the new ones. I gotta warn you though, the next batch had a little photoshop work done. you’ll love it

I sent an email to my contact at Slashdot and went to bed.

“FakeFuck39” commented the next morning with newly uploaded picture links. This was where everything tied together. An asshat promised Photoshoped pictures and “FakeFuck39” delivered the links to the Photoshoped pictures. Could we say that the two were the same person?

Deletion

I sent off another email to my contact at Slashdot the next morning. After lunch I got an email from management that “FakeFuck39” would join the other deleted user accounts. I periodically checked throughout the day to see if the account got deleted. When the “FakeFuck39” username became available again, I created a new account to the prevent from the username from being reclaimed by its former user. Unlike the other fake user accounts that got deleted, “FakeFuck39” had two years of comment history and the last three months focused on replying to my comments. The harassment that got started when someone falsely accused me of threatening to shoot them finally came to an abrupt end.

The asshats, of course, never went away on Slashdot. A dedicated group of Beavis and Butthead types are still replying to my comments for the last two weeks. They’re easy to ignore.

The Slashdot Asshat(s) Who Stole My Pictures

Last week I took back a Slashdot user account under my pen name with a DMCA takedown notice. The quick response by management scared the asshats into silence for 48 hours. A different group of asshats started harassing me towards the weekend. One of them posted a link to my 350-pound picture from my author website. When I clicked on the link and noticed that the picture was from May 2016, I replaced the image with a picture taken last month by saving to the same filename.  That provoked an angry response for not using different filenames. The response puzzled me until I realized that my jowls were puffier in the 2016 picture, the “ten-pound tire” around my neck that the asshats love to moan about. I then implemented a 403 (forbidden) rule in the .htaccess file to prevent the external linking of my images and created a Slashdot page with the 2017 picture on my author website. Those actions provoked even more anger. The retaliation was my 2016 picture appearing on image websites. Out came the DMCA takedown notices to protect my pen name and copyrights.

The first image website was Hosting Pics, a French-based picture website that U.S. law like the DMCA doesn’t apply to. I initially tried the contact form that appears dodgy (i.e., “Unable to find MySQL database.”), tried again successfully, and found a contact email address to send the DMCA takedown notice (just in case the contact form was dodgy after all). The email I got the next morning indicated that the source was the contact form, informing me that my picture got removed. Less than 24 hours later, an asshat uploaded the picture and left me a note in French“I think that’s it. Good morning, Heavy Barbara.” Another request got the picture removed the following morning.

Other locations included 4chan and Imgur. Both had email addresses for sending DMCA takedown notices. I got an email from 4chan the next morning that my picture got removed. Imgur didn’t send out an email notification but they did remove my picture the following afternoon.

An asshat pointed out that Google has cached copies of my pictures that will live forever on the Internet and there was nothing I could do about it. That comment made me laugh.

Google has a help page for removing images from the search results, especially deleted images that are no longer accessible to the web crawlers. By placing a 403 rule to prevent external linking to all my images, the search engine regards those images as deleted. A removal request gets those links out of the search results sooner rather than later. After 4chan removed my picture from their site, I put in a request to remove those links. With a half-dozen open requests, I should have the search results cleaned up in a few days.

I’m once again enjoying the calmness that comes from scaring off the asshats with my awesome powers as a content creator. The few asshats who are still around are sharing a link to my picture, but this time it’s the Slashdot link to my author website. The more exposure that link gets, the more web traffic and ad revenues I get. Since the brouhaha with the asshats got started three months ago, I made $80 in ad revenues as curious readers left Slashdot to visit my websites. As Warren Buffett once said, “When it’s raining gold, reach for a bucket, not a thimble.”

DMCA’ing The Slashdot Asshat Who Stole My Pen Name

I had running battles with the asshats (a.k.a., Anonymous Cowards) on Slashdot for the last three months, starting with the asshat who falsely accused me of threatening to shoot him, the asshats who claim that only “real nerds” making $200,000+ per year in Silicon Valley can read Slashdot, and the other asshats who hound me for being the fat retarded kid on the short bus. For some of these asshats, replying to my comments isn’t enough for them. They started their own comment threads without me, posting how I sucked my cock all day (this is what a $100,000+ university education gets you these days). I took all this in stride as success in life means putting up with all the haters. That is until I noticed a user account in my pen name, “cdreimer” (4974007), replying obscenely to my comments as if they were from me. This was no longer personal, it became business. At the start of the Memorial Day weekend, I filed a DMCA takedown notice to protect my pen name and, indirectly, my copyrights. This morning I “pwned” the account, “cdreimer” (4977441) — and silencing the asshats for a while.

My user account, “creimer” (824291), existed ten years before I started using my pen name for publication and prior to the Dot Com Bust in 2001. I never bothered to create a user account for my pen name as I didn’t consider Slashdot as a platform for attracting a literary audience. With the asshats hounding me day-to-day over my comments that drove traffic to here (my personal blog), Slashdot became a new ad revenue stream for my side business. I read and write my comments as I normally do each day, the asshats make an epic fuss, and curious readers click on my “homepage” to come to this blog and enter my somewhat broken marketing funnel for generating revenues.

Another reason for keeping my venerable user account is that I have accumulated 9,167 karma points (see the output below from my Python scraper script).

Pages Processed: 623, Comments (Accepted/Total): 9319/9336
Oldest Date: 2008-08-04, Newest Date: 2017-05-30
Scores  (9167) | -1: 76, 0: 384, 1: 6969, 2: 1004, 3: 400, 4: 328, 5: 158
Bonuses (1250) | Flamebait: 32, Funny: 298, Informative: 199, Insightful: 331, Interesting: 269, Offtopic: 47, Redundant: 11, Troll: 63
Total Time: 00:12:39.00

That was something that the asshat who created the “cdreimer” user account found out in short order. A new user, or “n00b” in the Slashdot vernacular, starts off with little karma. Moderators (mods) will reward karma points to promote (up vote) a comment or demote (down vote) a comment. Those karma points get added or subtracted to the user’s karma count. Too many negative comments will reduce karma to zero and restrict comment posting to twice a day. After a handful of negative comments, “cdreimer” got sidelined by bad karma. That, of course, prompted another user account, “criemer” (4975517), with the letters “e” and “i” switched around, to come into existence, starting this thread where asshats turned on each other as they thought it was me. When I pointed out elsewhere that it wasn’t me, I got called a liar.

Since I get up voted more than I get down voted each day, and I’m a lifetime away from ever having zero karma again, I don’t have to worry about the mods. If I was posting under “cdreimer”, I would have to cultivate karma points (or “karma whoring”) quite carefully for an extended period of time. Given my “rabid” following on Slashdot, I’m sure they will give me hell all the way.

I haven’t filed a DMCA takedown notice in years. Since I started publishing my ebooks in 2010, I would occasionally receive a Google Alert informing me that one of my FREE ebooks got posted in some obscure corner of the Internet. A DMCA takedown notice  was  easy to prove since I can point to my author website as the authoritative source for my ebooks. Over the last seven years, I’ve never had a DMCA takedown notice rejected.

Technically, a DMCA takedown notice doesn’t apply to user accounts. As an attention getter, a DMCA takedown notice is quite effective. I pointed out that I’ve used my pen name for ten years, the three-day-old “cdreimer” account got created for the express purpose of harassing me, and provided the nine comment URLs that my Python scraper script found. When the account got deleted this morning, I immediately created a new user account and posted a comment to prove that I own it now.

As I tried to explain to the asshats, this is business. I have an obligation to protect my pen name and my copyrights. If I don’t, they become worthless over time.

My “Complicated” Work History At Google

Although the asshat who accused me of threatening to shoot him for six weeks has faded away, other asshats are popping up to replace him on Slashdot. One asshat posted comments not to my comments but to the comments that I replied to, but I periodically rechecked older threads and respond to each of those wayward comments. Another asshat complained about my weight (I’m 350 pounds — think football player), my diet (daily calorie intake is 1,500 calories), and why I haven’t committed suicide yet (I’m too sexy die young). One asshat in particular kept misrepresenting my work history with Google in multiple comments, as if I struck a nerve by working at Google. And perhaps I did. Let’s look at my “complicated” work history at Google.

Most people have the erroneous assumption that Google hires only “the best of the best of the best, sir!” (Men In Black) from the leading universities around the world. That’s true for direct hires like engineers and managers. (But maybe not for long, according to Fast Company, as tech companies hire tech workers without four-year degrees to fill their ranks.) Direct hires are a small part of Google. Everyone else who works at Google are hired through vendors for different functions throughout the company.

After I graduated from San Jose City College with an Associate of Science (A.S.) degree in computer programming and made the president’s list for maintaining a 4.0 GPA in my major, a vendor hired me for what was my first of several assignments in 2007-2008. A different vendor would hire me for several more assignments in 2011-12.

2007-2008

I’ve worked in the Google IT help desk call center for seven months from 2007 to 2008. For the first three months, I was in dispatch and routing 300+ tickets per day to the call center techs, fields techs or other groups like facilities. I’ve worked in the call center for the remaining four months, assisting users when I can, opening tickets when I can’t, and doing whatever I can remotely (i.e., installing software, opening network jacks with the correct VLAN, or adding hostnames to DNS). Since the average Googler gains 26 pounds from eating the free food and move their desk every three months, this was a high-paced environment that kept me busy for eight hours a day.

Since the vendor I worked for lost the call center contract to the Indian firm that managed the call centers for Google in India and Europe, a group of us worked in inventory for a month before transferring to a new assignment at eBay. Google at the time hired 300+ people per week. We got shipments of hardware in on Friday and Monday, got everything unboxed and put away by Tuesday, spent Wednesday prepping 300+ systems to go out the door, and loaded up the vans on Thursday mornings for deployment. Before we could take a breather, the cycle started all over again.

As a reward for my brief stint in inventory, I got a Kensington backpack that Google used to give to their new hires back then. Nine years later I’m still using that backpack, now flaying at the edges and falling apart from working all over Silicon Valley.

The Great Recession

I worked at eBay for 13 months before I got laid off on Friday the 13th, February 2009 (my supervisor let me pick the date from a list). That was the beginning of my journey as 99’er in the aftermath of the Great Recession, spending two years out of work (2009-2010), underemployed for six months (working 20 hours per month at a moving company), and filing for Chapter Seven bankruptcy in 2011. When my bankruptcy got finalized in July 2011, I had $25 left in my checking account and a new full-time job at a different vendor to become the lead tech of a PC refresh project at… eBay.

One of the phone guys at eBay gave me a hero’s welcome: “Jesus Christ, if HR let this guy back in, they will hire anyone off the streets.” 

For the next two years (2011-2013) I would work seven days a week to re-establish my finances. I’ve worked over 30+ assignment for three different vendors that competed for my availability. I had a regular Monday-Friday assignment, and a weekend assignment that sometimes starts on Friday nights. Assignments that lasted a week or more went on my resume, shorter assignment that lasted four hours to several days I didn’t bother to keep track.

That would bite me in the ass in 2014 when the two-hour background interview for the security clearance at my current tech job lasted four hours because I had to list every assignment since 2007. Unlike most Fortune 500 HR departments, government investigators checked out every reference and requested credit reports from all three reporting bureaus. They were quite thorough.

2011-2012

When the PC refresh project at eBay had a six-week lull after the holidays, a different vendor offered a one-month assignment at Google to build out a data center. I started working at Google the day after Christmas in December 2011 and finished at the end of January 2012. Unlike my experiences from working at the call center and in inventory, we sat around waiting for parts — servers, switches, routers, twisted-pair and fiber optics cables, odds and ends — to arrive in the morning and spent the afternoon installing everything into the racks.

When the data center got done, the manager took us over to the Google Store to buy something up to $25 in value (I got a pair of Google running shorts) and we had dinner at Building 51 (the former nickname for a sports bar at the edge of the Google campus). I went back to eBay to finish the PC refresh project.

A few months later I would come back to do a one-week cleanup at the data center. Besides throwing out the trash, consolidating equipment on multiple pallets into fewer pallets, and sweeping the floor, I also had to verify that the port mapping info in the spreadsheet was accurate, remove decommissioned servers from the rack, and relocate severs around the data center. Unlike last time, there was no trip to the Google Store or Building 51.

Sometimes being “the best of the best of the best, sir!” at Google is just rolling up your sleeves to do the jobs that no one else wants to do.

Coaching VTA Bus Drivers Again

This morning I stood at the bus stop with the usual suspects waiting for the pre-dawn express bus to Palo Alto. It was five minutes late. We watched in amazement as the express bus drove past us across the street, coming from the opposite direction for the afternoon route. Before the bus could finish turning right on to Southwest Expressway to enter the loop-de-loop at Meridian Avenue and the 280, someone had the VTA customer service number on speed dial and started talking to a customer rep. We shook our heads. This isn’t the first time we had to coach the bus drivers on their new routes.

The Valley Transit Authority (VTA) in Silicon Valley rotates the drivers among the different routes every March and September. This week, the second full week of April and six weeks after the last rotation, some schedules got tweaked and new drivers started on the routes to my tech job in Palo Alto.

The local bus I take to pick up the express bus arrived two minutes earlier on the revised schedule, which meant I had to get out of my apartment five minutes earlier. Some drivers will arrive a few minutes earlier to avoid getting stuck behind the lights at the light rail crossing or take a break at the 7-11 at the next stop. New drivers on new routes are an unpredictable bunch, especially when sticking to the schedule.

The express bus tried to pick us again. Now ten minutes late. The driver probably had to go back out on southbound 280, swung up and around on Bird Avenue, and came back on northbound 280.  Still coming from the opposite direction by taking the Meridian Avenue exit instead of continuing on to Southwest Expressway. The onboard GPS should have given the driver precise directions for getting to this particular bus stop. If the driver is early or late, the GPS gives them a notification. The GPS either not worked or this driver ignored it.

The person on call to customer service got patched through to the driver over the radio. “You stay on that side,” he told the driver, pointing at the other side of the street. “We’re crossing over.”

A half-dozen of us ran across the empty lanes like East Berliners trying to cross the kill zone to West Berlin. The express bus veered across the lanes as if the driver was going to pick us up in the middle of the street, make a U-turn to pick us up from the other side, or just run us over for shakes and giggles. Some of us stopped in the middle lane to make sure that the express bus did stop before we cross over the last lane. We stepped aboard as if we were right on schedule.

Like most bus drivers running late, this driver put the pedal to the metal once we hit the freeway. When we quickly came upon the Page Mill Road exit, and still in the fast lane, people in the back of the bus started shouting directions. We cut through three lanes of traffic in a heartbeat. Once we were on Page Mill Road, the driver remembered the rest of his route. I arrived at my next bus stop to pick up the local bus with a few minutes to spare. Not surprisingly, a new driver learning the route with some coaching from the passengers.

 

The Python Time Zone Rabbit Hole

Thanks to the recent asshat controversy on Slashdot, and a fellow Slashdotter’s request for the link to the comment that prompted the controversy in the first place, I wrote a Python script to scrap my ~8,000 comments from Slashdot to dump into a spreadsheet for future reference. I’m planning to write essays about my various misadventures in Silicon Valley and my comment history is rich treasure trove of stories I’ve written over the years. While working on the script, I came across a programming rabbit hole for converting the timestamp string into a different timestamp string that kept me up for three nights.

The original timestamp that I extracted from each comment was a text string like this, “on Friday April 04, 2017 @06:03PM” (as it appeared on the website), and got written into CSV (Comma Separated Values) file just like that. After the initial script was working, I opened the 5MB CSV file in Excel to scroll through the data and see what I needed to change in the script. The timestamp string wasn’t in a sortable format. I had to change the timestamp into this format: “2017-04-07 18:03:00”. There’s two ways of doing this in Python: using a datetime object or slice-and-dice the string.

from datetime import datetime

def get_timestamp(string):
    return datetime.strptime(string, "on %A %B %d, %Y @%I:%M%p")

print(get_timestamp("on Friday April 04, 2017 @09:03PM"))

My first attempt (see code fragment above) was quite simple, using the strptime function for the datetime object to parse the timestamp string according to the matching format string (“on %A %B %d, %Y @%I:%M%p”). When I opened up the CSV file and compared the timestamp against the corresponding timestamp on Slashdot, the timestamp was correct except that the hour in 24-hour time was off by three hours. Every timestamps in the CSV file was off by three hours. I quickly learned that Python’s datetime objects are generally time zone unaware (or naive), and, in general, not very easy to use with different time zones.

def convert_timestamp(string):

    months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
              'August', 'September', 'October', 'November', 'December']
    month_number = {x: str(y).zfill(2) for y, x in enumerate(months, 1)}

    # remove "on" and split string into list
    string = string[3:].split(' ')

    # slice and dice into date/time components
    month = month_number[string[1]]                       # '04'
    day = string[2][:-1]                                  # '07'
    year = string[3]                                      # '2017'
    hour, minute = string[4][1:][:-2].split(':')          # '06' / '03'
    period = string[4][-2:]                               # 'PM'
    second = '00'                                         # add missing value

    # convert 12-hour time to 24-hour time
    if period == 'PM':
        if hour < '12':
            hour = str(int(hour) + 12).zfill(2)

    date_str = '-'.join([year, month, day])               # 2017-04-07
    time_str = ':'.join([hour, minute, second])           # 18:03:00
    return ' '.join([date_str, time_str])                 # 2017-04-07 18:03:00

print(convert_timestamp("on Friday April 04, 2017 @09:03PM"))

My second attempt (see code fragment above) was to slice-and-dice the timestamp string into the corresponding string values for month, day, year, hour and minute. The second value got added for completeness. If the period was “PM” instead of “AM”, the hour went from 12-hour time to 24-hour time. Date, “2017-04-07”, and time, “18:03:00”, are join together into one string, “2017-04-07 18:03:00” . When I ran the script and looked at the CSV file, the resulting timestamps was identical to the timestamps created by the datetime object.

Every timestamp was still off by three hours.

When I work on a website scraping script, I always save the scraped data into text files while refining the parsing and output sections to avoid re-scraping the website. That reduces the risk of my IP address being flagged by the website or firewall as a spammer and/or scrapper. The completed script will scrape, parse and write each page directly to the CSV file.

The slice-and-dice function converted the timestamp string as found in those text files. If I viewed the timestamps on the website, the timestamps are correct for the Pacific time zone. If I look at the timestamps in the text files, the timestamps were all off by three hours (“09:03PM” instead of “06:03PM”). So both the datetime object and slice-and-dice functions were working properly. The logical conclusion is the Slashdot server is located in the Eastern time zone and what I thought about the data was wrong. There lies the problem—and the solution.

from datetime import datetime
from pytz import timezone

def set_timezone(ts_str, tz_alt='US/Eastern'):
    ts_format, tz_def = "on %A %B %d, %Y @%I:%M%p", 'US/Eastern'
    tz_obj = timezone(tz_def).localize(datetime.strptime(ts_str, ts_format))
    return tz_obj if tz_alt == tz_def else tz_obj.astimezone(timezone(tz_alt))

timestamp = set_timezone("on Friday April 07, 2017 @09:03PM", 'US/Pacific')

print(timestamp.strftime("%Y-%m-%d %H:%M:%S %Z%z"))

The third and final attempt (see code fragment above) uses the pytz package to add time zone definitions to the datetime object and provide functionality to translate between different time zones. Using the datetime object from the first code fragment, the timestamps get encoded “US/Eastern” and then translated into “US/Pacific” to match the timestamp on the website. The resulting timestamp with time zone info in the CSV file has this format: “2017-04-07 18:03:00 PDT-0700”. A nice thing about the pytz package is that it also handles Daylight Saving Time seamlessly. If you don’t need the time zone info for the timestamp, remove “%Z%z” from the format string.

I Worked With A Murderer!

When I was a kid back in the early 1980’s, a teenager killed another teenager and hid the body in the foothills. The disappearance at that time, and the remains found several years later, was big news in the San Francisco Bay Area, one of several high-profile kidnappings and murders that prompted parents to keep their children indoors. Fast forward nearly 40 years later, a friend sent me the link to an old news article about the suspect arrested for that crime. The suspect in the perp walk photo was a former coworker whom I worked with for several years before he got fired, I thought, for being a douche bag. That wasn’t the whole story on his firing.

Unfortunately, I can’t share the article link to the article or the person’s name.

Although arrested and charged for the murder over a decade ago, the suspect was never tried as the case got thrown out of court for a lack of evidence—the murder weapon was never recovered—despite having a body and a confession. A person arrested but not convicted of a crime has a reasonable expectation to privacy despite the news media coverage. Or, maybe not. A recent court ruling for police taking DNA samples have implied that an arrestee  has “diminished expectations for privacy” as legal proceedings are public. Since I’m not familiar with intricacies of true crime writing (i.e., how to avoid being sued by someone who holds a grudge), I’ll be deliberately vague on the details to protect the innocent and the guilty.

The suspect and I started working together in IT support at the same time. Almost immediately he tried to put himself ahead of everyone else in a “Me! Me! Me!” attitude to impress the client—the company that hired the contracting agency to provide tech workers—in meetings, conference calls and emails. This insecurity, he told me, came from a deep need to avoid being unemployed again, which was understandable as everyone was still skittish years after the Great Recession. Except the “Me! Me! Me!” attitude never got dialed back as time went on and he never took the obvious hints from management to drop it.

Our first bump came when he accidentally rebooted the server that everyone logged into from our workstations. During the early days of the project, almost everyone rebooted the sever by accident while trying to reboot a remote system since the server wasn’t then properly configured to prevent admin users from rebooting it by accident. But he did it twice in one day. He never came forward to own his mistake. When the server owner checked the logs and fingered him in IM, he made excuses for why it happened—and those excuses went on for days. Everyone, including yours truly, roundly jeered him whenever the topic of accidental rebooting came up.

When I accidentally rebooted the server from a double-clicking mouse a month later, I contacted the server owner during the one-minute delay before the server rebooted, admitted my mea culpa to the team in IM (instant messenger), and replaced the double-clicking mouse. No one gave me grief for rebooting the server. The suspect complained loudly that he got treated unfairly because what I did was much worse than what he did. No one bought his story. That was the beginning of his reputation of being a douche bag.

When a team lead asked his group for volunteers to work with the suspect on an assignment a year-and-half later, no one wanted to work with him and everyone confessed that they didn’t like him. I felt compelled to write a long email to the project manager about all the problems I had with him. Two weeks later, he got fired. The funny thing was that no one told him that he got fired. According to coworkers on his team, he figured it out when his regular and admin Windows accounts  got deactivated, his badge stopped working, and the client refused to return his phone calls. Never did hear if security showed up to escort him out of the building.

The real reason he got fired, I recently learned, was an unknown coworker googled his name, came across the decade-old story about his arrest, and took the story to the client. The coworker got written up by the contracting agency for going to the client, but the coworker felt strongly enough that the client had to know who the suspect was. The client had a felony checkbox on the background check form (i.e., “Have you ever been arrested and/or convicted of a felony?”). The suspect, who didn’t live in a state like California with felony checkbox protections, failed to check the box and didn’t mention his arrest. That was enough to terminate his employment.