Reflections From the Void

When I moved to Portland, I developed a new hobby.

Before the big move, Ben and I came up to visit our new empty house for a few days around the 4th of July to scope it out and just get a few preparation things done. I randomly encountered an ad for some chair that marketed itself as being made to feel like floating on water in a sensory deprivation tank. I found this claim to be kind of dubious and then, feeling prone to distraction, I decided I’d like to actually try out using a sensory deprivation tank. After all, sensory deprivation tanks are exactly the kind of weird thing you would expect to find in Portland, right?

And in fact, you sure can! I found a little place called Float On, not far from our house, and I decided to book myself a session.

(side note: I never did try this bean bag chair thing but I can pretty well guarantee you that it does not provide an experience comparable to using a sensory deprivation tank)

Stepping inside the building, I immediately got relaxing vibes. It was spa-like. Quiet and peaceful, with a lobby full of comfy furniture. When it was my turn, one of the staffers walked me into the room. The room was very warm and had a blue color to the lighting. The staffer walked me through what to expect and how to prepare myself, and left.

I got undressed, showered, then climbed into the tank, closed the door, and shut the light off.

For the first few minutes, my sentiment was “okay, now what?” I was literally lying in a tank of water saturated with epsom salt, kept at a temperature of about 93 degrees Fahrenheit. Initially my back muscles felt kind of tense, like when I first get into bed, but gradually my muscles felt completely relaxed. After that happened, my mind started to relax too.

I’ve come to realize that the trick to having a good float is not to try to have a good float. I had heard stories of people starting to visually hallucinate things in the tank, or getting into these deep states of relaxation or meditation, and of course I wanted to experience that too.

But you can’t just make yourself experience that. It’s meditation-like (and in fact, if you want to start a meditation practice, floating would be a perfect way to get into it since it forces all other environmental distractions out). I’ve had good float sessions and bad ones. The bad ones for me are the ones where I feel too antsy to properly relax. When I’m having a good float, my mind just gets away from me. I don’t think I’ve fallen asleep floating, but I will often end up in a state close to it. My thoughts will start to wander aimlessly and 10 or 15 minutes later I’ll catch myself.

I floated most recently last Friday. Last year I had gotten in one last float in March, then a few days later Float On announced they were closing indefinitely. When I first got my vaccine appointment, I knew one of the very first things I wanted to do once I was fully protected by the vaccine was go for a float. It was the self-care I knew I needed.

When I went to float last Friday, I resolved to not expect anything of myself while floating. I knew I’d probably be kind of excited, and I didn’t want to build up the experience in my head and then just find myself bored half way through. I told myself that if my mind kept racing the whole time, that would be just fine. If nothing else, my muscles would be getting great relaxation from a long epsom salt soak. And by not putting that pressure on myself, the float was great and I was surprised when my 90 minutes were up and the music started to gently play to indicate it was time for me to get out.

Sensory deprivation tanks are pretty popular; if you live in a decent sized city you probably have a place available near you. My local floating place has six different rooms, each with different kinds of tanks in them. If you’re the claustrophobic type, this probably isn’t going to be a good experience for you. But it’s one of my favorite things to do regularly, and when I come out of it, I feel a level of relaxation that nothing compares to.

Uncategorized

Vacation

a building with a sign that says 'museum of whimsy'. Never have I been so disappointed for a museum to be closed.

It’s early Friday afternoon and I have an entire weekend ahead of me as I write this but I already feel like I’m at the point where my vacation is winding down and the responsibilities of going back to work are already staring me in the face.

Last week I celebrated two fun milestones: I became fully protected by my COVID vaccines, and I celebrated my birthday. It was a busy work week for me. I decided to schedule some vacation time to celebrate both.

On Friday after work I went and floated in a sensory deprivation tank for 90 minutes, the first time I was able to do so since the initial lockdowns of the pandemic last March. I’m a huge fan of sensory deprivation tanks and I’ll post about it shortly!

On Saturday I had (vaccinated) friends over for a barbecue that also served as a birthday get together. We got to enjoy each other’s company unmasked for the first time in ages, and the experience was therapeutic. We had DQ ice cream cake and I am pleased to say it tastes pretty much just like I remember it as a child (side note: Dunkaroos are also back in stores now and they are similarly amazing).

Since then I’ve spent the week living my best life. I took a couple of road trips: one to Astoria, and another to Eugene. I dined indoors. I did some gardening. I took multiple trips to Home Depot and finally fixed our drip irrigation system. I spent a lot of time outside. I entered a grocery store for the first time since last March. I spent a lot of time purposefully appreciating simple and relaxing moments.

