A summary of my life with depression

This may not seem like a technical post but if you cross-reference to this talk it should be clear this is a problem that developers should really be aware of. I mean, not my personal issues, but the topic of mental illness in the developer world. So in the spirit of openness and sharing with others, I present my own story.

I’m not sure when depression began; I think it was kind of a slow progression over years. I’m 41 years old and I’ve always been kind of a negative person, always looking for flaws in things and worrying about what could go wrong. I liked to think this made me a better engineer. Somewhere along the way it became a state of mind where I could only see the negative.

I started to realize I was in trouble when it became clear that I didn’t really enjoy anything any more. It’s called anhedonia. It turns out you can function for quite a while being motivated only by negatives (fear of failure, fear of letting down your family/coworkers, etc.) and through sheer determination, but it’s a really miserable way to live. It’s hard to understand if you haven’t experienced it, so it’s not much use explaining it. Without anything that drives me to say “yes!” life seems pretty damn pointless. I was frustrated and angry all the time.

My wife encouraged me to get clinical help and eventually I did. Apparently sometime around September 2015, though I don’t really remember. I remember describing my depression not so much as “stuck in a pit” as “life in a dense fog”. The next year and few months my psychiatrist had me trying out various medications and tweaking dosages and such. Sometimes something would seem to be helping a little, but nothing really seemed to stick or make a big difference. It was discouraging to say the least. I was doing counseling, too, though I have yet to find a counselor who helps much.

In the summer of 2016 my mother was diagnosed with incurable cancer. In September 2016 my wife and I separated and I started shuttling our kids between us. Then in late November her health took a nosedive and I was left taking care of the kids alone, in addition to working full time with depression. I had always been able to deal with everything myself before, but something finally gave out in me. My job at Red Hat, which before had always been a refuge in turbulent times, became unbearable. I would spend all day staring at my screen and moving the mouse occasionally when it started to go dark because I hadn’t done anything for so long. I felt crushing guilt and shame that the one thing I had always been good at and enjoyed was now a joyless burden and I was letting everyone down.

I went on disability leave in early December. I didn’t even know you could go on disability for depression, but it was definitely disabling me, so it makes sense. My psychiatrist suggested trying a new course of treatment called TMS (Transcranial Magnetic Stimulation). In short, it uses an electromagnet to stimulate your brain, in daily treatments over the course of 6-8 weeks. I was expecting to get started with it ASAP, but it turned out I couldn’t start until January 4th.

I thought disability leave would be a relief, and it certainly was in the sense that I no longer had to feel guilty about the work I wasn’t doing (well, less guilty anyway – getting paid to do nothing really rubs me the wrong way). The downside is that it gave me a lot more time to brood over how useless I was and how I was going to lose everything and end up still depressed but in a homeless shelter, with my kids in foster care. I can look at things objectively and say that actually my situation is not that bad, and quite recoverable if I can just kick this depression thing, and there’s a good chance I can. And I’m so grateful for being able to take disability, and for my health insurance that covers all this pretty well, and for having my health otherwise. But the thing about being depressed is that you still feel hopeless, regardless of the reality of the situation.

I’m two weeks into TMS now. If anything, I feel worse because I’m starting to develop anxiety and having more trouble sleeping. My psychiatrist said her patients often saw improvement within a week (which made me more anxious when that week passed that I might be among the 20% or so that don’t benefit), but the TMS folks said actually to expect more like four weeks so I’m trying to be patient. If it doesn’t work out, I can do genetic testing to see if that helps pinpoint a medication that will actually help. I’m trying meditation, working on gratitude, connecting with people (something I never put much effort into before), contradicting my negative thoughts, and other random things in case they might help. And exercising, that seems to help. And just keeping busy to distract myself from feeling hopeless. I don’t have a happy ending yet, but everyone tells me things will get better if I just keep trying.

I guess if there’s a silver lining, it’s that people have come out of the woodwork to tell me they understand what I’m going through because they have been there. This is so common, there should be no reason to feel shame or to avoid treatment like I did for so long. It’s made me realize that in my fierce self-sufficiency I’ve never been open to being helped, or for that matter to helping others. But it turns out that nearly everybody needs some help sometimes, and I hope that out of this experience I’ll learn to be a more decent human being than I have been so far.

2015-12-8

I can’t believe it’s already December.

Problem du jour: getting logs from a pod via the OpenShift API. You would think I could just look at the impl of the oc logs command, but as usual it’s too tangled a mess (or, more likely, I just need to understand how to really use the go tools I have).

oc logs first muddies the water trying to figure out what kind of resource the user wants logs for. I can hopefully ignore this since I already have the pod I created ready.

