As I mentioned earlier, on Monday I had surgery for a total replacement of my left knee. Long story short: it went better than I could have ever imagined.

The first thing I was to say is how wonderful the staff at the hospital was. Everyone there seemed to focus on making sure that a) I knew what was going on around me and b) that I was feeling OK. To illustrate this, I took a pano of my view from my bed:

Hospital wall charts
Hospital wall charts at the foot of my bed

The charts have most of the information I needed. The leftmost chart shows what I should expect for my progress after the surgery until I am discharged; the center chart has the name of my doctors and nurses, along with notes on what I had already done; and the chart of the right lists all the medications I was on, what they were for, and what other effects they might have. When a new shift came on, the first thing the nurses did was introduce themselves and write their names down. This was very helpful to my drug-addled brain!

Speaking of drug-addled, I don’t remember anything from when they wheeled me into the operating room until when I was back in my room. However, my wife spoke with me as soon as I came out of recovery, and said I told her about several things that happened as they were prepping me for surgery, as well as some comments about waking up in the recovery room. I don’t remember any of that! Apparently whatever sedative they gave me didn’t interfere with short-term memory, but prevented long-term memories from forming. It’s so odd to have someone talk about things that you told them, and you have no clue!

I got precious little sleep that night. First, there is the problem with being awakened every few hours for blood pressure / heart rate measurement. But the main problem was that I had to put my surgical leg into this foam block that elevated my heel an inch or so above the bed. That may not sound like much, but the effect is to force my leg to stretch, as there was nothing supporting my knee. That constant stretching is essential to getting the full range of motion back, but oh man was it painful, even after taking the opioid painkillers! However, after 3 nights of using the block, it feels fine. Making progress like that is always encouraging.

The day after surgery they got you out of bed early to do some physical therapy, and then later had classes for “The Joint Club”: all the people who had had joint replacements the previous day. The nurses and physical therapists went over all of the exercises we would need to do for the next 6 weeks, making sure that everyone was doing them correctly. They also answered all the questions people had about what they should expect. I left there feeling that I knew just how things would progress. Boy, was I wrong! But in a good sense – my progress has been even better!

I’ve gotten a good range of motion back, although I still have a ways to go. I can walk without using my walker, but always use it for safety reasons: one fall and I could undo everything. I do the physical therapy exercises 3 times a day, and they can be very painful! When I’m doing them I keep reminding myself that this short-term pain will result in a much healthier knee in the long run.

And no post-operative report would be complete without a shot of the scar! Well, it’s not a scar yet, but yesterday when the nurse came to inspect the wound and replace the dressing, I managed to get a shot of it: 32 meticulous staples that look like I have a zippered knee!

Post-surgery knee with staples

You can also see the compression marks on my skin. Apparently blood clots are a potential complication of this type of surgery, so besides exercises to keep the blood flowing, I have to wear compression stockings on both legs for 6 weeks. It ain’t pretty, but if it keeps me healthy, so be it.

I’ll try to post one more follow-up in a few weeks with my continued progress. Until then, back to the PT!

The Night Before

My knee replacement surgery is tomorrow. I have to be at the hospital at 5:30 AM, which will be difficult enough in itself!

On Friday I decided to give my knee one last fling, so that I have a clear memory of how much I was limited by the arthritis. I did 15 minutes on the elliptical machine at the gym, and then later in the afternoon I hit a bucket of balls at the driving range. Well, I made it about 2/3 of the way through the bucket when I started to feel a twinge in my knee, so I gave the rest to the guy next to me and headed home.

For the past decade or so, I’ve dealt with my knee, as well as my other painful joints, by taking Aleve (naproxen sodium). If I knew I would be doing something active, I would take it ahead of time prophylactically, and always took it afterwards. This would keep the inflammation to a minimum. However, when you are having surgery, they make you stop taking all drugs a week ahead of time, as they can increase your chances of blood clots during surgery. So after my exertion during the day, my knee was throbbing pretty badly at night. The pain continued through the weekend, and it’s still present as I’m typing this. Obviously I had relied on Aleve to mitigate the pain in my knee so much that I had forgotten just how bad it could be.

I probably won’t be able to add to this blog for a few days, but I’ll try to remember as much of the experience as I can so I can write about it later.

Out With the Old (knee), In With the New

This coming Monday I’m having total knee replacement surgery. Neither of my knees is very healthy, but my left knee has been particularly painful. It’s been over a decade since there has been any cartilage between the bones of the knee, and all that wear and tear has taken its toll.

I tried to get my actual x-ray to illustrate this post, but that proved to be difficult, so here’s one I got off of Google Images:

knee xray
X-ray of a Normal knee vs Arthritic knee

Normally the bones are separated by cartilage, which allows them to move without much friction. My left knee’s x-ray looks almost exactly like the image on the right. I have had to have all the cartilage in that joint removed over the years, and now it’s “bone on bone”.

I’ve written about my physical ailments before, and for the past two years I’ve been despondent over this decline. Then this past November came the email from the state soccer referee representative informing us of the upcoming registration and re-certification for the 2019 season. I thought about my complete lack of involvement in soccer over the past two years: I reffed a few games in early 2017, and didn’t ref a single game in 2018. I had decided that I should face the truth and retire. I told my wife and family, and felt at peace at finally accepting that this was something I simply could no longer do.

But a couple of weeks later it started gnawing at me. I didn’t want to give this up without a fight. I told my wife that I was thinking about getting a knee replacement, with the goal of being able to ref a few games by the end of 2019. She was 100% behind me, so after the holidays I started looking around for a surgeon. After many hours researching knee surgeons in San Antonio, I found Dr. David Fox, and set up an appointment. We discussed what would be involved, and he didn’t sugar-coat anything. He told me to “expect 6 weeks of hell” after the surgery, as the recovery process involves doing a lot of physical therapy exercises that can be painful. Normally, people undergoing this surgery have to take 3–4 weeks (and sometimes longer) off of work, but as I work from my home, I can be back at work as soon as I’m off my pain meds and mentally clear.