Although I’ve got lots of fun projects I want to do on my computer, I spent surprisingly little time using it. I just wasn’t drawn to it that much. I do have a soldering project that I might do this weekend though.

I accomplished just about all the things I wanted to accomplish, and I still have the weekend ahead of me. I would have liked to have dove back into the habit of practicing learning the piano with my Lumikeys keyboard, but that’s just something to save for the future, I suppose.

I kind of knew in the back of my head that I needed a break. I hadn’t really taken any time off since the holidays, and that break was somewhat dampened by not being able to see family (and also emergency surgery the cat needed). The newfound freedom and vanishing stresses of the pandemic allowed me to properly enjoy this week off. Not only that, but even as this little vacation winds down, it isn’t even Memorial Day yet, and the whole summer is ahead of us.

I knew I needed this time off, but actually experiencing it, I now realize the extent to which I needed it.

100 Posts for 2021

I am happy to say that as of yesterday, I am back on schedule to have published 100 posts by the end of this year.

The hiatus of posts earlier in the year wasn’t from me not writing anything; in fact, I was writing a lot! But most of the posts were in the My Sweet Setup series, and I had unresolved Mac Pro issues, and it didn’t feel right to post that series until I had that issue resolved (since I consider my Mac Pro to be the lynchpin of my setup).

I’ve had a solid posting streak recently as well! This marks either 20 or 21 days of at least one post per day.

I’ve also pushed myself to publish more things, and hit that Post (or schedule) button more quickly without trying to polish each post to within an inch of its life.

I’m also just trying to post more random stuff that comes to my head. Not everything I post has to be a life-changing epiphany, and if I always hold back on posting stuff because I’m waiting for the perfect thing, I won’t be refining my own writing skills in the meantime.

Anyway, I hope this has been engaging filler content, and this gets me 1% closer to my goal, and it keeps my writing streak going!

Uncategorized
|  

Standing for Something

I want to see more companies start to actually take a stand on issues.

That’s one of the things I respected about Basecamp. Until their cofounders kind of revealed themselves to have some serious issues, they had a track record of striving to be good citizens.

For the most part, companies love to seem like they’re taking a stand on issues. They love to put out commercials paying lip service to how they believe immigrants make America great, or they’ll talk about how much they value the LGBT community, only to not really act like it when push comes to shove.

I know plenty of tech companies that love to talk a big game about their values, but their political donations paint a different picture. Plenty of tech companies get the opportunity to stand up for the vulnerable, but they don’t bother.

The businesses that are going to win in the next decade are going to be the ones that take being principled to the next level. These are going to be the businesses that won’t just put out feel-good statements; they’ll have policies both internally and externally facing about what constitutes good conduct. They’ll be proud to be vendors to green energy makers, and they’ll turn down the lucrative contract for the oil company.

These winning businesses will win because they’ll be authentic. And traditional companies will try to brand themselves as authentic, but it won’t work for the same reason that millennials killed Applebee’s; authenticity inherently can’t just be the suit you put on. It has to be who you are.

April 28, 1995

homer simpson sitting on the hood of his car staring at the stars
Today marks 26 years since I said goodbye to my mom for the last time as I walked out the door to wait for the bus. Later that day, she and my brother Brandon died in a car accident on the way to go shopping.

It’s so weird, too. With every year that passes, the memories grow increasingly distant overall, but it’s interesting what sticks.

Her name was Shelly, and we were very close. I was kind of atypical as a kid, not into sports, more into reading books and playing indoors, and she understood me.

My memories are of oddly specific things. When she would chat on the phone she would always twirl her hair in her finger, something I later did in grade school (my dad insists that she actually would idly tie her hair in a slip knot with her fingers while talking on the phone and that he once snuck up to her and pulled it down into a knot). Before I was in school we’d watch daytime TV together, like talk shows and The Golden Girls. Maybe some occasional Supermarket Sweep in there too.

I remember her playing a Tetris clone called Emlith on our Windows 3.1 computer back in the day.

The memories are all unique and special to me, but inconsequential. I think I remember what her voice sounded like, but I’m less and less confident (I can remember what her yelling voice sounded like for sure; she was routinely yelling at either me or more likely my brother).

I can’t even imagine what life would be like if she hadn’t died anymore; it’s kind of impossible. I’m not sure I’d even be able to recognize that life. I don’t know if that would be a better or worse life than I have right now, but it would have been the life where I would still have my mom, and it was stolen.