Interlude – trying to figure out what gets injected into a pod’s /etc/resolv.conf file. Because someone is getting a wildcard domain added to their search directive and that causes everything to resolve to that domain IP, including e.g. github.com. I couldn’t get a useful read on what settings are relevant. I thought there was a setting for whether or not to inject the skydns nameserver; now I can’t find it. I created a pod on my devenv and it didn’t get anything injected. So I’m not sure all the sources of input to this file.

WordPress used to have a button to remove the distractions and make the editor take up the whole window. What ever happened to that?

So back to getting logs. Looks like I need to store the command’s Factory somewhere in order to be able to get to the LogsForObject method. Kubernetes or OpenShift factory? I have the OpenShift factory from my command and it contains the Kubernetes factory so it’s all the same.

I got the pod running… after I remembered to actually have the diagnostic call the necessary code. Disconcerting when you run a diagnostic and get *nothing* back. Now I have the pod being created and a readCloser with the results. Reminding myself how to use a readCloser.

Pro tip: don’t try to Fscanln a reader. Create a bufio Scanner instead.

See the thing I made

I wrote an article for the Red Hat Developers Blog. I haven’t felt much like blogging this year, but there’s one thing at least. If I have articles I think would be of outside interest, I’ll probably post them over there. This blog should return to its original purpose, which was for me to blather about my frustrations and solutions in a kind of stream of consciousness.

Exploring 3 – docker

More unreliable ruminations –

When Docker started to make a splash, I took a quick look at it, you know, the basic tutorial. All very nice, but not too much depth. And even though the rest of the OpenShift team has pivoted to this platform fairly quickly, I’ve been waiting until I would actually have some real time to devote to it before digging in deeper.

Although I know that at the pace this stuff is moving, RHEL 7 is already far behind, I brought up a RHEL 7 host and started running through https://access.redhat.com/articles/881893 which has a little more meat to it as far as introducing Docker capabilities. Under RHEL 7, Docker is in the “extras” channel (and relies on one pkg in the “optional” channel). It’s useful to know that the “extras” channel is actually supported (unlike “optional”), but not on the same terms as the rest of RHEL – things in this channel are allowed to move quickly and break compatibility. That’s a good place for Docker, since I know our team is still collaborating heavily with Docker to get in features needed for OpenShift. I expect there will be a sizeable update for RHEL 7.1, although chances are we’ll be using Atomic anyway.

Atomic ships tmux but not screen. I guess it’s time for me to finally make the leap. As tempting as it is to just remap the meta key to C-a, I should probably get used to using the defaults.

The first thing that would probably help me to understand Docker is an analogy with Docker registries/repositories and git. Docker is clearly informed by git and VCS, using some of the same verbs (pull, push, commit, tag) but assigning different semantics.

This article clarified the similarities and differences in terms (although it’s not clear when it was written, looks like about a year ago… seriously, an undated blog post on new technology? How does this keep happening?). Dockerhub is approximately like Github… repositories are approximately like Github repos. The location of the image layer information doesn’t seem to be the same for me, but I don’t know if that’s because Docker changed in the meantime or because it is packaged differently for RHEL/Atomic.

docker pull

So, you “docker pull” an image. It’s a little confusing where you’re pulling it from and to. “To” turns out to be clearest… a local cache, which nothing ever tells you where that is, but it looks like on RHEL 7 it’s under /var/lib/docker/ – there’s image metadata at /var/lib/docker/graph/ and perhaps some actual content at /var/lib/docker/devicemapper/ but I’m having trouble seeing exactly how the image data is stored – I’m sure this is confusing for a reason. Open question for now.

Here’s a handy alias:

# alias json="python -mjson.tool <"

Now you can pretty-print json without having to think much about it:

json /var/lib/docker/graph/216c11b99bd09033054595d08c28cf27dabcc1b18c2cd0991fce6b1ff1c0086f/json | less

Docker storage is configurable in /etc/sysconfig/docker-storage and under Atomic, perhaps predictably, it is customized to live under /dev/atomicos/. Though there’s still plenty under /var/lib/docker.

So this is a bit like a system-wide git repository. You can contact as many “remotes” (registries) as you like, and pull down “branches” (images) composed of successive “commits” (layers) potentially with “tags” (tags! although tags do double duty as points in time and moving like branches). Once they’re present locally you can fire them up, modify them (with another commit) and push the results back to a registry.

It’s less than crystal clear to me how “docker pull” chooses a remote, i.e. how registries are determined. OK, if you “docker pull registry.access.redhat.com/rhel” it should be apparent where that’s coming from. But despite the docker hub reportedly being disabled, if I “docker pull ubuntu” or “docker pull nginx” those load up just fine – from where? Evidently Docker Hub isn’t disabled. Here’s how it seems to work:

docker pull <word e.g. "ubuntu">  = get images from public "word" repository on Docker Hub
docker pull <word>/<repo> = get images from repo owned by <word> account on Docker hub
docker pull <hostname or IP>/<repo> = get images from repo on other registry

