At times, it felt like I wasn’t doing anything and 2025 wasn’t that exciting. Looking back on it now, it’s been really great to see how much the year was filled with adventures and friends. This year started out great. Spent the night in my van after Andrew & Sam's (not me, different Sam) NYE party then went climbing with new friends that morning. I spent the rest of my time off after New Years…
Compared to the past 2 years, it feels like I didn’t do very much this year. Looking back on the year, I did quite a bit I suppose :) For Christmas 2023, I drove to Kentucky, left my van for a few days, and flew back to San Francisco for New Year’s. Started out the year in my rental in Sausalito. That place had such an amazing view. Continue reading →
2023 was a year of transition. I went from vanlife back to living in a city. It was full of scuba diving with friends, creativity, hiking, and climbing. I started the year out in Florida. Spent some time in the Keys with Granger & Cass then went cave diving in Florida for the first time. So intense. The caves there are about 100ft on average and there is a ton of flow. You have to pull yourself…
This year was a unique year. I started the year without a job or a place to live. My house in San Francisco just sold, so I had house money in my checking account. Now what? Here's a video I recorded when I moved out. Some friends were going to Tulum, Mexico and asked if I wanted to tag along. Booked my tickets on my phone and slept on the couch in their Airbnb. Continue reading →
Earlier this month, I spent 10 days in Cozumel, Mexico. The trip was a mix of diving with my friend, Don, and a group from the dive shop where I got cerified. It was so great hanging out with old friends, making new ones, and seeing some absolutely beautiful nature. Such a good trip. I shot all of these on a Sony a7R iii in a Nauticam housing. Feel free to follow me on Instagram to see more scuba…
Yesterday was my thirty-third birthday. A few friends asked if I was going to write a birthday blog post like I usually do. I didn’t really want to, but I figured future me would be upset with present me for breaking my streak ( 30 , 31 , 32 ). So here we go. Most of 32 for me was resetting. After almost a year and a half of waiting for my divorce to be finalized, it was finally official in August…
When I was first starting my career, I was really concerned with doing things that mattered. I feel like it’s kinda odd for an 18-year-old to be aware of this, but it was on my mind a lot at the beginning. Other than one or two projects, you could definitely argue none of it had any impact, but I remember at least trying. I remember thinking about this a lot after being fortunate enough to have…
In January 2020, I went on a dive trip to Dumaguete, Philippines. I think I had barely heard of COVID-19 at the time. By the end of the trip, there was lots on the news about this new virus in China in the airport on my way home. I remember thinking, "wow, this must be serious" when the US Border Patrol folks were wearing masks. A lot has happened in my life since this trip. I’ve been meaning to…
When I get into something, I really get into it. I love going deep on new hobbies and learning everything there is to know about them. I think about the shop from MythBusters all the time. Shelves and shelves of labeled boxes of everything you could ever need to make stuff. Living the dream. Continue reading →
It’s my birthday. The past few days I’ve been thinking a lot about what I was doing around this time last year. What a year it’s been. This morning, I read my Thirty and Thirty-One blog posts. These usually reflect on my last year some and look forward to the next year. Thirty was mostly about how work stuff isn’t the most important thing and I want to focus on family and hobbies. Thirty-One was…
I’ve been using Homebrew on Apple Silicon for a few weeks now and it’s been working well. With Ruby 3.0.0, I haven’t had any issues installing it with rbenv . Today, I needed to install an older version and had some trouble getting it. Here’s what I did to figure it out. (This assumes your Homebrews are setup like I described in my post .) First, install rbenv with your native Homebrew: Continue…
What a year. Besides the global pandemic, police brutality, and a very stressful election, a lot happened for me personally this year. I’m really thankful that I have a job and my health. I went scuba diving in the Philippines. It was really amazing. I took some photos I’m really proud of. Maybe I’ll post them some time. (I’ve been saying I’ll post them “next week“ all year. Hah.) I remember…
Today, my new 13-inch MacBook Pro arrived! I was super excited to get it out of the box and set it up. This thing is fast! I am already very impressed. When I started setting up my development environment, things started to get a little frustrating. Have no fear, it’s solvable! The biggest issue for me was Homebrew . According to this issue “There won’t be any support for native ARM Homebrew…
Recently, I added a snippet to my ~/.lldbinit for an easy way to print JSON in LLDB. It has saved me a ton of time, so I thought it was worth explaining. Here’s the snippet: command regex json 's/(.+)/expr let input = %1; print(String(data: try! JSONSerialization.data(withJSONObject: (input is String ? try! JSONSerialization.jsonObject(with: (input as! String).data(using: .utf8)!, options: []) :…
Today, I’m 31 years old. Crazy. That seems like such an old age. I remember thinking when I was 22 that I better get everything done by the time I’m 30 since my career or whatever will be over then. Hah, such a kid. Last year , I wrote this: Continue reading →
Lately, I’ve really been getting into Home Assistant . It’s a really fantastic way to connect everything in your house into one place and then control it however you want. I connect everything directly to Home Assistant and then add Home Assistant to HomeKit (Apple’s Home app). So HomeKit is just controlling Home Assistant which is controlling the real devices. I plan to do a getting started with…
I’ve used a little utility called x for several years now. Simply running x in a directory will open the directory in Xcode. Here’s an example: Now the project is open in Xcode. So quick! I just extended it to support Swift packages that don’t have a project since that works so well now. Continue reading →
Last week, I went diving in Cozumel, Mexico. Cozumel is a small island off the coast of Cancun. This is the fourth year I’ve gone diving here. It’s one of my favorite places to dive because it’s relatively easy to travel to (versus something like Little Cayman) and has incredible wildlife. The water was 87°F with ~60ft of visibility. Incredible. I think I’m starting to figure out my underwater…
A few weeks ago, I took three weeks off. I’m really fortunate that I had the flexibility and opportunity to do this. Lately, I’ve been feeling overwhelmed, frustrated, and burnt out at work. I really wanted a break. I planned to do a 165 mile hike around Lake Tahoe but ended up only doing 40 miles there and then about 40 miles in Joshua Tree . (Check out those links for some photos.) Before…
The California Riding and Hiking Trail is a 37.6 mile trail in Joshua Tree National Park. After getting snowed out in Tahoe , I decided to head down to the desert for some warmer hiking. One of the unique things about Joshua Tree is you have to bring your own water. There isn’t any water in the park and if you happened to find some, it’s protected so you’re not allowed to drink it. Before I…
I took three weeks off to hike the Tahoe Rim Trail . It’s a 165 mile trail around Lake Tahoe. Here’s a map . I was really excited about my first thru-hike . I spent a ton of time working on my gear list , doing research, and planning the details of my trip. The trip didn’t go as planned though. After only 40 miles, I decided to head home. It started snowing really hard on the 4th day, and I wasn’t…
With iOS 13 coming out yesterday, there are a lot more folks are experiencing system-wide Dark Mode for the first time. As you navigate around the system apps in Dark Mode, it’s really nice to see everything be dark. The moment you open up an app that doesn’t support Dark Mode, it can be really jarring. Websites in Safari are one of the biggest offenders for me. We can fix this though. I recently…
This week, I hiked the nothern section of the Lost Coast Trail with 3 friends. It’s 24.6 miles from Black Sands Beach to Mattole Beach. We started at the southern end and hiked north. Twenty-four miles in 3 days doesn’t sound that difficult, but it was actually pretty tough. Almost all of the trail is on sand. Hiking a long distance on sand—especially with the slope of the beach into the ocean—is…
I think not caring is impossible. Every time I say “I don’t care,” I’m lying to myself. All I do is care. Lately, I’ve been learning that you can’t choose to not care . It’s like trying not think about something—it just makes you think about it more. Instead, I’ve been focusing on acceptance. At first, this seemed like the same thing, but the difference is important. Lying to yourself that you…
Lately, I’ve been walking to work. I live about 5.5 miles from my office. Generally, it usually takes me about 1.5 hours but varies based on the route. I like to mix it often to see different parts of the city or different views. Most weeks, I’ll walk to work 3–4 times and walk home 1–2 times. I’m at my lowest weight since I’ve been tracking my weight (~5 years). I feel better and plan to keep…
I want be great. I wrote a journal entry about this back in September that I’ve been thinking about recently. Here’s an adapted version of what I wrote with some additional thoughts: I remember I was in a Lyft listening to Big Red Machine thinking how exceptional the song Lyla is. It’s not that I was moved by that song. I mean it’s a good song, but it’s not like the best song ever or anything.…
So I just turned 30 today. It feels the same as yesterday. I remember thinking 30 was so old and everyone over 30 was irrelevant. (The first few places I worked had founders in their 20s for what it’s worth.) I remember thinking I wanted to change the world or whatever before it was too late because I was too old because I was 30. I remember wanting to be considered “great” by whatever definition.…
A friend recently complimented me on my work-life balance. This is definitely something I put some effort into figuring out when I first started working at a large company. It was pretty neat to get feedback that I was doing this well versus that I’m too disconnected, etc. Here’s what I’ve been doing that works for me. One of my main drives for joining a company was not working from home any more.…
So I redid my blog again. I don’t think there is a piece of software I have worked on more over the years. Way back in 2006, I remember constantly redoing my custom WordPress theme over and over again. Since then I rewrote it in PHP a bunch of times , Rails a few times, and then some weird stuff on top of Sinatra for awhile. I tried Jekyll on GitHub pages , WordPress, Roon, Ghost, and probably…
About 6 months ago, I tweeted that I want to be known for being positive. I want to be known for going out of my way to be positive. Hold me to that. — @soffes on 2018-07-17 I think the value positivity is underrated. When you go out of your way to be positive, it really changes your outlook on life. The idea of being known for always being positive is really interesting to me. Continue reading →
A few of my coworkers and I say “Maximum Effort” to each other a lot. Don’t confuse Maximum Effort with perfectionism. per·fec·tion·ism noun refusal to accept any standard short of perfection. Our team is called Design Systems. We make trade-offs on a daily basis. Our job is to maintain a bunch of components, tools, documentation, technical infrastructure, design guidelines, etc. The goal is to…
I ordered a mechanical keyboard from WASD Keyboards awhile back. I got Cherry MX Brown switches. The still have a satisfying click but aren’t insanely loud like greens or blues. After having it for awhile, I decided to get dampers for it to make it even quieter. This made it feel too squishy and I removed them. A few months in, I decided to design new keycaps. It’s fairly cheap to order a new set,…
I spend a lot of time in Terminal. There are several things that I’ll reach for in Terminal before something like Spotlight or Alfred. Here’s an example: The s alias is defined as : This simply opens the current directory in Sublime Text, my editor of choice. I really love how fast this let’s me get started on something. I first ran into this pattern with TextMate’s mate command. So great.…
I’m working on a Mac app that has a color picker in it. Here’s a screenshot: For this to work, I hide the cursor and have a custom view track your mouse movements. (When I say cursor I mean the pointer on screen you control with your mouse, and when I say mouse I mean your physical input device.) I use a full screen, borderless window and NSTrackingArea to do this. Nothing too crazy there. I do…
Most of my projects contain a Rakefile with some common tasks. rake is Ruby’s tool for running tasks. It’s my tool of choice for little scripts, but you could of course do whatever you want. My friend Ayaka even did a talk on scripting with Swift ! Usually my scripts are for something tedious that can be easily automated. Here’s a few examples in my own projects: Some of the most elaborate scripts…
I just spent the last hour trying to figure out why cancelOperation wasn’t getting called in an NSWindowController subclass. At first I tried performKeyEquivalent in the window controller or in a custom NSWindow subclass. That didn’t work. I then resorted to keyDown in the window subclass and that wasn’t getting called. After a long while, I figured out that my window wasn’t becoming key even…
Recently, I added some visual confirmation what something was shared with the system share sheet on iOS. For things like copy or save to camera roll, there isn't visual confirmation that it worked from the system. At first I considered making my own share actions for this and disabling the system ones but that seemed like a lot of work for adding a simple “it worked” to the screen. Then I had this…
I recently made a video mentioning my new mic setup and got a few questions about it. Instead of making a video that just mentions tons of links, I thought I'd write it up. I use a Heil PR40 mic. I've used it for a few years now. It's a pretty great mic for making podcasts and screencasts. The boom arm for my desk is a Heil PL-2T . This is a great arm. I've seen it used with several other mics…
One of my favorite joke Twitter accounts is @wacnt . It tweets things Wolfram Alpha can’t answer. I’ve asked Facebook M to figure out a few of them and it did . Here’s recent one that made me laugh: widest prime less than 4000 when written as a Roman numeral in Times New Roman — @wacnt 2016-02-03 Continue reading →
Lately I've been using a script to set my apps’ bundle version. Add a new Run Script build phase. Change the shell to: Put the following in the source area (right under the shell field): Continue reading →
One of my coworkers shared What Colour Is It in our design Slack channel the other day. It works by taking the current time as 6 digits and making that a hex color . For example, in the header it's #172952 . That's 5:29pm and 52 seconds. Kinda neat. I thought it was super cool so I decided to make it a screensaver. You can download the screensaver here . It's less than 100 lines of code . Give it…
Today, we open sourced a framework for iOS we've been using a ton internally called Static . It's a Swift 2 framework for working with static table views. We use it to power tons of screens in an upcoming project. It's also made prototyping table view-based things super productive. Static's goal is to separate model data from presentation. Row s and Section s are your “view models” for your cells.…
I switched back to the old blog I was using before Roon (this blogging platform I used to run). Right before Roon, I had all of these fun ideas for the nerdy blogging platform that I wanted. The main idea was all of my posts lived in their own repo . This is great for a bunch of reason. Being separate from my blog's source code is nice since it changes every few years. Even when I was blogging on…
Today, I tweeted the following code while I was working on Whiskey : It just checks to see if all of the characters in a string are all the same. Here's the test: It seemed like there would be a better solution. Terry Lewis and several others suggessted putting the characters in a set and counting the set. Here's Terry's solution ( Kelly Sutton suggested making it more consice): Continue reading →
Networking testing is hard. There’s a few approaches. The most common I’ve seen is stubbing requests. OCMock is a common approach . Personally, I’ve never been a fan of mocks and stubs . At some point you just end up testing your mocks and stubs instead of your real code. When it comes to testing, I want unit tests to test logic and integration tests to test compositions. I think focusing on…
I sat down to work on Whiskey the other day and go super side tracked. I have this new master plan to greatly improve Whiskey's markdown parsing, but it's a lot of work so I started procrastiworking. I noticed some bugs in SyntaxKit, what I wrote so Whiskey can do code coloring for things other than Markdown, and decided to start fixing them. Because I was procrastiworking, the logical first step…
Value types are one of my favorite things in Swift. At first, I was resistant. It’s a much different way of thinking. Let’s look at a simple example that really shows the power. I was recently working on a little control for entering in numbers on Apple Watch. Here's the code: It's really straight forward. There's a little bit of math to insert or delete numbers. It's not bad though. Here's how…
Yesterday, Redacted for Mac hit the App Store. It's this little app I've been working on here and there to quickly hide parts of an image. Here's a one minute video demo if you want the quick rundown. All I did was tweet the video about it a few days before it came out and then tweeted that it was out early the morning it was ready. Someone else submitted it to Product Hunt after seeing my tweet.…
Recently, I replaced the headphones I've had for a long time with some new ones. I've used Beyerdynamic DT 770 for years (now discontinued). On a flight last year, someone leaned the chair back in front of me suddenly, the cable got caught, and the jack bent really bad. They cut in out a lot. I realize I could just replace the jack, but I thought it was a good excuse to go nuts. My whole setup…
I spent awhile today trying to convert a regular expression from Ruby to NSRegularExpression. It was being dumb and took me awhile to figure it out. The main this is NSRegularExpression's options. By default Ruby, has AnchorsMatchLines on and NSRegularExpression doesn't. I simply turned that on and had good luck. Here's my specific case ( Jekyll front-matter ): Continue reading →