Sometimes I wish I could take a glimpse at what that life would have been. Just a glimpse, though. I don’t want to trade realities because that would probably force me to trade most of my friends and loved ones I have today.

If you’re wondering about the Simpsons image, it’s from the end of the episode Mother Simpson, after Homer is forced to say goodbye to his mother again. Instead of fading to black, the episode ends with Homer sitting on the hood of his car, looking off into the distance as the sun sets, and the music that plays is just perfect for the moment.

You don’t see Homer’s face, and he doesn’t say anything, but every time I watch this episode I know exactly how he’s feeling. It’s impossible for me to watch without getting a little teary-eyed.

Uncategorized

Basecamp and Leadership

So, Basecamp announced some internal changes this week for how they are going to run their company.

Over the years, Basecamp has built up a reputation for resisting some of the hustle culture associated with so many startups, and for working smarter, not harder. Among other things, they invented Ruby on Rails, they have been big proponents of remote work since long before the COVID pandemic, and being incredibly transparent with the world about how they operate, selling books and workshops about how they work, and even sharing policy changes on their blogs.

Which brings us to Jason’s post this week.

His bullet points (parenthesized parts are mine):

  • No more societal and political discussions on our company Basecamp account
  • No more paternalistic benefits (referring to some of the allowances they offered for fitness and wellness and buying from farmer’s markets)
  • No more committees (which includes shuttering a recently spun-up DEI committee)
  • No more lingering or dwelling on past decisions
  • No more 360 reviews
  • No forgetting what we do here

It gives off some serious white dude entrepreneur energy.

These are fucking stupid decisions. Some are even contradictory. For instance, if you’re getting rid of benefits because they’re paternalistic, why would you add a policy as paternalistic as “you can’t talk politics at work”?

Twitter has weighed in on these and has articulated the issues better than I could have:

This has prompted Basecamp employees to speak up as well. Jane Yang posted about the struggles of David and Jason’s reluctance to get on board with protecting Basecamp’s most vulnerable users, and their disappointing retreat into making decisions unilaterally for the entire company. The employees that put on Basecamp’s Rework podcast put out a somber message announcing they are putting the podcast on hiatus (a disappointment given that Rework routinely features businesses that are challenging the status quo of traditional ways businesses are run and govern themselves).

Ironically, if Jason and David had a committee filled with diverse people who were empowered with making decisions of this nature for the company, this committee likely would have pushed them to understand the folly of their reasoning.

Instead, they have doubled down on this decision. DHH posted a follow-up of sorts that seems to imply that the issue isn’t that his decision is bad, but that there was nuance to how it was announced that we must have missed out on.

And I’m sure there are plenty of other white dudes that feel that Jason and David should stay the course (case in point), and plenty are likening this to a Twitter mob to try to paint it as a frivolous thing that the public gets up in arms over for a minute (another case in point, also from John Gruber). This isn’t a Twitter “hate machine;” it’s the public very quickly coming to terms with the fact that two revered leaders in the community have revealed themselves to have some really toxic characteristics and they’re holding Jason and David accountable for it.

This is where I had several paragraphs about how its time for companies to start being leaders and start actually taking stances on social issues (I’ll write about that later I guess!) but actually, it turned out there was more to this story: these policy changes appear to be in response to a lot of internal push from employees after it was discovered that employees were circulating a list of customer names they thought were funny (source: The Verge).

And that’s where the decision went from seeming somewhat boneheaded to demonstrating full-on terrible leadership on Jason and David’s part, and this is being confirmed by multiple Basecamp employees. The sting is greater given how Basecamp have painted themselves as leaders in terms of how they run their business. David especially has been a vocal critic of Big Tech, even going so far as to publicly decry Jeff Bezos, who actually co-owns Basecamp with them.

But now that the shoe’s on the other foot, David and Jason are behaving pretty much exactly like the kinds of people they insisted they didn’t want to be.

I’m pretty sure Jason and David might be too far gone at this point on the matter, and they seem to want to keep digging their heels on the issue. To that effect, I feel for the Basecamp employees that are probably having a really bad week at work and are faced with a pretty ugly decision.

Bring this up in your next 1–1 with your boss. Let them know this isn’t acceptable and that you expect far better from your company. Make sure your boss understands the importance of meaningfully being able to bring your whole self to work, and make sure your boss understands the weight that comes with a white founder weighing in on a serious issue and being dismissive of the idea that there might be some racism behind it.

And although the overwhelming sentiment on my Twitter feed is one of disappointment toward Basecamp’s founders, I’m keeping a close eye on the people who quietly (or not-so-quietly) are cheering on this decision and think it’s a refreshing change of pace. Because I’m seriously worried that the people in tech with power are walking away from this incident with the entirely wrong message.