In all cases, you can add a :tag to pull only a specific tag (and any images it is based on) rather than all of the tags in the repository.

As with git repos, you have a local concept of the remote repo which can be out of sync. So you have to push and pull to sync them up as needed.

docker commit / build / tag

If you run an image as a container, you can then commit the result as an image. If you commit it with the same name as an existing repository, it’s implicitly tagged as :latest.

Similarly you can use “docker build” with a Dockerfile that specifies base image and commands to run against it, then commit the result as an image in a repository.

Finally, you can just re-tag any image in the local cache with any repository and tag you want (within the bounds of syntax, which are pretty loose). So “docker tag” doesn’t just apply tags (and moving tags = branches) but also repositories.

docker push

Having created an image in a repo, docker push is the reverse of docker pull… and the repo indicates where it will go.

You can’t docker push to one of the root repos (like just plain “mongodb”). You can of course pull that, re-tag it with your own Docker Hub id (e.g. “docker tag mongodb sosiouxme/mongodb”) and then push it (assuming you’ve logged in and want it on your Docker Hub account).

Finally if you have tagged your image with a repo name that includes hostname/IP, then docker push will try to push it to a registry at that hostname/IP (assuming it exists and you have access). RHEL 7 ships docker-registry, but Atomic does not at this point – and why should it when you can just run the registry itself in a container?

Hating “The Walking Dead”

I made the mistake of watching the first episode of “The Walking Dead” yesterday. I don’t like zombie movies or horror in general, so it’s no surprise that I didn’t enjoy watching it. I just wanted to see what made this thing so popular. Don’t get me wrong, I can see this show seems to be done reasonably well, for the genre – with an eye to keeping it convincing and interesting.  But aside from it being disturbing (I don’t enjoy the adrenaline rush, that’s why I don’t like horror), I was kept awake this morning just thinking about the huge plot holes.

It starts right up front. Our hero is looking for gas or something and comes upon the remains of a bunch of abandoned cars and a camp. There’s a little girl shuffling around, picking up a doll. This guy knows the zombie apocalypse has happened, but calls out to this little girl as if there’s really some chance she’s survived, unlike the rest of the camp, without becoming a zombie. Then he shoots her when she turns around and heads his way. Was this even necessary to set the tone? We all knew this is a zombie flick.

Or how about the way Hero gets injured? (I know, his name is apparently Rick, but I’m not sure we even find that out in the first episode – no one ever introduces themselves. How is that possible?) The bad guys run across the tire killers, their car skids and rolls over several times, then they come out shooting? I’m sure those guys were wearing their seatbelts and didn’t get crushed by any car pieces, were able to locate their guns, and thought they could win in a shootout with four cars full of police. While standing up with no cover. I know criminals tend to be dumb, but even if they miraculously had the ability to get out of the car and shoot, that’s just suicidal. If they wanted to die, they could have shot themselves.

So Hero wakes up in the hospital, evidently from a coma, weak and dehydrated. He must have been there for several days after the battle in the hospital, and even if the IV was keeping him full of fluid, that wouldn’t have lasted for a day after. And he should probably be sitting in urine and feces too. Not to mention dead, because who gets better from a gunshot wound while unconscious and totally neglected? Fortunately the water still works – that much at least is plausible. Fortunately he doesn’t need any food in order to stumble out of the place and make it home. And fortunately the only zombies he sees are locked behind a door or nearly immobile (what luck! I thought the point of zombies is that they show up everywhere).

Now at this point, I know he’s disoriented and dazed. But he can’t be completely daft. He had enough sense to get away from the zombie fingers behind the door reading “Don’t Open Dead Inside”. He had to have figured something Really Bad happened at the hospital when he saw the pools of blood, the military stuff, and the body bags. He saw the half-person zombie in the park trying to pull itself along. Anyone who has ever heard the word “zombie” (which is all of us, but apparently nobody in this show since they’re just called “walkers”) knows what happened. But he just heads along home, and doesn’t even search for a weapon? Even just a stick or something? He’s a cop, he must have at least had a piece hidden away somewhere at home – nothing? And then he’s surprised when Savior and Son come along, bean him upside the head, and shoot a zombie headed towards him?

Now Savior is a real enigma. He sure seems to know a lot about zombies. He knows how a person becomes one – getting bitten or scratched, then dying after a hot fever. He knows it’s something in the brain that makes them a zombie, and you can kill them with a headshot. He knows they’re a force to be reckoned with when they’re a hungry crowd. There have to be some stories behind this. But he never lets the new guy in on how he knows any of this (experience? other survivors? a radio/TV broadcast?). It’s obvious his wife became a zombie, but that’s not enough to have learned all that.