I’ll be sure to follow the course of the surgery and recovery process in future posts. Now I’m ready for my 6 weeks of hell!

Using a Python virtual environment

This is a quick demonstration of how to create a virtual environment in Python3. I’m starting with an empty directory in ~/projects/demo. I then run the command to create a virtual environment:

ed@imac:~/projects/demo$ ll
ed@imac:~/projects/demo$ python3 -m venv my_env
ed@imac:~/projects/demo$ ll
total 0
drwxr-xr-x 6 ed staff 192B Jan 24 18:14 my_env

Note that the command created a directory with the name I gave it: ‘my_env’. Next we have to activate it. ‘Activate’ changes Python’s internal references to look for things such as which Python version to run, and where installed modules are placed.

ed@imac:~/projects/demo$ source my_env/bin/activate (my_env)ed@imac:~/projects/demo$

I have a bash script that changes the prompt to show the current Python environment; notice that after activating the prompt now starts with ‘(myenv)’.

Installed modules are located in the ‘site-packages’ subdirectory that’s a few levels deep. Let’s see what’s in this fresh virtual env’s site-packages:

(my_env)ed@imac:~/projects/demo$ ll my_env/lib/python3.6/site-packages/
total 8
drwxr-xr-x 3 ed staff 96B Jan 24 18:14 pycache
-rw-r--r-- 1 ed staff 126B Jan 24 18:14
drwxr-xr-x 23 ed staff 736B Jan 24 18:14 pip
drwxr-xr-x 10 ed staff 320B Jan 24 18:14 pip-9.0.1.dist-info
drwxr-xr-x 6 ed staff 192B Jan 24 18:14 pkg_resources
drwxr-xr-x 34 ed staff 1.1K Jan 24 18:14 setuptools
drwxr-xr-x 12 ed staff 384B Jan 24 18:14 setuptools-28.8.0.dist-info

One of my favorite development tools for Python is the pudb debugger. To show that we can install a package, let’s try importing it first (and failing):

(my_env)ed@family-imac:~/projects/demo$ python
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pudb
Traceback (most recent call last):
File "", line 1, in
ModuleNotFoundError: No module named 'pudb'
>>> ^D

Now let’s install it using pip:

(my_env)ed@family-imac:~/projects/demo$ pip install pudb
Collecting pudb
Collecting urwid>=1.1.1 (from pudb)
Collecting pygments>=1.0 (from pudb)
Using cached
Installing collected packages: urwid, pygments, pudb
Successfully installed pudb-2018.1 pygments-2.3.1 urwid-2.0.1

Let’s look at the site-packages directory after installing pudb:

(my_env)ed@family-imac:~/projects/demo$ ll my_env/lib/python3.6/site-packages/
total 8
drwxr-xr-x 10 ed staff 320B Jan 24 18:38 Pygments-2.3.1.dist-info
drwxr-xr-x 3 ed staff 96B Jan 24 18:14 pycache
-rw-r--r-- 1 ed staff 126B Jan 24 18:14
drwxr-xr-x 7 ed staff 224B Jan 24 18:35 pip
drwxr-xr-x 9 ed staff 288B Jan 24 18:35 pip-19.0.1.dist-info
drwxr-xr-x 6 ed staff 192B Jan 24 18:14 pkg_resources
drwxr-xr-x 18 ed staff 576B Jan 24 18:38 pudb
drwxr-xr-x 9 ed staff 288B Jan 24 18:38 pudb-2018.1.dist-info
drwxr-xr-x 22 ed staff 704B Jan 24 18:38 pygments
drwxr-xr-x 34 ed staff 1.1K Jan 24 18:14 setuptools
drwxr-xr-x 12 ed staff 384B Jan 24 18:14 setuptools-28.8.0.dist-info
drwxr-xr-x 33 ed staff 1.0K Jan 24 18:38 urwid
drwxr-xr-x 7 ed staff 224B Jan 24 18:38 urwid-2.0.1.dist-info
(my_env)ed@family-imac:~/projects/demo$ python

Note that there are now entries for both pudb and its dependency, pygments. And to verify that it has been successfully installed:

(my_env)ed@family-imac:~/projects/demo$ python
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pudb
>>> pudb.version
>>> ^D

There’s a ton more to using virtual environments, but that should give you a start.


A few weeks ago I was fortunate enough to attend a show by David Byrne. I have seen him perform many times before, and he always put on a great show. He didn’t let us down this time either. After the last number, they bowed and walked off-stage to a standing ovation. The applause continued for a few minutes, and was then rewarded by an encore.

Did I worry that my applause wouldn’t be the decisive amount of noise to ensure that there was an encore? Of course not. When you are a member of the audience of a performance, it’s not about you, it’s about everyone. Of course if I didn’t clap they would have done the encore anyway, and if I had clapped twice as hard it wouldn’t have changed anything. The problem is expecting individual effects in a group context.

Voting is the same thing. It isn’t about you, the voter. It’s about everyone, the voters. When an election is held, vote your preference. Odds are, sure, it won’t make a difference. Your vote won’t be the single event that changes history. But it’s not supposed to be. Assuming that unless it is, it doesn’t matter is completely missing the point. Just as applauding (or not) for an encore, it is the response of the group that matters, not any single member of the group.

If you have the privilege to vote, and haven’t done so yet, make the effort to do so tomorrow. The collective action of those who might feel that they are powerless wields a hell of a lot of power.