Uncategorized

My Sweet Setup: Carbon Copy Cloner

screenshot of the Carbon Copy Cloner app
Carbon Copy Cloner is one of those tools that focused on doing one particular thing, but it does it incredibly well.

The thing: copying everything from one drive on a Mac to another, and copying it so well that if you boot your startup disk, you could boot up straight from the clone disk and not miss a beat.

Thanks to things like automatic iCloud backups of phones and people putting stuff in the cloud, most computer users nowadays are more likely to have some kind of backup, and if they lose their device or it dies, they probably won’t lose much data.

But if you consider your Mac to be mission-critical, and you want to be able to not just survive your hard drive dying suddenly, but be back up and running right where you left off in a single reboot, Carbon Copy Cloner is perfect.

If you want to do an OS upgrade but you want some assurance that if it gets bungled, you can put your computer in the exact state it was in before you did the upgrade, Carbon Copy Cloner is perfect.

If a friend comes to you with an old Mac and asks “can you get the data off of it?”, Carbon Copy Cloner is perfect.

If you’re taking your computer to the Apple Store for repair and you don’t want to manually re-install everything when you get your computer back with a wiped drive (and this is super common now), Carbon Copy Cloner is perfect.

Carbon Copy Cloner is the only tool I reach to for cloning drives; it’s written by an ex-Apple engineer who has great attention to all the little details involved with cloning a Mac disk. And nowadays, between APFS containers and volume groups and macOS recovery volumes, you’ll want to use a dedicated tool like Carbon Copy Cloner to make sure you are making a true copy of everything.

It sounds a little nerdy, but I recommend it for the non-nerds out there too, because it’s such an easy-to-understand way to back up. You set up CCC to clone your boot disk automatically a few times a day, and you’re all set. If you accidentally delete a big folder of stuff, it’s not at all hard to restore the files; just open up the clone drive, find the folder you deleted, and copy it right back.

They say that if you’re backing up regularly but you never try to restore from the backup, you don’t really have a backup; you just think you have a backup. With CCC, verifying that your backup is good is a breeze; you just have to boot from the clone drive and make sure everything looks okay.

My only recommendation: for your backup drive, pick an SSD, not a spinning disk. You might spend a couple hundred bucks more on an SSD, but the SSD is easily 10–100x faster at file transfer.

Using CCC is a little nerdy, but it’s not difficult to pick up, it’s mostly a “set it and forget it” kind of tool, and sooner or later, it’s going to save your bacon.

Uncategorized

Constant naming and lookup in Ruby

I thought I had a pretty good understanding of how constant lookup worked in Ruby, but I encountered a surprising piece of behavior recently and I wanted to share it.

We had a god model at work that contains thousands of lines of code, much of which is in methods that aren’t truly core to the model. In a long-term attempt to clean this up, we started by moving some of the methods in this model into dependency mixins, like so:

class User
  CONSTANT = 10
  include User::LoginDependency
  #lots of methods
end
module User::LoginDependency
  #login-specific methods go in this file
end

My pair and I started moving methods over, and it all started out easy enough.

Then we encountered something surprising: a method in one of the mixins referenced a constant from the god model, and we got the error uninitialized constant User::LoginDependency::CONSTANT.

This, to me, was surprising to see. Ruby, after all, is a dynamic language with late binding, and I expect things like this to be figured out at runtime. My first hand-wavy assumption was that constant lookup works in a manner similar to sending messages to objects, which made me expect that to work.

Turns out, how you name something makes a difference. If I want to have a module called User::LoginDependency, there are two ways I can define it:

module User
  module LoginDependency
  end
end

module User::LoginDependency
end

I can get to both by typing User::LoginDependency, but the key difference is that in the first case, Ruby understands it as “a module LoginDependency nested inside of the module User,” and in the second case, it’s “the module User::LoginDependency”.

For the nested version of User::LoginDependency, if Ruby doesn’t find the constant inside of LoginDependency, Ruby will work its way up the namespace chain and look for the constant in User. but in the latter case, there isn’t a next level up that you can look, because User::LoginDependency is a top-level defined constant.

For this refactoring, my pair and I made the decision that if the new module’s methods were the only ones to reference a given constant we’d move the constant over too, otherwise we’d leave the constant in the original model and update the new dependency mixin to reference the constant’s fully qualified name; e.g. User::CONSTANT instead of just CONSTANT.