And how did he learn this and survive, while apparently the military didn’t? Because what kind of idiot gets out of the tank or chopper so that the zombies can get them? They must have had at least a few days to figure out what was going on and mobilize. What kind of idiot military guy lets his buddy die from a zombie bite and high fever and then doesn’t put a bullet in his head when he knows the guy will come back a zombie? How hard can it seriously be to just stay in the tank/truck/chopper/etc. and pick off the zombies outside? It’s not like it’s hard to tell them apart. And zombies don’t operate weapons or machinery, or coordinate or have any ability to do anything clever, so why all the destruction? But all of this is just left to our imagination – we just see the aftermath. Maybe we’ll learn more in later episodes, but sorry, one episode is all I can take.

The reason all this was done is just to heighten the tension. And I hate when implausible things are filmed just for that reason. It’s so phony.

Let’s continue. Everyone was advised to evacuate for Atlanta. Hero and Savior haven’t thought of the possibility that the zombies might come along? Well, if not, then surely when Hero got to the ourskirts of Atlanta and saw all the cars broken down headed the other way, that might have been a clue. But Hero just rides in on a horse, apparently in condition white, as if what happened to all those other people couldn’t happen to him. He can’t seriously be that stupid or conceited. It’s just a plot device. Also, how can he sling all that equipment and ride a horse a day or two after barely walking out of the hospital? He’s right as rain that quickly?

Also, he makes a radio call-out, but never identifies himself. Surely even if it was just force of habit he would have done that. But he doesn’t, because that way the group of survivors including his wife can’t find out he’s still alive. Plot device. Good one, but still phony.

So, Hero gets to Atlanta, and runs into a horde of zombies. How is it possible that they take down his horse and are already into its innards while he has a chance to scramble away? Do you know how strong a horse is? The guy didn’t stand a chance. Even if they were distracted by the horse, it’s impossible with so many zombies that he didn’t get a scratch or a bite.

One more thing. We saw a little girl zombie at the very start. So we know kid zombies are possible. Where are they the rest of the episode? Where are the toddler and infant zombies? Yeah, I know, couldn’t fit them in budget, or child labor laws, or whatever. I’m kind of thankful, though, because the last thing I need is nightmares about my little girl becoming a zombie.

I have to admit, the first episode was gripping enough that I’m really curious what’s going to happen next. But not enough to endure the show.

What does a tech support geek do all day anyway?

I hate to let a calendar month go by with no post.

Though hey, I’m so far behind on reading my web comics, I don’t even know how far behind I am anymore. That’s when you know it’s serious.

Being a parent and keeping things from falling apart has pretty much taken up all my energy outside work at this point. It takes up a lot of time, too, but the real constraint is energy and enthusiasm. It’s hard to really get into anything significant that you know will probably be interrupted soon. Thus I haven’t even gotten around to checking out the Android-friendly ORMlite updates. Someday!

At least some of the arcane stuff I’ve been working on for my day job is publicly visible! Too bad VMware doesn’t really have a way for KB authors to sign our work, but here are a few bits of interest in the web server / application server world…

I have some in the pipeline to attempt to finally explain Tomcat auto-deployment and logging in a way that a non-expert can follow and use (I dare say the engineers are too close to their work). I should work on the official docs, but that’s not officially part of my goals… if I could get someone to pay me for it, I probably would. I think I have something of a gift for technical docs. It just takes me such a long time, I doubt anyone would consider it worth funding. At the same time, I don’t want to quit doing actual technical work in order to document it.

Maybe soon I’ll document my journey of trying to use Fedora 16 for my workstation (VPNs… virtualization… and dual monitors, oh my!)

Two bits that annoy me about standard Android apps

Perhaps I should start a running list, as there are sure to be more.

1. Facebook – every link that leads to the browser wastes my time going through some stupid Facebook warning *in the browser* that links can, you know, lead to unpredictable stuff, so be careful. Something that if it were necessary at all, would make a lot more sense on a PC (where no such warning is given) than a mobile device IMHO, and did I mention, wastes my freaking time and can’t be disabled as far as I can see.
2. The email app is atrocious. Not GMail, talking about what you use for e.g. an Exchange account. Has only rudimentary understanding of folders, and no way of getting notifications only for specific folders. Wonder if there’s a better app for that.

I also had a new idea for an app (probably already implemented somewhere) – hotspot fast track. When you’re at a public hotspot (or e.g. one at a hotel), every time you connect it wants you to go to some BS web page (usually requiring BS JavaScript) and click through some BS agreement to actually use the internet. As if everyone only ever used the web and anyone gave a shit about the stupid agreement. When you’re on a mobile this is a huge PITA, not least because you don’t tend to maintain a steady connection, and find yourself going back at that BS web page once you notice the network doesn’t seem to be working. The hotspot fast track app would look for wifi connections, test for BS portal redirections, and automatically “click through” known portal types that you authorize.