Alternatively, we could have switched these mixins over to being defined with a nested namespace, but in our case User is a class and we didn’t want to be re-opening that class just to add these modules that would later be included. Besides, our approach seemed more appropriate, because it keeps the mixin-specific constants private to that mixin, and the shared stuff is all together in the model that those mixins are all included in.

Uncategorized
|   

Knowledge Work Is Different

Every now and then, I’ll be feeling out of it and I’ll step away from work. Maybe I’m feeling sick or fatigued, or maybe I heard a gutting piece of bad news going on in the world. Whatever it is, I know I don’t have it in me to keep doing my work, and I’ll step away.

Afterwards, I might go do some dishes or simple chores around the house and then the guilt sets in: wow, was I really tired or sick, or just lazy?

In jobs where I primarily worked with my hands, it was easier to be resilient to these kinds of things. I could sling sandwiches in high school just as effectively when I was depressed, or dead tired from being up till 3am the night before for prom and stuck working anyway because my coworkers were all assholes and never covered for me even though I covered for them constantly (not that I’m bitter about that or anything).

But I don’t work in a sandwich shop anymore; I do knowledge work. And knowledge work is a whole different beast.

I can’t expect my brain to work at its peak performance with distractions and fatigue and sickness. When I’m doing my most complex work it requires my brain working at its full capability.

I also have situations where the opposite is true, and I wouldn’t have been able to go in and make sandwiches, but I can get some stuff done anyway. Maybe I’m contagious but feeling sharp, so I get my work done from home without getting others sick. Or I can stick around my house while an electrician comes to fix something.

And sometimes, I just need to remind myself that my brain doesn’t think in solid eight-hour chunks of time. When I know my brain isn’t up for deep work, I’ll grab something else off my plate that’s lower mental energy but needs to get done anyway.

Hell, maybe it’s 3PM on a beautiful sunny afternoon and I decide I’d rather spend that daylight enjoying the weather and getting some fresh air, and after dark I’ll come back to my office and knock out that task (and I’ll probably do it better because I’ll have spent my walk idly thinking about how I’ll approach the problem).

In knowledge work, your brain isn’t just a dial that can be cranked up on demand. If it were, your boss’s job would be super easy:

homer asking his Globex employees if they're working
homer's employee responding 'yes sir, mr simpson!'
Homer: Could you, um, work any harder than this?
Employee: Sure thing, Boss
employees suddenly typing faster
Homer: Hey, call me Homer.

Uncategorized

My Sweet Setup: NetNewsWire and Feedbin

screenshot of NetNewsWire

When you look at NetNewsWire you can just tell it’s a Mac app through and through. At first it might feel a little spartan, but it is nonetheless quite full-featured as a reader. But once you get to know it, it’s quintessentially a Mac app. It uses a beautiful and standard Mac interface. And it feels like a Mac app in the way that apps only do when the developer puts a good deal of care into making a great Mac app. NetNewsWire is blazing fast and feels light.

NNW has an iOS (and iPadOS) counterpart, and it lives up to its Mac sibling of offering very standard native UI with no frills and great performance.

To keep my RSS subscriptions in sync between my devices I use Feedbin. Feedbin keeps all my subscriptions and it keeps track of which items are read and unread and syncs that to NNW. You can even use Feedbin directly as an RSS reader; they have a web and iOS app.

My favorite Feedbin feature is its support for email newsletters. A lot of sites have newsletters but no RSS feeds, but that’s no problem. When I want to subscribe to a newsletter, I give the site a unique Feedbin email address for my account, and emails that go to that address will show up as though they’re RSS feeds in my apps. It’s really slick.

I use NNW on both my Mac and iPhone now (Reeder is also a great app for both), but if you prefer to mix it up, it’s nice to have a middleman like Feedbin, because lots of RSS apps sync with Feedbin, so I can use a different app on my Mac than I use on my other devices.

Best of all, NetNewsWire is free and open-source (and Feedbin itself is open-source but charges a small fee to cover server costs). Brent Simmons has a day job and considers NNW maintenance to be a labor of love, and also there is a community of developers doing ongoing maintenance and development for NNW. Version 6 for the Mac was just released and it’s a beautiful and stable update, and iOS version 6 is coming very soon.

NetNewsWire’s presentations of RSS feeds is a perfect microcosm of why I choose RSS in the first place: I like having a no-nonsense way to keep up with and view content from my favorite blogs and other news sources. RSS is clean, fast, and free of JavaScript trackers and other bullshit. NetNewsWire really appeals to the RSS enthusiast in me.

Uncategorized